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