(57)【特許請求の範囲】
【請求項１】
ダイアグ対象の故障検出結果に基づき、予め設定された故障項目に対するダイアグ故障情報を記憶する自己診断機能を備えた車両制御装置において、
前記自己診断機能を実現するための自己診断プログラムは、
オブジェクト指向設計され、再利用が可能なオブジェクトの単位で構成されており、
ダイアグ対象に依存する故障検出処理毎に対応させて用意され、所定の故障検出処理を実行して故障検出を行う故障検出オブジェクトと、
前記故障項目に対応させて複数用意され、前記ダイアグ故障情報を記憶するための故障情報記憶処理を実行する故障情報保存オブジェクトと、
前記故障検出オブジェクトから前記故障検出結果を受け取り、対応する前記故障情報保存オブジェクトを判断し、当該故障情報保存オブジェクトに前記故障検出結果に基づくダイアグ故障情報を記憶させるための通知を行う故障情報管理オブジェクトとを備え、
前記故障情報保存オブジェクトは、前記故障情報管理オブジェクトからの通知に基づき、前記故障情報記憶処理を実行すると共に、前記故障情報管理オブジェクトに該故障情報記憶処理の終了を示す通知を行うこと
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項２】
請求項１に記載の車両用制御装置において、
前記故障情報管理オブジェクトは、前記故障検出オブジェクトから前記故障検出結果を受け取ると、故障のレベルを判定するための、当該故障検出オブジェクトに応じた故障レベル判定処理を実行し、当該故障レベル判定処理による結果に従い前記ダイアグ故障情報を記憶させること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項３】
請求項１又は２のいずれかに記載の車両用制御装置において、
前記ダイアグ故障情報の付帯情報である、故障時における車両状態を含むフリーズ情報を記憶することを前提として、
前記自己診断プログラムは、さらに、前記フリーズ情報を記憶するためのＦＦＤ記憶処理を実行する故障時状態保存オブジェクトを備えていること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項４】
請求項３に記載の車両用制御装置において、
前記自己診断プログラムは、さらに、前記故障項目と前記故障時状態保存オブジェクトとの対応関係に基づき、該当する故障時状態保存オブジェクトに前記フリーズ情報を記憶させるための通知を行う故障時状態管理オブジェクトを備えていること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項５】
ダイアグ対象の故障検出結果に基づき、予め設定された故障項目に対するダイアグ故障情報を記憶する自己診断機能を備えた車両制御装置において、
前記自己診断機能を実現するための自己診断プログラムは、
オブジェクト指向設計され、再利用が可能なオブジェクトの単位で構成されており、
前記ダイアグ故障情報の付帯情報である、故障時における車両状態を含むフリーズ情報を記憶することを前提として、
前記故障項目に対応させて複数用意され、前記ダイアグ故障情報を記憶する故障情報保存オブジェクトと、
前記フリーズ情報を記憶するためのＦＦＤ記憶処理を実行する故障時状態保存オブジェクトと、
前記故障項目と前記故障時状態保存オブジェクトとの対応関係に基づき、該当する故障時状態保存オブジェクトに前記フリーズ情報を記憶させるための通知を行う故障時状態管理オブジェクトとを備え、
前記故障時状態保存オブジェクトは、前記故障時状態管理オブジェクトからの通知に基づき、前記ＦＦＤ記憶処理を実行すると共に、前記故障時状態管理オブジェクトに該ＦＦＤ記憶処理の終了を示す通知を行うこと
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項６】
請求項４又は５のいずれかに記載の車両用制御装置において、
前記故障時状態保存オブジェクトは、同一内容の前記フリーズ情報を前記故障項目に対応させて記憶するように複数用意されていること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項７】
請求項４〜６のいずれかに記載の車両用制御装置において、
前記故障情報保存オブジェクトが前記対応関係を記憶していること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項８】
請求項４〜７のいずれかに記載の車両用制御装置において、
前記故障時状態管理オブジェクトは、前記故障項目毎の前記フリーズ情報の保存必要性である優先度情報に基づいて、前記故障時状態保存オブジェクトに記憶させたフリーズ情報を更新すること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項９】
請求項８に記載の車両用制御装置において、
前記故障情報保存オブジェクトが前記優先度情報を記憶していること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項１０】
請求項４〜９のいずれかに記載の車両用制御装置において、
前記故障時状態管理オブジェクトは、前記フリーズ情報の保存依頼があると、前記フリーズ情報の一部となる車両情報を取得し、前記故障時状態保存オブジェクトに前記フリーズ情報を記憶させること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項１１】
請求項４〜１０のいずれかに記載の車両用制御装置において、
前記故障時状態管理オブジェクトは、前記フリーズ情報の無効依頼があると、前記故障時状態保存オブジェクトに記憶させた前記フリーズ情報を無効にすること
を特徴とする自己診断機能を備えた車両用制御装置。
【請求項１２】
請求項１〜１１のいずれかに記載の車両用制御装置の前記自己診断プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、車両を制御する車両用制御装置の自己診断機能に関し、さらに、当該自己診断機能をオブジェクト指向プログラミングにて実現する技術に関する。
【０００２】
【従来の技術】
近年、高性能マイクロプロセッサの出現などエレクトロニクス技術の進歩を背景として、機械技術と電子技術とが結びついたメカトロニクス技術の進歩が著しい。メカトロニクスの進歩の一部として、自動車等の車両にも多くのコンピュータシステムが採用されてきている。このような車載用のコンピュータシステムは、省資源、省エネルギー、走行性能、安全性、快適性等を追求するものであり、車両内のエンジン・駆動系、走行・安全系、エンターテイメント系、及びその他の随所に搭載されている。
【０００３】
その中でも特に高い信頼性を要求される車両制御用のコンピュータシステムは、システム内の各部位の故障検出を的確に行わないと、走行上の不具合を引き起こす可能性があり、場合によっては走行不能となることもある。そのため、コンピュータシステムに自己診断機能を備えることにより、信頼性の向上が図られている。すなわち、コンピュータ部やセンサ類の動作状態を適当な周期で自動的にチェックし、故障時には、ユーザなどに故障を知らせるための警告灯（ＭＩＬ）を点灯したり、その故障内容が修理担当者などに分かるよう故障コード（ＤＴＣ）を記憶したりするダイアグノーシス（以下「ダイアグ」という。）処理を可能にしている。このダイアグ処理の対象は、クランク角センサ、カム角センサ、水温センサなどの各センサをはじめ、現在では約２００にもおよぶ。以下、ダイアグ処理の対象を「ダイアグ対象」と呼ぶ。
【０００４】
そして、このようなダイアグ処理を実現するための自己診断プログラムの設計では、上述したダイアグ対象が、車種やグレードあるいはモデルチェンジのタイミングで変わるということを考慮しなければならない。そのため、再利用性という観点から、オブジェクト指向設計することが望ましい。つまり、ダイアグ対象に依存する処理とダイアグ対象に依存しない処理を別のオブジェクトが実行するようにして、ダイアグ対象に依存しない処理を実行するオブジェクトはダイアグ対象が変わってもそのまま利用できるようにし、過去に作成した自己診断プログラムを部分的に用いて新たな自己診断プログラムを作成できるようにするのである。
【０００５】
このような技術について本願出願人は、特願平１０−２６４８３０号で既に提案している。この技術は、ダイアグ対象に依存する処理を実行するオブジェクトを異常検出オブジェクトとして自己診断プログラム上で分離し、ダイアグ対象が変更された場合にはこの異常検出オブジェクトだけを変更し、他のオブジェクトに関して再利用を図ったものである。
【０００６】
【発明が解決しようとする課題】
しかしながら、上述の技術においても、次の点では改良の余地がある。それは、異常検出オブジェクトが、故障を検出するだけでなく、処理結果としての故障情報を記憶する点である。
【０００７】
（１）「ダイアグ対象が変わる」場合は、大別して２つに分けられる。ダイアグ対象の構成が変わる場合と、ダイアグ対象が増減する場合である。例えばある車種では水温センサＡを用い、別の車種では水温センサＢを用いるという場合が前者に相当する。また例えば、ある車種ではセンサＣを用いず、別の車種ではセンサＣを用いるという場合が後者に相当する。
【０００８】
車種・グレードが違っても同様の車両制御を行う場合には、同様の機能を有するセンサ等を用いることになるため、前者のようにダイアグ対象の構成が変わる場合が多い。そして、ダイアグ対象の構成のみが変わる場合、故障検出処理（検出ロジック）の変更を迫られるが、故障情報についてはそのままでよいことになる。
【０００９】
一方、故障情報は、法規やメーカによって予め定められるものである。したがって、メーカからの要求などにより故障項目の増減が生じると、故障情報を変更する必要が生じるが、故障検出処理については何等変更する必要がないことがある。
【００１０】
つまり、上述の技術では、ダイアグ対象に依存する処理を分離してダイアグ対象毎の単位でオブジェクト化を図ったのであるが、ダイアグ対象等の変更状況によっては、異常検出オブジェクト内に再利用できる部分が存在することになってしまう。
【００１１】
（２）また、従来のように、ダイアグ対象毎にオブジェクト化すると、２以上の異常検出オブジェクトで故障検出処理が重複する場合があった。ダイアグ対象が異なっていても故障検出処理が同一になる場合があるためである。これは自己診断プログラムのコンパクト化を阻害する原因となる。
【００１２】
（３）さらに、自己診断プログラムの作成段階において、故障情報は最初に決定されることが多く開発途中ではほとんど変更されないが、故障検出処理は、センサの変更に従い、また、ロジック（アルゴリズム）の改良によって、開発途中で何度も変更される可能性がある。しかし、従来の構成では、同一オブジェクト内に故障情報の記述があるため、故障検出処理だけを変更しようとしても故障情報との関連を考慮する必要が生じ、結果として、プログラム作成工数を増大させてしまっていた。
【００１３】
（４）また、故障情報の中には、ダイアグ対象の故障項目に対応するダイアグ故障情報と、故障時の車両状態を含むフリーズ情報が存在する。フリーズ情報を記憶するのは、故障原因の究明などに利用できるためである。このようなフリーズ情報は、ダイアグ故障情報と異なり、故障項目に対応させて記憶することは通常行わない。故障項目に対応させて記憶しようとすれば、例えば２００という故障項目に対応するフリーズ情報の記憶領域が必要になり、記憶容量などが問題となるためである。したがって、永続的な又は重要な故障と判断された場合に、その付帯情報として記憶するのが一般的である。
【００１４】
したがって、故障情報の変更と一口に言っても、故障項目の増減によって変更される情報はダイアグ故障情報であり、フリーズ情報は変更されない場合が考えられる。逆に、フリーズ情報のみが変更され、ダイアグ故障情報は変更されない場合が考えられる。つまり、故障情報を一まとめにして記憶する構成を採れば、故障情報の変更状況に合わせて、再利用できる部分が存在することになる。
【００１５】
本発明は、上述した問題を解決するためになされたものであり、自己診断プログラムの再利用性を向上させることを第１の目的とし、自己診断プログラムをコンパクトにすると共に自己診断プログラムの作成工数を削減することを第２の目的とする。
【００１６】
【課題を解決するための手段及び発明の効果】
上述した目的を達成するためになされた請求項１に記載の車両用制御装置の自己診断機能を実現する自己診断プログラムは、オブジェクト指向設計され、再利用が可能なオブジェクトの単位で構成されている。
【００１７】
そして、本発明では特に、自己診断プログラムが、故障検出オブジェクトと、故障情報保存オブジェクトとを備える。故障検出オブジェクトは、ダイアグ対象に依存する故障検出処理毎に対応させて用意される。そして、所定の故障検出処理を実行する。一方、故障情報保存オブジェクトは、上述した故障項目に対応させて複数用意される。そして、故障項目に対応するダイアグ故障情報を記憶するための故障情報記憶処理を実行する。
【００１８】
つまり、故障検出処理を実行するオブジェクトと、ダイアグ故障情報を記憶するオブジェクトとを別個のオブジェクトとしたのである。これによって、ダイアグ対象の構成が変わった場合には故障検出オブジェクトだけを変更し、故障情報保存オブジェクトについてはそのまま再利用することができる。また、故障情報保存オブジェクトが故障項目毎に用意されるため、メーカからの要求などにより故障項目の増減が生じた場合には、故障情報保存オブジェクトだけを変更し（即ち、故障項目の追加・変更がオブジェクトの単位で可能になり）、故障検出オブジェクトについてはそのまま再利用することができる。その結果、ダイアグ対象の構成のみに変更が生じた場合やダイアグ故障情報のみに増減が生じた場合における自己診断プログラムの再利用性が図られる。すなわち、上記（１）に示した問題が解決される。
【００１９】
また、従来はダイアグ対象毎にオブジェクト化がなされていたため、複数のオブジェクトで故障検出処理が重複することがあった。これに対して、本発明では、故障検出処理に対応させて故障検出オブジェクトを用意したため、ダイアグ対象が異なっている場合であっても故障検出処理が共通であれば、それは一つの故障検出オブジェクトとして実現される。したがって、自己診断プログラムがコンパクトになる。すなわち、上記（２）に示した問題が解決される。
【００２０】
さらに、従来の構成では同一オブジェクト内にダイアグ故障情報の記述があるため、故障検出処理だけを変更しようとしてもダイアグ故障情報との関連を考慮する必要が生じ、自己診断プログラムの作成工数を増大させてしまっていた。これに対して本発明では、故障情報保存オブジェクトがダイアグ故障情報を記憶するため、故障検出処理を変更する場合に、故障情報保存オブジェクトについては手直しする必要がなく、ダイアグ故障情報との関連を考慮する必要がない。その結果、自己診断プログラムの作成工数を削減することができる。すなわち、上記（３）に示した問題が解決される。
【００２１】
以上のように本発明によれば、上記第１及び第２の目的が達成される。
ところで、故障検出オブジェクトや故障情報保存オブジェクトの再利用という観点からは、自己診断プログラムがさらに、故障情報管理オブジェクトを備える構成にする。故障情報管理オブジェクトは、故障検出オブジェクトから故障検出結果を受け取り、対応する故障情報保存オブジェクトを判断する。そして、当該故障情報保存オブジェクトに受け取った故障検出結果に基づくダイアグ故障情報を記憶させるための通知を行う。なお、故障情報保存オブジェクトは、故障情報管理オブジェクトからの通知に基づき、故障情報記憶処理を実行すると共に、故障情報管理オブジェクトにその故障情報記憶処理の終了を示す通知を行う。
【００２２】
故障検出オブジェクトは故障検出処理毎に用意されるものであり、故障情報保存オブジェクトは故障項目毎に用意されるものであるため、それらオブジェクト間の対応をとる必要がある。その対応関係を有するのが、故障情報管理オブジェクトである。このようなインターフェース的オブジェクトを用意することによって、故障検出オブジェクトと故障情報保存オブジェクトとが相互に存在を意識する必要がなくなり、両オブジェクトの独立性が向上する。例えば、故障検出オブジェクトを再利用する場合に、対応する故障情報保存オブジェクトがどれであるかということを意識する必要がなくなるからである。これによって、故障検出オブジェクト及び故障情報保存オブジェクトの再利用が容易になる。
【００２３】
なお、自己診断プログラムによる自己診断機能は、ただ単にダイアグ対象の作動状態を単発的にチェックして「故障」を判定するものではない。「故障」にもレベルがあるからである。例えば、センサからの入力信号系の「故障」を例に挙げた場合、コネクタ等における一時的な接触不良も「故障」であるし、完全な断線も「故障」である。前者の場合は、その後良好な作動状態を維持することがあり、特に部品交換の必要性が認められないことがある。したがって、従来より、このような接触不良などの一時的な故障を「仮異常」、完全な断線などの永続的な故障を「確定異常」などとして、故障のレベルを判定することが行われている。このような判定は、故障検出オブジェクトがそれぞれの処理で行ってもよいが、数パターンに分けられるため、請求項２に示すように、故障情報管理オブジェクトが行うようにするとよい。この場合、故障情報管理オブジェクトは、故障検出オブジェクトから故障検出結果を受け取ると、故障のレベルを判定するための、当該故障検出オブジェクトに応じた故障レベル判定処理を実行し、当該故障レベル判定処理による結果に従いダイアグ故障情報を故障情報保存オブジェクトに記憶させる。このようにすれば、故障検出オブジェクトが故障のレベルを判定するよりも効率的であり、自己診断プログラムのさらなるコンパクト化に寄与できる。
そして、請求項３に示すように、請求項１又は２に示した構成に加え、後述する故障時状態保存オブジェクトを備える構成にすることも考えられる。このようにすれば、自己診断プログラムの再利用性のさらなる向上に寄与できる。
また、故障時状態保存オブジェクトを備える構成を前提とすれば、請求項４に示すように、さらに、後述する故障時状態管理オブジェクトを備える構成とすることが考えられる。故障時状態管理オブジェクトは、故障項目と故障時状態保存オブジェクトとの対応関係に基づき、該当する故障時状態保存オブジェクトにフリーズ情報を記憶させるための通知を行う。このようにすれば、故障時状態保存オブジェクトは故障項目との対応を意識する必要がなくなり、故障時状態保存オブジェクトの追加や削除が容易になるという点で有利である。
【００２４】
ところで、上述したように、自己診断機能では、故障時における車両状態を含むフリーズ情報を記憶するのが一般的である。そして、フリーズ情報は、故障項目毎に記憶されるものではなく、永続的な又は重要な故障と判断された場合に、ダイアグ故障情報の付帯情報として記憶される。
【００２５】
したがって、自己診断プログラムの再利用性を向上させるという観点からは、請求項５に示す構成を採用することが考えられる。
すなわち、ダイアグ故障情報の付帯情報である、故障時における車両状態を含むフリーズ情報を記憶することを前提として、ダイアグ故障情報を記憶する故障情報保存オブジェクトとは別に、フリーズ情報を記憶するためのＦＦＤ記憶処理を実行する故障時状態保存オブジェクトとを備えるものとすることが考えられる。もちろん、この場合も、故障情報保存オブジェクトは、故障項目毎に用意される。故障項目の追加・変更がオブジェクトの単位で可能になるためである。
【００２６】
この場合、ダイアグ故障情報のみに変更が生じた場合、すなわちフリーズ情報の変更がなければ、故障時状態保存オブジェクトはそのまま再利用することができる。また、フリーズ情報のみに変更が生じた場合、すなわちダイアグ故障情報に変更がなければ、故障情報保存オブジェクトはそのまま再利用することができる。すなわち、上記（４）に示す問題が解決される。その結果、このような構成を採用しても、自己診断プログラムの再利用性を向上させるという第１の目的が達成される。
さらに、故障時状態管理オブジェクトを備え、故障時状態管理オブジェクトは、故障項目と故障時状態保存オブジェクトとの対応関係に基づき、該当する故障時状態保存オブジェクトにフリーズ情報を記憶させるための通知を行う。そして、故障時状態保存オブジェクトは、故障時状態管理オブジェクトからの通知に基づき、ＦＦＤ記憶処理を実行すると共に、故障時状態管理オブジェクトに該ＦＦＤ記憶処理の終了を示す通知を行う。このようにすれば、故障時状態保存オブジェクトは故障項目との対応を意識する必要がなくなり、故障時状態保存オブジェクトの追加や削除が容易になるという点で有利である。
【００２７】
なお、フリーズ情報は、所定のデータ群であり、最も重要な故障に対して記憶しておくことが考えられる。したがってこのときは、故障時状態保存オブジェクトは１つだけ用意すればよい。しかしながら、近年では、メモリの記憶容量が増加しているため、故障項目によって異なるフリーズ情報を記憶することもある。このようなときは、要求されるフリーズ情報に合わせて複数の故障時状態保存オブジェクトを用意することで対応することが考えられる。このようにすれば、フリーズ情報の変更にオブジェクト単位の変更で対応できる。また、請求項６に記載のように、同一内容のフリーズ情報を複数の故障項目に対応させて記憶する構成にすることもできる。すなわち、メモリに余裕があれば、故障時状態保存オブジェクトを追加してフリーズ情報の記憶領域を増やすことができ、逆にメモリに余裕がなければ、故障時状態保存オブジェクトを削除することによってフリーズ情報の記憶領域を減らすことができる。つまり、限られたメモリをどのように使用するかを、故障時状態保存オブジェクトの追加／削除によって変更することができる。
【００２９】
そして、故障項目と故障時状態保存オブジェクトとの対応関係は、故障項目の変更に伴って変更されるため、請求項７に示すように、故障項目毎にダイアグ故障情報を保存する故障情報保存オブジェクトに記憶しておくことが望ましい。故障項目の変更に伴う変更部分をまとめておくことによって、その変更作業が簡単になるからである。また、故障項目に依存する情報を故障情報保存オブジェクトに記憶しておけば、故障項目の変更があっても、故障時状態管理オブジェクトを変更する必要はなくなるからである。
【００３０】
また、フリーズ情報は、永続的な又は重要な故障と判断された場合に、その付帯情報として記憶されることは既に述べた。したがって、限られた記憶領域に有用なフリーズ情報を記憶するため、請求項８に示すように、故障時状態管理オブジェクトは、故障項目毎のフリーズ情報の保存必要性である優先度情報に基づいて、故障時状態保存オブジェクトに記憶させたフリーズ情報を更新するようにしてもよい。これによって、優先度情報に基づくフリーズ情報の更新がなされるため、より有用なフリーズ情報を記憶することができる。この優先度情報も、故障項目毎に設けられるものであることを考えると、請求項９に示すように、故障情報保存オブジェクトに記憶しておくことが望ましい。故障情報保存オブジェクトに上述した対応関係を記憶しておくのと同様に、故障項目の変更に伴う変更部分をまとめておくことによって、その変更作業が簡単になるからである。また、故障項目に依存する情報を故障情報保存オブジェクトに記憶しておけば、故障項目の変更があっても、故障時状態管理オブジェクトを変更する必要はなくなるからである。
【００３１】
ところで、故障時状態管理オブジェクトは、請求項１０に示すように、フリーズ情報の保存依頼があると、フリーズ情報の一部となる車両情報を取得し、故障時状態保存オブジェクトにフリーズ情報を記憶させることが考えられる。フリーズ情報の保存依頼は、例えば故障情報管理オブジェクトを備える構成であれば、故障情報管理オブジェクトが行うという具合である。また、請求項１１に示すように、フリーズ情報の無効依頼があると、故障時状態保存オブジェクトに記憶させたフリーズ情報を無効にすることが考えられる。「無効にする」場合、故障時状態保存オブジェクトにフリーズ情報を消去させることが考えられる。また、例えばフリーズ情報を通常操作では読み出せないようにマスクをかけることが考えられる。後者のようにする理由は、一度記憶されたフリーズ情報を、無効になった後でも、必要に応じて参照できるようにするためである。
【００３２】
なお、このような車両用制御装置の自己診断プログラムは、例えば、フロッピーディスク、光磁気ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、ハードディスク等のコンピュータ読み取り可能な記録媒体に記録し、必要に応じてコンピュータシステムにロードして起動することにより用いることができる。この他、ＲＯＭやバックアップＲＡＭをコンピュータ読み取り可能な記録媒体として前記プログラムを記録しておき、このＲＯＭあるいはバックアップＲＡＭをコンピュータシステムに組み込んで用いてもよい。
【００３３】
【発明の実施の形態】
以下、本発明を具体化した実施例を図面を参照して説明する。
［第１実施例］
図１は、エンジン制御システムの全体を示す構成図である。このエンジン制御システムは、エンジン１１及び、このエンジン１１を制御するエンジン制御ユニット１６を中心に構成されている。このエンジン制御ユニット１６が「車両用制御装置」に相当する。
【００３４】
エンジン１１には、エアクリーナからの吸入空気が吸気管１２を経て供給されている。この吸気管１２には、吸入空気量を測定するエアフローセンサ１３と、吸気温度を検出する吸気温センサ１４が配置され、さらに、アクセルペダルによって駆動されるスロットル弁１５が配置されている。
【００３５】
エンジン制御ユニット１６には、エンジン１１の状態を示す各種信号が入力される。この信号を列挙すれば、エアフローセンサ１３からの吸入空気量検出信号、スロットルセンサ１７からのスロットル弁１５の開度検出信号、排出ガス中に含まれる酸素濃度を検出する空燃比センサ１８からの信号、バッテリ１９からのバッテリ電圧信号、水温センサ２０からの検出信号、エンジン１１によって駆動されるディストリビュータ２１からの回転信号、さらに気筒判別信号等である。
【００３６】
また、エンジン制御ユニット１６では、これらの各種検出信号に基づいてエンジン１１の運転状態に対応した燃料噴射量等を演算し、エンジン１１の複数の気筒それぞれに設定されるインジェクタ２２ａ，２２ｂ，２２ｃ，２２ｄに対して燃料噴射指令を出力し、また、イグナイタ２３に対して点火指令信号を出力して、エンジン１１の運転制御を実行する。
【００３７】
さらに、エンジン制御ユニット１６は、車両の各部位の診断も各センサ群からの検出信号に基づいて実行する。このため、エンジン制御ユニット１６に対しては、異常検出結果の出力のための診断モードを設定するテストスイッチ２４が配置され、さらに、そのテスト結果であるダイアグノーシスの結果表示等を行う警告灯２５が接続されている。
【００３８】
スイッチ２６はバッテリ１９をエンジン制御ユニット１６に対して接続するイグニッションスイッチであり、このイグニッションスイッチ２６に連動するようにしてスタータモータ２７を制御するスタータスイッチ２８が設けられている。
次に、エンジン制御ユニット１６について説明する。図２は、図１に示したエンジン制御ユニット１６の構成を示すブロック図である。エンジン制御ユニット１６は、コンピュータシステムを構成するＣＰＵ３１を備える。このＣＰＵ３１にはアナログ入力回路３２及びディジタル入力回路３３からのデータが入力され、アナログ入力回路３２からのアナログ入力データは、Ａ／Ｄ変換器３４でディジタルデータに変換されてＣＰＵ３１に入力される。
【００３９】
アナログ入力回路３２には、エアフローセンサ１３からの検出信号Ｕｓ、水温センサ２０からの検出信号Ｔｈｗ、吸気温センサ１４からの検出信号Ｔｈａ、及びバッテリ１９の電圧＋Ｂが入力される。一方、ディジタル入力回路３３には、ディストリビュータ２１からの気筒判別信号Ｇ１と回転角信号Ｎｅ、空燃比センサ１８からの酸素濃度に対応したリーン・リッチ信号Ｏｘ、スロットルセンサ１７からのスロットル弁１５の開度を示す信号ＳＴＯ、スタータスイッチ２８からのスタート信号ＳＴＡ、及びテストスイッチ２４からの診断モードを設定する信号Ｔが入力される。
【００４０】
Ａ／Ｄ変換器３４は、アナログ入力回路３２に入力される各種の検出信号をＣＰＵ３１からの指令に従い順次選択して読み取り、ディジタルデータに変換するマルチプレクサ機能を有する。
また、電源回路３５は、イグニッションスイッチ２６を経てバッテリ１９の電圧＋ＢをＣＰＵ３１に供給し、また、常時バックアップ用電源Ｂａｔｔを供給している。
【００４１】
ＣＰＵ３１からの出力データは、出力回路３６、３７及び３８に供給され、エンジン制御ユニット１６からの出力信号として取り出される。すなわち、出力回路３６からはイグナイタ２３に対して点火指令信号ＩＧｔを出力する。また、出力回路３７からは診断結果を表す信号Ｗを出力して警告灯２５を点灯制御する。出力回路３８からの出力信号τｑは、エンジン１１の運転状態に対応した燃料噴射量を指示するもので、インジェクタ２２ａ〜２２ｄに出力されて、これらインジェクタ２２ａ〜２２ｄの噴射量を変える。
【００４２】
さらにＣＰＵ（エンジン制御ユニット）３１内には、後述する自己診断プログラムを格納するメモリ３９が設けられている。このメモリ３９は、ＲＯＭ及び、イグニッションスイッチ２６がオフされているときにも電源供給されてデータを保持するスタンバイＲＡＭ又は不揮発性のＥＥＰＲＯＭとで構成されている。自己診断プログラムは、ＲＯＭ内に格納されている。そして後述するように、スタンバイＲＡＭ又はＥＥＰＲＯＭには、自己診断プログラムによって「ダイアグ故障情報」としての故障情報及び、故障時における車両状態を含む「フリーズ情報」としてのフリーズ・フレーム・データ（以下「ＦＦＤ」と記述する。）が記憶される。
【００４３】
本第１実施例は、メモリ３９のＲＯＭ内に格納された自己診断プログラムに特徴を有するものである。そこで次に、自己診断プログラムについて説明する。
図３は、自己診断プログラムの構造（アーキテクチャ）を概念的に示した説明図である。自己診断プログラムは、オブジェクト指向設計された複数のプログラムで構成される。既に知られるように、オブジェクト指向設計とは、従来のソフトウェアが処理（例えば、燃料噴射という処理）に着目したものに対し、モノを基本単位にモデル化し、そのモノの特性や振る舞い（動作）で処理を記述するものである。この基本単位を「オブジェクト」と称し、オブジェクト指向設計されたプログラムは、このオブジェクトを最小構成単位として記述される。プログラム全体としては、オブジェクトからオブジェクトへの通知（メッセージ）によりオブジェクト間を結合することで一連の処理が実行される。オブジェクトは、データ（属性）とデータに対するメソッド（手続き）とを備え、他のオブジェクトからのメッセージによってメソッドを実行する。なお、本明細書中では、「オブジェクトが・・・する。」というオブジェクトを主体とした表現を用いるが、実際には、ＣＰＵ３１が処理プログラムを実行することで実現されることは言うまでもない。
【００４４】
図３には、本第１実施例を説明するために必要なオブジェクトのみを示した。つまり、本第１実施例における自己診断プログラムは少なくとも、故障検出オブジェクト１００と、故障情報管理オブジェクト２００と、故障情報保存オブジェクト３００と、ＦＦＤ管理オブジェクト４００と、ＦＦＤ保存オブジェクト５００とを備えている。
【００４５】
これらのオブジェクト１００〜５００は、プラットフォーム（以下「ＰＦ」という。）６００上のプログラムであり、ＰＦ６００との間で適宜情報交換を行いながら動作する。
故障検出オブジェクト１００は、エンジン制御ユニット１６に入力された各センサ群などの情報に基づき、自己診断の対象となるダイアグ対象の故障を検出する。この故障検出オブジェクト１００は、故障検出処理毎に用意されている。つまり、ダイアグ対象が異なっている場合でも、故障検出方法が同一であれば、故障検出オブジェクト１００は同一のものとなる。
【００４６】
故障情報管理オブジェクト２００は、各故障検出オブジェクト１００からの正常／異常の通知を受け、故障情報保存通知及びＭＩＬ駆動通知を行う。このＭＩＬ駆動通知はＰＦ６００に対して行われ、これによって、上述した警告灯２５が点灯される。
【００４７】
故障情報保存オブジェクト３００は、故障情報管理オブジェクト２００からの故障情報保存の通知があると、故障情報を保存する。この故障情報保存オブジェクト３００は、予め定められた故障項目毎に用意されている。
また、ＦＦＤ管理オブジェクト４００は、故障情報管理オブジェクト２００からのＦＦＤ保存依頼の通知があると、車両状態をＰＦ６００から取得し、ＦＦＤ保存通知を発行する。
【００４８】
ＦＦＤ保存オブジェクト５００は、ＦＦＤ管理オブジェクト４００からＦＦＤ保存通知が発行されると、ＦＦＤ管理オブジェクト４００が取得した車両状態を含むＦＦＤを記憶する。
各オブジェクト１００〜５００は、上述したように各種の通知（メッセージ）によって結合されて一連の処理を実行する。そこで次に、メッセージシーケンスチャート（以下「ＭＳＣ」という。）を参照して各オブジェクト１００〜５００の結合をさらに詳しく説明する。
【００４９】
図４は、故障情報の保存手順を示すＭＳＣである。
まずＰＦ６００が故障検出オブジェクト１００に診断の開始を通知する。この診断開始の通知は、個々の故障検出オブジェクト１００に対し、それぞれのタイミングで行われる。ＰＦ６００からの診断開始の指示を受けた故障検出オブジェクト１００は、故障検出処理Ｓ１を実行する。この故障検出処理Ｓ１にて、故障情報管理オブジェクト２００への正常又は異常が通知される。
【００５０】
正常又は異常が通知されると、故障情報管理オブジェクト２００は、故障レベル判定処理Ｓ２を実行し、対応する故障情報保存オブジェクト３００へ故障情報保存通知を発行する。したがって、故障情報管理オブジェクト２００が、故障検出オブジェクト１００と故障情報保存オブジェクト３００との対応関係を有している。これについては後述する。
【００５１】
故障情報保存オブジェクト３００は、故障情報保存の通知があると、故障情報記憶処理Ｓ３を実行する。この故障情報記憶処理Ｓ３では、故障レベル判定処理Ｓ２にて決定された故障情報を記憶し、その後、保存終了を通知する。本第１実施例では、故障情報として、一時的な故障を示す「仮異常」、永続的な故障を示す「確定異常」、そしてさらに、故障していない状態を示す「正常」が記憶される。
【００５２】
故障情報管理オブジェクト２００における故障レベル判定処理Ｓ２では、故障情報保存オブジェクト３００から保存終了の通知がなされると、ＦＦＤの保存タイミングであるか否かを判断し、保存タイミングでなければ、正常／異常通知に対する処理の完了を示す通知完了を故障検出オブジェクト１００に対して出力する。
【００５３】
この通知完了出力があると、故障検出オブジェクト１００は、ＰＦ６００に対して終了を通知する。これによって、１つの故障検出オブジェクト１００に係る診断処理が終了する。
上述した故障情報管理オブジェクト２００における故障レベル判定処理Ｓ２で、ＦＦＤの保存タイミングであると判断された場合、図５に示す如くとなる。
【００５４】
すなわち、故障情報保存オブジェクト３００から保存終了が通知された後、故障レベル判定処理Ｓ２では、ＦＦＤ管理オブジェクト４００に対するＦＦＤ保存依頼を通知する。
すると、ＦＦＤ管理オブジェクト４００は、ＦＦＤ保存通知発行処理Ｓ４を実行する。このＦＦＤ保存通知発行処理Ｓ４では、車両状態をＰＦ６００から取得し、ＦＦＤ保存通知を発行する。
【００５５】
これによって、ＦＦＤ保存オブジェクト５００は、ＦＦＤ記憶処理Ｓ５を実行する。ＦＦＤ記憶処理Ｓ５では、ＦＦＤ管理オブジェクト４００にて取得された車両状態を含むＦＦＤを記憶し、その後、保存終了を通知する。この保存終了通知がなされると、ＦＦＤ管理オブジェクト４００は、故障情報管理オブジェクト２００に対し、ＦＦＤ保存依頼に対する依頼完了の通知を行う。
【００５６】
そして、上述したような通知完了が故障情報管理オブジェクト２００によって出力され、故障検出オブジェクト１００がＰＦ６００に対して診断終了を通知することによって、診断処理が終了する。
ＦＦＤの保存タイミングであるか否かは、故障検出オブジェクト１００毎に、詳しくは故障検出内容毎に異なっており、後述するように、異常が確定的になった時点でＦＦＤを保存する場合もあれば、異常と判断された時点でＦＦＤを保存する場合もある。
【００５７】
次に、図６に基づいて、故障検出オブジェクト１００と故障情報保存オブジェクト３００との対応関係を説明する。
故障検出オブジェクト１００が故障検出処理毎に用意されていることは、既に述べた。例えば、図６では、エアフローセンサ１３の故障検出処理に対応させて故障検出オブジェクト１１０が用意され、水温センサ２０の故障検出処理に対応させて故障検出オブジェクト１２０が用意され、同様に、吸気温センサ１４に対応させて故障検出オブジェクト１３０、スロットルセンサ１７に対応させて故障検出オブジェクト１４０が用意されている。すなわち、故障検出オブジェクト１１０〜１４０では、それぞれエアフローセンサ診断、水温センサ診断、吸気温センサ診断、スロットルセンサ診断を行う。ここで４つの故障検出オブジェクト１１０〜１４０を区別するため、以下では適宜、Ａ故障検出オブジェクト１１０、Ｂ故障検出オブジェクト１２０、Ｃ故障検出オブジェクト１３０及びＤ故障検出オブジェクト１４０と記述する。
【００５８】
このとき、Ａ〜Ｄの各故障検出オブジェクト１１０〜１４０にはそれぞれユニークなダイアグＩＤが割り振られており、Ａ〜Ｄの各故障検出オブジェクト１１０〜１４０は、故障情報管理オブジェクト２００に対し、正常／異常の通知と共に、このダイアグＩＤを出力する。
【００５９】
一方、故障情報保存オブジェクト３００は、上述したように故障項目毎に用意されている。本第１実施例では、故障情報保存名がこの故障項目に１対１に対応している。すなわち、故障情報保存オブジェクト３００には、それぞれユニークな故障情報保存名が付けられている。例えば図６で言えば、故障情報保存オブジェクト３１０には故障情報保存名として「エアフローシート」が付けられ、故障情報保存オブジェクト３２０には故障情報保存名として「水温シート」が付けられている。同様に、故障情報保存オブジェクト３３０には「吸気温シート」、故障情報保存オブジェクト３４０には「スロットルＨｉｇｈシート」、故障情報保存オブジェクト３５０には「スロットルＬｏｗシート」という故障情報保存名が付けられている。なお、故障検出オブジェクト１００と同様に、５つの故障情報保存オブジェクト３１０〜３５０を区別するため、以下では適宜、Ｅ故障情報保存オブジェクト３１０、Ｆ故障情報保存オブジェクト３２０、Ｇ故障情報保存オブジェクト３３０、Ｈ故障情報保存オブジェクト３４０及びＩ故障情報保存オブジェクト３５０と記述する。
【００６０】
そして、故障情報管理オブジェクト２００は、故障検出オブジェクト１００のダイアグＩＤと、故障情報保存オブジェクト３００の故障情報保存名との対応関係を有している。図６では、ダイアグＩＤ「１」に対して故障情報保存名「エアフローシート」が対応し、同様に、「２」に対して「水温シート」が、「３」に対して「吸気温シート」が、「４」に対して「スロットルＨｉｇｈシート」が、「５」に対して「スロットルＬｏｗシート」が対応している様子を示した。
【００６１】
これによって、故障情報管理オブジェクト２００は、例えばＡ故障検出オブジェクト１１０からの正常／異常通知があると、共に通知されるダイアグＩＤ「１」に基づき、対応する故障情報保存オブジェクト３００がＥ故障情報保存オブジェクト３１０であると判断することができる。したがって、Ｅ故障情報保存オブジェクト３１０に故障情報保存の通知をしたり、あるいは、Ｅ故障情報保存オブジェクト３１０に記憶された故障情報を参照したりすることができる。
【００６２】
また、Ｄ故障検出オブジェクト１４０における故障検出処理では、正常／異常通知と共にダイアグＩＤ「４」又はダイアグＩＤ「５」を出力する。このとき、ダイアグＩＤ「４」が出力されれば、対応する故障情報保存オブジェクト３００がＨ故障情報保存オブジェクト３４０と判断される。一方、ダイアグＩＤ「５」が出力されれば、対応する故障情報保存オブジェクト３００がＩ故障情報保存オブジェクト３５０と判断される。このようにして、故障検出処理に対応して設けられるＤ故障検出オブジェクト１４０と、故障項目に対応して設けられるＨ及びＩの故障情報保存オブジェクト３４０，３５０との対応付けもなされる。
【００６３】
次に、各オブジェクト１００〜５００でそれぞれ実行される、故障検出処理Ｓ１、故障レベル判定処理Ｓ２、故障情報記憶処理Ｓ３、ＦＦＤ保存発行処理Ｓ４及びＦＦＤ記憶処理Ｓ５を具体的に説明し、各オブジェクト１００〜５００の動作に対する理解を深める。
【００６４】
まず故障検出処理Ｓ１について、図７及び図８に基づき説明する。
図７は、Ｂ故障検出オブジェクト１２０にて実行される故障検出処理Ｓ１を示すフローチャートである。この故障検出処理Ｓ１は、ＰＦ６００から診断開始の通知があると実行される。
【００６５】
最初のステップ（以下、ステップを単に記号Ｓで示す。）１０００において、水温センサ値を読み込む。ここでいう水温センサ値は、水温センサ２０からの検出信号Ｔｈｗの電圧値である。
続くＳ１０１０では、水温センサ値が所定範囲内か否かを判断する。例えば水温センサ値が、０．１Ｖ〜４．９Ｖの範囲で得られる構成では、０．１Ｖを下回っていたり、４．９Ｖを上回っていたりする場合、断線などによって水温センサ値が固着していることが考えられる。ここで所定範囲内であると判断された場合（Ｓ１０１０：ＹＥＳ）、Ｓ１０２０にて正常通知を故障情報管理オブジェクト２００へ発行し、その後、故障情報管理オブジェクト２００からの通知完了出力を待って、Ｓ１０４０へ移行する。一方、所定範囲内でないと判断された場合（Ｓ１０１０：ＮＯ）、Ｓ１０３０にて異常通知を故障情報管理オブジェクト２００へ発行し、その後、故障情報管理オブジェクト２００からの通知完了出力を待って、Ｓ１０４０へ移行する。
【００６６】
Ｓ１０４０ではＰＦ６００に対する終了通知を行い、その後、本故障検出処理Ｓ１を終了する。
なお、Ｓ１０２０及びＳ１０３０では、正常／異常通知の発行と共にダイアグＩＤ「２」を出力する。これによって、故障情報管理オブジェクト２００では、対応する故障情報保存オブジェクト３００であるＦ故障情報保存オブジェクト３２０を判断できることになる（図６参照）。
【００６７】
一方、図８（ａ）は、Ｄ故障検出オブジェクト１４０にて実行される故障検出処理Ｓ１を示すフローチャートである。この故障検出処理Ｓ１も、ＰＦ６００から診断開始の通知があると実行される。上述した水温センサ２０の場合と同様に、例えばスロットルセンサ値が、０．１Ｖ〜４．９Ｖの範囲で得られる構成では、０．１Ｖを下回っていたり、４．９Ｖを上回っていたりする場合、断線などによってスロットルセンサ値が固着していることが考えられる。ただし、スロットルセンサ値が４．９Ｖを上回っている場合と０．１Ｖを下回っている場合とでは、故障原因が異なる可能性がある。そこでここでは、４．９Ｖを上回っている場合をＨｉｇｈ故障とし、０．１Ｖを下回っている場合をＬｏｗ故障として区別する。図８（ｂ）に示す如くである。
【００６８】
図８（ａ）のＳ１１００において、スロットルセンサ値を読み込む。ここでいうスロットルセンサ値は、スロットルセンサ１７からの検出信号ＳＴＯの電圧値である。
続くＳ１１１０では、スロットルセンサ値に基づき、Ｈｉｇｈ故障であるか否かを判断する。ここでＨｉｇｈ故障であると判断された場合（Ｓ１１１０：ＹＥＳ）、すなわち４．９Ｖを上回っていた場合には、Ｓ１１２０にてＨｉｇｈ故障異常通知を発行する。一方、Ｈｉｇｈ故障でないと判断された場合（Ｓ１１１０：ＮＯ）、Ｓ１１３０にてＨｉｇｈ故障正常通知を発行する。Ｓ１１２０及びＳ１１３０においては、ダイアグＩＤ「４」が出力される。Ｓ１１２０又はＳ１１３０の処理終了後、故障情報管理オブジェクト２００からの通知完了出力を待って、Ｓ１１４０へ移行する。
【００６９】
Ｓ１１４０では、Ｌｏｗ故障であるか否かを判断する。ここでＬｏｗ故障であると判断された場合（Ｓ１１４０：ＹＥＳ）、すなわち０．１Ｖを下回っていた場合には、Ｓ１１５０にてＬｏｗ故障異常通知を発行する。一方、Ｌｏｗ故障でないと判断された場合（Ｓ１１４０：ＮＯ）、Ｓ１１６０にてＬｏｗ故障正常通知を発行する。Ｓ１１５０及びＳ１１６０においては、ダイアグＩＤ「５」が出力される。Ｓ１１５０又はＳ１１６０の処理終了後、故障情報管理オブジェクト２００からの通知完了出力を待って、Ｓ１１７０へ移行する。
【００７０】
Ｓ１１７０ではＰＦ６００への終了通知を行い、その後、本故障検出処理を終了する。
この場合のＭＳＣは、図９に示す如くとなる。
Ｄ故障検出オブジェクト１４０からＨｉｇｈ故障に関する正常／異常の通知があると（Ｓ１１２０，Ｓ１１３０）、出力されるダイアグＩＤ「４」に基づき、故障情報管理オブジェクト２００は、Ｈ故障情報保存オブジェクト３４０へ故障情報保存を通知する。その後、故障情報管理オブジェクト２００からの通知完了出力を待って、Ｌｏｗ故障に関する正常／異常通知を行い（Ｓ１１５０，Ｓ１１６０）、ダイアグＩＤ「５」を出力する。これによって、故障情報管理オブジェクト２００は、Ｉ故障情報保存オブジェクト３５０へ故障情報保存を通知する。
【００７１】
続いて、図１０に基づき、故障レベル判定処理Ｓ２について説明する。
図１０は、故障情報管理オブジェクト２００にて実行される故障レベル判定処理Ｓ２を示すフローチャートである。この故障レベル判定処理Ｓ２は、故障検出オブジェクト１００からの正常／異常の通知があると実行される。
【００７２】
最初のＳ２０００において、正常通知か否かを判断する。ここで正常通知であると判断された場合（Ｓ２０００：ＹＥＳ）、Ｓ２０１０へ移行する。一方、正常通知でないと判断された場合（Ｓ２０００：ＮＯ）、すなわち異常通知である場合には、Ｓ２０６０へ移行する。
【００７３】
Ｓ２０１０では、現在の故障情報が「正常」であるか否かを判断する。この判断は、対応する故障情報保存オブジェクト３００に記憶されている故障情報を参照することによってなされる。以下において、現在の故障情報が「仮異常」であるか又は「確定異常」であるかの判断を行う場合も同様である。ここで現在の故障情報が「正常」であると判断された場合（Ｓ２０１０：ＹＥＳ）、すなわち、正常状態のときに正常通知がなされた場合には、Ｓ２０３０へ移行する。一方、現在の故障情報が「正常」でないと判断された場合（Ｓ２０１０：ＮＯ）、すなわち異常状態のときに正常通知がなされた場合には、Ｓ２０２０へ移行する。
【００７４】
Ｓ２０２０では、正常復帰条件が成立したか否かを判断する。正常復帰とは、一度「異常」となった後、例えば２０トリップや４０トリップといった所定期間に連続して正常通知がされた場合、故障情報を「正常」に復帰させることをいう。なお、１トリップはイグニッションキーのオンからオフまでの期間である。ここで正常復帰条件が成立したと判断された場合（Ｓ２０２０：ＹＥＳ）、Ｓ２０３０へ移行する。一方、正常復帰条件が成立しない場合は（Ｓ２０２０：ＮＯ）、Ｓ２０５０へ移行する。
【００７５】
Ｓ２０３０では、故障情報を「正常」とする。そして続くＳ２０４０にて、故障情報保存通知を発行する。この通知は、上述したように故障情報保存オブジェクト３００に対して発行される。そして、故障情報保存オブジェクト３００からの保存終了通知を待って、故障検出オブジェクト１００への通知完了の出力を行い（Ｓ２１７０）、本故障レベル判定処理Ｓ２を終了する。
【００７６】
上述したＳ２０２０で正常復帰条件が成立しなかった場合に移行するＳ２０５０では、現在の故障情報が「仮異常」であるか否かを判断する。ここで現在の故障情報が「仮異常」であると判断された場合（Ｓ２０５０：ＹＥＳ）、Ｓ２０８０へ移行する。一方、現在の故障情報が「仮異常」でない場合（Ｓ２０５０：ＮＯ）、すなわち「確定異常」である場合には、Ｓ２１２０へ移行する。なお、Ｓ２０８０及びＳ２１２０の処理については後述する。
【００７７】
最初のＳ２０００において否定判断された場合に移行するＳ２０６０では、現在の故障情報が「正常」であるか否かを判断する。ここで現在の故障情報が「正常」であると判断された場合（Ｓ２０６０：ＹＥＳ）、すなわち正常状態のときに異常通知がなされた場合には、Ｓ２０７０へ移行する。一方、現在の故障情報が「正常」でないと判断された場合（Ｓ２０６０：ＮＯ）、すなわち異常状態のときに異常通知がなされた場合には、Ｓ２１００へ移行する。
【００７８】
Ｓ２０７０では、仮異常条件が成立したか否かを判断する。仮異常とは、上述したように、一時的な異常の可能性が高い状態を示す。ここで仮異常条件が成立したと判断された場合（Ｓ２０７０）、Ｓ２０８０へ移行する。一方、仮異常条件が成立しない場合（Ｓ２０７０）、上述したＳ２０３０からの処理を実行する。この場合は、故障情報は「正常」となる。
【００７９】
Ｓ２０８０では、故障情報を「仮異常」とする。そして続くＳ２０９０にて、故障情報保存オブジェクト３００へ故障情報保存通知を発行する。その後、故障情報保存オブジェクト３００からの保存終了通知を待って、Ｓ２１４０へ移行する。
【００８０】
Ｓ２０６０において否定判断された場合に移行するＳ２１００では、現在の故障情報が「仮異常」であるか否かを判断する。ここで現在の故障情報が「仮異常」であると判断された場合（Ｓ２１００：ＹＥＳ）、すなわち仮異常状態のときに異常通知がなされた場合には、Ｓ２１１０へ移行する。一方、現在の故障情報が「仮異常」でない場合（Ｓ２１００：ＮＯ）、すなわち確定異常であるときに異常通知がなされた場合には、Ｓ２１２０へ移行する。
【００８１】
Ｓ２１１０では、確定異常条件が成立したか否かを判断する。確定異常とは、上述したように、永続的な異常の可能性が高い状態を示す。ここで確定異常条件が成立したと判断された場合（Ｓ２１１０：ＹＥＳ）、Ｓ２１２０へ移行する。一方、確定異常条件が成立しない場合（Ｓ２１１０：ＮＯ）、上述したＳ２０８０へ移行する。この場合は、故障情報は「仮異常」となる。
【００８２】
Ｓ２１２０では、故障情報を「確定異常」とする。そして続くＳ２１３０にて、故障情報保存オブジェクト３００へ故障情報保存通知を発行する。その後、故障情報保存オブジェクト３００からの保存終了通知を待って、Ｓ２１４０へ移行する。
【００８３】
Ｓ２０９０又はＳ２１３０から移行するＳ２１４０では、ＭＩＬ駆動通知を行う。この通知は、ＰＦ６００に対して発行される。既に述べたが、これによってＰＦ６００は出力回路３７を介して警告灯２５の点灯を行う。
続くＳ２１５０では、ＦＦＤの保存条件が成立したか否かを判断する。ＦＦＤデータの保存条件成立は、故障検出オブジェクト１００からのダイアグＩＤに基づいて判断する。例えば、ダイアグＩＤが「２」である場合（図６参照）、すなわち、水温センサ診断を行うＢ故障検出オブジェクト１２０から異常通知があった場合には、仮異常となった時点でＦＦＤ保存条件が成立したと判断される。また例えば、ダイアグＩＤが「３」である場合（図６参照）、すなわち、吸気温センサ診断を行うＣ故障検出オブジェクト１３０から異常通知があった場合には、確定異常となった時点でＦＦＤ保存条件が成立したと判断される。ここでＦＦＤ保存条件が成立したと判断された場合（Ｓ２１５０：ＹＥＳ）、Ｓ２１６０へ移行する。一方、ＦＦＤ保存条件が成立していないと判断された場合（Ｓ２１５０：ＮＯ）、Ｓ２１８０へ移行する。
【００８４】
Ｓ２１６０では、ＦＦＤ優先度が以前に記憶したものよりも高いか否かを判断する。
ここでＦＦＤ優先度について説明する。故障情報が故障項目毎に用意された故障情報保存オブジェクト３００に保存されるのに対し、ＦＦＤは、１つのＦＦＤ保存オブジェクト５００に保存される。したがって、２以上の故障項目に対するＦＦＤを保存することはできない。そのため、各故障項目に対応するＦＦＤ優先度が、各故障情報保存オブジェクト３００毎に設定されている。図６で言えば、Ｅ故障情報保存オブジェクト３１０には、ＦＦＤ優先度が「３」として設定されている。同様に、Ｆ〜Ｉの故障情報保存オブジェクト３２０〜３５０にはそれぞれ、「２」，「１」，「３」，「２」という具合に、ＦＦＤ優先度が設定されている。本第１実施例では、この数字が小さくなるほど優先度が高い。このＦＦＤ優先度が「優先度情報」に相当する。
【００８５】
したがって、Ｓ２１６０では、故障情報保存オブジェクト３００のＦＦＤ優先度を参照し、ＦＦＤ優先度の数字が以前記憶したＦＦＤに対応するＦＦＤ優先度よりも小さい場合に肯定判断される。ここでＦＦＤ優先度が高いと判断された場合（Ｓ２１６０：ＹＥＳ）、ＦＦＤ管理オブジェクト４００へＦＦＤ保存依頼通知を発行し（Ｓ２１７０）、ＦＦＤ管理オブジェクト４００からの依頼完了の通知を待って、故障検出オブジェクト１００への通知完了出力を行い（Ｓ２１８０）、本故障レベル判定処理Ｓ２を終了する。一方、ＦＦＤ優先度が高くない、すなわち同じかあるいは低い場合には、Ｓ２１７０の処理を実行せず、故障検出オブジェクト１００への通知完了出力を行い（Ｓ２１８０）、本故障レベル判定処理Ｓ２を終了する。
【００８６】
続いて、図１１に基づき、故障情報記憶処理Ｓ３、ＦＦＤ保存発行処理Ｓ４、及びＦＦＤ記憶処理Ｓ５を説明する。
図１１（ａ）は、故障情報保存オブジェクト３００にて実行される故障情報記憶処理Ｓ３を示すフローチャートである。この故障情報記憶処理Ｓ３は、故障情報管理オブジェクト２００からの故障情報保存通知があると実行される。
【００８７】
処理が開始されると、故障情報を記憶する（Ｓ３０００）。そして、故障情報管理オブジェクト２００に対する保存終了通知を行い（Ｓ３０１０）、その後、本故障情報記憶処理を終了する。
故障情報は、故障情報保存オブジェクト３００のデータとしてメモリ３９に記憶される。なお、故障情報は故障レベル判定処理Ｓ２にて設定される（図１０中のＳ２０３０，Ｓ２０８０，Ｓ２１２０）。このとき故障情報が、例えば予め定められたグローバル変数に代入される構成であれば、このグローバル変数から故障情報を読み出して記憶することが考えられる。また、故障情報が故障情報管理オブジェクト２００の内部データ（ローカル変数）となっていれば、故障情報管理オブジェクト２００内のデータを参照して、詳しくは故障情報管理オブジェクト２００にデータ参照を要求するメッセージを出力することで参照して、故障情報を記憶することが考えられる。さらに、故障情報管理オブジェクト２００が故障情報保存通知と共に故障情報を出力するようにし、出力された故障情報を記憶するようにしてもよい。
【００８８】
図１１（ｂ）は、ＦＦＤ管理オブジェクト４００にて実行されるＦＦＤ保存通知発行処理Ｓ４を示すフローチャートである。このＦＦＤ保存通知発行処理Ｓ４は、故障情報管理オブジェクト２００からのＦＦＤ保存依頼通知があると実行される。
【００８９】
処理が開始されると、ＦＦＤの一部となる車両状態を取得する（Ｓ４０００）。そして、ＦＦＤ保存オブジェクト５００へＦＦＤ保存通知を発行し（Ｓ４０１０）、ＦＦＤ保存オブジェクト５００からの保存終了通知を待って、故障情報管理オブジェクト２００に対する依頼完了通知を行う（Ｓ４０２０）。その後、本ＦＦＤ保存通知発行処理Ｓ４を終了する。
【００９０】
このとき、ＦＦＤ保存オブジェクトにて実行されるＦＦＤ記憶処理Ｓ５が、図１１（ｃ）に示すものである。
ここでは、まずＦＦＤを記憶する（Ｓ５０００）。ＦＦＤは、故障時における車両状態を含むデータである。そして、ＦＦＤ管理オブジェクト４００への保存終了通知を行い（Ｓ５０１０）、その後、ＦＦＤ記憶処理Ｓ５を終了する。
【００９１】
なお、本第１実施例では、ＦＦＤを図１２に示すデータ群としている。すなわち、ＰＩＤサポートデータ、故障コード、空燃比Ｆ／Ｂ制御状態、負荷値、水温、空燃比Ｆ／Ｂ補正係数、空燃比学習補正係数、吸気管絶対圧、エンジン回転数及び車速からなっている。ＰＩＤサポートデータとは、どのＦＦＤを使っているかをまとめた識別子であり、また、故障コードは、図６に示す故障情報保存名となっている。空燃比Ｆ／Ｂ制御状態は、空燃比Ｆ／Ｂ制御のオン／オフなどの情報であり、負荷値とは、エンジンに係る負荷を示す値である。このようなＦＦＤの項目は、法規によって、また、メーカ毎の仕様によって定められるものであり、これらには限定されない。このようなＦＦＤは、修理などの際に故障原因を究明する手助けとなる。
【００９２】
ＦＦＤは、上述したＦＦＤ優先度に従い、ＦＦＤ優先度の高い故障項目に対応するものが優先的に記憶される。つまり、故障情報管理オブジェクト２００からのＦＦＤ保存依頼の通知があった場合（図１０中のＳ２１７０）、既にＦＦＤが保存されているときには、上書きされることになる（図１１（ｃ）中のＳ５０００）。
【００９３】
また、上述した故障情報と同様に、ＦＦＤ管理オブジェクト４００にて取得される車両状態が、例えば予め定められたグローバル変数に代入される構成であれば、ＦＦＤ保存オブジェクト５００は、このグローバル変数から車両状態を読み出してＦＦＤを記憶する。また、取得した車両状態がＦＦＤ管理オブジェクト４００の内部データ（ローカル変数）となっていれば、ＦＦＤ保存オブジェクト５００は、ＦＦＤ管理オブジェクト４００内のデータを参照してＦＦＤを記憶する。さらに、ＦＦＤ管理オブジェクト４００がＦＦＤ保存通知と共に車両状態を出力する場合、ＦＦＤ保存オブジェクト５００は、出力された車両状態を用いてＦＦＤを記憶する。
【００９４】
以上のように各オブジェクト１００〜５００を構成したことによる効果を次に述べる。
本第１実施例では、自己診断プログラムに、故障検出処理Ｓ１を実行する故障検出オブジェクト１００と、故障情報記憶処理Ｓ３を実行して故障情報を記憶する故障情報保存オブジェクト３００とを備える構成とした。これによって、ダイアグ対象の構成が変わった場合には故障検出オブジェクト１００だけを変更し、故障情報保存オブジェクト３００についてはそのまま再利用することができる。また、メーカからの要求などにより故障項目の増減が生じた場合には、故障情報保存オブジェクト３００だけを変更し、故障検出オブジェクト１００についてはそのまま再利用することができる。すなわち、ダイアグ対象の構成のみに変更が生じた場合や故障情報のみに増減が生じた場合における自己診断プログラムの再利用性が図られる。
【００９５】
また、従来はダイアグ対象毎にオブジェクト化がなされていたため、複数のオブジェクトで故障検出処理が重複することがあった。これに対して、本第１実施例では、故障検出処理毎に故障検出オブジェクト１００を用意したため、ダイアグ対象が異なっている場合であっても故障検出処理が共通であれば、それは一つの故障検出オブジェクト１００として実現される。したがって、自己診断プログラムがコンパクトになる。
【００９６】
さらに、従来の構成では同一オブジェクト内に故障情報の記述があるため、故障検出処理だけを変更しようとしても故障情報との関連を考慮する必要が生じ、自己診断プログラムの作成工数を増大させてしまっていた。これに対しても、本第１実施例では、故障情報保存オブジェクト３００が故障情報を記憶するため、故障検出処理を変更する場合に、故障情報保存オブジェクト３００については何等手直しする必要がなく、故障情報との関連を考慮する必要がない。その結果、自己診断プログラムの作成工数を削減することができる。
【００９７】
また、本第１実施例では、故障情報管理オブジェクト２００が、故障検出オブジェクト１００のダイアグＩＤと、故障情報保存オブジェクト３００の故障情報保存名との対応関係を有している（図６参照）。これによって、故障情報管理オブジェクト２００が、故障検出オブジェクト１００からの正常／異常通知があると、共に通知されるダイアグＩＤに基づき、対応する故障情報保存オブジェクト３００を判断する。つまり、故障検出オブジェクト１００は故障情報保存オブジェクト３００との対応を、また、故障情報保存オブジェクト３００は故障検出オブジェクト１００との対応を何等意識する必要がない。例えば図６においてＡ故障検出オブジェクト１１０を交換するような場合、新たな故障検出オブジェクト１００のダイアグＩＤを「１」とすればよく、対応するＥ故障情報保存オブジェクト３１０には何等手を加える必要がない。すなわち、故障情報管理オブジェクト２００を設けたことによって、故障検出オブジェクト１００及び故障情報保存オブジェクト３００の再利用が容易になる。
【００９８】
そして、各故障検出オブジェクト１００に共通する故障レベル判定処理Ｓ２を、この故障情報管理オブジェクト２００が実行するようにした。これは、自己診断プログラムのさらなるコンパクト化に寄与している。
さらに、この故障レベル判定処理Ｓ２において、ＦＦＤを保存するか否かを判断しており（図１０中のＳ２１５０，Ｓ２１６０）、故障情報管理オブジェクト２００からのＦＦＤ保存依頼の通知に基づき、ＦＦＤ管理オブジェクト４００がＦＦＤの一部となる車両状態を取得し（図１１（ｂ）中のＳ４０００）、ＦＦＤ管理オブジェクト４００からの通知によりＦＦＤ保存オブジェクト５００がＦＦＤを記憶する（図１１（ｃ）中のＳ５０００）。このように故障情報に直接的に依存しないＦＦＤ管理オブジェクト４００及びＦＦＤ保存オブジェクト５００を他のオブジェクト１００〜３００とは別個に用意することによって、自己診断プログラムの再利用性を向上させることができる。
【００９９】
具体的には、故障項目毎に記憶される「ダイアグ故障情報」としての故障情報にのみ変更があった場合には、故障情報保存オブジェクト３００を変更することで対応でき、ＦＦＤ保存オブジェクト５００はそのまま再利用することができる。逆に、付帯情報として記憶される「フリーズ情報」としてのＦＦＤにのみ変更があった場合には、ＦＦＤ保存オブジェクト５００を変更することで対応でき、故障情報保存オブジェクト３００はそのまま再利用することができる。
【０１００】
また、ＦＦＤは、ＦＦＤ優先度に基づいて更新される（図６参照）。これによって、より有用なＦＦＤを記憶することができる。このＦＦＤ優先度は、故障情報保存オブジェクト３００に記憶するようにした。その結果、故障項目の変更に伴う変更部分がまとまっており、その変更作業が簡単になる。また、故障項目に依存するＦＦＤ優先度を故障情報保存オブジェクト３００に記憶しているため、故障項目の変更があっても、ＦＦＤ管理オブジェクト４００を変更する必要がない。
【０１０１】
なお、上述した故障レベル判定処理Ｓ２は図１０に示した１つのパターンであるとしたが、例えば故障項目によって数パターンある場合も考えられる。このときは、故障レベル判定処理の最初に例えばダイアグＩＤによる分岐処理を設けて、それぞれのパターンで故障のレベルを判定するようにすればよい。
【０１０２】
なお、本第１実施例の故障検出オブジェクト１００が「故障検出オブジェクト」に相当し、故障情報管理オブジェクト２００が「故障情報管理オブジェクト」に相当し、故障情報保存オブジェクト３００が「故障情報保存オブジェクト」に相当する。また、ＦＦＤ管理オブジェクト４００が「故障時状態管理オブジェクト」に相当し、ＦＦＤ保存オブジェクト５００が「故障時状態保存オブジェクト」に相当する。
［第２実施例］
上記第１実施例においては、１つのＦＦＤ保存オブジェクト５００を用意しており、ＦＦＤ優先度を故障情報管理オブジェクト２００が判断して（図１０中のＳ２１６０）、ＦＦＤ保存依頼をＦＦＤ管理オブジェクト４００へ通知していた（Ｓ２１７０）。
【０１０３】
ただし、故障項目に対し、要求されるＦＦＤが変わることもある。この場合、要求されるＦＦＤに合わせ、ＦＦＤ管理オブジェクト４００及びＦＦＤ保存オブジェクト５００をセットで用意して対応することが考えられる。このようにしたときは、故障情報管理オブジェクト２００が、対応するＦＦＤ管理オブジェクト４００を判断し、該当するＦＦＤ管理オブジェクト４００へＦＦＤ保存依頼を通知する。
【０１０４】
しかし、ＦＦＤの変更があった場合に、故障情報管理オブジェクト２００の変更を極力抑えるためには、すなわちＦＦＤ保存機能を実現するプログラムの独立性を高めるためには、複数のＦＦＤ保存オブジェクト５００をＦＦＤに合わせて用意し、ＦＦＤ管理オブジェクト４００が、対応するＦＦＤ保存オブジェクト５００を判断するようにすることが望ましい。
【０１０５】
そこで、本第２実施例では、複数のＦＦＤ保存オブジェクト５００が存在する場合を例示する。
この場合の自己診断プログラムの構造（アーキテクチャ）を概念的に示すのが図１３の説明図である。ここでは、ＦＦＤ保存オブジェクト５００が複数用意されているため、ＦＦＤ管理オブジェクト４００は、故障情報管理オブジェクト２００からのＦＦＤ保存依頼の通知があると、対応するＦＦＤ保存オブジェクト５００を判断し、ＦＦＤ保存の通知を行う。
【０１０６】
具体的には、故障管理オブジェクト２００が実行する故障レベル判定処理Ｓ２及びＦＦＤ管理オブジェクト４００が実行するＦＦＤ保存通知発行処理Ｓ４が、上記第１実施例と異なってくる。本第２実施例におけるＭＳＣを、図１４に示した。ここでは、故障情報管理オブジェクト２００による故障レベル判定処理をＳ２’とし、ＦＦＤ管理オブジェクト４００による保存通知発行処理をＳ４’として上記第１実施例と区別した。
【０１０７】
上記第１実施例では、１つのＦＦＤ保存オブジェクト５００を備える構成であったため、ＦＦＤ優先度だけが故障情報保存オブジェクト３００に記憶されていた。これに対して本第２実施例では、各故障項目とＦＦＤ保存オブジェクト５００とを対応付けるための対応関係も、故障情報保存オブジェクト３００に記憶しておく。
【０１０８】
例えば図１５に示す如くである。ここではＥ故障情報保存オブジェクト３１０に記憶される故障情報、すなわち故障情報保存名「エアフローシート」に対応するＦＦＤが、シートβに記憶されることが示されている。同様に、故障情報保存名「水温シート」、「吸気温シート」、「スロットルＨｉｇｈシート」及び「スロットルＬｏｗシート」に対応するＦＦＤがそれぞれ、シートα又はシートβに記憶されることが示されている。
【０１０９】
ＦＦＤは上述したように、法規によって、また、メーカ毎の仕様によって定められるものである。本第２実施例では、シートαに図１２に示すデータ群、すなわちＰＩＤサポートデータ、故障コード、空燃比Ｆ／Ｂ制御状態、負荷値、水温、空燃比Ｆ／Ｂ補正係数、空燃比学習補正係数、吸気管絶対圧、エンジン回転数及び車速が記憶され、一方、シートβに、これらのデータ群にさらに他の情報を付加したデータ群が記憶される（図１６参照）。
【０１１０】
故障情報管理オブジェクト２００は、故障レベル判定処理Ｓ２’において、図１５に示すように、ＦＦＤ保存依頼と共に、故障情報に対応するＦＦＤ優先度及びシートの情報をＦＦＤ管理オブジェクト４００へ通知する。
一方、上述したシート毎に、ＦＦＤ保存オブジェクト５００が用意されている。図１７（ａ）には、シートαに対応するＦＦＤ保存オブジェクト（以下「αＦＦＤ保存オブジェクト」という。）５１０と、シートβに対応するＦＦＤ保存オブジェクト（以下「βＦＦＤ保存オブジェクト」という。）５２０とを示した。ＦＦＤ管理オブジェクト４００は、シートの情報からＦＦＤ保存オブジェクト５００を特定する。また、ＦＦＤ保存オブジェクト５００に記憶されているＦＦＤのＦＦＤ優先度を管理している。
【０１１１】
このような構成を前提として、上記第１実施例と異なる、故障レベル判定処理Ｓ２’及びＦＦＤ保存通知発行処理Ｓ４’を次に説明する。
図１８は、故障レベル判定処理Ｓ２’を示すフローチャートである。ここでＳ２２００〜Ｓ２３４０は、上記第１実施例の故障レベル判定処理Ｓ２中のＳ２０００〜Ｓ２１４０（図１０参照）と同様であるため、説明は割愛する。
【０１１２】
故障情報が「仮異常」又は「確定異常」とされ（Ｓ２２８０，Ｓ２３２０）、故障情報保存通知（Ｓ２２９０，Ｓ２３３０）がなされ、さらにＭＩＬ駆動通知（Ｓ２３４０）が行われた後に移行するＳ２３５０では、ＦＦＤの保存条件が成立したか否かを判断する。ＦＦＤデータの保存条件成立は、上記第１実施例と同様に、故障検出オブジェクト１００からのダイアグＩＤに基づいて判断する。ここでＦＦＤ保存条件が成立したと判断された場合（Ｓ２３５０：ＹＥＳ）、Ｓ２３６０へ移行する。一方、ＦＦＤ保存条件が成立していないと判断された場合（Ｓ２３５０：ＮＯ）、Ｓ２３６０の処理を実行せずに、Ｓ２３９０へ移行する。
【０１１３】
Ｓ２３６０ではＦＦＤ管理オブジェクト４００へＦＦＤ保存依頼通知を発行し、その後、Ｓ２３９０において、ＦＦＤ管理オブジェクト４００からの依頼完了の通知を待って、故障検出オブジェクト１００への通知完了出力を行い、本故障レベル判定処理Ｓ２’を終了する。Ｓ２３６０におけるＦＦＤ保存依頼通知には、上述したように、ＦＦＤ優先度及びシートの情報が付加される。
【０１１４】
一方、上記第１実施例ではＦＦＤの保存依頼のみを故障レベル判定処理Ｓ２で行っていたが、本第２実施例では、正常復帰した場合には、ＦＦＤを無効にするためのＦＦＤの無効依頼を行う。
つまり、故障情報が「正常」とされ（Ｓ２２３０）、故障情報保存通知（Ｓ２２４０）がなされた後に移行するＳ２３７０では、ＦＦＤの無効条件が成立したか否かを判断する。ＦＦＤの無効条件成立も、保存条件と同様に、故障検出オブジェクト１００からのダイアグＩＤに基づいて判断する。ここでＦＦＤ無効条件が成立したと判断された場合（Ｓ２３７０：ＹＥＳ）、Ｓ２３８０にてＦＦＤ無効依頼通知を発行し、その後、Ｓ２３９０へ移行する。一方、ＦＦＤ無効条件が成立していないと判断された場合（Ｓ２３７０：ＮＯ）、Ｓ２３８０の処理を実行せず、Ｓ２３９０へ移行する。
【０１１５】
Ｓ２３９０では、ＦＦＤ管理オブジェクト４００からの依頼完了の通知を待って、故障検出オブジェクト１００への通知完了出力を行い、本故障レベル判定処理Ｓ２’を終了する。
続けてＦＦＤ保存通知発行処理Ｓ４’を、図１９のフローチャートに基づいて説明する。
【０１１６】
まず最初のＳ４１００では、保存依頼か否かを判断する。ここで保存依頼であると判断された場合（Ｓ４１００：ＹＥＳ）、Ｓ４１１０へ移行する。一方、保存依頼でないと判断された場合（Ｓ４１００：ＮＯ）、すなわち無効依頼であった場合には、Ｓ４１６０へ移行する。
【０１１７】
Ｓ４１１０では、ＦＦＤの一部となる車両状態を取得する。続くＳ４１２０では、シートを決定する。この処理は、保存先のＦＦＤ保存オブジェクト５００を判断するものである。ここでは、αＦＦＤ保存オブジェクト５１０又はβＦＦＤ保存オブジェクト５２０のいずれか一方が、該当するＦＦＤ保存オブジェクト５００として決定される。
【０１１８】
そして、Ｓ４１３０では、取得したＦＦＤ優先度が、該当するＦＦＤ保存オブジェクト５００に既に記憶されているＦＦＤのＦＦＤ優先度よりも高いか否かを判断する。ここで優先度が高いと判断された場合（Ｓ４１３０：ＹＥＳ）、Ｓ４１４０にて該当するＦＦＤ保存オブジェクト５００に対してＦＦＤ保存を発行し、Ｓ４１５０へ移行する。一方、優先度が高くないと判断された場合（Ｓ４１３０：ＮＯ）、Ｓ４１４０の処理を実行せずに、Ｓ４１５０へ移行する。
【０１１９】
上述したＳ４１００にて否定判断された場合に移行するＳ４１６０では、上述したＳ４１２０と同様に、シートを決定する。この処理は、ＦＦＤを無効にするＦＦＤ保存オブジェクト５００を判断するものである。ここでαＦＦＤ保存オブジェクト５１０又はβＦＦＤ保存オブジェクト５２０のいずれか一方が、該当するＦＦＤ保存オブジェクト５００として決定される。続くＳ４１７０では、該当するＦＦＤ保存オブジェクト５００に対してＦＦＤ無効を発行し、Ｓ４１５０へ移行する。なお、ＦＦＤ無効の通知がなされた場合、ＦＦＤ保存オブジェクト５００は、記憶されているＦＦＤを抹消することが考えられる。また、無効フラグをセットするなどして、マスクをかけることが考えられる。後者のようにすれば、無効になった後でも、必要に応じてＦＦＤを参照することができる。
【０１２０】
Ｓ４１５０では、ＦＦＤ保存オブジェクト５００からの保存／無効の終了通知を待って、故障情報管理オブジェクト２００に対する依頼完了通知を行う。その後、本ＦＦＤ保存通知発行処理Ｓ４’を終了する。
以上のように各オブジェクト１００〜５００を構成した本第２実施例においても、上記第１実施例と同様の効果が得られることは言うまでもない。そしてさらに、以下に示すような効果が得られる。
【０１２１】
ここでは、ＦＦＤ管理オブジェクト４００が、図１９に示したＦＦＤ保存通知発行処理において、ＦＦＤに合わせて容易されるＦＦＤ保存オブジェクト５００を判断して（Ｓ４１２０，Ｓ４１６０）ＦＦＤ保存／無効の要求を発行する（Ｓ４１４０，４１７０）。また、ＦＦＤ保存の要求を発行してＦＦＤを更新するときには、ＦＦＤ優先度を判断している（Ｓ４１３０）。
【０１２２】
したがって、図１８に示した故障レベル判定処理Ｓ２’では、保存条件又は無効条件の成立を判断して（Ｓ２３５０，Ｓ２３７０）、ＦＦＤ保存依頼又はＦＦＤ無効依頼を通知するだけとなっている（Ｓ２３６０，Ｓ２３８０）。
つまり、本第２実施例の場合、故障情報管理オブジェクト２００は所定タイミングでＦＦＤ保存／無効依頼を通知するだけであり、上記第１実施例と比較して、ＦＦＤ変更時における故障情報管理オブジェクト２００の再利用性が向上している。
【０１２３】
さらに、故障項目とシートとの対応関係は、ＦＦＤ優先度と同様、故障情報保存オブジェクト３００に記憶するようにした。その結果、故障項目の変更に伴う変更部分がまとまっており、その変更作業が簡単になる。また、故障項目に依存する対応関係を故障情報保存オブジェクト３００に記憶しているため、故障項目の変更があっても、ＦＦＤ管理オブジェクト４００を変更する必要がない。
【０１２４】
なお、本第２実施例においても、故障検出オブジェクト１００が「故障検出オブジェクト」に相当し、故障情報管理オブジェクト２００が「故障情報管理オブジェクト」に相当し、故障情報保存オブジェクト３００が「故障情報保存オブジェクト」に相当する。また、ＦＦＤ管理オブジェクト４００が「故障時状態管理オブジェクト」に相当し、ＦＦＤ保存オブジェクト５００が「故障時状態保存オブジェクト」に相当する。
［その他］
上記第２実施例では、異なるＦＦＤそれぞれに対応させて、αＦＦＤ保存オブジェクト５１０及びβＦＦＤ保存オブジェクト５２０をそれぞれ１つずつ用意した。一方、同一のＦＦＤに対応させて複数のＦＦＤ保存オブジェクト５００を用意することも考えられる。例えば図１７（ｂ）に示すように、複数のαＦＦＤ保存オブジェクト５１０や複数のβＦＦＤ保存オブジェクト５２０を用意するという具合である。メモリ３９のスタンバイＲＡＭ又はＥＥＰＲＯＭに余裕があれば故障項目に対応させてより多くのＦＦＤを記憶させることが望ましいためである。この場合、ＦＦＤ管理オブジェクト４００は、シートの情報から特定されるオブジェクト５１０，５２０にＦＦＤを記憶していないものがある内は、そのオブジェクト５１０，５２０にＦＦＤを記憶させる。そして、シート情報に対応するオブジェクト５１０，５２０の全てにＦＦＤが記憶されると、ＦＦＤ優先度に基づき、最もＦＦＤ優先度の低いＦＦＤを更新していく。
【０１２５】
このようにすれば、限りあるスタンバイＲＡＭ又はＥＥＰＲＯＭにより多くのＦＦＤを記憶させることができる。言い換えると、メモリに余裕があればＦＦＤ保存オブジェクト５００を追加してＦＦＤの記憶領域を増やすことができ、逆に、メモリに余裕がなければＦＦＤ保存オブジェクト５００を削除することによってＦＦＤの記憶領域を減らすことができる。つまり、限られたメモリをどのように使用するかをＦＦＤ保存オブジェクト５００の追加／削除によって変更することができ、効率的なメモリ３９の使用を容易に実現できる。
【０１２６】
以上、本発明はこのような実施例に何等限定されるものではなく、本発明の主旨を逸脱しない範囲において種々なる形態で実施し得る。
【図面の簡単な説明】
【図１】実施例のエンジン制御システムを示す構成図である。
【図２】実施例のエンジン制御ユニットの構成を示すブロック図である。
【図３】第１実施例の自己診断プログラムの構造を概念的に示した説明図である。
【図４】故障情報の記憶手順を示すＭＳＣである。
【図５】第１実施例における故障情報及びＦＦＤの記憶手順を示すＭＳＣである。
【図６】故障情報管理オブジェクトの有する対応関係を示す説明図である。
【図７】水温センサの故障検出処理を示すフローチャートである。
【図８】スロットルセンサの故障検出処理を示すフローチャートである。
【図９】スロットルセンサにおける故障情報記憶手順を示すＭＳＣである。
【図１０】第１実施例の故障レベル判定処理を示すフローチャートである。
【図１１】（ａ）は故障情報記憶処理を示すフローチャートであり、（ｂ）はＦＦＤ保存通知発行処理を示すフローチャートであり、（ｃ）はＦＦＤ記憶処理を示すフローチャートである。
【図１２】ＦＦＤを例示する説明図である。
【図１３】第２実施例の自己診断プログラムの構造を概念的に示した説明図である。
【図１４】第２実施例における故障情報及びＦＦＤの記憶手順を示すＭＳＣである。
【図１５】第２実施例の故障情報保存オブジェクトの有する情報を示す説明図である。
【図１６】２種類のＦＦＤを例示する説明図である。
【図１７】ＦＦＤ管理オブジェクトとＦＦＤ保存オブジェクトとの対応を示す説明図である。
【図１８】第２実施例の故障レベル判定処理を示すフローチャートである。
【図１９】第２実施例のＦＦＤ保存通知発行処理を示すフローチャートである。
【符号の説明】
１１…エンジン
１２…吸気管
１３…エアフローセンサ
１４…吸気温センサ
１５…スロットル弁
１６…エンジン制御ユニット
１７…スロットルセンサ
１８…空燃比センサ
１９…バッテリ
２０…水温センサ
２１…ディストリビュータ
２２ａ，２２ｂ，２２ｃ，２２ｄ
…インジェクタ
２３…イグナイタ
２４…テストスイッチ
２５…警告灯
２６…イグニッションスイッチ
２７…スタータモータ
２８…スタータスイッチ
３２…アナログ入力回路
３３…ディジタル入力回路
３４…Ａ／Ｄ変換器
３５…電源回路
３６，３７，３８
…出力回路
３９…メモリ
１００，１１０，１２０，１３０，１４０
…故障検出オブジェクト
２００…故障情報管理オブジェクト
３００，３１０，３２０，３３０，３４０，３５０
…故障情報保存オブジェクト
４００…ＦＦＤ管理オブジェクト
５００，５１０，５２０…ＦＦＤ保存オブジェクト
【図１】
0004449220.tif 000002
【図２】
0004449220.tif 000003
【図３】
0004449220.tif 000004
【図４】
0004449220.tif 000005
【図５】
0004449220.tif 000006
【図６】
0004449220.tif 000007
【図７】
0004449220.tif 000008
【図８】
0004449220.tif 000009
【図９】
0004449220.tif 000010
【図１０】
0004449220.tif 000011
【図１１】
0004449220.tif 000012
【図１２】
0004449220.tif 000013
【図１３】
0004449220.tif 000014
【図１４】
0004449220.tif 000015
【図１５】
0004449220.tif 000016
【図１６】
0004449220.tif 000017
【図１７】
0004449220.tif 000018
【図１８】
0004449220.tif 000019
【図１９】
0004449220.tif 000020