(57)【特許請求の範囲】
【請求項１】
浮動小数点演算プロセッサを備え、制御対象を制御するための制御プログラムを実行可能な車両用電子制御装置において、
前記制御プログラムは、所定の浮動小数点型データの演算処理に対し、演算結果を適正値に保持するガード処理を備えており、
前記ガード処理は、
予め定められた範囲から演算結果が外れているか否かを判定する判定処理と、該判定処理の判定結果に応じて実行され、前記範囲を規定する上限値および下限値のうち、前記上限値を演算結果として代入する第１の代入処理と、前記下限値を演算結果として代入する第２の代入処理とを有しており、
前記演算結果が「非数」である場合には前記判定処理において必ず偽判定がなされること、あるいは、必ず真判定がなされることを考慮し、且つ当該演算結果を前記上限値又は前記下限値とするときの制御への影響を考慮してコーディングされ、前記演算結果が「非数」である場合に、前記第１又は第２の代入処理の一方を確定的に実行すること
を特徴とする車両用電子制御装置。
【請求項２】
浮動小数点演算プロセッサを備え、制御対象を制御するための制御プログラムを実行可能な車両用電子制御装置に搭載される制御プログラムにおいて、
所定の浮動小数点型データの演算処理に対し、演算結果を適正値に保持するガード処理を備えており、
前記ガード処理は、
予め定められた範囲から演算結果が外れているか否かを判定する判定処理と、該判定処理の判定結果に応じて実行され、前記範囲を規定する上限値および下限値のうち、前記上限値を演算結果として代入する第１の代入処理と、前記下限値を演算結果として代入する第２の代入処理とを有しており、
前記演算結果が「非数」である場合には前記判定処理において必ず偽判定がなされること、あるいは、必ず真判定がなされることを考慮し、且つ当該演算結果を前記上限値又は前記下限値とするときの制御への影響を考慮してコーディングされ、前記演算結果が「非数」である場合に、前記第１又は第２の代入処理の一方を確定的に実行すること
を特徴とする制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、浮動小数点演算機能を備えた電子制御装置に関する。
【０００２】
【従来の技術】
近年、高性能マイクロプロセッサの出現などエレクトロニクス技術の進歩を背景として、機械技術と電子技術とが結びついたメカトロニクス技術の進歩が著しい。メカトロニクスの進歩の一部として、自動車等の車両にも多くのコンピュータシステムが採用されてきている。このような車載用のコンピュータシステムは、省資源、省エネルギー、走行性能、安全性、快適性等を追求するものであり、車両内のエンジン・駆動系、走行・安全系、エンターテイメント系、及びその他の随所に搭載されている。
【０００３】
このようなコンピュータシステムは、電子制御装置（ＥＣＵ）の単位で車両に搭載されている。そして最近では、電子制御装置が、浮動小数点演算プロセッサ（ＦＰＵ：Floating-Point Unit ）を搭載するのが一般的になっている。浮動小数点演算プロセッサを搭載することにより、浮動小数点型データによる演算が可能となり、固定小数点型データに比べて細かい精度で演算結果が得られるからである。
【０００４】
浮動小数点型データは、当業者の間ではよく知られたものであり、種々の規格でデータ形式が決まっている。例えば、ＩＥＥＥ７５４規格に従う浮動小数点型データは、１ビットの符号部、８ビットの指数部、２３ビットの仮数部で構成されており、この計４バイトのデータが７桁の分解能を有することになる。
【０００５】
そして、このような浮動小数点型データでは、「０／０」や「＋∞−∞」といった、数値として表現できない演算結果を「非数」として表現できるようになっている。例えば上記規格では、仮数部が「０」以外で８ビットの指数部が全て「１」の場合を「非数」として取り扱うことが定められている。
【０００６】
しかしながら、このような「非数」は、上述したような演算に関係なく、演算時や読み出し時などにおけるノイズの影響によっても生じることがある。すなわち、指数部が全て「１」に書き換えられてしまった場合に、仮数部が「０」でなければ、「非数」となってしまう。
【０００７】
【発明が解決しようとする課題】
このような「非数」が生じると、この「非数」を用いた演算結果は全て「非数」となってしまう。したがって、「非数」が発生した場合には、短時間のうちに「非数」を正常値に書き換える必要がある。
【０００８】
これを解決するための手法として、従来より、タイマ割込などを用いて、浮動小数点型データの格納領域に「非数」があるか否かを一括して検索するという手法が提案されている。例えば、特開２００１−１８４１９２号公報などに開示される技術である。
【０００９】
この場合、「非数」が発見された場合には、「非数」に対してデフォルト値を代入したり、あるいは、ＣＰＵリセットを行い、初期化ルーチンを起動して浮動小数点型データを全て初期化したりして対応することになる。
しかしながら、個別にデフォルト値を代入する場合には、初期化ルーチンとは別にそれぞれのデータに対してデフォルト値を用意しておく必要があり、デフォルト値の記憶に多くのメモリ領域が必要になってしまう。一方、ＣＰＵをリセットする場合には、初期化ルーチンが呼ばれて浮動小数点型データが全て初期化されるため、デフォルト値を準備しておく必要はないものの、動作中のシステムを一時的にせよ停止させるため、制御の信頼性向上という面から妥当でない。
【００１０】
また、浮動小数点型データの演算処理に対し、それぞれ非数チェック処理を設けることも考えられる。
この場合は、膨大な浮動小数点型データの演算処理のそれぞれに対し、非数チェック処理を用意する必要があり、また、一括処理の場合と同様にデフォルト値を用意する必要もあって、やはり好ましい方法とは言えない。
【００１１】
本発明は、非数チェック処理専用のロジックを極力少なくして、非数チェックを可能とすることを目的とする。
【００１２】
【課題を解決するための手段及び発明の効果】
本発明の電子制御装置は、浮動小数点演算プロセッサを備え、制御対象を制御するための制御プログラムを実行可能である。
そして、この制御プログラムが、所定の浮動小数点型データの演算処理に対し、演算結果を適正値に保持するガード処理を備えている。
【００１３】
このガード処理は、判定処理と、該判定処理の判定結果に応じて実行される代入処理とを有している。具体的には、判定処理により、予め定められた範囲から演算結果が外れているか否かを判定し、その結果に応じて、代入処理により、当該範囲を規定する上限値又は下限値を代入する。
【００１４】
ここで特に、本発明では、演算結果が「非数」である場合には判定処理において必ず偽判定がなされること、あるいは、必ず真判定がなされることを考慮して、上述したガード処理をコーディングすることにより、演算結果が「非数」である場合にも、代入処理が実行されるようにした。
【００１５】
これについて説明を加える。
例えば、ガード処理では、演算結果が、上限値を上回っているか否かを判定し、上限値を上回っている場合には、代入処理を実行して上限値を代入する。また、演算結果が、下限値を下回っているか否かを判定し、下限値を下回っている場合には、代入処理を実行して下限値を代入する。
【００１６】
このとき、判定処理の条件式に「非数」が含まれる場合には、必ず真判定がなされる、あるいは、必ず偽判定がなされることが知られている。真判定／偽判定のいずれがなされるかは、ＦＰＵの仕様によって決まってくる。
したがって、条件式に「非数」が含まれる場合に例えば「偽判定」がなされるのであれば、偽判定の際に代入処理が実行されるようにすることによって、「非数」となった演算結果を、少なくとも上限値又は下限値として復帰させることができる。
【００１７】
つまり、本発明では、条件式に「非数」が含まれる場合に判定処理が一定の判定を行うことに着目し、「非数」の場合の分岐先に代入処理を設けることにより、ガード処理を利用して、非数チェックを行うのである。
これによって、演算処理に対応するガード処理が非数チェック処理を兼ねることになり、演算処理に対応するガード処理がある場合には、非数チェック処理が不要となる。すなわち、ガード処理のない演算処理に対してだけ、非数チェック処理を記述すればよい。その結果、非数チェック処理専用のロジックを極力少なくして、非数チェックが可能となる。特に、車両に搭載される電子制御装置であれば、安全性確保のために演算処理に対応してガード処理が設けられるのが一般的であるため、非数チェック処理専用のロジックはほとんど必要なくなる。
【００１８】
ところで、上述したように、通常、ガード処理には、演算結果が上限値を上回っている場合に、演算結果に上限値を代入する第１の代入処理と、演算結果が下限値を下回っている場合に、演算結果に下限値を代入する第２の代入処理とが存在する。
【００１９】
そこで、演算結果が「非数」となった場合に、当該演算結果を上限値又は下限値とするときの制御への影響を考慮してコーディングすることによって、演算結果が「非数」である場合に、第１又は第２の代入処理の一方が確定的に実行されるようにすることが考えられる。
【００２０】
本発明は、「非数」を正常値に復帰させる場合に、ガード処理を利用することによって、暫定的に上限値又は下限値を演算結果として代入するものである。このとき、例えば、上限値を用いるよりも下限値を用いた方が、制御対象の制御において、運転者への違和感が少ないといったことが考えられる。したがって、上限値を用いる場合と下限値を用いる場合とで優劣があれば、より適した値を代入するようにコーディングするのである。これによって、暫定的な演算結果がより適切なものとなる。
【００２１】
なお、以上は電子制御装置の発明として説明してきたが、本発明は、電子制御装置の実行する制御プログラムの構造に特徴を有するものである。したがって、制御プログラムの発明として実現することもできる（請求項２）。
このような制御プログラムは、例えば、ＦＤ、ＭＯ、ＤＶＤ、ＣＤ−ＲＯＭ、ハードディスク等のコンピュータ読み取り可能な記録媒体に記録し、必要に応じて電子制御装置などのコンピュータシステムにロードして起動することにより用いることができる。この他、ＲＯＭやバックアップＲＡＭをコンピュータ読み取り可能な記録媒体として制御プログラムを記録しておき、このＲＯＭあるいはバックアップＲＡＭをコンピュータシステムに組み込んで用いてもよい。
【００２２】
【発明の実施の形態】
以下、本発明を具体化した一実施例を図面を参照して説明する。
図１は、本発明の「電子制御装置」を具体化したエンジン制御装置（以下「エンジンＥＣＵ」という。）１の概略構成を示すブロック図である。エンジンＥＣＵ１は、車両に搭載された内燃機関型エンジンの制御を行う。
【００２３】
エンジンＥＣＵ１には、各種センサとアクチュエータとが接続されている。
図１では、エンジンのクランク軸が所定角度回転する毎にパルス状の回転角信号を出力する回転センサ２１、空気と燃料との混合比の示す空燃比信号を出力する空燃比センサ２２、吸気温を示す吸気温信号を出力する吸気温センサ２３、及び、算出された燃料噴射量に応じて制御される燃料の噴射弁２４が接続されている。ここでは説明を簡単にするために、噴射弁２４の制御を行う構成だけを図示した。
【００２４】
エンジンＥＣＵ１は、ＭＰＵ１１、割込入力ポート１２、デジタル入力ポート１３、アナログ入力ポート１４、バックアップＲＡＭ１５、ＲＡＭ１６、ＲＯＭ１７、出力ポート１８を備えている。そして、これらは共用のバス１９を介して接続されている。
【００２５】
ＭＰＵ１１は、エンジンＥＣＵ１全体の制御を司る。このＭＰＵ１１は、浮動小数点演算を実行するＦＰＵ１１ａを備えている。
割込入力ポート１２には、回転センサ２１からの回転角信号が入力される。デジタル入力ポート１３には、空燃比センサ２２からの空燃比信号が入力される。また、アナログ入力ポート１４には、吸気温センサからの吸気温信号が入力される。したがって、ＭＰＵ１１は、これらの入力ポート１２〜１４を介してそれぞれ、エンジン回転数Ｎｅ、空燃比、吸気温Ｔｈａを取得する。
【００２６】
バックアップＲＡＭ１５は、イグニッションキーをオフしても、電源が供給されてデータ内容を保持できる構成である。したがって、バックアップＲＡＭ１５には、学習データなど、イグニッションキーがオフされた場合にも保持すべきデータが記憶される。
【００２７】
ＲＡＭ１６は制御プログラム実行時のワークエリアとして用いられ、ＲＯＭ１７には、この制御プログラムが記憶されている。
出力ポート１８には噴射弁２４が接続されており、算出された燃料噴射量に基づく信号が、この出力ポートから噴射弁２４へ出力される。
【００２８】
このように構成されたエンジンＥＣＵ１は、各種センサから入力される信号に基づきアクチュエータを駆動する、エンジン制御処理を行う。図１に示した構成では、回転センサ２１からの回転角信号に基づくエンジン回転数Ｎｅと、空燃比センサ２２からの空燃比信号に基づく空燃比と、吸気温センサ２３からの吸気温信号に基づく吸気温Ｔｈａとに基づき、基本噴射量を検索すると共に、学習データを更新し、検索された基本噴射量と更新された学習データとに基づいて燃料噴射量を算出する。そして、算出した燃料噴射量に基づく制御信号が噴射弁２４へ出力ポートを介して出力される。
【００２９】
このときＭＰＵ１１は、ＦＰＵ１１ａによる浮動小数点演算が可能であり、燃料噴射量の算出においても、浮動小数点型データを用いた演算を行う。これによって、燃料噴射量の算出処理が精度の高いものとなる。
この浮動小数点演算で用いられる浮動小数点型データは、当業者の間ではよく知られたものであり、種々の規格でデータ形式が決まっている。例えば、ＩＥＥＥ７５４規格に従う浮動小数点型データは、図２（ａ）に示すように、１ビットの符号部、８ビットの指数部、２３ビットの仮数部で構成されており、この計４バイトのデータが７桁の分解能を有することになる。
【００３０】
一方で、浮動小数点演算では、数値として表現できないものを「非数」として取り扱う。上記規格の浮動小数点型データでは、数値として表現できない「非数」が、図２（ｂ）のように示される。つまり、指数部の８ビットが全て「１」であり、すなわち指数部が１０進表記で「２５５」であり、仮数部が「０」以外のときが「非数」を示す。このような「非数」は、演算時や読み出し時などにおけるノイズの影響によっても生じることがある。すなわち、指数部が全て「１」に書き換えられてしまった場合に、仮数部が「０」でなければ、「非数」となってしまうのである。
【００３１】
そして、このような「非数」を含む演算処理では演算結果も「非数」となってしまうため、適切な制御が実現できないといった事態を招く。そのため、「非数」を短時間のうちに、なんらかの数値へ復帰させることが必要となる。
本実施例では、次に示すような燃料噴射量算出処理を用いることによって、非数チェックを実現することを特徴とする。
【００３２】
図３は、燃料噴射量算出処理を示すフローチャートである。
まず最初のステップ（以下、ステップを単に記号Ｓで示す。）１００において、吸気温Ｔｈａとエンジン回転数Ｎｅを読み込む。
続くＳ１１０では、吸気温Ｔｈａとエンジン回転数Ｎｅとから、基本噴射量を検索する。この処理は、予め記憶された基本噴射量のマップを用いて、基本噴射量を特定するものである。次のＳ１２０では、吸気温Ｔｈａとエンジン回転数Ｎｅとから、学習データを検索する。
【００３３】
そして続くＳ１３０では、空燃比を読み込む。次のＳ１４０では、読み込んだ空燃比を参照し、学習データの更新データを算出する。さらに次のＳ１５０では、算出した更新データを、学習データに対する更新データとして設定する。
続くＳ１６０では、設定した更新データが下限値以上か否かを判定する。ここで更新データが下限値以上であると判断された場合（Ｓ１６０：ＹＥＳ）、Ｓ１８０へ移行する。一方、下限値以上でないと判定された場合（Ｓ１６０：ＮＯ）、すなわち更新データが下限値を下回っている場合には、Ｓ１７０にて更新データに下限値を代入し、Ｓ２００へ移行する。
【００３４】
Ｓ１８０では、更新データが上限値以下か否かを判定する。ここで更新データが上限値以下であると判定された場合（Ｓ１８０：ＹＥＳ）、Ｓ２００へ移行する。一方、上限値以下でないと判定された場合（Ｓ１８０：ＮＯ）、すなわち更新データが上限値を上回っている場合には、Ｓ１９０にて更新データに上限値を代入し、Ｓ２００へ移行する。
【００３５】
Ｓ２００では、更新データによって更新された学習データと、基本噴射量とを用いて、燃料噴射量を算出する。
なお、本実施例においては、ＦＰＵ１１ａの仕様により、判定処理の条件式に「非数」が含まれる場合には必ず偽判定（否定判断）がなされることを前提としている。
【００３６】
次に、本実施例のエンジンＥＣＵ１が発揮する効果について説明する。
更新データを算出し、更新データに基づいて学習データを算出し、さらに、学習データに基づいて燃料噴射量を算出する処理では、一般的に、更新データが「非数」となってしまうと、学習データや燃料噴射量も「非数」となってしまう。
【００３７】
これに対して本実施例では、更新データのガード処理（図３中のＳ１６０〜Ｓ１９０）を利用して、設定された更新データの非数チェックを行うようにした。具体的には、上述したように判定処理の条件式に「非数」が含まれる場合には必ず偽判定（否定判断）がなされることに着目し、図３中のＳ１６０の判定処理において否定判断がなされた場合に、Ｓ１７０の代入処理が実行されるようにしたのである。したがって、更新データが「非数」となった場合には、記号Ａで示すような処理の流れとなり、Ｓ１７０の代入処理が実行される。
【００３８】
これによって、演算処理（図３中のＳ１４０）に対応するガード処理（Ｓ１６０〜Ｓ１９０）が非数チェック処理を兼ねることになり、演算処理に対応するガード処理がある場合には、非数チェック処理が不要となる。すなわち、ガード処理のない演算処理に対してだけ、非数チェック処理を記述すればよい。
【００３９】
本実施例では、燃料噴射量算出処理を例に挙げて説明したが、他の制御処理においても同様に、ガード処理を利用して非数チェックを行うことができる。その結果、非数チェック処理専用のロジックを極力少なくして、非数チェックが可能となる。
【００４０】
特に、エンジンＥＣＵ１に搭載されるようなエンジン制御プログラムでは、安全性確保のために演算処理に対応させてガード処理が設けられるのが一般的であるため、非数チェック処理専用のロジックはほとんど必要なくなる。
また、本実施例では、更新データが「非数」の場合には、ガード処理（Ｓ１６０〜Ｓ１９０）に含まれる２つの代入処理（Ｓ１７０，Ｓ１９０）のうちの下限値の代入処理（Ｓ１７０）が確定的に実行されるようにした。
【００４１】
燃料噴射量算出における学習データの更新データが「非数」になった場合、上限値を用いるよりも下限値を用いた方が、学習データの変化が少なく、運転者への違和感が少ない。したがって、更新データが「非数」となった場合には、確定的に下限値の代入処理（図３中のＳ１７０）を実行するのである。これによって、「非数」への暫定値の入力がより適切なものとなり、運転者に違和感を生じさせることが少ない。
【００４２】
以上、本発明はこのような実施例に何等限定されるものではなく、本発明の主旨を逸脱しない範囲において種々なる形態で実施し得る。
上記実施例では、更新データが「非数」となった場合に下限値の代入処理（図３中のＳ１７０）を実行するものであったが、逆に上限値の代入処理（Ｓ１９０）を実行する場合には、Ｓ１６０の判定処理に先立ってＳ１８０の判定処理を行うようにすればよい。
【００４３】
また、下限値の代入処理（図３中のＳ１７０）を行うために下限値の判定処理（Ｓ１６０）を上限値の判定処理（Ｓ１８０）に先立って行う必要は必ずしもない。
例えば図４に示すように、更新データが「非数」の場合には、Ｓ２１０にて否定判断された場合にＳ２３０へ移行するように条件式を記述すれば、Ｓ２３０でさらに否定判断されることになり、記号Ｂで示すような処理の流れとなる。この場合、下限値の判定処理（Ｓ２３０）を上限値の判定処理（Ｓ２１０）の後で行うのであるが、更新データが「非数」となった場合には、上限値の代入処理（Ｓ２２０）は実行されず、常に更新データに下限値が代入される（Ｓ２４０）。
【００４４】
なお、ＦＰＵの仕様によって「非数」である場合に真判定（肯定判断）がなされるのであれば、肯定判断された場合に所望の代入処理が実行されるように条件式等を工夫すればよい。
【図面の簡単な説明】
【図１】実施例のエンジンＥＣＵの概略構成を示すブロック図である。
【図２】ＩＥＥＥ７４５規格の浮動小数点型データを示す説明図である。
【図３】燃料噴射量算出処理を示すフローチャートである。
【図４】判定処理と非数チェックの関係を示す説明図である。
【符号の説明】
１…エンジンＥＣＵ      １１…ＭＰＵ
１１ａ…ＦＰＵ              １２…割込入力ポート
１３…デジタル入力ポート  １４…アナログ入力ポート
１５…バックアップＲＡＭ  １６…ＲＡＭ
１７…ＲＯＭ              １８…出力ポート
２１…回転センサ          ２２…空燃比センサ
２３…吸気温センサ        ２４…噴射弁
【図１】
0003729133.tif 000002
【図２】
0003729133.tif 000003
【図３】
0003729133.tif 000004
【図４】
0003729133.tif 000005