以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
<発明の実施の形態>
本実施の形態にかかる安全制御装置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、バージョン情報111、112、113、CRC121、123、有効範囲情報131、133、パラメータ情報142、143、211、及び、バージョン情報221、223を格納する。なお、不揮発性メモリ13の少なくとも一部は安全制御装置1から取り外し可能に構成されてもよい。例えば、アプリケーション101〜103が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ13の少なくとも一部は、安全制御装置1の外部に配置されてもよい。
なお、OS100は、図8で後述する機能安全OSバイナリ204に含まれることになる。安全監視アプリケーション101、安全制御アプリケーション103、バージョン情報111、113、CRC121、123、有効範囲情報131、133、及び、パラメータ情報143は、図8で後述する安全関連バイナリ202に含まれることになる。通常制御アプリケーション102、バージョン情報112、及び、パラメータ情報142は、図8で後述する非安全関連バイナリ201に含まれることになる。パラメータ情報211及びバージョン情報221、223は、図8で後述する安全関連設定バイナリ203に含まれることになる。
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の双方からアクセスできる必要がある。よって、通常制御アプリケーション102が属するRPと安全制御アプリケーション103が属するRPによって、アクチュエータを制御するためのI/Oポートを共有するとよい。
図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は、安全関連アプリケーションである。
以上に説明したように、通常制御アプリケーション102は、非安全関連アプリケーションとなる。そのため、通常制御アプリケーション102が属するTPは、ユーザーが自由に設計・設定可能なTPとなる。また、安全監視アプリケーション101及び安全制御アプリケーション103のそれぞれは、安全関連アプリケーションとなる。そのため、安全監視アプリケーション101及び安全制御アプリケーション103のそれぞれが属するTPは、ユーザーが設計不能なTPとなる。
ここで、安全関連TPのそれぞれを、ユーザーが設計不能であっても、ユーザーが設定のみ可能なTPとするか否かは、ベンダーによって任意に予め定めるようにしてよい。本実施の形態では、例として、安全監視アプリケーション101が属するTPが、ユーザーが設定のみ可能なTPである場合について説明する。すなわち、本実施の形態では、通常制御アプリケーション102が属するTPが、ユーザーが自由に設計・設定可能なTPであり、安全監視アプリケーション101が属するTPが、ユーザーが設定のみ可能なTPであり、安全制御アプリケーション103が属するTPが、ユーザーが設計・設定不能なTPである場合について説明する。
なお、ユーザーが設定するパラメータとして、通常制御アプリケーション102及び安全制御アプリケーション103が使用するパラメータでは、例えば、制御対象の走行速度又は歩行速度の限界値等が挙げられる。また、安全監視アプリケーション101では、例えば、異常を検出するための閾値(例えば、障害物までの距離等)、及び、異常の監視時間等が挙げられる。
リセット回路14は、OS100からの信号に基づき、マイクロコントローラ15のリセットを行う。パーティションスケジューラ21からリセット回路14に定期的に送信信号を送信するようにし、リセット回路14は、パーティションスケジューラ21からの送信信号が途絶えた場合に、マイクロコントローラ15をリセットする。例えば、パーティションスケジューラ21は、後述するように、1Tickごとに動作するタイミングで送信信号を送信する。また、OS100で異常を検知した場合、又は、アプリケーション101〜103のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ21がリセット回路14にリセット信号を送信するようにして、それに応じて、リセット回路14がマイクロコントローラ15をリセットするようにしてもよい。このようにすることで、マイクロコントローラ15に不具合が発生した場合に、マイクロコントローラ15をリセットして復旧することができる。
バージョン情報111は、安全監視アプリケーション101のバージョンを示す情報である。バージョン情報111は、安全監視アプリケーション101を作成したベンダーによって予め作成される。
バージョン情報112は、通常制御アプリケーション102のバージョンを示す情報である。バージョン情報112は、通常制御アプリケーション102を作成したユーザーによって作成される。
バージョン情報113は、安全制御アプリケーション103のバージョンを示す情報である。バージョン情報113は、安全制御アプリケーション103を作成したベンダーによって予め作成される。
CRC(Cyclic Redundancy Check)121は、安全監視アプリケーション101から生成されたCRC符号である。CRC121は、安全監視アプリケーション101を作成したベンダーによって予め作成される。すなわち、CRC121は、安全監視アプリケーション101から生成するCRCの期待値となる。
CRC123は、安全制御アプリケーション103から生成されたCRC符号である。CRC123は、安全制御アプリケーション103を作成したベンダーによって予め作成される。すなわち、CRC123は、安全制御アプリケーション103から生成するCRCの期待値となる。
有効範囲情報131は、安全監視アプリケーション101で使用するパラメータの有効範囲を示す情報である。有効範囲情報131は、安全監視アプリケーション101を作成したベンダーによって予め作成される。すなわち、有効範囲情報131は、後述するパラメータ情報211が示すパラメータの有効な範囲を示す情報である。
有効範囲情報133は、安全制御アプリケーション103が使用するパラメータの有効範囲を示す情報である。有効範囲情報133は、安全制御アプリケーション103を作成したベンダーによって予め作成される。すなわち、有効範囲情報133は、後述するパラメータ情報143が示すパラメータの有効な範囲を示す情報である。
パラメータ情報142は、通常制御アプリケーション102が使用するパラメータを示す情報である。パラメータ情報142は、通常制御アプリケーション102を作成したユーザーによって、そのパラメータが設定される。
パラメータ情報143は、安全制御アプリケーション103が使用するパラメータを示す情報である。パラメータ情報211は、安全制御アプリケーション103を作成したベンダーによって、そのパラメータが予め設定される。
パラメータ情報211は、安全監視アプリケーション101が使用するパラメータを示す情報である。パラメータ情報211は、通常制御アプリケーション102を作成したユーザーによって、そのパラメータが設定される。
バージョン情報221は、安全監視アプリケーション101のバージョンを示す情報である。バージョン情報221は、通常制御アプリケーション102を作成したユーザーによって、通常制御アプリケーション102と共に動作することが期待される安全監視アプリケーション101のバージョンが設定される。
バージョン情報223は、安全制御アプリケーション103のバージョンを示す情報である。バージョン情報223は、通常制御アプリケーション102を作成したユーザーによって、通常制御アプリケーション102と共に動作することが期待される安全制御アプリケーション103のバージョンが設定される。
通常制御アプリケーション102、バージョン情報112、221、223、及び、パラメータ情報142、211が、ユーザーによって、どのように作成されるかについては、後述する。
続いて以下では、パーティションスケジューラ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の設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
スケジューリングテーブル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内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図5では、各TPはそれぞれ1つのタスクのみを含むものとして図示しているが、1以上のタスクが含まれるようにしてもよい。例えば、通常制御用のTP2内には、通常制御タスクA及び通常制御タスクBの2つのタスクが含まれていてもよい。
安全監視タスク24は、安全監視アプリケーション101の起動によって生成されるタスクである。図4の例では、安全監視タスク24は、TP1及びRP1に割り当てられている。安全監視タスク24は、非安全関連アプリケーションである通常制御タスク26の実行状況の監視と、安全関連アプリケーションである安全制御タスク28の実行状況の監視と、I/Oポート12の入出力データを監視する。安全監視タスク24は、自身が属するRP1に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全監視タスク24は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
通常制御タスク26は、通常制御アプリケーション102の起動によって生成されるタスクである。図4の例では、通常制御タスク26は、TP2及びRP2に割り当てられている。通常制御タスク26は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。通常制御タスク26は、自身が属するRP2に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、通常制御タスク26は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
安全制御タスク28は、安全制御アプリケーション103の起動によって生成されるタスクである。図4の例では、安全制御タスク28は、TP3及びRP3に割り当てられている。安全制御タスク28は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。安全制御タスク28は、自身が属するRP3に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全制御タスク28は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
なお、各タスクからパーティションスケジューラ21へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがOS100のシステムコール(サービスコール)を呼び出し、OS100を介して、パーティションスケジューラ21に結果を通知することができる。具体的には、例えば、タスク間通信を行うシステムコールを呼び出す。また、例えば、タスクの実行状況に関するフラグを実行用メモリ11に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ21がフラグの設定値に応じてタスクの実行状況を判断することもできる。
上述したように、パーティションスケジューラ21が1Tickごとに動作し、TP1〜TP3のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ21が、選択したTPに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ23、25、27が動作を開始することでタスクのスケジューリングが行われ、プロセッサ10が、タスクスケジューラ23、25、27によりスケジューリングされた順序に従って、TP内でのタスクを実行していく。これによって、アクティブなTPに割り当てられているアプリケーションが、プロセッサ10で実行される。
また、パーティションスケジューラ21は、動作保証チェックルーチン29を有している。動作保証チェックルーチン29は、安全関連アプリケーション101、103の起動によって生成される安全関連のタスク24、28が正常に動作することができるか否かをチェックする。そして、動作保証チェックルーチン29は、正常に動作をすることができないと判定した場合には、安全制御装置1の起動を抑止する。すなわち、安全関連のタスク24、28が正常に動作することができる場合のみ、安全制御装置1を起動して、各タスク24、26、28の実行を開始することで、安全制御装置1の動作を保証する。
続いて以下では、パーティションスケジューラ21によるパーティション・スケジューリングについて、図6を用いて説明する。図6は、発明の実施の形態1にかかるパーティションスケジューラ21の処理手順の具体例を示すフローチャートである。
なお、図6では、通常制御スケジューリングパターン(例えば図5A)または安全制御スケジューリングパターン(例えば図5B)に従って、スケジューリングを実行する場合を例に説明する。すなわち、TP2またはTP3に続く次のTPはTP1であり、かつ、TP2での異常がTP1で検知された場合に、TP1からの結果を受けて次に選択・決定されるTPはTP3である場合を例に説明する。
OS100は、1Tick経過するごとに(S11)、パーティションスケジューラ21を起動する(S12)。パーティションスケジューラ21は、スケジューリングパターンを参照して、TPの切り替えタイミングか否かを判定する(S13)。
TPの切り替えタイミングでないと判定した場合(S13でNo)、パーティションスケジューラ21は、同一のTPXについての動作を継続させる。このため、TPの切り替えタイミングとなるまでの間、S11〜S13、S15、S16の処理が繰り返される。ここで、変数XはTPの番号を示し、Xは1〜3のうちのいずれかの値となる。すなわち、通常制御スケジューリングパターンに従ってパーティション・スケジューリングを実施している場合は、安全制御用のTP3を除いた、TP2及びTP1のいずれかを動作させる。
一方、TPの切り替えタイミングであると判定した場合(S13でYes)、パーティションスケジューラ21は、TPの切り替えを実行する(S14)。このように、パーティションスケジューラ21は、次にアクティブにするTPを変更する(S13でYes)場合には、さらに、切り替え前のTPに属するタスクからの通知結果に応じて、切り替え前のTPが正常であったか否かを判断する。判断の結果、切り替え前のTPが異常であった場合、パーティションスケジューラ21は、次の1Tickの間にアクティブにするTPXを、安全制御スケジューリングパターンに従って、TP1及びTP3のいずれかから選択・決定する。判断の結果、正常であった場合、パーティションスケジューラ21は、次の1Tickの間にアクティブにするTPXを、通常制御スケジューリングパターンに従って、TP1及びTP2のいずれかを選択・決定する。
パーティションスケジューラ21は、現在アクティブになっているTPXのタスクスケジューラを動作させる(S15)。S15で動作を開始したTPXのタスクスケジューラは、TPX内のタスクを優先度に応じて実行する(S16)。
そして、1Tickが経過すると(S11)、パーティションスケジューラ21が、再びTPのスケジューリングを開始する(S12)。すなわち、パーティションスケジューラ21は、スケジューリングパターンに従って、次の1Tickの間にいずれのTPをアクティブにするかを選択・決定する。
図6で示した処理に関して、パーティション・スケジューリングの具体例を説明する。まず、図5Aに例示した通常制御スケジューリングパターンに従って、S15においてTP2がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、S15ではTPX=TP2として開始し、続くS16、S11〜S13にかけてもTPX=TP2のままである。そして、S13でNoが続く限り、TPX=TP2の状態が維持される。S13でYesとなり、S14でTP2からTP1へと変更された場合、続くS15〜S16、S11〜S13にかけてTP1のままである。そして、S13でNoが続く限り、TPX=TP1の状態が維持される。TP1がアクティブのときに、S16で、TP2に関する実行状況(データ入出力等)が正常であると判定されていた場合には、次のS14では、TPX=TP2となる(つまり、TP2から開始する通常制御スケジューリングパターンが継続される。)。一方で、S16で、TP2に関する実行状況(データ入出力等)が異常であると判定されていた場合には、次のS14で、TPX=TP3となる(つまり、TP3から開始する安全制御スケジューリングパターンに切り替わる。)。
また、図5Bに例示した安全制御スケジューリングパターンに従って、S15においてTP3がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、S15ではTPX=TP3として開始し、続くS16、S11〜S13にかけてもTPX=TP3のままである。そして、S13でNoが続く限り、TPX=TP3の状態が維持される。S13でYesとなり、S14でTP3からTP1へと変更された場合、続くS15〜S16、S11〜S13にかけてTP1のままである。そして、S13でNoが続く限り、TPX=TP1の状態が維持される。TP1がアクティブのときに、S16で、TP3に関する実行状況(データ入出力等)が正常であると判定されていた場合には、次のS14では、TPX=TP2とする(つまり、TP2から開始する通常制御スケジューリングパターンに切り替わる。)。一方で、S16で、TP3に関する実行状況(データ入出力等)に異常があると判定されていた場合には、次のS14で、TPX=TP3となる(つまり、TP3から開始する安全制御スケジューリングパターンが継続される。)。
なお、上述の例では、スケジューリングパターンとして、3つのTP(安全監視用のTP1、通常制御用のTP2、安全制御用のTP3)のみを組み合わせた場合を例に説明したが、TP2のような通常制御用パーティションや、TP3のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、2つの通常制御用のTP2及びTP4と、安全監視用のTP1と、2つの安全制御用のTP3及びTP5と、が存在し、これら5つのTP(TP1〜TP5)を組み合わせてスケジューリングパターンを構成してもよい。この場合、S14では、パーティションスケジューラ21が、TPXに関する実行状況(データ入出力等)の異常状態の種類を判定し、その異常種類に応じて、安全制御用のTP3またはTP5のいずれかを選択すればよい。また、S14では、通常制御用のTP2またはTP4のいずれかを選択すればよい。
上述したように、本実施の形態では、OS100は、安全監視用のTP1からの通知、または、各TPからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ21を備えている。パーティションスケジューラ21は、各TPにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。
独立に動作するパーティションスケジューラ21が、全てのTPから結果通知を受ける構成とすることで、パーティションスケジューラ21は、全てのTPに関する状況を一元的に把握することができる。このため、例えば、安全監視用のTP1からの結果通知に応じて、パーティションスケジューラ21が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ21は、各TPの状況を考慮した上で、正常状態にあるTPのみから次のパーティションを決定・選択することもできる。これによれば、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
続いて、図7を参照して、本実施の形態にかかる動作保証チェックルーチン29の処理手順について説明する。図7は、本実施の形態にかかる動作保証チェックルーチン29の処理手順の具体例を示すフローチャートである。
パーティションスケジューラ21は、安全制御装置1の起動時にOS100によって起動された場合、動作保証チェックルーチン29を実行する。図7に示す動作保証チェックルーチン29では、まず、ユーザーによる設計・設定不能なTP(本実施形態では、安全制御タスク28が属するTP3)に対してチェックを行い(S21〜23)、次に、ユーザーによる設定のみ可能なTP(本実施形態では、安全監視タスク24が属するTP1)に対してチェックを行う(S25〜27)場合について例示する。なお、ユーザーによる設定のみ可能なTPに対してチェックを行った後に、ユーザーによる設計・設定不能なTPに対してチェックを行うようにしてもよい。
動作保証チェックルーチン29は、TP3のバイナリが想定するバイナリであるか否かを判定する(S21)。すなわち、TP3に属する安全制御アプリケーション103に変更が加えられていないか判定する。具体的は、動作保証チェックルーチン29は、不揮発性メモリ13に格納された安全制御アプリケーション103からCRCを算出する。動作保証チェックルーチン29は、算出したCRCと、不揮発性メモリ13に格納されたCRC123とが一致するか否かを判定する。そして、CRCが一致する場合には、TP3のバイナリが想定するバイナリであると判定し、CRCが一致しない場合には、TP3のバイナリが想定するバイナリでないと判定する。これによれば、安全制御アプリケーション103の内容が意図せず変更されていた場合に、それを検出することができる。
ここで、プログラムが変更されていないかどうかを検証するにあたり、CRC以外の誤り検出符号を使用するようにしてもよい。誤り検出符号として、例えば、CRC、パリティ、チェックサム、又は、ハッシュ関数等を使用することができる。
TP3のバイナリが想定するバイナリであると判定した場合、S22に進み、TP3のバイナリが想定するバイナリでないと判定した場合、S24に進む。
S22では、動作保証チェックルーチン29は、TP3のソフトウェアのバージョンが想定するバージョンであるか否かを判定する(S22)。すなわち、TP3に属する安全制御アプリケーション103のバージョンが期待したバージョンであるか否かを判定する。具体的には、動作保証チェックルーチン29は、不揮発性メモリ13に格納されたバージョン情報113が示すバージョンと、不揮発性メモリ13に格納されたバージョン情報221が示すバージョンとが一致するか否かを判定する。そして、バージョンが一致する場合には、TP3のソフトウェアのバージョンが想定するバージョンであると判定し、バージョンが一致しない場合には、TP3のソフトウェアのバージョンが想定するバージョンでないと判定する。これによれば、安全制御アプリケーション103が意図しないバージョンである場合に、それを検出することができる。
TP3のソフトウェアのバージョンが想定するバージョンであると判定した場合、S23に進み、TP3のソフトウェアのバージョンが想定するバージョンでないと判定した場合、S24に進む。
S23では、TP3のパラメータが有効範囲内の値で設定されているか否かを判定する(S23)。すなわち、TP3に属する安全制御アプリケーション103に対して設定されたパラメータが有効な範囲内の値であるか否かを判定する。具体的には、動作保証チェックルーチン29は、不揮発性メモリ13に格納されたパラメータ情報143が示すパラメータが、不揮発性メモリ13に格納された有効範囲情報133が示す有効範囲内の値であるか否かを判定する。そして、パラメータが有効範囲内の値である場合、TP3のパラメータが有効範囲内の値で設定されていると判定し、パラメータが有効範囲内の値でない場合、TP3のパラメータが有効範囲内の値で設定されていないと判定する。これによれば、安全制御アプリケーション103が使用するパラメータが不正な値となっている場合に、それを検出することができる。
ここで、TP3は、ユーザーが設定不能なTPであるが、これによれば、ベンダーによって予め作成されたパラメータ情報143が、ユーザーによって実行バイナリを生成する過程で意図せず改変されてしまった場合に、それを検出することができる。
TP3のパラメータが有効範囲内の値で設定されていると判定した場合、S25に進み、TP3のパラメータが有効範囲内の値で設定されていないと判定した場合、S24に進む。
S24に進んだ場合は、ユーザーによる設計・設定不能なTP3で異常が検出されたことになる(S24)。この場合は、パーティションスケジューラ21は、安全制御装置1の起動を抑止する。具体的には、タスクスケジューラ23、25、27を動作させて、各タスク24、26、28を動作させることは行わず、OS100をシャットダウンする。
S25では、動作保証チェックルーチン29は、TP1のバイナリが想定するバイナリであるか否かを判定する(S25)。すなわち、TP1に属する安全監視アプリケーション101に変更が加えられていないか判定する。具体的は、動作保証チェックルーチン29は、不揮発性メモリ13に格納された安全監視アプリケーション101からCRCを算出する。動作保証チェックルーチン29は、算出したCRCと、不揮発性メモリ13に格納されたCRC121とが一致するか否かを判定する。そして、CRCが一致する場合には、TP1のバイナリが想定するバイナリであると判定し、CRCが一致しない場合には、TP1のバイナリが想定するバイナリでないと判定する。これによれば、安全監視アプリケーション101の内容が意図せず変更されている場合に、それを検出することができる。
TP1のバイナリが想定するバイナリであると判定した場合、S26に進み、TP3のバイナリが想定するバイナリでないと判定した場合、S28に進む。
S26では、動作保証チェックルーチン29は、TP1のソフトウェアのバージョンが想定するバージョンであるか否かを判定する(S26)。すなわち、TP1に属する安全監視アプリケーション101のバージョンが期待したバージョンであるか否かを判定する。具体的には、動作保証チェックルーチン29は、不揮発性メモリ13に格納されたバージョン情報111が示すバージョンと、不揮発性メモリ13に格納されたバージョン情報223が示すバージョンとが一致するか否かを判定する。そして、バージョンが一致する場合には、TP1のソフトウェアのバージョンが想定するバージョンであると判定し、バージョンが一致しない場合には、TP1のソフトウェアのバージョンが想定するバージョンでないと判定する。これによれば、安全監視アプリケーション101が意図しないバージョンである場合に、それを検出することができる。
TP1のソフトウェアのバージョンが想定するバージョンであると判定した場合、S27に進み、TP1のソフトウェアのバージョンが想定するバージョンでないと判定した場合、S28に進む。
S27では、TP1のパラメータが有効範囲内の値で設定されているか否かを判定する(S27)。すなわち、TP1に属する安全監視アプリケーション101に対して設定されたパラメータが有効な範囲内の値であるか否かを判定する。具体的には、動作保証チェックルーチン29は、不揮発性メモリ13に格納されたパラメータ情報211が示すパラメータが、不揮発性メモリ13に格納された有効範囲情報131が示す有効範囲内の値であるか否かを判定する。そして、パラメータが有効範囲内の値である場合、TP1のパラメータが有効範囲内の値で設定されていると判定し、パラメータが有効範囲内の値でない場合、TP1のパラメータが有効範囲内の値で設定されていないと判定する。これによれば、安全監視アプリケーション101が使用するパラメータが不正な値となっている場合に、それを検出することができる。
TP1のパラメータが有効範囲内の値で設定されていると判定した場合、S29に進み、TP1のパラメータが有効範囲内の値で設定されていないと判定した場合、S28に進む。
S28に進んだ場合、ユーザーによる設定のみ可能なTP1で異常が検出されたことになる(S28)。この場合は、S24と同様に、パーティションスケジューラ21は、安全制御装置1の起動を抑止する。
S29に進んだ場合、ユーザーが設計・設定不能なTP3と、ユーザーが設定のみ可能なTP1は、正常である。そのため、パーティションスケジューラ21は、安全制御装置1の起動を継続する。具体的には、パーティションスケジューラ21は、図6を参照して説明したように、タスクスケジューラ23、25、27を動作させて、各タスク24、26、28を動作させる。
続いて、図8を参照して、本実施の形態にかかるソフトウェア生成装置2及びソフトウェア書込装置3のソフトウェア構成について説明する。図8は、本実施の形態にかかるソフトウェア生成装置2及びソフトウェア書込装置3のソフトウェア構成例を示すブロック図である。
ソフトウェア生成装置2は、コンフィグレータ50、52、コンパイラ51、53、リンカ54、バイナリ変換ツール55を有する。ソフトウェア書込装置3は、ソフトウェア書き込みツール60を有する。
ソフトウェア生成装置2は、安全制御装置1においてプロセッサ10によって実行される実行バイナリ206を生成する装置である。実行バイナリ206には、非安全関連バイナリ201、安全関連バイナリ202、安全関連設定バイナリ203、機能安全対応OSバイナリ204が含まれる。すなわち、実行バイナリ206には、OS100、安全管理アプリケーション101、通常制御アプリケーション102、安全制御アプリケーション103、バージョン情報111、112、113、CRC121、123、有効範囲情報131、133、パラメータ情報142、143、211、及び、バージョン情報221、223が含まれる。ソフトウェア書込装置3は、ソフトウェア生成装置2が生成した実行バイナリ220を安全制御装置1に書き込む装置である。
コンフィグレータ50は、ユーザーによって入力された非安全関連TPの設定情報に基づいて、その設定情報を示すソースコード301を生成する。この設定情報として、非安全関連のTP2に属する通常制御アプリケーション102のバージョンと、通常制御アプリケーション102が使用するパラメータとが入力される。
コンパイラ51は、ソースコード300、301をコンパイルして、非安全関連バイナリ201を生成する。ここで、ソースコード300は、ユーザーによってコーディングされた通常制御アプリケーション102のソースコードである。非安全関連バイナリ201は、通常制御アプリケーション102及び非安全関連TP2の設定情報のオブジェクトコードである。よって、非安全関連バイナリ201には、通常制御アプリケーション102、ユーザーによって入力されたバージョンを示すバージョン情報112、及び、ユーザーによって入力されたパラメータを示すパラメータ情報142を含む。コンパイラ51は、ソースコード300が機能安全対応OS100のAPIライブラリを使用している場合には、機能安全対応OS APIライブラリ200を参照して、ソースコード300をコンパイルする。
コンフィグレータ52は、ユーザーによって入力された安全関連TPの設定情報に基づいて、その設定情報を示すソースコード302を生成する。この設定情報として、安全関連のTP1に属する安全監視アプリケーション101のバージョンと、安全監視アプリケーション101が使用するパラメータと、安全関連のTP3に属する安全制御アプリケーション103のバージョンとが入力される。
コンパイラ53は、ソースコード302をコンパイルして、安全関連設定バイナリ203を生成する。すなわち、安全関連設定バイナリ203は、安全関連TP1、TP3の設定情報のオブジェクトコードである。よって、安全関連設定バイナリ203には、ユーザーによって入力されたパラメータを示すパラメータ情報211と、ユーザーによって入力されたバージョンを示すバージョン情報221、223とが含まれる。
リンカ54は、非安全関連バイナリ201、安全関連バイナリ202、安全関連設定バイナリ203、及び、機能安全対応OSバイナリ204をリンクして、実行バイナリ205を生成する。ここで、安全関連バイナリ202は、安全関連TP1、TP3に属する安全監視アプリケーション101及び安全制御アプリケーション103のオブジェクトコードである。また、安全関連バイナリ202には、バージョン情報111、113、CRC121、123、有効範囲情報131、133、及び、パラメータ情報143が含められている。機能安全対応OSバイナリ204は、OS100のオブジェクトコードである。機能安全対応OS APIライブラリ200、安全関連バイナリ202、及び、機能安全対応OSバイナリ204は、ベンダーによって予め用意されたものとなる。
これによって、OS100、各アプリケーション101〜103、及び、各種情報111、112、113、121、123、131、133、142、143、211、221、223を含む実行バイナリ205が生成されることになる。
バイナリ変換ツール55は、実行バイナリ205をバイナリ変換して、実行バイナリ206を生成する。具体的には、実行バイナリ205の命令コードを、安全制御装置1のプロセッサ10で実行可能な形式の命令コードに変換する。
ソフトウェア書込装置3のソフトウェア書き込みツール60は、ソフトウェア生成装置2によって生成された実行バイナリ206を安全制御装置1の不揮発性メモリ13に書き込む。
続いて、図9を参照して、本実施の形態にかかるソフトウェア生成及び書き込み処理について説明する。図9は、本実施の形態にかかるソフトウェア生成及び書き込み処理を示すフローチャートである。
非安全関連系のコンフィグレータ50は、ユーザーによって入力された非安全関連TP2の設定情報の内容が定義された記述を含むソースコード301を生成する(S31)。非安全関連系のコンパイラ51は、ソースコード300、301をコンパイルして非安全関連バイナリ201を生成する(S32)。
一方、安全関連系のコンフィグレータ52は、ユーザーによって入力された安全関連TP1、TP3の設定情報の内容が定義された記述を含むソースコード302を生成する(S33)。安全関連系のコンパイラ53は、ソースコード302をコンパイルして安全関連設定バイナリ204を生成する(S34)。
リンカ54は、非安全関連バイナリ201、安全関連バイナリ203、安全関連設定バイナリ204、及び、機能安全対応OSバイナリ205をリンクして、実行バイナリ206を生成する(S35)。バイナリ変換ツール55は、実行バイナリ206をバイナリ変換して実行バイナリ206を生成する(S36)。ソフトウェア書き込みツール60は、実行バイナリ206を安全制御装置1に書き込む(S37)。
続いて、図10を参照して、本実施の形態にかかるソフトウェア生成装置2及びソフトウェア書込装置3のハードウェア構成例について説明する。図10は、本実施の形態にかかるソフトウェア生成装置2及びソフトウェア書込装置3のハードウェア構成例を示すブロック図である。なお、図10を参照して説明するハードウェア構成は、一例であって、上述したソフトウェア生成装置2及びソフトウェア書込装置3の動作を実行可能であれば、この構成に限定されるものではない。
図10に示すハードウェア構成は、プロセッサ70、メモリ71、I/Oポート72、入力装置73、光ディスクドライブ74、及び、不揮発性メモリ75を有する。
プロセッサ70は、プログラム(命令ストリーム)の取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、プロセッサ10と同様に、プロセッサ70は、マルチプロセッサ構成としてもよく、マルチコアプロセッサであってもよい。メモリ71は、プロセッサ70によるプログラム実行のために使用されるメモリである。具体的には、メモリ71は、SRAM、DRAM等のランダムアクセス可能な揮発性メモリとすればよい。メモリ71は、図1の実行用メモリ11と同様に、論理的な構成単位を示している。
I/Oポート72は、外部デバイスとの間のデータ送受信に使用される。I/Oポート72は、シリアルポート又はUSB(Universal Serial Bus)ポート等である。入力装置73は、ユーザーからの入力を受け付ける。入力装置73は、例えば、マウス、キーボード、及びタッチパネル等である。
光ディスクドライブ74は、光ディスク80に対するデータの書き込み、及び、光ディスク80からのデータの読み込みを行う。光ディスクは、CD−ROM(Read Only Memory)、CD−R、CD−R/W、及び、DVD−ROM(Digital Versatile Disc Read Only Memory)等である。不揮発性メモリ75は、電力の供給を受けることなく、メモリ71に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ75は、ROM、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。
ソフトウェア生成装置2が、図10に示すようなハードウェア構成である場合、次に説明するように動作することで、上述したソフトウェア生成処理を実行する。不揮発性メモリ75は、コンフィグレータ50、52、コンパイラ51、53、リンカ54、及び、バイナリ変換ツール55が格納される。プロセッサ70は、それらのプログラム50〜55をメモリ71にロードして実行する。プロセッサ70は、コンフィグレータ50を実行することによって、ユーザーから入力装置73に対して入力された設定情報に基づいて、ソースプログラム301を生成して不揮発性メモリ75に格納する。
また、不揮発性メモリ75は、機能安全対応OS APIライブラリ200、非安全関連バイナリ201、及びソースコード300も格納される。プロセッサ70は、コンパイラ51を実行することによって、不揮発性メモリ75に格納されたソースコード300、301から、非安全関連バイナリ201を生成して不揮発性メモリ75に格納する。
また、プロセッサ70は、コンフィグレータ52を実行することによって、ユーザーから入力装置73に対して入力された設定情報に基づいて、ソースコード302を生成して不揮発性メモリ75に格納する。プロセッサ70は、コンパイラ53を実行することによって、不揮発性メモリ75に格納されたソースコード302から、安全関連設定バイナリ203を生成して不揮発性メモリ75に格納する。また、不揮発性メモリ75は、安全関連バイナリ202、及び機能安全対応OSバイナリ204も格納される。
プロセッサ70は、リンカ54を実行することによって、不揮発性メモリ75に格納された非安全関連バイナリ201、安全関連バイナリ202、安全関連設定バイナリ203及び機能安全対応OSバイナリ204から、実行バイナリ205を生成して不揮発性メモリ75に格納する。プロセッサ70は、バイナリ変換ツール55を実行することによって、不揮発性メモリ75に格納された実行バイナリ205から、実行バイナリ206を生成して不揮発性メモリ75に格納する。プロセッサ70は、光ディスクドライブ74を制御して、不揮発性メモリ75に格納された実行バイナリ206を光ディスク80に記録する。
ソフトウェア書込装置3が、図10に示すようなハードウェア構成である場合、次に説明するように動作することで、上述したソフトウェア書き込み処理を実行する。不揮発性メモリ75は、ソフトウェア書き込みツール60が格納される。プロセッサ70は、ソフトウェア書き込みツール60をメモリ71にロードして実行する。光ディスクドライブ74には、実行バイナリ206が記録された光ディスク80が挿入される。プロセッサ70は、光ディスクドライブ74を制御して、光ディスク80に記録された実行バイナリ206を読み出して、不揮発性メモリ75に格納する。プロセッサ70は、ソフトウェア書き込みツール60を実行することによって、不揮発性メモリ75に格納された実行バイナリ206を安全制御装置1の不揮発性メモリ13に書き込む。これは、例えば、安全制御装置1とソフトウェア書込装置3とを、シリアルケーブル又はUSBケーブル等で接続して、I/Oポート72を介して、シリアル通信又はUSB通信等によって行われる。
ここで、上述した説明では、ソフトウェア生成装置2からソフトウェア書込装置3に光ディスク80を介して実行バイナリ206を受け渡す場合について説明したが、これに限られない。例えば、光ディスクドライブ74に代えてフロッピー(登録商標)ディスクドライブを有するようにし、フロッピー(登録商標)ディスクを介して実行バイナリ206を受け渡すようにしてもよい。また、ソフトウェア生成装置2及びソフトウェア書込装置3のそれぞれに、有線LANポート、無線LANポート、又は赤外線ポート等の通信ポートを有するようにして、有線LAN通信、無線LAN通信、又は赤外線通信等の通信によって、実行バイナリ206を受け渡すようにしてもよい。
また、上述した説明では、ソフトウェア生成装置2とソフトウェア書込装置3とが異なる装置で構成されている場合について説明したが、同一の装置で構成されていてもよい。また、コンフィグレータ50、52が、1つのコンフィグレータとして構成されていてもよく、コンパイラ51、53が、1つのコンパイラとして構成されていてもよい。
以上に説明したように、本実施の形態1にかかる安全制御装置1では、ユーザーによって作成された非安全関連アプリケーション102と、ユーザーによって作成されていない安全関連アプリケーション101、103と、安全関連アプリケーション101、103から予め生成されたCRC121、123とを含む、ユーザーによって生成された実行バイナリ206に基づいて、非安全関連アプリケーション102及び安全関連アプリケーション101、103をスケジューリングして実行するようにしている。そして、そのときに、実行バイナリ206に含まれる安全関連アプリケーション101、103からCRCを生成し、生成したCRCと、実行バイナリ206に含まれるCRC121、123とが一致しない場合には、非安全関連アプリケーション102及び安全関連アプリケーション101、103の実行を抑止するようにしている。
これよれば、ユーザーが非安全関連アプリケーション102の作成に応じて、非安全関連アプリケーション102と安全関連アプリケーション101、103とを含む実行バイナリ206を作成したときに、安全関連アプリケーション101、103の内容が意図せず改変されてしまった場合に、その内容が改変されてしまった安全関連アプリケーション101、103の実行を抑止することができる。そのため、ユーザーによる一部のプログラムの作成を許容する場合であっても、動作を保証することができる。
<発明の他の実施の形態>
本実施の形態では、TPのそれぞれに属するタスクが、それぞれ安全監視タスク24、通常制御タスク26、及び安全制御タスク28である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク24、通常制御タスク26及び安全制御タスク28に限られず、その他の制御対象の制御に関する任意の処理を実行するタスクを有するようにしてもよい。
例えば、図11に示すようなタスク30〜32を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101〜103に代えて、タスク30〜32に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
監視制御タスク30は、制御対象を制御する。具体的には、監視制御タスク30は、通常制御タスク31及び安全制御タスク32からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク31は、制御対象に通常の機能・動作を行わせるための制御計算を行う。具体的には、通常制御タスク31は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク31は、算出した指令値を監視制御タスク30に出力する。安全制御タスク32は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク32は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク32は、算出した指令値を監視制御タスク30に出力する。監視制御タスク30は、通常制御タスク31又は安全制御タスク32から出力された指令値に基づいてアクチュエータを制御する。
さらに、監視制御タスク30は、制御対象のセンサから、センサ値を取得する。監視制御タスク30は、取得したセンサ値を通常制御タスク31及び安全制御タスク32に出力する。通常制御タスク31及び安全制御タスク32のそれぞれは、監視制御タスク30から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。なお、各タスク30〜32間での指令値及びセンサ値の受け渡しは、タスク間通信で行ってもよく、実行用メモリ11に設けられた、各タスク30〜32で共有してアクセス可能な領域である共有メモリを介して行うようにしてもよい。
図11の例では、監視制御タスク30及び安全制御タスク32は、制御対象の監視や、機能安全を確保するために定められた制御計算等のように、制御対象の機能安全の確保に関する処理を実行するタスクとなる。それに対して、通常制御タスク31は、その他の制御対象の制御に関する処理を実行するタスクとなる。そのため、監視制御タスク30及び安全制御タスク32を生成したアプリケーションは、安全関連アプリケーションとなり、通常制御タスク31を生成したアプリケーションは、非安全関連アプリケーションとなる。
また、その他に、例えば、図12に示すようなタスク33〜35を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101〜103に代えて、タスク33〜35に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
監視タスク33は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク33、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク33は、取得したセンサ値をHMI(Human Machine Interface)タスク35に出力する。
HMIタスク35は、監視タスク33から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。HMIタスク35は、算出した指令値を制御タスク34に出力する。制御タスク34は、HMIタスク35から出力された指令値に基づいて、アクチュエータを制御する。なお、各タスク33〜35間での指令値及びセンサ値の受け渡しは、タスク間通信で行ってもよく、実行用メモリ11に設けられた、各タスク33〜35で共有してアクセス可能な領域である共有メモリを介して行うようにしてもよい。
図12の例では、監視タスク33、HMIタスク35及び制御タスク34によって、制御対象の監視、それに応じた制御計算、制御計算結果に基づいた制御対象の制御を行うことで、状況によっては制御対象の機能安全の確保に関する処理を実行する。そのため、監視タスク33、HMIタスク35及び制御タスク34のそれぞれを生成したアプリケーションは、安全関連アプリケーションとなる。この場合には、TP1〜TP3以外のTP(図示せず)に属する、その他の制御対象の制御に関する処理を実行するタスクを生成したアプリケーションが、非安全関連アプリケーションとなる。
ここで、図12において説明した構成によれば、搭乗者の操作に応じて制御対象が制御されるというHMIを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態及び図11によって説明した例についても同様のことが言える。具体的には、安全監視タスク24又は監視制御タスク30が取得したセンサ値に応じて、通常制御タスク26及び安全制御タスク28、もしくは、通常制御タスク31及び安全制御タスク32が同様の制御をすることで、HMIを実現することが可能である。また、本実施の形態によれば、より安全性を担保して制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。
なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。
このように、ユーザーが作成可能な非安全関連アプリケーションは、上述した通常制御アプリケーション102に限られず、ここで説明したもの以外の任意の処理を実行するアプリケーションであってもよい。例えば、制御対象がサービスロボットである場合には、視覚センサによって取得した画像に対する画像処理、サービスロボットの歩行を制御する処理、又は、サービスロボットのアームを制御する処理等を実行するアプリケーションを作成可能としてもよい。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
本実施の形態では、OSが、TP1〜TP3を有する場合について例示したが、TPの種類及び数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
本実施の形態では、タスクの数が3つである場合について例示したが、タスクの数は、これに限られない。例えば、本実施の形態では、TPがTP1〜TP3の3つである場合について例示したが、TPの数を3つ以外の数とし、それぞれのTPが1つ以上の任意の数のタスクを有するようにしてもよい。
本実施の形態では、タイム・パーティショニングを採用したマルチタスクOSについて例示したが、これに限られない。タイム・パーティショニングを採用していないマルチタスクOSに適用することもできる。すなわち、この場合には、タスクを生成するアプリケーションが、ユーザーが自由に設計・設定可能なアプリケーション(非安全関連系)と、ユーザーが設計・設定不能なアプリケーション(安全関連系)と、ユーザーが設定のみ可能なアプリケーション(安全関連系)との3種類に分類される。
本実施の形態では、ユーザーが自由に設計・設定可能なタイムパーティション(アプリケーション)と、ユーザーが設計・設定不能なタイムパーティション(アプリケーションん)と、ユーザーが設定のみ可能なタイムパーティション(アプリケーション)とを、非安全関連系か、安全関連系かに基づいて分類するようにしたが、これに限られず、その他の基準に基づいて分類をするようにしてもよい。
本実施の形態では、動作保証チェックルーチン29をパーティションスケジューラ21が含む場合について例示したが、OS100が動作保証チェックルーチン29を有するようにし、OS100が起動時に動作保証チェックルーチン29を実行するものであれば、これに限られない。