(57)【要約】【課題】プログラム異常が検出された場合にも、可能な限り通常通りの車両制御が可能となるようなフェールセーフ処理を実現することを目的とする。【解決手段】アクセル開度を演算するための、同一演算内容の２つのプログラムが設けられている。アクセル開度演算の実行時は、これら２つのプログラムをそれぞれ実行し（Ｓ１２０，Ｓ１３０）、各プログラムの演算結果ＡＣＣＰ１及びＡＣＣＰ２が一致するか否か判断する（Ｓ１４０）。一致した場合は、両プログラムが共に正常であるためＡＣＣＰ１を実アクセル開度ＡＣＣＰ０として有効化するが（Ｓ１５０）、一致しなかった場合は（Ｓ１４０：ＮＯ）、処理１プログラムについてチェックサム方式によるチェックを行う（Ｓ１６０，Ｓ１７０）。その結果、正常であったならば処理１プログラムの演算結果ＡＣＣＰ１を有効化し（Ｓ１９０）、異常であったならば、処理２プログラムの演算結果ＡＣＣＰ２を有効化する（Ｓ２１０）。【選択図】　図３
2004019457.tif 000002
【特許請求の範囲】
【請求項１】
車両制御に必要な所定の演算を行うためのプログラムであって演算内容が同一である２つのプログラムが、前記演算毎に記憶媒体に記憶されており、
前記演算を実行する際、該演算に対応した前記２つのプログラムをそれぞれ実行するプログラム実行手段と、
該プログラム実行手段により得られた前記各プログラムの演算結果が一致するか否かを判断する演算結果判定手段と、
該演算結果判定手段により一致すると判断されたときに、該判断された演算結果を有効化する演算結果有効化手段と、
を備えた車両用電子制御装置において、
前記演算結果判定手段にて一致しないと判断されたときに、前記２つのプログラムの一方について正常であるか否か判断するプログラム判定手段
を備え、
前記演算結果有効化手段は、
前記プログラム判定手段にて前記一方のプログラムが正常と判断された場合は、該一方のプログラムによる演算結果を有効化し、前記プログラム判定手段にて前記一方のプログラムが異常と判断された場合は、他方のプログラムによる演算結果を有効化する
ことを特徴とする車両用電子制御装置。
【請求項２】
前記プログラム判定手段は、前記一方のプログラムが異常であると判断したとき、更に、前記他方のプログラムについても正常か否か判断し、
前記演算結果有効化手段は、前記プログラム判定手段にて前記他方のプログラムが正常と判断された場合に、該他方のプログラムによる演算結果を有効化する
ことを特徴とする請求項１記載の車両用電子制御装置。
【請求項３】
前記プログラム実行手段は、前記プログラム判定手段にて前記一方のプログラムが正常と判断された場合、その後は該一方のプログラムのみを実行し、前記プログラム判定手段にて前記一方のプログラムが異常と判断された場合、その後は前記他方のプログラムのみを実行して、
前記演算結果有効化手段は、前記プログラム実行手段により実行されたプログラムの演算結果を有効化する
ことを特徴とする請求項１記載の車両用電子制御装置。
【請求項４】
前記演算結果有効化手段は、前記プログラム判定手段による判断の実行中は、該判断対象のプログラムに対応して予め設定されたデフォルト演算値を前記演算結果として有効化する
ことを特徴とする請求項１〜３いずれかに記載の車両用電子制御装置。
【請求項５】
前記プログラムは、車両の内燃機関の動作を制御するのに必要な所定の演算を行うためのものであり、
前記車両の走行中に前記プログラム判定手段による判断が実行される場合、前記デフォルト演算値は、前記車両が、前記プログラム判定手段による判断の実行直前の走行速度より低速で走行するように前記内燃機関が制御される値である
ことを特徴とする請求項４記載の車両用電子制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演算内容が同一である２つのプログラムをそれぞれ実行して、両者の演算結果が一致したときにその演算結果を有効化する車両用電子制御装置に関する。
【０００２】
【従来の技術】
従来より、車両において各種車載機器を制御するために、マイクロコンピュータ（以下「マイコン」と略す）を用いた制御処理がなされている。マイコンによる制御は、ＲＯＭやフラッシュメモリ等の記憶媒体に予め記憶されたプログラムに従って行われるものである。
【０００３】
ところで、ＲＯＭ等の記憶媒体に記憶される各種プログラムや制御パラメータ等にデータ化け等の異常が生じると、異常プログラム或いは異常パラメータに基づいた演算・制御がなされて正常な動作が行われなくなり、車両走行に支障を来すおそれがある。そのため、記憶媒体に記憶中のプログラムに異常が生じた場合にそれを迅速に検出して、異常に対する何らかの措置を採る必要がある。
【０００４】
プログラムの異常を検出する方法としては、例えば特表平１０−５０７８０５号公報に開示された方法が知られている。これは、各演算毎にプログラムをただ一つ設けてそれを実行するといったごく一般的な方法ではなく、ある演算に対応したプログラムを２つ（つまり同一演算を行う２つのプログラムを）別々の領域に設けて、各々の演算結果を比較し、一致した場合は正常であるとしてその演算結果を有効化するが、不一致の場合はプログラム異常と判断するのである。
【０００５】
そして、プログラム異常と判断された場合、従来は、マイコンにリセットをかけるか、或いは出力制限（例えば車載機器の動作を制限又は停止）するといったフェールセーフ処理を実施するようにしている。
このように、演算内容が同一のプログラムを２つ設けて両者の演算結果を比較することで異常検出を行う方法は、特に、例えば燃料噴射量算出，燃料噴射時期算出，アクセル開度算出などの、車両のエンジン制御を行う上で十分な信頼性が要求されるデータを演算するプログラム（以下これを「クリティカル領域のプログラム」ともいう）に対してなされているのが一般的である。
【０００６】
つまり、エンジンを制御する上で非常に重要なクリティカル領域のプログラムについては、同一プログラムを２つ設けて両者の演算結果を比較することで常にプログラムの異常検出を行い、データ（演算結果）の信頼性を高めているのである。
【０００７】
【発明が解決しようとする課題】
しかしながら、上記公報に開示された方法では、データの信頼性は向上するものの、演算結果不一致によりプログラム異常と判定されると、マイコンのリセット或いは出力制限といったフェールセーフ処理をかけるため、車両の通常走行が困難になる可能性がある。
【０００８】
即ち、例えば上記クリティカル領域のプログラムについて異常が検出されてマイコンリセット或いは出力制限がかかると、車両走行が停止する方向にフェールセーフがかかる（例えば速度制限或いはエンジン停止等）ことになるため、通常走行ができなくなるのである。
【０００９】
一方、例えばトラック等の商用車（特にディーゼルエンジン車）では、たとえプログラムに異常が生じても、最低限の安全を確保した上で可能な限り通常走行させたいというニーズがあり、上記のようなフェールセーフ処理は商用車系のニーズには沿わない。そのため、プログラム異常が検出された後も、できる限り通常通りの走行が可能となるようなフェールセーフ処理の実施が望まれていた。
【００１０】
本発明は上記課題に鑑みなされたものであり、プログラム異常が検出された場合にも、可能な限り通常通りの車両制御が可能となるようなフェールセーフ処理を実現することを目的とする。
【００１１】
【課題を解決するための手段及び発明の効果】
上記課題を解決するためになされた請求項１記載の車両用電子制御装置は、車両制御に必要な所定の演算を行うためのプログラムであって演算内容が同一である２つのプログラムが、演算毎に記憶媒体に記憶されており、演算を実行する際、プログラム実行手段が、実行しようとする演算に対応した２つのプログラム（演算内容が同一）をそれぞれ実行し、演算結果判定手段が、プログラム実行手段により得られた各プログラムの演算結果が一致するか否かを判断して、演算結果が一致すると判断したとき、演算結果有効化手段がその演算結果を有効化する。
【００１２】
そして、本発明では、演算結果判定手段にて一致しないと判断されたとき、プログラム判定手段が、２つのプログラムのうち一方について正常であるか否かを判断し、演算結果有効化手段は、プログラム判定手段にてその一方のプログラムが正常と判断された場合はそのプログラムによる演算結果を有効化し、プログラム判定手段にてその一方のプログラムが異常と判断された場合は、他方のプログラムによる演算結果を有効化する。
【００１３】
即ち、２つのプログラムの演算結果が一致しなかった場合は、いずれか一方のプログラムについて正常か否かの判断を行い、正常であればそのプログラムによる演算結果も正常であるものとして有効化するが、逆に異常であれば、そのプログラムとは別の他方のプログラムは正常であってそれによる演算結果も正常であるものとみなして、その他方のプログラムによる演算結果を有効化するのである。
【００１４】
尚、プログラム判定手段によるプログラムの具体的判断方法は、例えば判断対象のプログラム全体のチェックサム値を求め、予め記憶していたチェックサム値（正常値）と比較して、チェックサム値が一致したならばそのプログラムは正常であると判断する、といった方法を採ることができる。ただし、上記のようなチェックサム方式に限定されることはなく、プログラムが正常か否かを判断できる限り種々の方法を採用できることはいうまでもない。
【００１５】
従って、請求項１記載の発明によれば、２つのプログラムの演算結果が不一致であっても、どちらのプログラムが正常であるか否かを判断し、正常なプログラムによる演算結果を有効化するため、その演算結果を用いて車両制御を通常通り行うことができる。つまり、いずれか一方のプログラムの異常が検出されても他の正常なプログラムによって通常走行を可能とするようなフェールセーフ処理が実現できるのである。
【００１６】
ここで、請求項１記載の発明では、上記のように、プログラム判定手段により異常と判断された場合にその異常判断されたプログラムとは別のもう一つのプログラムについては正常であるものとみなしている。しかし、２つのプログラムがいずれも異常となったことによって演算結果が不一致となる場合も起こりうるため、一方が異常と判断されたことのみをもって無条件に他方のプログラムは正常であるものとみなすようにすると、車両制御を正常に行われなくなるおそれがある。
【００１７】
そこで、例えば請求項２に記載のように、プログラム判定手段は、一方のプログラムが異常であると判断したとき、更に、他方のプログラムについても正常か否か判断し、演算結果有効化手段は、その他方のプログラムが正常と判断された場合にそのプログラムによる演算結果を有効化するようにするとよい。
【００１８】
つまり、一方のプログラムが異常であった場合は、他方のプログラムについても正常か否か判断し、正常と判断されたときにはじめて、そのプログラムの正常性がより確かなものとなるため、そのプログラムの演算結果も正常であるとして有効化するのである。
【００１９】
そのため、請求項１記載の発明よりも更に信頼性の高いフェールセーフ処理、延いてはより信頼性の高い車両制御の実現が可能となり、プログラム異常時の車両の通常走行をより安全に行うことが可能となる。
また、車両制御において各種演算が行われる中で、ある所定の演算実行時に、その演算に対応した２つのプログラムの演算結果が不一致となったことによりプログラム判定手段による判断が行われた場合、以後再びその演算が実行される際も、当然ながら２つのプログラムの演算結果が不一致となることが予想される。
【００２０】
その際（つまり演算結果が不一致と判断された以後）、再びその演算を実行する度に２つのプログラムを共に実行してその演算結果を比較し、不一致ならばプログラム判定手段による判断を行うといった、一連の処理を繰り返してもいいのだが、上記のように一旦プログラムに異常が生じて演算結果が不一致となると、プログラム修正等の何らかの改善策を施さない限り、以後も引き続きその演算については演算結果が不一致となるのは当然に予想されることである。
【００２１】
そこで、例えば請求項３に記載のように、プログラム実行手段は、プログラム判定手段にて一方のプログラムが正常と判断された場合、その後は該一方のプログラムのみを実行し、プログラム判定手段にて一方のプログラムが異常と判断された場合、その後はその他方のプログラムのみを実行して、演算結果有効化手段は、プログラム実行手段により実行されたいずれか一つのプログラムの演算結果をそのまま有効化するようにするとよい。
【００２２】
つまり、ある演算に対応した２つのプログラムのいずれか一方に異常が生じた場合に、以後その演算を実行する際は、異常と判断されたプログラムは実行せず、正常なプログラムのみを実行するのである。そのため、請求項１又は２記載のように、２つのプログラムの演算結果を比較するといったことは行わず、演算結果有効化手段は、プログラム実行手段にて実行された一つのプログラムの演算結果をそのまま有効化するのである。
【００２３】
このように、一旦プログラム異常が検出された以後は正常なプログラムのみを実行することにより、プログラム異常検出時の車両制御（フェールセーフ処理）をより効率的に行うことが可能となる。
尚この場合も、一方のプログラムが異常と判断されたときにそのまま他方のプログラムは正常であるものとみなすのではなく、請求項２に記載したように、他方のプログラムについても正常か否かを判断して、正常であると判断された場合に、以後のその演算実行時にその正常判断された他方のプログラムを実行するようにしてもよい。
【００２４】
更にその場合、再びその演算が実行される毎に、その演算に対応したいずれかのプログラム（正常判断されたもの）をそのまま実行してもよいのだが、時間経過に伴って何らかの要因でその正常プログラムまでが異常となってしまう可能性もある。そのため、請求項３記載の発明において、プログラム実行手段がいずれかのプログラムを実行する度に、そのプログラムが正常であるか否かの判断を実行するようにしてもよい。このようにすれば、プログラム異常時の車両制御（フェールセーフ処理）の信頼性をより向上できる。
【００２５】
ところで、プログラム判定手段によるプログラムの正常か否かの判断は、例えばプログラム全体のチェックサム値に基づいて行うことができることは既に述べた通りだが、プログラムが正常か否かの判断に長時間を要してしまうと、その判断中は車両制御が正常に行われなくなるおそれがある。
【００２６】
具体的には、例えば燃料噴射量を演算する場合において、その演算に対応した２つのプログラムの演算結果が一致しなかった場合、プログラム判定手段による判断が行われるわけだが、その判断中に、前回演算実行時の演算結果（燃料噴射量）がそのまま有効化されたままだと、引き続きその前回の演算結果に応じた燃料噴射が継続され、結果としてユーザの意図に反した車両制御（ここでは燃料噴射量制御）が行われてしまうことになる。
【００２７】
そこで、例えば請求項４に記載のように、演算結果有効化手段は、プログラム判定手段による判断の実行中は、該判断対象のプログラムに対応して予め設定されたデフォルト演算値を演算結果として有効化するとよい。
また、上記例示した燃料噴射量制御のように、プログラム判定手段にて判断されるプログラムが車両の内燃機関の動作を制御するのに必要な所定の演算を行うためのプログラムであって、車両の走行中にプログラム判断が実行される場合、上記デフォルト演算値は、例えば請求項５に記載のように、プログラム判定手段による判断の実行直前の走行速度より低速で車両が走行するように内燃機関が制御される値であるとよい。
【００２８】
尚、これにより、プログラム判断中はユーザの意図に反して車両速度が低速化することになるが、デフォルト演算値が有効化されるのはあくまでもプログラム判定手段による判断実行中であって、判断終了後は、正常と判断されたプログラムの演算結果が有効化されるため、実用上支障が生じるものではない。逆に言えば、車両走行の安全性を考慮しつつ、且つ走行上明らかに支障が出る（例えば急激に減速する等）ことがないようなデフォルト演算値に設定する必要はある。
【００２９】
【発明の実施の形態】
以下に、本発明の好適な実施形態を図面に基づいて説明する。
［第１実施形態］
図１は、本実施形態の燃料噴射制御システムの概略構成を示す説明図である。本実施形態の燃料噴射制御システムは、内燃機関としてディーゼルエンジンを搭載した車両に設けられ、ディーゼルエンジンの各気筒（図示略）に燃料を噴射供給するためのものである。
【００３０】
図１に示す如く、車両の運転者がアクセルペダル２０を踏み込むと、その踏み込み量をアクセルセンサ２１が検出して、踏み込み量に応じたアナログ電圧値をエンジン制御ＥＣＵ１０へ出力する。エンジン制御ＥＣＵ１０は、外部から入力される各種アナログ量をデジタルデータに変換（Ａ／Ｄ変換）してマイコン１１へ出力するアナログ入力回路１３と、外部から入力される各種デジタルデータをマイコン１１へ出力するデジタル入力回路１４と、これら各回路１３，１４からの入力に基づいて各種制御・演算を実行するマイコン１１と、マイコン１１にて実行される制御・演算処理のプログラムやパラメータ等が記憶されたフラッシュメモリ１２と、マイコン１１による制御・演算結果に基づいて図示しない各種アクチュエータを動作させるための信号を出力する出力回路１５と、により構成される。
【００３１】
アナログ入力回路１３には、アナログ入力値として上記のアクセル踏み込み量に応じた電圧値の他、吸入空気量や冷却水温などの各種アナログ量が入力され、デジタル入力回路１４には、エンジン回転速度やスタータ信号或いは車速信号などの各種デジタルデータが入力される。これらの各種アナログ量及びデジタルデータに基づいて、マイコン１１は最適な燃料噴射量や燃料噴射時期などを演算し、その演算結果に基づいた出力信号が出力回路１５から各種アクチュエータ（インジェクタなど）へ出力される。
【００３２】
尚、燃料噴射量や燃料噴射時期などを演算するにあたっては、アクセルペダル２０の踏み込み量（以下単に「アクセル開度」ともいう）も必要となるため、マイコン１１では、後述するようにアクセルセンサ２１からの出力電圧に基づいてアクセル開度を算出する演算処理も行われる。
【００３３】
マイコン１１は、ＣＰＵ３１、ＲＯＭ３２、ＲＡＭ３３、Ｉ／Ｏ３４を備えた周知の構成のものであり、ＲＯＭ３２或いはフラッシュメモリ１２に格納された各種プログラムをＣＰＵ３１が実行する。本実施形態では、燃料噴射量，燃料噴射時期及びアクセル開度を演算するための各プログラムが、クリティカル領域のプログラムとしていずれもフラッシュメモリ１２に格納されている。
【００３４】
図２に、本実施形態のエンジン制御ＥＣＵ１０におけるメモリマップを示す。図示の如く、フラッシュメモリ１２のメモリ領域にはクリティカル領域が設定され、そのクリティカル領域において、アクセル開度を算出するためのプログラムが格納されている。より具体的には、演算内容が全く同一のプログラムが２つ（アクセル開度算出処理１プログラム及びアクセル開度算出処理２プログラム）、格納されている。
【００３５】
また、ＲＡＭ３３のメモリ領域には、アクセル開度算出処理１プログラム（以下「処理１プログラム」と略す）の実行結果（演算結果）であるＡＣＣＰ１を一時的に記憶する領域と、アクセル開度算出処理２プログラム（以下「処理２プログラム」と略す）の実行結果（演算結果）であるＡＣＣＰ２を一時的に記憶する領域とが設けられている。また、ＡＣＣＰ１又はＡＣＣＰ２のいずれかを実アクセル開度ＡＣＣＰ０としてそのまま設定（記憶）するための領域も設けられており、他のプログラムがその実行過程でアクセル開度を用いる際は、このＡＣＣＰ０のデータを用いることになる。
【００３６】
即ち、本実施形態では、アクセル開度を算出する演算処理実行時に、まず処理１プログラム及び処理２プログラムの２つのプログラムを共に実行して、各プログラムの演算結果ＡＣＣＰ１及びＡＣＣＰ２をそれぞれＲＡＭ３３に記憶する。そして、ＡＣＣＰ１とＡＣＣＰ２とを比較し、両者が一致したときに、両者はいずれも正常な演算結果（換言すれば各プログラムはいずれも正常）として、その演算結果を実アクセル開度ＡＣＣＰ０として記憶することにより有効化する。その詳細については後述する。
【００３７】
このように、同じ演算（上記例ではアクセル開度算出）を行うプログラムを２つ設け、各プログラムを実行させて演算結果が一致した場合にそれを正しい演算結果として有効化するようにしているのは、従来技術の説明においても述べた通り、このアクセル開度を用いた制御・演算処理の信頼性を向上させ、延いてはエンジン制御全体の信頼性を向上させるためである。なお、燃料噴射量を演算するプログラム、及び、燃料噴射時期を演算するプログラムについても、図２では図示しなかったものの、アクセル開度算出処理プログラムと同様、クリティカル領域のプログラムとしてそれぞれ同一演算を行うプログラムが２つ、フラッシュメモリ１２に格納されている。
【００３８】
また本実施形態では、アクセル開度として、上記のようにアクセルセンサ２１にて検出されたアクセル開度をそのまま用いずに、それを基に演算により実アクセル開度を算出するようにしているが、この主な目的は、アクセル開度が急激に変化した場合にそれをダイレクトに制御（アクセル開度を用いる制御）に反映させないようにするためである。
【００３９】
即ち、例えば運転者による急激なアクセル踏み込みや外部ノイズ等の何らかの要因によって、アクセルセンサ２１からの出力電圧が急激に変化した場合、その変化をそのままアクセル開度の変化として制御に取り込むと、車両走行に支障（例えば急加速による車輪空転など）が生じるおそれがある。
【００４０】
そのため、アクセルセンサ２１からの出力電圧値をダイレクトに用いるのではなく、急激な変化が起こってもそれをなまして滑らかに変化させるような処理（なまし処理）を施している。即ち、処理１プログラム及び処理２プログラムが、このなまし処理を実行するものであり、アクセルセンサ２１による検出信号をこれら各プログラムによりなまし処理してそれぞれアクセル開度ＡＣＣＰ１，ＡＣＣＰ２を算出する。そして、そのなまし処理後のＡＣＣＰ１又はＡＣＣＰ２を実アクセル開度ＡＣＣＰ０として有効化するようにしている。
【００４１】
上記のように構成された本実施形態の燃料噴射制御システムにおいて、フラッシュメモリ１２に格納された処理１・処理２プログラムを実行していずれか一方の演算結果を実アクセル開度として有効化するために、マイコン１１にて実行されるアクセル開度演算有効化処理について、図３に基づいて説明する。図３は、マイコン１１内のＣＰＵ３１にて実行されるアクセル開度演算有効化処理を表すフローチャートである。マイコン１１では、ＣＰＵ３１がＲＯＭ３２からアクセル開度演算有効化処理プログラムを読み出し、このプログラムに従って処理を実行する。このアクセル開度演算有効化処理は、図示しない車両のイグニションスイッチのオン後、所定の周期（例えば８ｍｓｅｃ．毎）で継続して行われるものである。
【００４２】
この処理が開始されると、まずステップ（以下「Ｓ」と略す）１１０にて、処理１プログラム及び処理２プログラムがいずれも正常であるか否か判断される。この判断は、各プログラムについての異常フラグ（後述するＳ１８０，Ｓ２００でセットされる）に基づいて行われるものであり、最初のＳ１１０実行時には当然ながらまだいずれの異常フラグもセットされていないため、各プログラム共に正常であるものとしてＳ１２０に移行する。
【００４３】
Ｓ１２０では、フラッシュメモリ１２においてクリティカル領域のプログラムとして格納されている処理１プログラム（図２参照）を実行して、アクセル開度ＡＣＣＰ１を算出し、ＲＡＭ３３における所定の領域（ＡＣＣＰ１記憶領域）に記憶する。続くＳ１３０では、同じくフラッシュメモリ１２においてクリティカル領域のプログラムとして格納されている、処理２プログラム（図２参照）を実行して、アクセル開度ＡＣＣＰ２を算出し、ＲＡＭ３３における所定の領域（ＡＣＣＰ２記憶領域）に記憶する。
【００４４】
そして、Ｓ１４０にて、処理１プログラム及び処理２プログラムの２つのプログラムの演算結果（つまりＡＣＣＰ１及びＡＣＣＰ２）を比較して、両者が一致するか否かを判断する。両者が一致すれば、２つのプログラムは正常であるものと判断できるため、Ｓ１５０に進み、ＡＣＣＰ１のデータを実アクセル開度ＡＣＣＰ０としてＡＣＣＰ０記憶領域に記憶（つまり有効化）し、一旦この処理を終了する。以後、アクセル開度を必要とする他の処理の実行にあたっては、この実アクセル開度ＡＣＣＰ０が用いられることになる。
【００４５】
一方、例えばデータ化け等の何らかの異常が生じて処理１プログラム又は処理２プログラムのいずれか一方に異常が生じた場合は、これら２つの演算結果も異なったものとなるため、Ｓ１４０にて否定判定されてＳ１６０に進む。Ｓ１６０では、処理１プログラムが格納された領域についてチェックサム値を算出し、続くＳ１７０にて、その算出したチェックサム値が予め記憶されたチェックサム値（処理１プログラム領域に対応したチェックサム値の正常値）と一致するか否かを判断する。
【００４６】
ここで一致した場合は、処理１プログラムは正常であって処理２プログラムが異常であると判断し、Ｓ１８０に進んで処理２プログラムについての異常フラグをセットする。そしてＳ１９０にて、Ｓ１５０と全く同様、ＡＣＣＰ１（つまり正常と判断された処理１プログラムの演算結果）を実アクセル開度ＡＣＣＰ０として記憶し、一旦この処理を終了する。
【００４７】
Ｓ１７０にてチェックサムが一致しないと判断された場合は、処理１プログラムが異常であると判断すると共に、他方の処理２プログラムは正常であるものとみなして、Ｓ２００にて処理１プログラムについての異常フラグをセットする。そしてＳ２１０にて、ＡＣＣＰ２（つまり正常とみなした処理２プログラムの演算結果）を実アクセル開度ＡＣＣＰ０として記憶し、一旦この処理を終了する。
【００４８】
そして、上記周期（本実施形態では８ｍｓｅｃ．）で本アクセル開度演算有効化処理が実行されることにより再びＳ１１０の処理が実行されたとき、処理１プログラム及び処理２プログラムがいずれも正常であればＳ１２０以降の処理が繰り返されることになるが、Ｓ１８０又はＳ２００によりいずれか一方のプログラムが異常と判断されて異常フラグがセットされている場合は、Ｓ１１０で否定判定されてＳ２２０に進む。
【００４９】
Ｓ２２０では、２つのプログラムのどちらが正常（或いは異常）であるかを知るために、処理２プログラムについて異常フラグがセットされているか否かを判断する。そして、Ｓ１８０にて処理２プログラムに対する異常フラグがセットされているならば、Ｓ２２０で肯定判定されてＳ２３０に移行し、処理１プログラムを実行してその演算結果ＡＣＣＰ１をＲＡＭ３３における所定の記憶領域に記憶する。尚、このＳ２３０の処理（処理１プログラムの実行）はＳ１２０と全く同様である。そして、続くＳ２４０にて、Ｓ１５０と全く同様にＡＣＣＰ１のデータを実アクセル開度ＡＣＣＰ０としてＡＣＣＰ０記憶領域に記憶し、一旦この処理を終了する。
【００５０】
一方、Ｓ２００にて処理１プログラムに対する異常フラグがセットされているならば、Ｓ２２０で否定判定されてＳ２５０に移行し、処理２プログラムを実行してその演算結果ＡＣＣＰ２をＲＡＭ３３における所定の記憶領域に記憶する。尚、このＳ２５０の処理（処理２プログラムの実行）はＳ１３０と全く同様である。そして、続くＳ２６０にて、Ｓ２１０と全く同様にＡＣＣＰ２のデータを実アクセル開度ＡＣＣＰ０としてＡＣＣＰ０記憶領域に記憶し、一旦この処理を終了する。
【００５１】
以上詳述したように、本実施形態の燃料噴射制御システムでは、アクセル開度を演算するための２つのプログラムの演算結果が一致しなかった場合、いずれか一方のプログラムについてチェックサム方式によるプログラムチェックを行って、正常であればそのプログラムによる演算結果を実アクセル開度ＡＣＣＰ０として有効化し、異常であれば他方のプログラムは正常であるものとみなしてその演算結果を有効化する。
【００５２】
そのため、２つのプログラムのどちらかにデータ化け等の異常が生じてしまっても、他方の正常なプログラムによる演算結果を用いて車両制御を通常通り行うことができる。つまり、いずれか一方のプログラムの異常が検出されても他の正常なプログラムによって通常走行を可能とするようなフェールセーフ処理が実現できるのである。
【００５３】
しかも、一旦プログラム異常が検出された以後は、２つのプログラムを共に実行してその演算結果を比較することはせず、正常なプログラムのみを実行（Ｓ２２０以降の処理を実行）するため、上記フェールセーフ処理をより効率的に行うことができる。
【００５４】
ここで、本実施形態の構成要素と本発明の構成要素の対応関係を明らかにする。本実施形態において、フラッシュメモリ１２は本発明の記憶媒体に相当する。また、図３のアクセル開度演算有効化処理において、Ｓ１２０，Ｓ１３０の各処理はいずれも本発明のプログラム実行手段が実行する処理に相当し、Ｓ１４０の処理は本発明の演算結果判定手段が実行する処理に相当し、Ｓ１６０，Ｓ１７０の各処理はいずれも本発明のプログラム判定手段が実行する処理に相当し、Ｓ１５０，Ｓ１９０，Ｓ２１０の各処理はいずれも本発明の演算結果有効化手段が実行する処理に相当する。
【００５５】
また、Ｓ２３０，Ｓ２５０の各処理は請求項３のプログラム実行手段が実行する処理に相当し、Ｓ２４０，Ｓ２６０の各処理は請求項３の演算結果有効化手段が実行する処理に相当する。
［第２実施形態］
本実施形態でも、図１に示した燃料噴射制御システムが構成され、マイコン１１にて、アクセル開度の演算・有効化等の各種処理が行われる。つまり、本実施形態の燃料噴射制御システムのハード構成自体は第１実施形態の燃料噴射制御システム（図１）と全く同じである。
【００５６】
上記第１実施形態におけるアクセル開度演算有効化処理（図３参照）では、処理１プログラムと処理２プログラムの演算結果が一致しなかったとき、どちらのプログラムが正常であるか判断するために、いずれか一方のプログラムについてのみチェックサム方式による判断を行うようにした（図３のＳ１６０〜Ｓ１７０参照）。
【００５７】
そして、チェックサム値の算出終了後に、そのチェックサム値が正規のチェックサム値と一致するか否かによってそのプログラムが正常か否かを判断し、その判断結果に従っていずれか一方の演算結果を実アクセル開度ＡＣＣＰ０として有効化した。
【００５８】
しかしこのようにすると、Ｓ１６０のチェックサム値算出実行中は、Ｓ１２０，Ｓ１３０にて得られた最新のアクセル開度データ（ＡＣＣＰ１又はＡＣＣＰ２）は有効化されず、それまで有効化されていた実アクセル開度ＡＣＣＰ０がそのまま継続して有効化され続けている状態となる。そして、チェックサム値の算出が終了してどちらのプログラムが正常であるか判断できたときにはじめて、その最新のＡＣＣＰ１又はＡＣＣＰ２のいずれかが新たな実アクセル開度ＡＣＣＰ０として有効化されることになる。
【００５９】
そのため、チェックサム値算出が終了してどちらのプログラムが正常であるか判断されるまでの間に他の制御プログラム等がアクセル開度データを用いる必要がある場合は、それまで有効化されていた実アクセル開度ＡＣＣＰ０（いわば古いデータ）を引き続き用いることになり、そのＡＣＣＰ０の値によっては、車両制御の精度・信頼性に影響が生じるおそれがある。
【００６０】
具体的には、例えば直前の演算によりアクセル全開状態を示す値のＡＣＣＰ０が有効化されたときに、再びアクセル開度の演算を行った結果、演算結果が不一致となってチェックサム値の算出（Ｓ１６０）が開始されると、算出が終了するまでは、たとえアクセルを全く踏み込んでない場合であっても、そのアクセル全開状態を示すＡＣＣＰ０が有効化され続けるわけである。しかもその間は、ＣＰＵ３１は他の処理を実行することができない。そのため、チェックサム算出中は運転者の意図に反した車両制御（走行制御）が行われてしまうおそれがあるのである。
【００６１】
そこで本実施形態では、チェックサム算出中は、予め設定したデフォルト値（本発明のデフォルト演算値）を実アクセル開度ＡＣＣＰ０として有効化すると共に、チェックサム算出自体も、連続的に行わずに時分割的に実行するようにしている。図４に、本実施形態のアクセル開度演算有効化処理のフローチャートを示す。図４のアクセル開度演算有効化処理も、図３のアクセル開度演算有効化処理と同様、所定周期（例えば８ｍｓｅｃ．毎）で実行されるものである。
【００６２】
尚、本実施形態のアクセル開度演算有効化処理において、Ｓ１２０〜Ｓ１５０の処理は第１実施形態のアクセル開度演算有効化処理（図３）のＳ１２０〜Ｓ１５０と全く同じであるため、これら各処理については図３と同じ符号を付し、その詳細説明を省略する。また、後述するＳ３４０〜Ｓ３８０の処理も、第１実施形態のアクセル開度演算有効化処理（図３）のＳ２２０〜Ｓ２６０と全く同じであるため、これら各処理についてもその詳細説明は省略する。
【００６３】
本アクセル開度演算有効化処理が開始されると、まずＳ３００にて、処理１プログラム及び処理２プログラムがいずれも正常であるか否かを判断する。この判断は、基本的には図３のＳ１１０と同様であるが、本実施形態のＳ３００では更に、処理１プログラム領域に対するチェックサムの算出要求フラグ（後述のＳ３１０でセット）がセットされているか否かも判断し、セットされていればＳ３３０に進むことになるがセットされていなければＳ１２０に進む。
【００６４】
Ｓ１２０，Ｓ１３０では、それぞれＡＣＣＰ１，ＡＣＣＰ２が算出され、Ｓ１４０で両者の比較が行われる。そして、両者が一致した場合はＳ１５０に進んでＡＣＣＰ１が実アクセル開度ＡＣＣＰ０として有効化されるわけだが、両者が一致せずにＳ１４０で否定判定されると、Ｓ３１０に移行する。
【００６５】
Ｓ３１０では、処理１プログラム領域についてチェックサム値を算出（延いては処理１プログラムが正常か否かを判断）すべき旨のチェックサム算出要求フラグをセットする。つまり、第１実施形態のようにここですぐにチェックサム値の算出を実行するのではなく、あくまでもチェックサム値を算出するようフラグのセットを行うだけである。
【００６６】
そして、フラグのセット後はＳ３２０に進み、予め設定したアクセル開度のデフォルト値を実アクセル開度ＡＣＣＰ０として有効化する。このデフォルト値は、例えば、十分に低い速度で走行するように燃料噴射制御される値にしてもいいし、また例えば、少なくともその直前までの車両走行速度より減速して走行するように燃料噴射制御される値にする（つまりそのときの車両速度に応じてデフォルト値が変化する）ようにするなど、車両走行の安全性を考慮しつつ適宜決めることができる。
【００６７】
以後、再びこのアクセル開度演算有効化処理が実行されると、チェックサム算出要求フラグがセットされているためＳ３００では否定判定され、Ｓ３３０に移行する。Ｓ３３０では、処理１プログラムのチェックサム値の算出が終了したことを示すチェックサム算出済みフラグ（後述する図５のＳ６００でセット）がセットされているか否かを判断し、セットされていない場合、即ちチェックサム値の算出がまだ終了していない場合は、否定判定されてＳ３２０に移行し、既述の如くデフォルト値の有効化が行われる。
【００６８】
次に、処理１プログラムのチェックサム値算出について、図５に基づいて説明する。図５は、処理１プログラム領域のチェックサム値を算出して正常か否か判定するするために実行される、チェックサム算出・判定処理を示すフローチャートである。この処理も、図示しない車両のイグニションスイッチがオンされると所定周期（例えば４ｍｓｅｃ．毎）に繰り返し実行されるものである。
【００６９】
この処理が開始されると、まずＳ５１０にて、処理１プログラム領域に対するチェックサム算出要求フラグがセットされているか否かを判断する。このフラグは、既述の通り、図４のアクセル開度演算有効化処理におけるＳ３１０の処理によりセットされるものである。
【００７０】
このフラグがセットされていない場合（つまり処理１，処理２プログラムがいずれも正常の場合）はＳ５１０で否定判定されてそのままこの処理を終了することになるが、フラグがセットされている場合はＳ５２０に進む。Ｓ５２０では、ｉが２以上か否かが判断されるが、ここではまだｉについては何ら設定されていないため、Ｓ５３０に移行して、ここで初めてｉを１とする。
【００７１】
Ｓ５４０では、ｎ個の領域に分割された処理１プログラム領域のうち、ｉ番目（ここでは１番目）の領域についてチェックサム値Ｃｉ（ここではＣ１）を算出する。続くＳ５５０では、Ｓ５４０にて算出されたｉ番目領域のチェックサム値Ｃｉを、それまで累積されているチェックサム累積値Ｃに加えることにより、新たなチェックサム累積値Ｃを算出する。
【００７２】
そして、Ｓ５６０では、処理１プログラムの全領域についてチェックサム値の算出がなされたかどうか判断し、まだ全領域終了していない場合はＳ６２０にてｉをインクリメント（ここではｉを１から２にインクリメント）して、一旦この処理を終了する。
【００７３】
以後、所定周期（本例では４ｍｓｅｃ．毎）で再び本処理が実行されると、Ｓ５２０では肯定判定されてＳ５４０に進み、ｉ番目（ここでは２番目）のチェックサム値Ｃ２を算出する。そして、続くＳ５５０にて、それまでのチェックサム累積値Ｃ（ここでは前回算出した１番目領域のチェックサム値Ｃ１）に２番目領域のチェックサム値Ｃ２を加算した新たなチェックサム累積値Ｃを得て、Ｓ５６０に移行する。
【００７４】
以下、ｎ分割された処理１プログラムの全領域のチェックサム値算出が終了するまでは、Ｓ５６０で否定判定されてＳ６２０の処理（ｉのインクリメント）が行われることになるが、ｉ＝ｎとなってｎ番目のチェックサム値Ｃｎを算出することにより全領域のチェックサム値（つまり処理１プログラム全体のチェックサム値）が得られた場合、Ｓ５６０で肯定判定されてＳ５７０に進み、そのチェックサム値Ｃが予め記憶した正常値と一致するか否か判断する。
【００７５】
ここで一致すれば、処理１プログラムは正常であるため、Ｓ５８０にて処理２プログラムについての異常フラグをセットするが、一致しなかった場合は、処理１プログラムは異常であって処理２プログラムは正常であるものとみなして、Ｓ５９０にて処理１プログラムについての異常フラグをセットする。
【００７６】
Ｓ５８０又はＳ５９０の処理の終了後はＳ６００に進み、処理１プログラム領域のチェックサム値算出が終了したことを示すチェックサム算出済みフラグをセットする。そして、続くＳ６１０にて、処理１プログラム領域についてのチェックサム算出要求フラグ（図４のＳ３１０でセット）及びｉを共にリセットして、一旦この処理を終了する。そのため、以後再びＳ５１０の処理が行われた場合、Ｓ６１０でフラグリセットされているため、図４のＳ３１０実行にて再びフラグセットされない限り、このＳ５１０では否定判定され続けることになる。
【００７７】
つまり、本実施形態では、図４のアクセル開度演算有効化処理の過程でチェックサム値算出を行うのではなく、図４の処理とは別個独立して、しかも処理１プログラムを複数（ｎ個）の領域に分割して各領域毎に時分割でチェックサム算出を行うようにしているのである。
【００７８】
一方、図５のチェックサム算出・判定処理におけるＳ６００の処理によりチェックサム算出済みフラグがセットされた後は、図４のアクセル開度演算有効化処理におけるＳ３３０の判断処理では肯定判定され、Ｓ３４０に移行することになる。Ｓ３４０〜Ｓ３８０の処理は、既述の通り第１実施形態（図３）のアクセル開度演算有効化処理におけるＳ２２０〜Ｓ２６０と全く同様である。そして、このＳ３４０以降の処理がなされることで、ＡＣＣＰ１又はＡＣＣＰ２のいずれかが、それまで有効化されていたデフォルト値に代わって新たに有効化されることになる。
【００７９】
以上詳述した通り、本実施形態の燃料噴射制御システムでは、２つのプログラムの演算結果が一致しなかった場合、まずは処理１プログラムのチェックサム算出要求フラグをセットして、実アクセル開度ＡＣＣＰ０としてデフォルト値を有効化しておく。このデフォルト値は、車両走行の安全性を考慮して決められる値である。そのため、チェックサム算出に長時間を要する場合であっても、その間の車両制御の精度・信頼性の低下を抑制することが可能となる。また、
しかも、処理１プログラムのチェックサム値算出は、プログラムをｎ個の領域に分割して各領域毎に時分割で行うようにしているため、チェックサム値算出のために他の各種制御の実行を大きく妨げてしまうといったおそれもない。
【００８０】
ここで、図４のアクセル開度演算有効化処理において、Ｓ３２０の処理は請求項４の演算結果有効化手段が実行する処理に相当し、Ｓ３６０，Ｓ３８０の各処理はいずれも請求項３の演算結果有効化手段が実行する処理に相当し、Ｓ３５０，Ｓ３７０の各処理はいずれも請求項３のプログラム実行手段が実行する処理に相当する。また、図５のチェックサム算出・判定処理は、本発明のプログラム判定手段が実行する処理である。
【００８１】
尚、本発明の実施の形態は、上記実施形態に何ら限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採り得ることはいうまでもない。
例えば、上記第１実施形態のアクセル開度演算有効化処理（図３参照）では、２つのプログラムの演算結果が一致しなかったときに（Ｓ１４０：ＮＯ）、処理１プログラムについてのみチェックサム値を算出して正常か否か判断して、異常であった場合は処理２プログラムは正常であるものとみなしていたが、処理１プログラムだけでなく処理２プログラムも異常となってしまっていることも考えられないわけではない。
【００８２】
そこで、例えば図６に示したアクセル開度演算有効化処理のように、処理１プログラムが異常と判断された場合に、処理２プログラムについてもチェックサム方式によるプログラムチェックを行って、その結果正常と判断されたときにはじめてその処理２プログラムによる演算結果ＡＣＣＰ２を実アクセル開度ＡＣＣＰ０として有効化するようにしてもよい。
【００８３】
以下、図６のアクセル開度演算有効化処理について概略説明するが、Ｓ１１０〜Ｓ１９０の処理は、図３（第１実施形態）のＳ１１０〜Ｓ１９０と全く同じであるため、図３と同じ符号を付してその説明を省略する。また、Ｓ７６０〜Ｓ８１０の処理（但しＳ７９０を除く）も、図３のＳ２２０〜Ｓ２６０と全く同様であるため、これについても詳細説明は省略する。
【００８４】
図６のアクセル開度演算有効化処理では、Ｓ１７０にてチェックサムが不一致と判断（つまり処理１プログラムが異常と判断）されると、Ｓ７１０に進んで、処理２プログラムのチェックサム値を算出する。そして、続くＳ７１５にてチェックサム値が正常であるか否かを判断し、正常（一致）と判断されたときにはじめて処理２プログラムが正常であると判断して、処理１プログラムについて異常フラグをセットすると共に（Ｓ７２０）、処理２プログラムの演算結果ＡＣＣＰ２を実アクセル開度ＡＣＣＰ０として有効化する（Ｓ７３０）。
【００８５】
一方、Ｓ７１５にてチェックサム値が不一致（つまり処理２プログラムも異常）と判断された場合は、Ｓ７４０に進んで、処理１プログラム・処理２プログラムが共に異常である旨のフラグをセットする。そして、Ｓ７５０にて実アクセル開度ＡＣＣＰ０としてデフォルト値を設定する。尚、このデフォルト値は、第２実施形態のアクセル開度演算有効化処理（図４）のＳ３２０で有効化されるデフォルト値とは異なり、アクセルを全く踏み込んでいない状態を示す値、即ち車両走行を完全に停止させる方向に制御するための値である。Ｓ８２０のデフォルト値も同様である。
【００８６】
このように、処理１プログラムだけでなく処理２プログラムについてもチェックサム方式による判定を行うことにより、第１実施形態よりも更に信頼性の高いフェールセーフ処理、延いてはより信頼性の高い車両制御の実現が可能となり、プログラム異常時の車両の通常走行をより安全に行うことが可能となる。尚、Ｓ７１０及びＳ７１５の処理は請求項２のプログラム判定手段が実行する処理に相当する。
【００８７】
また、図６のアクセル開度演算有効化処理におけるＳ１６０，Ｓ７１０のチェックサム値算出にあたっては、図４，５で説明した第２実施形態の場合と同様に、とりあえずチェックサム算出要求フラグをセットするだけにしておいて算出自体は別途時分割で行い、その間は実アクセル開度ＡＣＣＰ０としてデフォルト値（図４のＳ３２０と同様）を有効化するようにしてもよい。
【００８８】
また、上記各実施形態では、本発明の適用例としてアクセル開度を算出・有効化する場合を例に挙げて説明したが、他のプログラム領域においても本発明を適用できることはいうまでもなく、同一演算内容のプログラムを２つ備え、各プログラムの演算結果が同一のときにそれを有効化するよう構成されたあらゆる車両用電子制御装置に適用することができる。
【図面の簡単な説明】
【図１】第１実施形態及び第２実施形態の燃料噴射制御システムの概略構成を示す説明図である。
【図２】エンジン制御ＥＣＵにおけるメモリマップを示す説明図である。
【図３】第１実施形態のアクセル開度演算有効化処理を表すフローチャートである。
【図４】第２実施形態のアクセル開度演算有効化処理を表すフローチャートである。
【図５】第２実施形態のチェックサム算出・判定処理を表すフローチャートである。
【図６】第１実施形態のアクセル開度演算有効化処理の、他の例を表すフローチャートである。
【符号の説明】
１０…エンジン制御ＥＣＵ、１１…マイコン、１２…フラッシュメモリ、１３…アナログ入力回路、１４…デジタル入力回路、１５…出力回路、２０…アクセルペダル、２１…アクセルセンサ、３１…ＣＰＵ、３２…ＲＯＭ、３３…ＲＡＭ、３４…Ｉ／Ｏ
【図１】
2004019457.tif 000003
【図２】
2004019457.tif 000004
【図３】
2004019457.tif 000005
【図４】
2004019457.tif 000006
【図５】
2004019457.tif 000007
【図６】
2004019457.tif 000008