(57)【特許請求の範囲】
【請求項１】
第１のＣＰＵと第２のＣＰＵとを有し、前記第１のＣＰＵと前記第２のＣＰＵの一方のＣＰＵが他方のＣＰＵの動作を監視する移動体の電子制御装置において、
テスト値を取得するテスト値取得部と、
前記テスト値と共通値を用いて演算処理を行って演算値を算出するテスト用演算部と、
前記第１のＣＰＵと前記第２のＣＰＵの一方のＣＰＵで算出した前記演算値を、他方のＣＰＵにおいて前記共通値を用いて前記演算処理の逆演算を行い、その演算結果と前記他方のＣＰＵが有する前記一方のＣＰＵの前記テスト値を比較することで一方のＣＰＵの動作を判定する比較部と、
を前記第１のＣＰＵと前記第２のＣＰＵのそれぞれに設け、
前記第１のＣＰＵの前記テスト値は、前記第１のＣＰＵのコアに対して自己診断した結果を表すコードを前記テスト値として取得し、
前記第２のＣＰＵの前記テスト値は、前記第２のＣＰＵのコアに対して自己診断した結果を表すコードを前記テスト値として取得するように構成したことを特徴とする移動体の電子制御装置。
【請求項２】
前記テスト値取得部は、所定値を前記ＣＰＵの汎用レジスタに書き込んだ後に読み出し、その読み出し値と前記所定値を比較した結果のコードを前記テスト値として取得する請求項１に記載の移動体の電子制御装置。
【請求項３】
前記テスト用演算部は、複数種類の前記演算処理を順番に選択して前記演算値を算出する請求項１又は請求項２に記載の移動体の電子制御装置。
【請求項４】
前記共通値は、前記２つのＣＰＵのそれぞれに予め記憶されている請求項１から請求項３のいずれか一項に記載の移動体の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、移動体の電子制御装置に関する。
【背景技術】
【０００２】
移動体の電子制御装置には、ＣＰＵ（Central Processing Unit）を２つ備えるものが
あり、２つのＣＰＵで互いの動作を監視しながら、アクチュエータの制御を行うことがある。
【０００３】
このような電子制御装置の従来例としては、例えば、車両の電子スロットルバルブの制御を行うものが知られている。メインＣＰＵとサブＣＰＵの２つＣＰＵは、その各々で電子スロットルバルブを制御するための演算処理を行う。さらに、その演算結果を２つのＣＰＵの間で通信し、２つのＣＰＵのそれぞれで演算した値が予め設定されている異常判定用の所定値以上になったら、電子制御装置はメインＣＰＵが異常動作をしていると判定する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−３０２５４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の電子制御装置は、電子スロットルバルブを制御するための演算処理をサブＣＰＵでも行うので、メインＣＰＵと同様な演算処理を行える能力がサブＣＰＵにも必要であった。このことは、電子制御装置のコストアップの原因になっていた。
さらに、電子スロットルバルブを制御するためのパラーメータは、時々刻々と変化する。このため、２つのＣＰＵの間の通信で演算結果を比較する場合には、２つのＣＰＵが演算処理をしたタイミングを明確にしなければならない。このため、従来の電子制御装置では、演算処理のタイミングを同期させるための複雑な処理が必要であった。
【０００６】
また、車種が異なると電子スロットルバルブの制御の仕方が異なることがある。このような場合には、車種ごとにＣＰＵで異常監視を行うためのプログラムを変更しなければならなかった。
本発明は、このような事情を鑑みてなされたものであり、複数のＣＰＵの間での相互監視を効率良く行わせることを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一観点によれば、第１のＣＰＵと第２のＣＰＵとを有し、前記第１のＣＰＵと前記第２のＣＰＵの一方のＣＰＵが他方のＣＰＵの動作を監視する移動体の電子制御装置において、テスト値を取得するテスト値取得部と、前記テスト値と共通値を用いて演算処理を行って演算値を算出するテスト用演算部と、前記第１のＣＰＵと前記第２のＣＰＵの一方のＣＰＵで算出した前記演算値を、他方のＣＰＵにおいて前記共通値を用いて前記演算処理の逆演算を行い、その演算結果と前記他方のＣＰＵが有する前記一方のＣＰＵの前記テスト値を比較することで一方のＣＰＵの動作を判定する比較部と、を前記第１のＣＰ
Ｕと前記第２のＣＰＵのそれぞれに設け、前記第１のＣＰＵの前記テスト値は、前記第１のＣＰＵのコアに対して自己診断した結果を表すコードを前記テスト値として取得し、前記第２のＣＰＵの前記テスト値は、前記第２のＣＰＵのコアに対して自己診断した結果を表すコードを前記テスト値として取得するように構成したことを特徴とする移動体の電子制御装置が提供される。
【０００８】
また、本発明の別の観点によれば、前記テスト値取得部は、所定値を前記ＣＰＵの汎用レジスタに書き込んだ後に読み出し、その読み出し値と前記所定値を比較した結果のコードを前記テスト値として取得する請求項１に記載の移動体の電子制御装置が提供される。
【０００９】
また、本発明の別の観点によれば、前記テスト用演算部は、複数種類の演算を順番に選択して前記演算値を算出する請求項１又は請求項２に記載の移動体の電子制御装置が提供される。
【００１０】
また、本発明の別の観点によれば、前記共通値は、前記２つのＣＰＵのそれぞれに予め記憶されている請求項１から請求項３のいずれか一項に記載の移動体の電子制御装置が提供される。
【発明の効果】
【００１１】
本発明によれば、制御対象の制御に必要な演算処理の代わりに、テスト値と共通値を用いた演算処理を行い、その演算結果を使ってＣＰＵの相互監視を行うようにしたので、ＣＰＵの処理負担を低減できる。また、テスト値を使用することで、ＣＰＵ間で相互監視のための演算処理を開始するタイミングの同期させる必要がなくなるので、装置構成を簡略化できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明の実施形態に係る移動体の電子制御装置のブロック図である。
【図２】図２は、本発明の実施の形態に係る相互監視方法のフローチャートである。
【図３】図３は、本発明の実施の形態に係るテスト値を取得する処理のフローチャートである。
【図４】図４は、本発明の実施の形態に係る（ａ）テスト値を算出するフローチャート、（ｂ）各演算処理における演算コードと演算値を示す図である。
【図５】図５は、本発明の実施の形態に係る相互監視方法のタイミングチャートである。
【発明を実施するための最良の形態】
【００１３】
本発明を実施するための形態について以下に詳細に説明する。
図１に本実施の形態に係る移動体の電子制御装置のブロック図を示す。
動体の電子制御装置（以下、電子制御装置という）１は、バッテリ２からの電力がシステムリレー３を介して入力され、アクチュエータであるモータ４の回転制御を行うように構成されている。具体的には、電子制御装置１は、第１のＣＰＵであるメインＣＰＵ１１と、第２のＣＰＵであるサブＣＰＵ１２とを有する。これらＣＰＵ１１，１２には、バッテリ２からの電力がシステムリレー回路１３を介して電力が供給される。さらに、２つのＣＰＵ１１，１２は、通信可能に接続されている。そして、２つのＣＰＵ１１，１２か
ら出力される信号は、リレー駆動回路１５と、モータドライバ１６とに接続されている。モータドライバ１６は、モータ４のコイルに通電する電流を制御するように構成されている。
【００１４】
メインＣＰＵ１１は、図示を省略するＲＯＭ（Read Only Memory）やＲＡＭ（Random A
ccess Memory）、その他の回路を有し、モータ制御部２１と、第１の相互監視部であるメイン相互監視部２２とに機能分割できる。ここで、モータ制御部２１は、外部からの信号を受けて制御対象であるモータの回転制御を行うための演算を行う。また、メイン相互監視部２２は、テスト値を取得するＭＴＥＳＴ取得部３１（テスト値取得部）と、テスト値を用いた演算処理及び演算値の送信を行うＭＴＥＳＴｎ演算部３２（テスト用演算部）と、サブＣＰＵ１２を診断するメイン比較部３３とに機能分割される。なお、メインＣＰＵ１１は、これ以外の機能を実現するための制御部や演算部を備えても良い。例えば、制御対象がモータ以外のアクチュエータである場合、そのようなアクチュエータの制御部がモータ制御部の代わりに設けられる。また、アクチュエータ以外の他の装置の制御も行う場合には、その装置のための制御部が設けられる。
【００１５】
サブＣＰＵ１２は、図示を省略するＲＯＭやＲＡＭ、その他の回路を有し、第２の相互監視部であるサブ相互監視部２３を有する。サブ相互監視部２３は、テスト値を取得するＳＴＥＳＴ取得部４１（テスト値取得部）と、テスト値を用いた演算処理及び演算値の送信を行うＳＴＥＳＴｎ演算部４２（テスト用演算部）と、メインＣＰＵ１１を診断するサブ比較部４３とに機能分割される。なお、サブＣＰＵ１２は、これ以外の機能を実現するための制御部や演算部を備えても良い。
【００１６】
次に、図２を主に参照して、各ＣＰＵ１１，１２が互いの動作の診断する相互監視方法について説明する。このＣＰＵ１１，１２の相互監視方法では、テスト値に演算処理を行った結果を２つのＣＰＵ１１，１２の間で通信し合うことで相互監視を行うことを特徴とする。
【００１７】
まず、最初に、ステップＳ１０１でメインＣＰＵ１１がサブＣＰＵ１２に診断させる演算値を算出する。具体的には、最初に、メインＣＰＵ１１のＭＴＥＳＴ取得部３１が、テスト値ＭＴＥＳＴを取得する。テスト値ＭＴＥＳＴは、メインＣＰＵ１１とサブＣＰＵ１２の両方が知り得る値であって、モータ４の駆動制御に影響を及ぼさない程度の負荷で取得できる値が用いられる。このようなテスト値ＭＴＥＳＴとしては、例えば、ＣＰＵ１１，１２のコア診断の結果や、ＣＰＵ１１，１２のＲＯＭの所定領域にあるデータがあげられる。
【００１８】
続いて、メインＣＰＵ１１のＭＴＥＳＴｎ演算部３２は、共通値Ｎを用いて、テスト値ＭＴＥＳＴに対して予め定められた演算処理、例えば、減算処理を行い、演算値ＭＴＥＳＴ１を算出する。共通値Ｎは、メインＣＰＵ１１とサブＣＰＵ１２の両方が知り得る値、例えば、それぞれのＲＯＭに予め記憶されている値が用いられる。
そして、演算値ＭＴＥＳＴ１は、通信によって、サブＣＰＵ１２に送信される。
【００１９】
次に、ステップＳ１０２で、サブＣＰＵ１２がメインＣＰＵ１１を診断する。
サブＣＰＵ１２は、演算値ＭＴＥＳＴ１を取得したら、サブ比較部４３が演算値ＭＴＥＳＴ１に対して予め定められた逆演算処理、例えば、演算値ＭＴＥＳＴ１から共通値Ｎを加算する処理を行い、テスト値ＭＴＥＳＴを算出する。ここで、逆演算処理とは、メインＣＰＵ１１でテスト値ＭＴＥＳＴに対して行われた演算処理の効果を打ち消し、演算値ＭＴＥＳＴ１からテスト値ＭＴＥＳＴを復元するような処理をいう。
【００２０】
さらに、サブ比較部４３は、ＳＴＥＳＴ取得部４１で取得したテスト値ＭＴＥＳＴと、逆演算により算出したテスト値ＭＴＥＳＴとを比較する。ＳＴＥＳＴ取得部４１は、サブＣＰＵ１２のＲＯＭの所定領域にあるデータの読み出し処理を行ってテスト値ＭＴＥＳＴを取得する。なお、テスト値ＭＥＴＳＴは、２つのＣＰＵ１１，１２が正常動作している場合には、同じ値が得られる。
【００２１】
つまり、２つのメインＣＰＵ１１，１２が正常動作していれば、サブＣＰＵ１２は、メインＣＰＵ１１が取得したテスト値ＭＴＥＳＴを復元することができる。しかも、そのテスト値ＭＴＥＳＴは、サブＣＰＵ１２が自身で取得したテスト値ＭＴＥＳＴと一致するはずである。
【００２２】
したがって、サブ比較部４３は、算出したテスト値ＭＴＥＳＴと、自身が取得したテスト値ＭＴＥＳＴとが一致する場合には、メインＣＰＵ１１が正常動作（ＯＫ）していると判定する。一方、算出したテスト値ＭＴＥＳＴとテスト値ＭＴＥＳＴとが一致しない場合には、メインＣＰＵ１１が異常動作（ＮＧ）していると判定する。
【００２３】
そして、サブＣＰＵ１２は、メインＣＰＵ１１を診断したら、ステップＳ１０３に進む。ステップＳ１０３では、サブＣＰＵ１２が、自身の動作をメインＣＰＵ１１に診断させるための演算値を計算する。すなわち、サブＣＰＵ１２のＳＴＥＳＴｎ演算部４２は、テスト値ＳＴＥＳＴに対して共通値Ｎを用いて予め定められた演算処理、例えば、減算処理を行い、演算値ＳＴＥＳＴ１を算出する。
そして、演算値ＳＴＥＳＴ１は、通信によって、メインＣＰＵ１１に送信される。
【００２４】
次に、ステップＳ１０４で、メインサブＣＰＵ１１がサブＣＰＵ１２を診断する。
メインＣＰＵ１１が演算値ＳＴＥＳＴ１を取得したら、メイン比較部３３が演算値ＳＴＥＳＴ１に対して予め定められた逆演算処理、例えば、演算値ＳＴＥＳＴ１から共通値を加算する処理を実行し、テスト値ＳＴＥＳＴを算出する。逆演算処理は、サブＣＰＵ１２でテスト値ＳＴＥＳＴに対して行われた演算処理の効果を打ち消し、演算値ＳＴＥＳＴ１からテスト値ＳＴＥＳＴを復元するような処理をいう。
【００２５】
ここで、２つのメインＣＰＵ１１，１２が正常動作していれば、メインＣＰＵ１１は、サブＣＰＵ１２が取得したテスト値ＳＴＥＳＴを復元することができる。しかも、そのテスト値ＳＴＥＳＴは、メインＣＰＵ１１が自身で取得したテスト値ＳＴＥＳＴと一致するはずである。
【００２６】
したがって、メイン比較部３３は、算出されたテスト値ＳＴＥＳＴと、自身が取得したテスト値ＳＴＥＳＴとを比較する。両者が一致する場合には、サブＣＰＵ１２が正常動作（ＯＫ）していると判定する。一方、算出したテスト値ＳＴＥＳＴとテスト値ＳＴＥＳＴとが一致しない場合、メイン比較部３３は、サブＣＰＵ１２が異常動作（ＮＧ）していると判定する。
【００２７】
そして、続くステップＳ１０５からステップＳ１０８では、上記の処理と同様の処理が演算処理の種類を変更して繰り返される。
まず、ステップＳ１０５では、メインＣＰＵ１１がサブＣＰＵ１２に診断させる演算値を作成する。メインＣＰＵ１１のＭＴＥＳＴ取得部３１が、テスト値ＭＴＥＳＴを取得し、ＭＴＥＳＴｎ演算部３２が、テスト値ＭＴＥＳＴに対して共通値Ｎを用いて予め定められた演算処理、例えば、加算処理を行い、演算値ＭＴＥＳＴ２を算出する。この際の演算処理は、ステップＳ１０１で実施した減算処理とは異なる処理であって、予め決められた複数の演算処理から順番に選択される１つ演算処理である。
そして、演算値ＭＴＥＳＴ２は、通信によって、サブＣＰＵ１２に送信される。
【００２８】
ステップＳ１０６では、サブＣＰＵ１２がメインＣＰＵ１１に対する２回目の診断を行う。サブ比較部４３は、演算値ＭＴＥＳＴ２に対して予め定められた逆演算処理として演算値ＭＴＥＳＴ２から共通値Ｎを減算する処理を行い、テスト値ＭＴＥＳＴを算出する。
【００２９】
さらに、サブ比較部４３は、算出されたテスト値ＭＴＥＳＴと、自己が取得したテスト
値ＭＴＥＳＴとを比較し、両者が一致する場合には、メインＣＰＵ１１が正常動作（ＯＫ）していると判定する。一方、算出したテスト値ＭＴＥＳＴとテスト値ＭＴＥＳＴとが一致しない場合には、メインＣＰＵ１１が異常動作（ＮＧ）していると判定する。
【００３０】
続いて、ステップＳ１０７で、サブＣＰＵ１２がメインＣＰＵ１１に診断させるための演算値を算出する。サブＣＰＵ１２のＳＴＥＳＴ取得部４１が、テスト値ＳＴＥＳＴを取得し、ＳＴＥＳＴｎ演算部４２がテスト値ＳＴＥＳＴに対して共通値Ｎを用いて予め定められた演算処理、例えば、加算処理を行い、演算値ＳＴＥＳＴ２を算出する。
そして、演算値ＳＴＥＳＴ２は、通信によって、メインＣＰＵ１１に送信される。
【００３１】
ステップＳ１０８では、メインＣＰＵ１１がサブＣＰＵ１２に対する２回目の診断を行う。メインＣＰＵ１１では、メイン比較部３３が演算値ＳＴＥＳＴ２に対して予め定められた逆演算処理として、演算値ＳＴＥＳＴ２から共通値Ｎを減算する処理を行い、テスト値ＳＴＥＳＴを算出する。
【００３２】
さらに、メイン比較部３３は、算出されたテスト値ＳＴＥＳＴと、自己が取得したテスト値ＭＴＥＳＴとを比較し、両者が一致する場合には、サブＣＰＵ１２が正常動作(ＯＫ)していると判定する。一方、算出したテスト値ＳＴＥＳＴとテスト値ＭＴＥＳＴとが一致しない場合には、サブＣＰＵ１２が異常動作（ＮＧ）していると判定する。
【００３３】
以降は、所定時間ごとに、メインＣＰＵ１１とサブＣＰＵ１２との間で、演算処理を順番に変えながら、同様の処理を実行する。演算処理は、例えば、テスト値ＭＴＥＳＴ，ＳＴＥＳＴから演算値ＭＴＥＳＴｎ，ＳＴＥＳＴｎ（ｎは共に正の整数）を算出するときは、減算（第１の演算処理）→加算（第２の演算処理）→乗算（第３の演算処理）→除算（第４の演算処理）→余り演算（第５の演算処理）を順番に使う。これに対し、演算値ＭＴＥＳＴｎや演算値ＳＴＥＳＴｎからテスト値ＭＴＥＳＴ，ＳＴＥＳＴから算出するときは、加算（第１の逆演算処理）→減算（第２の逆演算処理）→除算（第３の演算処理）→乗算（第４の逆演算処理）→四則混合演算（第５の逆演算処理）を順番に使う。ここで、四則混合演算とは、余り演算の逆演算に対応するものである。例えば、余り演算が、テスト値４０を７で割ったときの余り、つまり４０÷７＝５、余り５という計算であった場合、ここでの四則混合演算は５＋７×５を計算して、４０を得るような演算である。なお、メインＣＰＵ１１側とサブＣＰＵ１２側では、演算値ＭＴＥＳＴｎ，ＳＴＥＳＴｎの算出に同じ種類の演算処理を採用することが好ましい。また、演算処理の種類や順番は、これに限定されない。例えば、同じ演算処理を２回以上連続して実施しても良い。
【００３４】
また、共通値Ｎは、演算の種類に依らずに常に一つの値を使用している。しかしながら、共通値Ｎは、複数の値を循環させて用いても良い。複数の値を循環させる場合は、各ＣＰＵ１１，１２のＲＯＭには、複数の共通値Ｎと、それら共通値Ｎを使う順番とが予め登録される。さらに、ＭＴＥＳＴｎ演算部３２及びＳＴＥＳＴｎ演算部４２は、予め登録された順番に共通値Ｎを読み込んで演算処理を行うように構成される。
【００３５】
ここで、図３を参照して、テスト値ＭＴＥＳＴ，ＳＴＥＳＴを取得する処理の一例として、それぞれのＣＰＵ１１，１２のコアの診断結果を用いる場合について説明する。なお、以下においては、メインＣＰＵ１１における処理について説明するが、サブＣＰＵ１２においても同様の処理が行われる。
【００３６】
最初に、ステップＳ２０１で、ＭＴＥＳＴ取得部３１は、テスト値ＭＴＥＳＴの初期値にゼロを代入する。続いて、ステップＳ２０２で、ＭＴＥＳＴ取得部３１は、ＣＰＵ１１の汎用レジスタに所定値、例えば０ｘ５５を書き込む。
この後、ステップＳ２０３で、ＭＴＥＳＴ取得部３１は、同じ汎用レジスタの値を読み込
んで、最初に汎用レジスタに書き込んだ値と比較する。
【００３７】
汎用レジスタの読み込み値が、書き込み値と同じ値、即ち０ｘ５５であれば、ステップＳ２０４に進んで、今度は汎用レジスタに別の所定値、例えば０ｘＡＡを書き込む。
この後、ステップＳ２０５で、ＭＴＥＳＴ取得部３１が同じ汎用レジスタの値を読み込む。汎用レジスタの読み込み値が、書き込み値と同じ値、即ち０ｘＡＡであれば、ステップＳ２０６に進む。この場合、ＭＴＥＳＴ取得部３１は、メインＣＰＵ１１のコアが正常に動作していることを示すコード、例えば「４０」をテスト値ＭＴＥＳＴに代入する。
【００３８】
一方、ステップＳ２０３とステップＳ２０５のいずれか一方でも汎用レジスタの読み込み値と書き込み値とが一致しない場合には、ステップＳ２０７に進む。これらの場合は、汎用レジスタへの書き込み、又は汎用レジスタからの書き込みが正常に実行できなかったことになるので、テスト値ＭＴＥＳＴに、メインＣＰＵ１１のコアの動作が異常であることを示すコード、例えば「５０」を代入する。
【００３９】
また、図４（ａ）に、ＣＰＵ１１，１２のコアの診断結果をテスト値として使用した場合に、ＭＴＥＳＴｎ演算部３２又はＳＴＥＳＴｎ演算部４２が演算値ＭＴＥＳＴｎ、ＳＴＥＳＴｎを演算処理で算出する場合のフローチャートを示す。なお、以下においては、メインＣＰＵ１１における処理について説明するが、サブＣＰＵ１２においても同様の処理が行われる。
【００４０】
最初に、ステップＳ３０１で、演算値ＭＴＥＳＴ１を算出する。演算値ＭＴＥＳＴ１は、例えば、テスト値ＴＥＳＴから演算テストコードの値を引いた結果を代入する。続いて、ステップＳ３０２で、演算値ＭＴＥＳＴ１は、送信レジスタに書き込まれる。
【００４１】
さらに、図４（ｂ）に各演算処理における演算コードと演算値ＭＴＥＳＴ１を示す。なお、テスト値は、ＣＰＵ１１，１２のコアが正常に動作している場合のコード、「４０」を用いた場合を例にして示している。
【００４２】
減算処理の共通値Ｎのコードを「１０」に設定した場合、演算値ＭＴＥＳＴ１は、４０−１０＝３０になる。加算処理の共通値Ｎのコードを「２０」にした場合、演算値ＭＴＥＳＴ１は、４０＋２０＝６０になる。乗算処理の共通値Ｎのコードを「２」にした場合、演算値ＭＴＥＳＴ１は、４０×２＝８０になる。除算処理の共通値Ｎのコードを「４」にした場合、演算値ＭＴＥＳＴ１は、４０÷４＝１０になる。余り演算処理の共通値Ｎのコードを「７」にした場合、演算値ＭＴＥＳＴ１は、４０を７で除算したときの余りである「５」になる。
【００４３】
これらの演算値ＭＴＥＳＴ１は、ＣＰＵ１１，１２が正しく機能している場合に得られる値である。すなわち、演算値ＭＴＥＳＴ１として正しい値が得られた場合には、ＣＰＵ１１，１２のコア機能としての汎用レジスタの読み込み及び書き込み、分岐命令、比較命令のそれぞれの機能と、ＣＰＵ１１，１２の演算回路が共に正しく機能していることを確認できる。
【００４４】
ここで、図２のフローチャートに示すメインＣＰＵ１１とサブＣＰＵ１２による相互監視にエラーが生じたときの処理について、図５のタイミングチャートを参照して説明する。
なお、図５は、横軸が時間を示し、縦軸がメインＣＰＵ１１及びサブＣＰＵ１２のそれぞれの動作を示す。そして、図５は、相互監視が所定の間隔で継続して実施され、かつ各ＣＰＵ１１，１２でエラーが発生していない場合を示している。すなわち、時間Ｔ０でメインＣＰＵ１１及びサブＣＰＵ１２にリセットがかけられ、時間Ｔ１でサブＣＰＵ１２の
初期化が完了する。メインＣＰＵ１１の初期化は、時間Ｔ２までかかっている。
【００４５】
２つのＣＰＵ１１，１２が通常の動作を開始したら、時間Ｔ３でメインＣＰＵ１１が最初に演算値ＭＴＥＳＴ１を出力する。演算値ＭＴＥＳＴ１を受け取ったサブＣＰＵ１２は、時間Ｔ４で、演算値ＳＴＥＳＴ１を出力する。以降、時間Ｔ５、Ｔ７、Ｔ９、Ｔ１１のそれぞれにメインＣＰＵ１１が演算値ＭＴＥＳＴ２、演算値ＭＴＥＳＴ３、演算値ＭＴＥＳＴ４、演算値ＭＴＥＳＴ５を出力する。これに対し、時間Ｔ６、Ｔ８、Ｔ１０、Ｔ１２のそれぞれにサブＣＰＵ１２が演算値ＳＴＥＳＴ２、演算値ＳＴＥＳＴ３、演算値ＳＴＥＳＴ４、演算値ＳＴＥＳＴ５を出力する。
【００４６】
このＣＰＵ１１，１２の相互監視方法では、四則演算と余り演算の合計５種類の演算を順番に実施するので、時間Ｔ１３では、メインＣＰＵ１１が時間Ｔ３と同様の演算を行って演算値ＭＴＥＳＴ１を出力する。同様に、時間Ｔ１４では、サブＣＰＵ１２が時間Ｔ４と同様の演算を行って演算値ＳＴＥＳＴ１を出力する。以降は、同様の処理を繰り替えし、メインＣＰＵ１１とサブＣＰＵ１２の一方のＣＰＵが他方のＣＰＵを監視する処理を交互に繰り返す。
【００４７】
この場合は、メインＣＰＵ１１はサブＣＰＵ１２の異常を検出せず、サブＣＰＵ１２はメインＣＰＵ１１の異常を検出していない。このため、２つＣＰＵ１１，１２からの指令を受けてモータ４の回転制御が行われる。
【００４８】
続いて、いずれかのＣＰＵ１１，１２に異常が発生した場合の処理について、以下に場合分けして説明する。
【００４９】
（Ａ）起動時のメインＣＰＵ１１の異常と、異常からの復帰
起動時にメインＣＰＵ１１から最初に送信された演算値ＭＴＥＳＴ１がサブＣＰＵ１２で異常と判定された場合の処理について説明する。このような場合としては、以下のケースが想定される。
（Ａ１）Ｔ３→Ｔ４  ：メインＣＰＵ→サブＣＰＵ  異常（サブ側通信ＮＧ）
（Ａ２）Ｔ４→Ｔ５  ：サブＣＰＵ →メインＣＰＵ  異常（メイン側通信ＮＧ）
（Ａ３）Ｔ５→Ｔ６  ：メインＣＰＵ→サブＣＰＵ  異常
（Ａ４）Ｔ６→Ｔ７  ：サブＣＰＵ →メインＣＰＵ  異常
（Ａ５）Ｔ７→Ｔ８  ：メインＣＰＵ→サブＣＰＵ  正常
（Ａ６）Ｔ８→Ｔ９  ：サブＣＰＵ →メインＣＰＵ  正常
（Ａ７）Ｔ９→Ｔ１０  ：メインＣＰＵ→サブＣＰＵ  正常（サブ側通信ＯＫ）
（Ａ８）Ｔ１０→Ｔ１１：サブＣＰＵ →メインＣＰＵ  正常（メイン側通信ＯＫ）
【００５０】
時間Ｔ３においてメインＣＰＵ１１で計算された演算値ＭＴＥＳＴ１に基づいて、サブＣＰＵ１２がメインＣＰＵ１１を診断する。この場合、演算値ＭＴＥＳＴ１は正常な値でない、つまり異常値なので、サブＣＰＵ１２は、メインＣＰＵ１１に対して異常判定（サブ側通信ＮＧ）をする。この場合、サブＣＰＵ１２のＳＴＥＳＴｎ演算部４２は、メインＣＰＵ１１から送信された値、つまり異常値である演算値ＭＴＥＳＴ１を演算値ＳＴＥＳＴ１に代入してメインＣＰＵ１１に送信する。
【００５１】
さらに、時間Ｔ４においてサブＣＰＵ１２で計算された演算値ＳＴＥＳＴ１に基づいて、メインＣＰＵ１１がサブＣＰＵ１２を診断する。この場合、演算値ＳＴＥＳＴ１として異常な値が送信されているので、メインＣＰＵ１１は、サブＣＰＵ１２に対して異常判定（サブ側通信ＮＧ）をする。
【００５２】
続く時間Ｔ５においてメインＣＰＵ１１で計算された演算値ＭＴＥＳＴ２と、時間Ｔ６
においてサブＣＰＵ１２で計算された演算値ＳＴＥＳＴ２は、共に異常値なので、各ＣＰＵ１１，１２は、異常判定を維持する。
【００５３】
ここで、時間Ｔ５でメインＣＰＵ１１が２回目の診断結果をサブＣＰＵ１２に送信した後に、メインＣＰＵ１１が異常状態から正常状態に復帰したので、時間Ｔ７で計算される３回目の演算値ＭＴＥＳＴ３は、正常値になる。
このため、時間Ｔ７においてメインＣＰＵ１１で計算された演算値ＭＴＥＳＴ３に基づいて、サブＣＰＵ１２がメインＣＰＵ１１を正常と判定する。この際、サブＣＰＵ１２のサブ比較部４３は、異常判定後に正常判定を行ったので、正常な演算値ＭＴＥＳＴｎを２回連続して受信するまで、通信ＯＫと判定しない。このため、モータ４の駆動は許可されない。
【００５４】
また、時間Ｔ８においてサブＣＰＵ１２で計算された演算値ＳＴＥＳＴ３に基づいて、メインＣＰＵ１１がサブＣＰＵ１２を正常と判定する。この際、メインＣＰＵ１１のメイン比較部３３は、異常判定後に正常判定を行ったので、正常な演算値ＳＴＥＳＴｎを２回連続して受信するまで、通信ＯＫと判定しない。このため、モータ４の駆動は許可されない。
【００５５】
さらに、時間Ｔ９にメインＣＰＵ１１で計算された正常な演算値ＭＴＥＳＴ４に基づいて、サブＣＰＵ１２がメインＣＰＵ１１に対して正常判定する。これにより、サブＣＰＵ１２側で正常判定が２回連続したので、サブＣＰＵ１２は通信ＯＫと判定する。サブＣＰＵ１２のサブ比較部４３は、許可信号をモータドライバ１６に出力する。
そして、時間Ｔ１０にサブＣＰＵ１２で計算された正常な演算値ＳＴＥＳＴ４に基づいて、メインＣＰＵ１１がサブＣＰＵ１２に対して正常判定する。これにより、メインＣＰＵ１１側で正常判定が２回連続したので、メインＣＰＵ１１は通信ＯＫと判定する。メインＣＰＵ１１のメイン比較部３３が許可信号をモータドライバ１６に出力する。その結果、時間Ｔ１１で２つのＣＰＵ１１，１２からの許可信号が揃って、モータ４の回転制御が開始される。
【００５６】
（Ｂ）起動時のサブＣＰＵ１２の異常と、異常からの復帰
起動時にサブＣＰＵ１２から最初に送信された演算値ＳＴＥＳＴ１がメインＣＰＵ１１で異常と判定された場合の処理について説明する。このような場合としては、以下のケースが想定される。
（Ｂ１）Ｔ３→Ｔ４  ：メインＣＰＵ→サブＣＰＵ  正常（サブ側通信ＯＫ）
（Ｂ２）Ｔ４→Ｔ５  ：サブＣＰＵ →メインＣＰＵ  異常（メイン側通信ＮＧ）
（Ｂ３）Ｔ５→Ｔ６  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｂ４）Ｔ６→Ｔ７  ：サブＣＰＵ →メインＣＰＵ  異常
（Ｂ５）Ｔ７→Ｔ８  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｂ６）Ｔ８→Ｔ９  ：サブＣＰＵ →メインＣＰＵ  正常
（Ｂ７）Ｔ９→Ｔ１０  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｂ８）Ｔ１０→Ｔ１１：サブＣＰＵ →メインＣＰＵ  正常（メイン側通信ＯＫ）
【００５７】
時間Ｔ３においてメインＣＰＵ１１で計算された演算値ＭＴＥＳＴ１に基づいて、サブＣＰＵ１２がメインＣＰＵ１１を診断する。この場合、演算値ＭＴＥＳＴ１は正常な値なので、サブＣＰＵ１２は、メインＣＰＵ１１に対して正常判定（サブ側通信ＯＫ）をする。
一方、時間Ｔ４においてサブＣＰＵ１２で計算された演算値ＳＴＥＳＴ１は異常値であったので、メインＣＰＵ１１がサブＣＰＵ１２を異常判定（サブ側通信ＮＧ）する。
【００５８】
時間Ｔ５で、メインＣＰＵ１１は、サブＣＰＵ１２の動作状態に拘らず、演算値ＭＴＥ
ＳＴ２を作成してサブＣＰＵ１２に送信する。このため、時間Ｔ６で、サブＣＰＵ１２は、メインＣＰＵ１１を正常判定する。
一方、時間Ｔ６においてサブＣＰＵ１２で計算された演算値ＳＴＥＳＴ２は異常値なので、時間Ｔ７においてメインＣＰＵ１１はサブＣＰＵ１２の異常判定を維持する。
【００５９】
そして、時間Ｔ８までにサブＣＰＵ１２が正常状態になったら、時間Ｔ８でメインＣＰＵ１１に送信される演算値ＳＴＥＳＴ３は正常値になる。メインＣＰＵ１１は、異常判定を一回しているので、正常判定が２回連続したとき、すなわち、時間Ｔ１１で通信がＯＫになったと判定する。そして、メインＣＰＵ１１は、モータドライバ１６に許可信号を送信する。
【００６０】
（Ｃ）起動時にサブＣＰＵ１２からの応答がない場合
起動時にメインＣＰＵ１１は演算値ＭＴＥＳＴｎを送信するが、サブＣＰＵ１２からは演算値ＭＥＳＴｎが送信されない場合について説明する。
時間Ｔ３でメインＣＰＵ１１が演算値ＭＴＥＳＴ１をサブＣＰＵ１２に送信した後、サブＣＰＵ１２から信号がメインＣＰＵ１１に送られてこない場合、メインＣＰＵ１１は、所定の時間ｔが経過するごとに、演算値ＭＴＥＳＴｎをサブＣＰＵ１２に送信する。サブＣＰＵ１２からの応答がない場合、メインＣＰＵ１１は、予め定められた時間、例えば２５５ｍ秒が経過するまで、演算値ＭＴＥＳＴｎを送信し続ける。予め定められた時間が経過したら、メインＣＰＵ１１のメイン比較部３３はサブＣＰＵ１２の通信異常と判定し、処理を終了する。以降、電子制御装置１のシステムがリセットされるまでメインＣＰＵ１１は通信を停止する。
【００６１】
（Ｄ）動作判定した後に、メインＣＰＵ１１の異常が連続して発生した場合
このような場合としては、以下のケースが想定される。
（Ｄ１）Ｔ３→Ｔ４  ：メインＣＰＵ→サブＣＰＵ  正常（サブ側通信ＯＫ）
（Ｄ２）Ｔ４→Ｔ５  ：サブＣＰＵ →メインＣＰＵ  正常（メイン側通信ＮＧ）
（Ｄ３）Ｔ５→Ｔ６  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｄ４）Ｔ６→Ｔ７  ：サブＣＰＵ →メインＣＰＵ  正常
（Ｄ５）Ｔ７→Ｔ８  ：メインＣＰＵ→サブＣＰＵ  異常
（Ｄ６）Ｔ８→Ｔ９  ：サブＣＰＵ →メインＣＰＵ  異常
（Ｄ７）Ｔ９→Ｔ１０  ：メインＣＰＵ→サブＣＰＵ  異常
（Ｄ８）Ｔ１０→Ｔ１１：サブＣＰＵ →メインＣＰＵ  異常
（Ｄ９）Ｔ１１→Ｔ１２：メインＣＰＵ→サブＣＰＵ  異常（サブ側通信ＮＧ）
【００６２】
時間Ｔ３から時間Ｔ７までは、各ＣＰＵ１１，１２が正常判定をしていた。この後、時間Ｔ７においてメインＣＰＵ１１で計算された演算値ＭＴＥＳＴ３が異常値であった場合、サブＣＰＵ１２がメインＣＰＵ１１を異常と判定する。また、これに伴って、メインＣＰＵ１１もサブＣＰＵ１２に対して異常判定を行う。
【００６３】
そして、時間Ｔ１１でサブＣＰＵ１２に送信される演算値ＭＴＥＳＴ５が異常値であると、サブＣＰＵ１２が３回目の異常判定を行う。ここで、サブＣＰＵ１２側で異常判定が３回連続したので、サブ比較部４３は通信ＮＧと判定し、モータ駆動を停止させる。以降、電子制御装置１のシステムがリセットされるまでサブＣＰＵ１２は通信を停止する。
【００６４】
（Ｅ）メインＣＰＵからの通信が途絶した場合
メインＣＰＵ１１、サブＣＰＵ１２ともに起動から２回目までの通信は正常だったが、３回目のメインＣＰＵ１１からの通信が途絶した場合、サブＣＰＵ１２は通信途絶が３回連続した場合に、通信ＮＧとして、モータ駆動を停止させる。以降、システムがリセットされるまでサブＣＰＵ１２は通信を停止する。
【００６５】
（Ｆ）メインＣＰＵからの通信が途絶した後、通信が正常に復帰した場合
このような場合としては、以下のケースが想定される。
（Ｆ１）Ｔ３→Ｔ４  ：メインＣＰＵ→サブＣＰＵ  正常（サブ側通信ＯＫ）
（Ｆ２）Ｔ４→Ｔ５  ：サブＣＰＵ →メインＣＰＵ  正常（メイン側通信ＯＫ）
（Ｆ３）Ｔ５→Ｔ６  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｆ４）Ｔ６→Ｔ７  ：サブＣＰＵ →メインＣＰＵ  正常
（Ｆ５）Ｔ７→Ｔ８  ：メインＣＰＵ→サブＣＰＵ  通信途絶
（Ｆ６）Ｔ８→Ｔ９  ：サブＣＰＵ →メインＣＰＵ  通信途絶
（Ｆ７）Ｔ９→Ｔ１０  ：メインＣＰＵ→サブＣＰＵ  通信途絶
（Ｆ８）Ｔ１０→Ｔ１１  ：サブＣＰＵ →メインＣＰＵ  通信途絶
（Ｆ９）Ｔ１１→Ｔ１２  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｆ１０）Ｔ１２→Ｔ１３：サブＣＰＵ →メインＣＰＵ  正常
（Ｆ１１）Ｔ１３→Ｔ１４：メインＣＰＵ→サブＣＰＵ  正常
（Ｆ１２）Ｔ１４→Ｔ１５：サブＣＰＵ →メインＣＰＵ  正常（サブ側通信ＯＫ）
【００６６】
時間Ｔ３から時間Ｔ７までは、各ＣＰＵ１１，１２が正常判定をしていた。この後、時間Ｔ７の３回目のメインＣＰＵ１１からの通信が途絶した。この後、２回の通信途絶を経て、時間Ｔ１１でメインＣＰＵ１１からの通信が復活した。
時間Ｔ１１でメインＣＰＵ１１が送信した演算値ＭＴＥＳＴ５がサブＣＰＵ１２で正常値と判定された場合、サブＣＰＵ１２は、演算値ＭＴＥＳＴ５の演算パターンに合わせて演算値ＳＴＥＳＴ５を算出する。メインＣＰＵ１１が正常に動作しているので、演算値ＭＴＥＳＴ５は、余り演算で算出されているので、サブＣＰＵ１２は余り演算の逆演算処理である四則混合演算で演算値ＳＴＥＳＴ５を算出する。
【００６７】
そして、時間Ｔ１３で、メインＣＰＵ１１が演算値ＭＴＥＳＴ６を余り演算の次の順番の演算、例えば減算を用いて算出し、サブＣＰＵ１２に送信する。サブＣＰＵ１２では、前回実施した余り演算の次の演算、例えば、除算を用いて異常判定を行う。そして、演算値ＭＴＥＳＴ６が正常値であると判定した場合には、通信ＯＫと判定する。
【００６８】
（Ｇ）メインＣＰＵ１１からの通信が途絶した後、通信は復帰したが正しい演算値が得られなかった場合
このような場合としては、以下のケースが想定される。
（Ｇ１）Ｔ３→Ｔ４  ：メインＣＰＵ→サブＣＰＵ  正常（サブ側通信ＯＫ）
（Ｇ２）Ｔ４→Ｔ５  ：サブＣＰＵ →メインＣＰＵ  正常（メイン側通信ＯＫ）
（Ｇ３）Ｔ５→Ｔ６  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｇ４）Ｔ６→Ｔ７  ：サブＣＰＵ →メインＣＰＵ  正常
（Ｇ５）Ｔ７→Ｔ８  ：メインＣＰＵ→サブＣＰＵ  通信途絶
（Ｇ６）Ｔ８→Ｔ９  ：サブＣＰＵ →メインＣＰＵ  通信途絶
（Ｇ７）Ｔ９→Ｔ１０  ：メインＣＰＵ→サブＣＰＵ  通信途絶
（Ｇ８）Ｔ１０→Ｔ１１  ：サブＣＰＵ →メインＣＰＵ  通信途絶
（Ｇ９）Ｔ１１→Ｔ１２  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｇ１０）Ｔ１２→Ｔ１３：サブＣＰＵ →メインＣＰＵ  正常
（Ｇ１１）Ｔ１３→Ｔ１４：メインＣＰＵ→サブＣＰＵ  異常（サブ側通信ＮＧ）
【００６９】
時間Ｔ３から時間Ｔ７までは、各ＣＰＵ１１，１２が正常判定をしていた。この後、時間Ｔ７の３回目のメインＣＰＵ１１からの通信が途絶した。この後、２回の通信途絶を経て、時間Ｔ１１でメインＣＰＵ１１からの通信が復活した。
時間Ｔ１１でメインＣＰＵ１１が送信した演算値ＭＴＥＳＴ５がサブＣＰＵ１２で正常値と判定された場合、サブＣＰＵ１２は、演算値ＭＴＥＳＴ５の演算パターンに合わせて
演算値ＳＴＥＳＴ５を算出する。このとき、メインＣＰＵ１１が異常動作をしており、演算値ＭＴＥＳＴ５が本来の順番である余り演算ではなく、除算で算出されていた場合、これに合わせてサブＣＰＵ１２は除算で演算値ＳＴＥＳＴ５を算出する。
【００７０】
そして、時間Ｔ１３でメインＣＰＵ１１は、除算の次の演算である加算を用いずに、他の演算、例えば除算で演算値ＭＴＥＳＴ６を算出し、サブＣＰＵ１２に送信した。
時間Ｔ１４において、サブＣＰＵ１２は、前回実施した除算の次の演算、例えば、加算を用いて異常判定を行う。このため、テスト値ＭＴＥＳＴ、ＳＴＥＳＴが一致しなくなる。したがって、メインＣＰＵ１１は、演算値ＭＴＥＳＴ６が異常値であると判定し、通信ＮＧとする。
【００７１】
（Ｈ）動作判定した後に、サブＣＰＵ側で異常判定が連続して生じた場合
このような場合としては、以下のケースが想定される。
（Ｈ１）Ｔ３→Ｔ４ ：メインＣＰＵ→サブＣＰＵ  正常（サブ側通信ＯＫ）
（Ｈ２）Ｔ４→Ｔ５  ：サブＣＰＵ →メインＣＰＵ  正常（メイン側通信ＯＫ）
（Ｈ３）Ｔ５→Ｔ６  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｈ４）Ｔ６→Ｔ７  ：サブＣＰＵ →メインＣＰＵ  正常
（Ｈ５）Ｔ７→Ｔ８  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｈ６）Ｔ８→Ｔ９  ：サブＣＰＵ →メインＣＰＵ  異常
（Ｈ７）Ｔ９→Ｔ１０  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｈ８）Ｔ１０→Ｔ１１  ：サブＣＰＵ →メインＣＰＵ  異常
（Ｈ９）Ｔ１１→Ｔ１２  ：メインＣＰＵ→サブＣＰＵ  正常
（Ｈ１０）Ｔ１２→Ｔ１３：サブＣＰＵ →メインＣＰＵ  異常（メイン側通信ＮＧ）
【００７２】
時間Ｔ３から時間Ｔ８までは、各ＣＰＵ１１，１２が正常判定をしている。この後、この後、時間Ｔ８においてサブＣＰＵ１２で計算された演算値ＳＴＥＳＴ３が異常値であった場合、メインＣＰＵ１１がサブＣＰＵ１２を異常と判定する。
一方、メインＣＰＵ１１は正常動作しているので、時間Ｔ９においてメインＣＰＵ１１で計算した演算値ＭＴＥＳＴ４に基づいて、サブＣＰＵ１２は正常判定する。
【００７３】
さらに、時間Ｔ１０においてサブＣＰＵ１２が計算した演算値ＭＴＥＳＴ４に基づいて、メインＣＰＵ１１は、２回目の異常判定を行う。そして、時間Ｔ１２においてサブＣＰＵ１２が計算した演算値ＭＴＥＳＴ５に基づいて、メインＣＰＵ１１は、３回目の異常判定を行う。異常判定が３回連続したので、メインＣＰＵ１１のメイン比較部３３は通信ＮＧと判定する。これにより、モータ駆動が停止させられる。以降、電子制御装置１のシステムがリセットされるまでメインＣＰＵ１１は通信を停止する。
【００７４】
（Ｉ）サブＣＰＵからの通信が途絶した場合
メインＣＰＵ１１、サブＣＰＵ１２ともに起動から２回目までの通信は正常だったが、３回目のサブＣＰＵ１２からの通信が途絶した場合、メインＣＰＵ１１は所定の時間間隔で演算値ＭＴＥＳＴｎを送信し続ける。そして、メインＣＰＵ１１は通信途絶が３回連続した場合に、通信ＮＧとして、モータ駆動を停止させる。以降、システムがリセットされるまでメインＣＰＵ１１は通信を停止する。
【００７５】
（Ｊ）サブＣＰＵ１２側にリセットがかけられた場合
サブＣＰＵ１２にリセットがかけられると、サブＣＰＵ１２が再起動するまでの間、サブＣＰＵ１２からの通信が途絶する。メインＣＰＵ１１のメイン比較部３３は、サブＣＰＵ１２からの通信が途絶したときの待機時間として、サブＣＰＵ１２の再起動時間より短い時間が設定されているので、サブＣＰＵ１２がリセットされたときには通信ＮＧになる。
【００７６】
（Ｋ）メインＣＰＵ１１側にリセットがかけられた場合
メインＣＰＵ１１にリセットがかけられると、メインＣＰＵ１１が再起動するまでの間、メインＣＰＵ１１からの通信が途絶する。サブＣＰＵ１２のサブ比較部４３は、メインＣＰＵ１１からの通信が途絶したときの待機時間として、メインＣＰＵ１１の再起動時間より短い時間が設定されているので、メインＣＰＵ１１がリセットされたときには通信ＮＧになる。
【００７７】
なお、通信異常と判定するまでに要する動作の異常の回数や通信途絶の回数は、以上の（Ａ）から（Ｋ）に限定されず、任意の回数にすることが可能である。
【００７８】
次に、電子制御装置１におけるモータ制御の概略について説明する。
移動体が自動二輪車で、モータ４が車両のエンジンのスロットルバルブの開度を制御するモータである場合、電子制御装置１のメインＣＰＵ１１には、アクセルグリップの開度の情報が入力される。メインＣＰＵ１１のモータ制御部２１は、エンジンの吸気管の吸気圧などの情報を取得し、スロットルバルブの開度を算出する。
【００７９】
一方、メインＣＰＵ１１とサブＣＰＵ１２は、それぞれが所定のタイミングで、互いの診断を図２から図４を参照して説明したように実施する。メインＣＰＵ１１がサブＣＰＵ１２の正常動作を確認したら、リレー駆動装置１５と、モータドライバ１６のそれぞれに許可信号を出力する。同様に、サブＣＰＵ１２がメインＣＰＵ１１の正常動作を確認したら、リレー駆動装置１５と、モータドライバ１６のそれぞれに許可信号を出力する。リレー駆動回路１５に２つのＣＰＵ１１，１２からの許可信号が入力されると、リレーがオンになって、モータドライバ１６がバッテリ２に電気的に接続される。
【００８０】
また、メインＣＰＵ１１は、サブＣＰＵ１２が通信ＮＧと判定した場合には、モータドライバ１６にモータ駆動を停止する指令信号を出力する。一方、サブＣＰＵ１２は、メインＣＰＵ１１が通信ＮＧと判定した場合には、モータドライバ１６にモータ駆動を停止する指令信号を出力する。ここで、通信ＮＧとは、前記の（Ａ）から（Ｋ）で説明した場合に各ＣＰＵ１１，１２で判定された結果であり、ＣＰＵ１１，１２から取得したデータに異常があった場合に加え、ＣＰＵ１１，１２からデータが送信されない場合も含まれる。
【００８１】
なお、モータ４がスロットルバルブの開度を制御するアクチュエータである場合、各ＣＰＵ１１，１２はスロットルバルブが閉状態になる位置でモータ４を停止させる。さらに、メインＣＰＵ１１は、サブＣＰＵ１２が異常状態にあるときに、燃料の点火と噴射を停止させる処理を実施させても良い。
【００８２】
以上、説明したように、この実施の形態では、メインＣＰＵ１１とサブＣＰＵ１２の相互監視をするに当たり、モータ４の制御処理に依存しないテスト値ＭＴＥＳＴ，ＳＴＥＳＴと共通値Ｎとを使用するようにした。これにより、テスト値ＭＴＥＳＴ，ＳＴＥＳＴと共通値Ｎを用いた簡単な計算で相互監視ができるようになる。
さらに、モータ４の制御処理に依存しないテスト値ＭＴＥＳＴ，ＳＴＥＳＴと共通値Ｎとを使用したので、モータ４の制御処理の値を使用する場合に比べて、相互監視を行うタイミングを考慮する必要がなくなる。
これらのことから、相互監視のためのプログラムを簡略化でき、モータ４の制御処理に影響を及ぼすことはない。また、相互監視のための処理の負担を小さくできるので、処理能力の高いＣＰＵを選択する必要がなくなる。特に、サブＣＰＵ１２をメインＣＰＵ１１より低スペックの装置を用いることが可能になる。
【００８３】
さらに、モータ４の制御処理の依存しないテスト値ＭＴＥＳＴ，ＳＴＥＳＴと共通値Ｎ
とを使用するので、機種ごとに相互監視のプログラムを変更する必要がない。製造工程における作業効率を向上できる。
【００８４】
また、この相互監視方法では、テスト値ＭＴＥＳＴ，ＳＴＥＳＴの取得プロセスや、演算値ＭＴＥＳＴｎ，ＳＴＥＳＴｎの算出処理や、データの送受信処理などのいずれかに不具合が生じた場合でも異常動作と判定されることになる。このため、複数の処理の動作チェックを効率良く行うことができる。
特に、テスト値ＭＴＥＳＴ，ＳＴＥＳＴに、ＣＰＵ１１，１２のコア機能の診断結果を用いた場合には、相互監視の際に、ＣＰＵ１１，１２のコア機能の異常を検知できるようになる。ＣＰＵ１１，１２のコア機能は、簡単な処理であれば良く、ＣＰＵ１１，１２に最初から搭載されているプログラムを使用しても良いし、実施の形態以外の方法であっても良い。なお、図３のフローチャートを参照して説明したコア機能の診断処理を実施すると、ＣＰＵ１１，１２の汎用レジスタ、比較命令、分岐命令を一括して診断でき、診断処理を効率化できる。
【００８５】
また、メインＣＰＵ１１とサブＣＰＵ１２のそれぞれで、演算処理の種類と順番を予め決定したので、２つのＣＰＵ１１，１２の間で送信するデータ量を減少できる。また、演算に用いる共通値Ｎを予め決定しておくことも２つのＣＰＵ１１，１２の間で送信するデータ量を減少できる。
また、例えば、１種類の演算処理では、計算結果が偶然一致する可能性があるが、複数の演算処理を順番に実施するようにしたので、相互監視の精度を向上させることができる。
【００８６】
演算は、ソフトウェア的に実施しても良いし、論理回路を用いて計算しても良い。
第１のＣＰＵをサブＣＰＵとして使用し、第２のＣＰＵをアクチュエータの制御を実施するメインＣＰＵとしても良い。
相互監視を行うＣＰＵの数は、３つ以上でも良い。一方のＣＰＵで他方のＣＰＵの異常判定を行う。
電子制御装置１は、移動体のアクチュエータを駆動させる制御装置であれば良く、自動車や電気自動車、船外機など、その他の移動体の電子制御装置でも良い。
【符号の説明】
【００８７】
１  電子制御装置（移動体の電子制御装置）
２  バッテリ
３  モータ（アクチュエータ）
１１  メインＣＰＵ
１２  サブＣＰＵ
３１  ＭＴＥＳＴ取得部（テスト値取得部）
３２  ＭＴＥＳＴｎ演算部（テスト用演算部）
３３  メイン比較部
４１  ＳＴＥＳＴ取得部（テスト値取得部）
４２  ＳＴＥＳＴｎ演算部（テスト用演算部）
４３  サブ比較部
【図１】
0005662181.tif 000002
【図２】
0005662181.tif 000003
【図３】
0005662181.tif 000004
【図４】
0005662181.tif 000005
【図５】
0005662181.tif 000006