(57)【要約】【課題】対象の挙動の正確な推定と対象の制御プログラムの提示とを行う。【解決手段】複数対象それぞれの制御プログラムであって、対応する対象の挙動を制御する複数命令を含む制御プログラムと、ディスプレイ（３９）を制御する表示制御部（１５）と、各対象の挙動を推定するプログラムであって、各対象の制御プログラムが有する複数命令を含むエミュレータプログラムを実行する実行部と、各対象のエミュレータプログラムの実行により推定される各対象の挙動を３次元仮想空間に描画する描画データを生成する描画データ生成部と、を備え、表示制御部は、複数対象それぞれの制御プログラムのうちの少なくとも１つの複数命令の表示と、描画データに従う各対象の挙動を表す描画とを同一の画面において行うよう、ディスプレイを制御する。【選択図】図５
2019036014.tif 000002
【特許請求の範囲】
【請求項１】
複数対象それぞれの制御プログラムであって、対応する前記対象の挙動を制御する複数命令を含む制御プログラムを格納する格納部と、
ディスプレイを制御する表示制御部と、
各前記対象の挙動を推定するプログラムであって、前記各対象の前記制御プログラムが有する前記複数命令を含むエミュレータプログラムを実行する実行部と、
前記各対象のエミュレータプログラムの実行により推定される前記各対象の挙動を３次元仮想空間に描画する描画データを生成する描画データ生成部と、を備え、
前記表示制御部は、
前記複数対象それぞれの制御プログラムのうちの少なくとも１つの前記複数命令の表示と、前記描画データに従う各対象の挙動を表す描画とを同一の画面において行うよう、前記ディスプレイを制御する、情報処理装置。
【請求項２】
前記実行部は、予め定められた共通の周期で、前記各対象のエミュレータプログラムを実行する、請求項１に記載の情報処理装置。
【請求項３】
前記表示制御部は、
前記画面における前記少なくとも１つの制御プログラムの前記複数命令のうち、前記実行部による実行中の命令の表示態様を、他の命令とは異ならせるよう、前記ディスプレイを制御する、請求項１または２に記載の情報処理装置。
【請求項４】
前記各対象の描画データは、当該対象の前記３次元仮想空間における位置を示すデータを含み、
前記各対象の前記描画データが示す当該対象の前記３次元仮想空間における位置を検証する検証部をさらに、備え、
前記表示制御部は、
前記検証の結果が予め定められた条件を満たすとき、前記実行中の命令の表示態様を、他の命令とは異ならせるよう、前記ディスプレイを制御する、請求項２または３に記載の情報処理装置。
【請求項５】
前記予め定められた条件は、
前記３次元仮想空間における各対象の位置間の相対的な関係が特定位置関係を示すとの条件を含む、請求項４に記載の情報処理装置。
【請求項６】
前記相対的な位置関係が前記特定位置関係を示すことは、前記位置間の距離が特定距離を示すことを含む、請求項５に記載の情報処理装置。
【請求項７】
前記検証の結果が予め定められた条件を満たすとき、前記実行部は前記各対象のエミュレータプログラムの実行を停止する、請求項４から６のいずれか１項に記載の情報処理装置。
【請求項８】
前記検証の結果が予め定められた条件を満たすとき、前記表示制御部は、前記描画データに従う各対象の描画を停止するよう、前記ディスプレイを制御する、請求項４から７のいずれか１項に記載の情報処理装置。
【請求項９】
前記予め定められた共通の周期を示す信号を発生する周期生成部を、さらに備え、
前記検証の結果が前記予め定められた条件を満たすとき、前記周期生成部は前記信号の発生を停止する、請求項４から８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記各対象の前記制御プログラムのうち少なくとも１つのプログラム言語は、他の対象に対応の前記制御プログラムのプログラム言語とは相違する、請求項１から９のいずれか１項に記載の情報処理装置。
【請求項１１】
前記少なくとも１つの制御プログラムのプログラム言語は、逐次実行型言語を含む、請求項１０に記載の情報処理装置。
【請求項１２】
前記少なくとも１つの制御プログラムのプログラム言語は、サイクリック実行型言語を含む、請求項１０または１１に記載の情報処理装置。
【請求項１３】
前記情報処理装置は、
当該情報処理装置に対するユーザの入力を受付ける受付部と、
前記受付部により受付けた入力に基づき、前記格納部に格納された各対象の前記制御プログラムを編集する編集部を、さらに備える、請求項１から１２のいずれか１項に記載の情報処理装置。
【請求項１４】
複数対象それぞれの制御プログラムであって、対応する前記対象の挙動を制御する複数命令を含む制御プログラムを、情報処理装置が処理する方法であって、
各前記対象の挙動を推定するプログラムであって、前記各対象の前記制御プログラムが有する前記複数命令を含むエミュレータプログラムを実行するステップと、
前記各対象のエミュレータプログラムの実行により推定される前記各対象の挙動を３次元仮想空間に描画する描画データを生成するステップと、
前記複数対象それぞれの制御プログラムのうちの少なくとも１つの前記複数命令の表示と、前記描画データに従う各対象の挙動を表す描画とをディスプレイの同一の画面において行うよう、前記ディスプレイを制御するステップと、を備える、情報処理方法。
【請求項１５】
請求項１４の記載の情報処理方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、情報処理装置、情報処理方法およびプログラムに関し、特に、制御対象となる複数の機械の挙動を推定する情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
ＦＡ（Factory  Automation）分野では、様々な自動制御技術が広く利用されている。このような自動制御技術が適用されるシステムの設計または検討の段階においては、システムの性能を予め評価する必要がある。このようなニーズに対して、特開２０１７−９７４２６号公報（特許文献１）は、システムの挙動を推定し、挙動を再現するユーザインターフェイス画面で備えるシミュレーション装置を開示する。
【０００３】
また、特開２０１７−１０２６２０号公報（特許文献２）は、仮想機械が基準動作を行う時の画像である基準画像と、仮想機械が実動作を行うときの画像である実画像のシミュレーションデータを生成する監視装置を開示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７−９７４２６号公報
【特許文献２】特開２０１７−１０２６２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
生産ラインに備えられるＦＡに関連した実機の制御プログラムを設計する場合、ユーザは、制御プログラムの実行により制御される機械の挙動を検証し、検証結果に基づき制御プログラムを修正する。このような検証は、実機を使うことで容易に確認することができるが、実機を使用できない場合、ユーザは実機の制御プログラムの実行に従う挙動を模擬するためのプログラムを実行し、その実行結果から検証を行う。このような場合、より正確に推定したい、および推定の結果に照らして、当該実機の制御プログラムを速やかに確認したいとの要望がある。特許文献１と２に開示された技術は、これら要望に応えることができない。それゆえに、対象の挙動の正確な推定と対象の制御プログラムの提示とを行うことが望まれる。
【課題を解決するための手段】
【０００６】
この開示のある局面にかかる情報処理装置は、複数対象それぞれの制御プログラムであって、対応する対象の挙動を制御する複数命令を含む制御プログラムを格納する格納部と、ディスプレイを制御する表示制御部と、各対象の挙動を推定するプログラムであって、各対象の制御プログラムが有する複数命令を含むエミュレータプログラムを実行する実行部と、各対象のエミュレータプログラムの実行により推定される各対象の挙動を３次元仮想空間に描画する描画データを生成する描画データ生成部と、を備える。表示制御部は、複数対象それぞれの制御プログラムのうちの少なくとも１つの複数命令の表示と、描画データに従う各対象の挙動を表す描画とを同一の画面において行うよう、ディスプレイを制御する。
【０００７】
上記の実行部は、予め定められた共通の周期で、各対象のエミュレータプログラムを実行してもよい。
【０００８】
上記の表示制御部は、画面における少なくとも１つの制御プログラムの複数命令のうち、実行部による実行中の命令の表示態様を、他の命令とは異ならせるよう、ディスプレイを制御してもよい。
【０００９】
上記の情報処理装置では、各対象の描画データは、当該対象の３次元仮想空間における位置を示すデータを含み、各対象の描画データが示す当該対象の３次元仮想空間における位置を検証する検証部をさらに、備え、表示制御部は、検証の結果が予め定められた条件を満たすとき、実行中の命令の表示態様を、他の命令とは異ならせるよう、ディスプレイを制御するようにしてもよい。
【００１０】
上記の予め定められた条件は、３次元仮想空間における各対象の位置間の相対的な関係が特定位置関係を示すとの条件を含んでもよい。
【００１１】
上記の相対的な位置関係が特定位置関係を示すことは、位置間の距離が特定距離を示すことを含んでもよい。
【００１２】
上記の検証の結果が予め定められた条件を満たすとき、実行部は各対象のエミュレータプログラムの実行を停止してもよい。
【００１３】
上記の検証の結果が予め定められた条件を満たすとき、表示制御部は、描画データに従う各対象の描画を停止するよう、ディスプレイを制御してもよい。
【００１４】
上記の情報処理装置は、予め定められた周期を示す信号を発生する周期生成部を、さらに備え、検証の結果が予め定められた条件を満たすとき、周期生成部は信号の発生を停止してもよい。
【００１５】
上記の各対象の制御プログラムのうち少なくとも１つのプログラム言語は、他の対象に対応の制御プログラムのプログラム言語とは相違してもよい。
【００１６】
上記の少なくとも１つの制御プログラムのプログラム言語は、逐次実行型言語を含んでよい。
【００１７】
上記の少なくとも１つの制御プログラムのプログラム言語は、サイクリック実行型言語を含んでよい。
【００１８】
上記の情報処理装置は、当該情報処理装置に対するユーザの入力を受付ける受付部と、受付部により受付けた入力に基づき、格納部に格納された各対象の制御プログラムを編集する編集部を、さらに備えてよい。
【００１９】
この開示の他の局面では、複数対象それぞれの制御プログラムであって、対応する対象の挙動を制御する複数命令を含む制御プログラムを、情報処理装置が処理する方法が提供される。
【００２０】
この方法は、各対象の挙動を推定するプログラムであって、各対象の制御プログラムが有する複数命令を含むエミュレータプログラムを実行するステップと、各対象のエミュレータプログラムの実行により推定される各対象の挙動を３次元仮想空間に描画する描画データを生成するステップと、複数対象それぞれの制御プログラムのうちの少なくとも１つの複数命令の表示と、描画データに従う各対象の挙動を表す描画とをディスプレイの同一の画面において行うよう、ディスプレイを制御するステップと、を備える。
【００２１】
この開示のさらに他の局面では、上記に述べた方法をコンピュータに実行させるためのプログラムが提供される。
【発明の効果】
【００２２】
この開示によれば、各対象の制御プログラムの複数命令の表示と、これら複数命令を含むエミュレータプログラムの実行による各対象の推定された挙動を表す描画とが同一の画面において行われる。したがって、エミュレータプログラムの実行より対象の挙動をより正確に描画して提示することが可能となる。また、ユーザに対し、エミュレートされている制御プログラムの複数命令を当該挙動の描画がなされる画面と同一画面で提示することが可能となる。
【図面の簡単な説明】
【００２３】
【図１】実施の形態１にかかる生産ラインに備えられるオンライン制御システム１の構成例を示す模式図である。
【図２】ロボット３００の各軸の目標位置を説明する図である。
【図３】実施の形態１にかかるロボット３００の各アームに相当する軸の３次元仮想空間における位置を算出する過程を模式的に示す図である。
【図４】実施の形態１にかかる情報処理装置１００の構成を概略的に示す図である。
【図５】実施の形態１にかかるオフラインデバッグシステム２０の機能の構成例を、周辺部と関連づけて説明する図である。
【図６】図５のプログラム実行部３１の機能の構成例を示す図である。
【図７】実施の形態１にかかる仮想時刻によりエミュテータの同期を説明する図である。
【図８】実施の形態１にかかるモーション命令の一例を説明する図である。
【図９】実施の形態１にかかるモーション命令ＤＢ３６１の概要を示す図である。
【図１０】実施の形態１にかかる表示画面の一例を示す図である。
【図１１】実施の形態１にかかる表示画面の一例を示す図である。
【図１２】実施の形態１にかかるオフラインデバッグシステム２０の処理を説明する図である。
【図１３】実施の形態１にかかるオフラインデバッグシステム２０の処理を説明する図である。
【図１４】実施の形態１にかかる表示画面の他の例を示す図である。
【図１５】実施の形態１にかかる表示画面の他の例を示す図である。
【図１６】実施の形態１にかかる表示画面の他の例を示す図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。なお、以下で説明される各実施の形態および各変形例は、適宜選択的に組み合わされてもよい。
【００２５】
＜実施の形態１＞
［Ａ．システム構成］
実施の形態１に従う情報処理装置は、生産ラインに備えられる実機である機械の挙動を推定する。このように挙動の推定がなされる対象の機械として、実施の形態１では、可動のステージ４００と、ステージ４００上のワークＷを掴み移動させるロボット３００を例示するが、対象の機械はこれらに限定されない。これら対象の機械が実機として備えられた環境の一例を説明する。
【００２６】
図１は、実施の形態１にかかる生産ラインに備えられるオンライン制御システム１の構成例を示す模式図である。図１を参照して、オンライン制御システム１（以下、単に制御システム１という）は、情報処理装置１００、コントローラの一例であるＰＬＣ（Programmable  Logic  Controller）２００、ロボット３００を制御するロボットコントローラ３１０およびサーボドライバ１３Ｅ，１３Ｆを含む。情報処理装置１００は、たとえば、ＰＣ（Personal  Computer）、タブレット端末などの端末装置を含む。サーボドライバ１３Ｅ，１３Ｆ（以下、「サーボドライバ１３」とも総称する。）は、対応するサーボモータ１４Ｅ，１４Ｆを駆動する。
【００２７】
ＰＬＣ２００には、フィールドネットワークＮＷ１を介して情報処理装置１００が接続されている。フィールドネットワークＮＷ１には、たとえば、ＥｔｈｅｒＮＥＴ（登録商標）が採用される。但し、フィールドネットワークＮＷ１は、ＥｔｈｅｒＮＥＴに限定されず、任意の通信手段が採用され得る。たとえば、コントローラ２００および情報処理装置１００は、信号線で直接接続されてもよい。情報処理装置１００は、ロボット３００およびステージ４００の機械を制御するための制御プログラムを設計する環境を提供する。情報処理装置１００上で設計された制御プログラムは、フィールドネットワークＮＷ１を介してＰＬＣ２００に送られる。
【００２８】
ＰＬＣ２００は、設計された制御プログラムを実行し、実行の結果に従ってロボットコントローラ３１０またはサーボドライバ１３に対してそれぞれ目標値を与えることで、ロボット３００およびステージ４００を含む対象を制御する。
【００２９】
ＰＬＣ２００には、ロボットコントローラ３１０およびサーボドライバ１３が接続されている。ＰＬＣ２００、ロボットコントローラ３１０およびサーボドライバ１３は、フィールドネットワークＮＷ２を介してデイジーチェーンで接続されている。フィールドネットワークＮＷ２には、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）が採用される。但し、フィールドネットワークＮＷ２は、ＥｔｈｅｒＣＡＴに限定されず、任意の通信手段が採用され得る。また、接続態様は、上記のデイジーチェーンに限定されず、ツリー接続またはスター接続のような他の接続態様であってもよい。
【００３０】
ロボット３００とステージ４００は、相互に連携しながらワークＷを移動させる。なお、ここでは説明を簡単にするために、ワークＷの移動を説明するが、移動に限定されない。例えば、ステージ４００上におけるロボット３００によるワークＷの加工であってもよい。
【００３１】
図１では、ロボット３００のドライブ装置の一例として、ロボット３００に設けられるサーボモータ１４Ａ〜１４０Ｄ（以下、「サーボモータ１４」とも総称する。）と、サーボモータ１４を駆動するロボットコントローラ３１０を例示する。同様に、ステージ４００のドライブ装置の一例として、ステージ４００に設けられるサーボモータ１４Ｅ，１４Ｆ（以下、「サーボモータ１４」とも総称する。）を駆動するサーボドライバ１３を例示する。ロボット３００は駆動されることにより、その挙動は、直交するＸ軸，Ｙ軸およびＺ軸の３次元空間内で変化する。ステージ４００は駆動されることにより、その挙動はロボット３００と同じ３次元空間内において規定されるが、Ｘ軸およびＹ軸の平面内において規定される。
【００３２】
ドライブ装置としては、サーボドライバに限定されることなく、被駆動装置であるモータに応じて、対応するドライブ装置が採用される。たとえば、誘導モータまたは同期モータを駆動する場合には、ドライブ装置として、インバータドライブなどが採用されてもよい。
【００３３】
ロボットコントローラ３１０は、ロボット３００のサーボモータ１４を駆動する。サーボモータ１４の回転軸にはエンコーダ（図示しない）が配置されている。当該エンコーダは、サーボモータ１４のフィードバック値として、サーボモータの位置（回転角度）、回転速度、累積回転数などをロボットコントローラ３１０へ出力する。
【００３４】
同様に、サーボドライバ１３は、ステージ４００のサーボモータ１４を駆動する。サーボモータ１４の回転軸にはエンコーダ（図示しない）が配置されている。当該エンコーダは、サーボモータ１４のフィードバック値として、サーボモータの位置（回転角度）、回転速度、累積回転数などをサーボドライバ１３へ出力する。
【００３５】
［Ｂ．ロボットとステージの制御］
制御システム１におけるロボット３００とステージ４００の制御について説明する。ロボット３００とステージ４００は、上記に述べたように、複数の駆動軸により移動可能な可動部を有する。これらの各駆動軸は、サーボモータによって駆動される。具体的には、ロボット３００は、サーボモータ１４（サーボモータ１４Ａ〜１４Ｄ）が回転することで駆動される複数のアームを有している。サーボモータ１４は、それぞれ回転することで、対応する各アームを駆動する。ロボットコントローラ３１０がサーボモータ１４の駆動を制御することで、各アームが３次元に駆動される。このような各アームの駆動により、ロボット３００の挙動が実現される。同様に、ステージ４００も、サーボモータ１４（サーボモータ１４Ｅ，１４Ｆ）が回転することでステージ４００は移動する。この移動量（移動の向き、距離）は、サーボモータ１４の回転量（回転の向き、角度）により決まる。このようなサーボモータ１４の駆動により、ステージ４００の挙動が実現される。
【００３６】
実施の形態１では、ロボット３００の各アームは、仮想的な軸が対応付けられ、各軸の位置からロボット３００の位置が決まる。図２は、ロボット３００の各軸の目標位置を説明する図である。図２を参照して、各軸の目標位置は、ロボット３００の挙動が目標となる挙動（以下、目標挙動ともいう）を示すように、時系列に変化する。具体的には、ロボット３００の各アームは、時系列に変化する図２の目標位置に従い駆動されることにより、各アームの移動の速度および軌道は、目標に従う速度および軌道となるように変化する。
【００３７】
図２に示すような、ロボット３００の目標挙動を規定するための目標位置は、ＰＬＣ２００に予め格納されている。ロボットコントローラ３１０は、ＰＬＣ２００から目標位置を受信し、受信した目標位置に基づき各サーボモータの回転量を決定し、決定した回転量を指定する指令値を、サーボモータ１４の各サーボモータに対し出力する。
【００３８】
図３は、実施の形態１にかかるロボット３００の各アームに相当する軸の３次元仮想空間における位置を算出する過程を模式的に示す図である。図３を参照して、サーボモータ１４Ａの回転量をαＡ、サーボモータ１４Ｂの回転量をαＢ、サーボモータ１４Ｃの回転量をαＣおよびサーボモータ１４Ｄの回転量をαＤとして示す。サーボモータ回転量（αＡ、αＢ、αＣ、αＤ）に対し、所定関数を用いて演算を施すことで、サーボモータ回転量（αＡ、αＢ、αＣ、αＤ）を図３に示すｘｙｚの３次元仮想空間における位置に変換することができる。図３では、例えばワークＷをキャッチするアームの軸の３次元仮想空間における位置である３次元座標Ｐ（ｘ、ｙ、ｚ）を示すが、他の軸の対応する３次元座標も同様に算出することができる。したがって、各アームの３次元座標Ｐ（ｘ、ｙ、ｚ）の時系列の変化によりロボッと３００の３次元仮想空間における挙動を示すことができる。
【００３９】
また、実施の形態１では、説明を簡単にするために、ワークＷをキャッチするアームの軸の３次元座標Ｐ（ｘ、ｙ、ｚ）を、後述する３次元仮想空間における「干渉」を検出するために用いる。なお、「干渉」の検出には、他の軸の３次元座標Ｐ（ｘ、ｙ、ｚ）を用いてもよく、または２つ以上の軸の３次元座標Ｐ（ｘ、ｙ、ｚ）の組合せを用いてもよい。
【００４０】
ステージ４００も、ロボット３００と同様に、ステージ４００の挙動が目標挙動を示すように、ステージ４００の移動の速度および軌道は目標位置を示すように時系列に変化する。ステージ４００の目標位置は、ＰＬＣ２００に予め格納されている。
【００４１】
サーボドライバ１３は、ＰＬＣ２００からの目標位置に基づき各サーボモータの回転量を決定し、決定した回転量を指定する指令値を、サーボモータ１４の各サーボモータに対し出力する。このような各サーボモータの回転量に対し、所定関数を用いて演算を施すことで、ステージ４００についても、ロボッと３００と同じ３次元仮想空間における３次元座標Ｑ（ｘ、ｙ、０）に変換することができる。このような３次元座標Ｑ（ｘ、ｙ、０）の時系列の変化によりステージ４００の３次元仮想空間における挙動を示すことができる。
【００４２】
なお、ここでは、ステージ４００は平面内の挙動を示すことから、３次元座標Ｑのｚ軸は値０で固定としているが、他の固定値であってもよい。
【００４３】
［Ｃ．シミュレーション装置の構成］
図４は、実施の形態１にかかる情報処理装置１００の構成を概略的に示す図である。図１の制御システム１において、ロボット３００およびステージ４００が実機としてＰＬＣ２００により制御される環境をオンラインとした場合、図４の情報処理装置１００は、制御システム１をオフラインでシミュレーションする機能を備える。
【００４４】
情報処理装置１００は、ＣＰＵ（Central  Processing  Unit）２とプログラムおよびデータを格納する格納部を備えて、プログラムに従って動作するコンピュータシステムである。格納部は、ＲＯＭ(Read  Only  Memory）３、ＲＡＭ（Random  Access  Memory）４およびＨＤＤ（Hard  Disk  Drive）５を含む。情報処理装置１００は、さらに、通信インタフェース６およびＩ／Ｏ（Input/Output）インタフェース７を含む。また、情報処理装置１００は、キーボード３７およびディスプレイ３８を含む。キーボード３７は、ユーザからの情報処理装置１００に対する指示を含む入力を受付ける。当該入力を受付けるために、情報処理装置１００は、マウス等の他のデバイスを含んでもよい。
【００４５】
通信インタフェース６は、情報処理装置１００がＰＬＣ２００を含む外部の機器と通信するためのインタフェースである。
【００４６】
Ｉ／Ｏインタフェース７は、情報処理装置１００への入力または情報処理装置１００からの出力のインタフェースである。図４に示すように、Ｉ／Ｏインタフェース７は、キーボード３７とディスプレイ３８とに接続され、ユーザがキーボード３７に対して入力した情報を受け付ける。また、情報処理装置１００の処理結果を、ディスプレイ３８へ出力する。ディスプレイ３８は、ＬＣＤ（Liquid  Crystal  Display）または有機ＥＬ（Electro  Luminescence）を含み、情報処理装置１００から出力される映像信号または画像信号に従う映像または画像を表示する。
【００４７】
情報処理装置１００の格納部は、制御システム１においてロボット３００およびステージ４００をオンラインで制御するための制御プログラム、制御システム１をシミュレーションするプログラム、ロボット３００およびステージ４００の挙動をオフラインでエミュレートするエミュレーションプログラム、およびこれらプログラムに関連するデータを格納する。
【００４８】
上記のロボット３００の制御プログラムは、ロボット３００の挙動を制御する複数の命令を含み、同様に、ステージ４００の制御プログラムは、ステージ４００の挙動を制御する複数の命令を含む。ロボット３００のエミュレーションプログラムは、ロボット３００の制御プログラムに含まれる上記の複数命令を有している。同様に、ステージ４００のエミュレーションプログラムは、ステージ４００の制御プログラムに含まれる上記の複数命令を有している。したがって、ＣＰＵ２によりエミュレーションプログラムが実行されることにより、ロボット３００およびステージ４００の制御プログラムの複数命令をオフラインで実行されて、エミュレーションプログラムの実行結果は、制御プログラムの実行結果を再現した内容を表すことが可能となる。
【００４９】
情報処理装置１００は、後述するオフラインデバッグシステム２０により実現される制御プログラムのデバッグ装置としても機能する。オフラインデバッグシステム２０が起動されると、情報処理装置１００は制御システム１の動作をシミュレートする。このシミュレーションにおいて、情報処理装置１００は、ロボット３００とステージ４００の制御プログラムをエミュレートするためのエミュレーションプログラムを実行する。
【００５０】
また、情報処理装置１００は、ロボット３００とステージ４００のエミュレーションプログラムを実行するとき、同一画面において、エミュレーション結果であるロボット３００およびステージ４００の挙動を描画し、ロボット３００およびステージ４００の制御プログラムの複数命令を表示するよう、ディスプレイ３８を制御する。
【００５１】
これにより、ユーザは、同一画面において、制御プログラムをエミュレートすることにより推定されたロボット３００およびステージ４００の挙動と、当該挙動を実現しているロボット３００およびステージ４００の各制御プログラムの命令とを確認することができる。
【００５２】
［Ｄ．シミュレーション装置の構成と機能］
図５は、実施の形態１にかかるオフラインデバッグシステム２０の機能の構成例を、周辺部と関連づけて説明する図である。図６は、図５のプログラム実行部３１の機能の構成例を示す図である。情報処理装置１００は、制御システム１をシミュレーションする機能を備える。このシミュレーションの機能は、ロボット３００およびステージ４００の制御プログラムのデバックを含む編集機能も提供する。
【００５３】
図５を参照して、情報処理装置１００は、情報処理装置１００の各部を制御する制御部１０、キーボード３７からのユーザ入力を受付ける入力受付部１１、およびオフラインデバッグシステム２０を備える。オフラインデバッグシステム２０にはディスプレイ３８が接続される。ディスプレイ３８は、表示制御データに従い表示するべきイメージデータを生成し、イメージデータに従いディスプレイ３８を駆動するディスプレイドライバ３９を含む。制御部１０は、ＣＰＵ２がシミュレーション制御プログラム２１を実行することにより実現される。制御部１０は、入力受付部１１を介し受付けたユーザの指示に従い、オフラインデバッグシステム２０を制御する。
【００５４】
オフラインデバッグシステム２０は、プログラムおよびデータを含んで構成されて、制御部１０からの指令に従い、ＣＰＵ２がプログラムを実行することにより、オフラインデバッグシステム２０の機能が実現される。また、オフラインデバッグシステム２０の処理結果は、ディスプレイ３８が有するディスプレイドライバ３９に表示制御データとして出力される。ディスプレイドライバ３９は、表示制御データに従うイメージデータに従いディスプレイ３８を駆動する。これにより、ディスプレイ３８の画面には、情報処理装置１００およびオフラインデバッグシステム２０の処理の結果を表す画像が表示される。
【００５５】
（Ｄ-１．オフラインデバッグシステム２０の構成）
オフラインデバッグシステム２０の構成を説明する。オフラインデバッグシステム２０の各部を実現するためのプログラムおよびデータは、ＲＯＭ３、ＲＡＭ４およびＨＤＤ３４を含む格納部に格納されている。
【００５６】
図５を参照して、オフラインデバッグシステム２０は、上記に述べたエミュレーションプログラムを実行するプログラム実行部３１、描画データを生成する描画データ生成部１９、表示制御データに基づきディスプレイドライバ３９を制御する表示制御部１５、オフラインデバッグシステム２０の各部を同期させるための周期的な信号ＳＴを生成する周期生成部１８、および制御プログラムを編集するプログラム編集部３４を備える。
【００５７】
また、図５を参照して、オフラインデバッグシステム２０は、プログラム実行部３１に関連してプログラムの実行途中の結果を示す途中データ２４６を含む。さらに、描画データ生成部１９に関連して軌跡データ２５１，２５２および画像データ２５３，２５４を含む。また、オフラインデバッグシステム２０は、プログラム編集部３４に関連して、ロボット３００の制御プログラムであるロボットプログラム３８１、ステージ４００の制御プログラムであるＰＬＣプログラム３７１、およびモーション命令ＤＢ（データベースの略）３６１を含む。ロボットプログラム３８１とＰＬＣプログラム３７１は格納部１２に格納されている。図５の各部および各部を実現するためのプログラムおよびデータは、ＲＯＭ３、ＲＡＭ４およびＨＤＤ３４に格納されている。ＣＰＵ２は、格納されているプログラムを実行することにより、各部の機能を実現する。
【００５８】
（Ｄ−２．プログラム実行部によるエミュレーション）
プログラム実行部３１は、ＰＬＣプログラム３７１およびロボットプログラム３８１をエミュレートするエミュレータプログラムを実行するエンジンに相当する。図６を参照して、プログラム実行部３１は、ＰＬＣ２００およびサーボドライバ１３の制御プログラムをエミュレートするＰＬＣエミュレータ２６０、ロボットコントローラ３１０の制御プログラムをエミュレートするロボットエミュレータ２７０および共有メモリ１２Ａを含む。ＰＬＣエミュレータ２６０とロボットエミュレータ２７０の間のデータ交換は共有メモリ１２Ａを用いて実現する。共有メモリ１２Ａを介したＰＬＣエミュレータ２６０とロボットエミュレータ２７０の間のデータ交換は、ＰＬＣ２００、サーボドライバ１３およびロボットコントローラ３１０の間のフィールドネットワークＮＷ２のＥｔｈｅｒＣＡＴを介した通信におけるデータ交換に相当する。
【００５９】
ＰＬＣエミュレータ２６０は、ロボット３００およびステージ４００の挙動を推定するプログラムであって、ＰＬＣプログラム３７１およびロボットプログラム３８１に含まれた複数の命令を含むエミュレーションプログラムに相当する。これら複数の命令は、ＰＬＣプログラム３７１に含まれたステージ４００の挙動を制御するためのモーション命令およびモーション演算命令を含む命令群３７１Ａと、ロボットプログラム３８１に含まれたロボット３００の挙動を制御するための複数のロボット命令を含む命令群３８１Ａを含む。命令群３８１Ａおよび命令群３７１Ａは、四則演算命令のような他の命令も含み得る。後述するように、ＰＬＣプログラム３７１はラダー言語で記載されたプログラムであり、ロボットプログラム３８１はインタプリタ言語で記載されたプログラムである。したがって、プログラム実行部３１は、これら異なる言語のプログラムを実行するためのエミュレータ実行エンジンを備えている。
【００６０】
ＰＬＣエミュレータ２６０のこれら命令群３８１Ａおよび３７１Ａの各命令が、共有メモリ１２Ａの入力データ１４４に基づき実行される毎に、サーボモータのための上記に述べた指令値が生成されて、共有メモリ１２Ａに出力データ１４５として格納される。
【００６１】
また、ロボットエミュレータ２７０は、ロボットコントローラ３１０のプログラムに含まれる命令群を含むエミュレーションプログラムに相当する。この命令群は、共有メモリ１２Ａの出力データに基づき、ロボット３００の目標の軌道を算出するための１以上の軌道演算命令２７１と、算出された軌道に基づき各軸の指令値を算出する１以上の機構演算命令２７２を含む。
【００６２】
ロボットエミュレータ２７０の命令群が、共有メモリ１２Ａの出力データ１４５に基づき実行されると、ロボット３００の各軸のための上記に述べた指令値が生成されて、共有メモリ１２Ａに入力データ１４４として格納される。
【００６３】
このように、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０により生成される指令値は、ロボット３００とステージ４００の推定された挙動を示すことになる。また、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０は、それぞれ、他方が算出した指令値に基づき、新たな指令値を算出する。したがって、このように算出される指令値に基づく挙動は、ロボット３００とステージ４００の動作における相互の関連性を示し得る。
【００６４】
（Ｄ−３．描画データの生成）
図５を参照して、描画データ生成部１９は、軌跡計算プログラム３０３および検証プログラム３０４を含む３Ｄ（3-dimensions）視覚化プログラム３０を実行する。３Ｄ視覚化プログラム３０を実行することにより、描画データ生成部１９は、軌跡データ２５１，２５２と、ロボット３００およびステージ４００を表す画像データ２５３および２５４とに基づいて、ロボット３００およびステージ４００のエミュレートされた挙動をディスプレイ３８画面に描画する描画データ３０１，４０１を生成する。ロボット３００およびステージ４００を表す画像データ２５３および２５４は、ＣＡＤ（computer-aided  design）データなどで示される。
【００６５】
軌跡計算プログラム３０３は、図６の共有メモリ１２Ａの入力データ１４４に所定関数を用いて演算を施すことで、３次元座標Ｐ（ｘ，ｙ，ｚ）および３次元座標Ｑ（ｘ，ｙ，０）を算出し、軌跡データ２５１，２５２を取得する。このように軌跡データは、エミュレーションにより推定されたロボット３００，ステージ４００の３次元仮想空間における挙動を示す情報である。描画データ生成部１９は、算出された軌跡データ２５１とロボット３００の画像データ２５３に従い、ロボット３００の挙動を３次元仮想空間内で立体的に描画するための描画データ３０１を生成し、表示制御部１５に出力する。
【００６６】
同様に、軌跡計算プログラム３０３は、軌跡データ２５２に所定関数を用いて演算を施すことで、時系列の３次元座標Ｑ（ｘ，ｙ，０）を算出し、軌跡データ２５２として格納する。このように軌跡データ２５２は、エミュレーションにより推定されたステージ４００の挙動を３次元仮想空間内で立体的に描画するため情報である。描画データ生成部１９は、算出された軌跡データ２５２とステージ４００の画像データ２５４に従い、ステージ４００の挙動を、ロボット３００と同じ３次元仮想空間内で立体的に描画するための描画データ４０１を生成し、表示制御部１５に出力する。
【００６７】
（Ｄ−４．挙動を示す情報の検証）
描画データ生成部１９の検証プログラム３０４は、上記に述べた「検証」を実施するためのプログラムである。描画データ生成部１９は、検証プログラム３０４を実行することにより、軌跡データ２５１が示すロボット３００の３次元仮想空間内における位置を示す位置情報である座標Ｐ（ｘ，ｙ，ｚ）と、軌跡データ２５２が示すステージ４００の当該３次元仮想空間内における位置を示す位置情報である座標Ｑ（ｘ，ｙ，０）を検証する。描画データ生成部１９は、検証の結果が予め定められた条件を満たすと判定したとき、表示制御部１５とプログラム編集部３４に通知ＮＴを出力する。
【００６８】
実施の形態１では、上記の予め定められた条件は、時系列の各時間におけるロボット３００の位置を示す座標Ｐ（ｘ，ｙ，ｚ）と、当該時間に対応したステージ４００の位置を示す座標Ｑ（ｘ，ｙ，０）の両位置間の相対的な関係が、特定位置関係を示すとの条件を含む。特定位置関係は、エミュレータにより推定された３次元仮想空間におけるロボット３００の挙動がステージ４００の挙動と「干渉」し合うような両者の位置関係を含む。例えば、３次元仮想的空間における座標Ｐ（ｘ，ｙ，ｚ）と座標Ｑ（ｘ，ｙ，０）との両者の距離が、例えば閾値以下の距離を含む特定距離であることを含む。または、座標Ｐ（ｘ，ｙ，ｚ）と次位の座標Ｐ（ｘ，ｙ，ｚ）を結ぶ軌跡が、対応の座標Ｑ（ｘ，ｙ，０）と次位の座標（ｘ，ｙ，０）を結ぶ軌跡と交差したことを含む。なお、特定位置関係は、これらの位置関係に限定されない。
【００６９】
（Ｄ−５．同期処理）
実施の形態１にかかる周期生成部１８は、信号ＳＴを生成する仮想時刻生成プログラム２９を実行する。周期生成部１８は、生成された信号ＳＴを他の各部に出力する。各部は、周期生成部１８から信号ＳＴが出力される周期に同期して処理またはプログラムを実行する。これにより、オフラインデバッグシステム２０の各部の処理またはプログラムは、信号ＳＴの周期で、または当該周期に同期して実行される。信号ＳＴの周期は、図１の制御システム１のフィールドネットワークＮＷ２の通信周期（以下、「制御周期」ともいう。）に相当する。なお、フィールドネットワークＮＷ２の通信周期は変更可能であり、信号ＳＴの周期は変更後のフィールドネットワークＮＷ２の通信周期に同期するように変更され得る。
【００７０】
図７は、実施の形態１にかかる仮想時刻によりエミュレータの同期を説明する図である。図７を参照して、周期生成部１８は、ＣＰＵ２が有するタイマ（図示せず）の出力に基づき、例えば１ｍｓｅｃの周期を有した信号ＳＴを生成し出力する。プログラム実行部３１は、信号ＳＴの共通の周期に従い、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０とに指令値の計算を開始させる。これにより、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０は信号ＳＴが示す共通の周期に同期して周期的に実行される。計算を開始すると、ＰＬＣエミュレータ２６０は入力データ１４４に基づき指令値を算出し、またロボットエミュレータ２７０は出力データ１４５に基づき指令値を算出する。プログラム実行部３１は、周期毎に、算出された指令値を共有メモリ１２Ａに出力（書込）する。
【００７１】
これにより、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０の両者において指令値の演算に要する計算時間にバラツキがあっても、言い換えるとＰＬＣプログラム３７１とロボットプログラム３８１の間で計算時間が異なっても、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０は、それぞれ、算出した指令値を出力するタイミングを制御周期に合わせることができる。したがって、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０の両者は、各制御周期において、直前の制御周期で算出された指令値を用いて新たな指令値を算出することが可能になる。
【００７２】
上記のＰＬＣプログラム３７１とロボットプログラム３８１の間で計算時間のバラツキは、例えばＰＬＣプログラム３７１とロボットプログラム３８１のプログラム言語の種類に基づく。例えば、実施の形態１では、後述するように、ロボットプログラム３８１は逐次実行型の言語で記載されて、ＰＬＣプログラム３７１はサイクリック実行型言語で記載されており、両プログラム間では、１命令の実行完了に要する時間が相違する。
【００７３】
（Ｄ−６．プログラム編集）
プログラム編集部３４は、ＰＬＣプログラムエディタ３２およびロボットプログラムエディタ３３および命令抽出部３６を含む。ＰＬＣプログラムエディタ３２およびロボットプログラムエディタ３３は、それぞれ、ロボットプログラム３８１およびＰＬＣプログラム３７１を、制御部１０が入力受付部１１を介して受付けたユーザ入力に従い編集（変更、追加、削除など）するエディタプログラムに相当する。
【００７４】
また、プログラム編集部３４は、格納部からロボットプログラム３８１とＰＬＣプログラム３７１を読出し、読出された各プログラムを表示制御部１５に出力する。実施の形態１では、ロボットプログラム３８１とＰＬＣプログラム３７１は、ソースプログラムであり、例えばテキストデータで表示される。
【００７５】
命令抽出部３６は、モーション命令ＤＢ３６１を作成する。
また、プログラム編集部３４は、描画データ生成部１９から上記の検証の結果を示す通知ＮＴを入力すると、変更指令Ｒ１を表示制御部１５に出力する。変更指令Ｒ１は、通知ＮＴを入力した時点で抽出された命令（実行中の命令）の表示態様の変更を行わせる指令を示す。
【００７６】
（Ｄ−７．表示制御部１５の処理）
表示制御部１５は、描画表示制御部１６およびプログラム表示制御部１７を含む。描画表示制御部１６は、描画データ生成部１９からのロボット３００の挙動を示す描画データ３０１およびステージ４００の挙動を示す描画データ４０１から、ロボット３００，ステージ４００の挙動を示す画像を表示させる表示制御データを生成し、ディスプレイドライバ３９に出力する。また、これと同時に、プログラム表示制御部１７は、ディスプレイ３８に、プログラム編集部３４からのロボットプログラム３８１およびＰＬＣプログラム３７１のデータが示す複数命令を表示させる表示制御データを生成し、ディスプレイドライバ３９に出力する。
【００７７】
これにより、ディスプレイ３８の同一画面には、ロボット３００の挙動を描画する画像と、ステージ４００の挙動を描画する画像と、ロボットプログラム３８１の複数命令を表示する画像と、ＰＬＣプログラム３７１の複数命令を表示する画像とが同時に表示される。
【００７８】
さらに、「干渉」が検出されたときは、ディスプレイ３８の同一画面には、「干渉」の検出を表す画像が表示される。したがって、情報処理装置１００はディスプレイ３８に表示する画像により、エミュレートにより推定されるロボット３００の挙動とステージ４００の挙動が「干渉」しあうか否かと、「干渉」した時期（タイミング）を報知することが可能となる。
【００７９】
また、プログラム表示制御部１７の表示態様変更部３５は、プログラム編集部３４からの変更指令Ｒ１を入力したとき、実行中の命令の表示態様の変更を行わせる表示制御データを出力する。
【００８０】
これにより、情報処理装置１００は、エミュレートされているロボットプログラム３８１およびＰＬＣプログラム３７１のそれぞれの複数命令を、ＰＬＣエミュレータ２６０により実行中の命令を指示しながら表示することができる。また、「干渉」が検出されたときに実行中の命令を、他の命令とは表示態様を異ならせて、表示することができる。したがって、ユーザが、ロボットプログラム３８１およびＰＬＣプログラム３７１の命令のうちから、「干渉」の要因となり得る命令を特定するのを支援することができる。
【００８１】
（Ｄ−８．「干渉」を検出した場合の処理の停止）
実施の形態１では、「干渉」が検出されたとき、描画データ生成部１９は通知ＮＴを各部に出力する。
【００８２】
プログラム実行部３１は、通知ＮＴを入力したとき、エミュレータの実行を停止する。エミュレータの実行停止により、軌跡データ２５１，２５２の更新は停止し、ディスプレイ３８におけるロボット３００およびステージ４００の挙動を示す画像の更新は停止する。また、エミュレータの実行停止により、実行中命令の新たな抽出も停止する。
【００８３】
また、通知ＮＴを入力したとき、表示制御部１５は、ディスプレイ３８の表示を停止させる。これにより、たとえ、エミュレータの実行が停止しないとしても、ディスプレイ３８の画面を、「干渉」が検出された時点の静止画の画面とすることができる。
【００８４】
また、通知ＮＴを入力したとき、周期生成部１８は、仮想時刻生成プログラム２９の実行を停止する。これにより、オフラインデバッグシステム２０の各部への信号ＳＴの出力は停止し、各部は、信号ＳＴに同期した処理を停止する。
【００８５】
なお、「干渉」を検出した場合の処理の停止は、上記に述べた停止の処理の２種類以上を組合わせて実施してもよい。
【００８６】
［Ｅ．モーション命令ＤＢの作成］
図８は、実施の形態１にかかるモーション命令の一例を説明する図である。図９は、実施の形態１にかかるモーション命令ＤＢ３６１の概要を示す図である。実施の形態１では、例えば、ロボットプログラム３８１はインタプリタ言語のような逐次実行型の言語で記載されて、ＰＬＣプログラム３７１はラダー言語またはストラクチャードテキスト言語のようなサイクリック実行型言語で記載される。なお、各プログラムを記載する言語は、これらに限定されない。
【００８７】
ロボットプログラム３８１とＰＬＣプログラム３７１は、言語の特性により、命令の１ステップを実行するのに要する時間は異なる。ＰＬＣエミュレータ２６０は、逐次実行型のロボットプログラム３８１の命令群３８１Ａを、先頭から順番に命令を実行する。この場合、信号ＳＴが示す１周期で１命令を実行し、１命令の実行が完了するまでは、次の命令を実行せず、完了したとき信号ＳＴの次の周期で次の命令を実行する。したがって、命令群３８１Ａのうち実行中の命令および「干渉」が検出されたときに実行されていた命令を容易に特定することができる。
【００８８】
これに対し、ＰＬＣエミュレータ２６０は、サイクリック実行型のＰＬＣプログラム３７１の複数命令を、信号ＳＴの１周期でプログラムの先頭、すなわち複数命令の先頭から終わりまで実行するが、各命令は、１〜Ｎ（≧２）の周期で実行を完了する。したがって、「干渉」が検出された場合に、ＰＬＣエミュレータ２６０が命令群３８１Ａの実行を停止した場合、常に、命令群３８１Ａの先頭命令で停止することとなる。したがって、命令群３８１Ａのうち、「干渉」が検出されたときに実行中の命令を特定するための処理が必要となる。実施の形態１では、命令抽出部３６により、当該処理のためにモーション命令ＤＢ３６１の作成が実施される。
【００８９】
図８を参照して、ＰＬＣプログラム３７１に含まれるモーション命令は、ＰＬＣ機構名Ｂ１、命令の宣言名Ｂ２、当該モーション命令の実行状態を示す変数Ｂ３およびＢ４を含む。変数Ｂ３は、モーション命令が実行開始されているか否かを示す変数「Execute」に対応し、変数Ｂ４は、モーション命令の実行が完了しているか否かを示す変数「Done」に対応する。
【００９０】
命令抽出部３６は、モーション命令ＤＢ３６１を作成する。具体的には、命令抽出部３６は、ＰＬＣプログラム３７１を検索し複数のモーション命令を抽出する。命令抽出部３６は、抽出された各モーション命令について、図９に示すように、宣言名Ｂ２、Location（ロケーション）情報３６２、および変数「Execute」と変数「Done」の値３６３を関連付けて有するレコードＲを生成し、生成したレコードＲをモーション命令ＤＢ３６１に格納する。
【００９１】
レコードＲのLocation情報３６２は、ＰＬＣプログラム３７１における当該モーション命令の相対的な位置を一意的に示す情報であって、例えばＵＲＩ（Uniform  Resource  Identifier)を含む。実施の形態１では、ＰＬＣプログラム３７１がプログラム表示制御部１７を介してディスプレイ３８に表示されるとき、各モーション命令のディスプレイ３８の画面における位置は、Location情報３６２に基づき特定することができる。
【００９２】
［Ｆ．ＰＬＣエミュレータで実行中の命令の検出処理］
実施の形態１では、ＰＬＣプログラム３７１およびロボットプログラム３８１の命令のうち、ＰＬＣエミュレータ２６０で実行中の命令を検出し、検出の結果を表示する。
【００９３】
ＰＬＣプログラム３７１に関しては、この検出のために、レコードＲの変数「Execute」と変数「Done」の値３６３が用いられる。具体的には、レコードＲが作成されたとき、値３６３には初期値（例えば、Null）が設定される。プログラム編集部３４は、各レコードＲの変数「Execute」と変数「Done」の値３６３の書込み、および読出しを実施する。具体的には、プログラム編集部３４のＰＬＣプログラムエディタ３２は、信号ＳＴの周期毎に、途中データ２４６から、各モーション命令の変数「Execute」と変数「Done」の値を検出し、検出された値を、モーション命令ＤＢ３６１の当該モーション命令に対応のレコードＲの値３６３を書込む。この途中データ２４６には、ＰＬＣエミュレータ２６０による命令群３７１Ａおよび３８１Ａの実行の結果が信号ＳＴの周期に同期して書込まれる。途中データ２４６が示す実行の結果は、各モーション命令の変数「Execute」と変数「Done」の値を含む。
【００９４】
ＰＬＣエミュレータ２６０は、各モーション命令の変数「Execute」と変数「Done」の値３６３を、当該モーション命令が実行開始されたとき、‘true’と‘false’に設定して、その後、当該モーション命令の実行が完了すると変数「Execute」と変数「Done」の値３６３を両方とも‘true’に設定する。したがって、途中データ２４６から、変数「Execute」と変数「Done」の値３６３が‘true’と‘false’を示すモーション命令を抽出することにより、実行中（実行は開始されたが、未だ完了していない）のモーション命令を判断することができる。
【００９５】
ＰＬＣプログラムエディタ３２は、制御周期に基づく信号ＳＴが示す周期に同期して、途中データ２４６が示す各モーション命令の変数「Execute」および変数「Done」の値を、モーション命令ＤＢ３６１における当該モーション命令に対応の値３６３に書込む。これにより、モーション命令ＤＢ３６１の各モーション命令の変数「Execute」および変数「Done」の値３６３を、信号ＳＴが示す周期毎に、最新の値を示すように、更新することができる。例えば、図９のモーション命令ＤＢ３６１において、矢印で示すモーション命令は、実行中の命令を示す。
【００９６】
また、ロボットプログラム３８１で実行中の命令を検出するために、ＰＬＣエミュレータ２６０は、信号ＳＴの周期毎にカウントアップするカウンタを有している。具体的には、ＰＬＣエミュレータ２６０は、命令群３８１Ａの先頭の命令から、信号ＳＴの周期毎に、１命令ずつ実行するとともに、カウンタをカウントアップする。したがって、ロボットプログラムエディタ３３は、このカウンタの値から、ロボットプログラム３８１の命令のうち、ＰＬＣエミュレータ２６０で実行中の命令を特定することができる。なお、ロボットプログラム３８１の命令のうち、ＰＬＣエミュレータ２６０で実行中の命令を特定する方法は、このカウンタを用いる方法に限定されない。
【００９７】
［Ｇ．表示画面の例示］
図１０と図１１は、実施の形態１にかかる表示画面の一例を示す図である。オフラインデバッグシステム２０は、図１０と図１１に示す画像をディスプレイ３８に表示する。具体的には、図１０の画面は、ＰＬＣプログラム３７１の命令を表示する領域Ｅ１、ロボットプログラム３８１の命令を表示する領域Ｅ２、画像を描画する領域Ｅ３、および領域Ｅ４を含む。領域Ｅ３は、３次元仮想空間におけるロボット３００およびステージ４００の推定された挙動を示す画像ＯＢ１，ＯＢ２が表示される。領域Ｅ４は、エミュレーション対象となるＰＬＣプログラムおよびロボットプログラムの組のユーザによる選択を受付けるための領域である。具体的には、領域Ｅ４には、エミュレーション候補であるＰＬＣプログラムおよびロボットプログラムの名称の一覧が表示される。ユーザは、一覧からエミュレーション対象となるＰＬＣプログラムおよびロボットプログラムの組を指定することで、選択することができる。プログラム実行部３１は、選択されたプログラムについて、エミュレーションを実行する。
【００９８】
なお、上記に述べたＰＬＣプログラムの選択は、領域Ｅ４を用いた方法に限定されない。例えば、ユーザは、オフラインデバッグシステム２０がディスプレイ３８を介して表示する「タスク設定画面」から、ＰＬＣプログラムを選択的に指定することができる。また、上記に述べたロボットプログラムの選択も、領域Ｅ４を用いた方法に限定されない。ＰＬＣプログラムの命令からロボットプログラムを呼び出すことで選択することができる。
【００９９】
制御部１０は、入力受付部１１を介して受付けた上記の選択内容をプログラム編集部３４に出力する。プログラム編集部３４は、制御部１０からの選択内容に基づき、ユーザが指定したロボットプログラム３８１とＰＬＣプログラム３７１を格納部１２から読出し、表示制御部１５に出力する。プログラム表示制御部１７は、プログラム編集部３４からのロボットプログラム３８１とＰＬＣプログラム３７１に基づく表示制御データを生成し、ディスプレイ３８に出力する。ディスプレイドライバ３９は、表示制御データに基づきロボットプログラム３８１とＰＬＣプログラム３７１を、それぞれ領域Ｅ１と領域Ｅ２に表示する。この領域Ｅ１と領域Ｅ２には、ロボットプログラム３８１とＰＬＣプログラム３７１のソースコードのようなユーザが編集可能なコードが表示される。
【０１００】
ＰＬＣエミュレータ２６０により、ロボットプログラム３８１とＰＬＣプログラム３７１をエミュレーション中に、「干渉」が検出された場合の表示例が図１１に示される。図１１の画面では、領域Ｅ３の画像に関連付けて「干渉」が検出された旨を示す予め定められた色のポリゴンＰＮが表示される。このポリゴンＰＮは、画像の干渉が検出された部分において表示され得る。「干渉」が検出された旨を示す画像に関連付けて表示されるマークは、上記に述べたポリゴンＰＮに限定されない。また、領域Ｅ１のＰＬＣプログラム３７１のモーション命令のうち「干渉」が検出されたときに実行中と判断された命令ＣＭ１は、他のモーション命令とは異なる予め定められた表示態様に変更されている。同様に、領域Ｅ２のロボットプログラム３８１の命令のうち「干渉」が検出されたときに実行中と判断された命令ＣＭ２も他の命令とは異なる予め定められた表示態様に変更されている。
【０１０１】
予め定められた表示態様は、例えば、反転表示、点滅表示、当該命令を指示するマーカの表示などを含む。また、図１１に示すように、「干渉」が検出されたときに実行中と判断された命令ＣＭ１および命令ＣＭ２の内容または種類を示す情報（円弧補間命令、直線補間命令など）を表示してもよい。図１１の画面から、「干渉」の要因となり得る命令、すなわちデバッグの候補となる命令の情報をユーザに提供することができる。
【０１０２】
ディスプレイ３８の画面における領域Ｅ１〜Ｅ４は、図１０または図１１の配置に限定されない。また、この配置は、ユーザの操作内容に従い変更することが可能である。
【０１０３】
［Ｈ．オフラインデバッグシステム２０の処理］
図１２と図１３は、実施の形態１にかかるオフラインデバッグシステム２０の処理を説明する図である。図１２と図１３では、オフラインデバッグシステム２０の処理が、各部間の信号の入出力関係を示すタイミングチャートと関連付けて示される。
【０１０４】
図１２を参照して、制御部１０のシミュレーション制御プログラム２１は、入力受付部１１を介してユーザから起動指令を受付けると（ステップＴ１）、起動し、モーション命令ＤＢを作成するための指令を出力する。
【０１０５】
命令抽出部３６は、シミュレーション制御プログラム２１からの指令に従い、上記に述べたモーション命令ＤＢ３６１に作成する（ステップＴ２）。具体的には、命令抽出部３６は、格納部１２のＰＬＣプログラム３７１からモーション命令を検索し、検索された各モーション命令のlocation情報を有するレコードＲを生成し、生成されたレコードＲを有するモーション命令ＤＢ３６１を作成する。
【０１０６】
制御部１０のシミュレーション制御プログラム２１は、周期生成部１８に起動指令を出力する（ステップＴ３）。周期生成部１８は起動指令に従い仮想時刻生成プログラム２９を起動する。仮想時刻生成プログラム２９は起動されると、信号ＳＴの出力を開始するとともに、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０に起動指令を出力する（ステップＴ４，Ｔ５）。
【０１０７】
プログラム実行部３１は、起動指令に従いＰＬＣエミュレータ２６０とロボットエミュレータ２７０を起動し、指令値を算出する指令値演算処理を、信号ＳＴの周期で繰返（Loop）す処理ＳＢ１を実施する。処理ＳＢ１は、図１２に示す処理ＳＢ２、ＳＢ３およびＳＢ４を含む。処理ＳＢ１は、１制御周期に１回実行される。
【０１０８】
図１３を参照して、処理ＳＢ１では、まず、制御部１０のシミュレーション制御プログラム２１は、プログラム実行部３１のエミュレータが一時停止しているかを判断する。制御部１０は、プログラム実行部３１のエミュレータの実行が停止していると判断したとき、以降の処理ＳＢ２をスキップする。これにより、処理ＳＢ１は終了し、処理ＳＢも終了する。
【０１０９】
一方、制御部１０のシミュレーション制御プログラム２１は、プログラム実行部３１によるエミュレータの実行が一時停止していない、すなわち実行中であると判断したとき、処理ＳＢ２を開始する。
【０１１０】
処理ＳＢ２では、まず、周期生成部１８の仮想時刻生成プログラム２９は、演算指令をプログラム実行部３１のＰＬＣエミュレータ２６０とロボットエミュレータ２７０に出力する。プログラム実行部３１のＰＬＣエミュレータ２６０とロボットエミュレータ２７０は、演算指令に従い各軸の指令値を算出し、入力データ１４４として共有メモリ１２Ａに格納する（ステップＳ１）。周期生成部１８の仮想時刻生成プログラム２９は、プログラム実行部３１による演算が完了すると、次の信号ＳＴの周期まで待機する（ステップＳ２）。
【０１１１】
プログラム実行部３１は、ＰＬＣエミュレータ２６０による実行途中の結果を示す途中データ２４６を、信号ＳＴの周期毎に取得し格納する。
【０１１２】
処理ＳＢ３では、描画データ生成部１９は３Ｄ視覚化プログラム３０により、描画の更新タイミングであるかを判断する。描画の更新タイミングであると判断しないときは、処理ＳＢ３をスキップする。これにより、今回の処理ＳＢは終了する。
【０１１３】
ここで、実施の形態１では、「干渉」が発生したタイミングを正確に検出するために、描画を更新する周期は制御周期に一致する。したがって、処理ＳＢ３は、各制御周期においてスキップされることなく実施される。なお、処理ＳＢ３を、制御周期のＮ（≧２）周期毎に実施する場合は、処理ＳＢ３がスキップされる周期が生じ得て、その結果、全ての周期で処理ＳＢ３を実施する場合に比較して、描画に関する負荷を軽減することができる。
【０１１４】
描画データ生成部１９は、描画の更新タイミングであると判断したとき、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０により算出された各軸の指令値を取得する（ステップＳ３）。具体的には、描画データ生成部１９は３Ｄ視覚化プログラム３０により、共有メモリ１２Ａを検索し、共有メモリ１２Ａから指令値を取得する。描画データ生成部１９は、３Ｄ視覚化プログラム３０により、指令値から軌跡データ２５１，２５２を算出し、算出された軌跡データ２５１，２５２と画像データ２５３，２５４とから描画データ３０１，４０１を生成する。描画データ生成部１９は、ディスプレイ３８の領域Ｅ３の画像を更新するために、表示制御部１５に描画データ３０１，４０１を出力する（ステップＳ４）。
【０１１５】
描画データ生成部１９は、ディスプレイ３８の領域Ｅ３の描画内容を更新するとき、上記に述べた検証を実施して、「干渉」が有るか否か判断する（ステップＳ５）。
【０１１６】
描画データ生成部１９は、「干渉」が有ると判断しないときは、次の処理ＳＢ４をスキップして、今回の処理ＳＢを終了する。一方、描画データ生成部１９は、「干渉」が有ると判断したときは、通知ＮＴを出力し、次の処理ＳＢ４を実行する。
【０１１７】
処理ＳＢ４では、描画データ生成部１９は、通知ＮＴに従い３Ｄ視覚化プログラム３０により、周期生成部１８に一時停止を通知する（ステップＳ６）。周期生成部１８は、一時停止通知を受付けると、仮想時刻生成プログラム２９の実行を停止する。これにより、信号ＳＴの出力は停止し、プログラム実行部３１のエミュレータも一時停止する。
【０１１８】
描画データ生成部１９は、実行中の命令、すなわち「干渉」が検出されたときに実行中の命令を表示する表示指令をプログラム編集部３４に出力する。プログラム編集部３４は、表示指令に従い、実行中の命令を検出し、検出された命令を表示するための変更指令Ｒ１を表示制御部１５に出力する（ステップＳ７，Ｓ８）。
【０１１９】
具体的には、プログラム編集部３４のＰＬＣプログラムエディタ３２は、描画データ生成部１９からの表示指令に基づき、モーション命令ＤＢ３６１から変数「Execute」および変数「Done」の値３６３が（‘true’，‘false’）を示すレコードＲを検索し、検索されたレコードＲのLocation情報３６２を読出す。また、プログラム編集部３４のロボットプログラムエディタ３３は、描画データ生成部１９からの表示指令に基づき、上記に述べたカウンタの値を取得する。これにより、ＰＬＣプログラム３７１およびロボットプログラム３８１の命令のうちから、「干渉」が検出されたときにＰＬＣエミュレータ２６０で実行中の命令を特定する情報が取得される。
【０１２０】
プログラム編集部３４は、「干渉」が検出されたときにＰＬＣエミュレータ２６０で実行中の命令を特定する情報（「Location情報３６２およびカウンタ値を含む情報）から、変更指令Ｒ１を生成し、プログラム表示制御部１７に出力する。
【０１２１】
プログラム表示制御部１７の表示態様変更部３５は、変更指令Ｒ１に基づく表示制御データを生成し、出力する。ディスプレイドライバ３９は、表示制御部１５からの表示制御データに従うイメージデータを生成し、イメージデータに基づきディスプレイ３８を駆動することで、表示制御データに従う画像をディスプレイ３８に表示させる。これにより、ディスプレイ３８の領域Ｅ１とＥ２で表示中のロボットプログラム３８１およびＰＬＣプログラム３７１それぞれの複数命令のうち、「干渉」が検出されたときに実行中の命令ＣＭ１，ＣＭ２の表示態様は、他の命令の態様とは異なるように変更される（図１１参照）。
【０１２２】
また、「干渉」が検出されたとき、描画表示制御部１６は、上記に述べた予め定められた色のポリゴンＰＮの表示制御データを生成し出力する。ディスプレイドライバ３９は、描画表示制御部１６からの表示制御データに従い、ディスプレイ３８の画面の領域Ｅ３のロボットプログラム３８１およびＰＬＣプログラム３７１の挙動を示す画像に関連付けて予め定められた色のポリゴンＰＮを表示する（図１１参照）。
【０１２３】
このように図１１の画面では、「干渉」が検出された時点で、エミュレータで実行中の命令ＣＭ１，ＣＭ２の表示態様は変更される。ユーザは、命令ＣＭ１とＣＭ２を、ロボットプログラム３８１およびＰＬＣプログラム３７１をデバッグするための支援情報として利用することができる。ユーザは、命令ＣＭ１とＣＭ２の情報に基づき、キーボード３７を操作して、領域Ｅ１とＥ２で表示中のロボットプログラム３８１およびＰＬＣプログラム３７１の編集（変更、追加、削除など）指示を入力する。制御部１０は、入力受付部１１を介して編集指示を受付ける。プログラム編集部３４は、制御部１０からの編集指示に基づき、ロボットプログラム３８１およびＰＬＣプログラム３７１を編集する。これにより、格納部１２のロボットプログラム３８１およびＰＬＣプログラム３７１は、「干渉」の要因となるバグが解消されるように編集（デバッグ）され得る。
【０１２４】
上記のようにデバッグされたロボットプログラム３８１およびＰＬＣプログラム３７１をプログラム実行部３１でエミュレートすることで、ユーザは、ディスプレイ３８の画面から「干渉」が解消されたことを確認できる。
【０１２５】
［Ｉ．他の表示例］
図１４、図１５および図１６は、実施の形態１にかかる表示画面の他の例を示す図である。図１４、図１５および図１６では、ロボットと、スライダの挙動をエミュレートした場合の画面を示す。図１４、図１５および図１６のロボットは、図１０，図１１に示されたロボット３００とは異なるタイプであり、またステージ４００に代えてスライダが示されるが、オフラインデバッグシステム２０の処理内容は、上記に説明したものと同様であるから、この処理内容は繰返さない。
【０１２６】
図１４では、入力受付部１１がユーザから受付けた入力内容に従い、制御部１０は、領域Ｅ４の一覧からロボットプログラム３８１とＰＬＣプログラム３７１の両方が選択された場合を示す。図１４では、制御部１０からの指示に従い、周期生成部１８は、ＰＬＣエミュレータ２６０とロボットエミュレータ２７０とを起動する（図１２のステップＴ６，Ｔ７を参照）。
【０１２７】
図１４では、領域Ｅ４からＰＬＣプログラム３７１とロボットプログラム３８１の両方が選択されたが、図１５は、領域Ｅ４の一覧からロボットプログラム３８１のみが選択された場合を示す。図１５に示すように、ディスプレイ３８の画面は、ロボットプログラム３８１を表示する領域Ｅ２とロボットとスライダの挙動を示す画像を表示する領域Ｅ３を含み、ＰＬＣプログラム３７１を表示する領域Ｅ１は省略されている。この場合、ＰＬＣプログラム３７１は非表示であっても、ＰＬＣエミュレータ２６０はロボット命令の命令群３８１ＡとＰＬＣプログラム３７１の命令群３７１Ａとを実行する。領域Ｅ３では、スライダの挙動とロボットの挙動を描画する画像が表示されて、「干渉」が検出されると、上記に述べたポリゴンＰＮ、命令ＣＭ２が表示される。
【０１２８】
なお、図１５では、ＰＬＣエミュレータ２６０はロボット命令の命令群３８１Ａのみ実行することも可能である。その場合は、領域Ｅ３では、スライダの静止画に関連付けてロボットの挙動を描画する画像が表示される。例えば、スライダの静止画の座標と描画されるロボットの座標との両位置間の相対的な関係が、特定位置関係を示すとの条件が満たされるとき「干渉」が検出されて、検出の結果である上記に述べたポリゴンＰＮ、命令ＣＭ２が表示される。
【０１２９】
図１６は、領域Ｅ４の一覧からＰＬＣプログラム３７１のみが選択された場合を示す。図１６に示すように、ディスプレイ３８の画面は、ＰＬＣプログラム３７１を表示する領域Ｅ１とロボットとスライダの挙動を示す画像を表示する領域Ｅ３を含み、ロボットプログラム３８１を表示する領域Ｅ２は省略されている。この場合、ロボットプログラム３８１は非表示であっても、ＰＬＣエミュレータ２６０はＰＬＣプログラムの命令群３８１ＡとＰＬＣプログラム３７１の命令群３７１Ａとを実行する。領域Ｅ３では、スライダの挙動とロボットの挙動を描画する画像が表示されて、「干渉」が検出されると、上記に述べたポリゴンＰＮ、命令ＣＭ１が表示される。
【０１３０】
なお、図１６では、ＰＬＣエミュレータ２６０はＰＬＣプログラムの命令群３７１Ａのみ実行することも可能である。この場合は、例えばロボットの静止画の座標と挙動が描画されるスライダの座標との両位置間の相対的な関係が、特定位置関係を示すとの条件が満たされるとき「干渉」が検出されて、検出の結果である上記に述べたポリゴンＰＮ、命令ＣＭ１が表示される。
【０１３１】
＜実施の形態２＞
図５には、情報処理装置１００のＣＰＵ２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（たとえば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）またはＦＰＧＡ（Field-Programmable  Gate  Array）など）を用いて実装してもよい。あるいは、情報処理装置１００の主要部を、汎用的なアーキテクチャに従うハードウェアを用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating  System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【０１３２】
また、情報処理装置１００は、ＣＰＵ２のような複数のプロセッサを備える場合は、図５に示す各部は、複数のプロセッサにより実行することが可能である。また、ＣＰＵ２が複数のコアを含む場合は、図５に示す各部は、ＣＰＵ２内の複数のコアにより実行することが可能である。
【０１３３】
＜実施の形態の利点＞
上記に述べた各実施の形態によれば、オフラインデバッグシステム２０は、ＰＬＣエミュレータ２６０およびロボットエミュレータ２７０の実行により推定される実機の挙動と、ＰＬＣプログラム３７１およびロボットプログラム３８１の各命令を同一画面で同時に表示させる。したがって、推定される実機の挙動を表す画像により、同一画面で表示中のＰＬＣプログラム３７１およびロボットプログラム３８１をデバッグなど編集するための支援情報を提供することが可能となる。
【０１３４】
また、ＰＬＣプログラム３７１およびロボットプログラム３８１により制御される対象の挙動の推定は、ＰＬＣプログラム３７１およびロボットプログラム３８１の命令を実行するエミュレータ（ＰＬＣエミュレータ２６０およびロボットエミュレータ２７０）によりなされるので、より正確に対象の挙動を再現（描画）することができる。
【０１３５】
また、推定される挙動において「干渉」が検出されたとき、領域Ｅ１と領域Ｅ２で表示中のＰＬＣプログラム３７１およびロボットプログラム３８１の命令のうち、その時点で、エミュレータで実行中の命令ＣＭ１，ＣＭ２は表示態様を変更して表示される。したがって、「干渉」の原因となる命令に関する情報を提供することができる。また、領域Ｅ１と領域Ｅ２におけるＰＬＣプログラム３７１およびロボットプログラム３８１において、デバッグするための的確な支援情報（プログラムの修正箇所など）を提供することができる。これにより、デバッグを含むロボット３００とステージ４００の制御プログラムの作成にかかる作業量と作業時間を削減することができる。
【０１３６】
また、上記に述べたデバッグ支援情報の提供は、実機がなくても「干渉」のタイミングを正確に再現できることによって実現される。これにより、実機がなくても正確なプログラムの作成、デバッグを実施できる環境を提供することが可能となる。
【０１３７】
また、実機がなくても正確なプログラムを作成できる環境が提供されることから、制御システム１におけるタクトタイムを正確に見積もることも可能となる。また、ＰＬＣプログラム３７１およびロボットプログラム３８１の実機によるチューニング工数を削減することもできる。
【０１３８】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１３９】
１  オンライン制御システム、１０  制御部、１１  入力受付部、１２  格納部、１２Ａ  共有メモリ、１３，１３Ｅ，１３Ｆ  サーボドライバ、１４，１４Ａ，１４Ｂ，１４Ｃ，１４Ｄ，１４Ｅ，１４Ｆ，１４０Ｄ  サーボモータ、１５  表示制御部、１６  描画表示制御部、１７  プログラム表示制御部、１８  周期生成部、１９  描画データ生成部、２０  オフラインデバッグシステム、２１  シミュレーション制御プログラム、２９  仮想時刻生成プログラム、３０  視覚化プログラム、３１  プログラム実行部、３２  ＰＬＣプログラムエディタ、３３  ロボットプログラムエディタ、３４  プログラム編集部、３５  表示態様変更部、３６  命令抽出部、３８  ディスプレイ、３９  ディスプレイドライバ、１００  情報処理装置、１４４  入力データ、１４５  出力データ、２４６  途中データ、２５１，２５２  軌跡データ、２５３，２５４  画像データ、２６０  ＰＬＣエミュレータ、２７０  ロボットエミュレータ、３００  ロボット、３０１，４０１  描画データ、３０３  軌跡計算プログラム、３０４  検証プログラム、３１０  ロボットコントローラ、３７１  ＰＬＣプログラム、３７１Ａ，３８１Ａ  命令群、３８１  ロボットプログラム、４００  ステージ、ＣＭ１，ＣＭ２  命令、ＰＮ  ポリゴン、Ｒ１  変更指令。
【図１】
2019036014.tif 000003
【図２】
2019036014.tif 000004
【図３】
2019036014.tif 000005
【図４】
2019036014.tif 000006
【図５】
2019036014.tif 000007
【図６】
2019036014.tif 000008
【図７】
2019036014.tif 000009
【図８】
2019036014.tif 000010
【図９】
2019036014.tif 000011
【図１０】
2019036014.tif 000012
【図１１】
2019036014.tif 000013
【図１２】
2019036014.tif 000014
【図１３】
2019036014.tif 000015
【図１４】
2019036014.tif 000016
【図１５】
2019036014.tif 000017
【図１６】
2019036014.tif 000018