(57)【特許請求の範囲】
【請求項１】
制御用のプログラムを単位機能毎に細分化したオブジェクトのメソッドを１つのＣＰＵがそれぞれ実行することにより、前記各単位機能を実現するための処理を夫々行う複数の単位処理手段が実現され、
前記ＣＰＵが前記複数の単位処理手段のうちの何れかを実現するメソッドの実行を開始すると、そのメソッドの処理が全て終了するまでは他の単位処理手段を実現するメソッドを実行しないようになっていることにより、前記複数の単位処理手段の何れかが択一的に処理動作を行うようになっており、
更に、前記各単位処理手段が、その処理動作中に何れかの単位処理手段を出力先として示す処理依頼としてのメッセージを出すことにより、そのメッセージの出力先である単位処理手段が処理を行うように構成された自動車用電子制御装置であって、
前記各単位処理手段が出すメッセージとしては、該メッセージの出力先である単位処理手段が処理動作を開始するまでの遅延時間を示すカウント値が含まれない第１種メッセージと、前記カウント値が含まれた第２種メッセージとがあり、
前記単位処理手段が出した前記第１種メッセージを、前記複数の単位処理手段に共通の第１のメッセージ記憶手段に記憶する第１の記憶制御手段と、
前記複数の単位処理手段の何れかが処理動作を終了した時点で、前記第１のメッセージ記憶手段に記憶されている第１種メッセージのうち最初に記憶された第１種メッセージを読み出し、その読み出した第１種メッセージの出力先である単位処理手段に処理を開始させると共に、前記読み出した第１種メッセージを前記第１のメッセージ記憶手段から消去する起動制御手段と、
前記単位処理手段が出した前記第２種メッセージを、前記複数の単位処理手段に共通の第２のメッセージ記憶手段に記憶する第２の記憶制御手段と、
予め定められたイベントが発生する毎に、前記第２のメッセージ記憶手段に記憶されている第２種メッセージの前記カウント値を所定値ずつ減らし、該カウント値が予め定められた設定値に達すると、その第２種メッセージを、前記第１のメッセージ記憶手段に前記第１種メッセージとして記憶し直す遅延制御手段と、
を備えたことを特徴とする自動車用電子制御装置。
【請求項２】
請求項１に記載の自動車用電子制御装置において、
前記第２のメッセージ記憶手段は、前記第２種メッセージを複数個記憶可能に構成されており、
前記遅延制御手段は、前記第２のメッセージ記憶手段に記憶されている全ての第２種メッセージの前記カウント値を、前記イベントが発生する毎に所定値ずつ減らし、前記カウント値が前記設定値となった第２種メッセージを、前記第１のメッセージ記憶手段に前記第１種メッセージとして記憶し直すように構成されていること、
を特徴とする自動車用電子制御装置。
【請求項３】
請求項１又は請求項２に記載の自動車用電子制御装置において、
前記遅延制御手段は、前記第１種メッセージとして記憶し直した第２種メッセージを、前記第２のメッセージ記憶手段から消去するように構成されていること、
を特徴とする自動車用電子制御装置。
【請求項４】
請求項１ないし請求項３の何れかに記載の自動車用電子制御装置において、
前記単位処理手段から、何れかの単位処理手段を示す第２種メッセージの消去要求が出されると、その消去要求に対応した第２種メッセージを前記第２のメッセージ記憶手段から消去する消去手段を備えていること、
を特徴とする自動車用電子制御装置。
【請求項５】
請求項１ないし請求項４の何れかに記載の自動車用電子制御装置において、
前記オブジェクトのメソッドは、所定のプログラム記憶手段に記憶されていると共に、
前記第１種及び第２種メッセージには、該メッセージの出力先である単位処理手段に対応したオブジェクトのメソッドを示す識別コードが含まれており、
前記起動制御手段は、前記識別コードと、該識別コードが示すメソッドの前記プログラム記憶手段における格納位置を表わす格納位置情報とを、対応付けて記憶した格納位置記憶手段を備えると共に、前記第１のメッセージ記憶手段から読み出した第１種メッセージに含まれている識別コードが示すメソッドの前記プログラム記憶手段における格納位置を、前記格納位置記憶手段の記憶内容に基づき特定することにより、前記読み出した第１種メッセージの出力先である単位処理手段に処理を開始させるよう構成されていること、
を特徴とする自動車用電子制御装置。
【請求項６】
請求項５に記載の自動車用電子制御装置において、
前記格納位置情報は、前記プログラム記憶手段の記憶領域を示すアドレスであること、
を特徴とする自動車用電子制御装置。
【請求項７】
請求項１ないし請求項６の何れかに記載の自動車用電子制御装置において、
前記複数の単位処理手段のうち、第１の単位処理手段が、その処理動作中に、第２の単位処理手段に対する処理依頼としての第２の第１種メッセージと、第３の単位処理手段に対する処理依頼としての第３の第１種メッセージとを、第２の第１種メッセージ、第３の第１種メッセージの順に出力し、その各第１種メッセージが前記第１のメッセージ記憶手段に順次記憶され、
前記起動制御手段は、前記第１の単位処理手段が処理動作を終了した時点で、前記第１のメッセージ記憶手段に記憶されている前記第２の第１種メッセージを読み出して、該第２の第１種メッセージの出力先である前記第２の単位処理手段に処理動作を開始させ、該第２の単位処理手段の処理動作が終了した時点で、前記第１のメッセージ記憶手段に記憶されている前記第３の第１種メッセージを読み出して、該第３の第１種メッセージの出力先である前記第３の単位処理手段に処理動作を開始させること、
を特徴とする自動車用電子制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向のプログラムに従って制御対象を制御する電子制御装置に関する。
【０００２】
【従来の技術】
従来より、例えば車両のエンジンを制御する電子制御装置においては、マイクロコンピュータ（詳しくは、マイクロコンピュータのＣＰＵ）によって実行されるエンジン制御用のプログラムを、制御の種類毎に作成するようにしていた。例えば燃料噴射制御に関しては、エンジンの回転に同期した通常の噴射制御，エンジンの回転とは非同期の噴射制御，及び高回転時の燃料カット制御といった具合に、制御の種類毎（以下、制御毎という）にプログラムを夫々作成していた。
【０００３】
しかしながら、制御毎にプログラムを作成したのでは、各プログラムに共通部分が多く含まれることとなるため、プログラムを格納するメモリ資源やプログラムの開発時間に無駄が生じてしまう。例えば、上記燃料噴射制御の例では、各制御毎のプログラム中に、インジェクタ（燃料噴射弁）を駆動するための処理部分が重複して設けられることとなる。また、各プログラムに共通部分が多いため、その共通部分に関わる制御仕様を変更しなければならない場合には、各プログラムの中から仕様変更部分に関係するプログラムを捜し出して修正する必要があり、プログラム開発に多大な時間を要してしまうこととなっていた。
【０００４】
そこで、本発明者は、この種の電子制御装置においても、パーソナルコンピュータなどの場合と同様に、制御プログラムをオブジェクト指向によって作成する（プログラミングする）ことを試みている。
オブジェクト指向とは、人間が行動するときの如く操作対象に注目して仕事を進めるという考え方を、コンピュータシステムにモデル化したものであり、このオブジェクト指向のプログラミングでは、プログラムの処理を、オブジェクトという単位で考える。
【０００５】
即ち、オブジェクトは、データとそのデータを処理する手続きである“メソッド”と呼ばれるプログラムとを、一まとめにしたソフトウェアモジュールであり、オブジェクト指向のプログラミングでは、制御プログラムの全機能を部品毎などの単位機能毎に細分化して、その単位機能毎にオブジェクトを用意する。そして、オブジェクト指向のプログラミングでは、オブジェクト間でメッセージのやり取りを行う、所謂オブジェクト間メッセージ通信の考え方を利用して、各オブジェクトが結合される。
【０００６】
ここで、エンジンのアイドル回転数を制御するためのプログラムを、オブジェクト指向に基づき作成した場合の一例について、図２９を用いて説明する。
尚、図２９は、エンジンのアイドル回転数制御に関する機能を細分してオブジェクト化し、これに各オブジェクト間でのメッセージのやり取りを加えて示したメッセージシーケンスチャートである。そして、このメッセージシーケンスチャートでは、オブジェクトを上下方向の線で示し、そのオブジェクト間でのメッセージのやり取りを左右の矢印で示している。また、オブジェクトを示す線の上にある長方形の枠は、そのオブジェクトの処理を表している。
【０００７】
一方、本明細書において、「オブジェクトが…する。」や「オブジェクトは…する。」といったオブジェクトを主語とした動作表現は、実際には、マイクロコンピュータのＣＰＵがオブジェクトのメソッドに従って動作する（換言すれば、ＣＰＵがオブジェクトのメソッドを実行する）ことで実現される機能手段（即ち、本発明における単位処理手段）が、上記「…」の動作を行うことを示している。また、「オブジェクトが動作する」とは、マイクロコンピュータのＣＰＵが、そのオブジェクトのメソッドを実行することを示している。
【０００８】
まず最初に、図２９に示した各オブジェクトの機能について説明する。
ＩＳＣオブジェクトは、エンジンの水温値などに基づき、エンジン回転数を最適なアイドル回転数にするための目標スロットル開度を算出するオブジェクトであり、水温センサオブジェクトは、エンジンの水温を検出する水温センサからのアナログ信号をＡＤ変換したデジタル値を、水温値に変換するオブジェクトである。そして、ＡＤ変換器オブジェクトは、水温センサからのアナログ信号をデジタル値に変換（ＡＤ変換）するためのＡＤ変換器を制御するオブジェクトであり、スロットルコントローラオブジェクトは、エンジンのスロットル弁を、ＩＳＣオブジェクトによって算出された目標スロットル開度となるように制御するオブジェクトである。
【０００９】
次に、図２９の各オブジェクトによって実現される処理の内容について説明する。
まず、アイドル回転数制御タイミングになるとＩＳＣオブジェクトが動作を開始する（つまり、ＣＰＵがＩＳＣオブジェクトのメソッドの実行を開始する）。そして、図２９の▲１▼に示すように、ＩＳＣオブジェクトが、水温センサオブジェクトに水温取得要求のメッセージを送る。
【００１０】
すると、水温センサオブジェクトが動作して、図２９の▲２▼に示すように、ＡＤ変換器オブジェクトに水温ＡＤ値取得要求のメッセージを送る。そして、その水温ＡＤ値取得要求のメッセージに伴い、ＡＤ変換器オブジェクトが動作して、水温センサからのアナログ信号をデジタル信号に変換する演算を行う。
【００１１】
ＡＤ変換器オブジェクトは、上記演算を終了した後、図２９の▲３▼に示すように、水温センサオブジェクトに水温ＡＤ値取得応答のメッセージ（即ち、水温センサのデジタル変換が終了したというメッセージ）を送る。
すると、水温センサオブジェクトが、ＡＤ変換器オブジェクトの演算結果に基づいて水温値を算出し、その算出後、図２９の▲４▼に示すように、ＩＳＣオブジェクトに水温取得応答のメッセージ（即ち、水温値の算出が終了したというメッセージ）を送る。
【００１２】
そして、上記水温取得応答のメッセージに伴い、ＩＳＣオブジェクトが、上記算出された水温値に基づいて目標スロットル開度を算出し、その算出後、ＩＳＣオブジェクトは、図２９の▲５▼に示すように、スロットルコントローラオブジェクトにスロットル設定要求のメッセージ（即ち、目標スロットル開度を算出したことを示すメッセージ）を送る。
【００１３】
すると、スロットルコントローラオブジェクトが動作して、エンジンのスロットル弁を、上記算出された目標スロットル開度となるように制御し、これにより、エンジン回転数が最適なアイドル回転数に制御される。
このように、オブジェクト指向のプログラムでは、各オブジェクトが何れかのオブジェクトに対し処理依頼としてのメッセージを出すことにより、そのメッセージの出力先であるオブジェクトが動作する、といった仮想的なオブジェクト間メッセージ通信により、各オブジェクトの処理順序が決定される。
【００１４】
そして、オブジェクト指向によってプログラムを作成すれば、プログラムの共通部分をまとめ易くなり、制御毎にプログラムを作成する場合と比較して、制御仕様の変更時にもプログラムの修正が非常に容易となる。
【００１５】
【発明が解決しようとする課題】
しかしながら、この種の電子制御装置において、その制御プログラムをオブジェクト指向で作成しようとしても、各オブジェクト間でのメッセージのやり取り（即ち、オブジェクト間メッセージ通信）を実現させるための有効な手段がなかった。
【００１６】
尚、従来より知られているフラグチェックの手法と関数コールの手法とを、オブジェクト間メッセージ通信に適用することも考えられるが、以下に説明するように、両手法共に大きな欠点がある。
まず、フラグを用いた手法では、図３０に示すように、無限ループのメインルーチンを設け、そのメインルーチンの中で、各オブジェクトに対応するフラグが立っているか否かを判定する。そして、フラグが立っていると判定した場合には、そのフラグに対応するオブジェクトの処理（つまり、そのオブジェクトのメソッド）を実行し、フラグが立っていないと判定した場合には、そのフラグに対応するオブジェクトの処理を飛び越えて、次のフラグの判定を行うようにする。
【００１７】
具体的には、図３０に例示するように、各オブジェクトＡ，Ｂ，Ｃに夫々対応するフラグＦＡ，ＦＢ，ＦＣが立っていない場合には、メインルーチンのステップ（以下、単に「Ｓ」と記す）１０〜Ｓ３０の全てで否定判定される（Ｓ１０〜Ｓ３０：ＮＯ）。そして、例えばオブジェクトＡの処理が起動されて、その処理中でオブジェクトＢに対応するフラグＦＢが立てられると（ＦＢ←１）、オブジェクトＡの処理が終了して、その後メインルーチンのＳ３０でフラグＦＢが立っていると判定されると（Ｓ３０：ＹＥＳ）、オブジェクトＢの処理が実行される。また、オブジェクトＢの処理中でオブジェクトＣに対応するフラグＦＣが立てられると（ＦＣ←１）、オブジェクトＢの処理が終了して、その後メインルーチンのＳ２０でフラグＦＣが立っていると判定されると（Ｓ２０：ＹＥＳ）、オブジェクトＣの処理が実行される。
【００１８】
つまり、この手法では、各オブジェクトの処理中にフラグを立てることで、何れかのオブジェクトに対する処理依頼としてのメッセージが出されることとなる。
しかしながら、フラグを用いる上記の手法では、フラグの監視順序がプログラムの設計時に決ってしまい、１つのオブジェクトの処理を行うために別のオブジェクトに対応するフラグを判定しなければならず、無駄な処理が多くなる。例えば、図３０の例では、オブジェクトＡの次にオブジェクトＢの処理を行う場合に、メインルーチンのＳ１０〜Ｓ３０までの処理を余分に行う必要が生じる。尚、図３０における点線は、オブジェクトＡ〜Ｃ以外の他のオブジェクトに対応するフラグを判定するための処理が、更に存在していることを示している。
【００１９】
つまり、フラグを用いた手法の場合には、各オブジェクトの処理を、イベントドリブン（即ち、処理要求が発生・終了したことにより動作が引き起こされること）で行うことができず、リアルタイム性に欠けてしまう。
次に、関数コールを用いた手法では、図３１に示すように、オブジェクトのメソッド内に、次に処理したいオブジェクトのメソッドをコールする命令を、書き込んでおくようにする。そして、オブジェクト間のメッセージ通信を次々に行いたい場合には、コールされるオブジェクトのメソッド内に、他のオブジェクトのメソッドをコールする命令を予め書き込んでおく。
【００２０】
具体的には、図３１に例示するように、オブジェクトＡのメソッドの実行中に、オブジェクトＢのメソッドをコールし、更に、オブジェクトＢのメソッドの実行中に、オブジェクトＣのメソッドをコールする。
つまり、この手法では、関数コールにより、他のオブジェクトに対する処理依頼としてのメッセージが出されることとなる。
【００２１】
しかしながら、関数コールを用いる上記の手法では、コールする側のメソッドの実行を一時中断し、コールされる側のメソッドを実行した後で、中断していたメソッドの実行を再開することとなる。よって、中断していたメソッドの実行を再開するためには、中断直前のマイクロコンピュータの内部状態（即ち、プログラムカウンタや各種レジスタの値）を、ＲＡＭのスタック領域に記憶しておかなければならず、ＲＡＭの記憶領域を多く消費してしまう。特に、ネスティング（即ち、多重の層に形成されるコールの組み合せ）の数が多くなればなるほど、消費されるＲＡＭの記憶領域が顕著に多くなってしまい、電子制御装置のようにメモリ資源が限られた装置では限界がある。
【００２２】
そこで、本発明者は、上記問題に鑑みて、各オブジェクトが出した何れかのオブジェクトへのメッセージを記憶する記憶手段と、オブジェクトの処理が終了した時点で、上記記憶手段に記憶されているメッセージのうち最初に記憶されたメッセージを読み出し、そのメッセージの出力先であるオブジェクトの処理を開始させると共に、その読み出したメッセージを上記記憶手段から消去する起動制御手段と、を設けることを新規に考えた。
【００２３】
そして、このような記憶手段及び起動制御手段を設けた電子制御装置によれば、各オブジェクトが何れかのオブジェクトにメッセージを出すと、そのメッセージが上記記憶手段に一旦記憶され、そのメッセージを出したオブジェクトの処理が終了すると、直ちに、上記記憶されたメッセージの出力先であるオブジェクトの処理が行われることとなる。
【００２４】
よって、この新規考案の電子制御装置によれば、オブジェクト間メッセージ通信にフラグチェックの手法を適用した場合の如くリアルタイム性に欠けることがなく、各オブジェクトの処理（即ち、各オブジェクトのメソッドの実行）をイベントドリブンで行うことができ、しかも、オブジェクト間メッセージ通信に関数コールの手法を適用した場合のように、実行中のオブジェクトの処理を中断して他のオブジェクトの処理を行う、といったものではないため、各オブジェクトの処理を、多くのメモリ資源を消費することなく行うことができる。つまり、この電子制御装置では、メッセージのみを記憶すれば良く、関数コールの手法を適用した場合と比較して、記憶すべき情報量が格段に少なくて済むのである。
【００２５】
但し、上記新規考案の電子制御装置においても、未だ改良の余地があり、ある時点から所定時間が経過した後に特定のオブジェクトの処理を開始する、といった時間待ち処理を、容易に且つ効率的に実現することができなかった。また更に、こうした時間待ち処理を応用したタイムアウト処理（即ち、ある時点から所定時間が経過するまでに、監視対象の処理が行われないと、特定のオブジェクトの処理を開始する、といった時間監視を伴う処理）を、容易に実現することもできなかった。
【００２６】
例えば、上記時間待ち処理を実現しようとした場合、単に所定時間だけを消費し且つ処理の最後に上記特定のオブジェクトへメッセージを出す時間消費用のオブジェクトを用意して、何れかのオブジェクトから上記時間消費用のオブジェクトへメッセージを出すようにすれば、その時間消費用オブジェクトの処理が開始されて、該オブジェクトでの時間消費が終了すると、上記特定のオブジェクトの処理が開始されることとなる。
【００２７】
しかし、このようにしたのでは、時間消費用オブジェクトで時間を消費している間、他の処理を行うことができず、マイクロコンピュータを時間的に効率良く利用することができない。その上、複数の時間待ち処理を実施することもできない。
【００２８】
また、タイムアウト処理を実現しようとした場合には、ある時点から所定時間が経過するまでに監視対象の処理によって計時動作がキャンセルされないと、実行対象を特定のオブジェクトのメソッドに切り替える、といったタイマ割り込み機構のような特別な手段が別途必要になってしまう。
【００２９】
本発明は、上記のような技術背景からなされたものであり、制御用のプログラムを単位機能毎に細分化した各オブジェクトの処理を、リアルタイムに且つ多くのメモリ資源を消費することなく行うことができると共に、時間待ち処理をも容易に実現することのできる電子制御装置を提供することを目的としている。
【００３０】
【課題を解決するための手段、及び発明の効果】
まず、請求項１に記載の本発明の自動車用電子制御装置（以下単に、電子制御装置という）は、制御用のプログラムを単位機能毎に細分化したオブジェクトのメソッドに従って、前記各単位機能を実現するための処理を夫々行う複数の単位処理手段を備えている。
【００３１】
尚、単位処理手段とは、前述したように、マイクロコンピュータのＣＰＵがオブジェクトのメソッドに従って動作する（換言すれば、ＣＰＵがオブジェクトのメソッドを実行する）ことで実現される機能手段である。つまり、マイクロコンピュータのＣＰＵがオブジェクトのメソッドを実行することにより、そのオブジェクトに割り振られた機能を実現するための処理が行われる。
また特に、本発明の電子制御装置では、前記細分化したオブジェクトのメソッドを１つのＣＰＵがそれぞれ実行することで、前記複数の単位処理手段が実現される。
【００３２】
そして、本発明の電子制御装置では、その前提として、前記１つのＣＰＵが複数の単位処理手段のうちの何れかを実現するメソッドの実行を開始すると、そのメソッドの処理が全て終了するまでは他の単位処理手段を実現するメソッドを実行しないようになっていることにより、複数の単位処理手段の何れかが択一的に処理動作を行うようになっており、更に、各単位処理手段が、その処理動作中に何れかの単位処理手段を出力先として示す処理依頼としてのメッセージを出すことにより、そのメッセージの出力先である単位処理手段が処理を行う。
【００３３】
そして更に、各単位処理手段が出すメッセージとしては、そのメッセージの出力先である単位処理手段が処理動作を開始するまでの遅延時間を示すカウント値が含まれていない第１種メッセージと、前記カウント値が含まれた第２種メッセージとがある。
【００３４】
ここで、本発明の電子制御装置は、１つ目の特徴として、単位処理手段が出した第１種メッセージを複数の単位処理手段に共通の第１のメッセージ記憶手段に記憶する第１の記憶制御手段と、起動制御手段とを備えている。そして、起動制御手段は、複数の単位処理手段の何れかが処理動作を終了した時点で、第１のメッセージ記憶手段に記憶されている第１種メッセージのうち最初に記憶された第１種メッセージを読み出し、その読み出した第１種メッセージの出力先である単位処理手段に処理を開始させると共に、その読み出した第１種メッセージを第１のメッセージ記憶手段から消去する。
【００３５】
よって、何れかの単位処理手段が処理動作を開始し、その処理動作の途中で他の単位処理手段へ第１種メッセージを出すと、その第１種メッセージは、第１の記憶制御手段により、第１のメッセージ記憶手段に記憶される。そして、第１種メッセージを出した単位処理手段の処理動作が終了すると、その時点から、上記記憶された第１種メッセージの出力先である単位処理手段の処理が開始されることとなる。このため、オブジェクトを主体として見れば、「発明が解決しようとする課題」の欄で述べたように、処理動作中のオブジェクトが何れかのオブジェクトに第１種メッセージを出すと、その第１種メッセージが第１のメッセージ記憶手段に一旦記憶され、その第１種メッセージを出したオブジェクトの処理が終了すると、直ちに、上記記憶された第１種メッセージの出力先であるオブジェクトの処理が行われることとなる。
【００３６】
また例えば、何れかの単位処理手段が、その処理動作中に複数の単位処理手段の各々へ第１種メッセージを順次出した場合には、その各第１種メッセージが第１の記憶制御手段により第１のメッセージ記憶手段に順次記憶される。そして、第１種メッセージを出した単位処理手段の処理動作が終了すると、上記記憶された複数の第１種メッセージの出力先である各単位処理手段の処理が、第１種メッセージの記憶順（出力順）に行われることとなる。
【００３７】
このように、本発明の電子制御装置では、第１のメッセージ記憶手段、第１の記憶制御手段、及び起動制御手段を備えることにより、各オブジェクトの処理（各オブジェクトのメソッドの実行）を、リアルタイムに且つ多くのメモリ資源を消費することなく行うことができる。
【００３８】
つまり、オブジェクト間メッセージ通信にフラグチェックの手法を適用した場合の如くリアルタイム性に欠けることなく、各オブジェクトの処理をイベントドリブンで行うことができ、しかも、オブジェクト間メッセージ通信に関数コールの手法を適用した場合のように、実行中のオブジェクトの処理を中断して他のオブジェクトの処理を行う、といったものではないため、各オブジェクトの処理を、多くのメモリ資源を消費することなく行うことができる。即ち、関数コールの手法を適用した場合には、前述したように、マイクロコンピュータの内部状態（プログラムカウンタや各種レジスタの値）を記憶しなければならないが、本発明によれば、メッセージのみを記憶すれば良く、記憶すべき情報量が格段に少なくて済むのである。
【００３９】
また、本発明の電子制御装置によれば、複数系統の処理を交互に効率良く行うこともできる。
例えば、何れかの単位処理手段が、その処理動作の途中で、他の単位処理手段Ｘ１に対して第１種メッセージｍｘ１を出し、更に続いて、処理系統の異なる他の単位処理手段Ｙ１に対し第１種メッセージｍｙ１を出したとする。
【００４０】
すると、その２つの第１種メッセージｍｘ１，ｍｙ１は、その出力順（つまり、ｍｘ１→ｍｙ１の順）に第１のメッセージ記憶手段に記憶される。
そして、上記第１種メッセージｍｘ１，ｍｙ１を出した単位処理手段の処理動作が終了すると、その時点で、第１のメッセージ記憶手段に記憶されている第１種メッセージｍｘ１，ｍｙ１のうち、最初に記憶された方の第１種メッセージｍｘ１が読み出されて、その第１種メッセージｍｘ１の出力先である単位処理手段Ｘ１の処理が開始されると共に、その読み出された第１種メッセージｍｘ１が第１のメッセージ記憶手段から消去される。
【００４１】
ここで、単位処理手段Ｘ１が、その処理動作の途中で他の単位処理手段Ｘ２に第１種メッセージｍｘ２を出すと、その第１種メッセージｍｘ２が第１のメッセージ記憶手段に記憶されるため、第１のメッセージ記憶手段には、２つの第１種メッセージｍｙ１，ｍｘ２が、ｍｙ１→ｍｘ２の順で記憶されていることとなる。
【００４２】
よって、単位処理手段Ｘ１の処理動作が終了すると、その時点で、第１のメッセージ記憶手段に記憶されている第１種メッセージｍｙ１，ｍｘ２のうち、最初に記憶された方の第１種メッセージｍｙ１が読み出されて、その第１種メッセージｍｙ１の出力先である単位処理手段Ｙ１の処理が開始されると共に、その読み出された第１種メッセージｍｙ１が第１のメッセージ記憶手段から消去される。
【００４３】
そして、単位処理手段Ｙ１が、その処理動作の途中で他の単位処理手段Ｙ２に第１種メッセージｍｙ２を出すと、その第１種メッセージｍｙ２が第１のメッセージ記憶手段に記憶され、第１のメッセージ記憶手段には、２つのメッセージｍｘ２，ｍｙ２が、ｍｘ２→ｍｙ２の順で記憶されることとなる。
【００４４】
その後、単位処理手段Ｙ１の処理動作が終了すると、その時点で、第１のメッセージ記憶手段に記憶されている第１種メッセージｍｘ２，ｍｙ２のうち、最初に記憶された方の第１種メッセージｍｘ２が読み出されて、その第１種メッセージｍｘ２の出力先である単位処理手段Ｘ２の処理が開始されると共に、その読み出された第１種メッセージｍｘ２がメッセージ記憶手段から消去される。
【００４５】
そして更に、単位処理手段Ｘ２の処理動作が終了すると、第１のメッセージ記憶手段に記憶されている第１種メッセージｍｙ２が読み出されて、その第１種メッセージｍｙ２の出力先である単位処理手段Ｙ２の処理が開始されると共に、その読み出された第１種メッセージｍｙ２が第１のメッセージ記憶手段から消去される。
【００４６】
よって、単位処理手段Ｘ１が単位処理手段Ｘ２に第１種メッセージを出し、また、単位処理手段Ｙ１が単位処理手段Ｙ２に第１種メッセージを出す、といった２系統の処理を進めて行く場合に、単位処理手段Ｘ１，Ｘ２の処理系統と単位処理手段Ｙ１，Ｙ２の処理系統とを、Ｘ１→Ｙ１→Ｘ２→Ｙ２の順に交互に行うことができるようになるのである。
また、こうした動作は、請求項７に記載の電子制御装置によって実現できる。この場合、前述の説明では、第１種メッセージｍｘ１と第１種メッセージｍｙ１を出す単位処理手段が第１の単位処理手段に該当し、単位処理手段Ｘ１が第２の単位処理手段に該当し、第１種メッセージｍｘ１が第２の第１種メッセージに該当し、単位処理手段Ｙ１が第３の単位処理手段に該当し、第１種メッセージｍｙ１が第３の第１種メッセージに該当する。
【００４７】
ここで特に、本発明の電子制御装置は、２つ目の大きな特徴として、単位処理手段が出した前記第２種メッセージを複数の単位処理手段に共通の第２のメッセージ記憶手段に記憶する第２の記憶制御手段と、遅延制御手段とを備えている。そして、遅延制御手段は、予め定められたイベントが発生する毎に、第２のメッセージ記憶手段に記憶されている第２種メッセージのカウント値を所定値ずつ減らし、該カウント値が予め定められた設定値に達すると、その第２種メッセージを、第１のメッセージ記憶手段に第１種メッセージとして記憶し直す。
【００４８】
よって、何れかの単位処理手段が、その処理動作中に自己或いは他の単位処理手段へ第２種メッセージ（処理動作開始までの遅延時間を示すカウント値が含まれたメッセージ）を出すと、その第２種メッセージは、第２の記憶制御手段により、第２のメッセージ記憶手段に記憶される。そして、第２のメッセージ記憶手段に記憶された第２種メッセージのカウント値は、遅延制御手段により、予め定められたイベントが発生する毎に所定値ずつ減らされ、該カウント値が予め定められた設定値になると、その第２種メッセージは、遅延制御手段により、第１のメッセージ記憶手段に第１種メッセージとして記憶し直される。すると、その記憶し直された第１種メッセージは、単位処理手段から出力される本来の第１種メッセージと全く同様に、起動制御手段によって第１のメッセージ記憶手段から読み出されて、そのメッセージの出力先である単位処理手段の処理が開始されることとなる。
【００４９】
このため、オブジェクトを主体として見れば、何れかのオブジェクトが第２種メッセージを出すと、その第２種メッセージのカウント値に応じた時間が経過してから（具体的には、カウント値をＰとし、それを減らしていく所定値をＮm とし、判定する設定値をＮS とし、イベントの発生間隔をｔとすると、「ｔ×（Ｐ−ＮS ）／Ｎm 」の時間が経過してから）、該第２種メッセージの出力先であるオブジェクトの処理が行われることとなる。
【００５０】
尚、所定値Ｎm 及び設定値ＮS は任意に設定すれば良いが、例えば、所定値Ｎm を“１”とし、設定値ＮS を“０”とすれば、何れかの単位処理手段から第２種メッセージが出されると、その第２種メッセージに含まれていたカウント値の回数だけイベントが発生した後に、該第２種メッセージの出力先である単位処理手段の処理が開始されることとなる。また、遅延制御手段がカウント値の減算に用いる上記イベントとしては、予め定められた時間毎に発生するイベント（例えばクロック信号やマイクロコンピュータ内で所定時間毎に発生するタイマ割り込み信号）が一般的であるが、時間とは直接関係が無い時間に非同期のイベントを採用することもできる。そして、時間に非同期のイベントとしては、例えば、エンジン制御用の電子制御装置の場合、エンジンのクランク軸が所定角度回転する毎に回転センサから出力されるパルス信号などが考えられる。
【００５１】
このような本発明の電子制御装置によれば、各オブジェクトの処理を、リアルタイムに且つ多くのメモリ資源を消費することなく行うことできるだけでなく、第２のメッセージ記憶手段、第２の記憶制御手段、及び遅延制御手段を備えているため、ある時点から所定時間が経過した後に特定のオブジェクトの処理（単位処理手段の処理）を開始する、といった時間待ち処理をも容易に実現することができる。つまり、第２種メッセージの出力先の単位処理手段の処理を、その第２種メッセージに含まれるカウント値に応じた時間の経過後に行うことができるからである。
【００５２】
しかも、本発明の電子制御装置によれば、第２のメッセージ記憶手段に記憶されている第２種メッセージのカウント値が設定値ＮS に達するまでの間に、何れかの単位処理手段から第１種メッセージが出された場合には、前述した第１のメッセージ記憶手段、第１の記憶制御手段、及び起動制御手段の作用により、その第１種メッセージの出力先である単位処理手段の処理をイベントドリブンで順次行うことができるため、処理を進めていく上で無駄な時間消費が生じることもない。
【００５３】
次に、請求項２に記載の電子制御装置では、前述した請求項１に記載の電子制御装置において、第２のメッセージ記憶手段が、単位処理手段の出した第２種メッセージを複数個記憶可能に構成されている。そして、遅延制御手段は、第２のメッセージ記憶手段に記憶されている全ての第２種メッセージのカウント値を、前記イベントが発生する毎に所定値ずつ減らし、カウント値が前記設定値となった第２種メッセージを、第１のメッセージ記憶手段に第１種メッセージとして記憶し直す。
【００５４】
このため、遅延制御手段は、第２のメッセージ記憶手段に複数の第２種メッセージが記憶されている状況下にて、複数の単位処理手段の処理開始を遅らせるための各時間を、並列に計時することとなる。
よって、請求項２に記載の電子制御装置によれば、複数系統の時間待ち処理を容易に行うことができるようになる。
【００５５】
ところで、上記請求項１，２に記載の電子制御装置において、遅延制御手段は、請求項３に記載の如く、第１のメッセージ記憶手段に第１種メッセージとして記憶し直した第２種メッセージを、第２のメッセージ記憶手段から消去するように構成すれば、第２のメッセージ記憶手段内に不用となった第２種メッセージが残ることを防止でき、メモリ資源を有効に活用することができる。
【００５６】
次に、請求項４に記載の電子制御装置では、前述した請求項１〜３に記載の電子制御装置に対し、消去手段を備えている。そして、その消去手段は、単位処理手段から、何れかの単位処理手段を示す第２種メッセージの消去要求が出されると、その消去要求に対応した第２種メッセージを、第２のメッセージ記憶手段から消去する。
【００５７】
このため、請求項４に記載の電子制御装置によれば、ある時点から所定時間が経過するまでに、監視対象の処理が行われないと、特定の処理を開始する、といったタイムアウト処理を、タイマ割り込み機構のような特別な手段を設けることなく、容易に実現することができる。
【００５８】
つまり、ある単位処理手段Ｘが、上記特定の処理を行う単位処理手段Ｙへの第２種メッセージＭＳｙを出し、また、監視対象の処理を行う単位処理手段Ｚが、例えば処理の最後に上記単位処理手段Ｙを示す第２種メッセージＭＳｙの消去要求を出すようにしておけば、上記単位処理手段Ｘが第２種メッセージＭＳｙを出してから、その第２種メッセージＭＳｙのカウント値に対応した時間が経過するまでの間に、監視対象の単位処理手段Ｚの処理が行われなければ、単位処理手段Ｙによる特定の処理が行われることとなる。
【００５９】
一方、この種の電子制御装置において、オブジェクトのメソッドは、一般に、記憶内容の書き換えが不能な通常のＲＯＭ（所謂マスクＲＯＭ）や記憶内容の書き換えが可能なＥＥＰＲＯＭなどからなるプログラム記憶手段に記憶されるが、この場合に、請求項５に記載の如く構成すれば、より大きな効果を得ることができる。
【００６０】
即ち、請求項５に記載の電子制御装置では、前述した請求項１〜４に記載の電子制御装置において、オブジェクトのメソッドが、所定のプログラム記憶手段に記憶されていると共に、各単位処理手段が出す第１種メッセージ及び第２種メッセージには、そのメッセージの出力先である単位処理手段に対応したオブジェクトのメソッドを示す識別コードが含まれている。
【００６１】
そして更に、起動制御手段は、前記識別コードと、その識別コードが示すメソッドのプログラム記憶手段における格納位置を表わす格納位置情報とを、対応付けて記憶した格納位置記憶手段を備えており、第１のメッセージ記憶手段から読み出した第１種メッセージに含まれている識別コードが示すメソッドのプログラム記憶手段における格納位置を、上記格納位置記憶手段の記憶内容に基づき特定することにより、前記読み出した第１種メッセージの出力先である単位処理手段に処理を開始させるよう構成されている。
【００６２】
このような請求項５に記載の電子制御装置によれば、プログラムの設計変更等に伴うオブジェクトの修正によって、そのオブジェクトを構成するメソッドのプログラム記憶手段における格納位置が変化した場合には、格納位置記憶手段に記憶される情報、即ち、識別コードに対応付けて記憶されるメソッドの格納位置情報を変更するだけで、対応することができるようになる。
【００６３】
例えば、オブジェクト間メッセージ通信に関数コールの手法を適用した場合には、格納位置が変化したオブジェクトのメソッドをコールする方のオブジェクトも修正しなければならないが、請求項５に記載の電子制御装置によれば、そのような手間は無い。つまり、プログラム全体における各オブジェクトの独立性が高くなり、システム全体として設計変更が容易なものとなる。
【００６４】
尚、前記格納位置情報としては、請求項６に記載のように、プログラム記憶手段の記憶領域を示すアドレスを採用すれば良く、このようにすれば、オブジェクトのメソッドの格納位置を容易に特定することができる。また、例えば、プログラム記憶手段が複数のＲＯＭからなる場合には、どのＲＯＭのどのアドレスといった情報を、格納位置情報として採用すれば良い。
【００７３】
【発明の実施の形態】
以下、本発明が適用された実施形態の電子制御装置について図面を用いて説明する。
まず図１は、自動車に搭載されて内燃機関型エンジンの制御を行う実施形態の電子制御装置（以下、ＥＣＵという）１のハードウェア構成を表すブロック図である。
【００７４】
図１に示すように、ＥＣＵ１は、エンジンのクランク軸が所定角度（例えば３０°ＣＡ）回転する毎にパルス状の信号を出力する回転センサやエンジンの冷却水の温度に応じたアナログ信号を出力する水温センサなどの、各種センサからの信号を入力する入力回路２と、当該ＥＣＵ１に通信線９を介して接続される故障診断用の外部装置（以下、テスタという）８との間でデータ通信を行うための通信回路７と、入力回路２からの信号に基づきエンジンに対する最適制御量を演算して、その演算結果に基づき制御信号を出力すると共に、当該ＥＣＵ１に上記テスタ８が接続された場合には、通信回路７を介してテスタ８と故障診断用のデータ通信を行うＣＰＵ（中央処理装置）３と、ＣＰＵ３からの制御信号を受けて、エンジンのスロットル弁やインジェクタ（燃料噴射弁）等のアクチュエータを駆動する出力回路４と、ＣＰＵ３が実行するプログラム及びそのプログラムの実行時に参照されるデータを格納する不揮発性のＲＯＭ５と、ＣＰＵ３の演算結果等を一時格納する揮発性のＲＡＭ６とを備えている。
【００７５】
そして、このＥＣＵ１においては、上記ＣＰＵ３，ＲＯＭ５，及びＲＡＭ６によりマイクロコンピュータの主要部が構成されており、図示はされていないが、そのマイクロコンピュータには、ＣＰＵ３が入力回路２及び出力回路４との間で信号の入出力を行うためのＩ／Ｏポートや、ＣＰＵ３が通信回路７を介してテスタ８とデータ通信を行うための受信レジスタ及び送信レジスタなどからなるシリアル通信用インタフェースも備えられている。また、ＲＡＭ６の一部の記憶領域は、ＥＣＵ１への電源供給が遮断された状態においても記憶内容を保持可能なバックアップＲＡＭとして設定されている。
【００７６】
ところで、本実施形態のＥＣＵ１において、ＲＯＭ５に格納されてＣＰＵ３により実行される制御用のプログラム（詳しくは、テスタ８との間の通信制御用及びエンジン制御用のプログラム）及びデータは、オブジェクト指向によってプログラミングされている。そのため、本実施形態のＥＣＵ１では、前述したオブジェクト間メッセージ通信を実現するための手段として、図２に示すメッセージ配送制御部１０を備えている。
【００７７】
尚、図２は、ハードウェア構成を示すものではなく、ＲＯＭ５に格納された制御用の各オブジェクトと、メッセージ配送制御部１０との関係を示す概念図である。そして、メッセージ配送制御部１０は、ハードウェアによって構成されているのではなく、ＣＰＵ３がＲＯＭ５に格納されたメッセージ配送制御用のオブジェクトに従い動作することで実現される機能手段である。
【００７８】
そこで、以下では、メッセージ配送制御部１０について、テスタ８との間でデータ通信を行うためのプログラム部分を中心に説明する。
まず、図２に示すように、ＲＯＭ５には、テスタ８とのデータ通信を制御するためのオブジェクトとして、テスタ８へ送信すべきデータを用意するサービスオブジェクトＯＢ１と、テスタ８との間で信号をやり取りする通信ハンドラオブジェクトＯＢ２と、回転センサからの信号に基づきエンジン回転数を算出する回転センサオブジェクトＯＢ３と、が格納されている。尚、回転センサオブジェクトＯＢ３は、エンジンを制御するためのオブジェクトでもある。
【００７９】
また、ＲＯＭ５には、上記オブジェクトＯＢ１〜ＯＢ３以外のオブジェクトＯＢ４〜ＯＢｎも格納されており、その中には、メッセージ配送制御部１０の機能を実現するためのオブジェクト（メッセージ配送制御用のオブジェクト）や所定時間毎に起動されるタイマ用のオブジェクトが含まれている。
【００８０】
そして、本実施形態のＥＣＵ１では、各オブジェクトＯＢ１〜ＯＢｎが自己或いは他のオブジェクトに対して処理依頼としてのメッセージを出すことにより、そのメッセージの出力先であるオブジェクトが動作する、といった仮想的なオブジェクト間メッセージ通信により、各オブジェクトＯＢ１〜ＯＢｎの処理順序が決定されている。
【００８１】
また、本実施形態のＥＣＵ１において、各オブジェクトＯＢ１〜ＯＢｎが出す上記処理依頼のメッセージとしては、そのメッセージの出力先であるオブジェクトが処理動作を開始するまでの遅延時間を示すカウント値（以下、タイマカウンタという）が含まれない第１種メッセージとしてのオブジェクトメッセージと、上記タイマカウンタが含まれた第２種メッセージとしてのタイマメッセージとがある。
【００８２】
そして、オブジェクトメッセージには、その内容として、当該メッセージの出力先のオブジェクトを示すオブジェクト識別番号（以下、ＯＩＤという）と、その出力先のオブジェクトを構成するメソッドのうちで実行されるべきメソッドを示すメソッド識別番号（以下、ＭＩＤという）とが含まれており、タイマメッセージには、その内容として、上記ＯＩＤ及びＭＩＤに加え、更に上記タイマカウンタが含まれている。尚、オブジェクトメッセージとタイマメッセージには、その内容として、更に引数を含んでいる場合もある。また、以下では、オブジェクトメッセージとタイマメッセージとを総称して、メッセージという。
【００８３】
次に、オブジェクト間メッセージ通信を実現するためのメッセージ配送制御部１０は、各オブジェクトが出したオブジェクトメッセージをキューイングすると共に、所定の配送条件が成立する毎に、上記キューイングしたオブジェクトメッセージのうち最初にキューイングしたオブジェクトメッセージを読み出して、その読み出したオブジェクトメッセージを当該メッセージの出力先であるオブジェクトに配送する機能と、各オブジェクトが出したタイマメッセージをキューイングすると共に、そのキューイングしたタイマメッセージのタイマカウンタを所定値ずつ（本実施形態では１ずつ）減らし、タイマカウンタの値が予め定められた設定値（本実施形態では０）に達すると、そのタイマメッセージを当該メッセージの出力先であるオブジェクトにオブジェクトメッセージとして配送する機能とを有している。
【００８４】
尚、「キューイング」とは、キューに対してデータの挿入記憶を行う操作のことであり、「キュー」とは、待ち行列であって、データ構造体のうち、一方の端でデータの挿入が行われ、他方の端でデータの削除が行われるものである。また、「配送」とは、メッセージの出力先であるオブジェクトの処理（詳しくは、メッセージにより指定されるオブジェクトのメソッドの実行）を開始させることを意味している。
【００８５】
そして、メッセージ配送制御部１０は、図２に示すように、各オブジェクトからのオブジェクトメッセージをキューイングするためのオブジェクトメッセージ格納部１２（第１のメッセージ記憶手段に相当）と、各オブジェクトからのタイマメッセージをキューイングするためのタイマメッセージ格納部１３（第２のメッセージ記憶手段に相当）と、オブジェクトメッセージ格納部１２及びタイマメッセージ格納部１３に対して、メッセージを記憶（キューイング）するためのメモリブロックを提供する空きメモリブロック格納部１４とを備えている。
【００８６】
ここで、オブジェクトメッセージ格納部１２，タイマメッセージ格納部１３，及び空きメモリブロック格納部１４は、夫々、ＲＡＭ６内の記憶領域であり、その容量はダイナミックに変動する。また、メモリブロックは、各格納部１２，１３，１４の単位容量に相当し、１つのメッセージを記憶可能な容量分である。
【００８７】
具体的に説明すると、まず、ＲＡＭ６内には所定数（例えば１０個）分のメモリブロックが予め確保されており、最初は、その全てのメモリブロックが空きメモリブロック格納部１４となっている。
そして、オブジェクトからオブジェクトメッセージが出されると、空きメモリブロック格納部１４を構成するメモリブロックが１つ減り、その代わりに、オブジェクトメッセージ格納部１２を構成するメモリブロックが１つ増えて、その増加されたメモリブロックにオブジェクトメッセージが記憶（キューイング）される。
【００８８】
また同様に、オブジェクトからタイマメッセージが出されると、空きメモリブロック格納部１４を構成するメモリブロックが１つ減り、その代わりに、タイマメッセージ格納部１３を構成するメモリブロックが１つ増えて、その増加されたメモリブロックにタイマメッセージが記憶される。
【００８９】
一方、オブジェクトメッセージ格納部１２からオブジェクトメッセージが読み出されてオブジェクトに配送されると、そのオブジェクトメッセージが記憶されていたメモリブロックが、オブジェクトメッセージ格納部１２から空きメモリブロック格納部１４へ戻るようになっている。
【００９０】
また、後述するように、タイマメッセージ格納部１３にキューイングされているタイマメッセージのうちでタイマカウンタが０になったタイマメッセージは、タイマメッセージ格納部１３からオブジェクトメッセージ格納部１２へ、オブジェクトメッセージとしてキューイングし直され、その再キューイングされたメッセージも、各オブジェクトから出された本来のオブジェクトメッセージと同様に、オブジェクトメッセージ格納部１２から読み出されて該当するオブジェクトに配送されるが、このようなタイマメッセージの再キューイング時には、そのタイマメッセージが記憶されていたメモリブロックが、オブジェクトメッセージ格納部１２へ移動するようになっている。
【００９１】
よって、概念的には、ＲＡＭ６内に確保された全てのメモリブロックは、最初は空きメモリブロック格納部１４に入っており、オブジェクトからオブジェクトメッセージ或いはタイマメッセージが出されると、空きメモリブロック格納部１４からオブジェクトメッセージ格納部１２或いはタイマメッセージ格納部１３へメモリブロックが１つ引き渡されて（移管されて）、その引き渡されたメモリブロックに上記出されたメッセージが記憶される。また、オブジェクトメッセージ格納部１２にキューイングされたオブジェクトメッセージが該当するオブジェクトに配送されると、そのオブジェクトメッセージが記憶されていたメモリブロックは、オブジェクトメッセージ格納部１２から空きメモリブロック格納部１４へ戻されて再利用される。
【００９２】
尚、以下では、オブジェクトメッセージが格納されているメモリブロックを、オブジェクトメッセージブロックと言い、タイマメッセージが格納されているメモリブロックを、タイマメッセージブロックと言い、有効なメッセージが格納されていないメモリブロックを、空きメモリブロックと言う。そして、オブジェクトメッセージブロックとタイマメッセージブロックと空きメモリブロックとを総称して、メモリブロックと言う。
【００９３】
一方更に、メッセージ配送制御部１０は、図２に示すように、オブジェクトメッセージ格納部１２から読み出したオブジェクトメッセージの配送先を特定するために、換言すれば、読み出したメッセージに含まれているＯＩＤとＭＩＤが示すオブジェクトのメソッドが、ＲＯＭ５の何れのアドレスに格納されているかを特定するために、接続情報データベース１６を備えている。
【００９４】
この接続情報データベース１６は、図３に示す如く、ＯＩＤとＭＩＤの各組み合せと、それら各組み合せが示すオブジェクトのメソッドが格納されているＲＯＭ５の先頭アドレス（即ち、実行開始アドレス）とを、対応付けて記憶したデータテーブルからなる。例えば、図３のデータテーブルでは、ＯＩＤがｎでＭＩＤがｍであるオブジェクトのメソッドが、ＲＯＭ５において「Ａｎｍ」というアドレスを先頭にして格納されていることを示す。そして、このようなデータテーブルからなる接続情報データベース１６は、各オブジェクトと共にＲＯＭ５に予め格納されている。
【００９５】
次に、メッセージ配送制御部１０の状態遷移と機能について、図４を参照しつつ説明する。尚、図４は、メッセージ配送制御部１０の状態遷移図である。また、以下に説明するメッセージ配送制御部１０の処理は、実際には、ＣＰＵ３がＲＯＭ５に格納されたメッセージ配送制御用のオブジェクトのメソッドに従って動作することにより実現されている。
【００９６】
メッセージ配送制御部１０は、車両のイグニッションスイッチがオフされて、ＥＣＵ１のマイクロコンピュータが動作を停止している際に、図４（ａ）に示す如くオフ状態となる。そして、例えばイグニッションスイッチがオフ状態からオンされたり、マイクロコンピュータにリセットがかけられる等の初期化要求が生じると、図４（ｂ）に示す如く初期化処理を行い、その後、図４（ｃ）に示す如くメッセージ受信待ち状態となる。
【００９７】
ここで、図４（ｂ）で行われる初期化処理では、図５に示すように、まずＳ５０及びＳ５５にて、オブジェクトメッセージ格納部１２とタイマメッセージ格納部１３とを初期化する。具体的には、オブジェクトメッセージ格納部１２とタイマメッセージ格納部１３との各々が保有している空きメモリブロックを、空きメモリブロック格納部１４に引き渡す。次にＳ６０にて、空きメモリブロック格納部１４を初期化する。具体的には、オブジェクトの何れかからメッセージが出されたときに、空きメモリブロック格納部１４が保有している空きメモリブロックをオブジェクトメッセージ格納部１２及びタイマメッセージ格納部１３へ引き渡すことのできる状態にする。
【００９８】
そして、メッセージ配送制御部１０は、このような初期化処理を終了した後、メッセージ受信待ち状態となる。
メッセージ受信待ち状態とは、オブジェクトから出されたメッセージをオブジェクトメッセージ格納部１２或いはタイマメッセージ格納部１３にキューイングすることのできる状態であり、この状態において、イグニッションスイッチがオフされる等の終了要求が生じると、メッセージ配送制御部１０は、図４（ｄ）に示す如くシリアライズ処理を行い、その後、前述したオフ状態に戻る。
【００９９】
ここで、図４（ｄ）で行われるシリアライズ処理では、図６に示すように、まずＳ７０及びＳ７５にて、オブジェクトメッセージ格納部１２とタイマメッセージ格納部１３との各々に記憶されているデータを、前述したバックアップＲＡＭに退避させ、次にＳ８０にて、空きメモリブロック格納部１４に記憶されているデータを、バックアップＲＡＭに退避させる。そして、メッセージ配送制御部１０は、このようなシリアライズ処理を終了した後、オフ状態となる。
【０１００】
一方、メッセージ配送制御部１０は、メッセージ受信待ち状態において、オブジェクトからオブジェクトメッセージが出されると、図４（ｅ）に示す如くメッセージキューイング処理を行って、上記オブジェクトからのオブジェクトメッセージをオブジェクトメッセージ格納部１２にキューイングし、その後、メッセージ受信待ち状態に戻る。
【０１０１】
尚、本実施形態では、オブジェクトがメッセージ送信要求を出すことにより、オブジェクトメッセージの出力が行われる。そして、以下の説明において、メッセージ内容としてのＯＩＤがｎ（＝１，２，…）であり且つＭＩＤがｍ（＝１，２，…）であるオブジェクトメッセージを、特に「オブジェクトメッセージ（ｎ，ｍ）」と記し、そのオブジェクトメッセージ（ｎ，ｍ）を出力するためのメッセージ送信要求を、「メッセージ送信要求（ｎ，ｍ）」と記す。
【０１０２】
ここで、オブジェクトがオブジェクトメッセージ（メッセージ送信要求）を出した時に行われるメッセージキューイング処理では、図７に示すように、まずＳ１００にて、空きメモリブロック格納部１４から空きメモリブロックを取得できるか否か（つまり、空きメモリブロック格納部１４に空きメモリブロックがあるか否か）を判断する。そして、空きメモリブロックが取得可能であれば、続くＳ１１０にて、空きメモリブロック格納部１４から、空きメモリブロックのうちで先頭にある空きメモリブロック、即ち、空きメモリブロック格納部１４にキューイングされている空きメモリブロックのうちで最初にキューイングされた空きメモリブロックを取得する。
【０１０３】
次にＳ１２０にて、上記取得した空きメモリブロックに、オブジェクトから今回出されたオブジェクトメッセージを書き込む。尚、具体的には、空きメモリブロックに、オブジェクトメッセージの内容であるＯＩＤ及びＭＩＤ或いは更に引数が書き込まれる。
【０１０４】
そして、続くＳ１３０にて、上記Ｓ１２０でオブジェクトメッセージを書き込んだメモリブロックを、オブジェクトメッセージ格納部１２にキューイングする。つまり、オブジェクトメッセージを書き込んだメモリブロックを、オブジェクトメッセージブロックとして、オブジェクトメッセージ格納部１２におけるオブジェクトメッセージブロックの最後尾に登録する。そして、Ｓ１３０の処理を行った後、当該メッセージキューイング処理を終了する。
【０１０５】
また、上記Ｓ１００にて、空きメモリブロックを取得することができない（つまり、空きメモリブロック格納部１４に空きメモリブロックがない）と判断した場合には、メッセージ送信要求を出したオブジェクトのメソッドへエラーメッセージを出し、これにより所定のフェールセーフ処理が行われる。
【０１０６】
よって、このメッセージキューイング処理が行われると、図８（ａ）の斜線で示すように、空きメモリブロック格納部１４にある空きメモリブロックＥ1 〜Ｅm のうち、先頭にある空きメモリブロックＥ1 が選択されて、図８（ｂ）に示すように、その空きメモリブロックＥ1 が取得される（Ｓ１００：ＹＥＳ，Ｓ１１０）。
【０１０７】
そして、図８（ｃ）に示すように、上記取得した空きメモリブロックＥ1 に、オブジェクトから今回出されたオブジェクトメッセージの内容が書き込まれ（Ｓ１２０）、最後に、図８（ｄ）に示す如く、オブジェクトメッセージの内容が書き込まれたメモリブロックＥ1 が、オブジェクトメッセージ格納部１２におけるオブジェクトメッセージブロックＭ1 〜Ｍn の最後尾に、オブジェクトメッセージブロックＭn+1 として登録されて（Ｓ１３０）、オブジェクトメッセージ格納部１２へのオブジェクトメッセージのキューイングが終了する。
【０１０８】
また、この状態では、図８（ｄ）に示すように、オブジェクトメッセージ格納部１２のオブジェクトメッセージブロックＭが１つ増え、その代わりに、空きメモリブロック格納部１４の空きメモリブロックＥが１つ減ることとなる。そして、図８（ｄ）にて（）内に示すように、空きメモリブロック格納部１４にて当初２番目にあった空きメモリブロックＥ2 が、先頭の空きメモリブロックＥ1 となり、当初ｍ番目にあった空きメモリブロックＥm が、ｍ−１番目の空きメモリブロックＥm-1 となる。
【０１０９】
一方次に、メッセージ配送制御部１０は、メッセージ受信待ち状態において、オブジェクトから図４（ｆ）の如くメッセージ配送要求が出されると、図４（ｇ）に示す如くメッセージ配送状態になる。
メッセージ配送状態では、図４（ｈ）に示すように、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージがあれば、後述するメッセージ配送処理を行って、そのキューイングされているオブジェクトメッセージの配送（即ち、オブジェクトメッセージにより指定されるオブジェクトのメソッドの実行）を行い、また、図４（ｉ）に示すように、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージがなければ、メッセージ受信状態へ戻る。
【０１１０】
また、メッセージ配送状態では、実行中のオブジェクトからメッセージ送信要求（オブジェクトメッセージ）が出されると、メッセージ受信待ち状態の場合と同様に、図４（ｊ）に示す如く前述した図７のメッセージキューイング処理を行う。
【０１１１】
ここで、図９に示すように、メッセージ配送処理は、オブジェクトからメッセージ配送要求が出された時、或いは、何れかのオブジェクトのメソッドの実行が終了した時に行われ、まずＳ２１０にて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージがあるか否か（つまり、オブジェクトメッセージ格納部１２からオブジェクトメッセージブロックを取得できるか否か）を判断する。そして、キューイングされているオブジェクトメッセージがあれば、続くＳ２２０にて、オブジェクトメッセージ格納部１２から、オブジェクトメッセージブロックのうちで先頭にあるオブジェクトメッセージブロック、即ち、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージブロックのうちで最初にキューイングされたオブジェクトメッセージブロックを取得し、そのオブジェクトメッセージブロックに書き込まれているメッセージの内容（ＯＩＤ及びＭＩＤ）を読み取る。
【０１１２】
次にＳ２３０にて、上記Ｓ２２０で取得したオブジェクトメッセージブロックを、空きメモリブロックとして、空きメモリブロック格納部１４における空きメモリブロックの最後尾に登録する。
そして、続くＳ２４０にて、上記Ｓ２２０で読み取ったメッセージ内容であるＯＩＤとＭＩＤに対応するオブジェクトのメソッドが格納されているＲＯＭ５の先頭アドレス（実行開始アドレス）を、前述した接続情報データベース１６から検索により算出し、続くＳ２５０にて、上記Ｓ２４０で算出した実行開始アドレスをコールする。
【０１１３】
すると、ＣＰＵ３によるプログラムの実行先が、Ｓ２２０で読み取ったメッセージ内容に対応したオブジェクトのメソッドの先頭へ移り、これにより、オブジェクトメッセージの配送が行われる。そして、そのメソッドの処理実行が終了すると、再び、当該メッセージ配送処理が前述したＳ２１０から行われる。
【０１１４】
また、上記Ｓ２１０にて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージがない（つまり、オブジェクトメッセージ格納部１２からオブジェクトメッセージブロックを取得できない）と判断した場合には、そのままメッセージ受信待ち状態へ戻る。
【０１１５】
よって、このメッセージ配送処理が行われると、図１０（ａ）の斜線で示すように、オブジェクトメッセージ格納部１２にあるオブジェクトメッセージブロックＭ1 〜Ｍn のうち、先頭のオブジェクトメッセージブロックＭ1 が選択される。そして、図１０（ｂ）に示すように、そのオブジェクトメッセージブロックＭ1 が取得されて、そのオブジェクトメッセージブロックＭ1 に書き込まれているメッセージ内容が読み取られる（Ｓ２１０：ＹＥＳ，Ｓ２２０）。
【０１１６】
そして更に、図１０（ｃ）に示すように、メッセージ内容が読み取られた後のオブジェクトメッセージブロックＭ1 が、空きメモリブロック格納部１４における空きメモリブロックＥ1 〜Ｅm の最後尾に、空きメモリブロックＥm+1 として登録され（Ｓ２３０）、それと共に、上記オブジェクトメッセージブロックＭ1 から読み取ったメッセージ内容に対応するオブジェクトのメソッドの実行が開始される。
【０１１７】
また、この状態では、図１０（ｃ）に示すように、空きメモリブロック格納部１４の空きメモリブロックＥが１つ増え、その代わりに、オブジェクトメッセージ格納部１２のオブジェクトメッセージブロックＭが１つ減ることとなる。そして、図１０（ｃ）にて（）内に示すように、オブジェクトメッセージ格納部１２にて当初２番目にあったオブジェクトメッセージブロックＭ2 が、先頭のオブジェクトメッセージブロックＭ1 となり、当初ｎ番目にあったオブジェクトメッセージブロックＭn が、ｎ−１番目のオブジェクトメッセージブロックＭn-1 となる。
【０１１８】
一方更に、メッセージ配送制御部１０は、メッセージ受信待ち状態において、オブジェクトからタイマメッセージが出されると、図４（ｋ）に示す如くタイマメッセージキューイング処理を行って、そのオブジェクトからのタイマメッセージをタイマメッセージ格納部１３にキューイングし、その後、メッセージ受信待ち状態に戻る。また、メッセージ配送制御部１０は、メッセージ配送状態においても、実行中のオブジェクトからタイマメッセージが出されると、メッセージ受信待ち状態の場合と同様に、図４（ｌ）に示す如くタイマメッセージキューイング処理を行って、オブジェクトからのタイマメッセージをタイマメッセージ格納部１３にキューイングする。
【０１１９】
尚、本実施形態では、オブジェクトがタイマメッセージ送信要求を出すことにより、タイマメッセージの出力が行われる。そして、以下の説明において、メッセージ内容としてのＯＩＤがｎ（＝１，２，…）であり、ＭＩＤがｍ（＝１，２，…）であり、タイマカウンタがＰ（＝Ｐ１，Ｐ２，…：但しＰ１，Ｐ２，…は整数）であるタイマメッセージを、特に「タイマメッセージ（ｎ，ｍ，Ｐ）」と記し、そのタイマメッセージ（ｎ，ｍ，Ｐ）を出力するためのタイマメッセージ送信要求を、「タイマメッセージ送信要求（ｎ，ｍ，Ｐ）」と記す。
【０１２０】
ここで、オブジェクトがタイマメッセージ（タイマメッセージ送信要求）を出した時に行われるタイマメッセージキューイング処理では、図１１に示すように、まずＳ３００にて、空きメモリブロック格納部１４から空きメモリブロックを取得できるか否か（つまり、空きメモリブロック格納部１４に空きメモリブロックがあるか否か）を判断する。そして、空きメモリブロックが取得可能であれば、続くＳ３１０にて、空きメモリブロック格納部１４から、空きメモリブロックのうちで先頭にある空きメモリブロックを取得する。
【０１２１】
次にＳ３２０にて、上記取得した空きメモリブロックに、オブジェクトから今回出されたタイマメッセージを書き込む。尚、具体的には、空きメモリブロックに、タイマメッセージの内容であるＯＩＤ，ＭＩＤ，及びタイマカウンタ或いは更に引数が書き込まれる。
【０１２２】
そして、続くＳ３３０にて、上記Ｓ３２０でタイマメッセージを書き込んだメモリブロックを、タイマメッセージ格納部１３にキューイングする。つまり、タイマメッセージを書き込んだメモリブロックを、タイマメッセージブロックとして、タイマメッセージ格納部１３におけるタイマメッセージブロックの最後尾に登録する。そして、Ｓ３３０の処理を行った後、当該タイマメッセージキューイング処理を終了する。
【０１２３】
また、上記Ｓ３００にて、空きメモリブロックを取得することができないと判断した場合には、タイマメッセージ送信要求を出したオブジェクトのメソッドへエラーメッセージを出し、これにより所定のフェールセーフ処理が行われる。
よって、このタイマメッセージキューイング処理が行われると、図１２（ａ）の斜線で示すように、空きメモリブロック格納部１４にある空きメモリブロックＥ1 〜Ｅm のうち、先頭にある空きメモリブロックＥ1 が選択されて、図１２（ｂ）に示すように、その空きメモリブロックＥ1 が取得される（Ｓ３００：ＹＥＳ，Ｓ３１０）。
【０１２４】
そして、図１２（ｃ）に示すように、上記取得した空きメモリブロックＥ1 に、オブジェクトから今回出されたタイマメッセージの内容が書き込まれ（Ｓ３２０）、最後に、図１２（ｄ）に示す如く、タイマメッセージの内容が書き込まれたメモリブロックＥ1 が、タイマメッセージ格納部１３におけるタイマメッセージブロックＴ1 〜Ｔn の最後尾に、タイマメッセージブロックＴn+1 として登録されて（Ｓ３３０）、タイマメッセージ格納部１３へのタイマメッセージのキューイングが終了する。
【０１２５】
また、この状態では、図１２（ｄ）に示すように、タイマメッセージ格納部１３のタイマメッセージブロックＴが１つ増え、その代わりに、空きメモリブロック格納部１４の空きメモリブロックＥが１つ減ることとなる。そして、図１２（ｄ）にて（）内に示すように、空きメモリブロック格納部１４にて当初２番目にあった空きメモリブロックＥ2 が、先頭の空きメモリブロックＥ1 となり、当初ｍ番目にあった空きメモリブロックＥm が、ｍ−１番目の空きメモリブロックＥm-1 となる。
【０１２６】
一方次に、メッセージ配送制御部１０は、メッセージ受信待ち状態において、タイマクロック要求を受けると、図４（ｍ）に示す如くタイマクロック処理を行って、その後、メッセージ受信待ち状態に戻る。また、メッセージ配送制御部１０は、メッセージ配送状態においても、タイマクロック要求を受けると、図４（ｎ）に示す如くタイマクロック処理を行う。
【０１２７】
ここで、本実施形態において、上記タイマクロック要求は、所定時間ｔ（例えば１ｍｓ）毎に割り込み処理として起動されるタイマ用のオブジェクトから、その所定時間ｔが経過したというイベントの発生を示す通知として出される。また、このイベントとしてのタイマクロック要求は、例えば、ＣＰＵ３へ外部から入力されるクロック信号の立ち上がりエッジ或いは立ち下がりエッジでも良い。
【０１２８】
そして、こうした所定時間ｔ毎のタイマクロック要求に応じて行われるタイマクロック処理では、図１３に示すように、まずＳ４００にて、タイマメッセージ格納部１３に処理すべきタイマメッセージが有るか否かを判定する。
尚、このＳ４００では、タイマメッセージ格納部１３を構成するタイマメッセージブロックが無い場合（即ち、タイマメッセージ格納部１３にキューイングされているタイマメッセージが無い場合）と、タイマメッセージ格納部１３を構成するタイマメッセージブロックが有っても、その全てのタイマメッセージブロックに対して後述するＳ４１０及びＳ４２０の処理が既に行われている場合に、処理すべきタイマメッセージが無いと判定される。
【０１２９】
そして、上記Ｓ４００にて、タイマメッセージ格納部１３に処理すべきタイマメッセージが無いと判定した場合には、当該タイマクロック処理を終了するが、上記Ｓ４００にて、処理すべきタイマメッセージが有ると判定した場合には、Ｓ４１０に進んで、タイマメッセージ格納部１３を構成するタイマメッセージブロックのうちの１つを今回の処理対象として設定し、更に、その処理対象のタイマメッセージブロックに書き込まれているタイマメッセージのタイマカウンタを、１だけ減算する。尚、Ｓ４１０では、１回のタイマクロック処理において、当該Ｓ４１０の処理が行われる毎に、タイマメッセージ格納部１３のタイマメッセージブロックを、先頭のものから順に処理対象として設定する。
【０１３０】
次にＳ４２０にて、上記Ｓ４１０で１減算した後のタイマカウンタが０に達したか否かを判定し、０に達していればＳ４３０へ進んで、処理対象のタイマメッセージブロックに書き込まれているタイマメッセージ（つまり、Ｓ４１０での１減算処理によってタイマカウンタが０となったタイマメッセージ）を、オブジェクトメッセージ格納部１２にオブジェクトメッセージとしてキューイングし直す。
【０１３１】
具体的には、今回の処理対象のタイマメッセージブロックを、タイマメッセージ格納部１３からオブジェクトメッセージ格納部１２へ移動させるのであるが、その際、処理対象のタイマメッセージブロックを、オブジェクトメッセージブロックとして、オブジェクトメッセージ格納部１２におけるオブジェクトメッセージブロックの最後尾に登録する。尚、この場合、図９のメッセージ配送処理ではタイマカウンタを参照しないため、タイマメッセージブロックは、そのままオブジェクトメッセージブロックとしてオブジェクトメッセージ格納部１２へ移動させることができる。また、オブジェクトメッセージ格納部１２へ移動させるタイマメッセージブロックから、０となった不要なタイマカウンタを削除するようにしても良い。
【０１３２】
そして、上記Ｓ４３０の処理を行った後、或いは、上記Ｓ４２０にて、１減算後のタイマカウンタが０に達していないと判定した場合には、Ｓ４００へ戻る。よって、このタイマクロック処理が行われると、タイマメッセージ格納部１３にキューイングされている各タイマメッセージブロックが、最初にキューイングされたものから順に処理対象として設定されて、各タイマメッセージブロックに書き込まれているタイマメッセージのタイマカウンタが１減算されるため（Ｓ４１０）、タイマメッセージ格納部１３にキューイングされている各タイマメッセージのタイマカウンタは、当該タイマクロック処理が行われる所定時間ｔ毎に、１ずつ減算されていくこととなる。
【０１３３】
そして、その課程において、例えば図１４（ａ）の斜線で示すように、タイマメッセージ格納部１３にあるタイマメッセージブロックＴ1 〜Ｔn のうち、先頭からｅ番目のタイマメッセージブロックＴe に書き込まれているタイマメッセージのタイマカウンタが１減算により０になったとすると、図１４（ｂ）及び図１４（ｃ）に示すように、そのタイマメッセージブロックＴe が、タイマメッセージ格納部１３から取り出されて、オブジェクトメッセージ格納部１２におけるオブジェクトメッセージブロックＭ1 〜Ｍn の最後尾に、オブジェクトメッセージブロックＭn+1 として登録される（Ｓ４２０：ＹＥＳ，Ｓ４３０）。また、この状態では、図１４（ｃ）に示すように、オブジェクトメッセージ格納部１２のオブジェクトメッセージブロックＭが１つ増え、その代わりに、タイマメッセージ格納部１３のタイマメッセージブロックＴが１つ減ることとなる。
【０１３４】
このため、タイマメッセージ格納部１３にキューイングされている各タイマメッセージのタイマカウンタは、所定時間ｔ毎に１ずつ減算され、タイマカウンタが０に達したタイマメッセージは、タイマメッセージ格納部１３からオブジェクトメッセージ格納部１２へ、キューイング（記憶）し直されることとなる。
【０１３５】
そして、オブジェクトメッセージとしてキューイングし直されたタイマメッセージは、オブジェクトから出される本来のオブジェクトメッセージと全く同様に、前述した図９のメッセージ配送処理によって配送され、そのメッセージのＯＩＤ及びＭＩＤにより指定されるオブジェクトのメソッドが実行されることとなる。
【０１３６】
よって、何れかのオブジェクトからタイマメッセージ（ｘ，ｙ，Ｐｚ）が出されて、そのタイマメッセージ（ｘ，ｙ，Ｐｚ）が図１１のタイマメッセージキューイング処理によりタイマメッセージ格納部１３にキューイングされると、そのタイマメッセージ（ｘ，ｙ，Ｐｚ）のタイマカウンタＰｚに相当する時間（＝ｔ×Ｐｚ）が経過してから、当該タイマメッセージ（ｘ，ｙ，Ｐｚ）のＯＩＤ及びＭＩＤにより指定されるオブジェクトｘのメソッドｙが実行されることとなる。一方また、メッセージ配送制御部１０は、メッセージ受信待ち状態において、オブジェクトから消去要求としてのタイマメッセージ削除要求が出されると、図４（ｏ）に示す如くタイマメッセージ削除処理を行って、そのタイマメッセージ削除要求に対応したタイマメッセージをタイマメッセージ格納部１３から消去し、その後、メッセージ受信待ち状態に戻る。また、メッセージ配送制御部１０は、メッセージ配送状態においても、実行中のオブジェクトからタイマメッセージ削除要求が出されると、メッセージ受信待ち状態の場合と同様に、図４（ｐ）に示す如くタイマメッセージ削除処理を行って、そのタイマメッセージ削除要求に対応したタイマメッセージをタイマメッセージ格納部１３から消去する。
【０１３７】
尚、オブジェクトが出すタイマメッセージ削除要求には、消去すべきタイマメッセージを特定するためにＯＩＤとＭＩＤが含まれている。そして、以下の説明において、メッセージ内容としてのＯＩＤがｎ（＝１，２，…）で、ＭＩＤがｍ（＝１，２，…）であるタイマメッセージ（ｎ，ｍ，Ｐ）を消去するためのタイマメッセージ削除要求を、「タイマメッセージ削除要求（ｎ，ｍ）」と記す。
【０１３８】
ここで、オブジェクトがタイマメッセージ削除要求を出した時に行われるタイマメッセージ削除処理では、図１５に示すように、まずＳ５００にて、メッセージ内容としてのＯＩＤ及びＭＩＤが、オブジェクトから出されたタイマメッセージ削除要求のＯＩＤ及びＭＩＤと一致している消去対象のタイマメッセージを、タイマメッセージ格納部１３の中から検索する。
【０１３９】
次にＳ５１０にて、タイマメッセージ格納部１３に消去対象のタイマメッセージが有ったか否かを判定し、消去対象のタイマメッセージが無い場合には、当該タイマメッセージ削除処理を終了するが、消去対象のタイマメッセージが有った場合には、Ｓ５２０に進んで、タイマメッセージ格納部１３のタイマメッセージブロックのうち、消去対象のタイマメッセージが書き込まれているタイマメッセージブロックの記憶内容を消去する。
【０１４０】
そして、続くＳ５３０にて、上記Ｓ５２０で記憶内容を消去したタイマメッセージブロックを、空きメモリブロックとして、空きメモリブロック格納部１４における空きメモリブロックの最後尾に登録し、その後、当該タイマメッセージ削除処理を終了する。
【０１４１】
よって、例えば図１６（ａ）の斜線で示すように、タイマメッセージ格納部１３にあるタイマメッセージブロックＴ1 〜Ｔn のうち、先頭からｇ番目のタイマメッセージブロックＴg にタイマメッセージ（ｘ，ｙ，Ｐｚ）が書き込まれている場合に、何れかのオブジェクトからタイマメッセージ削除要求（ｘ，ｙ）が出されると、Ｓ５００〜Ｓ５２０の処理により、上記ｇ番目のタイマメッセージブロックＴg の記憶内容が消去される。
【０１４２】
そして、Ｓ５３０の処理により、図１６（ｂ）及び図１６（ｃ）に示すように、記憶内容が消去された後のタイマメッセージブロックＴｇが、タイマメッセージ格納部１３から取り出されて、空きメモリブロック格納部１４における空きメモリブロックＥ1 〜Ｅm の最後尾に、空きメモリブロックＥm+1 として登録される。また、この状態では、図１６（ｃ）に示すように、空きメモリブロック格納部１４の空きメモリブロックＥが１つ増え、その代わりに、タイマメッセージ格納部１３のタイマメッセージブロックＴが１つ減ることとなる。
【０１４３】
このため、何れかのオブジェクトからタイマメッセージ削除要求（ｘ，ｙ）が出されると、それに対応するタイマメッセージ（ｘ，ｙ，Ｐｚ）が上記の如くタイマメッセージ格納部１３から消去されるため、何れかのオブジェクトから上記タイマメッセージ（ｘ，ｙ，Ｐｚ）が出されてから、そのタイマメッセージ（ｘ，ｙ，Ｐｚ）のタイマカウンタＰｚに相当する時間（＝ｔ×Ｐｚ）が経過しても、そのタイマメッセージ（ｘ，ｙ，Ｐｚ）のＯＩＤ及びＭＩＤにより指定されるオブジェクトｘのメソッドｙは実行されなくなる。
【０１４４】
ここで、前述したメッセージ配送制御部１０の作用を一層明確にするため、図２に示した各オブジェクトＯＢ１〜ＯＢ３が如何にしてオブジェクト間メッセージ通信を行い、当該ＥＣＵ１とテスタ８との間のデータ通信が制御されるかについて、図１７〜図２８を用い具体的に説明する。
【０１４５】
まず、ＥＣＵ１とテスタ８との間には、データ通信を行う上で、図１７に示す規則が設けられている。
即ち、最初にテスタ８がＥＣＵ１へデータ要求としての要求メッセージを送信する。そして、ＥＣＵ1 は、テスタ８からの要求メッセージを受信してから時間ｔ２以上が経過した後に、その受信した要求メッセージに応じた情報である応答データ（エンジン回転数やエンジンの冷却水温など）を、応答メッセージとして所定量（本実施形態では１バイト）ずつテスタ８へ送信するが、この際、ＥＣＵ１は、同じ種類の応答メッセージの各バイトを、時間ｔ１以上の間隔を空けて順次送信する。尚、図１７は、応答メッセージの総データ量が２バイトである場合を示している。
【０１４６】
また、テスタ８は、ＥＣＵ１からの応答データの各バイトを全て受信してから時間ｔ３以上が経過した後に、次の要求メッセージをＥＣＵ１へ送信する。また更に、テスタ８は、ＥＣＵ１へ要求メッセージを送信してから時間ｔ３が経過しても、ＥＣＵ１から応答メッセージが返送されて来ない場合に、要求メッセージを再度送信する。
【０１４７】
尚、時間ｔ２は、時間ｔ１よりも長く、且つ、時間ｔ３は、時間ｔ１及び時間ｔ２よりも非常に長い時間として定められている。また、図１７における（）内に記したＰ１，Ｐ２，Ｐ３は、上記時間ｔ１，ｔ２，ｔ３の各々を、前述したタイマクロック要求の発生周期ｔ（換言すれば、メッセージ配送制御部１０が図１３のタイマクロック処理を行う周期ｔ）で割った整数値（Ｐ１＝ｔ１／ｔ，Ｐ２＝ｔ２／ｔ，Ｐ３＝ｔ３／ｔ）である。
【０１４８】
次に、図２の各オブジェクトＯＢ１〜ＯＢ３によって実現される処理の概要について、図１８及び図１９のメッセージシーケンスチャートに沿って説明する。尚、ここでは、ＥＣＵ１が、テスタ８からの要求メッセージに応じて、エンジン回転数のデータを応答メッセージとしてテスタ８へ返送する場合を例に挙げて説明する。また、図１９は、図１８にて六角形の枠で示した応答メッセージ送信処理の部分のメッセージシーケンスチャートである。また更に、図１８及び図１９において、（２，１）や（１，１）などは、各オブジェクトＯＢ１〜ＯＢ３が出すオブジェクトメッセージ（ｎ，ｍ）の内容（即ち、ＯＩＤ及びＭＩＤの各値）を示しており、（２，１，Ｐ３）や（２，３，Ｐ２）などは、各オブジェクトＯＢ１〜ＯＢ３が出すタイマメッセージ（ｎ，ｍ，Ｐ）の内容（即ち、ＯＩＤ，ＭＩＤ，及びタイマカウンタの各値）を示している。
【０１４９】
まず、図１８の［１］に示すように、通信ハンドラオブジェクトＯＢ２へ受信待ち要求のメッセージが出されると、通信ハンドラオブジェクトＯＢ２が動作して、（つまり、ＣＰＵ３が通信ハンドラオブジェクトＯＢ２のメソッドを実行して）、通信回路７やマイクロコンピュータ内のシリアル通信用インタフェースを、テスタ８からのデータを受信できる受信可能状態に設定する。
【０１５０】
尚、受信待ち要求のメッセージは、後述するタイマメッセージ（２，１，Ｐ３）が、メッセージ配送制御部１０のタイマクロック処理（図１３）及びメッセージ配送処理（図９）の作用によって、オブジェクトメッセージ（２，１）として配送されることにより発生する。
【０１５１】
そして、その後、テスタ８から要求メッセージが送信されて、その要求メッセージがマイクロコンピュータ内の受信レジスタに格納されると、図１８の［２］に示すように、オブジェクトＯＢ１〜ＯＢ３以外の所定のオブジェクトから通信ハンドラオブジェクトＯＢ２へ、受信処理要求のメッセージが出される。
【０１５２】
すると、通信ハンドラオブジェクトＯＢ２は、上記受信レジスタ内の受信データ（即ち、テスタ８からの要求メッセージ）を、マイクロコンピュータ内で処理可能なデータに変換し、次いで、前述した時間ｔ２を計時するためのＰ２タイマと、前述した時間ｔ３を計時するためのＰ３タイマとを、夫々起動する。
【０１５３】
尚、Ｐ２タイマの起動は、タイマカウンタの値が、時間ｔ２をタイマクロック要求の発生周期ｔで割った整数値Ｐ２（＝ｔ２／ｔ）であるタイマメッセージ（この例では、タイマメッセージ（２，３，Ｐ２））を出すことによって行われ、同様に、Ｐ３タイマの起動は、タイマカウンタの値が、時間ｔ３をタイマクロック要求の発生周期ｔで割った整数値Ｐ３（＝ｔ３／ｔ）であるタイマメッセージ（この例では、タイマメッセージ（２，１，Ｐ３））を出すことによって行われる。
【０１５４】
そして更に、通信ハンドラオブジェクトＯＢ２は、図１８の［３］に示すように、サービスオブジェクトＯＢ１へ要求メッセージ受信通知のメッセージを出す。
すると、サービスオブジェクトＯＢ１が動作して、図１８の［４］に示すように、回転センサオブジェクトＯＢ３へ回転数取得要求のメッセージを出す。
【０１５５】
そして、上記回転数取得要求のメッセージに伴い、回転センサオブジェクトＯＢ３が動作して、まず、回転センサからの信号に基づきエンジン回転数を算出し、次いで、図１８の［５］に示すように、サービスオブジェクトＯＢ１へ回転数保存要求のメッセージを出す。
【０１５６】
すると、サービスオブジェクトＯＢ１は、回転センサオブジェクトＯＢ３によって算出されたエンジン回転数のデータ（この例では２バイト）をＲＡＭ６の特定領域に保存する。
この状態で、上記Ｐ２タイマが起動されてから時間ｔ２が経過すると、図１８の［６］に示すように、通信ハンドラオブジェクトＯＢ２へ応答開始要求のメッセージが出されて、通信ハンドラオブジェクトＯＢ２とサービスオブジェクトＯＢ１とにより、テスタ８へ応答メッセージの１バイト分を送信するための応答メッセージ送信処理が行われる。尚、この時の応答開始要求のメッセージは、後述するタイマメッセージ（２，３，Ｐ２）が、メッセージ配送制御部１０のタイマクロック処理（図１３）及びメッセージ配送処理（図９）の作用によって、オブジェクトメッセージ（２，３）として配送されることにより発生する。
【０１５７】
応答メッセージ送信処理では、まず、通信ハンドラオブジェクトＯＢ２が、上記応答開始要求のメッセージに伴い動作して、図１９の［９］に示すように、サービスオブジェクトＯＢ１へ応答メッセージ取得要求のメッセージを出す。
すると、サービスオブジェクトＯＢ１が動作して、ＲＡＭ６の上記特定領域からエンジン回転数のデータを１バイト分だけ読み出し、その後、図１９の［１０］に示すように、通信ハンドラオブジェクトＯＢ２へデータ送信要求のメッセージを出す。そして、上記データ送信要求のメッセージに伴い、通信ハンドラオブジェクトＯＢ２が動作して、サービスオブジェクトＯＢ１によりＲＡＭ６から読み出されたエンジン回転数の１バイト分のデータを、テスタ８が受信可能なデータに逆変換して送信レジスタに格納し、次いで、その送信レジスタ内の１バイトデータを、テスタ８へ送信する。
【０１５８】
尚、サービスオブジェクトＯＢ１は、上記応答メッセージ取得要求のメッセージに伴って動作する毎に、ＲＡＭ６の上記特定領域からエンジン回転数のデータを先頭の１バイト目から順に読み出す。よって、上記応答メッセージ送信処理が行われる毎に、ＥＣＵ１からテスタ８へ、応答メッセージ（エンジン回転数のデータ）の各１バイトずつが送信されることとなる。
【０１５９】
ここで、最初の応答メッセージ送信処理により、テスタ８へ応答メッセージの１バイト目が送信されるのであるが、通信ハンドラオブジェクトＯＢ２は、テスタ８へ応答メッセージの１バイト目を送信した後、図１８に示すように、前述した時間ｔ１を計時するためのＰ１タイマを起動する。尚、Ｐ１タイマの起動は、タイマカウンタの値が、時間ｔ１をタイマクロック要求の発生周期ｔで割った整数値Ｐ１（＝ｔ１／ｔ）であるタイマメッセージ（この例では、タイマメッセージ（２，３，Ｐ１））を出すことによって行われる。
【０１６０】
そして、上記Ｐ１タイマが起動されてから時間ｔ１が経過すると、図１８の［７］に示すように、通信ハンドラオブジェクトＯＢ２へ再び応答開始要求のメッセージが出されて、通信ハンドラオブジェクトＯＢ２とサービスオブジェクトＯＢ１とにより、２回目の応答メッセージ送信処理が行われる。尚、この時の応答開始要求のメッセージは、後述するタイマメッセージ（２，３，Ｐ１）が、メッセージ配送制御部１０のタイマクロック処理（図１３）及びメッセージ配送処理（図９）の作用によって、オブジェクトメッセージ（２，３）として配送されることにより発生する。
【０１６１】
その結果、通信ハンドラオブジェクトＯＢ２が、応答メッセージの２バイト目をテスタ８へ送信することとなる。
そして、通信ハンドラオブジェクトＯＢ２は、応答メッセージの２バイト目を送信した後、時間ｔ３を計時するためのＰ３タイマを再起動する。
【０１６２】
その後、上記Ｐ３タイマが再起動されてから時間ｔ３が経過すると、図１８の［８］に示す如く、図１８の［１］の場合と同様に、通信ハンドラオブジェクトＯＢ２へ受信待ち要求のメッセージが出される。そして、その受信待ち要求のメッセージに伴い通信ハンドラオブジェクトＯＢ２が動作して、通信回路７やマイクロコンピュータ内のシリアル通信用インタフェースを受信可能状態に設定する。
【０１６３】
一方、上記Ｐ３タイマが最初に起動されてから時間ｔ３以内に、応答メッセージを何らかの原因で送信できなかった場合にも、通信ハンドラオブジェクトＯＢ２へ受信待ち要求のメッセージが出される。そして、その受信待ち要求のメッセージに伴い通信ハンドラオブジェクトＯＢ２が動作して、通信回路７やシリアル通信用インタフェースを受信可能状態に設定する。
【０１６４】
尚、テスタ８からの要求メッセージを受信した時にＰ２タイマを起動して、その時点から時間ｔ２が経過した後に応答メッセージの１バイト目を送信する（即ち、応答メッセージの送信を開始する）のは、図１７を用いて説明したように、ＥＣＵ1 は、テスタ８からの要求メッセージを受信してから時間ｔ２以上が経過した後に、応答メッセージを送信しなければならないからである。
【０１６５】
また、テスタ８へ応答メッセージの１バイト目を送信した直後にＰ１タイマを起動して、その時点から時間ｔ１が経過した後に、応答メッセージの２バイト目を送信するのは、図１７を用いて説明したように、ＥＣＵ１は、同じ種類の応答メッセージの各バイトを、時間ｔ１以上の間隔を空けて送信しなければならないからである。
【０１６６】
また更に、テスタ８からの要求メッセージを受信した時に、Ｐ２タイマと共にＰ３タイマを起動するのは、前述したように、テスタ８は、ＥＣＵ１へ要求メッセージを送信してから時間ｔ３が経過しても、ＥＣＵ１から応答メッセージが返送されて来ない場合に、要求メッセージを再度送信するからであり、その再度送信された要求メッセージを確実に受信できるようにするためである。
【０１６７】
例えば、図１８において、六角形の枠で示されている応答メッセージ送信処理が、何らかの原因で行われなかった場合には、最初のＰ３タイマの起動時点から時間ｔ３が経過すると、通信ハンドラオブジェクトＯＢ２により、通信回路７やシリアル通信用インタフェースが受信可能状態に設定され、これにより、テスタ８から再送信される要求メッセージが受信されることとなる。
【０１６８】
そして、テスタ８へ応答メッセージの最終バイト（２バイト目）を送信した直後にＰ３タイマを再起動して、その時点から時間ｔ３が経過した後に受信可能状態としているのは、図１７に示したように、テスタ８は、ＥＣＵ１からの応答データの各バイトを全て受信してから時間ｔ３以上が経過すると、次の要求メッセージを送信してくるからであり、その要求メッセージを受信するためである。
【０１６９】
次に、図２に示した各オブジェクトＯＢ１〜ＯＢ３が、メッセージ配送制御部１０の作用により如何にしてオブジェクト間メッセージ通信を行い、図１８及び図１９のメッセージシーケンスチャートに示した処理が行われるかについて説明する。
【０１７０】
まず、図２０に示すように、サービスオブジェクトＯＢ１は、図１８の［３］に示した要求メッセージ受信通知のメッセージとしてのオブジェクトメッセージ（１，１）、つまりＯＩＤが１でＭＩＤが１であるオブジェクトメッセージに伴い実行される要求メッセージ受信通知処理メソッド（図２１）と、図１９の［９］に示した応答メッセージ取得要求のメッセージとしてのオブジェクトメッセージ（１，２）に伴い実行される応答メッセージ取得処理メソッド（図２２）と、図１８の［５］に示した回転数保存要求のメッセージとしてのオブジェクトメッセージ（１，３）に伴い実行される回転数保存処理メソッド（図２３）とを有している。
【０１７１】
また、通信ハンドラオブジェクトＯＢ２は、図１８の［１］及び［８］に示した受信待ち要求のメッセージとしてのオブジェクトメッセージ（２，１）に伴い実行される受信待ち処理メソッド（図２４）と、図１８の［２］に示した受信処理要求のメッセージとしてのオブジェクトメッセージ（２，２）に伴い実行されるテスタ読み込み処理メソッド（図２５）と、図１８の［６］及び［７］に示した応答開始要求のメッセージとしてのオブジェクトメッセージ（２，３）に伴い実行される応答開始処理メソッド（図２６）と、図１９の［１０］に示したデータ送信要求のメッセージとしてのオブジェクトメッセージ（２，４）に伴い実行される送信処理メソッド（図２７）とを有している。
【０１７２】
また更に、回転センサオブジェクトＯＢ３は、図１８の［４］に示した回転数取得要求のメッセージとしてのオブジェクトメッセージ（３，１）に伴い実行される回転数取得処理メソッド（図２８）を有している。
そして、上記オブジェクトＯＢ１〜ＯＢ３の各メソッドの実行開始アドレスは、図３に示したように、各メソッドを示すＯＩＤ及びＭＩＤに夫々対応して、接続情報データベース１６内に予め登録されている。
【０１７３】
次に、ＣＰＵ３により実行される処理の詳細について説明する。
まず、後述する受信待ち処理メソッド（図２４）のＳ７００により、通信回路７やマイクロコンピュータ内のシリアル通信用インタフェースが受信可能状態に設定されている時に、テスタ８からデータ要求としての要求メッセージが送信されて、その要求メッセージが受信されると（詳しくは、要求メッセージがシリアル通信用インタフェースの受信レジスタに受信データとして格納されると）、オブジェクトＯＢ１〜ＯＢ３以外の所定のオブジェクトのメソッド（以下、通信動作起動用メソッドという）が実行されて、メッセージ送信要求（２，２）が出される。
【０１７４】
尚、以下の説明においては、テスタ８からの要求メッセージが受信された時点で、メッセージ配送制御部１０はメッセージ配送状態となっており、また、オブジェクトメッセージ格納部１２とタイマメッセージ格納部１３との各々には、メモリブロックが無いものとする。また更に、空きメモリブロック格納部１４には十分な数の空きメモリブロックがあり、図７に示したメッセージキューイング処理のＳ１００と、図１１に示したタイマメッセージキューイング処理のＳ３００とでは、常に肯定判定されるものとする。
【０１７５】
ここで、上記メッセージ送信要求（２，２）が出されると、前述した図７のメッセージキューイング処理が実行されて、オブジェクトメッセージ格納部１２にオブジェクトメッセージ（２，２）がキューイングされる。
即ち、図７のＳ１１０にて、空きメモリブロック格納部１４から先頭の空きメモリブロックが取得され、Ｓ１２０にて、その取得した空きメモリブロックにオブジェクトメッセージ（２，２）が書き込まれ、更に、Ｓ１３０にて、オブジェクトメッセージ（２，２）が書き込まれたメモリブロックが、オブジェクトメッセージ格納部１２にオブジェクトメッセージブロックとして登録される。
【０１７６】
このようにしてオブジェクトメッセージ（２，２）のキューイングが終わると、処理の実行が上記通信動作起動用メソッドに戻る。そして、そのメソッドの処理が終了すると、前述した図９のメッセージ配送処理が実行されて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージ（２，２）が配送される。
【０１７７】
即ち、まず図９のＳ２１０にて、オブジェクトメッセージ格納部１２にオブジェクトメッセージがキューイングされているか否かがチェックされるが、この場合には、オブジェクトメッセージ（２，２）のみがキューイングされているため、Ｓ２２０にて、オブジェクトメッセージ格納部１２の先頭にあるオブジェクトメッセージブロックからオブジェクトメッセージ（２，２）の内容が読み取られる。また、Ｓ２３０にて、オブジェクトメッセージ（２，２）が書き込まれていたオブジェクトメッセージブロックが、空きメモリブロック格納部１４へ空きメモリブロックとして返却される。
【０１７８】
そして、図９のＳ２４０にて、上記読み取ったオブジェクトメッセージ（２，２）の内容に対応する通信ハンドラオブジェクトＯＢ２のテスタ読み込み処理メソッドの実行開始アドレスが、接続情報データベース１６から算出され、Ｓ２５０にて、その算出した実行開始アドレスがコールされる。
【０１７９】
これにより、オブジェクトメッセージ（２，２）の配送が行われて、図２５に示すテスタ読み込み処理メソッドの実行が開始される。
図２５に示すように、テスタ読み込み処理メソッドの実行が開始されると、まずＳ７１０にて、受信レジスタ内の受信データに対してデータエラーチェックの処理が行われ、続くＳ７１５にて、そのデータエラーチェックの結果に基づき、受信データが正常であるか否かが判定される。
【０１８０】
そして、受信データが正常でなければ、当該メソッドの実行が終了されるが、受信データが正常であれば、Ｓ７２０にて、受信データが、マイクロコンピュータ内で処理可能なデータに変換されてＲＡＭ６に転送される。
そして更に、続くＳ７２５にて、図１８に示したＰ２タイマを起動するためにタイマメッセージ送信要求（２，３，Ｐ２）が出される。
【０１８１】
すると、図１１のタイマメッセージキューイング処理が実行されて、タイマメッセージ格納部１３にタイマメッセージ（２，３，Ｐ２）がキューイングされる。
即ち、図１１のＳ３１０にて、空きメモリブロック格納部１４から先頭の空きメモリブロックが取得され、Ｓ３２０にて、その取得した空きメモリブロックにタイマメッセージ（２，３，Ｐ２）が書き込まれ、更に、Ｓ３３０にて、タイマメッセージ（２，３，Ｐ２）が書き込まれたメモリブロックが、タイマメッセージ格納部１３にタイマメッセージブロックとして登録される。
【０１８２】
このようにしてタイマメッセージ（２，３，Ｐ２）のキューイングが終わると、処理の実行が図２５のテスタ読み込み処理メソッドに戻り、図２５のＳ７３０にて、図１８に示したＰ３タイマを起動するためにタイマメッセージ送信要求（２，１，Ｐ３）が出される。
【０１８３】
すると、再び、図１１のタイマメッセージキューイング処理が実行されて、タイマメッセージ格納部１３にタイマメッセージ（２，１，Ｐ３）がキューイングされる。
即ち、図１１のＳ３１０にて、空きメモリブロック格納部１４から先頭の空きメモリブロックが取得され、Ｓ３２０にて、その取得した空きメモリブロックにタイマメッセージ（２，１，Ｐ３）が書き込まれ、更に、Ｓ３３０にて、タイマメッセージ（２，１，Ｐ３）が書き込まれたメモリブロックが、タイマメッセージ格納部１３におけるタイマメッセージブロックの最後尾に（この場合には先頭から２番目）に、タイマメッセージブロックとして登録される。
【０１８４】
尚、この時点で、タイマメッセージ格納部１３には、タイマメッセージ（２，３，Ｐ２）が書き込まれたタイマメッセージブロックと、タイマメッセージ（２，１，Ｐ３）が書き込まれたタイマメッセージブロックとが、その順に２つ登録されることとなる。換言すれば、タイマメッセージ格納部１３に、２つのタイマメッセージが、タイマメッセージ（２，３，Ｐ２）→タイマメッセージ（２，１，Ｐ３）の順に記憶されることとなる。
【０１８５】
このようにしてタイマメッセージ（２，１，Ｐ３）のキューイングが終わると、処理の実行が再び図２５のテスタ読み込み処理メソッドに戻り、図２５のＳ７３５にて、メッセージ送信要求（１，１）が出される。
すると、図７のメッセージキューイング処理が実行されて、前述した手順と全く同様に、オブジェクトメッセージ格納部１２にオブジェクトメッセージ（１，１）がキューイングされる。
【０１８６】
そして、オブジェクトメッセージ（１，１）のキューイングが終わると、処理の実行が図２５のテスタ読み込み処理メソッドに戻り、このメソッドの処理が終了すると、図９のメッセージ配送処理が実行されて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージ（１，１）が配送される。
【０１８７】
これにより、図２１に示す要求メッセージ受信通知処理メソッドの実行が開始される。そして、そのＳ６００にて、メッセージ送信要求（３，１）が出される。
すると、図７のメッセージキューイング処理が実行されて、オブジェクトメッセージ格納部１２にオブジェクトメッセージ（３，１）がキューイングされる。
【０１８８】
そして、オブジェクトメッセージ（３，１）のキューイングが終わると、処理の実行が図２１の要求メッセージ受信通知処理メソッドに戻り、このメソッドの処理が終了すると、図９のメッセージ配送処理が実行されて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージ（３，１）が配送される。
【０１８９】
これにより、図２８に示す回転数取得処理メソッドの実行が開始される。そして、まずＳ８００にて、回転センサからの信号に基づき、エンジン回転数が算出され、続くＳ８１０にて、メッセージ送信要求（１，３）が出される。
すると、図７のメッセージキューイング処理が実行されて、オブジェクトメッセージ格納部１２にオブジェクトメッセージ（１，３）がキューイングされる。
【０１９０】
そして、オブジェクトメッセージ（１，３）のキューイングが終わると、処理の実行が図２８の回転数取得処理メソッドに戻り、このメソッドの処理が終了すると、図９のメッセージ配送処理が実行されて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージ（１，３）が配送される。
【０１９１】
これにより、図２３に示す回転数保存処理メソッドの実行が開始される。そして、そのＳ６３０にて、上記回転数取得処理メソッドのＳ８００で算出されたエンジン回転数のデータが、ＲＡＭ６の特定領域に保存され、その後、当該回転数取得処理メソッドの実行が終了する。
【０１９２】
すると、図９のメッセージ配送処理が実行されて、そのＳ２１０にて、オブジェクトメッセージ格納部１２にオブジェクトメッセージがキューイングされているか否かがチェックされるが、この場合には、キューイングされているオブジェクトメッセージが無いため、メッセージ配送制御部１０はメッセージ受信待ち状態となる。
【０１９３】
そして、この状態の時に、例えば、上記オブジェクトＯＢ１〜ＯＢ３以外のオブジェクトのメソッドであって、所定時間毎に実行されるメソッド（以下、定時メソッドという）が実行され、更に、その定時メソッドの実行により、メッセージ送信要求（ｘ１，ｙ１）が出されたとする。
【０１９４】
すると、図７のメッセージキューイング処理が実行されて、オブジェクトメッセージ格納部１２にオブジェクトメッセージ（ｘ１，ｙ１）がキューイングされ、そのオブジェクトメッセージ（ｘ１，ｙ１）のキューイングが終わると、処理の実行が上記定時メソッドに戻る。
【０１９５】
そして、その定時メソッドの実行により、メッセージ配送要求が出されると、メッセージ配送制御部１０がメッセージ配送状態に戻ると共に、図９のメッセージ配送処理が実行されて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージ（ｘ１，ｙ１）が配送される。
【０１９６】
その結果、ＯＩＤがｘ１でＭＩＤがｙ１であるオブジェクトのメソッドが実行されることとなるが、そのメソッドの実行によりメッセージ送信要求（ｘ２，ｙ２）が出されると、その後、ＯＩＤがｘ２でＭＩＤがｙ２であるオブジェクトのメソッドが実行され、更に、そのメソッドの実行によりメッセージ送信要求（ｘ３，ｙ３）が出されると、その後、ＯＩＤがｘ３でＭＩＤがｙ３であるオブジェクトのメソッドが実行される、といった具合に、他のオブジェクトのメソッドが順次実行されていく。
【０１９７】
ここで、図２５のテスタ読み込み処理メソッドのＳ７２５で出されたタイマメッセージ（２，３，Ｐ２）がタイマメッセージ格納部１３にキューイングされてから、時間ｔ２が経過すると、そのタイマメッセージ（２，３，Ｐ２）のタイマカウンタが、前述した図１３のタイマクロック処理のＳ４１０によって０に達する。
【０１９８】
そして、そのタイマメッセージ（２，３，Ｐ２）は、上記タイマクロック処理のＳ４３０により、タイマメッセージ格納部１３からオブジェクトメッセージ格納部１２へ、オブジェクトメッセージ（２，３）としてキューイングし直される。尚、この時点で、タイマメッセージ格納部１３には、タイマメッセージ（２，１，Ｐ３）のみが記憶されることとなる。
【０１９９】
そして更に、そのキューイングし直されたメッセージ（２，３）は、実行中の何れかのメソッドの処理が終了した時点で、各オブジェクトから出される本来のオブジェクトメッセージと全く同様に、図９のメッセージ配送処理によって配送されることとなる。
【０２００】
このため、タイマメッセージ（２，３，Ｐ２）がタイマメッセージ格納部１３にキューイングされてから時間ｔ２が経過すると、オブジェクトメッセージ（２，３）に対応した図２６の応答開始処理メソッドの実行が開始される。
そして、図２６に示すように、応答開始処理メソッドの実行が開始されると、そのＳ７５０にて、メッセージ送信要求（１，２）が出される。
【０２０１】
すると、図７のメッセージキューイング処理が実行されて、オブジェクトメッセージ格納部１２にオブジェクトメッセージ（１，２）がキューイングされる。そして、オブジェクトメッセージ（１，２）のキューイングが終わると、処理の実行が図２６の応答開始処理メソッドに戻り、このメソッドの処理が終了すると、図９のメッセージ配送処理が実行されて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージ（１，２）が配送される。
【０２０２】
これにより、図２２に示す応答メッセージ取得処理メソッドの実行が開始され、まずＳ６１０にて、ＲＡＭ６の上記特定領域から、テスタ８へ送信すべきエンジン回転数のデータが、１バイト分だけ読み出される。尚、このＳ６１０では、前述したように、当該Ｓ６１０の処理が行われる毎に、ＲＡＭ６の上記特定領域からエンジン回転数のデータを先頭の１バイト目から順に読み出す。
【０２０３】
そして、続くＳ６２０にて、メッセージ送信要求（２，４）が出される。
すると、図７のメッセージキューイング処理が実行されて、オブジェクトメッセージ格納部１２にオブジェクトメッセージ（２，４）がキューイングされる。そして、オブジェクトメッセージ（２，４）のキューイングが終わると、処理の実行が図２２の応答メッセージ取得処理メソッドに戻り、このメソッドの処理が終了すると、図９のメッセージ配送処理が実行されて、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージ（２，４）が配送される。
【０２０４】
これにより、図２７に示す送信処理メソッドの実行が開始される。
図２７に示すように、送信処理メソッドの実行が開始されると、まずＳ７６０にて、上記応答メッセージ取得処理メソッドのＳ６１０でＲＡＭ６から読み出されたエンジン回転数の１バイト分のデータが、テスタ８側で受信可能なデータに逆変換されて、シリアル通信用インターフェースの送信レジスタに転送される。そして、続くＳ７６５にて、上記送信レジスタ内の１バイトデータが、テスタ８へ送信される。
【０２０５】
次に、Ｓ７７０にて、テスタ８へ送信したデータ（応答メッセージ）のバイト数をカウントするためのカウンタＣＮが１インクリメントされ、続くＳ７７５にて、上記カウンタＣＮの値が２であるか否かが判定される。尚、カウンタＣＮの初期値は０である。
【０２０６】
ここで、テスタ８へ応答メッセージの１バイト目を送信した時点では、上記カウンタＣＮの値が未だ１であるため、上記Ｓ７７５で否定判定されて、Ｓ７９５に移行する。そして、このＳ７９５にて、図１８に示したＰ１タイマを起動するためにタイマメッセージ送信要求（２，３，Ｐ１）が出される。
【０２０７】
すると、図１１のタイマメッセージキューイング処理が実行されて、前述した手順と全く同様に、タイマメッセージ格納部１３にタイマメッセージ（２，３，Ｐ１）がキューイングされる。尚、この時点で、タイマメッセージ格納部１３には、タイマメッセージ（２，３，Ｐ１）とタイマメッセージ（２，１，Ｐ３）との２つが記憶されることとなる。
【０２０８】
そして、タイマメッセージ（２，３，Ｐ１）のキューイングが終わると、処理の実行が再び図２７の送信処理メソッドに戻るが、応答メッセージの１バイト目を送信した場合（詳しくは、図２７のＳ７７５で否定判定された場合であり、応答メッセージの最終バイトを送信した時でない場合）には、送信処理メソッドの処理がそのまま終了する。
【０２０９】
すると、図９のメッセージ配送処理が実行されて、そのＳ２１０にて、オブジェクトメッセージ格納部１２にオブジェクトメッセージがキューイングされているか否かがチェックされるが、この場合には、キューイングされているオブジェクトメッセージが無いため、メッセージ配送制御部１０はメッセージ受信待ち状態となる。
【０２１０】
そして、その後は、前述した回転数取得処理メソッド（図２３）の実行が終了してから最初に応答開始処理メソッド（図２６）の実行が開始されるまでの期間と同様に、メッセージ配送制御部１０がメッセージ配送状態に戻り、他のオブジェクトのメソッドが順次実行される。
【０２１１】
ここで、図２７の送信処理メソッドのＳ７９５で出されたタイマメッセージ（２，３，Ｐ１）がタイマメッセージ格納部１３にキューイングされてから、時間ｔ１が経過すると、そのタイマメッセージ（２，３，Ｐ１）のタイマカウンタが、図１３のタイマクロック処理のＳ４１０によって０に達する。
【０２１２】
そして、そのタイマメッセージ（２，３，Ｐ１）は、上記タイマクロック処理のＳ４３０により、タイマメッセージ格納部１３からオブジェクトメッセージ格納部１２へ、オブジェクトメッセージ（２，３）としてキューイングし直される。尚、この時点で、タイマメッセージ格納部１３には、タイマメッセージ（２，１，Ｐ３）のみが記憶されることとなる。
【０２１３】
そして更に、そのキューイングし直されたメッセージ（２，３）は、実行中の何れかのメソッドの処理が終了した時点で、各オブジェクトから出される本来のオブジェクトメッセージと全く同様に、図９のメッセージ配送処理によって配送されることとなる。
【０２１４】
このため、タイマメッセージ（２，３，Ｐ１）がタイマメッセージ格納部１３にキューイングされてから時間ｔ１が経過した場合にも、タイマメッセージ（２，３，Ｐ２）がタイマメッセージ格納部１３にキューイングされてから時間ｔ２が経過した場合と全く同様に、オブジェクトメッセージ（２，３）に対応した図２６の応答開始処理メソッドの実行が開始される。そして、その応答開始処理メソッドの次に、図２２の応答メッセージ取得処理メソッドが実行され、次いで、図２７の送信処理メソッドが実行されることとなる。
【０２１５】
そして、応答メッセージ取得処理メソッドと送信処理メソッドとの２回目の実行により、テスタ８へ、応答メッセージの最終バイトである２バイト目が送信されることとなる。
ここで、こうした２バイト目の送信時において、図２７の送信処理メソッドでは、Ｓ７７５にて、カウンタＣＮの値が２であると肯定判定され、次のＳ７８０にて、カウンタＣＮの値が０に初期化される。
【０２１６】
そして、図１８に示したＰ３タイマの再起動を行うために、まずＳ７８５にて、タイマメッセージ削除要求（２，１）が出される。
すると、図１５のタイマメッセージ削除処理が実行されて、タイマメッセージ格納部１３からタイマメッセージ（２，１，Ｐ３）が消去される。
【０２１７】
即ち、まず図１５のＳ５００にて、タイマメッセージ格納部１３の中から、ＯＩＤ及びＭＩＤがタイマメッセージ削除要求（２，１）と一致しているタイマメッセージ（２，１，Ｐ３）が、消去対象のタイマメッセージとして選択され、Ｓ５２０にて、そのタイマメッセージ（２，１，Ｐ３）が書き込まれているタイマメッセージブロックの記憶内容が消去され、更にＳ５３０にて、記憶内容を消去したタイマメッセージブロックが、タイマメッセージ格納部１３から空きメモリブロック格納部１４へ、空きメモリブロックとして返却される。
【０２１８】
そして、このようにしてタイマメッセージ（２，１，Ｐ３）の消去が終わると、処理の実行が図２７の送信処理メソッドに戻り、図２７のＳ７９０にて、タイマメッセージ送信要求（２，１，Ｐ３）が出される。
すると、図１１のタイマメッセージキューイング処理が実行されて、タイマメッセージ格納部１３に、タイマメッセージ（２，１，Ｐ３）が改めてキューイングされ、これにより、図１８に示したＰ３タイマの再起動が完了する。
【０２１９】
そして、タイマメッセージ（２，１，Ｐ３）のキューイングが終わると、処理の実行が再び図２７の送信処理メソッドに戻り、このメソッドの処理が終了すると、図９のメッセージ配送処理が実行されるが、この場合には、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージが無いため、図９の２１０で否定判定されて、メッセージ配送制御部１０はメッセージ受信待ち状態となる。
【０２２０】
その後、前述した回転数取得処理メソッド（図２３）の実行が終了してから最初に応答開始処理メソッド（図２６）の実行が開始されるまでの期間と同様に、メッセージ配送制御部１０がメッセージ配送状態に戻り、他のオブジェクトのメソッドが順次実行される。
そして、図２７の送信処理メソッドのＳ７９０で出されたタイマメッセージ（２，１，Ｐ３）がタイマメッセージ格納部１３にキューイングされてから（つまり、Ｐ３タイマが再起動されてから）、時間ｔ３が経過すると、そのタイマメッセージ（２，１，Ｐ３）のタイマカウンタが、図１３のタイマクロック処理のＳ４１０によって０となり、そのタイマメッセージ（２，１，Ｐ３）が、タイマクロック処理のＳ４３０により、タイマメッセージ格納部１３からオブジェクトメッセージ格納部１２へ、オブジェクトメッセージ（２，１）としてキューイングし直される。そして更に、そのキューイングし直されたメッセージ（２，１）は、実行中の何れかのメソッドの処理が終了した時点で、図９のメッセージ配送処理により配送されることとなる。
【０２２１】
このため、テスタ８へ応答メッセージの最終バイト（２バイト目）を送信してから時間ｔ３が経過すると、オブジェクトメッセージ（２，１）に対応した図２４の受信待ち処理メソッドの実行が開始される。
そして、図２４に示すように、受信待ち処理メソッドの実行が開始されると、そのＳ７００にて、通信回路７やマイクロコンピュータ内のシリアル通信用インターフェースが受信可能状態に設定され、その後、当該受信待ち処理メソッドの実行が終了する。
【０２２２】
すると、図９のメッセージ配送処理が実行されるが、この場合には、オブジェクトメッセージ格納部１２にキューイングされているオブジェクトメッセージが無いため、図９の２１０で否定判定されて、メッセージ配送制御部１０はメッセージ受信待ち状態となる。
【０２２３】
そして、その後、前述した回転数取得処理メソッド（図２３）の実行が終了してから最初に応答開始処理メソッド（図２６）の実行が開始されるまでの期間と同様に、メッセージ配送制御部１０がメッセージ配送状態に戻って、他のオブジェクトのメソッドが順次実行される。そして、テスタ８からの次の要求メッセージが受信されると、前述の通信動作起動用メソッドが実行されてメッセージ送信要求（２，２）が出され、それに伴い、テスタ８へ応答メッセージを送信するための前述した各処理が、再び順次行われることとなる。
【０２２４】
一方、テスタ８からの要求メッセージを正常に受信したにも拘わらず、その時点から時間ｔ３以内に何らかの原因で応答メッセージを送信できなかった場合には、図２７に示した送信処理メソッドのＳ７８５が実行されず、タイマメッセージ削除要求（２，１）が出されなくなる。
【０２２５】
よって、何らかの原因で応答メッセージを送信できなかった場合には、図２５のテスタ読み込み処理メソッドのＳ７３０で出されたタイマメッセージ（２，１，Ｐ３）がタイマメッセージ格納部１３にキューイングされてから（つまり、Ｐ３タイマが最初に起動されてから）、時間ｔ３が経過すると、そのタイマメッセージ（２，１，Ｐ３）のタイマカウンタが図１３のタイマクロック処理のＳ４１０によって０となり、そのタイマメッセージ（２，１，Ｐ３）が、タイマクロック処理のＳ４３０により、タイマメッセージ格納部１３からオブジェクトメッセージ格納部１２へ、オブジェクトメッセージ（２，１）としてキューイングし直されることとなる。そして、そのキューイングし直されたメッセージ（２，１）は、図９のメッセージ配送処理により配送されることとなる。
【０２２６】
このため、テスタ８からの要求メッセージを受信してから、応答メッセージを送信できずに時間ｔ３が経過した場合にも、図２４の受信待ち処理メソッドの実行が開始されて、そのＳ７００により、通信回路７やシリアル通信用インターフェースが受信可能状態に設定されることとなり、テスタ８から再送信される要求メッセージの受信準備がなされる。
【０２２７】
そして、図２１〜図２８に示した各オブジェクトＯＢ１〜ＯＢ３のメソッドが上述したように順次実行されることにより、テスタ８との間のデータ通信を制御するための処理が、図１８及び図１９のメッセージシーケンスチャートに示した順序で行われることとなる。
【０２２８】
尚、本実施形態では、図７のメッセージキューイング処理が、第１の記憶制御手段に相当し、図９のメッセージ配送処理が、起動制御手段に相当している。そして、図１１のタイマメッセージキューイング処理が、第２の記憶制御手段に相当し、図１３のタイマクロック処理が、遅延制御手段に相当している。また、図１５のタイマメッセージ削除処理が、消去手段に相当し、ＲＯＭ５及びそれに格納された接続情報データベース１６が、格納位置記憶手段に相当している。
【０２２９】
以上のように、本実施形態のＥＣＵ１では、オブジェクトのメソッドの実行により、タイマカウンタが含まれないオブジェクトメッセージ（メッセージ送信要求）が出されると、図７のメッセージキューイング処理を実行して、そのオブジェクトメッセージをオブジェクトメッセージ格納部１２に記憶（キューイング）するようにしている。
【０２３０】
そして、何れかのオブジェクトのメソッドの実行が終了した時点で、図９のメッセージ配送処理を実行して、オブジェクトメッセージ格納部１２に記憶されているオブジェクトメッセージのうち最初に記憶されたオブジェクトメッセージを読み出し、その読み出したオブジェクトメッセージの出力先であるオブジェクトのメソッドの実行へ移行すると共に、その読み出したオブジェクトメッセージをオブジェクトメッセージ格納部１２から消去するようにしている。
【０２３１】
このため、本実施形態のＥＣＵ１によれば、各オブジェクトのメソッドを、リアルタイムに実行することができる。つまり、オブジェクト間メッセージ通信にフラグチェックの手法を適用した場合の如くリアルタイム性に欠けることがなく、各オブジェクトのメソッドをイベントドリブンで実行することができる。
【０２３２】
しかも、オブジェクト間メッセージ通信に関数コールの手法を適用した場合のように、実行中のオブジェクトのメソッドを中断して他のオブジェクトのメソッドを実行する、といったものではないため、各オブジェクトのメソッドを、多くのメモリ資源を消費することなく実行することができる。つまり、オブジェクト間メッセージ通信に関数コールの手法を適用した場合には、マイクロコンピュータのプログラムカウンタや各種レジスタ（図示省略）の値を記憶しなければならないが、本実施形態のＥＣＵ１によれば、メッセージのみを記憶すれば良く、記憶すべき情報量が格段に少なくて済む。
【０２３３】
また、本実施形態のＥＣＵ１では、オブジェクトメッセージ格納部１２から読み出して配送したオブジェクトメッセージを、そのオブジェクトメッセージ格納部１２から消去するようにしている。詳しくは、読み出したオブジェクトメッセージが格納されていたオブジェクトメッセージ格納部１２のメモリブロックを、空きメモリブロック格納部１４へ返すようにしている。このため、オブジェクトメッセージ格納部１２内に不用となったオブジェクトメッセージが残ることを防止でき、メモリ資源であるＲＡＭ６の記憶領域を有効に活用することができる。
【０２３４】
そして更に、本実施形態のＥＣＵ１では、オブジェクトのメソッドの実行により、タイマカウンタが含まれたタイマメッセージ（タイマメッセージ送信要求）が出されると、図１１のタイマメッセージキューイング処理を実行して、そのタイマメッセージをタイマメッセージ格納部１３に記憶（キューイング）するようにしている。
【０２３５】
また、所定時間ｔ毎のタイマクロック要求が発生する度に図１３のタイマクロック処理を実行して、タイマメッセージ格納部１３に記憶されているタイマメッセージのタイマカウンタを１ずつ減らすと共に、タイマカウンタが０に達したタイマメッセージを、オブジェクトメッセージ格納部１２にオブジェクトメッセージとして記憶し直すようにしている。そして、オブジェクトメッセージ格納部１２にオブジェクトメッセージとして記憶し直されたタイマメッセージは、オブジェクトから出される本来のオブジェクトメッセージと全く同様に、図９のメッセージ配送処理によって読み出され、その結果、そのメッセージのＯＩＤ及びＭＩＤにより指定されるオブジェクトのメソッドが実行されることとなる。
【０２３６】
よって、オブジェクトのメソッドの実行によりタイマメッセージ出されると、そのタイマメッセージのタイマカウンタに相当する時間（＝ｔ×タイマカウンタの値）が経過してから、当該タイマメッセージのＯＩＤ及びＭＩＤにより指定されるオブジェクトのメソッドが実行されることとなる。
【０２３７】
このため、本実施形態のＥＣＵ１によれば、各オブジェクトのメソッドを、リアルタイムに且つ多くのメモリ資源を消費することなく実行することができるだけではなく、ある時点から所定の時間が経過した後に特定のオブジェクトのメソッドの実行を開始する、といった時間待ち処理をも容易に実現することができる。
【０２３８】
例えば、前述した図１７〜図２８の具体例では、図２５のテスタ読み込み処理メソッドのＳ７２５でタイマメッセージ（２，３，Ｐ２）が出されてから（図１８に示したＰ２タイマの起動から）、時間ｔ２が経過した後に、図２６の応答開始処理メソッドの実行を開始することができ、また、図２７の送信処理メソッドのＳ７９５でタイマメッセージ（２，３，Ｐ１）が出されてから（図１８に示したＰ１タイマの起動から）、時間ｔ１が経過した後に、図２６の応答開始処理メソッドの実行を開始することができる。また更に、図２７の送信処理メソッドのＳ７９０でタイマメッセージ（２，１，Ｐ３）が出されてから（図１８に示したＰ３タイマの再起動から）、時間ｔ３が経過した後に、図２４の受信待ち処理メソッドの実行を開始することができる。
【０２３９】
しかも、本実施形態のＥＣＵ１によれば、タイマメッセージ格納部１３に記憶されているタイマメッセージのタイマカウンタが０に達するまでの期間においても、他のオブジェクトのメソッドを順次実行することができるため、処理を進めていく上で無駄な時間消費が生じることもない。
【０２４０】
また、本実施形態のＥＣＵ１では、タイマメッセージ格納部１３が複数個のタイマメッセージを記憶可能であると共に、図１３のタイマクロック処理においては、タイマメッセージ格納部１３に記憶されている全てのタイマメッセージのタイマカウンタを１ずつ減らし、タイマカウンタが０に達したタイマメッセージを、タイマメッセージ格納部１３からオブジェクトメッセージ格納部１２へ、オブジェクトメッセージとして記憶し直すようにしている。
【０２４１】
このため、本実施形態のＥＣＵ１によれば、タイマメッセージ格納部１３に複数のタイマメッセージが記憶されている状況下において、複数のメソッドの実行開始を遅らせるための各時間を、並列に計時することとなり、複数系統の時間待ち処理を容易に行うことができるようになる。
【０２４２】
例えば、前述した図１７〜図２８の具体例では、図２５のテスタ読み込み処理メソッドのＳ７２５でタイマメッセージ（２，３，Ｐ２）が出されてから（図１８に示したＰ２タイマの起動から）、図２６の応答開始処理メソッドの実行を開始するまでの時間ｔ２の計時と、図２５のテスタ読み込み処理メソッドのＳ７３０でタイマメッセージ（２，１，Ｐ３）が出されてから（図１８に示した最初のＰ３タイマの起動から）、図２４の受信待ち処理メソッドの実行を開始するまでの時間ｔ３の計時とを、並列に行うことができる。また、図２７の送信処理メソッドのＳ７９５でタイマメッセージ（２，３，Ｐ１）が出されてから（図１８に示したＰ１タイマの起動から）、図２６の応答開始処理メソッドの実行を開始するまでの時間ｔ１の計時と、図２５のテスタ読み込み処理メソッドのＳ７３０でタイマメッセージ（２，１，Ｐ３）が出されてから図２４の受信待ち処理メソッドの実行を開始するまでの時間ｔ３の計時とを、並列に行うことができる。
【０２４３】
しかも、本実施形態のＥＣＵ１では、オブジェクトメッセージ格納部１２にオブジェクトメッセージとして記憶し直したタイマメッセージを、タイマメッセージ格納部１３から消去するようにしている。詳しくは、タイマメッセージが格納されていたタイマメッセージ格納部１３のメモリブロックを、オブジェクトメッセージ格納部１２へ移動させるようにしている。このため、タイマメッセージ格納部１３に不用となった（即ち、タイマカウンタが０となった）タイマメッセージが残ることを防止でき、メモリ資源であるＲＡＭ６の記憶領域を有効に活用することができる。
【０２４４】
そして更に、本実施形態のＥＣＵ１では、オブジェクトのメソッドの実行により、タイマメッセージ削除要求が出されると、図１５のタイマメッセージ削除処理を実行して、そのタイマメッセージ削除要求とＯＩＤ及びＭＩＤが一致するタイマメッセージを、タイマメッセージ格納部１３から消去するようにしている。
【０２４５】
このため、本実施形態のＥＣＵ１によれば、ある時点から所定の時間が経過するまでに、監視対象の処理が行われないと、特定のオブジェクトのメソッドを実行する、といったタイムアウト処理を、タイマ割り込み機構のような特別な手段を設けることなく、容易に実現することができる。
【０２４６】
例えば、前述した図１７〜図２８の具体例では、図２５のテスタ読み込み処理メソッドのＳ７３０でタイマメッセージ（２，１，Ｐ３）が出されてから（図１８に示した最初のＰ３タイマの起動から）、時間ｔ３が経過するまでの間に、図２７の送信処理メソッドが２回実行されなければ、その送信処理メソッドのＳ７８５でタイマメッセージ削除要求（２，１）が出されないため、図１８に示した最初のＰ３タイマの起動から時間ｔ３が経過すると、特定のオブジェクトのメソッドとしての、図２４の受信待ち処理メソッドが実行されることとなる。
【０２４７】
一方更に、本実施形態のＥＣＵ１では、オブジェクトのメソッドの実行によって出されるメッセージに、出力先のオブジェクトのメソッドを示す識別コードとしての、ＯＩＤ（オブジェクト識別番号）とＭＩＤ（メソッド識別番号）とが含まれている。また、本実施形態のＥＣＵ１は、図３に示したように、ＯＩＤとＭＩＤの各組み合せと、それら各組み合せが示すオブジェクトのメソッドが格納されているＲＯＭ５の先頭アドレスである格納位置情報としての実行開始アドレスとを、対応付けて記憶した接続情報データベース１６を備えている。そして、図９のメッセージ配送処理では、オブジェクトメッセージ格納部１２から読み出したオブジェクトメッセージのＯＩＤ及びＭＩＤに対応するオブジェクトのメソッドの実行開始アドレスを、接続情報データベース１６の記憶内容から特定して、上記読み出したオブジェクトメッセージの出力先であるオブジェクトのメソッドの実行へ移行するようにしている。
【０２４８】
このため、プログラムの設計変更等に伴うオブジェクトの修正によって、そのオブジェクトを構成するメソッドのＲＯＭ５における格納位置が変わった場合でも、接続情報データベース１６の内容を変更するだけで、対応することができる。つまり、各オブジェクトの独立性が向上し、プログラムの設計変更が容易となる。
【０２４９】
以上、本発明の一実施形態について説明したが、本発明は、前述した実施形態に限定されるものではなく、種々の形態を採り得ることは言うまでもない。
例えば、上記実施形態において、図１３のタイマクロック処理を起動するイベントとしてのタイマクロック要求は、所定時間ｔ毎に発生するものであったが、そのタイマクロック要求は、回転センサからパルス信号が出力された時など、時間に非同期なイベントに応じて発生するように構成することもできる。例えば、回転センサからパルス信号が出力された時にタイマクロック要求が発生するように構成した場合には、タイマメッセージ格納部１３に記憶されている各タイマメッセージのタイマカウンタは、回転センサからパルス信号が出力される毎に、１ずつ減算されることとなる。
【０２５０】
また、上記実施形態では、全てのオブジェクトが１つのＲＯＭ５に格納されていたが、オブジェクトのメソッドが複数のＲＯＭに格納されている場合には、接続情報データベース１６内の格納位置情報としては、どのＲＯＭのどの実行開始アドレスといった情報を記憶させておけば良い。
【０２５１】
一方、上記実施形態のＥＣＵ１は、車両のエンジンを制御するものであったが、本発明は、例えば車両の自動変速機やサスペンションなど、その他の制御対象を制御する電子制御装置に対しても、全く同様に適用することができる。
【図面の簡単な説明】
【図１】  実施形態の電子制御装置（ＥＣＵ）のハードウェア構成を表すブロック図である。
【図２】  ＲＯＭに格納された制御用の各オブジェクトと、メッセージ配送制御部との関係を示す概念図である。
【図３】  接続情報データベースを説明する説明図である。
【図４】  メッセージ配送制御部の状態遷移を説明する状態遷移図である。
【図５】  メッセージ配送制御部の初期化処理を表すフローチャートである。
【図６】  メッセージ配送制御部のシリアライズ処理を表すフローチャートである。
【図７】  メッセージ配送制御部のメッセージキューイング処理を表すフローチャートである。
【図８】  メッセージキューイング処理を説明する説明図である。
【図９】  メッセージ配送制御部のメッセージ配送処理を表すフローチャートである。
【図１０】  メッセージ配送処理を説明する説明図である。
【図１１】  メッセージ配送制御部のタイマメッセージキューイング処理を表すフローチャートである。
【図１２】  タイマメッセージキューイング処理を説明する説明図である。
【図１３】  メッセージ配送制御部のタイマクロック処理を表すフローチャートである。
【図１４】  タイマクロック処理を説明する説明図である。
【図１５】  メッセージ配送制御部のタイマメッセージ削除処理を表すフローチャートである。
【図１６】  タイマメッセージ削除処理を説明する説明図である。
【図１７】  ＥＣＵとテスタとの間のデータ通信上の規則を説明する説明図である。
【図１８】  テスタとのデータ通信を制御するための各オブジェクトの処理概要を表すメッセージシーケンスチャートである。
【図１９】  図１８にて六角形の枠で示した応答メッセージ送信処理の部分のメッセージシーケンスチャートである。
【図２０】  テスタとのデータ通信を制御するための各オブジェクトのメソッドを説明する説明図である。
【図２１】  サービスオブジェクトの要求メッセージ受信通知処理メソッドを表すフローチャートである。
【図２２】  サービスオブジェクトの応答メッセージ取得処理メソッドを表すフローチャートである。
【図２３】  サービスオブジェクトの回転数保存処理メソッドを表すフローチャートである。
【図２４】  通信ハンドラオブジェクトの受信待ち処理メソッドを表すフローチャートである。
【図２５】  通信ハンドラオブジェクトのテスタ読み込み処理メソッドを表すフローチャートである。
【図２６】  通信ハンドラオブジェクトの応答開始処理メソッドを表すフローチャートである。
【図２７】  通信ハンドラオブジェクトの送信処理メソッドを表すフローチャートである。
【図２８】  回転センサオブジェクトの回転数取得処理メソッドを表すフローチャートである。
【図２９】  オブジェクト指向によって作成されたプログラムの一例を説明するメッセージシーケンスチャートである。
【図３０】  オブジェクト間メッセージ通信にフラグチェックの手法を適用した場合の問題を説明する説明図である。
【図３１】  オブジェクト間メッセージ通信に関数コールの手法を適用した場合の問題を説明する説明図である。
【符号の説明】
１…電子制御装置（ＥＣＵ）    ２…入力回路    ３…ＣＰＵ
４…出力回路    ５…ＲＯＭ    ６…ＲＡＭ    ７…通信回路
８…故障診断用の外部装置（テスタ）    ９…通信線
１０…メッセージ配送制御部    １２…オブジェクトメッセージ格納部
１３…タイマメッセージ格納部    １４…空きメモリブロック格納部
１６…接続情報データベース    ＯＢ１…サービスオブジェクト
ＯＢ２…通信ハンドラオブジェクト    ＯＢ３…回転センサオブジェクト
【図１】
0003663950.tif 000002
【図２】
0003663950.tif 000003
【図３】
0003663950.tif 000004
【図４】
0003663950.tif 000005
【図５】
0003663950.tif 000006
【図６】
0003663950.tif 000007
【図７】
0003663950.tif 000008
【図８】
0003663950.tif 000009
【図９】
0003663950.tif 000010
【図１０】
0003663950.tif 000011
【図１１】
0003663950.tif 000012
【図１２】
0003663950.tif 000013
【図１３】
0003663950.tif 000014
【図１４】
0003663950.tif 000015
【図１５】
0003663950.tif 000016
【図１６】
0003663950.tif 000017
【図１７】
0003663950.tif 000018
【図１８】
0003663950.tif 000019
【図１９】
0003663950.tif 000020
【図２０】
0003663950.tif 000021
【図２１】
0003663950.tif 000022
【図２２】
0003663950.tif 000023
【図２３】
0003663950.tif 000024
【図２４】
0003663950.tif 000025
【図２５】
0003663950.tif 000026
【図２６】
0003663950.tif 000027
【図２７】
0003663950.tif 000028
【図２８】
0003663950.tif 000029
【図２９】
0003663950.tif 000030
【図３０】
0003663950.tif 000031
【図３１】
0003663950.tif 000032