(57)【要約】 【課題】より高性能なイベント管理装置およびイベント管理方法、ならびに、そのようなイベント管理装置を用いたモータシステムを提供する。【解決手段】実施形態によれば、複数のトリガのそれぞれと、タスク開始ポインタと、が互いに関連付けられたイベントキューレジスタと、前記複数のトリガのうちのいずれかが生成されると、生成されたトリガと関連付けられたタスク開始ポインタに基づいてタスクを実行するタスク実行制御部と、を備え、前記複数のトリガのうちの少なくとも１つは、イベント管理装置内で生成される自己トリガである、イベント管理装置が提供される。【選択図】図６
2015136259.tif 000002
【特許請求の範囲】
【請求項１】
複数のトリガのそれぞれと、タスク開始ポインタと、が互いに関連付けられたイベントキューレジスタと、
前記複数のトリガのうちのいずれかが生成されると、生成されたトリガと関連付けられたタスク開始ポインタに基づいてタスクを実行するタスク実行制御部と、を備え、
前記複数のトリガのうちの少なくとも１つは、イベント管理装置内で生成される自己トリガである、イベント管理装置。
【請求項２】
前記タスク実行制御部が第１のタスクを実行することにより、前記自己トリガが生成される、請求項１に記載のイベント管理装置。
【請求項３】
前記複数のトリガのうちの第１のトリガに関連付けられたタスク開始ポインタに基づいてタスクが実行されている際に、さらに前記第１のトリガが生成されると、多重イベントが発生したことを示す値が設定される原因レジスタを備える、請求項１に記載のイベント管理装置。
【請求項４】
モータと、
イベント管理装置と、
前記イベント管理装置の制御に応じてモータを制御するモータ制御部と、を備え、
前記イベント管理装置は、
複数のトリガのそれぞれと、タスク開始ポインタと、が互いに関連付けられたイベントキューレジスタと、
前記複数のトリガのうちのいずれかが生成されると、生成されたトリガと関連付けられたタスク開始ポインタに基づいてタスクを実行するタスク実行制御部と、を有し、
前記複数のトリガのうちの少なくとも１つは、前記イベント管理装置内で生成される自己トリガである、モータシステム。
【請求項５】
複数のトリガのそれぞれと、タスク開始ポインタと、が互いに関連付けられたイベントキューレジスタを備えるイベント管理装置におけるイベント管理方法であって、
前記複数のトリガのうちのいずれかが生成されると、生成されたトリガと関連付けられたタスク開始ポインタに基づいてタスクを実行するステップを備え、
前記複数のトリガのうちの少なくとも１つは、前記イベント管理装置内で生成される自己トリガである、イベント管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、イベント管理装置、イベント管理方法およびモータシステムに関する。
【背景技術】
【０００２】
一般に、イベント管理装置はＣＰＵのみにより起動制御されることが想定されている。ＣＰＵによる起動制御では処理実行のオーバーヘッドなどが発生するため、モータ制御処理などにおける厳しいハードリアルタイム性能要求を満たせないおそれがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−７３２１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
より高性能なイベント管理装置およびイベント管理方法、ならびに、そのようなイベント管理装置を用いたモータシステムを提供する。
【課題を解決するための手段】
【０００５】
実施形態によれば、複数のトリガのそれぞれと、タスク開始ポインタと、が互いに関連付けられたイベントキューレジスタと、前記複数のトリガのうちのいずれかが生成されると、生成されたトリガと関連付けられたタスク開始ポインタに基づいてタスクを実行するタスク実行制御部と、を備え、前記複数のトリガのうちの少なくとも１つは、イベント管理装置内で生成される自己トリガである、イベント管理装置が提供される。
【図面の簡単な説明】
【０００６】
【図１】本実施形態に係るイベント管理装置１００を用いたモータシステムの概略構成を示すブロック図。
【図２】トリガおよびタスクの一例を説明する図。
【図３】トリガおよびタスクの別の例を説明する図。
【図４】トリガおよびタスクのまた別の例を説明する図。
【図５】トリガおよびタスクのまた別の例を説明する図。
【図６】イベント管理装置１００の概略構成を示すブロック図。
【図７】タスクスケジュールテーブル４２の構造の一例を示す図。
【図８】イベント管理装置１００の処理動作の一例を示すフローチャート。
【図９】Ｓ１後の各レジスタの値を模式的に示す図。
【図１０】Ｓ３後の各レジスタの値を模式的に示す図。
【図１１】Ｓ４後の各レジスタの値を模式的に示す図。
【図１２】Ｓ８後の各レジスタの値を模式的に示す図。
【図１３】図３に示す自己トリガによるイベント管理装置１００の処理動作の具体例を説明する図。
【図１４】図３に示す自己トリガによるイベント管理装置１００の処理動作の別の具体例を説明する図。
【図１５】イベント管理装置１００の処理動作の別の例を示すフローチャート。
【図１６】Ｓ３後の各レジスタの値を模式的に示す図。
【図１７】Ｓ８後の各レジスタの値を模式的に示す図。
【図１８】多重イベントトリガ要求発生時の各レジスタの値を模式的に示す図。
【図１９】多重イベント受付状態での各レジスタの値を模式的に示す図。
【発明を実施するための形態】
【０００７】
以下、実施形態について、図面を参照しながら具体的に説明する。本実施形態に係るイベント管理装置１００は、一例としてモータを制御するために用いられる。
【０００８】
図１は、本実施形態に係るイベント管理装置１００を用いたモータシステムの概略を示すブロック図である。モータシステムは、ＣＰＵ（Central Processing Unit）２と、イベント管理装置１００と、ＰＭＤ（Programmable Motor Driver）３と、インバータ４と、モータ５と、電流センサ６ａと、ＡＤＣ（Analog to Digital Converter）６ｂと、回転角センサ７ａと、角度変換器７ｂと、を備えている。ＣＰＵ２、イベント管理装置１００、ＰＭＤ３、ＡＤＣ６ｂおよび角度変換器７ｂは、ＭＣＵ（Micro Control Unit）１上に搭載されてもよい。
【０００９】
ＣＰＵ２はイベント管理装置１００を制御する。図示していないが、ＣＰＵ２が複数のイベント管理装置１００を制御してもよい。イベント管理装置１００はベクトルエンジンとも呼ばれ、起動イベントトリガ（以下単にトリガという）に同期してタスクを実行する。ＰＭＤ３は、イベント管理装置１００の制御に応じて、インバータ４を制御するための制御信号を生成する。インバータ４は制御信号に応じてモータ５を駆動する。電流・電圧センサ６ａはモータ５におけるアナログ値（例えばモータ５に流れる電流や各部の電圧）を検出する。ＡＤＣ６ｂは検出されたアナログ値に対してＡＤ変換を行ってデジタル信号を得る。回転角センサ７ａはモータ５の回転角を検出する。角度変換器７ｂは検出された回転角を角度に変換する。なお、ＰＭＤ３およびインバータ４はモータ５を制御するものであるため、両者を合わせてモータ制御部とも呼ぶ。
【００１０】
イベント管理装置１００には複数種類のトリガが入力される。トリガの１つはＣＰＵ２によって生成されるＣＰＵトリガであってもよい。また、トリガの１つはイベント管理装置１００自身が生成する自己トリガであってもよい。さらに、トリガの１つは、ＣＰＵ２およびイベント管理装置１００以外のユニットが生成する外部トリガであってもよい。外部トリガは、例えば、ＰＭＤ３を周期的に動作させるためのキャリア信号（三角波信号、鋸波信号）に基づくトリガ、ＡＤ変換処理が完了したことに同期してＡＤＣ６ｂが生成するＡＤＣトリガ、回転角センサ７ａにより検出されたモータ５の回転角に基づいて角度変換器７ｂが生成する回転角トリガなどがある。
【００１１】
仮にＣＰＵ２しかトリガを生成できないとすると、ハードリアルタイム性能要求が厳しいモータ５の制御において、処理実行のオーバーヘッドにより性能要求を満たせなかったり、ＣＰＵ２からのオフロード処理において自走制御が困難であったりする。そこで本実施形態では、ＣＰＵトリガだけでなく、自己トリガや外部トリガに同期してタスクを実行可能なイベント管理装置１００を用いる。
【００１２】
以下、トリガおよびタスクの具体例を説明する。  
図２は、ＣＰＵトリガおよびタスクの例を説明する図である。同図は「ベクトル制御」と呼ばれるモータ制御に適用される。ＣＰＵ２は、ＣＰＵトリガとして、起動コマンドをイベント管理装置１００に発行する。このＣＰＵトリガに応じて、イベント管理装置１００は予め定めた出力スケジュールの結果に基づいてＰＭＤ３にデータをセットする。そして、ＰＭＤ３は、インバータ４を介してモータ５を駆動するとともに、ＡＤＣ６ｂにＰＭＤトリガを発行する。
【００１３】
このＰＭＤトリガに応じて、電流・電圧センサ６ａおよびＡＤＣ６ｂは、モータ５におけるアナログ値をデジタル信号に変換する。このＡＤ変換処理が完了すると、ＡＤＣ６ｂはイベント管理装置１００にＡＤＣトリガ（ＡＤＣ割込み）を発行する。このＡＤＣトリガに応じて、イベント管理装置１００は予め定めた入力スケジュールに基づいてデジタル信号を取得し、割込みとしてＣＰＵに転送する。このような処理が繰り返される。
【００１４】
図３は、自己トリガおよびタスクの例を説明する図である。図３では、イベント管理装置１００自身が生成する自己トリガについて説明している。自己トリガは、例えば分割されたタスクスケジュールの制御に用いられる。自己トリガによる具体的な動作例については後述する。
【００１５】
図４は、外部トリガおよびタスクの例を説明する図である。同図は、モータ５の回転角に基づくトリガにおける処理を示しており、「矩形波駆動」と呼ばれるモータ制御に適用される。回転角センサ７ａおよび角度変換器７ｂは、例えばモータ回転角６０度ごとに、回転角トリガをイベント管理装置１００に発行する。この回転角トリガに応じて、イベント管理装置１００は、例えばＡＤＣ６ｂからＡＤ変換データを直接取り込んで、タスクスケジュール制御処理を行う。
【００１６】
図５は、外部トリガおよびタスクの例を説明する図である。同図は、ＰＭＤ３を周期的に動作させるためのキャリア信号に基づくトリガにおける処理を示しており、「三角波／過変調駆動」と呼ばれるモータ制御に適用される。イベント管理装置１００はＰＭＤ３に所定周期の三角波（ＰＷＭ波形）をキャリア信号として供給する。そして、ＰＭＤ３は三角波に同期して（例えば三角波の山（ピーク）と谷（ボトム）の半周期ごとに）、イベント管理装置１００にトリガを発行する。このトリガに応じて、イベント管理装置１００は、例えばＡＤＣ６ｂからＡＤ変換データを、回転角センサ７ａおよび角度変換器７ｂからモータ５の回転角情報をそれぞれ直接取り込んで、タスクスケジュール制御処理を行う。
【００１７】
続いて、イベント管理装置１００について説明する。図６は、イベント管理装置１００の概略を示すブロック図である。イベント管理装置１００は、ＣＰＵトリガレジスタ（ＣＰＵ  ＴＲＧ）１１と、自己トリガレジスタ（ＳＥＬＦ  ＴＲＧ）１２と、イベントコントローラ１３と、タスクスケジューラ１４と、タスク実行制御部１５と、命令メモリ１６とを備えている。
【００１８】
なお、図６の周辺モジュール８は、図１のＰＭＤ３、ＡＤＣ６ｂおよび回転角センサ７ａなどイベント管理装置１００に接続されているモジュールの総称であり、外部トリガを生成可能な任意のモジュールである。以下では、トリガとして１０種類のトリガＴＲＧ０〜ＴＲＧ９が生成される例を説明する。ここでは、トリガＴＲＧ０がＣＰＵトリガであり、トリガＴＲＧ１が自己トリガであり、トリガＴＲＧ２〜９が外部トリガとする。
【００１９】
命令メモリ１６には、スケジュール実行の最小単位であるタスクが、タスクコードとして格納されている。本実施形態では、３２個のタスクコードＴＡＳＫ０〜ＴＡＳＫ３１が命令メモリ１６に格納されているとする。これらタスクコードの少なくとも１つが、自己トリガを生成するタスクであってもよい。  
ＣＰＵトリガレジスタ１１には、ＣＰＵトリガが設定される。  自己トリガレジスタ１２には、自己トリガが設定される。
【００２０】
イベントコントローラ１３は、どのトリガが生成されたかに応じて、実行すべきタスクを指定する。イベントコントローラ１３は、起動イベント選択部２０と、イベントキュー３０とを有する。  
起動イベント選択部２０は、選択レジスタ（ＳＥＬ）２１と、マルチプレクサ２２とを有する。選択レジスタ２１には、複数のトリガが同時に生成された場合に、いずれのトリガを優先して処理すべきかを示す値が設定される。マルチプレクサ２２は、複数のトリガが同時に生成された場合に、選択レジスタ２１に設定された値に基づき、トリガを１つずつ順に選択する。なお、起動イベント選択部２０は省略してもよい。
【００２１】
イベントキュー３０は、イベントキューレジスタ（ＥＶＴＱ）３１と、マルチプレクサ３２と、制御レジスタ（ＣＮＴ）３３と、原因レジスタ（ＣＡＵＳＥ）３４と、状態レジスタ（ＳＴＡＴＵＳ）３５と、イベント制御部３６とを有する。
【００２２】
イベントキューレジスタ３１には、複数のトリガＴＲＧ０〜ＴＲＧ９のそれぞれと、タスク開始ポインタＰＴＲとが互いに関連付けられている。本実施形態のイベントキューレジスタ３１には、１０種類のトリガに関連付けられた１０個のタスク開始ポインタＰＴＲが設定される。タスク開始ポインタＰＴＲは、タスクコードＴＡＳＫ０〜ＴＡＳＫ３１とそれぞれ対応する０〜３１のいずれかの値に設定される。以下では、トリガＴＲＧｋ（ｋ＝０〜９）にタスク開始ポインタＰＴＲｋが関連付けられているものとする。
【００２３】
マルチプレクサ３２は、イベント制御部３６の制御に基づいて、タスク開始ポインタＰＴＲ０〜ＰＴＲ９のうちの１つを選択する。選択されたタスク開始ポインタはタスクスケジューラ１４に出力される。
【００２４】
制御レジスタ３３は各トリガに対応して設けられ、イネーブル信号が設定される。例えば、制御レジスタ３３が“０”に設定されていれば、対応するトリガＴＲＧｋが生成されてもタスクの実行が禁止されることを示す。一方、制御レジスタ３３が“１”に設定されていれば、対応するトリガＴＲＧｋが生成された場合にタスクの実行が許可されることを示す。
【００２５】
原因レジスタ３４は各トリガに対応して設けられ、多重イベントトリガ要求の有無が設定される。多重イベントトリガ要求とは、あるトリガに応じてタスクが実行されている最中に、さらに同一のトリガが生成された状態をいう。例えば、原因レジスタ３４が“０”に設定されていれば、対応するトリガＴＲＧｋについて多重イベントトリガ要求がないことを示す。一方、原因レジスタ３４が“１”に設定されていれば、対応するトリガＴＲＧｋについて多重イベントトリガ要求が発生したことを示す。このような多重イベントトリガ要求は本来禁止されているが、発生することもあり得る。そこで、原因レジスタ３４を設けることで、多重イベントトリガの発生を検出できる。原因レジスタ３４に設定された値はフェールセーフ情報として利用できる。
【００２６】
状態レジスタ３５は各トリガに対応して設けられ、受付状態レジスタ（ＲＣＶ）３５ａと、実行状態レジスタ（ＶＬＤ）３５ｂとを含む。  
受付状態レジスタ３５ａには、トリガが生成されたか否かを示す値が設定される。例えば、受付状態レジスタ３５ａが“０”に設定されていれば、対応するトリガＴＲＧｋが生成されていないことを示す。一方、受付状態レジスタ３５ａが“１”に設定されていれば、対応するトリガＴＲＧｋが生成されたことを示す。  
実行状態レジスタ３５ｂには、トリガに応じたタスクが実行中であるか否かを示す値が設定される。例えば、実行状態レジスタ３５ｂが“０”に設定されていれば、対応するトリガＴＲＧｋに応じたタスクが実行中でないことを示す。一方、実行状態レジスタ３５ｂが“１”に設定されていれば、対応するトリガＴＲＧｋに応じたタスクが実行中であることを示す。
【００２７】
イベント制御部３６は、制御レジスタ３３、原因レジスタ３４および状態レジスタ３５への書き込みおよび読み出しを行う。また、イベント制御部３６は、これらのレジスタから読み出した値に基づく制御を行う。例えば、イベント制御部３６は、状態レジスタ３５から読み出した値に基づいて、マルチプレクサ３２がいずれのタスク開始ポインタを選択すべきかを設定する。また、イベント制御部３６は、状態レジスタ３５から読み出した値に基づいて、タスクスケジューラ１４にタスクスケジューラ動作を指示する。さらに、イベント制御部３６はタスクが終了した旨の通知をタスクスケジューラ１４から受信し、これに応じて状態レジスタ３５を書き換える。
【００２８】
タスクスケジューラ１４はイベントコントローラ１３からの制御に応じてタスクスケジューラ動作を行う。より具体的には、タスクスケジューラ１４は、イベントコントローラ１３から出力されるタスク開始ポインタに応じて、実行されるべきタスクを制御する。タスクスケジューラ１４は、タスク開始ポインタレジスタ４１（ＴＳＫＩＮＩＴＰ）と、タスクスケジュールテーブル４２と、タスクスケジュール制御部４３と、タスク起動制御部４４とを有する。
【００２９】
タスク開始ポインタレジスタ４１には、マルチプレクサ３２によって選択されたタスク開始ポインタＰＴＲが設定される。タスクスケジュールテーブル４２には、タスクスケジュール（例えば、図２の出力スケジュールや入力スケジュール）として、タスク開始ポインタレジスタ４１に設定されたタスク開始ポインタＰＴＲと、実行されるべきタスクとの関係が予め設定されている。
【００３０】
図７は、タスクスケジュールテーブル４２の構造の一例を示す図である。タスクスケジュールテーブル４２には、タスク開始ポインタＰＴＲ、実行タスクコード、ＥＮＤビットおよびＡＤＣビットが互いに関連付けられている。ＥＮＤビットおよびＡＤＣビットは、制御ビットとも呼ばれる。
【００３１】
実行タスクコードは、関連付けられたタスク開始ポインタＰＴＲに応じて、初めに実行されるべきタスクを示す。  
ＥＮＤビットは“０”または“１”に設定される。ＥＮＤビットが“０”に設定されていれば、関連付けられた実行タスクコードが示すタスクの実行後、タスクスケジュールテーブル４２において後続のタスクを実行すべきことを示す。ＥＮＤビットが“１”に設定されていれば、関連付けられた実行タスクコードが示すタスクの実行後、タスクスケジューラ動作を完了すべきことを示す。  
ＡＤＣビットは“０”または“１”に設定される。ＡＤＣビットが“１”に設定されていれば、関連付けられた実行タスクコードが示すタスクの実行後、ＡＤＣトリガが生成されるまで「待ち状態」とすべきことを示す。つまり、ＡＤＣビットが“１”に設定されている場合、ＡＤＣトリガの生成によって、後続のタスクが実行される。
【００３２】
図７の例では、タスク開始ポインタレジスタ４１にタスク開始ポインタＰＴＲ０が設定された場合、まずＴＡＳＫ５で示されるタスクが実行され、続いて、ＴＡＳＫ６で示されるタスクが実行される。その後、イベント管理装置１００はＡＤＣトリガが生成されるのを待つ。ＡＤＣトリガが生成されると、ＴＡＳＫ９で示されるタスクが実行される。続いて、ＴＡＳＫ７で示されるタスクが実行された後、タスクスケジューラ動作が完了する。
【００３３】
タスクスケジュール制御部４３は、イベント制御部３６からタスク制御の指示を受けると、タスクスケジュールテーブル４２に基づいてタスクスケジューラ動作を行う。より具体的には、タスクスケジュール制御部４３は、タスクスケジュールテーブル４２から制御ビットを読み出し、タスク起動制御部４４に通知する。  
タスク起動制御部４４は、タスク開始ポインタＰＴＲに応じてタスクスケジュールテーブル４２から実行タスクコードを読み出し、これをタスク実行制御部１５に通知する。
【００３４】
タスク実行制御部１５は、通知されたタスクコードを命令メモリ１６から読み出し、これを実行する。また、タスク実行制御部１５はタスクの実行が完了すると、その旨をタスク起動制御部４４を介してタスクスケジュール制御部４３に通知する。この通知に応じて、タスクスケジュール制御部４３は、タスクスケジュールテーブル４２から制御ビットを読み出す。タスク起動制御部４４は読み出された制御ビットに応じた処理（例えば、後続のタスクを実行したり、ＡＤＣタスクが実行されるのを待ったり）を行う。
【００３５】
図８は、イベント管理装置１００の処理の一例を示すフローチャートである。なお、図８は、１つのトリガＴＲＧが生成された場合の処理を示している。
【００３６】
まず、各レジスタが初期設定される（Ｓ１）。図９は、Ｓ１後の各レジスタの値を模式的に示す図である。例えば、制御レジスタ３３には、各トリガＴＲＧに応じてタスクの実行を許可する“１”が設定される。原因レジスタ３４、状態レジスタ３５における受付状態レジスタ３５ａおよび実行状態レジスタ３５ｂには、“０”が初期値として設定される。また、所定のタスク開始コードＰＴＲがイベントキューレジスタ３１に設定される。なお、この段階では、タスク開始ポインタレジスタ４１には何も設定されない。
【００３７】
イベント管理装置１００はトリガＴＲＧが生成されるのを待つ（Ｓ２）。トリガＴＲＧが生成されると（Ｓ２のＹＥＳ）、イベント制御部３６は生成されたトリガＴＲＧに対応する受付状態レジスタ３５ａを“１”に設定する（Ｓ３）。以下、トリガＴＲＧ０が生成された場合を例に取って説明を続ける。  
図１０は、Ｓ３後の各レジスタの値を模式的に示す図である。図示のように、トリガＴＲＧ０に対応する受付状態レジスタ３５ａが“１”に設定される。他の受付状態レジスタ３５ａは“０”のままである。
【００３８】
Ｓ３の後、タスク開始ポインタレジスタ４１には、トリガＴＲＧ０に関連付けられたタスク開始ポインタＰＴＲ０が設定される。さらに、イベント制御部３６は、トリガＴＲＧ０に対応する受付状態レジスタ３５ａおよび実行状態レジスタ３５ｂを、それぞれ“０”，“１”に設定する（Ｓ４）。これにより、タスクスケジューラ１４が起動する。  
図１１は、Ｓ４後の各レジスタの値を模式的に示す図である。タスク開始ポインタレジスタ（ＴＳＫＩＮＩＴＰ）４１にタスク開始ポインタＰＴＲ０が設定され、かつ、トリガＴＲＧ０に対応する受付状態レジスタ３５ａおよび実行状態レジスタ３５ｂが、それぞれ“０”，“１”に設定される。
【００３９】
次に、タスクスケジュール制御部４３は、タスク開始ポインタＰＴＲ０に関連付けられた制御ビットをタスクスケジュールテーブル４２から読み出し、タスク起動制御部４４に通知する（Ｓ５）。タスク起動制御部４４はタスク開始ポインタＰＴＲ０に関連付けられた実行タスクコードをタスクスケジュールテーブル４２から読み出す。読み出された実行タスクコードはタスク実行制御部１５に通知される。これにより、タスク実行制御部１５は通知されたタスクコードを実行する（Ｓ６）。
【００４０】
図７に例示するタスクスケジュールテーブル４２によると、タスク開始ポインタＰＴＲ０が設定された場合、タスクコードＴＡＳＫ５，ＴＡＳＫ６，ＴＡＳＫ９およびＴＡＳＫ７が順に実行される。最後のタスクコードＴＡＳＫ７が実行されすべてのタスクコードの実行が完了すると（Ｓ７のＹＥＳ）、タスクスケジューラ１４の動作が完了し、その旨がタスクスケジューラ１４からイベント制御部３６へ通知される。これに応じて、イベント制御部３６はトリガＴＲＧ０に対応する実行状態レジスタ３５ｂを“０”に設定する（Ｓ８）。そして、イベント管理装置１００は次のトリガＴＲＧが生成されるのを待つ（Ｓ２）。  
図１２は、Ｓ８後の各レジスタの値を模式的に示す図である。図示のように、すべての受付状態レジスタ３５ａおよび実行状態レジスタ３５ｂが“０”に設定され、次のトリガＴＲＧを受付可能な状態となる。
【００４１】
図１３は、図３に示す自己トリガによるイベント管理装置１００の処理の具体例を説明する図である。図１３（ａ）はイベントキューレジスタ３１であり、図１３（ｂ）はタスクスケジュールテーブル４２であり、図示するように設定されていたとする。ここで、トリガＴＲＧ０は外部トリガであり、トリガＴＲＧ１，ＴＲＧ２は自己トリガであるとする。より具体的には、トリガＴＲＧ１はタスクＴＡＳＫ３を実行することによって生成され、トリガＴＲＧ２はタスク１２を実行することにより生成される。
【００４２】
トリガＴＲＧ０が生成されると、タスク開始ポインタＰＴＲ０およびタスクスケジュールテーブル４２に基づいて、タスクＴＡＳＫ１，ＴＡＳＫ２，ＴＡＳＫ３が順に実行される。ＴＡＳＫ３が実行されることで、自己トリガＴＲＧ１が生成される。
【００４３】
トリガＴＲＧ１が生成されると、タスク開始ポインタＰＴＲ３およびタスクスケジュールテーブル４２に基づいて、タスクＴＡＳＫ１１，ＴＡＳＫ１２が順に実行される。ＴＡＳＫ１２が実行されることで、自己トリガＴＲＧ２が生成される。
【００４４】
トリガＴＲＧ２が生成されると、タスク開始ポインタＰＴＲ５およびタスクスケジュールテーブル４２に基づいて、タスクＴＡＳＫ２１，ＴＡＳＫ２２，ＴＡＳＫ２３，ＴＡＳＫ２４が順に実行され、タスクスケジュール動作は完了する。
【００４５】
図１４は、図３に示す自己トリガによるイベント管理装置１００の処理の別の具体例を説明する図である。図１４（ａ）に示すようにイベントキューレジスタ３１が設定され、図１４（ｂ）に示すようにタスクスケジュールテーブル４２が設定されていたとする。ここで、トリガＴＲＧ０，ＴＲＧ１は外部トリガであり、トリガＴＲＧ２は自己トリガであるとする。より具体的には、トリガＴＲＧ２はタスクＴＡＳＫ３を実行することによって生成される。  
また、タスクＴＡＳＫ１〜ＴＡＳＫ７のまとまりを、便宜上スケジュール１と呼ぶ。そして、タスクＴＡＳＫ１１，ＴＡＳＫ１２のまとまりを、スケジュール２と呼ぶ。図１４（ｂ）に示すように、スケジュール１は、タスクＴＡＳＫ１〜ＴＡＳＫ３と、タスクＴＡＳＫ４〜ＴＡＳＫ７に分割されている。
【００４６】
イベント管理装置１００では、外部トリガＴＲＧ０が生成された後に外部トリガＴＲＧ１が生成された場合、スケジュール１を中断してスケジュール２を実行できる。以下、詳細に説明する。  
トリガＴＲＧ０が生成されると、タスク開始ポインタＰＴＲ０およびタスクスケジュールテーブル４２に基づいて、タスクＴＡＳＫ１，ＴＡＳＫ２が順に実行される。
【００４７】
さらにタスクＴＡＳＫ３の実行中に、トリガＴＲＧ１が生成されたとする。この場合、まずタスクＴＡＳＫ３の実行を完了し、自己トリガＴＲＧ２が生成される。この自己トリガＴＲＧ２は受付状態レジスタ３５ａにキューイングされる。  
そして、トリガＴＲＧ１に対応するタスク開始ポインタＰＴＲ３およびタスクスケジュールテーブル４２に基づいて、タスクＴＡＳＫ１１，ＴＡＳＫ１２が順に実行される。これにより、スケジュール２が完了する。
【００４８】
続いて、キューイングされた自己トリガＴＲＧ２に対応するタスク開始ポインタＰＴＲ５およびタスクスケジュールテーブル４２に基づいて、タスクＴＡＳＫ４，ＴＡＳＫ５，ＴＡＳＫ６，ＴＡＳＫ７が順に実行される。以上により、タスクスケジュール動作は完了する。このように、本実施形態では自己トリガを用いるため、スケジュール１を、タスクＴＡＳＫ１〜ＴＡＳＫ３と、タスクＴＡＳＫ４〜ＴＡＳＫ７に分割して実行できる。
【００４９】
図１５は、イベント管理装置１００の処理の別の例を示すフローチャートである。なお、図８とは異なり、図１５は複数のトリガＴＲＧが同時に生成された場合の処理を示している。以下、図８との相違点を中心に説明する。
【００５０】
複数のトリガＴＲＧが生成された場合（Ｓ２のＹＥＳ）、イベント制御部３６は生成されたすべてのトリガＴＲＧに対応する受付状態レジスタ３５ａを“１”に設定する（Ｓ３）。以下、トリガＴＲＧ０，ＴＲＧ１が生成された場合の例を説明する。
【００５１】
図１６は、Ｓ３後の各レジスタの値を模式的に示す図である。トリガＴＲＧ０，ＴＲＧ１に対応する２つの受付状態レジスタ３５ａが“１”に設定される。そして、タスクスケジューラ１４およびタスク実行制御部１５により、予め定めた優先順位が高い順にタスクが実行される。ここでは、トリガＴＲＧ０〜ＴＲＧ９の順に優先順位が高いものとする。この場合、トリガＴＲＧ０に対応するタスクが先に実行される（Ｓ４〜Ｓ６）。そして、トリガＴＲＧ０に対応するタスクの終了後（Ｓ７のＹＥＳ）、トリガＴＲＧ０に対応する実行状態レジスタ３５ｂが“０”に設定される（Ｓ８）。
【００５２】
図１７は、Ｓ８後の各レジスタの値を模式的に示す図である。トリガＴＲＧ０に対応する受付状態レジスタ３５ａおよび実行状態レジスタ３５ｂは“０”に設定される。一方、トリガＴＲＧ１に対応する受付状態レジスタ３５ａは“１”のままである。  
このように、“１”に設定された受付状態レジスタ３５ａが残っている場合（Ｓ９のＹＥＳ）、後続のタスクが実行される。すなわち、トリガＴＲＧ１に対応するタスクが実行される（Ｓ４〜Ｓ６）。以降の処理は図８と同様であるので、説明を省略する。
【００５３】
続いて、多重イベントトリガ要求について説明する。例えば、トリガＴＲＧ０が生成され、トリガＴＲＧ０に対応するタスクが実行されているときに、さらにトリガＴＲＧ０が生成されたとする。この場合、イベント制御部３６はトリガＴＲＧ０に対応する受付状態レジスタ３５ａを“１”に設定する。各レジスタの値は図１８のようになる。
【００５４】
このような場合でも、タスクスケジューラ１４は実行中のスケジュールを継続して実行する。一方、イベント制御部３６はトリガＴＲＧ０に対応するタスクの実行中にトリガＴＲＧ０が生成されたとして、原因レジスタ３４を“１”に設定する。これにより、各レジスタの値は図１９のようになり、イベント管理装置１００は多重イベント受付状態となる。
【００５５】
このように、本実施形態では、イベントキューレジスタ３１に、複数のトリガと、タスク開始ポインタとを関連付けて設定する。このトリガには、イベント管理装置１００自身が生成する自己トリガを含んでいる。そのため、スケジュールを分割して実行することが可能となり、高性能なタスクスケジュール制御を実現できる。
【００５６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００５７】
２  ＣＰＵ
３  ＰＭＤ
４  インバータ
５  モータ
６ａ  電流・電圧センサ
６ｂ  ＡＤＣ
７ａ  回転角センサ
７ｂ  角度変換器
１５  タスク実行制御部
２０  起動イベント選択部
３１  イベントキューレジスタ
１００  イベント管理装置
【図１】
2015136259.tif 000003
【図２】
2015136259.tif 000004
【図３】
2015136259.tif 000005
【図４】
2015136259.tif 000006
【図５】
2015136259.tif 000007
【図６】
2015136259.tif 000008
【図７】
2015136259.tif 000009
【図８】
2015136259.tif 000010
【図９】
2015136259.tif 000011
【図１０】
2015136259.tif 000012
【図１１】
2015136259.tif 000013
【図１２】
2015136259.tif 000014
【図１３】
2015136259.tif 000015
【図１４】
2015136259.tif 000016
【図１５】
2015136259.tif 000017
【図１６】
2015136259.tif 000018
【図１７】
2015136259.tif 000019
【図１８】
2015136259.tif 000020
【図１９】
2015136259.tif 000021