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