(57)【特許請求の範囲】
【請求項１】
制御プログラムを記憶する記憶装置と、
夫々１以上のイベントの入力を受け付け可能であり、入力されたイベントに応じた処理を実行する夫々タスク優先度が設定される複数のタスク、および、前記複数のタスクのうちの実行可能状態のタスクが複数存在するとき、前記複数の実行可能状態のタスクのうちの実行状態に遷移させるタスクをタスク優先度に基づいて選択し、前記選択したタスクを実行可能状態から実行状態に状態遷移させるタスク管理を、前記制御プログラムに基づいて実現する演算装置と、
を備え、
各イベントはタスク優先度と異なるイベント優先度が予め設定され、
前記複数のタスクの一は、自タスクが実行状態でなくかつ自タスクの実行対象のイベントが入力されたとき、実行可能状態に状態遷移し、自タスクの実行対象の複数のイベントが入力されかつ自タスクが実行状態である際に、前記入力された各イベントに応じた処理を前記入力された各イベントのイベント優先度に基づく順番で実行する、
ことを特徴とする制御装置。
【請求項２】
イベント毎および制御状態毎にイベント優先度が予め設定され、
前記一のタスクは、自タスクの制御状態と、前記入力された各イベントと、に基づいて前記入力された各イベントのイベント優先度を特定する、
ことを特徴とする請求項１に記載の制御装置。
【請求項３】
イベント毎および制御状態毎に実行対象の処理が予め設定され、
前記一のタスクは、自タスクの制御状態と、前記入力された各イベントと、に基づいて前記入力された各イベントに応じた処理を特定する、
ことを特徴とする請求項２に記載の制御装置。
【請求項４】
補正条件が予め設定され、
前記一のタスクは、前記補正条件が満たされているか否かに基づいて前記入力された各イベントのイベント優先度を補正したり補正しなかったりする、
ことを特徴とする請求項１から請求項３の何れか一項に記載の制御装置。
【請求項５】
前記補正条件は、各イベントが入力されてからの経過時間の判定、または各イベントに応じた処理の実行回数の判定を含む、
ことを特徴とする請求項４に記載の制御装置。
【請求項６】
前記一のタスクは、
イベント毎にイベント優先度が対応付けられる優先度情報を記憶し、
前記優先度情報に基づいて前記入力された各イベントのイベント優先度を特定する、
ことを特徴とする請求項１から請求項３の何れか一項に記載の制御装置。
【請求項７】
前記一のタスクは、前記優先度情報を複数記憶するとともに前記優先度情報の切り替え条件を記憶し、前記複数の優先度情報のうちの各イベントのイベント優先度を特定するために使用する優先度情報を前記切り替え条件に基づいて選択する、
ことを特徴とする請求項６に記載の制御装置。
【請求項８】
前記切り替え条件は、時刻の判定を含む、
ことを特徴とする請求項７に記載の制御装置。
【請求項９】
請求項１から請求項８の何れか一項に記載の制御装置が備える前記記憶装置に記憶される前記制御プログラムの開発を支援する開発装置であって、
表示装置と、
イベント毎にイベント優先度の入力を受け付ける設定画面を前記表示装置に表示し、前記設定画面を介して入力されたイベント毎のイベント優先度を前記制御プログラムに設定する、イベント優先度設定部と、
を備える、
ことを特徴とする開発装置。
【請求項１０】
前記一のタスクは、処理の実行履歴を記憶し、
前記制御プログラムを仮想的に実行するシミュレーション部と、
前記シミュレーション部が前記制御プログラムを仮想的に実行した後、前記一のタスクから処理の実行履歴を収集して前記表示装置に表示する履歴表示部と、
をさらに備えることを特徴とする請求項９に記載の開発装置。
【請求項１１】
請求項１から請求項８の何れか一項に記載の制御装置が備える前記記憶装置に記憶される前記制御プログラムの開発の支援をコンピュータに実行させる開発プログラムであって、
前記コンピュータに、
イベント毎にイベント優先度の入力を受け付ける設定画面を表示装置に表示するステップと、
前記設定画面を介してイベント毎のイベント優先度の入力を受け付けるステップと、
前記受け付けたイベント毎のイベント優先度を前記制御プログラムに設定するステップと、
を実行させることを特徴とする開発プログラム。
【請求項１２】
前記一のタスクは、処理の実行履歴を記憶し、
前記コンピュータに、
前記制御プログラムを仮想的に実行するステップと、
前記制御プログラムを仮想的に実行した後、前記一のタスクから処理の実行履歴を収集するステップと、
前記収集した処理の実行履歴を前記表示装置に表示するステップと、
をさらに実行させることを特徴とする請求項１１に記載の開発プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、被制御装置を制御する制御装置、制御装置を動作させる制御プログラムの開発装置、および、開発プログラムに関する。
【背景技術】
【０００２】
被制御装置を制御する制御装置は、種々の場面で使用される。例えば、ＦＡ分野においては、製造ラインを制御する制御装置としてＰＬＣ（Programmable  Logic  Controller）が用いられる。また、遠隔地の機器（例えばビルまたは駅内の空調機器、セキュリティ機器、照明機器、エレベータの構成機器）を制御するために制御装置が用いられる。また、電力、ガス、水道等のインフラを支える機器を監視したり制御したりするために、制御装置が用いられる。このような制御装置においては、イベント処理のリアルタイム性を高めることが要望される。【０００３】
例えば特許文献１には、詳細な実行時刻が判明する前の上流設計工程において実時間性を考慮した状態遷移と、タスク優先度の設計と、を行うことができる実時間処理ソフトウェアの制御装置および制御方法が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１７３９４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１の技術によれば、状態遷移に応じてタスクの優先度設定が可能であるが、所望のイベントを他のイベントよりも先に処理するといった制御ができないという問題点があった。【０００６】
本発明は、上記に鑑みてなされたものであって、所望のイベントを他のイベントよりも先に処理することができる制御装置、当該制御装置を動作させる制御プログラムの開発を支援する開発装置、および開発プログラムを得ることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明は、制御プログラムを記憶する記憶装置と、夫々１以上のイベントの入力を受け付け可能であり、入力されたイベントに応じた処理を実行する夫々タスク優先度が設定される複数のタスク、および、前記複数のタスクのうちの実行可能状態のタスクが複数存在するとき、前記複数の実行可能状態のタスクのうちの実行状態に遷移させるタスクをタスク優先度に基づいて選択し、前記選択したタスクを実行可能状態から実行状態に状態遷移させるタスク管理を、前記制御プログラムに基づいて実現する演算装置と、を備え、各イベントはタスク優先度と異なるイベント優先度が予め設定され、前記複数のタスクの一は、自タスクが実行状態でなくかつ自タスクの実行対象のイベントが入力されたとき、実行可能状態に状態遷移し、自タスクの実行対象の複数のイベントが入力されかつ自タスクが実行状態である際に、前記入力された各イベントに応じた各処理を前記入力された各イベントのイベント優先度に基づく順番で実行する、ことを特徴とする。
【発明の効果】
【０００８】
本発明にかかる制御装置は、イベント毎にイベント優先度が予め設定され、各タスクが、各イベントに応じた各処理をイベント優先度に基づく順番で実行するので、所望のイベントを他のイベントよりも先に処理することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態１の制御装置が使用されるシステムを示す図である。
【図２】図２は、制御装置のハードウェア構成例を示す図である。
【図３】図３は、制御装置のソフトウェア構成例を示す図である。
【図４】図４は、ＯＳによるタスク管理を説明するための図である。
【図５】図５は、タスクの機能構成を示す図である。
【図６】図６は、イベント処理テーブルのデータ構造例を示す図である。
【図７】図７は、優先度設定テーブルのデータ構造例を示す図である。
【図８】図８は、タスクがイベントを受信した際のタスクの動作を説明するフローチャートである。
【図９】図９は、イベント記憶部に格納されているイベントをタスクが処理する動作を説明するフローチャートである。
【図１０】図１０は、実施の形態２の設定記憶部を説明する図である。
【図１１】図１１は、タスクが優先度設定テーブルを切り替える動作を説明するフローチャートである。
【図１２】図１２は、開発装置のハードウェア構成例を示す図である。
【図１３】図１３は、開発装置の機能構成を説明する図である。
【図１４】図１４は、設定画面の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本発明にかかる実施の形態の制御装置、開発装置、および開発プログラムを図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１１】
実施の形態１．
図１は、本発明の実施の形態１の制御装置が使用されるシステムを示す図である。制御装置１は、被制御システム４と開発装置５とに接続される。
【００１２】
被制御システム４は、センサ２と駆動装置３とを備えている。センサ２は、被制御システム４の動作を検出するものである。センサ２が検出する動作とは、例えば、温度、速度、または位置などが該当する。駆動装置３は、被制御システム４に動力を供給する装置である。例えばモータまたはアクチュエータが駆動装置３に該当する。
【００１３】
制御装置１は、駆動装置３に対する駆動指令をセンサ２からの入力に基づいて演算する。制御装置１は、演算した駆動指令を駆動装置３に供給する。なお、制御装置１は、制御プログラム１４に基づいて動作する。
【００１４】
開発装置５は、制御プログラム１４の作成を支援したり、作成された制御プログラム１４を制御装置１に設定したりする装置である。制御装置１が被制御システム４の制御を実行中においては、開発装置５は制御装置１に接続されていなくてもよい。
【００１５】
図２は、制御装置１のハードウェア構成例を示す図である。制御装置１は、演算装置１０、主記憶装置１１、補助記憶装置１２、およびＩ／Ｏ１３を備える。演算装置１０、主記憶装置１１、補助記憶装置１２、およびＩ／Ｏ１３は互いにバスで接続される。
【００１６】
演算装置１０は、プログラムに基づく演算を実行することができる装置である。演算装置１０は、例えばＣＰＵ（Central  Processing  Unit）である。演算装置１０としては、シングルコアプロセッサまたはマルチコアプロセッサが適用できる。演算装置１０は制御装置１に複数具備され、複数の演算装置１０は並行して動作することが可能に構成されてもよい。
【００１７】
主記憶装置１１は、演算装置１０のワークエリアとして機能するメモリである。主記憶装置１１は、例えば補助記憶装置１２よりも高速に動作するメモリによって構成される。主記憶装置１１は、例えばＲＡＭ（Random  Access  Memory）によって構成される。
【００１８】
補助記憶装置１２は、ストレージ、および、制御プログラム１４を記憶する記憶装置、として機能する。補助記憶装置１２は、例えば、ＲＯＭ（Read  Only  Memory）、ハードディスクドライブ、ＳＳＤ（Solid  State  Drive）、着脱可能なメモリデバイス、またはこれらの組み合わせによって構成される。
【００１９】
Ｉ／Ｏ１３は、センサ２、駆動装置３、および開発装置５と通信を行うための接続インタフェースである。センサ２、駆動装置３、および開発装置５と制御装置１との間の接続規格としては任意の規格が採用可能である。
【００２０】
制御プログラム１４は、ユーザプログラムおよびオペレーティングシステム（ＯＳ）プログラムを含む。制御プログラム１４は、補助記憶装置１２から読み出され、バスを介して主記憶装置１１のワークエリアへロードされる。演算装置１０は、ワークエリアにロードされたＯＳに基づいて、複数のタスクを生成する。そして、演算装置１０は、複数のタスクを切り換えながら実行する。制御装置１による被制御システム４の制御（例えば駆動装置３に対する駆動指令をセンサ２からの入力に基づいて生成する動作）は、複数のタスクの協働により実現する。
【００２１】
タスクの実体は、制御プログラム１４に含まれるプログラムモジュールに制御に応じて変化する値を持たされたものである。各プログラムモジュールは、ワークエリアに保持され、演算装置１０は、ワークエリアに保持された各プログラムモジュールをＯＳによるタスク管理の下で切り換えながら実行する。演算装置１０がシングルコアプロセッサにより構成される場合には、演算装置１０は、同時に１つのタスクのみ実行する。演算装置１０がマルチコアプロセッサにより構成される場合には、演算装置１０は、同時に複数のタスクを実行することができる。タスク間で情報を送受信することが可能である。タスクに入力されたりタスクから出力されたりする情報を、イベントと表記する。
【００２２】
図３は、制御装置１のソフトウェア構成例を示す図である。複数のタスク（タスク１００ａ〜１００ｅ）は、ＯＳ１１０によるタスク管理の下で夫々動作する。タスク１００ａ〜１００ｅを総称してタスク１００と表記することがある。ＯＳ１１０は、タスク１００がハードウェア１２０を使用できるように、タスク１００とハードウェア１２０との間に介在する。ハードウェア１２０とは、演算装置１０、主記憶装置１１、補助記憶装置１２、およびＩ／Ｏ１３を概括する概念である。各タスク１００は、イベントの入力を受け付けたり、イベントを生成して出力したりすることができる。
【００２３】
タスク１００ａ〜１００ｅは、階層構造を構成する。なお、タスク１００ａ〜１００ｅは、階層構造を構成しなくてもよい。ここでは、タスク１００ａおよびタスク１００ｅは、ＯＳ１１０に最も近い階層（第１階層）に属する。タスク１００ｃは、ＯＳ１１０から最も遠い階層（第３階層）に属する。タスク１００ｂおよびタスク１００ｄは、第１階層と第３階層との間に介在する階層（第２階層）に属する。
【００２４】
センサ２からのセンサ信号は、第１階層のタスク１００ａによってイベント１０１ａとして取り込まれる。タスク１００ａは、取り込んだイベント１０１ａを加工してまたはそのままイベント１０１ｂとしてタスク１００ｂに入力する。タスク１００ｃは、センサ２からの入力に基づいて駆動装置３に対する駆動指令を演算するタスクであって、被制御システム４の制御の主要部を担うタスクである。タスク１００ｂは、イベント１０１ｂとして入力されたセンサ信号を、タスク１００ｃが利用できる程度に抽象化（平滑化などの所定のフィルタ処理）し、抽象化後のセンサ信号をタスク１００ｃにイベント１０１ｃとして入力する。タスク１００ｃは、イベント１０１ｃとして入力された抽象化後のセンサ信号に基づいて抽象化された駆動指令を演算し、演算された抽象化された駆動指令をイベント１０１ｄとしてタスク１００ｄに入力する。タスク１００ｄは、イベント１０１ｄとして入力された抽象化された駆動指令を、外部に出力可能な形式に変換し、変換後の駆動指令をイベント１０１ｅとしてタスク１００ｅに入力する。タスク１００ｅは、イベント１０１ｅとして入力された変換後の駆動指令を、ＯＳ１１０およびハードウェア１２０を介して駆動装置３に入力する。
【００２５】
図４は、ＯＳ１１０によるタスク管理を説明するための図である。ＯＳ１１０は、タスク１００を生成することができ、さらに、生成したタスク１００に優先度（タスク優先度）を設定することができる（Ｓ１）。生成されたタスク１００の状態（タスク状態）は、実行可能状態である（Ｓ２）。ＯＳ１１０は、演算装置１０に実行可能状態のタスク１００を実行させる（Ｓ３）。演算装置１０に実行可能状態のタスク１００を実行させることを、タスク１００に演算装置１０を割り当てる、と表記する。ここで、実行可能状態のタスク１００が複数存在する場合には、ＯＳ１１０は、演算装置１０の割り当て先のタスク１００をタスク優先度に応じて選択する。タスク優先度に応じたタスク１００の割り当て手法は任意である。例えば、ＯＳ１１０は、タスク優先度として最も高い値が設定されたタスク１００を選択し、選択したタスク１００に演算装置１０を割り当てる。ＯＳ１１０は、実行時間に制限値を設けてタスク１００に演算装置１０を割り当て、実行時間が制限値を経過した後は、演算装置１０の割り当て先を他のタスク１００にスイッチするようにしてもよい。
【００２６】
演算装置１０が割り当てられたタスク１００は、演算装置１０によって実行される（Ｓ４）。演算装置１０によって実行されていることを示すタスク状態を、実行状態と表記する。即ち、ＯＳ１１０は、タスク１００をタスク優先度に基づいて実行可能状態から実行状態に状態遷移させることができる。
【００２７】
また、ＯＳ１１０は、実行状態のタスク１００を、実行を中断させることで実行可能状態に戻すことができる（Ｓ５）。例えば、実行状態のタスク１００よりもタスク優先度が高いタスク１００が実行可能状態となったとき、ＯＳ１１０は、実行状態のタスク１００の実行を中断させることができる。また、実行状態のタスク１００の実行時間が制限値を経過したとき、ＯＳ１１０は、実行状態のタスク１００の実行を中断させることができる。
【００２８】
実行状態のタスク１００が実行を完了したとき、ＯＳ１１０が実行状態のタスク１００への演算装置１０の割り当てを終了することによってタスク状態が実行状態から待機状態に状態遷移する（Ｓ６）。待機状態のタスク１００は、イベントの入力を受け付けることができる（Ｓ７）。イベントの入力を受け付けた待機状態のタスク１００は、実行可能状態に状態遷移する（Ｓ２）。なお、ＯＳ１１０は、実行状態のタスク１００が実行完了したとき、そのタスク１００を消滅させることも可能である（Ｓ８）。
【００２９】
図５は、タスク１００の機能構成を示す図である。タスク１００は、イベント管理部１０１、入力部１０２、出力部１０３、イベント記憶部１０４、処理実行部１０５、履歴記憶部１０６、状態管理部１０７および設定記憶部１０８を備える。イベント管理部１０１は、優先度判定部１０９を備える。
【００３０】
入力部１０２は、入力されてきたイベントを受け付ける。イベント記憶部１０４は、イベントを記憶するバッファである。イベント管理部１０１は、イベントをイベント記憶部１０４に格納する。イベント管理部１０１は、イベント記憶部１０４に格納されているイベントを取得して、取得したイベントに応じた処理（イベント処理）を処理実行部１０５に渡す。処理実行部１０５は、渡されたイベント処理を実行する。
【００３１】
一般に、タスク１００は、イベントが入力されると、イベント処理をできるだけ早く実行することが望まれる。実施の形態によれば、タスク１００は、早急に処理すべきイベントと、早急に処理しなくてもよいイベントと、の両方が未処理の状態となっている場合には、前者のイベントを先に処理することができる。
【００３２】
具体的には、イベント毎に優先度（イベント優先度）が設定される。そして、イベント記憶部１０４に複数のイベントが格納されている場合には、優先度判定部１０９は、イベント毎の優先度（イベント優先度）を判定し、イベント記憶部１０４に格納されている複数のイベントのうちのイベント優先度が最も高いイベントを、処理対象として選択する。
【００３３】
なお、ここでは、タスク１００は、イベント毎に複数のイベント処理を実行しうるものとする。１つのタスク１００で実行可能な複数のイベント処理のうちの何れを実行するべきかは、そのときの制御状態に基づいて決まるものとする。制御状態とは、実行状態をさらに細かく分類したものであって、タスク１００がどのような制御を実行中であるかを示すものである。なお、各イベントに対して夫々１つのイベント処理が実行されるように構成されてもよい。
【００３４】
設定記憶部１０８は、イベント処理テーブル１０８ａ、優先度設定テーブル（優先度情報）１０８ｂ、および実行可否設定情報１０８ｃが予め格納される。イベント処理テーブル１０８ａ、優先度設定テーブル１０８ｂ、および実行可否設定情報１０８ｃは、開発装置５によって設定されたり編集されたりすることが可能である。
【００３５】
図６は、イベント処理テーブル１０８ａのデータ構造例を示す図である。イベント処理テーブル１０８ａは、イベントと制御状態とに基づいてイベント処理を検索することができるテーブル構造を備えている。図６に示す例によれば、イベントとしては、Ｒバス同期通信、Ｑバス同期通信、および、非同期低速バス同期通信などの種類が設定されている。制御状態としては、アイドル、送信中、および、再送待ちなどの種類が設定されている。そして、イベント毎および制御状態毎にイベント処理が設定されている。
【００３６】
また、ここではさらに、制御状態に応じてイベント優先度が変動することが可能に構成されている。また、補正条件が満たされるか否かに基づいてイベント優先度を変動することが可能に構成されている。イベント優先度および補正条件の設定は、優先度設定テーブル１０８ｂに記述される。補正条件は、ここでは、時間条件および実行回数条件であるものとする。各補正条件については後述する。
【００３７】
図７は、優先度設定テーブル１０８ｂのデータ構造例を示す図である。優先度設定テーブル１０８ｂは、イベントと制御状態とに基づいてイベント優先度を検索することができるテーブル構造を備える。
【００３８】
ここで、図７において、「Ｔ０」は、時間条件とイベント優先度の補正量とを示す。時間条件とは、イベント優先度の補正を行うか否かの判定のための判定条件であって、ここでは一例としてしきい値（時間しきい値）が用いられる。時間しきい値は、制御状態が優先度設定テーブル１０８ｂの行に示す制御状態に遷移してからの経過時間と比較される。例えば、経過時間が時間しきい値を超過している場合にはイベント優先度が補正され、経過時間が時間しきい値を超過していない場合にはイベント優先度が補正されない。経過時間が時間しきい値を超過していない場合にイベント優先度が補正され、経過時間が時間しきい値を超過している場合にはイベント優先度が補正されなくてもよい。即ち、時間条件は、経過時間の判定を含んでいる。
【００３９】
また、図７において、「Ｃ０」は、実行回数条件とイベント優先度の補正量とを示す。実行回数条件とは、イベント優先度の補正を行うか否かの判定のための判定条件であって、ここでは一例としてしきい値（実行回数しきい値）が用いられる。実行回数しきい値は、イベント処理が実行された回数（実行回数）と比較される。例えば、実行回数が実行回数しきい値を超過している場合にはイベント優先度が補正され、実行回数が実行回数しきい値を超過していない場合にはイベント優先度が補正されない。実行回数が実行回数しきい値を超過していない場合にはイベント優先度が補正され、実行回数が実行回数しきい値を超過している場合にはイベント優先度が補正されなくてもよい。即ち、実行回数条件は、イベント処理の実行回数の判定を含んでいる。
【００４０】
実行可否設定情報１０８ｃは、イベント記憶部１０４に格納されているイベントをイベント優先度に応じて処理するか否かが設定される情報である。イベント記憶部１０４に格納されているイベントをイベント優先度に応じて処理する動作を、優先度制御と表記する。
【００４１】
制御状態は、状態管理部１０７によって管理される。状態管理部１０７は、制御状態の管理のほかに、イベントの受信履歴（以降、単に受信履歴）を履歴記憶部１０６に記録する。
【００４２】
処理実行部１０５は、イベント処理を実行する。処理実行部１０５は、イベント処理を実行する毎にイベント処理の実行履歴（以下、単に実行履歴）を履歴記憶部１０６に記録する。イベント処理の実行履歴は、実行時の時刻の記録を含む。イベント処理の実行により新たにイベントが生成された場合には、イベント管理部１０１は、新たに生成されたイベントを出力部１０３を介して出力する。
【００４３】
次に、タスク１００の動作を説明する。
【００４４】
図８は、タスク１００がイベントを受信した際のタスク１００の動作を説明するフローチャートである。入力部１０２がイベントを受信すると（Ｓ１１）、イベント管理部１０１は、入力部１０２が受信したイベントをイベント記憶部１０４に格納する（Ｓ１２）。Ｓ１２の処理の後、Ｓ１１の処理が再び実行される。
【００４５】
図９は、イベント記憶部１０４に格納されているイベントをタスク１００が処理する動作を説明するフローチャートである。
【００４６】
イベント管理部１０１は、まず、処理実行部１０５がイベント処理を非実行中であるか実行中であるかを判定する（Ｓ２１）。処理実行部１０５がイベント処理を実行中である場合（Ｓ２１、Ｎｏ）、イベント管理部１０１は、Ｓ２１の動作を再び実行する。
【００４７】
処理実行部１０５がイベント処理を非実行中である場合（Ｓ２１、Ｙｅｓ）、イベント管理部１０１は、設定記憶部１０８に格納されている実行可否設定情報１０８ｃを参照することによって、優先度制御の実行が「可能」に設定されているか否かを判定する（Ｓ２２）。
【００４８】
優先度制御の実行が「可能」に設定されていない場合（Ｓ２２、Ｎｏ）、イベント管理部１０１は、イベント記憶部１０４からイベントを取得する（Ｓ２３）。ここで、イベント記憶部１０４に複数のイベントが格納されている場合においては、イベント記憶部１０４に格納されている複数のイベントのうちの何れをＳ２３の処理において取得するかは任意である。例えば、イベント管理部１０１は、ＦＩＦＯのルールに基づいてイベントを取得してもよい。また、イベント管理部１０１は、ＦＩＬＯのルールに基づいてイベントを取得してもよい。
【００４９】
Ｓ２３の処理の後、イベント管理部１０１は、状態管理部１０７に問合せを行うことによって、現在の制御状態を特定する（Ｓ２４）。そして、イベント管理部１０１は、設定記憶部１０８に格納されているイベント処理テーブル１０８ａをイベントおよび現在の制御状態をキーとして用いて参照することによって、イベント処理を特定する（Ｓ２５）。そして、イベント管理部１０１は、特定したイベント処理を処理実行部１０５に渡し、実行させる（Ｓ２６）。そして、イベント管理部１０１は、Ｓ２１の動作を再び実行する。なお、Ｓ２６の動作によって処理実行部１０５が新たにイベントを生成した場合には、イベント管理部１０１は、生成されたイベントを出力部１０３を介して出力する。
【００５０】
優先度制御の実行が「可能」に設定されている場合（Ｓ２２、Ｙｅｓ）、優先度判定部１０９は、イベント記憶部１０４からイベントを取得する（Ｓ２７）。Ｓ２７の処理においても、イベントの取得手法は任意である。そして、優先度判定部１０９は、状態管理部１０７に問合せを行うことによって、現在の制御状態を特定する（Ｓ２８）。そして、優先度判定部１０９は、設定記憶部１０８に格納されているイベント処理テーブル１０８ａをイベントおよび現在の制御状態をキーとして用いて参照することによって、イベント処理を特定する（Ｓ２９）。そして、優先度判定部１０９は、設定記憶部１０８に格納されている優先度設定テーブル１０８ｂをイベントおよび制御状態をキーとして用いて参照することによって、イベント優先度を特定する（Ｓ３０）。イベント優先度とともに各条件（時間条件または実行回数条件）が設定されている場合には、優先度判定部１０９は、各条件および補正量をイベント優先度とともに特定する。
【００５１】
続いて、優先度判定部１０９は、履歴記憶部１０６に格納されている受信履歴を参照することによって、イベントを受信してからの経過時間が時間条件に設定されたしきい値を越えているか否かを判定する（Ｓ３１）。なお、時間条件が設定されていない場合には、Ｓ３１の動作はスキップされる。イベントを受信してからの経過時間が時間条件に設定されたしきい値を越えていない場合（Ｓ３１、Ｎｏ）、優先度判定部１０９は、履歴記憶部１０６に格納されている実行履歴を参照することによって、イベント処理の実行回数が実行回数条件に設定されたしきい値を越えているか否かを判定する（Ｓ３２）。なお、実行回数条件が設定されていない場合には、Ｓ３２の動作はスキップされる。
【００５２】
イベントを受信してからの経過時間が時間条件に設定されたしきい値を越えている場合（Ｓ３１、Ｙｅｓ）、または、イベント処理の実行回数が実行回数条件に設定されたしきい値を越えている場合（Ｓ３２、Ｙｅｓ）、優先度判定部１０９は、取得したイベント優先度を、補正量を用いて補正する（Ｓ３３）。
【００５３】
イベント処理の実行回数が実行回数条件に設定されたしきい値を越えていない場合（Ｓ３２、Ｎｏ）、または、Ｓ３３の動作の後、優先度判定部１０９は、他のイベント、即ちイベント優先度が特定されていないイベント、がイベント記憶部に１０４に存在するか否かを判定する（Ｓ３４）。他のイベントが存在する場合（Ｓ３４、Ｙｅｓ）、優先度判定部１０９は、Ｓ２７の動作を再び実行する。他のイベントが存在しない場合（Ｓ３４、Ｎｏ）、優先度判定部１０９は、最もイベント優先度が高いイベントに対するイベント処理を選択する（Ｓ３５）。イベント管理部１０１は、選択されたイベント処理を処理実行部１０５に渡し、実行させる（Ｓ３６）。そして、イベント管理部１０１は、Ｓ２１の動作を再び実行する。
【００５４】
なお、イベント管理部１０１は、イベント記憶部１０４にイベントが格納されていない状態でイベントを受信したとき、受信したイベントをイベント記憶部１０４に格納することなくＳ２４〜Ｓ２６の処理を実行してもよい。
【００５５】
なお、以上の説明においては、優先度設定テーブル１０８ｂがタスク１００内に記憶されるものとして説明したが、優先度設定テーブル１０８ｂは、タスク１００の外部に記憶されてもよい。その場合には、優先度判定部１０９は、タスク１００の外部に記憶される優先度設定テーブル１０８ｂにイベント優先度を問い合わせるように構成されてもよい。
【００５６】
例えばＰＬＣにおいては、制御プログラムはユーザプログラムを含む。ユーザプログラムは、制御装置１においてサイクリックに実行される。ユーザプログラムの実行結果の出力とユーザプログラムへの入力とがＩ／Ｏ１３を介して、制御装置１と被制御システム４との間でサイクリックに伝送される。Ｉ／Ｏ１３を介して情報をサイクリックに伝送するイベント処理が伝送のエラー処理よりも高いイベント優先度が設定されることにより、Ｉ／Ｏ１３を介して情報をサイクリックに伝送するイベント処理を先に実行することが可能となる。
【００５７】
このように、本発明の実施の形態１によれば、イベントはイベント優先度が予め設定され、各タスク１００は、複数のイベントが入力された場合、自タスク１００が実行状態である際に、入力された各イベントに応じた各イベント処理を入力された各イベントのイベント優先度に基づく順番で実行するので、制御装置１は、所望のイベントを他のイベントよりも先に処理することができる。また、ユーザがイベント毎のイベント優先度を細かく調整することで、タクトタイムを短縮することが可能となる。また、タスク優先度を変更することなくイベント優先度を変更することが可能であるので、制御装置１の負荷バランスを崩すことなく調整を行うことが可能となる。
【００５８】
また、イベント毎および制御状態毎にイベント優先度が予め設定され、各タスク１００は、自タスク１００の制御状態と、入力された各イベントと、に基づいて各イベントのイベント優先度を特定する。入力された各イベントのうちの何れを先に実行するかを制御状態に応じて変更するといった制御が可能となるので、ユーザは、より細かく、かつ、より柔軟な調整を行うことが可能となる。
【００５９】
また、補正条件を設け、補正条件が満たされるときにイベント優先度が補正されるように構成される。これにより、条件に応じてイベント優先度を変更することが可能となる。
【００６０】
また、補正条件は、例えばイベントが入力されてからの経過時間の判定を含む。これにより、イベントが入力されてからの経過時間に応じてイベント優先度を変動させるという細かい制御が可能となる。
【００６１】
また、補正条件は、例えばイベント処理の実行回数の判定を含む。これにより、例えばイベントを送信するイベント処理が何度か実行されて失敗した場合に、イベントを送信するイベント処理のイベント優先度をより小さい値に変更するという細かい制御が可能となる。
【００６２】
実施の形態２．
優先度設定テーブルが複数設定され、複数の優先度設定テーブルのうちの何れが使用されるかが自動または手動で切り替えられるように構成されてもよい。ここでは、使用する優先度設定テーブルが２つの優先度設定テーブルの間で時刻の判定による切り替え条件に基づいて切り替えられる例を説明する。
【００６３】
図１０は、実施の形態２の設定記憶部を説明する図である。設定記憶部１０８には、第１の優先度設定テーブル１０８ｄおよび第２の優先度設定テーブル１０８ｅが格納される。ここでは、イベント処理テーブル１０８ａおよび実行可否設定情報１０８ｃの図示を省略している。第１の優先度設定テーブル１０８ｄは、平日に使用されるものである。第２の優先度設定テーブル１０８ｅは、休日および祝日に使用されるものである。
【００６４】
図１１は、タスク１００が優先度設定テーブルを切り替える動作を説明するフローチャートである。優先度判定部１０９は、まず、現在時刻を取得し、現在は平日であるか否かを判定する（Ｓ４１）。現在は平日であると判定された場合には（Ｓ４１、Ｙｅｓ）、優先度判定部１０９は、第１の優先度設定テーブル１０８ｄを使用し（Ｓ４２）、Ｓ４１の動作を再び実行する。現在は平日ではないと判定された場合には（Ｓ４１、Ｎｏ）、優先度判定部１０９は、第２の優先度設定テーブル１０８ｅを使用し（Ｓ４３）、Ｓ４１の動作を再び実行する。
【００６５】
なお、Ｓ４１の動作は１日に一回だけ実行されるようにしてもよい。また、ここでは２つの優先度設定テーブルが切り替えられるものとして説明したが、３以上の優先度設定テーブルが切り替えるように優先度判定部１０９が構成されてもよい。また、優先度設定テーブルの切り替えの基準は、平日であるか否かだけに限定されない。例えば、現在時刻は９時から１７時までの範囲に含まれるか否かによって優先度設定テーブルが切り替えられてもよい。また、時刻だけではなく、被制御システム４の状態または外部からの入力に応じて優先度設定テーブルが切り替えられてもよい。
【００６６】
このように、本発明の実施の形態２によれば、各タスク１００は、優先度設定テーブル１０８ｄ、１０８ｅのうちの使用対象の優先度設定テーブルを、切り替え条件に基づいて選択する。これにより、イベント優先度をさらに細かくかつ柔軟に設定することが可能となる。
【００６７】
また、切り替え条件は、時刻の判定を含む。これにより、時刻に応じてイベント優先度を自動的に切り替えることが可能となる。
【００６８】
実施の形態３．
図１２は、開発装置５のハードウェア構成例を示す図である。開発装置５は、演算装置５０、主記憶装置５１、補助記憶装置５２、Ｉ／Ｏ５３、入力装置５４、および表示装置５５を備える。演算装置５０、主記憶装置５１、補助記憶装置５２、Ｉ／Ｏ５３、入力装置５４、および表示装置５５は互いにバスで接続される。
【００６９】
演算装置５０は、プログラムに基づく演算を実行することができる装置である。演算装置５０は、例えばＣＰＵである。主記憶装置５１は、演算装置５０のワークエリアとして機能するメモリである。主記憶装置５１は、例えば補助記憶装置５２よりも高速に動作するメモリによって構成される。主記憶装置５１は、例えばＲＡＭによって構成される。補助記憶装置５２は、ストレージ、および、開発プログラム５６を予め記憶する記録媒体、として機能する。補助記憶装置５２は、例えば、ＲＯＭ、ハードディスクドライブ、ＳＳＤ、着脱可能なメモリデバイス、またはこれらの組み合わせによって構成される。Ｉ／Ｏ５３は、制御装置１と通信を行うための接続インタフェースである。開発装置５と制御装置１との間の接続規格としては任意の規格が採用可能である。
【００７０】
入力装置５４は、ユーザによる開発装置５に対する入力を受け付ける装置である。入力装置５４は、例えば、キーボードおよびポインティングデバイスによって構成される。入力装置５４に入力された情報は、バスを介して演算装置５０に送られる。表示装置５５は、演算装置５０が出力する情報をユーザが視認可能に表示する装置である。表示装置５５は、例えば液晶ディスプレイによって構成される。
【００７１】
演算装置５０は、補助記憶装置５２に格納されている開発プログラム５６を読み出してワークエリアに展開する。そして、演算装置５０は、ワークエリアに展開された開発プログラム５６を実行することによって、制御プログラム１４の作成および設定を支援するための各種機能を実現することができる。
【００７２】
図１３は、演算装置５０が開発プログラム５６を実行することによって実現する、開発装置５の機能構成を説明する図である。演算装置５０は、表示・編集部５７と、シミュレーション部６０とを備える。
【００７３】
表示・編集部５７は、制御プログラム１４の編集画面を表示装置５５に表示する。編集画面は、編集中の制御プログラム１４を編集画面に表示するための画面である。編集画面は、例えばＧＵＩ（Graphical  User  Interface）機能を有する。表示・編集部５７は、編集画面に表示中の制御プログラム１４に対する編集入力が行われたとき、入力内容を編集中の制御プログラム１４に反映させるとともに表示画面を更新する。
【００７４】
シミュレーション部６０は、制御プログラム１４を仮想的に実行することができる。図３に従って説明すると、シミュレーション部６０は、開発装置５内にハードウェア１２０を仮想的に生成する。そして、シミュレーション部６０は、仮想的なハードウェア１２０上でＯＳ１１０を実行し、ＯＳ１１０によるタスク管理の下でタスク１００ａ〜１００ｅを生成し実行する。タスク１００は、図５に説明した構成を有する。各タスク１００は、履歴記憶部１０６に各種履歴を記憶する。
【００７５】
表示・編集部５７は、イベント優先度設定部５８と、履歴表示部５９とを備える。
【００７６】
イベント優先度設定部５８は、イベント優先度を設定するための設定画面を編集画面に表示することができる。図１４は、設定画面の一例を示す図である。図示するように、編集画面６１には、設定画面６２が表示されている。設定画面６２は、図７に示す優先度設定テーブル１０８ｂをグラフィカルに表示する。ユーザは、ポインタ６３を用いてテーブル内の任意の箇所を指定し、指定した箇所に数値入力を行うことで、イベント毎および制御状態毎のイベント優先度、時間条件、および実行回数条件を設定することができる。イベントの種類および制御状態の種類は、追加したり削除したりすることが可能である。イベント優先度設定部５８は、設定画面６２を介して入力された内容を受け付ける。そして、イベント優先度設定部５８は、入力された内容を整えて制御プログラム１４に埋め込むことができる。制御プログラム１４は、例えば、実行されたとき、イベント優先度設定部５８によって埋め込まれたイベント優先度を優先度設定テーブル１０８ｂ、１０８ｄ、１０８ｅとして各タスク１００に保持させる。
【００７７】
履歴表示部５９は、シミュレーション部６０が制御プログラム１４を仮想的に実行した際、各タスク１００の履歴記憶部１０６から各種履歴を収集する。そして、履歴表示部５９は、収集した各種履歴を編集画面６１上に表示することができる。ユーザは、編集画面６１に表示された各種履歴を参照しながら、設定画面６２を介してイベント優先度を調整することが可能となる。
【００７８】
このように、本発明の実施の形態３によれば、開発装置５は、イベント優先度を入力することが可能な設定画面６２を表示装置５５に表示し、入力されたイベント優先度を制御プログラム１４に設定することができる。これにより、ユーザは、イベント毎のイベント優先度を簡単に設定することが可能となる。
【００７９】
また、開発装置５は、制御プログラム１４を仮想的に実行し、イベント処理の実行履歴を表示装置５５に表示することができる。これにより、ユーザは、実行履歴に基づいてイベント優先度を細かく調整することが可能となる。
【符号の説明】
【００８０】
１  制御装置、２  センサ、３  駆動装置、４  被制御システム、５  開発装置、１０，５０  演算装置、１１，５１  主記憶装置、１２，５２  補助記憶装置、１３，５３  Ｉ／Ｏ、１４  制御プログラム、５４  入力装置、５５  表示装置、５６  開発プログラム、５７  表示・編集部、５８  イベント優先度設定部、５９  履歴表示部、６０  シミュレーション部、６１  編集画面、６２  設定画面、６３  ポインタ、１００，１００ａ〜１００ｅ  タスク、１０１  イベント管理部、１０１ａ〜１０１ｅ  イベント、１０２  入力部、１０３  出力部、１０４  イベント記憶部、１０５  処理実行部、１０６  履歴記憶部、１０７  状態管理部、１０８  設定記憶部、１０８ａ  イベント処理テーブル、１０８ｂ，１０８ｄ，１０８ｅ  優先度設定テーブル、１０８ｃ  実行可否設定情報、１０９  優先度判定部、１２０  ハードウェア。
【要約】
所望のイベントを他のイベントよりも先に処理するために、制御装置は、制御プログラムを記憶する記憶装置と、イベントに応じた処理を実行する夫々タスク優先度が設定される複数のタスク、および、前記複数のタスクの夫々をタスク優先度に基づいて実行状態に状態遷移させるタスク管理を、前記制御プログラムに基づいて実現する演算装置と、を備え、前記イベントはイベント優先度が予め設定され、各タスクは、複数のイベントが入力された場合、自タスクが実行状態である際に、前記入力された各イベントに応じた各処理を前記入力された各イベントのイベント優先度に基づく順番で実行する（Ｓ３５、Ｓ３６）。【図１】
0005669987.tif 000002
【図２】
0005669987.tif 000003
【図３】
0005669987.tif 000004
【図４】
0005669987.tif 000005
【図５】
0005669987.tif 000006
【図６】
0005669987.tif 000007
【図７】
0005669987.tif 000008
【図８】
0005669987.tif 000009
【図９】
0005669987.tif 000010
【図１０】
0005669987.tif 000011
【図１１】
0005669987.tif 000012
【図１２】
0005669987.tif 000013
【図１３】
0005669987.tif 000014
【図１４】
0005669987.tif 000015