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