(57)【要約】      （修正有）【課題】制御対象に対する制御の高速性を維持しつつも、より安全性を向上すること。【解決手段】本発明に係る安全制御装置は、制御対象の制御周期を規定する第１のキャリア信号１の周期に同期した周期で第１の割込信号１を出力する第１の割込信号出力部１７と、第１のキャリア信号とは同一周期かつ所定の位相差で、制御対象の制御周期を規定する第２のキャリア信号２の周期に同期した周期で第２の割込信号２を出力する第２の割込信号出力部１９と、複数のタイムパーティションを、第１の割込信号の出力及び第２の割込信号の出力に応じて切り替えてスケジューリングすることで、タスクを実行して制御対象を制御する制御部１０を備える。制御部は、第１の割込信号及び第２の割込信号に関する異常として、第１の割込信号と第２の割込信号が所定順序で出力されていないことを検出した場合、制御対象の制御を停止するものである。【選択図】図１
2014211689.tif 000002
【特許請求の範囲】
【請求項１】
制御対象の制御周期を規定する第１のキャリア信号を生成する第１のキャリア信号生成部と、
前記第１のキャリア信号とは同一周期かつ所定の位相差で、前記制御対象の制御周期を規定する第２のキャリア信号を生成する第２のキャリア信号生成部と、
前記第１のキャリア信号生成部によって生成される第１のキャリア信号の周期に同期した周期で第１の割込信号を出力する第１の割込信号出力部と、
前記第２のキャリア信号によって生成される第２のキャリア信号の周期に同期した周期で第２の割込信号を出力する第２の割込信号出力部と、
前記制御対象の制御に関する処理を実行するタスクが少なくとも１つ割り当てられる複数のタイムパーティションを、前記第１の割込信号出力部からの第１の割込信号の出力及び前記第２の割込信号出力部からの第２の割込信号の出力に応じて切り替えてスケジューリングすることで、前記タスクを実行して前記制御対象を制御する制御部と、を備え、
前記制御部は、前記第１の割込信号及び前記第２の割込信号に関する異常として、前記第１の割込信号と前記第２の割込信号が所定順序で出力されていないことを検出した場合、前記制御対象の制御を停止する、
安全制御装置。
【請求項２】
前記制御部は、前記第１の割込信号及び前記第２の割込信号に関する異常として、さらに、前記第１の割込信号の出力から前記第２の割込信号の出力までの時間が所定の期待値と異なることを検出する、
請求項１に記載の安全制御装置。
【請求項３】
前記安全制御装置は、前記第１のキャリア信号生成部、前記第２のキャリア信号生成部、前記第１の割込信号出力部、前記第２の割込信号出力部、及び前記制御部を有する制御回路を備え、
前記制御部は、前記第１の割込信号出力部からの第１の割込信号の出力及び前記第２の割込信号出力部からの第２の割込信号の出力に応じて、前記制御回路の外部に送信信号を出力し、
前記安全制御装置は、さらに、前記制御回路からの送信信号の出力が途絶えた場合に、前記制御回路による前記制御対象の制御を停止する外部回路を有する、
請求項１又は２に記載の安全制御装置。
【請求項４】
前記制御部は、前記第１の割込信号及び前記第２の割込信号に関する異常を検出した場合、前記送信信号の出力を停止する、
請求項３に記載の安全制御装置。
【請求項５】
前記安全制御装置は、前記第１のキャリア信号生成部、前記第２のキャリア信号生成部、前記第１の割込信号出力部、前記第２の割込信号出力部、及び前記制御部を有する制御回路を備え、
前記制御部は、前記第１の割込信号及び前記第２の割込信号に関する異常の検出に応じて、前記制御回路の外部に停止指示信号を出力し、
前記安全制御装置は、さらに、前記制御回路からの停止指示信号の出力に応じて、前記制御回路による前記制御対象の制御を停止する外部回路を有する、
請求項１又は２に記載の安全制御装置。
【請求項６】
前記外部回路は、前記制御回路をリセットすることで、前記制御回路による前記制御対象の制御を停止する、
請求項３乃至５のいずれか１項に記載の安全制御装置。
【請求項７】
前記外部回路は、前記制御回路が前記制御対象を制御するために前記制御対象に出力する制御信号を回路的に遮断することで、前記制御回路による前記制御対象の制御を停止する、
請求項３乃至５のいずれか１項に記載の安全制御装置。
【請求項８】
前記安全制御装置は、前記制御回路を冗長構成となるように複数備え、
前記制御回路は、他の前記制御回路に対して、前記外部回路として動作し、
前記制御部は、前記他の制御回路による前記制御対象の制御を停止させた場合、前記制御対象を停止する制御を行う、
請求項３乃至７のいずれか１項に記載の安全制御装置。
【請求項９】
前記制御部は、前記第１の割込信号と前記第２の割込信号が所定順序で出力されていないこととして、前記第１の割込信号と前記第２の割込信号が交互に出力されていないことを検出する、
請求項１乃至８のいずれか１項に記載の安全制御装置。
【請求項１０】
前記所定の位相差は、前記第１のキャリア信号及び前記第２のキャリア信号の半周期であり、
前記第１の割込信号出力部は、前記第１のキャリア信号の１周期毎に前記第１の割込信号を出力し、
前記第２の割込信号出力部は、前記第２のキャリア信号の１周期毎に前記第２の割込信号を出力し、
前記制御部は、前記所定の期待値として、前記第１の割込信号及び前記第２の割込信号の出力間隔が同一とならないことを検出する、
請求項２に記載の安全制御装置。
【請求項１１】
制御対象の制御に関する処理を実行するタスクが少なくとも１つ割り当てられる複数のタイムパーティションをスケジューリングすることで、前記タスクを実行して前記制御対象を制御する安全制御方法であって、
前記制御対象の制御周期を規定する第１のキャリア信号の周期に同期した周期で出力される第１の割込信号を出力するステップと、
前記第１の割込信号の出力に応じて、アクティブなタイムパーティションを次のスケジューリング先のタイムパーティションに切り替えるステップと、
前記第１のキャリア信号とは同一周期かつ所定の位相差で、前記制御対象の制御周期を規定する第２のキャリア信号の周期に同期した周期で出力される第２の割込信号を出力するステップと、
前記第２の割込信号の出力に応じて、アクティブなタイムパーティションを次のスケジューリング先のタイムパーティションに切り替えるステップと、を備え、
前記第１の割込信号と前記第２の割込信号が所定順序で出力されていないことを検出した場合、前記制御対象の制御を停止する、
安全制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機能安全の確保のためにサービスロボットおよび輸送機器等に搭載される安全制御装置に関し、特に、コンピュータシステムを用いた安全制御装置に関する。
【背景技術】
【０００２】
サービスロボットは、外界センサや自己診断装置によって安全状態を常時監視し、何らかの危険を検知した場合に適切な安全制御ロジックを実行することで、機能安全を確保する必要がある。
【０００３】
上述したサービスロボットのほか、運輸機器等の電気的な原理で動作するシステムを対象とした機能安全に関する国際標準としてIEC 61508が制定されている。IEC 61508では、機能安全の確保のために設けられるシステムのことを安全関連系と呼んでいる。IEC 61508は、マイクロプロセッサ及びPLC（Programmable Logic Controller）等のハードウェアとコンピュータプログラム（ソフトウェア）によって安全関連系を構築するための様々な技法を定めている。IEC 61508で定められている技法を用いることで、コンピュータシステムを用いて安全関連系を構築することが可能となる。
【０００４】
一方で、近年、マイクロプロセッサ等のプログラマブル電子機器の処理能力が向上している。このため、マルチタスクＯＳ（Operating System）を利用し、１つのコンピュータシステム上で様々なアプリケーションプログラムを並列実行することで、サービスロボット及び自動車等の機器に搭載されている複数用途のコンピュータシステムを統合することができる。
【０００５】
例えば特許文献１に、機能安全の確保に関するアプリケーションプログラム（以下、安全関連アプリケーションと呼ぶ）と、その他のアプリケーションプログラム（以下、非安全関連アプリケーションと呼ぶ）を、別々のタイムパーティションに割り当てることで、共に１つのコンピュータシステム上で動作させる技術が開示されている。
【０００６】
また、特許文献１には、制御対象のアクチュエータのＰＷＭ制御に利用されるキャリア信号の周期に同期したキャリア割り込みを発生するようにし、割り込みの発生に応じて、タイムパーティションを切り替える技術が開示されている。これにより、制御対象の制御周期に同期した制御を行うことができるようにしている。
【０００７】
さらに、特許文献１には、複数の発信器によって、位相をずらした複数のキャリア信号を生成することで、キャリア割り込みの発生間隔を短くし、タイムパーティションの分解能（タイムパーティション切り替えの時間間隔）を、より細かくする技術が開示されている。これにより、制御対象の制御の遅延を低減することができるようにしている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２０１２／１０４９０１号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述したように、特許文献１に開示の技術によれば、位相をずらした複数のキャリア信号によって、タイムパーティション切り替えの契機となるキャリア割り込みを多重に発生させるようにすることで、タイムパーティション切り替えの時間間隔を短くし、制御対象の制御周期に同期した制御を、より高速化することができる。しかし、本願出願人は、その技術において、次に説明する課題を見出した。
【００１０】
まず、正常動作時には、図１２に例示するように動作するものとして説明する。図１２は、２つの発信器から、同一周期かつ位相が半周期ずれた２つのキャリア信号が出力される例について示している。よって、この場合には、一方のキャリア信号の１周期毎に発生するキャリア割り込み（「キャリア割込１」と図示）と、他方のキャリア信号の１周期毎に発生するキャリア割り込み（「キャリア割込２」と図示）は、等間隔で交互に発生する。
【００１１】
それに対して、図１３は、問題となる第１のケースを例示している。図１３は、一方又は両方の発信器が故障し、一方又は両方のキャリア信号の出力タイミングがずれてしまった例について示している。この場合、「キャリア割込１」と「キャリア割込２」も、発生タイミングがずれてしまい、等間隔で発生しなくなってしまう。この場合、タイムパーティション切り替えの時間間隔も等間隔ではなくなってしまうため、タイムパーティションの長さが非等間隔になってしまい、制御対象の制御に関する処理が予定通りに進まなくなってしまうという問題がある。例えば、時間が短くなってしまったタイムパーティションにおいて、予定していた処理を全て実行することができなくなってしまう。
【００１２】
次に、図１４は、問題となる第２のケースを例示している。図１４は、一方の発信器が故障し、一方のキャリア信号が出力されなくなってしまった例について示している。この場合、一方の「キャリア割込２」が発生しなくなってしまい、期待する間隔の倍の間隔で「キャリア割込１」のみが発生するようになってしまう。この場合、タイムパーティション切り替えの時間間隔も倍になってしまうため、タイムパーティションの長さが倍になってしまい、制御対象の制御に関する処理が予定通りに進まなくなってしまうという問題がある。例えば、処理の実行が予定よりも遅延してしまう。
【００１３】
キャリア割り込みの発生源（発信器及びキャリア割り込み生成回路）を１つにすることで、上述したような２つのキャリア信号の出力状態の相違、及びそれによるキャリア割り込みの発生タイミングのずれの発生を無くすことができる。しかしながら、タイムパーティション切り替えの時間間隔を短くすることができなくなってしまうため、制御対象の制御周期に同期した制御の高速性は低下してしまう。
【００１４】
本発明は、上述した知見に基づいてなされたものであって、制御対象に対する制御の高速性を維持しつつも、より安全性を向上することができる安全制御装置及び安全制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の第１の態様に係る安全制御装置は、制御対象の制御周期を規定する第１のキャリア信号を生成する第１のキャリア信号生成部と、前記第１のキャリア信号とは同一周期かつ所定の位相差で、前記制御対象の制御周期を規定する第２のキャリア信号を生成する第２のキャリア信号生成部と、前記第１のキャリア信号生成部によって生成される第１のキャリア信号の周期に同期した周期で第１の割込信号を出力する第１の割込信号出力部と、前記第２のキャリア信号によって生成される第２のキャリア信号の周期に同期した周期で第２の割込信号を出力する第２の割込信号出力部と、前記制御対象の制御に関する処理を実行するタスクが少なくとも１つ割り当てられる複数のタイムパーティションを、前記第１の割込信号出力部からの第１の割込信号の出力及び前記第２の割込信号出力部からの第２の割込信号の出力に応じて切り替えてスケジューリングすることで、前記タスクを実行して前記制御対象を制御する制御部と、を備え、前記制御部は、前記第１の割込信号及び前記第２の割込信号に関する異常として、前記第１の割込信号と前記第２の割込信号が所定順序で（例えば、交互に）出力されていないことを検出した場合、前記制御対象の制御を停止するものである。
【００１６】
本発明の第２の態様に係る安全制御方法は、制御対象の制御に関する処理を実行するタスクが少なくとも１つ割り当てられる複数のタイムパーティションをスケジューリングすることで、前記タスクを実行して前記制御対象を制御する安全制御方法であって、前記制御対象の制御周期を規定する第１のキャリア信号の周期に同期した周期で出力される第１の割込信号を出力するステップと、前記第１の割込信号の出力に応じて、アクティブなタイムパーティションを次のスケジューリング先のタイムパーティションに切り替えるステップと、前記第１のキャリア信号とは同一周期かつ所定の位相差で、前記制御対象の制御周期を規定する第２のキャリア信号の周期に同期した周期で出力される第２の割込信号を出力するステップと、前記第２の割込信号の出力に応じて、アクティブなタイムパーティションを次のスケジューリング先のタイムパーティションに切り替えるステップと、を備え、前記第１の割込信号と前記第２の割込信号が所定順序で（例えば、交互に）出力されていないことを検出した場合、前記制御対象の制御を停止するものである。
【発明の効果】
【００１７】
上述した本発明の各態様によれば、タイムパーティションの切り替え契機となる第１の割込信号と第２の割込信号が所定順序で出力されておらず、制御対象の制御に関する処理が予定通りに進まなくなってしまった場合に、制御対象の制御を停止しているため、より安全性を向上することができる。また、第１の割込信号及び第２の割込信号は、位相差のある第１のキャリア信号及び第２のキャリア信号に同期して生成しているため、タイムパーティション切り替えの時間間隔を短くできる。すなわち、本発明の各態様によれば、制御対象に対する制御の高速性を維持しつつも、より安全性を向上することができる安全制御装置及び安全制御方法を提供することができる。
【図面の簡単な説明】
【００１８】
【図１】発明の実施の形態にかかる安全制御装置の構成例を示すブロック図である。
【図２】発明の実施の形態におけるタイム・パーティショニングの概念を説明するための図である。
【図３】発明の実施の形態におけるリソース・パーティショニングの概念を説明するための概念図である。
【図４】発明の実施の形態にかかる制御対象の一例を示す図である。
【図５】発明の実施の形態にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図６Ａ】スケジューリングパターンの具体例を示す図である。
【図６Ｂ】スケジューリングパターンの具体例を示す図である。
【図７】パーティションスケジューラによるパーティション・スケジューリング処理手順の具体例を示すフローチャートである。
【図８】アクティブなタイムパーティションとＰＷＭ信号の変化を示す図である。
【図９】パーティションスケジューラによるキャリア割り込み異常検出処理手順の具体例を示すフローチャートである。
【図１０】発明の他の実施の形態にかかる安全制御装置の構成例を示すブロック図である。
【図１１】発明の他の実施の形態にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１２】正常時のキャリア割り込みに応じたタイムパーティション切り替えの一例を示す図である。
【図１３】異常時のキャリア割り込みに応じたタイムパーティション切り替えの一例を示す図である。
【図１４】異常時のキャリア割り込みに応じたタイムパーティション切り替えの一例を示す図である。
【発明を実施するための形態】
【００１９】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００２０】
＜発明の実施の形態＞
本実施の形態にかかる安全制御装置１は、サービスロボットや運輸機器等に搭載されて機能安全確保のための安全制御を実行する。安全制御装置１は、安全関連アプリケーションと非安全関連アプリケーションを同一のコンピュータシステムで実行するよう構成される。図１は、本実施の形態にかかる安全制御装置１の構成例を示すブロック図である。
【００２１】
安全制御装置１は、リセット回路１４及びマイクロコントローラ１５を有する。マイクロコントローラ１５は、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２、発信器１６、１８、及び割り込み信号生成回路１７、１９を有する。
【００２２】
プロセッサ１０は、プログラム（命令ストリーム）の取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、図１では、１つのプロセッサ１０のみを示しているが、安全制御装置１は、複数のプロセッサ１０を有するマルチプロセッサ構成であってもよい。また、プロセッサ１０は、マルチコアプロセッサでもよい。プロセッサ１０は、システムプログラムとしてのオペレーティングシステム（ＯＳ）１００を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。プロセッサ１０は、制御対象に対する制御内容を指示する指令値をＩ／Ｏポート１２に出力する。プロセッサ１０は、制御部に対応する。
【００２３】
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。本実施の形態のプロセッサ１０が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
【００２４】
実行用メモリ１１は、プロセッサ１０によるプログラム実行のために使用されるメモリである。実行用メモリ１１には、不揮発性メモリ１３からロードされたプログラム（ＯＳ１００及びアプリケーション１０１〜１０３等）、プロセッサ１０の入出力データ等が記憶される。なお、プロセッサ１０は、プログラムを不揮発性メモリ１３から実行用メモリ１１にロードすることなく、これらのプログラムを不揮発性メモリ１３から直接実行してもよい。
【００２５】
具体的には、実行用メモリ１１は、ＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）等のランダムアクセス可能な揮発性メモリとすればよい。図１の実行用メモリ１１は、論理的な構成単位を示している。すなわち、実行用メモリ１１は、例えば、複数のＳＲＡＭデバイスの組み合わせ、複数のＤＲＡＭデバイスの組み合わせ、又はＳＲＡＭデバイスとＤＲＡＭデバイスの組み合わせでもよい。
【００２６】
Ｉ／Ｏポート１２は、外部デバイスとの間のデータ送受信に使用される。例えば、安全制御装置１がサービスロボットに搭載される場合であれば、外部デバイスは、サービスロボット周囲の障害物を計測可能な視覚センサ、サービスロボットを動作させるアクチュエータ等である。
【００２７】
Ｉ／Ｏポート１２は、プロセッサ１０から出力された指令値に基づいてＰＷＭ信号を生成してアクチュエータに出力する。これによって、アクチュエータを有する制御対象が制御される。すなわち、本実施の形態では、外部デバイスにおけるアクチュエータが、ＰＷＭ信号によって制御されるモータである場合について説明する。Ｉ／Ｏポート１２は、発信器１６、１８から出力されたキャリア信号の１周期毎に、アクチュエータに出力するＰＷＭ信号値を、プロセッサ１０から出力された指令値が示す制御内容となるように更新する。よって、Ｉ／Ｏポート１２は、指令値に基づいてＰＷＭ信号を生成するＰＷＭ回路（図示せず）を含む。
【００２８】
不揮発性メモリ１３は、電力の供給を受けることなく、実行用メモリ１１に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ１３は、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ１３は、ＯＳ１００及びアプリケーション１０１〜１０３を格納する。なお、不揮発性メモリ１３の少なくとも一部は安全制御装置１から取り外し可能に構成されてもよい。例えば、アプリケーション１０１〜１０３が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ１３の少なくとも一部は、安全制御装置１の外部に配置されてもよい。
【００２９】
ＯＳ１００は、プロセッサ１０によって実行されることにより、プロセッサ１０及び実行用メモリ１１及び不揮発性メモリ１３等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
【００３０】
さらに、機能安全の確保に関連する安全監視アプリケーション１０１及び安全制御アプリケーション１０３の通常制御アプリケーション１０２からの独立性を高めるため、ＯＳ１００は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２を含む。
【００３１】
このうち、時間的な保護は、プロセッサ１０の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ１０の実行時間をパーティショニングし、各パーティション（タイムパーティションと呼ぶ）にタスク（プロセス又はスレッド）を割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、各タイムパーティション（以下、ＴＰと略称する場合がある。）に割り当てられたタスクに対して、プロセッサ１０の実行時間を含む資源の利用を保証する。
【００３２】
図２は、タイム・パーティショニングに関する概念図である。図２の例では、予め定められた１サイクル時間を３つのＴＰ１、ＴＰ２及びＴＰ３に分割する例を示している。例えば、１サイクル時間を１００Ｔｉｃｋとした場合、このうち前半の２０ＴｉｃｋがＴＰ１、中間の３０ＴｉｃｋがＴＰ２、後半の５０ＴｉｃｋがＴＰ３と規定される。
【００３３】
また、図２の例では、第１アプリケーション（ＡＰＬ１）〜第４アプリケーション（ＡＰＬ４）が、ＴＰ１〜ＴＰ３のいずれかに割り当てられている。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、時間の経過に応じて、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。そして、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００３４】
一方、空間的な保護は、実行用メモリ１１及びＩ／Ｏポート１２を含む固定的な資源をパーティショニングし、各パーティション（リソースパーティションと呼ぶ）にタスクを割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、予め割り当てられたリソースパーティション（以下、ＲＰと略称する場合がある。）を超えてタスクが他のリソースにアクセスすることを禁止する。
【００３５】
図３は、リソース・パーティショニングに関する概念図である。図３の例では、２つのＲＰ（ＲＰ１及びＲＰ２）を示している。ＲＰ１には、実行用メモリ１１及び不揮発性メモリ１３の一部（Ａ領域）と、Ｉ／Ｏポート１２の一部（ポートＡ）が割り当てられている。また、ＲＰ２には、実行用メモリ１１及び不揮発性メモリ１３の他の一部（Ｂ領域）と、Ｉ／Ｏポート１２の他の一部（ポートＢ）が割り当てられている。ＲＰ１からはＲＰ２に割り当てられたリソースへのアクセスが禁止され、ＲＰ２からはＲＰ１に割り当てられたリソースへのアクセスが禁止される。
【００３６】
なお、全てのリソースがいずれかのＲＰに排他的に割り当てられる必要はない。つまり、複数のＲＰによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータに、通常制御アプリケーション１０２及び安全制御アプリケーション１０３の双方からアクセスできる必要があるものとする。この場合、通常制御アプリケーション１０２が属するＲＰと安全制御アプリケーション１０３が属するＲＰによって、アクチュエータを制御するためのＩ／Ｏポートを共有するとよい。
【００３７】
図１に戻り説明を続ける。アプリケーション１０１〜１０３は、ＯＳ１００及びプロセッサ１０によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション１０１は、通常制御アプリケーション１０２の実行状況の監視と、安全制御アプリケーション１０３の実行状況の監視と、Ｉ／Ｏポート１２へのデータの入出力と、Ｉ／Ｏポート１２への入出力データの監視と、をプロセッサ１０に実行させるための命令コードを含む。さらに、安全監視アプリケーション１０１は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全監視アプリケーション１０１は、安全関連アプリケーションである。
【００３８】
また、通常制御アプリケーション１０２は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、通常制御アプリケーション１０２は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、通常制御アプリケーション１０２は、非安全関連アプリケーションである。
【００３９】
また、安全制御アプリケーション１０３は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、安全制御アプリケーション１０３は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全制御アプリケーション１０３は、安全関連アプリケーションである。
【００４０】
リセット回路１４は、ＯＳ１００からの信号に基づき、マイクロコントローラ１５のリセットを行う。パーティションスケジューラ２１からリセット回路１４に定期的に送信信号を送信するようにし、リセット回路１４は、パーティションスケジューラ２１からの送信信号が途絶えた場合に、マイクロコントローラ１５をリセットする。例えば、パーティションスケジューラ２１は、後述するように、１Ｔｉｃｋごとに動作するタイミングで送信信号を送信する。また、ＯＳ１００で異常を検知した場合、又は、アプリケーション１０１〜１０３のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ２１がリセット回路１４にリセット信号を送信するようにして、それに応じて、リセット回路１４がマイクロコントローラ１５をリセットするようにしてもよい。このようにすることで、マイクロコントローラ１５に不具合が発生した場合に、マイクロコントローラ１５をリセットして復旧することができる。
【００４１】
発信器１６は、キャリア信号を生成して、生成したキャリア信号をＩ／Ｏポート１２及び割り込み信号生成回路１７に出力する。発信器１８は、キャリア信号を生成して、生成したキャリア信号をＩ／Ｏポート１２及び割り込み信号生成回路１９に出力する。発信器１６及び発信器１８は、同一周期かつ位相が異なるキャリア信号を生成する。以下、発信器１６及び発信器１８から出力される２つのキャリア信号は、位相が半周期ずれているものとして説明する。発信器１６、１８は、キャリア信号生成部に対応する。
【００４２】
割り込み信号生成回路１７は、発信器１６から出力されたキャリア信号の周期に基づいて、割り込み信号を生成してプロセッサ１０に出力する。具体的には、割り込み信号生成回路１７は、キャリア信号の谷部分又は山部分を検出したときに、割り込み信号を生成してプロセッサ１０に出力する。つまり、キャリア信号の三角波の頂点を検出したときに、割り込み信号を生成してプロセッサ１０に出力する。これによって、発信器１６から出力されるキャリア信号の１周期毎に、割り込み信号生成回路１７からプロセッサ１０に対してキャリア割り込みが発生する。
【００４３】
割り込み信号生成回路１９は、割り込み信号生成回路１７と同様に、発信器１８から出力されたキャリア信号に基づいて、割り込み信号を生成してプロセッサ１０に出力する。これによって、発信器１８から出力されるキャリア信号の１周期毎に、割り込み信号生成回路１９からプロセッサ１０に対してキャリア割り込みが発生する。割り込み信号生成回路１７、１９は、割り込み信号出力部に対応する。
【００４４】
よって、キャリア信号の１周期分の時間の間に、割り込み信号生成回路１７と割り込み信号生成回路１９とから合計２つの割り込み信号が生成され、プロセッサ１０に出力されることになる。また、上述したように、割り込み信号生成回路１７と割り込み信号生成回路１９に入力される２つのキャリア信号は、同一周期かつ半周期ずれているため、割り込み信号生成回路１７と割り込み信号生成回路１９から出力される２つの割り込み信号も、同一周期かつ半周期ずれたタイミングで出力される。すなわち、割り込み信号は、等間隔で、割り込み信号生成回路１７と割り込み信号生成回路１９から交互に出力されることになる。
【００４５】
以下、上述した安全制御装置１の制御対象が、図４に示す倒立二輪車２００である場合について例示する。安全制御装置１は、倒立二輪車２００の筐体内に搭載される。倒立二輪車２００は、ハンドル２０３を把持して搭乗した搭乗者を、左右の車輪２０１、２０２を回転させることで輸送する。この場合、外部デバイスとなる各種センサは、倒立二輪車２００の姿勢角を導出するためのピッチ角速度をセンサ値として検出するジャイロセンサや、倒立二輪車２００の左右それぞれの車輪２０１、２０２の回転角をセンサ値として検出する回転角センサ等となる。また、外部デバイスとなるアクチュエータは、倒立二輪車２００の左車輪２０１を回転させるモータ、及び右車輪２０２を回転させるモータとなる。
【００４６】
ここで、Ｉ／Ｏポート１２は、上述したように、発信器１６及び発信器１８からの２つのキャリア信号に基づいて、モータを制御することになる。Ｉ／Ｏポート１２は、２つのキャリア信号それぞれによって、２軸のモータのそれぞれを制御する。すなわち、Ｉ／Ｏポート１２は、発信器１６からのキャリア信号に基づいて左車輪２０１を回転させるモータを制御し、発信器１８からのキャリア信号に基づいて右車輪２０２を回転させるモータを制御する。つまり、プロセッサ１０は、各軸の指令値をＩ／Ｏポート１２に出力する。そして、Ｉ／Ｏポート１２は、プロセッサ１０からの各軸の指令値に基づいて、各軸のＰＷＭ信号を生成して各軸（各モータ）に出力する。ここで、Ｉ／Ｏポート１２は、発信器１６からのキャリア信号の１周期毎に、プロセッサ１０からの左車輪２０１のモータに対する指令値に基づいて、左車輪２０１のモータに対するＰＷＭ信号を更新する。また、Ｉ／Ｏポート１２は、発信器１８からのキャリア信号の１周期毎に、プロセッサ１０からの右車輪２０２のモータに対する指令値に基づいて、右車輪２０２のモータに対するＰＷＭ信号を更新する。
【００４７】
続いて以下では、パーティションスケジューラ２１と、アプリケーション１０１〜１０３の起動により生成されるタスク２６〜３１と、の関係について、図５を用いて説明する。図５は、ＯＳ１００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ２１とタスク２６〜３１との関係を示す図である。
【００４８】
なお、図５では、マイクロコントローラ１５の外部にリセット回路１４を備える構成を例示しているが、マイクロコントローラ１５の内部にリセット回路１４を含む構成としてもよい。
【００４９】
プロセッサ１０は、割り込み信号生成回路１７及び割り込み信号生成回路１９のそれぞれからからの割り込み信号の出力されたときに、パーティションスケジューラ２１を動作させる。本実施の形態では、パーティションスケジューラ２１の動作周期（割り込み信号の出力周期）を、１Ｔｉｃｋであるとして説明する。このため、プロセッサ１０によりＯＳ１００が実行されることで、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作すると共に、各ＴＰにおいて、タスクスケジューラ２３、２４、２５およびタスク（安全監視タスク２６、２７、通常制御タスク２８、２９、安全制御タスク３０、３１）が動作する。
【００５０】
パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作し、ＴＰの切り替え（パーティション・スケジューリング）を行う。パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１は、選択したＴＰに関するタスクスケジューラの動作を開始させる。
【００５１】
パーティションスケジューラ２１によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ２１は、スケジューリングテーブル２２を参照し、ＴＰの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
【００５２】
スケジューリングテーブル２２は、ＴＰの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル２２は、例えば、実行用メモリ１１に予め格納されている。なお、スケジューリングテーブル２２は、少なくとも２つの異なるスケジューリングパターンを保持している。１つは、安全監視タスク２６、２７による異常検知が行われていない場合（つまり通常時）に適用されるスケジューリングパターンである。もう１つは、安全監視タスク２６、２７によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
【００５３】
図６Ａは、通常制御スケジューリングパターンの具体例を示している。図６Ａでは、１サイクル時間のうち、通常制御タスク２８、２９が属する通常制御タイムパーティションＴＰ２が最初の１Ｔｉｃｋ（Ｔ１）と、その次の１Ｔｉｃｋ（Ｔ２）に割り当てられており、安全監視タスク２６、２７が属する安全監視タイムパーティションＴＰ１がその次の１Ｔｉｃｋ（Ｔ３）と、その次となる最後の１Ｔｉｃｋ（Ｔ４）に割り当てられている。図６Ａのスケジューリングパターンによれば、通常制御タスク２８、２９と安全監視タスク２６、２７が繰り返しスケジューリングされる。
【００５４】
以下、Ｔ１では、通常制御タスク２８が動作し、Ｔ２では、通常制御タスク２９が動作し、Ｔ３では、安全監視タスク２６が動作し、Ｔ４では、安全監視タスク２７が動作するものとして説明する。しかしながら、これには限られず、通常制御タスク２８と通常制御タスク２９とを異なる通常制御ＴＰに属するようにし、Ｔ１には通常制御タスク２８が属する通常制御ＴＰを割り当て、Ｔ２には通常制御タスク２９が属する通常制御ＴＰを割り当てるようにしてもよい。同様に、安全監視タスク２６と安全監視タスク２７とを異なる安全監視ＴＰに属するようにし、Ｔ３には安全監視タスク２６が属する安全監視ＴＰを割り当て、Ｔ４には安全監視タスク２７が属する安全監視ＴＰを割り当てるようにしてもよい。なお、この場合には、当然に、それぞれのＴＰにおいて、それぞれのＴＰに属するタスクを管理するタスクスケジューラも動作することになる。
【００５５】
図６Ｂは、安全制御スケジューリングパターンの具体例を示している。図６Ｂでは、１サイクル時間ののうち、安全制御タスク３０、３１が属する安全制御タイムパーティションＴＰ３が最初の１Ｔｉｃｋ（Ｔ５）と、その次の１Ｔｉｃｋ（Ｔ６）に割り当てられており、安全監視タスク２６、２７が属する安全監視タイムパーティションＴＰ１がその次の１Ｔｉｃｋ（Ｔ７）と、その次となる最後の１Ｔｉｃｋ（Ｔ８）に割り当てられている。図６Ｂのスケジューリングパターンによれば、安全制御タスク３０、３１と安全監視タスク２６、２７が繰り返しスケジューリングされる。
【００５６】
以下、Ｔ５では、安全制御タスク３０が動作し、Ｔ６では、安全制御タスク３１が動作し、Ｔ７では、安全監視タスク２６が動作し、Ｔ８では、安全監視タスク２７が動作するものとして説明する。しかしながら、これには限られず、安全制御タスク３０と安全制御タスク３１とを異なる安全制御ＴＰに属するようにし、Ｔ５には安全制御タスク３０が属する安全制御ＴＰを割り当て、Ｔ６には安全制御タスク３１が属する安全制御ＴＰを割り当てるようにしてもよい。同様に、安全監視タスク２６と安全監視タスク２７とを異なる安全監視ＴＰに属するようにし、Ｔ７には安全監視タスク２６が属する安全監視ＴＰを割り当て、Ｔ８には安全監視タスク２７が属する安全監視ＴＰを割り当てるようにしてもよい。なお、この場合には、当然に、それぞれのＴＰにおいて、それぞれのＴＰに属するタスクを管理するタスクスケジューラも動作することになる。
【００５７】
図５に戻り説明を続ける。タスクスケジューラ２３、２４、２５は、それぞれが属するＴＰ内でのタスクのスケジューリングを行う。各ＴＰ内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図５では、各ＴＰはそれぞれ２つのタスクのみを含むものとして図示しているが、１つ又は３つ以上のタスクが含まれるようにしてもよい。
【００５８】
安全監視タスク２６、２７は、安全監視アプリケーション１０１の起動によって生成されるタスクである。図５の例では、安全監視タスク２６、２７は、ＴＰ１及びＲＰ１に割り当てられている。安全監視タスク２６、２７は、非安全関連アプリケーションである通常制御タスク２８、２９の実行状況の監視と、安全関連アプリケーションである安全制御タスク３０、３１の実行状況の監視と、Ｉ／Ｏポート１２へのデータの入出力と、Ｉ／Ｏポート１２の入出力データの監視とを実行する。さらに、安全監視タスク２６、２７は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５９】
具体的には、安全監視タスク２６は、通常制御タスク２８又は安全制御タスク３０から提供された指令値をＩ／Ｏポート１２に出力することによって、モータを制御する。安全監視タスク２６は、Ｉ／Ｏポート１２を介して、センサからセンサが計測したデータ（センサ値）を取得する。安全監視タスク２６は、取得したセンサ値を通常制御タスク２８及び安全制御タスク３０に提供する。また、安全監視タスク２７は、通常制御タスク２９又は安全制御タスク３１から提供された指令値をＩ／Ｏポート１２に出力することによって、モータを制御する。安全監視タスク２７は、Ｉ／Ｏポート１２を介して、センサからセンサが計測したデータ（センサ値）を取得する。安全監視タスク２７は、取得したセンサ値を通常制御タスク２９及び安全制御タスク３１に提供する。例えば、安全監視タスク２６、２７は、タスク間通信によって、取得したセンサ値を通常制御タスク２８、２９及び安全制御タスク３０、３１に提供する。なお、このときに、実行用メモリ１１を介して、センサ値が提供されていてもよい。
【００６０】
通常制御タスク２８、２９は、通常制御アプリケーション１０２の起動によって生成されるタスクである。図５の例では、通常制御タスク２８、２９は、ＴＰ２及びＲＰ２に割り当てられている。通常制御タスク２８、２９は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。さらに、通常制御タスク２８、２９は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００６１】
具体的には、通常制御タスク２８は、安全監視タスク２６から提供されたセンサ値に基づいて、モータの制御計算をする。通常制御タスク２８は、制御計算によって算出した指令値を安全監視タスク２６に提供して、その指令値の出力を、安全監視タスク２６に指示する。また、通常制御タスク２９は、安全監視タスク２７から提供されたセンサ値に基づいて、モータの制御計算をする。通常制御タスク２９は、制御計算によって算出した指令値を安全監視タスク２７に提供して、その指令値の出力を、安全監視タスク２７に指示する。例えば、通常制御タスク２８、２９は、タスク間通信によって、指令値を安全監視タスク２６、２７に提供する。なお、このときに、実行用メモリ１１を介して、指令値が提供されていてもよい。安全監視タスク２６、２７は、通常制御タスク２８、２９からの指令値の取得に応じて、その指令値をＩ／Ｏポート１２に出力する。
【００６２】
安全制御タスク３０、３１は、安全制御アプリケーション１０３の起動によって生成されるタスクである。図５の例では、安全制御タスク３０、３１は、ＴＰ３及びＲＰ３に割り当てられている。安全制御タスク３０、３１は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。さらに、安全制御タスク３０、３１は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００６３】
具体的には、安全制御タスク３０は、安全監視タスク２６から提供されたセンサ値に基づいて、モータの制御計算をする。安全制御タスク３０は、制御計算によって算出した指令値を安全監視タスク２６に提供して、その指令値の出力を、安全監視タスク２６に指示する。また、安全制御タスク３１は、安全監視タスク２７から提供されたセンサ値に基づいて、モータの制御計算をする。安全制御タスク３１は、制御計算によって算出した指令値を安全監視タスク２７に提供して、その指令値の出力を、安全監視タスク２７に指示する。例えば、安全制御タスク３０、３１は、タスク間通信によって、指令値を安全監視タスク２６、２７に提供する。なお、このときに、実行用メモリ１１を介して、指令値が提供されていてもよい。安全監視タスク２６、２７は、安全制御タスク３０、３１からの指令値の取得に応じて、その指令値をＩ／Ｏポート１２に出力する。
【００６４】
なお、各タスクからパーティションスケジューラ２１へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがＯＳ１００のシステムコール（サービスコール）を呼び出し、ＯＳ１００を介して、パーティションスケジューラ２１に結果を通知することができる。例えば、タスク間通信を行うシステムコールを呼び出す。また、例えば、タスクの実行状況に関するフラグを実行用メモリ１１に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ２１がフラグの設定値に応じてタスクの実行状況を判断することもできる。
【００６５】
上述したように、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作し、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１が、選択したＴＰに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ２３、２４、２５が動作を開始することでタスクのスケジューリングが行われ、プロセッサ１０が、タスクスケジューラ２３、２４、２５によりスケジューリングされた順序に従って、ＴＰ内でのタスクを実行していく。これによって、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００６６】
続いて以下では、パーティションスケジューラ２１によるパーティション・スケジューリングについて、図７を用いて説明する。図７は、パーティションスケジューラ２１のパーティション・スケジューリング処理手順の具体例を示すフローチャートである。
【００６７】
ここでは、図７では、図５Ａに示す通常制御スケジューリングパターンと、図５Ｂに示す安全制御スケジューリングパターンに従って、スケジューリングを実行する例について説明する。
【００６８】
以下、ＴＰ２が割り当てられ、通常制御タスク２８が動作する期間（Ｔ１）を「Ｔ２−１」と呼び、ＴＰ２が割り当てられ、通常制御タスク２９が動作する期間（Ｔ２）を「Ｔ２−２」と呼ぶ。また、ＴＰ１が割り当てられ、安全監視タスク２６が動作する期間（Ｔ３、Ｔ７）を「Ｔ１−１」と呼び、ＴＰ１が割り当てられ、安全監視タスク２７が動作する期間（Ｔ４、Ｔ８）を「Ｔ１−１」と呼ぶ。また、ＴＰ３が割り当てられ、安全制御タスク３０が動作する期間（Ｔ５）を「Ｔ３−１」と呼び、ＴＰ３が割り当てられ、安全制御タスク３１が動作する期間（Ｔ６）を「Ｔ３−２」と呼ぶ。
【００６９】
また、以下の説明では、安全監視タスク２６、通常制御タスク２８、及び安全制御タスク３０が、左車輪２０１のモータ制御に関する処理を実行し、安全監視タスク２７、通常制御タスク２９、及び安全制御タスク３１が、右車輪２０２のモータ制御に関する処理を実行する例について説明する。しかしながら、安全監視タスク２６、通常制御タスク２８、及び安全制御タスク３０が、右車輪２０２のモータ制御に関する処理を実行し、安全監視タスク２７、通常制御タスク２９、及び安全制御タスク３１が、左車輪２０１のモータ制御に関する処理を実行するようにしてもよい。
【００７０】
まず、安全監視タスク２６、２７によって異常が検出されておらず、通常制御スケジューリングパターンに基づいて動作をしている状況であるものとする。また、パーティションスケジューラ２１が、キャリア割り込みの発生に応じてＴＰのスケジューリング動作を開始し、通常制御スケジューリングパターンに基づいて、アクティブなＴＰをＴＰ２に切り替えた時点から説明を開始する（Ｓ１）。なお、このＴＰの期間は、「Ｔ２−１」であるものとする。
【００７１】
パーティションスケジューラ２１は、アクティブにしたＴＰ２に属するタスクスケジューラ２４を動作させる。動作を開始したタスクスケジューラ２４は、ＴＰ２内のタスクを優先度に応じて実行する。そして、タスクスケジューラ２４によって実行が開始された通常制御タスク２８は、安全監視タスク２６から左車輪２０１のモータに関するセンサ値を取得し、取得したセンサ値に基づいて制御計算を行って、左車輪２０１のモータに対する指令値を算出する（Ｓ２）。通常制御タスク２８は、算出した指令値を安全監視タスク２６に出力する。
【００７２】
パーティションスケジューラ２１は、次のキャリア割り込みの発生に応じてＴＰのスケジューリング動作を開始し、通常制御スケジューリングパターンに基づいて、アクティブなＴＰをＴＰ２に切り替える（Ｓ３）。すなわち、アクティブなＴＰをＴＰ２のままとする。なお、このＴＰの期間は、「Ｔ２−２」となる。
【００７３】
パーティションスケジューラ２１は、アクティブにしたＴＰ２に属するタスクスケジューラ２４を動作させる。動作を開始したタスクスケジューラ２４は、ＴＰ２内のタスクを優先度に応じて実行する。そして、タスクスケジューラ２４によって実行が開始された通常制御タスク２９は、安全監視タスク２７から右車輪２０２のモータに関するセンサ値を取得し、取得したセンサ値に基づいて制御計算を行い、右車輪２０２のモータに対する指令値を算出する（Ｓ４）。通常制御タスク２９は、算出した指令値を安全監視タスク２７に出力する。
【００７４】
パーティションスケジューラ２１は、次のキャリア割り込みの発生に応じてＴＰのスケジューリング動作を開始し、通常制御スケジューリングパターンに基づいて、アクティブなＴＰをＴＰ２からＴＰ１に切り替える（Ｓ５）。なお、このＴＰの期間は、「Ｔ１−１」となる。
【００７５】
パーティションスケジューラ２１は、アクティブにしたＴＰ１に属するタスクスケジューラ２３を動作させる。動作を開始したタスクスケジューラ２３は、ＴＰ１内のタスクを優先度に応じて実行する。これにより、安全監視タスク２６が動作を開始する（Ｓ６）。そして、タスクスケジューラ２３によって実行が開始された安全監視タスク２６は、通常制御タスク２８の実行状況の監視と、Ｉ／Ｏポート１２の入出力データの監視を行い、これらが正常であるか判断する（Ｓ７）。例えば、安全監視タスク２６は、通常制御タスク２８から出力された指令値を取得し、取得した指令値が正常な範囲内であるか否かを判断する。安全監視タスク２６は、指令値が正常な範囲内である場合には、Ｉ／Ｏポート１２の入出力データが正常であると判断し、指令値が正常な範囲内でない場合には、Ｉ／Ｏポート１２の入出力データが異常であると判断する。
【００７６】
正常であると判断した場合（Ｓ７：Ｙｅｓ）、安全監視タスク２６は、外部デバイスに対する出力を実施する（Ｓ８）。具体的には、安全監視タスク２６は、通常制御タスク２８から取得した指令値を、左車輪２０１のモータに対する指令値としてＩ／Ｏポート１２に出力する。
【００７７】
パーティションスケジューラ２１は、次のキャリア割り込みの発生に応じてＴＰのスケジューリング動作を開始し、通常制御スケジューリングパターンに基づいて、アクティブなＴＰをＴＰ１に切り替える（Ｓ９）。すなわち、アクティブなＴＰをＴＰ１のままとする。なお、このＴＰの期間は、「Ｔ１−２」となる。
【００７８】
パーティションスケジューラ２１は、アクティブにしたＴＰ１に属するタスクスケジューラ２３を動作させる。動作を開始したタスクスケジューラ２３は、ＴＰ１内のタスクを優先度に応じて実行する。これにより、安全監視タスク２７が動作を開始する（Ｓ１０）。そして、タスクスケジューラ２３によって実行が開始された安全監視タスク２７は、通常制御タスク２９の実行状況の監視と、Ｉ／Ｏポート１２の入出力データの監視を行い、これらが正常であるか判断する（Ｓ１１）。例えば、安全監視タスク２７は、通常制御タスク２９から出力された指令値を取得し、取得した指令値が正常な範囲内であるか否かを判断する。安全監視タスク２７は、指令値が正常な範囲内である場合には、Ｉ／Ｏポート１２の入出力データが正常であると判断し指令値が正常な範囲内でない場合には、Ｉ／Ｏポート１２の入出力データが異常であると判断する。
【００７９】
正常であると判断した場合（Ｓ１１：Ｙｅｓ）、安全監視タスク２７は、外部デバイスに対する出力を実施する（Ｓ１２）。具体的には、安全監視タスク２７は、通常制御タスク２９から取得した指令値を、右車輪２０２のモータに対する指令値としてＩ／Ｏポート１２に出力する。
【００８０】
ここまでで、通常制御スケジューリングパターンにおける１サイクル時間が終了することになる。よって、次のキャリア割り込みの発生時には、ステップＳ１から処理が再開される。
【００８１】
一方で、ステップＳ７、Ｓ１１において、異常であると判断した場合（Ｓ７：Ｎｏ、Ｓ１１：Ｎｏ）、安全監視タスク２６又は安全監視タスク２７は、パーティションスケジューラ２１に対して、その結果を通知する。そして、パーティションスケジューラ２１は、安全監視タスク２６又は安全監視タスク２７からの異常の判断の通知に応じて、ＴＰのスケジューリングに使用するスケジューリングパターンを、通常制御スケジューリングパターンから安全制御スケジューリングパターンに切り替える（Ｓ１３）。
【００８２】
すなわち、以降は、上述の処理と同様に、パーティションスケジューラ２１によって、キャリア割り込みの発生に応じて、「ＴＰ３−１」、「ＴＰ３−２」、「ＴＰ１−１」、「ＴＰ１−２」の順に、ＴＰのスケジューリングが実施される。
【００８３】
なお、このとき、安全制御タスク３０、３１は、例えば、安全監視タスク２６、２７から取得したセンサ値に基づいて、倒立二輪車２００を倒立制御しつつ異常停止させるようなＰＷＭ信号を生成する指令値を算出する。具体的には、安全制御タスク３０は、左車輪２０１のモータに対する指令値を算出し、安全制御タスク３１は、右車輪２０２のモータに対する指令値を算出する。
【００８４】
以上に説明した処理手順によれば、ＰＷＭ制御におけるキャリア信号の周期に同期した制御対象の制御を実現することができる。図８を参照して、その動作について説明する。図８は、上述した処理手順におけるアクティブなＴＰとＰＷＭ信号の変化を示す図である。
【００８５】
図８に示すように、２つのキャリア信号のそれぞれの１周期毎に、キャリア割り込みが発生する。ここでは、発信器１６からのキャリア信号に基づいて発生するキャリア割り込みを「キャリア割込１」と呼び、発信器１８からのキャリア信号に基づいて発生するキャリア割り込みを「キャリア割込２」と呼ぶ。また、「キャリア割込１」を発生させる発信器１６からのキャリア信号は、倒立二輪車２００の左車輪２０１のモータに対するＰＷＭ信号の生成に利用され、「キャリア割込２」を発生させる発信器１８からのキャリア信号は、倒立二輪車２００の右車輪２０２のモータに対するＰＷＭ信号の生成に利用されるものとする。
【００８６】
まず、ＴＰ１−１において、安全監視タスク２６は、左車輪２０１のモータに対する指令値を更新する。ここで、上述したように、ＰＷＭ信号は、キャリア信号の１周期単位で更新される。そのため、Ｉ／Ｏポート１２において、発信器１６からのキャリア信号の次の１周期（ＴＰ２−１〜ＴＰ２−２）で、更新後の指令値に基づいて、左車輪２０１のモータに対するＰＷＭ信号が更新される。すなわち、キャリア信号において、指令値を更新した周期の次の周期には、その指令値がＰＷＭ信号に反映される。
【００８７】
また、ＴＰ１−２において、安全監視タスク２７は、右車輪２０２のモータに対する指令値を更新する。そのため、Ｉ／Ｏポート１２において、発信器１８からのキャリア信号の次の１周期（ＴＰ２−２〜ＴＰ１−１）で、更新後の指令値に基づいて、右車輪２０２のモータに対するＰＷＭ信号が更新される。すなわち、キャリア信号において、指令値を更新した周期の次の周期には、その指令値がＰＷＭ信号に反映される。
【００８８】
このように、ＴＰ２に属する通常制御タスク２８、２９は、制御計算によって指令値を生成して、生成した指令値の出力を安全監視タスク２６、２７に指示する主制御を行う。その次のキャリア信号の１周期で、ＴＰ１に属する安全監視タスク２６、２７は、通常制御タスク２８、２９から提供された指令値をＩ／Ｏポート１２に出力するモータアンプ制御を行う。その次のキャリア信号の１周期で、Ｉ／Ｏポート１２によって、指令値によって指示した制御内容がＰＷＭ信号に反映される。なお、この１周期は、主制御が実施される周期と重複する。このように、キャリア信号に同期した制御対象の制御が可能となる。
【００８９】
続いて以下では、パーティションスケジューラ２１によるキャリア割り込み異常検出について、図９を用いて説明する。図９は、パーティションスケジューラ２１によるキャリア割り込み異常検出処理手順の具体例を示すフローチャートである。
【００９０】
割り込み信号生成回路１７及び割り込み信号生成回路１９のそれぞれから、周期的なキャリア割り込みが発生する毎に（Ｓ２０、Ｓ２１）、パーティションスケジューラ２１は、それらのキャリア割り込みを受け、動作を開始する（Ｓ２２）。すなわち、プロセッサ１０に対して、割り込み信号生成回路１７及び割り込み信号生成回路１９のそれぞれから、周期的なキャリア割り込みが発生する毎に、プロセッサ１０は、パーティションスケジューラ２１を実行する。
【００９１】
パーティションスケジューラ２１は、割り込み信号生成回路１７からのキャリア割り込みと、割り込み信号生成回路１９からのキャリア割り込みとが交互に発生しているか判定する（Ｓ２３）。これは、例えば、パーティションスケジューラ２１が、割り込み信号を受けたときに、その割り込み信号を出力した割り込み信号生成回路を示す情報を実行用メモリ１１に格納しておくようにする。そして、パーティションスケジューラ２１は、次に割り込み信号を受けたときに、その割り込み信号を出力した割り込み信号生成回路と、自行用メモリに格納された情報が示す割り込み信号生成回路とを比較し、一致しない場合にはキャリア割り込みが交互に発生していると判定し、一致する場合にはキャリア割り込みが交互に発生していないと判定する。なお、割り込み信号を出力した割り込み信号生成回路は、プロセッサ１０の割り込み信号入力端子と、その割り込み信号入力端子に割り込み信号を入力する割り込み信号生成回路とを予め紐付けておくことで、割り込み信号の入力のあった割り込み信号入力端子から特定するようにすればよい。
【００９２】
キャリア割り込みが交互に発生していると判定した場合（Ｓ２３：Ｙｅｓ）、パーティションスケジューラ２１は、割り込み信号生成回路１７からのキャリア割り込みと、割り込み信号生成回路１９からのキャリア割り込みとが予め定められた時間間隔で発生しているか否かを判定する（Ｓ２５）。ここで、本実施の形態では、上述したように、キャリア割り込みが発生する時間間隔の期待値は、キャリア信号の半周期の時間となる。
【００９３】
これは、例えば、マイクロコントローラ１５において、別途、時刻を計測するタイマを有するようにして判定可能とする。具体的には、パーティションスケジューラ２１は、キャリア割り込みが発生したときに、その発生時刻をタイマから取得する。また、次回のキャリア割り込み発生時に利用可能とするために、ここで取得した発生時刻を示す情報を実行用メモリ１１に格納しておく。パーティションスケジューラ２１は、タイマから取得した今回のキャリア割り込みの発生時刻と、実行用メモリ１１に格納しておいた前回のキャリア割り込みの発生時刻とから、前回のキャリア割り込みの発生から今回のキャリア割り込みの発生までの時間を算出する。そして、パーティションスケジューラ２１は、算出した時間が、予め定められた時間（キャリア信号の半周期の時間）と一致するか否かを判定する。なお、この判定は、期待値となる時間（キャリア信号の半周期の時間）を示す情報を実行用メモリ１１に予め格納しておき、その情報が示す時間と、算出した時間とを比較することで判定するようにすればよい。また、算出した時間と期待値となる時間との一致は、完全一致に限られず、所定の誤差の範囲内での一致も含まれる。
【００９４】
キャリア割り込みが予め定められた時間間隔で発生していると判定した場合（Ｓ２５：Ｙｅｓ）、パーティションスケジューラ２１は、処理を継続する。すなわち、パーティションスケジューラ２１は、図７を参照して説明したように、パーティション・スケジューリングを実施し、制御対象の制御を継続する。
【００９５】
一方、割り込み信号生成回路１７及び割り込み信号生成回路１９の両方が故障し、割り込み信号の出力が停止してしまっている場合、制御対象の制御に関する処理が能動的に停止することになる（Ｓ２７）。すなわち、パーティションスケジューラ２１の動作契機となるキャリア割り込みが発生しなくなるため、パーティションスケジューラ２１によるパーティション・スケジューリングが実施されなくなり、制御対象の制御に関する処理が能動的に停止する。
【００９６】
この場合、以下の（１）〜（２）の少なくとも１つを実施することで、より安全性を向上する。
（１）外部監視ＩＣ（リセット回路１４）への信号停止
（２）外部ＣＰＵへの通信停止
【００９７】
（１）外部監視ＩＣ（リセット回路１４）への信号停止の場合
この場合、パーティションスケジューラ２１の動作が停止することになるため、パーティションスケジューラ２１からリセット回路１４への送信信号が途絶える。そのため、リセット回路１４は、パーティションスケジューラ２１からの送信信号の途絶の検出に応じて、マイクロコントローラ１５をリセットする。例えば、リセット回路１４は、１Ｔｉｃｋよりも大きい所定の時間の間、パーティションスケジューラ２１からの送信信号の送信が無い場合に、送信信号が途絶したと判定する。
【００９８】
パーティションスケジューラ２１の動作が停止し、パーティション・スケジューリングが停止してしまった場合、Ｉ／Ｏポート１２は、最後に動作した安全監視タスク２６、２７からの指令値に基づくＰＷＭ信号をモータに対して出力し続けることになる。これに対して、リセット回路１４からマイクロコントローラ１５をリセットすることで、モータに対するＰＷＭ信号の供給を停止し、モータをフリーの状態（無励磁状態）とすることができる。これによれば、倒立二輪車２００のモータ制御を停止して、モータに対して予定していない制御が継続され続けることを抑止し、より安全性を向上することができる。
【００９９】
また、この後に、マイクロコントローラ１５が再起動し、パーティションスケジューラ２１が正常に動作を開始したときには、倒立二輪車２００の制御を再開するようにしてもよい。
【０１００】
（２）外部ＣＰＵへの通信停止
また、上述のような安全性の確保のためのモータ制御の停止は、安全制御装置１において、マイクロコントローラ１５の外部に外部ＣＰＵ（図示せず）を備えるようにし、その外部ＣＰＵによって実施するようにしてもよい。外部ＣＰＵは、リセット回路１４に代えて安全制御装置１に備えるようにしてもよく、リセット回路１４に加えて安全制御装置１に備えるようにしてもよい。
【０１０１】
この場合、パーティションスケジューラ２１は、外部ＣＰＵに定期的に送信信号を送信するようにする。例えば、パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作するタイミングで送信信号を送信する。これによれば、上述したパーティションスケジューラ２１の動作の停止により、パーティションスケジューラ２１から外部ＣＰＵへの送信信号が途絶える。そのため、外部ＣＰＵは、パーティションスケジューラ２１からの送信信号の途絶の検出に応じて、マイクロコントローラ１５（Ｉ／Ｏポート１２）からモータに供給されるＰＷＭ信号を回路的に遮断する。これは、例えば、マイクロコントローラ１５と、モータとの間にスイッチ回路を備えるようにし、外部ＣＰＵがそのスイッチ回路を切り替えて、マイクロコントローラ１５とモータとの電気的な接続を遮断することで実現するようにすればよい。また、例えば、外部ＣＰＵは、１Ｔｉｃｋよりも大きい所定の時間の間、パーティションスケジューラ２１からの送信信号の送信が無い場合に、送信信号が途絶したと判定する。
【０１０２】
これによれば、モータに対するＰＷＭ信号の供給を停止し、モータをフリーの状態（無励磁状態）とすることができる。これによれば、倒立二輪車２００のモータ制御を停止して、モータに対して予定していない制御が継続され続けることを抑止し、より安全性を向上することができる。
【０１０３】
一方、キャリア割り込みが交互に発生していないと判定した場合（Ｓ２４：Ｎｏ）、及び、キャリア割り込みが予め定めた時間間隔で発生していないと判定した場合（Ｓ２５：Ｎｏ）、
パーティションスケジューラ２１は、制御対象の制御に関する処理を停止する（Ｓ２８、Ｓ２９）。
【０１０４】
この場合、以下の（１）〜（３）の少なくとも１つを実施することで、より安全性を向上する。さらに、以下の（１）〜（３）に加えて、（４）を実施するようにしてもよい。
（１）モータ制御停止
（２）外部監視ＩＣ（リセット回路１４）への信号停止
（３）外部ＣＰＵへの通信停止
（４）ＬＥＤ点灯
【０１０５】
（１）モータ制御停止
この場合、パーティションスケジューラ２１は、自発的にモータに対するＰＷＭ信号の供給を停止し、モータをフリーの状態（無励磁状態）とすることで、倒立二輪車２００のモータ制御を停止する。
【０１０６】
例えば、パーティションスケジューラ２１が、安全監視タスク２６、２７に対して、モータの停止の指示を通知し、安全監視タスク２６、２７が、その通知に応じて、以降、ＰＷＭ信号の供給が停止される指令値を固定的にＩ／Ｏポート１２に出力するようにしてもよい。また、例えば、パーティションスケジューラ２１が、通常制御タスク２８、２９及び安全制御タスク３０、３１に対して、モータの停止の指示を通知し、通常制御タスク２８、２９及び安全制御タスク３０、３１が、その通知に応じて、以降、ＰＷＭ信号の供給が停止される指令値を固定的に生成するようにしてもよい。これらによれば、モータをフリーの状態（無励磁状態）とすることができる。
【０１０７】
（２）外部監視ＩＣ（リセット回路１４）への信号停止
（３）外部ＣＰＵへの通信停止
この場合、パーティションスケジューラ２１が、自発的に、リセット回路１４又は外部ＣＰＵへの送信信号の送信を停止するようにすれば、上述のステップＳ２７と同様の処理が実行される。その内容は、上述と同様であるため、詳細な説明は省略する。なお、パーティションスケジューラ２１が、リセット回路１４にリセット信号（停止指示信号）を送信することで、マイクロコントローラ１５のリセットが実施されるようにしてもよい。また、パーティションスケジューラ２１が、ＰＷＭ信号の供給の遮断を指示する信号（停止指示信号）を外部ＣＰＵに出力するようにし、外部ＣＰＵが、その信号の出力に応じて、ＰＷＭ信号の供給を遮断するようにしてもよい。
【０１０８】
（４）ＬＥＤ点灯
また、上述の（１）〜（３）によるモータ制御停止に加えて、ＬＥＤ点灯を実施するようにしてもよい。例えば、倒立二輪車２００の任意の位置にＬＥＤを備えるようにし、そのＬＥＤを点灯させることで、倒立二輪車２００の搭乗者に異常を通知するようにしてもよい。
【０１０９】
また、ＬＥＤに代えて、又は、ＬＥＤに加えて、倒立二輪車２００の任意の位置に表示パネルを備えるようにし、その表示パネルに異常を通知する画像を表示することで、倒立二輪車２００の搭乗者に異常を通知するようにしてもよい。
【０１１０】
また、ＬＥＤに代えて、又は、ＬＥＤに加えて、倒立二輪車２００の任意の位置にスピーカーを備えるようにし、その表示パネルに異常を通知する画像を表示することで、倒立二輪車２００の搭乗者に異常を通知するようにしてもよい。
【０１１１】
ここで、ＬＥＤ、表示パネル、及びスピーカー等は、好ましくは、搭乗者が視認等しやすい、倒立二輪車２００のハンドル２０３部分に備えるとよい。
【０１１２】
なお、上記の説明では、割り込み信号の出力停止に応じた制御対象の制御の停止（Ｓ２７）、割り込み信号の出力順序の異常に応じた制御対象の制御の停止（Ｓ２４：Ｎｏ、Ｓ２８）、割り込み信号の出力時間間隔の異常に応じた制御対象の制御の停止（Ｓ２５：Ｎｏ、Ｓ２９）の３種類の制御対象の制御の停止処理を全て実施する場合について例示したが、これに限られない。３種類の制御対象の制御の停止処理のうち、少なくとも１つを実施するようにしてもよい。すなわち、ステップＳ２４、Ｓ２５の判定も、いずれか一方のみを実施するようにしてもよい。
【０１１３】
以上に説明したように、第１の割込信号及び第２の割込信号（割り込み信号生成回路１７、１９から出力される割り込み信号に対応）に関する異常として、第１の割込信号と第２の割込信号が所定順序で出力されていないことを検出した場合（上記ステップＳ２４に対応）、制御対象の制御を停止する（上記ステップＳ２８に対応）ようにしている。これによれば、タイムパーティションの切り替え契機となる第１の割込信号と第２の割込信号が所定順序で出力されておらず、制御対象の制御に関する処理が予定通りに進まなくなってしまった場合に、制御対象の制御を停止しているため、より安全性を向上することができる。
【０１１４】
また、第１の割込信号及び第２の割込信号は、位相差のある第１のキャリア信号及び第２のキャリア信号（発信器１６、１８から出力されるキャリア信号に対応）に同期して生成しているため、タイムパーティション切り替えの時間間隔を短くできる。すなわち、制御対象に対する制御の高速性を維持することができる。
【０１１５】
＜発明の他の実施の形態１＞
上記の実施の形態において、外部ＣＰＵを備えてもよい旨を説明したが、この外部ＣＰＵ（外部プロセッサ）は、マイクロコントローラ１５を冗長化した際における他のマイクロコントローラ１５のプロセッサ１０であってもよい。例えば、図１０に示すように、マイクロコントローラ１５を、冗長構成としてもよい。図１０では、冗長構成として、マイクロコントローラ１５を、０系のマイクロコントローラ１５ａと１系のマイクロコントローラ１５ｂとに２重化した例について示しているが、３つ以上に冗長化されていてもよい。
【０１１６】
マイクロコントローラ１５ａ、１５ｂは、他のマイクロコントローラに対して、定期的に送信信号を送信するようにする。例えば、パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作するタイミングで送信信号を送信するとともに、他のマイクロコントローラからの送信信号を受信する。図１０に示す場合、マイクロコントローラ１５ａは、他系のマイクロコントローラ１５ｂに送信信号を送信し、マイクロコントローラ１５ｂは、他系のマイクロコントローラ１５ａに送信信号を送信する。
【０１１７】
これによれば、例えば、マイクロコントローラ１５ａの割り込み信号生成回路１７、１９の故障によって、マイクロコントローラ１５ａのパーティションスケジューラ２１の動作が停止した場合、マイクロコントローラ１５ａのパーティションスケジューラ２１から、マイクロコントローラ１５ｂへの送信信号が途絶える。マイクロコントローラ１５ｂのパーティションスケジューラ２１は、マイクロコントローラ１５ａからの送信信号の途絶の検出に応じて、マイクロコントローラ１５ａ（Ｉ／Ｏポート１２）からモータに供給されるＰＷＭ信号を回路的に遮断する。また、マイクロコントローラ１５ｂのパーティションスケジューラ２１は、マイクロコントローラ１５ａからの送信信号の途絶の検出に応じて、リセット回路１４と同様に、マイクロコントローラ１５ａをリセットする信号をマイクロコントローラ１５ａに入力し、マイクロコントローラ１５ａをリセットするようにしてもよい。これによれば、上述と同様に、モータに対して予定していない制御が継続され続けることを抑止し、より安全性を向上することができる。
【０１１８】
また、このときに、マイクロコントローラ１５ｂのパーティションスケジューラ２１は、ＴＰのスケジューリングに使用するスケジューリングパターンを、通常制御スケジューリングパターンから安全制御スケジューリングパターンに切り替えて、上述したように、倒立二輪車２００を倒立制御しつつ異常停止させるようにしてもよい。これによれば、倒立二輪車２００を制御しつつ停止させることができるため、より安全性を向上することができる。
【０１１９】
＜発明の他の実施の形態２＞
上記の実施の形態では、Ｉ／Ｏポート１２に対してアクセスするＴＰをＴＰ１に集約した例について説明したが、これに限られない。例えば、図１１に示すように、ＴＰ２及びＴＰ３の通常制御タスク２８、２９及び安全制御タスク３０、３１が、制御計算を行うとともに、Ｉ／Ｏポート１２に対する指令値の出力及びＩ／Ｏポート１２を介したセンサ値の取得を実施するようにしてもよい。この場合、ＴＰ１の安全監視タスク２６、２７は、通常制御タスク２８、２９及び安全制御タスク３０、３１との間のセンサ値及び指令値のやり取りは実施不要となる。安全監視タスク２６、２７は、各タスク２８〜３１の実行状況の監視と、各タスク２８〜３１とＩ／Ｏポート１２との間に入出力されるデータの監視を実行し、異常を検出した場合に、安全制御スケジューリングパターンへの切り替え契機として、異常の判断をパーティションスケジューラ２１に通知する。
【０１２０】
本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【０１２１】
本実施の形態では、ＯＳが、ＴＰ１〜ＴＰ３を有する場合について例示したが、ＴＰの種類及び数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。また、ＴＰに属するタスクの種類及び数についても、本実施の形態において例示したものに限られない。
【０１２２】
本実施の形態では、キャリア信号に同期した周期として、キャリア信号の１周期毎に、割り込み信号を生成する場合について例示したが、これに限られない。例えば、キャリア信号に同期した周期として、キャリア信号の所定の複数周期毎（例えば２周期毎）に、割り込み信号を生成するようにしてもよい。これによっても、一般的に主制御ＥＣＵで利用されるクロック信号（例えば１ｍｓｅｃ周期）と比較して高速であるキャリア信号（例えば３０μｓｅｃ周期）に基づいて主制御も行うことになるため、大幅に制御周期に対する制御内容の指示の遅延を低減することができる。つまり、１周期以外の所定の周期毎に、割り込み信号を生成するようにしてもよい。
【０１２３】
本実施の形態では、２つのキャリア信号（２つの割り込み信号）の位相のずれが、半周期である例について説明したが、これに限られない。これとは、異なる位相のずれとした場合、上記のステップＳ２５では、その位相のずれに応じた時間を期待値として判定を実施すればよい。例えば、２つのキャリア割り込み（「キャリア割り込み１」及び「キャリア割り込み２」とする）において、「キャリア割り込み２」が「キャリア割り込み１」よりもキャリア信号の３／４周期遅れて発生するとする。この場合、パーティションスケジューラ２１は、「キャリア割り込み１」の発生時刻から「キャリア割り込み２」の発生時刻までの時間が、キャリア信号の３／４周期の時間であれば、キャリア割り込みが予め定められた時間間隔で発生していると判定する。また、パーティションスケジューラ２１は、「キャリア割り込み２」の発生時刻から「キャリア割り込み１」の発生時刻までの時間が、キャリア信号の１／４周期の時間であれば、キャリア割り込みが予め定められた時間間隔で発生していると判定する。
【０１２４】
本実施の形態では、発信器及び割り込み信号生成回路が２つの場合について例示したが、これに限られない。安全制御装置に、発信器及び割り込み信号生成回路を３つ以上備えるようにしてもよい。この場合、上記のステップＳ２３では、各割り込み信号生成回路から交互にキャリア割り込みが発生しているか否かの判定に代えて、各割り込み信号生成回路から期待する順序でキャリア割り込みが発生していることを判定するようにすればよい。すなわち、発信器及び割り込み信号生成回路の構成に応じて、期待する所定順序で割り込み信号が出力されているか否かを判定するようにすればよい。
【符号の説明】
【０１２５】
１  安全制御装置
１０  プロセッサ
１１  実行用メモリ
１２  Ｉ／Ｏポート
１３  不揮発性メモリ
１４  リセット回路
１５、１５ａ、１５ｂ  マイクロコントローラ
１６、１８  発信器
１７、１９  割り込み信号生成回路
２１  パーティションスケジューラ
２２  スケジューリングテーブル
２３、２４、２５  タスクスケジューラ
２６、２７  安全監視タスク
２８、２９  通常制御タスク
３０、３１  安全制御タスク
１００  オペレーティングシステム
１０１  安全監視アプリケーション
１０２  通常制御アプリケーション
１０３  安全制御アプリケーション
【図１】
2014211689.tif 000003
【図２】
2014211689.tif 000004
【図３】
2014211689.tif 000005
【図４】
2014211689.tif 000006
【図５】
2014211689.tif 000007
【図６Ａ】
2014211689.tif 000008
【図６Ｂ】
2014211689.tif 000009
【図７】
2014211689.tif 000010
【図８】
2014211689.tif 000011
【図９】
2014211689.tif 000012
【図１０】
2014211689.tif 000013
【図１１】
2014211689.tif 000014
【図１２】
2014211689.tif 000015
【図１３】
2014211689.tif 000016
【図１４】
2014211689.tif 000017