(57)【要約】【課題】ダイアグコードを表す情報を不揮発性メモリに記憶させるようにした電子制御装置において、不揮発性メモリに記憶された情報のうち、所望の情報を個々に消去できるようにする。【解決手段】電子制御装置のスタンバイＲＡＭ（ＳＲＡＭ）には、異常の種別を表す一方、異常の項目を特定することができないダイアグコードが記憶されるようになっており、電子制御装置のマイコンは、ＳＲＡＭにダイアグコードが記憶されていると判定すると（Ｓ２１０：ＹＥＳ）、そのダイアグコードを、異常の項目を特定可能なダイアグ特定情報に変換して（Ｓ２２０）、不揮発性メモリとしてのＥＥＰＲＯＭに記憶させる（２３０）。また、ダイアグ特定情報毎に、そのダイアグ特定情報が表す項目の異常／正常を判定して、正常復帰した項目についてのダイアグ特定情報を個々に消去する（Ｓ２４０）。【選択図】図７
2008201160.tif 000002
【特許請求の範囲】
【請求項１】
データ書換可能な不揮発性メモリと、
複数の監視項目のそれぞれについて異常の有無を検出する異常検出手段と、
前記異常検出手段により異常が検出された場合に、その異常を示す異常コードを、少なくとも前記不揮発性メモリに記憶する異常記憶手段とを備えた電子制御装置であって、
前記異常記憶手段は、前記異常検出手段により異常が検出された場合に、少なくとも前記不揮発性メモリに、異常が検出された監視項目を識別可能な識別情報を、前記異常コードと共に記憶するようになっていることを特徴とする電子制御装置。
【請求項２】
請求項１に記載の電子制御装置において、
当該装置は、車両における制御対象を制御する電子制御装置であり、
前記異常検出手段は、車両のドライビングサイクルの期間であるトリップ期間において、前記複数の監視項目のそれぞれについて異常の有無を検出するようになっており、
前記異常検出手段が異常を検出した監視項目について、その後所定数の前記トリップ期間で連続して異常無しであると正常復帰判断すると、前記不揮発性メモリに記憶された前記異常コード及び前記識別情報のうち、前記異常検出手段が正常復帰判断した監視項目を表す異常コード及び識別情報を、その識別情報から特定して消去する消去手段を備えていることを特徴とする電子制御装置。
【請求項３】
請求項２に記載の電子制御装置において、
前記異常検出手段により異常が検出された場合、及びその異常検出手段により異常無しと判断された場合にカウント動作すると共に、そのカウント方向は前者の場合と後者の場合とで逆であり、さらに、カウント動作は１つの前記トリップ期間につき１回であるカウンタを、前記監視項目毎に備え、
前記消去手段は、前記カウンタを監視して、前記異常検出手段により異常が検出された監視項目用のカウンタが、異常無しと判断された場合のカウント方向に前記所定数だけ連続してカウント動作したと判断すると、前記異常検出手段が異常を検出した監視項目について正常復帰判断したと認識するようになっていることを特徴とする電子制御装置。
【請求項４】
請求項１ないし請求項３の何れか１項に記載の電子制御装置において、
前記複数の監視項目と前記識別情報との関係を記憶する対応情報記憶手段を備え、
前記異常記憶手段は、前記対応情報記憶手段が記憶している情報を参照し、前記異常検出手段により異常が検出された監視項目を表す識別情報を取得して、その取得した識別情報を前記異常コードと共に前記不揮発性メモリに記憶するようになっていることを特徴とする電子制御装置。
【請求項５】
請求項４に記載の電子制御装置において、
前記異常記憶手段は、前記異常コードと前記識別情報との両方の情報を含んだ１つのコード（以下、変換異常コードと言う）を前記不揮発性メモリに記憶するようになっており、
前記対応情報記憶手段は、前記異常コードと前記変換異常コードとの関係も記憶しており、
外部の診断ツールからの要求に応じて前記異常コードをその診断ツールに出力する異常コード出力手段を備え、該異常コード出力手段は、前記対応情報記憶手段が記憶している情報を参照し、前記不揮発性メモリにされている前記異常変換コードから前記異常コードを復元して前記外部の診断ツールに出力するようになっていることを特徴とする電子制御装置。
【請求項６】
請求項１ないし請求項５の何れか１項に記載の電子制御装置において、
前記識別情報は、前記複数の監視項目それぞれに固有の情報であることを特徴とする電子制御装置。
【請求項７】
請求項１ないし請求項６の何れか１項に記載の電子制御装置において、
前記異常コードとしては、複数の監視項目に共通のものがあり、
前記識別情報は、前記異常コードが共通である複数の監視項目の集まりにおいて、その監視項目それぞれに固有の情報であることを特徴とする電子制御装置。
【請求項８】
請求項１ないし請求項７の何れか１項に記載の電子制御装置において、
前記不揮発性メモリとは別に、前記異常コードが記憶されるメモリを備え、更に、前記複数の監視項目毎に、そのメモリにおける異常コードの格納アドレスが予め定められており、
前記識別情報は、前記監視項目毎に予め定められた前記異常コードの格納アドレスの情報であることを特徴とする電子制御装置。
【請求項９】
請求項１ないし請求項８の何れか１項に記載の電子制御装置において、
前記不揮発性メモリは、当該電子制御装置と接続する外部の装置に設けられていることを特徴とする電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己診断機能（ダイアグノーシス機能）を有する電子制御装置に関する。
【背景技術】
【０００２】
例えば特許文献１に示すように、車両においては、コンピュータシステムにおける異常箇所を検出する自己診断機能が備えられている。
自己診断機能とは、具体的には、例えばセンサ類等の動作状態を定期的にチェックして、故障時には、ユーザ等に故障を知らせるための警告灯を点灯したり、その故障内容が修理担当者等に分かるように、外部の診断装置からの要求に応じて故障の種類を示すダイアグコードをその診断装置に出力したりする、というような機能である。そして、ダイアグコードは、電子制御装置の例えばＲＡＭに記憶されるようになっている。
【０００３】
ところで、ＲＡＭに記憶されたダイアグコードは、そのダイアグコードを消去するための指令が外部の診断装置から電子制御装置に入力された際や、そのＲＡＭの動作用としてバッテリから常時供給されることになっている電圧が遮断された際（例えばバッテリが取り外された際）に消去される。
【０００４】
そこで、ダイアグコードを不揮発性のメモリ（例えばＥＥＰＲＯＭ）に記憶させることが、法規により新たに義務づけられることとなっている。
一方、新たな法規によれば、複数のトリップ期間（尚、「トリップ期間」とは、車両のドライビングサイクル（例えばイグニションスイッチのオンから次のイグニションスイッチのオンまで）の期間のことを指す）で連続して異常無しと判定されると、その複数のトリップ期間で異常無しと判定された項目（以下、正常復帰項目と記載する）についてのダイアグコードを、不揮発性のメモリから削除しても良いことになっている。
【特許文献１】特許第３６５９０１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、従来より、ダイアグコードは複数の項目に共通の場合もある。例えば、所定のセンサに異常が生じたことを表すダイアグコードが、そのセンサにおける断線・ショートを表すものであったり、そのセンサの検出値が異常であることを表すものであったりすることが考えられる。また、例えばエンジンにおいて失火が生じたことを表すダイアグコード（以下、失火ダイアグコードと記載する）が、各気筒に共通であることも考えられる。つまりこの場合、失火ダイアグコードによれば、失火が生じたことは分かるが、具体的にどの気筒において失火が生じたかまでは分からないこととなってしまう。
【０００６】
このため、ダイアグコードを単に不揮発性のメモリに記憶させることとすると、ダイアグコードが複数の項目に共通のものであり不揮発性メモリに同じダイアグコードが記憶されている場合、その同じダイアグコードのうち、どのダイアグコードが正常復帰項目に対応するものか区別がつかず、何れを消去して良いか判断できなくなってしまう。
【０００７】
本発明は、こうした問題に鑑みなされたもので、車両における故障を表すダイアグコードを不揮発性メモリに記憶させるようにした電子制御装置において、その不揮発性メモリに記憶されたダイアグコードのうち、所望のダイアグコードを個々に消去できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するためになされた請求項１に記載の発明は、データ書換可能な不揮発性メモリと、複数の監視項目のそれぞれについて異常の有無を検出する異常検出手段と、異常検出手段により異常が検出された場合に、その異常を示す異常コードを、少なくとも不揮発性メモリに記憶する異常記憶手段とを備えた電子制御装置である。
【０００９】
そして、異常記憶手段は、異常検出手段により異常が検出された場合に、少なくとも不揮発性メモリに、異常が検出された監視項目を識別可能な識別情報を、異常コードと共に記憶するようになっている。
【００１０】
このような請求項１の電子制御装置によれば、不揮発性メモリには、異常コードと共に、監視項目を識別するための識別情報が記憶されるため、不揮発性メモリに記憶されている異常コードがどの監視項目の異常を表すものであるかを、識別情報から特定することができる。
【００１１】
よって、不揮発性メモリに記憶されている異常コードのうち、所望の異常コード、言い換えると、所望の監視項目についての異常を表す異常コードのみを確実に消去できるようになる。また、このため、メモリ資源を節約することができる。
【００１２】
ところで、新たに規定される法規によれば、不揮発性メモリに異常を示す異常コードを記憶させることが義務付けられると共に、不揮発性メモリに記憶された異常コードのうち、異常が解消されたものについては消去しても良いことになっている。法規への対応という観点からすると、本請求項１の電子制御装置によれば、消去しても良い異常コードを識別情報から特定できるため、消去してはいけない異常コードを消去してしまう、つまり法規に違反してしまう、ということを防止することができる。
【００１３】
そして、請求項１の装置では、具体的に、請求項２のように構成することができる。
請求項２の電子制御装置は、車両における制御対象を制御する電子制御装置であり、異常検出手段は、車両のドライビングサイクルの期間であるトリップ期間において、複数の監視項目のそれぞれについて異常の有無を検出するようになっている。
【００１４】
そして、異常検出手段が異常を検出した監視項目について、その後所定数のトリップ期間で連続して異常無しであると正常復帰判断すると、不揮発性メモリに記憶された異常コード及び識別情報のうち、異常検出手段が正常復帰判断した監視項目を表す異常コード及び識別情報を、その識別情報から特定して消去する消去手段を備えている。
【００１５】
新たな法規によれば、不揮発性メモリに記憶された異常コードを消去しても良い場合とは、具体的には異常が検出された監視項目について所定数のトリップ期間で連続して異常無しと判断された場合である。
【００１６】
請求項２の電子制御装置によれば、上述したような消去手段を備えているため、まさに法規に適合させることができる。しかも、消去手段は、識別情報から、異常コードを特定するようになっているため、消去しても良い所望の異常コード及び識別情報を確実に消去することができるようになる。
【００１７】
そして、請求項２の電子制御装置では、具体的に請求項３のように構成すると良い。
請求項３の電子制御装置は、異常検出手段により異常が検出された場合、及びその異常検出手段により異常無しと判断された場合にカウント動作すると共に、そのカウント方向は前者の場合と後者の場合とで逆であり、さらに、カウント動作は１つのトリップ期間につき１回であるカウンタを、監視項目毎に備えている。
【００１８】
そして、消去手段は、カウンタを監視して、異常検出手段により異常が検出された監視項目用のカウンタが、異常無しと判断された場合のカウント方向に所定数だけ連続してカウント動作したと判断すると、異常検出手段が異常を検出した監視項目について正常復帰判断したと認識するようになっている。
【００１９】
このため、請求項３の電子制御装置では、消去手段は、監視項目毎に備えられているカウンタを監視するという簡単な構成で、異常検出手段が異常を検出した監視項目についてその後正常復帰判断したか否か、言い換えると、不揮発性メモリに記憶されている異常コードのそれぞれについて個別に、その異常コードを消去しても良いか否かを判断できる。つまり、消去しても良い所望の異常コード（及び識別情報）を消去できるようになる。
【００２０】
次に、請求項４の電子制御装置は、請求項１〜３の電子制御装置において、複数の監視項目と識別情報との関係を記憶する対応情報記憶手段を備え、異常記憶手段は、対応情報記憶手段が記憶している情報を参照し、異常検出手段により異常が検出された監視項目を表す識別情報を取得して、その取得した識別情報を異常コードと共に不揮発性メモリに記憶するようになっている。
【００２１】
このような請求項４の電子制御装置では、異常記憶手段は、対応情報記憶手段から所望の監視項目に対応する識別情報を取得するため、例えば識別情報を計算により算出したりする場合と比較して、処理負荷を軽減することができる。
【００２２】
次に、請求項５の電子制御装置は、請求項４の電子制御装置において、異常記憶手段は、異常コードと識別情報との両方の情報を含んだ１つのコード（以下、変換異常コードと言う）を不揮発性メモリに記憶するようになっている。また、対応情報記憶手段は、異常コードと変換異常コードとの関係も記憶している。
【００２３】
そして、外部の診断ツールからの要求に応じて異常コードをその診断ツールに出力する異常コード出力手段を備えており、この異常コード出力手段は、対応情報記憶手段が記憶している情報を参照し、不揮発性メモリに記憶されている異常変換コードから異常コードを復元して外部の診断ツールに出力するようになっている。
【００２４】
この請求項５の電子制御装置のように、異常コードと識別情報との両方の情報を含んだ変換異常コードを不揮発性メモリに記憶させるようにすることで、例えば異常コードと識別情報とをそれぞれ対応付けて不揮発性メモリに記憶させる場合と比較して、メモリ資源を節約することができる。例えばデータ量を抑えられるコード形式で、異常コードと識別情報とを表すことができるようになるためである。
【００２５】
一方、対応情報記憶手段は、変換異常コードと異常コードとの関係も記憶しているため、異常コード出力手段は、異常コードを外部の診断ツールからの要求に応じて出力する際、変換異常コードから容易に異常コードを復元することができる。
【００２６】
このため、異常コードを外部の診断ツールに出力することで異常が特定されるようにする機能（いわゆる自己診断機能）を害すことなく、不揮発性メモリのメモリ資源を節約することができるという効果を得ることができる。
【００２７】
ここで、識別情報は、請求項６〜８のような情報とすることができる。
まず、請求項６では、識別情報は、複数の監視項目それぞれに固有の情報であることを特徴としている。
【００２８】
これによれば、識別情報は重複することがないため、識別情報のみから監視項目を特定することができ、ひいては所望の監視項目についての異常を表す異常コードを特定することができるようになる。
【００２９】
次に、請求項７では、異常コードとしては、複数の監視項目に共通のものがあり、識別情報は、異常コードが共通である複数の監視項目の集まりにおいて、その監視項目それぞれに固有の情報であることを特徴としている。
【００３０】
つまり、異常コードが共通である複数の監視項目の集まりにおいては、識別情報が重複することがない。
このように異常コードが同じグループ内で識別情報が重複しないようにさえしておけば、異常コードが異なるグループ同士の間では共通の識別情報を利用することができるため、識別情報の種類を抑えることができ有利である。そして、請求項７の場合でも、異常コードと識別情報とから監視項目を特定することができるため、所望の監視項目についての異常を表す異常コードを特定することができる。
【００３１】
次に、請求項８では、不揮発性メモリとは別に、異常コードが記憶されるメモリを備え、更に、複数の監視項目毎に、そのメモリにおける異常コードの格納アドレスが予め定められている。そして、識別情報は、監視項目毎に予め定められた異常コードの格納アドレスの情報であることを特徴としている。
【００３２】
メモリとしては、例えばＲＡＭ等がある。
このような請求項８の場合でも、格納アドレスの情報から監視項目が一義的に特定でき、このため、所望の監視項目についての異常を表す異常コードを特定することができるようになる。
【００３３】
次に、請求項９の電子制御装置は、請求項１〜８の電子制御装置において、不揮発性メモリは、当該電子制御装置と接続する外部の装置に設けられていることを特徴としている。
【００３４】
外部の装置としては、他の電子制御装置が考えられる。そして、不揮発性メモリとしては、他の電子制御装置（外部の電子制御装置）に備えられているものを利用しても良い。このような構成によれば、汎用性が広がり有利である。尚、不揮発性メモリ自体が電子制御装置の外部に設けられている構成でも良い。
【発明を実施するための最良の形態】
【００３５】
以下に、本発明の実施形態を図面に基づき説明する。
〈全体構成〉
図１は、車両ネットワークシステムの構成例を表す図面である。尚、以下の説明において、電子制御装置をＥＣＵと記載する。
【００３６】
図１に示すように、本実施形態の車両ネットワークシステム１は、車両（自動車）に搭載されてエンジンを制御するエンジンＥＣＵ４を備えている。このエンジンＥＣＵ４は、車両内に配設されたＣＡＮバス２（ＣＡＮ：Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を介して、ＥＣＵ５と通信可能に接続されている。尚、本例では、ＥＣＵ５は、車両のトランスミッションを制御するＥＣＵであり、以下、トランスミッションＥＣＵ５と記載する。
【００３７】
また、診断ツール６は、例えば車両のディーラーや修理工場において、車両の点検整備を行う作業者によりＣＡＮバス２に接続され、エンジンＥＣＵ４やトランスミッションＥＣＵ５からデータの読み出しなどを行うものである。
【００３８】
そして、エンジンＥＣＵ４やトランスミッションＥＣＵ５は、車両に搭載されるバッテリ３から電圧の供給を受けて動作する。
次に、エンジンＥＣＵ４の構成について説明する。
【００３９】
エンジンＥＣＵ４は、当該エンジンＥＣＵ４の動作を司るマイコン１０と、バッテリ３からの電源電圧を受けて、マイコン１０をはじめとする当該エンジンＥＣＵ４内の各部に動作用の電圧（例えば５Ｖ）を供給する電源回路２０と、ＣＡＮバス２に接続された外部の装置（例えばトランスミッションＥＣＵ５や診断ツール６）と通信を行うための通信回路３０と、各種センサやスイッチなどからの信号の入力及びアクチュエータを駆動するための信号の出力を行う入出力回路４０と、データの書き換えが可能な不揮発性のメモリとしてのＥＥＰＲＯＭ５０とを備えている。
〈マイコンの構成〉
次に、マイコン１０について説明する。
【００４０】
マイコン１０は、所定のプログラムに従って各種処理を実行するＣＰＵ１１と、ＣＰＵ１１が実行するプログラム等が記憶されるＲＯＭ１２と、ＣＰＵ１１の演算結果等の情報を記憶するためのＲＡＭ１３と、電圧が供給される間データを保持可能なスタンバイＲＡＭ（以下、ＳＲＡＭと記載する）１４と、異常個数カウンタ１５と、正常個数カウンタ１６と、全体３トリップ復帰カウンタ１７と、個別３トリップ復帰カウンタ１８と、入出力回路（以下、Ｉ／Ｏと記載する）１９とを備えていると共に、それらがバス９を介して相互に接続されている。尚、通信回路３０、入出力回路４０、及びＥＥＰＲＯＭ５０は、Ｉ／Ｏ１９を介してマイコン１０と接続される。
【００４１】
ＲＯＭ１２には、コード変換テーブルＴａと、ＣＰＵ１１が実行する異常診断プログラムＰｒとが格納されている。このコード変換テーブルＴａ及び異常診断プログラムＰｒについて、詳細は後述する。尚、ＲＯＭ１２には、実際には他にも種々のプログラム等が格納されているが、ここでは説明を省略する。
【００４２】
ＣＰＵ１１は、後述の異常診断プログラムＰｒに基づき車両の異常の有無を検出するようになっているが、ここで、異常個数カウンタ１５は、異常箇所（異常項目）の個数をカウントするカウンタであり、正常個数カウンタは、異常から正常に復帰した項目の個数をカウントするカウンタである。
【００４３】
また、全体３トリップ復帰カウンタ１７、及び個別３トリップ復帰カウンタ１８について、詳細は後述するが、簡単に説明することとすると、まず、全体３トリップ復帰カウンタ１７は、異常が検出された場合に３までアップカウントし、その後、異常個数≦正常個数であるとＣＰＵ１１により判断される毎に、１づつダウンカウントする。また、個別３トリップ復帰カウンタ１８は、異常が検出されると３までアップカウントし、その後、その異常が検出された項目について正常復帰したとＣＰＵ１１により判断される毎に、１づつダウンカウントする。
【００４４】
また、このようなエンジンＥＣＵ４では、マイコン１０は、複数の項目について異常（故障）の有無を判断すると共に、異常を検出すると、その異常の種別を示す異常コード（いわゆるダイアグコードであり、以下そのように記載する）を、ＳＲＡＭ１４に記憶する。このダイアグコードは、前述のように異常の種別を表すものであり、従来より、異なる項目同士で同じダイアグコードが割り当てられている場合もある。尚、以下の説明において、異常の有無の検出対象である項目をダイアグ項目と記載する。
【００４５】
そして、エンジンＥＣＵ４は、診断ツール６からダイアグコードの読み出し要求を受けると、その時点でＳＲＡＭ１４に記憶しているダイアグコードを診断ツール６に出力する。エンジンＥＣＵ４から診断ツール６に出力されたダイアグコードは、その診断ツール６の図示しない表示装置に表示される。これにより作業者は、異常が生じた機能や箇所を予想することができる。
【００４６】
一方、エンジンＥＣＵ４は、診断ツール６からダイアグコードを消去するための消去指令を受けると、ＳＲＡＭ１４に記憶しているダイアグコードを消去する。このような点に鑑み、「背景技術」の欄でも説明したように、ダイアグコードを不揮発性のメモリ（本実施形態のＥＥＰＲＯＭ５０に対応）にも記憶させること、また、加えて、不揮発性メモリに記憶させた情報を一定条件下で消去可能とすること、を規定する法規が新たに設けられる。
【００４７】
ここで、図２を用いて、本実施形態において、前述のＥＥＰＲＯＭ５０にどのような情報を記憶させるのかについて説明する。
〈コード変換テーブル〉
図２は、コード変換テーブルＴａを表す図面である。コード変換テーブルＴａは、ＥＥＰＲＯＭ５０に記憶させる情報を生成するためのものである。前述のように、ダイアグコードは異なるダイアグ項目に共通の場合があるが、図２のコード変換テーブルＴａを用いて生成される情報は、ダイアグ項目毎に固有の情報であり、このためその生成された情報からダイアグ項目を特定できるようになっている。尚、以下、ＥＥＰＲＯＭ５０への記憶用にコード変換テーブルＴａに基づき生成される情報を、ダイアグ特定情報と記載する。また、本実施形態では、ＥＥＰＲＯＭ５０は、ダイアグ特定情報を記憶するための記憶領域を４つ有している。つまり、ＥＥＰＲＯＭ５０は、４種類のダイアグ特定情報を記憶できるようになっている。尚、以下、その４つの記憶領域を、記憶領域（ｎ）と記載する。ただし、ｎ＝０，１，２，３である。
【００４８】
図２に示すように、コード変換テーブルＴａでは、ダイアグ項目毎に、従来から使用されているダイアグコードが対応付けられている。そして、例えば、ダイアグコード「Ｐ０１１６」は、ダイアグ項目２〜４に共通である。
【００４９】
そして、コード変換テーブルＴａでは、ダイアグ項目毎に、インデックスと、静的ＩＤと、ＲＡＭアドレスとがそれぞれ対応付けられている。このインデックス、静的ＩＤ、ＲＡＭアドレスは、何れも、ダイアグ項目を一義的に特定するための情報である。
【００５０】
インデックスは、ダイアグコードが共通であるダイアグ項目の集まりにおいて、個々のダイアグ項目を特定するための情報である。具体的に、０から始まる数字である。例えば、ダイアグコードが「Ｐ０１１６」で共通であるダイアグ項目２〜４に、インデックスとして０〜２が対応付けられる。また、ダイアグコード「Ｐ０１１６」以外であるダイアグ項目１，５にそれぞれ、インデックスとして０が対応付けられる。尚、例えば、ダイアグ項目１の他にダイアグコードとして「Ｐ０１１２」が対応付けられたダイアグ項目（仮にダイアグ項目１０とする）があれば、そのダイアグ項目１０にはインデックスとして１が対応付けられることとなる。
【００５１】
このように、インデックスは、ダイアグコードが異なるダイアグ項目同士では同じになる場合もあるが、ダイアグコードが共通であるダイアグ項目同士においては重複しないようになっている。このため、ダイアグコードとインデックスとから、ダイアグ項目を一義的に特定することができる。
【００５２】
次に、静的ＩＤは、全てのダイアグ項目において、各ダイアグ項目に固有の情報である。具体的には、０１から始まる数字である。つまり、静的ＩＤとして、ダイアグ項目のそれぞれに通し番号が割り当てられている。このため、静的ＩＤにより、ダイアグ項目を一義的に特定することができる。
【００５３】
次に、ＲＡＭアドレスであるが、このＲＡＭアドレスも、全てのダイアグ項目において、各ダイアグ項目に固有の情報である。この「ＲＡＭアドレス」の「ＲＡＭ」は、ＳＲＡＭ１４を指すものであり、ＳＲＡＭ１４におけるダイアグコードの格納アドレスは、ダイアグ項目毎に予め定められている。ここでは、その格納アドレスの情報を、ダイアグ項目を特定するための情報として、各ダイアグ項目に対応付けている。このため、ＲＡＭアドレスにより、ダイアグ項目を一義的に特定することができる。
【００５４】
ダイアグ特定情報を生成する際は、インデックス、静的ＩＤ、ＲＡＭアドレスの何れを用いてもよく、また、その３つのうち複数（３つ共の場合も含む）を用いても良い。
本実施形態では特に、インデックスを用いるようにしている。以下説明する。
【００５５】
図２の〈説明〉に記載しているように、ダイアグ特定情報は、ダイアグコードにインデックスを付与したものである。
具体的に、ダイアグコードを表すデータに、１バイト＝８ビットのデータをインデックスを表すためのデータとして付与する。
【００５６】
インデックスを表すためのデータは、１ビット目から８ビット目まで、順に、インデックスの数字の０，１，２，…７に対応する。例えばダイアグコードにインデックスとして０を付与する場合には、インデックスを表す部分の１ビット目を「１」にする。０を付与しない場合には、１ビット目を「０」にする。
【００５７】
このようにして、付与したい数字に対応したビット情報を「１」にすれば、所望のインデックスをダイアグコードに付与できることとなる。
例えば、ダイアグ項目２，４（インデックスはそれぞれ０，２）が異常であることを表すダイアグ特定情報は、ダイアグコード（のデータ）＋１ビット目「１」，２ビット目「０」，３ビット目「１」，以下「０」…というようなデータとなる。勿論、インデックスを表すために２バイト以上のデータを用いても良い。
【００５８】
尚、静的ＩＤを用いる場合は、ダイアグ項目に対応する静的ＩＤをダイアグコードに付与すれば良い。同様に、ＲＡＭアドレスを用いる場合は、ダイアグ項目に対応するＲＡＭアドレスをダイアグコードに付与すれば良い。
【００５９】
例えば、ダイアグ項目２が異常であることを表すダイアグ特定情報は、静的ＩＤを用いた場合は「Ｐ０１１６＋０２」となり、ＲＭＡアドレスを用いた場合は「Ｐ０１１６＋０ｘ３ｆｆ０００４」となる。つまり、ダイアグ項目２が異常の場合、静的ＩＤを用いるならば、ＥＥＰＲＯＭ５０には「Ｐ０１１６＋０２」を記憶させ、ＲＡＭアドレスを用いるならば、ＥＥＰＲＯＭ５０には「Ｐ０１１６＋０ｘ３ｆｆ０００４」を記憶させるようにすれば良い。
【００６０】
また、静的ＩＤ、或いはＲＡＭアドレスをダイアグ特定情報としても良い。この場合、例えば、ダイアグ項目２が異常であることを表すダイアグ特定情報は、静的ＩＤを用いた場合は「０２」となり、ＲＭＡアドレスを用いた場合は「０ｘ３ｆｆ０００４」となる。
〈異常診断プログラム構造〉
次に、図３は、異常診断プログラムＰｒの構造（アーキテクチャ）を概念的に示した説明図である。尚、図３に示す概念は既に、本願出願人の出願に係る特許第３６５９０１７号公報で開示されているものである。
【００６１】
異常診断プログラムＰｒは、オブジェクト指向設計されたプログラムで構成される。オブジェクト指向設計とは、オブジェクト（対象）同士の相互作用としてシステムの振る舞いをとらえて、そのオブジェクトの特性やオブジェクト同士の関連を記述するものである。例えば、オブジェクト間を要求や応答といったやりとり（以下、「メッセージ」と記載する）により結合することで、一連の処理が実現される。また、オブジェクトは、データ（属性とも言われる）と、データを処理する手続き（メソッドとも言われる）とを一体化した形で記述され、オブジェクトは他のオブジェクトからの要求（メッセージ）を受信することによりメソッドを実行する。尚、オブジェクトへの仕事の依頼はメソッドを介してのみ行うことができ、オブジェクト内のデータへの直接のアクセスは禁止される。
【００６２】
そして、異常診断プログラムＰｒは、図３に示すように、異常検出オブジェクト１００と、異常確定オブジェクト２００と、異常時処理オブジェクト３００と、異常コード格納オブジェクト４００とで構成される。
【００６３】
異常検出オブジェクト１００は、例えばセンサやスイッチからエンジンＥＣＵ４に入力された情報に基づいて、正常／異常を判断するプログラムを有する。そして、この異常検出オブジェクト１００は、異常検出対象（ダイアグ項目）毎にオブジェクト化される。
【００６４】
例えば、ダイアグ項目として水温センサ、吸気温センサ、スロットルセンサがあるとすると、水温センサの異常を検出するオブジェクト１１０、吸気温センサの異常を検出するオブジェクト１２０、スロットルセンサの異常を検出するオブジェクト１３０、を有するように構成される。ダイアグ項目が増えると、これに対応したオブジェクトが追加され、逆にダイアグ項目が減った場合には、これに対応したオブジェクトが削除される。
【００６５】
異常検出オブジェクト１００により異常が検出されると、その異常検出オブジェクト１００からフラグ処理要求のメッセージが異常確定オブジェクト２００に発行され、また、異常確定オブジェクト２００からカウント処理要求のメッセージが異常時処理オブジェクト３００に発行され、さらに異常時処理オブジェクト３００からダイアグコード記憶要求のメッセージが異常コード格納オブジェクト４００に発行される。
【００６６】
そして、異常確定オブジェクト２００は、異常検出オブジェクト１００からのフラグ処理要求（サブルーチンコール）により起動し、例えば異常／正常を確定するための処理を実現する。
【００６７】
また、異常時処理オブジェクト３００は、異常確定オブジェクト２００からのカウント処理要求（サブルーチンコール）により起動し、例えば異常／正常個数をカウントする処理を実現する。
【００６８】
さらに、異常コード格納オブジェクト４００は、異常時処理オブジェクト３００からのダイアグコード記憶要求（サブルーチンコール）により起動し、例えばダイアグコードを記憶させる処理を実現する。
〈異常検出オブジェクト１００の詳細〉
図４に、異常検出オブジェクト１００のうち、水温センサの異常を検出するオブジェクト１１０の詳細を一例として示す。尚、オブジェクト１２０，１３０も同じ構成となっている。
【００６９】
図４に示すように、オブジェクト１１０は、フラグ格納部１１２と、異常検出プログラム部１１４と、異常情報テーブル１１６とで構成される。
フラグ格納部１１２の各フラグについて以下に説明する。
・正常判定フラグは、異常検出プログラム部１１４にて正常判断したときにはフラグ「１」が立つ。
・現在異常フラグは、異常検出プログラム部１１４にて異常判断したときにはフラグ「１」が立つ。
・ランプ点灯フラグは、異常が確定するとフラグ「１」が立つ（この際、ランプ点灯要求が出力される）。
・異常コードフラグは、異常が確定するとフラグ「１」が立つ（この際、ダイアグコード記憶要求が出力される）。
【００７０】
ここで、異常検出プログラム部１１４には、図５に示す処理を実現するためのプログラムが格納される。そして、オブジェクト１１０によれば、図５の処理が実現される。
図５の処理では、マイコン１０（具体的には、ＣＰＵ１１）は、まずＳ１１０で、フラグ格納部１１２のフラグ情報を、過去のフラグ情報として図示しないレジスタに待避させる。
【００７１】
次に、Ｓ１２０で水温センサの検出値を読み込む。そしてＳ１３０に進み、読み込んだ検出値が所定範囲内か否かを判定する。そして、所定範囲内であれば（Ｓ１３０：ＹＥＳ）、正常と判断してＳ１４０に移行し、正常判定フラグを「１」にして、現在異常フラグを「０」にする。
【００７２】
一方、読み込んだ検出値が所定範囲内でなければ（Ｓ１３０：ＮＯ）、異常と判断してＳ１５０に移行し、正常判定フラグを「０」にして、現在異常フラグを「１」にする。
そして、Ｓ１４０或いはＳ１５０の後、Ｓ１６０に進み、フラグ処理要求を異常確定オブジェクト２００に発行する。
【００７３】
異常確定オブジェクト２００では、現在の車両の運転状態も加味して、異常と確定してよいか否かを判断する。例えば水温センサの場合、バッテリ３の電圧が低下すると、水温センサは正常であるにもかかわらず、水温センサの検出値は所定範囲外となり、この場合オブジェクト１１０で異常と判断されてしまう。このような場合には、異常確定オブジェクト２００で異常がキャンセルされ、現在異常フラグがリセットされる。一方、異常をキャンセルすべき理由がなければ、異常を確定する。
【００７４】
図４に戻り、異常情報テーブル１１６には、診断ツール６へ出力するコード情報（ダイアグコード）、ランプを点灯させるか否かを示す情報（ランプ点灯）、複数あるランプの内でどのランプを点灯させるかを示す情報（ランプ適用）、など、各異常検出対象に関連した特有の情報が格納される。
〈メッセージ・シーケンスチャート（ＭＩＬ点灯）〉
次に、図６は、異常診断プログラムＰｒにより実現される処理であって、特にランプ点灯（ＭＩＬ点灯）処理の流れを示すメッセージ・シーケンスチャート（以下、ＭＳＣと記載する）であり、このシーケンスは、トリップ期間において例えば６５ｍｓ毎に繰り返し実行される。尚、トリップ期間とは、車両のドライビングサイクル（例えばイグニションスイッチのオンから次のイグニションスイッチのオンまで）の期間のことである。
【００７５】
この図６のＭＳＣでは、各オブジェクトにて実際に実行される処理が示され、矢印により、他のオブジェクトへの関数コール（メッセージ）が示されている。
図６では、マイコン１０（具体的にはＣＰＵ１１）は、まずステップＥで、カウンタリセットを実行する。ここでは、異常個数カウンタ１５、正常個数カウンタ１６、及び図示はしないがランプの点灯／消灯を判断するためのカウンタをリセットする。
【００７６】
ステップＢでは、異常検出オブジェクト１００からのフラグ処理要求（図６では符号ａで示しており、各メッセージでは、フラグ格納部１１２のフラグ情報及び異常情報テーブル１１６のテーブル情報がやりとりされる）に基づき、カウント判別処理を実行する。カウント判別処理では、ランプ点灯フラグ（図４）が「１」であるか否かを判定し、「１」であると判定すると、異常時処理オブジェクト３００に対してカウント処理要求を発行する（ｂ）。一方、ランプ点灯フラグが「１」でないと判定すると、そのまま当該処理を終了する。
【００７７】
ステップＦでは、異常／正常カウント処理を実行する。異常／正常カウント処理では、異常確定オブジェクト２００からのフラグ情報に基づき、異常が確定したと判定すると、異常個数カウンタ１５をインクリメントする。インクリメントすると、次に、正常復帰しているか否かを判定する。具体的に、現在異常フラグ（図４）が「０」でありかつ正常判定フラグ（図４）が「１」か否かを判定し、肯定判定したならば、正常復帰したと判断して正常個数カウンタ１６をインクリメントし、逆に否定判定したならば、当該処理を終了する。
【００７８】
ステップＣでは、フラグ格納部１１２のフラグ状態が変化したか否かを判定し、変化したと判定したならばダイアグコードを記憶すべきと判断して、異常時処理オブジェクト３００を介して異常コード格納オブジェクト４００へダイアグコード記憶要求を発行する（ｃ，ｆ）。一方、変化していないと判定すれば、当該処理を終了する。
【００７９】
ステップＩでは、ダイアグコード記憶処理を実行する。この処理では、ＳＲＡＭ１４に、異常検出オブジェクト１００に対応するダイアグコード、言い換えると、ダイアグ項目に対応するダイアグコードを記憶する。
【００８０】
ステップＤでは、フラグ処理を実行する。例えば所定のフラグをリセットする。
以上で１つのダイアグ項目についての処理が終わり、これと同じ処理を他のダイアグ項目についても繰り返す（異常検出オブジェクト分繰り返す）。そして、全てのダイアグ項目についての処理が終わると、ステップＧにてランプの点灯／消灯の判断を行い（ランプ点灯フラグに基づき判断する）、ランプを点灯すると判断したら、ランプ点灯要求を出してランプを点灯させる。
【００８１】
尚、以上の処理は、前述した特許第３６５９０１７号公報に開示されているものであり、ここでは概略を述べるに留めることとした。
ここで、本実施形態では、さらにステップＨでダイアグ情報操作処理を実行するようになっている。
〈ダイアグ情報操作処理〉
図７は、ダイアグ情報操作処理の流れを表すフローチャートである。
【００８２】
このダイアグコード情報操作処理では、マイコン１０（具体的には、ＣＰＵ１１）は、まずＳ２１０で、ＳＲＡＭ１４にダイアグコードが記憶されているか否かを判定し、記憶されていないと判定すると（Ｓ２１０：ＮＯ）、Ｓ２４０に移行する。
【００８３】
一方、Ｓ２１０でＳＲＡＭ１４にダイアグコードが記憶されていると判定すると（Ｓ２１０：ＹＥＳ）、Ｓ２２０に移行する。
Ｓ２２０では、ＳＲＡＭ１４に記憶されているダイアグコードを、図２のコード変換テーブルＴａに基づきダイアグ特定情報に変換する。詳細は前述した通りである。この場合、どのダイアグ項目が異常であるかは、異常検出オブジェクト１００（１１０，１２０，１３０，…）のフラグ格納部１１２の情報（具体的に、現在異常フラグ、ランプ点灯フラグ）に基づき判別できる。また、ダイアグコードが記憶されているアドレス（ＳＲＡＭ１４のアドレス）に基づき判別することもできる。このため、コード変換テーブルＴａに基づきダイアグコードをダイアグ特定情報に変換することが可能である。
【００８４】
そして次に、Ｓ２３０に進み、そのダイアグ特定情報をＥＥＰＲＯＭ５０に記憶させる。
続くＳ２４０では、個別３トリップ復帰カウンタ処理を実行する。
【００８５】
ところで、〈マイコンの構成〉の欄にて、個別３トリップ復帰カウンタ１８について簡単に説明したが、個別３トリップ復帰カウンタ１８は、ＥＥＰＲＯＭ５０の記憶領域（ｎ）毎に設けられているものである。そして、個別３トリップ復帰カウンタ１８は、記憶領域（ｎ）毎、換言すると、ダイアグ項目毎に、異常が検出されると３にセットされる（アップカウントする）と共に、正常復帰したと判定される毎に１づつダウンカウントする。尚、カウント動作は、１つのトリップ期間につき１回である。例えば、１つのトリップ期間で３までアップカウントし、また、１つのトリップ期間で１だけダウンカウントする。
【００８６】
また、以下、記憶領域（ｎ）用の個別３トリップ復帰カウンタ１８を、特に、個別３トリップ復帰カウンタ（ｎ）と記載する。例えば、記憶領域（０）用の個別３トリップ復帰カウンタ１８は、３トリップ復帰カウンタ（０）と記載する。
【００８７】
図８は、個別３トリップ復帰カウンタ処理の流れを表すフローチャートである。
図８の処理では、まずＳ２４２で、記憶領域（ｎ）のｎについて、ｎ＝０とする。つまり、処理対象を個別３トリップ復帰カウンタ（０）にするという初期設定を行う。以下、まずｎ＝０の場合について説明する。
【００８８】
続くＳ２４４では、個別３トリップ復帰カウンタ（０）の値が０であるか否かを判定し、０でないと判定すると（Ｓ２４４：ＮＯ）、Ｓ２５２に移行する。
一方、Ｓ２４４で個別３トリップ復帰カウンタ（０）の値が０であると判定すると（Ｓ２４４：ＹＥＳ）、Ｓ２４６に移行し、記憶領域（０）にダイアグ特定情報が記憶されているか否かを判定する。
【００８９】
Ｓ２４６で記憶領域（０）にダイアグ特定情報が記憶されていないと判定すると（Ｓ２４６：ＮＯ）、Ｓ２５２に移行する。
一方、Ｓ２４６で記憶領域（０）にダイアグ特定情報が記憶されていると判定すると（Ｓ２４６：ＹＥＳ）、Ｓ２４８に移行し、個別３トリップ復帰カウンタ（０）を３にセットする。続いて、Ｓ２５０に進み、図２のコード変換テーブルＴａに基づき、ダイアグ特定情報からダイアグコードを抽出して、その抽出したダイアグコードをＳＲＡＭ１４に記憶させる。
【００９０】
次にＳ２５２に進み、０に１を加算し（ｎ＋１）、新たなｎとする（ｎ←ｎ＋１）。
そして、続くＳ２５４では、Ｓ２５２で算出した新たなｎが４以上であるか否かを判定し、ｎが４未満であれば（Ｓ２５４：ＮＯ）、再びＳ２４４に戻る。一方、Ｓ２５４でｎが４以上であれば、そのまま当該処理を終了する。つまり、記憶領域（ｎ）のそれぞれ（ｎ＝０，１，２，３）について、上記の処理（Ｓ２４４〜Ｓ２５４）を繰り返し実行する。
【００９１】
次に、図９は、トリップ期間のイニシャル時、つまり車両のドライビングサイクルが開始された際に１回だけ実行される処理の流れを表すメッセージ・シーケンスチャート（ＭＳＣ）である。
【００９２】
図９では、マイコン１０（具体的にはＣＰＵ１１）は、ステップＫで、カウンタリセット処理を実行する。ここで、図１０は、カウンタリセット処理の流れを表すフローチャートである。
【００９３】
図１０のカウンタリセット処理では、Ｓ３１０で、異常個数カウンタ１５及び正常個数カウンタ１６をリセットする。そしてその後、当該処理を終了する。
また、図９で、マイコン１０は、異常検出オブジェクト１００からのフラグ処理要求（ａ１）に基づき、ステップＪでカウント判別処理を実行する。このカウント判別処理は、例えば図６のカウント判別処理（ステップＢ）と同じ内容である。
【００９４】
次に、マイコン１０は、異常確定オブジェクト２００からのカウント処理要求（ｊ）に基づき、ステップＬで、異常／正常カウント処理を実行する。ここで、図１１は、異常／正常カウンタ処理の流れをフローチャートである。
【００９５】
図１１の異常／正常カウンタ処理では、まず、Ｓ３２０で、異常履歴が有るか否かを、図示しない異常履歴フラグに基づき判定する。異常履歴フラグは、異常が検出されてからその後正常復帰するまでの間、セットされた状態となるものである。
【００９６】
Ｓ３２０で異常履歴がないと判定すると（Ｓ３２０：：ＮＯ）、そのまま当該処理を終了する。
一方、Ｓ３２０で異常履歴があると判定すると（Ｓ３２０：ＹＥＳ）、Ｓ３３０に移行し、異常個数カウンタ１５をインクリメントする。
【００９７】
次に、Ｓ３４０に進み、その異常履歴のあるダイアグ項目について、今回のトリップ期間よりも前のトリップ期間において正常復帰判断されたか否かを、図示しない正常履歴フラグに基づき判定する。この正常履歴フラグは、正常と判定されるとセットされるものである。
【００９８】
Ｓ３４０で正常復帰判断されていないと判定すると（Ｓ３４０：ＮＯ）、そのまま当該処理を終了する。
一方、Ｓ３４０で正常復帰判断されたと判定すると（Ｓ３４０：ＹＥＳ）、Ｓ３５０に移行し、正常個数カウンタ１６をインクリメントする。そしてその後、当該処理を終了する。
【００９９】
図９に戻り、このような処理（ステップＫ，Ｊ，Ｌ）をダイアグ項目のそれぞれについて繰り返し実行する。
次に、ステップＭでは、３トリップ復帰判定処理を実行する。
【０１００】
また、ステップＮでは、異常情報消去処理を実行する。尚、この異常情報消去処理は、後述するＳ４５０、Ｓ４７８に相当する。
図１２は、３トリップ復帰判定処理の流れを表すフローチャートである。
【０１０１】
図１２の３トリップ復帰判定処理では、まず、Ｓ４１０で、異常個数≦正常個数であるか否かを、異常個数カウンタ１５及び正常個数カウンタ１６に基づき判定し、異常個数≦正常個数であると判定すると（Ｓ４１０：ＹＥＳ）、Ｓ４２０に移行する。
【０１０２】
Ｓ４２０では、全体３トリップ復帰カウンタの値が０より大きいか否かを判定し、０より大きいと判定すると（Ｓ４２０：ＹＥＳ）、Ｓ４３０に移行する。
Ｓ４３０では、全体３トリップ復帰カウンタ１７をデクリメントする。
【０１０３】
次に、Ｓ４４０に進み、全体３トリップ復帰カウンタ１７が０か否かを判定し、０であると判定すると（Ｓ４４０：ＹＥＳ）、Ｓ４５０に移行する。
Ｓ４５０では、ＥＥＰＲＯＭ５０に記憶されている全てのダイアグ特定情報を消去する。そしてその後、当該処理を終了する。尚、法規によれば、例えば正常復帰判断（具体的に、異常個数≦正常個数と判断された場合であり、換言すれば、異常がすべて正常に復帰した場合）が３回続いた場合（３つのトリップ期間で判断された場合）には、ＥＥＰＲＯＭ５０の情報（本実施形態におけるダイアグ特定情報）を消去しても良いことになっており、このＳ４５０では、その法規に基づき消去するようにしているのである。一方、Ｓ４４０で全体３トリップ復帰カウンタ１７の値が０でないと判定すると（Ｓ４４０：ＮＯ）、そのまま当該処理を終了する。
【０１０４】
また、Ｓ４１０で異常個数≦正常個数でない（つまり、異常個数＞正常個数）と判定した場合（Ｓ４１０：ＮＯ）、Ｓ４２０で全体３トリップ復帰カウンタ１７の値が０より大きくない（つまり０である、Ｓ４２０：ＮＯ）と判定した場合は、Ｓ４６０に移行する。
【０１０５】
Ｓ４６０では、個別３トリップ復帰カウンタ処理を実行する。
ところで、例えばバッテリ３の接続が遮断された場合には、ＳＲＡＭ１４に記憶されている情報が消去されると共に、全体３トリップ復帰カウンタ１７もリセットされる。このような場合、以下に説明する個別３トリップ復帰カウンタ処理が実行されることとなり、これによれば、ＥＥＰＲＯＭ５０に保持されている情報を用いて、ＳＲＡＭ１４に再度ダイアグコードが記憶される。
【０１０６】
図１３は、個別３トリップ復帰カウンタ処理の流れを表すフローチャートである。
この処理では、まず、Ｓ４６２で、ｎ＝０とする。つまり、処理対象を個別３トリップ復帰カウンタ（０）にするという初期設定を行う。以下、まず、ｎ＝０の場合について説明する。
【０１０７】
次に、Ｓ４６４に進み、記憶領域（０）にダイアグ特定情報が記憶されているか否かを判定し、記憶されていないと判定すると（Ｓ４６４：ＮＯ）、Ｓ４８０に移行する。
一方、Ｓ４６４で記憶領域（０）にダイアグ特定情報が記憶されていると判定すると（Ｓ４６４：ＹＥＳ）、Ｓ４６６に移行する。
【０１０８】
Ｓ４６６では、個別３トリップ復帰カウンタ（０）の値が０か否かを判定し、０でないと判定すると（Ｓ４６６：ＮＯ）、Ｓ４７２に移行する。
一方、Ｓ４６６で個別３トリップ復帰カウンタ（０）の値が０であると判定すると（Ｓ４６６：ＹＥＳ）、Ｓ４６８に移行し、その個別３トリップ復帰カウンタ（０）を３にセットする。
【０１０９】
そして、Ｓ４７０に進み、図２のコード変換テーブルＴａに基づき、記憶領域（０）に記憶されているダイアグ特定情報からダイアグコードを抽出すると共に、その抽出したダイアグコードをＳＲＡＭ１４に記憶させる。
【０１１０】
次に、Ｓ４７２に移行し、その記憶領域（０）に記憶されているダイアグ特定情報が異常であることを表すダイアグ項目について、今回のトリップよりも前のトリップにおいて正常復帰判断されたか否かを判定し、正常復帰判断されていないと判定すると（Ｓ４７２：ＮＯ）、Ｓ４８０に移行する。
【０１１１】
一方、Ｓ４７２で正常復帰判断されたと判定すると（Ｓ４７２：ＹＥＳ）、Ｓ４７４に移行し、個別３トリップ復帰カウンタ（０）の値を１だけ減算する（デクリメントする）。
【０１１２】
次に、Ｓ４７６に移行し、個別３トリップ復帰カウンタ（０）の値が０であるか否かを判定し、０でないと判定すると（Ｓ４７６：ＮＯ）、Ｓ４８０に移行する。
一方、Ｓ４７６で個別３トリップ復帰カウンタ（０）の値が０であると判定すると（Ｓ４７６：ＹＥＳ）、Ｓ４７８に移行し、記憶領域（０）に記憶されているダイアグ特定情報を消去する。これは、前述のように、例えば正常復帰判断が３回続いた場合にＥＥＰＲＯＭ５０に記憶された情報（本実施形態におけるダイアグ特定情報）を消去しても良いという法規に倣ったものである。
【０１１３】
次に、Ｓ４８０に移行し、０に１を加算し（ｎ＋１）、新たなｎとする（ｎ←ｎ＋１）。
そして、続くＳ４８２では、Ｓ４８０で算出した新たなｎが４以上であるか否かを判定し、ｎが４未満であれば（Ｓ４８２：ＮＯ）、再び４６４に戻る。一方、Ｓ４８２でｎが４以上であれば、そのまま当該処理を終了する。つまり、記憶領域（ｎ）のそれぞれ（ｎ＝０，１，２，３）について、上記の処理（Ｓ４６４〜Ｓ４８２）を繰り返し実行する。
〈作用のタイムチャート〉
次に、図１４及び図１５を用いて、本実施形態の作用について説明する。
【０１１４】
図１４は、全体３トリップ復帰カウンタ１７の動作を説明するためのタイムチャートである。
図１４において、上段の数字（トリップ数）で区切った１つの期間がそれぞれ、１つのトリップ期間を表す。例えば、１と２との間を、最初（１番目）のトリップ期間とする。
【０１１５】
また、図１４では、水温センサ、吸気温センサ、スロットルセンサの３つのダイアグ項目について、異常／正常を表している。そして、最下段部分には、異常個数（異常個数カウンタ１５のカウント値）、正常個数（正常個数カウンタ１６のカウント値）、及び全体３トリップ復帰カウンタ１７のカウント値を示している。
【０１１６】
まず、前提を説明する。
・１番目のトリップ期間で、水温センサの異常が検出される。
・２番目のトリップ期間で、水温センサが正常復帰し、また、吸気温センサの異常が検出される。
・３番目のトリップ期間で、吸気温センサが正常復帰する。
・４番目のトリップ期間で、スロットルセンサの異常が検出される。
・５番目のトリップ期間で、スロットルセンサが正常復帰する。
【０１１７】
次に、この場合の作用について説明する。
１番目のトリップ期間で、水温センサに関する現在異常フラグは１、正常判定フラグは０となり（図５のＳ１５０）、また、ランプ点灯フラグは１となる（異常が確定）。また、異常が検出されたため、全体３トリップ復帰カウンタ１７の値は３にセットされる。
【０１１８】
２番目のトリップ期間のイニシャル時に、水温センサ異常が要因で、図１１の異常／正常カウント処理により異常個数が１増加する（Ｓ３３０）。尚、正常個数はそのままである（Ｓ３４０：ＮＯ）。この場合、異常個数（１）＞正常個数（０）であるため、Ｓ４１０で否定判定してＳ４６０に移行する。
【０１１９】
３番目のトリップ期間のイニシャル時に、吸気温センサ異常が要因で異常個数が１増加する（Ｓ３３０）。また、前回の２番目のトリップ期間で水温センサが正常復帰しているため（Ｓ３４０：：ＹＥＳ）、正常個数が１増加する（Ｓ３５０）。この場合、異常個数（２）＞正常個数（１）である。よって、Ｓ４１０：ＮＯ→Ｓ４６０となる。
【０１２０】
４番目のトリップ期間のイニシャル時は、異常個数はそのままであり、前回の３番目のトリップ期間で吸気温センサが正常復帰しているため（Ｓ３４０：ＹＥＳ）、正常個数は１増加する（Ｓ３５０）。この場合、異常個数（２）＝正常個数（２）である。よって、Ｓ４１０：ＹＥＳ→Ｓ４２０：ＹＥＳ→Ｓ４３０となり、全体３トリップ復帰カウンタ１７はデクリメントされ、その値は２となる（尚、この場合Ｓ４４０：ＮＯ）。
【０１２１】
また、４番目のトリップ期間でスロットルセンサの異常が検出されているため、全体３トリップ復帰カウンタ１７の値は再度３にセットされる。
５番目のトリップ期間のイニシャル時は、スロットルセンサの異常が要因で異常個数が１増加し（Ｓ３３０）、正常個数はそのままである（Ｓ３４０：ＮＯ）。この場合、異常個数（３）＞正常個数（２）である。
【０１２２】
６番目のトリップ期間のイニシャル時は、異常個数はそのままであり、前回の５番目のトリップ期間でスロットルセンサが正常復帰しているため（Ｓ３４０：：ＹＥＳ）、正常個数は１増加する（Ｓ３５０）。この場合、異常個数（３）＝正常個数（３）であり、全体３トリップ復帰カウンタ１７はデクリメントされる（Ｓ４３０）。
【０１２３】
その後、各トリップ期間のイニシャル時に、異常個数＝正常個数となって、全体３トリップ復帰カウンタ１７の値は１づつ小さくなり、本例では８番目のトリップ期間のイニシャル時に０となる（Ｓ４４０：ＹＥＳ）。すると、ＥＥＰＲＯＭ５０に記憶されたダイアグ特定情報が全て消去される（Ｓ４５０）。
【０１２４】
以上が全体３トリップ復帰カウンタ１７の例であるが、本実施形態の個別３トリップ復帰カウンタ１８によれば、ＥＥＰＲＯＭ５０に記憶されているダイアグ特定情報を個別に消去することもできる。
【０１２５】
図１５は、本発明の個別３トリップ復帰カウンタ１８の動作を説明するためのタイムチャートである。
図１５において、トリップ数、水温センサ、吸気温センサ、及びスロットルセンサは、図１４と同趣旨である。
【０１２６】
一方、最下段の部分には、個別３トリップ復帰カウンタ（ｎ）を３つ（ｎ＝０，１，２）示している。また、全体３トリップ復帰カウンタ１７も示している。ここでは、個別３トリップ復帰カウンタ（０）は水温センサに対応し、個別３トリップ復帰カウンタ（１）は吸気温センサに対応し、個別３トリップ復帰カウンタ（２）はスロットルセンサに対応するものとして記載している。
【０１２７】
まず、前提を説明する。
図１５の例において、１番目のトリップ期間よりも前のトリップ期間において、水温センサの異常が検出されたとする。このため、現在異常フラグは１、正常判定フラグは０、ランプ点灯フラグは１、全体３トリップ復帰カウンタ１７の値は３である。その後、２，３，４番目のトリップ期間でそれぞれ、水温センサの正常復帰判断がなされたものとする。
【０１２８】
また、１番目のトリップ期間で、ダイアグコードを消去するための消去指令が、診断ツール６（図１参照）から、エンジンＥＣＵ４に入力されたとする。
次に、この場合の作用について説明する。
【０１２９】
まず、水温センサの異常が検出されると、図６のステップＩで、水温センサの異常を表すダイアグコードがＳＲＡＭ１４に記憶される。
また、ステップＨ（特にＳ２３０）で、その水温センサの異常を表すダイアグ特定情報が、ＥＥＰＲＯＭ５０に記憶される。
【０１３０】
一方、診断ツール６からエンジンＥＣＵ４のマイコン１０に消去指令が入力されると、ＳＲＡＭ１４に記憶されたダイアグコードが消去されると共に、ランプ点灯フラグ及び現在異常フラグもリセットされる。また、全体３トリップ復帰カウンタ１７もリセットされる。尚、このように診断ツール６からの消去指令によりダイアグコードが消去される、或いは所定のフラグがリセットされる、という処理は、従来より行われている。
【０１３１】
これに対し、本実施形態によれば、ＥＥＰＲＯＭ５０の記憶領域（ｎ）にダイアグ特定情報が記憶されているため、そのダイアグ特定情報からダイアグコードを抽出して、再度ＳＲＡＭ１４にダイアグコードを記憶させておくことが可能である（Ｓ４６４〜Ｓ４７０）。つまり、ＥＥＰＲＯＭ５０は、ＳＲＡＭ１４のバックアップとしての機能を果たし、これにより、例えばＳＲＡＭ１４に記憶されたダイアグコードが意図しないで、或いは不正に消去されたような場合に対応できる。
【０１３２】
一方、本実施形態の個別３トリップ復帰カウンタ１８によれば、ダイアグ特定情報を個別に消去することができる。
まず、１番目のトリップ期間で、最初に個別３トリップ復帰カウンタ（０）の値が０と判定され（Ｓ２４４：ＹＥＳ）、次に、ＥＥＰＲＯＭ５０の記憶領域（０）にダイアグ特定情報が記憶されていると判定される（Ｓ２４６：ＹＥＳ）。
【０１３３】
すると、個別３トリップ復帰カウンタ（０）が３にセットされると共に（Ｓ２４８）、ＳＲＡＭ１４に、ダイアグ特定情報に含まれるダイアグコードが記憶される（Ｓ２５０）。
【０１３４】
そして、３番目のトリップ期間のイニシャル時には、全体３トリップ復帰カウンタ１７の値は０であるため（Ｓ４２０：ＮＯ）、Ｓ４６０の個別３トリップ復帰カウンタ処理に移行し、その処理で、前のトリップ期間（２番目のトリップ期間）で正常復帰判断されたと判定し（Ｓ４７２：ＹＥＳ）、個別３トリップ復帰カウンタ（０）の値を１だけ減算する（Ｓ４７４）。同様にして、４，５番目のトリップ期間のイニシャル時にそれぞれ、個別３トリップ復帰カウンタ（０）の値が１づつ減算され（Ｓ４７４）、５番目のトリップ期間では０となる。この場合、記憶領域（０）に記憶されたダイアグ特定情報は消去される（Ｓ４７８）。これは、前述のように、法規に倣ったものである。
【０１３５】
以上説明したように、本実施形態によれば、法規に倣いＳＲＡＭ１４のバックアップとしての機能を果たすＥＥＰＲＯＭ５０を設ける一方、そのＥＥＰＲＯＭ５０には、ダイアグコードを特定可能（ダイアグ項目を特定可能）なダイアグ特定情報を記憶させるようにしている。このため、ＥＥＰＲＯＭ５０に記憶されるダイアグ特定情報のうち、正常復帰したダイアグ項目に対応する所望のダイアグ特定情報を個々に消去することができる。
【０１３６】
ここで、本実施形態と異なり、単にダイアグコードをＥＥＰＲＯＭ５０に記憶させる形態を想定することとする。この想定で、例えばダイアグ項目Ａとダイアグ項目Ｂとでダイアグコードが共通であり、そのダイアグ項目Ａ，Ｂで共に異常が検出され、その後ダイアグ項目Ａのみが正常復帰したとする。すると、ＥＥＰＲＯＭ５０に記憶されたダイアグコードのうち、そのダイアグ項目Ａに割り当てられたダイアグコードを消去しても良いか判断できなくなってしまうことが考えられる。そのダイアグコードは、ダイアグ項目Ｂに割り当てられたものでもあるからである。或いは、ダイアグ項目Ｂが正常復帰していないにも関わらす、ダイアグ項目Ｂに割り当てられているダイアグコード（ダイアグ項目Ａと共通のダイアグコード）を消去してしまう可能性もある。前者の場合はＥＥＰＲＯＭ５０の記憶領域の有効利用を図ることができず、後者の場合は法規に違反してしまうこととなる。
【０１３７】
これに対し、本実施形態によれば、ダイアグコードを、ダイアグ項目に固有のダイアグ特定情報に変換してそのダイアグ特定情報をＥＥＰＲＯＭ５０に記憶させているため、ダイアグ項目毎にダイアグ特定情報を個々に消去できるようになる。従って、ＥＥＰＲＯＭ５０の有効利用を図ることができると共に、法規に違反することのない機能が得られることとなる。
【０１３８】
尚、本実施形態において、異常検出オブジェクト１００が異常検出手段に相当し、Ｓ２３０の処理が異常記憶手段に相当し、Ｓ４７８の処理が消去手段に相当し、個別３トリップ復帰カウンタが請求項３のカウンタに相当し、コード変換テーブルＴａが対応情報記憶手段に相当している。
【０１３９】
ところで、本実施形態では、以下のような参考形態が考えられる。
［参考形態］
図１６は、参考形態として、リプログラム時の動作を表す図面である。
【０１４０】
リプログラムとは、エンジンＥＣＵ４がツール（例えば診断ツール６や図示しない書換ツール）と通信を行って、プログラムの書き換え（リプログラム）を行うものである。以下、ツールが診断ツール６であるとして説明する。また、前処理とは、エンジンＥＣＵ４のマイコン１０がリプログラム前に実行する処理であり、後処理とは、そのマイコン１０がリプログラム後に実行する処理である。
【０１４１】
そして、図１６（ａ）は、前処理及び後処理の流れを表すフローチャートであり、図１６（ｂ）は、前処理、リプログラム、及び後処理の関係を模式的に表す図面である。
図１６（ａ）に示すように、前処理では、まず、Ｓ５１０で、診断ツール６からダイアグコードを要求する要求指令が入力されたか否かを判定し、入力されていないと判定すると（Ｓ５１０：ＮＯ）、そのまま当該処理を終了する。
【０１４２】
一方、Ｓ５１０で要求指令が入力されたと判定すると（Ｓ５１０：ＹＥＳ）、Ｓ５２０に移行し、ＳＲＡＭ１４に記憶されているダイアグコードを診断ツール６に出力し、或いはＳＲＡＭ１４の情報が消去されている場合にはＥＥＰＲＯＭ５０に記憶されているダイアグ特定情報からダイアグコードを抽出してそのダイアグコードを診断ツール６に出力すると共に、ＥＥＰＲＯＭ５０に記憶されているダイアグ特定情報を、他のＥＣＵ（例えば、トランスミッションＥＣＵ５）に送信する。この場合、他のＥＣＵとしてのトランスミッションＥＣＵ５が備える例えばＥＥＰＲＯＭに、エンジンＥＣＵ４からのダイアグ特定情報が記憶されるようにすれば良い。そしてその後、当該処理を終了する。
【０１４３】
リプログラムが実行されると、そのリプログラムにより、エンジンＥＣＵ４のＥＥＰＲＯＭ５０、及びマイコン１０のＳＲＡＭ１４の記憶内容はクリアされる。
リプログラム後の後処理では、まず、Ｓ５５０で、Ｓ５２０で他のＥＣＵへ送信したダイアグ特定情報を、その送信先のＥＣＵから受信したか否かを判定し、受信していないと判定すると（Ｓ５５０：ＮＯ）、そのまま当該処理を終了する。尚、例えばマイコン１０が、他のＥＣＵに、ダイアグ特定情報の返信要求を出す。
【０１４４】
一方、Ｓ５５０でダイアグ特定情報を受信したと判定すると（Ｓ５５０：ＹＥＳ）、Ｓ５６０に移行する。尚、この際、その受信したダイアグ特定情報は、エンジンＥＣＵ４のＥＥＰＲＯＭ５０に記憶される。
【０１４５】
Ｓ５６０では、ＥＥＰＲＯＭ５０に記憶されたダイアグ特定情報からダイアグコードを抽出し、そのダイアグコードをＳＲＡＭ１４に再度記憶させる。
尚、Ｓ５２０において、ダイアグ特定情報の送信先は、診断ツール６であってもよい。
【０１４６】
この点について図１６（ｂ）を用いて説明する。
診断ツール６からエンジンＥＣＵ４に要求指令が出力されると（Ｓ５１０：ＹＥＳ）、エンジンＥＣＵ４は、ダイアグ特定情報を診断ツール６に送信する（Ｓ５２０）。
【０１４７】
リプログラムが実行された後、診断ツール６は、エンジンＥＣＵ４にダイアグ特定情報を返信する）。エンジンＥＣＵ４は、診断ツール６からのダイアグ特定情報を受信して（Ｓ５５０：ＹＥＳ）、ダイアグ特定情報をＥＥＰＲＯＭ５０に記憶すると共に、そのダイアグ特定情報が表すダイアグコードを、ＳＲＡＭ１４に記憶させる（Ｓ５６０）。
【０１４８】
尚、本参考形態において、エンジンＥＣＵ４が診断ツール６にダイアグコードを出力する処理（例えばＳ５２０の処理）が、コード出力手段に相当している。
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術範囲内において種々の形態をとることができる。
【０１４９】
例えば、上記実施形態において、ダイアグ項目を特定するための情報の例としてインデックス、静的ＩＤ、及びＲＡＭアドレスについて説明したが、ダイアグ項目を特定できる情報であれば、どのような情報を用いてもよい。
【０１５０】
また、上記実施形態において、コード変換テーブルＴａに代えて、ダイアグコードをダイアグ特定情報に変換するための所定の計算式を記憶しておき、マイコン１０がその計算式に従ってダイアグ特定情報を作成するようにしても良い。
【０１５１】
また、不揮発性メモリとしてのＥＥＰＲＯＭ５０が複数設けられている場合でも、本発明を適用することができる。
また、上記実施形態では、全体３トリップ復帰カウンタ１７、及び個別３トリップ復帰カウンタ１８は、異常が生じると３にセットされるようになっているが、例えば４以上の値にセットされるようにしても良い。つまり、全体３トリップ復帰カウンタ１７を用いた例で、異常個数≦正常個数の状態が４回以上連続で続いた場合にＥＥＰＲＯＭ５０の情報を全て消去する構成でもよい。また、個別３トリップ復帰カウンタ１８を用いた例で、異常が生じたダイアグ項目について、４回以上連続で正常復帰判断がなされた場合に、そのダイアグ項目についてＥＥＰＲＯＭ５０に記憶されたダイアグ特定情報を消去する構成でもよい。
【図面の簡単な説明】
【０１５２】
【図１】車両ネットワークシステムの構成図である。
【図２】ダイアグ特定情報についての説明図である。
【図３】異常診断プログラムの構造を説明する図面である。
【図４】異常検出オブジェクト１００を説明する図面である。
【図５】異常検出プログラム部１１４に格納されるプログラムにより実現される処理を表すフローチャートである。
【図６】ＭＩＬ点灯処理を示すＭＳＣである。
【図７】ダイアグ情報操作処理を表すフローチャートである。
【図８】個別３トリップ復帰カウンタ処理を表すフローチャートである。
【図９】トリップ期間のイニシャル時の処理を示すＭＳＣである。
【図１０】カウンタリセット処理を表すフローチャートである。
【図１１】異常／正常カウント処理を表すフローチャートである。
【図１２】３トリップ復帰判定処理を表すフローチャートである。
【図１３】個別３トリップ復帰カウンタ処理を表すフローチャートである。
【図１４】全体３トリップ復帰カウンタの動作を説明するタイムチャートである。
【図１５】個別３トリップ復帰カウンタの動作を説明するタイムチャートである。
【図１６】参考形態の説明図である。
【符号の説明】
【０１５３】
１…車両ネットワークシステム、２…ＣＡＮバス、３…バッテリ、６…診断ツール、９…バス、１０…マイコン、１１…ＣＰＵ、１２…ＲＯＭ、１３…ＲＡＭ、１４…ＳＲＡＭ、１５…異常個数カウンタ、１６…正常個数カウンタ、１７…全体３トリップ復帰カウンタ、１８…個別３トリップ復帰カウンタ、２０…電源回路、３０…通信回路、４０…入出力回路、５０…ＥＥＰＲＯＭ、１００…異常検出オブジェクト、１１２…フラグ格納部、１１４…異常検出プログラム部、１１６…異常情報テーブル、２００…異常確定オブジェクト、３００…異常時処理オブジェクト、４００…異常コード格納オブジェクト、Ｐｒ…異常診断プログラム、Ｔａ…コード変換テーブル。
【図１】
2008201160.tif 000003
【図２】
2008201160.tif 000004
【図３】
2008201160.tif 000005
【図４】
2008201160.tif 000006
【図５】
2008201160.tif 000007
【図６】
2008201160.tif 000008
【図７】
2008201160.tif 000009
【図８】
2008201160.tif 000010
【図９】
2008201160.tif 000011
【図１０】
2008201160.tif 000012
【図１１】
2008201160.tif 000013
【図１２】
2008201160.tif 000014
【図１３】
2008201160.tif 000015
【図１４】
2008201160.tif 000016
【図１５】
2008201160.tif 000017
【図１６】
2008201160.tif 000018