(57)【特許請求の範囲】
【請求項１】
制御対象の制御に関する処理を行う制御関連タスクの実行に関連するタスク関連情報を格納する記憶部と、
前記タスク関連情報に基づいて、複数の前記制御関連タスクを実行するタスク実行手段と、を備え、
前記タスク関連情報は、それぞれで前記複数の制御関連タスクのうち少なくともいずれか１つの制御関連タスクが実行される複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報であり、
前記記憶部は、前記タスク関連情報に応じた内容を有するタスク関連対応情報がさらに格納されたものであって、
前記タスク実行手段は、前記タスク関連情報に従って、前記タイムパーティションをスケジューリングするものであって、
前記タスク実行手段は、前記タスク関連情報に基づいて前記タイムパーティションを切り替えて、切り替え先のタイムパーティションにおける制御関連タスクを実行するときに前記タスク関連対応情報に基づいて前記タスク関連情報が正常であるか否かを判定し、前記タスク関連情報が正常であると判定した場合に前記タスク関連情報に基づいて前記タイムパーティションを切り替えて、前記切り替え先のタイムパーティションにおける制御関連タスクを実行する、
制御装置。
【請求項２】
制御対象の制御に関する処理を行う制御関連タスクの実行に関連するタスク関連情報を格納する記憶部と、
前記タスク関連情報に基づいて、複数の前記制御関連タスクを実行するとともに、それぞれで前記複数の制御関連タスクのうち少なくともいずれか１つの制御関連タスクが実行される複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記タイムパーティションをスケジューリングするタスク実行手段と、を備え、
前記タスク関連情報は、前記タイムパーティションのコンテキストであり、
前記記憶部は、前記タスク関連情報に応じた内容を有するタスク関連対応情報がさらに格納されたものであって、
前記タスク関連情報及び前記タスク関連対応情報のそれぞれは、前記複数のタイムパーティションのそれぞれに対応するように前記記憶部に格納されるものであり、
前記タスク実行手段は、前記タイムパーティションを切り替えるときに、切り替え前のタイムパーティションのタスク関連情報に基づいて前記切り替え前のタイムパーティションのタスク関連対応情報を生成して前記記憶部に格納し、
前記タスク実行手段は、前記タイムパーティションを切り替えて、切り替え先のタイムパーティションのタスク関連情報に基づいて前記切り替え先のタイムパーティションにおける制御関連タスクを実行するときに前記切り替え先のタイムパーティションのタスク関連対応情報に基づいて前記切り替え先のタイムパーティションのタスク関連情報が正常であるか否かを判定し、前記切り替え先のタイムパーティションのタスク関連情報が正常であると判定した場合に前記切り替え先のタイムパーティションのタスク関連情報に基づいて前記切り替え先のタイムパーティションにおける制御関連タスクを実行する、
制御装置。
【請求項３】
前記タスク関連対応情報は、前記タスク関連情報と同一の内容を示す情報であり、
前記タスク実行手段は、前記タスク関連情報が示す内容と、前記タスク関連対応情報が示す内容とを比較して、比較した内容が一致すると判定した場合に、前記タスク関連情報が正常であると判定し、前記制御関連タスクを実行する、
請求項１又は２に記載の制御装置。
【請求項４】
前記タスク関連対応情報は、前記タスク関連情報が異なる表現形式で表された情報である請求項３に記載の制御装置。
【請求項５】
前記タスク関連対応情報は、前記タスク関連情報から生成された誤り検出符号であり、
前記タスク実行手段は、前記タスク関連情報から誤り検出符号を生成して、生成した誤り検出符号と、前記タスク関連対応情報とを比較して、比較した情報が一致すると判定した場合に前記制御関連タスクを実行する、
請求項１又は２に記載の制御装置。
【請求項６】
前記タスク関連対応情報は、前記タスク関連情報が複製された情報であり、
前記タスク実行手段は、前記タスク関連情報と前記タスク関連対応情報とを比較して、比較した情報が一致すると判定した場合に前記制御関連タスクを実行する、
請求項３に記載の制御装置。
【請求項７】
前記タスク実行手段は、前記複数の制御関連タスクをスケジューリングして実行するものであって、
前記記憶部は、さらに、前記制御関連タスクのコンテキストであるタスク情報と、前記タスク情報に応じた内容を有するタスク対応情報が格納され、
前記タスク情報及び前記タスク対応情報のそれぞれは、前記複数の制御関連タスクのそれぞれに対応するように前記記憶部に格納されるものであり、
前記タスク実行手段は、さらに、前記制御関連タスクを切り替えるときに、切り替え前の制御関連タスクのタスク情報に基づいて、当該切り替え前の制御関連タスクのタスク対応情報を生成して前記記憶部に格納し、
前記タスク実行手段は、さらに、前記制御関連タスクを切り替えるときに、切り替え先の制御関連タスクのタスク対応情報に基づいて前記切り替え先の制御関連タスクのタスク情報が正常であるか否かを判定し、当該切り替え先の制御関連タスクのタスク情報が正常であると判定した場合に、当該切り替え先の制御関連タスクのタスク情報に基づいて当該切り替え先の制御関連タスクを実行する、
請求項１乃至６のいずれか１項に記載の制御装置。
【請求項８】
前記記憶部は、物理的に異なる位置に配置された２つ以上の記憶装置を含み、
前記タスク関連情報と前記タスク関連対応情報のそれぞれは、異なる前記記憶装置に格納される、
請求項１乃至７のいずれか１項に記載の制御装置。
【請求項９】
前記記憶部は、前記タスク関連対応情報を２つ格納するものであって、
前記タスク実行手段は、前記タスク関連情報及び２つの前記タスク関連対応情報のそれぞれが示す内容に基づいて正常な情報を多数決で判定するものであって、
前記タスク実行手段は、前記タスク関連情報が示す内容と前記２つのタスク関連対応情報が示す内容のいずれかとが一致すると判定した場合には、前記タスク関連情報に基づいて前記制御関連タスクを実行し、前記タスク関連情報が示す内容と前記２つのタスク関連対応情報が示す内容のいずれとも一致せず、かつ前記２つのタスク関連対応情報が示す内容が一致すると判定した場合には、前記タスク関連情報に代えて当該２つのタスク関連対応情報のいずれかに基づいて前記制御関連タスクを実行する、
請求項３、４及び６のいずれか１項に記載の制御装置。
【請求項１０】
前記タスク関連対応情報は、前記タスク関連情報が補数で表された情報である請求項４に記載の制御装置。
【請求項１１】
前記タスク実行手段は、
前記制御関連タスクの実行、及び、前記タスク関連情報が正常であるか否かの判定を行うシステムプログラムと、
前記システムプログラムを実行するプロセッサと、を含む、
請求項１乃至１０のいずれか１項に記載の制御装置。
【請求項１２】
制御対象の制御に関する処理を行う複数の制御関連タスクのうち少なくともいずれか１つの制御関連タスクが実行される複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報であるタスク関連情報に基づいて、前記タイムパーティションをプロセッサによってスケジューリングするとともに、前記複数の制御関連タスクを前記プロセッサによって実行する制御方法であって、
前記プロセッサが、前記タスク関連情報に基づいて前記タイムパーティションを切り替えて、切り替え先のタイムパーティションにおける制御関連タスクを実行するときに前記タスク関連情報に応じた内容となるタスク関連対応情報に基づいて前記タスク関連情報が正常であるか否かを判定するステップと、
前記プロセッサが、前記タスク関連情報が正常であると判定した場合に前記タスク関連情報に基づいて前記タイムパーティションを切り替えて、前記切り替え先のタイムパーティションにおける制御関連タスクを実行するステップと、
を備えた制御方法。
【請求項１３】
制御対象の制御に関する処理を行う複数の制御関連タスクのうち少なくともいずれか１つの制御関連タスクがそれぞれで実行される複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記タイムパーティションをプロセッサによってスケジューリングするとともに、前記タイムパーティションのコンテキストであるタスク関連情報に基づいて、当該タイムパーティションにおける制御関連タスクを前記プロセッサによって実行する制御方法であって、
前記プロセッサが、前記タイムパーティションを切り替えるときに、切り替え前のタイムパーティションのタスク関連情報に基づいて前記切り替え前のタイムパーティションのタスク関連情報に応じた内容となるタスク関連対応情報を生成するステップと、
前記プロセッサが、前記タイムパーティションを切り替えて、切り替え先のタイムパーティションのタスク関連情報に基づいて前記切り替え先のタイムパーティションにおける制御関連タスクを実行するときに前記切り替え先のタイムパーティションのタスク関連情報に応じた内容となるタスク関連対応情報に基づいて前記切り替え先のタイムパーティションのタスク関連情報が正常であるか否かを判定するステップと、
前記プロセッサが、前記切り替え先のタイムパーティションのタスク関連情報が正常であると判定した場合に、前記タイムパーティションを切り替えて、前記切り替え先のタイムパーティションのタスク関連情報に基づいて前記切り替え先のタイムパーティションにおける制御関連タスクを実行するステップと、
を備えた制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置および制御方法に関し、特に、機能安全の確保のためにサービスロボットおよび輸送機器等に搭載される制御装置およびその制御方法に関する。
【背景技術】
【０００２】
サービスロボットは、外界センサや自己診断装置によって安全状態を常時監視し、何らかの危険を検知した場合に適切な安全制御ロジックを実行することで、機能安全を確保する必要がある。
【０００３】
上述したサービスロボットのほか、運輸機器等の電気的な原理で動作するシステムを対象とした機能安全に関する国際標準としてIEC 61508が制定されている。IEC 61508では、機能安全の確保のために設けられるシステムのことを安全関連系と呼んでいる。IEC 61508は、マイクロプロセッサ及びPLC（Programmable Logic Controller）等のハードウェアとコンピュータプログラム（ソフトウェア）によって安全関連系を構築するための様々な技法を定めている。IEC 61508で定められている技法を用いることで、コンピュータシステムを用いて安全関連系を構築することが可能となる。
【０００４】
一方で、近年、マイクロプロセッサ等のプログラマブル電子機器の処理能力が向上している。このため、マルチタスクＯＳ（Operating System）を利用し、１つのコンピュータシステム上で様々なアプリケーションプログラムを並列実行することで、サービスロボット及び自動車等の機器に搭載されている複数用途のコンピュータシステムを統合することができる。
【０００５】
例えば特許文献１に、機能安全の確保に関するアプリケーションプログラム（以下、安全関連アプリケーションと呼ぶ）を、その他のアプリケーションプログラム（以下、非安全関連アプリケーションと呼ぶ）と共に１つのコンピュータシステム上で動作させる技術が開示されている。
【０００６】
IEC 61508で定められている技法を、安全関連アプリケーションおよび非安全関連アプリケーションを含むソフトウェア全体に適用すると、非安全関連アプリケーションにまで適用する必要性が生じる。このため、ソフトウェア開発コストが増大するという問題がある。
【０００７】
そこで、特許文献１に開示される技術では、システムプログラムのタイム・パーティションニングによって、安全関連アプリケーション（安全監視プログラム及び安全制御プログラム）を非安全関連アプリケーション（通常制御プログラム）から独立させている。このため、通常制御プログラムを安全関連系から除外することができ、コンピュータシステムを用いて構成される安全関連系の低コスト化に寄与することができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−２７１７５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１に開示の技術は、上述したような制御対象の制御に関連するプログラムから生成されるタスクを実行することで制御対象を制御するようにしているが、タスクが正常に実行されるか否かを判定する機構を備えていない。以下、図１６〜１９を参照して、タスクが正常に実行されないケースについて説明する。
【００１０】
まず、図１６及び図１７を参照して、第１の問題となるケースについて説明する。図１６は、正常な動作をした場合におけるタスクの実行状態を示す図である。図１７は、第１の問題となるケースにおけるタスクの実行状態を示す図である。図１６及び図１７では、「ＴＰ１」、「ＴＰ２」、「ＴＰ３」のそれぞれは、タイムパーティションを示し、「Ｔ１」、「Ｔ２」、「Ｔ３」のそれぞれは、タスクを示す。このように、図１６では、１サイクルにタイムパーティションが、ＴＰ１、ＴＰ２、ＴＰ１、ＴＰ２、ＴＰ１、ＴＰ２、ＴＰ１、ＴＰ３の順で割り当てられるスケジューリングパターンに基づいて、タイムパーティションをスケジューリングしてタスクを実行する場合について例示している。なお、タスクＴ１は、タイムパーティションＴＰ１において実行されるタスクであり、タスクＴ２は、タイムパーティションＴＰ２において実行されるタスクであり、タスクＴ３は、タイムパーティションＴＰ３において実行されるタスクである。
【００１１】
正常時には、スケジューリングパターンを使用してタイムパーティションのスケジューリングを行うことで、図１６に示すようにタイムパーティションが切り替わり、それぞれのタイムパーティションに応じたタスクが実行されていく。しかしながら、スケジューリングパターンが破壊されてしまったときに、そのスケジューリングパターンを使用してタイムパーティションのスケジューリングを行ってしまった場合、タイムパーティションが期待した通りに切り替わらなくなってしまうといった問題が発生してしまう。また、それによって、タスクが正常に実行されなくなってしまうといった問題も発生してしまう。
【００１２】
その一例について具体的に説明すると、例えば、図１７に例示するように、本来ならＴＰ１、ＴＰ２が交互に繰り返されることが期待されている期間において、ＴＰ２が連続して実行されるようになってしまうといった事象が発生し得る。これは、スケジューリングパターンにおいてＴＰ１を示していた情報が破壊されてＴＰ２を示すようになってしまった場合に、そのスケジューリングパターンを使用してタイムパーティションのスケジューリングを行うことによって発生する。このように、スケジューリングパターンが破壊されてしまった場合、タイムパーティションが期待した順序でスケジューリングされなくなってしまい、タスクが期待した順序で実行されなくなってしまうという問題がある。このようなスケジューリングパターンの破壊は、例えば、α線及び宇宙線等の放射線による影響、またはソフトウェアの暴走等によって発生する可能性がある。
【００１３】
続いて、図１６及び図１８を参照して、第２の問題となるケースについて説明する。図１８は、第２の問題となるケースにおけるタスクの実行状態を示す図である。ここでも、図１６が、正常な動作をした場合におけるタスクの実行状態を示す図であるものとして説明する。図１８中の「ＴＰ１」、「ＴＰ２」、「ＴＰ３」、「Ｔ１」、「Ｔ２」、「Ｔ３」については、図１６と同様であるため、説明を省略する。
【００１４】
ここで、タイム・パーティショニングを採用するマルチタスクＯＳでは、タイムパーティションごとに、タイムパーティションの情報を管理している。タイムパーティションの情報は、例えば、タイムパーティションに属するタスク、及びタイムパーティションに属するタスクの状態等を示す。
【００１５】
正常時には、あるタイムパーティションがアクティブになっている場合、そのタイムパーティションの情報を使用して、そのタイムパーティションにおけるタスクがスケジューリングされて実行される。しかしながら、タイムパーティションの情報が破壊されてしまったときに、そのタイムパーティションの情報を使用してタスクを実行してしまった場合、タスクが正常に実行されなくなってしまうという問題がある。
【００１６】
その一例について具体的に説明すると、例えば、図１８に例示するように、本来ならＴ１が実行されることが期待されているＴＰ１においてＴ２が実行されるようになってしまうといった事象が発生し得る。これは、ＴＰ１のタイムパーティションの情報において、ＴＰ１に属するタスクとしてＴ１を示していた情報が破壊されてＴ２を示すようになってしまった場合に、そのタイムパーティションの情報を使用してタスクを実行することによって発生する。このように、タイムパーティションの情報が破壊されてしまった場合、タイムパーティションにおいて期待したタスクが実行されなくなってしまうという問題がある。このようなタイムパーティションの情報の破壊も、放射線やソフトウェアの暴走等によって発生する可能性がある。
【００１７】
続いて、図１６及び図１９を参照して、第３の問題となるケースについて説明する。図１９は、第３の問題となるケースにおけるタスクの実行状況を示す図である。ここでも、図１７が、正常な動作をした場合におけるタスクの実行状態を示す図であるものとして説明する。図１９中の「ＴＰ１」、「ＴＰ２」、「ＴＰ３」、「Ｔ１」、「Ｔ２」、「Ｔ３」については、図１６と同様であるため、説明を省略する。
【００１８】
ここで、タイム・パーティショニングを採用するマルチタスクＯＳでは、タスクごとに、タスクの情報を管理している。タスクの情報は、例えば、タスクのスタック、プログラムカウンタ等のタスクの実行状況に応じたプロセッサのレジスタ値、タスク間通信のミューテックス又はセマフォ、及びタスク間通信のメッセージキュー等を示す。
【００１９】
正常時には、あるタスクを実行する場合、そのタスクの情報を使用して、そのタスクが実行される。しかし、タスクの情報が破壊されてしまったときに、そのタスクの情報を使用してタスクを実行してしまった場合、タスクが正常に実行されなくなってしまうという問題がある。
【００２０】
その一例について具体的に説明すると、例えば、図１９に示すように、Ｔ１が正常に実行されなくなってしまうといった事象が発生し得る。これは、ＴＰ１のタスクの情報において、プログラムカウンタの値が破壊されてしまった場合に、そのプログラムカウンタの値を使用してタスクを実行することによって発生する。より具体的には、例えば、タスクの処理の一部が抜けてしまう、又はタスクの処理の一部が重複して実行されてしまうといった事象が発生し得る。このように、タスクの情報が破壊されてしまった場合、タスクが期待した処理を実行できなくなってしまうという問題がある。このようなタスクの情報の破壊も、放射線やソフトウェアの暴走等によって発生する可能性がある。
【００２１】
以上に説明したように、特許文献１に開示の技術では、スケジューリングテーブル、タイムパーティションの情報、及びタスクの情報等のように、タスクの実行に関連する情報が破壊されてしまった場合に、タスクが正常に実行されなくなってしまう。そのため、そのような場合におけるタスクの実行を回避することができれば、より安定した制御対象の制御を行うことが可能となる。
【００２２】
本発明は、上述した知見に基づいてなされたものであって、より安定した制御対象の制御が可能となる制御装置及び制御方法を提供することを目的とする。
【課題を解決するための手段】
【００２３】
本発明の第１の態様にかかる制御装置は、制御対象の制御に関する処理を行う制御関連タスクの実行に関連するタスク関連情報を格納する記憶部と、前記タスク関連情報に基づいて、前記制御関連タスクを実行するタスク実行手段と、を備え、前記記憶部は、前記タスク関連情報に応じた内容を有するタスク関連対応情報がさらに格納されたものであって、前記タスク実行手段は、前記タスク関連情報に基づいて前記制御関連タスクを実行するときに前記タスク関連対応情報に基づいて前記タスク関連情報が正常であるか否かを判定し、前記タスク関連情報が正常であると判定した場合に前記タスク関連情報に基づいて前記制御関連タスクを実行するものである。
【００２４】
本発明の第２の態様にかかる制御方法は、制御対象の制御に関する処理を行う制御関連タスクの実行に関連するタスク関連情報に基づいて、前記制御関連タスクをプロセッサによって実行する制御方法であって、前記プロセッサが、前記タスク関連情報に基づいて前記制御関連タスクを実行するときに前記タスク関連情報に応じた内容となるタスク関連対応情報に基づいて前記タスク関連情報が正常であるか否かを判定するステップと、前記プロセッサが、前記タスク関連情報が正常であると判定した場合に前記タスク関連情報に基づいて前記制御関連タスクを実行するステップと、を備えたものである。
【発明の効果】
【００２５】
上述した本発明の各態様によれば、より安定した制御対象の制御が可能となる制御装置及び制御方法を提供することができる。
【図面の簡単な説明】
【００２６】
【図１】発明の実施の形態１にかかる安全制御装置の構成例を示すブロック図である。
【図２】発明の実施の形態１におけるタイム・パーティショニングの概念を説明するための図である。
【図３】発明の実施の形態１におけるリソース・パーティショニングの概念を説明するための概念図である。
【図４】発明の実施の形態１におけるパーティションスケジューラとタスクとの関係を示す図である。
【図５Ａ】スケジューリングパターンの具体例を示す図である。
【図５Ｂ】スケジューリングパターンの具体例を示す図である。
【図６】発明の実施の形態１にかかるパーティションスケジューラの処理手順の具体例を示すフローチャートである。
【図７】発明の実施の形態２にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図８】発明の実施の形態２にかかるパーティションスケジューラの処理手順の具体例を示すフローチャートである。
【図９】発明の実施の形態３にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１０】発明の実施の形態３にかかるパーティションスケジューラの処理手順の具体例を示すフローチャートである。
【図１１】発明の実施の形態４にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１２】発明の実施の形態４にかかるパーティションスケジューラの処理手順の具体例を示すフローチャートである。
【図１３】発明の実施の形態５にかかる実行用メモリの構成例を示すブロック図である。
【図１４】その他の実施の形態にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１５】その他の実施の形態にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１６】正常な動作をした場合におけるタスクの実行状態を示す図である。
【図１７】第１の問題となるケースにおけるタスクの実行状態を示す図である。
【図１８】第２の問題となるケースにおけるタスクの実行状態を示す図である。
【図１９】第３の問題となるケースにおけるタスクの実行状態を示す図である。
【発明を実施するための形態】
【００２７】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００２８】
＜発明の実施の形態１＞
本実施の形態にかかる安全制御装置１は、サービスロボットや運輸機器等に搭載されて機能安全確保のための安全制御を実行する。安全制御装置１は、安全関連アプリケーションと非安全関連アプリケーションを同一のコンピュータシステムで実行するよう構成される。図１は、本実施の形態にかかる安全制御装置１の構成例を示すブロック図である。
【００２９】
プロセッサ１０は、プログラム（命令ストリーム）の取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、図１では、１つのプロセッサ１０のみを示しているが、安全制御装置１は、複数のプロセッサ１０を有するマルチプロセッサ構成であってもよい。また、プロセッサ１０は、マルチコアプロセッサでもよい。プロセッサ１０は、システムプログラムとしてのオペレーティングシステム（ＯＳ）１００を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。
【００３０】
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。本実施の形態のプロセッサ１０が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
【００３１】
実行用メモリ１１は、プロセッサ１０によるプログラム実行のために使用されるメモリである。実行用メモリ１１には、不揮発性メモリ１３からロードされたプログラム（ＯＳ１００及びアプリケーション１０１〜１０３等）、プロセッサ１０の入出力データ等が記憶される。なお、プロセッサ１０は、プログラムを不揮発性メモリ１３から実行用メモリ１１にロードすることなく、これらのプログラムを不揮発性メモリ１３から直接実行してもよい。
【００３２】
具体的には、実行用メモリ１１は、ＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）等のランダムアクセス可能な揮発性メモリとすればよい。図１の実行用メモリ１１は、論理的な構成単位を示している。すなわち、実行用メモリ１１は、例えば、複数のＳＲＡＭデバイスの組み合わせ、複数のＤＲＡＭデバイスの組み合わせ、又はＳＲＡＭデバイスとＤＲＡＭデバイスの組み合わせでもよい。
【００３３】
Ｉ／Ｏポート１２は、外部デバイスとの間のデータ送受信に使用される。例えば、安全制御装置１がサービスロボットに搭載される場合であれば、外部デバイスは、各種センサ及びサービスロボットを動作させるアクチュエータ等である。この場合、各種センサは、例えば、サービスロボット周囲の障害物を計測可能な視覚センサ、サービスロボットの姿勢を検知するための姿勢センサ、及びサービスロボットのアクチュエータの状態を検知するための回転センタ等のサービスロボットの内外の状態を検出するセンサを含む。
【００３４】
不揮発性メモリ１３は、電力の供給を受けることなく、実行用メモリ１１に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ１３は、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ１３は、ＯＳ１００及びアプリケーション１０１〜１０３を格納する。なお、不揮発性メモリ１３の少なくとも一部は安全制御装置１から取り外し可能に構成されてもよい。例えば、アプリケーション１０１〜１０３が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ１３の少なくとも一部は、安全制御装置１の外部に配置されてもよい。
【００３５】
ＯＳ１００は、プロセッサ１０によって実行されることにより、プロセッサ１０及び実行用メモリ１１及び不揮発性メモリ１３等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
【００３６】
さらに、機能安全の確保に関連する安全監視アプリケーション１０１及び安全制御アプリケーション１０３の通常制御アプリケーション１０２からの独立性を高めるため、ＯＳ１００は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２を含む。
【００３７】
このうち、時間的な保護は、プロセッサ１０の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ１０の実行時間をパーティショニングし、各パーティション（タイムパーティションと呼ぶ）にタスク（プロセス又はスレッド）を割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、各タイムパーティション（以下、ＴＰと略称する場合がある。）に割り当てられたタスクに対して、プロセッサ１０の実行時間を含む資源の利用を保証する。
【００３８】
図２は、タイム・パーティショニングに関する概念図である。図２の例では、予め定められた１サイクル時間を３つのＴＰ１、ＴＰ２及びＴＰ３に分割する例を示している。例えば、１サイクル時間を１００Ｔｉｃｋとした場合、このうち前半の２０ＴｉｃｋがＴＰ１、中間の３０ＴｉｃｋがＴＰ２、後半の５０ＴｉｃｋがＴＰ３と規定される。
【００３９】
また、図２の例では、第１アプリケーション（ＡＰＬ１）〜第４アプリケーション（ＡＰＬ４）が、ＴＰ１〜ＴＰ３のいずれかに割り当てられている。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、時間の経過に応じて、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。そして、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００４０】
一方、空間的な保護は、実行用メモリ１１及びＩ／Ｏポート１２を含む固定的な資源をパーティショニングし、各パーティション（リソースパーティションと呼ぶ）にタスクを割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、予め割り当てられたリソースパーティション（以下、ＲＰと略称する場合がある。）を超えてタスクが他のリソースにアクセスすることを禁止する。
【００４１】
図３は、リソース・パーティショニングに関する概念図である。図３の例では、２つのＲＰ（ＲＰ１及びＲＰ２）を示している。ＲＰ１には、実行用メモリ１１及び不揮発性メモリ１３の一部（Ａ領域）と、Ｉ／Ｏポート１２の一部（ポートＡ）が割り当てられている。また、ＲＰ２には、実行用メモリ１１及び不揮発性メモリ１３の他の一部（Ｂ領域）と、Ｉ／Ｏポート１２の他の一部（ポートＢ）が割り当てられている。ＲＰ１からはＲＰ２に割り当てられたリソースへのアクセスが禁止され、ＲＰ２からはＲＰ１に割り当てられたリソースへのアクセスが禁止される。
【００４２】
なお、全てのリソースがいずれかのＲＰに排他的に割り当てられる必要はない。つまり、複数のＲＰによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション１０２及び安全制御アプリケーション１０３の双方からアクセスできる必要がある。よって、通常制御アプリケーション１０１が属するＲＰと安全制御アプリケーション１０２が属するＲＰによって、アクチュエータを制御するためのＩ／Ｏポート１２を共有するとよい。
【００４３】
図１に戻り説明を続ける。アプリケーション１０１〜１０３は、ＯＳ１００及びプロセッサ１０によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション１０１は、通常制御アプリケーション１０２の実行状況の監視と、安全制御アプリケーション１０３の実行状況の監視と、Ｉ／Ｏポート１２への入出力データの監視と、をプロセッサ１０に実行させるための命令コードを含む。さらに、安全監視アプリケーション１０１は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全監視アプリケーション１０１は、安全関連アプリケーションである。
【００４４】
また、通常制御アプリケーション１０２は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、通常制御アプリケーション１０２は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、通常制御アプリケーション１０２は、非安全関連アプリケーションである。
【００４５】
また、安全制御アプリケーション１０３は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、安全制御アプリケーション１０３は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全制御アプリケーション１０３は、安全関連アプリケーションである。
【００４６】
リセット回路１４は、ＯＳ１００からの信号に基づき、マイクロコントローラ１５のリセットを行う。パーティションスケジューラ２１からリセット回路１４に定期的に送信信号を送信するようにし、リセット回路１４は、パーティションスケジューラ２１からの送信信号が途絶えた場合に、マイクロコントローラ１５をリセットする。例えば、パーティションスケジューラ２１は、後述するように、１Ｔｉｃｋごとに動作するタイミングで送信信号を送信する。また、ＯＳ１００で異常を検知した場合、又は、アプリケーション１０１〜１０３のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ２１がリセット回路１４にリセット信号を送信するようにして、それに応じて、リセット回路１４がマイクロコントローラ１５をリセットするようにしてもよい。このようにすることで、マイクロコントローラ１５に不具合が発生した場合に、マイクロコントローラ１５をリセットして復旧することができる。
【００４７】
続いて以下では、パーティションスケジューラ２１と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図４を用いて説明する。図４は、ＯＳ１００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ２１とタスク２４、２６、２８との関係を示す図である。
【００４８】
マイクロコントローラ１５は、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２、不揮発性メモリ１３等を含む。なお、図４では、マイクロコントローラ１５の外部にリセット回路１４を備える構成を例示しているが、マイクロコントローラ１５の内部にリセット回路１４を含む構成としてもよい。
【００４９】
マイクロコントローラ１５には、外部のクロック源からのクロック信号が供給され、プロセッサ１０等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、１Ｔｉｃｋであるとして説明する。このため、プロセッサ１０によりＯＳ１００が実行されることで、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作すると共に、各ＴＰにおいて、タスクスケジューラ２３、２５、２７およびタスク（安全監視タスク２４、通常制御タスク２６、安全制御タスク２８）が１Ｔｉｃｋごとに動作する。
【００５０】
パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作し、ＴＰの切り替え（パーティション・スケジューリング）を行う。パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１は、選択したＴＰに関するタスクスケジューラの動作を開始させる。
【００５１】
パーティションスケジューラ２１によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ２１は、スケジューリングテーブル２２を参照し、ＴＰの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。また、パーティションスケジューラ２１は、スケジューリングテーブル２２を参照してパーティション・スケジューリングを行う前に、スケジューリングテーブル２２と照合用テーブル２９とを照合して、スケジューリングテーブル２２が破壊されているか否かをチェックする。そして、パーティションスケジューラ３０は、スケジューリングテーブル２２の破壊が検出されなかった場合に、スケジューリングテーブル２２を使用してパーティション・スケジューリングを行う。
【００５２】
スケジューリングテーブル２２は、ＴＰの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル２２は、例えば、実行用メモリ１１に予め格納されている。なお、スケジューリングテーブル２２は、少なくとも２つの異なるスケジューリングパターンを保持している。１つは、安全監視タスク２４による異常検知が行われていない場合（つまり通常時）に適用されるスケジューリングパターンである。もう１つは、安全監視タスク２４によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
【００５３】
図５Ａは、通常制御スケジューリングパターンの具体例を示している。図５Ａでは、通常制御タスク２６が属するＴＰ２が１サイクル時間の前半（Ｔ１）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ２）に割り当てられている。図５Ａのスケジューリングパターンによれば、通常制御タスク２６と安全監視タスク２４が繰り返しスケジューリングされる。
【００５４】
図５Ｂは、安全制御スケジューリングパターンの具体例を示している。図５Ｂでは、安全制御タスク２８が属するＴＰ３が１サイクル時間の前半（Ｔ３）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ４）に割り当てられている。図５Ｂのスケジューリングパターンによれば、安全制御タスク２８と安全監視タスク２４が繰り返しスケジューリングされる。
【００５５】
図４に戻り説明を続ける。タスクスケジューラ２３、２５、２７は、それぞれが属するＴＰ内でのタスクのスケジューリングを行う。各ＴＰ内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図４では、各ＴＰはそれぞれ１つのタスクのみを含むものとして図示しているが、１以上のタスクが含まれるようにしてもよい。例えば、通常制御用のＴＰ２内には、通常制御タスクＡ及び通常制御タスクＢの２つのタスクが含まれていてもよい。
【００５６】
安全監視タスク２４は、安全監視アプリケーション１０１の起動によって生成されるタスクである。図４の例では、安全監視タスク２４は、ＴＰ１及びＲＰ１に割り当てられている。安全監視タスク２４は、非安全関連アプリケーションである通常制御タスク２６の実行状況の監視と、安全関連アプリケーションである安全制御タスク２８の実行状況の監視と、Ｉ／Ｏポート１２の入出力データを監視する。さらに、安全監視タスク２４は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５７】
通常制御タスク２６は、通常制御アプリケーション１０２の起動によって生成されるタスクである。図４の例では、通常制御タスク２６は、ＴＰ２及びＲＰ２に割り当てられている。通常制御タスク２６は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。さらに、通常制御タスク２６は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５８】
安全制御タスク２８は、安全制御アプリケーション１０３の起動によって生成されるタスクである。図４の例では、安全制御タスク２８は、ＴＰ３及びＲＰ３に割り当てられている。安全制御タスク２８は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。さらに、安全制御タスク２８は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５９】
なお、各タスクからパーティション２１へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがＯＳ１００のシステムコール（サービスコール）を呼び出し、ＯＳ１００を介して、パーティションスケジューラ２１に結果を通知することができる。具体的には、例えば、タスク間通信を行うシステムコールを呼び出す。また、例えば、タスクの実行状況に関するフラグを実行用メモリ１１に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ２１がフラグの設定値に応じてタスクの実行状況を判断することもできる。
【００６０】
照合用テーブル２９は、スケジューリングテーブル２２の破壊を検出するための照合用のスケジューリングテーブルである。照合用テーブル２９は、スケジューリングテーブル２２と同じ内容を示す。照合用テーブル２９は、例えば、スケジューリングテーブル２２に基づいて予め生成される。これによれば、スケジューリングテーブル２２の内容と照合用テーブル２９の内容とを比較することによって、スケジューリングテーブル２２の破壊を検出することができる。照合用テーブル２９は、例えば、実行用メモリ１１に予め格納されている。
【００６１】
ここで、照合用テーブル２９は、スケジューリングテーブル２２の内容が補数で表されている。補数は、１の補数であっても、２の補数であってもよい。このように、スケジューリングテーブル２２と照合用テーブル２９とを異なる表現形式で表した情報とすることで、スケジューリングテーブル２２と照合用テーブル２９の両方が同じ破壊のされ方をされないようにすることができる。
【００６２】
具体的に説明すると、照合用テーブル２９をスケジューリングテーブル２２のコピーとすることで、スケジューリングテーブル２２と照合用テーブル２９とを同一の表現形式で表した情報とした場合、それぞれのテーブル２２、２９を単純比較することによって、スケジューリングテーブル２２の破壊を検出することができる。しかしながら、それぞれのテーブル２２、２９において同じ位置の情報が同じように破壊されてしまった場合、破壊後の内容が同一となってしまう。そのため、それぞれのテーブル２２、２９の比較によってスケジューリングテーブル２２の破壊を検出することができなくなってしまう。それに対して、スケジューリングテーブル２２と照合用テーブル２９とを異なる表現形式で示すことで、そのようにスケジューリングテーブル２２と照合用テーブル２９が同じ破壊のされ方をされないようにすることができる。なお、照合用テーブル２９は、スケジューリングテーブル２２を異なる表現形式で表したものであれば、補数に限られない。
【００６３】
ここで、照合用テーブル２９は、スケジューリングテーブル２２と同一の表現形式で表された情報としてもよい。しかしながら、好ましくは、上述のように異なる表現形式とすることで、両方が同じ破壊のされ方をされないようにすることができる。また、照合用テーブル２９は、スケジューリングテーブル２２と同一の内容を示す情報に限られず、スケジューリングテーブル２２から予め生成された誤り検出符号であってもよい。誤り検出符号として、例えば、ＣＲＣ（Cyclic Redundancy Check）、パリティ、チェックサム、ハッシュ関数等を使用することができる。これによっても、スケジューリングテーブル２２から誤り検出符号を生成して、生成した誤り検出符号と照合用テーブル２９とを比較することによって、スケジューリングテーブル２２の破壊を検出することができるからである。
【００６４】
上述したように、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作し、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１が、選択したＴＰに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ２３、２５、２７が動作を開始することでタスクのスケジューリングが行われ、プロセッサ１０が、タスクスケジューラ２３、２５、２７によりスケジューリングされた順序に従って、ＴＰ内でのタスクを実行していく。これによって、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００６５】
続いて以下では、パーティションスケジューラ２１によるパーティション・スケジューリングについて、図６を用いて説明する。図６は、パーティションスケジューラ２１の処理手順の具体例を示すフローチャートである。
【００６６】
パーティションスケジューラ２１は、１Ｔｉｃｋ経過するごとに動作して、ＴＰのスケジューリングを行う（Ｓ１１）。パーティションスケジューラ２１は、ＴＰのスケジューリングを開始するときに、まず、スケジューリングテーブル２２の内容と照合用テーブル２９の内容とを比較して、スケジューリングテーブル２２が正常か否かを判定する（Ｓ１２）。スケジューリングテーブル２２と照合用テーブル２９とが異なる表現形式で表されている場合、パーティションスケジューラ２１は、いずれかを他方の表現形式に変換してそれぞれのテーブル２２、２９を比較する。そして、それぞれが一致した場合に、それぞれの内容が一致すると判定する。なお、照合用テーブル２９が２の補数で表されている場合、パーティションスケジューラ２１は、スケジューリングテーブル２２と照合用テーブル２９とを加算して、その加算結果が０となった場合にそれぞれの内容が一致すると判定するようにしてもよい。また、スケジューリングテーブル２２と照合用テーブル２９とが同一の表現形式で表されている場合、パーティションスケジューラ２１は、それぞれのテーブル２２、２９を単純比較する。そして、それぞれが一致した場合に、それぞれの内容が一致すると判定する。
【００６７】
このようにして、比較した結果、それぞれの内容が一致すると判定した場合は、スケジューリングテーブル２２が破壊されておらず、正常であると判定する。逆に、それぞれの内容が一致しない場合は、スケジューリングテーブル２２が破壊されており、正常でないと判定する。
【００６８】
一方、照合用テーブル２９が誤り検出符号である場合、パーティションスケジューラ２１は、上述したように、スケジューリングテーブル２２から誤り検出符号を生成して、生成した誤り検出符号と照合用テーブル２９とを比較すればよい。そして、それぞれが一致した場合に、スケジューリングテーブル２２が破壊されておらず、正常であると判定する。逆に、それぞれが一致しない場合は、スケジューリングテーブル２２が破壊されており、正常でないと判定する。
【００６９】
スケジューリングテーブル２２が正常でない場合（Ｓ１２で異常）、パーティションスケジューラ２２は、異常処置を実行する（Ｓ１３）。ここで、異常処置は、制御対象を安全な方向に動作させるための処置であればどのようなものであってもよい。例えば、強制的にＴＰ３に切り替えて、タスクスケジューラ２７に安全制御タスク２８を実行させるようにしてもよい。そして、安全制御タスク２８によって、制御対象を停止させるように制御してもよい。
【００７０】
スケジューリングテーブル２２が正常である場合（Ｓ１２で正常）、パーティションスケジューラ２１は、スケジューリングテーブル２２のスケジューリングパターンに従って、次の１Ｔｉｃｋの間にいずれのＴＰをアクティブにするかを選択・決定する。すなわち、パーティションスケジューラ２１は、スケジューリングパターンを参照して、ＴＰの切り替えタイミングとなったか否かを判定する（Ｓ１４）。
【００７１】
パーティションスケジューラ２１は、ＴＰの切り替えタイミングとなっている（Ｓ１４でＹｅｓ）場合には、スケジューリングテーブル２２のスケジューリングパターンに従って、ＴＰを切り替える（Ｓ１５）。そして、Ｓ１６に進み、切り替え後のＴＰＸについての動作を実行する。
【００７２】
ここで、変数ＸはＴＰの番号を示し、Ｘは１〜３のいずれかの値とする。すなわち、Ｓ１６では、ＴＰ１〜３のいずれかを動作させる。なお、図６では、通常制御スケジューリングパターン（例えば図５Ａ）または安全制御スケジューリングパターン（例えば図５Ｂ）に従って、スケジューリングを実行するものとする。すなわち、ＴＰ２またはＴＰ３に続く次のＴＰＸはＴＰ１であり、かつ、ＴＰ２での異常がＴＰ１で検知された場合に、ＴＰ１からの結果を受けて次に選択・決定されるＴＰＸはＴＰ３となる。
【００７３】
パーティションスケジューラ２１は、ＴＰの切り替えタイミングとなっていない（Ｓ１４でＮｏ）場合には、Ｓ１６に進み、現在アクティブとなっているＴＰＸと同一のＴＰＸについての動作を継続させる。
【００７４】
パーティションスケジューラ２１は、ＴＰＸのタスクスケジューラを動作させる（Ｓ１６）。Ｓ１６で動作を開始したＴＰＸのタスクスケジューラは、ＴＰＸ内のタスクを優先度に応じて実行する（Ｓ１７）。そして、１Ｔｉｃｋが経過すると、パーティションスケジューラ２１が、ＴＰのスケジューリングを開始する（Ｓ１１）。
【００７５】
図６で示した処理に関して、パーティション・スケジューリングの具体例を説明する。
まず、図５Ａに例示した通常制御スケジューリングパターンに従って、Ｓ１６においてＴＰ２がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、Ｓ１６ではＴＰＸ＝ＴＰ２として開始し、続くＳ１７、Ｓ１１〜Ｓ１４にかけてもＴＰＸ＝ＴＰ２のままである。そして、Ｓ１４でＮｏが続く限り、ＴＰＸ＝ＴＰ２の状態が維持される。Ｓ１４でＹｅｓとなり、Ｓ１５でＴＰ２からＴＰ１へと変更された場合、続くＳ１６、Ｓ１１〜Ｓ１４にかけてＴＰ１のままである。そして、Ｓ１４でＮｏが続く限り、ＴＰＸ＝ＴＰ１の状態が維持される。ＴＰ１がアクティブのときに、Ｓ１７でＴＰ２に関する実行状況（データ入出力）が正常であると判定されていた場合には、次のＳ１５では、ＴＰＸ＝ＴＰ２となる（つまり、ＴＰ２から開始する通常制御スケジューリングパターンが継続される。）。一方で、Ｓ１７でＴＰ２に関する実行状況（データ入出力）が異常であると判定されていた場合には、次のＳ１５で、ＴＰＸ＝ＴＰ３となる（つまり、Ｓ１５でＴＰ３から開始する安全制御スケジューリングパターンに切り替わる。）。
【００７６】
また、図５Ｂに例示した安全制御スケジューリングパターンに従って、Ｓ１６においてＴＰ３がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、Ｓ１６ではＴＰＸ＝ＴＰ３として開始し、続くＳ１７、Ｓ１１〜Ｓ１４にかけてもＴＰＸ＝ＴＰ３のままである。そして、Ｓ１４でＮｏが続く限り、ＴＰＸ＝ＴＰ３の状態が維持される。Ｓ１４でＹｅｓとなり、Ｓ１５でＴＰ３からＴＰ１へと変更された場合、Ｓ１６、Ｓ１１〜Ｓ１４にかけてＴＰ１のままである。そして、Ｓ１４でＮｏが続く限り、ＴＰＸ＝ＴＰ１の状態が維持される。ＴＰ１がアクティブのときに、Ｓ１７でＴＰ３に関する実行状況（データ入出力）が正常であると判定されていた場合には、次のＳ１５では、ＴＰＸ＝ＴＰ２となる（つまり、Ｓ１５でＴＰ２から開始する通常制御スケジューリングパターンに切り替わる。）。一方で、Ｓ１７でＴＰ３に関する実行状況（データ入出力）に異常があると判定されていた場合には、次のＳ１５で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンが継続される。）。
【００７７】
なお、上述の例では、スケジューリングパターンとして、３つのＴＰ（安全監視用のＴＰ１、通常制御用のＴＰ２、安全制御用のＴＰ３）のみを組み合わせた場合を例に説明したが、ＴＰ２のような通常制御用パーティションや、ＴＰ３のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、２つの通常制御用のＴＰ２及びＴＰ４と、安全監視用のＴＰ１と、２つの安全制御用のＴＰ３及びＴＰ５と、が存在し、これら５つのＴＰ（ＴＰ１〜ＴＰ５）を組み合わせてスケジューリングパターンを構成してもよい。この場合、Ｓ１５では、パーティションスケジューラ２１が、ＴＰＸに関する実行状況（データ入出力）の異常状態の種類を判定し、その異常種類に応じて、安全制御用のＴＰ３またはＴＰ５のいずれかを選択するようにしてもよい。また、Ｓ１５では、通常制御用のＴＰ２またはＴＰ４のいずれかを選択するようにしてもよい。
【００７８】
このように、ＯＳ１００は、安全監視用のＴＰ１からの通知、または、各ＴＰからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ２１を備えている。パーティションスケジューラ２１は、各ＴＰにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。
【００７９】
さらに、図６で例示した処理では、パーティションスケジューラ２１が、ＴＰ１からの結果通知に応じて、安全制御用のＴＰ３を選択・決定する、または、通常制御用のＴＰ２を選択・決定するものとして説明したが、本発明はこれに限定されない。例えば、安全監視用のＴＰ１のみからパーティションスケジューラ２１に対して結果を通知する構成に代えて、ＴＰ１〜ＴＰ３のそれぞれからパーティションスケジューラ２１に対して実行状況を通知する構成とし、パーティションスケジューラ２１が、各ＴＰからの結果通知に応じて、安全制御用のＴＰ３を選択・決定するものとしてもよい。
【００８０】
独立に動作するパーティションスケジューラ２１が、全てのＴＰから結果通知を受ける構成とすることで、パーティションスケジューラ２１は、全てのＴＰに関する状況を一元的に把握することができる。このため、例えば、安全監視用のＴＰ１からの結果通知に応じて、パーティションスケジューラ２１が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ２１は、各ＴＰの状況を考慮した上で、正常状態にあるＴＰのみから次のパーティションを決定・選択することができる。従って、特許文献１に開示の技術と比較して、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
【００８１】
さらに、以上に説明したように、本実施の形態１では、パーティションスケジューラ２１が、スケジューリングテーブル２２を参照してＴＰのスケジューリングを行うときに、照合用テーブル２９に基づいてスケジューリングテーブル２２が正常であるか否かを判定するようにしている。そして、スケジューリングテーブル２２が正常であると判定した場合に、スケジューリングテーブル２２に基づいてＴＰをスケジューリングするようにしている。これによれば、スケジューリングテーブル２２が破壊されてしまっていた場合に、そのスケジューリングテーブル２２を使用してＴＰをスケジューリングしてしまうことを防止することができる。よって、タスクが期待した順序で実行されなくなってしまうことを防止することができる。つまり、本実施の形態１によれば、上述した第１の問題となるケースが発生することを防止することができる。そのため、正常に実行されないタスクの実行を回避して、より安定した制御対象の制御を行うことが可能となる。
【００８２】
ここで、本実施の形態１では、次にアクティブにするＴＰを選択・決定する前に、スケジューリングテーブル２２が正常であるか否かを判定するようにしているが、スケジューリングテーブル２２の判定タイミングは、ＴＰを切り替えるときであれば、このタイミングに限られない。例えば、次にアクティブにするＴＰを選択・決定した後、次にアクティブにすると選択・決定したＴＰ内のタスクスケジューラを動作させるまでに、スケジューリングテーブル２２が正常であるか否かを判定するようにしてもよい。
【００８３】
本発明の実施の形態２．
続いて、本発明の実施の形態２にかかる安全制御装置について説明する。本実施の形態２にかかる安全制御装置の構成は、図１を参照して説明した実施の形態１にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ３０と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図７を用いて説明する。図７は、ＯＳ２００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ３０とタスク２４、２６、２８との関係を示す図である。
【００８４】
図７に示すように、本実施の形態２にかかるＯＳ２００は、実施の形態１にかかるＯＳ１００と比較して、パーティションスケジューラ２１に代えてパーティションスケジューラ３０を有する点が異なる。パーティションスケジューラ３０は、実施の形態１にかかるパーティションスケジューラ２１と同様に１Ｔｉｃｋごとに動作し、ＴＰの切り替えを行う。
【００８５】
さらに、パーティションスケジューラ３０は、ＴＰの情報３１を管理する。ＴＰの情報３１は、例えば、タイムパーティションに属するタスク、及びタイムパーティションに属するタスクの状態等を示す情報が含まれる。よって、ＴＰの情報３１は、ＴＰ１〜３のそれぞれに対応するように複数生成される。例えば、ＴＰ１の情報３１であれば、安全監視タスク２４が属すること、及び、安全監視タスク２４の状態がどのような状態か等を示す。タスクの状態とは、例えば、タスクが、実行状態、実行可能状態、及び待ち状態等のいずれであるかを示す。ＴＰの情報３１は、例えば、ＯＳ１００によって、ＴＰ及びそれに属するタスクの生成時に生成される。このように、ＴＰの情報３１のそれぞれは、ＴＰごとに固有の情報となる。ＴＰの情報３１のそれぞれは、パーティションコントロールブロック（ＰＣＢ：Partition Control Block）と呼ばれる領域に格納される。つまり、ＴＰの情報３１ごとに、ＰＣＢが設けられる。
【００８６】
パーティションスケジューラ３０によるＴＰの情報３１の管理ついて具体的に述べる。パーティションスケジューラ３０は、ＴＰを切り替えるときに、複数のＰＣＢの中から切り替え先のＴＰの情報３１を選択して、カレントのＴＰの情報３１としてロードする。そして、切り替え先のＴＰにおいて、カレントのＴＰの情報３１を使用して、切り替え先のＴＰにおけるタスクが実行される。このとき、ＴＰにおけるタスクの実行状況に応じてカレントのＴＰの情報３１が更新される。また、パーティションスケジューラ３０は、ＴＰを切り替えるときに、現在ロードしている切り替え前のＴＰの情報３１を、そのＴＰに対応するＰＣＢに退避する。つまり、ＴＰの情報３１は、ＴＰのコンテキストとして機能する。
【００８７】
また、パーティションスケジューラ３０は、ＴＰを切り替えるときに、切り替え前のＴＰの情報３１から、そのＴＰの情報３１と同一の内容を示す照合用保護データ３２を生成する。つまり、ＴＰの照合量保護データ３２も、ＴＰ１〜３のそれぞれに対応するように複数生成される。さらに、パーティションスケジューラ３０は、切り替え先のＴＰの情報３１と、そのＴＰの情報３１に対応する照合用保護データ３２とを照合して、切り替え先のＴＰの情報３１が破壊されているか否かをチェックする。そして、パーティションスケジューラ３０は、ＴＰの情報３１の破壊が検出されなかった場合に、切り替え先のＴＰの情報３１をロードして、ＴＰを切り替える。これによって、切り替え先のＴＰの情報３１の破壊が検出されなかった場合のみに、切り替え先のＴＰの情報３１を使用して、切り替え先のＴＰにおけるタスクが実行されるようにしている。
【００８８】
なお、ＴＰの情報３１及びＴＰの照合用保護データ３２のそれぞれは、例えば、実行用メモリ１１に格納される。この場合、実行用メモリ１１に、ＰＣＢと、カレントのＴＰの情報３１が格納される領域と、が設けられる。
【００８９】
ここで、ＴＰの照合用保護データ３２は、実施の形態１にかかる照合用テーブル２９と同様に、ＴＰの情報３１を補数で示した情報としてもよい。つまり、ＴＰの情報３１と、ＴＰの照合用保護データ３２とを異なる表現形式で表すようにして、ＴＰの情報３１と、ＴＰの照合用保護データ３２の両方が同じ破壊のされ方をされないようにしてもよい。また、ＴＰの照合用保護データ３２は、実施の形態１にかかる照合用テーブル２９と同様に、ＴＰの情報３１と同一の表現形式で表された情報としてもよい。また、ＴＰの照合用保護データ３２は、実施の形態１にかかる照合用テーブル２９と同様に、ＴＰの情報３１から生成した誤り検出符号としてもよい。
【００９０】
続いて、図８を参照して、パーティションスケジューラ３０によるパーティション・スケジューリングについて説明する。図８は、パーティションスケジューラ３０の処理手順の具体例を示すフローチャートである。なお、図６を参照して説明した、実施の形態１にかかるパーティションスケジューラ２１の処理手順と同様の処理手順については、同一の符号を付し、説明を省略する。本実施の形態２にかかる処理手順では、実施の形態１にかかる処理手順と比較して、ステップＳ１１とＳ１４の間でステップＳ１２を実行せず、ステップＳ１４とＳ１５の間にステップＳ１８を実行するようにし、ステップＳ１５とＳ１６の間にステップＳ１９を実行するようにしている点が異なる。
【００９１】
パーティションスケジューラ３０は、ＴＰの切り替えタイミングとなっている（Ｓ１４でＹｅｓ）場合には、切り替え先のＴＰが前回にアクティブだったときに保存していた切り替え先のＴＰの情報３１の内容と、そのＴＰの照合用保護データ３２の内容とを比較して、切り替え先のＴＰの情報３１が正常か否かを判定する（Ｓ１８）。
【００９２】
ＴＰの情報３１とＴＰの照合用保護データ３２とが異なる表現形式で表されている場合、パーティションスケジューラ３０は、実施の形態１と同様に、いずれかを他方の表現形式に変換してそれぞれのデータ３１、３２を比較することで判定を行うようにすればよい。また、ＴＰの照合用保護データ３２が２の補数で表されている場合、パーティションスケジューラ３０は、実施の形態１と同様に、ＴＰの情報３１とＴＰの照合用保護データ３２とを加算することで判定を行うようにしてもよい。また、ＴＰの情報３１とＴＰの照合用保護データ３２とが同一の表現形式で表されている場合、パーティションスケジューラ３０は、実施の形態１と同様に、それぞれのデータ３１、３２を単純比較することで判定を行うようにしてもよい。
【００９３】
このようにして、比較した結果、それぞれの内容が一致すると判定した場合は、ＴＰの情報３１は破壊されておらず、正常であると判定する。逆に、それぞれの内容が一致しない場合は、ＴＰの情報３１は破壊されており、正常でないと判定する。
【００９４】
一方、ＴＰの照合用保護データ３２が誤り検出符号である場合、パーティションスケジューラ３０は、本実施の形態１と同様に、ＴＰの情報３１から誤り検出符号を生成して、生成した誤り検出符号と照合用保護データ３２とを比較することで判定を行うようにしてもよい。そして、それぞれが一致した場合に、ＴＰの情報３１が破壊されておらず、正常であると判定する。逆に、それぞれが一致しない場合は、ＴＰの情報３１が破壊されており、正常でないと判定する。
【００９５】
切り替え先のＴＰの情報３１が正常でない場合（Ｓ１９で異常）、パーティションスケジューラ３０は、異常処置を実行する（Ｓ１３）。ここで、ＴＰ３の情報３１が正常でないと判定した場合には、異常処置として強制的にＴＰ３に切り替えても、安全制御タスク２８が正常に実行できない可能性がある。その場合は、異常処理として、パーティションスケジューラ３０が、制御対象を停止させるように制御するようにしてもよい。
【００９６】
切り替え先のＴＰの情報３１が正常である場合（Ｓ１９で正常）、パーティションスケジューラ３０は、ＴＰを切り替える（Ｓ１５）。このときに、パーティションスケジューラ３０は、現在実行していた切り替え前のＴＰの情報３１をＰＣＢに格納する形式としたＴＰの情報３１と、その切り替え前のＴＰの情報３１と同一の内容を示すＴＰの照合用保護データ３２を生成して実行用メモリ１１に保存する（Ｓ１９）。つまり、カレントのＴＰの情報３１としてロードされていた切り替え前のＴＰの情報３１は、ＰＣＢに退避される。そして、パーティションスケジューラ３０は、切り替え先のＴＰの情報３１を、カレントのＴＰの情報３１としてＰＣＢからロードする。これによって、正常と判定された切り替え先のＴＰの情報３１に基づいて、切り替え先のＴＰＸに属するタスクスケジューラがタスクを実行する（Ｓ１６、Ｓ１７）。
【００９７】
以上に説明したように、本実施の形態２では、パーティションスケジューラ３０が、ＴＰを切り替えるときに、切り替え先のＴＰの照合用保護データ３２に基づいて、切り替え先のＴＰの情報３１が正常であるか否かを判定するようにしている。そして、切り替え先のＴＰの情報３１が正常であると判定した場合に、ＴＰの切り替えを行い、切り替え先のＴＰの情報３１に基づいて、切り替え先のＴＰに属するタスクを実行するようにしている。これによれば、ＴＰの情報３１が破壊されてしまっていた場合に、そのＴＰの情報３１を使用してタスクを実行してしまうことを防止することができる。つまり、本実施の形態２によれば、上述した第２の問題となるケースが発生することを防止することができる。そのため、正常に実行されないタスクの実行を回避して、より安定した制御対象の制御を行うことが可能となる。
【００９８】
本発明の実施の形態３．
続いて、本発明の実施の形態３にかかる安全制御装置について説明する。本実施の形態３にかかる安全制御装置の構成は、図１を参照して説明した実施の形態１にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ３３と、アプリケーション１０１〜１０３の起動により生成されるタスク３４、３５、３６と、の関係について、図９を用いて説明する。図９は、ＯＳ３００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ３３とタスク３４、３５、３６との関係を示す図である。
【００９９】
図９に示すように、本実施の形態３にかかるＯＳ３００は、実施の形態１にかかるＯＳ１００と比較して、パーティションスケジューラ２１に代えてパーティションスケジューラ３３を有する点、及び、タスクスケジューラ２３、２５、２７に代えてタスクスケジューラ３４、３５、３６を有する点が異なる。パーティションスケジューラ３３は、実施の形態１にかかるパーティションスケジューラ２１と同様に１Ｔｉｃｋごとに動作し、ＴＰの切り替えを行う。
【０１００】
タスクスケジューラ３４、３５、３６は、実施の形態１にかかるタスクスケジューラ２３、２５、２７と同様に、それぞれが属するＴＰ内でのタスクのスケジューリングを行う。さらに、タスクスケジューラ３４、３５、３６のそれぞれは、タスクの情報３７を管理する。タスクの情報３７は、例えば、タスクのスタック、プログラムカウンタ等のタスクの実行状況に応じたプロセッサのレジスタ値、タスク間通信のミューテックス又はセマフォ、及びタスク間通信のメッセージキュー等を示す。よって、タスクの情報３７は、タスク２４、２６、２８のそれぞれに対応するように複数生成される。タスクの情報３７は、例えば、ＯＳ１００によって、タスクの生成時に生成される。このように、タスクの情報３７のそれぞれは、タスク２４、２６、２８ごとに固有の情報となる。タスクの情報３７のそれぞれは、タスクコントロールブロック（ＴＣＢ:Task Control Block）と呼ばれる領域に格納される。つまり、タスクの情報３７ごとに、ＴＣＢが設けられる。
【０１０１】
タスクスケジューラ３４、３５、３６のそれぞれによるタスクの情報３７の管理について具体的に述べる。タスクスケジューラ３４、３５、３６のそれぞれは、タスクを切り替えるときに、複数のＴＣＢの中から切り替え先のタスクの情報３７を選択して、カレントのタスクの情報３７としてロードする。そして、切り替え先のタスクは、カレントのタスクの情報３７を使用して処理を実行する。このとき、タスクの実行状況に応じてカレントのタスクの情報３７が更新される。また、タスクスケジューラ３４、３５、３６のそれぞれは、タスクを切り替えるときに、現在ロードしている切り替え前のタスクの情報３７を、そのタスクに対応するＴＣＢに退避する。つまり、タスクの情報３７は、タスクのコンテキストとして機能する。
【０１０２】
また、タスクスケジューラ３４、３５、３６のそれぞれは、タスクを切り替えるときに、切り替え前のタスクの情報３７から、そのタスクの情報３７と同一の内容を示す照合用保護データ３８を生成する。つまり、タスクの照合用保護データ３８も、タスク２４、２６、２８のそれぞれに対応するように複数生成される。さらに、タスクスケジューラ３４、３５、３６のそれぞれは、切り替え先のタスクの情報３７と、そのタスクの情報３７に対応する照合用保護データ３８とを照合して、タスクの情報３７が破壊されているか否かをチェックする。そして、タスクスケジューラ３４、３５、３６のそれぞれは、タスクの情報３７の破壊が検出されなかった場合に、切り替え先のタスクの情報３７をロードして、タスクを切り替える。これによって、タスクの情報３７の破壊が検出されなかった場合のみに、そのタスクの情報３７を使用してタスクが実行されるようにしている。
【０１０３】
なお、タスクの情報３７及びタスクの照合用保護データ３８のそれぞれは、例えば、実行用メモリ１１に格納される。この場合、実行用メモリ１１に、ＴＣＢと、カレントのタスクの情報３８が格納される領域と、が設けられる。
【０１０４】
ここで、タスクの照合用保護データ３８は、実施の形態１にかかる照合用テーブル２９と同様に、タスクの情報３７を補数で示した情報としてもよい。つまり、タスクの情報３７と、タスクの照合用保護データ３８とを異なる表現形式で表すようにして、タスクの情報３７と、タスクの照合用保護データ３８の両方が同じ破壊のされ方をされないようにしてもよい。また、タスクの照合用保護データ３８は、タスクの情報３７をコピーして生成することによって、タスクの情報３７と同一の表現形式で表された情報としてもよい。また、タスクの照合用保護データ３８は、タスクの情報３７から生成した誤り検出符号としてもよい。
【０１０５】
続いて、図１０を参照して、パーティションスケジューラ３３によるパーティション・スケジューリングについて説明する。図１０は、パーティションスケジューラ３３の処理手順の具体例を示すフローチャートである。なお、図６を参照して説明した、実施の形態１にかかるパーティションスケジューラ２１の処理手順及び実施の形態２にかかるパーティションスケジューラ３０の処理手順と同様の処理手順については、同一の符号を付し、説明を省略する。本実施の形態３にかかる処理手順では、実施の形態１にかかる処理手順と比較して、ステップＳ１１とＳ１４の間でステップＳ１２を実行せず、ステップＳ１６とステップＳ１７の間にステップＳ２０及びＳ２１を実行するようにしている点が異なる。
【０１０６】
ステップＳ１６で動作を開始したタスクスケジューラは、実行するタスクを切り替える場合、前回に保存していた切り替え先のタスクの情報３７の内容と、そのタスクの照合用保護データ３８の内容とを比較して、切り替え先のタスクの情報３７が正常か否かを判定する（Ｓ２０）。タスクの情報３７とタスクの照合用保護データ３８とが異なる表現形式で表されている場合、タスクスケジューラは、実施の形態１と同様に、いずれかを他方の表現形式に変換してそれぞれのデータ３７、３８を比較することで判定を行うようにすればよい。また、タスクの照合用保護データ３８が２の補数で表されている場合、タスクスケジューラは、実施の形態１と同様に、タスクの情報３７とタスクの照合用保護データ３８とを加算することで判定を行うようにしてもよい。また、タスクの情報３７とタスクの照合用保護データ３８とが同一の表現形式で表されている場合、タスクスケジューラは、実施の形態１と同様に、それぞれのデータ３７、３８を単純比較することで判定を行うようにしてもよい。
【０１０７】
このようにして、比較した結果、それぞれの内容が一致すると判定した場合は、タスクの情報３７は破壊されておらず、正常であると判定する。逆に、それぞれの内容が一致しない場合は、タスクの情報３７は破壊されており、正常でないと判定する。
【０１０８】
一方、タスクの照合用保護データ３８が誤り検出符号である場合、タスクスケジューラは、本実施の形態１と同様に、タスクの情報３７から誤り検出符号を生成して、生成した誤り検出符号と照合用保護データ３８とを比較することで判定を行うようにしてもよい。そして、それぞれが一致した場合に、タスクの情報３７が破壊されておらず、正常であると判定する。逆に、それぞれが一致しない場合は、タスクの情報３７が破壊されており、正常でないと判定する。
【０１０９】
切り替え先のタスクの情報３７が正常でない場合（Ｓ２０で異常）、タスクスケジューラは、異常処置を実行する（Ｓ１３）。ここで、安全制御タスク２８の情報が正常でないと判定した場合には、異常処置として強制的に安全制御タスク２８を実行しようとしても、安全制御タスク２８を正常に実行できない可能性がある。その場合は、異常処理として、パーティションスケジューラ３０が、制御対象を停止させるように制御するようにしてもよい。
【０１１０】
切り替え先のタスクの情報３７が正常である場合（Ｓ２０で正常）、タスクスケジューラは、現在実行していた切り替え前のタスクの情報３７と、そのタスクの情報３７と同一の内容を示すタスクの照合用保護データ３８を生成して実行用メモリ１１に保存する（Ｓ２１）。つまり、カレントのタスクの情報３７としてロードされていた切り替え前のタスクの情報３７は、ＴＣＢに退避される。そして、タスクスケジューラは、切り替え先のタスクの情報３７を、カレントのタスクの情報３７としてＴＣＢからロードする。これによって、切り替え先のタスクは、正常と判定された切り替え先のタスクの情報３７に基づいて、切り替え先のタスクを実行する（Ｓ１７）。
【０１１１】
以上に説明したように、本実施の形態３では、タスクスケジューラ３４、３５、３６が、タスクを切り替えるときに、切り替え先のタスクの照合用保護データ３８に基づいて、切り替え先のタスクの情報３７が正常であるか否かを判定するようにしている。そして、切り替え先のタスクの情報３７が正常であると判定した場合に、タスクの切り替えを行い、切り替え先のタスクの情報３７に基づいて、切り替え先のタスクを実行するようにしている。これによれば、タスクの情報３７が破壊されてしまっていた場合に、そのタスクの情報３７を使用してタスクを実行してしまうということを防止することができる。つまり、本実施の形態３によれば、上述した第３の問題となるケースが発生することを防止することができる。そのため、正常に実行されないタスクの実行を回避して、より安定した制御対象の制御を行うことが可能となる。
【０１１２】
本発明の実施の形態４．
続いて、本発明の実施の形態４にかかる安全制御装置について説明する。本実施の形態４では、実施の形態１〜３を組み合わせた実施の形態について説明する。
【０１１３】
本実施の形態４にかかる安全制御装置の構成は、図１を参照して説明した実施の形態１にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ３６と、アプリケーション１０１〜１０３の起動により生成されるタスク３４、３５、３６と、の関係について、図１１を用いて説明する。図１１は、ＯＳ３００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ３６とタスク３４、３５、３６との関係を示す図である。
【０１１４】
図１１に示すように、本実施の形態４にかかるＯＳ４００は、実施の形態１にかかるＯＳ１００と比較して、パーティションスケジューラ２１に代えてパーティションスケジューラ３９を有する点、及び、タスクスケジューラ２３、２５、２７に代えてタスクスケジューラ３４、３５、３６を有する点が異なる。
【０１１５】
パーティションスケジューラ３９は、実施の形態１にかかるパーティションスケジューラ２１と同様に１Ｔｉｃｋごとに動作し、ＴＰの切り替えを行う。さらに、パーティションスケジューラ３９は、実施の形態１と同様のスケジューリングテーブル２２の破壊のチェック、及び、実施の形態２と同様のＴＰの情報３１の破壊のチェックを行う。タスクスケジューラ３４、３５、３６については、実施の形態３と同様であるため、説明を省略する。
【０１１６】
続いて、図１２を参照して、パーティションスケジューラ３３によるパーティション・スケジューリングについて説明する。図１２は、パーティションスケジューラ３３の処理手順の具体例を示すフローチャートである。
【０１１７】
本実施の形態４にかかる処理手順は、図１２に示すように、実施の形態１〜３の処理手順を組み合わせた処理手順となる。つまり、本実施の形態４にかかる処理手順では、実施の形態１にかかる処理手順と比較して、ステップＳ１４とＳ１５の間にステップＳ１８を実行するようにし、ステップＳ１５とＳ１６の間にステップＳ１９を実行するようにし、ステップＳ１６とＳ１７の間にステップＳ２０及びＳ２１を実行するようにしている点が異なる。このように、本実施の形態４では、実施の形態１にかかるスケジューリングテーブル２２の破壊のチェック、実施の形態２にかかるＴＰの情報３１の破壊のチェック、及び、実施の形態３にかかるタスクの情報３８の破壊のチェックの全てを実行する。
【０１１８】
以上に説明したように、本実施の形態４では、スケジューリングテーブル２２の破壊のチェック、ＴＰの情報３１の破壊のチェック、及び、タスクの情報３８の破壊のチェックの全てを実行するようにしている。そのため、実施の形態１〜３と比較して、より正常に実行されないタスクの実行を回避して、より安定した制御対象の制御を行うことが可能となる。
【０１１９】
なお、本実施の形態４では、実施の形態１〜３の全てを組み合わせた場合について例示したが、組み合わせのパターンはこれに限られない。実施の形態１〜３のうち、任意の２つの実施の形態を組み合わせるようにしてもよい。
【０１２０】
本発明の実施の形態５．
続いて、本発明の実施の形態５にかかる安全制御装置について説明する。本実施の形態５にかかる安全制御装置の構成、パーティションスケジューラとタスクとの関係、及び処理手順については、実施の形態４にかかる安全制御装置と同様であるため、その説明を省略する。
【０１２１】
本実施の形態５は、図１３に示すように、実行用メモリ１１が複数のメモリデバイスの組み合わせで構成されている。本実施の形態５にかかる実行用メモリ１１は、２つのメモリデバイス１１ａ、１１ｂを含む。なお、メモリデバイス１１ａ、１１ｂのそれぞれは、例えば、ＳＲＡＭデバイス又はＤＲＡＭデバイス等である。つまり、実行用メモリ１１は、物理的に異なる２つのメモリデバイス１１ａ、１１ｂから構成される論理的な構成単位である。よって、メモリデバイス１１ａ、１１ｂのそれぞれは、物理的に離れた位置に設けられることになる。
【０１２２】
メモリデバイス１１ａには、スケジューリングテーブル２２、ＴＰの情報３１、及びタスクの情報３７が格納される。メモリデバイス１１ｂには、照合用テーブル２９、ＴＰの照合用保護データ３２、及びタスクの照合用保護データ３８が格納される。
【０１２３】
以上に説明したように、本実施の形態５では、データ破壊のチェック対象となるデータと、データ破壊のチェックに使用する照合用のデータとが、物理的に離れた位置に配置されることになる。これによれば、放射線の影響によってチェック対象となるデータが破壊されたときに、その放射線の影響によってその照合用のデータまでもが破壊されてしまう可能性を低減することができる。そのため、データ破壊をチェック対象のデータのみに止めることができ、データ破壊の検出精度を向上することができる。
【０１２４】
なお、本実施の形態５では、実施の形態４において扱われるデータを、物理的に異なるメモリデバイスに格納した場合について例示したが、これに限られない。実施の形態１〜３のいずれかにおいても、同様にして、チェック対象のデータと照合用のデータを、物理的に異なるメモリデバイスに格納するようにしてもよい。
【０１２５】
また、本実施の形態５では、物理的に異なるメモリデバイスが２つの場合について例示したが、チェック対象のデータとその照合用のデータとが物理的に異なるメモリデバイスに格納されるようにするものであれば、メモリデバイスの数はこれに限られない。
【０１２６】
発明の他の実施の形態．
本実施の形態では、ＴＰのそれぞれに属するタスクが、それぞれ安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８に限られず、他の任意の制御対象の制御に関する処理を実行するタスクを有するようにしてもよい。
【０１２７】
例えば、図１４に示すようなタスク４０、４１、４２を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション１０１〜１０３に代えて、タスク４０〜４２に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
【０１２８】
監視制御タスク４０は、制御対象を制御する。具体的には、監視制御タスク４０は、通常制御タスク４１及び安全制御タスク４２からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク４１は、制御対象に通常の機能・動作を行わせるための制御計算を行う。具体的には、通常制御タスク４１は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク４１は、算出した指令値を監視制御タスク４０に出力する。安全制御タスク４２は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク４２は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク４２は、算出した指令値を監視制御タスク４０のそれぞれに出力する。監視制御タスク４０は、通常制御タスク４１又は安全制御タスク４２から出力された指令値に基づいてアクチュエータを制御する。
【０１２９】
さらに、監視制御タスク４０は、制御対象のセンサから、センサ値を取得する。監視制御タスク４０は、取得したセンサ値を通常制御タスク４１及び安全制御タスク４２に出力する。通常制御タスク４１及び安全制御タスク４２のそれぞれは、監視制御タスク４０から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。
【０１３０】
また、その他に、例えば、図１５に示すようなタスク４３、４４、４５を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション１０１〜１０３に代えて、タスク４３〜４５に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
【０１３１】
監視タスク４３は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク４３は、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク４３は、取得したセンサ値をＨＭＩ（Human Machine Interface）タスク４４に出力する。
【０１３２】
ＨＭＩタスク４５は、監視タスク４３から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。ＨＭＩタスク４４は、算出した指令値を制御タスク４４に出力する。制御タスク４４は、ＨＭＩタスク４５から出力された指令値に基づいて、アクチュエータを制御する。
【０１３３】
これによれば、搭乗者の操作に応じて制御対象が制御されるというＨＭＩを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態１〜５及び図１４によって説明した例についても同様のことが言える。具体的には、安全監視タスク２４又は監視制御タスク４０が取得したセンサ値に応じて、通常制御タスク２６及び安全制御タスク２８、もしくは、通常制御タスク４２及び安全制御タスク４１が同様の制御をすることで、ＨＭＩを実現することが可能である。また、本実施の形態によれば、より安定した制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。
【０１３４】
なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。
【０１３５】
また、本実施の形態では、データ破壊のチェック対象となるデータ１つに対して、照合用のデータを１つだけ設ける場合について例示したが、これに限られない。つまり、照合用のデータを複数設けるようにしてもよい。この場合、予め複数の照合用テーブル２９を実行用メモリ１１に格納しておく。この場合、パーティションスケジューラ３０は、ＴＰを切り替えるときに、切り替え前のＴＰの情報３１と同一の内容を示すＴＰの照合用保護データ３２を複数生成して実行用メモリ１１に保存する。この場合、タスクスケジューラ３４、３５、３６のそれぞれは、タスクを切り替えるときに、切り替え前のタスクの情報３７と同一の内容を示すタスクの照合用保護データ３２を複数生成して実行用メモリ１１に保存する。
【０１３６】
そして、多数決によって正常なデータを判定して、正常であると判定したデータを使用するようにしてもよい。例えば、スケジューリングテーブル２２が１つあり、照合用テーブル２９が２つある場合、パーティションスケジューラ２１は、それら３つのデータを相互に比較して多数決で正常なデータを判定する。具体的には、スケジューリングテーブル２２の内容と照合用テーブル２９の内容と不一致となったときであっても、スケジューリングテーブル２２の内容と他方の照合用テーブル２９の内容とが一致した場合には、スケジューリングテーブル２２を使用してＴＰを切り替えるようにすればよい。また、２つの照合用テーブル２９の内容が一致し、それらとスケジューリングテーブル２２との内容が一致しない場合には、スケジューリングテーブル２２に代えて２つの照合用テーブル２９のうちいずれかを使用してＴＰを切り替えるようにすればよい。この場合、照合用テーブル２９に基づいて、破壊されたスケジューリングテーブル２２を復旧するようにしてもよい。ＴＰの情報３１及びタスクの情報３７の判定についても、これと同様の判定を行えばよいため、説明を省略する。
【０１３７】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、実施の形態１乃至３の全て又はいずれかを組み合わせて実施するようにしてもよい。
【０１３８】
本実施の形態では、ＯＳが、ＴＰ１〜ＴＰ３を有する場合について例示したが、ＴＰの数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
【０１３９】
本実施の形態では、タスクが、それぞれ安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８の３つである場合について例示したが、タスクの数は、これに限られない。例えば、本実施の形態では、ＴＰがＴＰ１〜ＴＰ３の３つである場合について例示したが、ＴＰの数を３つ以外の数とし、それぞれのＴＰが１つ以上の任意の数のタスクを有するようにしてもよい。
【符号の説明】
【０１４０】
１  安全制御装置
１０  プロセッサ
１１  実行用メモリ
１１ａ、１１ｂ  メモリデバイス
１２  Ｉ／Ｏポート
１３  不揮発性メモリ
１４  リセット回路
１５  マイクロコントローラ
２１、３０、３３  パーティションスケジューラ
２２  スケジューリングテーブル
２３、２５、２７、３４、３５、３６、３９  タスクスケジューラ
２４  安全監視タスク
２６、４１  通常制御タスク
２８、４２  安全制御タスク
２９  照合用テーブル
３１  ＴＰの情報
３２  ＴＰの照合用保護データ
３７  タスクの情報
３８  タスクの照合用保護データ
４０  監視制御タスク
４３  監視タスク
４４  制御タスク
４５  ＨＭＩタスク
１００、２００、３００、４００  オペレーティングシステム
１０１  安全監視アプリケーション
１０２  通常制御アプリケーション
１０３  安全制御アプリケーション
【図１】
0005699910.tif 000002
【図２】
0005699910.tif 000003
【図３】
0005699910.tif 000004
【図４】
0005699910.tif 000005
【図５Ａ】
0005699910.tif 000006
【図５Ｂ】
0005699910.tif 000007
【図６】
0005699910.tif 000008
【図７】
0005699910.tif 000009
【図８】
0005699910.tif 000010
【図９】
0005699910.tif 000011
【図１０】
0005699910.tif 000012
【図１１】
0005699910.tif 000013
【図１２】
0005699910.tif 000014
【図１３】
0005699910.tif 000015
【図１４】
0005699910.tif 000016
【図１５】
0005699910.tif 000017
【図１６】
0005699910.tif 000018
【図１７】
0005699910.tif 000019
【図１８】
0005699910.tif 000020
【図１９】
0005699910.tif 000021