(57)【要約】異常発生時に、より迅速に安全制御を実行可能とする。ＯＳ（１００）は、安全監視プログラムに実行時間を割り当てるＴＰ１、通常制御プログラムに実行時間を割り当てるＴＰ２、および安全制御プログラムに実行時間を割り当てるＴＰ３を含むスケジューリングパターンに従って、次にスケジューリングするタイムパーティションを選択・決定するパーティションスケジューラ（２１）を一部に有する。プロセッサは、ＯＳ（１００）を実行することによって、パーティションスケジューラ（２１）を周期的に動作させる。パーティションスケジューラは、ＴＰ１内で実行される安全監視プログラムまたはＴＰ２内で実行される通常制御プログラムによって異常が検知されたことに応じて起動され、ＴＰ１またはＴＰ２から、ＴＰ３のタイムパーティションへの切り替えを行う。
2012104899.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサを含むハードウェア資源と、  （ａ）制御対象に関する異常の発生を監視する安全監視プログラム、（ｂ）通常時における前記制御対象の制御に関連する通常制御プログラム、および（ｃ）異常時における前記制御対象の制御に関連する安全制御プログラムに対する前記プロセッサの実行時間の割り当てを制御するためのシステムプログラムと、を備え、  前記システムプログラムは、（ｄ）前記安全監視プログラムに前記実行時間を割り当てる第１のタイムパーティション、（ｅ）前記通常制御プログラムに前記実行時間を割り当てる第２のタイムパーティション、および（ｆ）前記安全制御プログラムに前記実行時間を割り当てる第３のタイムパーティションを含むスケジューリングパターンに従って、次にスケジューリングするタイムパーティションを選択・決定するパーティションスケジューラを一部に有し、  前記プロセッサは、前記システムプログラムを実行することによって、前記パーティションスケジューラを周期的に動作させ、  前記パーティションスケジューラは、前記第１のタイムパーティション内で実行される前記安全監視プログラムまたは前記第２のタイムパーティション内で実行される前記通常制御プログラムによって異常が検知されたことに応じて起動され、前記第１のタイムパーティションまたは前記第２のタイムパーティションから、前記第３のタイムパーティションへの切り替えを行う  安全制御装置。
【請求項２】
前記パーティションスケジューラは、前記第２のタイムパーティション内で実行される前記通常制御プログラムによって異常が検知されたことに応じて強制的に起動され、前記第２のタイムパーティションから前記第３のタイムパーティションへの切り替えを即座に行う  ことを特徴とする請求項１に記載の安全制御装置。
【請求項３】
前記通常制御プログラムは、異常を検知した場合に、前記通常制御プログラムが実行される前記第２のタイムパーティション内において実行可能時間が残されているか判断し、残されている場合には、前記パーティションスケジューラに対してタイムパーティションの切り替え希望を通知し、  前記パーティションスケジューラは、前記通常制御プログラムからのタイムパーティションの切り替え希望通知を受けた場合に、次の周期で動作して、前記第２のタイムパーティションから前記第３のタイムパーティションへの切り替えを行う  ことを特徴とする請求項１に記載の安全制御装置。
【請求項４】
前記システムプログラムは、前記タイムパーティション内で実行されるプログラムのスケジューリングを行うタスクスケジューラと、を一部に更に有し、  前記パーティションスケジューラは、前記タスクスケジューラを動作させ、前記タスクスケジューラによる前記プログラムの切り替え回数に応じて、前記タイムパーティション内での前記プログラムの実行状況を判断する  ことを特徴とする請求項１乃至３いずれか１項に記載の安全制御装置。
【請求項５】
前記パーティションスケジューラが、前記タスクスケジューラを有し、  前記パーティションスケジューラが、前記タスクスケジューラを動作させる  ことを特徴とする請求項４に記載の安全制御装置。
【請求項６】
前記プログラムには、それぞれ優先度が設定されており、  前記タイムパーティションの１サイクルが、複数の前記タイムパーティションが含まれ、かつ、複数の前記タイムパーティションのそれぞれに時間が割り当てられて構成されており、  前記パーティションスケジューラは、前記プログラムの優先度と、前記プログラムが実行される前記タイムパーティション内で残されている実行可能時間と、に応じて、次に実行するプログラムを決定し、当該決定したプログラムを含むタイムパーティションに切り替えを行う  ことを特徴とする請求項１乃至５いずれか１項に記載の安全制御装置。
【請求項７】
前記パーティションスケジューラは、前記プログラムの優先度にしたがって、次に実行するプログラムを検索し、当該検索したプログラムが実行される前記タイムパーティション内で実行可能時間が残されている場合に、次に実行するプログラムとして決定する  ことを特徴とする請求項６に記載の安全制御装置。
【請求項８】
前記パーティションスケジューラは、前記プログラムが実行される前記タイムパーティションのうちで、実行可能時間が残されているタイムパーティションを検索し、当該検索したタイムパーティション内で優先度に従って、次に実行するプログラムを決定する  ことを特徴とする請求項６に記載の安全制御装置。
【請求項９】
前記安全監視プログラム、前記通常制御プログラム、および前記安全制御プログラムのうちでいずれか２つのプログラムを第１のプログラムおよび前記第２のプログラムとして、前記第１のプログラムおよび前記第２のプログラム間でのデータ通信のために用いられ、複数の共有部分に分割されて構成される共有メモリを更に備え、  前記プロセッサは、前記システムプログラムを実行することによって、前記タイムパーティションを選択・決定させ、前記タイムパーティション内で実行される前記第１のプログラムが前記共有メモリのいずれかの共有部分にアクセスしている場合には、前記タイムパーティション内で実行される前記第２のプログラムのアクセス先を、前記第１のプログラムがアクセスしてない共有部分であって、かつ、最新の更新データが記憶されている共有部分とする  ことを特徴とする請求項１乃至８いずれか１項に記載の安全制御装置。
【請求項１０】
前記プロセッサは、前記システムプログラムを実行することによって、前記タイムパーティションを選択・決定させ、前記タイムパーティション内で実行される前記第１のプログラムが前記共有メモリのいずれかの共有部分にアクセスする際に規定の回数以上アクセスしていた場合には、異常であると判断する  ことを特徴とする請求項９に記載の安全制御装置。
【請求項１１】
（ａ）制御対象に関する異常の発生を監視する安全監視プログラムにプロセッサの実行時間を割り当てる第１のタイムパーティション、（ｅ）通常時における前記制御対象の制御に関連する通常制御プログラムに前記実行時間を割り当てる第２のタイムパーティション、および（ｆ）異常時における前記制御対象の制御に関連する安全制御プログラムに前記実行時間を割り当てる第３のタイムパーティションを含むスケジューリングパターンに従って、次にスケジューリングするタイムパーティションを前記プロセッサに選択・決定させるべく周期的に動作するステップと、  前記第１のタイムパーティション内で実行される前記安全監視プログラムまたは前記第２のタイムパーティション内で実行される前記通常制御プログラムによって異常が検知されたことに応じて、前記第１のタイムパーティションまたは前記第２のタイムパーティションから、前記第３のタイムパーティションへの切り替えを前記プロセッサに行わせるべく動作するステップと、  を備える制御対象の安全制御方法。
【請求項１２】
前記安全制御方法は、  前記プログラムの切り替え回数に応じて、前記タイムパーティション内での前記プログラムの実行状況を前記プロセッサに判断させるべく動作するステップを、更に備える  ことを特徴とする請求項１１に記載の安全制御方法。
【請求項１３】
前記安全制御方法は、  前記プログラムが実行される前記タイムパーティションのうちで、実行可能時間が残されているタイムパーティションを検索し、当該検索したタイムパーティション内で優先度に従って、次に実行するプログラムを前記プロセッサに決定させるべく動作するステップを、更に備える  ことを特徴とする請求項１１又は１２いずれか１項に記載の安全制御方法。
【請求項１４】
前記安全制御方法は、  前記安全監視プログラム、前記通常制御プログラム、および前記安全制御プログラムのうちでいずれか２つのプログラムを第１のプログラムおよび前記第２のプログラムとして、前記第１のプログラムおよび前記第２のプログラム間でのデータ通信のために用いられ、複数の共有部分に分割されて構成される共有メモリへのアクセスを前記プロセッサに実行させるべく動作するステップを更に備え、  前記共有メモリへのアクセスを前記プロセッサに実行させるべく動作するステップでは、前記タイムパーティション内で実行される前記第１のプログラムが前記共有メモリのいずれかの共有部分にアクセスしている場合には、前記タイムパーティション内で実行される前記第２のプログラムのアクセス先を、前記第１のプログラムがアクセスしてない共有部分であって、かつ、最新の更新データが記憶されている共有部分とする  ことを特徴とする請求項１１乃至１３いずれか１項に記載の安全制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、機能安全の確保のためにサービスロボットおよび輸送機器等に搭載される安全制御装置に関し、特に、コンピュータシステムを用いた安全制御装置に関する。
【背景技術】
【０００２】  サービスロボットは、外界センサや自己診断装置によって安全状態を常時監視し、何らかの危険を検知した場合に適切な安全制御ロジックを実行することで、機能安全を確保する必要がある。【０００３】  上述したサービスロボットのほか、運輸機器等の電気的な原理で動作するシステムを対象とした機能安全に関する国際標準として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）、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ１３は、ＯＳ１００及びアプリケーション１０１〜１０３を格納する。なお、不揮発性メモリ１３の少なくとも一部は安全制御装置１から取り外し可能に構成されてもよい。例えば、アプリケーション１０１〜１０３が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ１３の少なくとも一部は、安全制御装置１の外部に配置されてもよい。
【００４５】  ＯＳ１００は、プロセッサ１０によって実行されることにより、プロセッサ１０及び実行用メモリ１１及び不揮発性メモリ１３等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
【００４６】  さらに、機能安全の確保に関連する安全監視アプリケーション１０１及び安全制御アプリケーション１０３の通常制御アプリケーション１０２からの独立性を高めるため、ＯＳ１００は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２を含む。
【００４７】  このうち、時間的な保護は、プロセッサ１０の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ１０の実行時間をパーティショニングし、各パーティション（タイムパーティションと呼ぶ）にタスク（プロセス又はスレッド）を割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、各タイムパーティション（以下、ＴＰと略称する場合がある。）に割り当てられたタスクに対して、プロセッサ１０の実行時間を含む資源の利用を保証する。
【００４８】  図２は、タイム・パーティショニングに関する概念図である。図２の例では、予め定められた１サイクル時間を３つのＴＰ１、ＴＰ２及びＴＰ３に分割する例を示している。例えば、１サイクル時間を１００Ｔｉｃｋとした場合、このうち前半の２０ＴｉｃｋがＴＰ１、中間の３０ＴｉｃｋがＴＰ２、後半の５０ＴｉｃｋがＴＰ３と規定される。
【００４９】  また、図２の例では、第１アプリケーション（ＡＰＬ１）〜第４アプリケーション（ＡＰＬ４）が、ＴＰ１〜ＴＰ３のいずれかに割り当てられている。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、時間の経過に応じて、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。そして、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００５０】  一方、空間的な保護は、実行用メモリ１１及びＩ／Ｏポート１２を含む固定的な資源をパーティショニングし、各パーティション（リソースパーティションと呼ぶ）にタスクを割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、予め割り当てられたリソースパーティション（以下、ＲＰと略称する場合がある。）を超えてタスクが他のリソースにアクセスすることを禁止する。
【００５１】  図３は、リソース・パーティショニングに関する概念図である。図３の例では、２つのＲＰ（ＲＰ１及びＲＰ２）を示している。ＲＰ１には、実行用メモリ１１及び不揮発性メモリ１３の一部（Ａ領域）と、Ｉ／Ｏポート１２の一部（ポートＡ）が割り当てられている。また、ＲＰ２には、実行用メモリ１１及び不揮発性メモリ１３の他の一部（Ｂ領域）と、Ｉ／Ｏポート１２の他の一部（ポートＢ）が割り当てられている。ＲＰ１からはＲＰ２に割り当てられたリソースへのアクセスが禁止され、ＲＰ２からはＲＰ１に割り当てられたリソースへのアクセスが禁止される。
【００５２】  なお、全てのリソースがいずれかのＲＰに排他的に割り当てられる必要はない。つまり、複数のＲＰによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション１０１及び安全制御アプリケーション１０２の双方からアクセスできる必要がある。よって、通常制御アプリケーション１０１が属するＲＰと安全制御アプリケーション１０２が属するＲＰによって、アクチュエータを制御するためのＩ／Ｏポートを共有するとよい。
【００５３】  図１に戻り説明を続ける。アプリケーション１０１〜１０３は、ＯＳ１００及びプロセッサ１０によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション１０１は、通常制御アプリケーション１０２の実行状況の監視と、安全制御アプリケーション１０３の実行状況の監視と、Ｉ／Ｏポート１２への入出力データの監視と、をプロセッサ１０に実行させるための命令コードを含む。さらに、安全監視アプリケーション１０１は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全監視アプリケーション１０１は、安全関連アプリケーションである。
【００５４】  また、通常制御アプリケーション１０２は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、通常制御アプリケーション１０２は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、通常制御アプリケーション１０２は、非安全関連アプリケーションである。
【００５５】  また、安全制御アプリケーション１０３は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、安全制御アプリケーション１０３は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全制御アプリケーション１０３は、安全関連アプリケーションである。
【００５６】  リセット回路１４は、ＯＳ１００からの信号に基づき、マイクロコントローラ１５のリセットを行う。リセット回路１４を用いたマイクロコントローラ１５のリセット機構については後述する。
【００５７】  続いて以下では、パーティションスケジューラ２１と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図４を用いて説明する。図４は、ＯＳ１００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ２１とタスク２４、２６、２８との関係を示す図である。
【００５８】  マイクロコントローラ１５は、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２、不揮発性メモリ１３等を含む。なお、図４では、マイクロコントローラ１５の外部にリセット回路１４を備える構成を例示しているが、マイクロコントローラ１５の内部にリセット回路１４を含む構成としてもよい。
【００５９】  マイクロコントローラ１５には、外部のクロック源からのクロック信号が供給され、プロセッサ１０等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、１Ｔｉｃｋであるとして説明する。このため、プロセッサ１０によりＯＳ１００が実行されることで、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作すると共に、各ＴＰ内で、タスクスケジューラ２３、２５、２７およびタスク（安全監視タスク２４、通常制御タスク２６、安全制御タスク２８）が、１Ｔｉｃｋごとに動作する。
【００６０】  パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作し、ＴＰの切り替え（パーティション・スケジューリング）を行う。パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１は、選択したＴＰに関するタスクスケジューラの動作を開始させる。
【００６１】  パーティションスケジューラ２１によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ２１は、スケジューリングテーブル２２を参照し、ＴＰの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
【００６２】  スケジューリングテーブル２２は、ＴＰの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。なお、スケジューリングテーブル２２は、少なくとも２つの異なるスケジューリングパターンを保持している。１つは、安全監視タスク２４による異常検知が行われていない場合（つまり通常時）に適用されるスケジューリングパターンである。もう１つは、安全監視タスク２４によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
【００６３】  図５Ａは、通常制御スケジューリングパターンの具体例を示している。図５Ａでは、通常制御タスク２６が属するＴＰ２が１サイクル時間の前半（Ｔ１）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ２）に割り当てられている。図５Ａのスケジューリングパターンによれば、通常制御タスク２６と安全監視タスク２４が繰り返しスケジューリングされる。
【００６４】  図５Ｂは、安全制御スケジューリングパターンの具体例を示している。図５Ｂでは、安全制御タスク２８が属するＴＰ３が１サイクル時間の前半（Ｔ３）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ４）に割り当てられている。図５Ｂのスケジューリングパターンによれば、安全制御タスク２８と安全監視タスク２４が繰り返しスケジューリングされる。
【００６５】  図４に戻り説明を続ける。タスクスケジューラ２３、２５、２７は、それぞれが属するＴＰ内でのタスクのスケジューリングを行う。各ＴＰ内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図４では、各ＴＰはそれぞれ１つのタスクのみを含むものとして図示しているが、実際には、１以上のタスクが含まれている。例えば、通常制御用のＴＰ２内には、通常制御タスクＡ及び通常制御タスクＢの２つのタスクが含まれていてもよい。
【００６６】  安全監視タスク２４は、安全監視アプリケーション１０１の起動によって生成されるタスクである。図４の例では、安全監視タスク２４は、ＴＰ１及びＲＰ１に割り当てられている。安全監視タスク２４は、非安全関連アプリケーションである通常制御タスク２６の実行状況の監視と、安全関連アプリケーションである安全制御タスク２８の実行状況の監視と、Ｉ／Ｏポート１２の入出力データを監視する。さらに、安全監視タスク２４は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００６７】  通常制御タスク２６は、通常制御アプリケーション１０２の起動によって生成されるタスクである。図４の例では、通常制御タスク２６は、ＴＰ２及びＲＰ２に割り当てられている。通常制御タスク２６は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。さらに、通常制御タスク２６は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００６８】  安全制御タスク２８は、安全制御アプリケーション１０３の起動によって生成されるタスクである。図４の例では、安全制御タスク２８は、ＴＰ３及びＲＰ３に割り当てられている。安全制御タスク２８は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。さらに、安全制御タスク２８は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。なお、各タスクからパーティション２１へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがＯＳ１００のシステムコール（サービスコール）を呼び出し、ＯＳ１００を介して、パーティションスケジューラ２１に結果を通知することができる。また、例えば、タスクの実行状況に関するフラグを実行用メモリ１１に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ２１がフラグの設定値に応じてタスクの実行状況を判断することもできる。
【００６９】  上述したように、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作し、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１が、選択したＴＰに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ２３、２５、２７が動作を開始することでタスクのスケジューリングが行われ、プロセッサ１０が、タスクスケジューラ２３、２５、２７によりスケジューリングされた順序に従って、ＴＰ内でのタスクを実行していく。これによって、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００７０】  続いて以下では、パーティションスケジューラ２１によるパーティション・スケジューリングについて、図６を用いて説明する。図６は、パーティションスケジューラ２１の処理手順の具体例を示すフローチャートである。なお、図６では、通常制御スケジューリングパターン（例えば図５Ａ）または安全制御スケジューリングパターン（例えば図５Ｂ）に従って、スケジューリングを実行する場合を例に説明する。すなわち、ＴＰ２またはＴＰ３に続く次のＴＰはＴＰ１であり、かつ、ＴＰ２での異常がＴＰ１で検知された場合に、ＴＰ１からの結果を受けて次に選択・決定されるＴＰはＴＰ３である場合を例に説明する。
【００７１】  まず、１Ｔｉｃｋごとに動作するパーティションスケジューラ２１が、ＴＰＸのタスクスケジューラを動作させる（Ｓ１１）。ここで、変数ＸはＴＰの番号を示し、Ｘは１以外の値とする。すなわち、Ｓ１１では、安全監視用のＴＰ１を除いた、ＴＰ２又はＴＰ３のいずれかを動作させる。
【００７２】  Ｓ１１で動作を開始したＴＰＸのタスクスケジューラは、ＴＰＸ内のタスクを優先度に応じて実行する（Ｓ１２）。そして、１Ｔｉｃｋが経過すると、パーティションスケジューラ２１が、ＴＰのスケジューリングを開始する（Ｓ１３）。すなわち、パーティションスケジューラ２１は、スケジューリングパターンに従って、次の１Ｔｉｃｋの間にいずれのＴＰをアクティブにするかを選択・決定する。
【００７３】  パーティションスケジューラ２１は、次にアクティブにするＴＰを変更しない（Ｓ１４でＮｏ）場合には、Ｓ１１に戻り、同一のＴＰＸについての動作を継続させる。このため、ＴＰＸの切り替えタイミングとなるまでの間、Ｓ１１〜Ｓ１４までの処理が繰り返される。
【００７４】  パーティションスケジューラ２１は、次にアクティブにするＴＰを変更する（Ｓ１４でＹｅｓ）場合には、その変更するタイムパーティションのタスクスケジューラを動作させる（Ｓ１５）。ここでは、ＴＰ１のタスクスケジューラを動作させる。そして、ＴＰ１のタスクスケジューラ２３が、ＴＰ１内のタスクを優先度に応じて実行する（Ｓ１６）。
【００７５】  ＴＰ１で実行される安全監視タスク２４は、通常制御タスク２６の実行状況の監視と、Ｉ／Ｏポート１２の入出力データの監視を行い、これらが正常であるか判断する（Ｓ１７）。判断の結果、異常であると判断した（Ｓ１８でＮｏ）場合、安全監視タスク２４は、パーティションスケジューラ２１に対して、その結果を通知する（Ｓ１９）。
【００７６】  １Ｔｉｃｋが経過すると、パーティションスケジューラ２１が、再びスケジューリングを開始する（Ｓ２０）。パーティションスケジューラ２１は、スケジューリングパターンに従って、次の１Ｔｉｃｋの間にいずれのＴＰをアクティブにするかを選択・決定し、次にアクティブにするＴＰを変更しない（Ｓ２１でＮｏ）場合には、Ｓ１５に戻り、ＴＰ１についての動作を継続させる。
【００７７】  パーティションスケジューラ２１は、次にアクティブにするＴＰを変更する（Ｓ２１でＹｅｓ）場合には、さらに、Ｓ１９でのＴＰ１からの通知結果に応じて、ＴＰＸが正常であったか否かを判断する（Ｓ２２）。判断の結果、異常であった（Ｓ２２でＮｏ）場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰとして、ＴＰ３を選択・決定する（Ｓ２３）。
【００７８】  判断の結果、正常であった（Ｓ２２でＹｅｓ）場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰとして、ＴＰ１とＴＰ３以外のＴＰＸを選択・決定する（Ｓ２４）。
【００７９】  図６で示した処理に関して、パーティション・スケジューリングの具体例を説明する。  まず、図５Ａに例示した通常制御スケジューリングパターンに従って、Ｓ１１においてスケジューリングを開始した場合を説明する。この場合、Ｓ１１ではＴＰＸ＝ＴＰ２として開始し、Ｓ１２〜Ｓ１４にかけてもＴＰＸ＝ＴＰ２のままである。そして、Ｓ１５でＴＰ２からＴＰ１へと変更され、Ｓ１５〜Ｓ２１にかけてＴＰ１のままである。Ｓ１８でＴＰ２に関する実行状況（データ入出力）が正常であると判定されていた場合には、Ｓ２４では、ＴＰＸ＝ＴＰ２となる（つまり、ＴＰ２から開始する通常制御スケジューリングパターンが継続される。）。一方で、Ｓ１８でＴＰ２に関する実行状況（データ入出力）が異常であると判定されていた場合には、Ｓ２３で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンに切り替わる。）。
【００８０】  また、図５Ｂに例示した安全制御スケジューリングパターンに従って、Ｓ１１においてスケジューリングを開始した場合を説明する。この場合、Ｓ１１ではＴＰＸ＝ＴＰ３として開始し、Ｓ１２〜Ｓ１４にかけてもＴＰＸ＝ＴＰ３のままである。そして、Ｓ１５でＴＰ３からＴＰ１へと変更され、Ｓ１５〜Ｓ２１にかけてＴＰ１のままである。Ｓ１８でＴＰ３に関する実行状況（データ入出力）が正常であると判定されていた場合には、Ｓ２４では、ＴＰＸ＝ＴＰ２となる（つまり、ＴＰ２から開始する通常制御スケジューリングパターンに切り替わる。）。一方で、Ｓ１８でＴＰ３に関する実行状況（データ入出力）に異常があると判定されていた場合には、Ｓ２３で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンが継続される。）。
【００８１】  なお、上述の例では、スケジューリングパターンとして、３つのＴＰ（安全監視用のＴＰ１、通常制御用のＴＰ２、安全制御用のＴＰ３）のみを組み合わせた場合を例に説明したが、ＴＰ２のような通常制御用パーティションや、ＴＰ３のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、２つの通常制御用のＴＰ２及びＴＰ４と、安全監視用のＴＰ１と、２つの安全制御用のＴＰ３及びＴＰ５と、が存在し、これら５つのＴＰ（ＴＰ１〜ＴＰ５）を組み合わせてスケジューリングパターンを構成してもよい。この場合、Ｓ２３では、パーティションスケジューラ２１が、ＴＰＸに関する実行状況（データ入出力）の異常状態の種類を判定し、その異常種類に応じて、安全制御用のＴＰ３またはＴＰ５のいずれかを選択すればよい。また、Ｓ２４では、通常制御用のＴＰ２またはＴＰ４のいずれかを選択すればよい。
【００８２】  上述したように、本実施の形態では、ＯＳ１００は、安全監視用のＴＰ１からの通知、または、各ＴＰからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ２１を備えている。パーティションスケジューラ２１は、各ＴＰ内で実行されるタスクとは独立して、所定のタイマー周期で動作する。所定のタイマー周期で独立して動作するパーティションスケジューラ２１がパーティション・スケジューリング機能を有することで、以下の効果を奏することができる。
【００８３】  まず、一般的に、通常制御タスク２６の実行時間を十分に確保するために、安全監視タスク２４の実行時間を可能な限り短縮したいという要求がある。従来技術（例えば特許文献１）では、安全監視タスク２４が、通常制御タスク２６の実行状況の監視と、Ｉ／Ｏポート１２の入出力データの監視と、に加えて、スケジューリングパターンの選択・決定についても行っていたために、この選択・決定に要する実行時間についても、安全監視タスク２４が属するＴＰ２に関して割り当てておく必要があった。
【００８４】  また、機能安全の確保を保証するためには、基本的には、安全監視タスク２４と通常制御タスク２６とが交互に実行される必要がある。このため、従来技術では、通常制御タスク２６の実行に伴って安全監視タスク２４によるスケジューリングパターンの選択・決定までもが毎回実行されることになり、複数のサイクルにわたって合計すると、多くの実行時間を、安全監視タスク２４によるスケジューリングパターンの選択・決定のために要することになってしまう。
【００８５】  これに対して、本実施の形態によれば、安全監視タスク２４自体は、スケジューリングパターンの選択・決定を実行する必要がない。また、パーティションスケジューラ２１がスケジューリングパターンの選択・決定に要する実行時間は短時間で済む。このため、従来技術と比較して、安全監視用のＴＰ１はより短時間の割り当てで済み、かつ、通常制御用のＴＰ２にはより長時間の割り当てを行うことができるという効果を奏する。
【００８６】  さらに、図６で例示した処理では、パーティションスケジューラ２１が、ＴＰ１からの結果通知に応じて、安全制御用のＴＰ３を選択・決定する（Ｓ２３）、または、通常制御用のＴＰ２を選択・決定する（Ｓ２４）ものとして説明したが、本発明はこれに限定されない。例えば、安全監視用のＴＰ１のみからパーティションスケジューラ２１に対して結果を通知する構成に代えて、ＴＰ１〜ＴＰ３のそれぞれからパーティションスケジューラ２１に対して実行状況結果を通知する構成とし、パーティションスケジューラ２１が、各ＴＰからの結果通知に応じて、安全制御用のＴＰ３を選択・決定するものとしてもよい。
【００８７】  各ＴＰとは独立に動作するパーティションスケジューラ２１が、全てのＴＰから結果通知を受ける構成を採用することで、パーティションスケジューラ２１は、全てのＴＰに関する状況を一元的に把握することができる。このため、例えば、パーティションスケジューラ２１が、各ＴＰからの結果通知に基づいて各ＴＰの状況を考慮した上で、実行が不要なＴＰについてはスキップするなどの判断を実行することができる。従って、実行が不要なタイムパーティションのみを意図的にスキップすることができるという効果を奏する。また、例えば、パーティションスケジューラ２１が、安全監視用のＴＰ１からの結果通知に基づいて各ＴＰの状況を考慮した上で、正常状態にあるＴＰのみから次のパーティションを決定・選択することができる。従って、従来技術と比較して、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
【００８８】  続いて以下では、リセット回路１４を用いたマイクロコントローラ１５のリセット機構について、図７及び図８を用いて説明する。図７及び図８は、リセット回路１４を用いたマイクロコントローラ１５のリセット処理手順の具体例を示すフローチャートである。
【００８９】  本実施の形態では、１Ｔｉｃｋごとに動作するパーティションスケジューラ２１が、マイクロコントローラ１５のリセット機能を有している。パーティションスケジューラ２１は、ＯＳ１００における異常を検出した場合に、リセット回路１４と連動して異常処置を行う。リセット回路１４は、パーティションスケジューラ２１からの信号に基づき、マイクロコントローラ１５のリセットを行う。
【００９０】  まず、図７を用いて、リセット回路１４を用いたマイクロコントローラ１５のリセット処理手順の具体例について説明する。図７に示す処理では、パーティションスケジューラ２１からリセット指示信号を受けた場合に、リセット回路１４がマイクロコントローラ１５をリセットするものである。なお、図７では、ＴＰＸは、ＴＰ１とＴＰ３以外のＴＰである。
【００９１】  まず、Ｓ３１〜Ｓ３３では、パーティションスケジューラ２１がＴＰＸの動作を開始させることで、次にアクティブにするＴＰが変更されるまでの間、ＴＰＸに関する処理が実行される。そして、パーティションスケジューラ２１がＴＰ１のタスクスケジューラ２３の動作を開始させた（Ｓ３４）後に、ＴＰ１に属する安全監視タスク２４が、ＴＰＸに関する処理（入出力）が正常であったかを判断する（Ｓ３５）。判断の結果、正常であった（Ｓ３５でＹｅｓ）場合、Ｓ３１に戻り、同一のＴＰＸについての動作が継続される。
【００９２】  判断の結果、異常であった（Ｓ３５でＮｏ）場合、ＴＰ１に属する安全監視タスク２４が、ＴＰＸでの異常がＴＰ３に属する安全制御タスク２８で対応可能な異常であるかを判断する（Ｓ３６）。ＴＰ３で対応可能な異常ではなかった（Ｓ３６でＮｏ）場合、ＴＰ１に属する安全監視タスク２４が、パーティションスケジューラ２１に対して、緊急停止を有する異常であることを通知する（Ｓ３７）。ＴＰ１に属する安全監視タスク２４からの通知を受けたパーティションスケジューラ２１が、リセット回路１４にリセット指示信号を出力し、リセット指示信号を受けたリセット回路１４がマイクロコントローラ１５のリセットを行う（Ｓ３８）。
【００９３】  ＴＰ３で対応可能な異常であった（Ｓ３６でＹｅｓ）場合、ＴＰ１に属する安全監視タスク２４は、パーティションスケジューラ２１に対して、ＴＰＸが異常であることを通知する（Ｓ３９）。ＴＰ１からの通知を受けたパーティションスケジューラ２１は、ＴＰＸからＴＰ３へと切り替える（Ｓ４０）。
【００９４】  次に、図８を用いて、リセット回路１４を用いたマイクロコントローラ１５のリセット処理手順の他の具体例について説明する。図８に示す処理では、パーティションスケジューラ２１からリセット回路１４に定期的に信号を送信し、リセット回路１４は、パーティションスケジューラ２１からの送信信号が途絶えた場合に、マイクロコントローラ１５をリセットするものである。なお、図８では、ＴＰＸは、ＴＰ１とＴＰ３以外のＴＰである。
【００９５】  図７のＳ３１〜Ｓ３５にかけての処理と比較して、図８のＳ５３では、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作する点が明確化され、また、Ｓ５４及びＳ５５で、パーティションスケジューラ２１がリセット回路１４に定期的に信号を送信する点で異なっている。その他の図８に示すＳ５１〜Ｓ５７にかけての処理は、図７に示したＳ３１〜Ｓ３５にかけての処理と基本的に同一である。
【００９６】  また、図７のＳ３６〜Ｓ４０にかけての処理と比較して、図８のＳ６０では、パーティションスケジューラ２１がリセット回路１４への送信信号を停止し、Ｓ６３では、パーティションスケジューラ２１がリセット回路１４への信号を送信する点で異なっている。さらに、図８のＳ６１では、パーティションスケジューラ２１からの送信信号が途絶えたことに応じて、リセット回路１４がマイクロコントローラ１５のリセットを行う点で異なっている。その他の図８に示すＳ５８〜Ｓ６４にかけての処理については、図７に示したＳ３６〜Ｓ４０にかけての処理と基本的に同一である。
【００９７】  さらに、図８のＳ７１及びＳ７２に示すように、Ｓ５１〜Ｓ６４にかけての処理と並行して、パーティションスケジューラ２１において不具合が発生した場合、または、パーティションスケジューラ２１からリセット回路１４への信号線において不具合が発生した場合には、パーティションスケジューラ２１からリセット回路１４への送信信号が伝達されなくなる。この場合にも、パーティションスケジューラ２１からの送信信号が途絶えたことに応じて、リセット回路１４がマイクロコントローラ１５のリセットを行う（Ｓ６１）。
【００９８】  図８に示した処理によれば、パーティションスケジューラ２１からリセット回路１４へ意図的にリセット指示を行う場合に加えて、パーティションスケジューラ２１自身が何らかの原因により正常に動作しない場合、または、パーティションスケジューラ２１からリセット回路１４へ送信信号を伝達する信号線に不具合が発生した場合においても、マイクロコントローラ１５のリセットを確実に行うことができる。また同時に、ＴＰの切り替えが、１Ｔｉｃｋごとに正常に実行されているかについても保証することができる。
【００９９】  なお、図７及び図８では、パーティションスケジューラ２１は、ＴＰ１からの結果通知に応じて、リセット回路１４へのリセット指示信号の出力、または、リセット回路１４への送信信号の停止を行うものとして説明したが、ＴＰ１〜ＴＰ３のいずれかからの結果通知に応じて、リセット回路１４へのリセット指示信号の出力、または、リセット回路１４への送信信号の停止を行うものとしてもよい。
【０１００】＜発明の実施の形態２＞  本実施の形態にかかる安全制御装置は、上述した安全制御装置１の変形である。本実施の形態にかかる安全制御装置の全体的な構成は、図１に示した安全制御装置１の構成と同様とすればよい。また、本実施の形態にかかる安全制御装置が有するＯＳによって提供されるタスク実行環境は、図４に示したタスク実行環境の構成と同様とすればよい。
【０１０１】  本実施の形態では、通常制御タスク２６の実行中に緊急処置が必要な異常が発生した場合に、通常制御タスク２６が異常発生に応じて即座にパーティションスケジューラ２１を強制起動させ、パーティションスケジューラ２１が、安全制御タスク２８が実行されるタイムパーティションへと、タイムパーティションの切り替えを行うことを特徴とする。なお、緊急処置が必要な異常としては、例えば、サービスロボットや運輸機器等の転倒を招きかねない異常や、故障・発熱により火災を招きかねない異常などが含まれる。
【０１０２】  次に、図９及び図１０を用いて、本実施の形態にかかる安全制御装置１による処理について、より詳細に説明する。なお、図９及び図１０では、通常制御タスク２６が実行されるタイムパーティションは、複数個存在するものとしてもよい。
【０１０３】  図９は、パーティションスケジューラの処理手順の具体例を示すフローチャートである。  まず、ＴＰ２内で通常制御タスク２６の実行中に異常が発生（Ｓ８１）した場合、通常制御タスク２６は、異常発生に応じて、パーティションスケジューラ２１を即座に呼び出す（Ｓ８２）。具体的には、通常制御タスク２６は、緊急を要する異常発生を検知した場合、パーティションスケジューラ２１に対して起動指示を行う。パーティションスケジューラ２１は、通常制御タスク２６からの呼び出しに応じて、強制起動される（Ｓ８２）。なお、通常制御タスク２６がパーティションスケジューラ２１を強制起動させる構成としては、例えば、ＯＳ１００のシステムコールを利用すればよい。
【０１０４】  パーティションスケジューラ２１は、通常制御タスク２６が実行されていたＴＰ２から、安全制御タスク２８が実行されるＴＰ３へと、タイムパーティションを切り替える（Ｓ８４）。タイムパーティションがＴＰ３へと切り替えられたことによって、ＴＰ３に属する安全制御タスク２８が実行される。このため、ＴＰ２にもともと割り当てられていたタイムリソースのうちで残りのタイムリソースが、安全制御タスク２８の実行に利用されることになる。
【０１０５】  安全制御タスク２８による処理が終了した場合には、パーティションスケジューラ２１は、スケジューリングパターンに従って、パーティション・スケジューリングを新たに開始する（Ｓ８５）。ここで、安全制御タスク２８による処理が終了した場合には、例えば、安全制御タスク２８が処理終了の旨をパーティションスケジューラ２１に対して通知することで、パーティションスケジューラ２１は、安全制御タスク２８による処理が終了したかを判断することができる。また、パーティションスケジューラ２１は、安全制御タスク２８による処理が終了した場合には、スケジューリングパターンに従って、新たなタイムパーティションに切り替えるものとしてもよいし、Ｓ８４でＴＰ３に切り替えられるより前に実行していたＴＰ２に関して、ＴＰ２の後続に予定されていたタイムパーティションに戻るように、タイムパーティションを切り替えるようにしてもよい。
【０１０６】  図１０は、異常発生時におけるタイムパーティション切り替えの具体例を示す図である。なお、図１０では、通常制御用の２つのタイムパーティション（ＴＰ２（Ａ）及びＴＰ２（Ｂ））が存在する場合を例に説明する。
【０１０７】  まず、図１０の上図に示すように、ＴＰ２（Ａ）において異常が発生した場合、実行中の通常制御タスク２６は、パーティションスケジューラ２１を即座に呼び出す。すると、図１０の下図に示すように、通常制御タスク２６からの呼び出しに応じて、パーティションスケジューラ２１が強制的に起動され、パーティションスケジューラ２１が、安全制御タスク２８を実行するＴＰ３へと切り替えを行う。そして、パーティションスケジューラ２１は、安全制御タスク２８が実行されて終了した場合には、ＴＰ２（Ｂ）へと切り替えるように、タイムスケジューリングを行う。このようにして、本実施の形態によれば、異常発生時おいて、即座に異常処置を行うことができる。
【０１０８】＜発明の実施の形態３＞  本実施の形態は、上述した実施の形態２に係る安全制御装置１の変形である。このため、上述した実施の形態２と同様の構成については説明を省略し、以下では、実施の形態２と異なる構成を中心として説明する。
【０１０９】  上述した実施の形態２によれば、通常制御タスク２６を実行中のタイムパーティション内の途中で、安全制御タスク２８を実行するタイムパーティションへと強制的に切り替えるため、異常発生に対する反射性は高いものの、以後のスケジューリングにおけるタイムパーティションの切り替えタイミングにずれが生じてしまう可能性がある。例えば図１０の下図に示したように、パーティションＴＰ２の途中でＴＰ３へと切り替えた結果、ＴＰ２（Ｂ）において通常制御タスク２６が実行する制御のタイミングが、もともと予定したタイミングとずれてしまう可能性がある。その結果、装置による制御が不安定になる可能性がある（つまり、反射と不安定はトレードオフの関係である。）。
【０１１０】  そこで、本実施の形態では、通常制御タスク２６の実行中に緊急処置が必要な異常が発生した場合に、異常発生に応じて即座にパーティションスケジューラ２１を強制起動させることに代えて、同一のタイムパーティション内で安全制御タスク２８を実行できる程度にタイムリソースが残っているかを確認した上で、１Ｔｉｃｋ経過した次のタイミングで、パーティションスケジューラ２１によって、安全制御タスク２８が実行されるタイムパーティションへと切り替えることを特徴とする。
【０１１１】  次に、図１１及び図１２を用いて、本実施の形態にかかる安全制御装置１による処理について、より詳細に説明する。なお、図１１及び図１２では、通常制御タスク２６が実行されるタイムパーティションは、複数個存在するものとしてもよい。
【０１１２】  図１１は、パーティションスケジューラの処理手順の具体例を示すフローチャートである。なお、図１１では、通常制御スケジューリングパターン（例えば図５Ａ）に従って、パーティション・スケジューリングを実行している場合に、ＴＰ２において異常が発生した場合を例に説明する。
【０１１３】  まず、ＴＰ２内で通常制御タスク２６の実行中に異常が発生（Ｓ９１）した場合、通常制御タスク２６は、ＴＰ２に割り当てられていたタイムリソースのうちで残りのタイムリソースを取得し、安全制御タスク２８の実行に利用可能な程度、タイムリソースが残っているか判断する（Ｓ９２）。タイムリソースが残っているかを判断する構成としては、例えば、タイムパーティションに割り当てられた総Ｔｉｃｋ数と、各タスクの実行に要する実行Ｔｉｃｋ数と、パーティションの開始時からの経過Ｔｉｃｋ数と、に基づいて、残りのタイムリソースを判定する手法を採用することができる。具体的に述べると、タイムパーティションに割り当てられた総Ｔｉｃｋ数と、各タスクの実行に要する実行Ｔｉｃｋ数と、を示す情報を、実行用メモリ１１に予め記憶する。また、パーティションスケジューラ２１は、パーティションの開始時からの経過Ｔｉｃｋ数をカウントする。そして、各タスクは、パーティションスケジューラ２１に総Ｔｉｃｋ数と経過Ｔｉｃｋ数を問い合わせ、総Ｔｉｃｋ数から経過Ｔｉｃｋ数を減算することで、同一のタイムパーティション内における残りのＴｉｃｋ数を計算することができる。そして、この減算して求めたＴｉｃｋ数が、実行Ｔｉｃｋ数を上回っているか否かにより、タイムリソースが残っているか否かを判断することができる。本実施の形態では、通常制御タスク２６は、ＴＰ２における残りのタイムリソースとして、１Ｔｉｃｋ以上が残されているかを判断する。
【０１１４】  ＴＰ３で利用可能なタイムリソースが残っていた（Ｓ９２でＹｅｓ）場合、通常制御タスク２８は、１Ｔｉｃｋ経過後の次のタイミングでタイムパーティションの切り替えを行うように、パーティションスケジューラ２１に対して切り替え希望を通知する（Ｓ９３）。パーティションスケジューラ２１は、１Ｔｉｃｋ経過後に起動し（Ｓ９４）、通常制御タスク２６からの切り替え希望に応じて、通常制御タスク２６が実行されていたＴＰ２から、安全制御タスク２８が実行されるＴＰ３へと、タイムパーティションを切り替える（Ｓ９５）。タイムパーティションがＴＰ３へと切り替えられたことによって、ＴＰ３に属する安全制御タスク２８が実行される。
【０１１５】  安全制御タスク２８による処理が終了した場合には、パーティションスケジューラ２１は、スケジューリングパターンに従って、パーティション・スケジューリングを新たに開始する（Ｓ９６）。
【０１１６】  なお、ＴＰ３で利用可能なタイムリソースが残っていなかった（Ｓ９２でＮｏ）場合、通常制御タスク２８によるパーティションスケジューラ２１へのパーティションの切り替え希望の通知は行われず、ＴＰ２の後続のＴＰ１へと切り替わるタイミングとなるまでの間、ＴＰ２内での通常制御タスク２８の実行が継続される。
【０１１７】  図１２は、異常発生時におけるタイムパーティション切り替えの具体例を示す図である。なお、図１２では、通常制御用の２つのタイムパーティション（ＴＰ２（Ａ）及びＴＰ２（Ｂ））が存在する場合を例に説明する。
【０１１８】  まず、図１２の上図に示すように、ＴＰ２（Ａ）において異常が発生した場合、実行中の通常制御タスク２６は、ＴＰ２（Ａ）の残りのタイムリソースを考慮した上で、パーティションスケジューラ２１に対してタイムパーティションの切り替えを依頼する。すると、図１２の下図に示すように、次の１Ｔｉｃｋで起動したパーティションスケジューラ２１は、通常制御タスク２６からの依頼に応じて、安全制御タスク２８を実行するＴＰ３へと切り替えを行う。そして、パーティションスケジューラ２１は、安全制御タスク２８が実行されて終了した場合には、ＴＰ２（Ａ）へと切り替えるように、タイムスケジューリングを行う。このようにして、ＴＰ２（Ｂ）に関してタイムパーティションの開始タイミングを変更せずに済むため、ＴＰ２（Ｂ）において実行される通常制御タスク２６に関して、制御周期がずれることで不安定になることを回避することできる。
【０１１９】  このようにして、本実施の形態によれば、異常発生時おいて、迅速に異常処置を行うことができる。また、本実施の形態によれば、異常発生時おいて、ＴＰ２からＴＰ３への切り替えをＴｉｃｋのタイミングで行うため、実施の形態２と比較して反射性は低下するものの、安定性を維持することができる。
【０１２０】＜発明の実施の形態４＞  本実施の形態にかかる安全制御装置は、上述した安全制御装置１の変形である。本実施の形態にかかる安全制御装置の全体的な構成は、図１に示した安全制御装置１の構成と同様とすればよい。また、本実施の形態にかかる安全制御装置が有するＯＳによって提供されるタスク実行環境は、図４に示したタスク実行環境の構成と同様とすればよい。
【０１２１】  実施の形態１では、パーティションスケジューラ２１と、各タイムパーティションにおけるタスクスケジューラ２３、２５、２７と、がＯＳ１００に備えられており、パーティションスケジューラ２１が、タイムパーティションおよびリソースパーティションの管理を実行することができる。しかし、パーティションスケジューラ２１は、各パーティションにおいて、タスクスケジューラによるタスクの切り替えが正常に実施されているのかについては把握していない。また、複数の安全監視タスク２４が存在するような場合には、いずれかの安全監視タスク２４が実行されずに監視漏れが発生することも考えられる。従って、パーティションスケジューラ２１は、タイムパーティション内でのタスクの切り替え回数を把握可能とし、また、安全監視タスク２４に関する監視漏れの防止を可能とすることが求められる。
【０１２２】  本実施の形態では、各タイムパーティションにおいて、タスクスケジューラが、タスクの切り替え回数を保存する。そして、パーティションスケジューラ２１が、パーティションを切り替える際に、タスクスケジューラにより保存されたタスクの切り替え回数を参照し、その切り替え回数が規定回数であるか否かに応じて、各タイムパーティションでのタスクの実行状況を判断する。これにより、パーティションスケジューラ２１が、タイムパーティションおよびリソースパーティションの管理を行い、各タイムパーティションにおけるタスクスケジューラ２３、２５、２７が、タスクの実行を行い、さらに、パーティションスケジューラ２１が、タスクスケジューラによるタスクの切り替えが正常に実施されているのかを把握することができる。なお、本実施の形態は、例えば、タスクの切り替えタイミングが高速であるサービスロボット等や、タスクの数が多いサービスロボット等に関して、そのようなサービスロボット等に搭載される安全制御装置１に適用すると好適である。
【０１２３】  次に、図１３を用いて、本実施の形態にかかる安全制御装置１による処理について、より詳細に説明する。なお、図１３では、通常制御タスク２６が実行されるタイムパーティションは、複数個存在するものとしてもよい。
【０１２４】  図１３は、パーティションスケジューラの処理手順の具体例を示すフローチャートである。なお、図１３では、通常制御スケジューリングパターン（例えば図５Ａ）に従って、パーティション・スケジューリングを実行している場合を例に説明する。また、ＴＰＸは、ＴＰ１又はＴＰ２のいずれかであるとする。
【０１２５】  まず、パーティションスケジューラ２１が、ＴＰＸのタスクスケジューラを動作させる（Ｓ１０１）。タスクスケジューラは、優先度に応じてタスクを実行する（Ｓ１０２）。タスクスケジューラは、実行したタスクに関して、タスクを何度切り替えたかを示す切り替え回数をカウントし、実行用メモリ１１に保存する（Ｓ１０３）。
【０１２６】  パーティションスケジューラ２１は、パーティション切り替えを実施しようとする際に、Ｓ１０３で保存されたタスクの切り替え回数を確認する（Ｓ１０４）。パーティションスケジューラ２１は、タスクの切り替え回数が、規定回数であったかを判断する（Ｓ１０５）。規定回数であった（Ｓ１０５でＹｅｓ）場合には、パーティションスケジューラ２１は、パーティションを切り替えずに、Ｓ１０１へと戻り処理を続ける。なお、タスクの切り替え回数についての規定回数は、ユーザによって適当な値が予め設定されている。
【０１２７】  タスクの切り替え回数が規定回数でなかった（Ｓ１０５でＮｏ）場合には、パーティションスケジューラ２１は、タスクが実行されていたタイムパーティションが、安全監視タスク２４が実行されるＴＰ２であったかを判断する（Ｓ１０６）。ＴＰ２でなかった（Ｓ１０６でＮｏ）場合、パーティションスケジューラ２１は、タイムパーティションをＴＰ３に切り替える（Ｓ１０７）。ＴＰ２であった（Ｓ１０６でＹｅｓ）場合、パーティションスケジューラ２１は、マイクロコントローラ１５の動作を停止させるように、リセット回路１４を動作させる（Ｓ１０８）。
【０１２８】  なお、図１３では、ＴＰＸは、ＴＰ１又はＴＰ２のいずれかである場合を例に説明したが、ＴＰＸがＴＰ３であり、かつ、ＴＰ３においてタスクの切り替え回数が規定回数でない場合においても、パーティションスケジューラ２１が、マイクロコントローラ１５の動作を停止させるように、リセット回路１４を動作させるものとしてもよい。
【０１２９】  以上に説明した本実施の形態によれば、パーティションスケジューラ２１は、タイムパーティション内でのタスクの切り替え回数を把握することができるため、切り替え回数に応じた適切なパーティションの切り替えを実施することができる。さらに、安全監視タスク２４に関する監視漏れを防止することもできる。
【０１３０】＜発明の実施の形態５＞  本実施の形態にかかる安全制御装置は、上述した安全制御装置１の変形である。本実施の形態にかかる安全制御装置の全体的な構成は、図１に示した安全制御装置１の構成と同様とすればよい。また、本実施の形態にかかる安全制御装置が有するＯＳによって提供されるタスク実行環境は、図４に示したタスク実行環境の構成と同様とすればよい。
【０１３１】  本実施の形態では、タイムパーティションの１サイクルが、複数のタイムパーティションを含み、かつ、複数のタイムパーティションのそれぞれに時間が割り当てられて構成されている。パーティションスケジューラ２１は、タイムパーティションおよびタスクをスケジューリングする際に、まずは、優先度に従ってタスクを検索し、そのタスクが実行されるタイムパーティションに関して残されたタイムリソースを考慮した上で、次に実行するタスクを決定することを特徴とする。
【０１３２】  次に、図１４を用いて、本実施の形態にかかる安全制御装置１による処理について、より詳細に説明する。図１４は、パーティションスケジューラの処理手順の具体例を示すフローチャートである。なお、図１４では、Ｔ（ｔｘ、ｐｙ）とは、タイムパーティションｔｘ内で実行されるタスクｐｙを意味する。また、図１４では、ＴＰ１におけるタスク３が実行中（Ｓ１１１）であるとして、以後のサイクルに含まれるタイムパーティション及びタスクをスケジューリングする場合を例に説明する。また、図１４では、パーティションスケジューラ２１が起動中の処理を示している。
【０１３３】  まず、１Ｔｉｃｋが終了（Ｓ１１２）した場合に、パーティションスケジューラ２１は、制御周期が終了したかを判断する（Ｓ１１３）。具体定期には、パーティションスケジューラ２１は、１サイクル中に含まれる全てのタイムパーティションに関して、それぞれ割り当てられたタイムリソースを全て使い果たしたかを判断する。例えば、１サイクル中にＴＰ１とＴＰ２の２つのタイムパーティションが含まれ、ＴＰ１には１０Ｔｉｃｋが、ＴＰ２には２０Ｔｉｃｋが割り当てられていた場合に、ＴＰ１の実行に関して１０Ｔｉｃｋが終了し、かつ、ＴＰ２の実行に関して２０Ｔｉｃｋが終了したかを判断する。制御周期が終了していた（Ｓ１１３でＹｅｓ）場合、パーティションスケジューラ２１は、全てのタイムパーティションに対して、タイムリソースを再付与する（Ｓ１１４）。
【０１３４】  パーティションスケジューラＳ１１５は、以後の１サイクルについてのスケジューリングを行うため、以後の１サイクルに含まれる全てのタスクを検索したか判断する（Ｓ１１５）。全てのタスクを検索していない（Ｓ１１５でＮｏ）場合、パーティションスケジューラ２１は、探索されたタスクが、現在の候補タスクよりも優先度が高いタスクであるかを判断する（Ｓ１１７）。図１４では、検索されたタスクをＴ（ｔｘ，ｐｙ）として、現在の候補タスクＴ（ｔ３，ｐ１）よりも優先度が高いタスクであるかを判断する。
【０１３５】  検索されたタスクＴ（ｔｘ，ｐｙ）の優先度が現在の候補タスクよりも優先度が高かった（Ｓ１１８でＹｅｓ）場合、パーティションスケジューラ２１は、検索されたタスクＴ（ｔｘ，ｐｙ）が実行されるタイムパーティションに関して、タイムリソースが余っているかを判断する（Ｓ１１８）。
【０１３６】  タスクＴ（ｔｘ，ｐｙ）のタイムパーティションに関してタイムリソースが余っていた（Ｓ１１８でＹｅｓ）場合には、パーティションスケジューラ２１は、次に実行するタスクの候補を、Ｔ（ｔｘ，ｐｙ）として決定する（Ｓ１１９）。このようにして、Ｓ１１５〜Ｓ１１９における処理によって、最も優先度が高く、かつ、そのタスクの属するタイムパーティションにおいてタイムリソースが余っている場合に、そのタスクが、次に実行するタスクとして決定される。
【０１３７】  全てのタスクを検索した（Ｓ１１５でＹｅｓ）場合、パーティションスケジューラ２１は、Ｓ１１９で決定されたタスクが実行されるようにするために、そのタスクが含まれるタイムパーティションへと、タイムパーティションの切り替えを行う（Ｓ１１６）。そして、Ｓ１１１では、Ｓ１１９で決定されたタスクが実行中であるとして、以後の処理を繰り返す。
【０１３８】  次に、図１５Ａ、Ｂを用いて、従来技術にかかるスケジューリング手法による結果（図１５Ａ）と、本実施の形態にかかるスケジューリング手法による結果（図１５Ｂ）と、の違いについて説明する。なお、図１５Ａ、Ｂでは、２種類のタイムパーティションＴＰ１及びＴＰ２を含み、ＴＰ２の前半部分がＴＰ２（Ａ）であり、後半部分がＴＰ２（Ｂ）である場合を例に説明する。また、ＴＰ２（Ａ）、ＴＰ１、ＴＰ２（Ｂ）にそれぞれ含まれるタスクをＴａｓｋ１、Ｔａｓｋ２、Ｔａｓｋ３とし、これらタスクのうちで、Ｔａｓｋ１の優先度が最も高く、Ｔａｓｋ２の優先度が次に高く、Ｔａｓｋ３の優先度が最も低いものとする。
【０１３９】  図１５Ａに示すように、従来技術にかかるスケジューリング手法によると、各タイムパーティションに対して固定された時間を割り当てるとともに、優先度に従って各タスクを配置するものである。このため、スケジューリングの結果、例えば、ＴＰ２（Ａ）においてＴａｓｋ１が実行されて終了した場合においても、後続のＴＰ１を直後に開始することができない（つまり、次に優先度の高いＴａｓｋ２を、Ｔａｓｋ１の実行終了直後に開始することができない。）。
【０１４０】  これに対して、図１５Ｂに示すように、本実施の形態にかかるスケジューリング手法によると、それぞれ固定された時間が割り当てられたタイムパーティションに対してタスクを配置することに代えて、まずは、優先度に従ってタスクを検索し、そのタスクが実行されるタイムパーティションに関して残されたタイムリソースを考慮した上で、次に実行するタスクを決定する。このため、１サイクル全体に占める各タイムパーティションに割り当てられた実行時間の比率を維持したままで、優先度に従ってタスクを配置すると共に後続のタスクを直後に実行することができる。従って、各タイムパーティションに割り当てられた時間を考慮した上で、タスクの優先度及び周期性を満たすことのできるスケジューリングを実現することができる。
【０１４１】＜発明の実施の形態６＞  本実施の形態は、上述した実施の形態５に係る安全制御装置１の変形である。このため、上述した実施の形態５と同様の構成については説明を省略し、以下では、実施の形態２と異なる構成を中心として説明する。
【０１４２】  上述した実施の形態５では、タスクの探索に際して、まずは優先度を基準として探索を行うものであった。ここで、タスクの個数はタイムパーティションの個数よりも多い（タスク数＞タイムパーティション数）ため、本実施の形態では、タイムパーティションの個数を基準としてタスクの探索を行うことを特徴とする。これにより、より効率的なタスクの探索が可能となる。
【０１４３】  本実施の形態では、タイムパーティションおよびタスクをスケジューリングする際に、まずは、タイムリソースが残されているタイムパーティションを検索し、その検索されたタイムパーティション内のタスクの優先度に従って、次に実行するタスクを決定することを特徴とする。
【０１４４】  次に、図１６を用いて、本実施の形態にかかる安全制御装置１による処理について、具体的に説明する。図１６は、パーティションスケジューラの処理手順の具体例を示すフローチャートである。なお、図１６に示すＳ１３１〜Ｓ１３４、及びＳ１３８における処理は、図１４に示したＳ１１１〜Ｓ１１４、及びＳ１１６における処理と同様である。このため、以下では、図１４に示した処理と異なる処理（図１６のＳ１３５〜Ｓ１３７）を中心に説明する。また、図１６では、パーティションスケジューラ２１が起動中の処理を示している。
【０１４５】  パーティションスケジューラＳ１１５は、以後の１サイクルについてのスケジューリングを行うため、以後の１サイクルに含まれる全てのタイムパーティションに関して、タイムリソースの余っているタイムパーティションの一覧を検索する（Ｓ１１５）。
【０１４６】  パーティションスケジューラＳ１１５は、タイムリソースが余っているタイムパーティションのうちで、それらタイムパーティションに含まれるタスクについて、最も優先度が高いタスクを検索する（Ｓ１３６）。パーティションスケジューラ２１は、Ｓ１３６で検索したタスクを、次に実行するタスクの候補を、Ｔ（ｔｘ，ｐｙ）として決定する（Ｓ１３７）。このようにして、Ｓ１３５〜Ｓ１３７における処理によって、タイムリソースが余っているタイムパーティションに属するタスクであり、かつ、最も優先度が高いタスクが検索され、次に実行するタスクとして決定される。
【０１４７】＜発明の実施の形態７＞  本実施の形態にかかる安全制御装置は、上述した安全制御装置１の変形である。本実施の形態にかかる安全制御装置の全体的な構成は、図１に示した安全制御装置１の構成と同様とすればよい。図１８は、本実施の形態にかかる安全制御装置が有するＯＳによって提供されるタスク実行環境を示す概念図である。本実施の形態では、ＯＳ１００が、安全監視タスク２４、通常制御タスク２６、安全制御タスク２８の相互間でデータをやり取りするためのタスク間通信を提供する。
【０１４８】  図１８の例では、安全監視タスク２４、通常制御タスク２６、安全制御タスク２８間でのデータ通信のために共有メモリ２９が提供される。例えば、本実施の形態の安全監視タスク２４は、制御対象（サービスロボット、輸送機器等）に関する制御情報を通常制御タスク２６、から共有メモリ２９を介して引き継ぐ。そして、安全制御タスク２８は、引き継いだ制御情報に基づいて制御対象の安全制御を開始する。このように、安全制御へ切り替わった際に、安全制御タスク２８が制御情報を引き継ぐことで、制御対象に対する安全制御を円滑に開始することができる。
【０１４９】  本実施の形態では、共有化メモリ２９を、複数のパーティション間共有メモリに分割する。ここでは、共有化メモリ２９を、データ共有を要するタイムパーティションの個数のパーティション間共有メモリに分割する。各タイムパーティション内のタスクがパーティション間共有メモリにアクセスする際には、アクセス先を互いに異ならせ、かつ、データ書き込みの対象とするパーティション間共有メモリと、データ読み出しの対象とするパーティション間共有メモリと、をアクセスの都度、それぞれ変更する。そして、タスクがデータを読み出す場合には、更新済みの最新のデータを有するパーティション間共有メモリから、データの読み出しを行うことを特徴とする。
【０１５０】  図１９乃至図２１を用いて、本実施の形態にかかる安全制御装置１による処理について、具体的に説明する。  図１９Ａ、Ｂは、パーティション間共有メモリへのアクセスの具体例を示す図である。なお、図では、３つのタイムパーティション（ＴＰ１、ＴＰ２、ＴＰ３）に対応して、３つのパーティション間共有メモリＡ、Ｂ、Ｃを有する場合を例に説明する。パーティション間共有メモリＡは、時間ｔ−２に既に更新済みであり、パーティション間共有メモリＢは、時間ｔ−１に既に更新済みであり、パーティション間共有メモリＣは、現在更新中であり、時間ｔに更新される。
【０１５１】  図１９Ａに示すように、ＴＰ２内の通常制御タスク２６が、パーティション間共有メモリＣに対して、データの書き込みを行っている。一方で、ＴＰ１内の安全監視タスク２４は、誰もアクセスしておらず、かつ、更新済みの最新のデータが記憶されているパーティション間共有メモリＢに対してアクセス中である。この場合において、ＴＰ３内の安全制御タスク２８は、パーティション間共有メモリＡに対して、アクセスすることが可能である。そして、図１９Ｂに示すように、ＴＰ１内の安全監視タスク２４のアクセスが時間通りに終了した場合には、ＴＰ３内の安全制御タスク２８は、誰もアクセスしておらず、かつ、更新済みの最新のデータが記憶されているパーティション間共有メモリＢに対して、アクセスを開始することができる、
【０１５２】  図２０は、パーティション間共有メモリへのアクセスの処理手順の具体例を示すフローチャートである。なお、図２０では、タスクスケジューリングパターンとして、ＴＰ２の後続のタイムパーティションがＴＰ１である場合を例に説明する。
【０１５３】  まず、ＴＰ２内の通常制御タスク２６の実行中（Ｓ１４１）に、ＯＳ１００が、いずれのパーティション内のタスクからもアクセスがされていないパーティション間共有メモリを検索する（Ｓ１４２）。
【０１５４】  ＴＰ２内の通常制御タスク２６は、ＯＳ１００によって指定されるパーティション間共有メモリへアクセスし、データの更新を行う（Ｓ１４３）。なお、ＴＰ２内の通常制御タスク２６による更新が完了していない場合であっても、後続のタイムパーティション内のタスクは、異なるパーティション間共有メモリへとアクセスするため、Ｓ１４３でのデータ更新は、必ずしも完了していなくともよい。
【０１５５】  １Ｔｉｃｋの経過後（Ｓ１４４）、パーティションスケジューラ２１が起動して、スケジューリングを開始する（Ｓ１４５）。タイムパーティションがＴＰ１へと切り替えられ、ＴＰ１内の安全監視タスク２４が実行を開始する（Ｓ１４６）。ＯＳ１００は、いずれのタイムパーティション内のタスクからもアクセスがされておらず、かつ、更新済みのパーティション間共有メモリのうちで最新のデータが記憶されているパーティション間共有メモリを検索する（Ｓ１４７）。
【０１５６】  ＴＰ１内の安全監視タスク２４は、ＯＳ１００によって指定されるパーティション間共有メモリへアクセスする（Ｓ１４８）。なお、Ｓ１４８では、ＴＰ１がパーティション間共有メモリへのアクセスしている際に、ＴＰ１から他のタイムパーティションへの切り替えが発生してもよい。
【０１５７】  図２１は、パーティション間共有メモリへのアクセスが行われる際に、データの書き込みが行われる場合の処理手順の具体例を示すフローチャートである。  まず、タイムパーティション内のタスクが、パーティション間共有メモリへのアクセスを開始する（Ｓ１５１）。ＯＳ１００は、いずれのタイムパーティション内のタスクからもアクセスがされておらず、かつ、更新済みのパーティション間共有メモリのうちで最新のデータが記憶されているパーティション間共有メモリを検索する（Ｓ１５２）。
【０１５８】  タイムパーティション内のタスクは、Ｓ１５２で検索されたパーティション間共有メモリへアクセスする（Ｓ１５３）。パーティション間共有メモリへアクセス中のタスクが、パーティション間共有メモリへの書き込みを実行している場合には、ＯＳ１００は、現在アクセス中のパーティション間共有メモリに最新のデータが記憶されていることを示すために、パーティション間共有メモリの更新に関する情報を保存する（Ｓ１５４）。
【０１５９】  以上に説明した本実施の形態によれば、いずれかのタイムパーティション内のタスクが共有メモリ２９にアクセスしている場合においても、タイムパーティション間でのデータの共有化による失敗を回避することができる。
【０１６０】＜発明の実施の形態８＞  本実施の形態にかかる安全制御装置は、上述した実施の形態７に係る安全制御装置１の変形である。このため、上述した実施の形態７と同様の構成については説明を省略し、以下では、実施の形態７と異なる構成を中心として説明する。
【０１６１】  上述した実施の形態７によれば、いずれかのタイムパーティション内のタスクが共有メモリ２９にアクセスしている場合においても、タイムパーティション間でのデータの共有化による失敗を回避することが可能であるものの、共有化が必要なデータに関して、正確に（抜けなく）共有化できているかについては、必ずしも保証することができない。このため、例えば、サービスロボット等の制御を、最新のセンサデータを利用して実現したい場合には、古いデータを利用したまま、制御を続けているおそれがある。
【０１６２】  上述した実施の形態７によれば、データ更新の対象となるパーティション間共有メモリは、基本的には、アクセスされるごとに異なる。このため、タイムパーティション内のタスクからパーティション間共有メモリへのアクセスが、本来アクセスすべきでないタイムパーティション内のタスクによって行われていた場合には、パーティション間共有メモリに記憶されたデータは、最新のデータでない可能性が高い。
【０１６３】  そこで、本実施の形態では、実施の形態７で説明した処理に加えて、タイムパーティション内のタスクによりパーティション間共有メモリへのアクセスが行われる際に、本来アクセスすべきでないタスクからのアクセスが行われていた場合には、異常と判断して、対応する処理を行う、ことを特徴とする。
【０１６４】  次に、図２２を用いて、本実施の形態にかかる安全制御装置１による処理について、具体的に説明する。  図２２は、パーティション間共有メモリへのアクセスの処理手順の具体例を示すフローチャートである。なお、図２２では、タスクスケジューリングパターンとして、ＴＰ２の後続のタイムパーティションがＴＰ１である場合を例に説明する。
【０１６５】  図２０のＳ１４１〜Ｓ１４３にかけての処理と比較して、図２２の処理では、Ｓ１６３及びＳ１６４において異なっている。すなわち、ＯＳ１００は、ＴＰ２内の通常制御タスク２６によりパーティション間共有メモリへのアクセスが行われる際に、本来アクセスすべきタスクからのアクセスであるかを判断し（Ｓ１６３）、本来アクセスすべきタスクからのアクセスでなかった（Ｓ１６３でＮｏ）場合には、共有メモリ２９に対してアクセス異常が発生したことを保存する（Ｓ１６４）。Ｓ１６３での判断としては、例えば、同じパーティション間共有メモリに、規定の回数以上のアクセスが連続して行われた場合に、本来アクセスすべきタスクからのアクセスではないと判断することができる。規定の回数は、ユーザによって適当な値が予め設定されている。なお、その他の図２２に示すＳ１６１〜Ｓ１６５にかけての処理は、図２０に示したＳ１４１〜Ｓ１４３にかけての処理と基本的に同一である。
【０１６６】  図２０のＳ１４４〜Ｓ１４８にかけての処理と比較して、図２２の処理では、Ｓ１６８及びＳ１７２において異なっている。すなわち、ＯＳ１００は、共有メモリ２９へのアクセスに異常があったかを、Ｓ１６４において保存された異常発生の有無に応じて判断し（Ｓ１６８）、異常があった（Ｓ１６８でＹｅｓ）場合には、タイムパーティションの切り替えを実行させるように、または、マイクロコントローラ１５のリセットを行うように、パーティションスケジューラ２１に対して指示する。なお、その他の図２２に示すＳ１６８〜Ｓ１７２にかけての処理は、図２０に示したＳ１４４〜Ｓ１４８にかけての処理と基本的に同一である。
【０１６７】  以上に説明した本実施の形態によれば、いずれかのタイムパーティション内のタスクが共有メモリ２９にアクセスしている場合においても、タイムパーティション間でのデータの共有化に関して、データを正確に（抜けなく）共有化できることを保証することができる。
【０１６８】＜発明の実施の形態９＞  本実施の形態にかかる安全制御装置は、上述した安全制御装置１の変形である。本実施の形態にかかる安全制御装置の全体的な構成は、図１に示した安全制御装置１の構成と同様とすればよい。本実施の形態にかかる安全制御装置が有するＯＳによって提供されるタスク実行環境は、図４に示したタスク実行環境の構成と基本的には同様であるが、パーティションスケジューラ２１がタスクスケジューラの機能を備える点において異なる。このため、上述した実施の形態と同様の構成については説明を省略し、以下では、異なる構成を中心として説明する。
【０１６９】  本実施の形態では、各タイムパーティション内にタスクスケジューラ２３、２５、２７が存在する構成に代えて、パーティションスケジューラ２１が、各タイムパーティション内におけるタスクのタスクスケジューラをも実行することを特徴とする。
【０１７０】  タイム・パーティショニング機能を備える従来技術では、一般的に、（ａ）パーティションスケジューラによる処理時間や、タスクスケジューラによる処理時間と比較して、タスクによる実行時間が、十分に長く（例えば、１ｍｓｅｃ）、また、（ｂ）タイムパーティションごとに異なるスケジューリング方法を必要とするために、タイムパーティションごとにタスクスケジューラを必要とする、などの事情を有している。しかし、本実施の形態に係る安全制御装置１は、サービスロボット等における制御用途を想定するものであるために、タスクによる実行時間は非常に短く（例えば、３０ｕｓｅｃ）、また、タイムパーティションごとにタスクスケジューリングを変更する必要もない、という事情がある。このため、本実施の形態では、パーティションスケジューラ２１が、タイムパーティションのスケジューリングに加えて、タイムパーティション内のタスクのスケジューリングについても実施する。
【０１７１】  本実施の形態では、パーティションスケジューラ２１が、タイムパーティション内のタスクのスケジューリングについても実施する。このため、例えば、図６に示した処理手順において、Ｓ１２及びＳ１６における処理を、タスクスケジューラが実行することに代えて、パーティションスケジューラ２１が実行するようにすればよい。
【０１７２】  図２５Ａ、Ｂを用いて、本実施の形態による効果を説明する。  図２５Ａ、Ｂは、１つのタイムパーティション内に占める、各処理の比率を示す図である。図２５Ａは、従来技術に係る比率を示しており、タスクスケジューラによる処理時間を、パーティションスケジューラ２１による処理とは独立して必要とするものであった。図２５Ｂは、本実施の形態に係る比率を示しており、タスクスケジューラによる処理時間はパーティションスケジューラ２１による処理時間に含まれ、また、タスクの処理可能時間も短いものとなっている。
【０１７３】  以上に説明した本実施の形態によれば、タスクスケジューラをパーティションスケジューラ２１に集約したことで、システム全体としての効率性を向上させることができる。また、本実施の形態は、サービスロボット等に搭載される比較的小さな制御周期のモータ制御ＥＣＵ(Electronic Control Unit)や、比較的処理の単純なサービスロボット等に適用すると好適である。
【０１７４】  さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述した各実施の形態それぞれを実施するものとしてもよいし、複数の実施の形態を組合せて実施するものとしてもよい。例えば、緊急停止を有する異常が発生した場合には、実施の形態２又は実施の形態３にかかるいずれかの技術を適用し、その他の異常に関しては、実施の形態４にかかる技術を用いて異常発生を判断するものとしてもよい。また、例えば、タイムパーティションおよびタスクに関するスケジューリングを実行する場合には、実施の形態５又は実施の形態６にかかるいずれかの技術を適用し、スケジューリングされた後のタスクの実行中における異常発生時には、実施の形態２乃至４に係るいずれかの技術を適用するものとしてもよい。また、例えば、共有メモリ２９を用いてタスク間でデータ通信を行う場合には、実施の形態７又は実施の形態８にかかるいずれかの技術を適用するものとして、他の実施の形態１乃至６のいずれかと組合せて適用してもよい。
【符号の説明】
【０１７５】１  安全制御装置１０  プロセッサ１１  実行用メモリ１２  Ｉ／Ｏポート１３  不揮発性メモリ１４  リセット回路１５  マイクロコントローラ２１  パーティションスケジューラ２２  スケジューリングテーブル２３、２５、２７  タスクスケジューラ２４  安全監視タスク２６  通常制御タスク２８  安全制御タスク２９  共有メモリ１００  オペレーティングシステム１０１  安全監視アプリケーション１０２  通常制御アプリケーション１０３  安全制御アプリケーション
【図１】
2012104899.tif 000003
【図２】
2012104899.tif 000004
【図３】
2012104899.tif 000005
【図４】
2012104899.tif 000006
【図５Ａ】
2012104899.tif 000007
【図５Ｂ】
2012104899.tif 000008
【図６】
2012104899.tif 000009
【図７】
2012104899.tif 000010
【図８】
2012104899.tif 000011
【図９】
2012104899.tif 000012
【図１０】
2012104899.tif 000013
【図１１】
2012104899.tif 000014
【図１２】
2012104899.tif 000015
【図１３】
2012104899.tif 000016
【図１４】
2012104899.tif 000017
【図１５Ａ】
2012104899.tif 000018
【図１５Ｂ】
2012104899.tif 000019
【図１６】
2012104899.tif 000020
【図１７】
2012104899.tif 000021
【図１８】
2012104899.tif 000022
【図１９Ａ】
2012104899.tif 000023
【図１９Ｂ】
2012104899.tif 000024
【図２０】
2012104899.tif 000025
【図２１】
2012104899.tif 000026
【図２２】
2012104899.tif 000027
【図２３】
2012104899.tif 000028
【図２４】
2012104899.tif 000029
【図２５Ａ】
2012104899.tif 000030
【図２５Ｂ】
2012104899.tif 000031
【手続補正書】
【提出日】平成23年8月4日(2011.8.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサを含むハードウェア資源と、
（ａ）制御対象に関する異常の発生を監視する安全監視プログラム、（ｂ）通常時における前記制御対象の制御に関連する通常制御プログラム、および（ｃ）異常時における前記制御対象の制御に関連する安全制御プログラムに対する前記プロセッサの実行時間の割り当てを制御するためのシステムプログラムと、を備え、
前記システムプログラムは、（ｄ）前記安全監視プログラムに前記実行時間を割り当てる第１のタイムパーティション、（ｅ）前記通常制御プログラムに前記実行時間を割り当てる第２のタイムパーティション、および（ｆ）前記安全制御プログラムに前記実行時間を割り当てる第３のタイムパーティションを含むスケジューリングパターンに従って、次にスケジューリングするタイムパーティションを選択・決定するパーティションスケジューラを一部に有し、
前記プロセッサは、前記システムプログラムを実行することによって、前記パーティションスケジューラを周期的に動作させ、
前記パーティションスケジューラは、前記第１のタイムパーティション内で実行される前記安全監視プログラムまたは前記第２のタイムパーティション内で実行される前記通常制御プログラムによって異常が検知されたことに応じて起動され、前記第１のタイムパーティションまたは前記第２のタイムパーティションにおけるタイムリソースが残っている場合であっても、当該第１のタイムパーティションまたは当該第２のタイムパーティションから、前記第３のタイムパーティションへの切り替えを行う
安全制御装置。
【請求項２】
前記パーティションスケジューラは、前記第２のタイムパーティション内で実行される前記通常制御プログラムによって異常が検知されたことに応じて強制的に起動され、前記第２のタイムパーティションから前記第３のタイムパーティションへの切り替えを即座に行う
ことを特徴とする請求項１に記載の安全制御装置。
【請求項３】
前記通常制御プログラムは、異常を検知した場合に、前記通常制御プログラムが実行される前記第２のタイムパーティション内において実行可能時間が残されているか判断し、残されている場合には、前記パーティションスケジューラに対してタイムパーティションの切り替え希望を通知し、
前記パーティションスケジューラは、前記通常制御プログラムからのタイムパーティションの切り替え希望通知を受けた場合に、次の周期で動作して、前記第２のタイムパーティションから前記第３のタイムパーティションへの切り替えを行う
ことを特徴とする請求項１に記載の安全制御装置。
【請求項４】
前記システムプログラムは、前記タイムパーティション内で実行されるプログラムのスケジューリングを行うタスクスケジューラと、を一部に更に有し、
前記パーティションスケジューラは、前記タスクスケジューラを動作させ、前記タスクスケジューラによる前記プログラムの切り替え回数に応じて、前記タイムパーティション内での前記プログラムの実行状況を判断する
ことを特徴とする請求項１乃至３いずれか１項に記載の安全制御装置。
【請求項５】
前記パーティションスケジューラが、前記タスクスケジューラを有し、
前記パーティションスケジューラが、前記タスクスケジューラを動作させる
ことを特徴とする請求項４に記載の安全制御装置。
【請求項６】
前記プログラムには、それぞれ優先度が設定されており、
前記タイムパーティションの１サイクルが、複数の前記タイムパーティションが含まれ、かつ、複数の前記タイムパーティションのそれぞれに時間が割り当てられて構成されており、
前記パーティションスケジューラは、前記プログラムの優先度と、前記プログラムが実行される前記タイムパーティション内で残されている実行可能時間と、に応じて、次に実行するプログラムを決定し、当該決定したプログラムを含むタイムパーティションに切り替えを行う
ことを特徴とする請求項１乃至５いずれか１項に記載の安全制御装置。
【請求項７】
前記パーティションスケジューラは、前記プログラムの優先度にしたがって、次に実行するプログラムを検索し、当該検索したプログラムが実行される前記タイムパーティション内で実行可能時間が残されている場合に、次に実行するプログラムとして決定する
ことを特徴とする請求項６に記載の安全制御装置。
【請求項８】
前記パーティションスケジューラは、前記プログラムが実行される前記タイムパーティションのうちで、実行可能時間が残されているタイムパーティションを検索し、当該検索したタイムパーティション内で優先度に従って、次に実行するプログラムを決定する
ことを特徴とする請求項６に記載の安全制御装置。
【請求項９】
前記安全監視プログラム、前記通常制御プログラム、および前記安全制御プログラムのうちでいずれか２つのプログラムを第１のプログラムおよび前記第２のプログラムとして、前記第１のプログラムおよび前記第２のプログラム間でのデータ通信のために用いられ、複数の共有部分に分割されて構成される共有メモリを更に備え、
前記プロセッサは、前記システムプログラムを実行することによって、前記タイムパーティションを選択・決定させ、前記タイムパーティション内で実行される前記第１のプログラムが前記共有メモリのいずれかの共有部分にアクセスしている場合には、前記タイムパーティション内で実行される前記第２のプログラムのアクセス先を、前記第１のプログラムがアクセスしてない共有部分であって、かつ、最新の更新データが記憶されている共有部分とする
ことを特徴とする請求項１乃至８いずれか１項に記載の安全制御装置。
【請求項１０】
前記プロセッサは、前記システムプログラムを実行することによって、前記タイムパーティションを選択・決定させ、前記タイムパーティション内で実行される前記第１のプログラムが前記共有メモリのいずれかの共有部分にアクセスする際に規定の回数以上アクセスしていた場合には、異常であると判断する
ことを特徴とする請求項９に記載の安全制御装置。
【請求項１１】
（ａ）制御対象に関する異常の発生を監視する安全監視プログラムにプロセッサの実行時間を割り当てる第１のタイムパーティション、（ｂ）通常時における前記制御対象の制御に関連する通常制御プログラムに前記実行時間を割り当てる第２のタイムパーティション、および（ｃ）異常時における前記制御対象の制御に関連する安全制御プログラムに前記実行時間を割り当てる第３のタイムパーティションを含むスケジューリングパターンに従って、次にスケジューリングするタイムパーティションを前記プロセッサに選択・決定させるべく周期的に動作するステップと、
前記第１のタイムパーティション内で実行される前記安全監視プログラムまたは前記第２のタイムパーティション内で実行される前記通常制御プログラムによって異常が検知されたことに応じて、前記第１のタイムパーティションまたは前記第２のタイムパーティションにおけるタイムリソースが残っている場合であっても、当該第１のタイムパーティションまたは当該第２のタイムパーティションから、前記第３のタイムパーティションへの切り替えを前記プロセッサに行わせるべく動作するステップと、
を備える制御対象の安全制御方法。
【請求項１２】
前記安全制御方法は、
前記プログラムの切り替え回数に応じて、前記タイムパーティション内での前記プログラムの実行状況を前記プロセッサに判断させるべく動作するステップを、更に備える
ことを特徴とする請求項１１に記載の安全制御方法。
【請求項１３】
前記安全制御方法は、
前記プログラムが実行される前記タイムパーティションのうちで、実行可能時間が残されているタイムパーティションを検索し、当該検索したタイムパーティション内で優先度に従って、次に実行するプログラムを前記プロセッサに決定させるべく動作するステップを、更に備える
ことを特徴とする請求項１１又は１２いずれか１項に記載の安全制御方法。
【請求項１４】
前記安全制御方法は、
前記安全監視プログラム、前記通常制御プログラム、および前記安全制御プログラムのうちでいずれか２つのプログラムを第１のプログラムおよび前記第２のプログラムとして、前記第１のプログラムおよび前記第２のプログラム間でのデータ通信のために用いられ、複数の共有部分に分割されて構成される共有メモリへのアクセスを前記プロセッサに実行させるべく動作するステップを更に備え、
前記共有メモリへのアクセスを前記プロセッサに実行させるべく動作するステップでは、前記タイムパーティション内で実行される前記第１のプログラムが前記共有メモリのいずれかの共有部分にアクセスしている場合には、前記タイムパーティション内で実行される前記第２のプログラムのアクセス先を、前記第１のプログラムがアクセスしてない共有部分であって、かつ、最新の更新データが記憶されている共有部分とする
ことを特徴とする請求項１１乃至１３いずれか１項に記載の安全制御方法。
【国際調査報告】
2012104899.tif 000032
2012104899.tif 000033
2012104899.tif 000034
2012104899.tif 000035