(57)【特許請求の範囲】
【請求項１】
ダイアグ対象の故障を自動的に検出する自己診断機能を備えた車両用制御装置において、
前記自己診断機能を実現するための自己診断プログラムは、
オブジェクト指向設計され、再利用が可能なオブジェクトの単位で構成されており、
前記ダイアグ対象に係る単位毎に用意され、前記ダイアグ対象の故障を検出する故障検出処理を実行する故障検出オブジェクトと、
外部からの依頼に応じて、いずれかの前記故障検出オブジェクトについて起動すべきか否かを判定し、該依頼への応答として、該故障検出オブジェクトの起動の許可、或いは不許可を通知する起動判定オブジェクトと、
外部からのタイミング信号に基づき起動対象とする前記故障検出オブジェクトを決定し、前記起動判定オブジェクトに対し、起動対象とする前記故障検出オブジェクトを起動すべきか否かの判定を依頼する起動許可依頼を通知し、該起動許可依頼の応答として、前記起動判定オブジェクトから前記許可を受け取った場合には、起動対象とする前記故障検出オブジェクトに対する起動指示を行うスケジューラオブジェクトと、
を備え、
前記故障検出オブジェクトは、前記スケジューラオブジェクトからの前記起動指示により前記故障検出処理を実行し、該処理が終了すると、前記スケジューラオブジェクトに該処理が終了した旨を通知し、
前記スケジューラオブジェクトは、前記タイミング信号に基づき起動対象として決定した全ての前記故障検出オブジェクトから、前記故障検出処理が終了した旨の通知を受け取ると、該処理が終了した旨を外部に通知すること、
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項２】
請求項１に記載の車両用制御装置において、
前記起動判定オブジェクトは、前記故障検出オブジェクト間における、故障検出の関係を考慮して、前記起動対象の故障検出オブジェクトを起動すべきか否かを判定すること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項３】
請求項２に記載の車両用制御装置において、
前記故障検出の関係を考慮した判定は、起動対象の故障検出オブジェクトに関連する他の故障検出オブジェクトの故障検出結果又は故障検出実行履歴の少なくとも一方に基づいてなされること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項４】
請求項１〜３のいずれか１項に記載の車両用制御装置において、
前記起動判定オブジェクトは、前記故障検出オブジェクト間で共通する、故障検出の前提条件を考慮して、前記起動対象の故障検出オブジェクトを起動すべきか否かを判定すること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項５】
請求項４に記載の車両用制御装置において、
前記故障検出の前提条件を考慮した判定は、車両に搭載されたバッテリの電圧又は車両のエンジン始動後の経過時間の少なくとも一方に基づいてなされること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項６】
請求項１〜５のいずれか１項に記載の車両用制御装置において、
前記スケジューラオブジェクトは、前記外部からのタイミング信号に対応させて前記起動対象の故障検出オブジェクトを記述した対応テーブルを有し、当該対応テーブルを参照することによって、前記起動対象の故障検出オブジェクトを決定すること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項７】
請求項１〜６のいずれか１項に記載の自己診断プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、車両を制御する車両用制御装置における自己診断機能のプログラミング技術に関する。
【０００２】
【従来の技術】
近年、コンピュータ技術の発達により、自動車等の車両の随所にコンピュータシステムが導入されるに至った。
特に高い信頼性を要求される車両制御用のコンピュータシステムは、自己診断機能を備えることにより、信頼性の向上が図られている。すなわち、コンピュータ部やセンサ類の動作状態を適当な周期で自動的にチェックし、故障時には、ユーザなどに故障を知らせるための警告灯（ＭＩＬ）を点灯したり、その故障内容が修理担当者などに分かるよう故障コード（ＤＴＣ）を記憶したりするダイアグノーシス（以下「ダイアグ」という。）処理を可能にしている。このダイアグ処理の対象は、クランク角センサ、カム角センサ、水温センサなどの各センサをはじめ、現在では約２００にもおよぶ。以下、ダイアグ処理の対象を「ダイアグ対象」と呼ぶ。
【０００３】
そして、このようなダイアグ処理を実現するための自己診断プログラムの設計においては、上述したダイアグ対象が、車種やグレードあるいはモデルチェンジのタイミングで変わるということを考慮しなければならない。そのため、自己診断プログラムには、ダイアグ対象毎に、故障検出ロジックを記述するのが一般的である。このようにすれば、ダイアグ対象に変更が生じた場合、その変更に応じて、対応する故障検出ロジックのみを変更することで対応できるためである。
【０００４】
このようにダイアグ対象といった「モノ」に着目したプログラミングは、いわゆるオブジェクト指向プログラミングとして周知のものとなっている。すなわち、各故障検出ロジックの単位でオブジェクトを構成するようにすれば、ダイアグ対象の変更に対して、オブジェクト単位の変更で対応でき、変更を要しないオブジェクトに関しては再利用することができる。
【０００５】
なお、本明細書中では、「オブジェクトが・・・する」というようなオブジェクトを主体とした表現を適宜用いるが、もちろん、車両制御装置の備えるＣＰＵがオブジェクトの備えるプログラムを実行することで、オブジェクトの動作が実現されることは言うまでもない。
【０００６】
【発明が解決しようとする課題】
上述した故障検出ロジックは、通常、所定のタイミングで繰り返し実行されるものであるため、複数の故障検出ロジックをどのようなタイミングで実行するかについては、下位階層のプログラムであるプラットフォーム（以下「ＰＦ」と記述する。）に記述されていた。
【０００７】
一方、ダイアグ対象が異なってくると、このような故障検出ロジックの実行タイミングが変更されることもある。したがって、さらに、ＰＦから実行タイミングを判定するスケジュールプログラム（スケジューラ）を独立させたプログラム構造も提案されていた。このようにすれば、実行タイミングの変更に対し、スケジューラを変更することで容易に対応できるというメリットが得られる。
【０００８】
しかしながら、一部の故障検出ロジックの実行には、タイミングだけでなく、所定の条件を考慮する必要がある。つまり、実行タイミングになったと判定されても、場合によっては、実行すべきでないという状況が存在するのである。これは、各故障検出ロジックが相互に関連性を有することに起因する。
【０００９】
そしてそのため、ダイアグ対象の変更あるいは実行タイミングの変更に対し、対応する故障検出ロジックのみでなく、関連性を有する故障検出ロジックの修正が必要になる場合があった。これについて説明する。
例えば、第１のセンサが異常と判断された場合、そのセンサに関連する第２のセンサの故障が正確に判断できなくなることがある。具体的に言えば、エンジンへの吸入空気量を測定するエアフローセンサの診断は、吸気温度を検出する吸気温センサが正常と診断されてはじめて、正確に診断できるという具合である。
【００１０】
また例えば、第１のセンサの検出値を、第２のセンサの診断に利用することがある。具体的に、上述した吸気温センサの診断には、アクセルペダルによって駆動されるスロットル弁の開度を検出するスロットルセンサの検出値が利用されるという具合である。
【００１１】
このようにダイアグ対象の故障診断結果を保障する実行条件が存在することがあり、従来、この実行条件の判断を、各故障検出ロジックにおいて行っていた。つまり、従来は、実行条件の判断ロジックが、他の故障検出ロジックに依存するものとなっていたのである。
【００１２】
このようなプログラム構造では、あるダイアグ対象に対応する故障検出ロジックを変更した場合に、その故障検出ロジックに関連する全ての故障検出ロジックを見直す必要性が生じていた。上述した例で言えば、スロットルセンサの故障検出ロジックが変更されると、吸気温センサの故障検出ロジックや、さらには、吸気温センサに関連するエアフローセンサの故障検出ロジックまでも、必要に応じて見直す必要があった。
【００１３】
このようなことから、自己診断プログラムの変更に要する時間が膨大なものになることがあり、再利用性を低下させる原因となっていた。また、変更が大きくなると、プログラムに不具合が生じる可能性も大きくなるため、自己診断プログラムの品質低下を招くことにもなる。
【００１４】
本発明は、上述した問題を解決するためになされたものであり、ダイアグ対象の故障検出を適切なタイミングで実行する自己診断機能を備える車両用制御装置において、ダイアグ対象の変更によって故障検出の実行条件を修正する必要が生じても、自己診断機能を実現するための自己診断プログラムの変更を容易にすること目的とし、自己診断プログラムの品質向上に寄与する。
【００１５】
【課題を解決するための手段及び発明の効果】
上述した目的を達成するためになされた請求項１に記載の車両用制御装置は、ダイアグ対象の故障を自動的に検出する自己診断機能を備えている。
この自己診断機能を実現するための自己診断プログラムでは、ダイアグ対象の故障を検出する故障検出ロジックが、ダイアグ対象に係る単位に、分割して記述されていることを前提としている。ダイアグ対象に係る単位は、ダイアグ対象毎であったり、あるいは、故障検出処理毎であったりする。ダイアグ対象と故障検出処理は１対１にほぼ対応するが、故障検出処理が共通なダイアグ対象も存在する。したがって、自己診断プログラムをコンパクトにするという観点からは、故障検出処理毎に検出ロジックを設けることが好ましい。
【００１６】
このような前提の下、本発明では特に、外部からのタイミング信号に基づき該当する故障検出ロジックを実行する際の実行条件の判断ロジックを、前記故障検出ロジックとは別に、まとめて記述した。例えば実行条件の判断ロジックを、専用プログラムとして記述するという具合である。
【００１７】
具体的には、自己診断プログラムは、オブジェクト指向設計され、再利用が可能なオブジェクトの単位で構成されており、ダイアグ対象の故障を検出する故障検出処理を実行する故障検出オブジェクトと、スケジューラオブジェクトと、起動判定オブジェクトとを備える構造である。故障検出オブジェクトは、ダイアグ対象に係る単位毎に用意される。
【００１８】
このとき、スケジューラオブジェクトは、外部からのタイミング信号に基づき、起動対象とする故障検出オブジェクトを決定する。そして、起動判定オブジェクトに対し、起動対象とする故障検出オブジェクトを起動すべきか否かの判定を依頼する起動許可依頼を通知する。
すると、起動判定オブジェクトが、起動許可依頼に応じて故障検出オブジェクトについて起動すべきか否かを判定し、該依頼への応答として、スケジューラオブジェクトに、該故障検出オブジェクトの起動の許可、或いは不許可を通知する。
【００１９】
そして、スケジューラオブジェクトは、起動判定オブジェクトから許可の通知を受取ると、当該故障検出オブジェクトに対する起動指示を行う。
また、故障検出オブジェクトは、スケジューラオブジェクトからの起動指示により故障検出処理を実行し、該処理が終了すると、スケジューラオブジェクトに該処理が終了した旨を通知し、スケジューラオブジェクトは、タイミング信号に基づき起動対象として決定した全ての故障検出オブジェクトから、故障検出処理が終了した旨の通知を受け取ると、該処理が終了した旨を外部に通知する。
つまり、実行条件の判断ロジックを起動判定オブジェクトが実行するようにし、故障検出オブジェクトと別にしたのである。これによって、ダイアグ対象が変更されて実行条件を修正する必要が生じても、対応する故障検出オブジェクト及び起動判定オブジェクトに変更を加えることで対応でき、変更されたダイアグ対象に直接的に関係しない故障検出オブジェクトまで修正する必要がなくなる。その結果、自己診断プログラムの変更を容易にすることができる。さらに、変更箇所がまとめられることで人為的なミスを減少させることもできるため、結果的に、自己診断プログラムの品質向上に寄与する。
【００２０】
なお、起動判定オブジェクトは、故障検出オブジェクト間における、故障検出の関係を考慮して、起動対象の故障検出オブジェクトを起動すべきか否かを判定することが考えられる（請求項２）。ここでいう故障検出の関係とは、上述したような、第１のセンサが異常と判断された場合、そのセンサに関連する第２のセンサの故障が正確に判断できないといったものや、第１のセンサの検出値を、第２のセンサの診断に利用するといったものが一例として挙げられる。したがってより具体化すると、故障検出の関係を考慮した判定は、起動対象の故障検出オブジェクトに関連する他の故障検出オブジェクトの故障検出結果又は故障検出実行履歴の少なくとも一方に基づいてなされることが考えられる（請求項３）。
【００２１】
ところで、センサなどには通常、車両のバッテリから電力供給がなされているため、例えばバッテリが仮に外れていた場合、センサ自体に異常がなくても、センサによって取得される検出値が正常範囲になくなることで、異常と判断されてしまう。したがって、バッテリ電圧が定められた範囲にない場合には、診断を禁止するか、若しくは、診断を行った後にその診断結果を無効にするのが一般的である。つまり、いくつかの故障検出では、バッテリ電圧が正常であることが条件となるのである。
【００２２】
そこで、起動判定オブジェクトは、故障検出の前提条件を考慮して、起動対象の故障検出オブジェクトを起動すべきか否かを判定するようにしてもよい（請求項４）。前提条件は、少なくとも一部の故障検出オブジェクト間で共通するものであればよい。より具体化すると、前提条件を考慮した判定は、車両に搭載されたバッテリの電圧又は車両のエンジン始動後の経過時間の少なくとも一方に基づいてなされることが考えられる（請求項５）。エンジン始動後の経過時間に基づくのは、エンジン始動の直後には検出値が正常範囲にならないセンサもあるからである。
【００２３】
このようにすれば、診断実行の前提条件がまとめて記述され、その変更が容易になる。また、このような前提条件が複数の故障検出ロジックに共通することを考えると、自己診断プログラムがコンパクトに設計できる点で、自己診断プログラムの品質向上に寄与する。
【００２４】
なお、スケジューラオブジェクトは、外部からのタイミング信号に基づき、起動対象の故障検出オブジェクトを決定する。したがって、実行タイミングの変更があれば、スケジューラオブジェクトを変更することで対応できる。つまり、本発明では、実行タイミングと実行条件が別のものであり、それぞれに決定されることに鑑み、スケジューラオブジェクトと、起動判定オブジェクトとを設けたのである。
【００２５】
そして、スケジューラオブジェクトの変更をさらに容易にするためには、スケジューラオブジェクトが、外部からのタイミング信号に対応させて起動対象の故障検出オブジェクトを記述した対応テーブルを有し、当該対応テーブルを参照することによって、起動対象の故障検出オブジェクトを決定するようにするとよい（請求項６）。水温センサ診断、エアフローセンサ診断及び吸気温センサ診断を例えば６４ｍｓ毎に行うという具合に、あるタイミングで複数の故障検出が行われる場合もある。したがって、このようなタイミング信号と起動対象の故障検出オブジェクトとの関係とをテーブル化しておけば、作業者にとって分かり易く、実行タイミングの変更が容易になり、結果的に、自己診断プログラムの品質向上に寄与する。
【００２６】
ところで、上述してきた車両用制御装置に搭載される自己診断プログラムは、例えば、ＦＤ、ＭＯ、ＤＶＤ、ＣＤ−ＲＯＭ、ハードディスク等のコンピュータ読み取り可能な記録媒体に記録し、必要に応じてコンピュータシステムにロードして起動することにより用いることができる。この他、ＲＯＭやバックアップＲＡＭをコンピュータ読み取り可能な記録媒体としてプログラムを記録しておき、このＲＯＭあるいはバックアップＲＡＭをコンピュータシステムに組み込んで用いてもよい。
【００２７】
【発明の実施の形態】
以下、本発明を具体化した一実施例を図面を参照して説明する。
図１は、エンジン制御システムの全体を示す構成図である。このエンジン制御システムは、エンジン１１及び、このエンジン１１を制御するエンジン制御ユニット１６を中心に構成されている。このエンジン制御ユニット１６が「車両用制御装置」に相当する。
【００２８】
エンジン１１には、エアクリーナからの吸入空気が吸気管１２を経て供給されている。この吸気管１２には、吸入空気量を測定するエアフローセンサ１３と、吸気温度を検出する吸気温センサ１４が配置され、さらに、アクセルペダルによって駆動されるスロットル弁１５が配置されている。
【００２９】
エンジン制御ユニット１６には、エンジン１１の状態を示す各種信号が入力される。この信号を列挙すれば、エアフローセンサ１３からの吸入空気量検出信号、スロットルセンサ１７からのスロットル弁１５の開度検出信号、排出ガス中に含まれる酸素濃度を検出する空燃比センサ１８からの信号、バッテリ１９からのバッテリ電圧信号、水温センサ２０からの検出信号、エンジン１１によって駆動されるディストリビュータ２１からの回転信号、さらに気筒判別信号等である。
【００３０】
また、エンジン制御ユニット１６では、これらの各種検出信号に基づいてエンジン１１の運転状態に対応した燃料噴射量等を演算し、エンジン１１の複数の気筒それぞれに設定されるインジェクタ２２ａ，２２ｂ，２２ｃ，２２ｄに対して燃料噴射指令を出力し、また、イグナイタ２３に対して点火指令信号を出力して、エンジン１１の運転制御を実行する。
【００３１】
さらに、エンジン制御ユニット１６は、車両の各部位の診断も各センサ群からの検出信号に基づいて実行する。このため、エンジン制御ユニット１６に対しては、異常検出結果の出力のための診断モードを設定するテストスイッチ２４が配置され、さらに、そのテスト結果であるダイアグノーシスの結果表示等を行う警告灯２５が接続されている。
【００３２】
スイッチ２６はバッテリ１９をエンジン制御ユニット１６に対して接続するイグニッションスイッチであり、このイグニッションスイッチ２６に連動するようにしてスタータモータ２７を制御するスタータスイッチ２８が設けられている。次に、エンジン制御ユニット１６について説明する。図２は、図１に示したエンジン制御ユニット１６の構成を示すブロック図である。エンジン制御ユニット１６は、コンピュータシステムを構成するＣＰＵ３１を備える。このＣＰＵ３１にはアナログ入力回路３２及びディジタル入力回路３３からのデータが入力され、アナログ入力回路３２からのアナログ入力データは、Ａ／Ｄ変換器３４でディジタルデータに変換されてＣＰＵ３１に入力される。
【００３３】
アナログ入力回路３２には、エアフローセンサ１３からの検出信号Ｕｓ、水温センサ２０からの検出信号Ｔｈｗ、吸気温センサ１４からの検出信号Ｔｈａ、及びバッテリ１９の電圧＋Ｂが入力される。一方、ディジタル入力回路３３には、ディストリビュータ２１からの気筒判別信号Ｇ１と回転角信号Ｎｅ、空燃比センサ１８からの酸素濃度に対応したリーン・リッチ信号Ｏｘ、スロットルセンサ１７からのスロットル弁１５の開度を示す信号ＳＴＯ、スタータスイッチ２８からのスタート信号ＳＴＡ、及びテストスイッチ２４からの診断モードを設定する信号Ｔが入力される。
【００３４】
Ａ／Ｄ変換器３４は、アナログ入力回路３２に入力される各種の検出信号をＣＰＵ３１からの指令に従い順次選択して読み取り、ディジタルデータに変換するマルチプレクサ機能を有する。
また、電源回路３５は、イグニッションスイッチ２６を経てバッテリ１９の電圧＋ＢをＣＰＵ３１に供給し、また、常時バックアップ用電源Ｂａｔｔを供給している。
【００３５】
ＣＰＵ３１からの出力データは、出力回路３６、３７及び３８に供給され、エンジン制御ユニット１６からの出力信号として取り出される。すなわち、出力回路３６からはイグナイタ２３に対して点火指令信号ＩＧｔを出力する。また、出力回路３７からは診断結果を表す信号Ｗを出力して警告灯２５を点灯制御する。出力回路３８からの出力信号τｑは、エンジン１１の運転状態に対応した燃料噴射量を指示するもので、インジェクタ２２ａ〜２２ｄに出力されて、これらインジェクタ２２ａ〜２２ｄの噴射量を変える。
【００３６】
さらにＣＰＵ（エンジン制御ユニット）３１内には、後述する自己診断プログラムを格納するメモリ３９が設けられている。このメモリ３９は、ＲＯＭ及び、イグニッションスイッチ２６がオフされているときにも電源供給されてデータを保持するスタンバイＲＡＭ又は不揮発性のＥＥＰＲＯＭとで構成されている。自己診断プログラムは、ＲＯＭ内に格納されている。そして後述するように、スタンバイＲＡＭ又はＥＥＰＲＯＭには、自己診断プログラムによって故障検出結果及び故障検出の実行履歴が記憶される。
【００３７】
本実施例は、メモリ３９のＲＯＭ内に格納された自己診断プログラムに特徴を有するものである。そこで次に、自己診断プログラムについて説明する。
図３は、自己診断プログラムの構造（アーキテクチャ）を概念的に示した説明図である。自己診断プログラムは、オブジェクト指向設計された複数のプログラムで構成される。既に知られるように、オブジェクト指向設計とは、従来のソフトウェアが処理（例えば、燃料噴射という処理）に着目したものに対し、モノを基本単位にモデル化し、そのモノの特性や振る舞い（動作）で処理を記述するものである。この基本単位を「オブジェクト」と称し、オブジェクト指向設計されたプログラムは、このオブジェクトを最小構成単位として記述される。プログラム全体としては、オブジェクトからオブジェクトへの通知（メッセージ）によりオブジェクト間を結合することで一連の処理が実行される。オブジェクトは、データ（属性）とデータに対するメソッド（手続き）とを備え、他のオブジェクトからのメッセージによってメソッドを実行する。なお、本実施例中でも「オブジェクトが・・・する。」というオブジェクトを主体とした表現を用いるが、実際には、ＣＰＵ３１が処理プログラムを実行することで実現されることは言うまでもない。
【００３８】
図３には、本実施例を説明するために必要なオブジェクトのみを示した。つまり、本実施例における自己診断プログラムは少なくとも、診断スケジューラオブジェクト１００と、診断起動判定オブジェクト２００と、故障検出オブジェクト３００とを備えている。なお、図面中には（他の図面中でも）、オブジェクトを「ｏｂｊ」と示した。
【００３９】
これらのオブジェクト１００〜３００は、ＰＦ４００上のプログラムであり、ＰＦ４００との間で適宜情報交換を行いながら動作する。
診断スケジューラオブジェクト１００は、ＰＦ４００からの「タイミング信号」としての診断開始通知があると、起動対象の故障検出オブジェクト３００を決定する。そして、起動対象の故障検出オブジェクト３００の起動許可を、診断起動判定オブジェクト２００へ依頼する。
【００４０】
診断起動判定オブジェクト２００は、診断スケジューラオブジェクト１００から起動許可依頼があると、実行条件判断に必要な情報を取得し、これらの情報に基づいて、許可あるいは不許可を診断スケジューラオブジェクト１００へ通知する。なお、図３に示すように、車両に関する情報はＰＦ４００から取得し、故障検出に関する情報はメモリ３９のスタンバイＲＡＭ又はＥＥＰＲＯＭから取得する。
【００４１】
診断スケジューラオブジェクト１００は、診断起動判定オブジェクト２００からの許可通知を受け取った場合にだけ、上述した起動対象の故障検出オブジェクト３００へ起動指示を発行する。
故障検出オブジェクト３００は、水温センサ、吸気温センサといったダイアグ対象毎に用意されており、診断スケジューラオブジェクト１００からの起動指示に基づき、該当するダイアグ対象の故障検出を行う。そして、故障検出結果及び故障検出の実行履歴は、メモリ３９に記憶される。具体的には、故障検出結果や実行履歴を保存するオブジェクト（不図示）を用意しておき、このオブジェクトに対するメッセージを出力して保存するようにすればよい。なお、この故障検出結果に基づいて、上述した警告灯２５が点灯される。
【００４２】
各オブジェクト１００〜３００は、上述したように各種の通知（メッセージ）によって結合されて一連の処理を実行する。そこで次に、メッセージシーケンスチャート（以下「ＭＳＣ」という。）を参照して各オブジェクト１００〜３００の結合をさらに詳しく説明する。
【００４３】
図４は、診断手順を示すＭＳＣである。
まずＰＦ４００が診断スケジューラオブジェクト１００に診断開始を通知する。ＰＦ４００からの診断開始通知があると、診断スケジューラオブジェクト１００は、起動処理Ｓ１を実行する。この起動処理Ｓ１にて、起動対象の故障検出オブジェクト３００が決定され、診断起動判定オブジェクト２００への診断許可依頼を経て、故障検出オブジェクト３００が起動される。
【００４４】
起動許可依頼が通知されると、診断起動判定オブジェクト２００は、起動判定処理Ｓ２を実行し、取得した情報に基づいて、許可／不許可のいずれかを、診断スケジューラオブジェクト１００へ通知する。
許可通知があることによって起動指示が発行されると、故障検出オブジェクト３００は、故障検出処理Ｓ３を実行する。故障検出処理Ｓ３による故障検出結果及び実行履歴は上述したようにメモリ３９に記憶される。
【００４５】
故障検出オブジェクト３００は、故障検出処理Ｓ３が終了すると、診断スケジューラオブジェクト１００に対し、故障検出の終了を通知する。起動指示を発行した全ての故障検出オブジェクト３００からの終了通知があると、診断スケジューラオブジェクト１００は、ＰＦ４００へ診断終了を通知することによって診断処理が終了する。
【００４６】
次に、各オブジェクト１００〜３００でそれぞれ実行される、起動処理Ｓ１、起動判定処理Ｓ２、及び故障検出処理Ｓ３を具体的に説明し、各オブジェクト１００〜３００の動作に対する理解を深める。
まず起動処理Ｓ１について、図５及び図６に基づき説明する。
【００４７】
図５は、診断スケジューラオブジェクト１００にて実行される起動処理Ｓ１を示すフローチャートである。この起動処理Ｓ１は、上述したように、ＰＦ４００から診断開始通知があると実行される。
最初のステップ（以下、ステップを単に記号Ｓで示す。）１０００において、起動対象の故障検出オブジェクト３００を決定する。この決定は、ＰＦ４００から入力される診断開始通知である駆動トリガに基づいてなされる。駆動トリガと、起動対象となる故障検出オブジェクト３００との対応関係を記述したのが、図６に示す対応テーブルである。この対応テーブルからは、６４ｍｓ毎に入力される駆動トリガに対し、水温センサ診断、エアフローセンサ診断、・・・、吸気温センサ診断を行う複数の故障検出オブジェクト３００が起動対象になることが分かる。また、１２８ｍｓ毎に入力される駆動トリガに対し、スロットルセンサ診断を行う故障検出オブジェクト３００が起動対象になることが分かる。なお、駆動トリガとして、所定時間間隔で入力されるタイミング信号を例に挙げたが、エンジンのクランク軸の回転角度に応じて入力される信号であってもよい。
【００４８】
続くＳ１０１０では、診断起動判定オブジェクト２００に対し、起動許可依頼を通知する。この起動許可依頼は、図６に示した対応テーブルの左側のオブジェクトから順に行う。例えば６４ｍｓの駆動トリガが入力されると、まず、水温センサ診断を行う故障検出オブジェクト３００の起動許可を依頼することになる。
【００４９】
この起動許可依頼に対して、診断起動判定オブジェクト２００は、許可／不許可のいずれかを通知してくる。したがって次のＳ１０２０では、許可の通知があったか否かを判断する。ここで許可の通知があった場合（Ｓ１０２０：ＹＥＳ）、Ｓ１０３０にて該当する故障検出オブジェクト３００への起動指示を行い、その後、Ｓ１０４０へ移行する。例えば水温センサ診断の起動が許可された場合には、水温センサ診断を行う故障検出オブジェクト３００に対する起動指示を行うという具合である。一方、許可の通知がなかった場合（Ｓ１０２０：ＮＯ）、すなわち、不許可の通知があった場合には、Ｓ１０３０の処理を実行せず、Ｓ１０４０へ移行する。
【００５０】
Ｓ１０４０では、起動対象として決定した故障検出オブジェクト３００についての起動許可を全て依頼したか否かを判断する。例えば６４ｍｓの駆動トリガがあった場合を例に挙げれば、水温センサ診断→エアフローセンサ診断→吸気温センサ診断の順に全ての起動許可を依頼したか否かを判断する。ここで全ての起動許可を依頼している場合（Ｓ１０４０：ＹＥＳ）、本起動処理Ｓ１を終了する。一方、依頼していないものがあれば（Ｓ１０４０：ＮＯ）、Ｓ１０１０からの処理を繰り返す。
【００５１】
続いて、図７及び図８に基づき、起動判定処理Ｓ２について説明する。
図７は、診断起動判定オブジェクト２００にて実行される起動判定処理Ｓ２を示すフローチャートである。この起動判定処理Ｓ２は、診断スケジューラオブジェクト１００からの起動許可依頼（図５中のＳ１０１０）があると実行される。
【００５２】
最初のＳ２０００において、実行条件の判定に必要な情報を取得する。ここでは、故障検出結果及び、故障検出の実行履歴、車両に搭載されたバッテリ１９の電圧＋Ｂ、エンジン始動後の経過時間を取得する。
続くＳ２０１０では、実行条件が成立したか否かを判断する。この判断は、図８に例示した実行条件の判断テーブルに基づいて行われる。
【００５３】
図８（ａ）は、判断対象となる診断項目と他の診断項目との関係を表にした関係テーブルである。例えばスロットルセンサ診断に関する行を見ると、水温センサの「正常時」となっている。これは、スロットルセンサ診断の実行条件は、水温センサの診断結果が正常であれば成立することを示している。同様に、吸気温センサ診断の実行条件は、スロットルセンサ診断の実行後に成立し、また、エアフローセンサ診断の実行条件は、スロットルセンサ診断の実行後で、さらに、吸気温センサの正常時に成立する。このような関係テーブルによれば、Ｓ２０００で取得される故障検出結果及び故障検出の実行履歴に基づき、実行条件の成立を判断できる。
【００５４】
一方、図８（ｂ）は、判断対象となる診断項目に対する前提条件を示す条件テーブルである。例えば水温センサ診断に関する行を見ると、始動後時間が０ｓ（秒）、バッテリ電圧が１０Ｖ（ボルト）となっている。これは、水温センサ診断の実行条件は、エンジンの始動直後から成立し、さらに、バッテリ電圧が１０Ｖ以上であれば成立することを示している。同様に、吸気温センサ診断の実行条件は、エンジン始動から１０ｓが経過した後で、バッテリ電圧が１０Ｖ以上であれば成立する。スロットルセンサ診断の実行条件は、エンジン始動から５ｓ経過後、バッテリ電圧１０Ｖ以上で成立し、エアフローセンサ診断の実行条件は、エンジン始動から１０ｓ経過後、バッテリ電圧１２Ｖ以上で成立する。このような条件テーブルによれば、２０００で取得されるバッテリ１９の電圧＋Ｂ及びエンジン始動後の経過時間に基づき、実行条件の成立を判断できる。
【００５５】
なお、図８には、ダイアグ対象である４つのセンサに関する診断項目について例示したが、実際には、約２００にも及ぶダイアグ対象に対して同様の判断テーブルを作成すればよい。
Ｓ２０１０にて実行条件が成立したと判断された場合（Ｓ２０１０：ＹＥＳ）、Ｓ２０２０にて許可通知を発行し、その後、本起動判定処理Ｓ２を終了する。一方、実行条件が成立していないと判断された場合（Ｓ２０１０：ＮＯ）、Ｓ２０３０にて不許可通知を発行し、その後、本起動判定処理Ｓ２を終了する。
【００５６】
さらに続けて、図９に基づき、故障検出処理Ｓ３について説明する。なお、ここでは、水温センサ診断を行う故障検出オブジェクト３００の実行する処理を例に挙げて説明する。この故障検出処理Ｓ３は、診断スケジューラオブジェクト１００からの起動指示があると実行される。
【００５７】
まず最初のＳ３０００において、水温センサ値を読み込む。ここでいう水温センサ値は、水温センサ２０からの検出信号Ｔｈｗの電圧値である。続くＳ３０１０にて、水温センサ値が所定範囲内にあるか否かを判断する。例えば水温センサ値が、０．１Ｖ〜４．９Ｖの範囲で得られる構成では、０．１Ｖを下回っていたり、４．９Ｖを上回っていたりする場合、断線などによって水温センサ値が固着していることが考えられる。ここで所定範囲内であると判断された場合（Ｓ３０１０：ＹＥＳ）、Ｓ３０２０にて正常と判定し、その後、故障検出の終了を通知して、本故障検出処理Ｓ３を終了する。一方、所定範囲内でないと判断された場合（Ｓ３０１０：ＮＯ）、Ｓ３０３０にて異常と判定し、その後、故障検出の終了を通知して、本故障検出処理Ｓ３を終了する。
【００５８】
以上のように各オブジェクト１００〜３００を構成したことによる効果を次に述べる。なお、ここでの説明に対する理解を容易にするため、繰り返すことになるが、従来のプログラム構造の問題点を簡単に説明する。
ダイアグ対象の変更に合わせ簡単に自己診断プログラムを変更できるようにするため、例えばダイアグ対象毎に故障検出ロジックを記述することは周知のことである。また、故障検出ロジックの実行タイミングを決定するために、スケジューラを設けることも提案されていた。
【００５９】
しかしながら、一部の故障検出ロジックの実行には、タイミングだけでなく、他の故障検出ロジックとの関連性を考慮する必要があり、この関連性を考慮した実行条件判断を故障検出ロジックで行っていたため、ダイアグ対象の変更あるいは実行タイミングの変更に対し、対応する故障検出ロジックのみでなく、関連性を有する故障検出ロジックの修正が必要になる場合があった。
【００６０】
これに対して、本実施例では、他の故障検出ロジックとの関連性（図８（ａ）参照）を診断起動判定オブジェクト２００が判断するようにし（図７中のＳ２０１０）、故障検出オブジェクト３００と別にした。これによって、ダイアグ対象が変更されて実行条件を修正する必要が生じても、対応する故障検出オブジェクト３００及び診断起動判定オブジェクト２００に変更を加えることで対応でき、変更されたダイアグ対象に直接的に関係しない故障検出オブジェクト３００まで修正する必要がなくなる。その結果、自己診断プログラムの変更を容易にすることができる。さらに、変更箇所がまとめられることで人為的なミスを減少させることもできるため、結果的に自己診断プログラムの品質向上に寄与する。
【００６１】
また、本実施例ではさらに、診断起動判定オブジェクト２００が、故障検出の前提条件（図８（ｂ）参照）までを判断するようにした（図７中のＳ２０１０）。その結果、診断実行の前提条件も診断起動判定オブジェクト２００にまとめて記述され、その変更が容易になる。また、このような前提条件には共通するものが多いため、個々の故障検出ロジックでこれらの前提条件を判断するプログラム構造と比較して、自己診断プログラムがコンパクトに設計できる点で、自己診断プログラムの品質向上に寄与する。
【００６２】
さらに、本実施例では、診断起動判定オブジェクト２００とは別に診断スケジューラオブジェクト１００を備えているため、実行タイミングの変更があった場合には、診断スケジューラオブジェクト１００を変更することで対応できる。この診断スケジューラオブジェクト１００は、図６に示した対応テーブルに基づいて、起動対象の故障検出オブジェクト３００を決定する。このように、診断開始通知である駆動トリガと、起動対象の故障検出オブジェクト３００との関係とをテーブル化しておけば、作業者にとって分かり易く、実行タイミングの変更作業がさらに容易になる。そしてこれは結果的に、自己診断プログラムの品質向上につながる。
【００６３】
なお、本実施例の診断スケジューラオブジェクト１００が「スケジューラオブジェクト」に相当し、診断起動判定オブジェクト２００が「起動判定オブジェクト」に相当し、故障検出オブジェクト３００が「故障検出オブジェクト」に相当する。
【００６４】
以上、本発明はこのような実施例に何等限定されるものではなく、本発明の主旨を逸脱しない範囲において種々なる形態で実施し得る。
例えば上記実施例では、実行条件の成立を判断するために故障検出結果、故障検出の実行履歴、バッテリ１９の電圧＋Ｂ、及びエンジン始動後の経過時間を取得している。しかし、実行条件の成立を判断できる情報であればよく、これらに限定されるものではない。例えばダイアグ対象や車両のハードウェアに関係しないエンジン制御ユニット１６内部の情報で実行条件の成立を判断することも考えられる。
【００６５】
また、上記実施例では、故障検出オブジェクト３００をダイアグ対象毎に用意したが、故障検出処理毎に用意することも考えられる。ダイアグ対象の中には故障検出処理を共通にできるものも存在するためである。このようにすれば、自己診断プログラムをよりコンパクトにできる。
【図面の簡単な説明】
【図１】実施例のエンジン制御システムを示す構成図である。
【図２】実施例のエンジン制御ユニットの構成を示すブロック図である。
【図３】自己診断プログラムの構造を概念的に示した説明図である。
【図４】自己診断プログラムによる診断手順を示すＭＳＣである。
【図５】起動処理を示すフローチャートである。
【図６】起動対象オブジェクトを特定するための対応テーブルである。
【図７】起動判定処理を示すフローチャートである。
【図８】実行条件成立の判断を行うための判断テーブルである。
【図９】故障検出処理を示すフローチャートである。
【符号の説明】
１１…エンジン
１２…吸気管
１３…エアフローセンサ
１４…吸気温センサ
１５…スロットル弁
１６…エンジン制御ユニット
１７…スロットルセンサ
１８…空燃比センサ
１９…バッテリ
２０…水温センサ
２１…ディストリビュータ
２２ａ，２２ｂ，２２ｃ，２２ｄ
…インジェクタ
２３…イグナイタ
２４…テストスイッチ
２５…警告灯
２６…イグニッションスイッチ
２７…スタータモータ
２８…スタータスイッチ
３２…アナログ入力回路
３３…ディジタル入力回路
３４…Ａ／Ｄ変換器
３５…電源回路
３６，３７，３８
…出力回路
３９…メモリ
１００…診断スケジューラオブジェクト
２００…診断起動判定オブジェクト
３００…故障検出オブジェクト
【図１】
0004491967.tif 000002
【図２】
0004491967.tif 000003
【図３】
0004491967.tif 000004
【図４】
0004491967.tif 000005
【図５】
0004491967.tif 000006
【図６】
0004491967.tif 000007
【図７】
0004491967.tif 000008
【図８】
0004491967.tif 000009
【図９】
0004491967.tif 000010