(57)【特許請求の範囲】
【請求項１】
複数のセンサにアクセス可能な複数のプロセッサの各々が、
前記複数のセンサのうちどのプロセッサにも選択されていないセンサを選択し、選択中に当該センサからデータを取得し、データ取得が完了すると選択を解除する選択部と、
前記選択部によるデータ取得が完了した場合に、前記選択部による選択中に取得されたデータに基づいて、前記センサに応じた処理を実行する第１の実行部と、
前記第１の実行部による前記センサに応じた処理の実行中に前記センサを実行中状態に設定し、前記第１の実行部による前記センサに応じた処理の実行が終了すると実行済状態に設定する設定部と、
前記設定部が前記センサを実行中状態に設定した場合、前記センサに自プロセッサの識別情報を登録する登録部と、
前記選択部による選択中に前記センサが実行中状態であるか否かを判断する判断部と、
前記判断部によって実行中状態であると判断された場合、前記選択部に前記データの取得を実行させずに、選択を解除させる選択制御部と、
前記選択制御部によって前記選択部による前記データの取得が実行されなくなった後に、前記センサに登録された識別情報によって識別されるプロセッサから、当該プロセッサが前記センサから取得したデータを複製する複製部と、
前記複製部によって複製されたデータに基づいて、前記センサに応じた処理を実行する第２の実行部と、
を有することを特徴とする検出装置。
【請求項２】
前記設定部は、
前記第２の実行部による前記センサに応じた処理の実行中に前記センサを再実行中状態に設定し、前記第２の実行部による前記センサに応じた処理の実行が終了すると前記センサを実行済状態に設定することを特徴とする請求項１に記載の検出装置。
【請求項３】
前記判断部は、
さらに、前記選択部による選択中に前記センサが再実行中状態であるか否かを判断し、
前記設定部は、
前記センサが再実行中状態であると判断された場合、前記第１の実行部による前記センサに応じた処理の実行中に前記センサを再実行中かつ実行中状態に設定することを特徴とする請求項２に記載の検出装置。
【請求項４】
前記各々のプロセッサが、
前記第１の実行部による前記センサに応じた処理の実行終了を制御する実行制御部を有し、
前記判断部は、
前記第１の実行部によって前記センサに応じた処理の実行結果が得られた場合に、前記センサが再実行中かつ実行中状態であるか否かを判断し、
前記実行制御部は、
前記判断部によって前記センサが再実行中かつ実行中状態であると判断された場合、前記第２の実行部による前記センサに応じた処理の実行を終了させず、
前記設定部は、
前記判断部によって前記センサが再実行中かつ実行中状態であると判断された場合、前記センサを再実行中かつ実行済状態に設定する請求項３に記載の検出装置。
【請求項５】
前記判断部は、
前記第２の実行部による前記センサに応じた処理の実行が終了する場合に、前記センサが再実行中かつ実行済状態であるか否かを判断し、
前記設定部は、
前記判断部によって前記センサが再実行中かつ実行済状態であると判断された場合、前記センサを実行中状態に設定することを特徴とする請求項４に記載の検出装置。
【請求項６】
前記判断部は、
前記設定部により前記センサを再実行中かつ実行済状態に設定後、前記センサが再実行中かつ実行済状態から実行中状態になるか否かを判断し、
前記実行制御部は、
前記判断部によって前記センサが再実行中かつ実行済状態から実行中状態になったと判断された場合、前記第１の実行部による前記センサに応じた処理の実行を終了させることを特徴とする請求項５に記載の検出装置。
【請求項７】
前記複数のプロセッサの各々が、
前記複製部による複製後、前記センサに登録された前記識別情報によって識別されるプロセッサに再起動要求を通知する通知部を有することを特徴とする請求項１〜６のいずれか一つに記載の検出装置。
【請求項８】
前記判断部は、
前記選択部による選択中に前記センサが再実行中かつ実行中状態であるか否かを判断し、
前記設定部は、
前記センサが再実行中かつ実行中状態である場合、前記センサを実行中状態に設定することを特徴とする請求項３〜７のいずれか一つに記載の検出装置。
【請求項９】
複数のセンサにアクセス可能な複数のプロセッサの各々が、
前記複数のセンサのうちどのプロセッサにも選択されていないセンサを選択し、選択中に当該センサからデータを取得し、データ取得が完了すると選択を解除し、
データ取得が完了した後に、選択中に取得されたデータに基づいて、前記センサに応じた処理を実行し、
前記センサに応じた処理を実行中に前記センサを実行中状態に設定し、前記センサに応じた処理の実行が終了すると実行済状態に設定し、
前記センサを実行中状態に設定した場合、前記センサに自プロセッサの識別情報を登録し、
前記センサの選択中に前記センサが実行中状態であるか否かを判断し、
実行中状態であると判断した場合、前記センサからのデータの取得を実行させずに、前記センサの選択を解除させ、
前記選択による前記データの取得が実行されない場合に、前記センサに登録された識別情報によって識別されるプロセッサから、当該プロセッサが前記センサから取得したデータを複製し、
複製されたデータに基づいて、前記センサに応じた処理を実行する、
ことを特徴とする検出方法。
【請求項１０】
複数のセンサにアクセス可能な複数のプロセッサの各々に、
前記複数のセンサのうちどのプロセッサにも選択されていないセンサを選択し、選択中に当該センサからデータを取得し、データ取得が完了すると選択を解除し、
選択中に取得されたデータに基づいて、前記センサに応じた処理を実行し、
選択中に取得されたデータに基づいて、前記センサに応じた処理を実行中に前記センサを実行中状態に設定し、選択中に取得されたデータに基づいて、前記センサに応じた処理の実行が終了すると実行済状態に設定し、
前記センサを実行中状態に設定した場合、前記センサに自プロセッサの識別情報を登録し、
前記センサの選択中に前記センサが実行中状態であるか否かを判断し、
実行中状態であると判断した場合、前記センサからのデータの取得を実行させずに、前記センサの選択を解除させ、
前記選択による前記データの取得が実行されない場合に、前記センサに登録された識別情報によって識別されるプロセッサから、当該プロセッサが前記センサから取得したデータを複製し、
複製されたデータに基づいて、前記センサに応じた処理を実行する、
処理を実行させることを特徴とする検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検出装置、検出方法、および検出プログラムに関する。
【背景技術】
【０００２】
従来、たとえば、複数のプロセッサが複数のセンサからのデータを演算するシステムにおいて、共有メモリ内に設けられたチェック専用の領域に２つのプロセッサが異なる値を交互に書き込むことにより、プロセッサが停止しているか否かが確認される技術が知られている（たとえば、下記特許文献１を参照。）。具体的には、２つのプロセッサのうちの一方のプロセッサは、一方のプロセッサが書き込んだ値が更新されていなければ他方のプロセッサが停止していると判断する。【０００３】
また、たとえば、複数のプロセッサの各プロセッサは動作情報を共有メモリに出力し、複数のプロセッサのうちのメインのプロセッサは、共有メモリに出力された動作情報を監視することにより、異常動作のプロセッサを検出する技術が知られている（たとえば、下記特許文献２を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平２−２０６８０６号公報
【特許文献２】特開平６−４４１０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、検出された異常動作のプロセッサが、いずれのセンサについてのデータを演算していたのか不明である。そのため、異常動作のプロセッサがあると、センサについての演算が中断してしまう問題点がある。【０００６】
本発明は、上述した従来技術による問題点を解消するため、ＣＰＵに障害が発生しても、センサに応じた処理を継続させることができる検出装置、検出方法、および検出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のセンサにアクセス可能な複数のプロセッサの各々が、前記複数のセンサのうちどのプロセッサにも選択されていないセンサを選択し、選択中に当該センサからデータを取得し、データ取得が完了すると選択を解除し、選択中に取得されたデータに基づいて、前記センサに応じた処理を実行し、前記センサに応じた処理の実行中に前記センサを実行中状態に設定し、前記センサに応じた処理の実行が終了すると実行済状態に設定し、選択部による選択中に前記センサが実行中状態であるか否かを判断し、実行中状態であると判断された場合、前記データの取得を実行せずに、前記センサを実行中状態に設定したプロセッサから、当該プロセッサが前記センサから取得したデータを複製し、複製されたデータに基づいて、前記センサに応じた処理を実行する検出装置、検出方法、および検出プログラムが提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、ＣＰＵに障害が発生しても、センサに応じた処理を継続させることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本発明における検出装置の一動作例を示す説明図である。
【図２】図２は、検出装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、ローカルメモリ１０２とセンサ１０３の各々のデータフィールドの一例を示す説明図である。
【図４】図４は、各センサ１０３の処理状態フラグが示すセンサ１０３の状態の遷移例を示す説明図である。
【図５】図５は、各センサ１０３の機能例を示すブロック図である。
【図６】図６は、検出装置１００の機能的構成を示すブロック図である。
【図７】図７は、障害が発生したＣＰＵ１０１がない場合の検出装置１００の動作例を示す説明図である。
【図８】図８は、障害が発生したＣＰＵ１０１がある場合の検出装置１００の動作例１を示す説明図である。
【図９】図９は、障害が発生したＣＰＵ１０１がある場合の検出装置１００の動作例２を示す説明図である。
【図１０】図１０は、障害が発生したＣＰＵ１０１がある場合の検出装置１００の動作例３を示す説明図である。
【図１１】図１１は、障害が発生したＣＰＵ１０１がある場合の検出装置１００の動作例４を示す説明図である。
【図１２】図１２は、検出装置１００の各ＣＰＵ１０１が行う処理手順を示すフローチャート（その１）である。
【図１３】図１３は、検出装置１００の各ＣＰＵ１０１が行う処理手順を示すフローチャート（その２）である。
【図１４】図１４は、検出装置１００の各ＣＰＵ１０１が行う処理手順を示すフローチャート（その３）である。
【図１５】図１５は、検出装置１００の各ＣＰＵ１０１が行う処理手順を示すフローチャート（その４）である。
【図１６】図１６は、検出装置１００の各ＣＰＵ１０１が行う処理手順を示すフローチャート（その５）である。
【図１７】図１７は、各センサ１０３の制御部５０４が行う処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、本発明にかかる検出装置、検出方法、および検出プログラムの実施の形態を詳細に説明する。
【００１１】
図１は、本発明における検出装置の一動作例を示す説明図である。検出装置１００では、複数のセンサ１０３と、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１を有している。詳細なシステムのハードウェア構成については、後述する。複数のＣＰＵ１０１は、複数のＣＰＵ１０１にアクセス可能である。図１では、ＣＰＵ１０１が２台の場合を例に挙げている。
【００１２】
長時間安定して動作するための要素として高信頼性がある。センサ１０３が検知するデータには様々なパターンがあるため、ＣＰＵ１０１が行うセンサ１０３に応じた処理では意図していないデータをセンサ１０３が生成してしまう場合がある。また、外部からのノイズなどの影響によりＣＰＵ１０１が解析処理中のデータにデータ化けが発生することがある。ＣＰＵ１０１では解析処理が無限ループに陥って処理が終了しなかったり、最悪の場合にはＣＵＰがハングアップしてしまう恐れがある。高信頼化のためには、このような予期せぬデータが発生しても可能な限り各センサ１０３に応じた処理を継続し、継続が困難な場合はその旨を利用者に通知しなければならない。
【００１３】
そこで、データ処理用のＣＰＵ１０１を複数搭載した場合は、一つのＣＰＵ１０１が停止しても、他のＣＰＵ１０１が停止を検出して処理を引き継ぐことで処理を継続することができる。図１の例では、ＣＰＵ１０１−２がセンサ１０３に応じた処理を実行中に障害が発生してしまい、ＣＰＵ１０１−１はその障害を検出し、ＣＰＵ１０１−１は、ＣＰＵ１０１−２が実行していた処理を再実行する例を示す。
【００１４】
各センサ１０３の処理状態フラグは各センサ１０３の状態を示す。センサ１０３の処理状態フラグに「ＥＸＥＣＵＴＩＮＧ」が設定されていれば、センサが実行中状態であることを示す。実行中状態とは、センサ１０３に応じた処理がいずれかのＣＰＵ１０１で実行中であることを示す。センサ１０３の処理状態フラグに「ＦＩＮＩＳＨＥＤ」が設定されていれば、センサが実行済状態であることを示す。実行済状態とは、センサ１０３に応じた処理がいずれのＣＰＵ１０１でも実行されていないことを示す。
【００１５】
センサ１０３のデータ状態フラグは、センサ１０３によって検知された１処理単位分のデータがバッファ内に溜まったか否かを示す。センサ１０３によって検知された１処理単位分のデータがバッファ内に溜まったか否かを示すデータ状態フラグがある。データ状態フラグが「ＲＥＡＤＹ」であれば、１処理単位分のデータがバッファ内に溜まっていることを示す。データ状態フラグが「ＥＭＰＴＹ」であれば、１処理単位分のデータがバッファ内に溜まっていないまたは溜まったデータをいずれかのＣＰＵ１０１が取得したことを示す。
【００１６】
各ＣＰＵ１０１でのデータ処理の時間はセンサ１０３が検知するデータによっても異なる。そのため、データ処理の順序が前後しないように検出装置１００の設計者が検出装置１００を設計しなければならない。ここでは、たとえば、データ状態フラグが「ＥＭＰＴＹ」から「ＲＥＡＤＹ」になるまでの間に、以前のデータ処理が終了するように、各ＣＰＵ１０１の処理能力やＣＰＵ１０１の数、センサ１０３でのデータ出力の間隔が調整されている。すなわち、あるセンサ１０３においてデータ状態フラグが「ＥＭＰＴＹ」から「ＲＥＡＤＹ」に変化するまでの間に、いずれかのＣＰＵ１０１が該センサ１０３に応じた処理を終了していることになる。
【００１７】
図１では、たとえば、ＣＰＵ１０１−２は、センサ１０３のデータ状態フラグを巡回しながら監視し、いずれのＣＰＵ１０１にも選択されていないセンサ１０３−１を選択する。具体的には、ＣＰＵ１０１−２は、データ状態フラグが「ＲＥＡＤＹ」になったセンサ１０３−１を発見すると、センサ１０３−１のデータ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」に設定することにより、センサ１０３−１を選択する。
【００１８】
ＣＰＵ１０１−２は、センサ１０３−１からセンサ１０３−１が検知したデータを取得して、データ取得が終了すると、選択を解除する。具体的には、そして、ＣＰＵ１０１−２は、センサ１０３−１のバッファからデータを取得する。ＣＰＵ１０１−２は、データの取得が終了すると、データ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」から「ＥＭＰＴＹ」に設定することにより、選択を解除する。
【００１９】
つぎに、ＣＰＵ１０１−２は、選択中に取得されたデータに基づいて、センサ１０３−１に応じた処理を実行する。さらに、ＣＰＵ１０１−２は、実行中にセンサ１０３−１を実行中状態に設定し、実行が終了すると実行済状態に設定する。具体的には、ＣＰＵ１０１−２は、センサ１０３−１の処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」に設定し、取得したデータに基づいてセンサ１０３−１に応じた処理を実行する。ＣＰＵ１０１−２は、取得したデータに基づいてセンサ１０３−１に応じた処理が終了した場合、センサ１０３−１の処理状態フラグを「ＦＩＮＩＳＨＥＤ」に設定する。
【００２０】
ＣＰＵ１０１−１は、いずれのＣＰＵ１０１−１にも選択されていないセンサ１０３−１を選択し、選択中にセンサ１０３−１が実行中状態であるか否かを判断する。具体的には、図１の例では、ＣＰＵ１０１−１はセンサ１０３−１のデータ状態フラグを巡回しながら監視し、データ状態フラグが「ＲＥＡＤＹ」になったセンサ１０３−１を発見すると、処理状態フラグにいずれの情報が設定されているか判断する。図１の例では、処理状態フラグに「ＥＸＥＣＵＴＩＮＧ」が設定されている。よって、ＣＰＵ１０１−１は、センサ１０３−１が実行中状態であると判断する。
【００２１】
上述したように、あるセンサ１０３においてデータ状態フラグが「ＥＭＰＴＹ」から「ＲＥＡＤＹ」に変化するまでの間に、いずれかのＣＰＵ１０１が該センサ１０３に応じた処理を終了していなければならないにも関わらず、ここでは、終了していない。よって、ＣＰＵ１０１は、以前のデータを実行中のＣＰＵ１０１に障害が発生していると判断することができる。図１の例では、ＣＰＵ１０１が２台であるため、ＣＰＵ１０１−１は、いずれのＣＰＵ１０１で障害が発生したかを判別可能である。ＣＰＵ１０１が複数ある場合、たとえば、各ＣＰＵ１０１は、各センサ１０３に応じた処理を実行する場合にＣＰＵ１０１の識別情報を各センサ１０３に記憶させてもよい。
【００２２】
ＣＰＵ１０１−１は、センサ１０３−１が実行中状態であると判断された場合、データの取得を実行せずに、センサ１０３−１を実行中状態に設定したプロセッサから、ＣＰＵ１０１−１がセンサ１０３−１から取得したデータを複製する。具体的には、処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」である場合、ＣＰＵ１０１−１は、センサ１０３−１のバッファからデータを取得せずに、ローカルメモリ１０２−２のデータ記憶領域に記憶されたデータを複製する。複製されたデータは、ローカルメモリ１０２−１に記憶される。
【００２３】
そして、ＣＰＵ１０１−１は、複製されたデータに基づいてセンサ１０３−１に応じた処理を実行する。さらに、ＣＰＵ１０１−１は、ＣＰＵ１０１−２に再起動要求を通知することにより、ＣＰＵ１０１−２を再起動させてもよい。
【００２４】
検出装置１００は、画像センサ、音声センサ、温度センサなどの複数種類のセンサ１０３を搭載したセンサボックスである。たとえば、センサボックスでは、医療分野で患者の体調を監視して異常があるときに医師や家族に通知することが可能となる。たとえば、センサボックスは、室内の状態を監視して侵入者や火災を検出して警備会社または住人に通知したり、屋内の空調や照明の自動調整を行うことが可能となる。
【００２５】
このようなセンサボックスは据え置きを前提とした大型のもので、持ち歩きができず、設置のためには工事が必要である。近年、センサ１０３や無線通信機器の小型化、省電力化によりセンサボックスの小型化が可能となっている。そのため、バッテリーや太陽電池などで稼働させることにより、たとえば、医療分野であれば、患者が外出時にセンサボックスを携帯したり、室内にセンサボックスが設置される場合でも配線が不要になり設置の自由性が増してきている。
【００２６】
このようなセンサボックスには長時間安定して動作することが求められる。そのために、センサボックスは、消費電力を低減させてバッテリーでの稼働時間を延ばしたり、太陽電池の少ない発電量でも稼働できるようにしなければならない。センサボックスでは、各種のセンサ１０３が随時検知するデータをＣＰＵ１０１が取得して解析し、たとえば、温度に異常があるか否かを検出したり、カメラに不審なものが映っているといったことを検出して無線通信で外部の端末に異常を通知する。
【００２７】
センサボックスの低消費電力化のためには、ＣＰＵ１０１が取得したデータを解析する処理に低消費電力化が必須となる。一方で、たとえば、画像データの解析では高い処理性能が必要となり、高精度なセンサ１０３を複数搭載しようとすると解析処理に要求される処理能力は高くなる。そこで、高性能と低消費電力を両立させる一つの方法として、センサボックスでは、データ処理に特化したＣＰＵを複数搭載してセンサ１０３からのデータ処理はこのデータ処理用のＣＰＵ群で処理を行う。そして、データ処理用のＣＰＵによって異常が検出された場合に汎用のＣＰＵを起こして無線通信により通知を行うといった汎用性が求められる処理を行う。
【００２８】
本実施の形態では、検出装置１００は、各センサ１０３に応じた処理を実行するＣＰＵ１０１と、他の装置との通信を行うＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、で処理を分けている。つぎに、図２を用いて、センサボックスを示す検出装置１００のハードウェア構成を詳細に説明する。
【００２９】
（検出装置１００のハードウェア構成例）
図２は、検出装置１００のハードウェア構成例を示すブロック図である。検出装置１００は、ＣＰＵ１０１−１〜ＣＰＵ１０１−ｎと、ローカルメモリ１０２−１〜ローカルメモリ１０２−ｎと、センサ１０３−１〜センサ１０３−ｍと、を有している。さらに、検出システムは、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０５と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０６と、ＭＰＵ１０４と、Ｉ／Ｆ１０７と、を有している。
【００３０】
ＣＰＵ１０１−１〜ＣＰＵ１０１−ｎと、ＲＡＭ１０５と、ＲＯＭ１０６と、ＭＰＵ１０４と、Ｉ／Ｆ１０７はメインバス１１０によってそれぞれ接続されている。ＣＰＵ１０１−１〜ＣＰＵ１０１−ｎと、ローカルメモリ１０２−１〜ローカルメモリ１０２−ｎとは、メモリバス１１１によってそれぞれ接続されている。ＣＰＵ１０１−１〜ＣＰＵ１０１−ｎと、センサ１０３−１〜センサ１０３−ｍとは、センサバス１１２によってそれぞれ接続されている。ＣＰＵ１０１−１〜ＣＰＵ１０１−ｎは、割り込み信号線に割り込み信号を出力することにより、ＭＰＵ１０４に割り込みを発生させる。
【００３１】
ここで、ＭＰＵ１０４は、検出装置１００の全体の制御を司る。ＲＯＭ１０６は、ブートプログラムやセンサ１０３のドライバなどのプログラムを記憶している。ＲＡＭ１０５は、ＭＰＵ１０４のワークエリアとして使用される。
【００３２】
ＣＰＵ１０１−１〜ＣＰＵ１０１−ｎは、それぞれローカルメモリ１０２−１〜ローカルメモリ１０２−ｎを有している。ローカルメモリ１０２−１〜ローカルメモリ１０２−ｎは、それぞれＣＰＵ１０１−１〜ＣＰＵ１０１−ｎのワークエリアとして使用する。各ＣＰＵ１０１は、他のＣＰＵ１０１が有しているローカルメモリ１０２にアクセスできるが、各々が有しているローカルメモリ１０２へのアクセス速度の方が他のＣＰＵ１０１が有しているローカルメモリ１０２へのアクセス速度よりも高速である。
【００３３】
Ｉ／Ｆ１０７は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＷに接続され、このネットワークＮＷを介して他の装置に接続される。そして、Ｉ／Ｆ１０７は、ネットワークＮＷと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０７には、たとえば、モデムやＬＡＮアダプタなどを採用することができる。
【００３４】
（データフィールド）
つぎに、各ＣＰＵ１０１が有するローカルメモリ１０２と、各センサ１０３についてのデータフィールドについて図３を用いて説明する。
【００３５】
図３は、ローカルメモリ１０２とセンサ１０３の各々のデータフィールドの一例を示す説明図である。ローカルメモリ１０２は、センサデータ領域と、作業領域と、を有している。センサデータ領域には、センサ１０３によって検知されたデータが保持される。作業領域には、センサデータ領域に記憶されたデータについて、ＣＰＵ１０１がセンサ１０３に関する処理を実行する場合の領域である。
【００３６】
センサ１０３内の記憶領域には、ＬａｓｔＣＰＵ＃１、ＬａｓｔＣＰＵ＃２、データ状態フラグ、処理状態フラグ、データバッファのフィールドを有している。ＬａｓｔＣＰＵ＃１のフィールドには、最新のデータについての処理を実行するＣＰＵ１０１の識別情報が登録される。ＬａｓｔＣＰＵ＃２のフィールドには、一つ前のデータについての処理を実行するＣＰＵ１０１の識別情報が登録される。本実施の形態では、各ＣＰＵ１０１の識別情報は、図２において各ＣＰＵ１０１に付された番号と同一とする。たとえば、ＣＰＵ１０１−１は、ＣＰＵ１０１−１の識別情報として、「ＣＰＵ１０１−１」をＬａｓｔＣＰＵ＃１やＬａｓｔＣＰＵ＃２に登録する。
【００３７】
データ状態フラグのフィールドには、検知されたデータがＣＰＵ１０１によって処理可能な状態にあるか否かを示すフラグが設定される。データ状態フラグのフィールドには、「ＥＭＰＴＹ」、「ＲＥＡＤＹ」、「ＴＲＡＮＳＦＥＲＲＩＮＧ」のいずれかが設定される。「ＥＭＰＴＹ」は、検知されたデータがＣＰＵ１０１によって処理可能な状態にないことを示す。「ＲＥＡＤＹ」は、検知されたデータがＣＰＵ１０１によって処理可能な状態にあることを示す。「ＴＲＡＮＳＦＥＲＲＩＮＧ」は、処理可能な状態にあるデータについていずれかのＣＰＵ１０１がアクセスしていることを示す。
【００３８】
処理状態フラグのフィールドは、あらたに検知されたデータについての処理に対するＣＰＵ１０１の実行状態を示す。データバッファのフィールドには、検知されたデータが順次登録される。センサ１０３は、データバッファのフィールドに所定量以上のデータが溜まったら、データ状態フラグが「ＥＭＰＴＹ」から「ＲＥＡＤＹ」に変更される。
【００３９】
処理状態フラグには、「ＦＩＮＩＳＨＥＤ」、「ＥＸＥＣＵＴＩＮＧ」、「ＲＥＴＲＹＩＮＧ」、「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」、「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」のいずれかが設定される。
【００４０】
「ＦＩＮＩＳＨＥＤ」は、センサが実行済状態であること示す。実行済状態とは、あらたに検知されたデータについての処理が終了したことを示す。「ＥＸＥＣＵＴＩＮＧ」は、センサが実行中状態であることを示す。実行中状態とは、あらたに検知されたデータについての処理がいずれかのＣＰＵ１０１で実行中であることを示す。「ＲＥＴＲＹＩＮＧ」は、センサが再実行中状態であることを示す。再実行中状態とは、検知されたデータについての処理がいずれかのＣＰＵ１０１で再実行中であることを示す。「ＲＥＴＲＹＩＮＧ＆ＥＸＣＵＴＩＮＧ」は、センサが再実行中かつ実行中状態であることを示す。再実行中かつ実行中状態とは、あらたに検知されたデータについての処理がいずれかのＣＰＵ１０１で実行中であり、該データよりも前に検知されたデータについての処理がいずれかのＣＰＵ１０１で再実行中であることを示す。「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」は、センサが再実行中かつ実行済状態であることを示す。再実行中かつ実行済状態とは、あらたに検知されたデータについての処理が終了したことを示し、該データよりも前に検知されたデータについての処理がいずれかのＣＰＵ１０１で再実行中であることを示す。
【００４１】
図４は、各センサ１０３の処理状態フラグが示すセンサ１０３の状態の遷移例を示す説明図である。図４に示す各状態は、処理状態フラグに設定される情報に対応している。処理状態フラグは「ＦＩＮＩＳＨＥＤ」において、いずれかのＣＰＵ１０１でデータについての処理が開始されると、処理状態フラグは「ＥＸＥＣＵＴＩＮＧ」に設定される。
【００４２】
処理状態フラグは「ＥＸＥＣＵＴＩＮＧ」において、いずれかのＣＰＵ１０１でデータについての処理が終了すると、処理状態フラグが「ＦＩＮＩＳＨＥＤ」に設定される。処理状態フラグは「ＥＸＥＣＵＴＩＮＧ」において、障害発生の検出によって再実行が開始されると、処理状態フラグは「ＲＥＴＲＹＩＮＧ」に設定される。
【００４３】
処理状態フラグは「ＲＥＴＲＹＩＮＧ」において、再実行が終了すると、処理状態フラグは「ＦＩＮＩＳＨＥＤ」に設定される。処理状態フラグは「ＲＥＴＲＹＩＮＧ」において、再実行中につぎのデータの群についての処理が開始されると、処理状態フラグは「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」に設定される。
【００４４】
処理状態フラグは「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」において、再実行処理が終了または強制終了すると、処理状態フラグは「ＥＸＥＣＵＴＩＮＧ」に設定される。処理状態フラグは「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」において、あらたなデータの処理が終了すると、処理状態フラグは「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」に設定される。
【００４５】
処理状態フラグは「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」において、再実行が終了または強制終了すると、処理状態フラグは「ＥＸＥＣＵＴＩＮＧ」に設定される。本実施の形態では、処理状態フラグは「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」から「ＦＩＮＩＳＨＥＤ」へ変化しない。処理状態フラグは「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」から「ＥＸＥＣＵＴＩＮＧ」に設定されてから、「ＦＩＮＩＳＨＥＤ」に設定される。後述で詳細に説明するが、これにより、検出装置１００は、データの実行順序を遵守することができる。
【００４６】
（各センサ１０３の機能例）
図５は、各センサ１０３の機能例を示すブロック図である。つぎに、各センサ１０３の機能例について詳細に説明する。各センサ１０３は、バスインターフェース部５０１と、ＬａｓｔＣＰＵ，処理状態フラグ記録部５０２と、データ状態フラグ記録部５０３と、制御部５０４と、バッファ切替部５０５と、バッファ＃１と、バッファ＃２と、データ出力先管理部５０６と、デジタル変換部５０７と、アナログ入力部５０８と、を有している。
【００４７】
ＬａｓｔＣＰＵ，処理状態フラグ記録部５０２は、上述したＬａｓｔＣＰＵ＃１と、ＬａｓｔＣＰＵ＃２と、処理状態フラグを記憶する記憶装置である。記憶装置としては、たとえば、ＲＡＭ１０５が挙げられる。データ状態フラグ記録部５０３は、データ状態フラグを記憶する記憶装置である。記憶装置としては、たとえば、ＲＡＭ１０５が挙げられる。バッファ＃１およびバッファ＃２には、１処理単位分のデータが記憶される。
【００４８】
バスインターフェース部５０１は、センサバス１１２を介して接続されたＣＰＵ１０１からのデータ入力やＣＰＵ１０１へのデータ出力を制御する。バスインターフェース部５０１は、ＣＰＵ１０１からの書き込み命令に応じてＬａｓｔＣＰＵ，処理状態フラグ記録部５０２のＬａｓｔＣＰＵ＃１、ＬａｓｔＣＰＵ＃２、処理状態フラグへデータを設定する。バスインターフェース部５０１は、ＣＰＵ１０１からの書き込み命令に応じてデータ状態フラグ記録部５０３のデータ状態フラグを設定する。
【００４９】
アナログ入力部５０８は、センサ１０３本体によって検知されたアナログデータを受け付ける。そして、アナログ入力部５０８は、受け付けたアナログデータをデジタル変換部５０７に受け渡す。
【００５０】
デジタル変換部５０７は、アナログデータをデジタルデータに変換する。デジタル変換部５０７は、デジタルに変換されたデータをデータ出力先管理部５０６に出力する。データ出力先管理部５０６は、データをバッファ＃１またはバッファ＃２に記憶させ、かつ１処理単位分のデータをバッファ＃１またはバッファ＃２に記憶させたか否かの管理を行う。
【００５１】
制御部５０４は、センサ１０３の起動時にデータ処理状態を「ＥＭＰＴＹ」に設定し、処理状態フラグを「ＦＩＮＩＳＨＥＤ」に設定する。そして、制御部５０４は、１処理単位分のデータがバッファ＃１またはバッファ＃２に溜まったとデータ出力先管理部５０６によって通知された場合、データ状態フラグ記録部５０３のデータ状態フラグを「ＥＭＰＴＹ」から「ＲＥＡＤＹ」に変更する。さらに、制御部５０４は、データ処理状態が「ＴＲＡＮＳＦＥＲＲＩＮＧ」から「ＥＭＰＴＹ」への変化を検出すると、バッファ切替部５０５にバスインターフェース部５０１へ出力するバッファのデータを切り替えさせる指示を通知する。
【００５２】
バッファ切替部５０５は、制御部５０４からのバッファ切り替え指示に応じてバスインターフェース部５０１へ出力するバッファのデータを切り替える。たとえば、あらたに検知された１処理単位分のデータがバッファ＃１に記憶された場合、バッファ切替部５０５は、バッファ＃２のデータ出力からバッファ＃１のデータ出力へ切り替える。一方、たとえば、あらたに検知された１処理単位分のデータがバッファ＃２に記憶された場合、バッファ切替部５０５は、バッファ＃１のデータ出力からバッファ＃２のデータ出力へ切り替える。
【００５３】
（検出装置１００の機能的構成例）
図６は、検出装置１００の機能的構成を示すブロック図である。検出装置１００の各ＣＰＵ１０１は、選択部６０１と、第１の実行部６０２と、設定部６０３と、判断部６０４と、複製部６０５と、第２の実行部６０６と、通知部６０７と、選択制御部６０８と、実行制御部６０９と、登録部６１０と、を有する。選択部６０１から通知部６０７の処理は、たとえば、ＲＯＭ１０６、ＲＡＭ１０５などの記憶装置に記憶された検出プログラムにコーディングされている。各ＣＰＵ１０１が該検出プログラムを記憶装置からロードし、検出プログラムにコーディングされた処理を実行することにより、選択部６０１から通知部６０７の機能が実現される。
【００５４】
各機能部の処理結果は、たとえば、それぞれのローカルメモリ１０２の作業領域に記憶される。つぎに、各機能部について、図７〜図１１を用いて詳細に説明する。以降の説明において、各機能部に付された“−番号”はＣＰＵ１０１に付された番号に対応しており、各ＣＰＵ１０１の機能部であることを示している。
【００５５】
図７は、障害が発生したＣＰＵ１０１がない場合の検出装置１００の動作例を示す説明図である。図７では、ＣＰＵ１０１−１を例に挙げる。まず、選択部６０１−１は、複数のセンサ１０３のうちいずれのＣＰＵ１０１にも選択されていないセンサ１０３−１を選択する。つぎに、選択部６０１−１は、選択中にセンサ１０３−１からデータを取得する。そして、選択部６０１−１は、データ取得が完了すると選択を解除する。判断部６０４−１は、選択部６０１−１による選択中にセンサ１０３−１が実行中状態であるか否かを判断する。
【００５６】
具体的には、たとえば、選択部６０１−１は、センサ１０３−１のデータ状態フラグを巡回する。たとえば、選択部６０１−１は、時刻ｔ０において、データ状態フラグが「ＲＥＡＤＹ」になったセンサ１０３−１を検出する。これにより、選択部６０１−１は、複数のセンサ１０３のうち、いずれのＣＰＵ１０１にも選択されていないセンサ１０３−１を検出することができる。また、選択部６０１−１は、データ状態フラグが「ＥＭＰＴＹ」のセンサ１０３−１を選択できないこととする。
【００５７】
そして、たとえば、判断部６０４−１は、選択部６０１−１によって検出されたセンサ１０３−１の処理状態フラグに「ＥＸＥＣＵＴＩＮＧ」が設定されているか判断する。上述したように、「ＥＸＥＣＵＴＩＮＧ」はセンサ１０３−１が実行中状態であることを示す。ここでは、「ＦＩＮＩＳＨＥＤ」が設定されているため、判断部６０４−１は、センサ１０３−１が実行中状態でないと判断する。これにより、判断部６０４−１は、センサ１０３−１に応じた処理を実行中に障害が発生したＣＰＵ１０１がないと判断する。
【００５８】
つぎに、たとえば、選択部６０１−１は、データ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」に設定する。選択部６０１−１は、ＣＡＳ（ＣＯＭＰＡＲＥ−ＡＮＤ−ＳＷＡＰ）の機能を用いて排他的にデータ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」に設定してもよい。これにより、選択部６０１−１は、センサ１０３−１を選択する。そして、たとえば、選択部６０１−１は、センサ１０３−１のバッファ＃０またはバッファ＃１から１処理単位分のデータを取得する。たとえば、選択部６０１−１は、取得したデータをローカルメモリ１０２−１のセンサデータ領域に格納する。
【００５９】
つぎに、たとえば、選択部６０１−１は、データの取得が終了すると、データ状態フラグを「ＥＭＰＴＹ」に設定する。これにより、選択部６０１−１は、センサ１０３−１の選択を解除することができる。
【００６０】
第１の実行部６０２−１は、選択部６０１−１による選択中に取得されたデータに基づいて、センサ１０３−１に応じた処理を実行する。そして、設定部６０３−１は、第１の実行部６０２−１によるセンサ１０３−１に応じた処理の実行中にセンサ１０３−１を実行中状態に設定し、第１の実行部６０２−１によるセンサ１０３−１に応じた処理の実行が終了すると実行済状態に設定する。
【００６１】
具体的には、たとえば、設定部６０３−１は、第１の実行部６０２−１によるセンサ１０３−１に応じた処理の実行開始前に、センサ１０３−１の処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」に設定する。これにより、設定部６０３−１は、センサ１０３−１を実行中状態に設定することができる。さらに、たとえば、登録部６１０−１は、ＬａｓｔＣＰＵ＃１にＣＰＵ１０１−１の識別情報を設定する。
【００６２】
つぎに、たとえば、第１の実行部６０２−１は、センサ１０３−１のドライバをＲＯＭ１０６からロードする。たとえば、第１の実行部６０２−１は、ローカルメモリ１０２のセンサデータ領域に記憶されたデータに基づいてセンサ１０３−１のドライバを実行する。センサ１０３−１に応じた処理とは、温度センサを例に挙げると、温度が閾値を超えていないか否かの判断や平均値の計算が挙げられる。たとえば、第１の実行部６０２−１は、データに基づいてセンサ１０３−１のドライバを実行中に異常を検出したら、割り込み信号線に割り込み信号を出力することにより、異常をＭＰＵ１０４に通知する。温度センサを例に挙げると、温度が閾値を超えていたら、第１の実行部６０２−１は、異常が発生したと判断してもよい。
【００６３】
つぎに、たとえば、設定部６０３−１は、第１の実行部６０２−１によるセンサ１０３−１に応じた処理の実行が終了した場合、センサ１０３−１の処理状態フラグを「ＦＩＮＩＳＨＥＤ」に設定する。これにより、設定部６０３−１は、センサ１０３−１を実行済状態に設定することができる。
【００６４】
つぎに、センサ１０３−１に応じた処理を実行中に障害が発生したＣＰＵ１０１がある場合についての検出装置１００の動作例を説明する。
【００６５】
図８は、障害が発生したＣＰＵ１０１がある場合の検出装置１００の動作例１を示す説明図である。上述したように、判断部６０４−１は、選択部６０１−１によって検出されたセンサ１０３−１の処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」であるか否かを判断する。図８の例では、センサ１０３−１の処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」である。これにより、判断部６０４−１は、センサ１０３−１に応じた処理を実行中に障害が発生したＣＰＵ１０１があると判断する。
【００６６】
ここでは、センサ１０３−１によって１処理単位分のあるデータがセンサ１０３−１内のバッファに溜まる間には、あるデータに基づくセンサ１０３−１に応じた処理は終了しているように、検出装置１００は設計者によって設計されている。データ状態フラグが「ＲＥＡＤＹ」から「ＥＭＰＴＹ」に変化した場合、すなわち、つぎのデータがセンサ１０３−１内のデータに溜まったにも関わらず、センサ１０３−１の処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」であることは通常発生しない。そのため、ここでは、判断部６０４−１は、あるデータに基づくセンサ１０３−１に応じた処理を実行していたＣＰＵ１０１に障害が発生したと判断している。
【００６７】
そして、選択制御部６０８−１は、判断部６０４−１によって実行中状態であると判断された場合、選択部６０１−１にデータの取得を実行させずに、選択を解除させる。具体的には、たとえば、選択制御部６０８−１は、判断部６０４−１によってセンサ１０３−１の処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」であると判断された場合、選択部６０１−１によってデータ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」に設定させない。これにより、選択部６０１−１は、センサ１０３−１の選択を行わない。
【００６８】
つぎに、複製部６０５−１は、判断部６０４−１によって実行中状態であると判断された場合、選択部６０１−１によるデータの取得を実行せず。そして、複製部６０５−１は、センサ１０３−１を実行中状態に設定したＣＰＵ１０１−２から該ＣＰＵ１０１−２がセンサ１０３−１から取得したデータを複製する。設定部６０３−１は、第２の実行部６０６−１によるセンサ１０３−１に応じた処理を実行中にセンサ１０３−１を再実行中状態に設定し、第２の実行部６０６−１によるセンサ１０３−１に応じた処理の実行が終了するとセンサ１０３−１を実行済状態に設定する。
【００６９】
具体的には、たとえば、第２の実行部６０６−１は、ＬａｓｔＣＰＵ＃１に登録された識別情報を取得する。そして、たとえば、設定部６０３−１は、センサ１０３−１の処理状態フラグを「ＲＥＴＲＹＩＮＧ」に設定する。設定部６０３−１は、ＣＡＳの機能を用いてセンサ１０３−１の処理状態フラグを「ＲＥＴＲＹＩＮＧ」に排他的に設定してもよい。つぎに、たとえば、複製部６０５−１は、設定部６０３−１によって取得された識別情報が示すＣＰＵ１０１−２が有するローカルメモリ１０２−２のセンサデータ領域に記憶されているデータを、ローカルメモリ１０２−１のセンサデータ領域に複製する。
【００７０】
通知部６０７−１は、センサ１０３−１を実行中状態に設定したＣＰＵ１０１−２に再起動要求を通知する。第２の実行部６０６−１は、複製部６０５−１によって複製されたデータに基づいて、センサ１０３−１に応じた処理を実行する。具体的には、たとえば、通知部６０７−１は、取得された識別情報が示すＣＰＵ１０１−２へ再起動要求を通知する。これにより、ＣＰＵ１０１−２は、再起動を行う。たとえば、第２の実行部６０６−１は、設定部６０３−１によるセンサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ」に設定された後、複製部６０５−１によって複製されたデータに基づいて、センサ１０３−１に応じた処理を実行する。
【００７１】
つぎに、たとえば、選択部６０１−３は、時刻ｔ３において、データ状態フラグが「ＲＥＡＤＹ」であるセンサ１０３−１を検出する。たとえば、判断部６０４−３は、選択部６０１−３によって検出されたセンサ１０３−１の処理状態フラグに「ＥＸＥＣＵＴＩＮＧ」が設定されているか判断する。ここでは、「ＲＥＴＲＹＩＮＧ」が設定されているため、判断部６０４−３は、センサ１０３−１が実行中状態でないと判断する。
【００７２】
また、判断部６０４−３は、センサ１０３−１が再実行中状態であるか否かを判断する。具体的には、たとえば、判断部６０４−３は、選択部６０１−３によって検出されたセンサ１０３−１の処理状態フラグに「ＲＥＴＲＹＩＮＧ」が設定されているか判断する。ここでは、「ＲＥＴＲＹＩＮＧ」が設定されているため、判断部６０４−３は、センサ１０３−１が再実行中状態であると判断する。これにより、判断部６０４−３は、センサ１０３−１に応じた処理を実行中に障害が発生したＣＰＵ１０１−２に対していずれかのＣＰＵ１０１で復帰処理が行われていると判断する。
【００７３】
つぎに、たとえば、選択部６０１−３は、処理状態フラグが「ＲＥＴＲＹＩＮＧ」であるため、データ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」に設定する。選択部６０１−３は、ＣＡＳの機能を用いてセンサ１０３−１のデータ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」に排他的に設定してもよい。そして、たとえば、選択部６０１−３は、センサ１０３−１のバッファ＃０またはバッファ＃１から１処理単位分のデータを取得する。たとえば、選択部６０１−３は、取得したデータをローカルメモリ１０２のセンサデータ領域に格納する。さらに、たとえば、選択部６０１−３は、データの取得が終了すると、データ状態フラグを「ＥＭＰＴＹ」に設定する。これにより、選択部６０１−３は、センサ１０３−１の選択を解除することができる。
【００７４】
つぎに、設定部６０３−３は、判断部６０４−３によってセンサ１０３−１が再実行中状態であると判断された場合、センサ１０３−１を再実行中かつ実行中状態に設定する。具体的には、たとえば、設定部６０３−３は、処理状態フラグが「ＲＥＴＲＹＩＮＧ」であるため、第１の実行部６０２−３によるセンサ１０３−１に応じた処理の実行開始前に、センサ１０３−１の処理状態フラグを「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」に設定する。さらに、たとえば、登録部６１０−３は、センサ１０３−１のＬａｓｔＣＰＵ＃１にＣＰＵ１０１−３の識別情報を登録する。
【００７５】
そして、たとえば、第１の実行部６０２−３は、センサ１０３−１のドライバをＲＯＭ１０６からロードする。たとえば、第１の実行部６０２−３は、ローカルメモリ１０２のセンサデータ領域に記憶されたデータに基づいてセンサ１０３−１のドライバを実行する。
【００７６】
つぎに、判断部６０４−１は、第２の実行部６０６−１によるセンサ１０３−１に応じた処理の実行が終了すると、センサ１０３−１が再実行中かつ実行中状態であるか否かを判断する。そして、設定部６０３−１は、判断部６０４−１によってセンサ１０３−１が再実行中かつ実行中状態であると判断された場合、センサ１０３−１を実行中状態にする。
【００７７】
具体的には、たとえば、判断部６０４−１は、第２の実行部６０６−１によるセンサ１０３−１に応じた処理の実行が時刻ｔ４において終了すると、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」であるか否かを判断する。ここでは、センサ１０３−１の処理状態フラグに「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」が設定されている。そのため、たとえば、設定部６０３−１は、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」であると判断された場合、センサ１０３−１の処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」にする。
【００７８】
つぎに、判断部６０４−３は、第１の実行部６０２−３によるセンサ１０３−１に応じた処理の実行が終了すると、センサ１０３−１がいずれの状態であるか判断する。具体的には、たとえば、判断部６０４−３は、第１の実行部６０２−３によるセンサ１０３−１に応じた処理の実行が時刻ｔ５において終了すると、センサ１０３−１の処理状態フラグを取得する。たとえば、判断部６０４−３は、センサ１０３−１の処理状態フラグに設定された情報がいずれの情報であるかを判断する。ここでは、センサ１０３−１の処理状態フラグには「ＥＸＥＣＵＴＩＮＧ」が設定されている。
【００７９】
設定部６０３−３は、判断部６０４−３によってセンサ１０３−１が実行中状態であると判断された場合、センサ１０３−１を実行済状態にする。具体的には、たとえば、設定部６０３−３は、判断部６０４−３によってセンサ１０３−１の処理状態フラグに「ＥＸＥＣＵＴＩＮＧ」が設定されていると判断された場合、センサ１０３−１の処理状態フラグに「ＦＩＮＩＳＨＥＤ」を設定する。
【００８０】
これにより、検出装置１００は、障害が発生したＣＰＵが実行していた処理を他のＣＰＵで再実行させることができる。
【００８１】
図９は、障害が発生したＣＰＵ１０１がある場合の検出装置１００の動作例２を示す説明図である。ＣＰＵ１０１−１が再実行中にＣＰＵ１０１−３がセンサ１０３−１からのデータ取得を開始し、ＣＰＵ１０１−１が再実行を終了した後に、ＣＰＵ１０１−３はセンサ１０３−１からデータ取得を終了する場合がある。そのため、ＣＰＵ１０１−３はセンサ１０３−１からデータを取得する処理が終了したら、センサ１０３−１がいずれの状態であるかを判断する。そして、ＣＰＵ１０１−３は、判断結果に応じてセンサ１０３−１をいずれの状態にするか決定する。
【００８２】
たとえば、時刻ｔ３’において、選択部６０１−３は、データ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」に設定することにより、排他制御処理を実行する。たとえば、選択部６０１−３は、センサ１０３−１からデータを取得する。たとえば、選択部６０１−３がデータを取得している間に、設定部６０３−１は、第２の実行部６０６−１による実行が終了すると、センサ１０３−１の処理状態フラグを「ＲＥＴＲＹＩＮＧ」から「ＦＩＮＩＳＨＥＤ」に設定する。
【００８３】
つぎに、たとえば、判断部６０４−３は、選択部６０１−３によるデータの取得が終了すると、センサ１０３−１の処理状態フラグを取得する。判断部６０４−３は、処理状態フラグに設定された情報がいずれの情報であるかを判断する。ここでは、「ＦＩＮＩＳＨＥＤ」が設定されている。そのため、設定部６０３−３は、センサ１０３−１の処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」に設定し、第１の実行部６０２−３は、選択部６０１−３によって取得されたデータに基づいてセンサ１０３−１に応じた処理を実行する。
【００８４】
図１０は、障害が発生したＣＰＵ１０１がある場合の検出装置１００の動作例３を示す説明図である。障害が発生したＣＰＵ１０１−２で実行していた処理を再実行するＣＰＵ１０１−１よりも、あらたなデータに基づくセンサ１０３−１に応じた処理を実行するＣＰＵ１０１−３が先に処理を終了すると、実行順序が代わってしまう。そこで、図１０では、ＣＰＵ１０１−３は、ＣＰＵ１０１−１の処理終了を待って、処理を終了する。図１０は、時刻ｔ５までは図８の例と同一であるため、時刻ｔ５までの詳細な説明を省略する。
【００８５】
判断部６０４−３は、第１の実行部６０２−３によってセンサ１０３−１に応じた処理の実行結果が得られた場合に、センサ１０３−１が再実行中かつ実行中状態であるか否かを判断する。実行制御部６０９−３は、判断部６０４−３によってセンサ１０３−１が再実行中かつ実行中状態であると判断された場合、第２の実行部６０６−３の実行を終了させない。設定部６０３−３は、判断部６０４−３によってセンサ１０３−１が再実行中かつ実行中状態であると判断された場合、センサ１０３−１を再実行中かつ実行済状態にする。
【００８６】
具体的には、たとえば、判断部６０４−３は、第１の実行部６０２−３によってセンサ１０３−１に応じた処理の実行結果が得られた場合に、センサ１０３−１の処理状態フラグを取得する。たとえば、判断部６０４−３は、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」であるか否かを判断する。ここでは、センサ１０３−１の処理状態フラグは、「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」である。これにより、判断部６０４−３は、障害が発生したＣＰＵ１０１−２が実行していた処理を再実行するＣＰＵ１０１に対して再実行の処理が終了したか否かを問い合わせなくとも、未だ実行が終了していないと判断することができる。
【００８７】
設定部６０３−３は、判断部６０４−３によってセンサ１０３−１の処理状態フラグ「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」に設定する。図１０では、「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」が、「ＲＥＴ＆ＦＩＮ」に省略されている。そして、実行制御部６０９−３は、判断部６０４−３によってセンサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」であると判断された場合、センサ１０３−１のドライバを実行状態のまま待機させる。
【００８８】
判断部６０４−１は、第２の実行部６０６−１によるセンサ１０３−１に応じた処理の実行が終了すると、センサ１０３−１が再実行中かつ実行済状態であるか否かを判断する。そして、設定部６０３−１は、判断部６０４−１によってセンサ１０３−１が再実行中かつ実行済状態であると判断された場合、センサ１０３−１を実行中状態に設定する。
【００８９】
具体的には、たとえば、判断部６０４−１は、第２の実行部６０６−１によるセンサ１０３−１に応じた処理の実行が終了すると、センサ１０３−１の処理状態フラグを取得する。さらに、たとえば、判断部６０４−１は、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」であるか否かを判断する。ここでは、時刻ｔ４’では、「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」である。たとえば、設定部６０３−１は、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」であると判断された場合、センサ１０３−１の処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」にする。
【００９０】
判断部６０４−３は、設定部６０３−３によりセンサ１０３−１を再実行中かつ実行済状態に設定後、センサ１０３−１が再実行中かつ実行済状態から実行中状態になるか否かを判断する。実行制御部６０９−３は、判断部６０４−３によってセンサ１０３−１が再実行中かつ実行済み状態から実行中状態になったと判断された場合、第１の実行部６０２によるセンサ１０３−１に応じた処理の実行を終了させる。そして、設定部６０３−３は、第１の実行部６０２−３によるセンサ１０３−１に応じた処理の実行が終了すると、判断部６０４−３によってセンサ１０３−１が実行中状態であると判断された場合、センサ１０３−１を実行済状態にする。
【００９１】
図１０の時刻ｔ４’では、設定部６０３−１によって、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」から「ＥＸＥＣＵＴＩＮＧ」に変更された。そのため、判断部６０４−３は、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」から「ＥＸＥＣＵＴＩＮＧ」になったと判断する。そして、たとえば、実行制御部６０９−３は、判断部６０４−３によってセンサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」から「ＥＸＥＣＵＴＩＮＧ」になったと判断された場合、センサ１０３−１のドライバを終了させる。設定部６０３−３は、第１の実行部６０２−３によるセンサ１０３−１に応じた処理の実行が終了すると、センサ１０３−１の処理状態フラグを「ＦＩＮＩＳＨＥＤ」に設定する。
【００９２】
これにより、検出装置１００は、データの検知された順序を遵守してセンサ１０３−１に応じた処理を実行することができる。したがって、各センサ１０３−１によって検知されたデータに基づくセンサ１０３−１に応じた処理を継続的に実行させることができる。
【００９３】
図１１は、障害が発生したＣＰＵ１０１がある場合の検出装置１００の動作例４を示す説明図である。図１１では、検出装置１００は、再実行中のＣＰＵ１０１−１に障害が発生した場合、データに不具合があると判断し、該データに基づくセンサ１０３−１に応じた処理を止める。図１１では、選択部６０１−２は、時刻ｔ６において、データ状態フラグが「ＲＥＡＤＹ」であることを検出する。
【００９４】
そして、判断部６０４−２は、選択部６０１−２による選択中にセンサ１０３−１が再実行中かつ実行中状態であるか否かを判断する。具体的には、たとえば、判断部６０４−２は、センサ１０３−１のデータ状態フラグが「ＲＥＡＤＹ」の場合に、センサ１０３−１の処理状態フラグを取得する。たとえば、判断部６０４−２は、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」であるか否かを判断する。ここでは、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」である。
【００９５】
上述したように、データ状態フラグが「ＥＭＰＴＹ」から「ＲＥＡＤＹ」へ変化する間に、各ＣＰＵ１０１はセンサ１０３−１から取得したデータに基づいてセンサ１０３−１に応じた処理の実行を終了する。データ状態フラグが「ＲＥＡＤＹ」であるにも関わらず、センサ１０３−１の処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」である場合、再実行中のＣＰＵ１０１−１と実行中のＣＰＵ１０１−３の両方に障害が発生している可能性がある。
【００９６】
そのため、通知部６０７−２は、センサ１０３−１に状態を設定する前に、センサ１０３−１の状態を「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」に設定したＣＰＵ１０１に再起動要求を通知する。具体的には、たとえば、通知部６０７−２は、ＬａｓｔＣＰＵ＃２に登録された識別情報を取得する。通知部６０７−２は、取得した識別情報が示すＣＰＵ１０１−１に再起動要求を通知する。これにより、ＣＰＵ１０１−１は、再起動を行う。
【００９７】
設定部６０３−２は、センサ１０３−１が再実行中かつ実行中状態である場合、センサ１０３−１を実行中状態に設定する。登録部６１０−２は、設定部６０３−２によってセンサ１０３−１の状態が設定された場合、センサ１０３−１の第２の記憶領域にＣＰＵ１０１−２の識別情報を登録する。そして、ＣＰＵ１０１−２は、図８に示したＣＰＵ１０１−３の処理と同様の処理を行い、ＣＰＵ１０１−４は、センサ１０３−１があらたに検知したデータに基づくセンサ１０３−１に応じた処理を実行する。
【００９８】
これにより、検出装置１００は、データに基づくセンサに応じた処理によって連続してＣＰＵが障害を発生する場合、データに不具合があると判断し、そのデータに基づいてセンサに応じた処理を実行するのを止める。したがって、検出装置１００は、不具合があるデータを破棄することによって、各センサによって検知されたデータに基づくセンサに応じた処理を継続的に実行させることができる。
【００９９】
（検出装置１００の各ＣＰＵ１０１が行う処理手順）
図１２〜図１６は、検出装置１００の各ＣＰＵ１０１が行う処理手順を示すフローチャートである。ここでは、たとえば、各ＣＰＵ１０１は、複数のセンサ１０３からセンサ１０３の識別情報順に監視対象センサにしている。まず、ＣＰＵ１０１は、監視対象センサのデータ状態フラグを取得する（ステップＳ１２０１）。そして、ＣＰＵ１０１は、取得したデータ状態フラグが「ＲＥＡＤＹ」であるか否かを判断する（ステップＳ１２０２）。「ＲＥＡＤＹ」でない場合（ステップＳ１２０２：Ｎｏ）、ＣＰＵ１０１は、監視対象センサをつぎのセンサ１０３に変更し（ステップＳ１２１５）、ステップＳ１２０１へ戻る。
【０１００】
一方、「ＲＥＡＤＹ」である場合（ステップＳ１２０２：Ｙｅｓ）、ＣＰＵ１０１は、監視対象センサの処理状態フラグを取得する（ステップＳ１２０３）。そして、ＣＰＵ１０１は、処理状態フラグが「ＦＩＮＩＳＨＥＤ」であるか否かを判断する（ステップＳ１２０４）。「ＦＩＮＩＳＨＥＤ」である場合（ステップＳ１２０４：Ｙｅｓ）、ＣＰＵ１０１は、データ状態フラグを「ＲＥＡＤＹ」から「ＴＲＡＮＳＦＥＲＲＩＮＧ」に変更する（ステップＳ１２０５）。このように、ＣＰＵ１０１は、データ状態フラグを「ＴＲＡＮＳＦＥＲＲＩＮＧ」に設定することにより、排他制御処理を行う。
【０１０１】
つぎに、ＣＰＵ１０１は、変更が成功したか否かを判断する（ステップＳ１２０６）。変更が失敗した場合（ステップＳ１２０６：Ｎｏ）、ＣＰＵ１０１は、ステップＳ１２１５へ移行する。
【０１０２】
一方、変更が成功した場合（ステップＳ１２０６：Ｙｅｓ）、ＣＰＵ１０１は、ＬａｓｔＣＰＵ＃１に識別情報を登録する（ステップＳ１２０７）。そして、ＣＰＵ１０１は、監視対象センサからデータを取得し、ローカルメモリ１０２のセンサデータ領域に格納する（ステップＳ１２０８）。つぎに、ＣＰＵ１０１は、データ状態フラグを「ＥＭＰＴＹ」に設定する（ステップＳ１２０９）。
【０１０３】
そして、ＣＰＵ１０１は、処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」に設定し、取得したデータに基づいてセンサ１０３に応じた処理を実行する（ステップＳ１２１０）。ＣＰＵ１０１は、実行中に異常検出したか否かを判断する（ステップＳ１２１１）。異常が検出されない場合（ステップＳ１２１１：Ｎｏ）、ステップＳ１２１４へ移行する。異常が検出された場合（ステップＳ１２１１：Ｙｅｓ）、ＣＰＵ１０１は、メインメモリに異常情報を記録する（ステップＳ１２１２）。そして、ＣＰＵ１０１は、ＭＰＵ１０４へ割り込みを行う（ステップＳ１２１３）。ＭＰＵ１０４は、ＣＰＵ１０１からの割り込み信号を受け付けると、Ｉ／Ｆ１０７を介して他の端末へ通知してもよい。または、検出装置１００がディスプレイなどの出力装置を有していれば、ＭＰＵ１０４は、出力装置に異常を出力してもよい。そして、ステップＳ１２１３のつぎに、ＣＰＵ１０１は、処理状態フラグを「ＦＩＮＩＳＨＥＤ」に変更し（ステップＳ１２１４）、ステップＳ１２１５へ移行する。
【０１０４】
一方、ステップＳ１２０４において、「ＦＩＮＩＳＨＥＤ」でない場合（ステップＳ１２０４：Ｎｏ）、ステップＳ１３０１へ移行する。以上説明したステップＳ１２０１〜ステップＳ１２１５の動作例は、図７に示している。
【０１０５】
ステップＳ１２０４のＮｏの場合または後述するステップＳ１６０６のつぎに、ＣＰＵ１０１は、監視対象センサの処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」であるか否かを判断する（ステップＳ１３０１）。監視対象センサの処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」である場合（ステップＳ１３０１：Ｙｅｓ）、ＣＰＵ１０１は、ＬａｓｔＣＰＵ＃１に記録されたＣＰＵ１０１の識別情報を取得する（ステップＳ１３０２）。そして、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」から「ＲＥＴＲＹＩＮＧ」に変更する（ステップＳ１３０３）。
【０１０６】
つぎに、ＣＰＵ１０１は、変更が成功したか否かを判断する（ステップＳ１３０４）。変更が失敗した場合（ステップＳ１３０４：Ｎｏ）、ステップＳ１３１４へ移行する。変更が成功した場合（ステップＳ１３０４：Ｙｅｓ）、ＣＰＵ１０１は、監視対象センサのＬａｓｔＣＰＵ＃２に識別情報を登録する（ステップＳ１３０５）。そして、ＣＰＵ１０１は、取得したＬａｓｔＣＰＵ＃１の識別情報が示すＣＰＵ１０１のローカルメモリ１０２のセンサデータ領域のデータを、ローカルメモリ１０２のセンサデータ領域に複製する（ステップＳ１３０６）。そして、ＣＰＵ１０１は、取得したＬａｓｔＣＰＵ＃１の識別情報が示すＣＰＵ１０１に再起動要求を通知する（ステップＳ１３０７）。これにより、ＬａｓｔＣＰＵ＃１の識別情報が示すＣＰＵ１０１は再起動する。
【０１０７】
つぎに、ＣＰＵ１０１は、複製したデータに基づいて監視対象センサに応じた処理を実行する（ステップＳ１３０８）。ここでは、実行中に異常が検出された場合について省略するが、ＣＰＵ１０１は、ステップＳ１２１１〜ステップＳ１２１３で説明した処理と同様の処理を行う。そして、ＣＰＵ１０１は、監視対象センサの処理状態フラグを取得する（ステップＳ１３０９）。ＣＰＵ１０１は、監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」であるか否かを判断する（ステップＳ１３１０）。
【０１０８】
監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」である場合（ステップＳ１３１０：Ｙｅｓ）、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」に変更する（ステップＳ１３１１）。そして、ＣＰＵ１０１は、変更が成功したか否かを判断する（ステップＳ１３１２）。
【０１０９】
つぎに、変更が成功した場合（ステップＳ１３１２：Ｙｅｓ）、ステップＳ１３１４へ移行する。一方、変更が失敗した場合（ステップＳ１３１２：Ｎｏ）、ステップＳ１３０９へ戻る。
【０１１０】
ステップＳ１３１０において、監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」でない場合（ステップＳ１３１０：Ｎｏ）、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＦＩＮＩＳＨＥＤ」に変更する（ステップＳ１３１３）。
【０１１１】
ステップＳ１３１２のＹｅｓの場合、ステップＳ１３０４のＮｏの場合、またはステップＳ１３１３のつぎに、ＣＰＵ１０１は、監視対象センサをつぎのセンサ１０３に変更し（ステップＳ１３１４）、ステップＳ１２０１へ戻る。
【０１１２】
監視対象センサの処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」でない場合（ステップＳ１３０１：Ｎｏ）、ステップＳ１４０１へ移行する。以上説明したステップＳ１３０１〜ステップＳ１３１４の動作例は、図８に示している。
【０１１３】
そして、ステップＳ１３０１のＮｏの場合のつぎに、ＣＰＵ１０１は、監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ」であるか否かを判断する（ステップＳ１４０１）。監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ」の場合（ステップＳ１４０１：Ｙｅｓ）、ＣＰＵ１０１は、監視対象センサのデータ状態フラグを「ＲＥＡＤＹ」から「ＴＲＡＮＳＦＥＲＲＩＮＧ」に変更する（ステップＳ１４０２）。そして、ＣＰＵ１０１は、変更が成功したか否かを判断する（ステップＳ１４０３）。
【０１１４】
変更が成功した場合（ステップＳ１４０３：Ｙｅｓ）、ＣＰＵ１０１は、ＬａｓｔＣＰＵ＃１に識別情報を登録し（ステップＳ１４０４）、監視対象センサの処理状態フラグを取得する（ステップＳ１４０５）。ＣＰＵ１０１は、取得した処理状態フラグが「ＲＥＴＲＹＩＮＧ」であるか否かを判断する（ステップＳ１４０６）。処理状態フラグが「ＲＥＴＲＹＩＮＧ」の場合（ステップＳ１４０６：Ｙｅｓ）、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」に変更し（ステップＳ１４０７）、ステップＳ１４０９へ移行する。
【０１１５】
一方、処理状態フラグが「ＲＥＴＲＹＩＮＧ」でない場合（ステップＳ１４０６：Ｎｏ）、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＥＸＥＣＵＴＩＮＧ」に変更し（ステップＳ１４０８）、ステップＳ１４０９へ移行する。
【０１１６】
ステップＳ１４０７またはステップＳ１４０８のつぎに、ＣＰＵ１０１は、変更が成功したか否かを判断する（ステップＳ１４０９）。変更が失敗した場合（ステップＳ１４０９：Ｎｏ）、ステップＳ１４０６へ戻る。変更が成功した場合（ステップＳ１４０９：Ｙｅｓ）、ＣＰＵ１０１は、監視対象センサからデータを取得する（ステップＳ１４１０）。つぎに、ＣＰＵ１０１は、監視対象センサのデータ状態フラグを「ＥＭＰＴＹ」に設定し（ステップＳ１４１１）、センサ１０３に応じた処理を実行し（ステップＳ１４１２）、ステップＳ１５０１へ移行する。
【０１１７】
一方、ステップＳ１４０３において、変更が失敗した場合（ステップＳ１４０３：Ｎｏ）、ＣＰＵ１０１は、監視対象センサをつぎのセンサ１０３に変更し（ステップＳ１４１３）、ステップＳ１２０１へ戻る。
【０１１８】
ステップＳ１４１２または後述するステップＳ１５０７のＮｏの場合のつぎに、ＣＰＵ１０１は、監視対象センサの処理状態フラグを取得する（ステップＳ１５０１）。ＣＰＵ１０１は、監視対象センサの処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」であるか否かを判断する（ステップＳ１５０２）。監視対象センサの処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」でない場合（ステップＳ１５０２：Ｎｏ）、ＣＰＵ１０１は、「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」であるか否かを判断する（ステップＳ１５０３）。
【０１１９】
「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」である場合（ステップＳ１５０３：Ｙｅｓ）、ステップＳ１５０６へ移行する。一方、「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」でない場合（ステップＳ１５０３：Ｎｏ）、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」に変更する（ステップＳ１５０４）。そして、ＣＰＵ１０１は、変更が成功したか否かを判断する（ステップＳ１５０５）。変更が失敗した場合（ステップＳ１５０５：Ｎｏ）、ステップＳ１５０１へ戻る。変更が成功した場合（ステップＳ１５０５：Ｙｅｓ）、ステップＳ１５０６へ移行する。
【０１２０】
ステップＳ１５０３のＹｅｓの場合、またはステップＳ１５０５のＹｅｓの場合のつぎに、ＣＰＵ１０１は、監視対象センサのデータ状態フラグを取得する（ステップＳ１５０６）。ＣＰＵ１０１は、監視対象センサのデータ状態フラグが「ＲＥＡＤＹ」であるか否かを判断する（ステップＳ１５０７）。監視対象センサのデータ状態フラグが「ＲＥＡＤＹ」でない場合（ステップＳ１５０７：Ｎｏ）、ステップＳ１５０１へ戻る。ＣＰＵ１０１は、監視対象センサのデータ状態フラグが「ＲＥＡＤＹ」である場合（ステップＳ１５０７：Ｙｅｓ）、ＣＰＵ１０１は、ＬａｓｔＣＰＵ＃２に登録されたＣＰＵ１０１の識別情報を取得する（ステップＳ１５０８）。
【０１２１】
そして、ＣＰＵ１０１は、ＬａｓｔＣＰＵ＃２の識別情報が示すＣＰＵ１０１に再起動要求を通知する（ステップＳ１５０９）。ＣＰＵ１０１は、メインメモリへ異常情報を記録し（ステップＳ１５１０）、ＭＰＵ１０４へ割り込みを行う（ステップＳ１５１１）。そして、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＦＩＮＩＳＨＥＤ」に変更し（ステップＳ１５１２）、ステップＳ１５１７へ移行する。
【０１２２】
一方、ステップＳ１５０２において、監視対象センサの処理状態フラグが「ＥＸＥＣＵＴＩＮＧ」の場合（ステップＳ１５０２：Ｙｅｓ）、ＣＰＵ１０１は、異常を検出したか否かを判断する（ステップＳ１５１３）。異常が検出されなかった場合（ステップＳ１５１３：Ｎｏ）、ステップＳ１５１６へ移行する。一方、異常が検出された場合（ステップＳ１５１３：Ｙｅｓ）、ＣＰＵ１０１は、メインメモリへ異常情報を記録し（ステップＳ１５１４）、ＭＰＵ１０４へ割り込みを行う（ステップＳ１５１５）。そして、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＦＩＮＩＳＨＥＤ」に変更し（ステップＳ１５１６）、ステップＳ１５１７へ移行する。
【０１２３】
ステップＳ１５１２またはステップＳ１５１６のつぎに、ＣＰＵ１０１は、監視対象センサをつぎのセンサ１０３に変更し（ステップＳ１５１７）、ステップＳ１２０１へ戻る。
【０１２４】
ステップＳ１４０１において、監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ」でない場合（ステップＳ１４０１：Ｎｏ）、ステップＳ１６０１へ移行する。ＣＰＵ１０１は、監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」または「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」のいずれであるかを判断する（ステップＳ１６０１）。監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」である場合（ステップＳ１６０１：ＲＥＴ＆ＥＸＥ）、ＣＰＵ１０１は、ＬａｓｔＣＰＵ＃２に登録された識別情報を取得する（ステップＳ１６０２）。
【０１２５】
つぎに、ＣＰＵ１０１は、監視対象センサの処理状態フラグを「ＲＥＴＲＹＩＮＧ＆ＥＸＥＣＵＴＩＮＧ」から「ＥＸＥＣＵＴＩＮＧ」に変更する（ステップＳ１６０３）。そして、ＣＰＵ１０１は、変更が成功したか否かを判断する（ステップＳ１６０４）。変更が成功した場合（ステップＳ１６０４：Ｙｅｓ）、ＣＰＵ１０１は、ＬａｓｔＣＰＵ＃２の識別情報が示すＣＰＵ１０１に再起動要求を通知する（ステップＳ１６０５）。ＣＰＵ１０１は、監視対象センサの処理状態フラグを取得し（ステップＳ１６０６）、ステップＳ１３０１へ移行する。
【０１２６】
変更が失敗した場合（ステップＳ１６０４：Ｎｏ）、または監視対象センサの処理状態フラグが「ＲＥＴＲＹＩＮＧ＆ＦＩＮＩＳＨＥＤ」である場合（ステップＳ１６０１：ＲＥＴ＆ＦＩＮ）、ステップＳ１６０７へ移行する。ＣＰＵ１０１は、監視対象センサをつぎのセンサ１０３に変更し（ステップＳ１６０７）、ステップＳ１２０１へ戻る。
【０１２７】
（各センサ１０３の制御部５０４による処理手順）
図１７は、各センサ１０３の制御部５０４が行う処理手順を示すフローチャートである。まず、各センサ１０３の制御部５０４は、センサ１０３の起動時に、データ状態フラグを「ＥＭＰＴＹ」、処理状態フラグを「ＦＩＮＩＳＨＥＤ」に設定する（ステップＳ１７０１）。つぎに、制御部５０４は、１処理単位分のデータがバッファに溜まったか否かを判断する（ステップＳ１７０２）。１処理単位分のデータがバッファに溜まっていない場合（ステップＳ１７０２：Ｎｏ）、制御部５０４は、ステップＳ１７０２へ戻る。
【０１２８】
一方、１処理単位分のデータがバッファに溜まった場合（ステップＳ１７０２：Ｙｅｓ）、制御部５０４は、データ状態フラグを「ＲＥＡＤＹ」に設定し（ステップＳ１７０３）、データ状態フラグが「ＥＭＰＴＹ」になったか否かを判断する（ステップＳ１７０４）。すなわち、いずれかのＣＰＵ１０１がバッファに溜まったデータを取得したか否かを判断する。
【０１２９】
データ状態フラグが「ＥＭＰＴＹ」になっていない場合（ステップＳ１７０４：Ｎｏ）、ステップＳ１７０４に戻る。一方、データ状態フラグが「ＥＭＰＴＹ」になった場合（ステップＳ１７０４：Ｙｅｓ）、制御部５０４は、センサバス１１２からアクセスされるバッファ領域を入れ替え（ステップＳ１７０５）、一連の処理を終了する。
【０１３０】
以上説明したように、複数のＣＰＵの各ＣＰＵは、センサが生成したデータを取得しようとしたら、センサが実行中状態であるため、該センサを実行中状態に設定したＣＰＵからデータを取得してセンサに応じた処理を実行する。これにより、検出装置は、障害が発生したＣＰＵが実行していた処理を他のＣＰＵに再実行させることができる。したがって、検出装置は、各センサによって検知されたデータに基づくセンサに応じた処理を継続的に実行させることができる。
【０１３１】
また、障害が発生したＣＰＵがあることを検出したＣＰＵは、センサの選択を解除し、センサを再実行中状態に設定することにより、他のＣＰＵは、あらたにセンサを選択することができる。これにより、検出装置は、一のＣＰＵには故障中のＣＰＵが行っていた処理を再実行させつつ、他のＣＰＵにはあらたなデータに基づいて、センサに応じた処理を実行させることができる。したがって、検出装置は、各センサによって検知されたデータに基づくセンサに応じた処理を継続的に実行させることができ、リアルタイム制約を遵守させることができる。
【０１３２】
また、一のＣＰＵが故障中のＣＰＵが行っていた処理を再実行し、他のＣＰＵがあらたなデータに基づくセンサに応じた処理を実行している場合には、他のＣＰＵはセンサを再実行中かつ実行中状態に設定する。これにより、検出装置は、故障中のＣＰＵが行っていた処理と、あらたなデータに基づくセンサに応じた処理と、のいずれもが実行されていることを巡回中のＣＰＵに判別させることができる。したがって、検出装置は、各センサによって検知されたデータに基づくセンサに応じた処理を継続的に実行させることができ、リアルタイム制約を遵守させることができる。
【０１３３】
また、他のＣＰＵによるあらたなデータに基づくセンサに応じた処理の実行が、一のＣＰＵによる故障中のＣＰＵが行っていた処理よりも先に終了する場合、他のＣＰＵは、他のＣＰＵによるあらたなデータに基づくセンサに応じた処理の終了を待機させる。これにより、検出装置は、データの検知順序に応じた実行順所を遵守させることができる。
【０１３４】
また、障害が発生したＣＰＵが行っていた処理の再実行が終了する場合に、センサが再実行中かつ実行済状態の場合、一のＣＰＵが、センサを実行中状態に設定する。他のＣＰＵは、センサを再実行中かつ実行済状態に設定後、センサが再実行中かつ実行済状態から実行中状態になることを検出すると、他のＣＰＵの処理を終了する。これにより、センサの検知順序に応じた実行順序を遵守させることができる。
【０１３５】
また、たとえば、検出装置の設計者は、ＣＰＵの処理能力とＣＰＵの数をセンサの数とセンサの処理能力に応じて決定している。そのため、障害が発生したままのＣＰＵを放置しておくと、複数のセンサに応じた処理に対して複数のＣＰＵの処理能力が足りなくなる可能性がある。そこで、一のＣＰＵが、障害が発生したと判断したＣＰＵからデータを取得後に、該障害が発生したと判断したＣＰＵに対して再起動要求を通知する。これにより、障害が発生したＣＰＵは再起動を行う。したがって、検出装置は、各センサによって検知されたデータに基づくセンサに応じた処理を継続的に実行させることができ、リアルタイム制約を遵守させることができる。
【０１３６】
また、検出装置は、データに基づくセンサに応じた処理によって連続してＣＰＵが障害を発生する場合、データに不具合があると判断し、そのデータに基づいてセンサに応じた処理を実行するのを止める。したがって、検出装置は、不具合があるデータを破棄することによって、各センサによって検知されたデータに基づくセンサに応じた処理を継続的に実行させることができる。
【０１３７】
なお、本実施の形態で説明した検出方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検出プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検出プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１３８】
１００  検出装置
１０１−１〜１０１−ｎ  ＣＰＵ
１０２−１〜１０２−ｎ  ローカルメモリ
１０３−１〜１０３−ｍ  センサ
６０１  選択部
６０２  第１の実行部
６０３  設定部
６０４  判断部
６０５  複製部
６０６  第２の実行部
【図１】
0005900514.tif 000002
【図２】
0005900514.tif 000003
【図３】
0005900514.tif 000004
【図４】
0005900514.tif 000005
【図５】
0005900514.tif 000006
【図６】
0005900514.tif 000007
【図７】
0005900514.tif 000008
【図８】
0005900514.tif 000009
【図９】
0005900514.tif 000010
【図１０】
0005900514.tif 000011
【図１１】
0005900514.tif 000012
【図１２】
0005900514.tif 000013
【図１３】
0005900514.tif 000014
【図１４】
0005900514.tif 000015
【図１５】
0005900514.tif 000016
【図１６】
0005900514.tif 000017
【図１７】
0005900514.tif 000018