説明

車載制御装置

【課題】浮動小数点形式のデータの演算結果が非数となった場合でも、当該制御および他の制御における制御不良を防止する。
【解決手段】CPUは、吸気制御初期化処理(ステップS1301)において、非数が発生した変数を初期化するとともに、同変数を参照して算出される変数など、非数が発生した変数によって影響を受ける変数を一括して初期化する。本処理で初期化する変数は、必ずしも吸気制御処理内で用いられる全ての変数でなくともよい。非数が発生した変数によって影響を受ける変数、例えばある変数が非数となると派生的に非数となる変数などを初期化することもできる。その他の任意の変数を初期化対象としてもよい。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、車載制御装置に関するものである。
【背景技術】
【0002】
近年、自動車における排気・燃費規制が強化され、要求される操安性・安全性レベルが向上し、自動車の組込み制御装置においても、制御精度の向上が求められている。そのため、従来の固定小数点数演算に代えて、浮動小数点演算を行う中央演算処理装置を備えた制御コントロールユニットが採用され始めた。
【0003】
浮動小数点数のデータ形式は、IEEE754規格によって定義されている。このうち、単精度記憶形式の浮動小数点数は、上位ビットから順に、1ビットの符号部と、8ビットの指数部と、23ビットの仮数部で定義されている。倍精度記憶形式の浮動小数点は、上位ビットから順に、1ビットの符号部と、11ビットの指数部と、52ビットの仮数部で定義されている。
【0004】
これら浮動小数点数で表現可能なデータは、ゼロ、正規化数、非正規化数、無限大、非数のように分類される。このうち非数は、0÷0や、+∞−∞といった浮動小数点演算の結果として、不正なオペランドを与えられたために生じた結果を表す値またはシンボルである。非数は、指数部が全て1であり、仮数部が0以外のビットパターンで与えられる。
【0005】
IEEE754規格による浮動小数点演算の場合、非数を使用した演算結果は常に非数となる。そのため、演算の途中で非数が発生するとそれが後続する演算に伝播する。その結果、フィードバック系の制御や組込み制御装置で頻繁に用いられる学習制御で非数が一旦発生すると、それ以降で学習制御が困難になるという課題がある。
【0006】
下記特許文献1に記載の電子制御装置では、浮動小数点型データのうち、他の制御で参照される参照データに関する演算結果のみに対し、非数であることを判定する。演算結果が非数である場合には、当該制御で更新する浮動小数点型の変数を、メモリ内のブロック単位で初期化する。これにより、変数同士の相関関係を保持し、非数による制御不良を防止することを図っている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特許第4158566号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
制御の処理内容によっては、内部的に発散している、すなわち内部変数に非数が発生している場合や、他制御で更新している変数が発散傾向にあり、その変数を参照した制御の演算結果が非数となる場合がある。
【0009】
また、上記特許文献1に記載の技術のように、非数が発生した制御ブロックを初期化したとしても、非数が発生するような状況下では、次回演算時にも再度非数が発生する可能性が高く、十分に制御不良を防止できない可能性がある。
【0010】
本発明は、上記のような課題を解決するためになされたものであり、浮動小数点形式のデータの演算結果が非数となった場合でも、当該制御および他の制御における制御不良を防止することを目的とする。
【課題を解決するための手段】
【0011】
本発明に係る車載制御装置は、演算結果が浮動小数点形式の非数となった変数を参照または更新するプログラム内の変数を初期化する。
【発明の効果】
【0012】
本発明に係る車載制御装置によれば、非数が発生した変数を参照または更新しているプログラム内の変数を初期化することにより、発散傾向にある変数が非数となって非数の発生箇所がさらに拡大する現象を防ぐことができる。これにより、非数発生に起因する制御不良を防止することができる。
【図面の簡単な説明】
【0013】
【図1】実施の形態1に係る車載制御装置100の機能ブロック図である。
【図2】IEEE754規格で定められた浮動小数点形式データ21を示す。
【図3】浮動小数点形式データの指数部と仮数部の組み合わせを示す図である。
【図4】従来技術におけるエンジン制御処理フローの1例を示す図である。
【図5】図4のステップS401における吸気制御処理の処理フローを示す図である。
【図6】RAM113内の各制御ブロックを示す図である。
【図7】従来技術におけるエンジン制御処理フローの別例を示す図である。
【図8】図7のステップS701における吸気制御処理の処理フローを示す図である。
【図9】RAM113内の各制御ブロックを示す図である。
【図10】実施の形態1におけるエンジン制御処理フローを示す図である。
【図11】図10のステップS1001における吸気制御処理の処理フローを示す図である。
【図12】図11のステップS1108における非数発生時処理の処理フローを示す図である。
【図13】図12のステップS1202における吸気制御初期化処理の処理フローを示す図である。
【図14】実施の形態2における吸気制御処理の処理フローを示す図である。
【図15】実施の形態2における非数発生時処理の処理フローを示す図である。
【図16】実施の形態3に係るエンジン制御処理の処理フローを示す図である。
【図17】図16のステップS1601における2msタスク処理の処理フローを示す図である。
【図18】実施の形態3における非数発生時処理の処理フローを示す図である。
【図19】図18のステップS1802における2msタスク初期化処理の処理フローを示す図である。
【図20】実施の形態4に係るエンジン制御処理の処理フローを示す図である。
【図21】吸気制御初期化処理の処理フローを示す図である。
【発明を実施するための形態】
【0014】
<実施の形態1:装置構成>
図1は、本発明の実施の形態1に係る車載制御装置100の機能ブロック図である。車載制御装置100は、制御対象機器200を制御する装置であり、マイコン110、バッテリ120を有する。
【0015】
マイコン110は、CPU(Central Processing Unit)111、ROM(Read Only Memory)112、RAM(Random Access Memory)113、I/O114を備える。
【0016】
CPU111は、ROM112に格納されている制御プログラムの指示にしたがって、制御対象機器に対する制御演算を実行する演算装置である。CPU111は、浮動小数点数形式の演算を実行する単一のプロセッサとして構成してもよいし、浮動小数点演算用プロセッサとそれ以外の演算用プロセッサとで構成してもよい。
【0017】
ROM112は、CPU111が実行する制御プログラムを格納する記憶装置であり、例えば後述の吸気制御プログラム、噴射制御プログラム、点火制御プログラムなどを格納する。RAM113は、CPU111が制御プログラムを実行している間に用いる変数などのデータを格納する記憶装置である。I/O114は、マイコン110と制御対象機器200の間でデータや信号を送受信するインターフェースである。
【0018】
制御対象機器200は、任意の機器でよい。以下ではガソリン噴射式内燃機関であることを想定する。制御対象機器200は、センサ210、アクチュエータ220を備える。センサ210は、吸入空気量センサ、エンジン回転数センサ、空燃費センサを含む。アクチュエータ220は、燃料噴射弁を含む。
【0019】
車載制御装置100は、吸入空気量センサから得た吸入空気量情報とエンジン回転数センサから得たエンジン回転数情報とによって算出される燃料噴射量に対し、目標空燃費と空燃費センサ出力の差分から算出した燃料噴射量補正係数を乗算して燃料噴射量とする。そして、車載制御装置100は、算出された燃料噴射量に基づいて燃料噴射弁の開弁時間を制御する信号を出力する。車載制御装置100は、動作電源が投入されている間、この処理動作を繰り返し実行する。
【0020】
<実施の形態1:データ形式>
図2は、IEEE754規格で定められた浮動小数点形式データ21を示す。ここでは燃料噴射量の算出に使用されるデータ形式の例を説明する。浮動小数点形式データ21は、bit「31」からなる1ビット長の符号部22、bit「30」〜「23」からなる8ビット長の指数部23、bit「22」〜「0」からなる23ビット長の仮数部24からなる計4バイト長のデータ形式で与えられる。
【0021】
図3は、浮動小数点形式データの指数部と仮数部の組み合わせを示す図である。浮動小数点形式データ21は、図3に示すように、指数部と仮数部の組み合わせで、指数部と仮数部の全ビットが「0」となるゼロ31、指数部の何れかのビットが「0」となる正規化数32、指数部の全ビットが「0」で仮数部の何れかのビットが「1」となる非正規化数33、指数部の全ビットが「1」で仮数部の全ビットが「0」の無限大34、指数部の全ビットが「1」で仮数部の何れかのビットが「1」となる非数35に分類される。
【0022】
<実施の形態1:従来の初期化処理>
本実施の形態1と比較するため、従来技術において非数をどのように初期化しているかを、2つの例を挙げて説明する。
【0023】
<実施の形態1:従来の初期化処理その1>
図4は、従来技術におけるエンジン制御処理フローの1例を示す図である。以下、図4の各ステップについて説明する。なお、図4の処理フローにおいて車載制御装置100の構成は図1と同様であるものと仮定し、同じ符号を用いて説明する。本例では、説明の簡易化のため、吸気制御処理についてのみ説明する。
【0024】
(図4:ステップS401)
CPU111は、吸気制御プログラムが記述する動作にしたがって、後述の図5で説明する吸気制御処理を実行する。
【0025】
(図4:ステップS402)
CPU111は、RAM113内の吸気制御処理に係る変数を格納する領域(後述の図6で説明する吸気制御ブロック1131)内に非数が発生しているか否かを判定する。非数が発生していればステップS403へ進み、発生していなければステップS404へ進む。本ステップの詳細は、後述の図6で改めて説明する。
【0026】
(図4:ステップS403)
CPU111は、RAM113内の吸気制御ブロックを全て一括的に初期化する。
(図4:ステップS404〜S406)
CPU111は、噴射制御プログラムが記述する動作にしたがって、ステップS401〜403と同様の手順により、噴射制御処理を実行する。また、RAM113内の噴射制御処理に係る変数を格納する領域(噴射制御ブロック)に非数が発生していれば、これを初期化する。
【0027】
(図4:ステップS407〜S409)
CPU111は、点火制御プログラムが記述する動作にしたがって、ステップS401〜403と同様の手順により、点火制御処理を実行し、RAM113内の点火制御処理に係る変数を格納する領域(点火制御ブロック)に非数が発生していれば、これを初期化する。
【0028】
図5は、図4のステップS401における吸気制御処理の処理フローを示す図である。以下、図5の各ステップについて説明する。
【0029】
(図5:ステップS501)
CPU111は、吸気制御プログラム内で使用する変数A1の値を演算する。
(図5:ステップS502)
CPU111は、RAM113内の吸気制御ブロックに変数A1の値を書き込む。
【0030】
(図5:ステップS503)
CPU111は、吸気制御プログラム内で使用する変数A2の値を演算する。
(図5:ステップS504)
CPU111は、RAM113内の吸気制御ブロックに変数A2の値を書き込む。
【0031】
図6は、RAM113内の各制御ブロックを示す図である。RAM113内の記憶領域は、各制御プログラムが使用する領域毎に区分されている。ここでは、図4で説明した吸気制御ブロック1131、噴射制御ブロック1132、点火制御ブロック1133を例示した。吸気制御ブロック1131の先頭アドレス1134と終了アドレス1136は、あらかじめ定められている。他の制御ブロックについても同様である。
【0032】
CPU111は、ステップS402において、吸気制御ブロック1131の先頭アドレス1134から終了アドレス1136まで4バイト単位で順に走査し、吸気制御ブロック1131に記憶されている変数の指数部23が全て1で、仮数部24のうち少なくとも1つが1である場合、非数であると判定する。図6では、吸気制御ブロック1131内に非数1135が1つ発生している例を示した。
【0033】
CPU111は、吸気制御ブロック1131内に非数1135が発生していることを発見すると、吸気制御ブロック1131を全て初期化(値をクリア)し、非数によって制御不良が生じないようにする。
【0034】
<実施の形態1:従来の初期化処理その2>
図7は、従来技術におけるエンジン制御処理フローの別例を示す図である。以下、図7の各ステップについて説明する。なお、図7の処理フローにおいて車載制御装置100の構成は図1と同様であるものと仮定し、同じ符号を用いて説明する。本例でも、説明の簡易化のため、吸気制御処理についてのみ説明する。
【0035】
(図7:ステップS701)
CPU111は、吸気制御プログラムが記述する動作にしたがって、後述の図8で説明する吸気制御処理を実行する。
(図7:ステップS702)
CPU111は、噴射制御プログラムが記述する動作にしたがって、噴射制御処理を実行する。
【0036】
(図7:ステップS703)
CPU111は、点火制御プログラムが記述する動作にしたがって、点火制御処理を実行する。
【0037】
図8は、図7のステップS701における吸気制御処理の処理フローを示す図である。本処理フローでは、図5で説明した処理フローとは異なり、吸気制御処理内でのみ参照される変数(C1)が存在する。以下、図8の各ステップについて説明する。
【0038】
(図8:ステップS801)
CPU111は、吸気制御プログラム内で使用する変数B1の値を演算する。
(図8:ステップS802)
CPU111は、変数B1が非数であるか否かを判定する。非数であればステップS809へ進み、非数でなければステップS803へ進む。
【0039】
(図8:ステップS803)
CPU111は、RAM113内の吸気制御ブロックに変数B1の値を書き込む。
(図8:ステップS804)
CPU111は、吸気制御プログラム内のみで使用する変数(非参照データ)C1の値を演算する。
【0040】
(図8:ステップS805)
CPU111は、RAM113内の吸気制御ブロックに変数C1の値を書き込む。
(図8:ステップS806〜S808)
CPU111は、ステップS801〜S803と同様に、変数B2の値を演算してRAM113内の吸気制御ブロックに書き込む。
(図8:ステップS809)
CPU111は、RAM113内の吸気制御ブロックを全て一括的に初期化する。
【0041】
図9は、RAM113内の各制御ブロックを示す図である。図9では、図6とは異なり吸気制御ブロック1131の内部が非参照データ71を格納する領域と参照データ72を格納する領域に分割されている。
【0042】
非参照データ71は、吸気制御プログラムの内部のみで使用される変数であり、変数C
1などがこれに相当する。参照データ72は、吸気制御プログラム以外のプログラムからも参照される変数であり、変数B1などがこれに相当する。CPU111は、吸気制御ブロック1131内に非数が発生すると、吸気制御ブロック1131全体を一括して初期化し、非参照データ71と参照データ72をともにクリアする。
【0043】
以上、従来技術において非数をどのように初期化しているかを説明した。以下では、本実施の形態1において非数を初期化する手順を説明する。
【0044】
<実施の形態1:非数の初期化処理>
図10は、本実施の形態1におけるエンジン制御処理フローを示す図である。図10に示すエンジン制御処理フローは、図7に示すフローと同様であるため、説明は省略する。
【0045】
図11は、図10のステップS1001における吸気制御処理の処理フローを示す図である。以下、図11の各ステップについて説明する。
【0046】
(図11:ステップS1101)
CPU111は、吸気制御識別フラグの値をtrueにセットする。吸気制御識別フラグは、現在CPU111が吸気制御処理を実行していることを示すフラグである。吸気制御識別フラグ=trueのときは、CPU111が吸気制御処理を実行中であることを示す。
(図11:ステップS1102)
CPU111は、吸気制御プログラム内で使用する変数A1の値を演算する。
【0047】
(図11:ステップS1103)
CPU111は、変数A1が非数であるか否かを判定する。非数であればステップS1108へ進み、非数でなければステップS1104へ進む。
(図11:ステップS1104)
CPU111は、RAM113内の吸気制御ブロックに変数A1の値を書き込む。
【0048】
(図11:ステップS1105〜S1107)
CPU111は、ステップS1102〜S1104と同様に、変数A2の値を演算してRAM113内の吸気制御ブロックに書き込む。
(図11:ステップS1108)
CPU111は、後述の図12で説明する非数発生時処理を実行し、非数が発生した変数および関連する変数を初期化する。
【0049】
(図11:ステップS1109)
CPU111は、吸気制御処理が完了した旨を示すため、吸気制御識別フラグの値をfalseにセットする。
【0050】
以上、吸気制御処理フローについて説明した。噴射制御処理フロー、点火制御処理フローも、図11と同様の手順で実行される。また、各制御処理フロー内では、実行している制御処理フローを識別するため、ステップS1101およびS1109と同様に、噴射制御識別フラグまたは点火制御識別フラグの値がセットされる。
【0051】
図12は、図11のステップS1108における非数発生時処理の処理フローを示す図である。以下、図12の各ステップについて説明する。
【0052】
(図12:ステップS1201)
CPU111は、吸気制御識別フラグがtrueであるか否かを判定する。trueであればステップS1202に進み、trueでなければステップS1203へ進む。
(図12:ステップS1202)
CPU111は、吸気制御初期化処理を実行する。本ステップの詳細は、後述の図13で改めて説明する。
【0053】
(図12:ステップS1203)
CPU111は、噴射制御識別フラグがtrueであるか否かを判定する。trueであればステップS1204に進み、trueでなければステップS1205へ進む。以下同様に、各制御処理の識別フラグがrueであるか否かを順次判定し、CPU111がどの制御処理を実行中であるかを識別する。
【0054】
(図12:ステップS1204)
CPU111は、噴射制御初期化処理を実行する。本ステップの詳細は、後述の図13で吸気制御初期化処理について説明する際に併せて説明する。
【0055】
図13は、図12のステップS1202における吸気制御初期化処理の処理フローを示す図である。CPU111は、吸気制御初期化処理(ステップS1301)において、非数が発生した変数を初期化するとともに、同変数を参照して算出される変数など、非数が発生した変数によって影響を受ける変数を一括して初期化する。
【0056】
(図13:吸気制御初期化処理:補足1)
本処理で初期化する変数は、必ずしも吸気制御処理内で用いられる全ての変数でなくともよい。非数が発生した変数によって影響を受ける変数、例えばある変数が非数となると派生的に非数となる変数などを初期化することもできる。その他の任意の変数を初期化対象としてもよい。以下同様である。
【0057】
(図13:吸気制御初期化処理:補足2)
本処理で初期化する変数は、必ずしも吸気制御処理内で用いられる変数に限られるものではない。例えば、吸気制御処理内の変数を噴射制御処理などの他の制御プログラム内で参照している場合は、その変数を初期化してもよい。これにより、非数の影響が他の制御プログラムに派生することを防ぐ。例えば、吸気制御で演算した吸入空気量の推定値を用いて、噴射制御で噴射パルス幅を演算した結果、噴射パルス幅が非数となった場合は、噴射パルス幅だけでなく、吸入空気量の推定値も初期化することができる。
【0058】
(図13:吸気制御初期化処理:補足3)
非数となった変数と、そのとき初期化対象として選定する制御プログラムおよび変数については、例えば非数が発生した変数とそのときの初期化対象変数との対応関係をテーブルデータとしてROM112などに記憶させておき、これを参照して選定すればよい。その他、各制御プログラム内において、同様の対応関係をプログラム上に関数などの形式で記述しておき、その関数をコールするようにしてもよい。その他の任意の選定手法を採用してもよい。
【0059】
(図13:吸気制御初期化処理:補足4)
初期化する変数を選定する手段として、CPU111が実行する制御プログラム内に上述の対応関係を記述する以外に、例えば同様の処理を実現する回路などのハードウェアを用いることもできる。
【0060】
(図13:吸気制御初期化処理:補足5)
変数の初期化処理は、初期化する変数に所定値(例えばゼロ)を代入する初期化関数をコールすることによって実行してもよいし、OS(オペレーティングシステム)の機能を用いてRAM113内の初期化対象変数を格納している領域を一括的に初期化する処理群をコールすることによって実行してもよい。
【0061】
(図13:吸気制御初期化処理:補足6)
図13では吸気制御初期化処理についてのみ説明したが、他の制御処理に係る初期化処理についても、同様の手法を用いることができる。
【0062】
以上、本実施の形態1におけるエンジン制御処理および非数が発生した変数の初期化処理について説明した。
【0063】
以上のように、本実施の形態1によれば、CPU111は、非数データとなった変数を参照または更新するプログラム内の変数を、一括して初期化する。これにより、非数が発生したことの影響が派生して制御を行えなくなる現象を発生しにくくすることができる。
【0064】
また、本実施の形態1によれば、CPU111は、非数が発生した変数のみならず、非数が発生した変数を参照または更新する同プログラム内の変数、さらには非数が発生した変数を参照または更新する他のプログラム内の変数を初期化する。これにより、非数が発生したことによる影響が当該プログラムに与える影響を抑えるのみならず、他のプログラムに与える影響を抑えることもできる。すなわち、非数が発生することによって制御を行うことができなくなる可能性を、より確実に低減することができる。
【0065】
また、本実施の形態1によれば、CPU111は、各制御処理の識別フラグによって、いずれの制御プログラムを実行中であるかを識別し、その制御プログラムに対応する初期化処理を実行する。これにより、初期化対象とする変数を適切に選定することができる。
【0066】
<実施の形態2>
図14は、本発明の実施の形態2における吸気制御処理の処理フローを示す図である。本実施の形態2において、ステップS1401とS1409では、実施の形態1の図11で説明した吸気制御識別フラグに代えて、各制御プログラムに共通の制御識別フラグの値をセットする。
【0067】
制御識別フラグの値が0であるときは、CPU111が制御処理を実行していないことを示す。制御識別フラグの値が1であるときは、CPU111が吸気制御処理を実行していることを示す。以下同様に、制御識別フラグの値によって、CPU111がいずれの制御処理を実行しているかを表すことにする。
【0068】
なお、CPU111がいずれの制御処理を実行しているかを判定するのは、制御処理中に非数が発生した際にいずれの初期化処理を実行すべきかを判定するためである。したがって、制御識別フラグ=0という状態は必ずしも設ける必要はなく、ステップS1409を省略してもよい。
【0069】
図15は、本実施の形態2における非数発生時処理の処理フローを示す図である。本実施の形態2では、実施の形態1の図12で説明したフローに代えて、制御識別フラグの値によって、いずれの初期化処理を実行するかを判定する。
【0070】
本実施の形態2でも、実施の形態1と同様の効果を発揮することができる。また、単一の識別フラグを用いて、いずれの制御プログラムを実行中であるかを表すので、フラグを格納する記憶領域をフラグ1つ分のみに抑えることができる。さらには、ステップS1409を省略した場合、その分の処理負担を低減することができる。
【0071】
<実施の形態3>
実施の形態1〜2では、吸気制御処理、噴射制御処理、点火制御処理を順次実行する動作例を説明した。また、制御処理毎に初期化処理の内容を定め、制御識別フラグなどの値によって、いずれの初期化処理を実行するかを判定することを説明した。
【0072】
一方、エンジン制御処理の区分の仕方として、制御処理の内容の他に、各制御処理の実行周期によって制御処理を区分する手法もある。例えば、頻繁に更新する必要のある制御変数は、短い周期で実行されるプログラム内で更新する、といった区分である。
【0073】
本発明の実施の形態3では、同じ周期で実行される1以上の制御プログラムをプログラムセットとしてまとめてタスクとして区分し、同じ周期で実行されるタスク毎に初期化処理の内容を定める動作例を説明する。車載制御装置100の構成は、実施の形態1〜2と同様である。
【0074】
図16は、本実施の形態3に係るエンジン制御処理の処理フローを示す図である。本実施の形態3において、CPU111は、2ms毎に実行するタスク、4ms毎に実行するタスク、8ms毎に実行するタスクを有する。
【0075】
CPU111は、これらのタスクをそれぞれ並列的に実行するが、ある時点において複数のタスクの実行タイミングが重なった場合は、より優先度の高いタスクを優先して実行する。一般的には、実行周期の短いタスクのほうが優先度が高いため、実行周期の短いタスクから順に実行される。本実施の形態3では、タスクの実行順は図16のようになる。
【0076】
図17は、図16のステップS1601における2msタスク処理の処理フローを示す図である。以下、図17の各ステップについて説明する。
【0077】
(図17:ステップS1701)
CPU111は、タスク識別フラグの値を2にセットする。タスク識別フラグは、現在CPU111がどのタスク(制御プログラムセット)を実行中であるかを示すフラグである。タスク識別フラグ=2のときは、CPU111が2msタスクを実行中であることを示す。
【0078】
(図17:ステップS1702〜S1704)
CPU111は、吸気制御処理、噴射制御処理、点火制御処理をこの順に実行する。これらの制御処理の内容は、後述の図18で説明する非数発生時処理を除いて、実施の形態1〜2と同様である。なお、各タスクにおいてどの制御処理を実行するかは、制御対象の仕様などに応じて異なるので、適宜定めればよい。
【0079】
図18は、本実施の形態3における非数発生時処理の処理フローを示す図である。本実施の形態3においてCPU111は、実施の形態1の図12で説明したフローに代えて、タスク識別フラグの値によって、いずれの初期化処理を実行するかを判定する。また、初期化処理は、制御処理毎に設けるのではなく、タスク毎に設ける。
【0080】
図19は、図18のステップS1802における2msタスク初期化処理の処理フローを示す図である。本実施の形態3では、非数が発生した変数を参照する各制御プログラム内の変数を初期化するのみならず、各タスクを開始する際に初期化する必要のある変数を併せて初期化する。
【0081】
以上のように、本実施の形態3によれば、CPU111は、非数が発生した際には、タスク毎に必要な初期化処理を実行し、当該タスクを速やかに正常な状態に戻して再開する。換言すると、本実施の形態3においてCPU111は、非数が発生した際には、タスク単位で初期化を実行することができるということもできる。非数が発生するタイミングは予測が難しいため、各制御処理が初期化されるタイミングも予測が難しいといえるが、本実施の形態ではタスク単位で初期化を実行することができるので、並列実行するタスクの実行タイミングを容易に制御することができる。
【0082】
<実施の形態4>
本発明の実施の形態4では、各制御演算が主演算と副演算による冗長化構成を有する場合の動作例について説明する。車載制御装置100の構成は、実施の形態1〜2と同様である。ただし各制御処理について、主演算プログラムと1以上の副演算プログラムを設けている。
【0083】
主演算と副演算は、それぞれ同じ制御演算を個別に実行し、互いの演算結果が合致するか否かにより、主演算に障害が発生していないかをチェックするために行われる。主演算に非数が発生した場合、主演算を初期化するのみならず副演算も初期化する必要がある。また、非数が発生するのは主演算のみに限られず、副演算においても非数が発生する可能性がある。
【0084】
そこで本実施の形態4では、主演算または副演算で非数が発生した際に、各演算を初期化する動作例を説明する。
【0085】
図20は、本実施の形態4に係るエンジン制御処理の処理フローを示す図である。本実施の形態4において、CPU111は、実施の形態1と同様に、吸気制御処理、噴射制御処理などの制御処理を、この順番で実行する。ただし各制御処理は、主演算と任意個数の副演算が存在する。主演算または副演算のいずれかで非数が発生した場合は、後述の図21で説明する初期化処理を実行する。
【0086】
図21は、吸気制御初期化処理の処理フローを示す図である。吸気制御初期化処理の主演算または副演算のいずれかで非数が発生すると、CPU111は、図13と同様に主演算における非数が発生した変数を初期化するとともに、同変数を参照して算出される変数など、非数が発生した変数によって影響を受ける変数を一括して初期化する。また、CPU111は、主演算の各変数を初期化する際に、副演算の対応する変数も併せて初期化する。
【0087】
以上のように、本実施の形態4によれば、CPU111は、主演算または副演算に非数が発生すると、主演算内の変数を実施の形態1と同様に初期化するとともに、副演算の対応する変数も初期化する。これにより、主演算と副演算からなる冗長化構成を有する制御演算を、速やかに初期化し、正常な状態に戻して制御を再開することができる。
【0088】
<実施の形態5>
以上の実施の形態1〜4で説明した手法は、適宜組み合わせることができる。例えば、実施の形態3で説明した2msタスクにおいて、実施の形態4で説明した主演算と副演算に係る構成およびその初期化手順を採用することができる。
【0089】
<実施の形態6>
以上の実施の形態1〜5において、制御対象機器200は、前述したガソリン噴射式内燃機関以外の機器、例えばエアコンでもよい。すなわち、車載制御装置100の制御対象は、典型的には車両のエンジンのような機器であるが、これに限られるものではない。制御対象機器200がエアコンである場合、車載制御装置100は、エアコンの制御コントローラとなる。その他、制御対象機器200は電気モータでもよい。制御対象機器200が電気モータである場合、車載制御装置100は、電気モータの制御コントローラとなる。
【0090】
また、車載制御装置100は、典型的には車両に搭載され、車両内の各機器を制御するが、制御対象が車両機器でないような場合などには、必ずしも車両内に搭載する必要はない。
【0091】
制御対象機器200がどのような機器である場合でも、ハードウェアにソフトウェアがあらかじめ組み込まれた組込み制御装置であれば、本明細書において説明する技術を適用することができる。特に、制御過程で変数の発散傾向が蓄積して非数が発生しやすいような制御対象機器において、有効である。
【0092】
<実施の形態7>
以上の実施の形態1〜6では、浮動小数点形式の非数が発生した場合について説明しているが、浮動小数点形式の無限大が発生した場合においても、非数が発生した場合と同様に制御演算が困難になる。
【0093】
そこで、上記実施の形態1〜6において、非数が発生した旨を検出することに代えて、またはこれと並行して、無限大が発生した旨を検出し、同様の初期化処理を実行することもできる。これにより、制御演算が実行できなくなる可能性をより確実に抑えることができる。
【0094】
<実施の形態8>
以上の実施の形態1〜7では、単精度浮動小数点数データ形式を扱う組込み制御装置の場合について説明したが、倍精度浮動小数点データ形式を扱う組込み制御装置についても前述した仕組みを同様に適用することができる。
【0095】
また、本発明は、前述した形態例の説明に限定されるものではなく、特許請求の範囲に記載された発明の範囲において様々な変更が可能であることは当業者によって容易に理解される。
【符号の説明】
【0096】
100:車載制御装置、110:マイコン、111:CPU、112:ROM、113:RAM、1131:吸気制御ブロック、1132:噴射制御ブロック、1133:点火制御ブロック、1134:先頭アドレス、1136:終了アドレス、114:I/O、120:バッテリ、200:制御対象機器、21:浮動小数点形式データ、22:符号部、23:指数部、24:仮数部、31:ゼロ、32:正規化数、33:非正規化数、34:無限大、35:非数、71:非参照データ、72:参照データ。

