以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
<発明の実施の形態1>
本実施の形態にかかる安全制御装置1は、サービスロボットや運輸機器等に搭載されて機能安全確保のための安全制御を実行する。安全制御装置1は、安全関連アプリケーションと非安全関連アプリケーションを同一のコンピュータシステムで実行するよう構成される。図1は、本実施の形態にかかる安全制御装置1の構成例を示すブロック図である。
プロセッサ10は、プログラム(命令ストリーム)の取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、図1では、1つのプロセッサ10のみを示しているが、安全制御装置1は、複数のプロセッサ10を有するマルチプロセッサ構成であってもよい。また、プロセッサ10は、マルチコアプロセッサでもよい。プロセッサ10は、システムプログラムとしてのオペレーティングシステム(OS)100を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。本実施の形態のプロセッサ10が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
実行用メモリ11は、プロセッサ10によるプログラム実行のために使用されるメモリである。実行用メモリ11には、不揮発性メモリ13からロードされたプログラム(OS100及びアプリケーション101〜103等)、プロセッサ10の入出力データ等が記憶される。なお、プロセッサ10は、プログラムを不揮発性メモリ13から実行用メモリ11にロードすることなく、これらのプログラムを不揮発性メモリ13から直接実行してもよい。
具体的には、実行用メモリ11は、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)等のランダムアクセス可能な揮発性メモリとすればよい。図1の実行用メモリ11は、論理的な構成単位を示している。すなわち、実行用メモリ11は、例えば、複数のSRAMデバイスの組み合わせ、複数のDRAMデバイスの組み合わせ、又はSRAMデバイスとDRAMデバイスの組み合わせでもよい。
I/Oポート12は、外部デバイスとの間のデータ送受信に使用される。例えば、安全制御装置1がサービスロボットに搭載される場合であれば、外部デバイスは、各種センサ及びサービスロボットを動作させるアクチュエータ等である。この場合、各種センサは、例えば、サービスロボット周囲の障害物を計測可能な視覚センサ、サービスロボットの姿勢を検知するための姿勢センサ、及びサービスロボットのアクチュエータの状態を検知するための回転センタ等のサービスロボットの内外の状態を検出するセンサを含む。
不揮発性メモリ13は、電力の供給を受けることなく、実行用メモリ11に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ13は、ROM(Read Only Memory)、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ13は、OS100及びアプリケーション101〜103を格納する。なお、不揮発性メモリ13の少なくとも一部は安全制御装置1から取り外し可能に構成されてもよい。例えば、アプリケーション101〜103が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ13の少なくとも一部は、安全制御装置1の外部に配置されてもよい。
OS100は、プロセッサ10によって実行されることにより、プロセッサ10及び実行用メモリ11及び不揮発性メモリ13等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
さらに、機能安全の確保に関連する安全監視アプリケーション101及び安全制御アプリケーション103の通常制御アプリケーション102からの独立性を高めるため、OS100は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ10、実行用メモリ11、I/Oポート12を含む。
このうち、時間的な保護は、プロセッサ10の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ10の実行時間をパーティショニングし、各パーティション(タイムパーティションと呼ぶ)にタスク(プロセス又はスレッド)を割り当てることにより行う。OS100のスケジューリング機能(パーティションスケジューラ21)は、各タイムパーティション(以下、TPと略称する場合がある。)に割り当てられたタスクに対して、プロセッサ10の実行時間を含む資源の利用を保証する。
図2は、タイム・パーティショニングに関する概念図である。図2の例では、予め定められた1サイクル時間を3つのTP1、TP2及びTP3に分割する例を示している。例えば、1サイクル時間を100Tickとした場合、このうち前半の20TickがTP1、中間の30TickがTP2、後半の50TickがTP3と規定される。
また、図2の例では、第1アプリケーション(APL1)〜第4アプリケーション(APL4)が、TP1〜TP3のいずれかに割り当てられている。OS100のスケジューリング機能(パーティションスケジューラ21)は、時間の経過に応じて、TP1〜TP3のいずれをアクティブにするかを選択・決定する。そして、アクティブなTPに割り当てられているアプリケーションが、プロセッサ10で実行される。
一方、空間的な保護は、実行用メモリ11及びI/Oポート12を含む固定的な資源をパーティショニングし、各パーティション(リソースパーティションと呼ぶ)にタスクを割り当てることにより行う。OS100のスケジューリング機能(パーティションスケジューラ21)は、予め割り当てられたリソースパーティション(以下、RPと略称する場合がある。)を超えてタスクが他のリソースにアクセスすることを禁止する。
図3は、リソース・パーティショニングに関する概念図である。図3の例では、2つのRP(RP1及びRP2)を示している。RP1には、実行用メモリ11及び不揮発性メモリ13の一部(A領域)と、I/Oポート12の一部(ポートA)が割り当てられている。また、RP2には、実行用メモリ11及び不揮発性メモリ13の他の一部(B領域)と、I/Oポート12の他の一部(ポートB)が割り当てられている。RP1からはRP2に割り当てられたリソースへのアクセスが禁止され、RP2からはRP1に割り当てられたリソースへのアクセスが禁止される。
なお、全てのリソースがいずれかのRPに排他的に割り当てられる必要はない。つまり、複数のRPによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション102及び安全制御アプリケーション103の双方からアクセスできる必要がある。よって、通常制御アプリケーション101が属するRPと安全制御アプリケーション102が属するRPによって、アクチュエータを制御するためのI/Oポート12を共有するとよい。
図1に戻り説明を続ける。アプリケーション101〜103は、OS100及びプロセッサ10によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション101は、通常制御アプリケーション102の実行状況の監視と、安全制御アプリケーション103の実行状況の監視と、I/Oポート12への入出力データの監視と、をプロセッサ10に実行させるための命令コードを含む。さらに、安全監視アプリケーション101は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、安全監視アプリケーション101は、安全関連アプリケーションである。
また、通常制御アプリケーション102は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ10に実行させるための命令コードを含む。さらに、通常制御アプリケーション102は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、通常制御アプリケーション102は、非安全関連アプリケーションである。
また、安全制御アプリケーション103は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ10に実行させるための命令コードを含む。さらに、安全制御アプリケーション103は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、安全制御アプリケーション103は、安全関連アプリケーションである。
リセット回路14は、OS100からの信号に基づき、マイクロコントローラ15のリセットを行う。パーティションスケジューラ21からリセット回路14に定期的に送信信号を送信するようにし、リセット回路14は、パーティションスケジューラ21からの送信信号が途絶えた場合に、マイクロコントローラ15をリセットする。例えば、パーティションスケジューラ21は、後述するように、1Tickごとに動作するタイミングで送信信号を送信する。また、OS100で異常を検知した場合、又は、アプリケーション101〜103のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ21がリセット回路14にリセット信号を送信するようにして、それに応じて、リセット回路14がマイクロコントローラ15をリセットするようにしてもよい。このようにすることで、マイクロコントローラ15に不具合が発生した場合に、マイクロコントローラ15をリセットして復旧することができる。
続いて以下では、パーティションスケジューラ21と、アプリケーション101〜103の起動により生成されるタスクと、の関係について、図4を用いて説明する。図4は、OS100によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ21とタスク24、26、28との関係を示す図である。
マイクロコントローラ15は、プロセッサ10、実行用メモリ11、I/Oポート12、不揮発性メモリ13等を含む。なお、図4では、マイクロコントローラ15の外部にリセット回路14を備える構成を例示しているが、マイクロコントローラ15の内部にリセット回路14を含む構成としてもよい。
マイクロコントローラ15には、外部のクロック源からのクロック信号が供給され、プロセッサ10等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、1Tickであるとして説明する。このため、プロセッサ10によりOS100が実行されることで、パーティションスケジューラ21が1Tickごとに動作すると共に、各TPにおいて、タスクスケジューラ23、25、27およびタスク(安全監視タスク24、通常制御タスク26、安全制御タスク28)が1Tickごとに動作する。
パーティションスケジューラ21は、1Tickごとに動作し、TPの切り替え(パーティション・スケジューリング)を行う。パーティションスケジューラ21は、次の1Tickの間にTP1〜TP3のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ21は、選択したTPに関するタスクスケジューラの動作を開始させる。
パーティションスケジューラ21によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ21は、スケジューリングテーブル22を参照し、TPの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。また、パーティションスケジューラ21は、スケジューリングテーブル22を参照してパーティション・スケジューリングを行う前に、スケジューリングテーブル22と照合用テーブル29とを照合して、スケジューリングテーブル22が破壊されているか否かをチェックする。そして、パーティションスケジューラ30は、スケジューリングテーブル22の破壊が検出されなかった場合に、スケジューリングテーブル22を使用してパーティション・スケジューリングを行う。
スケジューリングテーブル22は、TPの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル22は、例えば、実行用メモリ11に予め格納されている。なお、スケジューリングテーブル22は、少なくとも2つの異なるスケジューリングパターンを保持している。1つは、安全監視タスク24による異常検知が行われていない場合(つまり通常時)に適用されるスケジューリングパターンである。もう1つは、安全監視タスク24によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
図5Aは、通常制御スケジューリングパターンの具体例を示している。図5Aでは、通常制御タスク26が属するTP2が1サイクル時間の前半(T1)に割り当てられている。また、安全監視タスク24が属するTP1が1サイクル時間の後半(T2)に割り当てられている。図5Aのスケジューリングパターンによれば、通常制御タスク26と安全監視タスク24が繰り返しスケジューリングされる。
図5Bは、安全制御スケジューリングパターンの具体例を示している。図5Bでは、安全制御タスク28が属するTP3が1サイクル時間の前半(T3)に割り当てられている。また、安全監視タスク24が属するTP1が1サイクル時間の後半(T4)に割り当てられている。図5Bのスケジューリングパターンによれば、安全制御タスク28と安全監視タスク24が繰り返しスケジューリングされる。
図4に戻り説明を続ける。タスクスケジューラ23、25、27は、それぞれが属するTP内でのタスクのスケジューリングを行う。各TP内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図4では、各TPはそれぞれ1つのタスクのみを含むものとして図示しているが、1以上のタスクが含まれるようにしてもよい。例えば、通常制御用のTP2内には、通常制御タスクA及び通常制御タスクBの2つのタスクが含まれていてもよい。
安全監視タスク24は、安全監視アプリケーション101の起動によって生成されるタスクである。図4の例では、安全監視タスク24は、TP1及びRP1に割り当てられている。安全監視タスク24は、非安全関連アプリケーションである通常制御タスク26の実行状況の監視と、安全関連アプリケーションである安全制御タスク28の実行状況の監視と、I/Oポート12の入出力データを監視する。さらに、安全監視タスク24は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
通常制御タスク26は、通常制御アプリケーション102の起動によって生成されるタスクである。図4の例では、通常制御タスク26は、TP2及びRP2に割り当てられている。通常制御タスク26は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。さらに、通常制御タスク26は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
安全制御タスク28は、安全制御アプリケーション103の起動によって生成されるタスクである。図4の例では、安全制御タスク28は、TP3及びRP3に割り当てられている。安全制御タスク28は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。さらに、安全制御タスク28は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
なお、各タスクからパーティション21へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがOS100のシステムコール(サービスコール)を呼び出し、OS100を介して、パーティションスケジューラ21に結果を通知することができる。具体的には、例えば、タスク間通信を行うシステムコールを呼び出す。また、例えば、タスクの実行状況に関するフラグを実行用メモリ11に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ21がフラグの設定値に応じてタスクの実行状況を判断することもできる。
照合用テーブル29は、スケジューリングテーブル22の破壊を検出するための照合用のスケジューリングテーブルである。照合用テーブル29は、スケジューリングテーブル22と同じ内容を示す。照合用テーブル29は、例えば、スケジューリングテーブル22に基づいて予め生成される。これによれば、スケジューリングテーブル22の内容と照合用テーブル29の内容とを比較することによって、スケジューリングテーブル22の破壊を検出することができる。照合用テーブル29は、例えば、実行用メモリ11に予め格納されている。
ここで、照合用テーブル29は、スケジューリングテーブル22の内容が補数で表されている。補数は、1の補数であっても、2の補数であってもよい。このように、スケジューリングテーブル22と照合用テーブル29とを異なる表現形式で表した情報とすることで、スケジューリングテーブル22と照合用テーブル29の両方が同じ破壊のされ方をされないようにすることができる。
具体的に説明すると、照合用テーブル29をスケジューリングテーブル22のコピーとすることで、スケジューリングテーブル22と照合用テーブル29とを同一の表現形式で表した情報とした場合、それぞれのテーブル22、29を単純比較することによって、スケジューリングテーブル22の破壊を検出することができる。しかしながら、それぞれのテーブル22、29において同じ位置の情報が同じように破壊されてしまった場合、破壊後の内容が同一となってしまう。そのため、それぞれのテーブル22、29の比較によってスケジューリングテーブル22の破壊を検出することができなくなってしまう。それに対して、スケジューリングテーブル22と照合用テーブル29とを異なる表現形式で示すことで、そのようにスケジューリングテーブル22と照合用テーブル29が同じ破壊のされ方をされないようにすることができる。なお、照合用テーブル29は、スケジューリングテーブル22を異なる表現形式で表したものであれば、補数に限られない。
ここで、照合用テーブル29は、スケジューリングテーブル22と同一の表現形式で表された情報としてもよい。しかしながら、好ましくは、上述のように異なる表現形式とすることで、両方が同じ破壊のされ方をされないようにすることができる。また、照合用テーブル29は、スケジューリングテーブル22と同一の内容を示す情報に限られず、スケジューリングテーブル22から予め生成された誤り検出符号であってもよい。誤り検出符号として、例えば、CRC(Cyclic Redundancy Check)、パリティ、チェックサム、ハッシュ関数等を使用することができる。これによっても、スケジューリングテーブル22から誤り検出符号を生成して、生成した誤り検出符号と照合用テーブル29とを比較することによって、スケジューリングテーブル22の破壊を検出することができるからである。
上述したように、パーティションスケジューラ21が1Tickごとに動作し、TP1〜TP3のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ21が、選択したTPに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ23、25、27が動作を開始することでタスクのスケジューリングが行われ、プロセッサ10が、タスクスケジューラ23、25、27によりスケジューリングされた順序に従って、TP内でのタスクを実行していく。これによって、アクティブなTPに割り当てられているアプリケーションが、プロセッサ10で実行される。
続いて以下では、パーティションスケジューラ21によるパーティション・スケジューリングについて、図6を用いて説明する。図6は、パーティションスケジューラ21の処理手順の具体例を示すフローチャートである。
パーティションスケジューラ21は、1Tick経過するごとに動作して、TPのスケジューリングを行う(S11)。パーティションスケジューラ21は、TPのスケジューリングを開始するときに、まず、スケジューリングテーブル22の内容と照合用テーブル29の内容とを比較して、スケジューリングテーブル22が正常か否かを判定する(S12)。スケジューリングテーブル22と照合用テーブル29とが異なる表現形式で表されている場合、パーティションスケジューラ21は、いずれかを他方の表現形式に変換してそれぞれのテーブル22、29を比較する。そして、それぞれが一致した場合に、それぞれの内容が一致すると判定する。なお、照合用テーブル29が2の補数で表されている場合、パーティションスケジューラ21は、スケジューリングテーブル22と照合用テーブル29とを加算して、その加算結果が0となった場合にそれぞれの内容が一致すると判定するようにしてもよい。また、スケジューリングテーブル22と照合用テーブル29とが同一の表現形式で表されている場合、パーティションスケジューラ21は、それぞれのテーブル22、29を単純比較する。そして、それぞれが一致した場合に、それぞれの内容が一致すると判定する。
このようにして、比較した結果、それぞれの内容が一致すると判定した場合は、スケジューリングテーブル22が破壊されておらず、正常であると判定する。逆に、それぞれの内容が一致しない場合は、スケジューリングテーブル22が破壊されており、正常でないと判定する。
一方、照合用テーブル29が誤り検出符号である場合、パーティションスケジューラ21は、上述したように、スケジューリングテーブル22から誤り検出符号を生成して、生成した誤り検出符号と照合用テーブル29とを比較すればよい。そして、それぞれが一致した場合に、スケジューリングテーブル22が破壊されておらず、正常であると判定する。逆に、それぞれが一致しない場合は、スケジューリングテーブル22が破壊されており、正常でないと判定する。
スケジューリングテーブル22が正常でない場合(S12で異常)、パーティションスケジューラ22は、異常処置を実行する(S13)。ここで、異常処置は、制御対象を安全な方向に動作させるための処置であればどのようなものであってもよい。例えば、強制的にTP3に切り替えて、タスクスケジューラ27に安全制御タスク28を実行させるようにしてもよい。そして、安全制御タスク28によって、制御対象を停止させるように制御してもよい。
スケジューリングテーブル22が正常である場合(S12で正常)、パーティションスケジューラ21は、スケジューリングテーブル22のスケジューリングパターンに従って、次の1Tickの間にいずれのTPをアクティブにするかを選択・決定する。すなわち、パーティションスケジューラ21は、スケジューリングパターンを参照して、TPの切り替えタイミングとなったか否かを判定する(S14)。
パーティションスケジューラ21は、TPの切り替えタイミングとなっている(S14でYes)場合には、スケジューリングテーブル22のスケジューリングパターンに従って、TPを切り替える(S15)。そして、S16に進み、切り替え後のTPXについての動作を実行する。
ここで、変数XはTPの番号を示し、Xは1〜3のいずれかの値とする。すなわち、S16では、TP1〜3のいずれかを動作させる。なお、図6では、通常制御スケジューリングパターン(例えば図5A)または安全制御スケジューリングパターン(例えば図5B)に従って、スケジューリングを実行するものとする。すなわち、TP2またはTP3に続く次のTPXはTP1であり、かつ、TP2での異常がTP1で検知された場合に、TP1からの結果を受けて次に選択・決定されるTPXはTP3となる。
パーティションスケジューラ21は、TPの切り替えタイミングとなっていない(S14でNo)場合には、S16に進み、現在アクティブとなっているTPXと同一のTPXについての動作を継続させる。
パーティションスケジューラ21は、TPXのタスクスケジューラを動作させる(S16)。S16で動作を開始したTPXのタスクスケジューラは、TPX内のタスクを優先度に応じて実行する(S17)。そして、1Tickが経過すると、パーティションスケジューラ21が、TPのスケジューリングを開始する(S11)。
図6で示した処理に関して、パーティション・スケジューリングの具体例を説明する。
まず、図5Aに例示した通常制御スケジューリングパターンに従って、S16においてTP2がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、S16ではTPX=TP2として開始し、続くS17、S11〜S14にかけてもTPX=TP2のままである。そして、S14でNoが続く限り、TPX=TP2の状態が維持される。S14でYesとなり、S15でTP2からTP1へと変更された場合、続くS16、S11〜S14にかけてTP1のままである。そして、S14でNoが続く限り、TPX=TP1の状態が維持される。TP1がアクティブのときに、S17でTP2に関する実行状況(データ入出力)が正常であると判定されていた場合には、次のS15では、TPX=TP2となる(つまり、TP2から開始する通常制御スケジューリングパターンが継続される。)。一方で、S17でTP2に関する実行状況(データ入出力)が異常であると判定されていた場合には、次のS15で、TPX=TP3となる(つまり、S15でTP3から開始する安全制御スケジューリングパターンに切り替わる。)。
また、図5Bに例示した安全制御スケジューリングパターンに従って、S16においてTP3がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、S16ではTPX=TP3として開始し、続くS17、S11〜S14にかけてもTPX=TP3のままである。そして、S14でNoが続く限り、TPX=TP3の状態が維持される。S14でYesとなり、S15でTP3からTP1へと変更された場合、S16、S11〜S14にかけてTP1のままである。そして、S14でNoが続く限り、TPX=TP1の状態が維持される。TP1がアクティブのときに、S17でTP3に関する実行状況(データ入出力)が正常であると判定されていた場合には、次のS15では、TPX=TP2となる(つまり、S15でTP2から開始する通常制御スケジューリングパターンに切り替わる。)。一方で、S17でTP3に関する実行状況(データ入出力)に異常があると判定されていた場合には、次のS15で、TPX=TP3となる(つまり、TP3から開始する安全制御スケジューリングパターンが継続される。)。
なお、上述の例では、スケジューリングパターンとして、3つのTP(安全監視用のTP1、通常制御用のTP2、安全制御用のTP3)のみを組み合わせた場合を例に説明したが、TP2のような通常制御用パーティションや、TP3のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、2つの通常制御用のTP2及びTP4と、安全監視用のTP1と、2つの安全制御用のTP3及びTP5と、が存在し、これら5つのTP(TP1〜TP5)を組み合わせてスケジューリングパターンを構成してもよい。この場合、S15では、パーティションスケジューラ21が、TPXに関する実行状況(データ入出力)の異常状態の種類を判定し、その異常種類に応じて、安全制御用のTP3またはTP5のいずれかを選択するようにしてもよい。また、S15では、通常制御用のTP2またはTP4のいずれかを選択するようにしてもよい。
このように、OS100は、安全監視用のTP1からの通知、または、各TPからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ21を備えている。パーティションスケジューラ21は、各TPにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。
さらに、図6で例示した処理では、パーティションスケジューラ21が、TP1からの結果通知に応じて、安全制御用のTP3を選択・決定する、または、通常制御用のTP2を選択・決定するものとして説明したが、本発明はこれに限定されない。例えば、安全監視用のTP1のみからパーティションスケジューラ21に対して結果を通知する構成に代えて、TP1〜TP3のそれぞれからパーティションスケジューラ21に対して実行状況を通知する構成とし、パーティションスケジューラ21が、各TPからの結果通知に応じて、安全制御用のTP3を選択・決定するものとしてもよい。
独立に動作するパーティションスケジューラ21が、全てのTPから結果通知を受ける構成とすることで、パーティションスケジューラ21は、全てのTPに関する状況を一元的に把握することができる。このため、例えば、安全監視用のTP1からの結果通知に応じて、パーティションスケジューラ21が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ21は、各TPの状況を考慮した上で、正常状態にあるTPのみから次のパーティションを決定・選択することができる。従って、特許文献1に開示の技術と比較して、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
さらに、以上に説明したように、本実施の形態1では、パーティションスケジューラ21が、スケジューリングテーブル22を参照してTPのスケジューリングを行うときに、照合用テーブル29に基づいてスケジューリングテーブル22が正常であるか否かを判定するようにしている。そして、スケジューリングテーブル22が正常であると判定した場合に、スケジューリングテーブル22に基づいてTPをスケジューリングするようにしている。これによれば、スケジューリングテーブル22が破壊されてしまっていた場合に、そのスケジューリングテーブル22を使用してTPをスケジューリングしてしまうことを防止することができる。よって、タスクが期待した順序で実行されなくなってしまうことを防止することができる。つまり、本実施の形態1によれば、上述した第1の問題となるケースが発生することを防止することができる。そのため、正常に実行されないタスクの実行を回避して、より安定した制御対象の制御を行うことが可能となる。
ここで、本実施の形態1では、次にアクティブにするTPを選択・決定する前に、スケジューリングテーブル22が正常であるか否かを判定するようにしているが、スケジューリングテーブル22の判定タイミングは、TPを切り替えるときであれば、このタイミングに限られない。例えば、次にアクティブにするTPを選択・決定した後、次にアクティブにすると選択・決定したTP内のタスクスケジューラを動作させるまでに、スケジューリングテーブル22が正常であるか否かを判定するようにしてもよい。
本発明の実施の形態2.
続いて、本発明の実施の形態2にかかる安全制御装置について説明する。本実施の形態2にかかる安全制御装置の構成は、図1を参照して説明した実施の形態1にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ30と、アプリケーション101〜103の起動により生成されるタスクと、の関係について、図7を用いて説明する。図7は、OS200によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ30とタスク24、26、28との関係を示す図である。
図7に示すように、本実施の形態2にかかるOS200は、実施の形態1にかかるOS100と比較して、パーティションスケジューラ21に代えてパーティションスケジューラ30を有する点が異なる。パーティションスケジューラ30は、実施の形態1にかかるパーティションスケジューラ21と同様に1Tickごとに動作し、TPの切り替えを行う。
さらに、パーティションスケジューラ30は、TPの情報31を管理する。TPの情報31は、例えば、タイムパーティションに属するタスク、及びタイムパーティションに属するタスクの状態等を示す情報が含まれる。よって、TPの情報31は、TP1〜3のそれぞれに対応するように複数生成される。例えば、TP1の情報31であれば、安全監視タスク24が属すること、及び、安全監視タスク24の状態がどのような状態か等を示す。タスクの状態とは、例えば、タスクが、実行状態、実行可能状態、及び待ち状態等のいずれであるかを示す。TPの情報31は、例えば、OS100によって、TP及びそれに属するタスクの生成時に生成される。このように、TPの情報31のそれぞれは、TPごとに固有の情報となる。TPの情報31のそれぞれは、パーティションコントロールブロック(PCB:Partition Control Block)と呼ばれる領域に格納される。つまり、TPの情報31ごとに、PCBが設けられる。
パーティションスケジューラ30によるTPの情報31の管理ついて具体的に述べる。パーティションスケジューラ30は、TPを切り替えるときに、複数のPCBの中から切り替え先のTPの情報31を選択して、カレントのTPの情報31としてロードする。そして、切り替え先のTPにおいて、カレントのTPの情報31を使用して、切り替え先のTPにおけるタスクが実行される。このとき、TPにおけるタスクの実行状況に応じてカレントのTPの情報31が更新される。また、パーティションスケジューラ30は、TPを切り替えるときに、現在ロードしている切り替え前のTPの情報31を、そのTPに対応するPCBに退避する。つまり、TPの情報31は、TPのコンテキストとして機能する。
また、パーティションスケジューラ30は、TPを切り替えるときに、切り替え前のTPの情報31から、そのTPの情報31と同一の内容を示す照合用保護データ32を生成する。つまり、TPの照合量保護データ32も、TP1〜3のそれぞれに対応するように複数生成される。さらに、パーティションスケジューラ30は、切り替え先のTPの情報31と、そのTPの情報31に対応する照合用保護データ32とを照合して、切り替え先のTPの情報31が破壊されているか否かをチェックする。そして、パーティションスケジューラ30は、TPの情報31の破壊が検出されなかった場合に、切り替え先のTPの情報31をロードして、TPを切り替える。これによって、切り替え先のTPの情報31の破壊が検出されなかった場合のみに、切り替え先のTPの情報31を使用して、切り替え先のTPにおけるタスクが実行されるようにしている。
なお、TPの情報31及びTPの照合用保護データ32のそれぞれは、例えば、実行用メモリ11に格納される。この場合、実行用メモリ11に、PCBと、カレントのTPの情報31が格納される領域と、が設けられる。
ここで、TPの照合用保護データ32は、実施の形態1にかかる照合用テーブル29と同様に、TPの情報31を補数で示した情報としてもよい。つまり、TPの情報31と、TPの照合用保護データ32とを異なる表現形式で表すようにして、TPの情報31と、TPの照合用保護データ32の両方が同じ破壊のされ方をされないようにしてもよい。また、TPの照合用保護データ32は、実施の形態1にかかる照合用テーブル29と同様に、TPの情報31と同一の表現形式で表された情報としてもよい。また、TPの照合用保護データ32は、実施の形態1にかかる照合用テーブル29と同様に、TPの情報31から生成した誤り検出符号としてもよい。
続いて、図8を参照して、パーティションスケジューラ30によるパーティション・スケジューリングについて説明する。図8は、パーティションスケジューラ30の処理手順の具体例を示すフローチャートである。なお、図6を参照して説明した、実施の形態1にかかるパーティションスケジューラ21の処理手順と同様の処理手順については、同一の符号を付し、説明を省略する。本実施の形態2にかかる処理手順では、実施の形態1にかかる処理手順と比較して、ステップS11とS14の間でステップS12を実行せず、ステップS14とS15の間にステップS18を実行するようにし、ステップS15とS16の間にステップS19を実行するようにしている点が異なる。
パーティションスケジューラ30は、TPの切り替えタイミングとなっている(S14でYes)場合には、切り替え先のTPが前回にアクティブだったときに保存していた切り替え先のTPの情報31の内容と、そのTPの照合用保護データ32の内容とを比較して、切り替え先のTPの情報31が正常か否かを判定する(S18)。
TPの情報31とTPの照合用保護データ32とが異なる表現形式で表されている場合、パーティションスケジューラ30は、実施の形態1と同様に、いずれかを他方の表現形式に変換してそれぞれのデータ31、32を比較することで判定を行うようにすればよい。また、TPの照合用保護データ32が2の補数で表されている場合、パーティションスケジューラ30は、実施の形態1と同様に、TPの情報31とTPの照合用保護データ32とを加算することで判定を行うようにしてもよい。また、TPの情報31とTPの照合用保護データ32とが同一の表現形式で表されている場合、パーティションスケジューラ30は、実施の形態1と同様に、それぞれのデータ31、32を単純比較することで判定を行うようにしてもよい。
このようにして、比較した結果、それぞれの内容が一致すると判定した場合は、TPの情報31は破壊されておらず、正常であると判定する。逆に、それぞれの内容が一致しない場合は、TPの情報31は破壊されており、正常でないと判定する。
一方、TPの照合用保護データ32が誤り検出符号である場合、パーティションスケジューラ30は、本実施の形態1と同様に、TPの情報31から誤り検出符号を生成して、生成した誤り検出符号と照合用保護データ32とを比較することで判定を行うようにしてもよい。そして、それぞれが一致した場合に、TPの情報31が破壊されておらず、正常であると判定する。逆に、それぞれが一致しない場合は、TPの情報31が破壊されており、正常でないと判定する。
切り替え先のTPの情報31が正常でない場合(S19で異常)、パーティションスケジューラ30は、異常処置を実行する(S13)。ここで、TP3の情報31が正常でないと判定した場合には、異常処置として強制的にTP3に切り替えても、安全制御タスク28が正常に実行できない可能性がある。その場合は、異常処理として、パーティションスケジューラ30が、制御対象を停止させるように制御するようにしてもよい。
切り替え先のTPの情報31が正常である場合(S19で正常)、パーティションスケジューラ30は、TPを切り替える(S15)。このときに、パーティションスケジューラ30は、現在実行していた切り替え前のTPの情報31をPCBに格納する形式としたTPの情報31と、その切り替え前のTPの情報31と同一の内容を示すTPの照合用保護データ32を生成して実行用メモリ11に保存する(S19)。つまり、カレントのTPの情報31としてロードされていた切り替え前のTPの情報31は、PCBに退避される。そして、パーティションスケジューラ30は、切り替え先のTPの情報31を、カレントのTPの情報31としてPCBからロードする。これによって、正常と判定された切り替え先のTPの情報31に基づいて、切り替え先のTPXに属するタスクスケジューラがタスクを実行する(S16、S17)。
以上に説明したように、本実施の形態2では、パーティションスケジューラ30が、TPを切り替えるときに、切り替え先のTPの照合用保護データ32に基づいて、切り替え先のTPの情報31が正常であるか否かを判定するようにしている。そして、切り替え先のTPの情報31が正常であると判定した場合に、TPの切り替えを行い、切り替え先のTPの情報31に基づいて、切り替え先のTPに属するタスクを実行するようにしている。これによれば、TPの情報31が破壊されてしまっていた場合に、そのTPの情報31を使用してタスクを実行してしまうことを防止することができる。つまり、本実施の形態2によれば、上述した第2の問題となるケースが発生することを防止することができる。そのため、正常に実行されないタスクの実行を回避して、より安定した制御対象の制御を行うことが可能となる。
本発明の実施の形態3.
続いて、本発明の実施の形態3にかかる安全制御装置について説明する。本実施の形態3にかかる安全制御装置の構成は、図1を参照して説明した実施の形態1にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ33と、アプリケーション101〜103の起動により生成されるタスク34、35、36と、の関係について、図9を用いて説明する。図9は、OS300によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ33とタスク34、35、36との関係を示す図である。
図9に示すように、本実施の形態3にかかるOS300は、実施の形態1にかかるOS100と比較して、パーティションスケジューラ21に代えてパーティションスケジューラ33を有する点、及び、タスクスケジューラ23、25、27に代えてタスクスケジューラ34、35、36を有する点が異なる。パーティションスケジューラ33は、実施の形態1にかかるパーティションスケジューラ21と同様に1Tickごとに動作し、TPの切り替えを行う。
タスクスケジューラ34、35、36は、実施の形態1にかかるタスクスケジューラ23、25、27と同様に、それぞれが属するTP内でのタスクのスケジューリングを行う。さらに、タスクスケジューラ34、35、36のそれぞれは、タスクの情報37を管理する。タスクの情報37は、例えば、タスクのスタック、プログラムカウンタ等のタスクの実行状況に応じたプロセッサのレジスタ値、タスク間通信のミューテックス又はセマフォ、及びタスク間通信のメッセージキュー等を示す。よって、タスクの情報37は、タスク24、26、28のそれぞれに対応するように複数生成される。タスクの情報37は、例えば、OS100によって、タスクの生成時に生成される。このように、タスクの情報37のそれぞれは、タスク24、26、28ごとに固有の情報となる。タスクの情報37のそれぞれは、タスクコントロールブロック(TCB:Task Control Block)と呼ばれる領域に格納される。つまり、タスクの情報37ごとに、TCBが設けられる。
タスクスケジューラ34、35、36のそれぞれによるタスクの情報37の管理について具体的に述べる。タスクスケジューラ34、35、36のそれぞれは、タスクを切り替えるときに、複数のTCBの中から切り替え先のタスクの情報37を選択して、カレントのタスクの情報37としてロードする。そして、切り替え先のタスクは、カレントのタスクの情報37を使用して処理を実行する。このとき、タスクの実行状況に応じてカレントのタスクの情報37が更新される。また、タスクスケジューラ34、35、36のそれぞれは、タスクを切り替えるときに、現在ロードしている切り替え前のタスクの情報37を、そのタスクに対応するTCBに退避する。つまり、タスクの情報37は、タスクのコンテキストとして機能する。
また、タスクスケジューラ34、35、36のそれぞれは、タスクを切り替えるときに、切り替え前のタスクの情報37から、そのタスクの情報37と同一の内容を示す照合用保護データ38を生成する。つまり、タスクの照合用保護データ38も、タスク24、26、28のそれぞれに対応するように複数生成される。さらに、タスクスケジューラ34、35、36のそれぞれは、切り替え先のタスクの情報37と、そのタスクの情報37に対応する照合用保護データ38とを照合して、タスクの情報37が破壊されているか否かをチェックする。そして、タスクスケジューラ34、35、36のそれぞれは、タスクの情報37の破壊が検出されなかった場合に、切り替え先のタスクの情報37をロードして、タスクを切り替える。これによって、タスクの情報37の破壊が検出されなかった場合のみに、そのタスクの情報37を使用してタスクが実行されるようにしている。
なお、タスクの情報37及びタスクの照合用保護データ38のそれぞれは、例えば、実行用メモリ11に格納される。この場合、実行用メモリ11に、TCBと、カレントのタスクの情報38が格納される領域と、が設けられる。
ここで、タスクの照合用保護データ38は、実施の形態1にかかる照合用テーブル29と同様に、タスクの情報37を補数で示した情報としてもよい。つまり、タスクの情報37と、タスクの照合用保護データ38とを異なる表現形式で表すようにして、タスクの情報37と、タスクの照合用保護データ38の両方が同じ破壊のされ方をされないようにしてもよい。また、タスクの照合用保護データ38は、タスクの情報37をコピーして生成することによって、タスクの情報37と同一の表現形式で表された情報としてもよい。また、タスクの照合用保護データ38は、タスクの情報37から生成した誤り検出符号としてもよい。
続いて、図10を参照して、パーティションスケジューラ33によるパーティション・スケジューリングについて説明する。図10は、パーティションスケジューラ33の処理手順の具体例を示すフローチャートである。なお、図6を参照して説明した、実施の形態1にかかるパーティションスケジューラ21の処理手順及び実施の形態2にかかるパーティションスケジューラ30の処理手順と同様の処理手順については、同一の符号を付し、説明を省略する。本実施の形態3にかかる処理手順では、実施の形態1にかかる処理手順と比較して、ステップS11とS14の間でステップS12を実行せず、ステップS16とステップS17の間にステップS20及びS21を実行するようにしている点が異なる。
ステップS16で動作を開始したタスクスケジューラは、実行するタスクを切り替える場合、前回に保存していた切り替え先のタスクの情報37の内容と、そのタスクの照合用保護データ38の内容とを比較して、切り替え先のタスクの情報37が正常か否かを判定する(S20)。タスクの情報37とタスクの照合用保護データ38とが異なる表現形式で表されている場合、タスクスケジューラは、実施の形態1と同様に、いずれかを他方の表現形式に変換してそれぞれのデータ37、38を比較することで判定を行うようにすればよい。また、タスクの照合用保護データ38が2の補数で表されている場合、タスクスケジューラは、実施の形態1と同様に、タスクの情報37とタスクの照合用保護データ38とを加算することで判定を行うようにしてもよい。また、タスクの情報37とタスクの照合用保護データ38とが同一の表現形式で表されている場合、タスクスケジューラは、実施の形態1と同様に、それぞれのデータ37、38を単純比較することで判定を行うようにしてもよい。
このようにして、比較した結果、それぞれの内容が一致すると判定した場合は、タスクの情報37は破壊されておらず、正常であると判定する。逆に、それぞれの内容が一致しない場合は、タスクの情報37は破壊されており、正常でないと判定する。
一方、タスクの照合用保護データ38が誤り検出符号である場合、タスクスケジューラは、本実施の形態1と同様に、タスクの情報37から誤り検出符号を生成して、生成した誤り検出符号と照合用保護データ38とを比較することで判定を行うようにしてもよい。そして、それぞれが一致した場合に、タスクの情報37が破壊されておらず、正常であると判定する。逆に、それぞれが一致しない場合は、タスクの情報37が破壊されており、正常でないと判定する。
切り替え先のタスクの情報37が正常でない場合(S20で異常)、タスクスケジューラは、異常処置を実行する(S13)。ここで、安全制御タスク28の情報が正常でないと判定した場合には、異常処置として強制的に安全制御タスク28を実行しようとしても、安全制御タスク28を正常に実行できない可能性がある。その場合は、異常処理として、パーティションスケジューラ30が、制御対象を停止させるように制御するようにしてもよい。
切り替え先のタスクの情報37が正常である場合(S20で正常)、タスクスケジューラは、現在実行していた切り替え前のタスクの情報37と、そのタスクの情報37と同一の内容を示すタスクの照合用保護データ38を生成して実行用メモリ11に保存する(S21)。つまり、カレントのタスクの情報37としてロードされていた切り替え前のタスクの情報37は、TCBに退避される。そして、タスクスケジューラは、切り替え先のタスクの情報37を、カレントのタスクの情報37としてTCBからロードする。これによって、切り替え先のタスクは、正常と判定された切り替え先のタスクの情報37に基づいて、切り替え先のタスクを実行する(S17)。
以上に説明したように、本実施の形態3では、タスクスケジューラ34、35、36が、タスクを切り替えるときに、切り替え先のタスクの照合用保護データ38に基づいて、切り替え先のタスクの情報37が正常であるか否かを判定するようにしている。そして、切り替え先のタスクの情報37が正常であると判定した場合に、タスクの切り替えを行い、切り替え先のタスクの情報37に基づいて、切り替え先のタスクを実行するようにしている。これによれば、タスクの情報37が破壊されてしまっていた場合に、そのタスクの情報37を使用してタスクを実行してしまうということを防止することができる。つまり、本実施の形態3によれば、上述した第3の問題となるケースが発生することを防止することができる。そのため、正常に実行されないタスクの実行を回避して、より安定した制御対象の制御を行うことが可能となる。
本発明の実施の形態4.
続いて、本発明の実施の形態4にかかる安全制御装置について説明する。本実施の形態4では、実施の形態1〜3を組み合わせた実施の形態について説明する。
本実施の形態4にかかる安全制御装置の構成は、図1を参照して説明した実施の形態1にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ36と、アプリケーション101〜103の起動により生成されるタスク34、35、36と、の関係について、図11を用いて説明する。図11は、OS300によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ36とタスク34、35、36との関係を示す図である。
図11に示すように、本実施の形態4にかかるOS400は、実施の形態1にかかるOS100と比較して、パーティションスケジューラ21に代えてパーティションスケジューラ39を有する点、及び、タスクスケジューラ23、25、27に代えてタスクスケジューラ34、35、36を有する点が異なる。
パーティションスケジューラ39は、実施の形態1にかかるパーティションスケジューラ21と同様に1Tickごとに動作し、TPの切り替えを行う。さらに、パーティションスケジューラ39は、実施の形態1と同様のスケジューリングテーブル22の破壊のチェック、及び、実施の形態2と同様のTPの情報31の破壊のチェックを行う。タスクスケジューラ34、35、36については、実施の形態3と同様であるため、説明を省略する。
続いて、図12を参照して、パーティションスケジューラ33によるパーティション・スケジューリングについて説明する。図12は、パーティションスケジューラ33の処理手順の具体例を示すフローチャートである。
本実施の形態4にかかる処理手順は、図12に示すように、実施の形態1〜3の処理手順を組み合わせた処理手順となる。つまり、本実施の形態4にかかる処理手順では、実施の形態1にかかる処理手順と比較して、ステップS14とS15の間にステップS18を実行するようにし、ステップS15とS16の間にステップS19を実行するようにし、ステップS16とS17の間にステップS20及びS21を実行するようにしている点が異なる。このように、本実施の形態4では、実施の形態1にかかるスケジューリングテーブル22の破壊のチェック、実施の形態2にかかるTPの情報31の破壊のチェック、及び、実施の形態3にかかるタスクの情報38の破壊のチェックの全てを実行する。
以上に説明したように、本実施の形態4では、スケジューリングテーブル22の破壊のチェック、TPの情報31の破壊のチェック、及び、タスクの情報38の破壊のチェックの全てを実行するようにしている。そのため、実施の形態1〜3と比較して、より正常に実行されないタスクの実行を回避して、より安定した制御対象の制御を行うことが可能となる。
なお、本実施の形態4では、実施の形態1〜3の全てを組み合わせた場合について例示したが、組み合わせのパターンはこれに限られない。実施の形態1〜3のうち、任意の2つの実施の形態を組み合わせるようにしてもよい。
本発明の実施の形態5.
続いて、本発明の実施の形態5にかかる安全制御装置について説明する。本実施の形態5にかかる安全制御装置の構成、パーティションスケジューラとタスクとの関係、及び処理手順については、実施の形態4にかかる安全制御装置と同様であるため、その説明を省略する。
本実施の形態5は、図13に示すように、実行用メモリ11が複数のメモリデバイスの組み合わせで構成されている。本実施の形態5にかかる実行用メモリ11は、2つのメモリデバイス11a、11bを含む。なお、メモリデバイス11a、11bのそれぞれは、例えば、SRAMデバイス又はDRAMデバイス等である。つまり、実行用メモリ11は、物理的に異なる2つのメモリデバイス11a、11bから構成される論理的な構成単位である。よって、メモリデバイス11a、11bのそれぞれは、物理的に離れた位置に設けられることになる。
メモリデバイス11aには、スケジューリングテーブル22、TPの情報31、及びタスクの情報37が格納される。メモリデバイス11bには、照合用テーブル29、TPの照合用保護データ32、及びタスクの照合用保護データ38が格納される。
以上に説明したように、本実施の形態5では、データ破壊のチェック対象となるデータと、データ破壊のチェックに使用する照合用のデータとが、物理的に離れた位置に配置されることになる。これによれば、放射線の影響によってチェック対象となるデータが破壊されたときに、その放射線の影響によってその照合用のデータまでもが破壊されてしまう可能性を低減することができる。そのため、データ破壊をチェック対象のデータのみに止めることができ、データ破壊の検出精度を向上することができる。
なお、本実施の形態5では、実施の形態4において扱われるデータを、物理的に異なるメモリデバイスに格納した場合について例示したが、これに限られない。実施の形態1〜3のいずれかにおいても、同様にして、チェック対象のデータと照合用のデータを、物理的に異なるメモリデバイスに格納するようにしてもよい。
また、本実施の形態5では、物理的に異なるメモリデバイスが2つの場合について例示したが、チェック対象のデータとその照合用のデータとが物理的に異なるメモリデバイスに格納されるようにするものであれば、メモリデバイスの数はこれに限られない。
発明の他の実施の形態.
本実施の形態では、TPのそれぞれに属するタスクが、それぞれ安全監視タスク24、通常制御タスク26及び安全制御タスク28である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク24、通常制御タスク26及び安全制御タスク28に限られず、他の任意の制御対象の制御に関する処理を実行するタスクを有するようにしてもよい。
例えば、図14に示すようなタスク40、41、42を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101〜103に代えて、タスク40〜42に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
監視制御タスク40は、制御対象を制御する。具体的には、監視制御タスク40は、通常制御タスク41及び安全制御タスク42からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク41は、制御対象に通常の機能・動作を行わせるための制御計算を行う。具体的には、通常制御タスク41は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク41は、算出した指令値を監視制御タスク40に出力する。安全制御タスク42は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク42は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク42は、算出した指令値を監視制御タスク40のそれぞれに出力する。監視制御タスク40は、通常制御タスク41又は安全制御タスク42から出力された指令値に基づいてアクチュエータを制御する。
さらに、監視制御タスク40は、制御対象のセンサから、センサ値を取得する。監視制御タスク40は、取得したセンサ値を通常制御タスク41及び安全制御タスク42に出力する。通常制御タスク41及び安全制御タスク42のそれぞれは、監視制御タスク40から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。
また、その他に、例えば、図15に示すようなタスク43、44、45を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101〜103に代えて、タスク43〜45に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
監視タスク43は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク43は、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク43は、取得したセンサ値をHMI(Human Machine Interface)タスク44に出力する。
HMIタスク45は、監視タスク43から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。HMIタスク44は、算出した指令値を制御タスク44に出力する。制御タスク44は、HMIタスク45から出力された指令値に基づいて、アクチュエータを制御する。
これによれば、搭乗者の操作に応じて制御対象が制御されるというHMIを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態1〜5及び図14によって説明した例についても同様のことが言える。具体的には、安全監視タスク24又は監視制御タスク40が取得したセンサ値に応じて、通常制御タスク26及び安全制御タスク28、もしくは、通常制御タスク42及び安全制御タスク41が同様の制御をすることで、HMIを実現することが可能である。また、本実施の形態によれば、より安定した制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。
なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。
また、本実施の形態では、データ破壊のチェック対象となるデータ1つに対して、照合用のデータを1つだけ設ける場合について例示したが、これに限られない。つまり、照合用のデータを複数設けるようにしてもよい。この場合、予め複数の照合用テーブル29を実行用メモリ11に格納しておく。この場合、パーティションスケジューラ30は、TPを切り替えるときに、切り替え前のTPの情報31と同一の内容を示すTPの照合用保護データ32を複数生成して実行用メモリ11に保存する。この場合、タスクスケジューラ34、35、36のそれぞれは、タスクを切り替えるときに、切り替え前のタスクの情報37と同一の内容を示すタスクの照合用保護データ32を複数生成して実行用メモリ11に保存する。
そして、多数決によって正常なデータを判定して、正常であると判定したデータを使用するようにしてもよい。例えば、スケジューリングテーブル22が1つあり、照合用テーブル29が2つある場合、パーティションスケジューラ21は、それら3つのデータを相互に比較して多数決で正常なデータを判定する。具体的には、スケジューリングテーブル22の内容と照合用テーブル29の内容と不一致となったときであっても、スケジューリングテーブル22の内容と他方の照合用テーブル29の内容とが一致した場合には、スケジューリングテーブル22を使用してTPを切り替えるようにすればよい。また、2つの照合用テーブル29の内容が一致し、それらとスケジューリングテーブル22との内容が一致しない場合には、スケジューリングテーブル22に代えて2つの照合用テーブル29のうちいずれかを使用してTPを切り替えるようにすればよい。この場合、照合用テーブル29に基づいて、破壊されたスケジューリングテーブル22を復旧するようにしてもよい。TPの情報31及びタスクの情報37の判定についても、これと同様の判定を行えばよいため、説明を省略する。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、実施の形態1乃至3の全て又はいずれかを組み合わせて実施するようにしてもよい。
本実施の形態では、OSが、TP1〜TP3を有する場合について例示したが、TPの数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
本実施の形態では、タスクが、それぞれ安全監視タスク24、通常制御タスク26及び安全制御タスク28の3つである場合について例示したが、タスクの数は、これに限られない。例えば、本実施の形態では、TPがTP1〜TP3の3つである場合について例示したが、TPの数を3つ以外の数とし、それぞれのTPが1つ以上の任意の数のタスクを有するようにしてもよい。