(57)【要約】  タイム・パーティションニングに関し、割り込み処理を実行する場合でも、割り込み処理の実行遅延を抑制しつつ処理の破綻を防止する。安全制御装置は、プロセッサは、安全関連タスク、非安全関連タスク、及び、割り込み処理タスクに対するプロセッサの実行時間の割り当てを制御するシステムプログラムと、割り込みハンドラを備える。プロセッサは、割り込みハンドラで、割り込み発生時に割り込み処理タスクを実行予約タスクとして実行予約し、システムプログラムで、安全関連タスクが属する安全関連ＴＰ、非安全関連タスクが属する非安全関連ＴＰ、及び、実行予約タスクが属する予約実行ＴＰのスケジューリング情報に従ってタスクをスケジューリングし、予約実行ＴＰより前のＴＰの期間の終了前に前のＴＰのタスクが実行終了したとき、実行予約タスクに前のＴＰの実行時間を割り当てる。
2012104896.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）、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ１３は、ＯＳ１００及びアプリケーション１０１〜１０３を格納する。なお、不揮発性メモリ１３の少なくとも一部は安全制御装置１から取り外し可能に構成されてもよい。例えば、アプリケーション１０１〜１０３が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ１３の少なくとも一部は、安全制御装置１の外部に配置されてもよい。
【００２７】
ＯＳ１００は、プロセッサ１０によって実行されることにより、プロセッサ１０及び実行用メモリ１１及び不揮発性メモリ１３等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
【００２８】
さらに、機能安全の確保に関連する安全監視アプリケーション１０１及び安全制御アプリケーション１０３の通常制御アプリケーション１０２からの独立性を高めるため、ＯＳ１００は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２を含む。
【００２９】
このうち、時間的な保護は、プロセッサ１０の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ１０の実行時間をパーティショニングし、各パーティション（タイムパーティションと呼ぶ）にタスク（プロセス又はスレッド）を割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、各タイムパーティション（以下、ＴＰと略称する場合がある。）に割り当てられたタスクに対して、プロセッサ１０の実行時間を含む資源の利用を保証する。
【００３０】
図２は、タイム・パーティショニングに関する概念図である。図２の例では、予め定められた１サイクル時間を３つのＴＰ１、ＴＰ２及びＴＰ３に分割する例を示している。例えば、１サイクル時間を１００Ｔｉｃｋとした場合、このうち前半の２０ＴｉｃｋがＴＰ１、中間の３０ＴｉｃｋがＴＰ２、後半の５０ＴｉｃｋがＴＰ３と規定される。
【００３１】
また、図２の例では、第１アプリケーション（ＡＰＬ１）〜第４アプリケーション（ＡＰＬ４）が、ＴＰ１〜ＴＰ３のいずれかに割り当てられている。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、時間の経過に応じて、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。そして、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００３２】
一方、空間的な保護は、実行用メモリ１１及びＩ／Ｏポート１２を含む固定的な資源をパーティショニングし、各パーティション（リソースパーティションと呼ぶ）にタスクを割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、予め割り当てられたリソースパーティション（以下、ＲＰと略称する場合がある。）を超えてタスクが他のリソースにアクセスすることを禁止する。
【００３３】
図３は、リソース・パーティショニングに関する概念図である。図３の例では、２つのＲＰ（ＲＰ１及びＲＰ２）を示している。ＲＰ１には、実行用メモリ１１及び不揮発性メモリ１３の一部（Ａ領域）と、Ｉ／Ｏポート１２の一部（ポートＡ）が割り当てられている。また、ＲＰ２には、実行用メモリ１１及び不揮発性メモリ１３の他の一部（Ｂ領域）と、Ｉ／Ｏポート１２の他の一部（ポートＢ）が割り当てられている。ＲＰ１からはＲＰ２に割り当てられたリソースへのアクセスが禁止され、ＲＰ２からはＲＰ１に割り当てられたリソースへのアクセスが禁止される。
【００３４】
なお、全てのリソースがいずれかのＲＰに排他的に割り当てられる必要はない。つまり、複数のＲＰによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション１０２及び安全制御アプリケーション１０３の双方からアクセスできる必要がある。よって、通常制御アプリケーション１０１が属するＲＰと安全制御アプリケーション１０２が属するＲＰによって、アクチュエータを制御するためのＩ／Ｏポートを共有するとよい。
【００３５】
図１に戻り説明を続ける。アプリケーション１０１〜１０３は、ＯＳ１００及びプロセッサ１０によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション１０１は、通常制御アプリケーション１０２の実行状況の監視と、安全制御アプリケーション１０３の実行状況の監視と、Ｉ／Ｏポート１２への入出力データの監視と、をプロセッサ１０に実行させるための命令コードを含む。さらに、安全監視アプリケーション１０１は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全監視アプリケーション１０１は、安全関連アプリケーションである。
【００３６】
また、通常制御アプリケーション１０２は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、通常制御アプリケーション１０２は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、通常制御アプリケーション１０２は、非安全関連アプリケーションである。
【００３７】
また、安全制御アプリケーション１０３は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、安全制御アプリケーション１０３は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全制御アプリケーション１０３は、安全関連アプリケーションである。
【００３８】
リセット回路１４は、ＯＳ１００からの信号に基づき、マイクロコントローラ１５のリセットを行う。リセット回路１４を用いたマイクロコントローラ１５のリセット機構については後述する。
【００３９】
続いて以下では、パーティションスケジューラ２１と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図４を用いて説明する。図４は、ＯＳ１００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ２１とタスク２４、２６、２８との関係を示す図である。
【００４０】
マイクロコントローラ１５は、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２、不揮発性メモリ１３等を含む。なお、図４では、マイクロコントローラ１５の外部にリセット回路１４を備える構成を例示しているが、マイクロコントローラ１５の内部にリセット回路１４を含む構成としてもよい。
【００４１】
マイクロコントローラ１５には、外部のクロック源からのクロック信号が供給され、プロセッサ１０等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、１Ｔｉｃｋであるとして説明する。このため、プロセッサ１０によりＯＳ１００が実行されることで、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作すると共に、各ＴＰにおいて、タスクスケジューラ２３、２５、２７およびタスク（安全監視タスク２４、通常制御タスク２６、安全制御タスク２８）が１Ｔｉｃｋごとに動作する。
【００４２】
パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作し、ＴＰの切り替え（パーティション・スケジューリング）を行う。パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１は、選択したＴＰに関するタスクスケジューラの動作を開始させる。
【００４３】
パーティションスケジューラ２１によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ２１は、スケジューリングテーブル２２を参照し、ＴＰの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
【００４４】
スケジューリングテーブル２２は、ＴＰの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。なお、スケジューリングテーブル２２は、少なくとも２つの異なるスケジューリングパターンを保持している。１つは、安全監視タスク２４による異常検知が行われていない場合（つまり通常時）に適用されるスケジューリングパターンである。もう１つは、安全監視タスク２４によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
【００４５】
図５Ａは、通常制御スケジューリングパターンの具体例を示している。図５Ａでは、通常制御タスク２６が属するＴＰ２が１サイクル時間の前半（Ｔ１）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ２）に割り当てられている。図５Ａのスケジューリングパターンによれば、通常制御タスク２６と安全監視タスク２４が繰り返しスケジューリングされる。
【００４６】
図５Ｂは、安全制御スケジューリングパターンの具体例を示している。図５Ｂでは、安全制御タスク２８が属するＴＰ３が１サイクル時間の前半（Ｔ３）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ４）に割り当てられている。図５Ｂのスケジューリングパターンによれば、安全制御タスク２８と安全監視タスク２４が繰り返しスケジューリングされる。
【００４７】
図４に戻り説明を続ける。タスクスケジューラ２３、２５、２７は、それぞれが属するＴＰ内でのタスクのスケジューリングを行う。各ＴＰ内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図４では、各ＴＰはそれぞれ１つのタスクのみを含むものとして図示しているが、実際には、１以上のタスクが含まれている。例えば、通常制御用のＴＰ２内には、通常制御タスクＡ及び通常制御タスクＢの２つのタスクが含まれていてもよい。
【００４８】
安全監視タスク２４は、安全監視アプリケーション１０１の起動によって生成されるタスクである。図４の例では、安全監視タスク２４は、ＴＰ１及びＲＰ１に割り当てられている。安全監視タスク２４は、非安全関連アプリケーションである通常制御タスク２６の実行状況の監視と、安全関連アプリケーションである安全制御タスク２８の監視と、Ｉ／Ｏポート１２の入出力データを監視する。さらに、安全監視タスク２４は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００４９】
通常制御タスク２６は、通常制御アプリケーション１０２の起動によって生成されるタスクである。図４の例では、通常制御タスク２６は、ＴＰ２及びＲＰ２に割り当てられている。通常制御タスク２６は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。さらに、通常制御タスク２６は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５０】
安全制御タスク２８は、安全制御アプリケーション１０３の起動によって生成されるタスクである。図４の例では、安全制御タスク２８は、ＴＰ３及びＲＰ３に割り当てられている。安全制御タスク２８は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。さらに、安全制御タスク２８は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。なお、各タスクからパーティション２１へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがＯＳ１００のシステムコール（サービスコール）を呼び出し、ＯＳ１００を介して、パーティションスケジューラ２１に結果を通知することができる。また、例えば、タスクの実行状況に関するフラグを実行用メモリ１１に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ２１がフラグの設定値に応じてタスクの実行状況を判断することもできる。
【００５１】
上述したように、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作し、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１が、選択したＴＰに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ２３、２５、２７が動作を開始することでタスクのスケジューリングが行われ、プロセッサ１０が、タスクスケジューラ２３、２５、２７によりスケジューリングされた順序に従って、ＴＰ内でのタスクを実行していく。これによって、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００５２】
続いて以下では、パーティションスケジューラ２１によるパーティション・スケジューリングについて、図６を用いて説明する。図６は、パーティションスケジューラ２１の処理手順の具体例を示すフローチャートである。
【００５３】
まず、１Ｔｉｃｋごとに動作するパーティションスケジューラ２１が、ＴＰＸのタスクスケジューラを動作させる（Ｓ１１）。ここで、変数ＸはＴＰの番号を示し、Ｘは１以外の値とする。すなわち、Ｓ１１では、安全監視用のＴＰ１を除いた、ＴＰ２又はＴＰ３のいずれかを動作させる。
【００５４】
なお、図６では、通常制御スケジューリングパターン（例えば図５Ａ）または安全制御スケジューリングパターン（例えば図５Ｂ）に従って、スケジューリングを実行する場合を例に説明する。すなわち、ＴＰ２またはＴＰ３に続く次のＴＰはＴＰ１であり、かつ、ＴＰ２での異常がＴＰ１で検知された場合に、ＴＰ１からの結果を受けて次に選択・決定されるＴＰはＴＰ３である場合を例に説明する。
【００５５】
Ｓ１１で動作を開始したＴＰＸのタスクスケジューラは、ＴＰＸ内のタスクを優先度に応じて実行する（Ｓ１２）。そして、１Ｔｉｃｋが経過すると、パーティションスケジューラ２１が、ＴＰのスケジューリングを開始する（Ｓ１３）。すなわち、パーティションスケジューラ２１は、スケジューリングパターンに従って、次の１Ｔｉｃｋの間にいずれのＴＰをアクティブにするかを選択・決定する。
【００５６】
パーティションスケジューラ２１は、次にアクティブにするＴＰを変更しない（Ｓ１４でＮｏ）場合には、Ｓ１１に戻り、同一のＴＰＸについての動作を継続させる。このため、ＴＰＸの切り替えタイミングとなるまでの間、Ｓ１１〜Ｓ１４までの処理が繰り返される。
【００５７】
パーティションスケジューラ２１は、次にアクティブにするＴＰを変更する（Ｓ１４でＹｅｓ）場合には、その変更するタイムパーティションのタスクスケジューラを動作させる（Ｓ１５）。ここでは、ＴＰ１のタスクスケジューラを動作させる。そして、ＴＰ１のタスクスケジューラ２３が、ＴＰ１内のタスクを優先度に応じて実行する（Ｓ１６）。
【００５８】
ＴＰ１で実行される安全監視タスク２４は、通常制御タスク２６の実行状況の監視と、Ｉ／Ｏポート１２の入出力データの監視を行い、これらが正常であるか判断する（Ｓ１７）。判断の結果、異常であると判断した（Ｓ１８でＮｏ）場合、安全監視タスク２４は、パーティションスケジューラ２１に対して、その結果を通知する（Ｓ１９）。
【００５９】
１Ｔｉｃｋが経過すると、パーティションスケジューラ２１が、再びスケジューリングを開始する（Ｓ２０）。パーティションスケジューラ２１は、スケジューリングパターンに従って、次の１Ｔｉｃｋの間にいずれのＴＰをアクティブにするかを選択・決定し、次にアクティブにするＴＰを変更しない（Ｓ２１でＮｏ）場合には、Ｓ１５に戻り、ＴＰ１についての動作を継続させる。
【００６０】
パーティションスケジューラ２１は、次にアクティブにするＴＰを変更する（Ｓ２１でＹｅｓ）場合には、さらに、Ｓ１９でのＴＰ１からの通知結果に応じて、ＴＰＸが正常であったか否かを判断する（Ｓ２２）。判断の結果、異常であった（Ｓ２２でＮｏ）場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰとして、ＴＰ３を選択・決定する（Ｓ２３）。
【００６１】
判断の結果、正常であった（Ｓ２２でＹｅｓ）場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰとして、ＴＰ１とＴＰ３以外のＴＰＸを選択・決定する（Ｓ２４）。
【００６２】
図６で示した処理に関して、パーティション・スケジューリングの具体例を説明する。
まず、図５Ａに例示した通常制御スケジューリングパターンに従って、Ｓ１１においてスケジューリングを開始した場合を説明する。この場合、Ｓ１１ではＴＰＸ＝ＴＰ２として開始し、Ｓ１２〜Ｓ１４にかけてもＴＰＸ＝ＴＰ２のままである。そして、Ｓ１５でＴＰ２からＴＰ１へと変更され、Ｓ１５〜Ｓ２１にかけてＴＰ１のままである。Ｓ１８でＴＰ２に関する実行状況（データ入出力）が正常であると判定されていた場合には、Ｓ２４では、ＴＰＸ＝ＴＰ２となる（つまり、ＴＰ２から開始する通常制御スケジューリングパターンが継続される。）。一方で、Ｓ１８でＴＰ２に関する実行状況（データ入出力）が異常であると判定されていた場合には、Ｓ２３で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンに切り替わる。）。
【００６３】
また、図５Ｂに例示した安全制御スケジューリングパターンに従って、Ｓ１１においてスケジューリングを開始した場合を説明する。この場合、Ｓ１１ではＴＰＸ＝ＴＰ３として開始し、Ｓ１２〜Ｓ１４にかけてもＴＰＸ＝ＴＰ３のままである。そして、Ｓ１５でＴＰ３からＴＰ１へと変更され、Ｓ１５〜Ｓ２１にかけてＴＰ１のままである。Ｓ１８でＴＰ３に関する実行状況（データ入出力）が正常であると判定されていた場合には、Ｓ２４では、ＴＰＸ＝ＴＰ２となる（つまり、ＴＰ２から開始する通常制御スケジューリングパターンに切り替わる。）。一方で、Ｓ１８でＴＰ３に関する実行状況（データ入出力）に異常があると判定されていた場合には、Ｓ２３で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンが継続される。）。
【００６４】
なお、上述の例では、スケジューリングパターンとして、３つのＴＰ（安全監視用のＴＰ１、通常制御用のＴＰ２、安全制御用のＴＰ３）のみを組み合わせた場合を例に説明したが、ＴＰ２のような通常制御用パーティションや、ＴＰ３のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、２つの通常制御用のＴＰ２及びＴＰ４と、安全監視用のＴＰ１と、２つの安全制御用のＴＰ３及びＴＰ５と、が存在し、これら５つのＴＰ（ＴＰ１〜ＴＰ５）を組み合わせてスケジューリングパターンを構成してもよい。この場合、Ｓ２３では、パーティションスケジューラ２１が、ＴＰＸに関する実行状況（データ入出力）の異常状態の種類を判定し、その異常種類に応じて、安全制御用のＴＰ３またはＴＰ５のいずれかを選択すればよい。また、Ｓ２４では、通常制御用のＴＰ２またはＴＰ４のいずれかを選択すればよい。
【００６５】
上述したように、本実施の形態では、ＯＳ１００は、安全監視用のＴＰ１からの通知、または、各ＴＰからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ２１を備えている。パーティションスケジューラ２１は、各ＴＰにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。所定のタイマー周期で独立して動作するパーティションスケジューラ２１がパーティション・スケジューリング機能を有することで、以下の効果を奏することができる。
【００６６】
まず、一般的に、通常制御タスク２６の実行時間を十分に確保するために、安全監視タスク２４の実行時間を可能な限り短縮したいという要求がある。従来技術（例えば特許文献１）では、安全監視タスク２４が、通常制御タスク２６の実行状況の監視と、Ｉ／Ｏポート１２の入出力データの監視と、に加えて、スケジューリングパターンの選択・決定についても行っていたために、この選択・決定に要する実行時間についても、安全監視タスク２４が属するＴＰ２に関して割り当てておく必要があった。
【００６７】
また、機能安全の確保を保証するためには、基本的には、安全監視タスク２４と通常制御タスク２６とが交互に実行される必要がある。このため、従来技術では、通常制御タスク２６の実行に伴って安全監視タスク２４によるスケジューリングパターンの選択・決定までもが毎回実行されることになり、複数のサイクルにわたって合計すると、多くの実行時間を、安全監視タスク２４によるスケジューリングパターンの選択・決定のために要することになってしまう。
【００６８】
これに対して、本実施の形態によれば、安全監視タスク２４自体は、スケジューリングパターンの選択・決定を実行する必要がない。また、パーティションスケジューラ２１がスケジューリングパターンの選択・決定に要する実行時間は短時間で済む。このため、従来技術と比較して、安全監視用のＴＰ１はより短時間の割り当てで済み、かつ、通常制御用のＴＰ２にはより長時間の割り当てを行うことができるという効果を奏する。
【００６９】
さらに、図６で例示した処理では、パーティションスケジューラ２１が、ＴＰ１からの結果通知に応じて、安全制御用のＴＰ３を選択・決定する（Ｓ２３）、または、通常制御用のＴＰ２を選択・決定する（Ｓ２４）ものとして説明したが、本発明はこれに限定されない。例えば、安全監視用のＴＰ１のみからパーティションスケジューラ２１に対して結果を通知する構成に代えて、ＴＰ１〜ＴＰ３のそれぞれからパーティションスケジューラ２１に対して実行状況を通知する構成とし、パーティションスケジューラ２１が、各ＴＰからの結果通知に応じて、安全制御用のＴＰ３を選択・決定するものとしてもよい。
【００７０】
独立に動作するパーティションスケジューラ２１が、全てのＴＰから結果通知を受ける構成とすることで、パーティションスケジューラ２１は、全てのＴＰに関する状況を一元的に把握することができる。このため、例えば、安全監視用のＴＰ１からの結果通知に応じて、パーティションスケジューラ２１が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ２１は、各ＴＰの状況を考慮した上で、正常状態にあるＴＰのみから次のパーティションを決定・選択することができる。従って、従来技術と比較して、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
【００７１】
続いて以下では、リセット回路１４を用いたマイクロコントローラ１５のリセット機構について、図７及び図８を用いて説明する。図７及び図８は、リセット回路１４を用いたマイクロコントローラ１５のリセット処理手順の具体例を示すフローチャートである。
【００７２】
本実施の形態では、１Ｔｉｃｋごとに動作するパーティションスケジューラ２１が、マイクロコントローラ１５のリセット機能を有している。パーティションスケジューラ２１は、ＯＳ１００における異常を検出した場合に、リセット回路１４と連動して異常処置を行う。リセット回路１４は、パーティションスケジューラ２１からの信号に基づき、マイクロコントローラ１５のリセットを行う。
【００７３】
まず、図７を用いて、リセット回路１４を用いたマイクロコントローラ１５のリセット処理手順の具体例について説明する。図７に示す処理では、パーティションスケジューラ２１からリセット指示信号を受けた場合に、リセット回路１４がマイクロコントローラ１５をリセットするものである。なお、図７では、ＴＰＸは、ＴＰ１とＴＰ３以外のＴＰである。
【００７４】
まず、Ｓ３１〜Ｓ３３では、パーティションスケジューラ２１がＴＰＸの動作を開始させることで、次にアクティブにするＴＰが変更されるまでの間、ＴＰＸに関する処理が実行される。そして、パーティションスケジューラ２１がＴＰ１のタスクスケジューラ２３の動作を開始させた（Ｓ３４）後に、ＴＰ１に属する安全監視タスク２４が、ＴＰＸに関する処理（入出力）が正常であったかを判断する（Ｓ３５）。判断の結果、正常であった（Ｓ３５でＹｅｓ）場合、Ｓ３１に戻り、同一のＴＰＸについての動作が継続される。
【００７５】
判断の結果、異常であった（Ｓ３５でＮｏ）場合、ＴＰ１に属する安全監視タスク２４が、ＴＰＸでの異常がＴＰ３に属する安全制御タスク２８で対応可能な異常であるかを判断する（Ｓ３６）。ＴＰ３で対応可能な異常ではなかった（Ｓ３６でＮｏ）場合、ＴＰ１に属する安全監視タスク２４が、パーティションスケジューラ２１に対して、緊急停止を有する異常であることを通知する（Ｓ３７）。ＴＰ１に属する安全監視タスク２４からの通知を受けたパーティションスケジューラ２１が、リセット回路１４にリセット指示信号を出力し、リセット指示信号を受けたリセット回路１４がマイクロコントローラ１５のリセットを行う（Ｓ３８）。
【００７６】
ＴＰ３で対応可能な異常であった（Ｓ３６でＹｅｓ）場合、ＴＰ１に属する安全監視タスク２４は、パーティションスケジューラ２１に対して、ＴＰＸが異常であることを通知する（Ｓ３９）。ＴＰ１からの通知を受けたパーティションスケジューラ２１は、ＴＰＸからＴＰ３へと切り替える（Ｓ４０）。
【００７７】
次に、図８を用いて、リセット回路１４を用いたマイクロコントローラ１５のリセット処理手順の他の具体例について説明する。図８に示す処理では、パーティションスケジューラ２１からリセット回路１４に定期的に信号を送信し、リセット回路１４は、パーティションスケジューラ２１からの送信信号が途絶えた場合に、マイクロコントローラ１５をリセットするものである。なお、図８では、ＴＰＸは、ＴＰ１とＴＰ３以外のＴＰである。
【００７８】
図７のＳ３１〜Ｓ３５にかけての処理と比較して、図８のＳ５３では、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作する点が明確化され、また、Ｓ５４及びＳ５５で、パーティションスケジューラ２１がリセット回路１４に定期的に信号を送信する点で異なっている。その他の図８に示すＳ５１〜Ｓ５７にかけての処理は、図７に示したＳ３１〜Ｓ３５にかけての処理と基本的に同一である。
【００７９】
また、図７のＳ３６〜Ｓ４０にかけての処理と比較して、図８のＳ６０では、パーティションスケジューラ２１がリセット回路１４への送信信号を停止し、Ｓ６３では、パーティションスケジューラ２１がリセット回路１４への信号を送信する点で異なっている。さらに、図８のＳ６１では、パーティションスケジューラ２１からの送信信号が途絶えたことに応じて、リセット回路１４がマイクロコントローラ１５のリセットを行う点で異なっている。その他の図８に示すＳ５８〜Ｓ６４にかけての処理については、図７に示したＳ３６〜Ｓ４０にかけての処理と基本的に同一である。
【００８０】
さらに、図８のＳ７１及びＳ７２に示すように、Ｓ５１〜Ｓ６４にかけての処理と並行して、パーティションスケジューラ２１において不具合が発生した場合、または、パーティションスケジューラ２１からリセット回路１４への信号線において不具合が発生した場合には、パーティションスケジューラ２１からリセット回路１４への送信信号が伝達されなくなる。この場合にも、パーティションスケジューラ２１からの送信信号が途絶えたことに応じて、リセット回路１４がマイクロコントローラ１５のリセットを行う（Ｓ６１）。
【００８１】
図８に示した処理によれば、パーティションスケジューラ２１からリセット回路１４へ意図的にリセット指示を行う場合に加えて、パーティションスケジューラ２１自身が何らかの原因により正常に動作しない場合、または、パーティションスケジューラ２１からリセット回路１４へ送信信号を伝達する信号線に不具合が発生した場合においても、マイクロコントローラ１５のリセットを確実に行うことができる。また同時に、ＴＰの切り替えが、１Ｔｉｃｋごとに正常に実行されているかについても保証することができる。
【００８２】
なお、図７及び図８では、パーティションスケジューラ２１は、ＴＰ１からの結果通知に応じて、リセット回路１４へのリセット指示信号の出力、または、リセット回路１４への送信信号の停止を行うものとして説明したが、ＴＰ１〜ＴＰ３のいずれかからの結果通知に応じて、リセット回路１４へのリセット指示信号の出力、または、リセット回路１４への送信信号の停止を行うものとしてもよい。
【００８３】
＜発明の実施の形態２＞
続いて、図９を参照して、本実施の形態２にかかる安全制御装置２について説明する。図９は、本実施の形態２のかかる安全制御装置２の構成例を示すブロック図である。以下、実施の形態１にかかる安全制御装置１と同様の内容については説明を省略する。
【００８４】
プロセッサ１０は、制御対象からの割り込みと、タイマー割り込みを検出する。プロセッサ１０は、制御対象からの割り込み信号の入力によって、制御対象からの割り込みを検出する。プロセッサ１０は、制御対象からの割り込みを検出したときに、後述する割り込みハンドラ３１を実行する。ここで、安全制御装置２のマイクロコントローラ１５は、タイマー（図示せず）を有する。タイマーは、クロック信号に基づいた所定の周期で割り込み信号をプロセッサ１０に出力する。プロセッサ１０は、タイマーからの割り込み信号の入力によって、タイマー割り込みを検出する。プロセッサ１０は、制御対象からの割り込みを検出したときに、パーティションスケジューラ２１を実行する。
【００８５】
不揮発性メモリ１３は、割り込み処理アプリケーション１０４を格納する。割り込み処理アプリケーション１０４は、制御対象からの割り込みに応じた割り込み処理を、プロセッサ１０に実行させるための命令コードを含む。さらに、割り込み処理アプリケーション１０４は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含むようにしてもよい。割り込み処理アプリケーション１０４は、安全関連アプリケーションであってもよく、非安全関連アプリケーションであってもよい。ここで、割り込み処理アプリケーション１０４は、割り込み要因のそれぞれに対応するように複数用意される。つまり、割り込み処理アプリケーション１０４は、対応する割り込み要因の割り込みに応じて実行されるべき割り込み処理の命令コードを含む。なお、１つの割り込み処理アプリケーション１０４が２つ以上の割り込み要因に対応していてもよい。
【００８６】
続いて、パーティションスケジューラ２１と、アプリケーション１０１〜１０４の起動により生成されるタスクと、割り込みハンドラ３１と、の関係について、図１０を用いて説明する。図１０は、ＯＳ１００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ２１とタスク２４、２６、２８、３０と割り込みハンドラ３１との関係を示す図である。以下、実施の形態１にかかる安全制御装置１と同様の内容については説明を省略する。
【００８７】
パーティションスケジューラ２１は、１Ｔｉｃｋごとに発生するタイマー割り込みに応じて、１Ｔｉｃｋごとに動作してパーティション・スケジューリングを行う。つまり、パーティションスケジューラ２１におけるパーティション・スケジューリングを行う処理は、例えば、パーティションスケジューラ２１の起動直後の初期化処理において、タイマー割り込みの割り込みハンドラとして登録されたパーティションスケジューラ２１の処理である。パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にＴＰ１〜ＴＰ３及び割り込み専用タイムパーティションＴＰＩのいずれをアクティブにするかを選択・決定する。ＴＰＩには、割り込み処理タスク３０が属する。
【００８８】
タスクスケジューラ２９は、タスクスケジューラ２３、２５、２７と同様に、ＴＰＩに属する割り込み処理タスク３０のスケジューリングを行う。
【００８９】
割り込み処理タスク３０は、割り込み処理アプリケーション１０４の起動によって生成されるタスクである。よって、割り込み処理タスク３０は、制御対象からの割り込みに応じた割り込み処理を実行する。また、割り込み処理タスク３０は、割り込み要因のそれぞれに対応するように複数生成されることになる。制御対象からの割り込みが発生した場合、その割り込みの割り込み要因に対応する割り込み処理アプリケーション１０４の起動によって生成された割り込み処理タスク３０が実行される。割り込み処理タスク３０は、制御対象に通常の機能・動作を行わせるための制御を行うようにしてもよく、機能安全を確保するために定められた制御を行うようにしてもよい。
【００９０】
割り込みハンドラ３１は、制御対象からの割り込みに応じて実行される。割り込みハンドラ３１は、制御対象から割り込みがあったときに、その割り込みに応じた割り込み処理を実行する割り込み処理タスク３０を、ＴＰＩで実行されるように実行予約する。なお、割り込みハンドラ３１は、発生した割り込みの割り込み要因に対応する割り込み処理タスク３０を実行予約する。このように、本実施の形態２では、割り込みに応じて実行される割り込みハンドラ３１における処理を、割り込み処理タスク３０の実行予約のみとし、実行予約した割り込み処理タスク３０をＴＰＩで実行するようにしている。これによれば、割り込みハンドラ３１における処理時間は、割り込み処理を実行する場合と比べて、比較にならないほど小さい実行時間となる。そのため、割り込みが発生した時点でアクティブとなっているＴＰにおける処理の遅延が発生しなくなる。
【００９１】
続いて、図１１を参照して、タスクの状態について説明する。図１１は、タスクの状態遷移図である。タスク２４、２６、２８、３０は、実行状態、実行可能状態、待ち状態、二重待ち状態、強制待ち状態、及び、休止状態のいずれかの状態をとる。
【００９２】
実行状態は、タスクスケジューラ２３、２５、２７、２９によって、タスクにプロセッサ１０の実行時間が割り当てられた状態である。タスクが実行状態のとき、そのタスクはプロセッサ１０によって実行されていることになる。実行状態のタスクは、例えば、タスクスケジューラ２３、２５、２７、２９によって割り当てられたプロセッサ１０の実行時間を使い果たしたときに実行可能状態に遷移する。また、実行状態のタスクは、例えば、スリープしたときに待ち状態に遷移する。
【００９３】
実行可能状態は、タスクにプロセッサ１０の実行時間を割り当て可能であるが、タスクにプロセッサ１０の実行時間が割り当てられていない状態である。実行可能状態は、例えば、タスクが起床している状態である。実行可能状態のタスクは、例えば、タスクスケジューラ２３、２５、２７、２９によって、プロセッサ１０の実行時間が割り当てられたときに実行状態に遷移する。
【００９４】
待ち状態は、タスクにプロセッサ１０の実行時間を割り当て可能でなく、プロセッサ１０の実行時間が割り当てられていない状態である。待ち状態は、例えば、タスクがスリープしている状態である。待ち状態のタスクは、例えば、スリープ時間の満了、又は、他のタスクからのタスク間通信の受信等によって、スリープしている状態から起床したときに実行可能状態に遷移する。
【００９５】
強制待ち状態は、タスクにプロセッサ１０の実行時間を割り当て可能でなく、プロセッサ１０の実行時間が割り当てられていない状態である。強制待ち状態は、例えば、パーティションスケジューラ２１、タスクスケジューラ２３、２５、２７、２９、又は、他のタスクによって、実行可能状態のタスクが一時的に実行を禁止された状態である。強制待ち状態のタスクは、パーティションスケジューラ２１、タスクスケジューラ２３、２５、２７、２９、又は、他のタスクによって、強制待ち状態を解除された場合に、実行可能状態に遷移する。
【００９６】
二重待ち状態は、タスクにプロセッサ１０の実行時間を割り当て可能でなく、プロセッサ１０の実行時間が割り当てられていない状態である。二重待ち状態は、例えば、パーティションスケジューラ２１、タスクスケジューラ２３、２５、２７、２９、又は、他のタスクによって、待ち状態のタスクが一時的に実行を禁止された状態である。強制待ち状態のタスクは、パーティションスケジューラ２１、タスクスケジューラ２３、２５、２７、２９、又は、他のタスクによって、強制待ち状態を解除された場合に、待ち状態に遷移する。また、強制待ち状態のタスクは、起床した場合に、強制待ち状態に遷移する。
【００９７】
休止状態は、タスクにプロセッサ１０の実行時間を割り当て可能でなく、プロセッサ１０の実行時間が割り当てられていない状態である。休止状態は、例えば、タスクが起動されていない状態、又は、タスクが終了した状態である。
【００９８】
続いて、図１２〜図１４を参照して、本実施の形態２にかかる安全制御装置２の割り込み発生時の処理手順について説明する。図１２は、本実施の形態２にかかるスケジューリングパターンの具体例を示す図である。つまり、本実施の形態２では、図１２に例示するスケジューリングパターンが、スケジューリングテーブル２２に格納されている場合について説明する。図１３は、本実施の形態２にかかる割り込み発生時の処理手順の概念図である。図１４は、本実施の形態２にかかる割り込み発生時の処理手順の具体例を示すフローチャートである。
【００９９】
割り込みが発生したときに、割り込みがＴｉｃｋの割り込みである場合（Ｓ８１でＹｅｓ）、プロセッサ１０は、パーティションスケジューラ２１を実行する。つまり、プロセッサ１０は、タイマー割り込みが発生した場合、パーティションスケジューラ２１を実行する。パーティションスケジューラ２１は、図１２に示すスケジューリングパターンに従って、タイムパーティションのパーティション・スケジューリングを開始する（Ｓ８２）。
【０１００】
割り込みがＴｉｃｋの割り込みでない場合（Ｓ８１でＮｏ）、プロセッサ１０は、割り込みハンドラ３１を実行する。つまり、プロセッサ１０は、制御対象からの割り込みが発生した場合、割り込みハンドラ３１を実行する。割り込みハンドラ３１は、割り込みハンドラテーブルIST_tableに、発生した割り込みの割り込み要因に対応する割り込み処理タスク３０が登録されているか否かを判定する（Ｓ８３）。
【０１０１】
割り込みハンドラテーブルIST_tableは、割り込み要因と、割り込み処理タスク３０とを対応付けたテーブルである。具体的には、割り込みハンドラテーブルIST_tableは、割り込み要因と、その割り込み要因の割り込みに応じて実行されるべき割り込み処理タスク３０のタスクＩＤとが対応付けている。割り込みハンドラテーブルIST_tableは、例えば、実行用メモリ１１に格納されている。なお、割り込みハンドラテーブルIST_tableは、割り込み要因と、割り込み処理タスク３０とを対応付けた情報であれば、どのような情報であってもよい。例えば、図１３に例示するように、複数の割り込み要因のそれぞれに対応した領域に、複数の割り込み要因のそれぞれに対応した割り込み処理タスク３０のタスクＩＤが格納されている情報であってもよい。
【０１０２】
また、割り込みハンドラ３１は、割り込み要因レジスタの値を参照することによって、割り込み要因を特定する。割り込み要因レジスタは、発生した割り込みの割り込み要因を示す値が格納されるレジスタである。例えば、割り込み要因レジスタは、制御対象が割り込みを発生するときに、制御対象によって値が設定される。割り込み要因レジスタ（図示せず）は、マイクロコントローラ１５に備えられる。
【０１０３】
割り込み要因に対応するタスクが登録されていない場合（Ｓ８４でＮｏ）、割り込みハンドラ３１は、処理を終了する。
【０１０４】
割り込み要因に対応する割り込み処理タスク３０が登録されている場合（Ｓ８４でＹｅｓ）、割り込みハンドラ３１は、そのタスクを起床させる。具体的には、割り込みハンドラ３１は、割り込みハンドラテーブルから、発生した割り込みの割り込み要因に対応した領域に格納されているタスクＩＤを取得する。割り込みハンドラは、例えば、取得したタスクＩＤを指定したタスク間通信によって、タスクを起床する。これによって、割り込みがあった割り込み要因に対応する割り込み処理タスク３０のみが実行可能状態となり、その他の割り込み処理タスク３０は待ち状態のままとなる。割り込みハンドラ３１は、割り込みがあった割り込み要因をマスクする（Ｓ８５）。そして、割り込みハンドラ３１は、処理を終了する。
【０１０５】
このように実行可能状態とされた割り込み処理タスク３０は、ＴＰＩがアクティブとなったときにタスクスケジューラ２９によって、プロセッサ１０の実行時間が割り当てられて実行状態となる。つまり、割り込みハンドラ３１は、割り込み処理タスク３０を実行可能状態にすることによって、割り込み実行タスク３０がＴＰＩで実行されるように実行予約する。
【０１０６】
時間が経過して、ＴＰＩがアクティブとなったとき、パーティションスケジューラ２１は、タスクスケジューラ２９を動作させる。タスクスケジューラ２９は、割り込みハンドラ３１によって起床された割り込み処理タスク３０を実行する（Ｓ８６）。
【０１０７】
以上に説明したように、本実施の形態２にかかる割り込み発生時の処理では、制御対象から割り込みがあったときに、プロセッサ１０が、割り込みハンドラ３１を実行することによって、割り込み処理タスク３０の実行予約のみを行うようにしている。そして、ＴＰＩにおいて実行予約された割り込み処理タスク３０にプロセッサ１０の実行時間を割り当てて実行するようにしている。これによれば、割り込みが発生した時点でアクティブとなっているＴＰにおけるタスクの処理の遅延が発生することがなくなるため、そのＴＰにおける処理に必要なタイムリソースが保証されるようになる。したがって、その後のＴＰにおける処理の破綻を防止することができる。
【０１０８】
続いて、図１５を参照して、本発明の実施の形態２にかかるスケジューリング処理手順について説明する。図１５は、本発明の実施の形態２にかかるスケジューリング処理手順の具体例を示すフローチャートである。
【０１０９】
Ｔｉｃｋの割り込みが発生した場合（Ｓ９１）、プロセッサ１０は、パーティションスケジューラ２１を実行する（Ｓ９２）。パーティションスケジューラ２１は、現在アクティブとなっているＴＰＸのタイムリソースが残っている否かを判定する（Ｓ９３）。言い換えると、パーティションスケジューラ２１は、ＴＰＸの期間が終了していない否かを判定する。なお、図１５におけるＴＰＸは、ＴＰ１〜ＴＰ３及びＴＰＩのいずれかのＴＰを示す。ここでは、ＴＰＸが、ＴＰ１〜ＴＰ３のいずれかであるものとして説明をしていく。
【０１１０】
パーティションスケジューラ２１は、タイムリソースが残っているか否かを、ＴＰＸの期間から、ＴＰＸがアクティブになってから経過した期間を除いた期間に余りがあるか否かによって判定する。例えば、ＴＰ１〜ＴＰ３及びＴＰＩのそれぞれにおける期間が何Ｔｉｃｋあるかを示す情報を実行用メモリ１１に予め格納しておく。また、パーティションスケジューラ２１は、ＴＰＸがアクティブになってから、１Ｔｉｃｋごとに動作する度に、Ｔｉｃｋ数をカウントする。このカウントしたＴｉｃｋ数は、ＴＰＸがアクティブになってから経過した期間を示すことになる。そして、パーティションスケジューラ２１は、実行用メモリ１１に格納された情報が示すＴｉｃｋ数が、カウントしたＴｉｃｋ数よりも大きいか否かによって、タイムリソースが残っている否かを判定する。
【０１１１】
ＴＰＸのタイムリソースが残っていない場合（Ｓ９３でＮｏ)、パーティションスケジューラ２１は、ＴＰＸの次のＴＰに切り替える（Ｓ９４）。パーティションスケジューラ２１は、ＴＰＸに属するタスクスケジューラの動作を停止し、ＴＰＸの次のＴＰに属するタスクスケジューラの動作を開始させる。動作を開始したタスクスケジューラは、自身が属するＴＰ内のタスクを実行していく。また、パーティションスケジューラ２１は、次のＴｉｃｋの割り込み（Ｓ９１）を待つ。
【０１１２】
ＴＰＸのタイムリソースが残っている場合（Ｓ９３でＹｅｓ）、パーティションスケジューラ２１は、ＴＰＸの処理が終了しているか否かを判定する（Ｓ９５）。つまり、パーティションスケジューラ２１は、ＴＰＸに属するタスクの実行が終了しているか否かを判定する。タスクの実行が終了しているか否かは、例えば、ＴＰＸに属するタスクが実行可能状態又は実行状態となっていないか否かによって判定する。
【０１１３】
ＴＰＸの処理が終了していない場合（Ｓ９５でＮｏ)、パーティションスケジューラ２１は、ＴＰの切り替えは実行せずに、ＴＰＸに属するタスクスケジューラによるＴＰＸの処理を継続させる（Ｓ９６）。つまり、ＴＰＸに属するタスクスケジューラは、ＴＰＸに属する実行可能状態のタスクを実行していく。
【０１１４】
ＴＰＸの処理が終了している場合（Ｓ９５でＹｅｓ)、パーティションスケジューラ２１は、割り込みの受付処理（Ｓ８５）が済んだ割り込み処理タスク３０が存在するか否かを判定する（Ｓ９７）。つまり、パーティションスケジューラ２１は、起床されて実行可能状態となっている割り込み処理タスク３０が存在するか否かを判定する。
【０１１５】
割り込みの受付処理（Ｓ８５）が済んだ割り込み処理タスクが存在しない場合（Ｓ９７でＮｏ）、パーティションスケジューラ２１は、次のＴｉｃｋの割り込み（Ｓ９１）を待つ。
【０１１６】
割り込みの受付処理（Ｓ８５）が済んだ割り込み処理タスクが存在する場合（Ｓ９７でＹｅｓ）、パーティションスケジューラ２１は、割り込み処理を実行する（Ｓ９８）。具体的には、パーティションスケジューラ２１は、ＴＰＸからＴＰＩに切り替えて、ＴＰＸの残りの期間についてＴＰＩをアクティブにする。パーティションスケジューラ２１は、ＴＰＸに属するタスクスケジューラの動作を停止し、ＴＰＩに属するタスクスケジューラ２９の動作を開始する。タスクスケジューラ２９は、ＴＰＩに属する割り込み処理タスク３０のうち、実行可能状態となっている割り込み処理タスク３０を実行していく。なお、ＴＰＩをアクティブとする期間は、ＴＰＸの残りの期間内であれば、任意の長さとしてもよい。
【０１１７】
以上に説明したように、本実施の形態２にかかる割り込み発生時の処理では、ＴＰＩよりも前のＴＰＸの期間が終了する前に、そのＴＰＩより前のＴＰＸに属するタスクの実行が終了している場合、実行予約されている割り込み処理タスク３０のいずれかに、ＴＰＩにおけるプロセッサ１０の実行時間に代えて、そのＴＰＩより前のＴＰＸにおけるプロセッサ１０の実行時間を割り当てるようにしている。これによれば、ＴＰＩまで待つことなく、ＴＰＩよりも前のＴＰＸにおいて割り込み処理タスク３０を実行することができる。また、ＴＰＸの余りのタイムリソースを使用して割り込み処理タスク３０を実行するようにしているため、そのＴＰＸにおける処理に必要なタイムリソースも保証されることになる。したがって、割り込み処理の実行遅延を抑制しつつ、処理の破綻を防止することができる。
【０１１８】
なお、本実施の形態２において、割り込み処理タスク３０のそれぞれに、予めタスク実行の優先度を、ＴＰＩまで処理の実行を待っても問題のない割り込み処理タスク３０については、優先度を低く設定し、できるだけ早く実行する必要がある割り込み処理タスク３０については、それよりも優先度を高く設定するようにしてもよい。そして、タスクスケジューラ２９によって、より優先度の高い割り込み処理タスク３０から優先的に実行されるようにする。このようにすることで、できるだけ早く実行する必要がある割り込み処理タスク３０における割り込み処理の実行遅延をより抑制することができる。
【０１１９】
＜発明の実施の形態３＞
続いて、本実施の形態３にかかる安全制御装置２について説明する。なお、本実施の形態３にかかる安全制御装置２の構成は、本実施の形態２にかかる安全制御装置２の構成と同様であるため、説明を省略する。また、パーティションスケジューラ２１とタスク２４、２６、２８、３０と割り込みハンドラ３１との関係についても、本実施の形態２にかかる安全制御装置２の構成と同様であるため、説明を省略する。
【０１２０】
続いて、図１６を参照して、本発明の実施の形態２にかかるスケジューリング処理手順について説明する。図１６は、本発明の実施の形態２にかかるスケジューリング処理手順の具体例を示すフローチャートである。なお、ステップＳ１０１〜Ｓ１０５については、ステップＳ９１〜９５と同様であるため、説明を省略する。なお、図１６におけるＴＰＸは、ＴＰ１〜ＴＰ３及びＴＰＩのいずれかのＴＰを示す。
【０１２１】
ＴＰＸの処理が終了している場合（Ｓ１０５でＹｅｓ）、パーティションスケジューラ２１は、ＴＰＸのタイムリソースが無くなるまで待ち合わせる（Ｓ１０６）。つまり、パーティションスケジューラ２１は、ＴＰＸにおけるタイムリソースが無くなるまで、ステップＳ１０１、Ｓ１０２、Ｓ１０３、Ｓ１０５の処理を繰り返す。そして、ＴＰＸのタイムリソースが無くなった場合（Ｓ１０３でＮｏ）、パーティションスケジューラ２１は、ＴＰＸの次のＴＰに切り替える。
【０１２２】
ＴＰＸの処理が終了していない場合（Ｓ１０５でＮｏ）、パーティションスケジューラ２１は、現在のＴＰＸの処理を実行するためのタイムリソースが足りないか否かを判定する（Ｓ１０７）。例えば、タイムリソースが足りなくなる例としては、ＴＰＸがＴＰＩであるときに、多くの割り込みが発生して、多くの割り込み処理タスク３０が起床されてしまった場合が挙げられる。例えば、複数の割り込みが発生して、それぞれの割り込み要因が異なっている場合、複数の割り込み処理タスク３０が起床されることになる。この場合、ＴＰＩのタイムリソースのみで全ての割り込み処理タスク３０の実行を終了することができないことがある。
【０１２３】
ここで、パーティションスケジューラ２１は、タイムリソースが足りないか否かを、ＴＰＸにおける残りの期間が、ＴＰＸに属する未実行のタスクの実行に必要な期間に満たないか否かによって判定する。例えば、ＴＰ１〜ＴＰ３及びＴＰＩのそれぞれにおける期間が何Ｔｉｃｋあるかを示す情報を実行用メモリ１１に予め格納しておく。また、各タスクの実行に必要な期間が何Ｔｉｃｋあるかを示す情報を実行用メモリ１１に予め格納しておく。パーティションスケジューラ２１は、ＴＰＸがアクティブになってからカウントしたＴｉｃｋ数と、実行用メモリ１１に格納された情報が示すＴＰＸのＴｉｃｋ数から、ＴＰＸにおける残りの期間に相当するＴｉｃｋ数を算出する。そして、パーティションスケジューラ２１は、算出した残りのＴｉｃｋ数が、実行用メモリ１１に格納された情報が示す未実行のタスクの実行に必要なＴｉｃｋ数以上であるか否かによって、タイムリソースが足りないか否かを判定する。
【０１２４】
タイムリソースが足りる場合（Ｓ１０７でＮｏ）、パーティションスケジューラ２１は、ＴＰの切り替えは実行せずに、ＴＰＸに属するタスクスケジューラによるＴＰＸの処理を継続させる（Ｓ１０８）。つまり、ＴＰＸに属するタスクスケジューラは、ＴＰＸに属する実行可能状態のタスクを実行していく。
【０１２５】
タイムリソースが足りない場合（Ｓ１０７でＹｅｓ）、パーティションスケジューラ２１は、次のＴＰの開始時から、次のＴＰのＷＣＷＴ(Worst Case Wakeup Time)まで時間があるか否かを判定する（Ｓ１０９）。ここで、図１７を参照して、ＷＣＷＴについて説明する。ＷＣＷＴとは、図１７に示すように、ＴＰの期間に含まれるＴｉｃｋのうち、そのＴｉｃｋまでに処理を開始すれば、そのＴＰの期間内で必ず処理を終了させることができる時間である。つまり、ＷＣＷＴとは、ＴＰの期間のうち、それまでにタスクの実行を開始すれば、そのＴＰの期間内でそのＴＰに属するタスクの実行を終了することができる地点のことである。
【０１２６】
例えば、パーティションスケジューラ２１は、ＷＣＷＴまで時間があるか否かを、ＴＰＸの次のＴＰの期間から、そのＴＰに属するタスクの実行に必要な期間を除いた余剰期間があるか否かによって判定する。上述した実行用メモリ１１に予め格納された情報に基づいて、ＴＰＸの次のＴＰの期間のＴｉｃｋ数が、そのＴＰに属するタスクの実行に必要なＴｉｃｋ数の合計よりも大きいか否かによって、ＴＰＸの次のＴＰのＷＣＷＴまでの時間があるか否かを判定する。
【０１２７】
次のＴＰのＷＣＷＴまで時間がない場合（Ｓ１０９でＮｏ）、現在のＴＰＸの処理がＴＰＸの残りのタイムリソースでは終了しないことになるが、パーティションスケジューラ２１は、このまま処理を継続する（Ｓ１１０）。つまり、パーティションスケジューラ２１は、ＴＰＸの残りのタイムリソースが無くなるまで、ＴＰＸに属するタスクスケジューラの動作を継続する。また、パーティションスケジューラ２１は、必要に応じて、ＴＰ３に切り替えるようにしてもよく、マイクロコントローラ１５のリセットをリセット回路１４に指示するようにしてもよい。例えば、ＴＰＸの処理が終了しないことによって、異常が引き起こされてしまう場合、そのようにする。ＴＰＸの処理が終了しないことによって引き起こされる異常が安全制御タスク２８で対応可能な異常である場合、パーティションスケジューラ２１は、ＴＰＸからＴＰ３に切り替える。また、ＴＰＸの処理が終了しないことによって引き起こされる異常が緊急停止を要する異常である場合、パーティションスケジューラ２１は、マイクロコントローラ１５をリセットする。
【０１２８】
次のＴＰのＷＣＷＴまで時間がある場合（Ｓ１０９でＹｅｓ）、パーティションスケジューラ２１は、次のＴＰのタイムリソースを削減することによって、ＴＰＸの期間を延長する（Ｓ１１１）。なお、ここで延長される期間は、次のＴＰの期間の開始時から、次のＴＰのＷＣＷＴまでの期間の範囲内であれば、どのような長さであってもよい。
【０１２９】
以上に説明したように、本実施の形態３によれば、ＴＰＩの期間が終了するまでに、割り込み処理タスク３０の実行が終了しないときに、ＴＰＩの次のＴＰの期間から、ＴＰＩの次のＴＰに属するタスクの実行に必要な期間を除いた余剰期間がある場合、その余剰期間の範囲内でＴＰＩの期間を延長することができる。これによれば、多くの割り込みが発生して、ＴＰＩのタイムリソースで全ての割り込み処理タスク３０を実行することができない場合であっても、ＴＰＩの次のＴＰのタイムリソースを利用することによって、次のＴＰＩまで待つことなく割り込み処理タスク３０の実行を継続することができる。そのため、割り込み処理の実行遅延を抑制することができる。また、ＴＰＩの次のＴＰの余りのタイムリソースを利用しているため、割り込み処理の実行遅延によって生じる処理の破綻も防止することができる。
【０１３０】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、実施の形態１乃至３の全て又はいずれかを組み合わせて実施するようにしてもよい。
【０１３１】
本実施の形態では、ＴＰ１〜ＴＰ３のそれぞれに属するタスクが、それぞれ安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８の１つである場合について例示したが、ＴＰに属するタスクの種類及び数は、これに限られない。例えば、ＴＰ１〜ＴＰ３のそれぞれに、安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８のそれぞれが複数属するようにしてもよい。また、ＴＰ１〜ＴＰ３のそれぞれに、さらに、安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８以外の任意の処理を実行するタスクが属するようにしてもよい。
【０１３２】
本実施の形態では、ＯＳが、ＴＰ１〜ＴＰ３及びＴＰＩを有する場合について例示したが、ＴＰの種類及び数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
【０１３３】
本実施の形態３において、制御対象の制御周期に余裕がある場合、ＴＰＩのようにタイムリソースが不足する可能性がるＴＰの次に、期間譲渡用のＰＴを備えるようにしてもよい。
【符号の説明】
【０１３４】
１、２  安全制御装置
１０  プロセッサ
１１  実行用メモリ
１２  Ｉ／Ｏポート
１３  不揮発性メモリ
１４  リセット回路
１５  マイクロコントローラ
２１  パーティションスケジューラ
２２  スケジューリングテーブル
２３、２５、２７、２９  タスクスケジューラ
２４  安全監視タスク
２６  通常制御タスク
２８  安全制御タスク
３０  割り込み処理タスク
３１  割り込みハンドラ
１００  オペレーティングシステム
１０１  安全監視アプリケーション
１０２  通常制御アプリケーション
１０３  安全制御アプリケーション
１０４  割り込み処理アプリケーション
【図１】
2012104896.tif 000003
【図２】
2012104896.tif 000004
【図３】
2012104896.tif 000005
【図４】
2012104896.tif 000006
【図５Ａ】
2012104896.tif 000007
【図５Ｂ】
2012104896.tif 000008
【図６】
2012104896.tif 000009
【図７】
2012104896.tif 000010
【図８】
2012104896.tif 000011
【図９】
2012104896.tif 000012
【図１０】
2012104896.tif 000013
【図１１】
2012104896.tif 000014
【図１２】
2012104896.tif 000015
【図１３】
2012104896.tif 000016
【図１４】
2012104896.tif 000017
【図１５】
2012104896.tif 000018
【図１６】
2012104896.tif 000019
【図１７】
2012104896.tif 000020
【図１８】
2012104896.tif 000021
【国際調査報告】
2012104896.tif 000022
2012104896.tif 000023