(57)【特許請求の範囲】
【請求項１】
制御対象の機能安全を確保するための制御に関する安全制御処理を実行する安全制御プログラムと、その他の前記制御対象の制御に関する通常制御処理を実行する通常制御プログラムと、を含む実行プログラムが格納されるプログラム記憶部と、
前記安全制御処理を実行していることを示す安全制御実行情報が格納される実行情報記憶部と、
前記実行プログラムを実行するプログラム実行部と、を備え、
前記プログラム実行部は、
前記安全制御プログラムを実行して、当該安全制御プログラムの実行において前記安全制御処理の実行を開始した場合には、前記安全制御実行情報を前記実行情報記憶部に格納し、
前記実行している実行プログラムを、前記プログラム記憶部に格納された新たな前記実行プログラムに更新したときに、前記実行情報記憶部に前記安全制御実行情報が格納されている場合、前記新たな実行プログラムに含まれる安全制御プログラムを実行して、当該安全制御プログラムの実行において前記安全制御処理を引き継いで実行し、前記安全制御処理の実行を終了した場合に前記実行情報記憶部から前記安全制御実行情報を削除する、
安全制御装置。
【請求項２】
前記実行プログラムは、さらに、当該実行プログラムに含まれる安全制御プログラムによって実行可能な前記安全制御処理を識別する識別情報を含み、
前記プログラム実行部は、前記新たな実行プログラムに含まれる識別情報に基づいて、当該新たな実行プログラムに含まれる安全制御プログラムが、前記実行している安全制御処理を実行することができないと判定した場合、前記実行プログラムの更新を抑止する、
請求項１に記載の安全制御装置。
【請求項３】
前記安全制御プログラムは、複数の前記安全制御処理のうち、いずれか１つ以上を実行可能であり、
前記安全制御実行情報は、前記複数の安全制御処理のうち、いずれの安全制御処理を実行しているかを示し、
前記プログラム実行部は、
前記安全制御プログラムの実行をして、当該安全制御プログラムの実行において前記安全制御処理の実行を開始した場合には、前記安全制御処理を実行している安全制御処理を示す安全制御実行情報を前記実行情報記憶部に格納し、
前記新たな実行プログラムに含まれる安全制御プログラムが実行可能な複数の安全制御処理のうち、前記安全制御実行情報によって示される安全制御処理を引き継いで実行し、前記安全制御処理の実行を終了した場合に前記実行情報記憶部から前記安全制御実行情報を削除する、
請求項１又は２のいずれか１項に記載の安全制御装置。
【請求項４】
前記実行プログラムは、前記安全制御プログラムが実行される安全制御タイムパーティションと、前記通常制御プログラムが実行される通常制御タイムパーティションとを含む複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報を含み、
前記プログラム実行部は、前記スケジューリング情報に従って、前記安全制御プログラム及び前記通常制御プログラムを実行する、
請求項１乃至３のいずれか１項に記載の安全制御装置。
【請求項５】
前記実行プログラムは、さらに、前記新たな実行プログラムを前記プログラム記憶部に格納する処理を実行するリプログラミングプログラムを含み、
前記プログラム実行部は、前記リプログラミングプログラムを実行することによって、前記新たな実行プログラムを外部装置から受信して、前記プログラム記憶部に格納する、
請求項１乃至４のいずれか１項に記載の安全制御装置。
【請求項６】
制御対象の機能安全を確保するための制御に関する安全制御処理を実行する安全制御プログラムと、その他の前記制御対象の制御に関する通常制御処理を実行する通常制御プログラムと、を含む実行プログラムが格納されるプログラム記憶部と、
前記安全制御処理を実行していることを示す安全制御実行情報が格納される実行情報記憶部と、
前記実行プログラムを実行するプログラム実行部と、を備え、
前記プログラム実行部は、
前記安全制御プログラムを実行して、当該安全制御プログラムの実行において前記安全制御処理の実行を開始した場合には、前記安全制御実行情報を前記実行情報記憶部に格納し、
前記実行している安全制御プログラムを、前記プログラム記憶部に格納された新たな前記安全制御プログラムに更新したときに、前記実行情報記憶部に前記安全制御実行情報が格納されている場合、前記新たな安全制御プログラムの実行において前記安全制御処理を引き継いで実行し、前記安全制御処理の実行を終了した場合に前記実行情報記憶部から前記安全制御実行情報を削除する、
安全制御装置。
【請求項７】
制御対象の機能安全を確保するための制御に関する安全制御処理を実行する安全制御プログラムと、その他の前記制御対象の制御に関する通常制御処理を実行する通常制御プログラムと、を含む実行プログラムの実行を開始するステップと、
前記安全制御プログラムを実行して、当該安全制御プログラムの実行において前記安全制御処理の実行を開始した場合には、前記安全制御処理を実行していることを示す安全制御実行情報を実行情報記憶部に格納するステップと、
前記安全制御処理の実行を終了した場合に前記実行情報記憶部から前記安全制御実行情報を削除するステップと、
前記実行している実行プログラムを、新たな前記実行プログラムに更新したときに、前記実行情報記憶部に前記安全制御実行情報が格納されている場合、前記新たな実行プログラムに含まれる安全制御プログラムを実行して、当該安全制御プログラムの実行において前記安全制御処理を引き継いで実行するステップと、
を備えた安全制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機能安全の確保のためにサービスロボットおよび輸送機器等に搭載される安全制御装置に関し、特に、コンピュータシステムを用いた安全制御装置に関する。
【背景技術】
【０００２】
サービスロボットは、外界センサや自己診断装置によって安全状態を常時監視し、何らかの危険を検知した場合に適切な安全制御ロジックを実行することで、機能安全を確保する必要がある。
【０００３】
上述したサービスロボットのほか、運輸機器等の電気的な原理で動作するシステムを対象とした機能安全に関する国際標準として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）、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ１３は、ＯＳ１００及びアプリケーション１０１〜１０４を格納する。なお、不揮発性メモリ１３の少なくとも一部は安全制御装置１から取り外し可能に構成されてもよい。例えば、アプリケーション１０１〜１０４が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ１３の少なくとも一部は、安全制御装置１の外部に配置されてもよい。
【００２５】
ＯＳ１００は、プロセッサ１０によって実行されることにより、プロセッサ１０及び実行用メモリ１１及び不揮発性メモリ１３等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
【００２６】
さらに、機能安全の確保に関連する安全監視アプリケーション１０１及び安全制御アプリケーション１０３の通常制御アプリケーション１０２からの独立性を高めるため、ＯＳ１００は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２を含む。
【００２７】
このうち、時間的な保護は、プロセッサ１０の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ１０の実行時間をパーティショニングし、各パーティション（タイムパーティションと呼ぶ）にタスク（プロセス又はスレッド）を割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、各タイムパーティション（以下、ＴＰと略称する場合がある。）に割り当てられたタスクに対して、プロセッサ１０の実行時間を含む資源の利用を保証する。
【００２８】
図２は、タイム・パーティショニングに関する概念図である。図２の例では、予め定められた１サイクル時間を３つのＴＰ１、ＴＰ２及びＴＰ３に分割する例を示している。例えば、１サイクル時間を１００Ｔｉｃｋとした場合、このうち前半の２０ＴｉｃｋがＴＰ１、中間の３０ＴｉｃｋがＴＰ２、後半の５０ＴｉｃｋがＴＰ３と規定される。
【００２９】
また、図２の例では、第１アプリケーション（ＡＰＬ１）〜第４アプリケーション（ＡＰＬ４）が、ＴＰ１〜ＴＰ３のいずれかに割り当てられている。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、時間の経過に応じて、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。そして、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００３０】
一方、空間的な保護は、実行用メモリ１１及びＩ／Ｏポート１２を含む固定的な資源をパーティショニングし、各パーティション（リソースパーティションと呼ぶ）にタスクを割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、予め割り当てられたリソースパーティション（以下、ＲＰと略称する場合がある。）を超えてタスクが他のリソースにアクセスすることを禁止する。
【００３１】
図３は、リソース・パーティショニングに関する概念図である。図３の例では、２つのＲＰ（ＲＰ１及びＲＰ２）を示している。ＲＰ１には、実行用メモリ１１及び不揮発性メモリ１３の一部（Ａ領域）と、Ｉ／Ｏポート１２の一部（ポートＡ）が割り当てられている。また、ＲＰ２には、実行用メモリ１１及び不揮発性メモリ１３の他の一部（Ｂ領域）と、Ｉ／Ｏポート１２の他の一部（ポートＢ）が割り当てられている。ＲＰ１からはＲＰ２に割り当てられたリソースへのアクセスが禁止され、ＲＰ２からはＲＰ１に割り当てられたリソースへのアクセスが禁止される。
【００３２】
なお、全てのリソースがいずれかのＲＰに排他的に割り当てられる必要はない。つまり、複数のＲＰによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション１０２及び安全制御アプリケーション１０３の双方からアクセスできる必要がある。よって、通常制御アプリケーション１０２が属するＲＰと安全制御アプリケーション１０３が属するＲＰによって、アクチュエータを制御するためのＩ／Ｏポートを共有するとよい。
【００３３】
図１に戻り説明を続ける。アプリケーション１０１〜１０４は、ＯＳ１００及びプロセッサ１０によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション１０１は、通常制御アプリケーション１０２の実行状況の監視と、安全制御アプリケーション１０３の実行状況の監視と、Ｉ／Ｏポート１２への入出力データの監視と、をプロセッサ１０に実行させるための命令コードを含む。さらに、安全監視アプリケーション１０１は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全監視アプリケーション１０１は、安全関連アプリケーションである。
【００３４】
また、通常制御アプリケーション１０２は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、通常制御アプリケーション１０２は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、通常制御アプリケーション１０２は、非安全関連アプリケーションである。
【００３５】
また、安全制御アプリケーション１０３は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、安全制御アプリケーション１０３は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全制御アプリケーション１０３は、安全関連アプリケーションである。
【００３６】
また、リプログラミングアプリケーション１０４は、安全制御装置１において実行されるプログラム１００〜１０４を更新するための処理手順をプロセッサ１０に実行させるための命令コードを含む。さらに、リプログラミングアプリケーション１０４は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。
【００３７】
リセット回路１４は、ＯＳ１００からの信号に基づき、マイクロコントローラ１５のリセットを行う。パーティションスケジューラ２１からリセット回路１４に定期的に送信信号を送信するようにし、リセット回路１４は、パーティションスケジューラ２１からの送信信号が途絶えた場合に、マイクロコントローラ１５をリセットする。例えば、パーティションスケジューラ２１は、後述するように、１Ｔｉｃｋごとに動作するタイミングで送信信号を送信する。また、ＯＳ１００で異常を検知した場合、又は、アプリケーション１０１〜１０３のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ２１がリセット回路１４にリセット信号を送信するようにして、それに応じて、リセット回路１４がマイクロコントローラ１５をリセットするようにしてもよい。このようにすることで、マイクロコントローラ１５に不具合が発生した場合に、マイクロコントローラ１５をリセットして復旧することができる。
【００３８】
続いて、図４を参照して、本発明の実施の形態１にかかる実行用メモリ１１及び不揮発性メモリ１３のメモリ構成について説明する。図４は、本発明の実施の形態１にかかる実行用メモリ１１及び不揮発性メモリ１３のメモリ構成を示す図である。
【００３９】
図４に示すように、不揮発性メモリ１３は、ブートプログラム領域９０と、実行用プログラム領域９１、及び更新用プログラム領域９２を含む。ブートプログラム領域には、ブートプログラム５０が格納される。実行用プログラム領域９１及び更新用プログラム領域９２のそれぞれは、ＯＳ１００、安全監視アプリケーション１０１、通常制御アプリケーション１０２、安全制御アプリケーション１０３、及びリプログラミングアプリケーション１０４を含む実行プログラムが格納される。
【００４０】
ブートプログラム５０は、実行用プログラム領域９１に格納された実行プログラムに含まれるＯＳ１００を実行用メモリ１１にロードして起動する。これによって、ＯＳ１００によって、実行用プログラム領域９１に格納された実行プログラムに含まれる各アプリケーション１０１〜１０４が起動される。その後に、リプログラミングアプリケーション１０４は、安全制御装置１で動作させるプログラム１００〜１０４を更新する場合、新しい実行プログラムを更新用プログラム領域９２に格納して、安全制御装置１を再起動する。安全制御装置１が再起動されたとき、ブートプログラム５０は、更新用プログラム領域９２に格納されたＯＳ１００を実行用メモリ１１にロードして起動する。これによって、ＯＳ１００によって、更新用プログラム領域９２に格納された実行プログラムに含まれる各アプリケーション１０１〜１０４が起動される。その結果、安全制御装置１によって動作する各プログラム１００〜１０４が、新しいプログラム１００〜１０４に更新される。
【００４１】
そして、次に、リプログラミングアプリケーション１０４によって、安全制御装置１で動作させるプログラム１００〜１０４を更新する場合には、実行用プログラム領域９１に対して、新しい実行プログラムが格納されることになる。すなわち、実行用に利用される領域と、更新用に利用される領域とは、交互に入れ替わることになる。このようにすることで、実行プログラムの書き込みに失敗した場合等、新しい実行プログラムを正常に起動することができない場合に、更新前の実行プログラムによって、安全制御装置１を動作させることができる。
【００４２】
また、図４に示すように、実行用メモリ１１は、安全機能の実行状態を保管する領域９４（以下、「状態保持ＲＡＭ」と呼ぶ）が含まれている。状態保持ＲＡＭ９３には、後述するように、安全機能の実行状態を示す安全機能情報３１が格納される。
【００４３】
続いて以下では、パーティションスケジューラ２１と、アプリケーション１０１〜１０４の起動により生成されるタスクと、の関係について、図５を用いて説明する。図５は、ＯＳ１００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ２１とタスク２４、２６、２８、３０との関係を示す図である。
【００４４】
マイクロコントローラ１５は、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２、不揮発性メモリ１３等を含む。なお、図５では、マイクロコントローラ１５の外部にリセット回路１４を備える構成を例示しているが、マイクロコントローラ１５の内部にリセット回路１４を含む構成としてもよい。
【００４５】
マイクロコントローラ１５には、外部のクロック源からのクロック信号が供給され、プロセッサ１０等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、１Ｔｉｃｋであるとして説明する。このため、プロセッサ１０によりＯＳ１００が実行されることで、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作すると共に、各ＴＰにおいて、タスクスケジューラ２３、２５、２７、２９およびタスク（安全監視タスク２４、通常制御タスク２６、安全制御タスク２８、リプログラミングタスク３０）が１Ｔｉｃｋごとに動作する。
【００４６】
パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作し、ＴＰの切り替え（パーティション・スケジューリング）を行う。パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にＴＰ１〜ＴＰ４のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１は、選択したＴＰに関するタスクスケジューラの動作を開始させる。
【００４７】
パーティションスケジューラ２１によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ２１は、スケジューリングテーブル２２を参照し、ＴＰの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
【００４８】
スケジューリングテーブル２２は、ＴＰの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル２２は、例えば、実行用メモリ１１に予め格納されている。なお、スケジューリングテーブル２２は、少なくとも２つの異なるスケジューリングパターンを保持している。１つは、安全監視タスク２４による異常検知が行われていない場合（つまり通常時）に適用されるスケジューリングパターンである。もう１つは、安全監視タスク２４によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
【００４９】
図６Ａは、通常制御スケジューリングパターンの具体例を示している。図６Ａでは、１サイクル時間において、時系列順に、通常制御タスク２６が属するＴＰ２の期間（Ｔ１）、安全監視タスク２４が属するＴＰ１の期間（Ｔ２）、及びリプログラミングタスク３０が属するＴＰ４の期間（Ｔ３）が割り当てられている。図６Ａのスケジューリングパターンによれば、通常制御タスク２６、安全監視タスク２４、及びリプログラミングタスク３０が繰り返しスケジューリングされる。
【００５０】
図６Ｂは、安全制御スケジューリングパターンの具体例を示している。図６Ｂでは、１サイクル時間において、時系列順に、安全制御タスク２８が属するＴＰ３の期間（Ｔ４）、安全監視タスク２４が属するＴＰ１の期間（Ｔ５）、及びリプログラミングタスク３０が属するＴＰ４の期間（Ｔ６）が割り当てられている。図６Ｂのスケジューリングパターンによれば、安全制御タスク２８、安全監視タスク２４、及びリプログラミングタスク３０が繰り返しスケジューリングされる。
【００５１】
図５に戻り説明を続ける。タスクスケジューラ２３、２５、２７、２９は、それぞれが属するＴＰ内でのタスクのスケジューリングを行う。各ＴＰ内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図５では、各ＴＰはそれぞれ１つのタスクのみを含むものとして図示しているが、１以上のタスクが含まれるようにしてもよい。例えば、通常制御用のＴＰ２内には、通常制御タスクＡ及び通常制御タスクＢの２つのタスクが含まれていてもよい。
【００５２】
安全監視タスク２４は、安全監視アプリケーション１０１の起動によって生成されるタスクである。図５の例では、安全監視タスク２４は、ＴＰ１及びＲＰ１に割り当てられている。安全監視タスク２４は、非安全関連アプリケーションである通常制御タスク２６の実行状況の監視と、安全関連アプリケーションである安全制御タスク２８の実行状況の監視と、Ｉ／Ｏポート１２の入出力データを監視する。安全監視タスク２４は、自身が属するＲＰ１に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全監視タスク２４は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５３】
通常制御タスク２６は、通常制御アプリケーション１０２の起動によって生成されるタスクである。図５の例では、通常制御タスク２６は、ＴＰ２及びＲＰ２に割り当てられている。通常制御タスク２６は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。通常制御タスク２６は、自身が属するＲＰ２に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、通常制御タスク２６は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５４】
安全制御タスク２８は、安全制御アプリケーション１０３の起動によって生成されるタスクである。図５の例では、安全制御タスク２８は、ＴＰ３及びＲＰ３に割り当てられている。安全制御タスク２８は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。安全制御タスク２８は、自身が属するＲＰ３に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全制御タスク２８は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５５】
また、安全制御タスク２８は、機能安全を確保するために定められた制御（安全機能）の実行を開始した場合には、安全機能情報３１を状態保持ＲＡＭ９３に格納する。安全制御タスク２８は、機能安全を確保するために定められた制御（安全機能）の実行を終了した場合には、状態保持ＲＡＭ９３から安全機能情報３１を削除する。また、安全制御タスク２８は、実行開始時に、状態保持ＲＡＭ９３に安全機能情報３１が格納されている場合には、安全機能を実行する。これによって、安全機能の実行中にプログラム１００〜１０４の更新が行われた場合であっても、安全機能の実行を引き継ぐことが可能となる。
【００５６】
リプログラミングタスク３０は、リプログラミングアプリケーション１０４の起動によって生成されるタスクである。図５の例では、リプログラミングタスク３０は、ＴＰ４及びＲＰ４に割り当てられている。リプログラミングタスク３０は、安全制御装置１において実行されるプログラム１００〜１０４を更新する。リプログラミングタスク３０は、自身が属するＲＰ４に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、リプログラミングタスク３０は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５７】
安全機能情報３１は、安全機能を実行していることを示す情報となる。安全制御タスク２８によって、安全機能が実行されている場合に安全機能情報３１が状態保持ＲＡＭ９３に格納される。ここで、安全機能情報３１は、厳密には、どの安全機能が実行されているかを示す情報となる。例えば、安全機能情報３１の値によって、複数の安全機能のうち、どの安全機能が実行されているかを示すようにする。すなわち、安全制御タスク２８は、複数の安全機能のうち、いずれか１つ以上を実行可能である。さらに、安全制御タスク２８が実行可能な安全機能の種類及び数は、更新前後のプログラムで異なっていてもよい。安全機能の種類として、例えば、制御対象の停止、制御対象の低速化等がある。
【００５８】
なお、各タスクからパーティションスケジューラ２１へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがＯＳ１００のシステムコール（サービスコール）を呼び出し、ＯＳ１００を介して、パーティションスケジューラ２１に結果を通知することができる。例えば、タスク間通信を行うシステムコールを呼び出すことによって通知をするようにしてもよい。また、例えば、タスクの実行状況に関するフラグを実行用メモリ１１に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ２１がフラグの設定値に応じてタスクの実行状況を判断することもできる。
【００５９】
上述したように、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作し、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１が、選択したＴＰに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ２３、２５、２７、２９が動作を開始することでタスクのスケジューリングが行われ、プロセッサ１０が、タスクスケジューラ２３、２５、２７、２９によりスケジューリングされた順序に従って、ＴＰ内でのタスクを実行していく。これによって、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００６０】
続いて以下では、パーティションスケジューラ２１によるパーティション・スケジューリングについて、図７を用いて説明する。図７は、発明の実施の形態１にかかるパーティションスケジューラ２１の処理手順の具体例を示すフローチャートである。
【００６１】
なお、図７では、通常制御スケジューリングパターン（例えば図６Ａ）または安全制御スケジューリングパターン（例えば図６Ｂ）に従って、スケジューリングを実行する場合を例に説明する。すなわち、ＴＰ２またはＴＰ３に続く次のＴＰはＴＰ１であり、ＴＰ１に続く次のＴＰはＴＰ４であり、かつ、ＴＰ２での異常がＴＰ１で検知された場合に、ＴＰ１からの結果を受けて次に選択・決定されるＴＰはＴＰ３である場合を例に説明する。
【００６２】
ＯＳ１００は、１Ｔｉｃｋ経過するごとに（Ｓ１１）、パーティションスケジューラ２１を起動する（Ｓ１２）。パーティションスケジューラ２１は、スケジューリングパターンを参照して、ＴＰの切り替えタイミングか否かを判定する（Ｓ１３）。
【００６３】
ＴＰの切り替えタイミングでないと判定した場合（Ｓ１３でＮｏ）、パーティションスケジューラ２１は、同一のＴＰＸについての動作を継続させる。このため、ＴＰの切り替えタイミングとなるまでの間、Ｓ１１〜Ｓ１３、Ｓ１５、Ｓ１６の処理が繰り返される。ここで、変数ＸはＴＰの番号を示し、Ｘは１〜４のうちのいずれかの値となる。すなわち、通常制御スケジューリングパターンに従ってパーティション・スケジューリングを実施している場合は、安全制御用のＴＰ３を除いた、ＴＰ２、ＴＰ１、及びＴＰ４のいずれかを動作させる。
【００６４】
一方、ＴＰの切り替えタイミングであると判定した場合（Ｓ１３でＹｅｓ）、パーティションスケジューラ２１は、ＴＰの切り替えを実行する（Ｓ１４）。このように、パーティションスケジューラ２１は、次にアクティブにするＴＰを変更する（Ｓ１３でＹｅｓ）場合には、さらに、切り替え前のＴＰに属するタスクからの通知結果に応じて、切り替え前のＴＰが正常であったか否かを判断する。判断の結果、切り替え前のＴＰが異常であった場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰＸを、安全制御スケジューリングパターンに従って、ＴＰ１、ＴＰ３、及びＴＰ４のいずれかから選択・決定する。判断の結果、正常であった場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰＸを、通常制御スケジューリングパターンに従って、ＴＰ１、ＴＰ２、及びＴＰ４のいずれかを選択・決定する。
【００６５】
パーティションスケジューラ２１は、現在アクティブになっているＴＰＸのタスクスケジューラを動作させる（Ｓ１５）。Ｓ１５で動作を開始したＴＰＸのタスクスケジューラは、ＴＰＸ内のタスクを優先度に応じて実行する（Ｓ１６）。
【００６６】
そして、１Ｔｉｃｋが経過すると（Ｓ１１）、パーティションスケジューラ２１が、再びＴＰのスケジューリングを開始する（Ｓ１２）。すなわち、パーティションスケジューラ２１は、スケジューリングパターンに従って、次の１Ｔｉｃｋの間にいずれのＴＰをアクティブにするかを選択・決定する。
【００６７】
図７で示した処理に関して、パーティション・スケジューリングの具体例を説明する。まず、図６Ａに例示した通常制御スケジューリングパターンに従って、Ｓ１５においてＴＰ２がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、Ｓ１５ではＴＰＸ＝ＴＰ２として開始し、続くＳ１６、Ｓ１１〜Ｓ１３にかけてもＴＰＸ＝ＴＰ２のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ２の状態が維持される。Ｓ１３でＹｅｓとなり、Ｓ１４でＴＰ２からＴＰ１へと変更された場合、続くＳ１５〜Ｓ１６、Ｓ１１〜Ｓ１３にかけてＴＰ１のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ１の状態が維持される。Ｓ１３でＹｅｓとなり、Ｓ１４でＴＰ１からＴＰ４へと変更された場合、続くＳ１５〜Ｓ１６、Ｓ１１〜Ｓ１３にかけてＴＰ４のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ４の状態が維持される。ＴＰ１がアクティブのときに、Ｓ１６で、ＴＰ２に関する実行状況（データ入出力等）が正常であると判定されていた場合には、次のＳ１４では、ＴＰＸ＝ＴＰ２となる（つまり、ＴＰ２から開始する通常制御スケジューリングパターンが継続される。）。一方で、Ｓ１６で、ＴＰ２に関する実行状況（データ入出力等）が異常であると判定されていた場合には、次のＳ１４で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンに切り替わる。）。
【００６８】
また、図６Ｂに例示した安全制御スケジューリングパターンに従って、Ｓ１５においてＴＰ３がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、Ｓ１５ではＴＰＸ＝ＴＰ３として開始し、続くＳ１６、Ｓ１１〜Ｓ１３にかけてもＴＰＸ＝ＴＰ３のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ３の状態が維持される。Ｓ１３でＹｅｓとなり、Ｓ１４でＴＰ３からＴＰ１へと変更された場合、続くＳ１５〜Ｓ１６、Ｓ１１〜Ｓ１３にかけてＴＰ１のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ１の状態が維持される。Ｓ１３でＹｅｓとなり、Ｓ１４でＴＰ１からＴＰ４へと変更された場合、続くＳ１５〜Ｓ１６、Ｓ１１〜Ｓ１３にかけてＴＰ４のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ４の状態が維持される。ＴＰ１がアクティブのときに、Ｓ１６で、ＴＰ３に関する実行状況（データ入出力等）が正常であると判定されていた場合には、次のＳ１４では、ＴＰＸ＝ＴＰ２とする（つまり、ＴＰ２から開始する通常制御スケジューリングパターンに切り替わる。）。一方で、Ｓ１６で、ＴＰ３に関する実行状況（データ入出力等）に異常があると判定されていた場合には、次のＳ１４で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンが継続される。）。
【００６９】
なお、上述の例では、スケジューリングパターンとして、４つのＴＰ（安全監視用のＴＰ１、通常制御用のＴＰ２、安全制御用のＴＰ３、リプログラミング用のＴＰ４）のみを組み合わせた場合を例に説明したが、ＴＰ２のような通常制御用パーティションや、ＴＰ３のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、２つの通常制御用のＴＰ２及びＴＰ５と、安全監視用のＴＰ１と、２つの安全制御用のＴＰ３及びＴＰ６と、リプログラミング用のＴＰ４が存在し、これら６つのＴＰ（ＴＰ１〜ＴＰ６）を組み合わせてスケジューリングパターンを構成してもよい。この場合、Ｓ１４では、パーティションスケジューラ２１が、ＴＰＸに関する実行状況（データ入出力等）の異常状態の種類を判定し、その異常種類に応じて、安全制御用のＴＰ３またはＴＰ６のいずれかを選択すればよい。また、Ｓ１４では、通常制御用のＴＰ２またはＴＰ５のいずれかを選択すればよい。
【００７０】
上述したように、本実施の形態では、ＯＳ１００は、安全監視用のＴＰ１からの通知、または、各ＴＰからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ２１を備えている。パーティションスケジューラ２１は、各ＴＰにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。
【００７１】
独立に動作するパーティションスケジューラ２１が、全てのＴＰから結果通知を受ける構成とすることで、パーティションスケジューラ２１は、全てのＴＰに関する状況を一元的に把握することができる。このため、例えば、安全監視用のＴＰ１からの結果通知に応じて、パーティションスケジューラ２１が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ２１は、各ＴＰの状況を考慮した上で、正常状態にあるＴＰのみから次のパーティションを決定・選択することもできる。これによれば、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
【００７２】
続いて、図８を参照して、本発明の実施の形態１にかかるリプログラミング処理の処理手順について説明する。図８は、本発明の実施の形態１にかかるリプログラミング処理の処理手順の具体例を示すフローチャートである。
【００７３】
安全制御装置１の電源が投入されたとき、プロセッサ１０は、ブートプログラム５０を不揮発性メモリ１３から実行用メモリ１１にロードして起動する。ブートプログラム５０は、実行用プログラム領域９１に格納されたＯＳ１００を実行用メモリ１１にロードして起動する。ＯＳ１００は、実行用プログラム領域９１に格納される各アプリケーション１０１〜１０４を実行用メモリ１１にロードして起動する。これによって、図７を参照して説明したように、ＴＰをスケジューリングしながら、各タスク２４、２６、２８、３０が実行される（Ｓ２１）。
【００７４】
異常が検出されていない場合には、パーティションスケジューラ２１は、通常制御スケジューリングパターンに従って、ＴＰのスケジューリングを継続する（Ｓ２１、Ｓ２２でＮｏ、Ｓ２４でＮｏ）。何らかの異常が検出された場合には、パーティションスケジューラ２１は、安全制御スケジューリングパターンに従って、ＴＰのスケジューリングを開始する。そして、安全制御タスク２８は、安全機能を実行している場合（Ｓ２２でＹｅｓ）、実行している安全機能を示す安全機能情報３１を状態保持ＲＡＭ９３に格納する（Ｓ２３）。
【００７５】
他方、リプログラミングタスク３０は、プログラムの更新指示があった場合（Ｓ２４でＹｅｓ）、現在実行されている安全機能が、新たな実行プログラムでも実現可能か否かを判定する（Ｓ２５）。ここで、プログラムの更新指示は、新たな実行プログラムを送信する外部装置との間で任意の通信手段による通信を可能とする通信デバイスを安全制御装置１に備えるようにして、外部装置からプロセッサ１０（リプログラミングタスク３０）に対して更新を指示する更新指示情報を送信することで更新指示を行うようにする。
【００７６】
現在実行されている安全機能が、新たな実行プログラムでも実現可能でないと判定した場合（Ｓ２５でＮｏ）、リプログラミングタスク３０は、プログラムの更新を抑止する。これによって、現在実行しているプログラム１００〜１０４の実行が継続される（Ｓ２１）。他方、現在実行されている安全機能が、新たな実行プログラムでも実現可能であると判定した場合（Ｓ２５でＹｅｓ）、リプログラミングタスク３０は、プログラムを更新する（Ｓ２６）。
【００７７】
ここで、現在実現されている安全機能が、新たな実行プログラムでも実現可能か否かは、実装されている安全機能を識別する識別情報を実行プログラムに含めておくようにして、その識別情報に基づいて判定するようにする。具体的には、リプログラミングタスク３０は、更新指示に応じて、外部装置から新たな実行プログラムを受信して、更新用プログラム領域９２に格納する。そして、リプログラミングタスク３０は、更新用プログラム領域９２に格納した新たな実行プログラムに含まれる識別情報によって識別される安全機能に、安全機能情報３１が示す安全機能が含まれていない場合、その新たな実行プログラムへの更新を抑止する。また、リプログラミングタスク３０は、新たな実行プログラムに含まれる識別情報によって識別される安全機能が、実行用プログラム領域９１に格納されている実行プログラムに含まれる識別情報によって識別される安全機能を全て含んでいない場合に、その新たな実行プログラムへの更新を抑止するようにしてもよい。
【００７８】
ここで、外部装置は、例えば、ＰＣ又はサーバー等の情報処理装置である。また、通信手段は、どのような種類の通信手段を用いてもよく、無線通信又は有線通信もしくはそれらの組み合わせであってもよい。通信手段は、公衆交換電話網、移動体通信網、無線ＬＡＮ、有線ＬＡＮ、及びシリアル通信等である。
【００７９】
リプログラミングタスク３０は、プログラムを更新する場合、ＯＳ１００に対して再起動を指示する。ＯＳ１００は、リプログラミングタスク３０からの指示に応じて、安全制御装置１を再起動する。これによって、ブートプログラム５０によって、更新用プログラム領域９２に格納された、新しいプログラム１００〜１０４が起動される。
【００８０】
そして、パーティションスケジューラ２１は、状態保持ＲＡＭ９３に安全機能情報３１が格納されているか否かを判定する（Ｓ２７）。状態保持ＲＡＭ９３に安全機能情報３１が格納されていないと判定した場合（Ｓ２７でＮｏ）、パーティションスケジューラ２１は、通常通り、ＴＰのスケジューリングを開始する（Ｓ２１）。パーティションスケジューラ２１は、例えば、通常制御スケジューリングパターンに従って、ＴＰのスケジューリングを行う。
【００８１】
他方、状態保持ＲＡＭ９３に安全機能情報３１が格納されていると判定した場合（Ｓ２７でＹｅｓ）、パーティションスケジューラ２１は、安全制御スケジューリングパターンに従って、ＴＰのスケジューリングを開始する。そして、安全制御タスク２８は、状態保持ＲＡＭ９３に安全機能情報３１が格納されている場合、その安全機能情報３１が示す安全機能を実行する（Ｓ２８）。これによって、リプログラミング前に実行されていた安全機能を引き継いで実行することができる。
【００８２】
以上に説明したように、本実施の形態１では、安全制御タスク２８を実行して、安全制御タスク２８の実行において安全機能を実行している場合、安全機能情報３１を状態保持ＲＡＭ９３に格納するようにしている。そして、実行している実行プログラムを、新たな実行プログラムに更新したときに、状態保持ＲＡＭ９３に安全機能情報３１が格納されている場合、安全制御タスク２８を実行して、安全制御タスク２８の実行において安全機能を引き継いで実行するようにしている。
【００８３】
これによれば、実行プログラムを更新した場合であっても、安全機能を引き継いで実行することが可能となる。したがって、制御対象を制御するプログラムを更新した場合であっても、安全性を維持することが可能となる。
【００８４】
また、本実施の形態１では、実行プログラムに、その実行プログラムに含まれる安全制御アプリケーション１０３によって実行可能な安全機能を識別する識別情報を含めるようにしている。そして、新たな実行プログラムに含まれる識別情報に基づいて、新たな実行プログラムに含まれる安全制御アプリケーション１０３が、実行している安全機能を実行することができないと判定した場合、実行プログラムの更新を抑止するようにしている。
【００８５】
これによれば、更新後の実行プログラムの安全機能を事前に確認して、更新によって安全性が損なわれてしまうことを防止することができる。
【００８６】
＜発明の実施の形態２＞
続いて、本発明の実施の形態２について説明する。なお、本発明の実施の形態２は、安全制御装置１の構成、スケジューリングパターン、実行用メモリ１１及び不揮発性メモリ１３のメモリ構成、パーティションスケジューラ２１とタスク２４、２６、２８、３０との関係、及びパーティションスケジューラ２１の処理手順については、実施の形態１と同様であるため、説明を省略する。以下、説明の明確化のため、実施の形態１と同様の点については説明を省略し、異なる点について説明していく。
【００８７】
実施の形態１では、実行プログラム単位でプログラムを更新するようにしていたが、本実施の形態２では、ＴＰ単位でプログラムを更新する。
【００８８】
すなわち、リプログラミングタスク３０は、あるＴＰのプログラムを更新する場合には、そのＴＰに属するタスクに対応するアプリケーションをリプログラミングする。そして、リプログラミングが終了したとき、ＯＳ１００は、リプログラミングされたアプリケーションに基づいて、ＴＰに属するタスクを再起動する。
【００８９】
続いて、図９を参照して、本発明の実施の形態２にかかるリプログラミング処理の処理手順について説明する。図９は、本発明の実施の形態２にかかるリプログラミング処理の処理手順の具体例を示すフローチャートである。本発明の実施の形態２にかかるリプログラミング処理は、発明の実施の形態１にかかるリプログラミング処理と比較して、さらに、Ｓ２４とＳ２５の間にＳ２９が実行され、Ｓ２７に代えてＳ３０が実行される。その他、各処理Ｓ２１〜Ｓ２８においては、実施の形態１と異なる点について説明していく。
【００９０】
Ｓ２１〜２３については、図８を参照して説明した実施の形態１と同様である。本実施の形態２にかかるＳ２４では、リプログラミングタスク３０は、プログラムの更新指示をＴＰ単位で受ける。例えば、外部装置から安全制御装置１に対して送信する更新指示情報に、更新対象となるＴＰを示す更新対象ＴＰ情報を含めるようにする。
【００９１】
プログラムの更新指示があった場合（Ｓ２４でＹｅｓ）、リプログラミングタスク３０は、安全機能を実行するＴＰの更新か否かを判定する（Ｓ２９）。すなわち、安全機能を実行するタスクを含むＴＰの更新か否かを判定する。これは、外部装置から安全制御装置１に対して送信する情報に基づいて、どのように判定するようにしてもよい。例えば、更新指示情報において、更新対象のＴＰを示すようにし、更新指示情報が示すＴＰが、安全機能を実行するＴＰであるか否かによって判定するようにすればよい。
【００９２】
安全機能を実行するＴＰ３の更新であると判定した場合（Ｓ２９でＹｅｓ）、リプログラミングタスク３０は、Ｓ２５に進む。なお、Ｓ２５では、識別情報を更新対象のアプリケーションに含めておくようにして、その識別情報に基づいて判定するようにすればよい。他方、安全機能を実行するＴＰ３の更新でないと判定した場合（Ｓ２９でＮｏ）、リプログラミングタスク３０は、Ｓ２６に進む。ここで、本実施の形態２にかかるＳ２６では、更新対象となるＴＰのアプリケーションのみを外部装置から受信して、更新用プログラム領域９２に格納する。
【００９３】
リプログラミングタスク３０は、アプリケーションの格納が終わると、ＯＳ１００に更新対象のＴＰに属するタスクの再起動を指示する。ＯＳ１００は、リプログラミングタスク３０からの指示に応じて、更新対象のＴＰに属するタスクを再起動する。このとき、ＯＳ１００は、更新用プログラム領域９２に格納された新たなアプリケーションを実行することで、タスクを起動する。
【００９４】
更新されたＴＰが安全機能を実行するＴＰでない場合、又は、更新されたＴＰが安全機能を実行するＴＰであっても、状態保持ＲＡＭ９３に安全機能情報３１が格納されていない場合（Ｓ３０でＮｏ）は、そのまま、各タスク２４、２６、２８、３０の実行が継続される（Ｓ２１）。
【００９５】
他方、更新されたＴＰが安全機能を実行するＴＰであり、かつ、状態保持ＲＡＭ９３に安全機能情報３１が格納されている場合には（Ｓ３０でＹｅｓ）、再起動された安全制御タスク２８は、安全機能情報３１が示す安全機能を実行する（Ｓ２８）。これによって、リプログラミング前に実行されていた安全機能を引き継いで実行することができる。
【００９６】
以上に説明したように、本実施の形態２のように、ＴＰ単位でプログラムの更新を行うよこともできる。これによれば、ＴＰ単位での柔軟なプログラムの更新を可能にしつつ、制御対象を制御するプログラムを更新した場合に安全性を維持することができる。
【００９７】
＜発明の他の実施の形態＞
本実施の形態では、ＴＰのそれぞれに属するタスクが、それぞれ安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８に限られず、その他の制御対象の制御に関する任意の処理を実行するタスクを有するようにしてもよい。
【００９８】
例えば、図１０に示すようなタスク３２〜３４を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション１０１〜１０３に代えて、タスク３２〜３４に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
【００９９】
監視制御タスク３２は、制御対象を制御する。具体的には、監視制御タスク３２は、通常制御タスク３３及び安全制御タスク３４からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク３３は、制御対象に通常の機能・動作を行わせるための制御計算を行う。具体的には、通常制御タスク３３は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク３３は、算出した指令値を監視制御タスク３２に出力する。安全制御タスク３４は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク３４は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク３４は、算出した指令値を監視制御タスク３２に出力する。監視制御タスク３２は、通常制御タスク３３又は安全制御タスク３４から出力された指令値に基づいてアクチュエータを制御する。
【０１００】
さらに、監視制御タスク３２は、制御対象のセンサから、センサ値を取得する。監視制御タスク３２は、取得したセンサ値を通常制御タスク３３及び安全制御タスク３４に出力する。通常制御タスク３３及び安全制御タスク３４のそれぞれは、監視制御タスク３２から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。なお、各タスク３２〜３４間での指令値及びセンサ値の受け渡しは、タスク間通信で行ってもよく、実行用メモリ１１に設けられた、各タスク３２〜３４で共有してアクセス可能な領域である共有メモリを介して行うようにしてもよい。
【０１０１】
上述した構成の場合、安全制御タスク３４が、機能安全を確保するために定められた制御を行うための制御計算を行っている場合に、安全機能が実行されていることになる。そのため、この場合に、安全制御タスク３４は、安全機能情報３１を状態保持ＲＡＭ９３に格納する。そして、上述した実施の形態と同様にして、安全機能の実行を引き継ぐようにすればよい。
【０１０２】
また、その他に、例えば、図１１に示すようなタスク３５〜３７を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション１０１〜１０３に代えて、タスク３５〜３７に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
【０１０３】
監視タスク３５は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク３５は、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク３５は、取得したセンサ値をＨＭＩ（Human Machine Interface）タスク３７に出力する。
【０１０４】
ＨＭＩタスク３７は、監視タスク３５から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。ＨＭＩタスク３７は、算出した指令値を制御タスク３６に出力する。制御タスク３６は、ＨＭＩタスク３７から出力された指令値に基づいて、アクチュエータを制御する。なお、各タスク３５〜３７間での指令値及びセンサ値の受け渡しは、タスク間通信で行ってもよく、実行用メモリ１１に設けられた、各タスク３５〜３７で共有してアクセス可能な領域である共有メモリを介して行うようにしてもよい。
【０１０５】
上述した構成の場合、ＨＭＩタスク３７が、機能安全を確保するために定められた制御を行うための制御計算を行っている場合に、安全機能が実行されていることになる。そのため、この場合に、ＨＭＩタスク３７は、安全機能情報３１を状態保持ＲＡＭ９３に格納する。そして、上述した実施の形態と同様にして、安全機能の実行を引き継ぐようにすればよい。
【０１０６】
また、上述した構成によれば、搭乗者の操作に応じて制御対象が制御されるというＨＭＩを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態１、２及び図１０によって説明した例についても同様のことが言える。具体的には、安全監視タスク２４又は監視制御タスク３２が取得したセンサ値に応じて、通常制御タスク２６及び安全制御タスク２８、もしくは、通常制御タスク３３及び安全制御タスク３４が同様の制御をすることで、ＨＭＩを実現することが可能である。また、本実施の形態によれば、安全性を維持して制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。
【０１０７】
なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。
【０１０８】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【０１０９】
本実施の形態では、ＯＳが、ＴＰ１〜ＴＰ４を有する場合について例示したが、ＴＰの数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
【０１１０】
本実施の形態では、タスクの数が４つである場合について例示したが、タスクの数も、これに限られない。例えば、本実施の形態では、ＴＰがＴＰ１〜ＴＰ４の４つである場合について例示したが、ＴＰの数を４つ以外の数としてもよく、それぞれのＴＰが１つ以上の任意の数のタスクを有するようにしてもよい。
【０１１１】
本実施の形態では、タイム・パーティショニングを採用したマルチタスクＯＳについて例示したが、これに限られない。タイム・パーティショニングを採用していないマルチタスクＯＳに適用することもできる。すなわち、ＴＰ単位ではなく、タスク（アプリケーション）単位でプログラムを更新するようにしてもよい。
【符号の説明】
【０１１２】
１  安全制御装置
１０  プロセッサ
１１  実行用メモリ
１２  Ｉ／Ｏポート
１３  不揮発性メモリ
１４  リセット回路
１５  マイクロコントローラ
２１  パーティションスケジューラ
２２  スケジューリングテーブル
２３、２５、２７、２９  タスクスケジューラ
２４  安全監視タスク
２６、３３  通常制御タスク
２８、３４  安全制御タスク
３０  リプログラミングタスク
３１  安全機能情報
３２  監視制御タスク
３５  監視タスク
３６  制御タスク
３７  ＨＭＩタスク
５０  ブートプログラム
９０  ブートプログラム領域
９１  実行用プログラム領域
９２  更新用プログラム領域
９３  状態保持ＲＡＭ
１００  オペレーティングシステム
１０１  安全監視アプリケーション
１０２  通常制御アプリケーション
１０３  安全制御アプリケーション
１０４  リプログラミングアプリケーション
【図１】
0005834935.tif 000002
【図２】
0005834935.tif 000003
【図３】
0005834935.tif 000004
【図４】
0005834935.tif 000005
【図５】
0005834935.tif 000006
【図６Ａ】
0005834935.tif 000007
【図６Ｂ】
0005834935.tif 000008
【図７】
0005834935.tif 000009
【図８】
0005834935.tif 000010
【図９】
0005834935.tif 000011
【図１０】
0005834935.tif 000012
【図１１】
0005834935.tif 000013