(57)【要約】【課題】シーケンスプログラムに従う制御および数値制御プログラムに従う制御を、より少ない工数で実現可能な制御装置を提供する。【解決手段】複数のモータを制御可能な制御装置は、シーケンスプログラムを制御周期毎に実行する第１のプログラム実行部と、数値制御プログラムに従って各モータに対する指令値を算出する第２のプログラム実行部と、複数のモータのうち予め指定された複数のモータからなるグループに関連付けられた制御状態を管理する状態管理部とを含む。状態管理部は、第１のプログラム実行部からの指示、および、第２のプログラム実行部における数値制御プログラムの実行状態の少なくとも一方に基づいて、制御状態を更新する。【選択図】図１
2019053397.tif 000002
【特許請求の範囲】
【請求項１】
複数のモータを制御可能な制御装置であって、
シーケンスプログラムを制御周期毎に実行する第１のプログラム実行部と、
数値制御プログラムに従って各モータに対する指令値を算出する第２のプログラム実行部と、
前記複数のモータのうち予め指定された複数のモータからなるグループに関連付けられた制御状態を管理する状態管理部とを備え、
前記シーケンスプログラムは、前記第２のプログラム実行部での前記数値制御プログラムの実行処理を制御するための制御命令を含み、
前記第１のプログラム実行部は、前記シーケンスプログラムに含まれる制御命令に従って、前記第２のプログラム実行部での前記数値制御プログラムの実行に係る指示を与え、
前記状態管理部は、前記第１のプログラム実行部からの指示、および、前記第２のプログラム実行部における前記数値制御プログラムの実行状態の少なくとも一方に基づいて、前記制御状態を更新する、制御装置。
【請求項２】
前記第１のプログラム実行部は、前記シーケンスプログラムに含まれる前記制御状態を参照する命令に従って、前記状態管理部が管理する前記制御状態の値を反映して、前記シーケンスプログラムに従う演算結果を算出する、請求項１に記載の制御装置。
【請求項３】
前記状態管理部は、前記制御状態の値を構造体変数のメンバとして参照可能に保持する、請求項１または２に記載の制御装置。
【請求項４】
前記構造体変数は、対応のグループの設定に関する情報をさらなるメンバとして有している、請求項３に記載の制御装置。
【請求項５】
前記状態管理部は、前記第２のプログラム実行部が前記数値制御プログラムを実行中において取り得る複数の状態と、前記第２のプログラム実行部が前記数値制御プログラムを非実行中において取り得る複数の状態との間で、前記制御状態を遷移させる、請求項１〜４のいずれか１項に記載の制御装置。
【請求項６】
前記状態管理部が管理する前記制御状態の値を保持する共有メモリをさらに備える、請求項１〜５のいずれか１項に記載の制御装置。
【請求項７】
前記シーケンスプログラムに含まれる制御命令は、ファンクションブロックの形で規定される、請求項１〜６のいずれか１項に記載の制御装置。
【請求項８】
前記制御装置には、前記グループに属する複数のモータの指定を受付けるユーザインターフェイスを提供するサポート装置が接続可能になっている、請求項１〜７のいずれか１項に記載の制御装置。
【請求項９】
前記制御状態は、前記グループに含まれる複数のモータをまとめた単一の状態を示す、請求項１〜８のいずれか１項に記載の制御装置。
【請求項１０】
複数のモータを制御可能な制御装置における制御方法であって、
シーケンスプログラムを制御周期毎に実行するステップと、
数値制御プログラムに従って各モータに対する指令値を算出するステップと、
前記複数のモータのうち予め指定された複数のモータからなるグループに関連付けられた制御状態を管理するステップとを備え、
前記シーケンスプログラムは、前記数値制御プログラムの実行処理を制御するための制御命令を含み、
前記数値制御プログラムの実行は、前記シーケンスプログラムに含まれる制御命令に従う指示によって制御され、
前記制御状態を管理するステップは、前記シーケンスプログラムに含まれる制御命令に従う指示、および、前記数値制御プログラムの実行状態の少なくとも一方に基づいて、前記制御状態を更新するステップを含む、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、複数のモータを制御可能な制御装置および当該制御装置における制御方法に関する。
【背景技術】
【０００２】
従来から、ＣＮＣ（Computer Numerical Control：コンピュータ数値制御）に従う工作機械（以下、「ＣＮＣ工作機械」とも総称する。）が様々な生産現場で利用されている。ＣＮＣ工作機械においては、各々が「軸」と称される機械構成を複数組み合わせて処理を行うことも多い。このような場合、複数の軸をまとめて制御したいというニーズが存在する。
【０００３】
例えば、国際公開第２０１６／１５７３９５号（特許文献１）は、機械構成を単系統または２つ以上組み合わせた多系統でグループ化し、グループ化された機械構成によりワークを加工することが可能な数値制御装置を開示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１６／１５７３９５号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の国際公開第２０１６／１５７３９５号（特許文献１）に開示される数値制御装置においては、加工プログラムごとに解析するプログラム解析部と、ラダープログラムを処理するＰＬＣとがそれぞれ配置された構成になっている。この構成において、ＣＮＣ工作機械によりワークが加工される際に、例えば、切削油を噴射する噴射器の駆動を制御し、ＣＮＣ工作機械により加工されたワークを運ぶベルトコンベアの駆動を制御するとされているが、ＣＮＣ工作機械の各軸の状態を直接把握することはできない。そのため、例えば、ＰＬＣがＣＮＣ工作機械の各軸の状態に応じた処理を実行する場合には、ＣＮＣ工作機械の各軸の状態を取得するためのプログラムおよびその機構を実装しなければならず、コストおよび工数を多く要するという課題がある。
【０００６】
本開示は、このような課題の解決に向けられており、その一つの目的は、シーケンスプログラムに従う制御および数値制御プログラムに従う制御を、より少ない工数で実現可能な制御装置を提供することである。
【課題を解決するための手段】
【０００７】
本開示の一例では、複数のモータを制御可能な制御装置が提供される。制御装置は、シーケンスプログラムを制御周期毎に実行する第１のプログラム実行部と、数値制御プログラムに従って各モータに対する指令値を算出する第２のプログラム実行部と、複数のモータのうち予め指定された複数のモータからなるグループに関連付けられた制御状態を管理する状態管理部とを含む。シーケンスプログラムは、第２のプログラム実行部での数値制御プログラムの実行処理を制御するための制御命令を含む。第１のプログラム実行部は、シーケンスプログラムに含まれる制御命令に従って、第２のプログラム実行部での数値制御プログラムの実行に係る指示を与える。状態管理部は、第１のプログラム実行部からの指示、および、第２のプログラム実行部における数値制御プログラムの実行状態の少なくとも一方に基づいて、制御状態を更新する。
【０００８】
この開示によれば、特別なプログラムを作成することなく、複数のモータのうち予め指定された複数のモータからなるグループの制御状態を管理できるため、グループに対する制御を行うプログラムを作成する際の工数を低減できる。
【０００９】
上述の開示において、第１のプログラム実行部は、シーケンスプログラムに含まれる制御状態を参照する命令に従って、状態管理部が管理する制御状態の値を反映して、シーケンスプログラムに従う演算結果を算出してもよい。
【００１０】
この開示によれば、シーケンスプログラムにおいて、グループに属する各モータに対する制御ロジックをより容易に実現できる。
【００１１】
上述の開示において、状態管理部は、制御状態の値を構造体変数のメンバとして参照可能に保持してもよい。
【００１２】
この開示によれば、プログラムの再利用性などを高めることができる。
上述の開示において、構造体変数は、対応のグループの設定に関する情報をさらなるメンバとして有していてもよい。
【００１３】
この開示によれば、プログラムをより簡単に作成することができる。
上述の開示において、状態管理部は、第２のプログラム実行部が数値制御プログラムを実行中において取り得る複数の状態と、第２のプログラム実行部が数値制御プログラムを非実行中において取り得る複数の状態との間で、制御状態を遷移させてもよい。
【００１４】
この開示によれば、第２のプログラム実行部が数値制御プログラムにおいて管理が必要な内容などを反映した制御状態の値を提供できる。
【００１５】
上述の開示において、制御装置は、状態管理部が管理する制御状態の値を保持する共有メモリをさらに含んでいてもよい。
【００１６】
この開示によれば、第１のプログラム実行部および第２のプログラム実行部からの制御状態の値へのアクセスを容易化できる。
【００１７】
上述の開示において、シーケンスプログラムに含まれる制御命令は、ファンクションブロックの形で規定されてもよい。
【００１８】
この開示によれば、シーケンスプログラムの再利用性を高めることができるとともに、シーケンスプログラムの品質を高めることもできる。
【００１９】
上述の開示において、制御装置には、グループに属する複数のモータの指定を受付けるユーザインターフェイスを提供するサポート装置が接続可能になっていてもよい。
【００２０】
この開示によれば、複数のモータが属するグループの設定を容易化できる。
上述の開示において、制御状態は、グループに含まれる複数のモータをまとめた単一の状態を示してもよい。
【００２１】
この開示によれば、複数のモータを一括して制御するのに適した制御状態の値を提供できる。
【００２２】
本開示の別の一例では、複数のモータを制御可能な制御装置における制御方法が提供される。制御方法は、シーケンスプログラムを制御周期毎に実行するステップと、数値制御プログラムに従って各モータに対する指令値を算出するステップと、複数のモータのうち予め指定された複数のモータからなるグループに関連付けられた制御状態を管理するステップとを含む。シーケンスプログラムは、数値制御プログラムの実行処理を制御するための制御命令を含む。数値制御プログラムの実行は、シーケンスプログラムに含まれる制御命令に従う指示によって制御される。制御状態を管理するステップは、シーケンスプログラムに含まれる制御命令に従う指示、および、数値制御プログラムの実行状態の少なくとも一方に基づいて、制御状態を更新するステップを含む。
【００２３】
この開示によれば、特別なプログラムを作成することなく、複数のモータのうち予め指定された複数のモータからなるグループの制御状態を管理できるため、グループに対する制御を行うプログラムを作成する際の工数を低減できる。
【発明の効果】
【００２４】
本開示の一例によれば、シーケンスプログラムに従う制御および数値制御プログラムに従う制御を、より少ない工数で実現可能な制御装置を提供できる。
【図面の簡単な説明】
【００２５】
【図１】本実施の形態に係る制御装置の適用場面の一例を示す模式図である。
【図２】本実施の形態に係る制御システムの全体構成例を示す模式図である。
【図３】本実施の形態に係る制御装置のハードウェア構成例を示すブロック図である。
【図４】本実施の形態に係る制御装置における中間コードの生成例を説明するための模式図である。
【図５】本実施の形態に係る制御装置から軸グループを構成するそれぞれのモータに対する指令値の時間波形の一例を示す図である。
【図６】本実施の形態に係る制御装置に接続されるサポート装置上で提供されるユーザインターフェイス画面の一例を示す模式図である。
【図７】本実施の形態に係る制御装置における軸グループの状態遷移の一例を示す図である。
【図８】本実施の形態に係る制御装置におけるＣＮＣ＿ＣｏｏｒｄＣｏｎｔｒｏｌ（ＣＮＣ座標制御）命令に対応するファンクションブロックを示す模式図である。
【図９】本実施の形態に係る制御装置における軸グループに関連付けられた構造体変数の一例を示す図である。
【図１０】本実施の形態に係る制御装置において実行されるシーケンスプログラムのコード例を示す図である。
【図１１】本実施の形態に係る制御装置におけるプログラムの実行動作例を示すタイムチャートである。
【発明を実施するための形態】
【００２６】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２７】
＜Ａ．適用例＞
まず、図１を参照して、本発明が適用される場面の一例について説明する。図１は、本実施の形態に係る制御装置１００の適用場面の一例を示す模式図である。
【００２８】
図１を参照して、制御装置１００は、複数のモータを制御可能に構成される。図１に示す適用例においては、モータの一例として、サーボモータ５２２＿１，５２２＿２，５２２＿３（以下、「サーボモータ５２２」とも総称する。）が制御される。サーボモータ５２２＿１，５２２＿２，５２２＿３は、制御装置１００とフィールドネットワーク２を介して接続されるサーボドライバ５２０＿１，５２０＿２，５２０＿３（以下、「サーボドライバ５２０」とも総称する。）によって駆動される。すなわち、制御装置１００からサーボドライバ５２０に対して、後述するような処理によって算出されるそれぞれの指令値が与えられる。
【００２９】
本発明の「モータ」は、サーボモータに限られることなく、同期モータおよび誘導モータを含む任意の駆動装置を包含する概念である。また、本発明の「モータ」は、例えば、リニアモータのような、回転運動ではなく直線運動するような装置も含み得る。サーボモータ５２２を駆動する場合には、サーボドライバ５２０が利用されるが、モータの種類に応じてモータを駆動する装置も適切なものが選択される。
【００３０】
例えば、産業用ロボットやＣＮＣ工作機械においては、ワークに対して何らかのアクションを行う場合に、複数のモータを連係させて駆動する必要がある。すなわち、複数のモータに対してそれぞれの指令値を同期して与える必要がある。本明細書において、それぞれの指令値を同期して与える必要がある複数のモータを「グループ」と称する。
【００３１】
一般的に、任意のグループに属するそれぞれのモータが物体を移動させる方向（軸方向）は、互いに異なっており、これらの軸により規定される空間を「座標系」とも称する。例えば、あるグループに属する３つのモータがＣＮＣ工作機械のＸ軸、Ｙ軸、Ｚ軸をそれぞれ駆動するような場合、当該グループに属するモータは、「Ｘ−Ｙ−Ｚ座標系」に関連付けられることになる。このような各モータが物体を移動させる軸方向に着目して、以下の説明においては、各グループを「軸グループ」と称することもあり、また、「軸グループ」を、それに属するモータに割当てられた軸により規定される「ＣＮＣ座標系」と記載することもある。言い換えれば、「ＣＮＣ座標系」は、グループに属する複数のモータが構成するＣＮＣ工作機械をそのまま抽象化した概念に相当する。
【００３２】
通常、１つの軸グループにおいて、モータ数と軸数とは一致するが、１つの軸を複数のモータで回転駆動することもあり、この場合には、モータ数は軸数より多くなる。
【００３３】
図１に示す応用例においては、制御装置１００からそれぞれのサーボドライバ５２０に対して、フィールドネットワーク２を介して、対応する指令値が送信（通信）されるが、これに限らず、制御装置１００とサーボドライバ５２０とを配線接続して、指令値を示す信号を直接伝送するようにしてもよい。
【００３４】
制御装置１００は、ストレージ１０８と、シーケンスプログラム実行部１５０と、数値制御プログラム実行部１６０（以下、「ＮＣプログラム実行部」とも略称する。）と、複数のモータのうち予め指定された複数のモータからなるグループ（軸グループ）に関連付けられた制御状態１７２を管理する状態管理部１７０を含む。制御状態１７２は、軸グループに含まれる複数のモータをまとめた単一の状態を示す。すなわち、制御状態１７２は、軸グループの全体としての状態値を示す。
【００３５】
ストレージ１０８には、シーケンスプログラム３０と、数値制御プログラム３２（以下、「ＮＣプログラム」とも略称する）とが格納される。
【００３６】
シーケンスプログラム実行部１５０は、シーケンスプログラム３０を制御周期毎に実行する第１のプログラム実行部の一例であり、ＮＣプログラム実行部１６０は、ＮＣプログラム３２に従って各モータに対する指令値１８４を算出する第２のプログラム実行部の一例である。
【００３７】
シーケンスプログラム実行部１５０は、シーケンスプログラム３０をサイクリックに実行することで、１または複数の指令値１８２を算出する。
【００３８】
本発明の「シーケンスプログラム」は、実行毎に全体がスキャンされて、実行毎に１または複数の指令値が算出されるプログラムを包含する概念である。「シーケンスプログラム」は、国際電気標準会議（International Electrotechnical Commission：ＩＥＣ）によって規定された国際規格ＩＥＣ６１１３１−３に従って記述された１または複数の命令からなるプログラムを包含する。「シーケンスプログラム」には、シーケンス命令および／またはモーション命令を含み得る。なお、「シーケンスプログラム」としては、国際規格ＩＥＣ６１１３１−３に従って記述された命令に限らず、ＰＬＣ（プログラマブルコントローラ）の製造メーカまたはベンダーなどが独自に規定した命令を含むようにしてもよい。このように、「シーケンスプログラム」は、即時性および高速性が要求される制御に好適である。
【００３９】
本明細書において、「シーケンス命令」は、基本的には、入力値、出力値、内部値などを算出する１または複数の論理回路により記述される１または複数の命令を包含する用語である。基本的には、１回の制御周期において、「シーケンス命令」は、先頭から最終まで実行され、次の制御周期において、「シーケンス命令」は、先頭から最終までが再度実行される。本明細書において、「モーション命令」は、サーボモータなどのアクチュエータに対して、位置、速度、加速度、加加速度、角度、角速度、角加速度、角加加速度などの数値を指令として算出するための１または複数の命令を包含する用語である。「モーション命令」についても、１回の制御周期において、ファンクションブロックや数値算出式などにより記述されるモーション命令のプログラム（モーションプログラム）の先頭から最終までが実行される。すなわち、制御周期毎に指令値は算出（更新）されることになる。
【００４０】
シーケンスプログラム実行部１５０により算出される１または複数の指令値１８２は、典型的には、シーケンス命令に従って決定されるデジタル出力のオン／オフ、および、モーション命令に従って算出されるアナログ出力を含む。
【００４１】
ＮＣプログラム実行部１６０は、ＮＣプログラム３２を逐次解釈することで、ＮＣプログラム３２において記述された軌跡を実現できるように、指令値１８４を順次更新する。上述したように、軸グループが設定されている場合には、ＮＣプログラム実行部１６０は、同一の軸グループに属している複数のモータに対するそれぞれの指令値１８４を同期して出力する。
【００４２】
本発明の「数値制御プログラム」は、ＣＮＣにおける挙動を記述するプログラムを包含する。「数値制御プログラム」は、典型的には、１行ずつ逐次解釈して実行するインタプリタ方式で記述され、逐次解釈および実行される。一例として、ＮＣプログラムは「Ｇコード」を用いて記述されることが多いが、これに限らず、任意の言語を採用することができる。
【００４３】
シーケンスプログラム３０は、ＮＣプログラム実行部１６０でのＮＣプログラム３２の実行処理を制御するための制御命令を含む。そして、シーケンスプログラム実行部１５０がシーケンスプログラム３０を実行することで、ＮＣプログラム実行部１６０の実行に係る指示を与える。例えば、シーケンスプログラム実行部１５０がシーケンスプログラム３０に含まれる制御命令を実行することで、ＮＣプログラム実行部１６０でのＮＣプログラム３２の実行処理を開始または停止させることができる。
【００４４】
軸グループは、対象となる装置の機構に応じて任意に設定される。ストレージ１０８に格納される設定情報３６は、軸グループの設定を含む。
【００４５】
典型的には、シーケンスプログラム実行部１５０から出力される１または複数の指令値１８２と、ＮＣプログラム実行部１６０から出力される指令値１８４と、状態管理部１７０が管理する制御状態１７２とは、共有メモリ１９０に保持される。但し、それぞれのデータを保持するための専用領域を設けてもよい。
【００４６】
状態管理部１７０が管理する制御状態の値を保持する共有メモリ１９０を設けることで、シーケンスプログラム実行部１５０およびＮＣプログラム実行部１６０からのアクセスを容易化できる。
【００４７】
入出力リフレッシュ処理部１８０は、所定周期毎に、指令値１８２および指令値１８４を含む出力データをフィールド側へ送信するとともに、フィールド側から計測値などの入力データを取得する。本明細書において、制御装置１００とフィールド側との間の入力データおよび出力データの遣り取りを、「入出力リフレッシュ処理」とも称す。
【００４８】
状態管理部１７０は、シーケンスプログラム実行部１５０からＮＣプログラム実行部１６０への指示、および、ＮＣプログラム実行部１６０におけるＮＣプログラム３２の実行状態の少なくとも一方に基づいて、制御状態１７２を更新する。制御状態１７２は、軸グループ毎の状態を示す情報を有しており、例えば、特定の軸グループについて、「動作中」、「停止中」、「減速中」などの状態情報などを含む。
【００４９】
本実施の形態に係る制御装置１００においては、制御周期毎にスキャンされるシーケンスプログラム３０、および、逐次解釈されるＮＣプログラム３２をそれぞれ実行して、それぞれの指令値を算出する。シーケンスプログラム３０に所定の制御命令を含ませることによって、ＮＣプログラム実行部１６０でのＮＣプログラム３２の実行タイミングなどを制御できる。
【００５０】
また、本実施の形態に係る制御装置１００においては、任意の軸グループに関連付けられた制御状態１７２が適宜更新される。シーケンスプログラム実行部１５０は、制御状態１７２の値を参照して、ＮＣプログラム実行部１６０でのＮＣプログラム３２の実行などを動的に制御することができる。
【００５１】
また、本実施の形態に係る制御装置１００においては、シーケンスプログラム実行部１５０は、制御状態１７２の値を参照することで、ＮＣプログラム実行部１６０の状態を把握できるので、シーケンスプログラム実行部１５０とＮＣプログラム実行部１６０との間で状態の情報を交換するためのプログラムなどを必要としない。そのため、シーケンスプログラム３０を作成する工数を低減できる。この結果、プログラム作成に係るコストを低減できるとともに、プログラム容量自体も削減できる。
【００５２】
以下、本発明のより具体的な応用例として、本実施の形態に係る制御装置１００のより詳細な構成および処理について説明する。
【００５３】
＜Ｂ．制御システムの全体構成例＞
次に、本実施の形態に係る制御装置を含む制御システム１の全体構成例について説明する。図２は、本実施の形態に係る制御システム１の全体構成例を示す模式図である。図２には、本実施の形態に係る制御装置１００を中心とした制御システム１を示す。
【００５４】
制御装置１００は、各種の設備や装置などの制御対象を制御する産業用コントローラに相当する。制御装置１００は、後述するような制御演算を実行する一種のコンピュータであり、典型的には、ＰＬＣ（プログラマブルコントローラ）として具現化されてもよい。制御装置１００は、フィールドネットワーク２を介して各種のフィールドデバイス５００と接続されてもよい。制御装置１００は、フィールドネットワーク２などを介して、１または複数のフィールドデバイス５００との間でデータを遣り取りする。一般的に「フィールドネットワーク」は、「フィールドバス」とも称されるが、説明の簡素化のため、以下の説明においては、「フィールドネットワーク」と総称する。すなわち、本明細書の「フィールドネットワーク」は、狭義の「フィールドネットワーク」に加えて「フィールドバス」を含み得る概念である。
【００５５】
制御装置１００において実行される制御演算は、フィールドデバイス５００において収集または生成されたデータ（入力データ）を収集する処理（入力処理）、フィールドデバイス５００に対する指令値などのデータ（出力データ）を生成する処理（演算処理）、生成した出力データを対象のフィールドデバイス５００へ送信する処理（出力処理）などを含む。
【００５６】
フィールドネットワーク２は、定周期通信を行うバスまたはネットワークを採用することが好ましい。このような定周期通信を行うバスまたはネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。データの到達時間が保証される点において、ＥｔｈｅｒＣＡＴ（登録商標）が好ましい。
【００５７】
フィールドネットワーク２には、任意のフィールドデバイス５００を接続することができる。フィールドデバイス５００は、フィールド側にある製造装置や生産ラインなどに対して何らかの物理的な作用を与えるアクチュエータ、および、フィールドとの間で情報を遣り取りする入出力装置などを含む。
【００５８】
フィールドネットワーク２を介して、制御装置１００とフィールドデバイス５００との間でデータが遣り取りされることになるが、これらの遣り取りされるデータは、数１００μｓｅｃオーダ〜数１０ｍｓｅｃオーダのごく短い周期で更新されることになる。
【００５９】
図２に示す構成例においては、制御装置１００は、ＣＮＣ工作機械５４０と、ＣＮＣ工作機械５４０に対してワークＷを供給する搬送装置５５０とを制御する。
【００６０】
ＣＮＣ工作機械５４０は、位置や速度などを指定するＮＣプログラム３２に従って、マシニングセンタなどを制御することで、任意の対象物を加工する。ＣＮＣ工作機械５４０としては、図示のものに限られず、旋盤加工、フライス盤、放電加工などの任意の加工装置に適用できる。
【００６１】
ＣＮＣ工作機械５４０および搬送装置５５０は、制御装置１００からの指令値に従って駆動される。搬送装置５５０により搬送されるワークＷは、作業台５５４の上に配置され、ＣＮＣ工作機械５４０により指定された加工が行われる。
【００６２】
図２に示す構成例においては、フィールドデバイス５００は、リモートＩ／Ｏ（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）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００８０】
図２に示す制御システム１においては、制御装置１００、サポート装置２００および表示装置４００がそれぞれ別体として構成されているが、これらの機能の全部または一部を単一の装置に集約するような構成を採用してもよい。
【００８１】
＜Ｄ．プログラム実行機構＞
次に、本実施の形態に係る制御装置１００のプログラム実行機構例について説明する。再度図１を参照して、制御装置１００は、シーケンスプログラム３０を実行するシーケンスプログラム実行部１５０と、ＮＣプログラム３２を実行する数値制御プログラム実行部１６０とを有している。
【００８２】
より具体的には、シーケンスプログラム実行部１５０は、シーケンス命令解釈部１５２と、ライブラリ１５４と、モーション指令値演算部１５６とを有している。
【００８３】
シーケンス命令解釈部１５２は、シーケンスプログラム３０に含まれるシーケンス命令を解釈し、指定されたシーケンス演算（論理演算）を実行する。ライブラリ１５４は、シーケンスプログラム３０に含まれる単純なシーケンス以外の制御命令に対応するコードを提供する。例えば、シーケンスプログラム３０は、複合的な処理が可能なファンクションブロックを用いて記述することができるような場合には、シーケンスプログラム３０を参照することで、当該ファンクションブロックを解釈して実行するために必要なコードが取得される。
【００８４】
モーション指令値演算部１５６は、シーケンスプログラム３０に含まれるモーション命令に従って指令値を算出する。モーション命令は、１つのコマンドによって複数の制御周期に亘って指令値の算出を定義しており、モーション指令値演算部１５６は、このようなモーション命令を解釈して、モーション指令値を制御周期毎に更新する。
【００８５】
シーケンスプログラム実行部１５０のシーケンス命令解釈部１５２およびモーション指令値演算部１５６により制御周期毎に算出される１または複数の指令値１８２は、共有メモリ１９０へ出力される。
【００８６】
一方、ＮＣプログラム実行部１６０は、ＮＣプログラム３２をインタプリタ方式で実行して、各モータに対する指令値を算出する。ＮＣプログラム実行部１６０による指令値の算出（更新）は、制御周期毎に繰返し実行される。このように、ＮＣプログラム実行部１６０は、シーケンスプログラム実行部１５０による指令値の算出に同期して、ＮＣプログラム３２に従う指令値を算出する。このような制御周期毎の指令値の算出を実現するために、ＮＣプログラム実行部１６０においては、指令値を算出するための中間コードが用いられる。
【００８７】
より具体的には、ＮＣプログラム実行部１６０は、インタプリタ１６２と、中間コードバッファ１６４と、ＣＮＣ指令値演算部１６８とを含む。
【００８８】
インタプリタ１６２は、ＮＣプログラム３２の少なくとも一部を解釈して、中間コード１６６を生成する。より具体的には、インタプリタ１６２は、ＮＣプログラム３２を逐次解釈して中間コード１６６を生成するとともに、生成した中間コード１６６を中間コードバッファ１６４に順次格納する。インタプリタ１６２は、ＮＣプログラム３２から中間コード１６６の生成をある程度事前に行う。そのため、中間コードバッファ１６４には、複数の中間コード１６６が格納されることもある。本実施の形態において、インタプリタ１６２は、指令値１８４を算出するための軌道を生成するため、「プランナー」と称されることもある。
【００８９】
ＣＮＣ指令値演算部１６８は、インタプリタ１６２が事前に生成した中間コード１６６に従って、制御周期毎に指令値１８４を算出する。一般的に、ＮＣプログラムに記述される命令（コード）は、逐次解釈されるために、演算周期毎に指令値１８４を算出できる保証はないが、中間コード１６６を利用することで、制御周期毎の指令値１８４の算出を実現できる。
【００９０】
インタプリタ１６２は、生成した中間コード１６６を中間コードバッファ１６４に逐次キューイングし、ＣＮＣ指令値演算部１６８は、中間コードバッファ１６４にキューイングされた順に中間コード１６６を読出す。
【００９１】
本発明の「中間コード」は、逐次解釈されるプログラム（本来的に、一定周期毎に指令値が更新されるという処理には不向きである）に従って、制御周期毎に指令値を算出するための任意の命令を包含する概念である。すなわち、中間コードは、ＣＮＣ指令値演算部１６８が制御周期毎に指令値１８４を算出できるものであれば、どのようなコードであってもよい。典型的には、「中間コード」は、１または複数の命令、あるいは、１または複数の関数を含む。
【００９２】
ＮＣプログラム実行部１６０のＣＮＣ指令値演算部１６８により制御周期毎に算出される指令値１８４は、共有メモリ１９０へ出力される。
【００９３】
＜Ｅ．中間コード＞
次に、ＮＣプログラム実行部１６０のインタプリタ１６２がＮＣプログラム３２を解釈して生成される中間コードの一例について説明する。
【００９４】
一般的に、ＮＣプログラム３２は、インタプリタ方式で逐次解釈されるコードを含んでおり、各コードを逐次解釈した場合に必要となる時間は、各コードが記述する内容に応じて変化する。すなわち、インタプリタ方式で逐次解釈されるため、制御周期毎に指令値を算出することは容易ではない。
【００９５】
そこで、本実施の形態に係る制御装置１００においては、ＮＣプログラム実行部１６０のインタプリタ１６２が、ＮＣプログラム３２に記述された１または複数のコードを解釈し、その解釈された内容に基づいて、制御周期毎に指令値を算出するための中間コード１６６を生成する。中間コード１６６は、ＮＣプログラム３２に記述された１または複数のコード毎に生成されるので、通常は、１つのＮＣプログラム３２から複数の中間コード１６６が生成される。生成される中間コード１６６は、ＮＣプログラム実行部１６０の中間コードバッファ１６４に順次キューイングされる。
【００９６】
中間コード１６６の各々においては、時間に関する変数を入力として、指令値を算出できる関数が規定されていてもよい。すなわち、中間コード１６６は、ＮＣプログラム実行部１６０のＣＮＣ指令値演算部１６８が制御周期毎に指令値を更新するための関数であってもよい。このような関数を用いることで、ＣＮＣ指令値演算部１６８は、生成される中間コード１６６を順次参照して、各制御周期における指令値を算出できる。
【００９７】
より具体的には、中間コード１６６は、時間と指令値との関係を規定する関数であってもよい。中間コード１６６を規定するための時間に関する変数としては、時刻、ある基準タイミングからの経過時間、制御周期の累積サイクル数などを用いることができる。
【００９８】
例えば、１番目の中間コード１が制御周期の１０倍分の期間に亘って指令値を規定するものであるとすると、ＮＣプログラム実行部１６０のＣＮＣ指令値演算部１６８は、中間コード１をキューイングして、１０制御周期分の期間に亘って指令値を周期的に算出する。同様に、他の中間コード２および中間コード３についても、基本的には、複数の制御周期に亘って指令値を算出できるものとなる。
【００９９】
したがって、ＮＣプログラム実行部１６０のインタプリタ１６２によるＮＣプログラム３２から中間コードの生成処理が、ＮＣプログラム実行部１６０のＣＮＣ指令値演算部１６８による指令値の演算処理に比較して、十分に先だって実行されれば、シーケンスプログラム３０に従う処理と同期して、ＮＣプログラム３２に従う処理を同期実行できる。
【０１００】
図４は、本実施の形態に係る制御装置１００における中間コードの生成例を説明するための模式図である。図４（Ａ）を参照して、ＮＣプログラム実行部１６０のインタプリタ１６２がＮＣプログラム３２を逐次実行すると、ＮＣプログラム３２に含まれる各命令が解釈される（（１）ＮＣプログラム解釈）。この命令の解釈によって、規定された軌道が内部的に生成される（（２）軌道生成（軸数分））。軸グループに属する軸の別に、軌道を生成してもよいし、軸グループに属する軸の全体の挙動を規定する軌道を生成してもよい。
【０１０１】
最終的に、インタプリタ１６２は、生成した軌道を所定の区間に分割した上で、各区間の軌道を規定する１または複数の関数（中間コード）を生成する（（３）中間コード生成（軸数分））。１または複数の関数についても、軸グループに属する軸の別に生成してもよいし、軸グループに属する軸の全体の挙動を規定する関数を生成してもよい。
【０１０２】
複数の区間を共通の中間コードで規定してもよいし、１つの区間をさらに分割してそれぞれの共通コードを生成してもよい。すなわち、ＮＣプログラム３２の命令または当該命令によって規定される軌道の区間と、生成される中間コードの数とを一致させる必要はなく、任意に生成すればよい。また、中間コード１６６の出力形態についても、要求される制御周期の時間幅などを考慮して、適宜設計されてもよい。
【０１０３】
図４（Ａ）に示すように、中間コード１６６の一例としては、時間と指令値との関係を規定する関数であってもよい。図４（Ａ）に示す例では、内部的に生成された軌道は、直線の組み合わせで規定できる。一例として、Ｘ軸に関して、直線区間毎（区間１〜区間３）の軌道を時間と速度との関係を示す関数Ｆｘ１（ｔ），Ｆｘ２（ｔ），Ｆｘ３（ｔ）を出力できる。同一の軸グループに属する他の軸（例えば、Ｙ軸およびＺ軸）についても、それぞれ同様に関数が出力されてもよい。
【０１０４】
図４（Ｂ）に示すように、ＮＣプログラム実行部１６０のＣＮＣ指令値演算部１６８が、制御周期毎に、生成された中間コード１６６に従って指令値を算出することで、制御周期毎に指令値が算出される（（４）指令値算出（軸数分））。すなわち、各区間に対応する関数に、各制御周期の時刻を入力することで、当該時刻における指令値を一意に決定できる。何らかの軸グループが設定されている場合には、当該軸グループに属する各軸について、指令値を同期して出力することが好ましい。
【０１０５】
上述の図４には、一例として、ＣＮＣで用いられるＧコードにより記述された一例を示すが、これに限らず、任意のインタプリタ方式で実行されるプログラムであれば、どのような言語を用いてもよい。また、処理対象の言語形式に応じて、生成される中間コードの形式を異ならせてもよい。
【０１０６】
＜Ｆ．軸グループに対する指令値＞
次に、軸グループとして設定された１または複数の軸（モータ）に対して制御周期毎に算出される指令値の一例について説明する。
【０１０７】
図５は、本実施の形態に係る制御装置１００から軸グループを構成するそれぞれのモータに対する指令値の時間波形の一例を示す図である。図５に示すように、例えば、時刻ｔ１から時刻ｔ２の間において、ＣＮＣ工作機械５４０が動作する場合を考える。このような動作を実現するために、軸１〜軸３のそれぞれについての指令値（図５に示す例では、速度指令値としている）は、時刻ｔ１以前においては、いずれもゼロとなっており、また、時刻ｔ１以前においては、いずれもゼロとなっており、また、時刻ｔ２以降においても、いずれもゼロとなっている。
【０１０８】
時刻ｔ１において、それぞれの指令値に同期して変化が生じており、これによって、各軸が指定された動作を開示する。また、時刻ｔ２に近付くにつれて、各軸の指令値は徐々にゼロに向かって低減している。
【０１０９】
図５に示すように、同一の軸グループに設定される各軸（すなわち、各モータ）に対しては、互いに同期して指令値がそれぞれ与えられる。それぞれの指令値を互いに同期して与えることで、ＣＮＣ工作機械５４０に目的の動作を正確に行わせることができる。
【０１１０】
＜Ｇ．軸グループの設定手順例＞
次に、軸グループを設定するための手順の一例について説明する。典型的には、制御装置１００に接続されるサポート装置２００を用いて軸グループを設定できる。すなわち、制御装置１００には、軸グループに属する複数のモータの指定を受付けるユーザインターフェイスを提供するサポート装置が接続可能であってもよい。
【０１１１】
図６は、本実施の形態に係る制御装置１００に接続されるサポート装置２００上で提供されるユーザインターフェイス画面の一例を示す模式図である。図６を参照して、軸設定画面７００においては、軸グループの識別情報および軸グループに属する軸を設定できる。
【０１１２】
軸設定画面７００は、座標系番号入力欄７０２とを含む。座標系番号入力欄７０２には、軸グループを一意に特定するための識別番号が入力される。
【０１１３】
軸設定画面７００は、対象の軸グループに属するモータ（軸）の選択を受付けるメンバ設定欄７１４をさらに含む。メンバ設定欄７１４は、モータ構成数入力欄７０６と、論理モータ番号入力欄７０８と、構成モータ番号入力欄７１０と、割付軸入力欄７１２とを含む。
【０１１４】
モータ構成数入力欄７０６には、対象の軸グループに属する軸の数が入力される。
論理モータ番号入力欄７０８には、シーケンスプログラム３０またはＮＣプログラム３２において、各軸（モータ）を特定するための識別子（あるいは、変数）が入力される。ユーザは、プログラム上で各軸の参照を容易化できるような任意の名称を論理モータ番号入力欄７０８に入力できる。図６に示す例においては、「ＣＮＣモータＰ０」、「ＣＮＣモータＰ１」、「ＣＮＣモータＰ２」といった名称が付与されている。
【０１１５】
構成モータ番号入力欄７１０には、対象の軸グループに属する軸を特定するための、制御装置１００が管理する構成情報（コンフィギュレーション）における識別情報が入力される。図６に示す例では、構成情報上の識別子として、「ＣＮＣ＿Ｍｏｔｏｒ０００（０）」、「ＣＮＣ＿Ｍｏｔｏｒ００１（１）」、「ＣＮＣ＿Ｍｏｔｏｒ００２（２）」が設定されている。
【０１１６】
割付軸入力欄７１２には、対象の軸グループに属する各モータがＣＮＣ座標系においていずれの軸に対応するのかという情報が入力される。例えば、Ｘ−Ｙ−Ｚ座標系を想定した場合には、Ｘ軸、Ｙ軸、Ｚ軸の各々が対応するモータと関連付けられる。
【０１１７】
最終的に、作成ボタン７２０が押下されることで、軸グループならびに当該軸グループに属するモータおよび各モータに割り付けられる軸が決定する。すなわち、軸グループに属する各モータに対応する軸が割当てられることで、当該軸グループにより規定されるＣＮＣ座標系が決定される。
【０１１８】
このような軸グループの設定については、設定情報３６（図１）の少なくとも一部としてストレージ１０８などに格納されてもよい。
【０１１９】
上述の説明においては、サポート装置２００がユーザインターフェイス画面を提供する構成を例示したが、これに限らず、制御装置１００自体にユーザインターフェイス画面を提供する機能を実装してもよい。例えば、制御装置１００内にウェブサーバ機能を実装するとともに、当該ウェブサーバ機能を用いて、ユーザインターフェイス画面を提供するようにしてもよい。
【０１２０】
＜Ｈ．制御状態の状態遷移＞
上述したように、本実施の形態に係る制御装置１００は、複数のモータを含む軸グループについての制御状態１７２が管理される。以下、状態管理部１７０により管理される制御状態１７２の一例について説明する。
【０１２１】
図７は、本実施の形態に係る制御装置１００における軸グループの状態遷移の一例を示す図である。図７を参照して、軸グループの各々は、７つの状態ＳＴ１〜ＳＴ７を取り得る。任意の軸グループに属する複数のモータにより規定されるＣＮＣ座標系における動作を示す命令（以下、「ＣＮＣ座標系の動作命令」とも称す。）が与えられることで、状態が変化する。ＣＮＣ座標系の動作命令は、ＮＣプログラム実行部１６０がＮＣプログラム３２を実行することで生成されることもあるし、シーケンスプログラム３０に規定された特殊命令に従って生成されることもある。
【０１２２】
これらの状態のうち、状態ＳＴ１〜ＳＴ４は、シーケンスプログラム実行部１５０で実行されるシーケンスプログラム３０などに規定される命令に従って、ＣＮＣ座標系の動作命令などを任意に出力する場合に取り得る状態値であり、状態ＳＴ５〜ＳＴ７は、ＮＣプログラム実行部１６０においてＮＣプログラム３２が実行中において取り得る状態値である。
【０１２３】
このように、制御装置１００の状態管理部１７０は、ＮＣプログラム実行部１６０がＮＣプログラム３２を実行中において取り得る複数の状態（状態ＳＴ５〜ＳＴ７）と、ＮＣプログラム実行部１６０がＮＣプログラム３２を非実行中において取り得る複数の状態（状態ＳＴ１〜ＳＴ４）との間で、制御状態を遷移させる。以下、状態ＳＴ１〜ＳＴ７の各々について説明する。
【０１２４】
状態ＳＴ１は、「停止中（Standby）」に対応し、ＣＮＣ座標系の動作命令が実行されていない状態を示す。状態ＳＴ１は、ＮＣプログラム３２を特定のブロック行まで実行して、プログラムポイントで停止している状態も含む。
【０１２５】
状態ＳＴ２は、「動作中（Moving）」に対応し、ＣＮＣ＿ＭｏｖｅＪｏｇ（ＣＮＣ座標系動作）命令が実行中の状態を示す。実行中の命令が完了または中断すると、状態ＳＴ１へ遷移する。
【０１２６】
状態ＳＴ３は、「減速停止中（Stopping）」に対応し、ＣＮＣ＿ＣｏｏｒｄＳｔｏｐ（ＣＮＣ座標系強制停止）命令が実行中の状態を示す。ＣＮＣ＿ＣｏｏｒｄＳｔｏｐ命令に従って停止した後、Ｅｘｅｃｕｔｅ（起動）が「ＴＲＵＥ」の状態にあれば、状態ＳＴ３が維持される。
【０１２７】
状態ＳＴ４は、「エラー減速停止中（ErrorStop）」に対応し、ＣＮＣ座標系において何らか異常が発生している状態を示す。状態ＳＴ４は、ＣＮＣ＿ＣｏｏｒｄＩｍｍｅｄｉａｔｅＳｔｏｐ（ＣＮＣ座標系即停止）命令が実行されている状態、および、ＣＮＣ座標系の異常の発生によりＣＮＣ座標系が停止動作している状態を含み得る。状態ＳＴ４においては、ＣＮＣ座標系の動作命令が発行されても、動作が禁止される。
【０１２８】
状態ＳＴ５は、「実行中（Executing）」に対応し、ＣＮＣ＿ＣｏｏｒｄＣｏｎｔｒｏｌ（ＣＮＣ座標制御）命令よりＮＣプログラム３２が実行中の状態を示す。
【０１２９】
状態ＳＴ６は、「ホールド中（Hold）」に対応し、ＮＣプログラム３２のホールド（保留）による停止中の状態を示す。状態ＳＴ６は、オプショナルストップ命令、および、シングルブロック実行によるＮＣプログラム３２のサスペンド状態も含む。
【０１３０】
状態ＳＴ７は、「手動操作（ホールド中）（MovingOnHold）」に対応し、ＮＣプログラム３２のホールドによる停止中において、ＣＮＣ＿ＭｏｖｅＪｏｇ命令を実行中の状態を示す。実行中の命令が完了または中断すると、状態ＳＴ７へ遷移する。
【０１３１】
図７には、状態間の遷移に係る条件も示している。図７中の実線は、何らかの命令が実行されることに応答した遷移を示し、図７中の破線は、何らかの命令の実行完了またはその他のイベント発生による遷移を示す。
【０１３２】
例えば、状態ＳＴ２から状態ＳＴ１への遷移、および、状態ＳＴ７から状態ＳＴ６への遷移は、ＣＮＣ＿ＭｏｖｅＪｏｇ命令の実行完了により発生する。また、状態ＳＴ５，ＳＴ６，ＳＴ７から状態ＳＴ１への遷移は、ＮＣプログラム３２の実行完了により発生する。図７に示す各遷移は、図中の＊で始まる数字に対応して、以下のとおりである。
【０１３３】
＊１：いずれの状態であっても、ＣＮＣ座標系の異常発生が発生すると、状態ＳＴ４へ遷移する。
【０１３４】
＊２：ＣＮＣ＿ＣｏｏｒｄＲｅｓｅｔ（ＣＮＣ座標系リセット）命令またはＲｅｓｅｔＣＮＣＥｒｒｏｒ（リセットＣＮＣエラー）命令による異常解除により、状態ＳＴ４から状態ＳＴ１へ遷移する。
【０１３５】
＊３：ＣＮＣ＿ＣｏｏｒｄＳｔｏｐ命令の「Ｄｏｎｅ（完了）」出力が「ＴＲＵＥ」で、かつ、ＣＮＣ＿ＣｏｏｒｄＳｔｏｐ命令の「Ｅｘｅｃｕｔｅ（起動）」入力が「ＦＡＬＳＥ」である場合に、状態ＳＴ３から状態ＳＴ１へ遷移する。
【０１３６】
＊４：ＣＮＣ＿ＣｏｏｒｄＣｏｎｔｒｏｌの実行により、状態ＳＴ１から状態ＳＴ５へ遷移する。
【０１３７】
＊５：特殊命令の実行により、状態ＳＴ６から状態ＳＴ７へ遷移する。
＊６：いずれの状態であっても、ＣＮＣ＿ＣｏｏｒｄＳｔｏｐ命令が実行されると、状態ＳＴ３へ遷移する。
【０１３８】
＜Ｉ．シーケンスプログラム＞
次に、シーケンスプログラムに用いられる命令および変数の一例について説明する。
【０１３９】
（ｉ１：命令）
上述の状態遷移の説明においては、いくつかの命令に従って、状態が遷移することを説明した。この状態遷移が生じる条件として、いくつかの命令が実行される場合を示した。このような状態遷移が生じるための命令について説明する。
【０１４０】
ＣＮＣ＿ＭｏｖｅＪｏｇ（ＣＮＣ座標系動作）命令は、ＣＮＣ座標系を構成する各モータに対して任意の位置への移動を指示する。基本的には、ＣＮＣ＿ＭｏｖｅＪｏｇ命令は、ＮＣプログラム３２が実行されていない状態で実行される。
【０１４１】
ＣＮＣ＿ＣｏｏｒｄＳｔｏｐ（ＣＮＣ座標系強制停止）命令は、対象となるＣＮＣ座標系（軸グループ）に属する各モータに対して、強制的に動作停止を指示する。典型的には、ＣＮＣ＿ＣｏｏｒｄＳｔｏｐは、何らかの異常条件などと組み合わせて使用される。
【０１４２】
ＣＮＣ＿ＣｏｏｒｄＩｍｍｅｄｉａｔｅＳｔｏｐ（ＣＮＣ座標系即停止）命令、対象となるＣＮＣ座標系（軸グループ）に属する各モータに対して、強制的に動作停止を指示する。ＣＮＣ＿ＣｏｏｒｄＳｔｏｐ命令は、機械的な保護などを考慮してあるレートで指令値が低減するのに対して、ＣＮＣ＿ＣｏｏｒｄＩｍｍｅｄｉａｔｅＳｔｏｐ命令では、指令値を即座にゼロに変更する。典型的には、ＣＮＣ＿ＣｏｏｒｄＳｔｏｐは、何らかの異常条件などと組み合わせて使用される。
【０１４３】
ＣＮＣ＿ＣｏｏｒｄＣｏｎｔｒｏｌ（ＣＮＣ座標制御）命令は、ＮＣプログラム実行部１６０でのＮＣプログラム３２の実行を開始する命令である。ＣＮＣ＿ＣｏｏｒｄＣｏｎｔｒｏｌ命令に対応するファンクションブロックについて、以下説明する。
【０１４４】
ＣＮＣ＿ＣｏｏｒｄＲｅｓｅｔ（ＣＮＣ座標系リセット）命令は、対象となるＣＮＣ座標系（軸グループ）に属する各モータに対する指令値などを初期化（リセット）する命令である。
【０１４５】
ＲｅｓｅｔＣＮＣＥｒｒｏｒ（リセットＣＮＣエラー）命令は、対象となるＣＮＣ座標系（軸グループ）に発生したエラーを復帰（リセット）する命令である。
【０１４６】
このようなシーケンスプログラム３０に含まれる命令は、ファンクションブロックの形で規定されてもよい。
【０１４７】
図８は、本実施の形態に係る制御装置１００におけるＣＮＣ＿ＣｏｏｒｄＣｏｎｔｒｏｌ（ＣＮＣ座標制御）命令に対応するファンクションブロックを示す模式図である。図８を参照して、ＣＮＣ＿ＣｏｏｒｄＣｏｎｔｒｏｌ命令のファンクションブロック６００は、入出力（属性値）として、ＣＮＣ座標系特定情報６０１と、数値制御入力６０２と、数値制御出力６０３とを含む。ファンクションブロック６００は、入力として、有効化指示入力６０４（Enable）を有する。ファンクションブロック６００は、出力として、有効状態入力６０５（Enabled）と、ビジー状態入力６０６（Busy）と、エラー状態入力６０７（Error）と、エラーコード６０８（ErrorID）とを有する。
【０１４８】
ＣＮＣ座標系特定情報６０１には、対象となるＣＮＣ座標系を特定するための識別情報（図６の座標系番号入力欄７０２に設定される数値など）が指定される。
【０１４９】
数値制御入力６０２および数値制御出力６０３には、シーケンスプログラム実行部１５０とＮＣプログラム実行部１６０との間で遣り取りされるデータ群を示すオブジェクト名が指定される。数値制御入力６０２には、シーケンスプログラム実行部１５０からＮＣプログラム実行部１６０へ渡されるデータ群を格納するオブジェクトを示す変数名が指定され、数値制御出力６０３には、ＮＣプログラム実行部１６０からシーケンスプログラム実行部１５０へ渡されるデータ群を格納するオブジェクトを示す変数名が指定される。これらのオブジェクトは、一種の構造体変数となっており、複数の属性値を有することになる。シーケンスプログラム３０において、これらのオブジェクトの属性値を参照することも可能である。
【０１５０】
有効化指示入力６０４には、ＮＣプログラム実行部１６０によるＮＣプログラム３２の実行開始条件の結果が指定される。
【０１５１】
有効状態入力６０５からは、指定されたＣＮＣ座標系におけるＮＣプログラム３２の実行状態を示す値（ブール値）が出力される。ビジー状態入力６０６からは、指定されたＣＮＣ座標系がビジー状態であるか否かを示す値（ブール値）が出力される。エラー状態入力６０７からは、何らかのエラーが発生しているか否かを示す値（ブール値）が出力される。エラーコード６０８からは、何らかのエラーが発生したときに、そのエラーの内容を示すコードが出力される。
【０１５２】
（ｉ２：構造体変数）
図７に示すような軸グループの状態遷移は、軸グループを示す構造体変数のメンバとして格納および参照されてもよい。すなわち、状態管理部１７０は、制御状態の値を構造体変数のメンバとして参照可能に保持してもよい。
【０１５３】
図９は、本実施の形態に係る制御装置１００における軸グループに関連付けられた構造体変数の一例を示す図である。図９には、ＣＮＣ＿Ｃｏｏｒｄ［０］に関連付けられた構造体変数６２０の一例を示す。構造体変数６２０は、階層構造として表現することができる。一例として、構造体変数６２０は、軸グループの状態を示す階層６２２を有する。
【０１５４】
階層６２２は、図７に示す各状態に対応するメンバを含んでおり、軸グループの状態に応じて、メンバが示す値が更新される。例えば、「ＣＮＣ＿Ｃｏｏｒｄ［０］．Ｓｔａｔｕｓ．Ｓｔａｎｄｂｙ」には、対象の軸グループが停止中（Standby）である場合に、「ＴＲＵＥ」を示し、同階層の他のメンバはいずれも「ＦＡＬＳＥ」を示す。
【０１５５】
構造体変数６２０には、対応の軸グループの設定に関する情報をさらなるメンバとして有していてもよい。一例として、構造体変数６２０は、軸グループ基本設定を示す階層６２４をさらに有する。階層６２４は、対象の軸グループに関するそれぞれの設定値をメンバとして含む。各メンバが示す値を参照することで、シーケンスプログラム３０上において、対象の軸グループの設定値などを容易に参照できる。
【０１５６】
なお、図９には、説明の便宜上、階層構造として表現したが、実際の各メンバの値を保持する形態はこれに限られることなく、任意の実装を採用できる。
【０１５７】
（ｉ３：シーケンスプログラムのコード例）
次に、上述したようなファンクションブロックおよび構造体変数を用いた、シーケンスプログラムのコード例について説明する。
【０１５８】
制御装置１００のシーケンスプログラム実行部１５０は、シーケンスプログラム３０に含まれる制御状態を参照する命令に従って、状態管理部１７０が管理する制御状態の値を反映して、シーケンスプログラム３０に従う演算結果を算出する。すなわち、シーケンスプログラム３０の実行中において、任意の軸グループの制御状態を参照することができ、その参照した制御状態の値に基づいて、予め規定した処理を選択的に実行することができる。
【０１５９】
図１０は、本実施の形態に係る制御装置１００において実行されるシーケンスプログラム３０のコード例を示す図である。図１０に示す、シーケンスプログラム３０のコード６３０は、ＮＣプログラム３２に従うＣＮＣ工作機械に対する制御、および、ＣＮＣ工作機械と協調動作するロボットなどのモーション駆動装置に対する制御を実行する場合を想定している。
【０１６０】
より具体的には、コード６３０は、ＣＮＣ＿ＣｏｏｒｄＣｏｎｔｒｏｌ命令のファンクションブロック６４０と、ファンクションブロック６４０の有効化指示入力（Enable）に入力される論理ロジックとを含む。ファンクションブロック６４０は、例えば、ＣＮＣ＿Ｃｏｏｒｄ［０］に対応するＣＮＣ座標系（軸グループ）に対して、所定のＮＣプログラム３２に従う制御を開始するための命令である。
【０１６１】
ファンクションブロック６４０の有効化指示入力に入力される論理ロジックは、対象の軸グループの状態が「停止中（Standby）」であることを示す接点６４２と、ファンクションブロック６４０が有効状態（Enabled）であることを示す接点６４４との並列回路である。この論理ロジックは、いわゆる自己保持回路となっている。すなわち、ファンクションブロック６４０は、対象の軸グループの状態が停止中（Standby）であることを起動条件とし、ファンクションブロック６４０が有効状態（Enabled）を運転継続条件とする。
【０１６２】
接点６４２は、対象の軸グループを示す構造体変数の状態を示すメンバ（属性）を参照することで容易に規定することができる。接点６４４は、ファンクションブロック６４０からの出力フラグの値を参照することで容易に規定できる。
【０１６３】
コード６３０は、さらに、ＭＣ＿ＧｒｏｕｐＳｔｏｐ命令のファンクションブロック６５０と、ファンクションブロック６５０の起動指令入力（Execute）に入力される論理ロジックとを含む。ファンクションブロック６５０は、ロボットなどの対象のモーション駆動装置に対して動作を停止するための命令である。
【０１６４】
ファンクションブロック６５０の起動指令入力には、ＣＮＣ＿Ｃｏｏｒｄ［０］に対応するＣＮＣ座標系（軸グループ）が「エラー減速停止中（ErrorStop）」である場合に、「ＴＲＵＥ」が入力される。すなわち、対象のＣＮＣ座標系（軸グループ）に何らかのエラーが発生した場合には、対象のモーション駆動装置に対しても同時に動作を停止させるための指令を発行することができる。
【０１６５】
このように、ＣＮＣ工作機械とロボットとを協調動作させる場合などにおいて、一方の装置での異常発生による停止に応答して、他方の装置についても停止させるためのプログラムを容易に作成できる。
【０１６６】
以上のように、本実施の形態に従う制御装置１００においては、変数を規定することで、対象のＣＮＣ座標系（軸グループ）の状態を容易に参照できるので、ＣＮＣ工作機械およびそれに関連する装置を制御するプログラムの開発工数などを低減できる。
【０１６７】
＜Ｊ．プログラムの実行動作例＞
次に、本実施の形態に係る制御装置１００におけるプログラムの実行動作例について説明する。
【０１６８】
図１１は、本実施の形態に係る制御装置１００におけるプログラムの実行動作例を示すタイムチャートである。図１１には、各制御周期における、主たる構成要素として、シーケンスプログラム実行部１５０と、ＮＣプログラム実行部１６０のインタプリタ１６２およびＣＮＣ指令値演算部１６８と、状態管理部１７０と、共有メモリ１９０とにおける処理を示す。
【０１６９】
図１１を参照して、ある制御周期の開始タイミングが到来すると、まず、入出力リフレッシュ処理が実行される（図１に示す入出力リフレッシュ処理部１８０）（ステップＳ１０）。続いて、シーケンスプログラム実行部１５０がシーケンスプログラム３０を制御周期毎に実行する処理が実行される。この例においては、シーケンスプログラム実行部１５０がシーケンスプログラム３０（の一部）を実行する（ステップＳ１２）。シーケンスプログラム３０の実行より算出された指令値は共有メモリ１９０に書込まれる。
【０１７０】
ここで、シーケンスプログラム３０の途中にＮＣプログラム３２の実行開始を指示する命令が含まれているとする。シーケンスプログラム実行部１５０は、この命令に応答して、ＮＣプログラム３２の実行開始を指示する（ステップＳ１４）。すると、ＣＮＣ指令値演算部１６８は、対象となる中間コード１６６を読出し（ステップＳ１６）、ＣＮＣ指令値を算出する（ステップＳ２０）。ＣＮＣ指令値演算部１６８により算出されたＣＮＣ指令値は共有メモリ１９０に書込まれる。このように、シーケンスプログラム実行部１５０は、ＮＣプログラム３２に従って各モータに対する指令値を算出する処理を実行する。
【０１７１】
一方、状態管理部１７０は、ＣＮＣ指令値演算部１６８におけるＮＣプログラム３２の実行の状態に応じて制御状態を更新する（ステップＳ１８）。すなわち、状態管理部１７０は、軸グループに関連付けられた制御状態を管理する処理を実行する。この制御状態を管理する処理は、シーケンスプログラム３０に含まれる制御命令に従う指示、および、ＮＣプログラム３２の実行状態の少なくとも一方に基づいて、制御状態を更新する処理を含む。
【０１７２】
ＣＮＣ指令値演算部１６８によるＣＮＣ指令値の算出が完了すると、処理はシーケンスプログラム実行部１５０に戻る。そして、シーケンスプログラム実行部１５０においては、シーケンスプログラム３０の未実行部分の実行が再開される。
【０１７３】
すなわち、シーケンスプログラム実行部１５０は、共有メモリ１９０から処理に必要な変数が示す値（指令値および／または制御状態）を読出し（ステップＳ２２）、シーケンスプログラム３０を実行する（ステップＳ２４）。シーケンスプログラム３０の実行より算出された指令値は共有メモリ１９０に書込まれる。
【０１７４】
上述のステップＳ１０〜Ｓ２４の処理は、制御周期毎に実行しなければならない処理であり、次の制御周期の開始タイミングが到来するまでは、優先度が低い処理が適宜実行される。図１１に示す例では、インタプリタ１６２がＮＣプログラム３２から中間コード１６６を生成する処理を実行する（ステップＳ２６）。ステップＳ２６において生成される中間コード１６６は、次の制御周期以降において、ＣＮＣ指令値の算出に用いられる。
【０１７５】
そして、次の制御周期の開始タイミングが到来すると、再度、入出力リフレッシュ処理が実行される（ステップＳ１０）。以下は、ステップＳ１２〜Ｓ２６に類似した処理が繰返し実行される。
【０１７６】
以上のような処理手順によって、シーケンスプログラム実行部１５０においては、追加のプログラムを作成することなく、ＣＮＣ座標系（軸グループ）の制御状態を参照することができ、シーケンスプログラム３０に従う制御と、ＮＣプログラム３２に従う制御とを並列的に実行する場合に、互いのインターロックなどのプログラミングを容易に実現できる。
【０１７７】
＜Ｋ．変形例＞
上述の説明においては、シーケンスプログラム３０とＮＣプログラム３２とを実行する制御装置１００について説明したが、インタプリタ方式で記述されたプログラムであれば、どのようなプログラムについても同様に適用できる。
【０１７８】
＜Ｌ．まとめ＞
本実施の形態によれば、例えば、ＣＮＣ工作機を構成する複数のモータを各軸と規定するとともに、ＣＮＣ工作機自体を複数の軸からなる抽象化概念として変数化（ＣＮＣ変数）できる。このような変数を参照することで、シーケンスプログラム上で制御プログラミングが可能となる。
【０１７９】
より具体的には、ＣＮＣ変数を参照して、ファンクションブロック命令など起動することで、ＮＣプログラム３２の実行、停止、再開、異常停止、状態監視などの処理をシーケンスプログラム上で実現できる。
【０１８０】
ＣＮＣ変数が示す制御状態を参照するようなプログラムは、他のＣＮＣ工作機械に対するプログラムと共通化できる部分が多い（例えば、初期化処理や異常処理など）。そのため、再利用性を高めることができる。
【０１８１】
従来の構成においては、ＣＮＣ工作機械を制御する専用装置と、ＣＮＣ工作機械の周辺に配置される搬送・組立などの処理を制御するＰＬＣとは、互いに独立している。専用装置により制御されるＣＮＣ工作機械の状態については、ＰＬＣにおいて専用のプログラムを記述するとともに、ハードウェアを用いたインターフェイスについても用意しなければならない。
【０１８２】
これに対して、本実施の形態によれば、ＣＮＣ工作機械に対する制御については、従来の専用装置と同様のＮＣプログラムを用いて規定するとともに、ＣＮＣ工作機械の周辺に配置される装置に対する制御については、シーケンスプログラムを用いて規定できる。さらに、ＣＮＣ工作機械と周辺機器との間の協調動作については、上述したような制御状態を参照することで、容易にプログラミングできる。その結果、システム全体の開発工数を削減できる。さらに、複数のＣＮＣ工作機械が存在した場合であっても、プログラムの裁量性が高いので、処理を共通化することで、プログラムの開発工数およびプログラム容量を削減できる。
【０１８３】
＜Ｍ．付記＞
上述したような本実施の形態は、以下のような技術思想を含む。
［構成１］
複数のモータ（５２２）を制御可能な制御装置（１００）であって、
シーケンスプログラム（３０）を制御周期毎に実行する第１のプログラム実行部（１５０）と、
数値制御プログラム（３２）に従って各モータに対する指令値を算出する第２のプログラム実行部（１６０）と、
前記複数のモータのうち予め指定された複数のモータからなるグループに関連付けられた制御状態（１７２）を管理する状態管理部（１７０）とを備え、
前記シーケンスプログラムは、前記第２のプログラム実行部での前記数値制御プログラムの実行処理を制御するための制御命令（６４０）を含み、
前記第１のプログラム実行部は、前記シーケンスプログラムに含まれる制御命令に従って、前記第２のプログラム実行部での前記数値制御プログラムの実行に係る指示を与え、
前記状態管理部は、前記第１のプログラム実行部からの指示、および、前記第２のプログラム実行部における前記数値制御プログラムの実行状態の少なくとも一方に基づいて、前記制御状態を更新する、制御装置。
［構成２］
前記第１のプログラム実行部は、前記シーケンスプログラムに含まれる前記制御状態を参照する命令（６４２，６５２）に従って、前記状態管理部が管理する前記制御状態の値を反映して、前記シーケンスプログラムに従う演算結果を算出する、構成１に記載の制御装置。
［構成３］
前記状態管理部は、前記制御状態の値を構造体変数（６２０）のメンバとして参照可能に保持する、構成１または２に記載の制御装置。
［構成４］
前記構造体変数は、対応のグループの設定に関する情報をさらなるメンバとして有している、構成３に記載の制御装置。
［構成５］
前記状態管理部は、前記第２のプログラム実行部が前記数値制御プログラムを実行中において取り得る複数の状態（ＳＴ５〜ＳＴ７）と、前記第２のプログラム実行部が前記数値制御プログラムを非実行中において取り得る複数の状態（ＳＴ１〜ＳＴ４）との間で、前記制御状態を遷移させる、構成１〜４のいずれか１項に記載の制御装置。
［構成６］
前記状態管理部が管理する前記制御状態の値を保持する共有メモリ（１９０）をさらに備える、構成１〜５のいずれか１項に記載の制御装置。
［構成７］
前記シーケンスプログラムに含まれる制御命令は、ファンクションブロックの形で規定される、構成１〜６のいずれか１項に記載の制御装置。
［構成８］
前記制御装置には、前記グループに属する複数のモータの指定を受付けるユーザインターフェイス（７００）を提供するサポート装置（２００）が接続可能になっている、構成１〜７のいずれか１項に記載の制御装置。
［構成９］
前記制御状態は、前記グループに含まれる複数のモータをまとめた単一の状態を示す、構成１〜８のいずれか１項に記載の制御装置。
［構成１０］
複数のモータを制御可能な制御装置における制御方法であって、
シーケンスプログラムを制御周期毎に実行するステップ（Ｓ１２，Ｓ１４，Ｓ２２，Ｓ２４）と、
数値制御プログラムに従って各モータに対する指令値を算出するステップ（Ｓ１６，Ｓ２０）と、
前記複数のモータのうち予め指定された複数のモータからなるグループに関連付けられた制御状態を管理するステップ（Ｓ１８）とを備え、
前記シーケンスプログラムは、前記数値制御プログラムの実行処理を制御するための制御命令を含み、
前記数値制御プログラムの実行は、前記シーケンスプログラムに含まれる制御命令に従う指示によって制御され、
前記制御状態を管理するステップは、前記シーケンスプログラムに含まれる制御命令に従う指示、および、前記数値制御プログラムの実行状態の少なくとも一方に基づいて、前記制御状態を更新するステップを含む、制御方法。
【０１８４】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１８５】
１  制御システム、２  フィールドネットワーク、６  上位ネットワーク、３０  シーケンスプログラム、３２  数値制御プログラム（ＮＣプログラム）、３４  システムプログラム、３６  設定情報、１００  制御装置、１０２  プロセッサ、１０４  チップセット、１０６  主メモリ、１０８  ストレージ、１１０  上位ネットワークコントローラ、１１２  ＵＳＢコントローラ、１１４  メモリカードインターフェイス、１１６  メモリカード、１２０  内部バスコントローラ、１２２  Ｉ／Ｏユニット、１３０  フィールドネットワークコントローラ、１５０  シーケンスプログラム実行部、１５２  シーケンス命令解釈部、１５４  ライブラリ、１５６  モーション指令値演算部、１６０  数値制御プログラム実行部（ＮＣプログラム実行部）、１６２  インタプリタ、１６４  バッファ、１６６  中間コード、１６８  指令値演算部、１７０  状態管理部、１７２  制御状態、１８０  入出力リフレッシュ処理部、１８２，１８４  指令値、１９０  共有メモリ、２００  サポート装置、３００  サーバ装置、４００  表示装置、５００  フィールドデバイス、５１０  リモートＩ／Ｏ装置、５２０，５３０  サーボドライバ、５２２，５３２  サーボモータ、５４０  工作機械、５５０  搬送装置、５５４  作業台、７００  軸設定画面、Ｗ  ワーク。
【図１】
2019053397.tif 000003
【図２】
2019053397.tif 000004
【図３】
2019053397.tif 000005
【図４】
2019053397.tif 000006
【図５】
2019053397.tif 000007
【図６】
2019053397.tif 000008
【図７】
2019053397.tif 000009
【図８】
2019053397.tif 000010
【図９】
2019053397.tif 000011
【図１０】
2019053397.tif 000012
【図１１】
2019053397.tif 000013
【手続補正書】
【提出日】平成30年2月5日(2018.2.5)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０１７０
【補正方法】変更
【補正の内容】
【０１７０】
ここで、シーケンスプログラム３０の途中にＮＣプログラム３２の実行開始を指示する命令が含まれているとする。ＮＣプログラム実行部１６０は、この命令に応答して、ＮＣプログラム３２の実行開始を指示する（ステップＳ１４）。すると、ＣＮＣ指令値演算部１６８は、対象となる中間コード１６６を読出し（ステップＳ１６）、ＣＮＣ指令値を算出する（ステップＳ２０）。ＣＮＣ指令値演算部１６８により算出されたＣＮＣ指令値は共有メモリ１９０に書込まれる。このように、ＮＣプログラム実行部１６０は、ＮＣプログラム３２に従って各モータに対する指令値を算出する処理を実行する。
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図１１
【補正方法】変更
【補正の内容】
【図１１】
2019053397.tif 000014