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