(57)【要約】【課題】実行形式の異なる複数種類のプログラムに従う制御演算を単一の制御装置で実現したいというニーズに応える。【解決手段】制御装置は、実行毎に全体がスキャンされる第１のプログラムと、逐次実行される第２のプログラムとを格納する記憶部と、予め定められた制御周期毎に第１のプログラムを実行して第１の指令値を演算する実行処理部と、第２のプログラムの少なくとも一部を解釈して中間コードを生成するインタプリタと、インタプリタが事前に生成した中間コードに従って制御周期毎に第２の指令値を演算する指令値演算部と、実行処理部により演算された第１の指令値および指令値演算部により演算された第２の指令値を制御周期毎に出力する出力部とを含む。【選択図】図６
2019036043.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御するための制御装置であって、
実行毎に全体がスキャンされる第１のプログラムと、逐次実行される第２のプログラムとを格納する記憶部と、
予め定められた制御周期毎に前記第１のプログラムを実行して第１の指令値を演算する実行処理部と、
前記第２のプログラムの少なくとも一部を解釈して中間コードを生成するインタプリタと、
前記インタプリタが事前に生成した中間コードに従って制御周期毎に第２の指令値を演算する指令値演算部と、
前記実行処理部により演算された前記第１の指令値および前記指令値演算部により演算された前記第２の指令値を制御周期毎に出力する出力部とを備える、制御装置。
【請求項２】
前記インタプリタは、前記制御周期の整数倍である同期周期毎に、前記実行処理部との間で共有するデータを更新する、請求項１に記載の制御装置。
【請求項３】
前記インタプリタは、前記同期周期が到来する前に、前記第２のプログラムの解釈を一時停止する、請求項２に記載の制御装置。
【請求項４】
前記中間コードは、前記指令値演算部が制御周期毎に前記第２の指令値を演算するための関数を含む、請求項１〜３のいずれか１項に記載の制御装置。
【請求項５】
前記インタプリタは、生成した中間コードをバッファに逐次キューイングし、
前記指令値演算部は、前記バッファにキューイングされた順に中間コードを読出す、請求項１〜４のいずれか１項に記載の制御装置。
【請求項６】
前記中間コードは、制御周期の時間を入力とし、指令値を出力とする関数を含む、請求項１〜５のいずれか１項に記載の制御装置。
【請求項７】
前記インタプリタおよび前記指令値演算部の組を複数備える、請求項１に記載の制御装置。
【請求項８】
前記実行処理部、前記指令値演算部、および前記出力部は、高優先タスクとして実行され、
前記インタプリタは、低優先タスクとして実行される、請求項１〜７のいずれか１項に記載の制御装置。
【請求項９】
制御周期毎に、前記高優先タスクの実行時間が割当てられ、前記高優先タスクの実行時間以外の時間において、前記低優先タスクが実行される、請求項８に記載の制御装置。
【請求項１０】
前記制御装置は複数のコアを有するプロセッサを有しており、
前記高優先タスクは第１のコアで実行され、
前記低優先タスクは第２のコアで実行される、請求項８に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御対象を制御するための制御装置に関する。
【背景技術】
【０００２】
様々な生産現場において、ＰＬＣ（プログラマブルコントローラ）などの制御装置を用いたＦＡ（Factory Automation）技術が広く普及している。このような制御装置は、直接的に制御対象を制御するだけではなく、他の装置に制御指令を与えることで、間接的に制御対象を制御する場合もある。例えば、特開２０１３−１３４７８６号公報（特許文献１）は、工作機械および工作機械に接続されたプログラマブル論理制御装置からなるシステムを開示する。
【０００３】
一方、近年のＩＣＴ（Information and Communication Technology）の進歩に伴って、制御装置の処理能力も飛躍的に向上しつつある。従来技術においては複数の専用装置を用いて実現されていた制御システムをより少ない数の制御装置に統合したいというニーズも生じている。例えば、特開２０１２−１９４６６２号公報（特許文献２）は、ＰＬＣのＣＰＵユニットにおいて、モーション演算プログラムおよびユーザプログラムが同期して実行される構成を開示する。特開２０１２−１９４６６２号公報（特許文献２）に開示される構成によれば、シーケンスプログラムなどのユーザプログラムとモーション演算プログラムとを連携／互いに動機して実行させることができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１３４７８６号公報
【特許文献２】特開２０１２−１９４６６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
実行形式の異なる複数種類のプログラムに従う制御演算を単一の制御装置で実現したいというニーズが高まると想定されている。本発明は、このようなニーズに対応できる制御装置を提供することを一つの目的としている。
【課題を解決するための手段】
【０００６】
本発明のある局面に従えば、制御対象を制御するための制御装置が提供される。制御装置は、実行毎に全体がスキャンされる第１のプログラムと、逐次実行される第２のプログラムとを格納する記憶部と、予め定められた制御周期毎に第１のプログラムを実行して第１の指令値を演算する実行処理部と、第２のプログラムの少なくとも一部を解釈して中間コードを生成するインタプリタと、インタプリタが事前に生成した中間コードに従って制御周期毎に第２の指令値を演算する指令値演算部と、実行処理部により演算された第１の指令値および指令値演算部により演算された第２の指令値を制御周期毎に出力する出力部とを含む。
【０００７】
好ましくは、インタプリタは、制御周期の整数倍である同期周期毎に、実行処理部との間で共有するデータを更新する。
【０００８】
好ましくは、インタプリタは、同期周期が到来する前に、第２のプログラムの解釈を一時停止する。
【０００９】
好ましくは、中間コードは、指令値演算部が制御周期毎に第２の指令値を演算するための関数を含む。
【００１０】
好ましくは、インタプリタは、生成した中間コードをバッファに逐次キューイングし、指令値演算部は、バッファにキューイングされた順に中間コードを読出す。
【００１１】
好ましくは、中間コードは、制御周期の時間を入力とし、指令値を出力とする関数を含む。
【００１２】
好ましくは、制御装置は、インタプリタおよび指令値演算部の組を複数含む。
好ましくは、実行処理部、指令値演算部、および出力部は、高優先タスクとして実行され、インタプリタは、低優先タスクとして実行される。
【００１３】
好ましくは、制御周期毎に、高優先タスクの実行時間が割当てられ、高優先タスクの実行時間以外の時間において、低優先タスクが実行される。
【００１４】
好ましくは、制御装置は複数のコアを有するプロセッサを有しており、高優先タスクは第１のコアで実行され、低優先タスクは第２のコアで実行される。
【発明の効果】
【００１５】
本発明によれば、実行形式の異なる複数種類のプログラムに従う制御演算を単一の制御装置で実現できる。
【図面の簡単な説明】
【００１６】
【図１】本実施の形態に係る制御システムの全体構成例を示す模式図である。
【図２】本実施の形態に係る制御装置のハードウェア構成例を示すブロック図である。
【図３】本発明の関連技術に係るＣＮＣ加工システムの全体構成例を示す模式図である。
【図４】図３に示す本発明の関連技術に係るＣＮＣ加工システムにおけるプログラムの実行タイミングの一例を示す模式図である。
【図５】本発明の関連技術に係るロボット組立システムの全体構成例を示す模式図である。
【図６】本実施の形態に係る制御装置の機能構成の一例を示す模式図である。
【図７】本実施の形態に係る制御装置における各機能構成の実行周期の一例を示す模式図である。
【図８】本実施の形態に係る制御装置におけるプログラムの実行タイミングの一例を示す模式図である。
【図９】本実施の形態に係る制御装置におけるプログラムの実行タイミングの別の一例を示す模式図である。
【図１０】本実施の形態に係る制御装置において生成される中間コードを概念的に示す模式図である。
【図１１】本実施の形態に係る制御装置における中間コードの生成例を説明するための模式図である。
【図１２】本実施の形態に係る制御装置における処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１７】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００１８】
＜Ａ．用語＞
まず、本明細書において使用する用語について説明する。
【００１９】
本明細書において、「ＩＥＣプログラム」は、実行毎に全体がスキャンされて、実行毎に１または複数の指令値が演算されるプログラムを包含する用語である。「ＩＥＣプログラム」は、典型的には、国際電気標準会議（International Electrotechnical Commission：ＩＥＣ）によって規定された国際規格ＩＥＣ６１１３１−３に従って記述された１または複数の命令からなるプログラムを包含する。「ＩＥＣプログラム」には、シーケンス制御およびモーション制御の命令を含み得る。「ＩＥＣプログラム」は、制御周期毎にすべてのプログラムが実行（スキャン）される。「ＩＥＣプログラム」は、即時性および高速性が要求される制御に好適である。なお、「ＩＥＣプログラム」としては、国際規格ＩＥＣ６１１３１−３に従って記述された命令に限らず、ＰＬＣ（プログラマブルコントローラ）の製造メーカまたはベンダーなどが独自に規定した命令を含むようにしてもよい。
【００２０】
本明細書において、「シーケンス制御」は、基本的には、入力値、出力値、内部値などを演算する１または複数の論理回路により記述されるプログラム（シーケンスプログラム）を先頭から最終まで順番に実行する方式である。１回の制御周期において、プログラムの先頭から最終まで実行され、次の制御周期において、プログラムの先頭から最終までが再度実行される。なお、シーケンスプログラムは、電気回路を表現するプログラムである。
【００２１】
本明細書において、「モーション制御」は、サーボモータなどのアクチュエータに対して、位置、速度、加速度、加加速度、角度、角速度、角加速度、角加加速度などの数値を指令として演算する方式である。「モーション制御」においても、１回の制御周期において、ファンクションブロックや数値演算式などにより記述されるプログラム（モーションプログラム）の先頭から最終までが実行される。すなわち、制御周期毎に指令値は演算（更新）されることになる。
【００２２】
本明細書において、「制御アプリケーション」は、例えば、ＣＮＣ（Computer Numerical Control：コンピュータ数値制御）および／またはおよびロボットを用いた、特定の加工または動作を行う装置または機械ならびにそれらの制御を包含する。
【００２３】
本明細書において、「アプリケーションプログラム」は、制御アプリケーションを実現するための１または複数の命令からなるプログラムを包含し、基本的には、「ＩＥＣプログラム」には含まれないプログラムを包含する。「アプリケーションプログラム」は、制御アプリケーションの手順を表現するプログラムであり、一例として、ＣＮＣではＧ言語を用いて記述され、ロボット制御ではロボット言語を用いて記述される。これらのアプリケーションプログラムは、１行ずつ逐次実行されるインタプリタ方式が採用されることが多い。
【００２４】
本明細書において、「ユーザプログラム（User Program：「ＵＰＧ」とも略称する）」は、ユーザによって任意に作成可能なプログラムを包含する。「ユーザプログラム」は、シーケンス制御を実現するためのシーケンスプログラム、モーション制御を実現するためのモーションプログラム、および、アプリケーションプログラムを含み得る。
【００２５】
＜Ｂ．制御システムの全体構成例＞
まず、本実施の形態に係る制御装置を含む制御システム１の全体構成例について説明する。
【００２６】
図１は、本実施の形態に係る制御システム１の全体構成例を示す模式図である。図１には、本実施の形態に係る制御装置１００を中心とした制御システム１を示す。
【００２７】
制御装置１００は、各種の設備や装置などの制御対象を制御する産業用コントローラに相当する。制御装置１００は、後述するような制御演算を実行する一種のコンピュータであり、典型的には、ＰＬＣ（プログラマブルコントローラ）として具現化されてもよい。制御装置１００は、フィールドネットワーク２を介して各種のフィールド機器５００と接続されてもよい。制御装置１００は、フィールドネットワーク２などを介して、１または複数のフィールド機器５００との間でデータを遣り取りする。一般的に「フィールドネットワーク」は、「フィールドバス」とも称されるが、説明の簡素化のため、以下の説明においては、「フィールドネットワーク」と総称する。すなわち、本明細書の「フィールドネットワーク」は、狭義の「フィールドネットワーク」に加えて「フィールドバス」を含み得る概念である。
【００２８】
制御装置１００において実行される制御演算は、フィールド機器５００において収集または生成されたデータ（以下、「入力データ」とも称す。）を収集する処理（入力処理）、フィールド機器５００に対する指令などのデータ（以下、「出力データ」とも称す。）を生成する処理（演算処理）、生成した出力データを対象のフィールド機器５００へ送信する処理（出力処理）などを含む。
【００２９】
フィールドネットワーク２は、データの到達時間が保証される、定周期通信を行うバスまたはネットワークを採用することが好ましい。このような定周期通信を行うバスまたはネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００３０】
フィールドネットワーク２には、任意のフィールド機器５００を接続することができる。フィールド機器５００は、製造装置や生産ラインなど（以下、「フィールド」とも総称する。）に対して何らかの物理的な作用を与えるアクチュエータ、および、フィールドとの間で情報を遣り取りする入出力装置などを含む。
【００３１】
フィールドネットワーク２を介して、制御装置１００とフィールド機器５００との間でデータが遣り取りされることになるが、これらの遣り取りされるデータは、数１００μｓｅｃオーダ〜数１０ｍｓｅｃオーダのごく短い周期で更新されることになる。なお、このような遣り取りされるデータの更新処理は、入出力リフレッシュ処理とも称される。
【００３２】
図１に示す構成例においては、フィールド機器５００は、リモートＩ／Ｏ（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）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００５１】
上述の図１に示す制御システム１においては、制御装置１００、サポート装置２００および表示装置４００がそれぞれ別体として構成されているが、これらの機能の全部または一部を単一の装置に集約するような構成を採用してもよい。
【００５２】
＜Ｄ．関連技術＞
次に、本実施の形態に係る制御装置１００の構成および機能を詳細に説明する前に、関連技術について説明する。
【００５３】
（ｄ１：ＣＮＣ加工システム）
図３は、本発明の関連技術に係るＣＮＣ加工システム１Ａの全体構成例を示す模式図である。図３を参照して、ＣＮＣ加工システム１Ａは、ＣＮＣ加工装置６００と、ＣＮＣ加工装置６００に対してワークＷを供給する搬送装置６５０とを含む。
【００５４】
ＣＮＣ加工装置６００は、ＣＮＣコントローラ６１０によって駆動され、搬送装置６５０は、ＰＬＣ１００Ａによって駆動される。ＣＮＣ加工装置６００および搬送装置６５０を連係させる必要があるので、ＣＮＣコントローラ６１０およびＰＬＣ１００Ａは、いずれも上位コントローラ１０Ａと接続されている。上位コントローラ１０Ａは、ＣＮＣコントローラ６１０およびＰＬＣ１００Ａに対して指令を与える。
【００５５】
ＣＮＣコントローラ６１０は、上位コントローラ１０Ａからの指令に従って、ＣＮＣ加工装置６００を駆動するための指令を生成して、ＣＮＣ加工装置６００の動作を制御する。
【００５６】
ＰＬＣ１００Ａは、ＩＥＣプログラム１０１Ａを周期的に実行することで、搬送装置６５０の駆動モータ６５２の制御などを行う。典型的には、ＩＥＣプログラム１０１Ａには、シーケンス制御およびモーション制御を実現するための命令が記述されており、これらの命令は共通の制御周期で繰返し実行されることで、シーケンス制御およびモーション制御は同期して実行されることになる。より具体的には、ＰＬＣ１００Ａは、リモートＩ／Ｏ装置５１０を介して取得される入力データおよび内部データを用いて、シーケンス制御に従って出力データを演算し、演算した出力データに応じた出力信号をリモートＩ／Ｏ装置５１０から出力する。また、ＰＬＣ１００Ａは、モーション制御において演算される指令値をサーボドライバ５２０に与えることで、搬送装置６５０にてワークＷを適宜搬送する。
【００５７】
なお、同一のＰＬＣ１００Ａにてシーケンス制御およびモーション制御を実行する構成は、上述の特開２０１２−１９４６６２号公報（特許文献２）に開示されている。
【００５８】
一方、ＣＮＣ加工装置６００に対する制御は、ＰＬＣ１００Ａとは別に配置されたＣＮＣコントローラ６１０によって実現される。ＣＮＣコントローラ６１０は、ＣＮＣプログラム６２０に記述された命令を逐次実行することで、ワークＷに対して予め定められた加工などを実現する。
【００５９】
ＰＬＣ１００ＡおよびＣＮＣコントローラ６１０は、それぞれ独立した制御処理を実行するので、搬送装置６５０とＣＮＣ加工装置６００とを連係して作動させるためには、それぞれの装置の情報をＩ／Ｏ信号を介して遣り取りする（Ｉ／Ｏ信号線５１２）。このようなＩ／Ｏ信号は、例えば、ＰＬＣ１００Ａから出力される運転開始指令などを含む。このような構成において、リモートＩ／Ｏ装置５１０からＣＮＣコントローラ６１０に対して、加工開始を示すデジタル信号が与えられる。
【００６０】
このようなＩ／Ｏ信号を介して装置間で状態値を遣り取りする構成を採用した場合には、例えば、加工前のワークＷをＣＮＣ加工装置６００内に配置し、あるいは、加工済みのワークＷをＣＮＣ加工装置６００から取り出す際において、ＣＮＣ加工装置６００と搬送装置６５０とを完全に同期できない。そのため、ＣＮＣ加工装置６００と搬送装置６５０（あるいは、さらに別の装置）との間では、制御タイミングが同期しないので、処理の待ち合わせが生じる。このような処理の待ち合わせは、処理時間の短縮を阻害する要因になる。
【００６１】
上述の本発明の関連技術に係るシステムにおける各プログラムの実行タイミングについて説明する。
【００６２】
図４は、図３に示す本発明の関連技術に係るＣＮＣ加工システム１Ａにおけるプログラムの実行タイミングの一例を示す模式図である。なお、説明の便宜上、図４においては、各プログラムの実行時間は任意のサイズにスケーリングして描かれており、現実の実行時間を反映するものではない。以下の類似の図面においても同様である。
【００６３】
図４（Ａ）には、ＰＬＣ１００ＡによってＩＥＣプログラム１０１Ａが周期的に実行される状態を示し、図４（Ｂ）には、ＣＮＣコントローラ６１０によってＣＮＣプログラム６２０が逐次事項される状態を示す。
【００６４】
図４（Ａ）に示すように、ＰＬＣ１００Ａにおいては、予め定められた長さの制御周期毎にＩＥＣプログラム１０１Ａが周期的に実行される。ＩＥＣプログラム１０１Ａは、シーケンス処理および／またはモーション処理の命令を含み得る。これらの命令が同一のプログラムに記述されていることもある。
【００６５】
ＩＥＣプログラム１０１Ａの実行に先だって、入力データおよび出力データを更新する入出力リフレッシュ処理２０（図中においては、「Ｉ／Ｏ」とも記す。）が実行される。入出力リフレッシュ処理２０においては、リモートＩ／Ｏ装置５１０などを介してフィールドから入力データが取得されるとともに、直前の制御周期においてＩＥＣプログラム１０１Ａにより演算された出力データがリモートＩ／Ｏ装置５１０などを介してフィールドへ与えられる。
【００６６】
このように、ＩＥＣプログラム１０１Ａは、制御周期毎にすべての内容（コード）がスキャンされる。なお、各制御周期において、ＩＥＣプログラム１０１Ａが実行されていない隙間の期間において、通信などの処理が実行される。
【００６７】
図４（Ｂ）に示すように、ＣＮＣプログラム６２０において記述された命令が逐次実行される。すなわち、ＣＮＣプログラム６２０は、インタプリタ方式で実行される。より具体的には、まず、ＣＮＣプログラム６２０の１行目のコードが実行され、実行完了後に、２行目のコードが続けて実行される。このように、ＣＮＣプログラム６２０に記述されるコードが逐次実行されることになる。
【００６８】
なお、ＣＮＣプログラム６２０の実行中に割込みが与えられることで、通信処理２２が実行される。
【００６９】
図４（Ａ）と図４（Ｂ）とを比較すると分かるように、ＰＬＣ１００Ａによって実行されるＩＥＣプログラム１０１Ａと、ＣＮＣコントローラ６１０によって実行されるＣＮＣプログラム６２０とは、性質が異なっており、関連技術においては、それぞれのプログラムを実行する異なる制御装置が用意される。
【００７０】
（ｄ２：ロボット組立システム）
図５は、本発明の関連技術に係るロボット組立システム１Ｂの全体構成例を示す模式図である。図５を参照して、ロボット組立システム１Ｂは、多関節ロボット７００と、ワークＷを保持するＸＹステージ７５０とを含む。図５には、多関節ロボット７００の先端に把持された部品をワークＷに設けられた孔に挿入するようなアプリケーション例を示す。
【００７１】
多関節ロボット７００は、ロボットコントローラ７１０によって駆動され、ＸＹステージ７５０は、ＰＬＣ１００Ｂによって駆動される。多関節ロボット７００およびＸＹステージ７５０を連係させる必要があるので、ロボットコントローラ７１０およびＰＬＣ１００Ｂは、いずれも上位コントローラ１０Ｂと接続されている。上位コントローラ１０Ｂは、ロボットコントローラ７１０およびＰＬＣ１００Ｂに対して指令を与える。
【００７２】
ＰＬＣ１００Ｂは、ＩＥＣプログラム１０１Ｂを周期的に実行することで、ＸＹステージ７５０のＸ軸を駆動するサーボモータ７５２およびＹ軸を駆動するサーボモータ７５４などを制御する。典型的には、ＩＥＣプログラム１０１Ｂには、シーケンス制御およびモーション制御を実現するための命令が記述されており、これらの命令は共通の制御周期で繰返し実行されることで、シーケンス制御およびモーション制御は同期して実行されることになる。より具体的には、ＰＬＣ１００Ｂは、リモートＩ／Ｏ装置５１０を介して取得される入力データおよび内部データを用いて、シーケンス制御に従って出力データを演算し、演算した出力データに応じた出力信号をリモートＩ／Ｏ装置５１０から出力する。また、ＰＬＣ１００Ｂは、モーション制御において演算される指令値をそれぞれのサーボドライバ５２０に与えることで、ＸＹステージ７５０上に配置されたワークＷを適切な位置に位置決めする。
【００７３】
一方、多関節ロボット７００に対する制御は、ＰＬＣ１００Ｂとは別に配置されたロボットコントローラ７１０によって実現される。ロボットコントローラ７１０は、ロボットプログラム７２０に記述された命令を逐次実行することで、多関節ロボット７００に予め定められた挙動を行わせる。
【００７４】
ＰＬＣ１００Ｂおよびロボットコントローラ７１０は、それぞれ独立した制御処理を実行するので、ＸＹステージ７５０と多関節ロボット７００とを連係して作動させるためには、それぞれの装置の情報をＩ／Ｏ信号を介して遣り取りする（Ｉ／Ｏ信号線５１４）。このようなＩ／Ｏ信号は、例えば、ＰＬＣ１００Ｂから出力される運転開始指令などを含む。このような構成において、リモートＩ／Ｏ装置５１０からロボットコントローラ７１０に対して、加工開始を示すデジタル信号が与えられる。
【００７５】
このようなＩ／Ｏ信号を介して装置間で状態値を遣り取りする構成を採用した場合には、例えば、加工前のワークＷを所定位置に配置し、あるいは、組立済みのワークＷを取り出す際において、多関節ロボット７００とＸＹステージ７５０とを完全に同期できない。そのため、多関節ロボット７００とＸＹステージ７５０（あるいは、さらに別の装置）との間では、制御タイミングが同期しないので、処理の待ち合わせが生じる。このような処理の待ち合わせは、処理時間の短縮を阻害する要因になる。また、ＸＹステージ７５０の動作と多関節ロボット７００の動作とは同期しないので、ＸＹステージ７５０を動作させつつ、多関節ロボット７００を動作させる際に、動作タイミングが一致せず、組立精度を低下させる要因になる。
【００７６】
（ｄ３：ロボットコントローラがマスタコントローラとなるシステム）
上述した特開２０１３−１３４７８６号公報（特許文献１）に開示されるように、ロボットコントローラをマスタコントローラとして配置し、このロボットコントローラがロボットおよびモータを主として制御するシステムも想定される。このシステムにおいては、ロボットコントローラが１または複数のロボットの各々に対して運転開始／運転終了の指示を与える。このシステムにおいては、複数のロボットとモータとの同期は可能となるが、ロボットコントローラに対する運転開始指令は、別のコントローラから与える必要がある。そのため、１つのロボットコントローラでシステムのすべての要素を制御することはできない。
【００７７】
＜Ｅ．本実施の形態に係る制御装置＞
本実施の形態に係る制御装置１００は、上述したような関連技術において生じる課題を解決できる機能を有している。具体的には、制御装置１００は、ＩＥＣプログラム３０（シーケンス命令および／またはモーション命令を含む）、および、アプリケーションプログラム３２を同期して実行可能な環境を提供する。
【００７８】
図６は、本実施の形態に係る制御装置１００の機能構成の一例を示す模式図である。図６を参照して、制御装置１００は、ＩＥＣプログラム処理部１５０と、モーション処理部１５２と、フィールドネットワークインターフェイス１８０と、上位ネットワークインターフェイス１８２と、１または複数の制御アプリケーション処理部１６０−１，１６０−２，・・・（以下、「制御アプリケーション処理部１６０」とも総称する。）とを含む。
【００７９】
図６には、制御装置１００が制御アプリケーション１および制御アプリケーション２を制御する構成例を示す。制御アプリケーション１および制御アプリケーション２の各々は、典型的には、リレーやコンタクタなどのＩ／Ｏデバイスおよびサーボモータなどの各種アクチュエータを含む。制御アプリケーション１および制御アプリケーション２に加えて、他のＩ／Ｏデバイスおよび各種センサについても、フィールドネットワーク２を介して制御装置１００と接続されている。
【００８０】
制御装置１００のフィールドネットワークインターフェイス１８０は、ＩＥＣプログラム処理部１５０および制御アプリケーション処理部１６０と、フィールドネットワーク２を介して接続されているデバイスとの間のデータの遣り取りを仲介する。
【００８１】
制御装置１００は、上位ネットワーク６を介して接続されているサーバ装置３００などから、生産の開始／終了といった指示を受ける。サーバ装置３００は、制御アプリケーションを動作させるためのアプリケーションプログラム３２およびレシピ情報（生産に適したパラメータなどの情報）などを制御装置１００に送信することもある。
【００８２】
制御装置１００の上位ネットワークインターフェイス１８２は、ＩＥＣプログラム処理部１５０および制御アプリケーション処理部１６０と、上位ネットワーク６を介して接続されている装置との間のデータの遣り取りを仲介する。
【００８３】
ＩＥＣプログラム処理部１５０は、予め定められた制御周期毎にＩＥＣプログラム３０を実行（スキャン）して１または複数の指令値を演算する。すなわち、ＩＥＣプログラム処理部１５０は、ＩＥＣプログラム３０に従って、制御周期毎に指令値を演算する。
【００８４】
モーション処理部１５２は、ＩＥＣプログラム３０に含まれるモーション命令に従って、制御周期毎に指令値を演算する機能を提供する。すなわち、ＩＥＣプログラム３０に含まれるモーション命令は、複数の制御周期に亘る挙動を指示する命令（例えば、何らかの軌道を描くための命令）を含む。このようなモーション命令が実行されると、実行されたモーション命令の指示内容に従って、モーション処理部１５２が制御周期毎に指令値を演算する。すなわち、モーション処理部１５２は、制御周期毎に指令値を出力することで、モーション命令により指示された挙動を実現する。
【００８５】
制御アプリケーション処理部１６０は、サーバ装置３００などから受信したアプリケーションプログラム３２およびレシピ情報などに基づいて、制御アプリケーションを制御するための指令値を演算する。制御アプリケーション処理部１６０は、ＩＥＣプログラム処理部１５０による指令値の演算および出力と同期して、制御アプリケーション用の指令値を演算および出力する。すなわち、制御アプリケーション処理部１６０は、ＩＥＣプログラム処理部１５０による演算処理と同期して、指令値の演算処理を実行する。
【００８６】
ＩＥＣプログラム処理部１５０による指令値の演算処理と同期した指令値の演算を実現するために、バッファ１６４−１，１６４−２，・・・（以下、「バッファ１６４」とも総称する。）と、モーション処理部１６６−１，１６６−２，・・・（以下、「モーション処理部１６６」とも総称する。）と、インタプリタ１６８−１，１６８−２，・・・（以下、「インタプリタ１６８」とも総称する。）とを含む。
【００８７】
インタプリタ１６８は、アプリケーションプログラム３２（アプリケーションプログラム３２−１，３２−２，・・・）の少なくとも一部を解釈して、中間コード３４（中間コード３４−１，３４−２，・・・）を生成する。すなわち、インタプリタ１６８は、アプリケーションプログラム３２を逐次実行して中間コード３４を生成するとともに、生成した中間コード３４を対応するバッファ１６４に格納する。
【００８８】
モーション処理部１６６は、インタプリタ１６８が事前に生成した中間コード３４に従って、制御周期毎に指令値を演算する。すなわち、モーション処理部１６６は、バッファ１６４に予め格納された中間コード３４に従って、制御周期毎に指令値を演算する機能を提供する。一般的に、アプリケーションプログラム３２に記述される命令（コード）は、逐次実行されるために、指令値の演算周期を保証できないが、中間コード３４を利用することで、モーション処理部１６６は、制御周期毎に指令値を演算できる。中間コード３４において記述される命令には、各制御アプリケーションに応じた座標系が用いられてもよい。
【００８９】
このように、インタプリタ１６８は、生成した中間コード３４をバッファ１６４に逐次キューイングし、モーション処理部１６６は、バッファ１６４にキューイングされた順に中間コード３４を読出す。
【００９０】
本明細書において、「中間コード」は、制御周期毎に指令値を演算するための命令を包含する概念である。「中間コード」は、１または複数の命令、あるいは、１または複数の関数を含む。本実施の形態においては、中間コード３４は、モーション処理部１６６が制御周期毎に指令値を演算できるものであれば、どのようなコードであってもよい。中間コード３４の一例については、後に説明する。
【００９１】
フィールドネットワークインターフェイス１８０は、ＩＥＣプログラム処理部１５０により演算された１または複数の指令値（基本的には、論理値）、モーション処理部１５２により演算された１または複数の指令値（基本的には、数値）、ならびに、モーション処理部１６６により演算された１または複数の指令値（基本的には、数値）を制御周期毎にフィールド側へ出力する。
【００９２】
ＩＥＣプログラム処理部１５０と制御アプリケーション処理部１６０との間でデータを共有するために、共有メモリ１６２−１，１６２−２，・・・（以下、「共有メモリ１６２」とも総称する。）が設けられる。図６に示す構成例においては、制御アプリケーション処理部１６０による処理結果の一部または全部が共有メモリ１６２に格納され、ＩＥＣプログラム処理部１５０は、制御アプリケーション処理部１６０の共有メモリ１６２に格納されたデータを参照することができる。ＩＥＣプログラム処理部１５０から制御アプリケーション処理部１６０の共有メモリ１６２へのデータ書込みも可能であり、このようにＩＥＣプログラム処理部１５０から書込まれたデータは、インタプリタ１６８およびモーション処理部１６６から参照可能である。共有メモリ１６２にデータを格納する際には、構造体変数を採用してもよい。
【００９３】
このように、制御アプリケーション処理部１６０は、制御アプリケーションを制御するためのユーザプログラムであるアプリケーションプログラム３２と、インタプリタ１６８と、指令値を演算するためのモーション処理部１６６とを含む。アプリケーションプログラム３２は、制御アプリケーションに応じた、例えば、工作機械を制御するためのプログラムや組立機械（ロボット）を制御するためのプログラムなどが想定される。
【００９４】
図６に示すように、複数の制御アプリケーションを制御する場合には、制御装置１００内に、インタプリタ１６８およびモーション処理部１６６の組を複数配置することで、柔軟に拡張が可能である。
【００９５】
＜Ｆ．プログラムの同期実行＞
次に、本実施の形態に係る制御装置１００におけるプログラムの同期実行について説明する。
【００９６】
図７は、本実施の形態に係る制御装置１００における各機能構成の実行周期の一例を示す模式図である。図７を参照して、制御アプリケーション処理部１６０のインタプリタ１６８は、制御周期より長い周期毎にアプリケーションプログラム３２を逐次実行する。図７に示す例では、制御アプリケーション処理部１６０−１のインタプリタ１６８−１は、制御周期の２倍分の周期毎にアプリケーションプログラム３２を逐次実行し、制御アプリケーション処理部１６０−２のインタプリタ１６８−２は、制御周期の４倍分の周期毎にアプリケーションプログラム３２を逐次実行する。
【００９７】
但し、ＩＥＣプログラム処理部１５０のモーション処理部１５２および制御アプリケーション処理部１６０のモーション処理部１６６は、いずれも同一の制御周期毎に指令値を演算する。すなわち、制御装置１００からの指令値の出力は、いずれも予め定められた制御周期で同期して行われる。このように、ＩＥＣプログラム処理部１５０および制御アプリケーション処理部１６０は、アクチュエータの動きを連続的に制御するためのモーション処理部をそれぞれ有しており、これらのモーション処理部が同期して指令値を演算することで、ＩＥＣプログラム３０に従う制御およびアプリケーションプログラム３２に従う制御の両方を制御周期と同期させて実行することができ、これによって制御周期単位での精密な制御を実現できる。
【００９８】
次に、本実施の形態に係る制御装置１００におけるＩＥＣプログラム３０およびアプリケーションプログラム３２の実行タイミングについて説明する。図８は、本実施の形態に係る制御装置１００におけるプログラムの実行タイミングの一例を示す模式図である。
【００９９】
図８には、一例として、優先度別に複数のタスクが設定され、各タスクがそれぞれの優先度に応じてプロセッサ１０２のリソースを共有する例を示す。
【０１００】
図８に示す例では、フィールドネットワークインターフェイス１８０、ＩＥＣプログラム処理部１５０、および制御アプリケーション処理部１６０のモーション処理部１６６の実行は、高優先タスクとして設定され、制御アプリケーション処理部１６０のインタプリタ１６８の実行は低優先タスクとして設定されている。すなわち、入出力リフレッシュ処理２０、ＩＥＣプログラム３０の実行処理、ＩＥＣプログラム３０に従う指令値の演算処理、および、アプリケーションプログラム３２に従う指令値の演算処理は、高優先タスクとして実行される。一方、アプリケーションプログラム３２を逐次解釈する処理は、低優先タスクとして実行される。
【０１０１】
高優先タスクは、予め定められた制御周期Ｔ１毎に繰返し実行される。低優先タスクは、高優先タスクが実行されていない期間に都度実行される。すなわち、制御周期毎に、高優先タスクの実行時間が割当てられ、高優先タスクの実行時間以外の時間において、低優先タスクが実行される。
【０１０２】
まず、高優先タスクについて説明すると、各制御周期が到来すると、まず、入出力リフレッシュ処理２０が実行された後、ＩＥＣプログラム処理部１５０によりＩＥＣプログラム３０の全体が実行（スキャン）されて、シーケンス制御についての１または複数の指令値が演算される。併せて、モーション処理部１５２によりＩＥＣプログラム３０に含まれるモーション命令に関するモーション処理が実行されて、モーション命令についての１または複数の指令値が演算される。さらに、制御アプリケーション処理部１６０のモーション処理部１６６によりバッファ１６４から中間コードが読出されて（デキューされて）、当該制御周期における指令値が演算される。以下、同様の処理が制御周期毎に繰返される。
【０１０３】
なお、モーション処理部１６６がバッファ１６４から中間コードを読出すタイミング（デキューするタイミング）は、各制御周期でなくともよい。これは、読出された中間コードは、複数の制御周期に亘って指令値を演算できるだけの命令を含むことが多いからである。
【０１０４】
このように、ある制御周期における高優先タスクの実行が完了すると、シーケンス制御についての指令値、モーション制御についての指令値、制御アプリケーションについての指令値のセットが用意される。これらの指令値は、基本的には、次の制御周期が到来すると、フィールド側に反映される。すなわち、ＩＥＣプログラム処理部１５０および制御アプリケーション処理部１６０は、同一の制御周期で入力データに応じた指令値を演算するので、入力に同期した出力を実現できる。
【０１０５】
一方、低優先タスクについて説明すると、制御アプリケーション処理部１６０のインタプリタ１６８は、アプリケーションプログラム３２を逐次実行する。すなわち、制御アプリケーション処理部１６０のインタプリタ１６８は、アプリケーションプログラム３２の読込みおよび解析を低優先で実行する。インタプリタ１６８がアプリケーションプログラム３２を解析処理して生成された中間コードは、逐次、バッファ１６４にキューイング（エンキュー）される。バッファ１６４にキューイングされた中間コードは、制御アプリケーション処理部１６０のモーション処理部１６６により都度参照されて、指令値の生成に用いられる。
【０１０６】
このとき、制御アプリケーション処理部１６０のインタプリタ１６８は、高優先タスクの演算周期である制御周期の整数倍分の中間コードをキューイングしておくことで、制御アプリケーション処理部１６０のモーション処理部１６６による処理に影響を与えることなく、制御アプリケーションに対する指令値を制御周期毎に演算できる。なお、インタプリタ１６８は、アプリケーションプログラム３２を事前に解析処理することで、制御アプリケーション処理部１６０のモーション処理部１６６が指令値の演算に参照する中間コードを、十分余分に生成しておいてもよい。
【０１０７】
低優先で実行される制御アプリケーション処理部１６０のインタプリタ１６８は、予め定められた制御アプリケーション同期周期（制御周期の整数倍）が到来する前に、アプリケーションプログラム３２の解釈を一時停止する。その一時停止したタイミングで、ＩＥＣプログラム処理部１５０と制御アプリケーション処理部１６０との間でデータ同期を行うことで、双方に整合性をもつデータを共有する。このように、インタプリタ１６８は、制御周期の整数倍である同期周期（すなわち、制御アプリケーション同期周期）毎に、ＩＥＣプログラム処理部１５０との間で共有するデータを更新する。共有データの更新に併せて、フィールド側から取得される入力データおよび出力データについても更新（データ同期）するようにしてもよい。
【０１０８】
すなわち、制御アプリケーション同期周期は、インタプリタ１６８によるアプリケーションプログラム３２の逐次実行に対して設定されるデータ更新／データ同期の周期を意味する。制御アプリケーション同期周期は、制御周期の整数倍に設定されれば、どのような長さであってもよい。制御アプリケーションにおいて要求される制御の粒度などに応じて、適宜設定される。
【０１０９】
図９は、本実施の形態に係る制御装置１００におけるプログラムの実行タイミングの別の一例を示す模式図である。図９には、複数の制御アプリケーションを制御する場合の実行タイミングの一例を示す。なお、図９には、高優先タスクと低優先タスクとをそれぞれ別のコアで実行する例を示す。図９に示す例においては、高優先タスクと低優先タスクとは並列に実行されることになる。
【０１１０】
高優先タスクについて、上述の図８と同様に、予め定められた制御周期Ｔ１毎に繰返し実行される。より具体的には、各制御周期が到来すると、まず、入出力リフレッシュ処理２０が実行された後、ＩＥＣプログラム処理部１５０によりＩＥＣプログラム３０の全体が実行（スキャン）されて、シーケンス制御についての１または複数の指令値が演算される。併せて、モーション処理部１５２によりＩＥＣプログラム３０に含まれるモーション命令に関するモーション処理が実行されて、モーション命令についての１または複数の指令値が演算される。さらに、制御アプリケーション処理部１６０−１のモーション処理部１６６−１によりバッファ１６４−１から中間コードが読出されて（デキューされて）、当該制御周期における指令値が演算される。続いて、制御アプリケーション処理部１６０−２のモーション処理部１６６−２によりバッファ１６４−２から中間コードが読出されて（デキューされて）、当該制御周期における指令値が演算される。
【０１１１】
一方、アプリケーションプログラム３２−１およびアプリケーションプログラム３２−２は、いずれも同じ低優先タスクとして実行される。図９に示す例においては、アプリケーションプログラム３２−１の制御アプリケーション同期周期１は制御周期の２倍に設定されており、アプリケーションプログラム３２−２の制御アプリケーション同期周期２は制御周期の３倍に設定されている。
【０１１２】
制御アプリケーション処理部１６０−１のインタプリタ１６８−１および制御アプリケーション処理部１６０−２のインタプリタ１６８−２は、図示しないスケジューラなどからの調停に従って、アプリケーションプログラム３２を逐次実行する。
【０１１３】
より具体的には、制御アプリケーション処理部１６０−１のインタプリタ１６８−１は、アプリケーションプログラム３２−１を解析処理して生成した中間コードを、逐次バッファ１６４−１にキューイング（エンキュー）する。制御アプリケーション処理部１６０−１のインタプリタ１６８−１は、予め定められた制御アプリケーション同期周期（制御周期の整数倍）毎に、処理を一時停止する。その一時停止したタイミングで、ＩＥＣプログラム処理部１５０と制御アプリケーション処理部１６０−１との間でデータ同期を行うことで、双方に整合性をもつデータを共有する。
【０１１４】
また、制御アプリケーション処理部１６０−２のインタプリタ１６８−２は、アプリケーションプログラム３２−２を解析処理して生成した中間コードを、逐次バッファ１６４−２にキューイング（エンキュー）する。制御アプリケーション処理部１６０−２のインタプリタ１６８−２は、予め定められた制御アプリケーション同期周期（制御周期の整数倍）毎に、処理を一時停止する。その一時停止したタイミングで、ＩＥＣプログラム処理部１５０と制御アプリケーション処理部１６０−２との間でデータ同期を行うことで、双方に整合性をもつデータを共有する。
【０１１５】
なお、アプリケーションプログラム３２−１の制御アプリケーション同期周期１とアプリケーションプログラム３２−２の制御アプリケーション同期周期２とは異なっているが、いずれも制御周期の整数倍であるため、制御周期を基準としてそれぞれがＩＥＣプログラム処理部１５０と処理を同期させることができる。
【０１１６】
このように、複数のコアを有するプロセッサ１０２を有する制御装置１００を採用した場合には、高優先タスクをあるコアで実行させ、低優先タスクを別のコアで実行させてもよい。
【０１１７】
上述したように、複数の制御アプリケーションを制御するためにアプリケーションプログラム３２を複数実行する場合には、同じ優先度で並列実行させるようにしてもよい。本実施の形態においては、制御アプリケーション同期周期毎にアプリケーションプログラム３２の実行を一時停止するとともに、制御周期単位で中間コード３４をキューイングする方式を採用するため、アプリケーションプログラム３２を複数実行させる場合であっても、実装への制約が少ない。
【０１１８】
すなわち、複数のアプリケーションプログラム３２の実行に必要なプロセッサ１０２のリソースを割当てる方式としては、任意の方式を採用できる。例えば、共通のプロセッサ（または、コア）を時分割で共有するラウンドロビン実行方式であってもよいし、アプリケーションプログラム３２毎に固有のコアを割当てる個別コア割付方式であってもよい。さらに、高優先タスクとの間で共通のプロセッサ（または、コア）を時分割で共有する方式を採用してもよい。
【０１１９】
なお、図８および図９においては、ＩＥＣプログラム処理部１５０、モーション処理部１５２、モーション処理部１６６の順で処理を実行する例を示したが、これに限定されることなく、同一の制御周期内にそれぞれの部材が処理の実行を完了できれば、どのような順序で処理を実行してもよい。
【０１２０】
＜Ｇ．中間コード＞
次に、制御アプリケーション処理部１６０のインタプリタ１６８がアプリケーションプログラム３２を解釈して生成される中間コードの一例について説明する。
【０１２１】
図１０は、本実施の形態に係る制御装置１００において生成される中間コードを概念的に示す模式図である。図１０を参照して、アプリケーションプログラム３２は、インタプリタ方式で逐次実行されるコードを含んでおり、各コードを逐次実行した場合に必要となる時間は、各コードが記述する内容に応じて変化する。そのため、制御周期毎に指令値を演算することが容易ではない。なお、図１０には、アプリケーションプログラム３２の一例として、ＣＮＣで用いられるＧ言語にて記述されたコードを示す。
【０１２２】
そこで、本実施の形態においては、アプリケーションプログラム３２に記述された１または複数のコードを解釈し、その解釈された内容に基づいて、制御周期毎に指令値を演算するための中間コード３４を生成する。中間コード３４は、アプリケーションプログラム３２に記述された１または複数のコード毎に生成されるので、１つのアプリケーションプログラム３２から複数の中間コード３４が生成されることが多い。
【０１２３】
中間コード３４の各々においては、制御周期の時刻（あるいは、時間）を入力として、指令値を演算できる関数が規定されていてもよい。すなわち、中間コード３４は、制御アプリケーション処理部１６０のモーション処理部１６６が制御周期毎に指令値を演算するための関数であってもよい。このような関数を用いることで、モーション処理部１６６は、生成される中間コード３４を順次参照して、各制御周期における指令値を演算できる。
【０１２４】
例えば、１番目の中間コード１が制御周期の１０倍分の期間に亘って指令値を規定するものであるとすると、制御アプリケーション処理部１６０のモーション処理部１６６は、中間コード１をキューイングして、１０制御周期分の期間に亘って指令値を周期的に演算する。同様に、他の中間コード２および中間コード３についても、基本的には、複数の制御周期に亘って指令値を演算できるものとなる。
【０１２５】
したがって、制御アプリケーション処理部１６０のインタプリタ１６８によるアプリケーションプログラム３２から中間コードの生成処理が、制御アプリケーション処理部１６０のモーション処理部１６６による指令値の演算処理に比較して、十分に先だって実行されれば、ＩＥＣプログラム３０の実行と同期して、制御アプリケーションを制御できる。
【０１２６】
図１１は、本実施の形態に係る制御装置１００における中間コードの生成例を説明するための模式図である。図１１を参照して、例えば、動作すべき軌道を規定するアプリケーションプログラム３２が逐次実行されると、まず、アプリケーションプログラム３２が解釈され（（１）プログラム解釈）、規定された軌道が内部的に生成される（（２）軌道生成）。これらの軌道と制御周期毎の位置との関係が決定された上で、内部的に生成された軌道を示す１または複数の関数が生成される（（３）区間毎の関数生成）。
【０１２７】
このように、中間コード３４の一例として、制御周期の時間を入力とし、指令値を出力とする関数が用いられてもよい。
【０１２８】
図１１に示す例では、内部的に生成された軌道は、直線の組み合わせであるので、直線区間毎（区間１〜区間３）の軌道を時間と速度との関係を示す関数ｆ１（ｔ），ｆ２（ｔ），ｆ３（ｔ）が出力される。
【０１２９】
このように出力される関数ｆ１（ｔ），ｆ２（ｔ），ｆ３（ｔ）が本実施の形態における中間コード３４の一例に相当する。なお、図１１に示す軌道を規定する単一の関数を中間コードとして出力してもよい。どのような中間コード３４を出力するのかについては、要求される制御周期の時間幅などを考慮して、適宜設計されてもよい。
【０１３０】
なお、上述の図１０および図１１においては、一例として、Ｇ言語を用いたアプリケーションプログラムについて説明したが、これに限らず、任意のロボット言語などのインタプリタ方式で実行されるプログラムであれば、どのような言語を用いてもよい。また、言語に応じて、任意の関数を中間コード３４として出力するようにしてもよい。
【０１３１】
＜Ｈ．処理手順＞
次に、本実施の形態に係る制御装置１００における処理手順について説明する。
【０１３２】
図１２は、本実施の形態に係る制御装置１００における処理手順を示すフローチャートである。図１２には、高優先タスクおよび低優先タスクの実行をそれぞれ示す。
【０１３３】
図１２を参照して、高優先タスクに関して、制御周期が到来する（ステップＳ１００においてＹＥＳ）と、フィールドネットワークインターフェイス１８０が入出力リフレッシュ処理を実行する（ステップＳ１０２）。これによって、直前の制御周期において演算された指令値がアクチュエータなどへ出力されるとともに、フィールドから入力データが取得される。
【０１３４】
続いて、今回の制御周期が制御アプリケーション同期周期と一致するか否かが判断される（ステップＳ１０４）。今回の制御周期が制御アプリケーション同期周期と一致すれば（ステップＳ１０４においてＹＥＳ）、ＩＥＣプログラム処理部１５０と制御アプリケーション処理部１６０との間でデータ同期が実行される（ステップＳ１０６）。今回の制御周期が制御アプリケーション同期周期と一致しなければ（ステップＳ１０４においてＮＯ）、ステップＳ１０６の処理はスキップされる。
【０１３５】
続いて、ＩＥＣプログラム処理部１５０がＩＥＣプログラム３０の全体を実行（スキャン）する（ステップＳ１０８）。続いて、モーション処理部１５２は、ＩＥＣプログラム３０に含まれるモーション命令に従って、今回の制御周期における指令値を演算する（ステップＳ１１０）。ステップＳ１０８およびＳ１１０によって、到来した制御周期におけるＩＥＣプログラム３０に従うシーケンス処理およびモーション処理についての指令値が演算される。
【０１３６】
さらに、制御アプリケーション処理部１６０のモーション処理部１６６は、指令値を演算するために必要な中間コードが有効に読込まれているか否かを判断する（ステップＳ１１２）。中間コードが有効に読込まれていなければ（ステップＳ１１２においてＮＯ）、モーション処理部１６６は、バッファ１６４から中間コードを読込む（ステップＳ１１４）。中間コードが有効に読込まれていれば（ステップＳ１１２においてＹＥＳ）、ステップＳ１１４の処理はスキップされる。
【０１３７】
制御アプリケーション処理部１６０のモーション処理部１６６は、中間コードに従って、今回の制御周期における指令値を演算する（ステップＳ１１６）。
【０１３８】
以上の処理により、今回の制御周期における指令値が演算される。そして、ステップＳ１００以下の処理が繰返される。すなわち、次の制御周期が到来すると、演算された指令値がフィードへ出力される。なお、ステップＳ１１６の後、次の制御周期が到来するまでの期間は、低優先タスクが実行されることになる。
【０１３９】
一方、低優先タスクに関して、制御周期が到来する（ステップＳ２００においてＹＥＳ）と、今回の制御周期が制御アプリケーション同期周期と一致するか否かが判断される（ステップＳ２０２）。今回の制御周期が制御アプリケーション同期周期と一致すれば（ステップＳ２０２においてＹＥＳ）、ＩＥＣプログラム処理部１５０と制御アプリケーション処理部１６０との間でデータ同期が実行される（ステップＳ２０４）。そして、制御アプリケーション処理部１６０のインタプリタ１６８は、アプリケーションプログラム３２のうち、今回の制御アプリケーション同期周期内において実行可能な範囲のコードを読込む（ステップＳ２０６）。一例として、インタプリタ１６８には、予め、各命令および指定される引数などに基づいて、実行に必要な制御周期を算出するための対応関係が実装されており、この対応関係を参照することで、どの範囲までコードを読込むべきかを決定できる。
【０１４０】
今回の制御周期が制御アプリケーション同期周期と一致しなければ（ステップＳ２０２においてＮＯ）、ステップＳ２０４およびＳ２０６の処理はスキップされる。
【０１４１】
低優先タスクに対してプログラムの実行時間が割当てられている期間において、制御アプリケーション処理部１６０のインタプリタ１６８は、ステップＳ２０６において読込んだコードを解釈し（ステップＳ２０８）、何らかの中間コードが生成されると（ステップＳ２１０においてＹＥＳ）、生成された中間コードをバッファ１６４に格納する（ステップＳ２１２）。そして、ステップＳ２００以下の処理が繰返される。
【０１４２】
すなわち、制御アプリケーション同期周期内においては、低優先タスクに対するプログラムの実行時間が割当てられている期間において、ステップＳ２０８〜Ｓ２１２の処理が繰返される。
【０１４３】
なお、図１２においては、１つの制御アプリケーションを制御する例を示したが、複数の制御アプリケーションを制御する場合についても、同様に拡張できることは自明である。
【０１４４】
＜Ｉ．利点＞
本実施の形態に従う制御装置１００は、実行形式の異なる複数種類のプログラムを実行する際のスケジューリング機能を有している。ＩＥＣプログラム処理部１５０は、ＩＥＣプログラム３０に従って、フィールドへの指令値およびフィールドからのフィールドバック値（出力データおよび入力データ）を制御周期毎に更新する。このようなＩＥＣプログラム３０の定周期実行に加えて、制御装置１００は、工作機やロボットにより実現される加工／組立／検査など特定の目的をもつ制御アプリケーションを制御するためのアプリケーションプログラムに従って、制御周期で指令値を演算するための制御アプリケーション処理部１６０を有している。
【０１４５】
ＩＥＣプログラム３０とは、実行形式および制御周期が異なるアプリケーションプログラム３２を共通のプロセッサで実行するために、制御アプリケーション処理部１６０は、制御アプリケーションに対して指令値を演算する処理は制御周期で同期実行し、アプリケーションプログラム３２に対する解釈などの逐次実行は、指令値の演算処理とは切り離して実行される。
【０１４６】
さらに、ＩＥＣプログラム３０とアプリケーションプログラム３２との間のデータの同期を維持するために、制御アプリケーション処理部１６０は、制御アプリケーション同期周期（制御周期の整数倍）毎に、共有データの同期処理を実行する。すなわち、ＩＥＣプログラム処理部１５０の制御周期と制御アプリケーションのクロックとが同期するタイミングで、両者の間に整合性を維持したままデータを更新できる。
【０１４７】
本実施の形態に従う制御装置１００を採用することで、ＩＥＣプログラムに従う制御演算と、工作機やロボットなどで実現される加工／組立／検査などの１ないし複数の制御アプリケーションに対するに従う制御演算とを共通の制御装置１００で実現できる。これにより、制御装置１００に接続されるＩ／Ｏデバイスおよびアクチュエータ（モータなど）と、１ないし複数の制御アプリケーションとを同期して制御できる。
【０１４８】
本実施の形態に従う制御装置１００を採用することで、複数の装置間の待ち合わせにより生じる遅れ時間などを削減でき、生産性を向上できる。
【０１４９】
本実施の形態に従う制御装置１００を採用することで、制御アプリケーション毎に配置されていた専用コントローラを省略でき、システム構成に必要なコストを低減できる。
【０１５０】
本実施の形態に従う制御装置１００を採用することで、コントローラ間の配線（Ｉ／Ｏ信号線）をソフトウェアで実現できるので、設計および実装に要する時間およびコストを削減できる。
【０１５１】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１５２】
１  制御システム、１Ａ  加工システム、１Ｂ  ロボット組立システム、２  フィールドネットワーク、６  上位ネットワーク、１０Ａ，１０Ｂ  上位コントローラ、２０  入出力リフレッシュ処理、２２  通信処理、３０，１０１Ａ，１０１Ｂ  ＩＥＣプログラム、３２  アプリケーションプログラム、３４  中間コード、３６  システムプログラム、１００  制御装置、１００Ａ，１００Ｂ  ＰＬＣ、１０２  プロセッサ、１０４  チップセット、１０６  主記憶装置、１０８  二次記憶装置、１１０  上位ネットワークコントローラ、１１２  ＵＳＢコントローラ、１１４  メモリカードインターフェイス、１１６  メモリカード、１２０  内部バスコントローラ、１２２  Ｉ／Ｏユニット、１３０  フィールドネットワークコントローラ、１５０  ＩＥＣプログラム処理部、１５２，１６６  モーション処理部、１６０  制御アプリケーション処理部、１６２  共有メモリ、１６４  バッファ、１６８  インタプリタ、１８０  フィールドネットワークインターフェイス、１８２  上位ネットワークインターフェイス、２００  サポート装置、３００  サーバ装置、４００  表示装置、５００  フィールド機器、５１０  リモートＩ／Ｏ装置、５１２，５１４  Ｉ／Ｏ信号線、５２０  サーボドライバ、５２２，７５２，７５４  サーボモータ、５３０  ロボットシステム、５３２，７１０  ロボットコントローラ、５３４，５３６，５３８  ロボット機構、５４０，６００  ＣＮＣ加工装置、６１０  ＣＮＣコントローラ、６２０  ＣＮＣプログラム、６５０  搬送装置、６５２  駆動モータ、７００  多関節ロボット、７２０  ロボットプログラム、７５０  ＸＹステージ。
【図１】
2019036043.tif 000003
【図２】
2019036043.tif 000004
【図３】
2019036043.tif 000005
【図４】
2019036043.tif 000006
【図５】
2019036043.tif 000007
【図６】
2019036043.tif 000008
【図７】
2019036043.tif 000009
【図８】
2019036043.tif 000010
【図９】
2019036043.tif 000011
【図１０】
2019036043.tif 000012
【図１１】
2019036043.tif 000013
【図１２】
2019036043.tif 000014