(57)【要約】【課題】一連の処理があらかじめ決められた順番通りに行われていることをチェックする技術において、処理の順序に異常があった場合、どこでその異常が発生したかを特定できるようにする。【解決手段】処理装置としてのエンジンＥＣＵ１が、所定の順序で動作するよう定められた処理ｉ本体（ステップ３３０）（ｉ＝１、２、…、Ｎ）と、これら処理ｉ本体のうち、所定の順序に異常があった際の処理手段を特定する情報を記録する処理（ステップ３１０、３２０）とを備える。徴とする請求項１に記載の処理装置。【選択図】        図３
2004318672.tif 000002
【特許請求の範囲】
【請求項１】
所定の順序で動作するよう定められた複数の処理手段（３３０、４３０）と、
前記処理手段のうち、前記所定の順序による動作に異常があった際の処理手段を特定する情報を記録する記録手段（３１０、３２０、４１０、４２０、６０５、６４０、６５０、７４０、７５０、７６０、７７０、９８０）と、を備えた処理装置。
【請求項２】
前記記録手段は、
前記複数の処理手段のうち、前記所定の順序における最初の処理手段（４３０）が動作する際、この処理手段の識別子を第１の変数として記録し、
前記複数の処理手段のそれぞれが動作する際、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されているときに、今回の処理手段の識別子を前記第１の変数として記録し、
また前記複数の処理手段のそれぞれが動作する際、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときに、前記第１の変数の値を保持することを特徴とする請求項１に記載の処理装置。
【請求項３】
前記記録手段は、
前記複数の処理手段のうち、前記所定の順序における最初の処理手段が動作する前に、この処理手段の識別子を第１の変数として記録し、
前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されているときに、今回の処理手段の識別子を前記第１の変数として記録し、
また前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときに、前記第１の変数の値を保持することを特徴とする請求項１または２に記載の処理装置。
【請求項４】
前記記録手段は、前記複数の処理手段のそれぞれが動作する前に、第１の所定の値を第２の変数として記録し、前記処理手段が終了すると、前記第１の所定の値が前記第２の変数として記録されていれば、前記第２の変数として記録されている値を、前記第１の所定の値と異なる第２の所定の値にすることを特徴とする請求項２ないし３のいずれか１つに記載の処理装置。
【請求項５】
前記記録手段は、前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときは、前記直前の処理手段を動作させ、その後前記識別子が第１の変数として記録されているか否かを判定し、その第１変数判定結果を記録することを特徴とする請求項３または４のいずれか１つに記載の処理装置。
【請求項６】
前記記録手段は、前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときは、前記第１変数判定結果に基づいてフェイルセーフ処理を行うことを特徴とする請求項５に記載の処理装置。
【請求項７】
前記記録手段は、前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときは、前記第１変数判定結果が当該処理手段の識別子が第１の変数として記録されていないことを示している場合、当該処理手段の動作の結果得られるようになっている値を所定のデフォルト値に設定することを特徴とする請求項５または６に記載の処理装置。
【請求項８】
前記複数の処理手段のそれぞれについての前記第１変数判定結果が、当該それぞれの処理手段の識別子が第１の変数として記録されていることを示している場合、当該処理手段の動作において前記所定の順序に異常があったときの方法で当該処理手段の動作が開始することを禁止する禁止手段（９９０）を備えたことを特徴とする請求項５ないし７のいずれか１つに記載の処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一連の処理があらかじめ決められた順番通りに行われていることをチェックする技術に関するもので、エンジンＥＣＵ等の制御装置に用いて好適である。
【０００２】
【従来の技術】
従来、ソフトウェアにおいて、一連の制御処理があらかじめ決められた順番通りに動作していることを検証するものとして、例えば、特許文献１では、一連の処理において特定の処理の通過点を通過するたびに、交換律が成立することのない演算をし、その最終演算結果があらかじめ設定しておいた規定値に対して不一致のときに動作異常と診断する技術を開示している。この技術では、上記演算の交換律が成立しないゆえに、演算が正常な順序で行われなければ演算結果が規定値と食い違う。したがって、この食い違いによって処理の順序が異常であることを検出できる。
【０００３】
【特許文献１】
特公平７−９７３３１号公報
【０００４】
【発明が解決しようとする課題】
しかし上記技術では、一連の処理のうち、どこで処理の順序が異常となったかを特定することができない。
【０００５】
本発明は上記点に鑑みて、一連の処理があらかじめ決められた順番通りに行われていることをチェックする技術において、処理の順序に異常があった場合、どこでその異常が発生したかを特定できるようにすることを目的とする。
【０００６】
【課題を解決するための手段】
上記目的を達成するための請求項１に記載の発明は、所定の順序で動作するよう定められた複数の処理手段（３３０、４３０）と、前記処理手段のうち、前記所定の順序による動作に異常があった際の処理手段を特定する情報を記録する記録手段（３１０、３２０、４１０、４２０、６０５、６４０、６５０、７４０、７５０、７６０、７７０、９８０）と、を備えた処理装置である。
【０００７】
これによって、記録手段が所定の順序に異常があった際の処理手段を特定する情報を記録するので、一連の処理があらかじめ決められた順番通りに行われていることをチェックする技術において、処理の順序に異常があった場合、どこでその異常が発生したかを特定できる。
【０００８】
また、請求項２に記載の発明は、請求項１に記載の処理装置において、前記記録手段は、前記複数の処理手段のうち、前記所定の順序における最初の処理手段（４３０）が動作する際、この処理手段の識別子を第１の変数として記録し、前記複数の処理手段のそれぞれが動作する際、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されているときに、今回の処理手段の識別子を前記第１の変数として記録し、また前記複数の処理手段のそれぞれが動作する際、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときに、前記第１の変数の値を保持することを特徴とする。
【０００９】
このような記録手段の動作により、所定の順序通りに処理手段が動作する場合、今回の処理手段が動作する際は、第１の変数として直前の処理手段の識別子が記録されているので、今回の処理手段の識別子が第１の変数として記録される。この繰り返しにより、各処理手段の動作が全て終了した段階では、第１の変数には最後の処理手段の識別子が記録されている。
【００１０】
また、所定の順序通りに処理手段が動作しない場合、動作の順序に異常があった直後に動作する処理手段が動作する際、第１の変数には所定の順序では当該処理手段の直前に動作するはずの処理手段の識別子ではなく、現に直前に動作した処理手段の識別子が記録されているので、第１の変数の値は保持される。また、以後に動作する処理においても、その動作の際には第１の変数には所定の順序では当該処理手段の直前に動作するはずの処理手段の識別子ではなく、現に直前に動作した処理手段の識別子が記録されているので、第１の変数の値は保持される。この繰り返しにより、各処理手段の動作が全て終了した段階では、第１の変数には動作の順序に異常があった直前の処理手段の識別子が記録されている。
【００１１】
このように、記録手段は、所定の順序に異常があった際の処理手段を特定する情報を記録することができる。
【００１２】
なお、第１の変数の値を保持するとは、第１の変数の値を第１の変数として保持すること、および第１の変数の値を他の変数として保持することを含む概念である。また、第１の変数の値そのものではなく、実質的に第１の変数の値が特定できる値を保持することも含む概念である。
【００１３】
また、請求項３に記載の発明は、請求項１または２に記載の処理装置において、前記記録手段は、前記複数の処理手段のうち、前記所定の順序における最初の処理手段が動作する前に、この処理手段の識別子を第１の変数として記録し、前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されているときに、今回の処理手段の識別子を前記第１の変数として記録し、また前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときに、前記第１の変数の値を保持することを特徴とする。
【００１４】
これは、請求項２に記載の発明において、「動作する際」を、下位概念の「動作する前に」に置き換えたものである。このようにすることによって、複数の処理手段の１つについて、その処理手段が途中から動作を開始してしまった場合でも、第１の変数に当該処理手段の識別子が記録されないので、処理手段の動作が途中から始まるという異常についても、その異常があった際の処理手段を特定する情報を記録することができる。
【００１５】
また、請求項４に記載の発明は、請求項２ないし３のいずれか１つに記載の処理装置において、前記記録手段は、前記複数の処理手段のそれぞれが動作する前に、第１の所定の値を第２の変数として記録し、前記処理手段が終了すると、前記第１の所定の値が前記第２の変数として記録されていれば、前記第２の変数として記録されている値を、前記第１の所定の値と異なる第２の所定の値にすることを特徴とする。
【００１６】
これによって、複数の処理手段の１つについて、その処理手段が正常に動作した場合は、動作終了後には第２の変数は第２の所定の値となる。しかし、その処理手段が途中から開始された場合、あるいはその処理手段の動作途中に中断されて他の処理手段が動作する場合には、第２の変数は第２の所定の値とならないので、処理手段がその途中から動作したり、その途中で動作が終了したりする場合の異常があったことを検出できる。
【００１７】
また、請求項５に記載の発明は、請求項３または４のいずれか１つに記載の処理装置において、前記記録手段は、前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときは、前記直前の処理手段を動作させ、その後前記識別子が第１の変数として記録されているか否かを判定し、その第１変数判定結果を記録することを特徴とする。
【００１８】
これによって、処理手段の動作の順序に異常が発生したとき、所定の順序なら直前に動作していたはずの処理手段を動作させ、その結果第１の変数が当該直前の処理手段の識別子とならないなら、当該直前の処理手段自体に異常の原因があることになり、第１の変数が当該直前の処理手段の識別子となるなら、当該直前の処理手段の動作以外の部分に異常の原因があることになる。記録手段がこの第１の変数についての判定結果を記録することで、順序の異常が当該直前の処理手段によるものかそうでないかを直ちに確認することができる。
【００１９】
また、請求項６に記載の発明は、請求項５に記載の処理装置において、前記記録手段は、前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときは、前記第１変数判定結果に基づいてフェイルセーフ処理を行うことを特徴とする。
【００２０】
また、請求項７に記載の発明は、請求項５または６に記載の処理装置において、前記記録手段は、前記複数の処理手段のそれぞれが動作する前に、前記所定の順序における直前の処理手段の識別子が第１の変数として記録されていないときは、前記第１変数判定結果が当該処理手段の識別子が第１の変数として記録されていないことを示している場合、当該処理手段の動作の結果得られるようになっている値を所定のデフォルト値に設定することを特徴とする。
【００２１】
また、請求項８に記載の発明は、請求項５ないし７のいずれか１つに記載の処理装置において、前記複数の処理手段のそれぞれについての前記第１変数判定結果が、当該それぞれの処理手段の識別子が第１の変数として記録されていることを示している場合、当該処理手段の動作において前記所定の順序に異常があったときの方法で当該処理手段の動作が開始することを禁止する禁止手段（９９０）を備えたことを特徴とする。
【００２２】
なお、上記各手段の括弧内の符号は、後述する実施形態に記載の具体的手段との対応関係を示すものである。
【００２３】
【発明の実行の形態】
（第１実施形態）
図１に、本発明の第１実施形態に係る処理装置としてのエンジンＥＣＵ１の構成を示す。エンジンＥＣＵ１は、ＣＰＵ１１、ＲＡＭ１２、書き込み可能な不揮発性メモリであるＥＥＰＲＯＭ１３、およびＲＯＭ１４を有している。ＥＥＰＲＯＭ１３は、独自のバッテリから電力の供給を受け続ける限り記録した情報を保持し続けるバックアップＲＡＭであってもよい。
【００２４】
ＣＰＵ１１は、ＲＯＭ１４からプログラムを読み出して実行し、そのプログラムに記述された処理内容に基づいて動作し、その動作において、ＲＡＭ１２、ＥＥＰＲＯＭ１３、およびＲＯＭ１４から情報を読み出し、またＲＡＭ１２およびＥＥＰＲＯＭ１３に情報を書き込む。またＣＰＵ１１は、その動作中にエンジンの水温を検出して出力する水温センサ、アクセルペダルの踏み込み量を検出して出力するアクセルペダルセンサ等の各種センサからの信号を入力し、またエンジンのスロットル開度を制御する信号を出力する。
【００２５】
図２に、このＣＰＵ１１がＲＯＭ１４から読み出して実行するプログラムの１つである、目標スロットル開度制御プログラムを示す。このプログラムは、１０ミリ秒程度の周期で繰り返し実行されるよう、同じくＣＰＵ１１がＲＯＭ１４から読み出して実行する、各種プログラムの実行のタイミングを管理するためのスケジューリングプログラムによって管理されている。
【００２６】
この目標スロットル開度制御プログラム中、スロットル開度の制御のための主要部分は、ステップ２１０〜２４０に代表的に示した処理１、…、Ｎである。
【００２７】
ステップ２１０では、アクセルペダルの踏み込み量に応じたスロットル開度を算出するための処理１（アクセル要求開度算出）をｃａｌｌする。処理をｃａｌｌするとは、その処理の実行を開始することをいう。
【００２８】
ステップ２２０では、エンジンの水温、負荷入力等の状態に応じたスロットル開度を算出するための処理２（ＩＳＣ要求開度算出）をｃａｌｌする。
【００２９】
ステップ２３０では、スロットルセンサの全閉学習値に基づいて開度補正値を算出するための処理３（スロットルセンサ全閉補正）をｃａｌｌする。
【００３０】
ステップ２４０では、処理１、…、Ｎ−１によって算出された要求開度および補正値に基づいて、最終的な目標スロットル開度を算出するための処理Ｎ（目標スロットル開度算出）をｃａｌｌする。
【００３１】
このような処理が繰り返し行われることにより、エンジンＥＣＵ１は、走行状況に応じた電子スロットル開度の制御を行うことができる。
【００３２】
なお、ステップ２１０〜２４０の処理は、このフローチャートの並び通りの順序、すなわち所定の順序で動作するよう、目標スロットル開度制御プログラムによって定められている。本実施形態のエンジンＥＣＵ１では、以下詳述する様に、この所定の順序通りに処理が実行されるか否かをチェックすることができるよう、目標スロットル開度制御プログラムが構成されている。
【００３３】
この目標スロットル開度制御プログラムは、まずステップ２０５で、処理順序をチェックするための変数Ｃ１（第１の変数に相当する）の値をゼロにクリアする。
【００３４】
そして、ステップ２１０〜２４０によってｃａｌｌされる処理ｉ（ｉ＝１、２、…、Ｎ）は、それぞれ図３に示すような構成となっている。
【００３５】
まず、ステップ３１０では、変数Ｃ１がｉ−１であるか否かを判定し、ｉ−１であれば処理はステップ３２０に進み、ｉ−１でなければ処理はｃａｌｌ元の次の処理に進む。ｃａｌｌ元の次の処理とは、例えばステップ２２０で処理２がｃａｌｌされた場合は、ステップ２２０がｃａｌｌ元であり、ステップ２３０がｃａｌｌ元の次の処理である。
ステップ３２０では、Ｃ１に値ｉを代入する。そしてステップ３３０では、上記したアクセル要求開度算出、ＩＳＣ要求開度算出、スロットルセンサ全閉補正、目標スロットル開度算出の処理の本体部分である処理ｉ本体（処理手段に相当する）を実行する。なお、処理ｉ本体は、値ｉをその識別子とする。ステップ３３０の後に、処理はｃａｌｌ元の次の処理に進む。
【００３６】
このような処理によって、処理２、…、Ｎ本体のそれぞれ（図３においてはステップ３３０）が動作する前に、所定の順序における直前の処理（図３においては処理ｉ−１本体）の識別子（図３においてはｉ−１）が変数Ｃ１として記録されているときに、今回の処理手段（図３においてはステップ３３０）の識別子（図３においてはｉ）の値をＣ１に設定し、また所定の順序における直前の処理の識別子がＣ１として記録されていないときに、ステップ３２０の処理を実行しないことにより、変数Ｃ１の値を保持する。
【００３７】
また、図３においてｉ＝１とした場合の処理１は、図４のような構成となる。
【００３８】
このような処理によって、処理１本体（図４におけるステップ４３０）が動作する前に、所定の初期値（図４においては０）が変数Ｃ１として記録されているときに、今回の処理手段（図４におけるステップ４３０）の識別子（図４においては１）の値をＣ１に設定し、また所定初期値Ｃ１として記録されていないときに、ステップ４２０の処理を実行しないことにより、変数Ｃ１の値を保持する。
【００３９】
このような記録手段の動作により、所定の順序通りに処理１…Ｎ本体が動作する場合、処理ｉが動作する前に、変数Ｃ１に値ｉ−１が記録されているので、処理ｉ本体の識別子ｉが変数Ｃ１に代入される。この繰り返しにより、各処理本体の動作が全て終了した段階では、変数Ｃ１には所定順序における最後の処理である処理Ｎ本体の識別子Ｎが記録されている。
【００４０】
また、所定の順序通りに処理１、…、Ｎ本体が動作しない場合、動作の順序に異常があった直後に動作する処理ｉ本体が動作する前に、変数Ｃ１には所定の順序なら処理ｉ本体の直前に動作するはずの処理ｉ−１本体の識別子ｉ−１ではなく、現に直前に動作した処理本体の識別子が記録されているので、変数Ｃ１の値は保持される。また、以後に動作する処理本体においても、その動作の前には変数Ｃ１には所定の順序なら処理本体の直前に動作するはずの処理本体の識別子ではなく、現に直前に動作した処理手段の識別子が記録されているので、変数Ｃ１の値は保持される。この繰り返しにより、各処理本体の実行が全て終了した段階では、変数Ｃ１には動作の順序に異常があった直前の処理本体の識別子が記録されている。これは、順序に異常があった際の処理を特定する情報である。
【００４１】
ステップ２４０の後、ステップ２６０では、Ｃ１の値がＮか否かを判定し、Ｎであれば、ステップ２７０で処理順序が正常である旨の情報としてＣ１の値をＥＥＰＲＯＭ１３に書き込み、Ｎでなければ、ステップ２８０で、Ｃ１の値に１を加えた値を識別子として有する処理について処理順序が異常である旨の情報として、Ｃ１の値をＥＥＰＲＯＭ１３に書き込む。ステップ２７０、２８０の後には、処理は終了する。
【００４２】
このような、ＥＥＰＲＯＭ１３に記録されたＣ１の結果を後に外部の診断ツール等を用いて調べることにより、処理の終了後、Ｃ１の値がＮとなっていれば、処理は所定の順序通りに実行されて終了したことが判る。また、Ｃ１がＮ以外の値ｉ−１であれば、処理ｉのｃａｌｌに異常があった、処理本体ｉの途中に処理が他にジャンプしてしまった等、異常があった際の処理が処理ｉ本体であることが判る。
【００４３】
これによって、所定の順序に異常があった際の処理手段を特定する情報がＣ１として記録されるので、一連の処理があらかじめ決められた順番通りに行われていることをチェックする技術において、処理の順序に異常があった場合、どこでその異常が発生したかを特定できる。
【００４４】
また、ステップ３２０の変数Ｃ１の設定処理が、ステップ３３０の処理ｉ本体よりも先に実行されるので、処理ｉ本体が途中から動作を開始してしまった場合でも、変数Ｃ１に処理ｉ本体の識別子ｉが記録されないので、処理ｉ本体の動作が途中から始まるという異常についても、その異常があった際の処理ｉ本体を特定する情報を記録することができる。
【００４５】
（第２実施形態）
次に、本発明の第２実施形態について示す。本実施形態が第１実施形態と異なる部分は、目標スロットル開度制御プログラムの構成が、図５のようになっていることである。ステップ２０５、２６０、２７０、および２８０は、図２において同一のステップ番号が付された処理と同等の処理である。ただし、ステップ２０５では、Ｃ１に加え後述する配列変数Ｃ２の全ての値をゼロにクリアする。
【００４６】
ステップ５１０〜５４０は、この目標スロットル開度制御プログラムにおけるスロットル開度の制御のための主要部分である。この処理ｉ（ｉ＝１、２、…、Ｎ）によってｃａｌｌされる処理を図６に示す。
【００４７】
図６中、ステップ３１０、３２０、および３３０は、図３において同一のステップ番号が付された処理と同等の処理である。
【００４８】
ステップ６０５では、配列変数Ｃ２（第２の変数に相当）の第ｉ成分に第１の所定の値であり、処理ｉ本体（ステップ３３０）の識別子である値ｉを代入する。
【００４９】
ステップ３１０〜３３０の処理の後、ステップ６４０では、配列変数Ｃ２の第ｉ成分がｉであるか否かを判定する。
【００５０】
配列変数Ｃ２の第ｉ成分がｉなら、処理はステップ６５０に進み、配列変数Ｃ２の第ｉ成分に１…Ｎとは異なる第２の所定の値Ｑを代入し、その後処理はｃａｌｌ元の次の処理に進む。
【００５１】
配列変数Ｃ２の第ｉ成分がｉでないなら、処理はｃａｌｌ元の次の処理に進む。
【００５２】
これによって、所定の値ｉが配列変数Ｃ２の第ｉ成分として記録されている場合は、その第ｉ成分の値をＱとし、所定の値ｉ以外の値が記録されている場合は、値をそのまま保持するので、この２つの場合で、配列変数Ｃ２の第ｉ成分として記録される値が異なるものとなる。
【００５３】
これによって、処理ｉ本体について、その処理手段が正常に動作した場合は、動作終了後にはＣ２の第ｉ成分はＱとなる。しかし、その処理手段が途中から開始された場合、あるいはその処理手段の動作途中に中断されて他の処理手段が動作する場合には、Ｃ２の第ｉ成分はＱとならない。
図５のステップ５４５、５５０の処理は、ｉを１からＮまで順に変化させながら繰り返し実行される。
【００５４】
ステップ５４５では、Ｃ２の第ｉ成分がＱであるか否かを判定し、Ｑであればそのままｉを次の値に変化させて処理はステップ５４５に戻る。ただし、ｉがＮであれば処理はステップ２６０に進む。また、Ｃ２の第ｉ成分がＱでなければ、ステップ５５０で、上記した処理の異常があった旨の情報として、Ｃ２のｉ成分の値をＥＥＰＲＯＭ１３に書き込み、その後ｉを次の値に変化させて処理はステップ５４５に戻る。ただし、ｉがＮであれば処理はステップ２６０に進む。
【００５５】
このような、ＥＥＰＲＯＭ１３に記録されたＣ２の値を後に外部の診断ツール等を用いて調べることにより、処理の終了後、Ｃ２の第ｉ成分の値がＱとなっていれば、処理ｉ本体は正常に実行されて終了したことが判る。また、Ｃ２の第ｉ成分がＱ以外であれば、処理ｉ本体が途中から始まった、処理本体ｉの途中に処理が他にジャンプしてしまった等、異常があった際の処理が処理ｉ本体であることが判る。したがって、第１実施形態の効果に加え、処理手段がその途中から動作したり、その途中で動作が終了したりする場合の異常があったことを検出できる。
【００５６】
（第３実施形態）
次に、本発明の第３実施形態について説明する。本発明が第１実施形態と異なるのは、図２に示した目標スロットル開度制御プログラム中の、ステップ２１０〜２４０によってｃａｌｌされる処理ｉ（ｉ＝１、２、…、Ｎ）が図７のような構成となっていることである。
【００５７】
図７中、ステップ３１０、３２０、および３３０は、図３において同一のステップ番号が付された処理と同等の処理である。ただし、ステップ３１０で変数Ｃ１が値ｉ−１と異なる場合は、処理はステップ７４０に進む。
【００５８】
ステップ７４０では、処理ｉ−１をｃａｌｌする。そしてステップ７５０では、そのｃａｌｌの結果、変数Ｃ１の値がｉ−１となったか否かを判定する。
【００５９】
変数Ｃ１が値ｉ−１となったなら、処理はステップ７６０に進み、処理ｉ−１のｃａｌｌ元異常である旨の情報をＥＥＰＲＯＭ１３に書き込む。これは、ステップ７４０で処理ｉ−１をｃａｌｌした結果、Ｃ１が正常な値ｉ−１に戻ったということは、処理ｉ−１自体には異常はなく、例えばその処理をｃａｌｌする命令にアドレス等の誤りが発生した等、処理ｉ−１をｃａｌｌすべきｃａｌｌ元に異常がある可能性が高いからである。
【００６０】
変数Ｃ１が値ｉ−１でないなら、処理はステップ７７０に進み、処理ｉ−１自体が異常である旨の情報をＥＥＰＲＯＭ１３に書き込む。これは、これは、ステップ７４０で処理ｉ−１をｃａｌｌしたにもかかわらず、Ｃ１が正常な値ｉ−１に戻らないということは、処理ｉ−１そのものに異常がある可能性が高いからである。
【００６１】
ステップ７６０、７７０の処理の後、処理は処理ｉのｃａｌｌ元の次の処理に進む。
【００６２】
このように、処理の順序が異常であると判定した際に、異常と判定された処理を再度実行し、それが正しく実行されるかどうかを判定することで、処理の順序に異常が発生したとき、所定の順序なら直前に動作していたはずの処理本体を動作させ、その結果変数Ｃ１が当該直前の処理本体の識別子とならないなら、当該直前の処理本体自体に異常の原因があることになり、変数Ｃ１が当該直前の処理本体の識別子となるなら、当該直前の処理本体の動作以外、例えばｃａｌｌ元の部分に異常の原因があることになる。この判定を異常検出直後に行うことで、順序の異常が当該直前の処理手段によるものかそうでないかを直ちに確認することができる。
【００６３】
（第４実施形態）
次に、本発明の第４実施形態について説明する。本実施形態が第３実施形態と異なるのは、順序の異常があると判定した際に、フェイルセーフ処理を直ちに実行する点である。
【００６４】
従来のフェイルセーフ処理としては、図８に示す目標スロットル開度制御プログラムのステップ８９０、８９５のように、図５と同様のステップ２０５〜２８０の一連の処理が終了した後、処理順序の異常であるか否かを判定し（ステップ８９０）、異常であれば無限ループに入ることでウオッチドッグタイマを停止してエンジンＥＣＵ１をリセットすることが考えられるが、このようなものでは異常発生からフェイルセーフまでに遅れが生じ、またフェイルセーフとしても、リセットという過剰なものとなってしまう懸念がある。
【００６５】
本実施形態においては迅速で過剰でないフェイルセーフを実現するため、図２に示した目標スロットル開度制御プログラム中の、ステップ２１０〜２４０によってｃａｌｌされる処理ｉ（ｉ＝１、２、…、Ｎ）が図９のような構成となっている。
【００６６】
ステップ３１０〜３３０、７４０〜７７０は、図７において同一のステップ番号が付された処理と同等の処理である。ただし、ステップ７６０の後には処理はステップ３２０に進み、ステップ７７０の後には処理はステップ９８０に進む。
【００６７】
ステップ９８０では、処理ｉ−１本体を実行した場合に得られる値を擬似的にＲＡＭ１２に記録する。すなわち、当該処理の代替値としてあらかじめ定められたデフォルト値を出力してＲＡＭ１２に記録する。この所定のデフォルト値は、ＲＯＭ１４に記録されている。
そしてステップ９８０の後、処理はステップ３２０、３３０の処理ｉ本体の実行を行う。ステップ７５０で変数Ｃ１が値ｉ−１でないと判定された場合は、処理（ｉ−１）本体そのものに異常がある可能性が高いので、その場合には、上記のようにすることで、代替のデフォルト値を用いたフェイルセーフ処理を行うことができる。
【００６８】
デフォルト値としては、例えばアクセル要求開度算出の処理を代替する場合は、アイドル開度、すなわち全閉値に微小量αを加えた値をアクセル開度のデフォルト値として記録する。また、ＩＳＣ要求開度算出を代替する場合は、水温に応じた最小開度をアクセル開度のデフォルト値として記録する。また、スロットルセンサ全閉補正処理を代替する場合は、全閉基準値をデフォルト値として記録する。また、目標スロットル開度算出処理を代替する場合は、運転モード（エンジン回転数、車速など）に基づいた退避走行可能な開度をデフォルト値として記録する。
【００６９】
また、ステップ変数Ｃ１が値ｉ−１であると判定された場合は、処理（ｉ−１）そのものに異常は無いと考えられ、さらにステップ７４０で既にその処理（ｉ−１）本体が実行されているので、その場合には、代替のデフォルト値を用いずともステップ７４０の実行結果を用いてフェールセーフ処理を行うことができる。
【００７０】
また、このステップ変数Ｃ１が値ｉ−１であると判定された場合は、処理（ｉ−１）のｃａｌｌ元に異常がある可能性が高いので、目標スロットル開度制御プログラムの周期的な繰り返しにおいて、規定の順序によって処理（ｉ−１）のｃａｌｌを実現するために設けられた部分を実行しないようにする。図１０に、これを実現するための、本実施形態に係る目標スロットル開度制御プログラムを示す。このプログラムが第１実施形態の目標スロットル開度制御プログラムと異なる点は、処理（ｉ−１）をｃａｌｌするステップ９９５の前に、処理（ｉ−１）のｃａｌｌ元が異常となっているか否かを判定するステップ９９０があることである。
【００７１】
このステップ９９０の判定は、具体的にはステップ７６０の処理によって、ＥＥＰＲＯＭ１３に処理ｉ−１のｃａｌｌ元異常である旨の情報が書き込まれているか否かによって行う。そして、ｃａｌｌ元異常であるなら、ステップ９９５の処理を行わず、ｃａｌｌ元異常でないなら、ステップ９９５の処理を行う。
【００７２】
このように、デフォルト値を出力した場合は、エンジンＥＣＵ１をリセットする場合に比べエンジンＥＣＵ１の機能を大幅に低下させることなくフェイルセーフ機能を実現することができる。一方、ｃａｌｌ元の異常と判定した場合は、元々のｃａｌｌ場所からの当該処理の呼び出し、すなわち所定の順序に異常があったときの方法での当該処理の呼び出しを禁止し、次の処理ｉの先頭部にあるステップ７４０によって前処理を行うように切り替えることにより、正常時と何ら変わらない処理順序が実現される。
【図面の簡単な説明】
【図１】本発明の第１実施形態に係るエンジンＥＣＵ１の構成を示す図である。
【図２】第１実施形態に係る目標スロットル開度制御プログラムのフローチャートである。
【図３】ステップ２１０〜２４０によってｃａｌｌされる処理ｉのフローチャートである。
【図４】図３においてｉ＝１とした場合の処理１のフローチャートである。
【図５】第２実施形態に係る目標スロットル開度制御プログラムのフローチャートである。
【図６】第２実施形態に係る目標スロットル開度制御プログラムのステップ５１０〜５４０によってｃａｌｌされる処理ｉのフローチャートである。
【図７】第３実施形態に係る目標スロットル開度制御プログラムのステップ２１０〜２４０によってｃａｌｌされる処理ｉのフローチャートである。
【図８】従来のフェイルセーフ処理を示すフローチャートである。
【図９】第４実施形態に係るフェイルセーフ処理等を示すフローチャートである。
【図１０】第４実施形態に係る目標スロットル開度制御プログラムのフローチャートである。
【符号の説明】
１…エンジンＥＣＵ、１１…ＣＰＵ、１２…ＲＡＭ、１３…ＥＥＰＲＯＭ、
１４…ＲＯＭ。
【図１】
2004318672.tif 000003
【図２】
2004318672.tif 000004
【図３】
2004318672.tif 000005
【図４】
2004318672.tif 000006
【図５】
2004318672.tif 000007
【図６】
2004318672.tif 000008
【図７】
2004318672.tif 000009
【図８】
2004318672.tif 000010
【図９】
2004318672.tif 000011
【図１０】
2004318672.tif 000012