(57)【特許請求の範囲】
【請求項１】
優先度の異なる複数のタスクを実行するコントローラ装置であって、
一度に一つのタスクを実行する単一のマイクロプロセッサと、
前記マイクロプロセッサにより実現され、高い優先度に設定される一つ以上の第１タスクを実行する第１タスク実行部と、
前記マイクロプロセッサにより実現され、低い優先度に設定される一つ以上の第２タスクを実行する第２タスク実行部と、
前記マイクロプロセッサの有する演算処理資源のうち前記第２タスクの実行に割当て可能な余裕資源を算出し、前記算出した余裕資源を用いて前記第２タスクを実行した場合の、前記第２タスクの性能の推定値を示す性能指標を決定し、前記余裕資源と前記性能指標とを出力するタスク管理部と、
を備えるコントローラ装置。
【請求項２】
前記第１タスクは、前記演算処理資源を優先的に使用して実行されるものであり、
前記第２タスクは、前記余裕資源を使用して実行されるものである、
請求項１に記載のコントローラ装置。
【請求項３】
前記第１タスクは、前記マイクロプロセッサの制御対象である制御対象機器に直接関わる処理であって、前記演算処理資源を優先的に使用して実行されるものであり、
前記第２タスクは、前記制御対象機器に間接的に関わる処理であって、前記余裕資源を使用して実行されるものである、
請求項２に記載のコントローラ装置。
【請求項４】
前記余裕資源は、前記演算処理資源のうち前記第１タスクが実行されていないアイドル時間に基づいて算出される、
請求項３に記載のコントローラ装置。
【請求項５】
前記第１タスクは、周期的に実行される周期タスクと、前記マイクロプロセッサが実行中のタスクに割り込んで実行される割込みタスクとが含まれており、
前記余裕資源は、前記割込みタスクが発生しない場合において前記周期タスクが前記演算処理資源を使用する時間と前記演算処理資源の全体との差分から算出される、
請求項４に記載のコントローラ装置。
【請求項６】
前記余裕資源は、前記マイクロプロセッサの使用率または動作周波数の少なくともいずれか一方を用いて表示出力される、
請求項５に記載のコントローラ装置。
【請求項７】
前記性能指標は、前記マイクロプロセッサの使用率または動作周波数のいずれか一方に基づいて予め用意された複数の値の中から選択される、
請求項６に記載のコントローラ装置。
【請求項８】
前記タスク管理部は、前記性能指標と前記マイクロプロセッサの使用率または動作周波数とを対応付けて出力する、
請求項６に記載のコントローラ装置。
【請求項９】
前記タスク管理部は、前記第２タスクに設定された性能指標の値である設定性能指標と、前記設定性能指標に対応する前記マイクロプロセッサの使用率または駆動周波数の値と、前記第２タスクが最低限動作に必要な性能指標の値である最低動作性能指標と、前記最低動作性能指標に対応するマイクロプロセッサの使用率または駆動周波数の値と、を対応付けて出力する、
請求項８に記載のコントローラ装置。
【請求項１０】
前記タスク管理部は、前記第２タスクの動作状態も出力することができ、
前記動作状態には、「実行中」、「停止中」、「実行不可」が含まれている、
請求項９に記載のコントローラ装置。
【請求項１１】
前記タスク管理部は、
前記動作状態が「停止中」である前記第２タスクが前記最低動作性能指標で実行する所定の場合の、前記マイクロプロセッサの使用率または前記所定の場合の前記マイクロプロセッサの動作周波数と前記余裕資源とを比較し、
実行可能な第２タスクについては前記動作状態として「停止中」を選択し、かつ、ユーザの実行指示を受け付けることができるように表示出力し、
実行不可能な第２タスクについては前記動作状態として「実行不可」を選択し、かつ、ユーザの実行指示の受け付けないように表示出力する、
請求項１０に記載のコントローラ装置。
【請求項１２】
前記タスク管理部は、前記動作状態が「実行中」である第２タスクについては、ユーザによる前記設定性能指標の変更指示を受け付けることができるように表示出力する、
請求項１１に記載のコントローラ装置。
【請求項１３】
前記タスク管理部は、前記第２タスク実行部の実行結果に基づいて、前記第１タスク実行部が前記第１タスクを実行する際のパラメータの少なくとも一部を変更する、
請求項１〜１２のいずれか一項に記載のコントローラ装置。
【請求項１４】
前記タスク管理部は、前記第１タスク実行部の実行結果に基づいて、前記第２タスク実行部で実行させる第２タスクを決定する、
請求項１３に記載のコントローラ装置。
【請求項１５】
優先度の異なる複数のタスクをコントローラ装置により実行するタスク実行管理方法であって、
前記コントローラ装置は、一度に一つのタスクを実行する単一のマイクロプロセッサを備えており、
前記タスクには、高い優先度に設定される一つ以上の第１タスクと低い優先度に設定される一つ以上の第２タスクとが含まれており、
前記コントローラ装置は、
前記マイクロプロセッサの有する演算処理資源のうち前記第２タスクの実行に割当て可能な余裕資源を算出し、
前記算出した余裕資源を用いて前記第２タスクを実行した場合の、前記第２タスクの性能の推定値を示す性能指標を決定し、
前記余裕資源と前記性能指標とを出力する、
コントローラ装置のタスク実行管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコントローラ装置及びコントローラ装置のタスク実行管理方法に関する。
【背景技術】
【０００２】
例えば、発電所、工場、プラント等の種々の施設では、発電機、モータ、ポンプ、ヒータ等のアクチュエータや、温度センサ、圧力センサ、電圧計、電流計等のセンサが複数設けられている。施設に設置されたコントローラ装置は、センサからの信号に基づいてアクチュエータを制御する。
【０００３】
コントローラ装置は、シーケンス制御装置もしくはプログラマブル・コントローラ（ＰＬＣ）とも呼ばれる。コントローラ装置は、ラダー言語に代表されるシーケンスプログラム言語で記述された内容に従って、アクチュエータの動作等を制御する。
【０００４】
コントローラ装置は、通常、一つ一つ決められた順番に実行するシーケンス制御を行うため、複雑な算術演算を必要とするデータ処理には向いていない。複雑な算術演算をラダー言語等で記述することは、プログラム作成上の負担が大きい。さらに、シーケンス実行時間に比較してデータ処理に長い時間を消費するので、シーケンス実行の即時性に影響を及ぼす可能性がある。
【０００５】
そこで、特許文献１には、シーケンス実行部は、起動命令を読み込むと、データ処理実行部を起動させてデータ処理プログラムを実行させ、その演算結果を受け取ってシーケンス制御を続行する技術が開示されている。
【０００６】
また、マルチコアのＣＰＵを用い、シーケンス制御のような高い即時性が求められている処理と、ＨＭＩ（Human Machine Interface）処理のような高い即時性が求められていない処理とで、割り当てるＣＰＵコアを分ける技術も知られている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平９−２７４５１１号公報
【非特許文献】
【０００８】
【非特許文献１】BECKHOFF社、“マルチコアとマルチタスクのサポート”、[online]、２０１１年１２月２２日、BECKHOFF社TwinCAT 3製品紹介Webページ、[２０１５年９月２９日検索]、インターネット＜URL：http://www.beckhoff.co.jp/jp.asp?twincat/twincat-3-xa-performance.htm＞
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１では、シーケンス実行部とデータ処理実行部とをそれぞれ異なるマイクロコンピュータで実行させることで、シーケンス処理の即時性を維持しつつ、複雑な算術演算を含むデータ処理を実現する。しかし、発電所や工場、プラント等の各種施設で使用されるコントローラ装置の中には、いわゆるワンチップ、シングルコア構成のＣＰＵを備えるものも多い。一度に一つのタスクしか処理できない構成のマイクロプロセッサでは、優先度の高いシーケンス処理と優先度の低いデータ処理とを両立させることが難しい。
【００１０】
非特許文献１では、複数のコアを有するマルチコアＣＰＵを用いるため、特許文献１と同様に、優先度の高いシーケンス処理と優先度の低いＨＭＩ処理とを両立させることができる。しかし、非特許文献１も、特許文献１と同様に、組込機器などで多用されているワンチップ、シングルコア構成のＣＰＵに対して適用することはできない。
【００１１】
もしも仮に、ワンチップ、シングルコア構成のＣＰＵを有するシーケンス制御装置において、シーケンス処理と複雑な算術演算を含むデータ処理とを実行する場合、ユーザは、データ処理がどの程度の性能で実施されるのかを知る手段がない。
【００１２】
本発明は、上述の課題に鑑みてなされたもので、その目的は、一度に一つのタスクを実行する単一のマイクロプロセッサを用いて、高い優先度の第１タスクの実行と低い優先度の第２タスクの実行とを両立させることができ、かつ、第２タスクを実行する場合の性能指標を出力することができるようにしたコントローラ装置およびコントローラ装置のタスク実行管理方法を提供することにある。
【課題を解決するための手段】
【００１３】
上記課題を解決すべく、本発明に従うコントローラ装置は、優先度の異なる複数のタスクを実行するコントローラ装置であって、一度に一つのタスクを実行する単一のマイクロプロセッサと、マイクロプロセッサにより実現され、高い優先度に設定される一つ以上の第１タスクを実行する第１タスク実行部と、マイクロプロセッサにより実現され、低い優先度に設定される一つ以上の第２タスクを実行する第２タスク実行部と、マイクロプロセッサの有する演算処理資源のうち第２タスクの実行に割当て可能な余裕資源を算出し、算出した余裕資源を用いて第２タスクを実行した場合の、第２タスクの性能の推定値を示す性能指標を決定し、余裕資源と性能指標とを出力するタスク管理部と、を備える。
【発明の効果】
【００１４】
本発明によれば、一度に一つのタスクを実行する単一のマイクロプロセッサにより、優先度の高い第１タスクと優先度の低い第２タスクとを実行させることができ、さらに、第２タスクの実行に割当て可能な余裕資源を算出して、第２タスクを実行する場合の性能指標を出力することができる。これにより、優先度の異なる複数タスクを実行することができ、かつ、第２タスクを実行する場合の性能指標を出力することができる。
【図面の簡単な説明】
【００１５】
【図１】コントローラを含む制御システムの全体構成を示す説明図である。
【図２】コントローラおよびプログラム配布装置のハードウェア構成図である。
【図３】高優先度タスクを実行する際の優先度を管理する高優先度タスク優先度テーブルである。
【図４】ベストエフォート型タスク（ＢＥタスク）の優先度を管理するＢＥタスク優先度管理テーブルである。
【図５】周期的に実行される周期タスクの動作周期および実行時間を管理する周期タスク動作テーブルである。
【図６】ＢＥタスクの性能指標を管理するＢＥタスク性能指標テーブルである。
【図７】ＢＥタスクに設定可能な性能指標および対応するＣＰＵ動作周波数を管理するＢＥタスク設定可能性能指標テーブルである。
【図８】ＢＥタスクが動作する際の最低限の性能指標および対応するＣＰＵ動作周波数を管理するＢＥタスク最低動作性能指標テーブルである。
【図９】ＣＰＵの動作周波数を管理するＣＰＵ動作周波数テーブルである。
【図１０】ＣＰＵの空き状況を管理するＣＰＵ空き状況テーブルである。
【図１１】ＢＥタスクの動作状態を管理するＢＥタスク動作状態テーブルである。
【図１２】コントローラのタスクスケジューラによる、割込みタスクおよび周期タスクへのＣＰＵリソースのスケジューリング動作の例を示す。
【図１３】ＣＰＵ空き状況を算出して記憶する処理を示すフローチャートである。
【図１４】停止中のＢＥタスクの実行を許可するか否かを判定する処理のフローチャートである。
【図１５】ＢＥタスクへ設定することのできる性能指標を判定する処理のフローチャートである。
【図１６】追加でＢＥタスクを実行することのできるＣＰＵ動作周波数を算出する処理のフローチャートである。
【図１７】ＢＥタスクの動作を設定するＢＥタスク動作設定画面である。
【図１８】ＢＥタスク動作設定画面を作成する処理のフローチャートである。
【図１９】プログラム配布装置からコントローラへＢＥタスクをインストールする処理のフローチャートである。
【図２０】第２実施例に係り、タスクのパラメータを設定する幾つかの方法を示す説明図である。
【図２１】第３実施例に係るＢＥタスク動作設定画面である。
【図２２】第４実施例に係り、高優先度タスクとＢＥタスクとが互いの実行結果に基づいて相互に作用する様子を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、図面に基づいて、本発明の実施の形態を説明する。本実施形態に係る制御システムは、コントローラ装置とプログラム配布装置を有する。コントローラ装置は、一度に一つのタスクを実行する単一のマイクロプロセッサを備える。コントローラ装置は、単一のマイクロプロセッサにより、高い優先度を持つ第１タスクと、低い優先度を持つ第２タスクとを実行する。
【００１７】
第１タスクは、例えば、発電所、工場、鉄道、プラント、エレベータシステム等の各種制御システムに使用されるシーケンス制御のような、高い即時性が求められる高優先タスクである。以下、第１タスクを高優先度タスクと呼ぶ。これに対し、第２タスクは、シーケンス制御の合間に実行される、複雑な算術演算を含むデータ処理のようなベストエフォート型のタスクである。以下、第２タスクをＢＥタスクと呼ぶ。ＢＥタスクは、或る一つの高優先度タスクと他の一つの高優先度タスクとの間の隙間時間を利用して、できる限りの性能で実行される。
【００１８】
ＢＥタスクは、ベストエフォート型のタスクであるため、実行時の性能は保証されていない。従って、通常の場合、コントローラ装置のユーザは、ＢＥタスクがどの程度の性能で実行されるのか知るすべがない。しかし、本実施形態では、ＢＥタスクの実行時の性能を推定して、出力することができる。従って、ユーザは、ＢＥタスクがどの程度の性能を発揮するのか等を容易に把握することができ、利便性が向上する。
【００１９】
本実施形態では、ＣＰＵ動作周波数と周期タスクのＣＰＵ利用率とから、ＢＥタスクの実行可能なＣＰＵ動作周波数の目安を算出する。さらに、本実施形態では、ＣＰＵ動作周波数から換算可能な性能指標を、ＢＥタスクに適した単位と値に変換して、ユーザへ提示する。ＢＥタスクに適した単位と値とは、ＢＥタスクの処理内容に性質に適した単位または値という意味である。例えば、所定期間のログ情報を解析するＢＥタスクの場合、そのログ情報の解析に要する「時間」を性能指標として採用する。例えば、機器の動作状態を管理するＢＥタスクの場合、管理対象の機器の「数」を性能指標として採用する。例えば、何らかの物理状態の変化を定期的に計測するＢＥタスクの場合、サンプリングの「周波数」を性能指標として採用する。例えば、監視カメラの画像を解析するＢＥタスクの場合、所定時間に解析する画像データの数を示す「フレームレート」を採用する。以上は、ＢＥタスクの性能指標の一例であり、本実施形態では上述の例に限定しない。
【００２０】
本実施形態に係るコントローラ装置１は、後述するように、一つまたは複数の周期タスクの周期と平均実行時間に関するテーブル１４３を保持し、マイクロプロセッサ１１の動作周波数に関するテーブル１４７を保持する。
【００２１】
コントローラ装置１は、各周期タスクの周期と平均実行時間の和と、コントローラ装置１のＣＰＵ動作周波数とから、割込みタスクが発生しない場合において、周期タスクがＣＰＵを利用しないＣＰＵ空き状況を算出する手段（Ｓ４０〜Ｓ４２）を有する。ＣＰＵリソースは「演算処理資源」に対応し、ＣＰＵ空き状況は「余裕資源」に対応する。
【００２２】
本実施形態では、ＣＰＵ空き状況を、ＢＥタスクの利用可能なＣＰＵリソースの目安として使用する。本実施形態は、コントローラ装置のユーザに対して、ＢＥタスクがどの程度の性能で動作できそうであるかの目安を提供する。ただし、ユーザに提供する性能指標は、あくまでも一つの目安であって、ユーザに提示した性能をコントローラ装置１が保証するものではない。
【００２３】
本実施形態では、ＣＰＵリソース量（ＣＰＵ動作周波数、ＣＰＵ使用率）で換算されるＢＥタスクの性能を、例えば、計算時間、数、サンプリング周波数、フレームレートといった、ユーザに理解しやすい指標で提供する。コントローラ装置１は、各ＢＥタスクの性能指標を管理するテーブル１４４と、各ＢＥタスクが最低限動作するのに必要な性能指標を管理するテーブル１４６と、各ＢＥタスクが設定可能な性能指標に関するテーブル１４５とを有する。
【００２４】
ユーザは、各ＢＥタスクの利用可能なＣＰＵリソースを、計算時間やフレームレートといった理解しやすい性能指標を用いて、簡単に設定できる。各ＢＥタスクは、ユーザの設定した性能指標に対応するＣＰＵリソースを消費して、実行する。
【００２５】
本実施形態では、コントローラ装置１へＢＥタスクを配布するためのプログラム配布装置２を備える。プログラム配布装置２は、ユーザの要求するＢＥタスク、またはコントローラ装置１が自動的に判断して要求するＢＥタスクを、通信ネットワークＣＮ１を介してコントローラ装置１へ送信する。プログラム配布装置２は、各ＢＥタスクに設定可能な性能指標のマスタ情報２３２と、ＢＥタスクの配布を管理するタスク配布管理部２１０とを有する。プログラム配布装置２は、コントローラ装置１へＢＥタスクを配布する際に、そのＢＥタスクに設定可能な性能指標の情報も一緒に配布する。
【００２６】
このように構成される本実施形態では、周期タスクや割込みタスクから構成される高優先度タスクがＣＰＵを利用しない隙間時間を利用して、ＢＥタスクをできるかぎりの性能で実行することができる。さらに、本実施形態では、ＢＥタスクの性能指標の目安をユーザへ提示する。本実施形態では、ユーザは、ＢＥタスクの動作および性能指標を、ＧＵＩ（Graphical User Interface）を用いて簡単に設定することができる。
【実施例１】
【００２７】
図１〜図１８を用いて第１実施例を説明する。図１は、制御システム全体の機能構成例を示す。
【００２８】
制御システムは、例えば、発電所、工場、プラント、エレベータシステム、鉄道システム、上下水道システム、ビル空調システム等の各種施設４の制御に用いられる。制御システムは、少なくとも一つのコントローラ１と、少なくとも一つのプログラム配布装置２と、少なくとも一つの制御対象機器３を備える。コントローラ１は「コントローラ装置」に対応する。施設４内には複数のコントローラ１を設置することができる。各コントローラ１は、それぞれ複数の制御対象機器３を管理下に置くことができる。プログラム配布装置２は、同一施設４内の各コントローラ１に接続されているほかに、図外の他施設に設置されたコントローラ１とも接続することができる。
【００２９】
接続構成を説明する。プログラム配布装置２とコントローラ１は、通信ネットワークＣＮ１を介して双方向通信可能に接続されている。通信ネットワークＣＮ１は、例えば、イントラネット等の自営網、光通信等を利用する閉域網、専用線、あるいはインターネット等を含んで構成される。通信ネットワークＣＮ１は、有線または無線のいずれであってもよい。
【００３０】
施設４内では、コントローラ１と制御対象機器３とが、制御ネットワークＣＮ２を介して通信可能に接続されている。コントローラ１と制御対象機器３とは、例えば、ＬＡＮ（Local Area Network）ケーブル、ＲＳ−４８５ケーブル、ＲＳ−２３２Ｃケーブル、専用バス等の有線、または無線を介して制御ネットワークＣＮ２に接続されており、所定の手順にしたがって情報をやり取りする。
【００３１】
制御対象機器３には、センサ３１と、アクチュエータ３２が含まれる。センサ３１には、例えば、手動スイッチ、リレー、光電スイッチ、近接スイッチ、リミットスイッチ、重量計、温度センサ、圧力センサ、振動センサ、音波センサ、流量計、流速計、ガスセンサ、速度センサ、回転計、電流計、電圧計、電力計、水質センサ、色判別センサ、カメラ等がある。アクチュエータ３２には、例えば、モータ、発電機、ヒーター、制御弁、シリンダ、ソレノイド、ランプ、表示器、ブザー、スピーカー、ポンプ、圧縮機、空調機、冷凍機、コンベア等がある。
【００３２】
コントローラ１の機能構成を説明する。コントローラ１は、例えば、高優先度タスク実行部１１０、ＢＥタスク実行部１２０、タスク管理部１３０、記憶部１４０、ユーザインターフェース部１５０を備える。
【００３３】
高優先度タスク実行部１１０は、「第１タスク実行部」に対応する。高優先度タスク実行部１１０は、「第１タスク」としての割込みタスク１１１および周期タスク１１２を実行する。割込みタスク１１１とは、所定の事象が検出されたときに生じる割込みにより実行されるタスクである。周期タスク１１２とは、周期的に実行されるタスクである。ただし、周期タスク１１２の実行周期は一定であるとは限らない。ある程度の時間幅で周期が変化することもある。高優先度タスクは、制御対象機器３を制御するためのタスクであり、制御処理には高い即時性が要求される。従って、高優先度タスクには、ＢＥタスクよりも高い優先度が設定されている。
【００３４】
ＢＥタスク実行部１２０は、「第２タスク実行部」に対応する。ＢＥタスク実行部１２０は、「第２タスク」としてのＢＥタスク１２１を実行する。ＢＥタスク１２１は、例えば、ログ情報を解析して故障の予兆に必要な学習データを作成する処理、センサ信号から故障の予兆を診断する処理、機械振動から状態を診断する処理、画像データを解析する処理等がある。ＢＥタスクは、高優先度タスクとは異なり即時性は求められないため、高優先度タスクが実行されていない隙間時間（アイドル時間）を利用して実行される。ＢＥタスクは、実行可能な場合にできる範囲で実行できればよいとする、いわゆるベストエフォート型のタスクであるため、高優先度タスクよりも低い優先度が設定される。
【００３５】
タスク管理部１３０は、高優先度タスクやＢＥタスクを管理する。タスク管理部１３０は、記憶部１４０に記憶されている各管理テーブル１４１〜１４９の内容を管理することで、高優先度タスクやＢＥタスクを管理する。さらに、タスク管理部１３０は、ユーザインターフェース部１５０を介して、ＢＥタスクの動作を設定するための画面Ｇ１０（図１７で後述）をユーザに提供する。タスク管理部１３０は、ＢＥタスク動作設定画面Ｇ１０から入力されるユーザ指示に応じて、ＢＥタスクのパラメータを変更する。
【００３６】
記憶部１４０は、高優先度タスクおよびＢＥタスクを管理等するために必要な複数のテーブル１４１〜１４９を保持している。記憶部１４０には、例えば、高優先度タスク優先度テーブル１４１、ＢＥタスク優先度テーブル１４２、周期タスク動作テーブル１４３、ＢＥタスク性能指標テーブル１４４、ＢＥタスク設定可能性能指標テーブル１４５、ＢＥタスク最低動作性能指標テーブル１４６、ＣＰＵ動作周波数テーブル１４７、ＣＰＵ空き状況テーブル１４８、ＢＥタスク動作状態テーブル１４９を保持する。各テーブルの詳細は後述する。
【００３７】
ユーザインターフェース部（図中、ＵＩ部）１５０は、コントローラ１のユーザとコントローラ１との間で情報を交換するための機能である。本実施例では、コントローラ１内のユーザインターフェース部１５０を用いて、コントローラ１はユーザと情報を交換する場合を説明する。これに限らず、ユーザの所持するユーザ端末とコントローラ１とが通信することで、ユーザとコントローラとが情報を交換する構成でもよい。
【００３８】
プログラム配布装置２の機能構成を説明する。プログラム配布装置２は、各施設４内の各コントローラ１に対して、ＢＥタスクを配布するコンピュータである。プログラム配布装置２は、例えば、タスク配布管理部２１０と、データベース管理部２２０と、記憶部２３０を備える。
【００３９】
タスク配布管理部２１０は、ユーザからの要求をコントローラ１を通じて受領すると、指定されたＢＥタスクをコントローラ１のタスク管理部１３０へ送信する。データベース管理部２２０は、記憶部２３０に記憶された各ＢＥタスク２３１やテーブル２３２を管理する。なお、タスク配布管理部２１０は、コントローラ１が自動的に必要であると判断したＢＥタスクを、コントローラ１からの要求に従ってタスク管理部１３０へ送信する構成としてもよい。
【００４０】
図２は、コントローラ１およびプログラム配布装置２のハードウェア構成を示す。まず最初にコントローラ１から説明する。コントローラ１は、例えば、マイクロプロセッサ（図中、ＣＰＵ）１１、ネットワークインターフェース１２，１３、周辺制御装置１４、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）１５、メインメモリ１６、不揮発性記憶装置１７、ユーザインターフェース装置１８を備えている。各装置１１，１２，１５，１６はバス１９で相互に接続されている。以下、インターフェースをＩ／Ｆと略記する場合がある。ネットワークＩ／Ｆ１２，１３と、不揮発性記憶装置１７と、ユーザインターフェース装置１８とは、周辺制御装置１４を介してバス１９に接続される。
【００４１】
マイクロプロセッサ１１は、例えばＥＰＲＯＭ１５に記憶されたコンピュータプログラムを実行することで、図１で述べた機能１１０〜１３０を実現する。
【００４２】
ネットワークＩ／Ｆ１２は、通信ネットワークＣＮ１に接続して通信する。ネットワークＩ／Ｆ１３は、制御ネットワークＣＮ２に接続して通信する。
【００４３】
不揮発性記憶装置１７は、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）のような記憶装置として構成される。不揮発性記憶装置１７は、オペレーティングシステムや各種コンピュータプログラムを記憶する。図１で述べた記憶部１４０は、不揮発性記憶装置１７により実現されるが、これに限らず、例えばＥＰＲＯＭ１５やメインメモリ１６、不揮発性記憶装置１７のいずれか一つまたは複数から記憶部１４０を実現してもよい。コンピュータプログラムやファイルの少なくとも一部は、ＥＰＲＯＭ１５へ記憶させてもよい。不揮発性記憶装置１７またはＥＰＲＯＭ１５に記憶されたコンピュータプログラム等は、メインメモリ１６に展開されて、ＣＰＵ１１により実行される。
【００４４】
ユーザインターフェース装置１８は、ユーザがコントローラ１へ指示等を入力するための情報入力装置と、コントローラ１からユーザへ情報を提供するための情報出力装置とを備える。情報入力装置としては、例えばキーボード、タッチパネル、マウス、音声入力装置等がある。情報出力装置としては、例えばディスプレイ、音声合成装置、スピーカー、プリンタ等がある。
【００４５】
プログラム配布装置２の構成を説明する。プログラム配布装置２は、例えば、マイクロプロセッサ２１、ネットワークＩ／Ｆ２２、周辺制御装置２３、ＥＰＲＯＭ２４、メインメモリ２５、不揮発性記憶装置２６、ユーザインターフェース装置２７を備えている。マイクロプロセッサ２１とメインメモリ２５とＥＰＲＯＭ２４と周辺制御装置２３とは、バス２８を介して相互に接続されている。ネットワークＩ／Ｆ２２と不揮発性記憶装置２６とユーザインターフェース装置２７とは、周辺制御装置２３を介してバス２８に接続されている。
【００４６】
不揮発性記憶装置２６またはＥＰＲＯＭ２４に記憶されたコンピュータプログラムがメインメモリ２５へ転送されて、メインメモリ２５上に展開されると、マイクロプロセッサ２１がそのコンピュータプログラムを読み込んで実行する。これにより、図１で述べたタスク配布管理部２１０およびデータベース管理部２２０の機能が実現する。
【００４７】
ネットワークＩ／Ｆ２２は、通信ネットワークＣＮ１に接続して通信する。ユーザインターフェース装置２７は、システム管理者がプログラム配布装置２と情報を交換するために用いる。なお、プログラム配布装置２には、通信ネットワークＣＮ１または記憶媒体を介して、ＢＥタスクを記憶させることもできる。
【００４８】
図３は、高優先度タスクの優先度を管理するテーブル１４１の構成を示す。この高優先度タスク優先度テーブル１４１は、コントローラ１が保持している。
【００４９】
テーブル１４１は、例えば、高優先度タスク名Ｃ１４１１と、実行優先度Ｃ１４１２を対応付けて管理する。高優先度タスク名Ｃ１４１１は、高優先度タスクである各割込みタスクや各周期タスクを識別する名称である。実行優先度Ｃ１４１２は、「高い優先度」に対応する。
ここで、優先度Ｃ１４１２では、値が小さいタスクほど優先度が高い。オペレーティングシステムのタスクスケジューラは、優先度の低いタスクを実行中に、それよりも優先度の高いタスクが起動すると、その優先度の高い方のタスクにＣＰＵ１１のリソースを割り当てる。コントローラ１に搭載するオペレーティングシステムとしては、例えば、Ｌｉｎｕｘ（登録商標）やｉＴＲＯＮがある。なお、優先度が同じ値のタスクの場合は、タスクスケジューラによって均等にＣＰＵリソース（コンピュータリソース）が割り当てられる。
【００５０】
図４は、ＢＥタスクの優先度を管理するテーブル１４２を示す。ＢＥタスク優先度テーブル１４２は、コントローラ１が保持する。ＢＥタスク優先度テーブル１４２は、例えば、ＢＥタスク名Ｃ１４２１と、実行優先度Ｃ１４２２を対応付けて管理する。ＢＥタスク名Ｃ１４２１は、ＢＥタスクを識別する名称である。実行優先度Ｃ１４２２は、「低い優先度」に対応する。上述の通り、値が小さいほど優先度が高い。本実施例では、高優先度タスクには負の値を、ＢＥタスクには正の値（ここでは０を含む）を設定しているため、ＢＥタスクの優先度は高優先度タスクの優先度よりも低くなっている。
【００５１】
図５は、周期タスクの動作を管理するテーブル１４３を示す。この周期タスク動作テーブル１４３は、コントローラ１が保持する。周期タスク動作テーブル１４３は、例えば、周期タスク名Ｃ１４３１と、動作周期Ｃ１４３２と、平均実行時間Ｃ１４３３を対応付けて管理する。
【００５２】
周期タスク名Ｃ１４３１は、周期タスクを識別する名称である。動作周期Ｃ１４３２は、周期タスクが実行する周期である。平均実行時間Ｃ１４３３は、周期タスクの一回の実行に要する時間の平均値である。平均実行時間Ｃ１４３３は、コントローラ１が過去の動作履歴から最新値に更新してもよい。または後述する実施例のように、他のコントローラ１での動作した実績値に基づいて設定することもできる。
【００５３】
図６は、ＢＥタスクの性能指標を管理するテーブル１４４を示す。このＢＥタスク性能指標テーブル１４４は、コントローラ１が保持する。このテーブル１４４は、例えば、ＢＥタスク名Ｃ１４４１と、性能指標の内容Ｃ１４４２と、性能指標の単位Ｃ１４４３を対応付けて管理する。
【００５４】
ＢＥタスク名Ｃ１４４１は、ＢＥタスクを識別する名称である。性能指標の内容Ｃ１４４２は、ＢＥタスクごとに設定されている性能指標の具体的内容を示す。単位Ｃ１４４３は、性能指標の単位である。性能指標は、ＢＥタスクの性質に応じて設定されている。例えば、故障を予知して学習するＢＥタスクでは、一日分のログ情報を解析して学習することを性能指標としている。この性能指標の単位は、「時間」である。故障の予兆を診断するＢＥタスクでは、故障予知の診断対象とするセンサの数を性能指標とする。この性能指標の単位は、「センサ数」である。振動を診断するＢＥタスクでは、振動を検出するサンプリング周波数を性能指標とする。この性能指標の単位は、「周波数」である。画像データを解析するＢＥタスクでは、画像データの解析速度であるフレームレートを性能指標とする。この性能指標の単位は、「ｆｐｓ」である。
【００５５】
図７は、ＢＥタスクに設定可能な性能指標を管理するテーブル１４５を示す。このテーブル１４５は、コントローラ１が保持する。ＢＥタスク設定可能性能指標テーブル１４５は、例えば、ＢＥタスク名Ｃ１４５１と、設定可能な性能指標Ｃ１４５２と、対応するＣＰＵ動作周波数Ｃ１４５３を対応付けて管理する。
【００５６】
ＢＥタスク名Ｃ１４５１は、ＢＥタスクを識別する名称である。設定可能な性能指標Ｃ１４５２は、ＢＥタスクに設定することのできる性能指標を示す。対応するＣＰＵ動作周波数Ｃ１４５３は、設定可能な各性能指標に対応するＣＰＵ動作周波数である。ＢＥタスクに設定する性能指標を高くするほど、その性能指標の実現に要するＣＰＵ動作周波数も高くなる。ＣＰＵ動作周波数に代えてＣＰＵ使用率を用いる場合、高い性能指標にするほど、必要なＣＰＵ使用率は大きくなる。
【００５７】
ここで、コントローラ１が保持するＢＥタスク設定可能性能指標テーブル１４５は、プログラム配布装置２の保持するＢＥタスク設定可能性能指標マスタテーブル２３２の一部である。つまり、プログラム配布装置２は、登録されている各ＢＥタスクに設定可能な全ての性能指標をマスタテーブル２３２で管理している。プログラム配布装置２からコントローラ１へＢＥタスクが配布される際には、そのＢＥタスクに設定可能な性能指標の一覧も一緒に配布される。コントローラ１は、プログラム配布装置２から受領したＢＥタスクおよび設定可能な性能指標を、テーブル１４５へ登録して保持する。プログラム配布装置２の保持するマスタテーブル２３２の基本的な構成は、図７に示すＢＥタスク設定可能性能指標テーブル１４５と同様であるため、図示は省略する。
【００５８】
図８は、ＢＥタスクの最低動作時の性能指標を管理するテーブル１４６である。このテーブル１４６は、コントローラ１が保持する。ＢＥタスク最低動作性能指標テーブル１４６は、例えば、ＢＥタスク名Ｃ１４６１と、最低動作性能指標Ｃ１４６２と、対応するＣＰＵ動作周波数Ｃ１４６３を対応付けて管理する。
【００５９】
ＢＥタスク名Ｃ１４６１は、ＢＥタスクを識別する名称である。最低動作性能指標Ｃ１４６２は、ＢＥタスクが動作する際の最低の性能指標を示す。ＢＥタスクは、最低動作性能指標よりも低い性能で実行することはできない。対応するＣＰＵ動作周波数Ｃ１４６３は、ＢＥタスクが最低動作性能指標で実行する場合に必要なＣＰＵ動作周波数である。上述の通り、ＣＰＵ動作周波数に代えてＣＰＵ使用率を用いてもよい。
【００６０】
図９は、ＣＰＵ動作周波数を管理するテーブル１４７である。このテーブル１４７は、コントローラ１が保持する。ＣＰＵ動作周波数テーブル１４７は、ＣＰＵ１１の最大動作周波数を記憶する。
【００６１】
図１０は、ＣＰＵ１１の空き状況を管理するテーブル１４８である。このテーブル１４８は、コントローラ１が保持する。ＣＰＵ空き状況テーブル１４８は、例えば、動作周波数Ｃ１４８１と、ＣＰＵ使用率Ｃ１４８２を対応付けて管理する。
【００６２】
動作周波数Ｃ１４８１は、ＣＰＵ１１の現在の動作周波数である。ＣＰＵ使用率Ｃ１４８２は、ＣＰＵ１１の現在の使用率である。例えば、ＣＰＵ１１の最大動作周波数が１０００ＭＨｚであり、現在の動作周波数が６５０ＭＨｚである場合、ＣＰＵ１１は動作周波数３５０ＭＨｚだけ空いている。ＣＰＵ１１の現在の使用率が６５％であるならば、ＣＰＵ１１は３５％だけ空いている、つまり演算処理に余裕がある。
【００６３】
図１１は、ＢＥタスクの動作状態を管理するテーブル１４９を示す。このテーブル１４９は、コントローラ１が保持する。ＢＥタスク動作状態テーブル１４９は、例えば、ＢＥタスク名Ｃ１４９１と、動作状態Ｃ１４９２と、設定された性能指標Ｃ１４９３と、対応するＣＰＵ動作周波数Ｃ１４９４を対応付けて管理する。
【００６４】
ＢＥタスク名Ｃ１４９１は、ＢＥタスクを識別する名称である。動作状態Ｃ１４９２は、ＢＥタスクの現在の動作状態を示す。動作状態の値には、例えば「実行中」と「停止中」がある。設定された性能指標Ｃ１４９３は、ＢＥタスクに設定された性能指標を示している。ＢＥタスクは、設定された性能指標を目指して実行される。しかし、ベストエフォート型のタスクであるから、設定された性能指標は一つの目安、または、期待あるいは推定された性能にすぎない。従って、設定された性能指標通りにＢＥタスクが実行されるとは限らない。対応するＣＰＵ動作周波数Ｃ１４９４は、設定された性能指標に対応するＣＰＵ１１の動作周波数である。
【００６５】
図１２は、タスクへＣＰＵ１１のリソースを割り当てる様子を示す。コントローラ１のタスクスケジューラは、割込みタスクおよび周期タスクに対する、ＣＰＵリソースの割当てをスケジューリングする。
【００６６】
図１２（１）は、割込みタスクが発生していない場合を示す。図１２（２）は、割込みタスク（ＴＩａ）が周期タスク（ＴＰｂ）と周期タスク（ＴＰｃ）の間の隙間時間で発生した場合を示す。図１２（３）は、周期タスク（ＴＰｂ）の実行中に、割込みタスク（ＴＩａ）が発生した場合を示す。
【００６７】
図１２（１）に示すように、割込みタスクが発生していない場合、タスクスケジューラは、高優先度タスク優先度テーブル１４１の情報に従って、各周期タスク（ＴＰａ）（ＴＰｂ）（ＴＰｃ）にＣＰＵリソースを割り当てる。これら周期タスク（ＴＰａ）（ＴＰｂ）（ＴＰｃ）の優先度が互いに等しい場合、タスクスケジューラは、均等にＣＰＵリソースを割り当てる。タスクスケジューラは、各周期タスク（ＴＰａ）（ＴＰｂ）（ＴＰｃ）の実行時間が重複しないように、ＣＰＵリソースを均等に割り当てる。
【００６８】
図１２（２）では、周期タスク（ＴＰｂ）と周期タスク（ＴＰｃ）の間の空いている時間に、割込みタスク（ＴＩａ）が発生して実行されている。もともと空いている時間帯なので、各周期タスク（ＴＰａ）（ＴＰｂ）（ＴＰｃ）の実行時間に変更は生じない。周期タスク（ＴＰａ）（ＴＰｂ）（ＴＰｃ）は、図１２（１）と同様のタイミングと時間で、実行される。
【００６９】
図１２（３）では、周期タスク（ＴＰｂ）の実行中に、割込みタスク（ＴＩａ）が発生している。上述の通り、割込みタスクの優先度は、周期タスクの優先度よりも高くなるように設定されている。従って、タスクスケジューラは、周期タスク（ＴＰｂ）の処理を一時中断し、中断した時間帯（ｔ１−ｔ２）で割込みタスク（ＴＩａ）を実行する。
【００７０】
図１２の状況において、ＢＥタスクを動作する場合を説明する。ＢＥタスクの優先度は、高優先度タスクの優先度よりも低い。このため、タスクスケジューラは、割込みタスクや周期タスクの実行中では、ＢＥタスクへＣＰＵリソースを割り当てない。タスクスケジューラは、周期タスクおよび割込みタスクがいずれも実行されていない期間に、ＢＥタスクへＣＰＵリソースを割り当てる。図１２では、ＢＥタスクの実行が可能な時間の一部を点線で示している。
【００７１】
本実施例では、タスク管理部１３０は、ＢＥタスクに対して割当て可能なＣＰＵリソースを以下のように試算する。
【００７２】
図１３は、ＣＰＵ１１の空き状況を算出して記憶する処理のフローチャートである。本処理は、例えばコントローラ１の起動時や、図１７で述べるＢＥタスク動作設定画面Ｇ１０の作成時に、実行する。本処理の実行主体はタスク管理部１３０であるが、コントローラ１を実行主体として説明する。
【００７３】
コントローラ１は、まず最初に、周期タスク動作テーブル１４３に記載された各周期タスクのＣＰＵ使用率の和（値Ａ）を計算する（Ｓ１０）。ここで、各周期タスクのＣＰＵ使用率は、平均実行時間と動作周期との商からもとめられる（ＣＰＵ使用率＝動作周期／平均実行時間）。
【００７４】
図５に示す周期タスク動作テーブル１４３の場合、周期タスＴＰａのＣＰＵ使用率は、１０％（１００μｓ／１０００μｓ＝０．１）となる。周期タスクＴＰｂのＣＰＵ使用率は、２０％となる（２００／２０００＝０．１）。周期タスクＴＰｃのＣＰＵ使用率は、１５％となる（７５／５００＝０．１５）。従って、各周期タスクのＣＰＵ使用率の和（値Ａ）は、３５％となる（１０％＋１０％＋１５％＝３５％）。
【００７５】
コントローラ１は、（１−Ａ）とＣＰＵ動作周波数テーブル１４７のＣＰＵ動作周波数（値Ｂ）との積を算出して、値Ｃを得る（Ｃ＝Ｂ＊（１−Ａ））。具体例で説明する。ＣＰＵ動作周波数（値Ｂ）は１０００ＭＨｚであり、値Ａは３５％であるから、値Ｂと値（１−Ａ）との積（値Ｃ）は、６５０ＭＨｚとなる（１０００ＭＨｚ＊（１００−３５／１００）=６５０ＭＨｚとなる（Ｓ１１）。
【００７６】
コントローラ１は、値ＣをＣＰＵ空き状況テーブル１４８の動作周波数ｃ１４８３へ格納すると共に、値（Ｃ／Ｂ）をＣＰＵ空き状況テーブル１４８のＣＰＵ使用率Ｃ１４８１へ格納する（Ｓ１２）。
【００７７】
図１４は、停止中のＢＥタスクの実行可否を判定する処理のフローチャートである。本処理は、図１７で述べるＢＥタスク動作設定画面Ｇ１０の描画時等に、タスク管理部１３０により実行される。以下、動作主体をコントローラ１であるとして説明する。
【００７８】
コントローラ１は、図１６で後述する処理により、追加でＢＥタスクを実行可能なＣＰＵ動作周波数（値Ｆ）を算出する（Ｓ２０）。すなわち、コントローラ１は、ＣＰＵ１１のリソースがどの程度残っているかを算出する。
【００７９】
コントローラ１は、ＢＥタスク動作状態テーブル１４９を参照し、動作状態Ｃ１４９２が「停止中」であるタスクを一つ選択する（Ｓ２１）。以下、動作を停止しているＢＥタスクを「停止中ＢＥタスク」と呼ぶ場合がある。
【００８０】
コントローラ１は、ＢＥタスク最低動作性能指標テーブル１４６の欄Ｃ１４６３から、ステップＳ２１で選択した停止中ＢＥタスクに対応するＣＰＵ動作周波数（値Ｇ）を読み出す（Ｓ２２）。
【００８１】
コントローラ１は、ステップＳ２０で算出した値Ｆと、ステップＳ２２で読み出した値Ｇとを比較し、値Ｆが値Ｇよりも大きいか判定する（Ｓ２３）。
【００８２】
コントローラ１は、値Ｆが値Ｇよりも大きければ（Ｓ２３：ＹＥＳ）、ステップＳ２１で選択した停止中ＢＥタスクは実行可能であると判断し、図１７に示すＢＥタスク動作設定画面Ｇ１０において「停止中」と表示する（Ｓ２４）。
【００８３】
これに対し、コントローラ１は、値Ｆが値Ｇ以下の場合（Ｓ２３：ＮＯ）、ステップＳ２１で選択した停止中ＢＥタスクは実行することができないと判定し、ＢＥタスク動作設定画面Ｇ１０において「実行不可能」と表示する（Ｓ２５）。
【００８４】
コントローラ１は、ステップＳ２４またはステップＳ２５を実行した後で、全ての停止中ＢＥタスクについて実行可否を判定したか確認する（Ｓ２６）。コントローラ１は、未だ判定していない停止中ＢＥタスクがある場合（Ｓ２６：ＮＯ）、ステップＳ２１へ戻り、未判定の停止中ＢＥタスクを一つ選択する。コントローラ１は、ＢＥタスク動作状態テーブル１４９に記載されている全ての停止中ＢＥタスクについての実行可否を判断すると（Ｓ２６：ＹＥＳ）、本処理を終了する。
【００８５】
図１５は、ＢＥタスクに設定することのできる性能指標を判定する処理を示すフローチャートである。本処理は、タスク管理部１３０により、ＢＥタスク動作設定画面Ｇ１０の作成時等に実行される。ここでも動作主体をコントローラ１として説明する。
【００８６】
コントローラ１は、図１６で述べる処理により、追加でＢＥタスクを実行可能なＣＰＵ動作周波数（値Ｆ）を算出する（Ｓ３０）。
【００８７】
コントローラ１は、ＢＥタスク動作状態テーブル１４９を参照し、動作状態Ｃ１４９２に「実行中」または「停止中」のいずれかが設定されているＢＥタスクの中から、いずれか一つを選択する（Ｓ３１）。
【００８８】
コントローラ１は、ＢＥタスク設定可能性能指標テーブル１４５を参照し、ステップＳ３１で選択したＢＥタスクに対応するＣＰＵ動作周波数Ｃ１４５２の中から一つのＣＰＵ動作周波数（値Ｈ）を読み出す（Ｓ３２）。
【００８９】
コントローラ１は、ステップＳ３０で取得した値ＦとステップＳ３２で取得した値Ｈとを比較し、値Ｆが値Ｈよりも大きいか判定する（Ｓ３３）。コントローラ１は、値Ｆが値Ｈよりも大きい場合（Ｓ３３：ＹＥＳ）、ステップＳ３２で選択したＣＰＵ動作周波数に対応する性能指標を、ステップＳ３１で選択したＢＥタスクに設定可能であると判定する（Ｓ３４）。
【００９０】
コントローラ１は、値Ｆが値Ｈ以下の場合（Ｓ３３：ＮＯ）、ステップＳ３２で選択したＣＰＵ動作周波数に対応する性能指標を、ステップＳ３１で選択したＢＥタスクに設定することはできないと判定する（Ｓ３５）。
【００９１】
コントローラ１は、ステップＳ３４またはＳ３５を実行した後、ステップＳ３１で選択したＢＥタスクに関する全ての性能指標について、そのＢＥタスクへ設定可能であるか否かを判定したか、を確認する（Ｓ３６）。
【００９２】
コントローラ１は、ステップＳ３１で選択したＢＥタスクについて設定の可否を判定していない性能指標がある場合（Ｓ２６：ＮＯ）、ステップＳ３２に戻る。コントローラ１は、ＢＥタスク設定可能性能指標テーブル１４５の動作周波数Ｃ１４５２の中から、ステップＳ３１で選択したＢＥタスクに関する他のＣＰＵ動作周波数を一つ選択する。以後は、上述の処理を実行する。そして、コントローラ１は、ステップＳ３１で選択したＢＥタスクに関する全ての性能指標について、その設定の可否を判定した場合（Ｓ３６：ＹＥＳ）、ステップＳ３７へ移る。
【００９３】
コントローラ１は、ＢＥタスク動作状態テーブル１４９の動作状態Ｃ１４９２に「実行中」または「停止中」のいずれかが設定されているＢＥタスクの全てについて、判定したかを確認する（Ｓ３７）。
【００９４】
コントローラ１は、未判定のＢＥタスクがある場合（Ｓ３７：ＮＯ）、ステップＳ３１へ戻り、ＢＥタスク動作状態テーブル１４９の中から、動作状態Ｃ１４９２が「実行中」または「停止中」のいずれかであるＢＥタスクを一つ選択する。以後は、上述の処理を実行する。そして、コントローラ１は、動作状態Ｃ１４９２に「実行中」または「停止中」のいずれかが設定されているＢＥタスクの全てについて、性能指標の設定可否を判定すると（Ｓ３７：ＹＥＳ）、本処理を終了する。
【００９５】
図１６は、追加でＢＥタスク実行可能なＣＰＵ動作周波数（値Ｆ）を算出する処理を示すフローチャートである。
【００９６】
コントローラ１は、ＢＥタスク動作状態テーブル１４９の動作状態Ｃ１４９２が「実行中」である全てのＢＥタスクについて、性能指標Ｃ１４９３に設定されているＣＰＵ動作周波数を読出し、それらの和（値Ｄ）を算出する（Ｓ４０）。
【００９７】
コントローラ１は、ＣＰＵ空き状況テーブル１４８の欄Ｃ１４８１から、ＣＰＵ動作周波数を値Ｅとしてを読み出す（Ｓ４１） 。コントローラ１は、ステップＳ４１で取得した値ＥとステップＳ４０で取得した値Ｄとの差Ｆを計算し（Ｆ＝Ｅ−Ｄ）、その差Ｆを、追加でＢＥタスクを実行可能なＣＰＵ動作周波数（値Ｆ）とする（Ｓ４２）。つまり、コントローラ１は、現在実行中のＢＥタスクで消費しているＣＰＵ動作周波数の合計と、ＣＰＵ１１の最大動作周波数との差（Ｆ）を、新たなＢＥタスクの実行に割当て可能な動作周波数として算出する。
【００９８】
図１７は、ＢＥタスク動作設定画面Ｇ１０の例を示す。ＢＥタスク動作設定画面Ｇ１０は、ユーザインターフェース部１５０からユーザへ提供される。ユーザインターフェース部１５０は、設定画面Ｇ１０を、例えばＷｅｂサーバの提供するＷｅｂページのようにユーザへ提供し、ユーザとの間で情報を交換することができる。設定画面Ｇ１０を作成する処理については、図１８で後述する。
【００９９】
設定画面Ｇ１０は、例えば、目安表示部ＧＰ１０と、タスク一覧ＧＰ１１と、設定ボタンＧＰ１２と、キャンセルボタンＧＰ１３と、注意表示部ＧＰ１４とを含む。
【０１００】
目安表示部ＧＰ１０は、ＢＥタスクを新たに実行可能なＣＰＵリソースの目安を表示する領域である。タスク一覧ＧＰ１１は、コントローラ１が管理しているＢＥタスクの一覧を示す。タスク一覧ＧＰ１１は、例えば、「タスク名」、「動作状態」、「性能指標の内容」、「最低動作性能指標」、「最低動作周波数」、「設定性能指標」、「設定動作周波数」を対応付けて一覧表示する。
【０１０１】
「タスク名」は、コントローラ１の管理下のＢＥタスクを識別する名称である。「動作状態」は、各ＢＥタスクの動作状態を示す。動作状態には例えば停止中、実行中、実行不可がある。ユーザは、「停止中」または「実行中」であるＢＥタスクの動作状態を、プルダウンメニュー等で変更可能である。「性能指標の内容」は、ＢＥタスクの性能を知るための指標の内容を示す。「最低動作性能指標」は、ＢＥタスクが最低限の動作をする際の性能指標である。「最低動作周波数」は、最低動作性能指標に対応するＣＰＵ動作周波数である。「設定性能指標」は、ＢＥタスクに現在設定されている性能指標である。「設定動作周波数」は、設定性能指標に対応するＣＰＵ動作周波数である。ユーザは、実行中のＢＥタスクに設定されている性能指標を、プルダウンメニューＧＰ１６等で変更することができる。
【０１０２】
ユーザは、画面Ｇ１０への入力でＢＥタスクの動作を設定する場合は、設定ボタンＧＰ１２を操作する。逆に、ユーザは、画面Ｇ１０への入力を取り消す場合、キャンセルボタンＧＰ１３を操作する。
【０１０３】
注意表示部ＧＰ１４は、ＢＥタスクに設定した性能指標は、その実現を保証するものではなく、目安に過ぎないことをユーザへ通知するためのメッセージを表示する。
【０１０４】
上述のＢＥタスク動作設定画面Ｇ１０を表示することで、ユーザは、ＢＥタスクの利用可能なＣＰＵリソースの目安を知ることができる。さらに、ＢＥタスクの性能指標は、１日分のログ情報の学習時間、サンプリング周波数、センサ数、フレームレートといった、各ＢＥタスクの性能を直感的に把握できる情報として提供されている。従って、ユーザは、画面Ｇ１０へのＧＵＩ操作により、所望の性能指標を簡単に設定できる。
【０１０５】
図１２に示すように、割込みタスクが発生した場合や周期タスクの実行時間が長くなったりした場合には、ＢＥタスクの利用可能なＣＰＵリソースがＣＰＵ空き状況テーブル１４８に示す値よりも減少する。このため、ＢＥタスクは、設定された性能指標よりも低い性能しか発揮できない可能性もある。そこで、ＢＥタスク動作設定画面Ｇ１０では、注意表示部ＧＰ１４を設けて、ユーザへ注意を促している。
【０１０６】
図１８は、ＢＥタスク動作設定画面Ｇ１０を作成する処理のフローチャートである。本処理は、コントローラ１のタスク管理部１３０がＢＥタスク動作設定画面Ｇ１０の描画時に実行する。以下、動作主体をコントローラ１として述べる。
【０１０７】
コントローラ１は、ＣＰＵ空き状況テーブル１４８を参照し、ＢＥタスクを実行可能なＣＰＵリソースの値Ｃ１４８１，Ｃ１４８２を読出し、ＣＰＵ使用率（動作周波数）の目安として描画する（Ｓ５０）。
【０１０８】
コントローラ１は、ＢＥタスク性能指標テーブル１４４、ＢＥタスク動作状態テーブル１４９、ＢＥタスク最低動作性能指標テーブル１４６に記載の情報を元に、タスク一覧ＧＰ１１に表示するテーブルを描画する（Ｓ５１）。
【０１０９】
コントローラ１は、ＢＥタスク設定可能性能指標テーブル１４５を参照し、各ＢＥタスクへ設定可能な性能指標欄Ｃ１４５２の値を内部的に保持する（Ｓ５２）。コントローラ１は、停止中のＢＥタスクを実行再開できるか否か判定し、停止中のＢＥタスクのうち実行不可能と判定したＢＥタスクについて「実行不可能」と表記し、ユーザが選択できないようにする（Ｓ５３）。
【０１１０】
コントローラ１は、各ＢＥタスクへ設定可能な性能指標を判定し、設定不可能な性能指標をＳ５２で保持した内容から除外する（Ｓ５４）。以上の処理を実行することで、図１７に示す設定画面Ｇ１０を作成することができる。
【０１１１】
図１９は、コントローラ１へＢＥタスクをインストールする処理を示すフローチャートである。コントローラ１は、ユーザインターフェース部１５０からユーザに向けて、ＢＥタスクをコントローラ１へインストールするためのインストール画面を提供する。ユーザは、図示せぬインストール画面を呼び出して、ＢＥタスクのインストールを要求することができる。
【０１１２】
コントローラ１は、ユーザからのインストール指示を受領すると、プログラム配布装置２へ接続し、ユーザの指定したＢＥタスクのインストールをプログラム配布装置２に要求する（Ｓ６０）。
【０１１３】
プログラム配布装置２は、インストール要求を受領すると、ＣＰＵ１１の動作周波数とコントローラ１にインストール済みのＢＥタスクの一覧とを、コントローラ１に要求する（Ｓ６１）。
【０１１４】
コントローラ１は、ＣＰＵ動作周波数テーブル１４７に記載されたＣＰＵ動作周波数とＢＥタスク動作状態テーブル１４９に記載されたＢＥタスク名Ｃ１４９１の情報とを、プログラム配布装置２へ送信する（Ｓ６２）。
【０１１５】
プログラム配布装置２は、ＢＥタスク設定可能性能指標マスタテーブル２３２とコントローラ１のＣＰＵ動作周波数およびＢＥタスク名の一覧とを比較し、コントローラ１がインストール可能なＢＥタスクの一覧を検出する。プログラム配布装置２は、コントローラ１がインストール可能なＢＥタスク一覧を、コントローラ１へ送信する（Ｓ６３）。
【０１１６】
コントローラ１は、プログラム配布装置２から受信したＢＥタスク一覧をユーザインターフェース部１５０を介してユーザに提示する。ユーザは、提示されたＢＥタスクの中から、所望のＢＥタスクを選択する。ユーザの選択結果は、ユーザインターフェース部１５０からコントローラ１へ入力される（Ｓ６４）。
【０１１７】
コントローラ１は、ユーザの選択したＢＥタスクのインストールを、プログラム配布装置２へ要求する（Ｓ６５）。プログラム配布装置２は、コントローラ１から要求されたＢＥタスクのプログラムとそのＢＥタスクに設定可能な性能指標の情報とを、コントローラ１へ送信する（Ｓ６６）。
【０１１８】
コントローラ１は、プログラム配布装置２から受信したＢＥタスクをＢＥタスク実行部１２０にインストールし、さらに、そのＢＥタスクに設定可能な性能指標の情報を、ＢＥタスク性能指標テーブル１４４と、 ＢＥタスク設定可能性能指標テーブル１４５と、ＢＥタスク動作状態テーブル１４９と、ＢＥタスク最低動作性能指標テーブル１４６と、ＢＥタスク優先度テーブル１４２とに、それぞれ追記する（Ｓ６７）。
【０１１９】
このように構成される本実施例によれば、シングルチップ、シングルコア構成のＣＰＵ１１によって、周期タスクおよび割込みタスクを優先的に実行しながら、それらの高優先度タスクが実行されていない場合の余裕資源を利用してＢＥタスクをできる限りの性能で実行させることができる。従って、本実施例のコントローラ装置は、複数のマイクロプロセッサや複数コアを有するマイクロプロセッサを用いることなく、複数のタスクをその優先度の相違に応じてそれぞれ実行することができ、装置構成を簡素化して製造コストを低減することができる。
【０１２０】
本実施例では、ＢＥタスクの実行性能の目安となる指標をユーザへ提示するため、ユーザは、ＢＥタスクがどの程度の性能で実行されるかを事前に確認することができ、使い勝手が向上する。さらに、本実施例では、時間、センサ数、周波数、フレームレートなどのように、ＢＥタスクの性質に応じた分かり易い性能指標をユーザへ提示するため、不慣れなユーザであっても直感的にＢＥタスクの性能を把握することができる。
【０１２１】
さらに本実施例では、ＢＥタスク動作設定画面Ｇ１０の注意表示部ＧＰ１４を通じて、ＢＥタスクの性能指標は目安であることを通知するため、ユーザが誤解するのを未然に防止することができ、これによっても使い勝手が向上する。
【実施例２】
【０１２２】
図２０を用いて第２実施例を説明する。本実施例を含む以下の各実施例は、第１実施例の変形例に該当するため、第１実施例との相違を中心に説明する。本実施例では、ＢＥタスクの平均実行時間をコントローラ１へ設定する方法を幾つか説明する。
【０１２３】
図２０は制御システムの全体図である。プログラム配布装置２は、複数のコントローラ１（１）〜（３）と接続されている。それらコントローラ１（１）〜（３）は同一事業所に設けられていてもよいし、それぞれ異なる事業所に設けられてもよい。ここでは、コントローラ１（１），（２）が既設であり、コントローラ１（３）が新設されたものであると仮定して説明する。なお、コントローラ１の新設時に限らず、コントローラ１の管理する制御システムの構成が変化した場合や、ユーザが更新を指示した場合に、以下の処理を実行することもできる。
【０１２４】
本実施例のプログラム配布装置２は、第１実施例で述べた構成に加えて、実績値解析部２４０とパラメータ設定部２５０とを備える。
【０１２５】
実績値解析部２４０は、複数のコントローラ１（１），（２）のタスク管理部１３０から、周期タスクの平均実行時間やＢＥタスクの動作パラメータをそれぞれ収集して（Ｓ７０）、解析する（Ｓ７１）。実績値解析部２４０は、複数のコントローラ１（１），（２）における各タスクの実行実績を統計処理等することで、より正確な推定値を得ることができる。
【０１２６】
パラメータ設定部２５０は、実績値解析部２４０の解析結果を、更新対象のコントローラ１（３）のタスク管理部１３０へ送信し、周期タスクの平均実行時間やＢＥタスクの動作パラメータ（例えば最低動作性能指標など）を更新させる（Ｓ７２）。新設のコントローラ１（３）に初期設定されていた各種パラメータは、実績値解析部２４０の算出した最新値に更新される。パラメータ設定部２５０の機能は、タスク配布管理部２１０が実行してもよい。
【０１２７】
既設のコントローラ１（１），（２）での実績値を統計処理する方法に代えて、あるいは、統計する処理と共に、シミュレータ５を用いてもよい。シミュレータ５は、各タスクの動作環境を模擬した環境で、各タスクの実行を事前にテストし、各タスクのパラメータを調製する（Ｓ８０）。パラメータ設定部２５０は、シミュレータ５の結果に従って、対象のコントローラ１（３）の持つ各タスクのパラメータを更新する。
【０１２８】
このように構成される本実施例も第１実施例と同様の作用効果を奏する。さらに本実施例では、コントローラ１の持つ各タスクのパラメータを更新することができるため、ＣＰＵ１１の空き状況などをより正確に算出することができ、ＢＥタスクの性能指標の実現精度を高めることができる。
【０１２９】
コントローラ１の設けられる制御システムは、常に一定というわけではなく、制御対象機器３の経年劣化等によって変化する。また制御システムの設けられる現場の条件や周囲環境も変化する。従って、各タスクの実行に要する時間は変化する。
【０１３０】
また、ＢＥタスクは、いわゆるオープンソースプログラムを利用して作成することもできるため、セキュリティ対策などのためにプログラムが適宜修正される。プログラムの修正に伴い、ＢＥタスクの実行性能は変化する。本実施例では、プログラム修正されたＢＥタスクの動作を事前にシミュレータ５で確認することができ、必要に応じてパラメータを変更等できるため、ＢＥタスクの信頼性を高めることができ、使い勝手が向上する。
【実施例３】
【０１３１】
図２１を用いて第３実施例を説明する。本実施例では、ユーザが簡単にＢＥタスクの動作を設定できるようにした。図２１は、本実施例のＢＥタスク動作設定画面Ｇ１０Ａの例を示す。
【０１３２】
本実施例の画面Ｇ１０Ａは、簡易設定部ＧＰ１７を備える。簡易設定部ＧＰ１７は、ユーザの選択した希望に従って、ＢＥタスクの動作を自動的に設定する。簡易設定部ＧＰ１７では、例えば、「できるだけ多くのＢＥタスクを実行する」「優先度の高いＢＥタスクを優先して実行する」などの条件をユーザが選択できる。
【０１３３】
「できるだけ多くのＢＥタスクを実行する」ためには、例えば、選択したＢＥタスクのＣＰＵ動作周波数の合計値が、空いているＣＰＵ動作周波数の値に一致するまで（空いているＣＰＵ動作周波数の値を超えない限りで最も近づくまで）、実行に必要なＣＰＵ動作周波数の少ない順でＢＥタスクを選択すればよい。
【０１３４】
また、「優先度の高いＢＥタスクを優先して実行する」ためには、例えば、選択したＢＥタスクのＣＰＵ動作周波数の合計値が、空いているＣＰＵ動作周波数の値に一致するまで（空いているＣＰＵ動作周波数の値を超えない限りで最も近づくまで）、優先度の高い順であって、かつ実行に必要なＣＰＵ動作周波数の少ない順に、ＢＥタスクを選択すればよい。
【０１３５】
タスク管理部１３０は、簡易設定部ＧＰ１７から取得した選択結果に従って、ＢＥタスク動作設定部Ｇ１０Ａの具体的内容を自動的に設定し、ユーザへ提示する。
【０１３６】
このように構成される本実施例も第１実施例と同様の作用効果を奏する。さらに本実施例では、簡易設定部ＧＰ１７を設けるため、不慣れなユーザであってもＢＥタスクの動作を所望の値に設定することができる。本実施例では、ＢＥタスクに関する直感的な性能指標の表示と、ＢＥタスクの動作を簡易設定するための簡易設定部ＧＰ１７とが結合することで、ユーザの使い勝手がさらに向上する。
【実施例４】
【０１３７】
図２２を用いて第４実施例を説明する。本実施例では、ＢＥタスクと高優先度タスクとが連携する場合を説明する。図２２は、ＢＥタスクと高優先度タスク（周期タスク、割込みタスク）が連携して相互作用する例を示すフローチャートである。
【０１３８】
ＢＥタスクの実行結果が高優先度タスクに作用する例を説明する。ＢＥタスク実行部１２０は、故障の予兆を検出すると、タスク管理部１３０へ通知する（Ｓ９０）。タスク管理部１３０は、その故障予兆に対応するか否か、さらに、対応する場合のパラメータ変更について評価する（Ｓ９１）。タスク管理部１３０は、故障予兆に対応すると評価した場合、パラメータの変更を高優先度タスク実行部１１０へ指示する（Ｓ９３）。
【０１３９】
例えば、故障の予兆が検出された場合に、設定温度や設定圧力などの設定値あるいは動作周期などの、周期タスクのパラメータを変更することで、故障の可能性を低下させたり、故障までの時間を引き延ばしたりすることができる。周期タスクの動作周期が低下する場合、ＢＥタスクの実行時の性能を高くできるため、より一層、故障予兆などの処理の頻度や精度を高めることができる。
【０１４０】
図２２の下側に示すように、高優先度タスク実行部１１０は、何らかの異常を検出すると、タスク管理部１３０へ通知する（Ｓ９４）。タスク管理部１３０は、この異常検知を診断し、ＢＥタスクの実行が必要であるか否か判定する（Ｓ９５）。例えば、異常な音が検出された場合に、タスク管理部１３０は、故障予兆診断ＢＥタスクや振動診断タスクを起動させるべきか否か判定する。
【０１４１】
ＢＥタスク実行部１２０は、実行させるべきＢＥタスクがインストールされているか否か判定し、インストールされていない場合は、プログラム配布装置２に対してインストールを要求する（Ｓ９６）。この処理は、図１９で述べたので割愛する。
【０１４２】
ＢＥタスク実行部１２０は、実行させるべきＢＥタスクの実行を、ＢＥタスク実行部１２０に対して指示する（Ｓ９７）。ＢＥタスク実行部１２０は、指示されたＢＥタスクを実行する。
【０１４３】
これにより本実施例では、第１実施例と同様の作用効果を奏する上に、ＢＥタスクと高優先度タスクとを連携させることができるため、コントローラ１の信頼性を高めることができる。
【０１４４】
なお、本発明は、上述した実施形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。上述の実施形態において、添付図面に図示した構成例に限定されない。本発明の目的を達成する範囲内で、実施形態の構成や処理方法は適宜変更することが可能である。
【０１４５】
また、本発明の各構成要素は、任意に取捨選択することができ、取捨選択した構成を具備する発明も本発明に含まれる。さらに特許請求の範囲に記載された構成は、特許請求の範囲で明示している組合せ以外にも組み合わせることができる。
【０１４６】
本実施形態は、例えば下記のように表現することもできる。
「高い優先度に設定される一つ以上の第１タスクと低い優先度に設定される一つ以上の第２タスクとを、一度に一つのタスクを実行する単一のマイクロプロセッサを有するコントローラ装置により実行させるためのコンピュータプログラムであって、
前記マイクロプロセッサの有する演算処理資源のうち前記第２タスクの実行に割当て可能な余裕資源を算出し、
前記算出した余裕資源を用いて前記第２タスクを実行した場合の、前記第２タスクの性能の推定値を示す性能指標を決定し、
前記余裕資源と前記性能指標とを出力する、
コンピュータプログラム。」
【０１４７】
「優先度の異なる複数のタスクを実行するコントローラ装置と、前記コントローラ装置へタスクを配布するプログラム配布装置を備える制御システムであって、
前記コントローラ装置は、
一度に一つのタスクを実行する単一のマイクロプロセッサと、
前記マイクロプロセッサにより実現され、高い優先度に設定される一つ以上の第１タスクを実行する第１タスク実行部と、
前記マイクロプロセッサにより実現され、低い優先度に設定される一つ以上の第２タスクを実行する第２タスク実行部と、
前記マイクロプロセッサの有する演算処理資源のうち前記第２タスクの実行に割当て可能な余裕資源を算出し、前記算出した余裕資源を用いて前記第２タスクを実行した場合の、前記第２タスクの性能の推定値を示す性能指標を決定し、前記余裕資源と前記性能指標とを出力するタスク管理部と、
を備え、
前記プログラム配布装置は、前記コントローラ装置から要求された第２タスクと、その第２タスクのインストールに際して必要な情報とを、前記コントローラ装置へ送信してインストールさせる、
制御システム。」
【符号の説明】
【０１４８】
１：コントローラ、２：プログラム配布装置、３：制御対象機器、３１：センサ、３２：アクチュエータ、１１０：高優先度タスク実行部、１２０：ＢＥタスク実行部、１３０：タスク管理部、１４０：記憶部、１５０：ユーザインターフェース部、２１０：タスク配布管理部、２２０：データベース管理部、２３０：記憶部
【図１】
0006580505.tif 000002
【図２】
0006580505.tif 000003
【図３】
0006580505.tif 000004
【図４】
0006580505.tif 000005
【図５】
0006580505.tif 000006
【図６】
0006580505.tif 000007
【図７】
0006580505.tif 000008
【図８】
0006580505.tif 000009
【図９】
0006580505.tif 000010
【図１０】
0006580505.tif 000011
【図１１】
0006580505.tif 000012
【図１２】
0006580505.tif 000013
【図１３】
0006580505.tif 000014
【図１４】
0006580505.tif 000015
【図１５】
0006580505.tif 000016
【図１６】
0006580505.tif 000017
【図１７】
0006580505.tif 000018
【図１８】
0006580505.tif 000019
【図１９】
0006580505.tif 000020
【図２０】
0006580505.tif 000021
【図２１】
0006580505.tif 000022
【図２２】
0006580505.tif 000023