(57)【要約】【課題】制御周期毎に全体をスキャンして指令値を更新する第１のプログラムと、逐次解釈される第２のプログラムとを実行可能な制御装置において、より高い制御性能を実現するための環境を提供する。【解決手段】制御装置は、第１のプログラムの全体を制御周期毎にスキャンして指令値を更新する第１のプログラム実行部と、逐次解釈される第２のプログラムに従って制御周期毎に指令値を更新する第２のプログラム実行部とを含む。第２のプログラム実行部は、中間コードを生成するインタプリタと、中間コードに従って制御周期毎に指令値を算出する指令値演算部とを含む。指令値演算部は、他の処理での利用が可能な態様で、制御周期毎に指令値を出力する。【選択図】図１
2019049947.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御するための制御装置であって、
制御周期毎に入力データおよび出力データを更新するデータ更新部と、
第１のプログラムの全体を制御周期毎にスキャンして指令値を更新する第１のプログラム実行部と、
逐次解釈される第２のプログラムに従って制御周期毎に指令値を更新する第２のプログラム実行部とを備え、
前記第２のプログラム実行部は、
前記第２のプログラムの少なくとも一部を解釈して中間コードを生成するインタプリタと、
前記インタプリタにより生成される中間コードに従って制御周期毎に指令値を算出する指令値演算部とを含み、
前記指令値演算部は、他の処理での利用が可能な態様で、制御周期毎に指令値を出力する、制御装置。
【請求項２】
前記指令値演算部が制御周期毎に算出する指令値を前記第１のプログラム実行部から参照するための共有メモリをさらに備える、請求項１に記載の制御装置。
【請求項３】
前記指令値演算部が制御周期毎に算出する指令値と、前記データ更新部により更新されるデータとに基づく演算処理を実行する実行部をさらに備える、請求項１または２に記載の制御装置。
【請求項４】
前記演算処理は、前記指令値演算部が制御周期毎に算出する指令値に対する数値処理を含む、請求項３に記載の制御装置。
【請求項５】
前記データ更新部により更新されるデータおよび前記第１のプログラム実行部により更新される指令値の少なくとも一方と、前記指令値演算部が制御周期毎に算出する指令値とをデータセットとして生成する生成部をさらに備える、請求項１〜４のいずれか１項に記載の制御装置。
【請求項６】
制御周期毎に生成されるデータセットを外部出力する出力部をさらに備える、請求項５に記載の制御装置。
【請求項７】
前記中間コードは、前記指令値演算部が制御周期毎に指令値を更新するための関数を含む、請求項１〜６のいずれか１項に記載の制御装置。
【請求項８】
前記中間コードは、時間と指令値との関係を規定する関数を含む、請求項７に記載の制御装置。
【請求項９】
前記インタプリタは、生成した中間コードをバッファに逐次キューイングし、
前記指令値演算部は、前記バッファにキューイングされた順に中間コードを読出すように構成されている、請求項１〜８のいずれか１項に記載の制御装置。
【請求項１０】
前記データ更新部、前記第１のプログラム実行部、および前記指令値演算部は、高優先タスクとして実行され、
前記インタプリタは、低優先タスクとして実行される、請求項１〜９のいずれか１項に記載の制御装置。
【請求項１１】
制御装置による制御方法であって、
制御周期毎に入力データおよび出力データを更新するステップと、
第１のプログラムの全体を制御周期毎にスキャンして指令値を更新するステップと、
逐次解釈される第２のプログラムの少なくとも一部を解釈して中間コードを生成するステップと、
前記生成される中間コードに従って制御周期毎に指令値を算出するステップとを備え、
前記中間コードに従う指令値を算出するステップは、他の処理での利用が可能な態様で、制御周期毎に指令値を出力する、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、制御対象を制御するための制御装置および制御方法に関する。
【背景技術】
【０００２】
様々な生産現場において、ＰＬＣ（プログラマブルコントローラ）などの制御装置を用いたＦＡ（Factory Automation）技術が広く普及している。このような制御装置は、直接的に制御対象を制御するだけではなく、他の装置に制御指令を与えることで、間接的に制御対象を制御する場合もある。例えば、特開２０１２−１６０１８０号公報（特許文献１）は、工作物を機械加工する数値制御工作機械を開示する。この構成においては、ＮＣ制御装置とＰＬＣ制御装置との間は信号線を介して接続されており、ＮＣ制御装置の情報は信号線を介してＰＬＣ制御装置へ伝えられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１６０１８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述の特開２０１２−１６０１８０号公報（特許文献１）に開示される構成においては、ＮＣプログラムを逐次実行するＮＣ制御装置と、定周期でプログラムを実行するＰＬＣ制御装置とは、互いに非同期でプログラムを実行することになる。そのため、ＰＬＣ制御装置においては、自装置が制御周期毎に収集する入力データと、ＮＣ制御装置からの情報（例えば、ＮＣプログラムの実行により算出された指令値など）とは収集タイミングが異なったものとなっている。収集タイミングが一致していないので、衝突防止などの監視には利用できるものの、例えば、リアルタイムに指令値を補正するといった処理を実現することはできなかった。
【０００５】
本開示は、制御周期毎に全体をスキャンして指令値を更新する第１のプログラムと、逐次解釈される第２のプログラムとを実行可能な制御装置において、より高い制御性能を実現するための環境を提供することを一つの目的とする。
【課題を解決するための手段】
【０００６】
本開示の一例では、制御対象を制御するための制御装置が提供される。制御装置は、制御周期毎に入力データおよび出力データを更新するデータ更新部と、第１のプログラムの全体を制御周期毎にスキャンして指令値を更新する第１のプログラム実行部と、逐次解釈される第２のプログラムに従って制御周期毎に指令値を更新する第２のプログラム実行部とを含む。第２のプログラム実行部は、第２のプログラムの少なくとも一部を解釈して中間コードを生成するインタプリタと、インタプリタにより生成される中間コードに従って制御周期毎に指令値を算出する指令値演算部とを含む。指令値演算部は、他の処理での利用が可能な態様で、制御周期毎に指令値を出力する。
【０００７】
この開示によれば、第１のプログラムに従う指令値および第２のプログラムに従う指令値を制御周期毎に算出することができ、さらに、これらの指令値を容易に二次利用できる。制御周期毎に算出されるそれぞれのプログラムからの指令値を利用または加工することで、より高い制御性能を実現できる。
【０００８】
上述の開示において、制御装置は、指令値演算部が制御周期毎に算出する指令値を第１のプログラム実行部から参照するための共有メモリをさらに含んでいてもよい。
【０００９】
この開示によれば、それぞれのプログラムを実行する主体および他の処理を実行する主体は、共有メモリにアクセスすることで、必要な指令値を参照でき、実装を簡素化できる。
【００１０】
上述の開示において、制御装置は、指令値演算部が制御周期毎に算出する指令値と、データ更新部により更新されるデータとに基づく演算処理を実行する実行部をさらに含んでいてもよい。
【００１１】
この開示によれば、例えば、装置の状況を入力データとして取得するとともに、当該取得した入力データに基づいて指令値を補正することができる。このような指令値の補正処理によって、より状況に応じた高精度な制御を実現できる。
【００１２】
上述の開示において、指令値演算部が制御周期毎に算出する指令値に対する数値処理を含んでいてもよい。
【００１３】
この開示によれば、例えば、何らかの方法で取得されたずれ量などを指令値に容易に反映できる。
【００１４】
上述の開示において、制御装置は、データ更新部により更新されるデータおよび第１のプログラム実行部により更新される指令値の少なくとも一方と、指令値演算部が制御周期毎に算出する指令値とをデータセットとして生成する生成部をさらに含んでいてもよい。
【００１５】
この開示によれば、同時に取得された、データ更新部により更新されるデータおよび第１のプログラム実行部により更新される指令値の少なくとも一方と、指令値演算部が算出する指令値とを互いに関連付けて取得できるので、事後的なデータ解析などを効率的に行うことができる。
【００１６】
上述の開示において、制御装置は、制御周期毎に生成されるデータセットを外部出力する出力部をさらに含んでいてもよい。
【００１７】
この開示によれば、制御装置内で同期して収集されたデータセットを外部装置にて効率的に解析できる。
【００１８】
上述の開示において、中間コードは、指令値演算部が制御周期毎に指令値を更新するための関数を含んでいてもよい。
【００１９】
この開示によれば、指令値演算部は、関数に従う演算を行うことで、指令値を算出できるので、制御周期毎の指令値の算出処理を簡素化できる。
【００２０】
上述の開示において、中間コードは、時間と指令値との関係を規定する関数を含んでいてもよい。
【００２１】
この開示によれば、指令値演算部は、指令値を演算するタイミングを示す時間を関数に入力すれば、当該タイミングにおける指令値を算出できるので、指令値の算出に係る処理をより簡素化できる。
【００２２】
上述の開示において、インタプリタは、生成した中間コードをバッファに逐次キューイングし、指令値演算部は、バッファにキューイングされた順に中間コードを読出すようにしてもよい。
【００２３】
上述の開示によれば、第２のプログラムの複雑性や処理速度などに応じて、事前に第２のプログラムを逐次解釈しておくことで、第２のプログラム実行部において指令値を演算できないという事態の発生を防止できる。
【００２４】
上述の開示において、データ更新部、第１のプログラム実行部、および指令値演算部は、高優先タスクとして実行され、インタプリタは、低優先タスクとして実行されてもよい。
【００２５】
この開示によれば、インタプリタは、他の処理を実行する主体に比較して、優先度が低く設定されるので、第２のプログラムを逐次解釈する処理によって、指令値を演算する処理自体が影響を受けることを防止できる。
【００２６】
本開示の別の一例では、制御装置による制御方法が提供される。制御方法は、制御周期毎に入力データおよび出力データを更新するステップと、第１のプログラムの全体を制御周期毎にスキャンして指令値を更新するステップと、逐次解釈される第２のプログラムの少なくとも一部を解釈して中間コードを生成するステップと、生成される中間コードに従って制御周期毎に指令値を算出するステップとを含む。中間コードに従う指令値を算出するステップは、他の処理での利用が可能な態様で、制御周期毎に指令値を出力する。
【００２７】
上述の開示によれば、第１のプログラムに従う指令値および第２のプログラムに従う指令値を制御周期毎に算出することができ、さらに、これらの指令値を容易に二次利用できる。制御周期毎に算出されるそれぞれのプログラムからの指令値を利用または加工することで、より高い制御性能を実現できる。
【発明の効果】
【００２８】
本開示の一例によれば、制御周期毎に全体をスキャンして指令値を更新する第１のプログラムと、逐次解釈される第２のプログラムとを実行可能な制御装置において、より高い制御性能を実現するための環境を提供できる。
【図面の簡単な説明】
【００２９】
【図１】本実施の形態に係る制御装置の適用場面の一例を示す模式図である。
【図２】本実施の形態に係る制御システムの全体構成例を示す模式図である。
【図３】本実施の形態に係る制御装置のハードウェア構成例を示すブロック図である。
【図４】本実施の形態に係る制御装置の機能構成例を示す模式図である。
【図５】本実施の形態に係る制御装置におけるＮＣプログラムの実行処理を概念的に示す模式図である。
【図６】本実施の形態に係る制御装置における中間コードの生成例を説明するための模式図である。
【図７】本実施の形態に係る制御装置におけるプログラムの実行動作例を示すタイムチャートである。
【図８】本実施の形態に係る制御装置を含む制御システムの全体構成例を示す模式図である。
【図９】図８に示す制御システムにおける制御構造の要部を示す模式図である。
【図１０】図９に示す制御構造を実現するためのＩＥＣプログラムのコード例を示す図である。
【図１１】図８に示す制御システムの制御装置において実行される処理手順を示すフローチャートである。
【図１２】本実施の形態に係る制御装置を含む制御システムの全体構成例を示す模式図である。
【図１３】図１２に示す制御システムにおける制御構造の要部を示す模式図である。
【図１４】図１３に示す制御構造を実現するためのＩＥＣプログラムのコード例を示す図である。
【図１５】図１２に示す制御システムの制御装置において実行される処理手順を示すフローチャートである。
【発明を実施するための形態】
【００３０】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００３１】
＜Ａ．適用例＞
まず、図１を参照して、本発明が適用される場面の一例について説明する。図１は、本実施の形態に係る制御装置１００の適用場面の一例を示す模式図である。本実施の形態に係る制御装置１００は、任意の制御対象（例えば、製造装置や設備）を制御する。
【００３２】
図１に示すように、制御装置１００は、制御周期毎に入力データおよび出力データを更新するデータ更新部５０と、少なくともシーケンス命令を含む第１のプログラム６２の全体を制御周期毎にスキャンして指令値７２を更新する第１のプログラム実行部５４と、逐次解釈される第２のプログラムに従って制御周期毎に指令値７４を更新する第２のプログラム実行部５６とを含む。第２のプログラム実行部５６は、第２のプログラムの少なくとも一部を解釈して中間コードを生成するインタプリタ５８と、インタプリタ５８により生成される中間コードに従って制御周期毎に指令値７４を算出する指令値演算部６０とを含む。指令値演算部６０は、他の処理での利用が可能な態様で、制御周期毎に指令値７４を出力する。指令値７２および指令値７４は、入力データおよび出力データが一時的に格納される共有メモリ５２に併せて保持される。
【００３３】
本発明の「第１のプログラム」は、実行毎に全体がスキャンされて、実行毎に１または複数の指令値が算出されるプログラムを包含する。以下の説明においては、このような「第１のプログラム」の一例として、「ＩＥＣプログラム」を想定する。「ＩＥＣプログラム」は、典型的には、国際電気標準会議（International Electrotechnical Commission：ＩＥＣ）によって規定された国際規格ＩＥＣ６１１３１−３に従って記述された１または複数の命令からなるプログラムを包含する。「ＩＥＣプログラム」には、シーケンス命令および／またはモーション命令を含み得る。「ＩＥＣプログラム」は、制御周期毎にすべてのプログラムが実行（スキャン）される。「ＩＥＣプログラム」は、即時性および高速性が要求される制御に好適である。なお、「ＩＥＣプログラム」としては、国際規格ＩＥＣ６１１３１−３に従って記述された命令に限らず、ＰＬＣ（プログラマブルコントローラ）の製造メーカまたはベンダーなどが独自に規定した命令を含むようにしてもよい。
【００３４】
本明細書において、「シーケンス命令」は、基本的には、入力値、出力値、内部値などを算出する１または複数の論理回路により記述される１または複数の命令を包含する用語である。基本的には、１回の制御周期において、「シーケンス命令」は、先頭から最終まで実行され、次の制御周期において、「シーケンス命令」は、先頭から最終までが再度実行される。
【００３５】
本明細書において、「モーション命令」は、サーボモータなどのアクチュエータに対して、位置、速度、加速度、加加速度、角度、角速度、角加速度、角加加速度などの数値を指令として算出するための１または複数の命令を包含する用語である。「モーション命令」についても、１回の制御周期において、ファンクションブロックや数値算出式などにより記述されるモーション命令のプログラム（モーションプログラム）の先頭から最終までが実行される。すなわち、制御周期毎に指令値は算出（更新）されることになる。
【００３６】
本発明の「第２のプログラム」は、逐次解釈される任意のプログラムを包含する。すなわち、「第２のプログラム」は、１行ずつ逐次解釈して実行するインタプリタ方式で実行可能な任意の言語で記述されたプログラムを包含する。以下の説明においては、このような「第２のプログラム」の一例として、ＣＮＣ（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）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００６７】
図３に示す制御システム１においては、制御装置１００、サポート装置２００および表示装置４００がそれぞれ別体として構成されているが、これらの機能の全部または一部を単一の装置に集約するような構成を採用してもよい。
【００６８】
＜Ｄ．制御装置の機能構成例＞
次に、本実施の形態に係る制御装置１００の機能構成例について説明する。
【００６９】
図４は、本実施の形態に係る制御装置１００の機能構成例を示す模式図である。図４を参照して、制御装置１００は、プログラム実行に係る機能構成として、ＩＥＣプログラム実行部１４０と、ＮＣプログラム実行部１５０と、共有メモリ１６０と、入出力インターフェイス処理部１６２と、上位ネットワークインターフェイス処理部１６４とを含む。
【００７０】
ＩＥＣプログラム実行部１４０は、ＩＥＣプログラム３０（第１のプログラム）の全体を制御周期毎にスキャンして指令値を更新する第１のプログラム実行部に相当する。すなわち、ＩＥＣプログラム実行部１４０は、予め定められた制御周期毎にＩＥＣプログラム３０を実行（スキャン）して１または複数の指令値を更新する。ＩＥＣプログラム３０は、シーケンス命令およびモーション命令を含み得る。シーケンス命令は、入力値、出力値、内部値などを含む１または複数の論理演算を規定する。モーション命令は、サーボモータなどのアクチュエータに対して、位置、速度、加速度、加加速度、角度、角速度、角加速度、角加加速度といった数値としての指令値の演算手順を規定する。
【００７１】
ＩＥＣプログラム実行部１４０は、制御周期毎に、ＩＥＣプログラム３０の全体を実行する。すなわち、１回の制御周期において、ＩＥＣプログラム実行部１４０は、ＩＥＣプログラム３０の先頭から最終までを実行して、各制御周期における指令値を更新する。但し、モーション命令は、１つのコマンドによって複数の制御周期に亘って指令値を算出できるものもある。ＩＥＣプログラム実行部１４０は、このようなモーション命令を実行するために、モーション指令値演算部１４２を有している。
【００７２】
モーション指令値演算部１４２は、制御周期毎に、モーション命令に従って指令値を算出する。
【００７３】
このように、ＩＥＣプログラム実行部１４０は、制御周期毎に、当該制御周期における入力データを用いてＩＥＣプログラム３０を実行して、当該制御周期における指令値を算出する。
【００７４】
ＮＣプログラム実行部１５０は、逐次解釈されるＮＣプログラム３２（第２のプログラム）に従って制御周期毎に指令値を更新する第２のプログラム実行部に相当する。より具体的には、ＮＣプログラム実行部１５０は、ＮＣプログラム３２をインタプリタ方式で実行する。但し、ＮＣプログラム実行部１５０による指令値の算出（更新）は、制御周期毎に繰返し実行される。このように、ＮＣプログラム実行部１５０は、ＩＥＣプログラム実行部１４０による指令値の算出に同期して、ＮＣプログラム３２に従う指令値を算出する。このような制御周期毎の指令値の算出を実現するために、ＮＣプログラム実行部１５０は、インタプリタ１５２と、中間コードバッファ１５４と、ＮＣ指令値演算部１５８とを含む。
【００７５】
インタプリタ１５２は、ＮＣプログラム３２の少なくとも一部を解釈して、中間コード１５６を生成する。すなわち、インタプリタ１５２は、ＮＣプログラム３２を逐次解釈して中間コード１５６を生成するとともに、生成した中間コード１５６を中間コードバッファ１５４に順次格納する。インタプリタ１５２は、ＮＣプログラム３２から中間コード１５６の生成をある程度事前に行う。そのため、中間コードバッファ１５４には、複数の中間コード１５６が格納されることもある。本実施の形態において、インタプリタ１５２は、指令値を算出するための軌道を生成するため、「プランナー」と称されることもある。
【００７６】
ＮＣ指令値演算部１５８は、インタプリタ１５２が事前に生成した中間コード１５６に従って、制御周期毎に指令値を算出する。一般的に、ＮＣプログラムに記述される命令（コード）は、逐次解釈されるために、演算周期毎に指令値を算出できる保証はないが、中間コード１５６を利用することで、制御周期毎の指令値の算出を実現できる。
【００７７】
インタプリタ１５２は、生成した中間コード１５６を中間コードバッファ１５４に逐次キューイングし、ＮＣ指令値演算部１５８は、中間コードバッファ１５４にキューイングされた順に中間コード１５６を読出す。
【００７８】
共有メモリ１６０は、制御演算に用いる内部変数などを格納する記憶領域を提供し、ＩＥＣプログラム実行部１４０およびＮＣプログラム実行部１５０のいずれからもアクセス可能になっている。すなわち、共有メモリ１６０には、ＩＥＣプログラム実行部１４０により制御周期毎に更新される１または複数の指令値、および、ＮＣプログラム実行部１５０により制御周期毎に更新される１または複数の指令値が格納される。共有メモリ１６０は、ＮＣプログラム実行部１５０（ＮＣ指令値演算部１５８）が制御周期毎に算出する指令値をＩＥＣプログラム実行部１４０から参照するために用いられ、あるいは、その逆の参照にも用いられる。
【００７９】
より具体的には、ＮＣプログラム実行部１５０による処理結果の一部または全部が共有メモリ１６０に格納され、ＩＥＣプログラム実行部１４０は、共有メモリ１６０に格納されたデータを参照することができる。一方、ＩＥＣプログラム実行部１４０による処理結果の一部または全部が共有メモリ１６０に格納され、ＮＣプログラム実行部１５０は、共有メモリ１６０に格納されたデータを参照することができる。このように、ＩＥＣプログラム実行部１４０およびＮＣプログラム実行部１５０（ＮＣ指令値演算部１５８）は、他の処理での利用が可能な態様で、制御周期毎に指令値を出力する。なお、共有メモリ１６０にデータを格納する際には、構造体変数を採用してもよい。
【００８０】
入出力インターフェイス処理部１６２は、制御周期毎に入力データおよび出力データを更新するデータ更新部に相当する。すなわち、入出力インターフェイス処理部１６２は、入出力リフレッシュ処理を実現するための機能構成であり、内部バスコントローラ１２０を介して接続されるＩ／Ｏユニット１２２、および／または、フィールドネットワークコントローラ１３０を介して接続されるフィールドデバイス５００との間で入力データおよび出力データを遣り取りする。このような遣り取りされるデータは、数１００μｓｅｃオーダ〜数１０ｍｓｅｃオーダのごく短い周期（一定周期）で更新されることになる。
【００８１】
より具体的には、入出力インターフェイス処理部１６２は、ＩＥＣプログラム実行部１４０より算出された１または複数の指令値（基本的には、論理値）、ＩＥＣプログラム実行部１４０のモーション指令値演算部１４２により算出された１または複数の指令値（基本的には、数値）、ならびに、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８により算出された１または複数の指令値（基本的には、数値）を、制御周期毎にフィールド側へ出力する。また、入出力インターフェイス処理部１６２は、Ｉ／Ｏユニット１２２により収集された入力データ、および、フィールドデバイス５００により収集された入力データを、制御周期毎に取得する。
【００８２】
制御装置１００は、上位ネットワーク６を介して接続されているサーバ装置３００などから、生産の開始／終了といった指示を受ける。サーバ装置３００は、レシピ情報（生産に適したパラメータなどの情報）などを制御装置１００に送信するようにしてもよいし、ＮＣプログラム自体を制御装置１００にダウンロードするようにしてもよい。
【００８３】
上位ネットワークインターフェイス処理部１６４は、ＩＥＣプログラム実行部１４０およびＮＣプログラム実行部１５０と、上位ネットワークコントローラ１１０を介して接続されている装置（サーバ装置３００および表示装置４００）との間のデータの遣り取りを仲介する。
【００８４】
図４に示す構成においては、説明の便宜上、ＮＣプログラム実行部１５０が１つだけ配置される構成例を示すが、これに限らず、ＮＣプログラム実行部１５０を複数配置してもよい。この場合には、ＮＣプログラム実行部１５０の各々が、互いに独立してＮＣプログラムを解釈および実行することになる。
【００８５】
上述の説明においては、制御周期毎に、ＩＥＣプログラム実行部１４０およびＮＣプログラム実行部１５０が指令値を算出することに言及したが、これに加えて、制御周期より長い周期で実行されるプログラムも存在し得る。このようなプログラムは、例えば、システムサービスなどと称される。このようなシステムサービスは、いずれのタスクも実行されていない空時間に実行される。但し、入力データおよび出力データの更新は、制御周期毎に繰返し実行される入出力リフレッシュ処理のタイミングで実行される。典型的には、システムサービスについての入力データおよび出力データの更新は、制御周期の整数倍毎に実行されてもよい。
【００８６】
＜Ｅ．中間コード＞
次に、ＮＣプログラム実行部１５０のインタプリタ１５２がＮＣプログラム３２を解釈して生成される中間コードの一例について説明する。
【００８７】
図５は、本実施の形態に係る制御装置１００におけるＮＣプログラム３２の実行処理を概念的に示す模式図である。図５を参照して、ＮＣプログラム３２は、ＮＣプログラム実行部１５０において逐次解釈された上で、制御周期毎の指令値が算出される。
【００８８】
一般的に、ＮＣプログラム３２は、インタプリタ方式で逐次解釈されるコードを含んでおり、各コードを逐次解釈した場合に必要となる時間は、各コードが記述する内容に応じて変化する。すなわち、インタプリタ方式で逐次解釈されるため、制御周期毎に指令値を算出することは容易ではない。
【００８９】
そこで、本実施の形態に係る制御装置１００においては、ＮＣプログラム実行部１５０のインタプリタ１５２が、ＮＣプログラム３２に記述された１または複数のコードを解釈し、その解釈された内容に基づいて、制御周期毎に指令値を算出するための中間コード１５６を生成する。中間コード１５６は、ＮＣプログラム３２に記述された１または複数のコード毎に生成されるので、通常は、１つのＮＣプログラム３２から複数の中間コード１５６が生成される。
【００９０】
生成される中間コード１５６は、ＮＣプログラム実行部１５０の中間コードバッファ１５４に順次キューイングされる。
【００９１】
中間コード１５６の各々においては、時間に関する変数を入力として、指令値を算出できる関数が規定されていてもよい。すなわち、中間コード１５６は、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８が制御周期毎に指令値を更新するための関数であってもよい。このような関数を用いることで、ＮＣ指令値演算部１５８は、生成される中間コード１５６を順次参照して、各制御周期における指令値を算出できる。
【００９２】
より具体的には、中間コード１５６は、時間と指令値との関係を規定する関数であってもよい。中間コード１５６を規定するための時間に関する変数としては、時刻、ある基準タイミングからの経過時間、制御周期の累積サイクル数などを用いることができる。
【００９３】
例えば、１番目の中間コード１が制御周期の１０倍分の期間に亘って指令値を規定するものであるとすると、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８は、中間コード１をキューイングして、１０制御周期分の期間に亘って指令値を周期的に算出する。同様に、他の中間コード２および中間コード３についても、基本的には、複数の制御周期に亘って指令値を算出できるものとなる。
【００９４】
したがって、ＮＣプログラム実行部１５０のインタプリタ１５２によるＮＣプログラム３２から中間コードの生成処理が、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８による指令値の演算処理に比較して、十分に先だって実行されれば、ＩＥＣプログラム３０に従う処理と同期して、ＮＣプログラム３２に従う処理を同期実行できる。
【００９５】
図６は、本実施の形態に係る制御装置１００における中間コードの生成例を説明するための模式図である。図６（Ａ）を参照して、ＮＣプログラム実行部１５０のインタプリタ１５２がＮＣプログラム３２を逐次実行すると、ＮＣプログラム３２に含まれる各命令が解釈される（（１）プログラム解釈）。この命令の解釈によって、規定された軌道が内部的に生成される（（２）軌道生成）。最終的に、インタプリタ１５２は、生成した軌道を所定の区間に分割した上で、各区間の軌道を規定する１または複数の関数（中間コード）を生成する（（３）中間コード生成）。
【００９６】
なお、複数の区間を共通の中間コードで規定してもよいし、１つの区間をさらに分割してそれぞれの共通コードを生成してもよい。すなわち、ＮＣプログラム３２の命令または当該命令によって規定される軌道の区間と、生成される中間コードの数とを一致させる必要はなく、任意に生成すればよい。また、中間コード１５６の出力形態についても、要求される制御周期の時間幅などを考慮して、適宜設計されてもよい。
【００９７】
図６（Ａ）に示すように、中間コード１５６の一例としては、時間と指令値との関係を規定する関数であってもよい。図６（Ａ）に示す例では、内部的に生成された軌道は、直線の組み合わせで規定できるので、一例として、直線区間毎（区間１〜区間３）の軌道を時間と速度との関係を示す関数Ｆ１（ｔ），Ｆ２（ｔ），Ｆ３（ｔ）が出力される。
【００９８】
図６（Ｂ）に示すように、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８が、制御周期毎に、生成された中間コード１５６に従って指令値を算出することで、制御周期毎に指令値が算出される。すなわち、各区間に対応する関数に、各制御周期の時刻を入力することで、当該時刻における指令値を一意に決定できる。
【００９９】
上述の図５および図６には、一例として、ＣＮＣで用いられるＧ言語により記述されたコードの一例を示すが、これに限らず、任意のインタプリタ方式で実行されるプログラムであれば、どのような言語を用いてもよい。また、処理対象の言語形式に応じて、生成される中間コードの形式を異ならせてもよい。
【０１００】
＜Ｆ．プログラムの実行動作例＞
次に、本実施の形態に係る制御装置１００におけるプログラムの実行動作例について説明する。
【０１０１】
図７は、本実施の形態に係る制御装置１００におけるプログラムの実行動作例を示すタイムチャートである。図７には、一例として、優先度別に複数のタスクが設定され、各タスクがそれぞれの優先度に応じてプロセッサ１０２のリソースを共有する例を示す。
【０１０２】
図７に示す例では、高優先タスクとして、（１）入出力インターフェイス処理部１６２により実行される入出力リフレッシュ処理２０と、（２）ＩＥＣプログラム実行部１４０によるＩＥＣプログラム３０の実行と、（３）ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８による指令値の算出処理と、（４）ＩＥＣプログラム実行部１４０のモーション指令値演算部１４２による指令値の算出処理との４つの処理が設定されている。
【０１０３】
また、低優先タスクとして、ＮＣプログラム実行部１５０のインタプリタ１５２によるＮＣプログラム３２の逐次解釈が設定されているとする。
【０１０４】
高優先タスクは、予め定められた制御周期Ｔ１毎に繰返し実行される。低優先タスクは、高優先タスクが実行されていない期間に適宜実行される。すなわち、制御周期毎に、高優先タスクの実行時間が割当てられ、高優先タスクの実行時間以外の時間において、低優先タスクが実行される。
【０１０５】
まず、高優先タスクについて説明すると、各制御周期が到来すると、まず、入出力リフレッシュ処理２０が実行された後、ＩＥＣプログラム実行部１４０は、ＩＥＣプログラム３０の全体を実行（スキャン）して、シーケンス命令に従う１または複数の指令値を算出する。併せて、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８は、中間コードバッファ１５４から中間コード１５６を読出して（デキューして）、当該制御周期における指令値を算出する。また、ＩＥＣプログラム実行部１４０のモーション指令値演算部１４２は、ＩＥＣプログラム３０に含まれるモーション命令に従って、モーション命令についての１または複数の指令値を算出する。以下、同様の処理が制御周期毎に繰返される。
【０１０６】
なお、ＮＣ指令値演算部１５８が中間コードバッファ１５４から中間コード１５６を読出すタイミング（デキューするタイミング）は、各制御周期でなくともよい。これは、読出された中間コードが複数の制御周期に亘って指令値を算出できるだけの命令を含むことが多いからである。
【０１０７】
このように、ある制御周期における高優先タスクの実行が完了すると、シーケンス命令に従う指令値、モーション命令に従う指令値、制御アプリケーションについての指令値のセットが用意される。これらの指令値は、基本的には、次の制御周期が到来すると、フィールド側に反映される。すなわち、ＩＥＣプログラム実行部１４０およびＮＣプログラム実行部１５０は、同一の制御周期で入力データに応じた指令値を算出するので、入力に同期した出力を実現できる。
【０１０８】
図７には、説明の便宜上、ＩＥＣプログラム３０の実行、ＮＣ指令値演算部１５８による指令値の算出処理、および、モーション指令値演算部１４２による指令値の算出処理が順番に実行される例を示すが、実行順番については適宜変更してもよいし、各処理をさらに細分化して交互に実行するようにしてもよい。すなわち、先行の入出力リフレッシュ処理２０の実行完了後から次の入出力リフレッシュ処理２０の実行開始前までの間に、指令値を含む外部データとして出力すべきデータが算出できていればよい。
【０１０９】
一方、低優先タスクについて説明すると、ＮＣプログラム実行部１５０のインタプリタ１５２は、ＮＣプログラム３２を逐次解釈する。すなわち、ＮＣプログラム実行部１５０のインタプリタ１５２は、ＮＣプログラム３２の読込みおよび解析を低優先で実行する。インタプリタ１５２がＮＣプログラム３２を解析処理して生成された中間コードは、逐次、中間コードバッファ１５４にキューイング（エンキュー）される。中間コードバッファ１５４にキューイングされた中間コードは、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８により都度参照されて、指令値の生成に用いられる。
【０１１０】
ＮＣプログラム実行部１５０のインタプリタ１５２は、高優先タスクの演算周期である制御周期の整数倍分の中間コードを予めキューイングしておくことで、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８による制御周期毎の指令値の算出を実現できる。
【０１１１】
ＮＣプログラム実行部１５０のインタプリタ１５２は、ＮＣプログラム３２を事前に解析処理することで、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８が指令値の演算に参照する中間コードを、十分余分に生成しておくようにしてもよい。
【０１１２】
ＮＣプログラム実行部１５０のインタプリタ１５２は、予め定められたインタプリタ制御周期Ｔ２（基本的には、制御周期Ｔ１の整数倍）毎に、ＩＥＣプログラム実行部１４０との間でデータ同期処理を行う。そのため、インタプリタ１５２は、各プログラム実行動作において、ＮＣプログラム３２に含まれるコードのうち、インタプリタ制御周期Ｔ２内に処理可能なコードだけを読込んで解釈する。
【０１１３】
図７に示すように、高優先タスクとして、ＩＥＣプログラム実行部１４０によるＩＥＣプログラム３０の実行と、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８による指令値の算出処理と、ＩＥＣプログラム実行部１４０のモーション指令値演算部１４２による指令値の算出処理とは、いずれも制御周期毎に実行されるため、互いに演算結果を各制御周期で反映することもできる。
【０１１４】
例えば、ある制御周期において、ＩＥＣプログラム３０の実行により算出される指令値を、同一の制御周期においてＮＣ指令値演算部１５８が算出する指令値に反映することができる。また、ある制御周期においてＩＥＣプログラム３０の実行により算出される指令値と、同一の制御周期においてＮＣ指令値演算部１５８が算出する指令値とを同一のデータセットとして、外部のサーバ装置３００などへ送信することもできる。
【０１１５】
このように、本実施の形態に係る制御装置１００においては、繰返し実行（スキャン）されるＩＥＣプログラム３０および逐次解釈されるＮＣプログラム３２のいずれについても、制御周期毎に指令値を算出する処理が実行されるので、このような性質の異なる２つのプログラム間で互いに演算結果を参照し合うといった処理や、それぞれのプログラムが出力する演算結果をまとめるといった処理を容易に行うことができる。
【０１１６】
以下、図７に示すような、本実施の形態に係る制御装置１００におけるプログラムの実行動作を利用した応用例のいくつかについて説明する。
【０１１７】
＜Ｇ．応用例その１＞
次に、本実施の形態に係る制御装置１００における応用例の一つとして、ＮＣプログラム３２に従って算出される指令値に対して、動的な補正を行う処理例について説明する。
【０１１８】
（ｇ１：制御システムの全体構成例）
図８は、本実施の形態に係る制御装置１００を含む制御システム１Ａの全体構成例を示す模式図である。図８を参照して、制御装置１００は、フィールドネットワーク２を介して、リモートＩ／Ｏ装置５１０と、ＣＮＣ加工装置５４０と、視覚センサ５５０と接続されている。これらの装置は、フィールドデバイス５００の一例である。
【０１１９】
ＣＮＣ加工装置５４０は、コンベアなどによって搬送されるワークに対して、任意の加工を行う装置であり、制御装置１００において制御周期毎に算出される指令値に従って動作する。
【０１２０】
視覚センサ５５０は、ＣＮＣ加工装置５４０の加工部材（例えば、バイト）を視野範囲内に含むように配置されており、例えば、画像認識処理によって、加工部材の位置あるいは変位を検出できる。視覚センサ５５０により検出される位置あるいは変位を示す情報は、制御装置１００にてアクセス可能である。
【０１２１】
例えば、加工中にＣＮＣ加工装置５４０の加工部材の位置ずれが生じた場合などであっても、加工部材を適切な位置に配置したいというニーズがある。一般的に、ＣＮＣ加工装置５４０は、ＮＣプログラム３２によって予め規定された軌道に沿って動作するように制御される。そのため、動作中に生じ得る外乱に対する補正を行うことは容易ではない。
【０１２２】
これに対して、本実施の形態に係る制御装置１００を含む制御システム１Ａにおいては、ＣＮＣ加工装置５４０に生じ得る外乱などに対して、制御周期毎での動的な補正が可能である。すなわち、ＣＮＣ加工装置５４０の加工部材の位置ずれなどを適宜補正できる。
【０１２３】
（ｇ２：制御構造）
図９は、図８に示す制御システム１Ａにおける制御構造の要部を示す模式図である。図９を参照して、ＮＣ指令値演算部１５８は、制御周期毎に指令値を出力するとともに、視覚センサ５５０は、制御周期毎に補正量を出力する。なお、視覚センサ５５０自身が補正量を算出するのではなく、制御装置１００において実行される演算処理によって補正量を算出するようにしてもよい。
【０１２４】
加算部１７０において、ＮＣ指令値演算部１５８からの指令値に視覚センサ５５０からの補正量が加算されて、補正後の指令値が算出される。この補正後の指令値がＣＮＣ加工装置５４０へ与えられる。
【０１２５】
このように、制御装置１００においては、ＮＣ指令値演算部１５８が制御周期毎に算出する指令値と、入出力リフレッシュ処理により更新されるデータ（入力データ／出力データ）とに基づく演算処理が実行可能になっている。図９に示すように、補正処理においては、ＮＣ指令値演算部１５８が制御周期毎に算出する指令値に対する数値処理が採用されるが、これに限らず、論理的処理や条件判断処理などを適用することもできる。
【０１２６】
上述したように、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８による指令値の算出は制御周期毎に繰返されるので、図９に示す指令値の補正処理は、制御周期毎に実行することができる。すなわち、ＣＮＣ加工装置５４０へ与える指令値を制御周期毎に動的に補正することができる。
【０１２７】
このような制御周期毎の動的な補正によって、より正確な加工処理などを実現できる。
なお、上述の説明においては、視覚センサ５５０が出力する補正量を加算する処理について例示したが、これに限られることなく、任意の補正量を用いて、任意の補正処理を適用できる。
【０１２８】
（ｇ３：プログラムコード例）
図９に示す制御構造については、ＩＥＣプログラム実行部１４０において実行されるＩＥＣプログラム３０と、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８で実行される付加処理との組み合わせによって実現してもよいし、ＩＥＣプログラム３０にまとめて記述してもよい。一例として、ＩＥＣプログラム３０にまとめて記述する場合について説明する。
【０１２９】
図１０は、図９に示す制御構造を実現するためのＩＥＣプログラムのコード例を示す図である。図１０を参照して、ＩＥＣプログラムコード６００は、視覚センサ５５０から補正量を取得するためのファンクションブロック６１０と、ＮＣプログラム実行部１５０にＮＣプログラム３２を実行させるためのファンクションブロック６２０と、２つの入力を加算するファンクションブロック６３０とを含む。
【０１３０】
ファンクションブロック６１０は、何らかの接点６１２（ＩＮ０１）を実行条件として規定されており、接点６１２が「オン」に駆動されることで、視覚センサ５５０から取得した補正量は変数６１６（Ｒｅｓ１）に格納される。ファンクションブロック６１０に関連付けられているコイル６１４（Ｃ１）には、ファンクションブロック６１０での処理の実行状態を示す値が格納される。
【０１３１】
ファンクションブロック６２０は、何らかの接点６２２（ＩＮ０２）を実行条件として規定されており、接点６２２が「オン」に駆動されることで、ＮＣプログラム実行部１５０でのＮＣプログラム３２の実行が指示される。ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８により制御周期毎に算出される指令値は、ファンクションブロック６２０の出力ノードに関連付けられている変数６２８（Ｒｅｓ２）に格納される。
【０１３２】
ファンクションブロック６２０に関連付けられているコイル６２４（Ｃ２）には、ファンクションブロック６２０での処理の実行状態を示す値が格納される。ファンクションブロック６２０に関連付けられている変数６２６（Ｎｕｍ）は、実行すべきＮＣプログラム３２を特定する。すなわち、変数６２６に格納される数値または文字に従って、ＮＣ指令値演算部１５８が実行すべきＮＣプログラム３２が特定される。変数６２６に格納される数値または文字を適切な条件に従って更新または切換えることで、状況に応じた加工処理などを実現できる。
【０１３３】
ファンクションブロック６３０は、第１入力ノードに関連付けられている変数６１６（Ｒｅｓ１）と、第２入力ノードに関連付けられている変数６２８（Ｒｅｓ２）とを合算して、最終的な補正後の指令値６３２（Ｏｕｒ＿Ｖａｌ０１）として出力する。
【０１３４】
上述の図１０に示すＩＥＣプログラムコード６００は、制御周期毎に全体が実行（スキャン）されることで、図９に示すような位置指令の制御周期毎の補正を実現できる。なお、ＩＥＣプログラムコード６００のファンクションブロック６２０が実行されると、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８による指令値の算出を待って、後続の命令の実行を行うようにしてもよい。
【０１３５】
（ｇ４：処理手順）
図１１は、図８に示す制御システム１Ａの制御装置１００において実行される処理手順を示すフローチャートである。図１１には、高優先タスクおよび低優先タスクの実行をそれぞれ示す。
【０１３６】
図１１を参照して、高優先タスクに関して、制御周期が到来する（ステップＳ１００においてＹＥＳ）と、入出力インターフェイス処理部１６２が入出力リフレッシュ処理を実行する（ステップＳ１０２）。これによって、直前の制御周期において算出された指令値がアクチュエータなどへ出力されるとともに、フィールドから入力データが取得される。
【０１３７】
ＩＥＣプログラム実行部１４０は、ＩＥＣプログラム３０の全体をスキャンすることで、今回の制御周期における１または複数の指令値を算出する（ステップＳ１０４）。すなわち、ＩＥＣプログラム３０のシーケンス命令に従う指令値が内部的に算出される。
【０１３８】
ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８は、指令値を算出するために必要な中間コードが有効に読込まれているか否かを判断する（ステップＳ１０６）。中間コードが有効に読込まれていなければ（ステップＳ１０６においてＮＯ）、ＮＣ指令値演算部１５８は、中間コードバッファ１５４から中間コードを読込む（ステップＳ１０８）。中間コードが有効に読込まれていれば（ステップＳ１０６においてＹＥＳ）、ステップＳ１０８の処理はスキップされる。
【０１３９】
ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８は、中間コードに従って、今回の制御周期における指令値を算出する（ステップＳ１１０）。さらに、ＩＥＣプログラム実行部１４０は、算出された指令値に対して今回の制御周期において取得された補正量を加算して、補正後の指令値を算出する（ステップＳ１１２）。なお、ステップＳ１１２の処理は、ＮＣ指令値演算部１５８により実行されてもよい。このようにして、ＮＣプログラム３２に従う指令値が内部的に算出される。
【０１４０】
ＩＥＣプログラム実行部１４０のモーション指令値演算部１４２は、ＩＥＣプログラム３０に含まれるモーション命令に従って、今回の制御周期における指令値を算出する（ステップＳ１１４）。
【０１４１】
なお、ステップＳ１０６〜Ｓ１１２の処理は、ステップＳ１０４におけるＩＥＣプログラム３０の実行途中に割込み実行されることもある。
【０１４２】
以上の処理により、今回の制御周期における指令値が演算される。そして、ステップＳ１００以下の処理が繰返される。すなわち、次の制御周期が到来すると、ステップＳ１０４，Ｓ１１２，Ｓ１１４において算出される指令値がフィードへ出力される。なお、ステップＳ１１２の後、次の制御周期が到来するまでの期間は、低優先タスクが実行されることになる。
【０１４３】
一方、低優先タスクに関して、制御周期が到来する（ステップＳ２００においてＹＥＳ）と、今回の制御周期がインタプリタ制御周期Ｔ２と一致するか否かが判断される（ステップＳ２０２）。今回の制御周期がインタプリタ制御周期Ｔ２と一致すれば（ステップＳ２０２においてＹＥＳ）、ＮＣプログラム実行部１５０のインタプリタ１５２は、ＩＥＣプログラム実行部１４０との間でデータ同期が実行される（ステップＳ２０４）。そして、ＮＣプログラム実行部１５０のインタプリタ１５２は、ＮＣプログラム３２のうち、今回のインタプリタ制御周期Ｔ２内において実行可能な範囲のコードを読込む（ステップＳ２０６）。
【０１４４】
今回の制御周期がインタプリタ制御周期Ｔ２と一致しなければ（ステップＳ２０２においてＮＯ）、ステップＳ２０４およびＳ２０６の処理はスキップされる。
【０１４５】
低優先タスクに対してプログラムの実行時間が割当てられている期間において、ＮＣプログラム実行部１５０のインタプリタ１５２は、ステップＳ２０６において読込んだコードを解釈し（ステップＳ２０８）、何らかの中間コードが生成されると（ステップＳ２１０においてＹＥＳ）、生成された中間コードを中間コードバッファ１５４に格納する（ステップＳ２１２）。そして、ステップＳ２００以下の処理が繰返される。
【０１４６】
すなわち、インタプリタ制御周期Ｔ２内においては、低優先タスクに対するプログラムの実行時間が割当てられている期間において、ステップＳ２０８〜Ｓ２１２の処理が繰返される。
【０１４７】
（ｇ５：利点）
本実施の形態によれば、逐次解釈されるＮＣプログラム３２に従って指令値を生成する処理において、制御装置１００の制御周期毎に取得される補正量を用いて、ＮＣプログラム３２に従って算出される指令値を補正することができる。
【０１４８】
ＮＣプログラムを逐次解釈して実行する工作機械と、シーケンスプログラムを定周期実行するＰＬＣとを組み合わせたシステムにおいては、工作機械が指令値を算出する周期およびタイミングは、ＰＬＣが入出力リフレッシュ処理を実行する周期およびタイミングとは一致しておらず、工作機械が算出する指令値に対して、補正値をリアルタイムで反映するような処理はできなかった。
【０１４９】
これに対して、本実施の形態に係る制御装置１００においては、シーケンス命令およびモーション命令を含むＩＥＣプログラムを制御周期毎に実行するとともに、ＮＣプログラムについても、中間コードを利用して、制御周期毎に指令値を算出する。このように、シーケンス命令およびモーション命令だけではなく、ＮＣプログラムに従う指令値の算出を制御周期毎に行うことができるので、制御周期毎に算出される指令値をさらに補正することもできる。
【０１５０】
上述したように、カメラなどで現在の指令軌跡を観測しながら、制御装置１００の制御周期毎に収集される入力データを用いて、指令値をリアルタイムで補正できるので、工作機械の加工精度を高めることができる。
【０１５１】
＜Ｈ．応用例その２＞
次に、本実施の形態に係る制御装置１００における応用例の別の一つとして、ＩＥＣプログラム３０およびＮＣプログラム３２に従って算出される指令値ならびに各種の入出力データを収集する処理例について説明する。
【０１５２】
（ｈ１：制御システムの全体構成例）
図１２は、本実施の形態に係る制御装置１００を含む制御システム１Ｂの全体構成例を示す模式図である。図１２を参照して、制御装置１００は、フィールドネットワーク２を介して、リモートＩ／Ｏ装置５１０と、サーボドライバ５２０およびサーボモータ５２２と、ＣＮＣ加工装置５４０と接続されている。これらの装置は、フィールドデバイス５００の一例である。
【０１５３】
リモートＩ／Ｏ装置５１０は、フィールドから入力データを取得するとともに、制御装置１００において算出された指令値をフィールドへ出力する。
【０１５４】
サーボドライバ５２０は、制御装置１００において算出された指令値（例えば、位置指令や速度指令など）に従って、サーボモータ５２２を駆動する。
【０１５５】
ＣＮＣ加工装置５４０は、コンベアなどによって搬送されるワークに対して、任意の加工を行う装置であり、制御装置１００において制御周期毎に算出される指令値に従って動作する。
【０１５６】
このような制御システム１Ｂにおいて、生産管理、トレーサビリティ管理、異常検知、異常原因解析、機械学習などを利用した各種解析といった様々な用途で、制御装置１００が管理するデータを収集したいというニーズが存在する。このような場合、制御装置１００において周期的または所定イベント毎に収集したデータを上位のサーバ装置３００へ送信する、制御装置１００に内蔵または装着される任意の記憶媒体に格納する、サポート装置などを利用して内部データを取得する、といった形態を採用できる。
【０１５７】
いずれの場合であっても、周期的または所定イベント毎にデータを収集する必要があり、また、対象データの収集タイミングを一致させることが重要である。
【０１５８】
本実施の形態に係る制御装置１００を含む制御システム１Ａにおいては、シーケンス命令およびモーション命令に従う指令値、ならびに、ＮＣプログラムに従う指令値は、いずれも制御周期毎に同期して算出され、また、制御周期毎に入力データも更新される。そのため、入力データおよび出力データ（指令値）のいずれについても、制御周期毎に収集することが可能であり、このように収集されたデータ群を用いることで、事後的な解析を容易化できる。
【０１５９】
（ｈ２：制御構造）
図１３は、図１２に示す制御システム１Ｂにおける制御構造の要部を示す模式図である。図１４を参照して、シーケンス演算部１８２およびモーション演算部１８４の各々は、入力データおよび出力データ（指令値）の少なくとも一方を制御周期毎に出力する。また、ＮＣ指令値演算部１８６は、算出した指令値を制御周期毎に出力する。
【０１６０】
データ収集部１８０は、シーケンス演算部１８２、モーション演算部１８４およびＮＣ指令値演算部１８６からそれぞれ出力されるデータを制御周期毎に収集し、まとめたデータを上位のサーバ装置３００などへ送信する。
【０１６１】
このように、制御装置１００においては、入出力リフレッシュ処理により更新されるデータ（入力データ／出力データ）およびＩＥＣプログラム実行部１４０により更新される指令値の少なくとも一方と、ＮＣ指令値演算部１５８が制御周期毎に算出する指令値とをデータセットとして生成することが可能になっている。また、データ収集部１８０は、制御周期毎に生成されるデータセットを外部出力する出力部として機能する。
【０１６２】
なお、上位のサーバ装置３００へのデータ送信は、制御周期毎に実行する必要はなく、複数の制御周期においてそれぞれ収集されたデータをまとめて、制御周期より長い周期毎に送信するようにしてもよい。この場合には、データを送信するタスクには、制御周期毎に実行されるタスクに比較してより低い優先度を設定するようにしてもよい。このような優先度の区別によって、制御周期毎に実行される処理に対する影響を与えることなく、高精度な管理を可能にするデータを収集および送信できる。
【０１６３】
このような異なる制御演算に用いられるデータを同期して収集することで、事後的な解析を容易化できる。
【０１６４】
（ｈ３：プログラムコード例）
図１３に示す制御構造については、ＩＥＣプログラム実行部１４０において実行されるＩＥＣプログラム３０と、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８で実行される付加処理との組み合わせによって実現してもよいし、ＩＥＣプログラム３０にまとめて記述してもよい。一例として、ＩＥＣプログラム３０にまとめて記述する場合について説明する。
【０１６５】
図１４は、図１３に示す制御構造を実現するためのＩＥＣプログラムのコード例を示す図である。図１４を参照して、ＩＥＣプログラムコード６５０は、シーケンス命令と、モーション命令と、ＮＣプログラムに従う指令値の算出命令とを含む。
【０１６６】
より具体的には、ＩＥＣプログラムコード６５０は、コイル６５８（Ｃ１）を「オン」または「オフ」するためのシーケンスロジックを含む。コイル６５８は、接点６５２（ＩＮ０１）と接点６５４（ＩＮ０２）との論理積と、接点６５６（ＩＮ０３）との論理和によって駆動される。
【０１６７】
モーション命令を規定するファンクションブロック６６０は、何らかの接点６６２（ＩＮ０４）を実行条件として規定されており、接点６６２が「オン」に駆動されることで、予め規定されたモーション命令を実行し、その実行により算出される指令値は、２つの変数６６６，６６８（ＡＸＩＳ１，ＡＸＩＳ２）に格納される。ファンクションブロック６６０に関連付けられているコイル６６４（Ｃ２）には、ファンクションブロック６６０での処理の実行状態を示す値が格納される。
【０１６８】
ファンクションブロック６７０は、何らかの接点６７２（ＩＮ０５）を実行条件として規定されており、接点６７２が「オン」に駆動されることで、ＮＣプログラム実行部１５０でのＮＣプログラム３２の実行が指示される。ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８により制御周期毎に算出される指令値は、ファンクションブロック６７０の出力ノードに関連付けられている変数６７８（Ｒｅｓ１）に格納される。
【０１６９】
ファンクションブロック６７０に関連付けられているコイル６７４（Ｃ３）には、ファンクションブロック６７０での処理の実行状態を示す値が格納される。ファンクションブロック６７０に関連付けられている変数６７６（Ｎｕｍ）は、実行すべきＮＣプログラム３２を特定する。すなわち、変数６７６に格納される数値または文字に従って、ＮＣ指令値演算部１５８が実行すべきＮＣプログラム３２が特定される。変数６７６に格納される数値または文字を適切な条件に従って更新または切換えることで、状況に応じた加工処理などを実現できる。
【０１７０】
ファンクションブロック６８０は、何らかの接点６８２（ＩＮ０６）を実行条件として規定されており、接点６８２が「オン」に駆動されることで、入力変数群６８４として規定されている各変数値を収集して、データベースとして機能するサーバ装置３００などへ、その収集したデータを送信する。
【０１７１】
上述の図１４に示すＩＥＣプログラムコード６５０は、制御周期毎に全体が実行（スキャン）されることで、図１３に示すような位置指令の制御周期毎の補正を実現できる。なお、ＩＥＣプログラムコード６５０のファンクションブロック６７０が実行されると、ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８による指令値の算出を待って、後続の命令の実行を行うようにしてもよい。
【０１７２】
（ｈ４：処理手順）
図１５は、図１２に示す制御システム１Ｂの制御装置１００において実行される処理手順を示すフローチャートである。図１５には、高優先タスクおよび低優先タスクの実行をそれぞれ示す。図１５に示す処理のうち、図１１に示す処理と実質的に同一の処理については、図１１と同じステップ番号を付与している。
【０１７３】
図１５を参照して、高優先タスクに関して、制御周期が到来する（ステップＳ１００においてＹＥＳ）と、入出力インターフェイス処理部１６２が入出力リフレッシュ処理を実行する（ステップＳ１０２）。これによって、直前の制御周期において算出された指令値がアクチュエータなどへ出力されるとともに、フィールドから入力データが取得される。
【０１７４】
ＩＥＣプログラム実行部１４０は、ＩＥＣプログラム３０の全体をスキャンすることで、今回の制御周期における１または複数の指令値を算出する（ステップＳ１０４）。すなわち、ＩＥＣプログラム３０のシーケンス命令に従う指令値が内部的に算出される。
【０１７５】
ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８は、指令値を算出するために必要な中間コードが有効に読込まれているか否かを判断する（ステップＳ１０６）。中間コードが有効に読込まれていなければ（ステップＳ１０６においてＮＯ）、ＮＣ指令値演算部１５８は、中間コードバッファ１５４から中間コードを読込む（ステップＳ１０８）。中間コードが有効に読込まれていれば（ステップＳ１０６においてＹＥＳ）、ステップＳ１０８の処理はスキップされる。
【０１７６】
ＩＥＣプログラム実行部１４０のモーション指令値演算部１４２は、ＩＥＣプログラム３０に含まれるモーション命令に従って、今回の制御周期における指令値を算出する（ステップＳ１１４）。
【０１７７】
ＮＣプログラム実行部１５０のＮＣ指令値演算部１５８は、中間コードに従って、今回の制御周期における指令値を算出する（ステップＳ１１０）。
【０１７８】
なお、ステップＳ１０６〜Ｓ１１４の処理は、ステップＳ１０４におけるＩＥＣプログラム３０の実行途中に割込み実行されることもある。
【０１７９】
さらに、ＩＥＣプログラム実行部１４０は、指定された変数値に対応するデータを収集する（ステップＳ１２０）。なお、ステップＳ１２０において収集されたデータは、同一の制御周期において送信されてもよいし、一旦キューイングされた上で、別のタスク（より低い優先度が設定されたタスク）にて外部へ送信されるようにしてもよい。
【０１８０】
以上の処理により、今回の制御周期における指令値が演算される。そして、ステップＳ１００以下の処理が繰返される。なお、ステップＳ１２０の後、次の制御周期が到来するまでの期間は、低優先タスクが実行されることになる。
【０１８１】
一方、低優先タスクに関しては、図１１に示す対応するステップの処理と同様であるので、詳細な説明は繰返さない。
【０１８２】
（ｈ５：利点）
本実施の形態によれば、制御周期毎に更新される入力データおよび制御周期毎に算出される指令値を含む出力データのうち１または複数を制御周期毎に同期して収集できる。また、このように収集されるデータを上位のサーバ装置などへ送信することもできる。なお、データの送信は、より低い優先度が設定されたタスクによって実行される。
【０１８３】
このように、本実施の形態によれば、ＮＣプログラム３２に従って制御される工作機械に関するデータと、制御装置１００によって直接制御されるフィールドデバイスに関するデータを同期して収集することができる。
【０１８４】
ＮＣプログラムを逐次解釈して実行する工作機械と、シーケンスプログラムを定周期実行するＰＬＣとを組み合わせたシステムにおいては、それぞれの装置において収集されるデータを別々に取得せざるを得ず、また、データの収集タイミングも一致していないので、データの成形および加工に必要以上の手間をようしていた。また、データの収集間隔も装置によって異なる場合が多く、完全に同期したデータを取得することが難しかった。その結果、取得したデータの活用範囲やその解析の効果が限られており、予兆保全等に利用することが難しかった。
【０１８５】
これに対して、本実施の形態に係る制御装置１００においては、シーケンス処理およびモーション処理に関するデータだけではなく、ＮＣプログラム３２に従って算出される指令値などについても、制御周期毎に同期して収集できる。そして、これらの収集されるデータは、上位のサーバ装置および他の外部装置へ出力できる。
【０１８６】
このように、本実施の形態に係る制御装置１００を用いることで、工作機械を含む製造ライン全体のデータを１つの装置で収集できるようになる。また、このような同期されたデータを利用することで、工作機械の工具寿命、予兆保全、加工物の品質分析といった緻密なデータ解析が可能となる。
【０１８７】
また、制御装置１００は必要なデータのすべてを有しているので、例えば、上位のサーバ装置へ送信するデータフォーマットを容易に生産ライン毎に固有なものとすることができる。この結果、上位側のサーバ装置でのデータ管理を容易化できる。
【０１８８】
＜Ｉ．変形例＞
上述の説明においては、ＩＥＣプログラム３０とＮＣプログラム３２とを実行する制御装置１００について説明したが、インタプリタ方式で記述されたプログラムであれば、どのようなプログラムについても同様に適用できる。
【０１８９】
＜Ｊ．付記＞
上述したような本実施の形態は、以下のような技術思想を含む。
［構成１］
制御対象を制御するための制御装置（１００）であって、
制御周期毎に入力データおよび出力データを更新するデータ更新部（５０；１６２）と、
第１のプログラム（６２；３０）の全体を制御周期毎にスキャンして指令値（６２）を更新する第１のプログラム実行部（５４；１４０）と、
逐次解釈される第２のプログラム（６４；３２）に従って制御周期毎に指令値（６４）を更新する第２のプログラム実行部（５６；１５０）とを備え、
前記第２のプログラム実行部は、
前記第２のプログラムの少なくとも一部を解釈して中間コードを生成するインタプリタ（５８；１５２）と、
前記インタプリタにより生成される中間コードに従って制御周期毎に指令値（６４）を算出する指令値演算部（５４；１４０）とを含み、
前記指令値演算部（５４；１４０）は、他の処理での利用が可能な態様で、制御周期毎に指令値を出力する、制御装置。
［構成２］
前記指令値演算部が制御周期毎に算出する指令値を前記第１のプログラム実行部から参照するための共有メモリ（５２；１６０）をさらに備える、構成１に記載の制御装置。
［構成３］
前記指令値演算部が制御周期毎に算出する指令値と、前記データ更新部により更新されるデータとに基づく演算処理を実行する実行部（１４０；１５０；６００）をさらに備える、構成１または２に記載の制御装置。
［構成４］
前記演算処理は、前記指令値演算部が制御周期毎に算出する指令値に対する数値処理を含む、構成３に記載の制御装置。
［構成５］
前記データ更新部により更新されるデータおよび前記第１のプログラム実行部により更新される指令値の少なくとも一方と、前記指令値演算部が制御周期毎に算出する指令値とをデータセットとして生成する生成部（１４０；１５０；６５０）をさらに備える、構成１〜４のいずれか１項に記載の制御装置。
［構成６］
制御周期毎に生成されるデータセットを外部出力する出力部（１６４）をさらに備える、構成５に記載の制御装置。
［構成７］
前記中間コードは、前記指令値演算部が制御周期毎に指令値を更新するための関数を含む、構成１〜６のいずれか１項に記載の制御装置。
［構成８］
前記中間コードは、時間と指令値との関係を規定する関数を含む、構成７に記載の制御装置。
［構成９］
前記インタプリタは、生成した中間コードをバッファに逐次キューイングし、
前記指令値演算部は、前記バッファにキューイングされた順に中間コードを読出すように構成されている、構成１〜８のいずれか１項に記載の制御装置。
［構成１０］
前記データ更新部、前記第１のプログラム実行部、および前記指令値演算部は、高優先タスクとして実行され、
前記インタプリタは、低優先タスクとして実行される、構成１〜９のいずれか１項に記載の制御装置。
［構成１１］
制御装置による制御方法であって、
制御周期毎に入力データおよび出力データを更新するステップ（Ｓ１０２）と、
第１のプログラムの全体を制御周期毎にスキャンして指令値を更新するステップ（Ｓ１０４）と、
逐次解釈される第２のプログラムの少なくとも一部を解釈して中間コードを生成するステップ（Ｓ２０８，Ｓ２１０）と、
前記生成される中間コードに従って制御周期毎に指令値を算出するステップ（Ｓ１１０）とを備え、
前記中間コードに従う指令値を算出するステップは、他の処理での利用が可能な態様で、制御周期毎に指令値を出力する、制御方法。
【０１９０】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１９１】
１，１Ａ，１Ｂ  制御システム、２  フィールドネットワーク、６  上位ネットワーク、２０  入出力リフレッシュ処理、３０  ＩＥＣプログラム、３２  ＮＣプログラム、３４  システムプログラム、５０  データ更新部、５２，１６０  共有メモリ、５４  第１のプログラム実行部、５６  第２のプログラム実行部、５８，１５２  インタプリタ、６０  指令値演算部、６２  第１のプログラム、６４  第２のプログラム、７２，７４，６３２  指令値、１００  制御装置、１０２  プロセッサ、１０４  チップセット、１０６  主記憶装置、１０８  二次記憶装置、１１０  上位ネットワークコントローラ、１１２  ＵＳＢコントローラ、１１４  メモリカードインターフェイス、１１６  メモリカード、１２０  内部バスコントローラ、１２２  Ｉ／Ｏユニット、１３０  フィールドネットワークコントローラ、１４０  ＩＥＣプログラム実行部、１４２  モーション指令値演算部、１５０  ＮＣプログラム実行部、１５４  バッファ、１５６  中間コード、１５８，１８６  ＮＣ指令値演算部、１６２  入出力インターフェイス処理部、１６４  上位ネットワークインターフェイス処理部、１７０  加算部、１８０  データ収集部、１８２  シーケンス演算部、１８４  モーション演算部、２００  サポート装置、３００  サーバ装置、４００  表示装置、５００  フィールドデバイス、５１０  リモートＩ／Ｏ装置、５２０  サーボドライバ、５２２  サーボモータ、５３０，５４０  ＣＮＣ加工装置、５５０  視覚センサ、Ｔ１  制御周期、Ｔ２  インタプリタ制御周期。
【図１】
2019049947.tif 000003
【図２】
2019049947.tif 000004
【図３】
2019049947.tif 000005
【図４】
2019049947.tif 000006
【図５】
2019049947.tif 000007
【図６】
2019049947.tif 000008
【図７】
2019049947.tif 000009
【図８】
2019049947.tif 000010
【図９】
2019049947.tif 000011
【図１０】
2019049947.tif 000012
【図１１】
2019049947.tif 000013
【図１２】
2019049947.tif 000014
【図１３】
2019049947.tif 000015
【図１４】
2019049947.tif 000016
【図１５】
2019049947.tif 000017