以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
<発明の実施の形態1>
本実施の形態にかかる安全制御装置1は、サービスロボットや運輸機器等に搭載されて機能安全確保のための安全制御を実行する。安全制御装置1は、安全関連アプリケーションと非安全関連アプリケーションを同一のコンピュータシステムで実行するよう構成される。図1は、本実施の形態にかかる安全制御装置1の構成例を示すブロック図である。
プロセッサ10は、プログラム(命令ストリーム)の取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、図1では、1つのプロセッサ10のみを示しているが、安全制御装置1は、複数のプロセッサ10を有するマルチプロセッサ構成であってもよい。また、プロセッサ10は、マルチコアプロセッサでもよい。プロセッサ10は、システムプログラムとしてのオペレーティングシステム(OS)100を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。本実施の形態のプロセッサ10が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
実行用メモリ11は、プロセッサ10によるプログラム実行のために使用されるメモリである。実行用メモリ11には、不揮発性メモリ13からロードされたプログラム(OS100及びアプリケーション101〜104等)、プロセッサ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〜104を格納する。なお、不揮発性メモリ13の少なくとも一部は安全制御装置1から取り外し可能に構成されてもよい。例えば、アプリケーション101〜104が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ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の双方からアクセスできる必要がある。よって、通常制御アプリケーション102が属するRPと安全制御アプリケーション103が属するRPによって、アクチュエータを制御するためのI/Oポートを共有するとよい。
図1に戻り説明を続ける。アプリケーション101〜104は、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は、安全関連アプリケーションである。
また、リプログラミングアプリケーション104は、安全制御装置1において実行されるプログラム100〜104を更新するための処理手順をプロセッサ10に実行させるための命令コードを含む。さらに、リプログラミングアプリケーション104は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。
リセット回路14は、OS100からの信号に基づき、マイクロコントローラ15のリセットを行う。パーティションスケジューラ21からリセット回路14に定期的に送信信号を送信するようにし、リセット回路14は、パーティションスケジューラ21からの送信信号が途絶えた場合に、マイクロコントローラ15をリセットする。例えば、パーティションスケジューラ21は、後述するように、1Tickごとに動作するタイミングで送信信号を送信する。また、OS100で異常を検知した場合、又は、アプリケーション101〜103のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ21がリセット回路14にリセット信号を送信するようにして、それに応じて、リセット回路14がマイクロコントローラ15をリセットするようにしてもよい。このようにすることで、マイクロコントローラ15に不具合が発生した場合に、マイクロコントローラ15をリセットして復旧することができる。
続いて、図4を参照して、本発明の実施の形態1にかかる実行用メモリ11及び不揮発性メモリ13のメモリ構成について説明する。図4は、本発明の実施の形態1にかかる実行用メモリ11及び不揮発性メモリ13のメモリ構成を示す図である。
図4に示すように、不揮発性メモリ13は、ブートプログラム領域90と、実行用プログラム領域91、及び更新用プログラム領域92を含む。ブートプログラム領域には、ブートプログラム50が格納される。実行用プログラム領域91及び更新用プログラム領域92のそれぞれは、OS100、安全監視アプリケーション101、通常制御アプリケーション102、安全制御アプリケーション103、及びリプログラミングアプリケーション104を含む実行プログラムが格納される。
ブートプログラム50は、実行用プログラム領域91に格納された実行プログラムに含まれるOS100を実行用メモリ11にロードして起動する。これによって、OS100によって、実行用プログラム領域91に格納された実行プログラムに含まれる各アプリケーション101〜104が起動される。その後に、リプログラミングアプリケーション104は、安全制御装置1で動作させるプログラム100〜104を更新する場合、新しい実行プログラムを更新用プログラム領域92に格納して、安全制御装置1を再起動する。安全制御装置1が再起動されたとき、ブートプログラム50は、更新用プログラム領域92に格納されたOS100を実行用メモリ11にロードして起動する。これによって、OS100によって、更新用プログラム領域92に格納された実行プログラムに含まれる各アプリケーション101〜104が起動される。その結果、安全制御装置1によって動作する各プログラム100〜104が、新しいプログラム100〜104に更新される。
そして、次に、リプログラミングアプリケーション104によって、安全制御装置1で動作させるプログラム100〜104を更新する場合には、実行用プログラム領域91に対して、新しい実行プログラムが格納されることになる。すなわち、実行用に利用される領域と、更新用に利用される領域とは、交互に入れ替わることになる。このようにすることで、実行プログラムの書き込みに失敗した場合等、新しい実行プログラムを正常に起動することができない場合に、更新前の実行プログラムによって、安全制御装置1を動作させることができる。
また、図4に示すように、実行用メモリ11は、安全機能の実行状態を保管する領域94(以下、「状態保持RAM」と呼ぶ)が含まれている。状態保持RAM93には、後述するように、安全機能の実行状態を示す安全機能情報31が格納される。
続いて以下では、パーティションスケジューラ21と、アプリケーション101〜104の起動により生成されるタスクと、の関係について、図5を用いて説明する。図5は、OS100によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ21とタスク24、26、28、30との関係を示す図である。
マイクロコントローラ15は、プロセッサ10、実行用メモリ11、I/Oポート12、不揮発性メモリ13等を含む。なお、図5では、マイクロコントローラ15の外部にリセット回路14を備える構成を例示しているが、マイクロコントローラ15の内部にリセット回路14を含む構成としてもよい。
マイクロコントローラ15には、外部のクロック源からのクロック信号が供給され、プロセッサ10等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、1Tickであるとして説明する。このため、プロセッサ10によりOS100が実行されることで、パーティションスケジューラ21が1Tickごとに動作すると共に、各TPにおいて、タスクスケジューラ23、25、27、29およびタスク(安全監視タスク24、通常制御タスク26、安全制御タスク28、リプログラミングタスク30)が1Tickごとに動作する。
パーティションスケジューラ21は、1Tickごとに動作し、TPの切り替え(パーティション・スケジューリング)を行う。パーティションスケジューラ21は、次の1Tickの間にTP1〜TP4のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ21は、選択したTPに関するタスクスケジューラの動作を開始させる。
パーティションスケジューラ21によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ21は、スケジューリングテーブル22を参照し、TPの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
スケジューリングテーブル22は、TPの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル22は、例えば、実行用メモリ11に予め格納されている。なお、スケジューリングテーブル22は、少なくとも2つの異なるスケジューリングパターンを保持している。1つは、安全監視タスク24による異常検知が行われていない場合(つまり通常時)に適用されるスケジューリングパターンである。もう1つは、安全監視タスク24によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
図6Aは、通常制御スケジューリングパターンの具体例を示している。図6Aでは、1サイクル時間において、時系列順に、通常制御タスク26が属するTP2の期間(T1)、安全監視タスク24が属するTP1の期間(T2)、及びリプログラミングタスク30が属するTP4の期間(T3)が割り当てられている。図6Aのスケジューリングパターンによれば、通常制御タスク26、安全監視タスク24、及びリプログラミングタスク30が繰り返しスケジューリングされる。
図6Bは、安全制御スケジューリングパターンの具体例を示している。図6Bでは、1サイクル時間において、時系列順に、安全制御タスク28が属するTP3の期間(T4)、安全監視タスク24が属するTP1の期間(T5)、及びリプログラミングタスク30が属するTP4の期間(T6)が割り当てられている。図6Bのスケジューリングパターンによれば、安全制御タスク28、安全監視タスク24、及びリプログラミングタスク30が繰り返しスケジューリングされる。
図5に戻り説明を続ける。タスクスケジューラ23、25、27、29は、それぞれが属するTP内でのタスクのスケジューリングを行う。各TP内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図5では、各TPはそれぞれ1つのタスクのみを含むものとして図示しているが、1以上のタスクが含まれるようにしてもよい。例えば、通常制御用のTP2内には、通常制御タスクA及び通常制御タスクBの2つのタスクが含まれていてもよい。
安全監視タスク24は、安全監視アプリケーション101の起動によって生成されるタスクである。図5の例では、安全監視タスク24は、TP1及びRP1に割り当てられている。安全監視タスク24は、非安全関連アプリケーションである通常制御タスク26の実行状況の監視と、安全関連アプリケーションである安全制御タスク28の実行状況の監視と、I/Oポート12の入出力データを監視する。安全監視タスク24は、自身が属するRP1に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全監視タスク24は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
通常制御タスク26は、通常制御アプリケーション102の起動によって生成されるタスクである。図5の例では、通常制御タスク26は、TP2及びRP2に割り当てられている。通常制御タスク26は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。通常制御タスク26は、自身が属するRP2に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、通常制御タスク26は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
安全制御タスク28は、安全制御アプリケーション103の起動によって生成されるタスクである。図5の例では、安全制御タスク28は、TP3及びRP3に割り当てられている。安全制御タスク28は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。安全制御タスク28は、自身が属するRP3に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全制御タスク28は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
また、安全制御タスク28は、機能安全を確保するために定められた制御(安全機能)の実行を開始した場合には、安全機能情報31を状態保持RAM93に格納する。安全制御タスク28は、機能安全を確保するために定められた制御(安全機能)の実行を終了した場合には、状態保持RAM93から安全機能情報31を削除する。また、安全制御タスク28は、実行開始時に、状態保持RAM93に安全機能情報31が格納されている場合には、安全機能を実行する。これによって、安全機能の実行中にプログラム100〜104の更新が行われた場合であっても、安全機能の実行を引き継ぐことが可能となる。
リプログラミングタスク30は、リプログラミングアプリケーション104の起動によって生成されるタスクである。図5の例では、リプログラミングタスク30は、TP4及びRP4に割り当てられている。リプログラミングタスク30は、安全制御装置1において実行されるプログラム100〜104を更新する。リプログラミングタスク30は、自身が属するRP4に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、リプログラミングタスク30は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
安全機能情報31は、安全機能を実行していることを示す情報となる。安全制御タスク28によって、安全機能が実行されている場合に安全機能情報31が状態保持RAM93に格納される。ここで、安全機能情報31は、厳密には、どの安全機能が実行されているかを示す情報となる。例えば、安全機能情報31の値によって、複数の安全機能のうち、どの安全機能が実行されているかを示すようにする。すなわち、安全制御タスク28は、複数の安全機能のうち、いずれか1つ以上を実行可能である。さらに、安全制御タスク28が実行可能な安全機能の種類及び数は、更新前後のプログラムで異なっていてもよい。安全機能の種類として、例えば、制御対象の停止、制御対象の低速化等がある。
なお、各タスクからパーティションスケジューラ21へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがOS100のシステムコール(サービスコール)を呼び出し、OS100を介して、パーティションスケジューラ21に結果を通知することができる。例えば、タスク間通信を行うシステムコールを呼び出すことによって通知をするようにしてもよい。また、例えば、タスクの実行状況に関するフラグを実行用メモリ11に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ21がフラグの設定値に応じてタスクの実行状況を判断することもできる。
上述したように、パーティションスケジューラ21が1Tickごとに動作し、TP1〜TP3のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ21が、選択したTPに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ23、25、27、29が動作を開始することでタスクのスケジューリングが行われ、プロセッサ10が、タスクスケジューラ23、25、27、29によりスケジューリングされた順序に従って、TP内でのタスクを実行していく。これによって、アクティブなTPに割り当てられているアプリケーションが、プロセッサ10で実行される。
続いて以下では、パーティションスケジューラ21によるパーティション・スケジューリングについて、図7を用いて説明する。図7は、発明の実施の形態1にかかるパーティションスケジューラ21の処理手順の具体例を示すフローチャートである。
なお、図7では、通常制御スケジューリングパターン(例えば図6A)または安全制御スケジューリングパターン(例えば図6B)に従って、スケジューリングを実行する場合を例に説明する。すなわち、TP2またはTP3に続く次のTPはTP1であり、TP1に続く次のTPはTP4であり、かつ、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〜4のうちのいずれかの値となる。すなわち、通常制御スケジューリングパターンに従ってパーティション・スケジューリングを実施している場合は、安全制御用のTP3を除いた、TP2、TP1、及びTP4のいずれかを動作させる。
一方、TPの切り替えタイミングであると判定した場合(S13でYes)、パーティションスケジューラ21は、TPの切り替えを実行する(S14)。このように、パーティションスケジューラ21は、次にアクティブにするTPを変更する(S13でYes)場合には、さらに、切り替え前のTPに属するタスクからの通知結果に応じて、切り替え前のTPが正常であったか否かを判断する。判断の結果、切り替え前のTPが異常であった場合、パーティションスケジューラ21は、次の1Tickの間にアクティブにするTPXを、安全制御スケジューリングパターンに従って、TP1、TP3、及びTP4のいずれかから選択・決定する。判断の結果、正常であった場合、パーティションスケジューラ21は、次の1Tickの間にアクティブにするTPXを、通常制御スケジューリングパターンに従って、TP1、TP2、及びTP4のいずれかを選択・決定する。
パーティションスケジューラ21は、現在アクティブになっているTPXのタスクスケジューラを動作させる(S15)。S15で動作を開始したTPXのタスクスケジューラは、TPX内のタスクを優先度に応じて実行する(S16)。
そして、1Tickが経過すると(S11)、パーティションスケジューラ21が、再びTPのスケジューリングを開始する(S12)。すなわち、パーティションスケジューラ21は、スケジューリングパターンに従って、次の1Tickの間にいずれのTPをアクティブにするかを選択・決定する。
図7で示した処理に関して、パーティション・スケジューリングの具体例を説明する。まず、図6Aに例示した通常制御スケジューリングパターンに従って、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の状態が維持される。S13でYesとなり、S14でTP1からTP4へと変更された場合、続くS15〜S16、S11〜S13にかけてTP4のままである。そして、S13でNoが続く限り、TPX=TP4の状態が維持される。TP1がアクティブのときに、S16で、TP2に関する実行状況(データ入出力等)が正常であると判定されていた場合には、次のS14では、TPX=TP2となる(つまり、TP2から開始する通常制御スケジューリングパターンが継続される。)。一方で、S16で、TP2に関する実行状況(データ入出力等)が異常であると判定されていた場合には、次のS14で、TPX=TP3となる(つまり、TP3から開始する安全制御スケジューリングパターンに切り替わる。)。
また、図6Bに例示した安全制御スケジューリングパターンに従って、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の状態が維持される。S13でYesとなり、S14でTP1からTP4へと変更された場合、続くS15〜S16、S11〜S13にかけてTP4のままである。そして、S13でNoが続く限り、TPX=TP4の状態が維持される。TP1がアクティブのときに、S16で、TP3に関する実行状況(データ入出力等)が正常であると判定されていた場合には、次のS14では、TPX=TP2とする(つまり、TP2から開始する通常制御スケジューリングパターンに切り替わる。)。一方で、S16で、TP3に関する実行状況(データ入出力等)に異常があると判定されていた場合には、次のS14で、TPX=TP3となる(つまり、TP3から開始する安全制御スケジューリングパターンが継続される。)。
なお、上述の例では、スケジューリングパターンとして、4つのTP(安全監視用のTP1、通常制御用のTP2、安全制御用のTP3、リプログラミング用のTP4)のみを組み合わせた場合を例に説明したが、TP2のような通常制御用パーティションや、TP3のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、2つの通常制御用のTP2及びTP5と、安全監視用のTP1と、2つの安全制御用のTP3及びTP6と、リプログラミング用のTP4が存在し、これら6つのTP(TP1〜TP6)を組み合わせてスケジューリングパターンを構成してもよい。この場合、S14では、パーティションスケジューラ21が、TPXに関する実行状況(データ入出力等)の異常状態の種類を判定し、その異常種類に応じて、安全制御用のTP3またはTP6のいずれかを選択すればよい。また、S14では、通常制御用のTP2またはTP5のいずれかを選択すればよい。
上述したように、本実施の形態では、OS100は、安全監視用のTP1からの通知、または、各TPからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ21を備えている。パーティションスケジューラ21は、各TPにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。
独立に動作するパーティションスケジューラ21が、全てのTPから結果通知を受ける構成とすることで、パーティションスケジューラ21は、全てのTPに関する状況を一元的に把握することができる。このため、例えば、安全監視用のTP1からの結果通知に応じて、パーティションスケジューラ21が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ21は、各TPの状況を考慮した上で、正常状態にあるTPのみから次のパーティションを決定・選択することもできる。これによれば、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
続いて、図8を参照して、本発明の実施の形態1にかかるリプログラミング処理の処理手順について説明する。図8は、本発明の実施の形態1にかかるリプログラミング処理の処理手順の具体例を示すフローチャートである。
安全制御装置1の電源が投入されたとき、プロセッサ10は、ブートプログラム50を不揮発性メモリ13から実行用メモリ11にロードして起動する。ブートプログラム50は、実行用プログラム領域91に格納されたOS100を実行用メモリ11にロードして起動する。OS100は、実行用プログラム領域91に格納される各アプリケーション101〜104を実行用メモリ11にロードして起動する。これによって、図7を参照して説明したように、TPをスケジューリングしながら、各タスク24、26、28、30が実行される(S21)。
異常が検出されていない場合には、パーティションスケジューラ21は、通常制御スケジューリングパターンに従って、TPのスケジューリングを継続する(S21、S22でNo、S24でNo)。何らかの異常が検出された場合には、パーティションスケジューラ21は、安全制御スケジューリングパターンに従って、TPのスケジューリングを開始する。そして、安全制御タスク28は、安全機能を実行している場合(S22でYes)、実行している安全機能を示す安全機能情報31を状態保持RAM93に格納する(S23)。
他方、リプログラミングタスク30は、プログラムの更新指示があった場合(S24でYes)、現在実行されている安全機能が、新たな実行プログラムでも実現可能か否かを判定する(S25)。ここで、プログラムの更新指示は、新たな実行プログラムを送信する外部装置との間で任意の通信手段による通信を可能とする通信デバイスを安全制御装置1に備えるようにして、外部装置からプロセッサ10(リプログラミングタスク30)に対して更新を指示する更新指示情報を送信することで更新指示を行うようにする。
現在実行されている安全機能が、新たな実行プログラムでも実現可能でないと判定した場合(S25でNo)、リプログラミングタスク30は、プログラムの更新を抑止する。これによって、現在実行しているプログラム100〜104の実行が継続される(S21)。他方、現在実行されている安全機能が、新たな実行プログラムでも実現可能であると判定した場合(S25でYes)、リプログラミングタスク30は、プログラムを更新する(S26)。
ここで、現在実現されている安全機能が、新たな実行プログラムでも実現可能か否かは、実装されている安全機能を識別する識別情報を実行プログラムに含めておくようにして、その識別情報に基づいて判定するようにする。具体的には、リプログラミングタスク30は、更新指示に応じて、外部装置から新たな実行プログラムを受信して、更新用プログラム領域92に格納する。そして、リプログラミングタスク30は、更新用プログラム領域92に格納した新たな実行プログラムに含まれる識別情報によって識別される安全機能に、安全機能情報31が示す安全機能が含まれていない場合、その新たな実行プログラムへの更新を抑止する。また、リプログラミングタスク30は、新たな実行プログラムに含まれる識別情報によって識別される安全機能が、実行用プログラム領域91に格納されている実行プログラムに含まれる識別情報によって識別される安全機能を全て含んでいない場合に、その新たな実行プログラムへの更新を抑止するようにしてもよい。
ここで、外部装置は、例えば、PC又はサーバー等の情報処理装置である。また、通信手段は、どのような種類の通信手段を用いてもよく、無線通信又は有線通信もしくはそれらの組み合わせであってもよい。通信手段は、公衆交換電話網、移動体通信網、無線LAN、有線LAN、及びシリアル通信等である。
リプログラミングタスク30は、プログラムを更新する場合、OS100に対して再起動を指示する。OS100は、リプログラミングタスク30からの指示に応じて、安全制御装置1を再起動する。これによって、ブートプログラム50によって、更新用プログラム領域92に格納された、新しいプログラム100〜104が起動される。
そして、パーティションスケジューラ21は、状態保持RAM93に安全機能情報31が格納されているか否かを判定する(S27)。状態保持RAM93に安全機能情報31が格納されていないと判定した場合(S27でNo)、パーティションスケジューラ21は、通常通り、TPのスケジューリングを開始する(S21)。パーティションスケジューラ21は、例えば、通常制御スケジューリングパターンに従って、TPのスケジューリングを行う。
他方、状態保持RAM93に安全機能情報31が格納されていると判定した場合(S27でYes)、パーティションスケジューラ21は、安全制御スケジューリングパターンに従って、TPのスケジューリングを開始する。そして、安全制御タスク28は、状態保持RAM93に安全機能情報31が格納されている場合、その安全機能情報31が示す安全機能を実行する(S28)。これによって、リプログラミング前に実行されていた安全機能を引き継いで実行することができる。
以上に説明したように、本実施の形態1では、安全制御タスク28を実行して、安全制御タスク28の実行において安全機能を実行している場合、安全機能情報31を状態保持RAM93に格納するようにしている。そして、実行している実行プログラムを、新たな実行プログラムに更新したときに、状態保持RAM93に安全機能情報31が格納されている場合、安全制御タスク28を実行して、安全制御タスク28の実行において安全機能を引き継いで実行するようにしている。
これによれば、実行プログラムを更新した場合であっても、安全機能を引き継いで実行することが可能となる。したがって、制御対象を制御するプログラムを更新した場合であっても、安全性を維持することが可能となる。
また、本実施の形態1では、実行プログラムに、その実行プログラムに含まれる安全制御アプリケーション103によって実行可能な安全機能を識別する識別情報を含めるようにしている。そして、新たな実行プログラムに含まれる識別情報に基づいて、新たな実行プログラムに含まれる安全制御アプリケーション103が、実行している安全機能を実行することができないと判定した場合、実行プログラムの更新を抑止するようにしている。
これによれば、更新後の実行プログラムの安全機能を事前に確認して、更新によって安全性が損なわれてしまうことを防止することができる。
<発明の実施の形態2>
続いて、本発明の実施の形態2について説明する。なお、本発明の実施の形態2は、安全制御装置1の構成、スケジューリングパターン、実行用メモリ11及び不揮発性メモリ13のメモリ構成、パーティションスケジューラ21とタスク24、26、28、30との関係、及びパーティションスケジューラ21の処理手順については、実施の形態1と同様であるため、説明を省略する。以下、説明の明確化のため、実施の形態1と同様の点については説明を省略し、異なる点について説明していく。
実施の形態1では、実行プログラム単位でプログラムを更新するようにしていたが、本実施の形態2では、TP単位でプログラムを更新する。
すなわち、リプログラミングタスク30は、あるTPのプログラムを更新する場合には、そのTPに属するタスクに対応するアプリケーションをリプログラミングする。そして、リプログラミングが終了したとき、OS100は、リプログラミングされたアプリケーションに基づいて、TPに属するタスクを再起動する。
続いて、図9を参照して、本発明の実施の形態2にかかるリプログラミング処理の処理手順について説明する。図9は、本発明の実施の形態2にかかるリプログラミング処理の処理手順の具体例を示すフローチャートである。本発明の実施の形態2にかかるリプログラミング処理は、発明の実施の形態1にかかるリプログラミング処理と比較して、さらに、S24とS25の間にS29が実行され、S27に代えてS30が実行される。その他、各処理S21〜S28においては、実施の形態1と異なる点について説明していく。
S21〜23については、図8を参照して説明した実施の形態1と同様である。本実施の形態2にかかるS24では、リプログラミングタスク30は、プログラムの更新指示をTP単位で受ける。例えば、外部装置から安全制御装置1に対して送信する更新指示情報に、更新対象となるTPを示す更新対象TP情報を含めるようにする。
プログラムの更新指示があった場合(S24でYes)、リプログラミングタスク30は、安全機能を実行するTPの更新か否かを判定する(S29)。すなわち、安全機能を実行するタスクを含むTPの更新か否かを判定する。これは、外部装置から安全制御装置1に対して送信する情報に基づいて、どのように判定するようにしてもよい。例えば、更新指示情報において、更新対象のTPを示すようにし、更新指示情報が示すTPが、安全機能を実行するTPであるか否かによって判定するようにすればよい。
安全機能を実行するTP3の更新であると判定した場合(S29でYes)、リプログラミングタスク30は、S25に進む。なお、S25では、識別情報を更新対象のアプリケーションに含めておくようにして、その識別情報に基づいて判定するようにすればよい。他方、安全機能を実行するTP3の更新でないと判定した場合(S29でNo)、リプログラミングタスク30は、S26に進む。ここで、本実施の形態2にかかるS26では、更新対象となるTPのアプリケーションのみを外部装置から受信して、更新用プログラム領域92に格納する。
リプログラミングタスク30は、アプリケーションの格納が終わると、OS100に更新対象のTPに属するタスクの再起動を指示する。OS100は、リプログラミングタスク30からの指示に応じて、更新対象のTPに属するタスクを再起動する。このとき、OS100は、更新用プログラム領域92に格納された新たなアプリケーションを実行することで、タスクを起動する。
更新されたTPが安全機能を実行するTPでない場合、又は、更新されたTPが安全機能を実行するTPであっても、状態保持RAM93に安全機能情報31が格納されていない場合(S30でNo)は、そのまま、各タスク24、26、28、30の実行が継続される(S21)。
他方、更新されたTPが安全機能を実行するTPであり、かつ、状態保持RAM93に安全機能情報31が格納されている場合には(S30でYes)、再起動された安全制御タスク28は、安全機能情報31が示す安全機能を実行する(S28)。これによって、リプログラミング前に実行されていた安全機能を引き継いで実行することができる。
以上に説明したように、本実施の形態2のように、TP単位でプログラムの更新を行うよこともできる。これによれば、TP単位での柔軟なプログラムの更新を可能にしつつ、制御対象を制御するプログラムを更新した場合に安全性を維持することができる。
<発明の他の実施の形態>
本実施の形態では、TPのそれぞれに属するタスクが、それぞれ安全監視タスク24、通常制御タスク26及び安全制御タスク28である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク24、通常制御タスク26及び安全制御タスク28に限られず、その他の制御対象の制御に関する任意の処理を実行するタスクを有するようにしてもよい。
例えば、図10に示すようなタスク32〜34を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101〜103に代えて、タスク32〜34に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
監視制御タスク32は、制御対象を制御する。具体的には、監視制御タスク32は、通常制御タスク33及び安全制御タスク34からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク33は、制御対象に通常の機能・動作を行わせるための制御計算を行う。具体的には、通常制御タスク33は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク33は、算出した指令値を監視制御タスク32に出力する。安全制御タスク34は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク34は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク34は、算出した指令値を監視制御タスク32に出力する。監視制御タスク32は、通常制御タスク33又は安全制御タスク34から出力された指令値に基づいてアクチュエータを制御する。
さらに、監視制御タスク32は、制御対象のセンサから、センサ値を取得する。監視制御タスク32は、取得したセンサ値を通常制御タスク33及び安全制御タスク34に出力する。通常制御タスク33及び安全制御タスク34のそれぞれは、監視制御タスク32から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。なお、各タスク32〜34間での指令値及びセンサ値の受け渡しは、タスク間通信で行ってもよく、実行用メモリ11に設けられた、各タスク32〜34で共有してアクセス可能な領域である共有メモリを介して行うようにしてもよい。
上述した構成の場合、安全制御タスク34が、機能安全を確保するために定められた制御を行うための制御計算を行っている場合に、安全機能が実行されていることになる。そのため、この場合に、安全制御タスク34は、安全機能情報31を状態保持RAM93に格納する。そして、上述した実施の形態と同様にして、安全機能の実行を引き継ぐようにすればよい。
また、その他に、例えば、図11に示すようなタスク35〜37を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101〜103に代えて、タスク35〜37に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
監視タスク35は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク35は、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク35は、取得したセンサ値をHMI(Human Machine Interface)タスク37に出力する。
HMIタスク37は、監視タスク35から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。HMIタスク37は、算出した指令値を制御タスク36に出力する。制御タスク36は、HMIタスク37から出力された指令値に基づいて、アクチュエータを制御する。なお、各タスク35〜37間での指令値及びセンサ値の受け渡しは、タスク間通信で行ってもよく、実行用メモリ11に設けられた、各タスク35〜37で共有してアクセス可能な領域である共有メモリを介して行うようにしてもよい。
上述した構成の場合、HMIタスク37が、機能安全を確保するために定められた制御を行うための制御計算を行っている場合に、安全機能が実行されていることになる。そのため、この場合に、HMIタスク37は、安全機能情報31を状態保持RAM93に格納する。そして、上述した実施の形態と同様にして、安全機能の実行を引き継ぐようにすればよい。
また、上述した構成によれば、搭乗者の操作に応じて制御対象が制御されるというHMIを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態1、2及び図10によって説明した例についても同様のことが言える。具体的には、安全監視タスク24又は監視制御タスク32が取得したセンサ値に応じて、通常制御タスク26及び安全制御タスク28、もしくは、通常制御タスク33及び安全制御タスク34が同様の制御をすることで、HMIを実現することが可能である。また、本実施の形態によれば、安全性を維持して制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。
なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
本実施の形態では、OSが、TP1〜TP4を有する場合について例示したが、TPの数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
本実施の形態では、タスクの数が4つである場合について例示したが、タスクの数も、これに限られない。例えば、本実施の形態では、TPがTP1〜TP4の4つである場合について例示したが、TPの数を4つ以外の数としてもよく、それぞれのTPが1つ以上の任意の数のタスクを有するようにしてもよい。
本実施の形態では、タイム・パーティショニングを採用したマルチタスクOSについて例示したが、これに限られない。タイム・パーティショニングを採用していないマルチタスクOSに適用することもできる。すなわち、TP単位ではなく、タスク(アプリケーション)単位でプログラムを更新するようにしてもよい。