(57)【要約】【課題】単一の制御装置により提供可能な限られた処理リソースを効率的に利用するためのサポート装置およびそのサポート装置を実現するためのサポートプログラムを提供する。【解決手段】サポート装置は、アプリケーションプログラムに含まれるコマンドの構文解析に要する負荷の度合いを算出する負荷推定手段と、算出された負荷の度合いに基づいて、第２のタスクに設定すべき優先度を算出する優先度算出手段とを含む。【選択図】図２
2019061467.tif 000002
【特許請求の範囲】
【請求項１】
１または複数のプロセッサを有する制御装置に接続されるサポート装置であって、前記制御装置は、複数のタスクを各タスクに設定された優先度に基づいて処理するように構成されており、
前記複数のタスクは、
内部コマンドに従って第１の周期毎に制御指令を出力する処理を含む第１のタスクと、
前記第１の周期より長い第２の周期毎に、インタプリタ言語で記述されたアプリケーションプログラムの少なくとも一部を構文解析して前記内部コマンドを逐次生成する処理を含む第２のタスクと、
前記第１のタスクおよび前記第２のタスクとは異なる処理を含む第３のタスクとを含み、
前記サポート装置は、
前記アプリケーションプログラムに含まれるコマンドの構文解析に要する負荷の度合いを算出する負荷推定手段と、
算出された負荷の度合いに基づいて、前記第２のタスクに設定すべき優先度を算出する優先度算出手段とを備える、サポート装置。
【請求項２】
前記第２のタスクに設定すべき優先度をユーザへ提示する提示手段をさらに備える、請求項１に記載のサポート装置。
【請求項３】
ユーザ入力に応答して、前記第２のタスクに対する優先度の設定を反映する設定手段をさらに備える、請求項１または２に記載のサポート装置。
【請求項４】
前記アプリケーションプログラムは、目標軌跡を定義する１または複数のコマンドを含んでおり、
前記第２のタスクは、前記目標軌跡上の通過点を逐次算出する処理、および、当該算出される複数の通過点を含む移動経路に基づいて前記内部コマンドを生成する処理を含み、
前記負荷推定手段は、前記第２の周期の長さ、前記内部コマンドの生成に用いる通過点の数、および、算出する通過点の間隔の少なくとも一つを反映して、前記負荷の度合いを算出する、請求項１〜３のいずれか１項に記載のサポート装置。
【請求項５】
前記負荷推定手段は、コマンド毎に演算負荷係数を規定した演算負荷係数情報を参照することで、前記負荷の度合いを算出する、請求項１〜４のいずれか１項に記載のサポート装置。
【請求項６】
前記制御装置における前記第２のタスクの実行状況を取得するとともに、取得した実行状況に基づいて前記演算負荷係数情報を更新する学習手段をさらに備える、請求項５に記載のサポート装置。
【請求項７】
前記制御装置を模擬するエミュレータと、
前記エミュレータにおいて前記複数のタスクを実行することで取得される実際の演算負荷の度合いに基づいて、前記第２のタスクに設定すべき優先度を算出する第２の優先度算出手段とをさらに備える、請求項１〜６のいずれか１項に記載のサポート装置。
【請求項８】
前記制御装置において前記複数のタスクを実行することで取得される実際の演算負荷の度合いに基づいて、前記第２のタスクに設定すべき優先度を算出する第３の優先度算出手段をさらに備える、請求項１〜７のいずれか１項に記載のサポート装置。
【請求項９】
１または複数のプロセッサを有する制御装置に接続されるサポート装置を実現するためのサポートプログラムであって、前記制御装置は、複数のタスクを各タスクに設定された優先度に基づいて処理するように構成されており、
前記複数のタスクは、
内部コマンドに従って第１の周期毎に制御指令を出力する処理を含む第１のタスクと、
前記第１の周期より長い第２の周期毎に、インタプリタ言語で記述されたアプリケーションプログラムの少なくとも一部を構文解析して前記内部コマンドを逐次生成する処理を含む第２のタスクと、
前記第１のタスクおよび前記第２のタスクとは異なる処理を含む第３のタスクとを含み、
前記サポートプログラムは、コンピュータに
前記アプリケーションプログラムに含まれるコマンドの構文解析に要する負荷の度合いを算出するステップと、
算出された負荷の度合いに基づいて、前記第２のタスクに設定すべき優先度を算出するステップとを実行させる、サポートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御対象を制御するための制御装置に接続されるサポート装置およびそのサポート装置を実現するためのサポートプログラムに関する。
【背景技術】
【０００２】
生産現場においては、様々なＦＡ（Factory Automation）技術が広く普及している。このようなＦＡシステムは、ＰＬＣ（プログラマブルコントローラ）といった制御装置だけではなく、ＣＮＣ（Computer Numerical Control：コンピュータ数値制御）およびロボットなどの高度な動作が可能な各種アクチュエータなどを含む。このようなＦＡシステムはますます大規模化する傾向にある。
【０００３】
例えば、特開２００１−０２７９０４号公報（特許文献１）は、複数のＣＮＣ装置を連結させることで、制御する軸数を増大させ、かつ、複数のＣＮＣ装置間の同期を取ることができる数値制御システムを開示する。この数値制御システムにおいて、マスタユニットおよび１または複数のスレーブユニットがケーブルを介して接続されている。マスタユニットおよびスレーブユニットの各々は、ラダープログラムを実行するＰＬＣ用プロセッサおよびＣＮＣ用プロセッサを有している。
【０００４】
また、特開２０１６−０９２５４４号公報（特許文献２）は、マスタ制御装置により第１制御対象物を制御するとともに、当該マスタ制御装置とネットワークを介して接続されるスレーブ制御装置により第１制御対象物と異なる第２制御対象物を制御する制御システムを開示する。この制御システムは、マスタ制御装置およびスレーブ制御装置を含む。マスタ制御装置およびスレーブ制御装置の各々は、演算処理部を有するコントローラとは別に、別の演算処理部を有するロボットコントローラを含んでいる。
【０００５】
近年のＩＣＴ（Information and Communication Technology）の進歩に伴って、制御装置の処理能力も飛躍的に向上しつつある。従来技術においては複数の専用装置を用いて実現されていたＦＡシステムをより少ない数の制御装置で実現したいというニーズも生じている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−０２７９０４号公報
【特許文献２】特開２０１６−０９２５４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述した特許文献１および特許文献２に開示される構成においては、複数のプロセッサまたは演算処理部が分散配置された構成が採用されており、それぞれのプロセッサまたは演算処理部の間で同期処理を実現するために構成が冗長になり得る。
【０００８】
本発明は、このようなニーズに対応するものであり、複数のタスクを並列的に実行可能な制御装置を提供する。特に、本発明は、単一の制御装置により提供可能な限られた処理リソースを効率的に利用するためのサポート装置およびそのサポート装置を実現するためのサポートプログラムを提供することを一つの目的としている。
【課題を解決するための手段】
【０００９】
本開示の一例によれば、１または複数のプロセッサを有する制御装置に接続されるサポート装置が提供される。制御装置は、複数のタスクを各タスクに設定された優先度に基づいて処理するように構成されている。複数のタスクは、内部コマンドに従って第１の周期毎に制御指令を出力する処理を含む第１のタスクと、第１の周期より長い第２の周期毎に、インタプリタ言語で記述されたアプリケーションプログラムの少なくとも一部を構文解析して内部コマンドを逐次生成する処理を含む第２のタスクと、第１のタスクおよび第２のタスクとは異なる処理を含む第３のタスクとを含む。サポート装置は、アプリケーションプログラムに含まれるコマンドの構文解析に要する負荷の度合いを算出する負荷推定手段と、算出された負荷の度合いに基づいて、第２のタスクに設定すべき優先度を算出する優先度算出手段とを含む。
【００１０】
この開示によれば、第１〜第３のタスクが制御装置において実行される場合に、第１のタスクで使用される内部コマンドの生成が適切に行われるように、第２のタスクの優先度を最適化できる。これによって、単一の制御装置において互いに連携する複数のタスクを、処理リソースを効率的に配分しながら実行させることができる。
【００１１】
上述の開示において、サポート装置は、第２のタスクに設定すべき優先度をユーザへ提示する提示手段をさらに含んでいてもよい。
【００１２】
この開示によれば、ユーザは算出された優先度を確認しながら、最終的に設定すべき優先度を決定できる。
【００１３】
上述の開示において、サポート装置は、ユーザ入力に応答して、第２のタスクに対する優先度の設定を反映する設定手段をさらに含んでいてもよい。
【００１４】
この開示によれば、ユーザが入力した任意の優先度を設定できる。
上述の開示において、アプリケーションプログラムは、目標軌跡を定義する１または複数のコマンドを含んでいる。第２のタスクは、目標軌跡上の通過点を逐次算出する処理、および、当該算出される複数の通過点を含む移動経路に基づいて内部コマンドを生成する処理を含んでいてもよい。負荷推定手段は、第２の周期の長さ、内部コマンドの生成に用いる通過点の数、および、算出する通過点の間隔の少なくとも一つを反映して、負荷の度合いを算出するようにしてもよい。
【００１５】
この開示によれば、第２のタスクでの演算負荷に影響を及ぼすパラメータを考慮した上で、負荷の度合いをより正確に算出できる。
【００１６】
上述の開示において、負荷推定手段は、コマンド毎に演算負荷係数を規定した演算負荷係数情報を参照することで、負荷の度合いを算出するようにしてもよい。
【００１７】
この開示によれば、アプリケーションプログラムに含まれるコマンド毎に異なる演算負荷のバラツキを考慮して、負荷の度合いを算出できる。
【００１８】
上述の開示において、サポート装置は、制御装置における第２のタスクの実行状況を取得するとともに、取得した実行状況に基づいて演算負荷係数情報を更新する学習手段をさらに含んでいてもよい。
【００１９】
この開示によれば、予め論理的に決定された演算負荷係数情報の値を、実際の制御装置で生じる演算負荷の状況を反映して決定できるので、より正確な演算負荷係数情報を生成できる。
【００２０】
上述の開示において、サポート装置は、制御装置を模擬するエミュレータと、エミュレータにおいて複数のタスクを実行することで取得される実際の演算負荷の度合いに基づいて、第２のタスクに設定すべき優先度を算出する第２の優先度算出手段とをさらに含んでいてもよい。
【００２１】
この開示によれば、制御装置により近い環境でプログラムを実行させて生じる演算負荷を考慮して、優先度を算出できるので、より適切な優先度の算出が期待できる。
【００２２】
上述の開示において、サポート装置は、制御装置において複数のタスクを実行することで取得される実際の演算負荷の度合いに基づいて、第２のタスクに設定すべき優先度を算出する第３の優先度算出手段をさらに含んでいてもよい。
【００２３】
この開示によれば、実際の制御装置でプログラムを実行させて生じる演算負荷を考慮して、優先度を算出できるので、より適切な優先度を算出できる。
【００２４】
本開示の別の一例によれば、１または複数のプロセッサを有する制御装置に接続されるサポート装置を実現するためのサポートプログラムが提供される。制御装置は、複数のタスクを各タスクに設定された優先度に基づいて処理するように構成されている。複数のタスクは、内部コマンドに従って第１の周期毎に制御指令を出力する処理を含む第１のタスクと、第１の周期より長い第２の周期毎に、インタプリタ言語で記述されたアプリケーションプログラムの少なくとも一部を構文解析して内部コマンドを逐次生成する処理を含む第２のタスクと、第１のタスクおよび第２のタスクとは異なる処理を含む第３のタスクとを含む。サポートプログラムは、コンピュータに、アプリケーションプログラムに含まれるコマンドの構文解析に要する負荷の度合いを算出するステップと、算出された負荷の度合いに基づいて、第２のタスクに設定すべき優先度を算出するステップとを実行させる。
【００２５】
この開示によれば、第１〜第３のタスクが制御装置において実行される場合に、第１のタスクで使用される内部コマンドの生成が適切に行われるように、第２のタスクの優先度を最適化できる。これによって、単一の制御装置において互いに連携する複数のタスクを、処理リソースを効率的に配分しながら実行させることができる。
【発明の効果】
【００２６】
本発明によれば、単一の制御装置により提供可能な限られた処理リソースを効率的に利用して、複数のタスクを並列的に実行できる。
【図面の簡単な説明】
【００２７】
【図１】本実施の形態に係る制御装置におけるタスク実行の一例を示すタイムチャートである。
【図２】本実施の形態に係る優先度の算出処理の適用例を示す模式図である。
【図３】本実施の形態に係る制御システムの全体構成例を示す模式図である。
【図４】本実施の形態に係る制御装置のハードウェア構成例を示すブロック図である。
【図５】本実施の形態に係る制御装置の機能構成例を示すブロック図である。
【図６】本実施の形態に係る制御装置における内部コマンドの生成処理の一例を説明するための模式図である。
【図７】本実施の形態に係るサポート装置のハードウェア構成例を示すブロック図である。
【図８】本実施の形態に係るサポート装置の機能構成例を示すブロック図である。
【図９】本実施の形態に係るサポート装置の演算負荷算出モジュールの機能構成例を示すブロック図である。
【図１０】本実施の形態に係るサポート装置の優先度算出モジュールが参照する優先度を決定するためのテーブルの一例である。
【図１１】本実施の形態に係るサポート装置が提供するユーザインターフェイス画面の一例を示す模式図である。
【図１２】本実施の形態に係るサポート装置が提供するユーザインターフェイス画面の別の一例を示す模式図である。
【図１３】本実施の形態に係るサポート装置が提供するユーザインターフェイス画面のさらに別の一例を示す模式図である。
【図１４】本実施の形態に係る優先度の算出処理の処理手順を示すフローチャートである。
【図１５】本実施の形態に係る優先度の算出処理における演算負荷係数テーブルの学習処理を説明するための模式図である。
【図１６】本実施の形態に係るエミュレータを用いた優先度の算出処理を説明するための模式図である。
【図１７】本実施の形態に係る実装置を用いた優先度の算出処理を説明するための模式図である。
【発明を実施するための形態】
【００２８】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２９】
＜Ａ．適用例＞
まず、図１および図２を参照して、本発明が適用される場面の一例について説明する。
【００３０】
本実施の形態に係る制御装置１００は、ユーザプログラムおよびアプリケーションプログラムを並列的に実行可能になっている。
【００３１】
本明細書において、「ユーザプログラム」は、実行毎に全体がスキャンされて、実行毎に制御指令を出力できるプログラムを包含する。ユーザプログラムは、基本的には、制御対象やアプリケーションに応じて、ユーザによって任意に作成される。ユーザプログラムの一例として、国際電気標準会議（International Electrotechnical Commission：ＩＥＣ）によって規定された国際規格ＩＥＣ６１１３１−３に従って記述された１または複数の命令からなるプログラムを包含する。ユーザプログラムには、シーケンス命令および／またはモーション命令を含み得る。なお、ユーザプログラムとしては、国際規格ＩＥＣ６１１３１−３に従って記述された命令に限らず、ＰＬＣ（プログラマブルコントローラ）の製造メーカまたはベンダーなどが独自に規定した命令を含むようにしてもよい。このように、ユーザプログラムは、即時性および高速性が要求される制御に好適である。
【００３２】
本明細書において、「シーケンス命令」は、入力値、出力値、内部値などを演算する１または複数の論理回路により記述される１または複数の命令を包含する用語である。１回の制御周期において、シーケンス命令は、先頭から最終まで実行され、次の制御周期において、「シーケンス命令」は、先頭から最終までが再度実行される。
【００３３】
本明細書において、「モーション命令」は、サーボモータなどのアクチュエータに対して、位置、速度、加速度、加加速度、角度、角速度、角加速度、角加加速度などの数値を制御指令として演算するための１または複数の命令を包含する用語である。モーション命令についても、１回の制御周期において、ファンクションブロックや数値演算式などにより記述されるモーション命令のプログラム（モーションプログラム）の先頭から最終までが実行される。
【００３４】
制御周期毎にユーザプログラムを実行することで出力される制御指令は、典型的には、シーケンス命令に従って決定されるデジタル出力のオン／オフ、ならびに、モーション命令に従って演算されるアナログ出力を含む。
【００３５】
本明細書において、「アプリケーションプログラム」は、インタプリタ言語で記述された任意のプログラムを包含する。制御装置１００は、アプリケーションプログラム内のインタプリタ言語で記述されたコマンドを構文解析しつつ処理を実行する。アプリケーションプログラムの一例として、ＣＮＣ（Computer Numerical Control：コンピュータ数値制御）における挙動を記述するプログラム（以下、「ＮＣプログラム」とも称する。）、ならびに、ロボットを制御するためのプログラムがある。一般的には、ＮＣプログラムは「Ｇ言語」を用いて記述され、ロボットを制御するためのプログラムは、専用のロボット言語（例えば、「Ｍ言語」）を用いて記述されることが多い。このアプリケーションプログラムは、目標軌跡を定義する１または複数のコマンドを含むことになる。
【００３６】
以下の説明において、例えば、ＣＮＣ（Computer Numerical Control：コンピュータ数値制御）および／またはおよびロボットを用いた、特定の加工または動作を行う装置または機械ならびにそれらの制御を包含して、「制御アプリケーション」と称することもある。
【００３７】
インタプリタ言語で記述されたアプリケーションプログラムは、本来的に、一定周期毎に制御指令を出力する処理には不向きである。そのため、本実施の形態においては、制御周期毎の制御指令の出力に適した内部コマンドが生成される。このような内部コマンドは、制御周期毎に制御指令を出力できるものであれば、どのようなコードであってもよい。典型的には、内部コマンドは、時間を入力変数とする１または複数の関数、あるいは、時間を引数とする１または複数の命令であってもよい。
【００３８】
図１は、本実施の形態に係る制御装置１００におけるタスク実行の一例を示すタイムチャートである。図１を参照して、本実施の形態に係る制御装置１００は、複数のタスクを各タスクに設定された優先度に基づいて処理する。
【００３９】
本明細書において、「タスク」は、１または複数の処理を含む処理の実行単位を意味する。各タスクには、優先度に加えて、実行周期が設定されることもある。実行周期が設定されている場合には、スケジューラは、当該設定された実行周期に従って、タスクの実行をトリガする。
【００４０】
このような複数のタスクの実行は、スケジューラと称される制御装置１００の機能によって管理される。スケジューラは、制御装置１００が有している１または複数のプロセッサの処理時間（以下、「プロセッサリソース」とも称す。）を対象のタスクに割当てる。
【００４１】
複数のタスクは、典型的には、制御周期Ｔ１毎に繰返し実行されるタスク、および、制御周期Ｔ１より長い周期で実行されるタスクを含む。
【００４２】
図１には、優先度別に設定された５つのタスク（第１〜第５タスク）の例を示す。
第１タスク１０は、フィールドとの間で入力値および制御指令を更新する入出力リフレッシュ処理（図１において「Ｏ／Ｉ」と記載する。）を含む。
【００４３】
第２タスク１８は、シーケンス命令実行処理１２と、アプリケーションプログラムから生成される内部コマンドに従って制御指令を出力する出力処理１４と、ユーザプログラムに含まれるモーション命令に従って制御指令を出力する出力処理１６とを含む。すなわち、第２タスク１８は、内部コマンドに従って制御周期Ｔ１（第１の周期）毎に制御指令を出力する処理を含む。
【００４４】
第１タスク１０および第２タスク１８は、制御周期Ｔ１毎にトリガされる。そのため、第１タスク１０および第２タスク１８に対しては、相対的に高い優先度が設定されている。以下の説明においては、第１タスク１０および第２タスク１８を、「高優先タスク」とも称す。
【００４５】
第３タスク２０は、アプリケーションプログラムを構文解析して内部コマンドを逐次生成する処理を含む。アプリケーションプログラムの構文解析は、制御周期Ｔ１（第１の周期）より長いアプリケーション実行周期（第２の周期）毎に実行される。すなわち、第３タスク２０は、制御周期Ｔ１（第１の周期）より長いアプリケーション実行周期（第２の周期）毎に、インタプリタ言語で記述されたアプリケーションプログラムの少なくとも一部を構文解析して内部コマンドを逐次生成する処理を含む。
【００４６】
第４タスク２２は、制御装置１００が提供する任意の処理を含む。第５タスク２４は、制御装置１００と外部装置との間のデータ通信などの処理（以下、「システムサービス」とも称す。）を含む。このように、第４タスク２２および第５タスク２４は、第２タスク１８および第３タスク２０とは異なる処理を含む。
【００４７】
第１〜第５タスクについては、それぞれ優先度が設定されており、各設定された優先度に従って、プロセッサリソースが割当てられる。このようなプロセッサリソースが割当ての典型例として、第３タスク２０、第４タスク２２、および第５タスク２４は、高優先タスクが実行されていない期間に実行される。以下の説明においては、第１タスク１０および第２タスク１８（高優先タスク）との比較として、第３タスク２０、第４タスク２２、および第５タスク２４を、「低優先タスク」とも称す。
【００４８】
図１（Ａ）には、第４タスク２２に対して、第３タスク２０より高い優先度が設定されている例を示す。図１（Ｂ）には、第３タスク２０の優先度を図１（Ａ）の場合の優先度より高く設定したときの処理例を示す。
【００４９】
図１（Ａ）に示す例においては、第１タスク１０および第２タスク１８が制御周期Ｔ１毎に繰返し実行される。各制御周期Ｔ１において、第１タスク１０および第２タスク１８が実行されていない期間において、第３〜第５タスクが優先度に応じて実行される。
【００５０】
第４タスク２２に対しては、制御周期Ｔ１毎にプロセッサリソースが割当てられている。一方、第３タスク２０に対しては、第１タスク１０、第２タスク１８、第４タスク２２のいずれもが実行されていない期間においてのみ、プロセッサリソースが割当てられるので、第３タスク２０の１回の処理完了には、３回の制御周期Ｔ１に相当する時間が必要になっている。すなわち、第３タスク２０がトリガされてから、指定された処理を完了するまでには、制御周期Ｔ１の３倍の時間が必要である。
【００５１】
図１（Ｂ）に示す例においては、第１タスク１０および第２タスク１８のいずれもが実行されていない期間において、第３タスク２０に対して、プロセッサリソースが優先的に割当てられる。その結果、図１（Ａ）の場合に比較して、より多くのプロセッサリソースが第３タスク２０に割当てられるようになり、第３タスク２０がトリガされてから制御周期Ｔ１の２倍の時間で指定された処理を完了できる。すなわち、アプリケーションプログラムの処理対象のコードから内部コマンドをより短い時間で生成できる。
【００５２】
図１（Ｂ）においては、図１（Ａ）の場合に比較して、より多くのプロセッサリソースを割当てることもでき、この場合には、１回の処理実行によって、より多くの内部コマンドを生成できる。
【００５３】
本実施の形態に係る制御装置１００において、第３タスク２０は、アプリケーションプログラムを構文解析して内部コマンドを生成し、第２タスク１８は、第３タスク２０において生成される内部コマンドを制御指令の演算に逐次使用する（すなわち、制御周期Ｔ１毎に「消費」される）。このように、第３タスク２０による内部コマンドの生成と、第２タスク１８による内部コマンドの使用との間で競争が生じる。
【００５４】
図１（Ｂ）に示すように、第３タスク２０に対して十分なプロセッサリソースが割当てられている場合においては、第２タスク１８による内部コマンドの使用に先だって、ある程度の量の内部コマンドを事前に生成できる。一方、図１（Ａ）に示すように、第３タスク２０に対して十分なプロセッサリソースを割当てることができない場合においては、第２タスク１８による内部コマンドの使用が勝り、第３タスク２０による内部コマンドの生成を待つような事態も生じ得る。
【００５５】
そこで、本実施の形態においては、アプリケーションプログラムの構文解析に要する負荷の度合いを事前に算出し、算出された負荷の度合いに基づいて、第３タスク２０に設定すべき優先度を算出する。より具体的には、上述の図１において、図１（Ａ）に示す優先度を設定すべきか、あるいは、図１（Ｂ）に示す優先度を設定すべきかを事前に推定する。
【００５６】
図２は、本実施の形態に係る優先度の算出処理の適用例を示す模式図である。図２を参照して、アプリケーションプログラム３２は、１または複数のコマンドにより構成される。アプリケーションプログラム３２に対する構文解析処理にどの程度の負荷処理が生じるのかを推定する負荷推定処理５０が実行される。負荷推定処理５０により出力される負荷の度合いに基づいて、優先度を算出する優先度算出処理６０が実行される。これらの処理によって、対象のアプリケーションプログラム３２を制御装置１００で実行させる場合において、アプリケーションプログラム３２を構文解析して内部コマンドを生成する処理を含むタスクに設定すべき優先度が算出される。
【００５７】
このように、負荷推定処理５０は、アプリケーションプログラム３２に含まれるコマンドの構文解析に要する負荷の度合いを算出する。そして、優先度算出処理６０は、算出された負荷の度合いに基づいて、図１に示す第３タスク２０（第２のタスク）に設定すべき優先度を算出する。算出された優先度は、ユーザへ提示されてもよいし、対象のタスクの優先度として自動的に設定されてもよい。
【００５８】
負荷推定処理５０および優先度算出処理６０の機能は、制御装置１００自体に実装されてもよいが、制御装置１００に接続されるサポート装置に実装されてもよい。あるいは、制御装置１００とは全く独立した情報処理装置に実装されてもよい。
【００５９】
本実施の形態においては、アプリケーションプログラム３２に含まれるコマンドの構文解析に要する負荷の度合いを推定し、その推定した負荷の度合いに応じて、アプリケーションプログラム３２を構文解析するタスクに設定される適切な優先度を事前に決定できる。
【００６０】
適切な優先度を事前に決定できるので、優先度が低すぎるために、アプリケーションプログラム３２を構文解析して内部コマンドを生成する処理が間に合わないといった事態を防止でき、かつ、優先度が高すぎるために、他のタスクに対して十分なプロセッサリソースが割当てられずに、必要な処理速度が得られないといった事態を防止できる。
【００６１】
また、適切な優先度を事前に決定できるので、試行錯誤的に各タスクの優先度を設定する必要はなく、複数種類のプログラムが実行される制御装置１００の調整作業を効率化できる。すなわち、制御装置１００にて実行される各タスクの優先度を調整するための工数などを削減できる。
【００６２】
以下、本発明のより具体的な応用例として、本実施の形態に係る制御装置１００およびサポート装置のより詳細な構成および処理について説明する。
【００６３】
＜Ｂ．制御システムの全体構成例＞
まず、本実施の形態に係る制御装置１００を含む制御システム１の全体構成例について説明する。図３は、本実施の形態に係る制御システム１の全体構成例を示す模式図である。図３には、本実施の形態に係る制御装置１００を中心とした制御システム１を示す。
【００６４】
図３を参照して、制御装置１００は、各種の設備や装置などの制御対象を制御する産業用コントローラに相当する。制御装置１００は、後述するような制御演算を実行する一種のコンピュータであり、典型的には、ＰＬＣ（プログラマブルコントローラ）として具現化されてもよい。制御装置１００は、フィールドネットワーク２を介して各種のフィールド機器５００と接続されてもよい。制御装置１００は、フィールドネットワーク２などを介して、１または複数のフィールド機器５００との間でデータを遣り取りする。一般的に「フィールドネットワーク」は、「フィールドバス」とも称されるが、説明の簡素化のため、以下の説明においては、「フィールドネットワーク」と総称する。すなわち、本明細書の「フィールドネットワーク」は、狭義の「フィールドネットワーク」に加えて「フィールドバス」を含み得る概念である。
【００６５】
フィールドネットワーク２は、データの到達時間が保証される、定周期通信を行うバスまたはネットワークを採用することが好ましい。このような定周期通信を行うバスまたはネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００６６】
フィールドネットワーク２には、任意のフィールド機器５００を接続することができる。フィールド機器５００は、製造装置や生産ラインなど（以下、「フィールド」とも総称する。）に対して何らかの物理的な作用を与えるアクチュエータ、および、フィールドとの間で情報を遣り取りする入出力装置などを含む。
【００６７】
フィールドネットワーク２を介して、制御装置１００とフィールド機器５００との間でデータが遣り取りされることになるが、これらの遣り取りされるデータは、数１００μｓｅｃオーダ〜数１０ｍｓｅｃオーダのごく短い周期で更新されることになる。このようなデータの遣り取りは、フィールド機器５００において収集または生成されたデータ（以下、「入力データ」とも称す。）を制御装置１００へ送信する処理、および、制御装置１００からフィールド機器５００に対する制御指令などのデータ（以下、「出力データ」とも称す。）を送信する処理を含む。このような遣り取りされるデータの更新処理が上述の「入出力リフレッシュ処理」に相当する。
【００６８】
図３に示す構成例においては、フィールド機器５００は、リモートＩ／Ｏ（Input/Output）装置５１０と、ロボット５２０およびロボットコントローラ５２２と、ＣＮＣ工作機械５３０と、サーボドライバ５３８およびサーボモータ５３２とを含む。
【００６９】
サーボモータ５３２は、コンベア５３４を駆動して、ＣＮＣ工作機械５３０の前に配置されたワークテーブル５３６にワークＷを搬送する。ロボット５２０は、ワークテーブル５３６上の処理前のワークＷをＣＮＣ工作機械５３０内に配置し、ＣＮＣ工作機械５３０での処理済ワークＷを取り出してワークテーブル５３６上に配置する。
【００７０】
フィールド機器５００としては、これらに限られることなく、入力データを収集する任意のデバイス（例えば、視覚センサなど）、ならびに、出力データに従う何らかの作用を与える任意のデバイス（例えば、インバータ装置など）などを採用することができる。
【００７１】
リモートＩ／Ｏ装置５１０は、典型的には、フィールドネットワーク２を介して通信を行う通信カプラと、入力データの取得および出力データの出力を行うための入出力部（以下、「Ｉ／Ｏユニット」とも称す。）とを含む。
【００７２】
リモートＩ／Ｏ装置５１０には、入力リレーや各種センサ（例えば、アナログセンサ、温度センサ、振動センサなど）などの入力データを収集する装置、および、出力リレー、コンタクタ、サーボドライバ、および、その他任意のアクチュエータなどのフィールドに対して何らかの作用を与える装置が接続される。
【００７３】
ロボットコントローラ５２２は、制御装置１００からの制御指令（位置指令または速度指令など）に従って、軌跡計算および各軸の角度計算などを行うとともに、計算結果に従って、ロボット５２０を構成するサーボモータなどを駆動する。
【００７４】
ＣＮＣ工作機械５３０は、位置や速度などを指定するプログラムに従って、マシニングセンタなどを制御することで、任意の対象物を加工する。ＣＮＣ工作機械５３０は、典型的には、旋盤加工、フライス盤、放電加工などの加工装置を含む。
【００７５】
サーボドライバ５３８は、制御装置１００からの制御指令（例えば、位置指令または速度指令など）に従って、サーボモータ５３２を駆動する。
【００７６】
制御装置１００は、上位ネットワーク６を介して、他の装置に接続されていてもよい。上位ネットワーク６には、一般的なネットワークプロトコルであるイーサネット（登録商標）やＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）が採用されてもよい。より具体的には、上位ネットワーク６には、１または複数のサーバ装置３００および１または複数の表示装置４００が接続されてもよい。
【００７７】
サーバ装置３００としては、データベースシステム、製造実行システム（ＭＥＳ：Manufacturing Execution System）などが想定される。製造実行システムは、制御対象の製造装置や設備からの情報を取得して、生産全体を監視および管理するものであり、オーダ情報、品質情報、出荷情報などを扱うこともできる。これに限らず、情報系サービスを提供する装置を上位ネットワーク６に接続するようにしてもよい。情報系サービスとしては、制御対象の製造装置や設備からの情報を取得して、マクロ的またはミクロ的な分析などを行う処理が想定される。例えば、制御対象の製造装置や設備からの情報に含まれる何らかの特徴的な傾向を抽出するデータマイニングや、制御対象の設備や機械からの情報に基づく機械学習を行うための機械学習ツールなどが想定される。
【００７８】
表示装置４００は、ユーザからの操作を受けて、制御装置１００に対してユーザ操作に応じたコマンドなどを出力するとともに、制御装置１００での演算結果などをグラフィカルに表示する。
【００７９】
制御装置１００には、サポート装置２００が接続可能になっている。サポート装置２００は、制御装置１００が制御対象を制御するために必要な準備を支援する装置である。具体的には、サポート装置２００は、制御装置１００で実行されるプログラムの開発環境（プログラム作成編集ツール、パーサ、コンパイラなど）、制御装置１００および制御装置１００に接続される各種デバイスのパラメータ（コンフィギュレーション）を設定するための設定環境、生成したユーザプログラムを制御装置１００へ出力する機能、制御装置１００上で実行されるユーザプログラムなどをオンラインで修正・変更する機能、などを提供する。本実施の形態に係るサポート装置２００は、上述の図２に示す優先度の算出処理の機能を提供することもできる。優先度の算出処理については、後に詳述する。
【００８０】
＜Ｃ．制御装置のハードウェア構成例＞
次に、本実施の形態に係る制御装置１００のハードウェア構成例について説明する。図４は、本実施の形態に係る制御装置１００のハードウェア構成例を示すブロック図である。
【００８１】
図４を参照して、制御装置１００は、ＣＰＵユニットと称される演算処理部であり、プロセッサ１０２と、チップセット１０４と、主メモリ１０６と、ストレージ１０８と、上位ネットワークコントローラ１１０と、ＵＳＢ（Universal Serial Bus）コントローラ１１２と、メモリカードインターフェイス１１４と、内部バスコントローラ１２０と、フィールドネットワークコントローラ１３０とを含む。
【００８２】
プロセッサ１０２は、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＧＰＵ（Graphics Processing Unit）などで構成される。プロセッサ１０２としては、複数のコアを有する構成を採用してもよいし、プロセッサ１０２を複数配置してもよい。すなわち、制御装置１００は、１または複数のプロセッサ１０２、および／または、１または複数のコアを有するプロセッサ１０２を有している。チップセット１０４は、プロセッサ１０２および周辺エレメントを制御することで、制御装置１００全体としての処理を実現する。主メモリ１０６は、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）などの揮発性記憶装置などで構成される。ストレージ１０８は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの不揮発性記憶装置などで構成される。
【００８３】
プロセッサ１０２は、ストレージ１０８に格納された各種プログラムを読出して、主メモリ１０６に展開して実行することで、制御対象に応じた制御、および、後述するような各種処理を実現する。ストレージ１０８には、基本的な機能を実現するためのシステムプログラム３４に加えて、制御対象の製造装置や設備に応じて作成されるユーザプログラム３０およびアプリケーションプログラム３２が格納される。
【００８４】
上位ネットワークコントローラ１１０は、上位ネットワーク６を介して、サーバ装置３００や表示装置４００（図４参照）などとの間のデータの遣り取りを制御する。ＵＳＢコントローラ１１２は、ＵＳＢ接続を介してサポート装置２００との間のデータの遣り取りを制御する。
【００８５】
メモリカードインターフェイス１１４は、メモリカード１１６が着脱可能に構成されており、メモリカード１１６に対してデータを書込み、メモリカード１１６から各種データ（ユーザプログラムやトレースデータなど）を読出すことが可能になっている。
【００８６】
内部バスコントローラ１２０は、制御装置１００に装着されるＩ／Ｏユニット１２２との間のデータの遣り取りを制御する。フィールドネットワークコントローラ１３０は、フィールドネットワーク２を介したフィールドデバイスとの間のデータの遣り取りを制御する。
【００８７】
図４には、プロセッサ１０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。あるいは、制御装置１００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００８８】
図４に示す制御システム１においては、制御装置１００、サポート装置２００および表示装置４００がそれぞれ別体として構成されているが、これらの機能の全部または一部を単一の装置に集約するような構成を採用してもよい。
【００８９】
＜Ｄ．制御装置の機能構成例＞
次に、本実施の形態に係る制御装置１００の機能構成例について説明する。図５は、本実施の形態に係る制御装置１００の機能構成例を示すブロック図である。
【００９０】
図５には、制御装置１００が制御アプリケーション１および制御アプリケーション２を制御する構成例を示す。制御アプリケーション１および制御アプリケーション２の各々は、典型的には、リレーやコンタクタなどのＩ／Ｏデバイスおよびサーボモータなどの各種アクチュエータを含む。制御アプリケーション１および制御アプリケーション２に加えて、他のＩ／Ｏデバイスおよび各種センサについても、フィールドネットワーク２を介して制御装置１００と接続されている。
【００９１】
制御装置１００は、上位ネットワーク６を介して接続されているサーバ装置３００などから、生産の開始／終了といった指示を受ける。サーバ装置３００は、レシピ情報３８（生産品種や生産に適したパラメータなどの情報）を制御装置１００に送信することもある。制御装置１００は、図示しない他の制御装置１００とネットワーク接続されていてもよい。
【００９２】
図５を参照して、制御装置１００は、ＰＬＣ処理エンジン１５０と、アプリケーション解析部１６０と、アプリケーション調停部１６２と、制御指令演算部１６４と、共有メモリ１７０と、共有メモリ制御部１７２と、表示機能部１７４と、フィールドネットワークインターフェイス１７６と、上位ネットワークインターフェイス１７８とを含む。
【００９３】
ＰＬＣ処理エンジン１５０は、ユーザプログラム３０の実行および制御装置１００全体の処理を管理する。より具体的には、ＰＬＣ処理エンジン１５０は、シーケンスプログラム実行部１５２と、スケジューラ１５４とを含む。
【００９４】
シーケンスプログラム実行部１５２は、制御周期Ｔ１毎にユーザプログラム３０を実行（スキャン）して制御指令を出力する。
【００９５】
スケジューラ１５４は、制御装置１００において実行される処理の順序を調停するものであり、具体的には、予め設定された優先度に基づいて、１または複数のタスクに対してプロセッサリソースを割当てる。スケジューラ１５４は、各タスクに含まれる処理および各タスクに設定される優先度の情報を含むタスク設定情報１５６を有している。タスク設定情報１５６は、典型的には、サポート装置２００を介して設定または更新される。
【００９６】
アプリケーション解析部１６０は、アプリケーションプログラム３２の少なくとも一部を構文解析して、内部コマンド４０を生成する。アプリケーション解析部１６０には、異なる種類のアプリケーションプログラム３２が提供されることもある。アプリケーション解析部１６０は、予め格納されたアプリケーションプログラム３２を実行するようにしてもよいし、サーバ装置３００から適宜送信されるアプリケーションプログラム３２を実行するようにしてもよい。
【００９７】
制御指令演算部１６４は、ユーザプログラム３０に含まれるモーション命令に従って、制御指令を制御周期Ｔ１毎に演算する。また、制御指令演算部１６４は、アプリケーション解析部１６０により逐次生成される内部コマンド４０に従って、制御指令を制御周期Ｔ１毎に演算する。
【００９８】
シーケンスプログラム実行部１５２および制御指令演算部１６４は、制御周期Ｔ１毎に処理を実行する（高優先タスク）。一方、アプリケーション解析部１６０によるアプリケーションプログラム３２に対する処理は、制御周期Ｔ１の整数倍であるアプリケーション実行周期（第２の周期）毎に実行される（低優先タスク）。
【００９９】
アプリケーション調停部１６２は、アプリケーション解析部１６０において複数のアプリケーションプログラム３２が処理される場合に、その処理順序などを調停する。
【０１００】
共有メモリ１７０は、ＰＬＣ処理エンジン１５０、アプリケーション解析部１６０、および制御指令演算部１６４の間で共有されるデータを保持する。共有されるデータは、構造体変数として格納されるようにしてもよい。例えば、アプリケーション解析部１６０により逐次生成される内部コマンド４０は、共有メモリ１７０の構造体変数に逐次書込まれる。
【０１０１】
共有メモリ制御部１７２は、共有メモリ１７０に対するデータ読書きの排他制御、および、外部からの要求に応じた共有メモリ１７０へのアクセスなどを行う。例えば、共有メモリ制御部１７２は、共有メモリ１７０上のデータをフィールドネットワークインターフェイス１７６へ与えることで、フィールドネットワーク２を介して接続される任意のフィールド機器５００へ送信される。
【０１０２】
表示機能部１７４は、共有メモリ１７０に格納されるデータおよびアプリケーション解析部１６０による処理結果などをユーザなどへ出力する。
【０１０３】
フィールドネットワークインターフェイス１７６は、フィールドネットワーク２を介して接続されているフィールド機器５００との間のデータの遣り取りを仲介する。
【０１０４】
上位ネットワークインターフェイス１７８は、上位ネットワーク６を介して接続されている装置との間のデータの遣り取りを仲介する。
【０１０５】
＜Ｅ．内部コマンドの生成処理例＞
次に、制御装置１００のアプリケーション解析部１６０がアプリケーションプログラム３２を構文解析して内部コマンド４０を生成する処理例について説明する。
【０１０６】
本実施の形態に係る制御装置１００においては、アプリケーション解析部１６０が、アプリケーションプログラム３２に記述された１または複数のコマンドを構文解析し、その構文解析された内容に基づいて、制御周期毎に指令値を算出するための内部コマンド４０を生成する。生成される内部コマンド４０は、共有メモリ１７０に順次キューイングされる。
【０１０７】
内部コマンド４０は、時間に関する変数を入力として、指令値を算出できる関数が用いられてもよい。すなわち、内部コマンド４０は、制御指令演算部１６４が制御周期毎に指令値を出力する関数であってもよい。より具体的には、内部コマンド４０は、時間と指令値との関係を規定する関数であってもよい。内部コマンド４０を規定するための時間に関する変数としては、時刻、ある基準タイミングからの経過時間、制御周期の累積サイクル数などを用いることができる。
【０１０８】
このような関数を用いることで、制御指令演算部１６４は、生成される内部コマンド４０を順次参照して、各制御周期に指令値を出力できる。
【０１０９】
図６は、本実施の形態に係る制御装置１００における内部コマンド４０の生成処理の一例を説明するための模式図である。図６（Ａ）には、時刻ｔ０から時刻ｔ１までの期間における内部コマンド４０を生成する処理手順を示し、図６（Ｂ）には、時刻ｔ１から時刻ｔ２までの期間における内部コマンド４０を生成する処理手順を示す。
【０１１０】
図６（Ａ）を参照して、アプリケーション解析部１６０は、アプリケーションプログラム３２を逐次解析して目標軌跡を順次決定する。アプリケーション解析部１６０は、順次決定する目標軌跡に対して、予め定められた期間毎の通過点を順次算出する。それぞれの通過点は、目標軌跡上の移動距離および目標軌跡上の移動速度に基づいて算出される。
【０１１１】
図６（Ａ）に示す例において、時刻ｔ０における初期位置である通過点Ｐ０（ｔ０）に加えて、時刻ｔ１における通過点Ｐ１（ｔ１）、時刻ｔ２における通過点Ｐ２（ｔ２）、時刻ｔ３における通過点Ｐ３（ｔ３）が算出される。
【０１１２】
アプリケーション解析部１６０は、通過点Ｐ０（ｔ０），Ｐ１（ｔ１），Ｐ２（ｔ２），Ｐ３（ｔ３）の情報に基づいて、通過点Ｐ０（ｔ０）から通過点Ｐ１（ｔ１）までの移動経路４４を算出する。アプリケーション解析部１６０は、算出した移動経路４４から関数Ｆｘ１（ｔ）を生成する。なお、図６（Ａ）には、関数Ｆｘ１（ｔ）のみを示すが、実際には、同時に制御しなければならないモータの数だけ内部コマンド４０が生成されることになる。
【０１１３】
移動経路４４の算出には、通過点Ｐ０（ｔ０）および通過点Ｐ１（ｔ１）の情報のみを用いるようにしてもよい。但し、より滑らかで正確な移動経路４４を算出するために、通過点Ｐ１（ｔ１）に引き続く１または複数の通過点の情報を反映してもよい。すなわち、「先読み」動作により内部コマンド４０を生成することで制御精度を高めることができる。
【０１１４】
図６（Ｂ）を参照して、時刻ｔ１から時刻ｔ２までの期間について、アプリケーション解析部１６０は、アプリケーションプログラム３２をさらに解析してさらに先の目標軌跡を決定する。アプリケーション解析部１６０は、決定されたさらに先の目標軌跡に対して、新たな通過点を算出する。すなわち、アプリケーション解析部１６０は、新たに通過点Ｐ４（ｔ４）を算出する。
【０１１５】
アプリケーション解析部１６０は、通過点Ｐ１（ｔ１），Ｐ２（ｔ２），Ｐ３（ｔ３），Ｐ４（ｔ４）の情報に基づいて、通過点Ｐ１（ｔ１）から通過点Ｐ２（ｔ２）までの移動経路４４を算出する。アプリケーション解析部１６０は、算出した移動経路４４から関数Ｆｘ２（ｔ）を生成する。なお、図６（Ｂ）には、関数Ｆｘ２（ｔ）のみを示すが、実際には、同時に制御しなければならないモータの数だけ内部コマンド４０が生成されることになる。
【０１１６】
図６に示すように、「先読み」動作において、アプリケーション解析部１６０は、目標軌跡上の隣接する通過点４２間に対応する内部コマンド４０を、目標軌跡上の当該隣接する通過点４２に引き続く複数の通過点４２の情報に基づいて生成する。
【０１１７】
以上のような処理手順を繰返すことで、目標軌跡を実現するための内部コマンドが順次生成される。このように、アプリケーションプログラム３２を構文解析するタスクは、目標軌跡上の通過点を逐次算出する処理、および、当該算出される複数の通過点を含む移動経路に基づいて内部コマンドを生成する処理を含む。
【０１１８】
＜Ｆ．サポート装置のハードウェア構成例＞
次に、本実施の形態に係るサポート装置２００のハードウェア構成例について説明する。図７は、本実施の形態に係るサポート装置２００のハードウェア構成例を示すブロック図である。
【０１１９】
図７を参照して、サポート装置２００は、典型的には、汎用的なアーキクテチャを有するパーソナルコンピュータ上で、サポートプログラム２１８が実行されることで実現される。より具体的には、図７を参照して、サポート装置２００は、プロセッサ２０２と、ディスプレイ２０４と、主メモリ２０６と、ストレージ２０８と、ＵＳＢコントローラ２１２と、入力装置２１４とを含む。これらのコンポーネントは内部バス２１０を介して接続されている。
【０１２０】
プロセッサ２０２は、ＣＰＵ、ＭＰＵ、ＧＰＵなどで構成され、ストレージ２０８に格納されたＯＳ２１６およびサポートプログラム２１８を含む各種プログラムを読出して、主メモリ２０６に展開して実行することで、後述したような各種機能を実現する。主メモリ２０６は、ＤＲＡＭやＳＲＡＭなどの揮発性記憶装置などで構成される。ストレージ２０８は、例えば、ＨＤＤやＳＳＤなどの不揮発性記憶装置などで構成される。
【０１２１】
ディスプレイ２０４は、プロセッサ２０２などによる演算結果を表示するデバイスであり、例えば、ＬＣＤ（Liquid Crystal Display）などで構成される。
【０１２２】
ＵＳＢコントローラ２１２は、ＵＳＢ接続を介して、制御装置１００との間でデータを遣り取りする。
【０１２３】
入力装置２１４は、ユーザの操作を受付けるデバイスであり、例えば、キーボードやメモリなどで構成される。
【０１２４】
以下に説明するように、本実施の形態に係るサポート装置２００は、アプリケーションプログラム３２の構文解析に要する負荷の度合いを事前に算出し、算出された負荷の度合いに基づいて、第３タスク２０に設定すべき優先度を算出する。
【０１２５】
＜Ｇ．サポート装置の機能構成例＞
次に、本実施の形態に係るサポート装置２００の機能構成例について説明する。図８は、本実施の形態に係るサポート装置２００の機能構成例を示すブロック図である。図８に示す各モジュールは、典型的には、サポート装置２００のプロセッサ２０２がサポートプログラム２１８を実行することで実現される。
【０１２６】
図８を参照して、サポート装置２００は、負荷推定処理５０に関するモジュールとして、構文解析モジュール５２および演算負荷算出モジュール５４を含む。サポート装置２００は、さらに、優先度算出処理６０に関するモジュールとして、優先度算出モジュール６２を含む。サポート装置２００は、さらに、対話モジュール６６および設定モジュール６８を含む。
【０１２７】
構文解析モジュール５２は、アプリケーションプログラム３２を構文解析して、アプリケーションプログラム３２に含まれる１または複数のコマンドを出力する。演算負荷算出モジュール５４は、演算負荷係数テーブル５６を参照して、構文解析モジュール５２から出力される各コマンドについての演算負荷係数を取得する。演算負荷係数テーブル５６は、コマンド毎に演算負荷係数を規定した演算負荷係数情報に相当する。演算負荷算出モジュール５４は、演算負荷係数テーブル５６を参照することで、負荷の度合いである演算負荷値を算出する。演算負荷係数テーブル５６のデータ構造の一例については、後述する。
【０１２８】
構文解析モジュール５２は、演算負荷値の算出に際して、内部コマンド生成設定情報５８を参照する。内部コマンド生成設定情報５８は、アプリケーションプログラム３２に従って内部コマンド４０を生成する際のパラメータを含む。
【０１２９】
内部コマンド４０を生成する際のパラメータの一例としては、（１）アプリケーションプログラムを構文解析する第３タスク２０（図１参照）の実行周期であるアプリケーション実行周期の長さ、（２）内部コマンド４０の生成に用いる通過点の数（図６参照）、（３）算出する通過点の間隔（図６に示す時刻ｔ０から時刻ｔ１までの期間の長さ）が挙げられる。
【０１３０】
上述の（１）に示す実行周期が短くなるほど演算負荷は増大し、（２）に示す通過点の数が多くなるほど演算負荷は増大し、（３）に示す通過点の間隔が短くなるほど演算負荷は増大する。したがって、演算負荷算出モジュール５４は、演算負荷係数テーブル５６に対して、上述の（１）〜（３）に示すパラメータに依存した重みを乗じることで、演算負荷値を算出する。これらのパラメータの一部または全部は、アプリケーションプログラム３２の実行中に動的に変化することもある。そのため、アプリケーションプログラム３２に含まれるコマンド群のある部分に適用されるパラメータと、他の部分に適用されるパラメータとは異なったものとなる場合もある。
【０１３１】
一方、上述の（１）〜（３）に示すパラメータのすべてを反映する必要はなく、一部のパラメータのみを反映するようにしてもよい。このように、演算負荷算出モジュール５４は、上述の（１）〜（３）に示すパラメータの少なくとも一つを反映して、演算負荷値（負荷の度合い）を算出する。
【０１３２】
演算負荷算出モジュール５４は、算出した演算負荷値を出力する。演算負荷値は、アプリケーションプログラム３２全体の構文解析によって逐次算出される値の平均値、最大値、最小値、中間値などの統計データであってもよいし、全体または一部の区間についての積算値であってもよい。あるいは、コマンド毎に処理に要する時間が異なる可能性もあるため、各コマンドについて算出される演算負荷値を各コマンドの構文解析に要する時間で規格化した値を用いてもよい。
【０１３３】
演算負荷値は、無次元の値であってもよいし、プロセッサを占有する時間であってもよいし、プロセッサを占有する時間割合であってもよい。
【０１３４】
優先度算出モジュール６２は、演算負荷算出モジュール５４により算出される演算負荷値に基づいて、対応するアプリケーションプログラム３２の構文解析に係るタスクの優先度を算出する。より具体的には、優先度算出モジュール６２は、タスク設定情報６４を参照して、算出された演算負荷値を満たすために必要なプロセッサリソースを確保するための優先度を算出する。
【０１３５】
タスク設定情報６４は、現在設定されている各タスクに登録されている処理、および、各タスクに設定されている優先度などを含む。タスク設定情報６４は、制御装置１００において各タスクがどの程度の演算時間を要しているのかの統計情報を含んでいてもよい。
【０１３６】
優先度算出モジュール６２が算出する優先度は、現在設定されているタスクの間での相対的な順位を示すものである。優先度算出モジュール６２は、制御装置１００において利用可能なプロセッサリソースのうち、他のタスクが使用するプロセッサリソースなどを考慮して、適切な優先度を算出してもよい。
【０１３７】
優先度算出モジュール６２により算出された優先度は、対話モジュール６６および設定モジュール６８へ出力される。対話モジュール６６は、ユーザに対して、優先度算出モジュール６２が算出した優先度を提示するとともに、ユーザからの指示を受付ける。
【０１３８】
すなわち、対話モジュール６６は、アプリケーションプログラム３２を構文解析するタスクに設定すべき優先度をユーザへ提示する。より具体的には、対話モジュール６６は、サポート装置２００のディスプレイ２０４などに算出された優先度を表示する。算出された優先度に加えて、優先度の算出に用いた情報および任意の負荷情報を併せて表示してもよい。
【０１３９】
ユーザは、サポート装置２００の入力装置２１４などを操作して、提示された優先度に対する承諾、あるいは、提示された優先度を変更する指示などを入力する。対話モジュール６６は、ユーザからの指示を設定モジュール６８へ出力する。
【０１４０】
設定モジュール６８は、ユーザ入力に応答して、アプリケーションプログラム３２を構文解析するタスクに対する優先度の設定を反映する。より具体的には、設定モジュール６８は、優先度算出モジュール６２からの優先度および対話モジュール６６からのユーザ指示に基づいて、タスク設定情報６４に対して、対象のタスクの優先度を設定する。
【０１４１】
以上のような処理によって、対象のアプリケーションプログラム３２を構文解析するためのタスクへの優先度の設定が完了する。更新後のタスク設定情報６４は、任意の方法によって、制御装置１００へ与えられる。
【０１４２】
＜Ｈ．演算負荷算出モジュールおよび優先度算出モジュール＞
次に、図８に示す演算負荷算出モジュール５４および優先度算出モジュール６２におけるより詳細な処理内容について説明する。図９は、本実施の形態に係るサポート装置２００の演算負荷算出モジュール５４の機能構成例を示すブロック図である。
【０１４３】
図９を参照して、演算負荷算出モジュール５４は、演算負荷係数参照モジュール５４１と、係数算出モジュール５４２，５４４，５４６と、係数乗算モジュール５４３，５４５，５４７と、統計処理モジュール５４８とを含む。
【０１４４】
演算負荷係数参照モジュール５４１は、演算負荷係数テーブル５６を参照して、入力されたコマンドの種類に対応する演算負荷係数を取得する。演算負荷係数テーブル５６には、コマンド毎に演算負荷係数が規定されている。
【０１４５】
演算負荷係数テーブル５６において規定される演算負荷係数は、コマンド毎（例えば、Ｇ言語やＭ言語で記述される）に規定されてもよいし、また、算術演算子や論理演算子について規定されてもよい。さらに、複数のコマンドの組み合せについて演算負荷係数を規定してもよい。演算負荷係数を規定する単位は言語に応じて任意に設定できる。
【０１４６】
また、演算負荷係数テーブル５６は、制御装置１００で実行させるプログラム群（「プロジェクト」とも称す。）の間で共通化してもよいし、プログラム群を実行させる制御装置１００の性能などに応じて個別に作成してもよい。
【０１４７】
係数算出モジュール５４２は、アプリケーション実行周期（内部コマンド生成設定情報５８に含まれる）の入力に対応する補正係数αを出力する。係数乗算モジュール５４３は、演算負荷係数参照モジュール５４１からの演算負荷係数に補正係数αを乗じて、その結果を出力する。
【０１４８】
係数算出モジュール５４４は、内部コマンド４０の生成に用いる通過点の数（内部コマンド生成設定情報５８に含まれる）の入力に対応する補正係数βを出力する。係数乗算モジュール５４５は、係数乗算モジュール５４３からの出力結果に補正係数βを乗じて、その結果を出力する。
【０１４９】
係数算出モジュール５４６は、内部コマンド４０の生成において算出する通過点の間隔（内部コマンド生成設定情報５８に含まれる）の入力に対応する補正係数γを出力する。係数乗算モジュール５４７は、係数乗算モジュール５４５からの出力結果に補正係数γを乗じて、その結果を出力する。
【０１５０】
統計処理モジュール５４８は、アプリケーションプログラム３２に含まれるコマンド毎に算出される補正後の演算負荷係数を統計処理することで、演算負荷値を出力する。より具体的には、統計処理モジュール５４８は、コマンド毎に算出される補正後の演算負荷係数についての平均値、最大値、最小値、中間値などを算出する。
【０１５１】
以上のような機能構成によって、演算負荷値が出力される。
次に、優先度算出モジュール６２は、制御装置１００において利用可能なプロセッサリソースのうち、他のタスクが使用するプロセッサリソースなどを考慮して、適切な優先度を算出する。より具体的には、優先度算出モジュール６２は、他のタスクの実行に必要なプロセッサリソースの大きさを推定し、その推定したプロセッサリソースに基づいて、優先度を算出する。
【０１５２】
あるいは、優先度算出モジュール６２は、算出される演算負荷値の大きさに基づいて、予め定められた規則に従って優先度を算出してもよい。
【０１５３】
図１０は、本実施の形態に係るサポート装置２００の優先度算出モジュール６２が参照する優先度を決定するためのテーブルの一例である。図１０を参照して、優先度テーブル６２１においては、演算負荷値の範囲と対応する優先度が予め規定されており、優先度算出モジュール６２は、演算負荷算出モジュール５４により算出された演算負荷値に対応する優先度を一意に決定することができる。
【０１５４】
なお、優先度の算出方法については、上述したような方法に限定されるものではなく、任意の方法を採用できる。
【０１５５】
＜Ｉ．ユーザインターフェイス画面例＞
次に、優先度算出モジュール６２および対話モジュール６６により提供されるユーザインターフェイス画面の一例について説明する。
【０１５６】
図１１は、本実施の形態に係るサポート装置２００が提供するユーザインターフェイス画面の一例を示す模式図である。図１１を参照して、ユーザインターフェイス画面６００は、アプリケーションプログラム３２に含まれる各コマンドについて算出された演算負荷値の変化を示す。トレンドグラフ６０２は、コマンドが記述されたブロックＮｏ．毎の演算負荷値を示す。ユーザは、トレンドグラフ６０２を参照することで、アプリケーションプログラム３２のいずれのブロックにおいて演算負荷が相対的に高いのかを一見して把握できる。
【０１５７】
ユーザインターフェイス画面６００は、アプリケーション実行周期の長さを示す表示窓６０４と、内部コマンド４０の生成に用いる通過点の数を示す表示窓６０６と、内部コマンド４０を生成する際に算出する通過点の間隔を示す表示窓６０８とを含む。
【０１５８】
ユーザは表示窓６０４，６０６，６０８の設定値を自在に変更することもできる。いずれかの設定値が変更されることに応答して、演算負荷値を再度算出するようにしてもよい。
【０１５９】
図１２は、本実施の形態に係るサポート装置２００が提供するユーザインターフェイス画面の別の一例を示す模式図である。図１２を参照して、ユーザインターフェイス画面６１０は、制御装置１００で実行される各タスクが使用するプロセッサリソースの大きさを示す。棒グラフ６１２は、タスク毎のプロセッサ時間の長さを示す。各タスクには、タスクの番号および設定されている優先度などを示すタスク属性情報６２４が表示されている。
【０１６０】
棒グラフ６１２において、評価対象のタスクについては、算出された演算負荷値の変化に基づいて、プロセッサ時間の平均値６１４に加えて、最小値６１６および最大値６１８が示されている。
【０１６１】
ユーザは、棒グラフ６１２を参照することで、制御装置１００において実行される複数のタスクのうち、いずれのタスクの演算負荷が相対的に高いのかを一見して把握できる。
【０１６２】
ユーザインターフェイス画面６１０は、優先度算出モジュール６２により算出された推奨される優先度を示す表示窓６２０と、対象のアプリケーションプログラム３２の構文解析処理を定められたアプリケーション実行周期内に完了できる確率（以下、「実行周期内処理完了確率」とも称す。）を示す表示窓６２２とを含む。
【０１６３】
実行周期内処理完了確率は、開始タイミング毎に開始されるアプリケーションプログラム３２に対する構文解析の処理が予め定められたアプリケーション実行周期内に完了できる可能性を示すものであり、対象のアプリケーションプログラム３２について算出される演算負荷値の大きさおよびバラツキなどに基づいて算出される。実行周期内処理完了確率は、統計的に算出されてもよい。ユーザは、実行周期内処理完了確率の値を参照することで、アプリケーションプログラム３２の解析処理に対して設定した優先度がどの程度の確実性を有しているのかを一見して把握できる。
【０１６４】
ユーザは表示窓６２０に表示される優先度を自在に変更することもできる。優先度が変更されることに応答して、実行周期内処理完了確率を再度算出するようにしてもよい。
【０１６５】
ユーザインターフェイス画面６１０についても、アプリケーション実行周期の長さを示す表示窓６０４と、内部コマンド４０の生成に用いる通過点の数を示す表示窓６０６と、内部コマンド４０を生成する際に算出する通過点の間隔を示す表示窓６０８とを含んでいてもよい。
【０１６６】
図１３は、本実施の形態に係るサポート装置２００が提供するユーザインターフェイス画面のさらに別の一例を示す模式図である。図１３に示すユーザインターフェイス画面６３０は、ユーザが各種パラメータを調整するためのインターフェイスを提供する。
【０１６７】
図１３（Ａ）を参照して、より具体的には、ユーザインターフェイス画面６３０は、優先度を示す表示窓６３２と、アプリケーション実行周期の長さを示す表示窓６３４と、内部コマンド４０の生成に用いる通過点の数を示す表示窓６３６と、内部コマンド４０を生成する際に算出する通過点の間隔を示す表示窓６３８とを含む。
【０１６８】
表示窓６４０には、表示窓６３２，６３４，６３６，６３８にそれぞれ設定された値に応じた実行周期内処理完了確率の値が表示されている。
【０１６９】
ユーザは、表示窓６３２，６３４，６３６，６３８にそれぞれ設定された値を任意に変更可能になっている。
【０１７０】
図１３（Ｂ）を参照して、例えば、表示窓６３２に表示される優先度の値を変更すると、変更後の優先度に従って、実行周期内処理完了確率が再度算出され、表示窓６４０に更新後の実行周期内処理完了確率の値が表示される。
【０１７１】
また、表示窓６３４，６３６，６３８に表示される任意の値を変更することで、対象のアプリケーションプログラム３２についての演算負荷値が再度算出されるとともに、更新後の演算負荷値に基づいて、実行周期内処理完了確率が再度算出される。
【０１７２】
ユーザは、図１３に示すユーザインターフェイス画面６３０上において、任意のパラメータを任意の値に変更して、そのときの実行周期内処理完了確率の値を確認することで、いずれの優先度および内部コマンドを生成するためのパラメータが最適であるかを容易に知ることができる。
【０１７３】
＜Ｊ．処理手順＞
次に、本実施の形態に係る優先度の算出処理の処理手順の一例について説明する。
【０１７４】
図１４は、本実施の形態に係る優先度の算出処理の処理手順を示すフローチャートである。図１４に示す各ステップは、典型的には、サポート装置２００のプロセッサ２０２がサポートプログラム２１８を実行することで実現される。
【０１７５】
図１４を参照して、サポート装置２００は、優先度の算出対象となるアプリケーションプログラム３２を読込む（ステップＳ１００）。また、サポート装置２００は、内部コマンド生成設定情報５８を参照して、内部コマンドの生成に係る設定値を取得する（ステップＳ１０２）。内部コマンドの生成に係る設定値は、アプリケーション実行周期の長さ、内部コマンド４０の生成に用いる通過点の数、算出する通過点の間隔などを含む。
【０１７６】
サポート装置２００は、読込んだアプリケーションプログラム３２を構文解析して、当該アプリケーションプログラム３２に含まれるコマンドを抽出し（ステップＳ１０４）、演算負荷係数テーブル５６を参照して、抽出したコマンドに対応する演算負荷係数を取得する（ステップＳ１０６）。さらに、サポート装置２００は、取得した演算負荷係数に対して、ステップＳ１０２において取得した内部コマンドの生成に係る設定値に応じた補正係数を乗じて、演算負荷値を算出する（ステップＳ１０８）。算出された演算負荷値は逐次格納される。
【０１７７】
続いて、サポート装置２００は、対象のアプリケーションプログラム３２に含まれるすべてのコマンドの抽出が完了したか否かを判断する（ステップＳ１１０）。対象のアプリケーションプログラム３２に含まれるコマンドの抽出が完了していなければ（ステップＳ１１０においてＮＯ）、ステップＳ１０４以下の処理が繰返される。
【０１７８】
対象のアプリケーションプログラム３２に含まれるすべてのコマンドの抽出が完了していれば（ステップＳ１１０においてＹＥＳ）、サポート装置２００は、ステップＳ１０８において算出した演算負荷値、および、タスク設定情報６４に設定されている他のタスクの情報に基づいて、対象のアプリケーションプログラム３２についての優先度を算出する（ステップＳ１１２）。そして、サポート装置２００は、算出した優先度に対応する実行周期内処理完了確率を算出する（ステップＳ１１４）。
【０１７９】
続いて、サポート装置２００は、算出した優先度、算出した実行周期内処理完了確率、および、現在の内部コマンドの生成に係る設定値をユーザなどへ提示し（ステップＳ１１６）、ユーザからの操作を受付ける。
【０１８０】
ユーザから内部コマンドの生成に係る設定値の変更指示を受付けると（ステップＳ１１８においてＹＥＳ）、ステップＳ１０４以下の処理が繰返される。これにより、優先度および実行周期内処理完了確率が再度算出される。
【０１８１】
また、ユーザから優先度の変更指示を受付けると（ステップＳ１２０においてＹＥＳ）、ステップＳ１１４以下の処理が繰返される。これにより、実行周期内処理完了確率が再度算出される。
【０１８２】
また、ユーザから優先度の承諾指示を受付けると（ステップＳ１２２においてＹＥＳ）、サポート装置２００は、対象のアプリケーションプログラム３２の構文解析に係るタスクの優先度として現在の優先度を設定する（ステップＳ１２４）。より具体的には、設定された優先度は内部コマンド生成設定情報５８に登録される。そして、処理は終了する。
【０１８３】
以上のような処理手順によって、任意のアプリケーションプログラム３２に対して適切な優先度を設定できる。
【０１８４】
＜Ｋ．演算負荷係数テーブルの学習処理＞
次に、実際の負荷情報に基づいて演算負荷係数テーブル５６を学習する処理の一例について説明する。
【０１８５】
上述したように、本実施の形態に係る優先度の算出処理においては、演算負荷係数テーブル５６を参照して、アプリケーションプログラム３２の演算負荷値を算出する。一般的に、演算負荷係数テーブル５６に規定される演算負荷係数の値は理論値であり、実際の演算負荷係数の値はプログラムの実行環境などに依存して変化することもある。
【０１８６】
そこで、実際の負荷情報に基づいて演算負荷係数テーブル５６を学習することで、演算負荷係数テーブル５６に規定される演算負荷係数の値の精度を高めるようにしてもよい。  
【０１８７】
図１５は、本実施の形態に係る優先度の算出処理における演算負荷係数テーブル５６の学習処理を説明するための模式図である。図１５を参照して、例えば、演算負荷係数テーブル５６を参照して、複数のアプリケーションプログラム３２＿１，３２＿２，・・・，３２＿Ｎからそれぞれ演算負荷値１，２，・・・，Ｎを算出したとする。
【０１８８】
一方、複数のアプリケーションプログラム３２＿１，３２＿２，・・・，３２＿Ｎのそれぞれを制御装置１００において実行させたときの実際の演算負荷の度合いを示す実負荷値１，２，・・・，Ｎを測定する。実負荷値１，２，・・・，Ｎは、例えば、構文解析処理に要するプロセッサ時間やプロセッサ時間から算出される負荷の度合いを示す。
【０１８９】
演算負荷値１，２，・・・，Ｎと実負荷値１，２，・・・，Ｎとをそれぞれ比較して得られる比較結果１，２，・・・，Ｎに基づいて、演算負荷係数テーブル５６に対する修正（学習）が実施されてもよい。この学習においては、比較結果１，２，・・・，Ｎ（すなわち、誤差）がゼロとなるように、演算負荷係数テーブル５６に記述された演算負荷係数の値が調整される。
【０１９０】
このように、サポート装置２００は、制御装置１００におけるアプリケーションプログラム３２を構文解析するタスクの実行状況を取得するとともに、取得した実行状況に基づいて演算負荷係数テーブル５６（演算負荷係数情報）を更新する学習機能を有していてもよい。
【０１９１】
このような演算負荷係数テーブル５６に記述された演算負荷係数の値の調整が繰返されることで、演算負荷係数テーブル５６の精度を高めることができる。
【０１９２】
なお、図１５には、説明の便宜上、複数のアプリケーションプログラム３２＿１，３２＿２，・・・，３２＿Ｎを並列的に処理する例を示すが、これに限らず、１つのアプリケーションプログラム３２について、複数回の学習処理を実施してもよい。
【０１９３】
さらに、複数の制御装置１００からの情報に基づいて、演算負荷係数テーブル５６を学習するようにしてもよい。この場合、複数の制御装置１００の各々において取得された比較結果をサーバなどに集約した上で、サーバ上で、演算負荷係数テーブル５６に記述された演算負荷係数の値を調整するようにしてもよい。
【０１９４】
このように、複数の制御装置１００からの情報を利用することで、演算負荷係数テーブル５６の精度を高めるとともに、汎化された演算負荷係数を得ることができる。
【０１９５】
＜Ｌ．エミュレータを用いた優先度の算出＞
上述の説明においては、アプリケーションプログラム３２を構文解析して演算負荷を算出する方法について例示したが、このような構文解析による方法に加えて、あるいは、それに代えて、エミュレータを用いて実際の負荷情報（実負荷情報）を推定した上で、優先度を算出するようにしてもよい。
【０１９６】
図１６は、本実施の形態に係るエミュレータを用いた優先度の算出処理を説明するための模式図である。図１６を参照して、サポート装置２００はＰＬＣエミュレータ７０を有している。ＰＬＣエミュレータ７０は、図５に示す制御装置１００を模擬する機能構成であり、制御装置１００が提供する機能と実質的に同一の機能を仮想的に提供するソフトウェアである。すなわち、ＰＬＣエミュレータ７０は、制御装置１００と同様の処理を実行することが可能である。
【０１９７】
図１６に示すように、制御装置１００におけるプログラムの実行と同様に、ＰＬＣエミュレータ７０にて、ユーザプログラム３０およびアプリケーションプログラム３２を実行する。ＰＬＣエミュレータ７０によるこれらのプログラムの実行によって生じる、実際の演算負荷の度合いを示す実負荷情報がＰＬＣエミュレータ７０から出力される。
【０１９８】
サポート装置２００は、優先度算出モジュール６２Ａを有している。優先度算出モジュール６２Ａは、上述の図８に示す優先度算出モジュール６２と同様の機能を有しており、ＰＬＣエミュレータ７０からの実負荷情報に基づいて、アプリケーションプログラム３２を構文解析するタスクに設定される適切な優先度を算出する。このように、優先度算出モジュール６２Ａは、ＰＬＣエミュレータ７０において複数のタスクを実行することで取得される実際の演算負荷の度合いに基づいて、アプリケーションプログラム３２を構文解析するタスクに設定すべき優先度を算出する。
【０１９９】
上述したように、エミュレータを用いて優先度を算出することで、より実際の制御装置１００におけるアプリケーションプログラム３２の実行の状況を反映した優先度を算出できる。
【０２００】
＜Ｍ．実装置を用いた優先度の算出＞
上述の説明においては、エミュレータを用いて実際の負荷情報（実負荷情報）を推定することで優先度を算出する方法について説明したが、実際の制御装置１００でのプログラム実行において生じる実際の負荷情報（実負荷情報）を取得して、優先度を算出するようにしてもよい。
【０２０１】
図１７は、本実施の形態に係る実装置を用いた優先度の算出処理を説明するための模式図である。図１７を参照して、制御装置１００は、ユーザプログラム３０およびアプリケーションプログラム３２を実行する。制御装置１００によるこれらのプログラムの実行によって生じる、実際の演算負荷の度合いを示す実負荷情報が制御装置１００から出力される。
【０２０２】
サポート装置２００は、優先度算出モジュール６２Ｂを有している。優先度算出モジュール６２Ｂは、上述の図８に示す優先度算出モジュール６２と同様の機能を有しており、制御装置１００からの実負荷情報に基づいて、アプリケーションプログラム３２を構文解析するタスクに設定される適切な優先度を算出する。このように、優先度算出モジュール６２Ｂは、制御装置１００において複数のタスクを実行することで取得される実際の演算負荷の度合いに基づいて、アプリケーションプログラム３２を構文解析するタスクに設定すべき優先度を算出する。
【０２０３】
上述したように、実際の制御装置１００においてプログラムを実行することで得られる実負荷情報に基づいて優先度を算出することで、アプリケーションプログラム３２の実際の実行状況を反映した優先度を算出できる。
【０２０４】
＜Ｎ．付記＞
上述したような本実施の形態は、以下のような技術思想を含む。
［構成１］
１または複数のプロセッサを有する制御装置（１００）に接続されるサポート装置（２００）であって、前記制御装置は、複数のタスクを各タスクに設定された優先度に基づいて処理するように構成されており、
前記複数のタスクは、
内部コマンドに従って第１の周期毎に制御指令を出力する処理を含む第１のタスク（１０，１８）と、
前記第１の周期より長い第２の周期毎に、インタプリタ言語で記述されたアプリケーションプログラムの少なくとも一部を構文解析して前記内部コマンドを逐次生成する処理を含む第２のタスク（２０）と、
前記第１のタスクおよび前記第２のタスクとは異なる処理を含む第３のタスク（２２，２４）とを含み、
前記サポート装置は、
前記アプリケーションプログラムに含まれるコマンドの構文解析に要する負荷の度合いを算出する負荷推定手段（５２，５４）と、
算出された負荷の度合いに基づいて、前記第２のタスクに設定すべき優先度を算出する優先度算出手段（６２）とを備える、サポート装置。
［構成２］
前記第２のタスクに設定すべき優先度をユーザへ提示する提示手段（６６）をさらに備える、構成１に記載のサポート装置。
［構成３］
ユーザ入力に応答して、前記第２のタスクに対する優先度の設定を反映する設定手段（６８）をさらに備える、構成１または２に記載のサポート装置。
［構成４］
前記アプリケーションプログラムは、目標軌跡を定義する１または複数のコマンドを含んでおり、
前記第２のタスクは、前記目標軌跡上の通過点を逐次算出する処理、および、当該算出される複数の通過点を含む移動経路に基づいて前記内部コマンドを生成する処理を含み、
前記負荷推定手段は、前記第２の周期の長さ、前記内部コマンドの生成に用いる通過点の数、および、算出する通過点の間隔の少なくとも一つを反映して、前記負荷の度合いを算出する、構成１〜３のいずれか１項に記載のサポート装置。
［構成５］
前記負荷推定手段は、コマンド毎に演算負荷係数を規定した演算負荷係数情報（５６）を参照することで、前記負荷の度合いを算出する、構成１〜４のいずれか１項に記載のサポート装置。
［構成６］
前記制御装置における前記第２のタスクの実行状況を取得するとともに、取得した実行状況に基づいて前記演算負荷係数情報を更新する学習手段をさらに備える、構成５に記載のサポート装置。
［構成７］
前記制御装置を模擬するエミュレータ（７０）と、
前記エミュレータにおいて前記複数のタスクを実行することで取得される実際の演算負荷の度合いに基づいて、前記第２のタスクに設定すべき優先度を算出する第２の優先度算出手段（６２Ａ）とをさらに備える、構成１〜６のいずれか１項に記載のサポート装置。
［構成８］
前記制御装置において前記複数のタスクを実行することで取得される実際の演算負荷の度合いに基づいて、前記第２のタスクに設定すべき優先度を算出する第３の優先度算出手段（６２Ｂ）をさらに備える、構成１〜７のいずれか１項に記載のサポート装置。
［構成９］
１または複数のプロセッサ（１０２）を有する制御装置（１００）に接続されるサポート装置（２００）を実現するためのサポートプログラムであって、前記制御装置は、複数のタスクを各タスクに設定された優先度に基づいて処理するように構成されており、
前記複数のタスクは、
内部コマンドに従って第１の周期毎に制御指令を出力する処理を含む第１のタスク（１０，１８）と、
前記第１の周期より長い第２の周期毎に、インタプリタ言語で記述されたアプリケーションプログラムの少なくとも一部を構文解析して前記内部コマンドを逐次生成する処理を含む第２のタスク（２０）と、
前記第１のタスクおよび前記第２のタスクとは異なる処理を含む第３のタスク（２２，２４）とを含み、
前記サポートプログラムは、コンピュータに
前記アプリケーションプログラムに含まれるコマンドの構文解析に要する負荷の度合いを算出するステップ（Ｓ１０４，Ｓ１０６，Ｓ１０８）と、
算出された負荷の度合いに基づいて、前記第２のタスクに設定すべき優先度を算出するステップ（Ｓ１１２）とを実行させる、サポートプログラム。
【０２０５】
＜Ｏ．利点＞
本実施の形態に係るサポート装置は、プロセッサリソースを共有して複数のタスクを実行させるにあたって、注目しているタスクに設定されている処理によって実際に生じる負荷の度合いを考慮した上で、当該タスクに設定すべき優先度を事前に推定できる。このような優先度の事前推定によって、制御装置において試行錯誤的にプログラムを実行させて優先度を決定するような手間を省略できる。また、事前知識の乏しいユーザであっても、タスクに設定すべき適切な優先度を知ることができる。
【０２０６】
本実施の形態に係るサポート装置は、アプリケーションプログラムを構文解析して、それに含まれる各コマンドに応じた負荷の度合いを算出できるので、より正確な負荷の度合いの算出、および、それに基づく優先度の算出を実現できる。
【０２０７】
本実施の形態に係るサポート装置は、アプリケーションプログラムの実行に係る負荷の度合いおよび設定される優先度の情報などをユーザへ提示できるので、ユーザは、タスクに対する優先度を設定するにあたって、より有益な情報を容易に取得できる。
【０２０８】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２０９】
１  制御システム、２  フィールドネットワーク、６  上位ネットワーク、１０  第１タスク、１２  シーケンス命令実行処理、１４，１６  出力処理、１８  第２タスク、２０  第３タスク、２２  第４タスク、２４  第５タスク、３０  ユーザプログラム、３２  アプリケーションプログラム、３４  システムプログラム、３８  レシピ情報、４０  内部コマンド、４２  通過点、４４  移動経路、５０  負荷推定処理、５２  構文解析モジュール、５４  演算負荷算出モジュール、５６  演算負荷係数テーブル、５８  内部コマンド生成設定情報、６０  優先度算出処理、６２，６２Ａ，６２Ｂ  優先度算出モジュール、６４，１５６  タスク設定情報、６６  対話モジュール、６８  設定モジュール、７０  エミュレータ、１００  制御装置、２００  サポート装置、１０２，２０２  プロセッサ、１０４  チップセット、１０６，２０６  主メモリ、１０８，２０８  ストレージ、１１０  上位ネットワークコントローラ、１１２，２１２  ＵＳＢコントローラ、１１４  メモリカードインターフェイス、１１６  メモリカード、１２０  内部バスコントローラ、１２２  Ｉ／Ｏユニット、１３０  フィールドネットワークコントローラ、１５０  ＰＬＣ処理エンジン、１５２  シーケンスプログラム実行部、１５４  スケジューラ、１６０  アプリケーション解析部、１６２  アプリケーション調停部、１６４  制御指令演算部、１７０  共有メモリ、１７２  共有メモリ制御部、１７４  表示機能部、１７６  フィールドネットワークインターフェイス、１７８  上位ネットワークインターフェイス、２０４  ディスプレイ、２１０  内部バス、２１４  入力装置、２１６  ＯＳ、２１８  サポートプログラム、３００  サーバ装置、４００  表示装置、５００  フィールド機器、５１０  リモートＩ／Ｏ装置、５２０  ロボット、５２２  ロボットコントローラ、５３０  工作機械、５３２  サーボモータ、５３４  コンベア、５３６  ワークテーブル、５３８  サーボドライバ、５４１  演算負荷係数参照モジュール、５４２，５４４，５４６  係数算出モジュール、５４３，５４５，５４７  係数乗算モジュール、５４８  統計処理モジュール、６２１  優先度テーブル、６２４  タスク属性情報、Ｗ  ワーク。
【図１】
2019061467.tif 000003
【図２】
2019061467.tif 000004
【図３】
2019061467.tif 000005
【図４】
2019061467.tif 000006
【図５】
2019061467.tif 000007
【図６】
2019061467.tif 000008
【図７】
2019061467.tif 000009
【図８】
2019061467.tif 000010
【図９】
2019061467.tif 000011
【図１０】
2019061467.tif 000012
【図１１】
2019061467.tif 000013
【図１２】
2019061467.tif 000014
【図１３】
2019061467.tif 000015
【図１４】
2019061467.tif 000016
【図１５】
2019061467.tif 000017
【図１６】
2019061467.tif 000018
【図１７】
2019061467.tif 000019
【手続補正書】
【提出日】平成30年2月5日(2018.2.5)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０１１６
【補正方法】変更
【補正の内容】
【０１１６】
図６に示すように、「先読み」動作において、アプリケーション解析部１６０は、目標軌跡上の隣接する通過点間に対応する内部コマンド４０を、目標軌跡上の当該隣接する通過点に引き続く複数の通過点の情報に基づいて生成する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０２０９
【補正方法】変更
【補正の内容】
【０２０９】
１  制御システム、２  フィールドネットワーク、６  上位ネットワーク、１０  第１タスク、１２  シーケンス命令実行処理、１４，１６  出力処理、１８  第２タスク、２０  第３タスク、２２  第４タスク、２４  第５タスク、３０  ユーザプログラム、３２  アプリケーションプログラム、３４  システムプログラム、３８  レシピ情報、４０  内部コマンド、４４  移動経路、５０  負荷推定処理、５２  構文解析モジュール、５４  演算負荷算出モジュール、５６  演算負荷係数テーブル、５８  内部コマンド生成設定情報、６０  優先度算出処理、６２，６２Ａ，６２Ｂ  優先度算出モジュール、６４，１５６  タスク設定情報、６６  対話モジュール、６８  設定モジュール、７０  エミュレータ、１００  制御装置、２００  サポート装置、１０２，２０２  プロセッサ、１０４  チップセット、１０６，２０６  主メモリ、１０８，２０８  ストレージ、１１０  上位ネットワークコントローラ、１１２，２１２  ＵＳＢコントローラ、１１４  メモリカードインターフェイス、１１６  メモリカード、１２０  内部バスコントローラ、１２２  Ｉ／Ｏユニット、１３０  フィールドネットワークコントローラ、１５０  ＰＬＣ処理エンジン、１５２  シーケンスプログラム実行部、１５４  スケジューラ、１６０  アプリケーション解析部、１６２  アプリケーション調停部、１６４  制御指令演算部、１７０  共有メモリ、１７２  共有メモリ制御部、１７４  表示機能部、１７６  フィールドネットワークインターフェイス、１７８  上位ネットワークインターフェイス、２０４  ディスプレイ、２１０  内部バス、２１４  入力装置、２１６  ＯＳ、２１８  サポートプログラム、３００  サーバ装置、４００  表示装置、５００  フィールド機器、５１０  リモートＩ／Ｏ装置、５２０  ロボット、５２２  ロボットコントローラ、５３０  工作機械、５３２  サーボモータ、５３４  コンベア、５３６  ワークテーブル、５３８  サーボドライバ、５４１  演算負荷係数参照モジュール、５４２，５４４，５４６  係数算出モジュール、５４３，５４５，５４７  係数乗算モジュール、５４８  統計処理モジュール、６２１  優先度テーブル、６２４  タスク属性情報、Ｗ  ワーク。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2019061467.tif 000020