(57)【要約】【課題】イベントの処理順を保ち、イベントの種類や数が変わった場合の保守性を向上させる。【解決手段】入力処理ルーチン１１２は、対応するイベントが入力されているかどうかをチェックし（図３（ａ）参照）、イベントが入力されていれば、簡易ＯＳ１２１のイベントキューＩＱにキューイングする（図３（ａ）−２参照）。簡易ＯＳ１２１は、イベントキューＩＱをチェックし（図３（ｂ）参照）、イベントがキューイングされていれば、イベントに対応するイベントテーブルを参照してイベントに対応するアプリケーションユニットのユーザ関数群を呼び出して順次実行する（図３（ｂ）−１参照）。【選択図】  図３
2006146789.tif 000002
【特許請求の範囲】
【請求項１】
入力装置からイベントを入力する入力フェーズと、前記イベントに対応するアプリケーションユニットのユーザ関数群を実行するアプリケーションフェーズと、前記ユーザ関数群の処理結果に基づいて出力装置への出力を制御する出力フェーズとからなる制御処理を繰り返し行う電子制御装置であって、
入力フェーズで入力装置からのイベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャ手段と、
アプリケーションフェーズで前記イベントキューにキューイングされたイベントをデキューして該イベントに対応するアプリケーションユニットのユーザ関数群を実行するイベントハンドラ手段と
を有することを特徴とする電子制御装置。
【請求項２】
入力装置から外部イベントを入力する入力フェーズと、前記外部イベントに対応するアプリケーションユニットのユーザ関数群を実行するアプリケーションフェーズと、前記ユーザ関数群の処理結果に基づいて出力装置への出力を制御する出力フェーズとからなる制御処理を繰り返し行う電子制御装置であって、
入力フェーズで入力装置からの外部イベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャ手段と、
入力フェーズで前記入力処理ルーチンによって入力された外部イベントを入力調停ルーチンにより入力調停する入力調停マネージャ手段と、
アプリケーションフェーズで前記イベントキューにキューイングされた外部イベントをデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する外部イベントハンドラ手段と、
アプリケーションフェーズでタイマ処理に対応するアプリケーションユニットのユーザ関数群を実行するタイマ処理ハンドラ手段と、
アプリケーションフェーズで前記タイマ処理に対応するアプリケーションユニットのユーザ関数群の実行により前記イベントキューにキューイングされた内部イベントをデキューして該内部イベントに対応するアプリケーションユニットのユーザ関数群を実行する内部イベントハンドラ手段と、
アプリケーションフェーズで逐次処理に対応するアプリケーションユニットのユーザ関数群を逐次実行する逐次処理ハンドラ手段と、
出力フェーズで前記ユーザ関数群の処理結果の出力装置への出力を出力調停ルーチンにより調停する出力調停マネージャ手段と、
出力フェーズで前記出力調停ルーチンによる出力調停結果に基づいて出力処理ルーチンにより出力装置への出力を行う出力処理マネージャ手段と
を有することを特徴とする電子制御装置。
【請求項３】
前記外部イベントハンドラ手段，前記タイマ処理ハンドラ手段，前記内部イベントハンドラ手段，および前記逐次処理ハンドラ手段を順次実行する簡易ＯＳ手段を備えることを特徴とする請求項２に記載の電子制御装置。
【請求項４】
前記制御処理は、所定時間毎に実行し、該制御処理は前記所定時間内に完了することを特徴とする請求項１ないし３のいずれかに記載の電子制御装置。
【請求項５】
イベント毎に当該イベントに対応するアプリケーションユニットのユーザ関数群のアドレスを格納するイベントテーブルと、
イベントに対応するイベントテーブルへのポインタを先入れ先出し方式で蓄積するイベントキューと、
イベントを検出したときに該イベントに対応するイベントテーブルへのポインタを前記イベントキューにキューイングする入力処理手段と、
前記イベントキューからイベントに対応するイベントテーブルへのポインタをデキューし、該ポインタが指すイベントテーブルを参照して該イベントに対応するアプリケーションユニットのユーザ関数群を呼び出すイベントハンドラ手段と
を有することを特徴とする電子制御装置。
【請求項６】
イベント毎に当該イベントに対応するアプリケーションユニットのユーザ関数群のアドレスを格納するイベントテーブルと、
イベントに対応するイベントテーブルへのポインタを先入れ先出し方式で蓄積するイベントキューと、
入力装置からの外部イベントを入力処理ルーチンにより前記イベントキューにキューイングする入力処理マネージャ手段と、
前記入力処理ルーチンによって入力された外部イベントを入力調停ルーチンにより入力調停する入力調停マネージャ手段と、
前記イベントキューにキューイングされた外部イベントをデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する外部イベントハンドラ手段と、
タイマ処理に対応するアプリケーションユニットのユーザ関数群を実行するタイマ処理ハンドラ手段と、
前記タイマ処理に対応するアプリケーションユニットのユーザ関数群の実行によりイベントキューにキューイングされた内部イベントをデキューして該内部イベントに対応するアプリケーションユニットのユーザ関数群を実行する内部イベントハンドラ手段と、
逐次処理に対応するアプリケーションユニットのユーザ関数群を実行する逐次処理ハンドラ手段と、
前記ユーザ関数群の処理結果の出力装置への出力を出力調停ルーチンにより調停する出力調停マネージャ手段と、
前記出力調停ルーチンによる出力調停結果に基づいて出力処理ルーチンにより出力装置への出力を行う出力処理マネージャ手段と
を有することを特徴とする電子制御装置。
【請求項７】
入力装置からイベントを入力する入力フェーズと、前記イベントに対応するアプリケーションユニットのユーザ関数群を実行するアプリケーションフェーズと、前記ユーザ関数群の処理結果に基づいて出力装置への出力を制御する出力フェーズとからなる制御処理を繰り返し行う電子制御装置の制御方法であって、
入力装置からのイベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャを実行する工程と、
前記イベントキューからイベントをデキューしてイベントハンドラにより該イベントに対応するアプリケーションユニットのユーザ関数群を実行する工程と
を含むことを特徴とする電子制御装置の制御方法。
【請求項８】
入力装置から外部イベントを入力する入力フェーズと、前記外部イベントに対応するアプリケーションユニットのユーザ関数群を実行するアプリケーションフェーズと、前記ユーザ関数群の処理結果に基づいて出力装置への出力を制御する出力フェーズとからなる制御処理を繰り返し行う電子制御装置の制御方法であって、
入力装置からの外部イベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャを実行する工程と、
前記入力処理ルーチンによって入力された外部イベントを入力調停ルーチンにより入力調停する入力調停マネージャを実行する工程と、
前記イベントキューから外部イベントをデキューして外部イベントハンドラにより該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する工程と、
タイマ処理ハンドラにより起動時刻を経過したタイマ処理に対応するアプリケーションユニットのユーザ関数群を実行する工程と、
前記タイマ処理に対応するアプリケーションユニットのユーザ関数群の実行によって前記イベントキューにキューイングされている内部イベントをデキューして内部イベントハンドラにより該内部イベントに対応するアプリケーションユニットのユーザ関数群を実行する工程と、
逐次処理ハンドラにより逐次処理に対応するアプリケーションユニットのユーザ関数群を実行する工程と、
前記ユーザ関数群の処理結果の出力装置への出力を出力調停ルーチンにより調停する出力調停マネージャを実行する工程と、
前記出力調停ルーチンの出力調停結果に基づいて出力処理ルーチンにより出力装置への出力を行う出力処理マネージャを実行する工程と
を含むことを特徴とする電子制御装置の制御方法。
【請求項９】
入力装置からのイベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャと、前記イベントキューにイベントがキューイングされているかどうかをチェックする簡易ＯＳと、前記イベントキューにイベントがキューイングされている場合に該イベントをデキューして該イベントに対応するアプリケーションユニットのユーザ関数群を実行するイベントハンドラとを含むことを特徴とするプログラム。
【請求項１０】
入力装置からの外部イベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャと、前記入力処理ルーチンによって入力された外部イベントを入力調停ルーチンにより入力調停する入力調停マネージャと、前記イベントキューにキューイングされた外部イベントをデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する外部イベントハンドラと、タイマ処理に対応するアプリケーションユニットのユーザ関数群を実行するタイマ処理ハンドラと、前記タイマ処理に対応するアプリケーションユニットのユーザ関数群の実行によりイベントキューにキューイングされた内部イベントをデキューして該内部イベントに対応するアプリケーションユニットのユーザ関数群を実行する内部イベントハンドラと、逐次処理に対応するアプリケーションユニットのユーザ関数群を実行する逐次処理ハンドラと、前記ユーザ関数群の処理結果の出力装置への出力を出力調停ルーチンにより調停する出力調停マネージャと、前記出力調停ルーチンによる出力調停結果に基づいて出力処理ルーチンにより出力装置への出力を行う出力処理マネージャとを含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は電子制御装置およびその制御方法ならびにプログラムに関し、特に車両等に搭載されて制御を行う電子制御装置およびその制御方法ならびにプログラムに関する。
【背景技術】
【０００２】
従来から、メモリに記憶された制御プログラムに従って、例えば所定時間毎に各種センサ等の状態をイベントとして入力し、そのイベントに応じて制御対象（出力装置）を制御するか否かを判定し、制御すると判定された場合にはその制御対象を制御するための出力を行う電子制御装置が知られている。電子制御装置（ＥＣＵ（Electronic Control Unit））は、製品（ボデーＥＣＵ，照合ＥＣＵ，ドアＥＣＵ，…）や、その車種，グレード，仕向け地等によって、扱うイベントの種類や数も異なる。例えば、車両のボデー系システムのボデーＥＣＵは車両の人による操作に関するイベントを扱うので、そのイベントの特徴としては、種類が多く（〜１００以上）、発生頻度が低いことがあげられる。
【０００３】
このような電子制御装置の制御プログラムは、制御対象や制御目的等に応じた所定の機能単位毎にユーザ関数を作成し、イベントに対応するアプリケーションユニットのユーザ関数群をイベントテーブルに登録し、発生したイベントに対応するアプリケーションユニットのユーザ関数群を実行するように構成すること、すなわち複数のユーザ関数を順次実行するスケジューリング方式（シンプルスケジューリング）で実行することで、複数の制御対象の制御または１つの制御対象の複数の制御を１つの電子制御装置で実現していた。
【０００４】
しかしながら、このような電子制御装置では、それぞれのアプリケーションユニットで入力→判断→出力の処理を行っているため、次のような問題があった。すなわち、複数のアプリケーションユニットが同一の入力装置から入力を行ったり、複数のアプリケーションユニットが同一の出力装置に対して出力を行ったりする場合、先に実行されたアプリケーションユニットでの処理と後に実行されたアプリケーションユニットでの処理とにおいて、入力装置から入力したデータが変化してしまい処理結果に矛盾が生じたり、先に実行したアプリケーションユニットによる処理と後に実行したアプリケーションユニットによる処理とで異なるデータを出力してしまい、出力装置が誤動作する可能性があった。そのため、各処理の結果に矛盾が起きないように各アプリケーションユニットによる処理において調停を行う必要があり、その調停のために各アプリケーションユニット間でデータを受け渡しする必要がある。この結果、各アプリケーションユニット間に依存関係が生じてしまい、システムの複雑さが増すにつれて制御プログラムの設計保守等が困難となるといった問題があった。
【０００５】
また、このような電子制御装置では、各アプリケーションユニットの処理において入出力を行っていたため、同一の入出力装置に対して複数のアプリケーションユニットによる処理で入出力を行っており、制御プログラムの入出力コードの重複による無駄が生じるといった問題もあった。
【０００６】
そこで、本願出願人は、イベントフラグ方式を採用することにより、アプリケーションユニットのモジュール性（独立性）を高めてアプリケーションユニットの自由度を向上させることができ、信頼性を確保することができる電子制御装置をすでに提案した（例えば、特許文献１参照）。
【０００７】
ここで、図５を用いて、従来の電子制御装置で採用されているイベントフラグ方式について簡単に説明する。いま、入力処理ルーチンＡは、イベントが検出されないので、イベントフラグ列Ｅ０〜Ｅｎの該当するイベントフラグをクリアしたとする。一方、入力処理ルーチンＢは、イベントを検出したので、イベントフラグ列Ｅ０〜Ｅｎの該当するイベントフラグを立てたとする。例えば、イグニッションスイッチのＯＦＦからＯＮの場合、イグニッションスイッチＯＦＦイベントはイベントフラグＥ５が値“０”
、イグニッションスイッチＯＮイベントはイベントフラグＥ５が値“１”であるとする。次に、簡易ＯＳ（Operating
System）は、イベントフラグ列Ｅ０〜Ｅｎに値“１”のイベントフラグがあるかどうかを走査することによりイベントがあるかどうかを検出し、イベントがあれば、イベントに対応するイベントテーブルＴ５にアドレスが登録されているアプリケーションユニットのユーザ関数群を呼び出して逐次実行する。
【特許文献１】特開２００２−２０２８９１
【発明の開示】
【発明が解決しようとする課題】
【０００８】
このようなイベントフラグ方式を採用している従来の電子制御装置では、イベントフラグと、それに対応するイベントテーブルとの関連をアプリケーションフェーズの簡易ＯＳが管理しているため、扱うイベントの種類や数が変われば、簡易ＯＳを変更しなければならなかった。特に、扱うイベントの数が多く、かつ、そのバリエーションが非常に多いボデー系システムでは、イベントの実行順序がイベントフラグ列Ｅ０〜Ｅｎの走査順序に応じて変化するおそれがあり、イベントの管理が煩雑になりやすく、簡易ＯＳの開発工数の増大を招くという問題点があった。
【０００９】
また、従来の電子制御装置では、制御プログラムを、入力フェーズと、アプリケーションフェーズと、出力フェーズとに分けるとともに、制御プログラムを所定時間毎に実行し、かつ制御処理が前記所定時間内に実行を完了するように制御する。このとき、入力フェーズのための複数の入力処理ルーチンは順次実行する一方、アプリケーションフェーズでは、入力フェーズで入力された外部イベントに対応するアプリケーションユニットのユーザ関数群のみを実行する。そして、出力フェーズでは、アプリケーションフェーズでのユーザ関数群の実行によって生成された処理結果に基づいて出力を行う出力処理ルーチンを順次実行する。すなわち、入力フェーズおよび出力フェーズは、順次呼び出しを行うスケジューリング方式（シンプルスケジューリング）で実行し、アプリケーションフェーズは、イベントの発生時に該イベントに対応するアプリケーションユニットのユーザ関数群を実行する（イベントドリブン方式）。したがって、発生したイベントに対応するアプリケーションユニットのユーザ関数群のみが実行されるため、処理の不要なアプリケーションユニットのユーザ関数群は実行されることがなくなり、電子制御装置の処理の負荷を軽減することができるという利点がある。具体的には、制御処理を前記所定時間内に確実に完了させることが可能になる。
【００１０】
また、従来の電子制御装置によれば、アプリケーションフェーズでは、アプリケーションユニットのユーザ関数群が入力装置および出力装置への入出力は行わないように構成する。したがって、アプリケーションユニットは、入出力の前後の依存関係を考慮することなく作成することが可能となり、信頼性が向上する。また、アプリケーションユニットは、独立したユーザ関数群として、例えば機能単位のユーザ関数の追加や削除を容易に行うことができる。さらに、従来のようにそれぞれのアプリケーションユニットのユーザ関数群内に入出力コードを記述して入出力を行う場合に比べ、制御プログラムのサイズを小さくすることが可能となり、電子制御装置のＲＯＭ（Read Only Memory）等のメモリ容量を削減することができる。
【００１１】
このような従来の電子制御装置では、制御プログラムを所定時間毎に実行し、かつ制御処理が前記所定時間内に実行を完了するように制御していたので、入力フェーズ，アプリケーションフェーズ，および出力フェーズの各フェーズで入力データや出力結果の矛盾が生じないように、１つのイベントに対応するアプリケーションユニットのユーザ関数群の処理結果を他のユーザ関数の実行時に利用する場合には、次の周回での他のユーザ関数の実行時まで該処理結果を利用しないようにしていた。このため、処理結果の利用までに最大で所定時間のタイムスリットが生じ、この間にタイマ処理等が発生して上記処理結果が変更されてしまった場合には、処理結果の利用に矛盾が生じるおそれがあった。
【００１２】
本発明の第１の目的は、上述の点に鑑み、イベントキュー方式を採用することにより、イベントの発生順序とイベントの処理順序との間の順序関係を保ち、簡易ＯＳの開発工数の増大を抑えることができるようにした電子制御装置を提供することにある。
【００１３】
本発明の第２の目的は、外部イベント，タイマ処理および内部イベントの順で処理することにより、外部イベントとタイマ処理との処理順序の逆転を抑えることができるとともに、内部イベントも同一周回で処理することができ、処理結果の利用までのタイムスリットが生じることがないようにした電子制御装置の制御方法を提供することにある。
【００１４】
本発明の第３の目的は、電子制御装置をイベントキュー方式で動作させることができるプログラムを提供することにある。
【課題を解決するための手段および発明の効果】
【００１５】
請求項１に記載の電子制御装置は、入力装置からイベントを入力する入力フェーズと、前記イベントに対応するアプリケーションユニットのユーザ関数群を実行するアプリケーションフェーズと、前記ユーザ関数群の処理結果に基づいて出力装置への出力を制御する出力フェーズとからなる制御処理を繰り返し行う電子制御装置であって、入力フェーズで入力装置からのイベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャ手段と、アプリケーションフェーズで前記イベントキューにキューイングされたイベントをデキューして該イベントに対応するアプリケーションユニットのユーザ関数群を実行するイベントハンドラ手段とを有することを特徴とする。請求項１に記載の電子制御装置によれば、イベントをイベントキューにキューイングするようにしたので、先出し先出し方式によりイベントの発生順序とイベントの処理順序との間の順序関係が保たれ、後のイベントが前のイベントの前に実行されて処理結果に矛盾が生じることが未然に防止される。
【００１６】
請求項２に記載の電子制御装置は、入力装置から外部イベントを入力する入力フェーズと、前記外部イベントに対応するアプリケーションユニットのユーザ関数群を実行するアプリケーションフェーズと、前記ユーザ関数群の処理結果に基づいて出力装置への出力を制御する出力フェーズとからなる制御処理を繰り返し行う電子制御装置であって、入力フェーズで入力装置からの外部イベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャ手段と、入力フェーズで前記入力処理ルーチンによって入力された外部イベントを入力調停ルーチンにより入力調停する入力調停マネージャ手段と、アプリケーションフェーズで前記イベントキューにキューイングされた外部イベントをデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する外部イベントハンドラ手段と、アプリケーションフェーズでタイマ処理に対応するアプリケーションユニットのユーザ関数群を実行するタイマ処理ハンドラ手段と、アプリケーションフェーズで前記タイマ処理に対応するアプリケーションユニットのユーザ関数群の実行により前記イベントキューにキューイングされた内部イベントをデキューして該内部イベントに対応するアプリケーションユニットのユーザ関数群を実行する内部イベントハンドラ手段と、アプリケーションフェーズで逐次処理に対応するアプリケーションユニットのユーザ関数群を逐次実行する逐次処理ハンドラ手段と、出力フェーズで前記ユーザ関数群の処理結果の出力装置への出力を出力調停ルーチンにより調停する出力調停マネージャ手段と、出力フェーズで前記出力調停ルーチンによる出力調停結果に基づいて出力処理ルーチンにより出力装置への出力を行う出力処理マネージャ手段とを有することを特徴とする。請求項２に記載の電子制御装置によれば、イベントをイベントキューにキューイングするようにしたので、先出し先出し方式によりイベントの発生順序とイベントの処理順序との間の順序関係が保たれ、後のイベントが前のイベントの前に実行されて処理結果に矛盾が生じることが未然に防止されるとともに、外部イベントの入力調停および処理結果の出力調停を行うようにしたことにより、外部イベント間の処理順序の逆転，および処理結果の出力順序の逆転を未然に防止できる。加えて、入力装置や出力装置がネットワークを介してデータを伝達するための電子制御装置である場合には、ネットワークによるデータの入出力の遅延を調停することができ、制御プログラムの設計を容易にすることができる。
【００１７】
請求項３に記載の電子制御装置は、前記外部イベントハンドラ手段，前記タイマ処理ハンドラ手段，前記内部イベントハンドラ手段，および逐次処理ハンドラ手段を順次実行する簡易ＯＳ手段を備えることを特徴とする。請求項３に記載の電子制御装置によれば、外部イベント，タイマ処理，および内部イベントの順序でアプリケーションユニットのユーザ関数群が実行されるので、外部イベントとタイマ処理との処理順序の逆転を防止でき、かつ内部イベントも同一周回で処理することができる。このため、処理結果の利用までの最大で所定時間のタイムスリットが生じることがなくなり、処理結果の利用に矛盾が生じることがなくなる。
【００１８】
請求項４に記載の電子制御装置は、前記制御処理は、所定時間毎に実行し、該制御処理は前記所定時間内に完了することを特徴とする。請求項４に記載の電子制御装置によれば、制御処理は繰り返し実行することとなるが、所定時間毎に周期的に制御処理を実行し、その所定時間内に処理が完了することで、例えばリアルタイムＯＳのような複雑な処理を、極力省いた低コストで信頼性の高い電子制御装置とすることができる。
【００１９】
請求項５に記載の電子制御装置は、イベント毎に当該イベントに対応するアプリケーションユニットのユーザ関数群のアドレスを格納するイベントテーブルと、イベントに対応するイベントテーブルへのポインタを先入れ先出し方式で蓄積するイベントキューと、イベントを検出したときに該イベントに対応するイベントテーブルへのポインタを前記イベントキューにキューイングする入力処理手段と、前記イベントキューにイベントがキューイングされている場合に前記イベントキューから該イベントに対応するイベントテーブルへのポインタをデキューし、該ポインタが指すイベントテーブルを参照して該イベントに対応するアプリケーションユニットのユーザ関数群を呼び出すイベントハンドラ手段とを有することを特徴とする。請求項５に記載の電子制御装置によれば、簡易ＯＳはイベントキューにキューイングされたイベントに対応するイベントテーブルに格納されたユーザ関数群を呼び出せばよいので、従来のイベントフラグとそれに対応する関数群との整合を管理する必要がなくなり、簡易ＯＳの開発工数が軽減される。
【００２０】
請求項６に記載の電子制御装置は、イベント毎に当該イベントに対応するアプリケーションユニットのユーザ関数群のアドレスを格納するイベントテーブルと、イベントに対応するイベントテーブルへのポインタを先入れ先出し方式で蓄積するイベントキューと、入力装置からの外部イベントを入力処理ルーチンにより前記イベントキューにキューイングする入力処理マネージャ手段と、前記入力処理ルーチンによって入力された外部イベントを入力調停ルーチンにより入力調停する入力調停マネージャ手段と、前記イベントキューにキューイングされた外部イベントをデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する外部イベントハンドラ手段と、タイマ処理に対応するアプリケーションユニットのユーザ関数群を実行するタイマ処理ハンドラ手段と、前記タイマ処理に対応するアプリケーションユニットのユーザ関数群の実行によりイベントキューにキューイングされた内部イベントをデキューして該内部イベントに対応するアプリケーションユニットのユーザ関数群を実行する内部イベントハンドラ手段と、逐次処理に対応するアプリケーションユニットのユーザ関数群を逐次実行する逐次処理ハンドラ手段と、前記ユーザ関数群の処理結果の出力装置への出力を出力調停ルーチンにより調停する出力調停マネージャ手段と、前記出力調停ルーチンによる出力調停結果に基づいて出力処理ルーチンにより出力装置への出力を行う出力処理マネージャ手段とを有することを特徴とする。請求項６に記載の電子制御装置によれば、イベントをイベントキューにキューイングするようにしたので、先出し先出し方式によりイベントの発生順序とイベントの処理順序との間の順序関係が保たれ、後のイベントが前のイベントの前に実行されて処理結果に矛盾が生じることが未然に防止されるとともに、外部イベントの入力調停および処理結果の出力調停を行うようにしたことにより、外部イベント間の処理順序の逆転，および処理結果の出力順序の逆転を未然に防止できる。加えて、入力装置や出力装置がネットワークを介してデータを伝達するための電子制御装置である場合には、ネットワークによるデータの入出力の遅延を調停することができ、制御プログラムの設計を容易にすることができる。
【００２１】
一方、請求項７に記載の電子制御装置の制御方法は、入力装置からイベントを入力する入力フェーズと、前記イベントに対応するアプリケーションユニットのユーザ関数群を実行するアプリケーションフェーズと、前記ユーザ関数群の処理結果に基づいて出力装置への出力を制御する出力フェーズとからなる制御処理を繰り返し行う電子制御装置の制御方法であって、入力装置からのイベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャを実行する工程と、前記イベントキューに外部イベントがキューイングされているかどうかをチェックし、外部イベントが前記イベントキューにキューイングされている場合に外部イベントハンドラにより該外部イベントを前記イベントキューからデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する工程とを含むことを特徴とする。請求項７に記載の電子制御装置の制御方法によれば、イベントをイベントキューにキューイングするようにしたので、先出し先出し方式によりイベントの発生順序とイベントの処理順序との間の順序関係が保たれ、後のイベントが前のイベントの前に実行されて処理結果に矛盾が生じることが未然に防止される。
【００２２】
請求項８に記載の電子制御装置の制御方法は、入力装置から外部イベントを入力する入力フェーズと、前記外部イベントに対応するアプリケーションユニットのユーザ関数群を実行するアプリケーションフェーズと、前記ユーザ関数群の処理結果に基づいて出力装置への出力を制御する出力フェーズとからなる制御処理を繰り返し行う電子制御装置の制御方法であって、入力装置からの外部イベントをチェックし、外部イベントがある場合に外部イベントに対応する入力処理ルーチンにより該外部イベントをイベントキューにキューイングする入力処理マネージャを実行する工程と、前記入力処理ルーチンによって入力されたイベントの入力調停の必要がある場合に入力調停ルーチンにより入力調停を行う入力調停マネージャを実行する工程と、前記イベントキューから外部イベントをデキューして外部イベントハンドラにより該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する工程と、タイマ処理ハンドラにより起動時刻を経過したタイマ処理に対応するアプリケーションユニットのユーザ関数群を実行する工程と、前記タイマ処理に対応するアプリケーションユニットのユーザ関数群の実行によって前記イベントキューにキューイングされている内部イベントをデキューして内部イベントハンドラにより該内部イベントに対応するアプリケーションユニットのユーザ関数群を実行する工程と、逐次処理ハンドラにより逐次処理に対応するアプリケーションユニットのユーザ関数群を実行する工程と、前記ユーザ関数群の処理結果の出力装置への出力を出力調停ルーチンにより調停する出力調停マネージャを実行する工程と、前記出力調停ルーチンの出力調停結果に基づいて出力処理ルーチンにより出力装置への出力を行う出力処理マネージャを実行する工程とを含むことを特徴とする。請求項８に記載の電子制御装置の制御方法によれば、イベントをイベントキューにキューイングするようにしたので、先出し先出し方式によりイベントの発生順序とイベントの処理順序との間の順序関係が保たれ、後のイベントが前のイベントの前に実行されて処理結果に矛盾が生じることが未然に防止されるとともに、外部イベントの入力調停および処理結果の出力調停を行うようにしたことにより、外部イベント間の処理順序の逆転，および処理結果の出力順序の逆転を未然に防止できる。加えて、入力装置や出力装置がネットワークを介してデータを伝達するための電子制御装置である場合には、ネットワークによるデータの入出力の遅延を調停することができ、制御プログラムの設計を容易にすることができる。
【００２３】
他方、請求項９に記載のプログラムは、入力装置からのイベントを入力処理ルーチンによりイベントキューにキューイングする入力処理マネージャと、前記イベントキューにイベントがキューイングされているかどうかをチェックする簡易ＯＳと、前記イベントキューにイベントがキューイングされている場合に該外部イベントをデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する外部イベントハンドラとを含むことを特徴とする。請求項９に記載のプログラムによれば、イベントをイベントキューにキューイングするようにしたので、先出し先出し方式によりイベントの発生順序とイベントの処理順序との間の順序関係が保たれ、後のイベントが前のイベントの前に実行されて処理結果に矛盾が生じることが未然に防止される電子制御装置を容易に実現することができる。
【００２４】
請求項１０に記載のプログラムは、入力装置からの外部イベントをチェックする入力処理マネージャと、該外部イベントをイベントキューにキューイングする入力処理ルーチンと、前記入力処理ルーチンによって入力されたイベントに基づいて前記イベントキューにキューイングされた外部イベントの入力調停が必要かどうかを判断する入力調停マネージャと、前記入力調停マネージャにより入力調停が必要であると判断された場合に入力調停を実行する入力調停ルーチンと、前記イベントキューにキューイングされた外部イベントをデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群を実行する外部イベントハンドラと、タイマ処理に対応するアプリケーションユニットのユーザ関数群を実行するタイマ処理ハンドラと、前記タイマ処理に対応するアプリケーションユニットのユーザ関数群の実行によりイベントキューにキューイングされた内部イベントをデキューして該内部イベントに対応するアプリケーションユニットのユーザ関数群を実行する内部イベントハンドラと、逐次処理に対応するアプリケーションユニットのユーザ関数群を逐次実行する逐次処理ハンドラと、前記ユーザ関数群の処理結果の出力装置への出力を出力調停する必要があるかどうかを判断する出力調停マネージャと、前記出力調停マネージャにより出力調停が必要であると判断された出力を調停する出力調停ルーチンと、、前記出力調停マネージャによる出力調停結果に基づいて出力処理ルーチンにより出力装置への出力を実行する出力処理マネージャとを含むことを特徴とする。請求項１０に記載のプログラムによれば、先出し先出し方式によりイベントの発生順序とイベントの処理順序との間の順序関係が保たれ、後のイベントが前のイベントの前に実行されて処理結果に矛盾が生じることが未然に防止されるとともに、外部イベントの入力調停および処理結果の出力調停を行うようにしたことにより、外部イベント間の処理順序の逆転，および処理結果の出力順序の逆転を未然に防止できる。加えて、入力装置や出力装置がネットワークを介してデータを伝達するための電子制御装置である場合には、ネットワークによるデータの入出力の遅延を調停することができ、制御プログラムの設計を容易にする電子制御装置を容易に実現することができる。
【発明を実施するための最良の形態】
【００２５】
入力フェーズで入力装置からのイベントをイベントキューにキューイングし、アプリケーションフェーズでイベントキューにキューイングされたイベントをデキューして該イベントに対応するアプリケーションユニットのユーザ関数群を実行することにより、イベントの発生順序とイベントの処理順序との間の順序関係を保つ。
【００２６】
以下、本発明の実施例について図面を用いて説明する。
【実施例１】
【００２７】
図２は、本発明の実施例１に係る電子制御装置であるボデーＥＣＵ１０を備えたボデー系システム１００を示すブロック図である。このボデー系システム１００は、ネットワークに相当する車内ＬＡＮ（Local Area Network）５０に接続されたボデーＥＣＵ１０と、ボデーＥＣＵ１０と車内ＬＡＮ５０を介して通信可能な通信対象ＥＣＵ２０とを備える。
【００２８】
ボデーＥＣＵ１０および通信対象ＥＣＵ２０は、ＣＰＵ (Central Processing Unit) １１，ＲＯＭ１２，ＲＡＭ(Random Access Memory) １３，Ｉ／Ｏ (Input/Output) ポート１４，タイマ１５等を備えたコンピュータシステムであり、Ｉ／Ｏポート１４には入力装置３０，出力装置４０および車内ＬＡＮ５０が接続されている。
【００２９】
通信対象ＥＣＵ２０は、入力装置３０の状態を読み取ってパケットを生成し、車内ＬＡＮ５０を介してボデーＥＣＵ１０へ送信する。また、通信対象ＥＣＵ２０は、車内ＬＡＮ５０を介して入力されるボデーＥＣＵ１０からのパケットの制御情報に基づいて出力装置４０を制御する。通信対象ＥＣＵ２０は、例えば、ドライバ側のドア（Ｄ席ドア）に設置されたＥＣＵであるＤ席ドアＥＣＵ２０ａ，補助席側のドア（Ｐ席ドア）に設置されたＥＣＵであるＰ席ドアＥＣＵ２０ｂ，インスツルメントパネル（インパネ）に設置されたＥＣＵであるインパネＥＣＵ２０ｃ等である。
【００３０】
Ｄ席ドアＥＣＵ２０ａには、入力装置３０としてＤ席ドアコントロールスイッチ３０ａ等が接続されており、出力装置４０としてＤ席ドアロックモータ４０ａ，Ｄ席パワーウインドウモータ（図示せず）等が接続されている。
【００３１】
Ｐ席ドアＥＣＵ２０ｂには、入力装置３０としてＰ席ドアコントロールスイッチ３０ｂ等が接続され、出力装置４０としてＰ席ドアロックモータ４０ｂ，Ｐ席パワーウインドウモータ（図示せず）等が接続されている。
【００３２】
インパネＥＣＵ２０ｃには、出力装置４０としてブザー４０ｃ，ランプ４０ｄ等が接続されている。
【００３３】
ボデーＥＣＵ１０は、通信対象ＥＣＵ２０から車内ＬＡＮ５０に送信されるパケットを所定時間毎に受信して、Ｉ／Ｏポート１４を介して取り込み、取り込んだパケットの内容に応じたアプリケーションユニットを起動して、出力装置４０の制御が必要な場合には、制御対象の通信対象ＥＣＵ２０への制御指示を含むパケットを生成して送信する制御処理を行う。
【００３４】
図１は、本発明の実施例１に係る電子制御装置であるボデーＥＣＵ１０の制御プログラムの構成を示すブロック図である。この制御プログラムは、システムフェーズの処理プログラム群と、入力フェーズの処理プログラム群と、アプリケーションフェーズの処理プログラム群と、出力フェーズの処理プログラム群とから、その主要部が構成されている。
【００３５】
システムフェーズの処理プログラム群は、ボデーＥＣＵ１０のシステムを初期化するシステム初期化ルーチン１０１と、アイドルタスクを管理するアイドルタスクマネージャ１０２と、アイドルタスク用のユーザ定義１０３と、ＣＰＵ１１を監視するＣＰＵ監視マネージャ１０４と、タイマ割込みを受け付けるシステムマネージャ１０５と、タイマ割込みから抜けるスリープマネージャ１０６とから構成されている。
【００３６】
入力フェーズの処理プログラム群は、入力装置３０からの外部イベントを入力処理ルーチン１１２によりイベントキューＩＱにキューイングする入力処理マネージャ１１１と、外部イベント対応に設けられた複数（図示は１つ）の入力処理ルーチン１１２と、入力処理ルーチン１１２によって入力された外部イベントを入力調停ルーチン１１４により入力調停する入力調停マネージャ１１３と、外部イベント対応に設けられた複数（図示は１つ）の入力調停ルーチン１１４とから構成されている。
【００３７】
アプリケーションフェーズの処理プログラム群は、イベントキューＩＱ（図３参照）を備える簡易ＯＳ１２１と、イベントキューＩＱにキューイングされた外部イベントをデキューして該外部イベントに対応するアプリケーションユニットのユーザ関数群１２３を実行する外部イベントハンドラ１２２と、外部イベントに対応するアプリケーションユニットのユーザ関数群１２３と、タイマ処理に対応するアプリケーションユニットのユーザ関数群１２５を実行するタイマ処理ハンドラ１２４と、タイマ処理に対応するアプリケーションユニットのユーザ関数群１２５と、タイマ処理に対応するアプリケーションユニットのユーザ関数群１２５の実行によりイベントキューＩＱにキューイングされた内部イベントをデキューして該内部イベントに対応するアプリケーションユニットのユーザ関数群１２７を実行する内部イベントハンドラ１２６と、内部イベントに対応するアプリケーションユニットのユーザ関数群１２７と、逐次処理に対応するアプリケーションユニットのユーザ関数群１２９を逐次実行する逐次処理ハンドラ１２８と、逐次処理に対応するアプリケーションユニットのユーザ関数群１２９とから構成されている。
【００３８】
外部イベントに対応するアプリケーションユニットのユーザ関数群１２３，タイマ処理に対応するアプリケーションユニットのユーザ関数群１２５，内部イベントに対応するアプリケーションユニットのユーザ関数群１２７，および逐次処理に対応するアプリケーションユニットのユーザ関数群１２９は、複数のユーザ関数で構成されており、各アプリケーションユニットのユーザ関数群はＩ／Ｏポート１４への入出力処理を直接行わないように構成されている。すなわち、入力は、入力フェーズで入力処理ルーチン１１２および入力調停ルーチン１１４によってＲＡＭ１３上の入力データ格納領域を媒介にして行い、出力は、出力フェーズで出力調停ルーチン１３２および出力処理ルーチン１３４によってＲＡＭ１３上の処理結果格納領域を媒介にして行う。
【００３９】
また、各アプリケーションユニットのユーザ関数群間のデータの受け渡しは、直接的には行わないように構成されている。すなわち、例えば、先に実行されるアプリケーションユニットのユーザ関数群と後に実行されるアプリケーションユニットのユーザ関数群とがある場合に、先に実行されるアプリケーションユニットのユーザ関数群を実行した結果のデータ（処理結果）は、後で実行されるアプリケーションユニットのユーザ関数群では使用しないように構成する。つまり、先に実行されるアプリケーションユニットのユーザ関数群は、処理結果をＲＡＭ１３上の処理結果格納領域に記憶するが、その処理結果は後で実行されるアプリケーションユニットのユーザ関数群からは直接的には参照しない。後で実行されるアプリケーションユニットのユーザ関数群が先に実行されるアプリケーションユニットのユーザ関数群の処理結果を必要とする場合には、予め入力調停ルーチン１１４により処理結果格納領域に格納された処理結果を、入力データ格納領域にコピーするようにする。そして、イベントキューＩＱから取り出されたイベントに応じてユーザ関数が起動された際に入力データ格納領域から処理結果を参照する。したがって、たとえ先に実行されるアプリケーションユニットのユーザ関数群の直後に後に実行されるアプリケーションユニットのユーザ関数群を実行する場合であっても、後で実行されるアプリケーションユニットのユーザ関数群は処理結果格納領域ではなく、入力データ格納領域を参照して処理に利用するため、同周回（直前）の先に実行されるアプリケーションユニットのユーザ関数群の処理結果ではなく、前周回のタイマ割込み時の先に実行されるアプリケーションユニットのユーザ関数群の処理結果を利用して処理を行う。
【００４０】
また、いずれのアプリケーションユニットのユーザ関数群を実行するかは、外部イベントハンドラ１２２，タイマ処理ハンドラ１２４，内部イベントハンドラ１２６および逐次処理ハンドラ１２８によって決定される。この決定処理は、予め各アプリケーションユニットのユーザ関数群がどのイベントが発生した際に実行されるかを登録するイベントテーブルＴ０〜Ｔｎ（図３参照）に基づいて行う。イベントテーブルＴ０〜Ｔｎには、イベントに対応するアプリケーションユニットのユーザ関数群のアドレスが登録（記憶）されており、入力処理ルーチン１１２によってイベントがイベントキューＩＱにキューイングされた場合（イベントが発生した場合）には、イベントに対応するアプリケーションユニットのユーザ関数群のアドレスを呼び出して、そのユーザ関数群に制御を移行する。なお、１つのイベントに対して複数のユーザ関数がイベントテーブルＴ０〜Ｔｎで対応付けられている場合には、そのイベントに対応するアプリケーションユニットのユーザ関数同士は、順次実行するようにする。すなわち、１つのイベントに対応するアプリケーションユニットのユーザ関数群が、ユーザ関数Ｕ１，ユーザ関数Ｕ２，ユーザ関数Ｕ３，…，ユーザ関数Ｕｘからなる場合には、ユーザ関数Ｕ１が終了したならば、ユーザ関数Ｕ２へ制御を移行し、ユーザ関数Ｕ２が終了したならば、ユーザ関数Ｕ３に制御を移行するというようにユーザ関数を順次実行する。
【００４１】
出力フェーズの処理プログラム群は、各アプリケーションユニットのユーザ関数群の処理結果の出力装置４０への出力を出力調停ルーチン１３２により調停する出力調停マネージャ１３１と、複数（図示は１つ）の出力調停ルーチン１３２と、出力調停ルーチン１３２による出力調停結果に基づいて出力処理ルーチン１３４により出力装置４０への出力を行う出力処理マネージャ１３３と、複数（図示は１つ）の出力処理ルーチン１３４とから構成されている。
【００４２】
図３を参照すると、本実施例１に係る電子制御装置で採用されているイベントキュー方式は、イベントフラグ方式（図５参照）の欠点を改善するために、アプリケーションフェーズの簡易ＯＳ１２１が管理していたイベントの種類およびイベントテーブルＴ０〜Ｔｎを入力フェーズの各入力処理ルーチン１１２に持たせる。図３では、入力処理ルーチンＡはスイッチＡＯＮイベントテーブルＴ０およびスイッチＡＯＦＦイベントテーブルＴ１を持ち、入力処理ルーチンＢはスイッチＢＯＮイベントテーブルＴ２およびスイッチＢＯＦＦイベントテーブルＴ３を持つ。一方、アプリケーションフェーズの簡易ＯＳ１２１には、イベントキューＩＱが備えられている。各入力処理ルーチン１１２は、外部イベントを検出した場合、その外部イベントに対応するイベントテーブルＴ０〜Ｔｎへのポインタ（アドレス）をイベントキューＩＱに登録する。簡易ＯＳ１２１は、定期的に（周回毎に）イベントキューＩＱをチェックして、イベントキューＩＱにイベントがキューイングされていれば、イベントキューＩＱから先入れ先出し方式でイベントに対応するイベントテーブルＴ０〜Ｔｎへのポインタ（アドレス）をデキューし、そのポインタが指すイベントテーブルＴ０〜Ｔｎを参照してイベントに対応するアプリケーションユニットのユーザ関数群を呼び出す。
【００４３】
図４は、アプリケーションフェーズにおける処理を表すフローチャートである。
【００４４】
次に、このように構成された本実施例１に係る電子制御装置であるボデーＥＣＵ１０の動作について、図１ないし図４を参照しながら説明する。
【００４５】
ボデーＥＣＵ１０では、電源が投入されると、図１に示すように、システムフェーズでシステム初期化ルーチン１０１が、Ｉ／Ｏポート１４やＲＡＭ１３等のシステム初期化処理を行う。次に、アイドルタスクマネージャ１０２が起動され、アイドルタスク用のユーザ定義１０３を実行する。続いて、ＣＰＵ１１の状態を監視するＣＰＵ監視マネージャ１０４が実行される。そして、アイドルタスクマネージャ１０２に制御が戻る。このようにアイドルタスクマネージャ１０２，ユーザ定義１０３，およびＣＰＵ監視マネージャ１０４がループして実行される。
【００４６】
そして、タイマ１５から所定時間、例えば５ｍｓ毎にＣＰＵ１１にタイマ割込みがかかるので、このタイマ割込みによって、システムマネージャ１０５へ制御が移行される。
【００４７】
システムマネージャ１０５は、割込みタスクを起動して、入力処理マネージャ１１１，入力調停マネージャ１１３，簡易ＯＳ１２１，出力調停マネージャ１３１，および出力処理マネージャ１３３をシンプルスケジュール方式で順次実行する。
【００４８】
まず、入力処理マネージャ１１１は、Ｉ／Ｏポート１４から入力される外部イベントをチェックする。具体的には、各入力処理ルーチン１１２を順次起動して、各入力処理ルーチン１１２に対応する外部イベントが入力されているかどうかをチェックする（図３（ａ）参照）。外部イベントがなければ、入力処理ルーチン１１２は何もしない（図３（ａ）−１参照）。例えば、Ｄ席ドアＥＣＵ２０ａから車内ＬＡＮ５０を介して入力される外部イベントを検出する。外部イベントがあれば、入力処理ルーチン１１２は、図１中の破線矢印で示すように、簡易ＯＳ１２１のイベントキューＩＱに外部イベントをキューイングする（図３（ａ）−２参照）。全ての入力処理ルーチン１１２について処理を終了すると、入力処理マネージャ１１１は、入力調停マネージャ１１３に制御を移行する。
【００４９】
イベントキュー方式を採用することにより、外部イベントの種類や数が変わっても、アプリケーションフェーズでの処理に変更の影響が及ばない。また、ボデーＥＣＵ１０の外部イベントは入力によって種類や数が決定するので、入力処理ルーチン１１２にイベントテーブルＴ０〜Ｔｎを持たせることは変更単位と一致しているので、保守が容易となる。ここで、例えば、ドアが閉まっている時のボタン操作でドアをロックする制御において、複数のイベント、すなわちボタン操作とドア開とが同時に発生した場合を考える。入力処理マネージャ１１１が、先にボタン操作を検知し、次にドア開を検知した場合、入力処理ルーチン１１２が、これらの外部イベントをイベントキューＩＱにキューイングせずに通知してしまうとドアをロックしてしまう（誤動作）。一方、入力処理ルーチン１１２が、外部イベントをイベントキューＩＱにキューイングして、ドアの変化も検知した後にボタン操作イベントが通知されると、ドアが開いている時のボタン操作と認識してドアをロックしない（正常動作）。
【００５０】
入力調停マネージャ１１３は、入力処理マネージャ１１１から制御が移行されると、入力処理マネージャ１１１でＩ／Ｏポート１４から入力した外部イベントを総合して入力調停を行う。詳しくは、入力調停マネージャ１１３は、入力調停ルーチン１１４を起動させ、入力処理マネージャ１１１によって入力された外部イベントの入力データに基づいてイベントキューＩＱにキューイングされた外部イベントを入力調停する。例えば、入力調停マネージャ１１３は、外部イベントＡの入力データと外部イベントＢの入力データとがともに値“１”の場合に、入力調停結果として外部イベントＣを発生するというような入力調停を行う。このような入力調停が行われると、外部イベントＣをイベントキューＩＱにキューイングすることにより、アプリケーションフェーズおいて、外部イベントＣの発生時に実行すべき外部イベントに対応するアプリケーションユニットのユーザ関数群１２３を実行させることができる。このような仕組みを利用することにより、外部イベントの組み合わせに応じた外部イベントに対応するアプリケーションユニットのユーザ関数群１２３を実行させることができ、アプリケーションユニット内で入力データに矛盾がないか等をチェックする必要がなくなる場合がある。したがって、制御プログラムの作成が容易になり、モジュール性も高くなって信頼性が向上する。入力調停マネージャ１１３は、各入力調停ルーチン１１４を順次実行し、すべての入力調停ルーチン１１４の実行が終了すると、アプリケーションフェーズの簡易ＯＳ１２１に制御を移行する。
【００５１】
アプリケーションフェーズの簡易ＯＳ１２１は、入力調停マネージャ１１３から制御が移行されると、イベントキューＩＱに外部イベント（イベントテーブルＴ０〜Ｔｎへのポインタ）がキューイングされているかどうかをチェックする（ステップＳ１０１）。イベントキューＩＱに外部イベントがキューイングされていなければ（ステップＳ１０１でノー）、簡易ＯＳ１２１は、外部イベントハンドラ１２２を起動することなく、ステップＳ１０４に制御を移す。イベントキューＩＱに外部イベントがキューイングされていれば（ステップＳ１０１でイエス）、簡易ＯＳ１２１は、外部イベントハンドラ１２２を起動する。
【００５２】
外部イベントハンドラ１２２は、イベントキューＩＱから先入れ先出し方式で外部イベントをデキューして（ステップＳ１０２）、イベントテーブルへのポインタが指すイベントテーブルを参照して、外部イベントに対応するアプリケーションユニットのユーザ関数群１２３を呼び出して逐次実行する（ステップＳ１０３）。図３の例をとると、簡易ＯＳ１２１がイベントキューＩＱをチェックし（図３（ｂ）参照）、イベントキューＩＱにポインタがキューイングされていれば、外部イベントハンドラ１２２は、ポインタが指すスイッチＢＯＮイベントテーブルＴ２を参照して外部イベントに対応するアプリケーションユニットのユーザ関数群（Ｂ１，Ｂ２，Ｂ３）を呼び出して順次実行する（図３（ｂ）−１参照）。イベントキューＩＱにキューイングされているすべての外部イベントについてステップＳ１０２およびＳ１０３を繰り返し、ステップＳ１０１でイベントキューＩＱに外部イベントがキューイングされていなくなれば（ステップＳ１０１でノー）、外部イベントハンドラ１２２は、処理を終了して、簡易ＯＳ１２１に制御を戻す。
【００５３】
簡易ＯＳ１２１は、外部イベントハンドラ１２２から制御が戻ると、起動時刻を経過したタイマ処理があるかどうかをチェックし（ステップＳ１０４）、起動時刻を経過したタイマ処理がなければ（ステップＳ１０４でノー）、タイマ処理ハンドラ１２４を起動することなく、ステップＳ１０６に制御を移す。タイマ処理があれば（ステップＳ１０４でイエス）、簡易ＯＳ１２１は、タイマ処理ハンドラ１２４を起動する。ここで、外部イベントとタイマ処理との処理順序を考えると、タイマ処理は純粋にソフトウェア内部の処理であるのに対し、外部イベントは電子制御装置の外で発生して観測可能であるので、外部イベントを先に処理する。外部イベントハンドラ１２２の処理完了後に、タイマ処理ハンドラ１２４を起動することにより、外部イベントとタイマ処理との処理順序の逆転を抑えることができる。例えば、前周回の出力イベントでキャンセルされるべきものが、タイマ処理によって動いてしまうことを抑えるために、外部イベントを先に処理する。
【００５４】
タイマ処理ハンドラ１２４は、起動時刻を経過したタイマ処理に対応するアプリケーションユニットのユーザ関数群１２５を呼び出して逐次実行する（ステップＳ１０５）。なお、タイマ処理に対応するアプリケーションユニットのユーザ関数群１２５の実行の過程で、新たなイベント（以下、内部イベントという）が発生すると、ユーザ関数群１２５は、内部イベントを簡易ＯＳ１２１のイベントキューＩＱにキューイングする（図１中の破線矢印を参照）。そして、すべての起動時刻を経過したタイマ処理に対応するアプリケーションユニットのユーザ関数群１２５の実行が完了すると、タイマ処理ハンドラ１２４は、処理を終了して、簡易ＯＳ１２１に制御を戻す。
【００５５】
簡易ＯＳ１２１は、タイマ処理ハンドラ１２４から制御が戻ると、イベントキューＩＱに内部イベントがキューイングされているかどうかをチェックし（ステップＳ１０６）、内部イベントがキューイングされていなければ（ステップＳ１０６でノー）、内部イベントハンドラ１２６を起動することなく、ステップＳ１０９に制御を移す。イベントキューＩＱに内部イベントがキューイングされていれば（ステップＳ１０６でイエス）、簡易ＯＳ１２１は、内部イベントハンドラ１２６を起動する。
【００５６】
このように、タイマ処理に対応するアプリケーションユニットのユーザ関数群１２５を実行することによって発生する内部イベントがあるので、タイマ処理ハンドラ１２４によるタイマ処理に対応するアプリケーションユニットのユーザ関数群１２５の実行後に、内部イベントハンドラ１２６により内部イベントに対応するアプリケーションユニットのユーザ関数群１２７を実行する。このため、処理順序は、外部イベント→タイマ処理→内部イベントの順になる。
【００５７】
内部イベントハンドラ１２６は、イベントキューＩＱから先入れ先出し方式で内部イベントをデキューし（ステップＳ１０７）、該内部イベントのポインタを辿ってイベントテーブルＴ０〜Ｔｎを参照し、イベントテーブルＴ０〜Ｔｎに登録されている内部イベントに対応するアプリケーションユニットのユーザ関数群１２７を呼び出して逐次実行する（ステップＳ１０８）。そして、すべての内部イベントに対応するアプリケーションユニットのユーザ関数群１２７の実行が完了すると、内部イベントハンドラ１２６は、処理を終了して、簡易ＯＳ１２１に制御を戻す。
【００５８】
簡易ＯＳ１２１は、内部イベントハンドラ１２６から制御が戻ると、逐次処理があるかどうかをチェックし（ステップＳ１０９）、逐次処理がなければ（ステップＳ１０９でノー）、逐次処理ハンドラ１２８を起動することなく、処理を終了する。逐次処理があれば（ステップＳ１０９でイエス）、簡易ＯＳ１２１は、逐次処理ハンドラ１２９を起動する。
【００５９】
逐次処理ハンドラ１２８は、逐次処理に対応するアプリケーションユニットのユーザ関数群１２９を呼び出して逐次実行する（ステップＳ１１０）。そして、すべての逐次処理に対応するアプリケーションユニットのユーザ関数群１２９の実行が完了すると、逐次処理ハンドラ１２８は、処理を終了して、簡易ＯＳ１２１に制御を戻す。
【００６０】
なお、従来からの逐次処理に対応するアプリケーションユニットのユーザ関数群１２９と、イベントドリブン型の外部イベントに対応するアプリケーションユニットのユーザ関数群１２３および内部イベントに対応するアプリケーションユニットのユーザ関数群１２７との間では、状態の不整合なく共存が可能である。たとえば、ドアが開いている時にボタン操作があったならば出力装置４０に警報を出す（ブザー４０ｃを鳴らす，ランプ４０ｄを点滅する等）というような従来からの逐次処理に対応するアプリケーションユニットのユーザ関数群１２９が共存している場合、外部イベントをイベントキューＩＱにキューイングしないで処理してしまうと、ドアがロックされてしまう。一方、従来からの逐次処理に対応するアプリケーションユニットのユーザ関数群１２９は、イベントで動作しないので、定期処理の時点では、ドア開時のボタン操作としてブザー４０ｃを鳴らしてしまう。この場合、これら２つの制御は矛盾した動作（ロックを出力しているのにブザー４０ｃを鳴らす）になってしまう。したがって、外部イベントの処理は、全ての入力データが確定した後に実行しなければならない。
【００６１】
簡易ＯＳ１２１は、逐次処理ハンドラ１２８から制御が戻ると、アプリケーションフェーズを終了して、出力フェーズの出力調停マネージャ１３１に制御を渡す。
【００６２】
出力調停マネージャ１３１は、簡易ＯＳ１２１から制御を渡されると、アプリケーションフェーズにおいて処理結果格納領域に記憶された処理結果に基づき出力処理ルーチン１３４によって出力を行うか否かを調停する。例えば、複数のユーザ関数が同一の出力対象に対する異なる出力指示を処理結果格納領域に格納していた場合、いずれの処理結果を反映させて出力するかを調停する。この際、出力調停の結果として新たな外部イベントが発生する場合には、出力調停マネージャ１３１は、この外部イベントを簡易ＯＳ１２１のイベントキューＩＱにキューイングする（図１中の破線矢印を参照）。ただし、この外部イベントの実行が次の周回のアプリケーションフェーズになることはいうまでもない。このような出力調停により、アプリケーションフェーズの各アプリケーションユニットのユーザ関数群では、Ｉ／Ｏポート１４の詳細な構成を意識することなく、処理結果を処理結果格納領域に出力するだけでよくなる。また、各アプリケーションユニットのユーザ関数群同士が処理結果の内容に矛盾がないかを判定する必要がなくなり、制御プログラムの作成が容易になり、モジュール性も高くなって信頼性も向上する。すべての出力調停ルーチン１３２の実行を完了すると、出力調停マネージャ１３１は、出力処理マネージャ１３３に制御を渡す。
【００６３】
出力処理マネージャ１３３は、出力調停マネージャ１３１から制御を渡されると、出力調停ルーチン１３２による調停結果に基づいて処理結果格納領域の処理結果をＩ／Ｏポート１４への出力する出力処理ルーチン１３４を順次実行する。すべての出力処理ルーチン１３４の実行が終了すると、出力処理マネージャ１３３は、システムフェーズのスリープマネージャ１０１へ制御を移行する。
【００６４】
これにより、スリープマネージャ１０６を通じてタイマ割込みタスクから復帰し、システムフェーズのアイドルタスクマネージャ１０２，ユーザ定義１０３，およびＣＰＵ監視マネージャ１０４からなるアイドルループに制御が戻る。
【００６５】
このように、タイマ割込みタスクを、入力フェーズ，アプリケーションフェーズおよび出力フェーズに分け、アプリケーションユニットのユーザ関数群間でデータの受け渡しを直接的に行わないようにすることで、各アプリケーションユニットの独立性が高まり、機能単位であるユーザ関数の追加および削除が容易にできるようになる。なお、このタイマ割込みタスクによる入力フェーズ，アプリケーションフェーズおよび出力フェーズの処理は、タイマ割込みの間隔である５ｍｓよりも短時間で処理が終了するように構成されている。
【００６６】
本実施例１に係る電子制御装置では、タイマ割込みタスクを、入力処理マネージャ１１１，入力調停マネージャ１１３，簡易ＯＳ１２１，出力調停マネージャ１３１，および出力処理マネージャ１３３の各処理に分割し、各処理において、データの同期をとる。すなわち、ある時間で確定したデータを次の処理へ受け渡し、それ以後は変化させない。例えば、入力処理マネージャ１１１でスイッチの状態がＯＮと確定した後は、次の周回の入力フェーズを実行するまでは、たとえ同スイッチの入力の状態がＯＦＦになっていたとしてもスイッチの状態はＯＮとして処理を行う。同様に、入力調停マネージャ１１３で入力調停したイベントは、次の周回の入力調停マネージャ１１３の処理まで変化させない。また、アプリケーションフェーズで確定した処理結果は、次の周回のアプリケーションフェーズまで変化させない。そして、出力調停マネージャ１３１によって出力調停した処理結果は、次の周回の出力調停マネージャ１３１の処理まで変化させない。したがって、各処理の終了時点でデータが確定（同期）する。そして、各処理中に前段の処理で生成したデータは変化しないので、例えば変化前のデータに基づく処理と変化後のデータに基づいて処理とを行ってしまうような処理矛盾を避けることができ、安全設計も容易にできる。また、人の操作する装置系に対する制御を行う場合には、人と制御対象（機械）との処理時間（認識時間）の差を上述した調停や同期によって、調整することができる。また、車内ＬＡＮ５０を媒介とする遅延等によるデータの到着のずれ等の影響もこれらの機構により抑えることができる。
【００６７】
例えば、Ｄ席ドアコントロールスイッチ３０ａと入力装置３０としての図示しないスマートキー（電波等を使用し、ドアを施錠・解錠するシステム）との双方から異なる指示がほぼ同時に連続して入力された場合、Ｄ席ドアコントロールスイッチ３０ａの状態に基づきＤ席ドアＥＣＵ２０ａが全席ドア施錠の指示を出す一方、スマートキーが全席ドア解錠の指示を車内ＬＡＮ５０を介してボデーＥＣＵ１０に出力したとき、ボデーＥＣＵ１０は、入力処理ルーチン１１２によってＩ／Ｏポート１４からこれらの外部イベントを取り込む。そして、入力調停ルーチン１１４によって、いずれか１つの外部イベントを優先して実行するように入力調停する。例えば、Ｄ席ドアコントロールスイッチ３０ａからの外部イベントを優先するように入力調停する。そして、全席ドア施錠の指示が入力された旨の外部イベントをイベントキューＩＱにキューイングし、アプリケーションフェーズの簡易ＯＳ１２１へ制御を移行する。よって、アプリケーションフェーズにおいて、この外部イベントに対応するアプリケーションユニットのユーザ関数群１２３に実行が移される。例えば、ユーザ関数Ｕ１の処理によって、全席ドア施錠の指示が処理結果格納領域に書き込まれる。一方、このとき、他の入力装置３０からの外部イベントによって、例えばユーザ関数Ｕ２が実行され、その処理結果としてＤ席ドア解錠の指示が処理結果格納領域に書き込まれていたとする。この場合、出力調停マネージャ１３による出力調停ルーチン１３２の実行によって出力調停を行い、全席ドア施錠の処理結果の出力を優先して、出力処理マネージャ１３３に制御を渡す。出力処理マネージャ１３３は、出力処理ルーチン１３４を実行することによって、出力装置４０の接続された各ドアＥＣＵに対してドア施錠の指示を出力する。こうして、極めて短い時間にドアが解錠→施錠または施錠→解錠することを防止することができる。すなわち、複数の矛盾する入力データや処理結果を調停することができ、安全で信頼性の高い制御を実現することができる。
【００６８】
ところで、本実施例１では、入力フェーズでは入力処理ルーチン１１２および入力調停ルーチン１１４をシンプルスケジューリング方式で逐次実行し、出力フェーズでは出力調停ルーチン１３２および出力処理ルーチン１３４をシンプルスケジューリング方式で逐次実行する。一方、アプリケーションフェーズでは、どのアプリケーションユニットが実行されるかは、外部イベントおよび内部イベントの有無を判断して決定する。
【００６９】
このような構成とすることで、発生しない外部イベントに対応するアプリケーションユニットのユーザ関数群１２３は、外部イベントが発生しない間は実行されないことになる。同様に、発生しない内部イベントに対応するアプリケーションユニットのユーザ関数群１２７は、内部イベントが発生しない間は実行されないことになる。したがって、実行されないアプリケーションユニットのユーザ関数群用の処理結果格納領域は、その間更新されない。このため、外部のノイズ等によって処理結果格納領域の処理結果（データ）が書き換えられた場合（いわゆるＲＡＭ化け）には、出力調停ルーチン１３２および出力処理ルーチン１３４によって誤った出力がなされてしまう場合がある。このような状況は、処理結果格納領域が長時間更新されなければされないほど発生する可能性が高くなる。特に、制御の誤りによって人に対して悪影響を与える可能性のある車両等のシステムを制御する場合には、このようなことが起こらないように、ＲＡＭ１３の値を所定時間毎に更新することが望ましい。
【００７０】
そこで、アプリケーションフェーズにおいて、一定時間以上起動されていない外部イベントに対応するアプリケーションユニットのユーザ関数群１２３および内部イベントに対応するアプリケーションユニットのユーザ関数群１２７を順次起動して、各アプリケーションユニットのユーザ関数群用の処理結果格納領域を更新する。この一定時間は、タイマ割込み間隔（所定時間）よりも長い間隔で、かつ処理結果格納領域の処理結果（データ）が外部ノイズ等によって変化してしまってもシステムの制御に支障をきたさない時間とする。すなわち、ボデー系システム１００（図２参照）においては、ＲＡＭ化けによって、例えば図示しないパワーウィンドウの閉制御のように、本来閉じてはいけない状態で閉じる指示が出力される状況が想定される。このような異常な制御が続く時間が５０ｍｓ程度であれば人に対して悪影響を及ぼさない。したがって、例えば４０ｍｓの間、起動されていない外部イベントに対応するアプリケーションユニットのユーザ関数群１２３および内部イベントに対応するアプリケーションユニットのユーザ関数群１２７から順次実行するようにする。例えば、ユーザ関数Ｕ２，ユーザ関数Ｕ３およびユーザ関数Ｕ４が、４０ｍｓの間実行されていなければ、ユーザ関数Ｕ２を実行し、ユーザ関数Ｕ３を実行し、ユーザ関数Ｕ４を実行する。そして、外部イベントに対応するアプリケーションユニットのユーザ関数群１２３および内部イベントに対応するアプリケーションユニットのユーザ関数群１２７を実行する前述の処理を行う。このような構成を採ることで、ＲＡＭ化けが起きても、信頼性や安全性を確保することができる。
【００７１】
ところで、上記実施例１では、電子制御装置として主としてボデーＥＣＵ１０を例にとって説明したが、照合ＥＣＵ，エンジンＥＣＵ等のその他の電子制御装置の場合も本発明が同様に適用できることはいうまでもない。
【００７２】
以上、本発明の実施例を説明したが、これはあくまでも例示にすぎず、本発明はこれに限定されるものではなく、特許請求の範囲の趣旨を逸脱しない限りにおいて、当業者の知識に基づく種々の変更が可能である。
【図面の簡単な説明】
【００７３】
【図１】本発明の実施例１に係る電子制御装置における動作を説明する説明図。
【図２】ボデー系システムの構成を示すブロック図。
【図３】本実施例１に係る電子制御装置におけるイベントキュー方式を説明する図。
【図４】図１中のアプリケーションフェーズにおける処理を表すフローチャート。
【図５】従来の電子制御装置におけるイベントフラグ方式を説明する図。
【符号の説明】
【００７４】
１０  ボデーＥＣＵ
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  Ｉ／Ｏポート 
１５  タイマ
２０  通信対象ＥＣＵ
２０ａ  Ｄ席ドアＥＣＵ
２０ｂ  Ｐ席ドアＥＣＵ
２０ｃ  インパネＥＣＵ
３０  入力装置
３０ａ  Ｄ席ドアコントロールスイッチ
３０ｂ  Ｐ席ドアコントロールスイッチ
４０  出力装置
４０ａ  Ｄ席ドアロックモータ
４０ｂ  Ｐ席ドアロックモータ
４０ｃ  ブザー
４０ｄ  ランプ
５０  車内ＬＡＮ
１００  ボデー系システム
１０１  システム初期化ルーチン
１０２  アイドルタスクマネージャ
１０３  ユーザ定義
１０４  ＣＰＵ監視マネージャ
１０５  システムマネージャ
１０６  スリープマネージャ
１１１  入力処理マネージャ
１１２  入力処理ルーチン
１１３  入力調停マネージャ
１１４  入力調停ルーチン
１２１  簡易ＯＳ
１２２  外部イベントハンドラ
１２３  外部イベントに対応するアプリケーションユニットのユーザ関数群
１２４  タイマ処理ハンドラ
１２５  タイマ処理に対応するアプリケーションユニットのユーザ関数群
１２６  内部イベントハンドラ
１２７  内部イベントに対応するアプリケーションユニットのユーザ関数群
１２８  逐次処理ハンドラ
１２９  逐次処理に対応するアプリケーションユニットのユーザ関数
１３１  出力調停マネージャ
１３２  出力調停ルーチン
１３３  出力処理マネージャ
１３４  出力処理ルーチン
ＩＱ  イベントキュー
Ｔ０〜Ｔｎ  イベントテーブル
【図１】
2006146789.tif 000003
【図２】
2006146789.tif 000004
【図３】
2006146789.tif 000005
【図４】
2006146789.tif 000006
【図５】
2006146789.tif 000007