(57)【要約】      （修正有）【課題】通信可能に接続された２つの半導体装置において、外部から与える動作検証コマンドに基づく動作を同期したタイミングで実行可能とする、動作検証プログラムを提供する。【解決手段】動作検証プログラムは、それぞれの半導体装置で実行され、第１の半導体装置（ＭＣＵ）１０は外部装置から受信した動検証コマンドを自装置で解析する（Ｓ３２）と共に、第２の半導体装置（ＭＣＵ）２０に転送し（Ｓ３１、Ｓ４１）、第２の半導体装置においても動作検証コマンドを解析（Ｓ４２）する。当該解析結果に基づき第２の半導体装置から第１の半導体装置にトリガ信号（Ｓ４４、Ｓ３４）を出力し、このトリガ信号に基づき第１の半導体装置と第２の半導体装置が互いに同期したタイミングで動作検証コマンドに含まれるメモリ設定値をそれぞれの半導体装置内のメモリに書き込み（Ｓ３５、Ｓ４５）、書き込まれたメモリ設定値に基づき半導体装置の動作を再開させる。【選択図】図５
2020112903.tif 000002
【特許請求の範囲】
【請求項１】
制御対象装置から得られる同一の信号に基づき前記制御対象装置の異常を検出するユーザープログラムを内蔵される演算部にてそれぞれが実行する第１の半導体装置と第２の半導体装置とを有し、前記第１の半導体装置と前記第２の半導体装置が相互に通信することにより互いの動作の正当性を検証する機能安全機能を有する安全制御システムにおいて、前記第１の半導体装置及び前記第２の半導体装置の演算部で実行される動作検証プログラムであって、
前記第１の半導体装置の前記演算部で実行される第１の動作検証プログラムと、
前記第２の半導体装置の前記演算部で実行される第２の動作検証プログラムと、を含み、
前記第１の動作検証プログラムは、
外部の装置から動作検証コマンドを受信する第１のコマンド受信処理と、
前記第１のコマンド受信処理により受信した前記動作検証コマンドを前記第２の半導体装置に伝達するコマンドリレー処理と、
前記第１のコマンド受信処理において受信した前記動作検証コマンドを解析する第１のコマンド解析処理と、
前記第１のコマンド解析処理により受信した前記動作検証コマンドに同期命令が含まれていると判断された場合、前記第２の半導体装置が出力する第１のトリガ信号が入力されるまで前記演算部で行われる処理を停止して待機状態とするウェイト処理と、
前記第１のトリガ信号に基づき前記動作検証コマンドに含まれているメモリ操作命令に基づき前記ユーザープログラムが利用する前記第１の半導体装置内のメモリに前記動作検証コマンドに含まれる第１のメモリ設定値を与える第１のメモリ操作処理と、を行い
前記第２の動作検証プログラムは、
前記第１の半導体装置から転送される前記動作検証コマンドを受信する第２のコマンド受信処理と、
前記第２のコマンド受信処理により受信した前記動作検証コマンドを解析する第２のコマンド解析処理と、
前記第２のコマンド解析処理の結果、前記動作検証コマンドに同期命令が含まれていると判断された場合、前記動作検証コマンドに基づき前記第１の半導体装置に前記第１のトリガ信号を出力する第１のトリガ信号出力処理と、
前記第１のトリガ信号を出力したことに応じて前記動作検証コマンドに含まれているメモリ操作命令に基づき前記ユーザープログラムが利用する前記第２の半導体装置内のメモリに前記動作検証コマンドに含まれる第２のメモリ設定値を与える第２のメモリ操作処理と、を行い、
前記第１のメモリ操作処理と、前記第２のメモリ操作処理と、が完了したことに応じて、前記第１の動作検証プログラム及び前記第２の動作検証プログラムは動作を終了する動作検証プログラム。
【請求項２】
前記第１の動作検証プログラムと前記第２の動作検証プログラムは、前記第１のトリガ信号に基づき同期したタイミングで前記第１のメモリ操作処理及び前記第２のメモリ操作処理を行う請求項１に記載の動作検証プログラム。
【請求項３】
前記動作検証コマンドは、外部のデバッカにより与えられる請求項１に記載の動作検証プログラム。
【請求項４】
前記ユーザープログラムは、前記制御対象装置に異常があると判断した場合、前記制御対象装置の動作を停止させる請求項１に記載の動作検証プログラム。
【請求項５】
前記第１の半導体装置は、前記ユーザープログラムと前記動作検証プログラムと、前記機能安全機能を実現する自己診断プログラムとを時分割で前記演算部において実行する請求項１に記載の動作検証プログラム。
【請求項６】
前記第１のメモリ設定値及び第２のメモリ設定値は、前記ユーザープログラムが検出する疑似エラー値を含む請求項１に記載の動作検証プログラム。
【請求項７】
前記第１の半導体装置及び第２の半導体装置は、前記演算部で実行するプログラムの実行時間を計測するタイマを含み、
前記第１のメモリ設定値及び前記第２のメモリ設定値は、前記ユーザープログラムの停止位置を指定する停止位置設定値、及び、前記ユーザープログラムの実行時間が予め設定された実行許可時間を超えたことによりエラーを出力するタイムアウトエラー機能を停止するタイムアウトエラー検出機能を無効化する第１の機能有効設定値を含む請求項１に記載の動作検証プログラム。
【請求項８】
前記第１の半導体装置は、前記第１のメモリ操作処理後に
前記外部の装置から与えられるコマンドに基づき前記第２の半導体装置に第２のトリガ信号を出力する第２のトリガ信号出力処理と、
前記タイムアウトエラー検出機能を有効化する第２の機能有効設定値を前記第１のメモリ設定値として前記メモリに書き込むと共に前記第１の半導体装置内の前記タイマを再設定する第１のタイマ再設定処理と、
前記第１の半導体装置で実行する前記ユーザープログラムの実行再開位置を知らせるプログラムシーケンス情報を前記第２の半導体装置に出力する第１のプログラム同期処理と、
を前記第１の動作検証プログラムにより行い、
前記第２の半導体装置は、前記第２のメモリ操作処理後に
前記第２のトリガ信号を受信する第２のトリガ信号受信処理と、
前記第２のトリガ信号を受信したことに応じて、前記タイムアウトエラー検出機能を有効化する第２の機能有効設定値を前記第２のメモリ設定値として前記メモリに書き込むと共に共に前記第２の半導体装置内の前記タイマを再設定する第２のタイマ再設定処理と、
前記第１の半導体装置から出力される前記プログラムシーケンス情報に基づきプログラムの実行再開位置を設定する第２のプログラム同期処理と、
を前記第２の動作検証プログラムにより行う請求項７に記載の動作検証プログラム。
【請求項９】
前記第１の動作検証プログラムは、前記ユーザープログラムの動作状態を示すテスト情報を前記外部の装置に送信する請求項１に記載の動作検証プログラム。
【請求項１０】
制御対象装置から得られる同一の信号に基づき前記制御対象装置の異常を検出するユーザープログラムを内蔵される演算部にてそれぞれが実行する第１の半導体装置と第２の半導体装置とを有し、前記第１の半導体装置と前記第２の半導体装置が相互に通信することにより互いの動作の正当性を検証する機能安全機能を有する安全制御システムにおいて、前記第１の半導体装置の動作と前記第２の半導体装置の動作を同期する同期制御方法であって、
前記第１の半導体装置に、外部から動作検証コマンドを与え、
前記第１の半導体装置に、前記動作検証コマンドを前記第２の半導体装置に転送させ、
前記第２の半導体装置に、前記動作検証コマンドに基づき前記第１の半導体装置に第１のトリガ信号を送信させると共に、前記第１の半導体装置に前記第１のトリガ信号を受信させ、
前記第１のトリガ信号の送受信処理に応じて、前記第１の半導体装置及び前記第２の半導体装置に、前記動作検証コマンドにより指定された前記第１の半導体装置及び前記第２の半導体装置内の特定メモリに前記動作検証コマンドにより指定されたメモリ設定値を書き込み、
前記メモリ設定値に基づき前記第１の半導体装置及び前記第２の半導体装置の動作を再開させる動作同期方法。
【請求項１１】
前記メモリ設定値は、前記ユーザープログラムが検出する疑似エラー値である請求項１０に記載の動作同期方法。
【請求項１２】
前記第１の半導体装置及び第２の半導体装置は、前記演算部で実行するプログラムの実行時間を計測するタイマを含み、
前記メモリ設定値は、前記ユーザープログラムの停止位置を指定する停止位置設定値、及び、前記ユーザープログラムの実行時間が予め設定された実行許可時間を超えたことによりエラーを出力するタイムアウトエラー機能を停止するタイムアウトエラー検出機能を無効化する第１の機能有効設定値を含む請求項１０に記載の動作同期方法。
【請求項１３】
前記第１の半導体装置は、前記メモリ設定値の書き込み後に
前記外部の装置から与えられるコマンドに基づき前記第２の半導体装置に第２のトリガ信号を出力し、
前記タイムアウトエラー検出機能を有効化する第２の機能有効設定値を前記メモリ設定値として前記第１の半導体装置内のメモリに書き込むと共に前記第１の半導体装置内の前記タイマを再設定し、
前記第１の半導体装置で実行する前記ユーザープログラムの実行再開位置を知らせるプログラムシーケンス情報を前記第２の半導体装置に出力し、
前記第２の半導体装置は、前記メモリ設定値の書き込み後に
前記第２のトリガ信号を受信し、
前記第２のトリガ信号を受信したことに応じて、前記タイムアウトエラー検出機能を有効化する第２の機能有効設定値を前記メモリ設定値として前記第２の半導体装置内のメモリに書き込むと共に共に前記第２の半導体装置内の前記タイマを再設定し、
前記第１の半導体装置から出力される前記プログラムシーケンス情報に基づきプログラムの実行再開位置を設定する請求項１２に記載の動作同期方法。
【請求項１４】
被検体における異常を検出するための異常検出装置であって、
第１のメモリを有する第１の半導体装置と
第２のメモリを有する第２の半導体装置と、
を有し、
前記第１の半導体装置は、前記異常検出装置の外部からに入力されたコマンドを前記第１の半導体装置から前記第２の半導体装置へ送信し、
前記第２の半導体装置は、前記コマンドに含まれる情報に基づき前記第１の半導体装置へ第１のトリガ信号を出力し、
前記第１の半導体装置は、前記第１のトリガ信号を受信したときに、前記第１のメモリを操作し、
前記第２の半導体装置は、前記第１の半導体装置と同じタイミングで前記第２のメモリを操作する異常検出装置。
【請求項１５】
前記第１の半導体装置に対して入力される前記コマンドは、外部デバッガより入力され、
前記第１の半導体装置及び前記第２の半導体装置は、前記第１のメモリと前記第２のメモリの情報から故障情報を検出し安全状態へ移行し、
前記第１の半導体装置は、前記安全状態へ移行したという情報を前記外部デバッガに対して出力する請求項１４に記載の異常検出装置。
【請求項１６】
前記第１の半導体装置には、前記第１の半導体装置内で実行される第１の動作検証プログラムが搭載され、
前記第２の半導体装置には、前記第２の半導体装置内で実行される第２の動作検証プログラムが搭載され、
前記コマンドには、前記第１の動作検証プログラムと前記第２の動作検証プログラムとに対して前記第１のメモリと前記第２のメモリに対するメモリ操作を同期して行うか否かを指示する同期問合せ要否の情報が含まれる請求項１４に記載の異常検出装置。
【請求項１７】
前記第１の半導体装置には、前記第１の半導体装置内で実行される第１の動作検証プログラムが搭載され、
前記第２の半導体装置には、前記第２の半導体装置内で実行される第２の動作検証プログラムが搭載され、
前記第２の半導体装置は、
前記コマンドの情報に基づき前記第２の動作検証プログラムを停止させる停止位置を指定するメモリ操作を前記第２のメモリに対して行い、
指定された前記第２の動作検証プログラムの前記停止位置に達すると前記第２の動作検証プログラムを停止し、
前記第１の半導体装置が出力する第２のトリガ信号が入力されると再び前記第２の動作検証プログラムの実行を開始する請求項１４に記載の異常検出装置。
【請求項１８】
前記第２の半導体装置は、
前記第２の動作検証プログラムの前記停止位置を設定するのに合わせて、タイムアウトエラー抑制処理を有効にするメモリ操作を行い、
前記第１の半導体装置から前記第２のトリガ信号が入力されると、前記タイムアウトエラー抑制処理を無効とする請求項１７に記載の異常検出装置。
【請求項１９】
前記第１の半導体装置は、第１のタイマを有し、
前記第２の半導体装置は、第２のタイマを有し、
前記第１の半導体装置は、前記第２のトリガ信号を出力したことに応じて前記第１のタイマの再設定を行い、
前記第２の半導体装置は、前記第１の半導体装置から前記第２のトリガ信号が入力されると、前記第２のタイマの再設定を行う請求項１７に記載の異常検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は動作検証プログラム、動作同期方法及び異常検出装置に関し、例えば、外部に設けられるデバック装置により半導体装置に搭載されるプログラムのデバッグが可能な動作検証プログラム、動作同期方法及び異常検出装置に関する。
【背景技術】
【０００２】
プログラムを実行可能な演算部を有するＭＣＵ（Micro Controller Unit）では、ＭＣＵに実装したプログラムを動作させながらデバッグを行うことがソフトウェアの開発段階で行われる。このようなデバッグに関する技術のうち、２つのＣＰＵ（Central Processing Unit）を協調動作させるシステムにおけるデバッグ技術が特許文献１に開示されている。
【０００３】
特許文献１に記載の技術はマルチプロセッサシステムに関するものである。そして、特許文献１に記載のマルチプロセッサシステムは、ＣＰＵで動作するプログラムをデバッグするためのデバッグ機能を備えるマルチプロセッサシステムであって、プログラムを実行するＣＰＵとプログラムを格納するメモリを備えるＣＰＵユニットを複数通信可能に接続したマルチプロセッサシステムにおいて、外部装置との通信を行うための接続手段を備える第１のＣＰＵユニットと、前記接続手段を備えない１つ以上の第２のＣＰＵユニットとを有し、第１のＣＰＵユニットは、外部装置から送信されたコマンドを受信するコマンド受信手段と、受信したコマンドの内容を第２のＣＰＵユニットに転送するコマンド転送手段とを備え、第２のＣＰＵユニットは、コマンド転送手段により転送されたコマンドの内容を受信する転送コマンド受信手段と、転送コマンド受信手段により受信したコマンドの内容に応じてデバッグ機能を実行する実行手段とを備えることを特徴とするデバッグ機能を備える。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１０７９０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の技術では、２つのＣＰＵのうち１つのＣＰＵに対してのみデバッグを行うことができるのみであり、２つのＣＰＵに対して、同期したタイミングでデバッグ対象のメモリを操作することが出来ない問題がある。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、動作検証プログラムは、通信可能に接続された第１の半導体装置と第２の半導体装置に搭載されるプログラムであって、第１の半導体装置が外部装置から受信した動作検証コマンドを自装置で解析すると共に、第２の半導体装置に転送し、前記第２の半導体装置においても動作検証コマンドを解析し、当該解析結果に基づき前記第２の半導体装置から前記第１の半導体装置にトリガ信号を出力し、このトリガ信号に基づき第１の半導体装置と第２の半導体装置が互いに同期したタイミングで前記動作検証コマンドに含まれるメモリ設定値をそれぞれの半導体装置内のメモリに書き込み、書き込まれたメモリ設定値に基づき半導体装置の動作を再開させる。
【発明の効果】
【０００８】
前記一実施の形態によれば、通信可能に接続された２つの半導体装置において、外部から与える動作検証コマンドに基づく動作を同期したタイミングで実行させることができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１にかかる安全制御システムのブロック図である。
【図２】実施の形態１にかかる半導体装置のブロック図である。
【図３】実施の形態１にかかる安全制御システムのソフトウェアの動作切替処理を説明する図である。
【図４】実施の形態１にかかる安全制御システムの処理フローを説明するフローチャートである。
【図５】実施の形態１にかかる故障挿入テストソフトウェア（動作検証プログラム）の処理フローを説明するフローチャートである。
【図６】実施の形態２にかかる安全制御システムの処理フローを説明するフローチャートである。
【図７】実施の形態２にかかる故障挿入テストソフトウェア（動作検証プログラム）の処理フローを説明するフローチャートである。
【発明を実施するための形態】
【００１０】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ（Central Processing Unit）、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１１】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１２】
実施の形態１
まず、図１に実施の形態１にかかる安全制御システム１のブロック図を示す。図１に示す例では、モータ３３を制御するシステムを機能安全対応させたシステムを示した。しかしながら、安全制御システム１が制御する制御対象回路は、モータに限らず様々な機能を考えることができる。
【００１３】
図１に示すように、実施の形態１にかかる安全制御システム１は、第１の半導体装置（例えば、第１のＭＣＵ１０）、第２の半導体装置（例えば、第２のＭＣＵ２０）、モータ制御回路３２、モータ動力遮断回路３４、モータ３３、回転角センサ３５を有する。また、図１では、第１のＭＣＵ１０及び第２のＭＣＵ２０に搭載されたソフトウェアをデバッグするデバッガ３１を示した。第１のＭＣＵ１０及び第２のＭＣＵ２０は、プログラムを実行する演算部と、演算部によって用いられるメモリ及び種々の機能を実現する周辺回路が１つの半導体チップ上に形成されたＭＣＵ（Micro Controller Unit）である。
【００１４】
実施の形態１にかかる安全制御システム１では、第１のＭＣＵ１０及び第２のＭＣＵ２０は、制御対象回路（例えば、モータ３３）の異常を検出し、モータ３３を安全に停止させる安全制御を実施する。ここで、図１に示す例では、制御対象回路に、モータ制御回路３２、モータ３３、モータ動力遮断回路３４、回転角センサ３５が含まれる。モータ制御回路３２は、モータ３３の回転速度、回転トルク等を制御する。モータ動力遮断回路３４は、モータ制御回路３２とモータ３３の間に設けられ、第１のＭＣＵ１０又は第２のＭＣＵ２０がモータ３３の回転に異常が発生したと判断され他場合にモータ制御回路３２からモータ３３に与えられる駆動信号を遮断することでモータ３３を停止させる。回転角センサ３５は、モータ３３の回転角を所定の周期で検出して、回転角情報を第１のＭＣＵ１０及び第２のＭＣＵ２０に出力する。そして、安全制御システム１では、第１のＭＣＵ１０で実行されているユーザーアプリケーション１２と第２のＭＣＵ２０で実行されているユーザーアプリケーション２２の少なくとも一方で回転角センサ３５から得られる回転角情報に異常が検出された場合、タスクスケジューラ１１とユーザーアプリケーション１２との少なくとも一方によりモータ制御回路３２に動作停止信号を出力し、モータ３３を停止させる。
【００１５】
また、実施の形態１にかかる安全制御システム１では、第１のＭＣＵ１０と第２のＭＣＵ２０とが互いに通信し、相手方ＭＣＵの診断情報を相互にすることで第１のＭＣＵ１０と第２のＭＣＵ２０との動作検証を行うことで、システムの機能安全を確保する。
【００１６】
また、第１のＭＣＵ１０と第２のＭＣＵ２０とにおいては、互いに実質的に同じ結果が得られるように同一のソフトウェアが実行される。なお、前述の２つのＭＣＵで共通するソフトウェアに加えて、第１のＭＣＵ１０と第２のＭＣＵ２０とにおいて互いに異なるソフトウェアが実行されていてもよい。以下では、２つのＭＣＵで共通するソフトウェアについて詳細に説明する。
【００１７】
図１に示す例では、第１のＭＣＵ１０において、タスクスケジューラ１１、ユーザーアプリケーション１２、ＭＣＵ診断ソフトウェア１３、故障挿入テストソフトウェア１４が実行される。これらソフトウェアは、第１のＭＣＵ１０の演算部（詳しくは後述する）において実行される。
【００１８】
タスクスケジューラ１１は、ユーザーアプリケーション１２、ＭＣＵ診断ソフトウェア１３、ＭＣＵ診断ソフトウェア１３のいずれが実行されるかを切り替える。ユーザーアプリケーション１２は、第１のＭＣＵ１０を利用するユーザーによりインストールされるソフトウェアであり、図１に示す例では、モータ３３の異常検出処理とモータ３３の動作停止処理を行う。なお、図１では、ユーザーアプリケーション１２が異常検出処理において利用するレジスタ１２ａを示した。
【００１９】
ＭＣＵ診断ソフトウェア１３は、ユーザーアプリケーション１２及び故障挿入テストソフトウェア１４の動作異常を検出する異常検出処理を行う。また、ＭＣＵ診断ソフトウェア１３は、自己の動作状態を監視する自己診断処理を行う。そして、ＭＣＵ診断ソフトウェア１３は、異常検出処理及び自己診断処理の結果を含む第１の診断情報を生成する。また、ＭＣＵ診断ソフトウェア１３は、第２のＭＣＵ２０に搭載されるＭＣＵ診断ソフトウェア２３と通信を行い、第２のＭＣＵ２０で生成される第２の診断情報を受信し、受信した第２の診断情報に基づき第２のＭＣＵ２０の動作の正当性を診断する相互診断処理を行う。
【００２０】
故障挿入テストソフトウェア１４は、第１の動作検証プログラムである。故障挿入テストソフトウェア１４は、デバッガ３１からの指示に基づきユーザーアプリケーション１２が用いるレジスタ１２ａに格納される値を操作する。また、故障挿入テストソフトウェア１４は、デバッガ３１から特定の動作設定コマンドを受信した際には、当該動作検証コマンドに基づき第１のＭＣＵ１０にトリガ信号を出力する。
【００２１】
第２のＭＣＵ２０において、タスクスケジューラ２１、ユーザーアプリケーション２２、ＭＣＵ診断ソフトウェア２３、故障挿入テストソフトウェア２４が実行される。これらソフトウェアは、第１のＭＣＵ１０と同様に、第２のＭＣＵ２０の演算部において実行される。
【００２２】
ユーザーアプリケーション２２、ＭＣＵ診断ソフトウェア２３は、タスクスケジューラ１１、ユーザーアプリケーション１２、ＭＣＵ診断ソフトウェア１３と実質的に同一な動作を行うものであり、ここでは説明を省略する。
【００２３】
なお、ＭＣＵ診断ソフトウェア２３は、第１のＭＣＵ１０に搭載されるＭＣＵ診断ソフトウェア１３と通信を行い、第１のＭＣＵ１０で生成される第１の診断情報を受信し、受信した第１の診断情報に基づき第１のＭＣＵ１０の動作の正当性を診断する相互診断処理を行う。
【００２４】
故障挿入テストソフトウェア２４は、第２の動作検証プログラムである。故障挿入テストソフトウェア２４は、第１のＭＣＵ１０の故障挿入テストソフトウェア１４を介してデバッガ３１から動作検証コマンドを受信し、受信した動作検証コマンドに基づきユーザーアプリケーション２２が用いるレジスタ２２ａに格納される値を操作する。また、故障挿入テストソフトウェア２４は、動作検証コマンドを受信した際には、当該動作設定コマンドを第２のＭＣＵ２０に転送する。
【００２５】
図１では、第１のＭＣＵ１０及び第２のＭＣＵ２０で実現される機能をソフトウェアにより説明したが、第１のＭＣＵ１０及び第２のＭＣＵ２０は、ソフトウェアを実行するハードウェアを有する。そこで、図２に実施の形態１にかかる安全制御システム１で用いられる半導体チップのブロック図を示す。図２に示す例は、第１のＭＣＵ１０、第２のＭＣＵ２０の一例であり、図２では、第１のＭＣＵ１０を半導体チップの一例として示した。
【００２６】
図２に示すように、第１のＭＣＵ１０は、演算部４０、バス４１、アナログデジタル変換回路４２、デジタルアナログ変換回路４３、Ｉ／Ｏインタフェース回路４４、ＲＡＭ（Random Access Memory）４５、ＲＯＭ（Read Only Memory）４６、タイマ４７、４８、ＰＬＬ（Phase Locked Loop）回路４９を有する。図２で示す例では、アナログデジタル変換回路４２、デジタルアナログ変換回路４３、Ｉ／Ｏインタフェース回路４４、ＲＡＭ４５、ＲＯＭ４６、タイマ４７、４８を周辺回路群の例として示した。また、この周辺回路群は、演算部４０で実行されるソフトウェアが利用するハードウェアリソースである。また、ＰＬＬ回路４９は、クロック信号を生成し、第１のＭＣＵ１０内の各ブロックに分配する。バス４１は、演算部４０と、周辺回路群とを相互に接続する。
【００２７】
演算部４０は、ＯＳ（Operation System）を実行し、当該ＯＳに備わるタスクスケジューラを用いて、ユーザーアプリケーション１２、ＭＣＵ診断ソフトウェア１３、故障挿入テストソフトウェア１４を時分割で実行する。
【００２８】
アナログデジタル変換回路４２は、外部から入力されるアナログ信号をその信号レベルに応じたデジタル値に変換して出力する。例えば、回転角センサ３５から得られる回転角情報をデジタル値に変換した値を出力する。デジタルアナログ変換回路４３は、演算部４０で生成されたデジタル値に応じたアナログ信号レベルを有するアナログ信号を出力する。
【００２９】
Ｉ／Ｏインタフェース回路４４は、第１のＭＣＵ１０と他の装置との間でデジタル信号の送受信を行う。例えば、第１のＭＣＵ１０では、上位のシステムとの間でＵＳＢ（Universal Serial Bus）、ＵＡＲＴ（Universal Asynchronous Receiver/Transmitter）等の規格に沿った通信、或いは、ユーザーアサインが可能なデジタル信号による通信をＩ／Ｏインタフェース回路４４を用いて行う。ＲＡＭ４５は、演算部４０がソフトウェアで実行する際に用いる値を格納する揮発性メモリである。第１のＭＣＵ１０では、このＲＡＭ４５内に、ユーザーアプリケーション１２が利用するレジスタ１２ａが設定され、図２に示す例では、このレジスタ１２ａを４５ａの符号を示した。
【００３０】
ＲＯＭ４６は、例えば、ユーザーアプリケーション１２、ＭＣＵ診断ソフトウェア１３、故障挿入テストソフトウェア１４等が格納される不揮発性メモリである。タイマ４７、４８は、演算部４０におけるプログラムの実行時間の計測、演算部４０で実行されるプログラムに要求される時間の計測を行う。図２に示す例では、演算部４０で実行されるプログラムによる時間指定値を格納するレジスタ４７ａを示した。
【００３１】
続いて、図１に示した安全制御システム１の動作について説明する。そこで、図３に実施の形態１にかかる安全制御システム１の処理フローを説明するフローチャートを示す。図３に示すように、実施の形態１にかかる安全制御システム１では、第１のＭＣＵ１０と第２のＭＣＵ２０とで、実行するソフトウェアを切り替えながら、同じ処理を進める。第１のＭＣＵ１０及び第２のＭＣＵ２０は、タスクスケジューラ１１、２１により、実行するソフトウェアを切り替える。具体的には、第１のＭＣＵ１０及び第２のＭＣＵ２０では、故障挿入テストソフトウェア、ユーザーアプリケーション、ＭＣＵ診断ソフトウェアの順で所定のサイクルで実行するソフトウェアを切り替えながら実行する。また、第１のＭＣＵ１０及び第２のＭＣＵ２０では、ＭＣＵ診断ソフトウェアを実行するタイミングで、自己診断処理及び相互診断処理の少なくとも１つを実行する。ＭＣＵ診断ソフトウェア１３及びＭＣＵ診断ソフトウェア２３は、相互診断処理において相互に動作を監視する。
【００３２】
また、第１のＭＣＵ１０及び第２のＭＣＵ２０は、ＭＣＵ診断ソフトウェア１３及びＭＣＵ診断ソフトウェア２３の少なくとも一方において機能の異常が検出された場合、ユーザーアプリケーション１２又はユーザーアプリケーション２２の安全制御処理を実施させて、システムを停止させた後に動作を終了する。また、第１のＭＣＵ１０及び第２のＭＣＵ２０は、ユーザーアプリケーション１２、２２の処理においてモータ３３の異常が検出された場合、ユーザーアプリケーションの安全制御処理を実施させて、システムを停止させた後に動作を終了する。産業機器では、異常が発生した場合には、修理或いは特別な操作を実施しなければシステムを動作状態に復帰させないことが安全制御上求められる。これは、事故・故障の拡大を防ぐために必要な措置である。
【００３３】
なお、実施の形態１にかかる第１のＭＣＵ１０と第２のＭＣＵ２０は、同一の構成であるものとして説明するが、第１のＭＣＵ１０と第２のＭＣＵ２０とは異なる構成・処理能力であっても構わない。
【００３４】
続いて、実施の形態１にかかる安全制御システム１の動作について、故障挿入テストソフトウェア１４の動作に着目して説明を行う。そこで、図４に実施の形態１にかかる安全制御システム１の処理フローを説明するフローチャートを示す。なお、図４では、第１のＭＣＵ１０側から第２のＭＣＵ２０側に向かう片側矢印で示された処理は、故障挿入テストソフトウェア１４により実行されるデータの送信処理に起因する処理である。また、図４では、第１のＭＣＵ１０側と第２のＭＣＵ２０側との間の双方向矢印で示された処理は、ＭＣＵ診断ソフトウェアにより実行されるデータの送受信処理に起因する処理である。
【００３５】
図４に示すように、実施の形態１にかかる安全制御システム１では、第１のＭＣＵ１０及び第２のＭＣＵ２０は、まず故障挿入テストソフトウェア１４、２４を実行する（ステップＳ１１、Ｓ２１）。ここで、故障挿入テストソフトウェア１４は、デバッガ３１から動作検証コマンドの１つとして異常値設定コマンドを受信するとともに、受信した異常値設定コマンドを第２のＭＣＵ２０の故障挿入テストソフトウェア２４に転送する。続いて、第１のＭＣＵ１０及び第２のＭＣＵ２０は、ユーザーアプリケーション１２及びユーザーアプリケーション２２を実行する（ステップＳ１２、Ｓ２２）。このステップＳ１２、Ｓ２２の処理では、ユーザーアプリケーション１２及びユーザーアプリケーション２２が回転角センサ３５から得た回転角情報に基づきモータ３３の異常の有無を監視する。そして、ステップＳ１２、Ｓ２２の処理で異常があると判断された場合（ステップＳ１３、Ｓ２３のＹＥＳの枝）、安全制御システム１では、モータ３３を停止させる安全制御処理を実施する（ステップＳ１６、Ｓ２６）。
【００３６】
一方、ステップＳ１２、Ｓ２２の処理で異常がないと判断された場合（ステップＳ１３、Ｓ２３のＮＯの枝）、安全制御システム１では、第１のＭＣＵ１０及び第２のＭＣＵ２０で実行するソフトウェアをＭＣＵ診断ソフトウェア１３及びＭＣＵ診断ソフトウェア２３に切り替える（ステップＳ１４、Ｓ２４）。そして、ステップＳ１４、Ｓ２４の処理で異常があると判断された場合（ステップＳ１５、Ｓ２５のＹＥＳの枝）、安全制御システム１では、モータ３３を停止させる安全制御処理を実施する（ステップＳ１６、Ｓ２６）。一方、ステップＳ１４、Ｓ２４の処理で異常がないと判断された場合（ステップＳ１５、Ｓ２５のＮＯの枝）、安全制御システム１では、第１のＭＣＵ１０及び第２のＭＣＵ２０で実行するソフトウェアを故障挿入テストソフトウェア１４、２４とする。なお、実施の形態１にかかる安全制御システム１では、デバッガ３１が、ステップＳ１１〜Ｓ１５（又はステップＳ１６）の処理が終了する毎に第１のＭＣＵ１０及び第２のＭＣＵ２０からテスト結果を示すテスト情報を取得する（ステップＳ２）。
【００３７】
ここで、ユーザーアプリケーション、ＭＣＵ診断ソフトウェア、故障挿入テストソフトウェアの動作について具体的に説明する。実施の形態１にかかる安全制御システム１では、ユーザーアプリケーションは、モータ３３の回転異常の検出処理と、回転異常が検出された場合の安全制御処理を行う。ユーザーアプリケーションは、例えば、レジスタ１２ａに格納された回転角情報が所定の範囲を超えたか否かに基づき回転異常検出処理を行う。また、ユーザーアプリケーションは、回転異常検出処理により異常が検出された場合には、モータ動力遮断回路３４に指示を与えてモータ３３を停止させる安全制御処理を行う。また、ユーザーアプリケーションで収集されたレジスタ１２ａの回転角情報、ユーザーアプリケーションの動作状態を示す動作状態情報等のユーザーアプリケーション情報を収集する。そして、実施の形態１にかかる安全制御システム１では、ＭＣＵ診断ソフトウェアが自装置内のユーザーアプリケーションで収集されたユーザーアプリケーション情報を含む診断情報を生成し、第１のＭＣＵ１０側と第２のＭＣＵ２０側とで互いの診断情報を送受信する。その後、第１のＭＣＵ１０において、第２のＭＣＵ２０側で生成された第２のユーザーアプリケーション情報と、第１のＭＣＵ１０側で生成された第１のユーザーアプリケーション情報とを比較する。この比較処理により、互いのユーザーアプリケーション情報に差異があった場合には第１のＭＣＵ１０または第２のＭＣＵ２０の何れか一方で不具合が発生したとして、ステップＳ１５、Ｓ２５において異常有りと判断する。この互いのユーザーアプリケーション情報に基づくＭＣＵ間の異常検出処理は、第２のＭＣＵ２０側でも行われる。
続いて、故障挿入テストソフトウェア１４、２４の動作について説明する。故障挿入テストソフトウェア１４、２４は、相互に連携して動作することで、ユーザーアプリケーションが利用するレジスタ、プログラムの実行状態を２つのＭＣＵ間で同期して制御する。実施の形態１に示す例では、故障挿入テストソフトウェア１４、２４は、同期したタイミングでユーザーアプリケーション１２、２２が利用するレジスタ１２ａ、２２ａに格納する回転角情報を操作する。故障挿入テストソフトウェア１４、２４は、上記動作をデバッガ３１から出力される動作検証コマンド（例えば、異常値設定コマンド）に基づき行う。
【００３８】
そこで、図５に実施の形態１にかかる故障挿入テストソフトウェア（動作検証プログラム）の処理フローを説明するフローチャートを示す。図５は、故障挿入テストソフトウェア１４、２４の動作を示すものである。
【００３９】
図５に示すように、実施の形態１にかかる安全制御システム１では、デバッガ３１が接続される第１のＭＣＵ１０で実行される故障挿入テストソフトウェア１４が、デバッガ３１から動作検証コマンドを受信する第１のコマンド受信処理と、第１のコマンド受信処理により受信した動作検証コマンド（例えば、異常値設定コマンド）を第２のＭＣＵ２０に伝達するコマンドリレー処理と、を行う（ステップＳ３１）。また、第２のＭＣＵ２０側で実行される故障挿入テストソフトウェア２４は、第１のＭＣＵ１０から転送される異常値設定コマンドを受信する第２のコマンド受信処理を行う（ステップＳ４１）。
【００４０】
続いて、故障挿入テストソフトウェア１４は、ステップＳ３１で受信した異常値設定コマンドを解析する第１のコマンド解析処理を行う（ステップＳ３２）。図５に示す例では、異常値設定コマンドには、相手側ＭＣＵとの間で同期した動作を行うことを指示する同期命令の有無及びメモリ操作の内容を示すメモリ操作命令が含まれる。第１のコマンド解析処理では、異常値設定コマンド内の同期命令の有無とメモリ操作命令とを抽出する。また、故障挿入テストソフトウェア２４では、ステップＳ４２としてステップＳ３２と同じ処理を行う。
【００４１】
続いて、ステップＳ３２、Ｓ４２の処理において、異常値設定コマンドに同期命令が含まれていないと判断した場合、故障挿入テストソフトウェア１４、２４は、メモリ操作命令により指定されるレジスタに、メモリ操作命令により指定されるメモリ設定値を書き込む（ステップＳ３５、Ｓ４５）。なお、異常値設定コマンドに同期命令が含まれていなかった場合、第１のＭＣＵ１０と第２のＭＣＵ２０は、ステップＳ３５、Ｓ４５のメモリ操作処理を独立したタイミングで行う。
【００４２】
一方、ステップＳ３２、Ｓ４２の処理において、異常値設定コマンドに同期命令が含まれていると判断した場合、故障挿入テストソフトウェア１４、２４は、同期処理を行う（ステップＳ３４、Ｓ４４）。同期処理では、故障挿入テストソフトウェア１４がウェイト処理（ステップＳ３４）を行い、故障挿入テストソフトウェア２４が第１のトリガ信号出力処理（ステップＳ４４）を行う。ウェイト処理では、第２のＭＣＵ２０が出力する第１のトリガ信号が入力されるまで演算部４０で行われる処理を停止して待機状態とする。第１のトリガ信号出力処理では、異常値設定コマンド中の同期命令に基づき第１のＭＣＵ１０に第１のトリガ信号を出力する。
【００４３】
故障挿入テストソフトウェア１４は、第１のトリガ信号に基づき異常値設定コマンドに含まれているメモリ操作命令に基づきユーザープログラムが利用する第１のＭＣＵ１０内のメモリ（例えば、レジスタ１２ａ）に異常値設定コマンドに含まれる第１のメモリ設定値（例えば疑似エラー値）を与える第１のメモリ操作処理を行う（ステップＳ３５）。
【００４４】
また、故障挿入テストソフトウェア２４は、第１のトリガ信号を出力したことに応じて異常値設定コマンドに含まれているメモリ操作命令に基づきユーザープログラムが利用する第２のＭＣＵ２０内のメモリ（例えば、レジスタ２２ａ）に異常値設定コマンドに含まれる第２のメモリ設定値（例えば、疑似エラー値）を与える第２のメモリ操作処理を行う（ステップＳ４５）。
【００４５】
つまり、故障挿入テストソフトウェア１４、２４は、第１のトリガ信号に基づき同期したタイミングで第１のメモリ操作処理及び第２のメモリ操作処理を行う。
【００４６】
実施の形態１にかかる安全制御システム１は、被検体（例えば、モータ３３）における異常を検出するための異常検出装置と捉えることができる。第１のメモリ（例えば、レジスタ１２ａ）を有する第１の半導体装置（例えば、第１のＭＣＵ１０）と、第２のメモリ（例えば、２２ａ）を有する第２の半導体装置（例えば、第２のＭＣＵ２０）と、を有する。そして、第１のＭＣＵ１０は、安全制御システム１の外部から入力されたコマンドを第１のＭＣＵ１０から第２のＭＣＵ２０へ送信する。そして、第２のＭＣＵ２０は、コマンドに含まれる情報に基づき第１のＭＣＵ１０へ第１のトリガ信号を出力する。その後、第１のＭＣＵ１０は、第１のトリガ信号を受信したときに、レジスタ１２ａを操作し、第２のＭＣＵ２０は、第１のＭＣＵ１０と同じタイミングでレジスタ２２ａを操作する。
【００４７】
また、第１のＭＣＵ１０に対して入力されるコマンドは、外部デバッガ（例えば、デバッガ３１）より入力される。第１のＭＣＵ１０及び第２のＭＣＵ２０は、レジスタ１２ａとレジスタ２２ａの情報から故障情報を検出し安全状態へ移行する。そして、第１のＭＣＵ１０は、安全状態へ移行したという情報をデバッガ３１に対して出力する。
【００４８】
また、第１のＭＣＵ１０には、第１のＭＣＵ１０内で実行される第１の動作検証プログラムが搭載され、第２のＭＣＵ２０には、第２のＭＣＵ２０内で実行される第２の動作検証プログラムが搭載される。ここで、コマンドには、第１の動作検証プログラムと第２の動作検証プログラムとに対してレジスタ１２ａとレジスタ２２ａに対するメモリ操作を同期して行うか否かを指示する同期問合せ要否の情報が含まれる。
【００４９】
上記説明より、実施の形態１にかかる安全制御システム１では、故障挿入テストソフトウェア１４、２４の動作により、デバッガ３１から出力する動作検証コマンドにより、第１のＭＣＵ１０及び第２のＭＣＵ２０にデバッグに必要な設定値を第１のＭＣＵ１０と第２のＭＣＵ２０とに同期したタイミングで与えることができる。
【００５０】
例えば、図１に示した安全制御システム１では、モータ３３の回転異常を検出する場合、第１のＭＣＵ１０のレジスタ１２ａと第２のＭＣＵ２０のレジスタ２２ａとに同期したタイミングでエラー値が書き込まれる必要がある。このような状態をユーザーアプリケーション１２、２２がそれぞれ検出することができるかをデバッガ３１により検証する場合、従来の方法では、レジスタ１２ａ、２２ａに同期したタイミングでエラー値を書き込むことが出来ない問題があった。しかしながら、実施の形態１にかかる安全制御システム１では、故障挿入テストソフトウェア１４、２４を用いることで、デバッガ３１からの出力する動作検証コマンドに同期命令を含めることで、レジスタ１２ａ、２２ａに同期したタイミングでエラー値を書き込むことができる。
【００５１】
このように、実施の形態１にかかる安全制御システム１は、デバッガ３１を用いて２つのＭＣＵに対して同期したタイミングでメモリ操作を行うことが可能になる。
【００５２】
実施の形態２
実施の形態２では、故障挿入テストソフトウェア１４、２４の別の動作について説明する。なお、実施の形態２の説明において実施の形態１と同じ構成要素については、同じ符号を付して説明を省略する。また、実施の形態２にかかる安全制御システムは、実施の形態１にかかる安全制御システム１と同じハードウェア構成を用いるため、実施の形態２では、ハードウェア構成についての説明は省略する。
【００５３】
図６に実施の形態２にかかる安全制御システムの処理フローを説明するフローチャートを示す。図６に示すように、実施の形態２にかかる安全制御システムの動作は、ステップＳ１１、Ｓ２１をステップＳ５１、Ｓ６１に置き換え、さらに、ステップＳＳ１４、Ｓ２４をステップＳ５４、Ｓ６４に置き換えたものである。ステップＳ５１、Ｓ６１では、疑似エラー値の設定に代えて、レジスタ１２ａ、２２ａにプログラム実行の停止するための値を設定する。このプログラム実行停止処理の詳細は後述する。ステップＳ５４の処理では、ステップＳ１４のＭＣＵ診断ソフトウェア１３による診断処理に加えて、演算部４０における処理に関するタイムアウトエラー検出機能が無効から有効に切り替えられるまでの間ソフトウェアの実行の待機する第１の待機機能及び再同期機能を有する。また、ステップＳ６４の処理では、ステップＳ２４のＭＣＵ診断ソフトウェア１３による診断処理に加えて、第１のＭＣＵ１０側から与えられる第２のトリガ信号が入力されるまでの間処理を停止する第２の待機機能及び再同期機能を有する。
【００５４】
上記ステップＳ５４、Ｓ６４において追加された機能は、故障挿入テストソフトウェア１４、２４が、ステップＳ５１、Ｓ６１において、デバッガ３１から出力される動作検証コマンド中の命令に基づきＭＣＵ診断ソフトウェア１３、２３が利用するレジスタを操作することで実現される。
【００５５】
そこで、図７に実施の形態２にかかる故障挿入テストソフトウェア（動作検証プログラム）の処理フローを説明するフローチャートを示す。図７に示すように、実施の形態２にかかる故障挿入テストソフトウェア１４の動作は、ステップＳ５１の処理としてステップＳ３１〜Ｓ３４、Ｓ７１の動作を行い、故障挿入テストソフトウェア２４がステップＳ６１の処理としてステップＳ４１〜Ｓ４４、Ｓ８１の動作を行う。ここで、ステップＳ３４、Ｓ４４のウェイト処理までの流れ、及び、第１のトリガ信号出力処理までの流れは、図５に示した実施の形態１にかかる故障挿入テストソフトウェア１４、２４と同じである。
【００５６】
一方、実施の形態２で説明する例では、ステップＳ３５、Ｓ４５のメモリ操作処理の内容が異なる。そこで、図７に示す例では、メモリ操作処理に対して付す符号をステップＳ３５、４５からステップＳ７１、Ｓ８１に変更した。ステップＳ７１の処理は、第１のメモリ操作処理であり、ステップＳ８１の処理は、第２のメモリ操作処理である。実施の形態２にかかる故障挿入テストソフトウェア１４、２４では、ステップＳ７１、Ｓ８１のメモリ操作処理において、動作検証コマンドに停止位置設定値（例えば、シーケンス停止位置情報）及び第１の機能有効設定値（例えば、タイムアウトエラー抑制機能情報）を含むメモリ設定値をレジスタ１２ａ、２２ａに格納する。
【００５７】
ここで、シーケンス停止位置情報は、プログラムの実行シーケンスの停止位置を示す情報である。また、タイムアウトエラー抑制機能情報は、ユーザープログラムの実行時間が予め設定された実行許可時間を超えたことによりエラーを出力するタイムアウトエラー機能を無効化する情報である。
【００５８】
このようなメモリ設定値をレジスタ１２ａ、２２ａに格納することで、第１のＭＣＵ１０及び第２のＭＣＵ２０は、ユーザーアプリケーション１２、２２をシーケンス停止位置情報に基づくシーケンス位置で停止させる。また、第１のＭＣＵ１０及び第２のＭＣＵ２０は、タイムアウトエラー抑制機能情報に基づきＭＣＵ診断ソフトウェア１３、２３のタイムアウトエラー検出機能を無効化する。
【００５９】
これにより、例えば、第１のＭＣＵ１０に搭載されたユーザーアプリケーション１２に対してデバッガ３１を用いたデバッグを行った場合においても、ＭＣＵ診断ソフトウェア１３、２３による自己診断処理及び相互診断処理においてエラーが検出されることなくデバッグを行うことができる。つまり、故障挿入テストソフトウェア１４、２４によって、プログラムが停止された場合、図６のステップＳ１２、Ｓ１３及びステップＳ２２、Ｓ２３の処理はエラーを起こすことなく処理され、故障挿入テストソフトウェア１４、２４の動作完了後は、ＭＣＵ診断ソフトウェア１３、２３が動作することになる。
【００６０】
そして、ステップＳ７１、Ｓ８１のメモリ操作処理が完了し、かつ、デバッガ３１によるデバッグが終了したときに、デバッガ３１から第１のＭＣＵ１０にトリガ信号出力指示及びプログラムシーケンス再開指示を送信する。これにより、ＭＣＵ診断ソフトウェア１３が第２のＭＣＵ２０のＭＣＵ診断ソフトウェア２３に第２のトリガ信号を出力する（例えば、第２のトリガ信号出力処理、ステップＳ７２）。また、ＭＣＵ診断ソフトウェア１３は、第２のトリガ信号を出力したことに応じて、第１のＭＣＵ１０内のタイマの再設定（タイマのレジスタ４７ａへの値の再設定）を行う（第１のタイマ再設定処理、ステップＳ７３）。また、ＭＣＵ診断ソフトウェア１３は、ＭＣＵ診断ソフトウェア１３にプログラムシーケンスの再開位置情報に基づきプログラムシーケンス再開位置を設定する（第１のプログラム同期処理、ステップＳ７４）。なお、ステップＳ７４の第１のプログラム同期処理では、ＭＣＵ診断ソフトウェア１３は、プログラムシーケンス再開位置情報を第２のＭＣＵ２０のＭＣＵ診断ソフトウェア２３に送信する。
【００６１】
一方、第２のＭＣＵ２０に搭載される各プログラムは、第２のトリガ信号を第１のＭＣＵ１０から受信するまでの間待機状態となる（第２のトリガ信号受信処理、ステップＳ８２）。そして、ＭＣＵ診断ソフトウェア２３は、第２のトリガ信号を受信したことに応じて動作を再開する。このとき、ＭＣＵ診断ソフトウェア２３は、第２のＭＣＵ２０内のタイマの再設定（タイマのレジスタ４７ａへの値の再設定）を行う（第２のタイマ再設定処理、ステップＳ８３）。また、ＭＣＵ診断ソフトウェア２３は、第１のＭＣＵ１０のＭＣＵ診断ソフトウェア１３からプログラムシーケンスの再開位置情報を受信して、受信したプログラムシーケンスの再開位置情報に基づきプログラムシーケンス再開位置を設定する（第２のプログラム同期処理、ステップＳ８４）。
【００６２】
実施の形態２にかかる安全制御システムにおいても、第１のＭＣＵ１０に第１のＭＣＵ１０内で実行される第１の動作検証プログラムが搭載され、第２のＭＣＵ２０に第２のＭＣＵ２０内で実行される第２の動作検証プログラムが搭載される。そして、実施の形態２では、第２のＭＣＵ２０は、コマンドの情報に基づき第２の動作検証プログラムを停止させる停止位置を指定するメモリ操作をレジスタ２２ａに対して行い、指定された第２の動作検証プログラムの停止位置に達すると前記第２の動作検証プログラムを停止する。また、第２のＭＣＵ１０は、第１のＭＣＵ１０が出力する第２のトリガ信号が入力されると再び第２の動作検証プログラムの実行を開始する。
【００６３】
また、第２のＭＣＵ２０は、第２の動作検証プログラムの停止位置を設定するのに合わせて、タイムアウトエラー抑制処理を有効にするメモリ操作を行う。その後、第２のＭＣＵ２０は、第１のＭＣＵ１０から第２のトリガ信号が入力されると、タイムアウトエラー抑制処理を無効とする。
【００６４】
また、第１のＭＣＵ１０は、第１のタイマを有し、第２のＭＣＵ２０は、第２のタイマを有する。そして、第１のＭＣＵ１０は、第２のトリガ信号を出力したことに応じて第１のタイマの再設定を行う。さらに、第２のＭＣＵ２０は、第１のＭＣＵ１０から第２のトリガ信号が入力されると、第２のタイマの再設定を行う。
【００６５】
なお、上記説明では、ＭＣＵ診断ソフトウェア１３、２３が相互通信機能を利用してステップＳ７２〜Ｓ７４及びステップＳ８２〜Ｓ８４の処理を行う説明をしたが、この場合、ＭＣＵ診断ソフトウェア１３、２３が故障挿入テストソフトウェア１４、２４のメモリ操作機能を備える形態となる。しかしながら、ＭＣＵ診断ソフトウェア１３、２３と、故障挿入テストソフトウェア１４、２４とを協調動作させて、故障挿入テストソフトウェア１４、２４がＭＣＵ診断ソフトウェア１３、２３の相互通信機能を利用してステップＳ７２〜Ｓ７４及びステップＳ８２〜Ｓ８４の処理を行うとしても良い。
【００６６】
上記説明より、実施の形態２にかかる安全制御システムでは、故障挿入テストソフトウェア１４、２４により各ＭＣＵに実装されるプログラムが利用するレジスタの値を操作することで、プログラムの実行シーケンスを停止する。また、実施の形態２にかかる安全制御システム１では、故障挿入テストソフトウェア１４、２４により各ＭＣＵに実装されるプログラムが利用するレジスタの値を操作することで、プログラムシーケンスの停止によりタイムアウトエラーが検出され各ＭＣＵ内で実行されるプログラムが異常停止することを防止する。
【００６７】
また、実施の形態２にかかる安全制御システムでは、デバッガ３１からの指示に基づき、相互に協調して動作する２つのＭＣＵのプログラムシーケンスを同期したタイミング及び同期した位置で再開することができる。
【００６８】
これにより、実施の形態２にかかる安全制御システムでは、第２のＭＣＵ２０と協調して動作する第１のＭＣＵ１０のデバッグを容易に行うことが可能になる。
【００６９】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【００７０】
（付記１）
制御対象装置から得られる同一の信号に基づき制御対象装置の異常を検出するユーザープログラムを内蔵される演算部にてそれぞれが実行する第１の半導体装置と第２の半導体装置とを有し、前記第１の半導体装置と前記第２の半導体装置が相互に通信することにより互いの動作の正当性を検証する機能安全機能を有する安全制御システムであって、
前記第１の半導体装置に第１の動作検証プログラムが搭載され、
前記第２の半導体装置に第２の動作検証プログラムが搭載され、
外部の装置から動作検証コマンドを受信する第１のコマンド受信処理と、
前記第１のコマンド受信処理により受信した前記動作検証コマンドを前記第２の半導体装置に伝達するコマンドリレー処理と、
前記第１のコマンド受信処理において受信した前記動作検証コマンドを解析する第１のコマンド解析処理と、
前記第１のコマンド解析処理により受信した前記動作検証コマンドに同期命令が含まれていると判断された場合、前記第２の半導体装置が出力する第１のトリガ信号が入力されるまで前記演算部で行われる処理を停止して待機状態とするウェイト処理と、
前記第１のトリガ信号に基づき前記動作検証コマンドに含まれているメモリ操作命令に基づき前記ユーザープログラムが利用する前記第１の半導体装置内のメモリに前記動作検証コマンドに含まれる第１のメモリ設定値を与える第１のメモリ操作処理と、を行い
前記第２の動作検証プログラムは、
前記第１の半導体装置から転送される前記動作検証コマンドを受信する第２のコマンド受信処理と、
前記第２のコマンド受信処理により受信した前記動作検証コマンドを解析する第２のコマンド解析処理と、
前記第２のコマンド解析処理の結果、前記動作検証コマンドに同期命令が含まれていると判断された場合、前記動作検証コマンドに基づき前記第１の半導体装置に前記第１のトリガ信号を出力する第１のトリガ信号出力処理と、
前記第１のトリガ信号を出力したことに応じて前記動作検証コマンドに含まれているメモリ操作命令に基づき前記ユーザープログラムが利用する前記第２の半導体装置内のメモリに前記動作検証コマンドに含まれる第２のメモリ設定値を与える第２のメモリ操作処理と、を行い、
前記第１の半導体装置と前記第２の半導体装置は、前記第１のメモリ操作処理と、前記第２のメモリ操作処理と、が完了したことに応じて、前記第１の動作検証プログラム及び前記第２の動作検証プログラムは動作を終了する安全制御システム。
【００７１】
（付記２）
前記第１のメモリ設定値及び第２のメモリ設定値は、前記ユーザープログラムが検出する疑似エラー値を含む付記１に記載の安全制御システム。
【００７２】
（付記３）
前記第１の半導体装置及び第２の半導体装置は、前記演算部で実行するプログラムの実行時間を計測するタイマを含み、
前記第１のメモリ設定値及び前記第２のメモリ設定値は、前記ユーザープログラムの停止位置を指定する停止位置設定値、及び、前記ユーザープログラムの実行時間が予め設定された実行許可時間を超えたことによりエラーを出力するタイムアウトエラー機能を停止するタイムアウトエラー検出機能を無効化する第１の機能有効設定値を含む付記１に記載の安全制御システム。
【００７３】
（付記４）
前記第１の半導体装置は、前記第１のメモリ操作処理後に
前記外部の装置から与えられるコマンドに基づき前記第２の半導体装置に第２のトリガ信号を出力する第２のトリガ信号出力処理と、
前記タイムアウトエラー検出機能を有効化する第２の機能有効設定値を前記第１のメモリ設定値として前記メモリに書き込むと共に前記第１の半導体装置内の前記タイマを再設定する第１のタイマ再設定処理と、
前記第１の半導体装置で実行する前記ユーザープログラムの実行再開位置を知らせるプログラムシーケンス情報を前記第２の半導体装置に出力する第１のプログラム同期処理と、
を前記第１の動作検証プログラムにより行い、
前記第２の半導体装置は、前記第２のメモリ操作処理後に
前記第２のトリガ信号を受信する第２のトリガ信号受信処理と、
前記第２のトリガ信号を受信したことに応じて、前記タイムアウトエラー検出機能を有効化する第２の機能有効設定値を前記第２のメモリ設定値として前記メモリに書き込むと共に共に前記第２の半導体装置内の前記タイマを再設定する第２のタイマ再設定処理と、
前記第１の半導体装置から出力される前記プログラムシーケンス情報に基づきプログラムの実行再開位置を設定する第２のプログラム同期処理と、
を前記第２の動作検証プログラムにより行う付記３に記載の安全制御システム。
【符号の説明】
【００７４】
１  安全制御システム
１０  第１のＭＣＵ
１１、２１  タスクスケジューラ
１２、２２  ユーザーアプリケーション
１２ａ、２２ａ  レジスタ
１３、２３  ＭＣＵ診断ソフトウェア
１４、２４  故障挿入テストソフトウェア
２０  第２のＭＣＵ
３１  デバッガ
３２  モータ制御回路
３３  モータ
３４  モータ動力遮断回路
３５  回転角センサ
４０  演算部
４１  バス
４２  アナログデジタル変換回路
４３  デジタルアナログ変換回路
４４  Ｉ／Ｏインタフェース回路
４５  ＲＡＭ
４６  ＲＯＭ
４７  タイマ
４８  タイマ
４９  ＰＬＬ回路
【図１】
2020112903.tif 000003
【図２】
2020112903.tif 000004
【図３】
2020112903.tif 000005
【図４】
2020112903.tif 000006
【図５】
2020112903.tif 000007
【図６】
2020112903.tif 000008
【図７】
2020112903.tif 000009