(57)【特許請求の範囲】
【請求項１】
少なくとも１つのデバイスと、
前記少なくとも１つのデバイスにおける転送元から、前記少なくとも１つのデバイスにおける転送先に対してデータを転送するＤＭＡ（Direct Memory Access）コントローラと、
タスクを実行するとともに、当該タスクの実行に応じて、前記ＤＭＡコントローラによってデータをＤＭＡ転送するタスク実行部と、を備え、
前記タスク実行部は、前記ＤＭＡコントローラを利用していない場合に、前記転送先のデータに変更がないか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定する、
情報処理装置。
【請求項２】
前記タスク実行部は、前記ＤＭＡコントローラを利用している場合に、前記ＤＭＡコントローラによってデータをＤＭＡ転送して、当該ＤＭＡ転送において転送された転送元のデータと、当該ＤＭＡ転送において転送された転送先のデータとが一致するか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定する、
請求項１に記載の情報処理装置。
【請求項３】
前記タスク実行部は、それぞれで複数のタスクのうち少なくとも１つが実行される複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記複数のタスクを実行し、
前記タスク実行部は、前記タイムパーティションを切り替えるときに、切り替え後のタイムパーティションにおけるタスクの実行に応じて行われるＤＭＡ転送で転送元となるデバイスから、当該ＤＭＡ転送で転送先となるデバイスへ、前記データをＤＭＡ転送することによって、前記ＤＭＡコントローラが正常であるか否かを判定する、
請求項２に記載の情報処理装置。
【請求項４】
前記タスク実行部は、所定の処理を実行するとともに、当該所定の処理の実行に応じて前記ＤＭＡコントローラによってデータをＤＭＡ転送する第１のタスクが実行される第１のタイムパーティションを含む複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記第１のタスクを実行し、
前記タスク実行部は、前記ＤＭＡコントローラが正常でないと判定した場合、前記第１のタイムパーティションに代えて、前記所定の処理を実行するとともに、当該所定の処理の実行に応じて前記ＤＭＡコントローラによらず、前記データを転送する第２のタスクが実行される第２のタイムパーティションを実行する、
請求項２に記載の情報処理装置。
【請求項５】
前記ＤＭＡコントローラは、前記ＤＭＡ転送に応じてカウントされる転送カウンタを有し、
前記タスク実行部は、さらに、前記ＤＭＡコントローラを利用している場合に、前記ＤＭＡ転送によって前記転送カウンタがカウントされているか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定する、
請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記ＤＭＡコントローラは、当該ＤＭＡコントローラによるＤＭＡ転送の有効・無効が設定されるイネーブルレジスタを有し、
前記タスク実行部は、さらに、前記ＤＭＡコントローラを利用している場合に、前記イネーブルレジスタにおいて前記ＤＭＡ転送が有効に設定されているか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定する、
請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記ＤＭＡコントローラは、前記ＤＭＡ転送に応じてカウントされる転送カウンタを有し、
前記タスク実行部は、さらに、前記ＤＭＡコントローラを利用していない場合に、前記転送カウンタがカウントされていないか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定する、
請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記ＤＭＡコントローラは、当該ＤＭＡコントローラによるＤＭＡ転送の有効・無効が設定されるイネーブルレジスタを有し、
前記タスク実行部は、さらに、前記ＤＭＡコントローラを利用していない場合に、前記イネーブルレジスタにおいて前記ＤＭＡ転送が無効に設定されているか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定する、
請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
前記情報処理装置は、制御対象を制御する制御装置であり、
前記タスクは、前記制御対象の制御に関する処理を実行する、
請求項１乃至８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記タスク実行部は、
前記タスクの実行、前記ＤＭＡコントローラによるＤＭＡ転送、及び、前記ＤＭＡコントローラが正常であるか否かの判定を実行するシステムプログラムと、
前記システムプログラムを実行するプロセッサと、を含む、
請求項１乃至９のいずれか１項に記載の情報処理装置。
【請求項１１】
少なくとも１つのデバイスにおける転送元から、前記少なくとも１つのデバイスにおける転送先に対してデータを転送するＤＭＡ（Direct Memory Access）コントローラの動作確認方法であって、
前記ＤＭＡコントローラを利用していない場合に、前記転送先のデータに変更がないか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定するステップを備えた
ＤＭＡコントローラの動作確認方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＭＡコントローラによってデータを転送する情報処理装置およびＤＭＡコントローラの動作確認方法に関する。
【背景技術】
【０００２】
サービスロボットは、外界センサや自己診断装置によって安全状態を常時監視し、何らかの危険を検知した場合に適切な安全制御ロジックを実行することで、機能安全を確保する必要がある。
【０００３】
上述したサービスロボットのほか、運輸機器等の電気的な原理で動作するシステムを対象とした機能安全に関する国際標準としてIEC 61508が制定されている。IEC 61508では、機能安全の確保のために設けられるシステムのことを安全関連系と呼んでいる。IEC 61508は、マイクロプロセッサ及びPLC（Programmable Logic Controller）等のハードウェアとコンピュータプログラム（ソフトウェア）によって安全関連系を構築するための様々な技法を定めている。IEC 61508で定められている技法を用いることで、コンピュータシステムを用いて安全関連系を構築することが可能となる。
【０００４】
一方で、近年、マイクロプロセッサ等のプログラマブル電子機器の処理能力が向上している。このため、マルチタスクＯＳ（Operating System）を利用し、１つのコンピュータシステム上で様々なアプリケーションプログラムを並列実行することで、サービスロボット及び自動車等の機器に搭載されている複数用途のコンピュータシステムを統合することができる。
【０００５】
例えば特許文献１に、機能安全の確保に関するアプリケーションプログラム（以下、安全関連アプリケーションと呼ぶ）を、その他のアプリケーションプログラム（以下、非安全関連アプリケーションと呼ぶ）と共に１つのコンピュータシステム上で動作させる技術が開示されている。
【０００６】
IEC 61508で定められている技法を、安全関連アプリケーションおよび非安全関連アプリケーションを含むソフトウェア全体に適用すると、非安全関連アプリケーションにまで適用する必要性が生じる。このため、ソフトウェア開発コストが増大するという問題がある。
【０００７】
そこで、特許文献１に開示される技術では、システムプログラムのタイム・パーティションニングによって、安全関連アプリケーション（安全監視プログラム及び安全制御プログラム）を非安全関連アプリケーション（通常制御プログラム）から独立させている。このため、通常制御プログラムを安全関連系から除外することができ、コンピュータシステムを用いて構成される安全関連系の低コスト化に寄与することができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−２７１７５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ここで、オペレーティングシステムが動作するコンピュータシステムには、ＤＭＡ（Direct Memory Access）コントローラによって、ＤＭＡ転送を行うことで、データの転送を行うものが存在する。
【００１０】
しかしながら、上述したように、安全関連アプリケーションと、非安全関連アプリケーションとを実行する機能安全対応ＯＳを、ＤＭＡコントローラを有するマイクロコントローラ又はＥＣＵ（Engine Control Unit）において動作させることを考えた場合、安全性を担保する上で、ＤＭＡコントローラが正常であるか否かを確認することができるようにすることが望ましい。
【００１１】
本発明は、上述した知見に基づいてなされたものであって、ＤＭＡコントローラが正常であるか否かを確認することが可能となる情報処理装置及びＤＭＡコントローラの動作確認方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の第１の態様にかかる情報処理装置は、少なくとも１つのデバイスと、前記少なくとも１つのデバイスにおける転送元から、前記少なくとも１つのデバイスにおける転送先に対してデータを転送するＤＭＡコントローラと、タスクを実行するとともに、当該タスクの実行に応じて、前記ＤＭＡコントローラによってデータをＤＭＡ転送するタスク実行部と、を備え、前記タスク実行部は、前記ＤＭＡコントローラを利用していない場合に、前記転送先のデータに変更がないか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定するものである。
【００１３】
本発明の第２の態様にかかるＤＭＡコントローラの動作確認方法は、少なくとも１つのデバイスにおける転送元から、前記少なくとも１つのデバイスにおける転送先に対してデータを転送するＤＭＡコントローラの動作確認方法であって、前記ＤＭＡコントローラを利用していない場合に、前記転送先のデータに変更がないか否かを判定することによって、前記ＤＭＡコントローラが正常であるか否かを判定するステップを備えたものである。
【発明の効果】
【００１４】
上述した本発明の各態様によれば、ＤＭＡコントローラが正常であるか否かを確認することが可能となる情報処理装置及びＤＭＡコントローラの動作確認方法を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】発明の実施の形態１にかかる安全制御装置の構成例を示すブロック図である。
【図２】発明の実施の形態１にかかるタイム・パーティショニングの概念を説明するための図である。
【図３】発明の実施の形態１にかかるリソース・パーティショニングの概念を説明するための概念図である。
【図４】発明の実施の形態１にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図５Ａ】スケジューリングパターンの具体例を示す図である。
【図５Ｂ】スケジューリングパターンの具体例を示す図である。
【図６】発明の実施の形態１にかかるパーティションスケジューラの処理手順の具体例を示すフローチャートである。
【図７】発明の実施の形態１にかかるＤＭＡコントローラチェックルーチンの処理手順の具体例を示すフローチャートである。
【図８】ＤＭＡコントローラチェックルーチンの実行タイミングの一例を示す図である。
【図９】発明の実施の形態２にかかるＤＭＡコントローラチェックルーチンの処理手順の具体例を示すフローチャートである。
【図１０】発明の実施の形態３にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１１】発明の実施の形態３にかかるパーティションスケジューラの処理手順の具体例を示すフローチャートである。
【図１２】その他の実施の形態にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１３】その他の実施の形態にかかるパーティションスケジューラとタスクとの関係を示す図である。
【発明を実施するための形態】
【００１６】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１７】
＜発明の実施の形態１＞
本実施の形態にかかる安全制御装置１は、サービスロボットや運輸機器等に搭載されて機能安全確保のための安全制御を実行する。安全制御装置１は、安全関連アプリケーションと非安全関連アプリケーションを同一のコンピュータシステムで実行するよう構成される。図１は、本実施の形態にかかる安全制御装置１の構成例を示すブロック図である。
【００１８】
プロセッサ１０は、プログラム（命令ストリーム）の取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、図１では、１つのプロセッサ１０のみを示しているが、安全制御装置１は、複数のプロセッサ１０を有するマルチプロセッサ構成であってもよい。また、プロセッサ１０は、マルチコアプロセッサでもよい。プロセッサ１０は、システムプログラムとしてのオペレーティングシステム（ＯＳ）１００を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。
【００１９】
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。本実施の形態のプロセッサ１０が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
【００２０】
実行用メモリ１１は、プロセッサ１０によるプログラム実行のために使用されるメモリである。実行用メモリ１１には、不揮発性メモリ１３からロードされたプログラム（ＯＳ１００及びアプリケーション１０１〜１０３等）、プロセッサ１０の入出力データ等が記憶される。なお、プロセッサ１０は、プログラムを不揮発性メモリ１３から実行用メモリ１１にロードすることなく、これらのプログラムを不揮発性メモリ１３から直接実行してもよい。
【００２１】
具体的には、実行用メモリ１１は、ＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）等のランダムアクセス可能な揮発性メモリとすればよい。図１の実行用メモリ１１は、論理的な構成単位を示している。すなわち、実行用メモリ１１は、例えば、複数のＳＲＡＭデバイスの組み合わせ、複数のＤＲＡＭデバイスの組み合わせ、又はＳＲＡＭデバイスとＤＲＡＭデバイスの組み合わせでもよい。
【００２２】
Ｉ／Ｏポート１２は、外部デバイスとの間のデータ送受信に使用される。例えば、安全制御装置１がサービスロボットに搭載される場合であれば、外部デバイスは、各種センサ及びサービスロボットを動作させるアクチュエータ等である。この場合、各種センサは、例えば、サービスロボット周囲の障害物を計測可能な視覚センサ、サービスロボットの姿勢を検知するための姿勢センサ、及びサービスロボットのアクチュエータの状態を検知するための回転センタ等のサービスロボットの内外の状態を検出するセンサを含む。
【００２３】
不揮発性メモリ１３は、電力の供給を受けることなく、実行用メモリ１１に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ１３は、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ１３は、ＯＳ１００及びアプリケーション１０１〜１０３を格納する。なお、不揮発性メモリ１３の少なくとも一部は安全制御装置１から取り外し可能に構成されてもよい。例えば、アプリケーション１０１〜１０３が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ１３の少なくとも一部は、安全制御装置１の外部に配置されてもよい。
【００２４】
ＯＳ１００は、プロセッサ１０によって実行されることにより、プロセッサ１０及び実行用メモリ１１及び不揮発性メモリ１３等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
【００２５】
さらに、機能安全の確保に関連する安全監視アプリケーション１０１及び安全制御アプリケーション１０３の通常制御アプリケーション１０２からの独立性を高めるため、ＯＳ１００は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２を含む。
【００２６】
このうち、時間的な保護は、プロセッサ１０の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ１０の実行時間をパーティショニングし、各パーティション（タイムパーティションと呼ぶ）にタスク（プロセス又はスレッド）を割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、各タイムパーティション（以下、ＴＰと略称する場合がある。）に割り当てられたタスクに対して、プロセッサ１０の実行時間を含む資源の利用を保証する。
【００２７】
図２は、タイム・パーティショニングに関する概念図である。図２の例では、予め定められた１サイクル時間を３つのＴＰ１、ＴＰ２及びＴＰ３に分割する例を示している。例えば、１サイクル時間を１００Ｔｉｃｋとした場合、このうち前半の２０ＴｉｃｋがＴＰ１、中間の３０ＴｉｃｋがＴＰ２、後半の５０ＴｉｃｋがＴＰ３と規定される。
【００２８】
また、図２の例では、第１アプリケーション（ＡＰＬ１）〜第４アプリケーション（ＡＰＬ４）が、ＴＰ１〜ＴＰ３のいずれかに割り当てられている。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、時間の経過に応じて、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。そして、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００２９】
一方、空間的な保護は、実行用メモリ１１及びＩ／Ｏポート１２を含む固定的な資源をパーティショニングし、各パーティション（リソースパーティションと呼ぶ）にタスクを割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、予め割り当てられたリソースパーティション（以下、ＲＰと略称する場合がある。）を超えてタスクが他のリソースにアクセスすることを禁止する。
【００３０】
図３は、リソース・パーティショニングに関する概念図である。図３の例では、２つのＲＰ（ＲＰ１及びＲＰ２）を示している。ＲＰ１には、実行用メモリ１１及び不揮発性メモリ１３の一部（Ａ領域）と、Ｉ／Ｏポート１２の一部（ポートＡ）が割り当てられている。また、ＲＰ２には、実行用メモリ１１及び不揮発性メモリ１３の他の一部（Ｂ領域）と、Ｉ／Ｏポート１２の他の一部（ポートＢ）が割り当てられている。ＲＰ１からはＲＰ２に割り当てられたリソースへのアクセスが禁止され、ＲＰ２からはＲＰ１に割り当てられたリソースへのアクセスが禁止される。
【００３１】
なお、全てのリソースがいずれかのＲＰに排他的に割り当てられる必要はない。つまり、複数のＲＰによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション１０２及び安全制御アプリケーション１０３の双方からアクセスできる必要がある。よって、通常制御アプリケーション１０２が属するＲＰと安全制御アプリケーション１０３が属するＲＰによって、アクチュエータを制御するためのＩ／Ｏポートを共有するとよい。
【００３２】
図１に戻り説明を続ける。アプリケーション１０１〜１０３は、ＯＳ１００及びプロセッサ１０によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション１０１は、通常制御アプリケーション１０２の実行状況の監視と、安全制御アプリケーション１０３の実行状況の監視と、Ｉ／Ｏポート１２への入出力データの監視と、をプロセッサ１０に実行させるための命令コードを含む。さらに、安全監視アプリケーション１０１は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全監視アプリケーション１０１は、安全関連アプリケーションである。
【００３３】
また、通常制御アプリケーション１０２は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、通常制御アプリケーション１０２は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、通常制御アプリケーション１０２は、非安全関連アプリケーションである。
【００３４】
また、安全制御アプリケーション１０３は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、安全制御アプリケーション１０３は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全制御アプリケーション１０３は、安全関連アプリケーションである。
【００３５】
ＤＭＡコントローラ１４は、データのＤＭＡ転送を行う。ＤＭＡコントローラ１４は、転送先アドレスが設定される転送先アドレスレジスタと、転送元アドレスが設定される転送元アドレスレジスタと、データを転送した回数を数える転送カウンタと、ＤＭＡ転送を有効とするか無効とするかを示すイネーブルフラグが設定されるイネーブルレジスタとを有する。転送先アドレスレジスタと転送元アドレスレジスタのそれぞれには、実行用メモリ１１、Ｉ／Ｏポート１２、及び不揮発性メモリ１３等のデバイスのいずれかにおけるアドレスを指定することが可能である。なお、転送先アドレスレジスタと転送元アドレスレジスタのそれぞれには、同一のデバイスにおけるアドレスを指定することも可能である。
【００３６】
ＤＭＡコントローラ１４は、イネーブルフラグの値がアサートされているときにＤＭＡ転送を有効とし、イネーブルフラグの値がネゲートされているときにＤＭＡ転送を無効とする。すなわち、イネーブルフラグがネゲートされているときに、プロセッサ１０から、ＤＭＡコントローラ１４にデータの転送を指示されても、データの転送は行われない。イネーブルフラグがアサートされているときに、プロセッサ１０が、転送先アドレスレジスタと転送元アドレスレジスタのそれぞれを設定して、ＤＭＡコントローラ１４にデータの転送を指示することで、ＤＭＡコントローラ１４によって設定された転送元から転送先へのデータの転送が行われる。そして、ＤＭＡコントローラ１４は、データの転送が完了したとき、転送カウンタの値をカウントアップする。なお、ＤＭＡコントローラ１４が有する転送カウンタは、ＤＭＡ転送が行われる毎に、カウントダウンされるカウンタであってもよい。
【００３７】
リセット回路１５は、ＯＳ１００からの信号に基づき、マイクロコントローラ２０のリセットを行う。パーティションスケジューラ２１からリセット回路１５に定期的に送信信号を送信するようにし、リセット回路１５は、パーティションスケジューラ２１からの送信信号が途絶えた場合に、マイクロコントローラ２０をリセットする。例えば、パーティションスケジューラ２１は、後述するように、１Ｔｉｃｋごとに動作するタイミングで送信信号を送信する。また、ＯＳ１００で異常を検知した場合、又は、アプリケーション１０１〜１０３のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ２１がリセット回路１５にリセット信号を送信するようにして、それに応じて、リセット回路１５がマイクロコントローラ２０をリセットするようにしてもよい。このようにすることで、マイクロコントローラ２０に不具合が発生した場合に、マイクロコントローラ２０をリセットして復旧することができる。
【００３８】
続いて以下では、パーティションスケジューラ２１と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図４を用いて説明する。図４は、ＯＳ１００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ２１とタスク２４、２６、２８との関係を示す図である。
【００３９】
マイクロコントローラ２０は、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２、不揮発性メモリ１３、ＤＭＡコントローラ１４等を含む。なお、図４では、マイクロコントローラ２０の外部にリセット回路１５を備える構成を例示しているが、マイクロコントローラ２０の内部にリセット回路１５を含む構成としてもよい。
【００４０】
マイクロコントローラ２０には、外部のクロック源からのクロック信号が供給され、プロセッサ１０等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、１Ｔｉｃｋであるとして説明する。このため、プロセッサ１０によりＯＳ１００が実行されることで、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作すると共に、各ＴＰにおいて、タスクスケジューラ２３、２５、２７およびタスク（安全監視タスク２４、通常制御タスク２６、安全制御タスク２８）が１Ｔｉｃｋごとに動作する。
【００４１】
パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作し、ＴＰの切り替え（パーティション・スケジューリング）を行う。パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１は、選択したＴＰに関するタスクスケジューラの動作を開始させる。
【００４２】
パーティションスケジューラ２１によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ２１は、スケジューリングテーブル２２を参照し、ＴＰの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
【００４３】
スケジューリングテーブル２２は、ＴＰの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル２２は、例えば、実行用メモリ１１に予め格納されている。なお、スケジューリングテーブル２２は、少なくとも２つの異なるスケジューリングパターンを保持している。１つは、安全監視タスク２４による異常検知が行われていない場合（つまり通常時）に適用されるスケジューリングパターンである。もう１つは、安全監視タスク２４によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを“通常制御スケジューリングパターン”と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを“安全制御スケジューリングパターン”と呼ぶ。
【００４４】
図５Ａは、通常制御スケジューリングパターンの具体例を示している。図５Ａでは、通常制御タスク２６が属するＴＰ２が１サイクル時間の前半（Ｔ１）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ２）に割り当てられている。図５Ａのスケジューリングパターンによれば、通常制御タスク２６と安全監視タスク２４が繰り返しスケジューリングされる。
【００４５】
図５Ｂは、安全制御スケジューリングパターンの具体例を示している。図５Ｂでは、安全制御タスク２８が属するＴＰ３が１サイクル時間の前半（Ｔ３）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ４）に割り当てられている。図５Ｂのスケジューリングパターンによれば、安全制御タスク２８と安全監視タスク２４が繰り返しスケジューリングされる。
【００４６】
図４に戻り説明を続ける。タスクスケジューラ２３、２５、２７は、それぞれが属するＴＰ内でのタスクのスケジューリングを行う。各ＴＰ内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図４では、各ＴＰはそれぞれ１つのタスクのみを含むものとして図示しているが、１以上のタスクが含まれるようにしてもよい。例えば、通常制御用のＴＰ２内には、通常制御タスクＡ及び通常制御タスクＢの２つのタスクが含まれていてもよい。
【００４７】
安全監視タスク２４は、安全監視アプリケーション１０１の起動によって生成されるタスクである。図４の例では、安全監視タスク２４は、ＴＰ１及びＲＰ１に割り当てられている。安全監視タスク２４は、非安全関連アプリケーションである通常制御タスク２６の実行状況の監視と、安全関連アプリケーションである安全制御タスク２８の実行状況の監視と、Ｉ／Ｏポート１２の入出力データを監視する。安全監視タスク２４は、自身が属するＲＰ１に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全監視タスク２４は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００４８】
通常制御タスク２６は、通常制御アプリケーション１０２の起動によって生成されるタスクである。図４の例では、通常制御タスク２６は、ＴＰ２及びＲＰ２に割り当てられている。通常制御タスク２６は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。通常制御タスク２６は、自身が属するＲＰ２に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、通常制御タスク２６は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００４９】
安全制御タスク２８は、安全制御アプリケーション１０３の起動によって生成されるタスクである。図４の例では、安全制御タスク２８は、ＴＰ３及びＲＰ３に割り当てられている。安全制御タスク２８は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。安全制御タスク２８は、自身が属するＲＰ３に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全制御タスク２８は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００５０】
なお、各タスクからパーティションスケジューラ２１へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがＯＳ１００のシステムコール（サービスコール）を呼び出し、ＯＳ１００を介して、パーティションスケジューラ２１に結果を通知することができる。具体的には、例えば、タスク間通信を行うシステムコールを呼び出す。また、例えば、タスクの実行状況に関するフラグを実行用メモリ１１に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ２１がフラグの設定値に応じてタスクの実行状況を判断することもできる。
【００５１】
ＯＳ１００は、各タスク２４、２６、２８の実行に応じて、デバイス間でデータを転送（コピー）する場合に、ＤＭＡコントローラ１４によってデータをＤＭＡ転送する。なお、データをＤＭＡコントローラ１４によってＤＭＡ転送するか否かは、データの内容に応じてＯＳ１００が任意に決定するようにしてもよく、タスク２４、２６、２８からシステムコールを介してＯＳ１００に対して指定できるようにしてもよい。
【００５２】
また、ＯＳ１００は、ＤＭＡコントローラチェックルーチン２９を含んでいる。ＤＭＡコントローラチェックルーチン２９は、ＤＭＡコントローラ１４が正常であるか否かを確認するルーチンである。実施の形態１では、ＤＭＡコントローラ１４を利用していない場合においてＤＭＡコントローラ１４が正常であるか否かを確認する場合について説明する。具体的には、ＤＭＡコントローラチェックルーチン２９は、ＤＭＡコントローラ１４を利用していない場合には、ＤＭＡコントローラ１４が暴走せずに、停止していることを確認する。ＤＭＡコントローラ１４が利用されていない場合は、イネーブルフラグがネゲートされており、転送カウンタが進んでおらず、かつ、転送先レジスタに設定されている転送先のデータが変更されないことが期待される。そのため、ＤＭＡコントローラチェックルーチン２９は、イネーブルフラグがネゲートされており、転送カウンタが進んでおらず、かつ、転送先のデータが変更されないか否かを判定することによって、ＤＭＡコントローラ１４が正常であるか否かを確認する。
【００５３】
上述したように、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作し、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１が、選択したＴＰに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ２３、２５、２７が動作を開始することでタスクのスケジューリングが行われ、プロセッサ１０が、タスクスケジューラ２３、２５、２７によりスケジューリングされた順序に従って、ＴＰ内でのタスクを実行していく。これによって、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００５４】
続いて以下では、パーティションスケジューラ２１によるパーティション・スケジューリングについて、図６を用いて説明する。図６は、発明の実施の形態１にかかるパーティションスケジューラ２１の処理手順の具体例を示すフローチャートである。
【００５５】
なお、図６では、通常制御スケジューリングパターン（例えば図５Ａ）または安全制御スケジューリングパターン（例えば図５Ｂ）に従って、スケジューリングを実行する場合を例に説明する。すなわち、ＴＰ２またはＴＰ３に続く次のＴＰはＴＰ１であり、かつ、ＴＰ２での異常がＴＰ１で検知された場合に、ＴＰ１からの結果を受けて次に選択・決定されるＴＰはＴＰ３である場合を例に説明する。
【００５６】
ＯＳ１００は、１Ｔｉｃｋ経過するごとに（Ｓ１１）、パーティションスケジューラ２１を起動する（Ｓ１２）。パーティションスケジューラ２１は、スケジューリングパターンを参照して、ＴＰの切り替えタイミングか否かを判定する（Ｓ１３）。
【００５７】
ＴＰの切り替えタイミングでないと判定した場合（Ｓ１３でＮｏ）、パーティションスケジューラ２１は、同一のＴＰＸについての動作を継続させる。このため、ＴＰの切り替えタイミングとなるまでの間、Ｓ１１〜Ｓ１３、Ｓ１５、Ｓ１６の処理が繰り返される。ここで、変数ＸはＴＰの番号を示し、Ｘは１〜３のうちのいずれかの値となる。すなわち、通常制御スケジューリングパターンに従ってパーティション・スケジューリングを実施している場合は、安全制御用のＴＰ３を除いた、ＴＰ２及びＴＰ１のいずれかを動作させる。
【００５８】
一方、ＴＰの切り替えタイミングであると判定した場合（Ｓ１３でＹｅｓ）、パーティションスケジューラ２１は、ＴＰの切り替えを実行する（Ｓ１４）。このように、パーティションスケジューラ２１は、次にアクティブにするＴＰを変更する（Ｓ１３でＹｅｓ）場合には、さらに、切り替え前のＴＰに属するタスクからの通知結果に応じて、切り替え前のＴＰが正常であったか否かを判断する。判断の結果、切り替え前のＴＰが異常であった場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰＸを、安全制御スケジューリングパターンに従って、ＴＰ１及びＴＰ３のいずれかから選択・決定する。判断の結果、正常であった場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰＸを、通常制御スケジューリングパターンに従って、ＴＰ１及びＴＰ２のいずれかを選択・決定する。
【００５９】
パーティションスケジューラ２１は、現在アクティブになっているＴＰＸのタスクスケジューラを動作させる（Ｓ１５）。Ｓ１５で動作を開始したＴＰＸのタスクスケジューラは、ＴＰＸ内のタスクを優先度に応じて実行する（Ｓ１６）。
【００６０】
そして、１Ｔｉｃｋが経過すると（Ｓ１１）、パーティションスケジューラ２１が、再びＴＰのスケジューリングを開始する（Ｓ１２）。すなわち、パーティションスケジューラ２１は、スケジューリングパターンに従って、次の１Ｔｉｃｋの間にいずれのＴＰをアクティブにするかを選択・決定する。
【００６１】
図６で示した処理に関して、パーティション・スケジューリングの具体例を説明する。まず、図５Ａに例示した通常制御スケジューリングパターンに従って、Ｓ１５においてＴＰ２がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、Ｓ１５ではＴＰＸ＝ＴＰ２として開始し、続くＳ１６、Ｓ１１〜Ｓ１３にかけてもＴＰＸ＝ＴＰ２のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ２の状態が維持される。Ｓ１３でＹｅｓとなり、Ｓ１４でＴＰ２からＴＰ１へと変更された場合、続くＳ１５〜Ｓ１６、Ｓ１１〜Ｓ１３にかけてＴＰ１のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ１の状態が維持される。ＴＰ１がアクティブのときに、Ｓ１６で、ＴＰ２に関する実行状況（データ入出力等）が正常であると判定されていた場合には、次のＳ１４では、ＴＰＸ＝ＴＰ２となる（つまり、ＴＰ２から開始する通常制御スケジューリングパターンが継続される。）。一方で、Ｓ１６で、ＴＰ２に関する実行状況（データ入出力等）が異常であると判定されていた場合には、次のＳ１４で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンに切り替わる。）。
【００６２】
また、図５Ｂに例示した安全制御スケジューリングパターンに従って、Ｓ１５においてＴＰ３がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、Ｓ１５ではＴＰＸ＝ＴＰ３として開始し、続くＳ１６、Ｓ１１〜Ｓ１３にかけてもＴＰＸ＝ＴＰ３のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ３の状態が維持される。Ｓ１３でＹｅｓとなり、Ｓ１４でＴＰ３からＴＰ１へと変更された場合、続くＳ１５〜Ｓ１６、Ｓ１１〜Ｓ１３にかけてＴＰ１のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ１の状態が維持される。ＴＰ１がアクティブのときに、Ｓ１６で、ＴＰ３に関する実行状況（データ入出力等）が正常であると判定されていた場合には、次のＳ１４では、ＴＰＸ＝ＴＰ２とする（つまり、ＴＰ２から開始する通常制御スケジューリングパターンに切り替わる。）。一方で、Ｓ１６で、ＴＰ３に関する実行状況（データ入出力等）に異常があると判定されていた場合には、次のＳ１４で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンが継続される。）。
【００６３】
なお、上述の例では、スケジューリングパターンとして、３つのＴＰ（安全監視用のＴＰ１、通常制御用のＴＰ２、安全制御用のＴＰ３）のみを組み合わせた場合を例に説明したが、ＴＰ２のような通常制御用パーティションや、ＴＰ３のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、２つの通常制御用のＴＰ２及びＴＰ４と、安全監視用のＴＰ１と、２つの安全制御用のＴＰ３及びＴＰ５と、が存在し、これら５つのＴＰ（ＴＰ１〜ＴＰ５）を組み合わせてスケジューリングパターンを構成してもよい。この場合、Ｓ１４では、パーティションスケジューラ２１が、ＴＰＸに関する実行状況（データ入出力等）の異常状態の種類を判定し、その異常種類に応じて、安全制御用のＴＰ３またはＴＰ５のいずれかを選択すればよい。また、Ｓ１４では、通常制御用のＴＰ２またはＴＰ４のいずれかを選択すればよい。
【００６４】
上述したように、本実施の形態では、ＯＳ１００は、安全監視用のＴＰ１からの通知、または、各ＴＰからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ２１を備えている。パーティションスケジューラ２１は、各ＴＰにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。
【００６５】
独立に動作するパーティションスケジューラ２１が、全てのＴＰから結果通知を受ける構成とすることで、パーティションスケジューラ２１は、全てのＴＰに関する状況を一元的に把握することができる。このため、例えば、安全監視用のＴＰ１からの結果通知に応じて、パーティションスケジューラ２１が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ２１は、各ＴＰの状況を考慮した上で、正常状態にあるＴＰのみから次のパーティションを決定・選択することもできる。これによれば、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
【００６６】
続いて、ＤＭＡコントローラチェックルーチン２９の処理手順について、図７を用いて説明する。図７は、発明の実施の形態１にかかるＤＭＡコントローラチェックルーチン２９の処理手順の具体例を示すフローチャートである。ＯＳ１００がＤＭＡコントローラチェックルーチン２９を実行することによって、以下に説明する処理手順が実行されることになる。したがって、厳密には、以下に説明する処理は、ＯＳ１００を実行するプロセッサ１０によって実行されることになる。
【００６７】
ＯＳ１００は、ＤＭＡコントローラ１４のイネーブルフラグがネゲートされているか否かを確認する（Ｓ２０）。イネーブルフラグがネゲートされていない場合には、ＤＭＡコントローラ１４が、意図せずに有効になってしまっており、正常でないということを確認することができる。
【００６８】
また、ＯＳ１００は、ＤＭＡコントローラ１４の転送カウンタが進んでいないか否かを確認する（Ｓ２１）。具体的には、ＯＳ１００は、前回のＤＭＡコントローラチェックルーチン２９の実行時に読み出した転送カウンタの値を実行用メモリ１１に保存しておく。そして、ＯＳ１００は、今回のＤＭＡコントローラチェックルーチン２９の実行時に読み出した転送カウンタの値と、実行用メモリ１１に保存しておいた前回の転送カウンタの値とが同一か否かを判定する。そして、転送カウンタの値が同一でない場合には、ＤＭＡコントローラ１４が、意図せずにＤＭＡ転送を行ってしまっているか、もしくは、意図せずに転送カウンタを更新してしまっており、正常でないということを確認することができる。
【００６９】
また、ＯＳ１００は、転送先のデータに変更がないことを確認する（Ｓ２２）。具体的には、前回のＤＭＡコントローラチェックルーチン２９の実行時に読み出した転送先のデータを実行用メモリ１１に保存しておく。そして、今回のＤＭＡコントローラチェックルーチン２９において転送先アドレスレジスタに設定されている転送先からデータを読み出して、読み出した今回のデータと、実行用メモリ１１に保存しておいた前回のデータとが同一か否かを判定する。そして、データが同一でない場合には、ＤＭＡコントローラ１４が、意図せずにＤＭＡ転送を行ってしまっており、正常でないということを確認することができる。
【００７０】
そして、ＯＳ１００は、Ｓ２０〜２１の結果、イネーブルフラグがネゲートされており、転送カウンタが進んでおらず、かつ、転送先のデータが変更されていない場合には、ＤＭＡコントローラ１４が正常であると判定する。逆に、ＯＳ１００は、イネーブルフラグがアサートされているか、転送カウンタが進んでいるか、又は、転送先のデータが変更されている場合には、ＤＭＡコントローラ１４が正常でないと判定する。この場合、ＯＳ１００は、緊急停止ルーチンを実行する。
【００７１】
ここで、緊急停止ルーチンは、制御対象の安全を確保するために、制御対象を緊急停止させる処理となる。例えば、図５Ａに示す通常制御スケジューリングパターンに従って動作している場合、スケジューリングパターンを、図５Ｂに示す安全制御スケジューリングパターンに切り替えるようにしてもよい。また、次のパーティションスケジューラ２１の動作タイミングで、ＴＰを強制的にＴＰ３に切り替えるようにしてもよい。そして、ＴＰ３へ切り替えた後は、例えば、安全制御タスク２８によって制御対象を停止させる。また、ＯＳ１００は、直接、制御対象を停止させるように制御するようにしてもよい。
【００７２】
以上に説明したＤＭＡコントローラチェックルーチン２９は、ＯＳ１００に制御が移ったときにおける任意のタイミングで実行するようにしてよい。例えば、図８に示すように、ＴＰにおいてそのＴＰに属する全てのタスクの実行が終了してＯＳ１００に制御が移ったときに、残りのＴＰの時間の間、処理を実行するようにしてもよい。このようにすることで、ＴＰにおいて余った時間を有効利用することができる。
【００７３】
また、例えば、パーティションスケジューラ２１にＤＭＡコントローラチェックルーチン２９を有するようにして、パーティションスケジューラ２１の動作タイミングでＤＭＡコントローラチェックルーチン２９を実行するようにしてもよい。この場合に、さらに、パーティションスケジューラ２１が、ＴＰの切り替えを行うときに実行するようにしてもよい。
【００７４】
また、以上に説明したＤＭＡコントローラチェックルーチン２９では、イネーブルフラグがネゲートされているか、転送カウンタが進んでいないか、及び、転送先のデータが変更されていないかを判定することで、ＤＭＡコントローラ１４が正常であるか否かを判定するようにしているが、これらのうち、少なくとも１つを判定することによって、ＤＭＡコントローラ１４が正常であるか否かを判定するようにしてもよい。
【００７５】
以上に説明したように、本実施の形態１では、ＤＭＡコントローラを利用していない場合に、転送先のデータに変更がないか否かを判定するようにしている。これによれば、ＤＭＡコントローラ１４が、意図せずにＤＭＡ転送を行ってしまっており、正常でない場合を検出することができる。すなわち、ＤＭＡコントローラが正常であるか否かを確認することが可能となる。さらに、この判定に加えて、上述したように、転送カウンタがカウントされていないか否か、及び、ＤＭＡ転送が無効に設定されているか否かを判定するようにすることで、多面的にＤＭＡコントローラ１４の動作確認を行うことができる。これによれば、より正確に、ＤＭＡコントローラが正常であるか否かを確認することが可能となる。
【００７６】
＜発明の実施の形態２＞
続いて、本発明の実施の形態２にかかる安全制御装置について説明する。本実施の形態２にかかる安全制御装置の構成、パーティションスケジューラ２１とアプリケーション１０１〜１０３の起動により生成されるタスクとの関係、パーティションスケジューラ２１の処理手順については、実施の形態１と同様であるため、説明を省略する。以下、その他、実施の形態１と同様の内容については、適宜、その説明を省略する。
【００７７】
実施の形態１では、ＤＭＡコントローラ１４を利用していない場合においてＤＭＡコントローラ１４が正常であるか否かを確認する場合について説明したが、本実施の形態２では、ＤＭＡコントローラ１４を利用している場合においてＤＭＡコントローラ１４が正常であるか否かを確認する場合について説明する。ＤＭＡコントローラ１４を利用しているか否かは、ＯＳ１００が、ＤＭＡコントローラ１４を利用している状態か否かを内部的に保持して認識するようにすればよい。なお、この場合、厳密には、ＯＳ１００が保持する状態は、ＤＭＡコントローラ１４を利用している状態か否かを示す情報として実行用メモリ１１に格納されることになる。
【００７８】
具体的には、ＤＭＡコントローラチェックルーチン２９は、ＤＭＡコントローラ１４を利用している場合には、ＤＭＡコントローラ１４が予定通りの場所にデータ転送を実施していることを確認する。ＤＭＡコントローラ１４が利用されている場合には、イネーブルフラグがアサートされていること、並びに、データを転送したときに、転送元レジスタに設定されている転送元のデータが転送先レジスタに設定されている転送先に転送され、かつ転送カウンタが進むことが期待される。そのため、ＤＭＡコントローラチェックルーチン２９は、イネーブルフラグがアサートされており、転送カウンタが進んでおり、かつ、転送元のデータが転送先に転送されているか否かを確認することによって、ＤＭＡコントローラ１４が正常であるか否かを確認する。
【００７９】
続いて、ＤＭＡコントローラチェックルーチン２９の処理手順について、図９を用いて説明する。図９は、発明の実施の形態１にかかるＤＭＡコントローラチェックルーチン２９の処理手順の具体例を示すフローチャートである。ＯＳ１００がＤＭＡコントローラチェックルーチン２９を実行することによって、以下に説明する処理手順が実行されることになる。したがって、厳密には、以下に説明する処理は、ＯＳ１００を実行するプロセッサ１０によって実行されることになる。
【００８０】
ＯＳ１００は、ＤＭＡコントローラ１４のイネーブルフラグがアサートされているか否かを確認する（Ｓ３０）。イネーブルフラグがアサートされていない場合には、ＤＭＡコントローラ１４が、意図せずに無効になってしまっており、正常でないということを確認することができる。
【００８１】
ＯＳ１００は、ＤＭＡコントローラ１４によって、安全関連のタスク２４、２８で利用されていないアドレスを利用してデータを転送する（Ｓ３１）。例えば、転送元のアドレスと転送先のアドレスのそれぞれには、予め定めておいた、安全関連のタスク２４、２８で利用されない固定アドレスを設定するようにする。また、転送するデータ（転送元アドレスに設定するデータ）の値は、例えば、転送する毎に所定の２つの値（例えば、０ｘＡＡ、０ｘＢＢ）で交互に変更するようにしてもよく、所定の値から転送する毎にカウントアップした値（例えば、０ｘ０１からカウントアップした値）としてもよく、所定の値から転送する毎にカウントダウンした値（例えば、０ｘｆｆからカウンタダウンした値）としてもよい。
【００８２】
なお、ここでは、データ転送を行うアドレスを、安全関連のタスク２４、２８で利用されていないアドレス（ＲＰ１、ＲＰ３以外のアドレス）としたが、これに限られない。データ転送を行うアドレスを、安全関連のタスク２４、２８で利用されているアドレスとしてもよい。しかしながら、好ましくは、安全関連のタスク２４、２８で利用されていないアドレスとすることで、安全関連のタスク２４、２８が利用するデータを破壊してしまい、安全関連のタスク２４、２８が期待しない動作をしてしまうことを防止することができる。これによれば、安全制御装置１による制御対象の制御における安全性を、より向上することができる。なお、いずれかのタスク２４、２６、２８で利用されているアドレス（ＲＰ１〜ＲＰ３のアドレス）を利用する場合には、ＤＭＡコントローラチェックルーチン２９の開始前に、そこに格納されているデータを実行用メモリ１１の他の領域にバックアップしておき、ＤＭＡコントローラチェックルーチン２９の終了後に復元するようにすればよい。
【００８３】
また、転送元のアドレスと転送先のアドレスのそれぞれは、固定アドレスとしなくてもよい。例えば、転送元のアドレスが指定されるデバイスと、転送先のアドレスが指定されるデバイスは、各デバイス（実行用メモリ１１、Ｉ／Ｏポート１２、及び不揮発性メモリ１３等）からとり得る組み合わせにおいて、転送する毎に順番に選択していくようにしてもよい。また、１つのデバイス内で指定されるアドレスについても、数パターンを用意するようにしてもよい。
【００８４】
そして、ＯＳ１００は、ＤＭＡコントローラ１４の転送カウンタが１つ進んでいるか否かを確認する（Ｓ３２）。転送カウンタが転送する毎にカウントアップされるカウンタである場合は、１つカウントアップされていることを確認し、転送カウンタが転送する毎にカウントダウンされるカウンタである場合は、１つカウントダウンされていることを確認する。具体的には、ＯＳ１００は、前回のＤＭＡコントローラチェックルーチン２９の実行時に読み出した転送カウンタの値を実行用メモリ１１に保存しておく。そして、ＯＳ１００は、今回のＤＭＡコントローラチェックルーチン２９の実行時に読み出した転送カウンタの値が、実行用メモリ１１に保存しておいた前回の転送カウンタの値よりも１つ進んでいるか否かを判定する。転送カウンタの値が１つ進んでいない場合には、ＤＭＡコントローラ１４が、期待通りにＤＭＡ転送を行っていないか、ＤＭＡ転送を行ったが期待通りに転送カウンタの値を進めておらず、正常でないということを確認することができる。なお、前回の転送カウンタの値として、Ｓ３１における転送を実行する前の転送カウンタの値を実行用メモリ１１に保存しておくようにしてもよい。
【００８５】
ＯＳ１００は、上述したテストパターンが異常なく終了したか否かを判定する（Ｓ３３）。具体的には、ＯＳ１００は、Ｓ３１〜３２の結果、イネーブルフラグがアサートされており、転送先にデータが正常に転送されており、かつ、転送カウンタが１つ進んでいる場合には、テストパターンが異常なく終了したと判定する（Ｓ３３でＹｅｓ）。なお、転送先にデータが正常に転送されているか否かは、転送元アドレスに設定したデータが、転送先アドレスから読み出したデータと一致するか否かによって判定する。すなわち、転送元アドレスに設定したデータが、転送先アドレスから読み出したデータと一致する場合に、転送先にデータが正常に転送されていることになる。
【００８６】
テストパターンが異常なく終了したと判定した場合、ＯＳ１００は、ＤＭＡによるデータの転送を開始する（Ｓ３４）。すなわち、ＯＳ１００は、それ以降にデータを転送する場合に、ＤＭＡコントローラ１４を利用してデータをＤＭＡ転送する。
【００８７】
逆に、ＯＳ１００は、イネーブルフラグがアサートされていないか、転送先にデータが正常に転送されていないか、又は、転送カウンタが１つ進んでいない場合には、テストパターンが異常なく終了していないと判定する（Ｓ３３でＮｏ）。テストパターンが異常なく終了していないと判定した場合、ＯＳ１００は、ＤＭＡによるデータの転送を停止する（Ｓ３５）。すなわち、ＯＳ１００は、それ以降にデータを転送する場合に、ＤＭＡコントローラ１４を利用せずに、データを転送する。この場合には、プロセッサ１０によって、転送元からデータを読み出して、読み出したデータを転送先に格納するようにすればよい。また、この場合には、ＯＳ１００は、ＤＭＡコントローラ１４を利用していない状態に遷移したと認識して、上述した実施の形態２にかかるＤＭＡコントローラチェックルーチン２９の処理手順に代えて、実施の形態１にかかるＤＭＡコントローラチェックルーチン２９の処理手順を実行するようにしてもよい。また、この場合には、実施の形態１で説明したように、緊急停止ルーチンを実行するようにしてもよい。
【００８８】
以上に説明したＤＭＡコントローラチェックルーチン２９では、イネーブルフラグがアサートされているか、転送先にデータが正常に転送されているか、及び、転送カウンタが１つ進んでいるかを判定することで、ＤＭＡコントローラ１４が正常であるか否かを判定するようにしているが、これらのうち、少なくとも１つを判定することによって、ＤＭＡコントローラ１４が正常であるか否かを判定するようにしてもよい。
【００８９】
以上に説明したように、本実施の形態２では、ＤＭＡコントローラを利用している場合に、ＤＭＡコントローラによってデータをＤＭＡ転送して、ＤＭＡ転送において転送された転送元のデータと、ＤＭＡ転送において転送された転送先のデータとが一致するか否かを判定するようにしている。これによれば、ＤＭＡコントローラ１４が、意図した通りにＤＭＡ転送を行なうことができておらず、正常でない場合を検出することができる。すなわち、ＤＭＡコントローラが正常であるか否かを確認することが可能となる。この判定に加えて、上述したように、転送カウンタが進んでいるか否か、及び、ＤＭＡ転送が有効に設定されているか否かを判定するようにすることで、多面的にＤＭＡコントローラ１４の動作確認を行うことができる。そのため、より正確に、ＤＭＡコントローラが正常であるか否かを確認することが可能となる。
【００９０】
＜発明の実施の形態３＞
続いて、本発明の実施の形態３にかかる安全制御装置について説明する。本実施の形態２にかかる安全制御装置の構成は、図１を参照して説明した実施の形態１にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ３０と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図１０を用いて説明する。図１０は、本実施の形態２にかかるパーティションスケジューラ３０とタスク２４、２６、２８との関係を示す図である。以下、実施の形態１と同様の内容については、適宜、その説明を省略する。
【００９１】
図１０に示すように、本実施の形態３は、実施の形態１と比較して、パーティションスケジューラ２１に代えてパーティションスケジューラ３０を有し、ＤＭＡコントローラチェックルーチン２９がパーティションスケジューラ３０に含まれる点が異なる。すなわち、本実施の形態３にかかるパーティションスケジューラ３０は、実施の形態２にかかるパーティションスケジューラ２１と比較して、ＤＭＡコントローラチェックルーチン２９を実行する点が異なる。したがって、本実施の形態３では、ＤＭＡコントローラ１４を利用している場合においてＤＭＡコントローラ１４が正常であるか否かを確認する場合について説明する。
【００９２】
続いて、パーティションスケジューラ３０によるパーティション・スケジューリングについて、図１１を用いて説明する。図１１は、発明の実施の形態３にかかるパーティションスケジューラ３０の処理手順の具体例を示すフローチャートである。なお、図６を参照して説明した、実施の形態１にかかる処理手順と同様の処理手順については、同一の符号を付し、説明を省略する。本実施の形態３にかかる処理手順では、実施の形態１にかかる処理手順と比較して、Ｓ１３でＹｅｓとなったときにＳ１７を実行して、その次にＳ１４を実行する点が異なる。
【００９３】
ＴＰの切り替えタイミングであると判定した場合（Ｓ１３でＹｅｓ）、パーティションスケジューラ３０は、切り替え先のＴＰで利用するデバイスについて、ＤＭＡコントローラチェックルーチン２９を実行する（Ｓ１７）。そして、パーティションスケジューラ３０は、ＤＭＡコントローラチェックルーチン２９を実行した後に、ＴＰの切り替えを実行する（Ｓ１４）。
【００９４】
ＤＭＡコントローラチェックルーチン２９における処理手順については、ＯＳ１００のパーティションスケジューラ３０が実行すること以外は、実施の形態２において図９を参照して説明した処理と同様となるため、その説明を省略する。ここで、本実施の形態３では、上述したように切り替え先のＴＰで利用するデバイスについて、ＤＭＡコントローラチェックルーチン２９を実行する。具体的には、パーティションスケジューラ３０は、切り替え先のＴＰに属するタスクを実行することによって、データのＤＭＡ転送が行われるデバイス間で、上述した処理手順を実行する。例えば、ＴＰ（又はタスク）毎に、そのＴＰでＤＭＡ転送が行われるデバイスを示す情報を実行用メモリ１１に格納しておき、パーティションスケジューラ３０が、その情報を参照することで、切り替え先のＴＰで利用するデバイスを認識可能とすればよい。
【００９５】
例えば、切り替え先のＴＰ２に属する通常制御タスク２６が処理を実行することによって、実行用メモリ１１からＩ／Ｏポート１２に対してデータをＤＭＡ転送する場合、パーティションスケジューラ３０は、ＤＭＡコントローラチェックルーチン２９において、実行用メモリ１１からＩ／Ｏポート１２に対してデータを転送する（Ｓ３１）。また、例えば、切り替え先のＴＰ１に属する安全監視タスク２４が処理を実行することによって、実行用メモリ１１のあるアドレスから実行用メモリ１１の他のアドレスに対してデータをＤＭＡ転送する場合、パーティションスケジューラ３０は、ＤＭＡコントローラチェックルーチン２９において、実行用メモリ１１のあるアドレスから実行用メモリ１１の他のアドレスに対してデータを転送する（Ｓ３１）。このようにすることで、直近に動作するタスクによる使用状況で、ＤＭＡコントローラ１４の動作確認を行うことができる。そのため、特定のデバイス間でのＤＭＡ転送でＤＭＡコントローラ１４に異常が発生してしまう場合であっても、そのＤＭＡ転送が行われる前に、より早く異常を検出することが可能となる。これによれば、信頼性をより向上することができる。
【００９６】
また、上述した説明では、ＤＭＡコントローラ１４が正常でないと判定した場合に、ＤＭＡによるデータの転送を抑止する（Ｓ３５）ようにしているが、実施の形態１において説明したように切り替え先のＴＰを判定結果に応じて選択することで実現するようにしてもよい。例えば、２つの通常制御用のＴＰ２及びＴＰ４を用意して、一方のＴＰ２ではＤＭＡ転送を使用してデータを転送する通常制御タスクを動作させ、他方のＴＰ４ではＤＭＡ転送を使用せずにデータを転送する通常制御タスクを動作させるようにする。また、スケジューリングパターンにおいて、通常制御タスクが属するＴＰがアクティブとなる期間を、ＴＰ２及びＴＰ４のいずれかを選択的にアクティブにするように定義する。そして、パーティションスケジューラ３０は、ＤＭＡコントローラチェックルーチン２９の実行（Ｓ１７）において、ＤＭＡコントローラ１４が正常であると判定した場合には、次にアクティブにするＴＰとしてＴＰ２を選択して、ＴＰ２への切り替えを行う（Ｓ１４）。逆に、パーティションスケジューラ３０は、ＤＭＡコントローラチェックルーチン２９の実行（Ｓ１７）において、ＤＭＡコントローラ１４が正常でないと判定した場合には、次にアクティブにするＴＰとしてＴＰ４を選択して、ＴＰ４への切り替えを行う（Ｓ１４）。以上に説明したようにすることで、ＤＭＡによるデータの転送を抑止するようにしてもよい。なお、安全監視タスク及安全制御タスクについても同様であるため、説明を省略する。
【００９７】
以上に説明したように、本実施の形態３では、ＴＰを切り替えるときに、切り替え後のＴＰにおけるタスクの実行に応じて行われるＤＭＡ転送で転送元となるデバイスから、そのＤＭＡ転送で転送先となるデバイスへ、データをＤＭＡ転送することによって、ＤＭＡコントローラが正常であるか否かを判定するようにしている。これによれば、より早く異常を検出することが可能となり、信頼性をより向上することができる。
【００９８】
＜発明の他の実施の形態＞
本実施の形態では、ＴＰのそれぞれに属するタスクが、それぞれ安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８に限られず、その他の制御対象の制御に関する任意の処理を実行するタスクを有するようにしてもよい。
【００９９】
例えば、図１２に示すようなタスク３１〜３３を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション１０１〜１０３に代えて、タスク３１〜３３に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
【０１００】
監視制御タスク３１は、制御対象を制御する。具体的には、監視制御タスク３１は、通常制御タスク３２及び安全制御タスク３３からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク３２は、制御対象に通常の機能・動作を行わせるための制御計算を行う。具体的には、通常制御タスク３２は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク３２は、算出した指令値を監視制御タスク３１に出力する。安全制御タスク３３は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク３３は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク３３は、算出した指令値を監視制御タスク３１に出力する。監視制御タスク３１は、通常制御タスク３２又は安全制御タスク３３から出力された指令値に基づいてアクチュエータを制御する。
【０１０１】
さらに、監視制御タスク３１は、制御対象のセンサから、センサ値を取得する。監視制御タスク３１は、取得したセンサ値を通常制御タスク３２及び安全制御タスク３３に出力する。通常制御タスク３２及び安全制御タスク３３のそれぞれは、監視制御タスク３１から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。なお、各タスク３１〜３３間での指令値及びセンサ値の受け渡しは、タスク間通信で行ってもよく、実行用メモリ１１に設けられた、各タスク３１〜３３で共有してアクセス可能な領域である共有メモリを介して行うようにしてもよい。
【０１０２】
また、その他に、例えば、図１３に示すようなタスク３４〜３６を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション１０１〜１０３に代えて、タスク３４〜３６に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
【０１０３】
監視タスク３４は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク３４は、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク３４は、取得したセンサ値をＨＭＩ（Human Machine Interface）タスク３６に出力する。
【０１０４】
ＨＭＩタスク３６は、監視タスク３４から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。ＨＭＩタスク３６は、算出した指令値を制御タスク３５に出力する。制御タスク３５は、ＨＭＩタスク３６から出力された指令値に基づいて、アクチュエータを制御する。なお、各タスク３４〜３６間での指令値及びセンサ値の受け渡しは、タスク間通信で行ってもよく、実行用メモリ１１に設けられた、各タスク３４〜３６で共有してアクセス可能な領域である共有メモリを介して行うようにしてもよい。
【０１０５】
これによれば、搭乗者の操作に応じて制御対象が制御されるというＨＭＩを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態１〜３及び図１２によって説明した例についても同様のことが言える。具体的には、安全監視タスク２４又は監視制御タスク３１が取得したセンサ値に応じて、通常制御タスク２６及び安全制御タスク２８、もしくは、通常制御タスク３２及び安全制御タスク３３が同様の制御をすることで、ＨＭＩを実現することが可能である。また、本実施の形態１〜３によれば、ＤＭＡコントローラが正常であるか否かを確認することが可能となるため、より信頼性を向上した制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。
【０１０６】
なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。
【０１０７】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【０１０８】
本実施の形態では、ＯＳが、ＴＰ１〜ＴＰ３を有する場合について例示したが、ＴＰの種類及び数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
【０１０９】
本実施の形態では、タスクの数が３つである場合について例示したが、タスクの数は、これに限られない。例えば、本実施の形態では、ＴＰがＴＰ１〜ＴＰ３の３つである場合について例示したが、ＴＰの数を３つ以外の数とし、それぞれのＴＰが１つ以上の任意の数のタスクを有するようにしてもよい。
【０１１０】
本実施の形態では、タイム・パーティショニングを採用したマルチタスクＯＳについて例示したが、これに限られない。タイム・パーティショニングを採用していないマルチタスクＯＳに適用することもできる。
【符号の説明】
【０１１１】
１  安全制御装置
１０  プロセッサ
１１  実行用メモリ
１２  Ｉ／Ｏポート
１３  不揮発性メモリ
１４、１６  ＭＭＵ
１５  リセット回路
１７  ＲＯＭ
２０  マイクロコントローラ
２１、３０  パーティションスケジューラ
２２  スケジューリングテーブル
２３、２５、２７  タスクスケジューラ
２４  安全監視タスク
２６、３２  通常制御タスク
２８、３３  安全制御タスク
２９  ＤＭＡコントローラチェックルーチン
３１  監視制御タスク
３４  監視タスク
３５  制御タスク
３６  ＨＭＩタスク
１００  オペレーティングシステム
１０１  安全監視アプリケーション
１０２  通常制御アプリケーション
１０３  安全制御アプリケーション
【図１】
0006004057.tif 000002
【図２】
0006004057.tif 000003
【図３】
0006004057.tif 000004
【図４】
0006004057.tif 000005
【図５Ａ】
0006004057.tif 000006
【図５Ｂ】
0006004057.tif 000007
【図６】
0006004057.tif 000008
【図７】
0006004057.tif 000009
【図８】
0006004057.tif 000010
【図９】
0006004057.tif 000011
【図１０】
0006004057.tif 000012
【図１１】
0006004057.tif 000013
【図１２】
0006004057.tif 000014
【図１３】
0006004057.tif 000015