(57)【要約】      （修正有）【課題】浮動小数点形式のデータの演算結果が非数となった場合でも、当該制御および他の制御における制御不良を防止する。【解決手段】ＣＰＵは、吸気制御初期化処理（ステップＳ１３０１）において、非数が発生した変数を初期化するとともに、同変数を参照して算出される変数など、非数が発生した変数によって影響を受ける変数を一括して初期化する。本処理で初期化する変数は、必ずしも吸気制御処理内で用いられる全ての変数でなくともよい。非数が発生した変数によって影響を受ける変数、例えばある変数が非数となると派生的に非数となる変数などを初期化することもできる。その他の任意の変数を初期化対象としてもよい。【選択図】図１３
2011164814.tif 000002
【特許請求の範囲】
【請求項１】
制御動作を記述した１以上のプログラムと、
前記プログラムの記述にしたがって浮動小数点形式のデータを演算する演算部と、
前記演算部が演算した浮動小数点形式のデータを記憶する記憶部と、
前記演算部が演算した浮動小数点形式のデータが非数または無限大であるか否かを判定する手段と、
前記演算部が演算した浮動小数点形式のデータが非数または無限大である場合にいずれの前記プログラム内の変数を初期化するかを選定する選定手段と、
前記選定手段が選定した前記変数を初期化する初期化手段と、
を備え、
前記選定手段は、
浮動小数点形式の非数データまたは無限大データとなった変数を参照または更新する前記プログラム内の変数を、初期化の対象として選定する
ことを特徴とする車載制御装置。
【請求項２】
前記選定手段は、
浮動小数点形式の非数データまたは無限大データとなった前記プログラム内の変数、浮動小数点形式の非数データまたは無限大データとなった変数を参照もしくは更新する当該プログラム内の他の変数、または、浮動小数点形式の非数データまたは無限大データとなった変数を参照もしくは更新する他の前記プログラム内の変数を、前記初期化の対象として選定する
ことを特徴とする請求項１記載の車載制御装置。
【請求項３】
前記演算部がいずれの前記プログラムを実行しているかを識別するプログラム識別手段を備え、
前記プログラム識別手段は、
前記プログラムの処理の先頭部分で、各前記プログラム毎に設けられたフラグ変数のうち前記演算部が実行している前記プログラムに対応するものに所定値をセットするとともに、前記プログラムの処理の最終部分で、前記フラグ変数を初期化し、
または、
前記プログラムの処理の先頭部分で、各前記プログラムに共通するフラグ変数に前記演算部が実行している前記プログラムに対応する所定値をセットするとともに、前記プログラムの処理の最終部分で、前記フラグ変数を初期化し、
前記選定手段は、
前記演算部がいずれの前記プログラムを実行しているかを前記プログラム識別手段によって識別し、そのプログラム毎に定められている初期化対象変数を、前記初期化の対象として選定する
ことを特徴とする請求項１または請求項２記載の車載制御装置。
【請求項４】
前記演算部は、
１以上の前記プログラムをセットにした複数のプログラムセットを並行して周期的に実行するとともに、各前記プログラムセットの優先度にしたがって前記プログラムセットの実行タイミングを調整し、
前記選定手段は、前記初期化の対象を、前記プログラムセット毎に選定し、
前記初期化手段は、
前記プログラムセットに含まれる各前記プログラムが参照または更新する前記プログラム内の変数を、一括して初期化する
ことを特徴とする請求項１から３のいずれか１項に記載の車載制御装置。
【請求項５】
前記初期化手段は、
前記プログラム内の変数に所定値を代入することによって初期化する関数、
または、
前記プログラム内の変数を格納する前記記憶部内の領域を初期化する処理群として構成されている
ことを特徴とする請求項１から４のいずれか１項に記載の車載制御装置。
【請求項６】
前記プログラムは、
同一の制御動作を記述した１以上の制御プログラム、
または、
同一の周期で実行される１以上の制御プログラム、
または、
同一の制御動作を記述した主演算プログラムおよび副演算プログラムとして構成されている
ことを特徴とする請求項１から５のいずれか１項に記載の車載制御装置。
【請求項７】
前記プログラムは、車両のエンジン制御動作を記述している
ことを特徴とする請求項１から６のいずれか１項に記載の車載制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車載制御装置に関するものである。
【背景技術】
【０００２】
近年、自動車における排気・燃費規制が強化され、要求される操安性・安全性レベルが向上し、自動車の組込み制御装置においても、制御精度の向上が求められている。そのため、従来の固定小数点数演算に代えて、浮動小数点演算を行う中央演算処理装置を備えた制御コントロールユニットが採用され始めた。
【０００３】
浮動小数点数のデータ形式は、ＩＥＥＥ７５４規格によって定義されている。このうち、単精度記憶形式の浮動小数点数は、上位ビットから順に、１ビットの符号部と、８ビットの指数部と、２３ビットの仮数部で定義されている。倍精度記憶形式の浮動小数点は、上位ビットから順に、１ビットの符号部と、１１ビットの指数部と、５２ビットの仮数部で定義されている。
【０００４】
これら浮動小数点数で表現可能なデータは、ゼロ、正規化数、非正規化数、無限大、非数のように分類される。このうち非数は、０÷０や、＋∞−∞といった浮動小数点演算の結果として、不正なオペランドを与えられたために生じた結果を表す値またはシンボルである。非数は、指数部が全て１であり、仮数部が０以外のビットパターンで与えられる。
【０００５】
ＩＥＥＥ７５４規格による浮動小数点演算の場合、非数を使用した演算結果は常に非数となる。そのため、演算の途中で非数が発生するとそれが後続する演算に伝播する。その結果、フィードバック系の制御や組込み制御装置で頻繁に用いられる学習制御で非数が一旦発生すると、それ以降で学習制御が困難になるという課題がある。
【０００６】
下記特許文献１に記載の電子制御装置では、浮動小数点型データのうち、他の制御で参照される参照データに関する演算結果のみに対し、非数であることを判定する。演算結果が非数である場合には、当該制御で更新する浮動小数点型の変数を、メモリ内のブロック単位で初期化する。これにより、変数同士の相関関係を保持し、非数による制御不良を防止することを図っている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第４１５８５６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
制御の処理内容によっては、内部的に発散している、すなわち内部変数に非数が発生している場合や、他制御で更新している変数が発散傾向にあり、その変数を参照した制御の演算結果が非数となる場合がある。
【０００９】
また、上記特許文献１に記載の技術のように、非数が発生した制御ブロックを初期化したとしても、非数が発生するような状況下では、次回演算時にも再度非数が発生する可能性が高く、十分に制御不良を防止できない可能性がある。
【００１０】
本発明は、上記のような課題を解決するためになされたものであり、浮動小数点形式のデータの演算結果が非数となった場合でも、当該制御および他の制御における制御不良を防止することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係る車載制御装置は、演算結果が浮動小数点形式の非数となった変数を参照または更新するプログラム内の変数を初期化する。
【発明の効果】
【００１２】
本発明に係る車載制御装置によれば、非数が発生した変数を参照または更新しているプログラム内の変数を初期化することにより、発散傾向にある変数が非数となって非数の発生箇所がさらに拡大する現象を防ぐことができる。これにより、非数発生に起因する制御不良を防止することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係る車載制御装置１００の機能ブロック図である。
【図２】ＩＥＥＥ７５４規格で定められた浮動小数点形式データ２１を示す。
【図３】浮動小数点形式データの指数部と仮数部の組み合わせを示す図である。
【図４】従来技術におけるエンジン制御処理フローの１例を示す図である。
【図５】図４のステップＳ４０１における吸気制御処理の処理フローを示す図である。
【図６】ＲＡＭ１１３内の各制御ブロックを示す図である。
【図７】従来技術におけるエンジン制御処理フローの別例を示す図である。
【図８】図７のステップＳ７０１における吸気制御処理の処理フローを示す図である。
【図９】ＲＡＭ１１３内の各制御ブロックを示す図である。
【図１０】実施の形態１におけるエンジン制御処理フローを示す図である。
【図１１】図１０のステップＳ１００１における吸気制御処理の処理フローを示す図である。
【図１２】図１１のステップＳ１１０８における非数発生時処理の処理フローを示す図である。
【図１３】図１２のステップＳ１２０２における吸気制御初期化処理の処理フローを示す図である。
【図１４】実施の形態２における吸気制御処理の処理フローを示す図である。
【図１５】実施の形態２における非数発生時処理の処理フローを示す図である。
【図１６】実施の形態３に係るエンジン制御処理の処理フローを示す図である。
【図１７】図１６のステップＳ１６０１における２ｍｓタスク処理の処理フローを示す図である。
【図１８】実施の形態３における非数発生時処理の処理フローを示す図である。
【図１９】図１８のステップＳ１８０２における２ｍｓタスク初期化処理の処理フローを示す図である。
【図２０】実施の形態４に係るエンジン制御処理の処理フローを示す図である。
【図２１】吸気制御初期化処理の処理フローを示す図である。
【発明を実施するための形態】
【００１４】
＜実施の形態１：装置構成＞
図１は、本発明の実施の形態１に係る車載制御装置１００の機能ブロック図である。車載制御装置１００は、制御対象機器２００を制御する装置であり、マイコン１１０、バッテリ１２０を有する。
【００１５】
マイコン１１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１１３、Ｉ／Ｏ１１４を備える。
【００１６】
ＣＰＵ１１１は、ＲＯＭ１１２に格納されている制御プログラムの指示にしたがって、制御対象機器に対する制御演算を実行する演算装置である。ＣＰＵ１１１は、浮動小数点数形式の演算を実行する単一のプロセッサとして構成してもよいし、浮動小数点演算用プロセッサとそれ以外の演算用プロセッサとで構成してもよい。
【００１７】
ＲＯＭ１１２は、ＣＰＵ１１１が実行する制御プログラムを格納する記憶装置であり、例えば後述の吸気制御プログラム、噴射制御プログラム、点火制御プログラムなどを格納する。ＲＡＭ１１３は、ＣＰＵ１１１が制御プログラムを実行している間に用いる変数などのデータを格納する記憶装置である。Ｉ／Ｏ１１４は、マイコン１１０と制御対象機器２００の間でデータや信号を送受信するインターフェースである。
【００１８】
制御対象機器２００は、任意の機器でよい。以下ではガソリン噴射式内燃機関であることを想定する。制御対象機器２００は、センサ２１０、アクチュエータ２２０を備える。センサ２１０は、吸入空気量センサ、エンジン回転数センサ、空燃費センサを含む。アクチュエータ２２０は、燃料噴射弁を含む。
【００１９】
車載制御装置１００は、吸入空気量センサから得た吸入空気量情報とエンジン回転数センサから得たエンジン回転数情報とによって算出される燃料噴射量に対し、目標空燃費と空燃費センサ出力の差分から算出した燃料噴射量補正係数を乗算して燃料噴射量とする。そして、車載制御装置１００は、算出された燃料噴射量に基づいて燃料噴射弁の開弁時間を制御する信号を出力する。車載制御装置１００は、動作電源が投入されている間、この処理動作を繰り返し実行する。
【００２０】
＜実施の形態１：データ形式＞
図２は、ＩＥＥＥ７５４規格で定められた浮動小数点形式データ２１を示す。ここでは燃料噴射量の算出に使用されるデータ形式の例を説明する。浮動小数点形式データ２１は、ｂｉｔ「３１」からなる１ビット長の符号部２２、ｂｉｔ「３０」〜「２３」からなる８ビット長の指数部２３、ｂｉｔ「２２」〜「０」からなる２３ビット長の仮数部２４からなる計４バイト長のデータ形式で与えられる。
【００２１】
図３は、浮動小数点形式データの指数部と仮数部の組み合わせを示す図である。浮動小数点形式データ２１は、図３に示すように、指数部と仮数部の組み合わせで、指数部と仮数部の全ビットが「０」となるゼロ３１、指数部の何れかのビットが「０」となる正規化数３２、指数部の全ビットが「０」で仮数部の何れかのビットが「１」となる非正規化数３３、指数部の全ビットが「１」で仮数部の全ビットが「０」の無限大３４、指数部の全ビットが「１」で仮数部の何れかのビットが「１」となる非数３５に分類される。
【００２２】
＜実施の形態１：従来の初期化処理＞
本実施の形態１と比較するため、従来技術において非数をどのように初期化しているかを、２つの例を挙げて説明する。
【００２３】
＜実施の形態１：従来の初期化処理その１＞
図４は、従来技術におけるエンジン制御処理フローの１例を示す図である。以下、図４の各ステップについて説明する。なお、図４の処理フローにおいて車載制御装置１００の構成は図１と同様であるものと仮定し、同じ符号を用いて説明する。本例では、説明の簡易化のため、吸気制御処理についてのみ説明する。
【００２４】
（図４：ステップＳ４０１）
ＣＰＵ１１１は、吸気制御プログラムが記述する動作にしたがって、後述の図５で説明する吸気制御処理を実行する。
【００２５】
（図４：ステップＳ４０２）
ＣＰＵ１１１は、ＲＡＭ１１３内の吸気制御処理に係る変数を格納する領域（後述の図６で説明する吸気制御ブロック１１３１）内に非数が発生しているか否かを判定する。非数が発生していればステップＳ４０３へ進み、発生していなければステップＳ４０４へ進む。本ステップの詳細は、後述の図６で改めて説明する。
【００２６】
（図４：ステップＳ４０３）
ＣＰＵ１１１は、ＲＡＭ１１３内の吸気制御ブロックを全て一括的に初期化する。
（図４：ステップＳ４０４〜Ｓ４０６）
ＣＰＵ１１１は、噴射制御プログラムが記述する動作にしたがって、ステップＳ４０１〜４０３と同様の手順により、噴射制御処理を実行する。また、ＲＡＭ１１３内の噴射制御処理に係る変数を格納する領域（噴射制御ブロック）に非数が発生していれば、これを初期化する。
【００２７】
（図４：ステップＳ４０７〜Ｓ４０９）
ＣＰＵ１１１は、点火制御プログラムが記述する動作にしたがって、ステップＳ４０１〜４０３と同様の手順により、点火制御処理を実行し、ＲＡＭ１１３内の点火制御処理に係る変数を格納する領域（点火制御ブロック）に非数が発生していれば、これを初期化する。
【００２８】
図５は、図４のステップＳ４０１における吸気制御処理の処理フローを示す図である。以下、図５の各ステップについて説明する。
【００２９】
（図５：ステップＳ５０１）
ＣＰＵ１１１は、吸気制御プログラム内で使用する変数Ａ１の値を演算する。
（図５：ステップＳ５０２）
ＣＰＵ１１１は、ＲＡＭ１１３内の吸気制御ブロックに変数Ａ１の値を書き込む。
【００３０】
（図５：ステップＳ５０３）
ＣＰＵ１１１は、吸気制御プログラム内で使用する変数Ａ２の値を演算する。
（図５：ステップＳ５０４）
ＣＰＵ１１１は、ＲＡＭ１１３内の吸気制御ブロックに変数Ａ２の値を書き込む。
【００３１】
図６は、ＲＡＭ１１３内の各制御ブロックを示す図である。ＲＡＭ１１３内の記憶領域は、各制御プログラムが使用する領域毎に区分されている。ここでは、図４で説明した吸気制御ブロック１１３１、噴射制御ブロック１１３２、点火制御ブロック１１３３を例示した。吸気制御ブロック１１３１の先頭アドレス１１３４と終了アドレス１１３６は、あらかじめ定められている。他の制御ブロックについても同様である。
【００３２】
ＣＰＵ１１１は、ステップＳ４０２において、吸気制御ブロック１１３１の先頭アドレス１１３４から終了アドレス１１３６まで４バイト単位で順に走査し、吸気制御ブロック１１３１に記憶されている変数の指数部２３が全て１で、仮数部２４のうち少なくとも１つが１である場合、非数であると判定する。図６では、吸気制御ブロック１１３１内に非数１１３５が１つ発生している例を示した。
【００３３】
ＣＰＵ１１１は、吸気制御ブロック１１３１内に非数１１３５が発生していることを発見すると、吸気制御ブロック１１３１を全て初期化（値をクリア）し、非数によって制御不良が生じないようにする。
【００３４】
＜実施の形態１：従来の初期化処理その２＞
図７は、従来技術におけるエンジン制御処理フローの別例を示す図である。以下、図７の各ステップについて説明する。なお、図７の処理フローにおいて車載制御装置１００の構成は図１と同様であるものと仮定し、同じ符号を用いて説明する。本例でも、説明の簡易化のため、吸気制御処理についてのみ説明する。
【００３５】
（図７：ステップＳ７０１）
ＣＰＵ１１１は、吸気制御プログラムが記述する動作にしたがって、後述の図８で説明する吸気制御処理を実行する。
（図７：ステップＳ７０２）
ＣＰＵ１１１は、噴射制御プログラムが記述する動作にしたがって、噴射制御処理を実行する。
【００３６】
（図７：ステップＳ７０３）
ＣＰＵ１１１は、点火制御プログラムが記述する動作にしたがって、点火制御処理を実行する。
【００３７】
図８は、図７のステップＳ７０１における吸気制御処理の処理フローを示す図である。本処理フローでは、図５で説明した処理フローとは異なり、吸気制御処理内でのみ参照される変数（Ｃ１）が存在する。以下、図８の各ステップについて説明する。
【００３８】
（図８：ステップＳ８０１）
ＣＰＵ１１１は、吸気制御プログラム内で使用する変数Ｂ１の値を演算する。
（図８：ステップＳ８０２）
ＣＰＵ１１１は、変数Ｂ１が非数であるか否かを判定する。非数であればステップＳ８０９へ進み、非数でなければステップＳ８０３へ進む。
【００３９】
（図８：ステップＳ８０３）
ＣＰＵ１１１は、ＲＡＭ１１３内の吸気制御ブロックに変数Ｂ１の値を書き込む。
（図８：ステップＳ８０４）
ＣＰＵ１１１は、吸気制御プログラム内のみで使用する変数（非参照データ）Ｃ１の値を演算する。
【００４０】
（図８：ステップＳ８０５）
ＣＰＵ１１１は、ＲＡＭ１１３内の吸気制御ブロックに変数Ｃ１の値を書き込む。
（図８：ステップＳ８０６〜Ｓ８０８）
ＣＰＵ１１１は、ステップＳ８０１〜Ｓ８０３と同様に、変数Ｂ２の値を演算してＲＡＭ１１３内の吸気制御ブロックに書き込む。
（図８：ステップＳ８０９）
ＣＰＵ１１１は、ＲＡＭ１１３内の吸気制御ブロックを全て一括的に初期化する。
【００４１】
図９は、ＲＡＭ１１３内の各制御ブロックを示す図である。図９では、図６とは異なり吸気制御ブロック１１３１の内部が非参照データ７１を格納する領域と参照データ７２を格納する領域に分割されている。
【００４２】
非参照データ７１は、吸気制御プログラムの内部のみで使用される変数であり、変数Ｃ
１などがこれに相当する。参照データ７２は、吸気制御プログラム以外のプログラムからも参照される変数であり、変数Ｂ１などがこれに相当する。ＣＰＵ１１１は、吸気制御ブロック１１３１内に非数が発生すると、吸気制御ブロック１１３１全体を一括して初期化し、非参照データ７１と参照データ７２をともにクリアする。
【００４３】
以上、従来技術において非数をどのように初期化しているかを説明した。以下では、本実施の形態１において非数を初期化する手順を説明する。
【００４４】
＜実施の形態１：非数の初期化処理＞
図１０は、本実施の形態１におけるエンジン制御処理フローを示す図である。図１０に示すエンジン制御処理フローは、図７に示すフローと同様であるため、説明は省略する。
【００４５】
図１１は、図１０のステップＳ１００１における吸気制御処理の処理フローを示す図である。以下、図１１の各ステップについて説明する。
【００４６】
（図１１：ステップＳ１１０１）
ＣＰＵ１１１は、吸気制御識別フラグの値をｔｒｕｅにセットする。吸気制御識別フラグは、現在ＣＰＵ１１１が吸気制御処理を実行していることを示すフラグである。吸気制御識別フラグ＝ｔｒｕｅのときは、ＣＰＵ１１１が吸気制御処理を実行中であることを示す。
（図１１：ステップＳ１１０２）
ＣＰＵ１１１は、吸気制御プログラム内で使用する変数Ａ１の値を演算する。
【００４７】
（図１１：ステップＳ１１０３）
ＣＰＵ１１１は、変数Ａ１が非数であるか否かを判定する。非数であればステップＳ１１０８へ進み、非数でなければステップＳ１１０４へ進む。
（図１１：ステップＳ１１０４）
ＣＰＵ１１１は、ＲＡＭ１１３内の吸気制御ブロックに変数Ａ１の値を書き込む。
【００４８】
（図１１：ステップＳ１１０５〜Ｓ１１０７）
ＣＰＵ１１１は、ステップＳ１１０２〜Ｓ１１０４と同様に、変数Ａ２の値を演算してＲＡＭ１１３内の吸気制御ブロックに書き込む。
（図１１：ステップＳ１１０８）
ＣＰＵ１１１は、後述の図１２で説明する非数発生時処理を実行し、非数が発生した変数および関連する変数を初期化する。
【００４９】
（図１１：ステップＳ１１０９）
ＣＰＵ１１１は、吸気制御処理が完了した旨を示すため、吸気制御識別フラグの値をｆａｌｓｅにセットする。
【００５０】
以上、吸気制御処理フローについて説明した。噴射制御処理フロー、点火制御処理フローも、図１１と同様の手順で実行される。また、各制御処理フロー内では、実行している制御処理フローを識別するため、ステップＳ１１０１およびＳ１１０９と同様に、噴射制御識別フラグまたは点火制御識別フラグの値がセットされる。
【００５１】
図１２は、図１１のステップＳ１１０８における非数発生時処理の処理フローを示す図である。以下、図１２の各ステップについて説明する。
【００５２】
（図１２：ステップＳ１２０１）
ＣＰＵ１１１は、吸気制御識別フラグがｔｒｕｅであるか否かを判定する。ｔｒｕｅであればステップＳ１２０２に進み、ｔｒｕｅでなければステップＳ１２０３へ進む。
（図１２：ステップＳ１２０２）
ＣＰＵ１１１は、吸気制御初期化処理を実行する。本ステップの詳細は、後述の図１３で改めて説明する。
【００５３】
（図１２：ステップＳ１２０３）
ＣＰＵ１１１は、噴射制御識別フラグがｔｒｕｅであるか否かを判定する。ｔｒｕｅであればステップＳ１２０４に進み、ｔｒｕｅでなければステップＳ１２０５へ進む。以下同様に、各制御処理の識別フラグがｒｕｅであるか否かを順次判定し、ＣＰＵ１１１がどの制御処理を実行中であるかを識別する。
【００５４】
（図１２：ステップＳ１２０４）
ＣＰＵ１１１は、噴射制御初期化処理を実行する。本ステップの詳細は、後述の図１３で吸気制御初期化処理について説明する際に併せて説明する。
【００５５】
図１３は、図１２のステップＳ１２０２における吸気制御初期化処理の処理フローを示す図である。ＣＰＵ１１１は、吸気制御初期化処理（ステップＳ１３０１）において、非数が発生した変数を初期化するとともに、同変数を参照して算出される変数など、非数が発生した変数によって影響を受ける変数を一括して初期化する。
【００５６】
（図１３：吸気制御初期化処理：補足１）
本処理で初期化する変数は、必ずしも吸気制御処理内で用いられる全ての変数でなくともよい。非数が発生した変数によって影響を受ける変数、例えばある変数が非数となると派生的に非数となる変数などを初期化することもできる。その他の任意の変数を初期化対象としてもよい。以下同様である。
【００５７】
（図１３：吸気制御初期化処理：補足２）
本処理で初期化する変数は、必ずしも吸気制御処理内で用いられる変数に限られるものではない。例えば、吸気制御処理内の変数を噴射制御処理などの他の制御プログラム内で参照している場合は、その変数を初期化してもよい。これにより、非数の影響が他の制御プログラムに派生することを防ぐ。例えば、吸気制御で演算した吸入空気量の推定値を用いて、噴射制御で噴射パルス幅を演算した結果、噴射パルス幅が非数となった場合は、噴射パルス幅だけでなく、吸入空気量の推定値も初期化することができる。
【００５８】
（図１３：吸気制御初期化処理：補足３）
非数となった変数と、そのとき初期化対象として選定する制御プログラムおよび変数については、例えば非数が発生した変数とそのときの初期化対象変数との対応関係をテーブルデータとしてＲＯＭ１１２などに記憶させておき、これを参照して選定すればよい。その他、各制御プログラム内において、同様の対応関係をプログラム上に関数などの形式で記述しておき、その関数をコールするようにしてもよい。その他の任意の選定手法を採用してもよい。
【００５９】
（図１３：吸気制御初期化処理：補足４）
初期化する変数を選定する手段として、ＣＰＵ１１１が実行する制御プログラム内に上述の対応関係を記述する以外に、例えば同様の処理を実現する回路などのハードウェアを用いることもできる。
【００６０】
（図１３：吸気制御初期化処理：補足５）
変数の初期化処理は、初期化する変数に所定値（例えばゼロ）を代入する初期化関数をコールすることによって実行してもよいし、ＯＳ（オペレーティングシステム）の機能を用いてＲＡＭ１１３内の初期化対象変数を格納している領域を一括的に初期化する処理群をコールすることによって実行してもよい。
【００６１】
（図１３：吸気制御初期化処理：補足６）
図１３では吸気制御初期化処理についてのみ説明したが、他の制御処理に係る初期化処理についても、同様の手法を用いることができる。
【００６２】
以上、本実施の形態１におけるエンジン制御処理および非数が発生した変数の初期化処理について説明した。
【００６３】
以上のように、本実施の形態１によれば、ＣＰＵ１１１は、非数データとなった変数を参照または更新するプログラム内の変数を、一括して初期化する。これにより、非数が発生したことの影響が派生して制御を行えなくなる現象を発生しにくくすることができる。
【００６４】
また、本実施の形態１によれば、ＣＰＵ１１１は、非数が発生した変数のみならず、非数が発生した変数を参照または更新する同プログラム内の変数、さらには非数が発生した変数を参照または更新する他のプログラム内の変数を初期化する。これにより、非数が発生したことによる影響が当該プログラムに与える影響を抑えるのみならず、他のプログラムに与える影響を抑えることもできる。すなわち、非数が発生することによって制御を行うことができなくなる可能性を、より確実に低減することができる。
【００６５】
また、本実施の形態１によれば、ＣＰＵ１１１は、各制御処理の識別フラグによって、いずれの制御プログラムを実行中であるかを識別し、その制御プログラムに対応する初期化処理を実行する。これにより、初期化対象とする変数を適切に選定することができる。
【００６６】
＜実施の形態２＞
図１４は、本発明の実施の形態２における吸気制御処理の処理フローを示す図である。本実施の形態２において、ステップＳ１４０１とＳ１４０９では、実施の形態１の図１１で説明した吸気制御識別フラグに代えて、各制御プログラムに共通の制御識別フラグの値をセットする。
【００６７】
制御識別フラグの値が０であるときは、ＣＰＵ１１１が制御処理を実行していないことを示す。制御識別フラグの値が１であるときは、ＣＰＵ１１１が吸気制御処理を実行していることを示す。以下同様に、制御識別フラグの値によって、ＣＰＵ１１１がいずれの制御処理を実行しているかを表すことにする。
【００６８】
なお、ＣＰＵ１１１がいずれの制御処理を実行しているかを判定するのは、制御処理中に非数が発生した際にいずれの初期化処理を実行すべきかを判定するためである。したがって、制御識別フラグ＝０という状態は必ずしも設ける必要はなく、ステップＳ１４０９を省略してもよい。
【００６９】
図１５は、本実施の形態２における非数発生時処理の処理フローを示す図である。本実施の形態２では、実施の形態１の図１２で説明したフローに代えて、制御識別フラグの値によって、いずれの初期化処理を実行するかを判定する。
【００７０】
本実施の形態２でも、実施の形態１と同様の効果を発揮することができる。また、単一の識別フラグを用いて、いずれの制御プログラムを実行中であるかを表すので、フラグを格納する記憶領域をフラグ１つ分のみに抑えることができる。さらには、ステップＳ１４０９を省略した場合、その分の処理負担を低減することができる。
【００７１】
＜実施の形態３＞
実施の形態１〜２では、吸気制御処理、噴射制御処理、点火制御処理を順次実行する動作例を説明した。また、制御処理毎に初期化処理の内容を定め、制御識別フラグなどの値によって、いずれの初期化処理を実行するかを判定することを説明した。
【００７２】
一方、エンジン制御処理の区分の仕方として、制御処理の内容の他に、各制御処理の実行周期によって制御処理を区分する手法もある。例えば、頻繁に更新する必要のある制御変数は、短い周期で実行されるプログラム内で更新する、といった区分である。
【００７３】
本発明の実施の形態３では、同じ周期で実行される１以上の制御プログラムをプログラムセットとしてまとめてタスクとして区分し、同じ周期で実行されるタスク毎に初期化処理の内容を定める動作例を説明する。車載制御装置１００の構成は、実施の形態１〜２と同様である。
【００７４】
図１６は、本実施の形態３に係るエンジン制御処理の処理フローを示す図である。本実施の形態３において、ＣＰＵ１１１は、２ｍｓ毎に実行するタスク、４ｍｓ毎に実行するタスク、８ｍｓ毎に実行するタスクを有する。
【００７５】
ＣＰＵ１１１は、これらのタスクをそれぞれ並列的に実行するが、ある時点において複数のタスクの実行タイミングが重なった場合は、より優先度の高いタスクを優先して実行する。一般的には、実行周期の短いタスクのほうが優先度が高いため、実行周期の短いタスクから順に実行される。本実施の形態３では、タスクの実行順は図１６のようになる。
【００７６】
図１７は、図１６のステップＳ１６０１における２ｍｓタスク処理の処理フローを示す図である。以下、図１７の各ステップについて説明する。
【００７７】
（図１７：ステップＳ１７０１）
ＣＰＵ１１１は、タスク識別フラグの値を２にセットする。タスク識別フラグは、現在ＣＰＵ１１１がどのタスク（制御プログラムセット）を実行中であるかを示すフラグである。タスク識別フラグ＝２のときは、ＣＰＵ１１１が２ｍｓタスクを実行中であることを示す。
【００７８】
（図１７：ステップＳ１７０２〜Ｓ１７０４）
ＣＰＵ１１１は、吸気制御処理、噴射制御処理、点火制御処理をこの順に実行する。これらの制御処理の内容は、後述の図１８で説明する非数発生時処理を除いて、実施の形態１〜２と同様である。なお、各タスクにおいてどの制御処理を実行するかは、制御対象の仕様などに応じて異なるので、適宜定めればよい。
【００７９】
図１８は、本実施の形態３における非数発生時処理の処理フローを示す図である。本実施の形態３においてＣＰＵ１１１は、実施の形態１の図１２で説明したフローに代えて、タスク識別フラグの値によって、いずれの初期化処理を実行するかを判定する。また、初期化処理は、制御処理毎に設けるのではなく、タスク毎に設ける。
【００８０】
図１９は、図１８のステップＳ１８０２における２ｍｓタスク初期化処理の処理フローを示す図である。本実施の形態３では、非数が発生した変数を参照する各制御プログラム内の変数を初期化するのみならず、各タスクを開始する際に初期化する必要のある変数を併せて初期化する。
【００８１】
以上のように、本実施の形態３によれば、ＣＰＵ１１１は、非数が発生した際には、タスク毎に必要な初期化処理を実行し、当該タスクを速やかに正常な状態に戻して再開する。換言すると、本実施の形態３においてＣＰＵ１１１は、非数が発生した際には、タスク単位で初期化を実行することができるということもできる。非数が発生するタイミングは予測が難しいため、各制御処理が初期化されるタイミングも予測が難しいといえるが、本実施の形態ではタスク単位で初期化を実行することができるので、並列実行するタスクの実行タイミングを容易に制御することができる。
【００８２】
＜実施の形態４＞
本発明の実施の形態４では、各制御演算が主演算と副演算による冗長化構成を有する場合の動作例について説明する。車載制御装置１００の構成は、実施の形態１〜２と同様である。ただし各制御処理について、主演算プログラムと１以上の副演算プログラムを設けている。
【００８３】
主演算と副演算は、それぞれ同じ制御演算を個別に実行し、互いの演算結果が合致するか否かにより、主演算に障害が発生していないかをチェックするために行われる。主演算に非数が発生した場合、主演算を初期化するのみならず副演算も初期化する必要がある。また、非数が発生するのは主演算のみに限られず、副演算においても非数が発生する可能性がある。
【００８４】
そこで本実施の形態４では、主演算または副演算で非数が発生した際に、各演算を初期化する動作例を説明する。
【００８５】
図２０は、本実施の形態４に係るエンジン制御処理の処理フローを示す図である。本実施の形態４において、ＣＰＵ１１１は、実施の形態１と同様に、吸気制御処理、噴射制御処理などの制御処理を、この順番で実行する。ただし各制御処理は、主演算と任意個数の副演算が存在する。主演算または副演算のいずれかで非数が発生した場合は、後述の図２１で説明する初期化処理を実行する。
【００８６】
図２１は、吸気制御初期化処理の処理フローを示す図である。吸気制御初期化処理の主演算または副演算のいずれかで非数が発生すると、ＣＰＵ１１１は、図１３と同様に主演算における非数が発生した変数を初期化するとともに、同変数を参照して算出される変数など、非数が発生した変数によって影響を受ける変数を一括して初期化する。また、ＣＰＵ１１１は、主演算の各変数を初期化する際に、副演算の対応する変数も併せて初期化する。
【００８７】
以上のように、本実施の形態４によれば、ＣＰＵ１１１は、主演算または副演算に非数が発生すると、主演算内の変数を実施の形態１と同様に初期化するとともに、副演算の対応する変数も初期化する。これにより、主演算と副演算からなる冗長化構成を有する制御演算を、速やかに初期化し、正常な状態に戻して制御を再開することができる。
【００８８】
＜実施の形態５＞
以上の実施の形態１〜４で説明した手法は、適宜組み合わせることができる。例えば、実施の形態３で説明した２ｍｓタスクにおいて、実施の形態４で説明した主演算と副演算に係る構成およびその初期化手順を採用することができる。
【００８９】
＜実施の形態６＞
以上の実施の形態１〜５において、制御対象機器２００は、前述したガソリン噴射式内燃機関以外の機器、例えばエアコンでもよい。すなわち、車載制御装置１００の制御対象は、典型的には車両のエンジンのような機器であるが、これに限られるものではない。制御対象機器２００がエアコンである場合、車載制御装置１００は、エアコンの制御コントローラとなる。その他、制御対象機器２００は電気モータでもよい。制御対象機器２００が電気モータである場合、車載制御装置１００は、電気モータの制御コントローラとなる。
【００９０】
また、車載制御装置１００は、典型的には車両に搭載され、車両内の各機器を制御するが、制御対象が車両機器でないような場合などには、必ずしも車両内に搭載する必要はない。
【００９１】
制御対象機器２００がどのような機器である場合でも、ハードウェアにソフトウェアがあらかじめ組み込まれた組込み制御装置であれば、本明細書において説明する技術を適用することができる。特に、制御過程で変数の発散傾向が蓄積して非数が発生しやすいような制御対象機器において、有効である。
【００９２】
＜実施の形態７＞
以上の実施の形態１〜６では、浮動小数点形式の非数が発生した場合について説明しているが、浮動小数点形式の無限大が発生した場合においても、非数が発生した場合と同様に制御演算が困難になる。
【００９３】
そこで、上記実施の形態１〜６において、非数が発生した旨を検出することに代えて、またはこれと並行して、無限大が発生した旨を検出し、同様の初期化処理を実行することもできる。これにより、制御演算が実行できなくなる可能性をより確実に抑えることができる。
【００９４】
＜実施の形態８＞
以上の実施の形態１〜７では、単精度浮動小数点数データ形式を扱う組込み制御装置の場合について説明したが、倍精度浮動小数点データ形式を扱う組込み制御装置についても前述した仕組みを同様に適用することができる。
【００９５】
また、本発明は、前述した形態例の説明に限定されるものではなく、特許請求の範囲に記載された発明の範囲において様々な変更が可能であることは当業者によって容易に理解される。
【符号の説明】
【００９６】
１００：車載制御装置、１１０：マイコン、１１１：ＣＰＵ、１１２：ＲＯＭ、１１３：ＲＡＭ、１１３１：吸気制御ブロック、１１３２：噴射制御ブロック、１１３３：点火制御ブロック、１１３４：先頭アドレス、１１３６：終了アドレス、１１４：Ｉ／Ｏ、１２０：バッテリ、２００：制御対象機器、２１：浮動小数点形式データ、２２：符号部、２３：指数部、２４：仮数部、３１：ゼロ、３２：正規化数、３３：非正規化数、３４：無限大、３５：非数、７１：非参照データ、７２：参照データ。
【図１】
2011164814.tif 000003
【図２】
2011164814.tif 000004
【図３】
2011164814.tif 000005
【図４】
2011164814.tif 000006
【図５】
2011164814.tif 000007
【図６】
2011164814.tif 000008
【図７】
2011164814.tif 000009
【図８】
2011164814.tif 000010
【図９】
2011164814.tif 000011
【図１０】
2011164814.tif 000012
【図１１】
2011164814.tif 000013
【図１２】
2011164814.tif 000014
【図１３】
2011164814.tif 000015
【図１４】
2011164814.tif 000016
【図１５】
2011164814.tif 000017
【図１６】
2011164814.tif 000018
【図１７】
2011164814.tif 000019
【図１８】
2011164814.tif 000020
【図１９】
2011164814.tif 000021
【図２０】
2011164814.tif 000022
【図２１】
2011164814.tif 000023