(57)【特許請求の範囲】
【請求項１】
車両の諸動作を制御するための制御量演算に使用するデータを格納したメモリの異常を検出するメモリチェック装置において、
前記メモリの内容を初期化するメモリ初期化モジュールと、
制御量演算プログラムを実行する複数のタスクの実行順序を決める実行順序決定手段と、前記複数のタスクを含むエンジン制御モジュールと、前記メモリからの読み出し処理を含むメモリ読み出しモジュールと、
前記メモリから読み出されたチェック結果を記憶しておく記憶手段とを備え、
前記制御量演算プログラムにて前記メモリに格納されたデータを使用する前に、前記メモリから読み出されたデータのみチェックを行いそのチェック結果を前記記憶手段に記憶すると共に、このチェックの結果、読み出されたデータの異常と判断された場合には前記読み出されたデータに代えて初期値を使用して車両の制御量演算を行い、前記初期化モジュールにより、所定のタイミングで、前記記憶手段に記憶されたチェック結果を参照し、該チェック結果がデータの異常であった場合に、前記メモリの内容を初期化することを特徴とするメモリチェック装置。
【請求項２】
請求項１に記載のメモリチェック装置において、
前記初期化モジュールによるメモリ内の初期化は、前記メモリの全領域を初期化することを特徴とするメモリチェック装置。
【請求項３】
車両の諸動作を制御するための制御量演算に使用するデータを格納したメモリから、読み出されたデータの異常を検出するメモリチェック方法において、
車両の現在の動作制御に必要なデータを使用する以前に、当該データのみを読み出して正常か異常かをチェックする段階と、
前記チェックの結果、読み出されたデータに異常がある時は、前記制御量演算に使用するデータとして初期値を設定すると共に、異常を示す情報をセットする段階と、
所定のタイミング毎に前記情報のチェックを行う段階と、
前記情報のチェックの結果、前記異常を示す情報がセットされているときは、前記メモリの全領域のデータを初期化する段階と、
を具備することを特徴とするメモリチェック方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は学習値等の制御データを記憶するメモリからの読み出しデータの異常を検出するメモリチェック装置及びチェック方法に関するものである。
【０００２】
【従来の技術】
一般に、エンジン制御システムではイグニッションスイッチがオフされても常時電源が供給されるバックアップＲＡＭが備えられており、燃料噴射量などの制御量演算に使用する学習値データを常時保持している。即ち、学習値データの保持にバックアップＲＡＭが使用されるのは、万一電源がオフしても、動作制御に常に必要な制御データやその学習値データ、診断に常に必要なダイアグデータ等が消失することなく保持できるからである。
【０００３】
また、このバックアップＲＡＭに格納されたデータが、外部ノイズや電源経路からの異常などに起因して変化（データ化け）し、その結果、誤ったデータを使って制御量演算されるのを防止するために、一定の時間周期にてバックアップＲＡＭのチェックを行い、異常時にはメモリを初期化する技術も提案されている（例えば、特開平６−２５０９４０号公報）。
【０００４】
このように車両用のバックアップＲＡＭなどのメモリの内容をチェックする代表的な方法として、以下のような方法がある。即ち、
▲１▼  イグニッションスイッチがオンしたタイミングで、メモリ内の全データをチェックする方法。
▲２▼  イグニッションがオンした後、一定の時間毎にデータチェックする（例えば、上記の特開平６−２５０９４０号公報）、或いは制御量演算プログラムが実行されない空き時間に、メモリ内のデータをチェックする方法（例えば、特開平１０−８３３５５号公報）。
【０００５】
【発明が解決しようとする課題】
しかしながら、▲１▼の方法では、イグニッションスイッチがオンしてから所定時間経過した後で、車両が運転状態であるときに、読み出された制御データがデータ化けした場合には誤ったデータを使用して制御量演算がなされてしまう問題があった。
【０００６】
また、▲２▼の方法においてもメモリチェックをしたタイミングから次のメモリチェックをするタイミングの間にデータ化けし、この間でメモリデータを用いて制御量演算した場合には、やはり誤ったデータで制御量演算されてしまう問題があった。
そこで、本発明は車両の動作制御において、誤ったデータで制御量演算されるのを確実に防ぐメモリチェック装置及びチェック方法を提供することを目的とする。
【０００７】
請求項１、２及び３の発明によれば、メモリに格納されたデータを使用する前に、全てのデータのチェックは行わず、前記メモリから読み出された現在の動作制御に必要なデータのみチェックを行う。このようにすることで、当面の車両の動作では不要なデータ（例えば、高速運転時の制御データ）のチェックを回避することができ、その結果迅速なメモリチェックが可能となり、かつ現在必要なデータ（即ち、現在の走行状態に必要な制御データ）のみ確実にチェックが可能なので、誤ったデータで制御量演算し動作制御するのを確実に防ぐことができる効果がある。
【０００８】
【発明の実施の形態】
以下、図面を参照して本発明の一実施形態を説明する。図１はマイクロコンピュータによるエンジン制御のシステム構成図である。図示のように電子制御ユニット（ＥＣＵ）１１によってエンジン１２の制御を行わせる場合の例を示すもので、エンジン１２の吸気管１３にはアクセルベダル（図示せず）によって制御されるスロットルバルブ１４が配置され、このスロットルバルブ１４によってエンジン１２に対する吸入空気量が制御される。
【０００９】
この吸入空気量はエアフローメータ１５で検出されるものであり、また吸気温センサ１６によって吸入空気温度が検出され、スロットル開度センサ１７によってスロットルバルブ１４の開度が検出される。
吸気管１３のエンジン１２に近接した位置には燃料噴射弁１８が設定され、この燃料噴射弁１８には図示しない燃料ポンプから圧送された燃料が供給されて燃料噴射弁１８の開弁時間に対応した量の燃料がエンジン１２内に噴射されるようになっている。
【００１０】
このようなエンジン１２の排気管１９には、排気中の酸素濃度からエンジン１２の空燃比の状態を検出する空燃比センサ２０が設けられ、さらにエンジン１２には冷却水温を検出する水温センサ２１、エンジン１２の回転に同期して駆動されるディストリビュータ２２の例えば３０°ＣＡ毎の信号に同期して駆動され、ディストリビュータ２２の例えば３０°ＣＡ毎の信号に基づいて回転数に対応した信号を発生する回転数センサ２３、さらに、ディストリビュータ２２の１回転毎に信号を発生する気筒判別センサ２４が設けられている。ディストリビュータ２２にはイグナイタ２５からの点火信号が供給されている。
【００１１】
また、電子制御ユニット１１は入力ポート３１及び出力ポート３２を備え、入力ポート３１には、エアフローメータ１５、吸気温センサ１６、スロットル開度センサ１７、空燃比センサ２０、水温センサ２１、回転数センサ２３、気筒判別センサ２４等からの検出信号が入力される。
電子制御ユニット１１は入力ポート３１に入力された検出信号に基づいてエンジン１２の運転状態を判断し、この運転状態に対応した燃料噴射量並びに点火時期等を演算するもので、この演算動作を行うコンピュータ（ＣＰＵ）３３を備える。ＣＰＵ３３の制御用プログラムはメモリ（ＲＯＭ）３４に格納されているものであり、演算データ類はメモリ（ＲＡＭ）３５に格納されるようにしている。そして、各種学習データ等はバックアップＲＡＭ（ＢＲＡＭ）３６に格納され、このバックアップＲＡＭ３６に対しては、バッテリ電源３７に直接的に接続される電源回路３８から電源を供給し、他の回路部分にはバッテリ電源３７がイグニッションスイッチ３９を介して接続される電源回路４０から電源が与えられるように構成されている。
【００１２】
即ち、この電子制御ユニット１１はイグニッションスイッチ３９がオンされた状態で作動状態が設定され、エンジン１２の運転状態に対応して制御情報が算出されるもので、イグニッションスイッチ３９がオフされた状態では、バックアップＲＡＭ３６に対してのみ電源が供給され、このバックアップＲＡＭ３６の格納データが保持されるようにしている。
【００１３】
ＣＰＵ３３で演算された制御データは出力ポート３２から出力される、イグナイタ２５に点火指令を出力すると共に、演算された燃料噴射量信号に基づいて燃料噴射弁１８の通電時間を制御し、運転状態に対応した量の燃料がエンジン１２内に噴射されるようになっている。また、出力ポート３２からは、例えばバックアップＲＡＭ３６の異常検出時に異常表示ランプ４１に表示指令が供給されるようにしている。
【００１４】
図２は図１のバックアップＲＡＭの詳細データ構成図である。上述のように構成される電子制御ユニット１１において、バックアップＲＡＭ３６のデータ構成は図２に示されるようになっている。即ち、制御に使用される学習値データ５２ａと、この制御データの各ビットを反転した異常検出用の反転データ５３ａとを１組にして各制御項目毎に複数個（５２ａ〜５２ｎ，５３ａ〜５３ｎ）並べて設定されている。
【００１５】
図３は図１のＣＰＵ３３で実行される本発明によるエンジン制御プログラムの処理を示すメッセージ・シーケンスチャート（ＭＳＣ）である。なお、実際のエンジン制御プログラムでは、制御対象にそって複数のタスク（説明上「実行タスク」と呼ぶ）が実行されるが、本発明の主旨を明確にするために、実行タスクとして、本説明では、燃料噴射量の算出に使用される空燃比補正係数ＡＦの算出タスク（ＡＦタスク）とＩＳＣ制御量の算出タスク（ＩＳＣタスク）のみ示している。
【００１６】
図３において、（１）、（２）で示すように、まず、実行順序決定手段（ＣＰＵに渡すべきタスクの順序を決めるプログラム）は、各実行タスクの実行タイミングを計測し、所望のタイミング（例えば、８ｍｓタイミング）でエンジン制御モジュール（プログラムを機能で分類した場合の単位）内のＡＦタスク、ＩＳＣタスクなどを起動する。
【００１７】
次に、ＡＦタスク、ＩＳＣタスクは実行順序決定手段からのコールにより各演算処理を実行し、ＡＦタスク、ＩＳＣタスクはその処理の中でバックアップＲＡＭ３６に格納された値を参照する（読み出す）。この動作はバックアップＲＡＭ３６の読み出し処理（タスクＡ，タスクＢ）をそれぞれコールすることにより実行され、実行タスクと読み出し処理等の間のコールはメッセージ・シーケンスチャート（ＭＳＣ）では矢印（→）で記されている。
【００１８】
この場合、本実施形態の特徴であるバックアップＲＡＭ３６内のデータチェックは、バックアップＲＡＭ３６の読み出しモジュール内、即ち、図３ではタスクＡ、タスクＢ内の処理で実行される。また、本実施形態では、さらにバックアップＲＡＭ３６の初期化モジュールを備え、（３）に示すように、所定タイミング（例えば、６５ｍｓタイミング）で異常確認タスクが実行される。異常確認タスクではタスクＡ、タスクＢでのチェック結果を参照し、各タスクのうち少なくとも１つのタスクで異常が発生した場合に、バックアップＲＡＭ３６の格納領域の全領域を初期化するように作動する。
【００１９】
図４はＡＦタスクの処理の詳細を示すフローチャートであり、図５は燃料噴射時間の算出式と補正項の説明図である。
図４の処理を説明する前に、図５に示す燃料噴射量演算の概要を以下に説明する。燃料噴射量は、図１のインジェクタ１８を開弁する時間（燃料噴射時間ＴＡＵ）で決まるが、この燃料噴射時間ＴＡＵは図示の演算式により算出される。即ち、回転センサ２３からのエンジン回転数とエアフローメータ１５からの吸入空気量から基本噴射量Ｔｐが算出され、この値を水温センサ２１等からの信号から求まるエンジン停止防止補正ＩＤＬ、空燃比センサ２０等からの信号から求まる空燃比補正係数ＡＦ、などの各補正項による補正演算により燃料噴射時間ＴＡＵが算出されることになる。ここでは、上記の補正項の１つである空燃比補正係数ＡＦの算出を例に説明する。
【００２０】
図４に示すように、まず、前回の実行タイミングで算出した空燃比補正係数ＡＦと空燃比センサ２０からの現在の空燃比状態（リッチ、リーン）とに基づき、基本空燃比補正係数ＢＡＦを算出する（Ｓ４０１）。次に、後続のステップＳ４０３で使用する空燃比学習値ＧＡＦを求めるべく、タスクＡをコールする（Ｓ４０２）。
【００２１】
ステップＳ４０２でタスクＡがコールされると図６のルーチンが実行される。図６はタスクＡの処理を示すフローチャートである。
まず、バックアップＲＡＭ３６から空燃比学習値データＧＡＦを読み出し、続いて格納されている学習値データの反転データを読み出し（Ｓ６０１）、学習値データ５２とこの反転データ５３との排他的論理和（ＥＸＯＲ）をとり空燃比学習値ＧＡＦのデータチェックを行う（Ｓ６０２）。
【００２２】
例えば、学習値データが「１０１０」の場合は、その反転データは「０１０１」である。そして学習値データと反転データのＥＸＯＲを求めると、正常であればそれぞれのビットの値は必ず「１」となるが、いずれか１ビットが変化（データ化け）していればそのビットのＥＸＯＲは「０」となり、読み出されたデータが異常と判断することができる。
【００２３】
即ち、排他的論理和の結果、全ビットデータが１（２バイトデータの場合は＄ＦＦＦＦ）なら正常としてステップ４０３へ戻り、これ以外の値ならデータ異常と判断してステップＳ６０４へ進む（Ｓ６０３）。
そして、異常発生を示すフラグＮＧＦを「１」にセットし（Ｓ６０４）、さらに、読み出されたデータに代えて初期値（いわゆる「フェールセーフ値」の性格を持つデータであり、例えば、その部品が経年変化していない初期のデータを初期値とする）を空燃比学習値データＧＡＦとしてセットする（Ｓ６０５）。なお、ステップ６０５では今回の制御量演算に使うデータとして初期値をセットするだけであり、バックアップＲＡＭ３６の格納データを初期値にする（メモリリセットする）ものではない。そして図４のステップ４０３に戻る。
【００２４】
図４のステップ４０３では基本空燃比補正係数ＢＡＦと空燃比学習値データＧＡＦとを加算演算して空燃比補正係数ＡＦを求めＡＦタスク処理ルーチンを終了する。
以上説明したように、本実施形態ではバックアップＲＡＭ内の学習値データを読み出すタイミングで、この学習値データが正しいか否かをチェックしてデータ化けが発生したかを判断し、さらにデータ異常時には読み出した値に代えて初期値を用いて空燃比補正係数ＡＦを算出するので、燃料噴射時間ＴＡＵが誤ったデータで制御されるのを回避でき、常に最適な制御を行うことができる。
【００２５】
また、バックアップＲＡＭ内のデータを使うタイミングで、演算処理に使うデータ領域のみチェックするので、データチェックする処理が占有され、他の制御量演算プログラムが待ち状態となることも回避でき、さらに、当面不必要な使用頻度の低いデータに対し、データチェックされることがないので、データチェック処理の効率化が図れる。
【００２６】
なお、本実施形態では、空燃比補正係数ＡＦの算出処理のみ示したが、ＩＳＣタスクによる制御量算出処理においても同様に、バックアップＲＡＭ内のデータを使うタイミングで、タスクＢにて演算処理に使うデータ領域のみチェックされる。
図７は図３で示した異常確認タスクの処理を示すフローチャートである。まず、異常発生フラグＮＧＦがセットされているかをチェックする（Ｓ７０１）。なお、ここでの異常発生フラグＮＧＦのチェックはタスクＡに限らず、タスクＢや図示しない他のメモリチェックタスクでセットされる全てのフラグ状態を見て判断され、そのうち１つでも異常発生している場合には、ステップ７０１にて肯定判定されてステップ７０２に進む。また、このとき異常発生フラグＮＧＦは、各タスク毎に設けずに、共通に使用してもよい。
【００２７】
そして、バックアップＲＡＭ３６の全領域のデータを初期化し（Ｓ７０２）、最後に、異常発生フラグＮＧＦを「０」にリセットする（Ｓ７０３）。
このように、タスクＡ、タスクＢなどでは演算処理に使うデータ領域のみチェックするが、ここで異常と判断した場合には、異常と判断した領域だけでなく、他のデータ領域にも異常の可能性があるとして全領域が初期化される。
【００２８】
この理由を以下に説明する。即ち、従来のように、タスクＡ、タスクＢそれ自体の中に全領域を初期化する処理過程を設けた場合には、異常発生時におけるタスクＡ、タスクＢの処理時間が非常に大きくなり他の制御プログラムに悪影響を及ぼす可能性がある。また、この悪影響を無くすために予め初期化する時間を考慮してプログラミングすることになり、効率的なプログラムの割付けができない、という問題がある。
【００２９】
これに対し、本発明では、タスクＡ、タスクＢは異常時にフラグをセットするだけであり、初期化はタスクＡ、タスクＢとは別のタイミングで実行されるタスク（即ち、異常確認タスク）で実行されるためこのような問題が発生することはない。
一方、タスクＡ、タスクＢ自体の中に初期化する処理を設けて、各タスクで使用する領域のみ初期化する方法も考えられるが、一般に、異常の発生として電源供給手段に異常が発生した場合には、１つの領域だけでなく他の領域も異常となる可能性が高いことが多い。従って、各タスクに初期化処理を設けた場合には、複数のタスクで初期化処理が実行されることになり、やはり、他の制御プログラムに悪影響を及ぼす可能性がある。
【００３０】
これに対し、本発明では、タスクＡ，Ｂとは異なる異常確認タスクにて初期化処理を一括して実行しているので、バックアップＲＡＭ読み出しモジュールがコールされる毎に図６のステップ６０４、６０５を実行することはなく、異常処理の効率化を図ることができる。
【図面の簡単な説明】
【図１】マイクロコンピュータによるエンジン制御のシステム構成図である。
【図２】図１のバックアップＲＡＭの詳細データ構成図である。
【図３】本発明によるエンジン制御プログラムの処理を示すメッセージ・シーケンスチャートである。
【図４】ＡＦタスクの処理の詳細を示すフローチャートである。
【図５】燃料噴射時間の算出式と補正項の説明図である。
【図６】タスクＡの処理を示すフローチャートである。
【図７】図３で示した異常確認タスクの処理を示すフローチャートである。
【符号の説明】
１１…電子制御ユニット（ＥＣＵ）
１２…エンジン
１３…吸気管
１４…スロットルバルブ
１５…エアフローメータ
１６…吸気温センサ
１７…スロットル開度センサ
１８…燃料噴射弁
１９…排気管
２０…空燃比センサ
２１…水温センサ
２２…ディストリビュータ
２３…回転数センサ
２４…気筒判別センサ
２５…イグナイタ
３３…ＣＰＵ
３４…ＲＯＭ
３５…ＲＡＭ
３６…バックアップＲＡＭ（ＢＲＡＭ）
３７…バッテリ電源
３８…電源回路
３９…イグニッションスイッチ
４０…電源回路
４１…異常表示ランプ
【図１】
0003613028.tif 000002
【図２】
0003613028.tif 000003
【図３】
0003613028.tif 000004
【図４】
0003613028.tif 000005
【図５】
0003613028.tif 000006
【図６】
0003613028.tif 000007
【図７】
0003613028.tif 000008