【特許請求の範囲】
【請求項1】
制御動作を記述した1以上のプログラムと、
前記プログラムの記述にしたがって浮動小数点形式のデータを演算する演算部と、
前記演算部が演算した浮動小数点形式のデータを記憶する記憶部と、
前記演算部が演算した浮動小数点形式のデータが非数または無限大であるか否かを判定する手段と、
前記演算部が演算した浮動小数点形式のデータが非数または無限大である場合にいずれの前記プログラム内の変数を初期化するかを選定する選定手段と、
前記選定手段が選定した前記変数を初期化する初期化手段と、
を備え、
前記選定手段は、
浮動小数点形式の非数データまたは無限大データとなった変数を参照または更新する前記プログラム内の変数を、初期化の対象として選定する
ことを特徴とする車載制御装置。
【請求項2】
前記選定手段は、
浮動小数点形式の非数データまたは無限大データとなった前記プログラム内の変数、浮動小数点形式の非数データまたは無限大データとなった変数を参照もしくは更新する当該プログラム内の他の変数、または、浮動小数点形式の非数データまたは無限大データとなった変数を参照もしくは更新する他の前記プログラム内の変数を、前記初期化の対象として選定する
ことを特徴とする請求項1記載の車載制御装置。
【請求項3】
前記演算部がいずれの前記プログラムを実行しているかを識別するプログラム識別手段を備え、
前記プログラム識別手段は、
前記プログラムの処理の先頭部分で、各前記プログラム毎に設けられたフラグ変数のうち前記演算部が実行している前記プログラムに対応するものに所定値をセットするとともに、前記プログラムの処理の最終部分で、前記フラグ変数を初期化し、
または、
前記プログラムの処理の先頭部分で、各前記プログラムに共通するフラグ変数に前記演算部が実行している前記プログラムに対応する所定値をセットするとともに、前記プログラムの処理の最終部分で、前記フラグ変数を初期化し、
前記選定手段は、
前記演算部がいずれの前記プログラムを実行しているかを前記プログラム識別手段によって識別し、そのプログラム毎に定められている初期化対象変数を、前記初期化の対象として選定する
ことを特徴とする請求項1または請求項2記載の車載制御装置。
【請求項4】
前記演算部は、
1以上の前記プログラムをセットにした複数のプログラムセットを並行して周期的に実行するとともに、各前記プログラムセットの優先度にしたがって前記プログラムセットの実行タイミングを調整し、
前記選定手段は、前記初期化の対象を、前記プログラムセット毎に選定し、
前記初期化手段は、
前記プログラムセットに含まれる各前記プログラムが参照または更新する前記プログラム内の変数を、一括して初期化する
ことを特徴とする請求項1から3のいずれか1項に記載の車載制御装置。
【請求項5】
前記初期化手段は、
前記プログラム内の変数に所定値を代入することによって初期化する関数、
または、
前記プログラム内の変数を格納する前記記憶部内の領域を初期化する処理群として構成されている
ことを特徴とする請求項1から4のいずれか1項に記載の車載制御装置。
【請求項6】
前記プログラムは、
同一の制御動作を記述した1以上の制御プログラム、
または、
同一の周期で実行される1以上の制御プログラム、
または、
同一の制御動作を記述した主演算プログラムおよび副演算プログラムとして構成されている
ことを特徴とする請求項1から5のいずれか1項に記載の車載制御装置。
【請求項7】
前記プログラムは、車両のエンジン制御動作を記述している
ことを特徴とする請求項1から6のいずれか1項に記載の車載制御装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate


【公開番号】特開2011−164814(P2011−164814A)
【公開日】平成23年8月25日(2011.8.25)
【国際特許分類】
【出願番号】特願2010−25050(P2010−25050)
【出願日】平成22年2月8日(2010.2.8)
【出願人】(509186579)日立オートモティブシステムズ株式会社 (2,205)
【Fターム(参考)】