(57)【要約】      （修正有）【課題】処理順序に異常が生じた場合の影響を抑えつつ、異常発生時における処理負荷を抑制する車両制御装置を提供する。【解決手段】関数ａの実行開始時に、ＲＡＭ上の領域Ｚに関数ａの１つ前に実行すべき関数ａー１の識別子が格納されているか否かをチェックしＳ２１０、格納されている場合は関数ａを実行しＳ２２０、格納されていない場合は関数ａに代えて所定のエラー処理を実行するＳ２３０。さらに、領域Ｚに対して関数ａの識別子を格納してＳ２４０、その識別子を用いて以降の関数の実行順序をチェックする。【選択図】図２
2016091413.tif 000002
【特許請求の範囲】
【請求項１】
車両の動作を制御する車両制御装置であって、
前記車両の動作を制御する処理を記述した制御プログラムを格納する記憶部、
前記制御プログラムを実行する演算部、
前記制御プログラム内における関数の実行順序を記述した実行順序リスト、
前記演算部が前記制御プログラムを実行する際に使用するデータを格納するメモリ、
を備え、
前記制御プログラムは、複数の前記関数を含んでおり、
前記制御プログラム内に含まれる前記複数の関数のうち少なくともいずれかは、前記演算部によって実行される毎に、前記メモリに対して同一の制御演算値を上書格納するように構成されており、
前記演算部は、
前記制御プログラム内に含まれる各前記関数を実行する際に、１つ前に実行した前記関数が、前記実行順序リストによって記述される前記実行順序に準拠しているか否かをチェックし、
各前記関数の実行順序が前記実行順序に準拠している場合は、当該関数を実行するとともに、当該関数を識別する識別子を前記メモリに格納して前記チェックの際にその格納した識別子を用いて前記実行順序をチェックし、
各前記関数の実行順序が前記実行順序に準拠していない場合は、当該関数に代えて前記制御演算値を上書格納しない所定のエラー処理を実施するとともに、前記識別子を前記メモリに格納して前記チェックの際にその格納した識別子を用いて前記実行順序をチェックする
ことを特徴とする車両制御装置。
【請求項２】
前記演算部は、前記エラー処理として、前記チェックの結果を前記メモリに格納する
ことを特徴とする請求項１記載の車両制御装置。
【請求項３】
前記演算部は、前記エラー処理として、前記チェックにおいて前記実行順序に準拠していないと判断した前記関数の識別子を、前記メモリに格納する
ことを特徴とする請求項１または２記載の車両制御装置。
【請求項４】
前記演算部は、前記エラー処理として、前記チェックにおいて前記実行順序に準拠していないと判断した回数を、前記関数毎または前記複数の関数毎に前記メモリに格納する
ことを特徴とする請求項１から３のいずれか１項記載の車両制御装置。
【請求項５】
前記演算部は、前記実行順序リストが記述している全ての前記関数について前記実行順序をチェックした結果、少なくともいずれかの前記関数が前記実行順序に準拠していなかった場合、以後は前記実行順序リストが記述している前記関数全てをスキップする
ことを特徴とする請求項２または３記載の車両制御装置。
【請求項６】
前記演算部は、前記実行順序リストが記述している全ての前記関数について前記実行順序をチェックした結果、少なくともいずれかの前記関数について前記実行順序に準拠していないと判断した回数が所定閾値以上である場合、以後は前記実行順序リストが記述している前記関数全てをスキップする
ことを特徴とする請求項４記載の車両制御装置。
【請求項７】
前記演算部は、
前記チェックを開始する前に、前記複数の関数のうち前記実行順序における最後に規定された末尾関数の前記識別子を前記メモリに格納し、
前記チェックにおいて前記複数の関数のうち前記実行順序における最初に規定された先頭関数の実行順序をチェックする際には、前記メモリ内に前記末尾関数の前記識別子が格納されていれば前記先頭関数は前記実行順序に準拠しているとみなす
ことを特徴とする請求項１から６のいずれか１項記載の車両制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両制御装置に関する。
【背景技術】
【０００２】
車両制御装置は、マイクロコンピュータ（以下マイコンと表記）を搭載し、例えば空燃比制御、燃料噴射制御、点火制御、各種診断など、様々な車両制御演算を実施することにより、車両の動作を制御する装置である。
【０００３】
経年劣化などによるメモリ素子の故障、外乱ノイズによる通信データの変化などの理由により、マイコンが制御演算を実施している間において、次に実行すべき関数を格納しているアドレス値が異常となってしまうことにより、本来意図した車両制御処理が実施されない場合がある。このような不具合を抑制するため、関数の前後関係などに基づき関数の実行順序が妥当であるか否かを判断することは、車両動作の安全性向上に寄与する。
【０００４】
下記特許文献１は、車両制御装置においてプログラムの処理順序が規定通りであるか否かを確認する技術を記載している。同文献においては、実行対象である処理のアドレスをあらかじめ変数に格納して実行されるべき処理を定義した上で、呼び出された処理のアドレスと前記変数に格納されたアドレスを比較する。これにより、実行対象である処理の順序が正常であるか否か確認し、処理順序が異常である場合は、車両制御装置をリセットする。
【０００５】
下記特許文献２に記載されている技術においては、動作した処理の識別子を記録しておき、その直後に実行される処理において、記録されている識別子が規定順序上における直前処理によって記録された識別子であるか否かをチェックする。これにより、次に実行する処理の順序が正しいか否かを判断する。さらに同文献においては、異常が発生した場合はその処理を実行せずに当該処理単位を終了させ、あるいは異常が発生した際に実行しなかった処理の代替処理を実行することも記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−１４０４３１号公報
【特許文献２】特開２００４−３１８６７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１記載の技術においては、処理順序が異常である場合は車両制御装置をリセットし、これにより車両制御装置の処理は一旦初期状態へと戻る。この場合、車両制御を継続的に実施することができない。特に車両制御処理においては、同一の値を継続的に更新することにより制御を実施するものがあり、車両制御装置をリセットするとその継続性が途切れて適切な制御演算を実施することが困難になってしまう。
【０００８】
特許文献２記載の技術において、異常と判断された処理を実行せずに処理単位を終了させる場合、実行済処理の識別子は更新されないままとなる。そうすると、当該処理単位を次回以降実行する際においても、異常な実行順序がそのまま記録されていることになる。すなわち、当該処理単位を次回以降実行する際においても、前回異常が発生した処理以降の処理は実行されないままとなる。このような状態は、上述のように同一の値を継続的に更新することにより制御を実施する制御演算においては望ましくない。
【０００９】
特許文献２記載の技術において、異常と判断される各処理について代替処理を実施する場合、代替処理を実装することにともない、使用する記憶容量が増加し、さらには代替処理の内容に応じた処理負荷が増加する可能性がある。車両制御装置の制御演算は実行周期以内に完了することが求められるので、処理負荷が大きい代替処理を実装することは望ましくない。
【００１０】
本発明は、上記のような課題に鑑みてなされたものであり、処理順序に異常が生じた場合の影響を抑えつつも、異常発生時における処理負荷を抑制することができる、車両制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係る車両制御装置は、関数が規定順序に準じていない場合は、エラー処理を実施するとともに当該関数の識別子を記憶装置に格納し、その識別子を用いて以降の関数の実行順序をチェックする。
【発明の効果】
【００１２】
本発明に係る車両制御装置によれば、異常と判断された関数による影響を抑えつつ、車両制御の演算負荷を軽減することができる。
【図面の簡単な説明】
【００１３】
【図１】実施形態１に係る車両制御装置１００の機能ブロック図である。
【図２】演算部１２６が監視対象関数記憶部１２３内の関数の実行順序をチェックする一般的手順を説明するフローチャートである。
【図３】演算部１２６が図２で説明したフローチャートを開始する前に実施する初回監視前処理を説明するフローチャートである。
【図４】実行順序リスト１２５が記述している各関数を実行するか否かを判断する処理を説明するフローチャートである。
【図５】監視対象関数記憶部１２３の構成例を示す図である。
【図６】実施形態２において演算部１２６が監視対象関数記憶部１２３内の関数の実行順序をチェックする手順を説明するフローチャートである。
【図７】実施形態３において演算部１２６が監視対象関数記憶部１２３内の関数の実行順序をチェックする手順を説明するフローチャートである。
【図８】実施形態３において実行順序リスト１２５が記述している各関数を実行するか否かを判断する処理を説明するフローチャートである。
【発明を実施するための形態】
【００１４】
＜実施の形態１＞
図１は、本発明の実施形態１に係る車両制御装置１００の機能ブロック図である。車両制御装置１００は、外部機器２００の動作を制御する装置であり、Ｉ／Ｏ部１１０、マイコン１２０を備える。外部機器２００は、例えば車両制御装置１００を搭載している車両が備えるエンジンなどの機器である。Ｉ／Ｏ部１１０は、外部機器２００との間で信号を入出力する。マイコン１２０は、外部機器２００に対する制御演算を実施し、その結果に基づき外部機器２００を制御する。
【００１５】
マイコン１２０は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１２２、演算部１２６を備える。ＲＡＭ１２１は、演算部１２６が制御演算において使用するデータなどを一時的に格納するメモリである。ＲＯＭ１２２は、制御演算を実装した制御プログラムを格納するメモリである。演算部１２６は、制御プログラムを実行することにより外部機器２００に対する制御演算を実施する。
【００１６】
ＲＯＭ１２２は、監視対象関数記憶部１２３と監視対象外関数記憶部１２４を有し、さらに実行順序リスト１２５を格納している。制御プログラムが実装している各関数は、実行順序が正しいことを監視する必要があるものとそうでないものがある。前者については監視対象関数記憶部１２３内に格納され、後者については監視対象外関数記憶部１２４内に格納される。演算部１２６は、制御プログラムを実行する他、監視対象関数記憶部１２３が格納している関数については、実行順序が実行順序リスト１２５に規定されている順序に準拠しているか否かをチェックする。
【００１７】
図２は、演算部１２６が監視対象関数記憶部１２３内の関数の実行順序をチェックする一般的手順を説明するフローチャートである。Ｎは、監視対象関数記憶部１２３が格納している関数の総数である。ａは、監視対象関数記憶部１２３が格納している関数のうち、演算部１２６がこれから実行しようとしている関数である。関数１〜関数Ｎのうち少なくともいずれかは、他の関数または他の制御処理において用いる制御変数値と同じものを上書更新するように構成されている。以下図２の各ステップについて説明する。
【００１８】
（図２：ステップＳ２１０）
演算部１２６は、関数ａを実行開始すると、ＲＡＭ１２１上の領域Ｚに、実行順序リスト１２５が記述している関数ａの１つ前に実行すべき関数（関数（ａ−１））の識別子が格納されているか否かをチェックする。これにより、関数ａの実行順序が実行順序リスト１２５に準拠しているか否かをチェックすることができる。関数（ａー１）のアドレスが格納されている場合はステップＳ２２０へ進み、格納されていない場合はステップＳ２３０へ進む。領域ＺについてはステップＳ２４０において改めて述べる。
【００１９】
（図２：ステップＳ２２０〜Ｓ２３０）
演算部１２６は、関数ａの実行順序が正しい場合は関数ａを実行し（Ｓ２２０）、正しくない場合は関数ａに代えて所定のエラー処理を実行する（Ｓ２３０）。エラー処理の具体例については後述する。
【００２０】
（図２：ステップＳ２４０）
演算部１２６は、ＲＡＭ１２１上の領域Ｚに対して関数ａの識別子を格納する。領域Ｚは、本フローチャートによって実行順序をチェックした関数の識別子を格納する記憶領域である。演算部１２６は、関数ａの実行順序が正しいか否かによらず、関数ａの識別子を領域Ｚに対して格納する。これにより、関数ａの実行順序が異常であった場合は関数ａを実行しないようにしつつ、以降の関数については実行順序リスト１２５にしたがって実行継続することができる。
【００２１】
図３は、演算部１２６が図２で説明したフローチャートを開始する前に実施する初回監視前処理を説明するフローチャートである。以下図３の各ステップについて説明する。
【００２２】
（図３：ステップＳ３１０〜Ｓ３２０）
演算部１２６は、監視対象関数記憶部１２３が格納している最初の関数（関数１）を実行開始するより前に、本フローチャートを開始する（Ｓ３１０）。演算部１２６は、監視対象関数記憶部１２３が格納している最後の関数（関数Ｎ）の識別子を、領域Ｚに対して格納する（Ｓ３２０）。ステップＳ３１０〜Ｓ３２０は、マイコン１２０が起動した後、関数１を実行開始する前に、１回のみ実施すればよい。
【００２３】
（図３：ステップＳ２１０〜Ｓ２４０）
これらステップは図２と同様である。ただし最初の関数については演算部１２６が１つ前に実行した関数が存在しないことに鑑み、ステップＳ２１０においては領域Ｚが関数Ｎの識別子を格納していれば実行順序が正しいとみなす。これにより、関数１を初回実施する場合における実行順序の整合性を維持するとともに、関数１〜関数Ｎを繰り返し実施する場合においても実行順序の整合性を維持することができる。
【００２４】
図４は、実行順序リスト１２５が記述している各関数（関数１〜関数Ｎ）を実行するか否かを判断する処理を説明するフローチャートである。以下図４の各ステップについて説明する。
【００２５】
（図４：ステップＳ４００）
演算部１２６は、実行順序リスト１２５が記述している各関数（関数１〜関数Ｎ）を実行開始する際に、本フローチャートを実施する。
【００２６】
（図４：ステップＳ４１０〜Ｓ４２０）
演算部１２６は、図２で説明したフローチャートによる関数順序のチェックにおいて、実行順序リスト１２５が記述している順序に違反した関数が存在したか否か確認する（Ｓ４１０）。順序に反した関数が存在しなかった場合は関数１〜関数Ｎを順次実行し（Ｓ４２０）、存在した場合は関数１〜関数Ｎを全てスキップする。関数１〜関数Ｎをまだ１度も実行していない場合は、順序違反が存在していないとみなす。
【００２７】
図５は、監視対象関数記憶部１２３の構成例を示す図である。監視対象関数記憶部１２３は、実行順序リスト１２５を用いて実行順序を監視する関数のバイナリデータを格納している。各関数は必ずしも実行順序通りに配置されているとは限らないので、実行順序リスト１２５は各関数の実行順序として、監視対象関数記憶部１２３内において各関数が配置されている先頭アドレスを記述することができる。あるいは監視対象関数記憶部１２３内の各関数を識別できるその他適当な識別子を記述してもよい。すなわち、各関数を重複することなく識別できるものであればよい。
【００２８】
＜実施の形態１：まとめ＞
以上のように、本実施形態１に係る車両制御装置１００は、監視対象関数記憶部１２３内の各関数の実行順序が実行順序リスト１２５に準拠しているか否かをチェックし、準拠していない場合であっても次以降の関数を継続して実施する。これにより、特に同一の制御演算値を継続して上書更新する制御処理において、異常な値が上書されて制御処理に支障を来すことを防ぎつつ、制御処理を中断することなく継続することができる。
【００２９】
本実施形態１に係る車両制御装置１００は、関数の実行順序が異常であった場合、代替処理などによって制御演算値を代替値に上書するのではなく、前回の制御演算値を次以降の関数においても継続して利用する。これにより、例えばデータ通信のような連続性が重要となる制御演算や、目標トルク演算のように前回値との間の差分が小さいほうが好ましい制御演算などにおいて、制御演算値の連続性を保ち好適な制御演算を実施することができる。
【００３０】
本実施形態１に係る車両制御装置１００は、関数１〜関数Ｎをいったん実施した後、いずれかの関数において実行順序エラーが発生した場合、次回以降は関数１〜関数Ｎを全てスキップする。これにより、異常が発生した関数群における制御演算値については異常が発生する前の値を保持することになるため、上述したような制御演算値の差分が小さいほうが好ましい制御演算において、特に好適な制御演算を実施することができる。
【００３１】
＜実施の形態２＞
本発明の実施形態２では、実施形態１で説明した実行順序エラー処理（Ｓ２３０）の具体例について説明する。その他の構成は概ね実施形態１と同様であるため、以下では主にステップＳ２３０の具体例について述べる。
【００３２】
図６は、本実施形態２において演算部１２６が監視対象関数記憶部１２３内の関数の実行順序をチェックする手順を説明するフローチャートである。本フローチャートにおいてステップＳ２３０がステップＳ２３１〜Ｓ２３２に分かれている。その他のステップは実施形態１と同様である。
【００３３】
（図６：ステップＳ２３１〜Ｓ２３２）
演算部１２６は、関数ａの実行順序が正しくなかった旨のチェック結果を、ＲＡＭ１２１上の適当な記憶領域に格納する（Ｓ２３１）。演算部１２６は、実行順序が正しくなかった関数（ここでは関数ａ）の識別子を、ＲＡＭ１２１上の適当な記憶領域に格納する（Ｓ２３２）。演算部１２６は、監視対象関数記憶部１２３が格納している各関数それぞれについて、実行順序が正しくない場合はステップＳ２３１〜Ｓ２３２によってチェック結果と関数識別子を保存する。
【００３４】
以上説明したように、本実施形態２に係る車両制御装置１００は、実行順序の判断結果と順序エラーが発生した関数の識別子を記憶する。これにより、実行順序異常の原因などを解析するに際して、異常発生箇所などを特定することが容易となる。
【００３５】
本実施形態２において、実行順序の判断結果と順序エラーが発生した関数の識別子は、いずれか一方のみを保存するようにしてもよいし、図６に示すように両方を保存するようにしてもよい。
【００３６】
＜実施の形態３＞
本発明の実施形態３では、実施形態１で説明した実行順序エラー処理（Ｓ２３０）の第２具体例について説明する。その他の構成は概ね実施形態１と同様であるため、以下では主にステップＳ２３０の具体例について述べる。
【００３７】
図７は、本実施形態３において演算部１２６が監視対象関数記憶部１２３内の関数の実行順序をチェックする手順を説明するフローチャートである。本フローチャートにおいてステップＳ２３０の具体例としてステップＳ２３３が実施される。その他のステップは実施形態１と同様である。
【００３８】
（図７：ステップＳ２３３）
演算部１２６は、実行順序が正しくなかったと判断した回数を１つ加算する。同回数は例えばＲＡＭ１２１上の適当な領域に格納すればよい。エラー回数は、関数毎に保存してもよいし、関数１〜関数Ｎ全てについて共通のエラー回数を累積加算するようにしてもよい。
【００３９】
図８は、本実施形態３において実行順序リスト１２５が記述している各関数（関数１〜関数Ｎ）を実行するか否かを判断する処理を説明するフローチャートである。実施形態１のステップＳ４１０においては、関数１〜関数Ｎのいずれかにおいて実行順序エラーが発生した場合はこれら全関数をスキップすることとしたが、本実施形態３においてはエラー発生回数が所定閾値以上になった時点においてこれら関数をスキップする。
【００４０】
演算部１２６は、関数１〜関数Ｎそれぞれのエラー回数の合計が所定閾値以上になった時点において関数１〜関数Ｎをスキップするようにしてもよいし、関数１〜関数Ｎのうち少なくともいずれかのエラー回数が所定閾値以上になった時点において関数１〜関数Ｎをスキップするようにしてもよい。
【００４１】
以上説明したように、本実施形態３に係る車両制御装置１００は、順序エラーが発生した回数を保存し、同回数が所定閾値以上になった時点で関数１〜関数Ｎをスキップする。これにより、例えばノイズのような一時的原因による異常を誤って恒久的な異常であると判断してしまうことを回避できる。
【００４２】
＜本発明の変形例について＞
本発明は上記した実施形態の形態に限定されるものではなく、様々な変形例が含まれる。上記実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることもできる。また、ある実施形態の構成に他の実施形態の構成を加えることもできる。また、各実施形態の構成の一部について、他の構成を追加・削除・置換することもできる。
【００４３】
以上の実施形態において、演算部１２６が関数の実行順序をチェックする手順は、何らかのプログラムによって実装してもよいし、制御プログラム内の処理の一部として実装してもよいし、演算部１２６その他デバイスが備える回路デバイスなどのハードウェアによって実装してもよい。
【００４４】
以上の実施形態において、ステップＳ２４０が保存する関数ａの識別子、ステップＳ２３０が保存する各エラー処理結果は、ＲＡＭ１２１上の記憶領域に対して書き込むこともできるし、その他適当な書換可能記憶素子に対して書き込むこともできる。
【００４５】
上記各構成、機能、処理部、処理手段等は、それらの一部や全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に格納することができる。
【符号の説明】
【００４６】
１００：車両制御装置、１１０：Ｉ／Ｏ部、１２０：マイコン、１２１：ＲＡＭ、１２２：ＲＯＭ、１２３：監視対象関数記憶部、１２４：監視対象外関数記憶部、１２５：実行順序リスト、１２６：演算部、２００：外部機器。
【図１】
2016091413.tif 000003
【図２】
2016091413.tif 000004
【図３】
2016091413.tif 000005
【図４】
2016091413.tif 000006
【図５】
2016091413.tif 000007
【図６】
2016091413.tif 000008
【図７】
2016091413.tif 000009
【図８】
2016091413.tif 000010