(57)【要約】【課題】対象を制御する制御装置を含むシステムの挙動を推定するシミュレーションの環境を簡単に実現する。【解決手段】シミュレーション装置は、挙動を推定するシミュレーションプログラムを実行するプログラム実行手段と、システムを３次元仮想空間内に仮想的に構築するための３次元仮想化手段と、シミュレーションプログラムの実行時に参照されるデータを生成または更新するための設定を実行する設定手段と、シミュレーション装置に対するユーザ操作を受付ける受付手段と、を備え、設定手段は、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定をユーザ操作に従い選択的に実行する。【選択図】図１
2020187610.tif 000002
【特許請求の範囲】
【請求項１】
対象を制御する制御装置を含むシステムの挙動を推定するシミュレーション装置であって、
前記挙動を推定するシミュレーションプログラムを実行するプログラム実行手段と、
前記システムを３次元仮想空間内に仮想的に構築するための３次元仮想化手段と、
前記シミュレーションプログラムの実行時に参照されるデータを生成または更新するための設定を実行する設定手段と、
前記シミュレーション装置に対するユーザ操作を受付ける受付手段と、を備え、
前記設定手段は、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定を、前記ユーザ操作に従い選択的に実行する、シミュレーション装置。
【請求項２】
前記システムは、前記制御のための検出動作を実施するセンサを含み、
前記３次元仮想空間上の位置に基づく設定は、前記３次元仮想空間上に配置された前記センサに対応のオブジェクトに関連付けたデータを生成または更新するための設定を含む、請求項１に記載のシミュレーション装置。
【請求項３】
前記３次元仮想化手段は、
前記３次元仮想空間上に配置された前記センサに対応のオブジェクトを、当該３次元仮想空間に視覚化してディスプレイに描画するための描画データを生成する、請求項２に記載のシミュレーション装置。
【請求項４】
前記システムは、前記制御のための検出動作を実施するセンサを含み、
前記システムは、前記制御に関連して動作する周辺機器を含み、
前記センサの検出動作は、前記周辺機器の動作と連動し、
前記動作条件は、前記周辺機器の動作と連動する前記センサの検出動作に基づく条件を含む、請求項１から３のいずれか１項に記載のシミュレーション装置。
【請求項５】
前記設定手段が実行する前記データを生成または更新するための設定は、前記ユーザ操作により受付けたパラメータに対応するプログラムを含む、請求項１から３のいずれかに記載のシミュレーション装置。
【請求項６】
前記３次元仮想化手段は、
前記シミュレーションプログラムを実行時の前記対象の動きを、前記３次元仮想空間に視覚化してディスプレイに描画するための描画データを生成する、請求項１から５のいずれか１項に記載のシミュレーション装置。
【請求項７】
対象を制御する制御装置を含むシステムの挙動を推定するコンピュータによって実施されるシミュレーション方法であって、
前記システムを３次元仮想空間内に仮想的に構築するステップと、
シミュレーションプログラムの実行時に参照されるデータを生成または更新するための設定を実行するステップと、を備え、
前記設定を実行するステップでは、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定を、前記コンピュータに対するユーザ操作に従い選択的に実行する、シミュレーション方法。
【請求項８】
請求項７に記載のシミュレーション方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、シミュレーション装置、シミュレーション方法およびプログラムに関する。
【背景技術】
【０００２】
ＦＡ（Factory  Automation）分野では、様々な自動制御技術が広く利用されている。このような自動制御技術が適用されるシステムの設計または検討の段階においては、システムの性能を予め評価する必要がある。このようなニーズに関して、評価対象の動きをシミュレーションして得られたデータに基づき当該評価を実施する方法が提案されている。
【０００３】
例えば、特開２０１５−１７６３４０号公報（特許文献１）は、実デバイスがすべてＰＬＣ（Programmable  Logic  Controller）に接続されていない場合でも、その実デバイスに代えて実デバイスを模擬する仮想デバイスプログラムを実行することによって、ユーザプログラムにエラーがないかどうかを確かめることができる、ＰＬＣサポート装置を開示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１７６３４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
実機のＰＬＣプログラムのシミュレーションなどのように、制御対象を駆動するための駆動機器の挙動を推定するシミュレーションを実施する場合には、ＰＬＣに接続される実デバイスに代えて、ユーザは、実デバイスに対応するＩＯデータ（入出力データ）を生成または更新するための、例えばＩＯプログラムに関する設定の操作を実施する。近年は、ＰＬＣに接続されるデバイスの種類が増加する傾向にある。したがって、上記の設定操作に関して簡単操作を可能にする環境の提供が望まれている。
【０００６】
上述の特許文献１は、実デバイスに代えて仮想デバイスプログラムを実行することは開示するが、上記のニーズに応える環境の提案はなされていない。
【０００７】
本開示は、ユーザが、対象を制御する制御装置を含むシステムの挙動を推定するシミュレーションを簡単に実現することができる環境の提供を目的とする。
【課題を解決するための手段】
【０００８】
本開示に従う、シミュレーション装置は、対象を制御する制御装置を含むシステムの挙動を推定するシミュレーション装置であって、挙動を推定するシミュレーションプログラムを実行するプログラム実行手段と、システムを３次元仮想空間内に仮想的に構築するための３次元仮想化手段と、シミュレーションプログラムの実行時に参照されるデータを生成または更新するための設定を実行する設定手段と、シミュレーション装置に対するユーザ操作を受付ける受付手段と、を備え、設定手段は、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定をユーザ操作に従い選択的に実行する。
【０００９】
本開示によれば、設定手段は、シミュレーションプログラムが参照するデータを生成または更新するための設定を、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定として、ユーザ操作に従い選択的に実行する。これにより、デバイスが制御装置に接続された現実のシステムの挙動をシミュレートする環境をユーザ操作により簡単に実現できる。
【００１０】
上述の開示においては、システムは、制御のための検出動作を実施するセンサを含み、３次元仮想空間上の位置に基づく設定は、３次元仮想空間上に配置されたセンサに対応のオブジェクトに関連付けたデータを生成または更新するための設定を含む。
【００１１】
この開示によれば、シミュレーションプログラムの実行時に参照されるデータが、仮想空間上に配置されたセンサに対応のオブジェクトに関連付けたデータを用いて生成または更新されるような設定を実行することができる。
【００１２】
上述の開示において、３次元仮想化手段は、３次元仮想空間上に配置されたセンサに対応のオブジェクトを、当該３次元仮想空間に視覚化してディスプレイに描画するための描画データを生成する。
【００１３】
この開示によれば、設定手段が上記の設定を実行する際に、ユーザに対し、３次元仮想空間上に配置されたセンサに対応のオブジェクトを視覚化して提示することができる。
【００１４】
上述の開示において、システムは、制御のための検出動作を実施するセンサを含み、システムは、制御に関連して動作する周辺機器を含み、センサの検出動作は、周辺機器の動作と連動し、動作条件は、周辺機器の動作と連動するセンサの検出動作に基づく条件を含む。
【００１５】
この開示によれば、シミュレーションプログラムの実行時に参照されるデータに、制御に関連した周辺機器の動作と連動するセンサの検出動作に基づく条件に従うデータを含めることができる。
【００１６】
上述の開示において、設定手段が実行するデータを生成または更新するための設定は、ユーザ操作により受付けたパラメータに対応するプログラムを含む。
【００１７】
この開示によれば、シミュレーションプログラムの実行時に参照されるデータの生成または更新を、ユーザ操作により受付けたパラメータに対応するプログラムの実行により実現することが可能となる。
【００１８】
上述の開示において、３次元仮想化手段は、シミュレーションプログラムを実行時の対象の動きを、３次元仮想空間に視覚化してディスプレイに描画するための描画データを生成する。
【００１９】
この開示によれば、シミュレーションプログラムが実行される際には、当該実行により推定されるシステムの挙動を３次元仮想空間で視覚化して提示することができる。
【００２０】
本開示にかかるシミュレーション方法は、対象を制御する制御装置を含むシステムの挙動を推定するコンピュータによって実施されるシミュレーション方法であって、システムを３次元仮想空間内に仮想的に構築するステップと、シミュレーションプログラムの実行時に参照されるデータを生成または更新するための設定を実行するステップと、を備え、設定を実行するステップでは、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定を、コンピュータに対するユーザ操作に従い選択的に実行する。
【００２１】
本開示によれば、設定するステップでは、シミュレーションプログラムが参照するデータを生成または更新するための設定を、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定として、ユーザ操作に従い選択的に実行される。これにより、デバイスが制御装置に接続された現実のシステムの挙動をシミュレートする環境をユーザ操作により簡単に実現することができる。
【００２２】
本開示によれば、上記のシミュレーション方法をコンピュータに実行させるためのプログラムが提供される。
【００２３】
このプログラムが実行されることで、シミュレーションプログラムが参照するデータを生成または更新するための設定は、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定として、ユーザ操作に従い選択的に実行される。これにより、デバイスが制御装置に接続された現実のシステムの挙動をシミュレートする環境をユーザ操作により簡単に実現することができる。
【発明の効果】
【００２４】
本開示によれば、ユーザは、対象を制御する制御装置を含むシステムの挙動を推定するシミュレーションの環境を簡単に実現することができる。
【図面の簡単な説明】
【００２５】
【図１】本実施の形態にかかるシミュレーション装置でのシミュレーションの対象となる制御システム１の構成例を示す模式図である。
【図２】本実施の形態にかかるシミュレーション装置１００による３次元仮想空間内に構築されるシステムモデルを視覚化した一例を示す図である。
【図３】本実施の形態にかかる制御システム１のユニット構成の一例を示す模式図である。
【図４】本実施の形態にかかるシミュレーション装置１００の構成を概略的に示す図である。
【図５】本実施の形態にかかるオフラインシステム２０の構成を模式的に示す図である。
【図６】図５のプログラム実行部３１の構成例を模式的に示す図である。
【図７】本実施の形態にかかるシミュレーション装置１００が実施するオフラインシステム２０の処理を説明する図である。
【図８】本実施の形態にかかるシミュレーション装置１００が実施するオフラインシステム２０の処理を説明する図である。
【図９】本実施の形態にかかるＩＯ設定の概略処理の一例を示すフローチャートである。
【図１０】図９のＩＯスタブ生成処理の一例を示すフローチャートである。
【図１１】本実施の形態にかかる設定テーブルの編集処理の一例を示すフローチャートである。
【図１２】本実施の形態にかかる周辺機器の動作と連動するＩＯデバイスの一例を説明する図である。
【図１３】本実施の形態にかかる実現方法（３）に従い生成されるＩＯスタブの一例を説明する図である。
【図１４】本実施の形態にかかるＩＯデバイスと、ＩＯデバイスの種類毎のＩＯスタブの実現方法の一例を表形式で示す図である。
【図１５】本実施の形態にかかる入力変数の一覧の表示例を示す図である。
【図１６】本実施の形態にかかるＩＯスタブを自動生成する際の表示画面の一例を示す図である。
【図１７】本実施の形態にかかる「３Ｄ配置」と指定された入力変数の設定テーブル３９２の表示の一例を示す図である。
【図１８】本実施の形態にかかる「３Ｄ配置なし」と指定された入力変数の設定テーブル３９２の表示の一例を示す図である。
【図１９】本実施の形態にかかるＩＯスタブの実現方法（１）を模式的に説明する図である。
【図２０】本実施の形態にかかるＩＯスタブの実現方法（２）を模式的に説明する図である。
【図２１】本実施の形態にかかるＩＯスタブの実現方法（３）を模式的に説明する図である。
【発明を実施するための形態】
【００２６】
本開示の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２７】
＜Ａ．適用例＞
まず、本発明が適用される場面の一例について説明する。図１を参照して、本実施の形態にかかるシミュレーション装置が適用される制御システムの一例を説明する。本実施の形態に従うシミュレーション装置は、ＦＡの生産ラインに備えられる制御対象である複数の機械を駆動するための駆動機器の挙動を推定する。このような制御対象としては、配置された対象物を連続的に移動させる搬送面を有する搬送機と、対象物を把持して搬送面に配置可能な処理装置とを含むシステムを例示する。搬送機としては、例えば、可動のコンベアを例示し、処理装置としては、例えば、コンベア上の対象物を把持し移動させるロボットを例示するが、制御対象のシステムおよび機械はこれらに限定されず、対象のＦＡに応じて適宜選択され得る。
【００２８】
以下の説明では、システムが扱う「ワーク」としては、最終生成物あるいはその一部、または、中間生成物あるいはその一部など、その位置をトラッキング可能なものであれば、どのようなものであってもよい。
【００２９】
図１は、本実施の形態にかかるシミュレーション装置でのシミュレーションの対象となる制御システム１の構成例を示す模式図である。図１を参照して、一例として、制御システム１は、典型的には、プログラマブルコントローラ（以下「ＰＬＣ」とも称す。）を用いて実装される制御装置２００を備える。制御装置２００は、シミュレーション装置１００を通信ケーブル８０により接続するが、接続態様はこれに限定されず、例えば、制御システム１が備えられるＦＡシステムのネットワーク２２０を介して、接続してもよい。また、シミュレーション装置１００は、制御装置２００に脱着可能に接続される。
【００３０】
シミュレーション装置１００は、制御装置２００が対象を制御するために必要な準備を支援する装置である。具体的には、シミュレーション装置１００は、シミュレーションプログラムを実行することにより、制御システム１の挙動を推定し、その結果を出力する。また、シミュレーション装置１００は、シミュレーションプログラムを実行するためにユーザを支援する環境として、ユーザによるＩＯデータにかかる設定操作を支援する環境を提供する。シミュレーション装置１００は、さらに、制御装置２００で実行されるタスクに関する設定環境、制御装置２００におけるタスクの実行状況のモニタ画面なども提供し得る。
【００３１】
以下の説明では、ＩＯデータは、シミュレーションプログラムの実行時に、当該シミュレーションプログラムによって参照されるデータを含む。
【００３２】
制御装置２００は制御システム１の動作を制御する。本実施の形態では、制御装置２００によって制御される動作は、例えば、「ピック＆プレース動作」を含む。「ピック＆プレース動作」は、コンベア２３０上を搬送されるワーク２３２が所定のトラッキングエリア２３１まで到達すると、トラッキングエリア２３１内のワーク２３２をロボット２１０で把持して、コンベア２４０まで搬送し、コンベア２４０上のトラッキングエリア２３５に配置するという、ロボット２１０による把持・搬送・配置の一連の動作を表す。本実施の形態では、ワーク２３２を把持するために、例えば吸着の仕組みが利用される。ロボット２１０のロボットアーム２１４の先端には、ワーク２３２を吸着するためのロボットツールが装着されている。ロボットツールは、例えば、空気式の吸着装置であり、負圧を発生させることでワーク２３２を把持する。ロボット２１０は、例えば、コンベア２３０の搬送面上のワーク２３２を把持して、プレース側のコンベア２４０の搬送面より上側でロボットツールによるワーク２３２の吸着を解除する。ワークは、重力によってコンベア２４０の搬送面に着地し、そのまま搬送されることになる。
【００３３】
制御システム１は、さらに、制御装置２００の動作と関連した動作を実施する周辺機器を接続する。周辺機器は、例えば、コンベア２３０に関連して設置されるエアシリンダ８を含む。制御システム１は、さらに、制御のための検出動作を実施するＩＯデバイスを接続する。ＩＯデバイスは、エアシリンダ８に関連したリミットスイッチ７、センサ６、コンベア２３０に関連して設置されるエンコーダ２３６、コンベア２４０に関連して設置されるエンコーダ２３８、およびロボットアーム２１４に関して設置される圧力スイッチ９などを含む。
【００３４】
エンコーダ２３６は、コンベア２３０の駆動ローラ２３４の回転量を検出することで、コンベア２３０の移動量に応じた検出値２３７を出力し、同様に、エンコーダ２３８は、コンベア２４０の駆動ローラ２４４の回転量を検出することで、コンベア２４０の移動量に応じた検出値２３９を出力する。検出値２３７，２３９は、コンベアの移動量に応じたパルス信号に基づいている。制御装置２００は、検出値２３７が表すパルスをカウントし、カウント値に基づき、コンベア２３０の移動量を示す値、および／または、移動速度を示す値を算出（検出）し、同様に、検出値２３９が表すパルスをカウントし、カウント値に基づき、コンベア２４０の移動量を示す値、および／または、移動速度を示す値を算出（検出）する。
【００３５】
圧力スイッチ９は、ロボットアーム２１４にかかる圧力の変化に応じて吸着と、その後の吸着解除を検出し、検出値９１を出力する。
【００３６】
コンベア２３０の下流側に備えられたボックス２２１からは、その開口部を介してコンベア２３０の搬送面上にワーク２３２が供給される。コンベア２３０上の搬送途中のワーク２３２は、エアシリンダ８が配置された位置に到達したとき、エアシリンダ８のピストンの引込みまたは押出し動作により、コンベア２３０の搬送面の幅方向の所定位置に配置される。この所定位置は、例えばロボット２１０のロボットアーム２１４がワーク２３２を把持可能な位置に基いている。リミットスイッチ７はエアシリンダ８の位置が引込みまたは押出しの位置になったとき、ＯＦＦ（オフ）からＯＮ（オン）に変化する検出値７１を出力する。センサ６は、ワーク２３２を検出可能な検出範囲を有し、ワーク２３２を検出すると検出値６１を出力する。センサ６の検出範囲は、搬送途中のワーク２３２がトラッキングエリア２３１に接近したことを検出することが可能な範囲に基づいている。
【００３７】
制御装置２００は、これらＩＯデバイスからの検出値を参照して、所定の制御プログラムを実行することで、ロボット２１０にピック＆プレース動作を実施させる。具体的には、制御装置２００は、センサ６の検出値６１からワーク２３２がトラッキングエリア２３１に接近したことを検出すると、「ピック＆プレース動作」を実施させる制御指令２１１をロボット２１０に出力する。制御装置２００は、ロボット２１０に対する制御指令２１１を生成する際には、上記に述べたＩＯデバイスからの検出値６１，７１，９１に加えて、ロボット２１０の状態値２２２を参照する。
【００３８】
図１に示すような「ピック＆プレース動作」を可能にする制御システム１を導入するにあたって、制御プログラムが正常に動作するかをシミュレーションにより事前に評価したい、というニーズが存在する。すなわち、制御装置２００に上記に述べた全てのＩＯデバイスを実際に接続することで制御システム１を現実に組立てて、制御プログラムを制御システム１に実行させることが、コスト的または時間的な制約上、不可能な場合も多い。本実施の形態にかかるシミュレーション装置は、上記の制御システム１に適用されて、ＩＯデバイスを実際に接続せずとも、制御システム１の動作をより簡便に推定したいというニーズに対処するものである。そこで、本実施の形態にかかるシミュレーション装置１００は、上記のＩＯデバイスも含めた制御システム１をシミュレーションするための設定をより効率よく実現するよう構成される。
【００３９】
具体的には、シミュレーション装置１００は、対象（すなわち、コンベア２３０，２４０およびロボット２１０、周辺機器等）を制御する制御装置２００を含む制御システム１の挙動を推定する。シミュレーション装置１００は、制御装置２００を含む制御システム１の各部と通信しない、いわゆるオフラインに状態において、制御システム１の挙動を推定するシミュレーションプログラムを実行する（Ｒ１）。典型的なユースケースとしては、現実に制御システムを組み立てることが出来ない状況において、このシミュレーションプログラムが実行される。シミュレーションプログラムの実行時には、シミュレーション装置１００は、システムを３次元仮想空間内に仮想的に構築し（Ｒ２）、構築された３次元仮想空間においてシミュレーションで推定された制御システム１の動きを、ディスプレイ３８に描画する描画データを生成する。
【００４０】
シミュレーション装置１００は、上記のシミュレーションプログラムの実行時に参照されるべきデータを生成または更新するための設定を実行する（Ｒ３）。この設定では、シミュレーション装置に対するユーザ操作に従い、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定が、選択的に実行される。
【００４１】
例えば、選択的な設定は、データを供給するＩＯデバイスの種類に基いてなされる。例えば、ワーク２３２の検出のセンサ６（光電センサなど）のＩＯデバイスに基づく設定が実行される。例えば、３次元仮想空間に設定されるセンサに関連のオブジェクト（例えば検出範囲を表す画像）に関連づけたデータ（検出範囲でワークを検出したか否か）を出力するＩＯスタブ（プログラムまたは命令コード）が、シミュレーションプログラムの実行時に実行される。これにより、シミュレーションプログラムの実行時に、当該シミュレーションプログラムにより参照されるべきデータ（すなわち、ワーク２３２を検出するセンサ６からのデータ）を生成または更新することができる。
【００４２】
これに対して、ＩＯデバイスの一例であるリミットスイッチ７は、周辺機器であるエアシリンダ８の動作と連動する。したがって、リミットスイッチ７のＩＯデバイスに基づく設定が実行される。例えば、この連動を表す動作条件に基づくＩＯスタブが実行される。シミュレーションプログラムの実行時に当該ＩＯスタブも実行されることにより、シミュレーションプログラムの実行時に、当該シミュレーションプログラムにより参照されるべきデータ（すなわち、エアシリンダ８の動作と連動するリミットスイッチ７からのデータ）を生成または更新することができる。
【００４３】
＜Ｂ．３次元仮想空間の視覚化＞
図２は、本実施の形態にかかるシミュレーション装置１００による３次元仮想空間内に構築されるシステムモデルを視覚化した一例を示す図である。本実施の形態にかかるシミュレーション装置１００は、後述するディスプレイ３８を備え、ディスプレイ３８に直交するＸ軸，Ｙ軸およびＺ軸の３次元空間内のモデルの画像を表示する。
【００４４】
図２を参照して、３次元仮想空間では、把持（ピック）されるワーク２３２を搬送するコンベア２３０、および、配置（プレース）されたワーク２３２を搬送するコンベア２４０が並列に配置されている。そして、コンベア２３０およびコンベア２４０に対応付けて、ロボット２１０に相当する２つのロボット３１１および３１３が配置されている。この３次元仮想空間のシステムモデルでは、紙面左側から紙面右側に向けてワーク２３２がコンベア２３０により搬送される。ワーク２３２が予め設定されたトラッキングエリア２３１またはトラッキングエリア２３３に到着すると、それぞれロボット３１１またはロボット３１３が到着したワーク２３２を把持して、コンベア２４０にワーク２３２を配置（プレース）する。ロボット３１１およびロボット３１３は、それぞれコンベア２４０に関連付けて設定されたトラッキングエリア２３５および２４１にワーク２３２を配置する。コンベア２３０の搬送面上を搬送されるワーク２３２はランダムな方向を向いているが、コンベア２４０に配置される場合には、予め設定された向きに揃えられるとする。
【００４５】
図２の３次元仮想空間において、コンベア２３０の上側には、トラッキングエリアを示すために、半透明（所定の透過率をもった有色）のオブジェクト２５０が重ねて表示されている。また、オブジェクト２５０に関連付けて、センサ６およびセンサ６の検出範囲３１４,３１５のオブジェクトもそれぞれ配置される。このようなオブジェクト２５０を表示することで、ユーザは、制御システムのモデルにおいてトラッキングエリアおよび検出範囲３１４,３１５がどの範囲に設定されているのかを一見して把握することができる。なお、図２のオブジェクト２５０は、ユーザ操作に従い非表示とすることもできる。
【００４６】
図２の３次元仮想空間は、さらに、センサ６を表すオブジェクトと、当該センサオブジェクトに関連付けてその検出範囲３１４，３１５を表すオブジェクトを含む。
【００４７】
＜Ｃ．システムの構成＞
図３は、本実施の形態にかかる制御システム１のユニット構成の一例を示す模式図である。図３を参照して、制御システム１は、制御装置２００と、制御装置２００とフィールドネットワーク２を介して接続されるサーボモータドライバ５３１，５３２およびリモートＩＯターミナル５と、ロボット２１０と、フィールドに設けられたＩＯデバイスである例えば、センサ６、リミットスイッチ７、圧力スイッチ９およびエンコーダ２３６，２３８を含む。
【００４８】
制御装置２００は、主たる演算処理を実行する演算ユニット１３、１つ以上のＩＯユニット１４および特殊ユニット１７を含む。これらのユニットは、システムバス８１を介して、データを互いに遣り取りできるように構成されるとともに、電源ユニット１２から電源が供給される。演算ユニット１３には、シミュレーション装置１００が接続される。
【００４９】
ＩＯユニット１４は、一般的な入出力処理に関するユニットであり、２値化されたデータの入出力を司る。具体的には、ＩＯユニット１４は、センサ６、リミットスイッチ７、圧力スイッチ９、エンコーダ２３６，２３８などを含むＩＯデバイスから検出値６１、７１、９１、２３７および２３９などの検出値を収集する。収集においては、各ＩＯデバイスからの検出値は、例えばＩＯユニット１４が備えるメモリの対応ビットに設定（書込）される。演算ユニット１３は、ＩＯユニット１４により収集された値を用いて制御プログラムの演算を実行し、演算結果の値をＩＯユニット１４の対応のビットに設定（書込）する。周辺機器またはＩＯデバイスは、ＩＯユニット１４の各ビットの値を参照して動作する。このように、制御装置２００は、ＩＯユニット１４を介してＩＯデバイスおよび周辺機器と相互にデータを遣り取りしながら、制御対象であるロボット２１０またはコンベア２３０，２４０を制御することができる。
【００５０】
特殊ユニット１７は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、ＩＯユニット１４ではサポートしない機能を有する。
【００５１】
フィールドネットワーク２は、演算ユニット１３と遣り取りされる各種データを伝送する。フィールドネットワーク２としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネット（登録商標）としては、例えば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ  ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ  Ｍｏｔｉｏｎなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット（登録商標）以外のフィールドネットワークを用いてもよい。例えば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを用いてもよい。
【００５２】
フィールドネットワーク２には、さらに、リモートＩＯターミナル５が接続されている。リモートＩＯターミナル５は、基本的には、ＩＯユニット１４と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートＩＯターミナル５は、フィールドネットワーク２でのデータ伝送にかかる処理を行うための通信カプラ５２と、１つ以上のＩＯユニット５３とを含む。これらのユニットは、リモートＩＯターミナルバス５１を介して、データを互いに遣り取りできるように構成される。
【００５３】
サーボモータドライバ５３１，５３２は、フィールドネットワーク２を介して演算ユニット１３と接続されるとともに、演算ユニット１３からの指令値に従ってサーボモータ４１，４２を駆動する。サーボモータ４１，４２は、エアシリンダ８および駆動ローラ２３４，２４４が備えるサーボ機構を制御する。具体的には、サーボモータドライバ５３１，５３２は、制御装置２００から制御周期などの一定周期で、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ５３１，５３２は、サーボモータ４１，４２の軸に接続されている位置センサ（ロータリーエンコーダ）またはトルクセンサといった検出器から、位置、速度、トルクといったサーボモータ４１，４２の動作にかかる実測値を取得してサーボモータ４１，４２を駆動するための電流を調整する。上記に述べたＩＯデバイスの１つであるリミットスイッチ７は、エアシリンダ８のサーボモータ４１の軸に接続されている位置センサに対応する。
【００５４】
（ｃ１．ロボットとコンベアとの連携）
制御システム１では、ロボット２１０とコンベア２３０，２４０は、相互に連携しながらワーク２３２を移動させる。なお、ここでは説明を簡単にするために、ワーク２３２の移動を説明するが、移動に限定されない。例えば、ステージ上におけるロボット２１０によるワーク２３２の加工であってもよい。
【００５５】
図３では、ロボット２１０のドライブ装置の一例として、ロボット２１０に設けられるサーボモータ４３と、サーボモータ４３を駆動するロボットコントローラ３１０を例示する。ロボット２１０は駆動されることにより、その挙動は、直交するＸ軸，Ｙ軸およびＺ軸の３次元空間内で変化する。コンベア２３０，２４０は駆動されることにより、その挙動はロボット２１０と同じ３次元空間内において規定されるが、とりわけＸ軸およびＹ軸の平面内において規定される。
【００５６】
ロボットコントローラ３１０は、ロボット２１０のサーボモータ４３を駆動する。サーボモータ４３の回転軸にはエンコーダ（図示しない）が配置されている。当該エンコーダは、サーボモータ４３のフィードバック値として、サーボモータの位置（回転角度）、回転速度、累積回転数などの状態値２２２に相当するデータをロボットコントローラ３１０へ出力する。
【００５７】
同様に、サーボモータドライバ５３２は、コンベア２３０，２４０のサーボモータ４２を駆動する。サーボモータ４２の回転軸に配置されたエンコーダ２３６，２３８は、サーボモータ４２のフィードバック値として、検出値２３７，２３９を出力する。
【００５８】
制御システム１におけるロボット２１０とコンベア２３０，２４０の制御について説明する。ロボット２１０は複数の駆動軸により移動可能な可動部を有する。これらの各駆動軸は、サーボモータ４３によって駆動される。具体的には、ロボット２１０は、サーボモータ４３が回転することで駆動される複数のロボットアーム２１４を有している。サーボモータ４３は、回転することで、ロボットアーム２１４を駆動する。ロボットコントローラ３１０がサーボモータ４３の駆動を制御することで、ロボットアーム２１４は３次元に移動する。このようなロボットアーム２１４の移動により、ロボット２１０の動きが実現される。同様に、コンベア２３０，２４０も、サーボモータ４２が回転することでコンベア２３０，２４０は移動する。このようなロボット２１０またはコンベア２３０，２４０の移動量（移動の向き、移動距離）は、サーボモータの回転量（回転の向き、角度）により決まる。
【００５９】
本実施の形態では、ロボット２１０のロボットアーム２１４は、仮想的な軸が対応付けられ、対応する軸の位置からロボット２１０の動きが決まる。制御装置２００は、ロボット２１０の軸の目標位置を格納する。この目標位置は、ロボット２１０の動きが目標となる動作（以下、目標動作ともいう）を示すように、時系列に変化する。
【００６０】
ロボットコントローラ３１０は、制御装置２００から目標位置の制御指令２１１を受信し、受信した目標位置に基づき各サーボモータの回転量を決定し、決定した回転量を指定する指令値を、サーボモータ４３に対し出力する。
【００６１】
また、制御装置２００は、ロボットコントローラ３１０からの状態値２２２からロボット２１０の各ロボットアーム２１４に相当する軸の３次元仮想空間における位置を算出する。これにより、例えばワーク２３２を把持するロボットアーム２１４の軸の３次元仮想空間における位置である３次元座標Ｐ（ｘ、ｙ、ｚ）を算出することができる。
【００６２】
コンベア２３０，２４０も、ロボット２１０と同様に、コンベア２３０，２４０の動きが目標動作（例えば移動速度）を示すように、コンベア２３０，２４０の移動の速度を変化させることができる。
【００６３】
制御装置２００は、エンコーダ２３６，２３８の検出値２３７，２３９に所定関数を用いた演算を施すことでから、コンベア上のワーク２３２の時系列に変化する位置（トラッキング位置）を、ロボット２１０と同じ３次元仮想空間における３次元座標Ｑ（ｘ、ｙ、０）に変換することができる。このような３次元座標Ｑ（ｘ、ｙ、０）の時系列の変化により３次元仮想空間におけるワーク２３２の動きを示すことができる。
【００６４】
なお、ここでは、コンベア２３０，２４０は平面内の動きを示すことから、３次元座標Ｑのｚ軸は値０で固定としているが、他の固定値であってもよい。
【００６５】
＜Ｄ．シミュレーション装置１００の構成＞
図４は、本実施の形態にかかるシミュレーション装置１００の構成を概略的に示す図である。図１の制御システム１において、ロボット２１０およびコンベア２３０，２４０が実機として制御装置２００により制御される環境をオンラインとした場合、図４のシミュレーション装置１００は、制御システム１をオフラインでシミュレーションする。
【００６６】
シミュレーション装置１００は、ＣＰＵ（Central  Processing  Unit）２とプログラムおよびデータを格納する格納部を備えて、プログラムに従って動作するコンピュータシステムである。格納部は、ＲＯＭ(Read  Only  Memory）３、ＲＡＭ（Random  Access  Memory）４およびＨＤＤ（Hard  Disk  Drive）５を含む。シミュレーション装置１００は、さらに、ＵＳＢ（Universal  Serial  Bus）コントローラ１６およびＩ／Ｏ（Input/Output）インタフェース２７を含む。また、シミュレーション装置１００は、キーボード３７およびディスプレイ３８を含む。キーボード３７は、ユーザからのシミュレーション装置１００に対する指示を含む入力を受付ける。当該入力を受付けるために、シミュレーション装置１００は、マウス等の他のデバイスを含んでもよい。シミュレーション装置１００は、外部の記憶媒体９２を脱着自在に装着し、装着された記憶媒体９２にプログラムおよび／またはデータを読み書きするＲ／Ｗ（リーダライタ）デバイス９３を備える。
【００６７】
ＵＳＢコントローラ１６は、シミュレーション装置１００が制御装置２００を含む外部の機器と通信するためのインタフェースである。ＵＳＢコントローラ１６は、例えば通信ケーブル８０が接続可能に構成される。
【００６８】
Ｉ／Ｏインタフェース２７は、シミュレーション装置１００への入力またはシミュレーション装置１００からの出力のインタフェースである。図４に示すように、Ｉ／Ｏインタフェース２７は、キーボード３７とディスプレイ３８とに接続され、ユーザがキーボード３７に対して入力した情報を受け付ける。また、シミュレーション装置１００の処理結果を、ディスプレイ３８へ出力する。ディスプレイ３８は、ＬＣＤ（Liquid  Crystal  Display）または有機ＥＬ（Electro  Luminescence）を含み、シミュレーション装置１００から出力される映像信号または画像信号に従う映像または画像を表示する。
【００６９】
＜Ｅ．オフラインシステム＞
図５は、本実施の形態にかかるオフラインシステム２０の構成を模式的に示す図である。図６は、図５のプログラム実行部３１の構成例を模式的に示す図である。オフラインシステム２０は、制御システム１のシミュレーションを実施するための環境およびツールなどを提供する。このシミュレーションでは、ロボット２１０およびコンベア２３０，２４０の制御プログラムに含まれた複数の命令がシミュレータにより実行されることにより、ロボット２１０およびコンベア２３０，２４０を駆動するサーボモータの挙動、すなわち制御装置２００を含む制御システム１の挙動が推定される。
【００７０】
図５を参照して、オフラインシステム２０の構成例を、その周辺部と関連づけて説明する。図５を参照して、シミュレーション装置１００は、シミュレーション装置１００の各部を制御する制御部１０、シミュレーション装置１００に対するユーザの操作を受付ける入力受付部１１、およびオフラインシステム２０を備える。オフラインシステム２０にはディスプレイ３８が接続される。ディスプレイ３８は、表示制御データに従い表示するべきイメージデータを生成し、イメージデータに従いディスプレイ３８を駆動するディスプレイドライバ３９を含む。入力受付部１１は、キーボード３７の操作またはディスプレイ３８で表示されたアイコン等の操作によるユーザ入力を受付ける。制御部１０は、ＣＰＵ２がシミュレーション制御プログラム２１を実行することにより実現される。制御部１０は、入力受付部１１を介し受付けたユーザの指示に従い、オフラインシステム２０を制御する。
【００７１】
オフラインシステム２０は、プログラムおよびデータを含んで構成されて、制御部１０からの指令に従い、ＣＰＵ２がプログラムを実行することにより、オフラインシステム２０が実現される。また、オフラインシステム２０による処理の結果を、ディスプレイ３８に表示する場合は、処理結果は表示制御データに変換されてディスプレイドライバ３９に出力される。ディスプレイドライバ３９は、表示制御データに従うイメージデータに従いディスプレイ３８を駆動する。これにより、ディスプレイ３８の画面には、シミュレーション装置１００およびオフラインシステム２０の処理の結果を表す画像が表示される。
【００７２】
（ｅ１．オフラインシステム２０の構成）
オフラインシステム２０の構成を説明する。オフラインシステム２０の各部を実現するためのプログラムおよびデータは、例えばＲＯＭ３、ＲＡＭ４およびＨＤＤ５等を含む格納部３００に格納されている。制御部１０（ＣＰＵ２）が必要なプログラムを実行することによって、シミュレーションを含むオフラインシステム２０の処理を実行してもよい。当該プログラムは、格納部３００に記憶されていてもよい。制御部１０が必要なプログラムを実行する際は、格納部３００に記憶された対象となるプログラムをＲＡＭ４に展開する。そして、ＲＡＭ４に展開された当該プログラムはＣＰＵ２により解釈及び実行されて、オフラインシステム２０の各構成要素が制御される。
【００７３】
図５を参照して、オフラインシステム２０は、ＰＬＣシミュレータ２６０および３Ｄビジュアライザ２７０を実行する主体であるプログラム実行部３１を備える。本実施の形態では、ＰＬＣシミュレータ２６０は、ロボット２１０のシミュレータを含む。これらは、例えばプログラムモジュールとして提供される。
【００７４】
オフラインシステム２０は、さらに表示制御データを生成する表示制御部１５、仮想時刻を出力するタイマーを含む周期生成部１８、およびツール実行部３４を含む。表示制御部１５は、描画データ等から表示制御データを生成し、ディスプレイドライバ３９に出力する。ディスプレイドライバ３９は、表示制御データに従いディスプレイ３８を駆動する。これにより、画面に描画データに従う画像が表示される。
【００７５】
周期生成部１８は、仮想時刻を示す信号ＳＴを生成し、生成した信号ＳＴをオフラインシステム２０の各部に出力する仮想時刻生成プログラム２９を備える。各部は信号ＳＴが示す仮想時刻を尺度とする周期に同期して動作する。本実施形態では、仮想時刻を尺度とする周期には、ＰＬＣシミュレータ２６０の実行周期である制御周期が含まれる。周期生成部１８は、制御部１０からの指示に従い、演算指令２８０を生成し、プログラム実行部３１に出力する演算指令部１３６を含む。
【００７６】
また、図５を参照して、オフラインシステム２０は、３Ｄビジュアライザ２７０に関連して軌跡データ２５１，２５２および画像データ２５３，２５４を含む。オフラインシステム２０は、さらに、パラメータテーブル３７０、ロボット２１０およびコンベア２３０，２４０の制御プログラムであるＰＬＣプログラム３７１、ＩＯ設定支援プログラム３６１、３Ｄ視覚化プログラム２８、ＩＯマップ３９１、１または複数の設定テーブル３９２、および１または複数のＩＯスタブ３９３，２７３を含む。ＩＯスタブ３９３は、ＰＬＣシミュレータ２６０にＩＯデバイスの動作条件を設定するプログラムを含む。ＩＯスタブ２７３は、３Ｄビジュアライザ２７０にＩＯデバイスの動作条件を設定するプログラムを含む。これらデータおよびプログラムは、例えばＲＯＭ３、ＲＡＭ４およびＨＤＤ５などの格納部３００に格納される。
【００７７】
ＩＯ設定支援プログラム３６１は、プログラム実行部３１によるシミュレーションの実行中に参照されるデータに関するユーザによる設定を支援するためのプログラムであって、ＩＯスタブ生成プログラム３６２および設定テーブル編集プログラム３６３を含む。３Ｄ視覚化プログラム２８は、３次元仮想空間におけるオブジェクトの移動の軌跡を算出する軌跡計算プログラム３０３を含む。パラメータテーブル３７０は、ＰＬＣプログラム３７１により制御される周辺機器を含む各機器について、当該機器の動作の仕様を表すパラメータを有する。
【００７８】
ツール実行部３４は、ＰＬＣプログラムエディタ３２、ＩＯスタブ生成ツール３６を含むＩＯ設定支援ツール３３およびビルダ３５を含む。ＰＬＣプログラムエディタ３２は、入力受付部１１を介して受付けたユーザ操作に従い、ＰＬＣプログラム３７１を編集することによって、ユーザがプログラムを編集するのをサポートする。
【００７９】
本実施の形態にかかるＰＬＣプログラム３７１は、いわゆる変数プログラムである。すなわち、ＰＬＣプログラム３７１は、当該プログラムが実行時に参照する入力データ、出力データ、内部計算用データなどはデータ別に入力変数、出力変数、および一時変数などを用いて利用できるよう構成される。これら入力変数および出力変数の値は、ＩＯユニット１４の各ビットに対応する値を含んでいる。
【００８０】
ＩＯ設定支援ツール３３は、プログラム実行部３１によるプログラムの実行時に参照されるデータを生成または更新するための設定を、入力受付部１１を介して受付けたユーザ操作に従い実施することにより、ユーザが当該設定を行うのをサポートする。
【００８１】
ビルダ３５は、ＰＬＣプログラム３７１、ＩＯ設定支援プログラム３６１、および３Ｄ視覚化プログラム２８をビルドすることにより、それぞれ、実行可能なコードからなるＰＬＣシミュレータ２６０、ＩＯ設定支援ツール３３および３Ｄビジュアライザ２７０を生成する。ビルダ３５は、ＰＬＣプログラム３７１をビルドするときに、ＰＬＣプログラム３７１に関連付けされたＩＯスタブ３９３を組込んでビルドすることにより、ＰＬＣシミュレータ２６０を生成する。ビルダ３５は、３Ｄ視覚化プログラム２８をビルドするとき、３Ｄ視覚化プログラム２８に関連付けされたＩＯスタブ２７３を組込んでビルドすることにより、３Ｄビジュアライザ２７０を生成する。
【００８２】
上記に述べたＩＯ設定支援ツール３３により提供されるサポートのための環境、およびＩＯ設定支援ツール３３を介して提供または設定され得るＩＯマップ３９１、設定テーブル３９２などについては後述する。
【００８３】
図５のオフラインシステム２０によれば、ＩＯデータのユーザ設定を支援する環境と、シミュレーションにより推定される機器を含む制御システム１の挙動を３次元仮想空間に視覚化する環境とを提供することができる。
【００８４】
（ｅ２．プログラム実行部によるシミュレーション）
プログラム実行部３１は、ＰＬＣシミュレータ２６０および３Ｄビジュアライザ２７０を実行する主体、すなわち実行エンジンに相当する。図６を参照して、プログラム実行部３１は、制御装置２００、ロボットコントローラ３１０およびサーボモータドライバ５３１，５３２の制御プログラムをシミュレートするＰＬＣシミュレータ２６０、３Ｄ視覚化プログラム２８をシミュレートする３Ｄビジュアライザ２７０および共有メモリに相当するＩＯマップ３９１を含む。ＰＬＣシミュレータ２６０と３Ｄビジュアライザ２７０の間のデータ交換はＩＯマップ３９１を用いて実現される。ＩＯマップ３９１を介したデータ交換は、制御装置２００と各機器（サーボモータドライバ５３１，５３２、ロボットコントローラ３１０）の間のフィールドネットワーク２を介した通信と、制御装置２００とＩＯデバイスの間のＩＯユニット１４を介したデータ交換とに相当する。
【００８５】
ＰＬＣシミュレータ２６０は、ロボット２１０およびコンベア２３０，２４０の挙動を推定するプログラムであって、ＰＬＣプログラム３７１に含まれた複数の命令を有するシミュレーションプログラムに相当する。これら複数の命令は、ＰＬＣプログラム３７１に含まれたコンベア２３０，２４０の挙動を制御するためのモーション命令およびモーション演算命令を含む命令群３７１Ａと、ＰＬＣプログラム３７１に含まれたロボット２１０の挙動を制御するための複数のロボット命令を含む命令群３８１Ａと、周辺機器を制御する制御指令を生成する１つ以上の周辺機器ＦＢ（Function  Block）３９１Ａの命令を含む。さらに、ＰＬＣシミュレータ２６０のシミュレーションプログラムは、周辺機器ＦＢ３９１Ａに関連付けられたＩＯスタブ３９３の命令を含む。これら命令は、例えばサイクリック実行型言語（例えば、ラダー言語）、または逐次実行型の言語（例えばインタプリタ言語）の命令など異なる言語体系の命令を含む。プログラム実行部３１は、これら異なる言語のプログラムを実行可能な実行エンジンを備えている。
【００８６】
ＰＬＣシミュレータ２６０の各命令が、ＩＯマップ３９１の入力データ１４６に基づき実行される毎に、サーボモータドライバ５３１，５３２、またはロボットコントローラ３１０のための指令値Ｖ１が生成されて、ＩＯマップ３９１に出力データ１４５として格納される。このように入力データ１４６は、命令を実行時にＰＬＣシミュレータ２６０により参照（読出）されるデータを示し、出力データ１４５は、当該命令の実行結果が設定されるデータを示す。ＩＯスタブ３９３は、周辺機器ＦＢ３９１Ａに対応の周辺機器の動作に連動したＩＯデバイスの挙動を推定するための命令コードを含む。ＩＯスタブ３９３は、周辺機器ＦＢ３９１Ａの命令の実行結果（指令）を用いて実行されることにより、当該指令に応じたＩＯデバイスの挙動を推定し、推定された挙動に基づく検出値を生成して、ＩＯマップ３９１に入力データ１４６として格納する。
【００８７】
３Ｄビジュアライザ２７０は、描画データ生成部１９とＩＯデバイスの挙動を推定するためのＩＯスタブ２７３の命令群を含む。描画データ生成部１９は、ＩＯマップ３９１の出力データ１４５に基づき、ロボット２１０の位置およびコンベア２３０，２４０の３次元仮想空間の位置を算出する軌跡演算命令２７１を含む。ＩＯスタブ２７３は干渉検出演算命令２７２を含む。軌跡演算命令２７１は、実行されると、３次元仮想空間におけるオブジェクトの位置を検出（算出）する。本実施の形態では、軌跡演算命令２７１は、コンベア２３０，２４０の位置情報から、コンベア２３０，２４０の搬送面上のワーク２３２の３次元仮想空間の位置を算出する演算命令を含む。軌跡演算命令２７１は軌跡計算プログラム３０３の実行可能コードに相当する。
【００８８】
ＩＯスタブ２７３の干渉検出演算命令２７２は、軌跡演算命令２７１により算出された位置からオブジェクトどうしの干渉（衝突、接触など）の有無を検出する。具体的には、干渉検出演算命令２７２は、３次元仮想空間におけるワーク２３２の算出位置を、センサ６の検出範囲３１４の位置と比較し、比較結果に基く検出値Ｖ２を出力する。例えば、検出値Ｖ２は、比較結果が、ワーク２３２の位置は検出範囲３１４内である（すなわち、干渉が有る）ことを示すとき「１」を、そうでない（すなわち、干渉が無い）とき「０」を示す。ＩＯスタブ２７３は、検出値Ｖ２をＩＯマップ３９１の入力データ１４６にセンサ６の検出値６１として設定する。
【００８９】
次の周期では、制御部１０により、ＰＬＣシミュレータ２６０は、センサ６の検出値６１を含む入力データ１４６を参照して実行される。これにより、当該次の周期では、センサ６によりワーク２３２が検出範囲３１４に達したことに応じて「ピック＆プレース動作」の挙動を推定するための演算命令が開始される。
【００９０】
このように周期的にシミュレーションが実行されることで、ＩＯスタブ３９３，２７３によってＩＯマップ３９１の入力データ１４６が生成または更新される。
【００９１】
（ｅ３．描画データの生成）
描画データ生成部１９は、仮想空間構築部２７４が有する制御システム１を３次元仮想空間内に仮想的に構築する命令コードを実行することにより、図２に示すような３次元仮想空間のデータを生成する。描画データ生成部１９は、さらに、軌跡演算命令２７１により、出力データ１４５に所定関数を用いた演算を実施することにより、ロボット２１０の位置の３次元座標Ｐ（ｘ，ｙ，ｚ）およびワーク２３２の位置の３次元座標Ｑ（ｘ，ｙ，０）を算出し、これらの時系列データである軌跡データ２５１，２５２を取得する。このように軌跡データは、シミュレーションにより推定されたロボット２１０およびワーク２３２の３次元仮想空間における動きを示す情報を含む。描画データ生成部１９は、算出された軌跡データ２５１，２５２とロボット２１０，ワーク２３２の画像データ２５３，２５４に従い、ロボット２１０の動きを３次元仮想空間内で立体的に描画するための描画データ３０１を生成し、表示制御部１５に出力する。ロボット２１０およびワーク２３２を表す画像データ２５３および２５４は、ＣＡＤ（computer-aided  design）データ等を含む。本実施の形態では、描画データ３０１は、コンベア２３０，２４０およびセンサ６を含むＩＯデバイスまたは周辺機器を表す画像（オブジェクト）、および検出範囲３１４，３１５ならびにトラッキングエリアを表す画像（オブジェクト）を含んでいる。なお、コンベア２３０，２４０およびセンサ６を含むＩＯデバイスまたは周辺機器を表す画像は、画像データ２５３，２５４に含まれても良い。
【００９２】
（ｅ４．同期処理）
周期生成部１８は、信号ＳＴを生成する仮想時刻生成プログラム２９を実行する。周期生成部１８は、生成された信号ＳＴを他の各部に出力する。各部は、周期生成部１８から信号ＳＴが出力される周期に同期して処理またはプログラムを実行する。これにより、オフラインシステム２０の各部の処理またはプログラムは、信号ＳＴの周期で、または当該周期に同期して実行される。信号ＳＴの周期は、図１の制御システム１のフィールドネットワーク２の通信周期に相当する。この通信周期は、制御システム１の制御周期に同期している。
【００９３】
＜Ｆ．オフラインシステム２０の全体処理＞
図７と図８は、本実施の形態にかかるシミュレーション装置１００が実施するオフラインシステム２０の処理を説明する図である。図７と図８では、オフラインシステム２０の処理が、各部間の信号の入出力関係を示すタイミングチャートと関連付けて示される。
【００９４】
図７を参照して、制御部１０のシミュレーション制御プログラム２１は、入力受付部１１を介してユーザから起動指令を受付けると（ステップＴ１）、起動する。
【００９５】
制御部１０のシミュレーション制御プログラム２１は、周期生成部１８に起動指令を出力する（ステップＴ３）。周期生成部１８は起動指令に従い仮想時刻生成プログラム２９を起動する。仮想時刻生成プログラム２９は起動されると、信号ＳＴの出力を開始するとともに、ＰＬＣシミュレータ２６０に起動指令を出力する（ステップＴ４）。
【００９６】
プログラム実行部３１は、起動指令に従いＰＬＣシミュレータ２６０を起動する。これにより、指令値演算処理４０を実施する（繰返処理ＳＢ１）。指令値演算処理４０は、指令値Ｖ１の算出およびＩＯスタブ３９３を実行することによる検出値の算出を実施する。指令値演算処理４０は、信号ＳＴが示す仮想時刻を尺度とする制御周期毎に繰返（Loop）し実施されるとともに、ディスプレイ３８には当該制御周期に同期した周期で描画データ３０１に従う図２に示すような３次元仮想空間の画像が更新されて表示される。
【００９７】
図８を参照して、指令値演算処理４０では、周期生成部１８は、仮想時刻生成プログラム２９により、演算指令をプログラム実行部３１に出力する。プログラム実行部３１のＰＬＣシミュレータ２６０は演算指令に従い指令値Ｖ１を算出し、ＩＯマップ３９１に出力データ１４５として格納する（ステップＳＳ１）。ステップＳ１では、ＩＯスタブ３９３が実行されて、実行結果に基く値がＩＯマップ３９１に入力データ１４６として格納される。周期生成部１８の仮想時刻生成プログラム２９は、プログラム実行部３１による演算が完了すると、次の制御周期まで待機する（ステップＳＳ２）。
【００９８】
描画更新処理５０では、描画データ生成部１９は、描画データ３０１を生成しディスプレイ３８に出力する。
【００９９】
ここで、本実施の形態では、描画更新処理５０を、制御周期に同期した周期で実施する。また、本実施の形態では、３Ｄビジュアライザ２７０は、シミュレーション制御プログラム２１の起動とは独立して（関係なく）起動される。３Ｄビジュアライザ２７０は、プログラム実行部３１から、ＰＬＣシミュレータ２６０が起動したことを通知する起動通知指令を受けると、描画データ３０１を生成するために、ＰＬＣシミュレータ２６０からの指令値Ｖ１を含む出力データ１４５を、ＩＯマップ３９１を介して受取る動作を開始する。また、３Ｄビジュアライザ２７０は、プログラム実行部３１から、ＰＬＣシミュレータ２６０がシミュレーションを終了したことを通知する終了指令通知を受けると、上記の受取る動作を終了する。
【０１００】
描画データ生成部１９は、信号ＳＴに基づく制御周期に同期した周期で、ＰＬＣシミュレータ２６０により算出された各軸の指令値Ｖ１をＩＯマップ３９１の出力データ１４５から取得する（ステップＳＳ３）。描画データ生成部１９は、取得した指令値Ｖ１を用いて軌跡演算命令を実行して軌跡データ２５１，２５２を算出し、算出された軌跡データ２５１，２５２と画像データ２５３，２５４から３次元仮想空間に各オブジェクトの位置と、当該位置に基づきオブジェクトを描画する描画データ３０１を生成する。このとき、ＩＯスタブ２７３が実行されて、干渉検出演算命令２７２が実行されることで、３次元仮想空間におけるオブジェクトをどうしの干渉が検出される。例えば、コンベア２３０上のワーク２３２のオブジェクトと、センサ６の検出範囲３１４，３１５のオブジェクトとの３次元仮想空間における位置に基づく干渉の有無が検出されて、ＩＯスタブ２７３は、検出結果に基く検出値６１（検出値Ｖ２）をＩＯマップ３９１の入力データ１４６に設定する。描画データ生成部１９は、ディスプレイ３８の画像を更新するために、表示制御部１５に描画データ３０１を出力する（ステップＳＳ４）。
【０１０１】
図７と図８では、ディスプレイ３８の画面には、制御周期に同期した周期ごとに、当該周期内で算出された各軸の指令値Ｖ１を用いた描画データ３０１が表すロボット２１０およびワーク２３２の動きが描画される。これにより、ユーザは、ディスプレイ３８の画面から、周期毎に、ロボット２１０とワーク２３２の動きの直前の周期からの変化量、すなわちロボット２１０のロボットアーム２１４またはコンベア２３０，２４０の移動量を視認することができる。また、指令値演算処理は、制御周期毎に、前の制御周期で設定された入力データ１４６（干渉の検出値６１を含む）に基づき演算命令を実行することで、３次元仮想空間におけるオブジェクトどうしの干渉の有無（ワーク２３２がセンサ６の検出範囲３１４，３１５）に入ったか否か）に基づくシミュレーション演算の実行が可能となる。
【０１０２】
＜Ｇ．ＩＯ設定支援ツール＞
本実施の形態にかかるＩＯ設定支援ツール３３の処理を説明する。図９は、本実施の形態にかかるＩＯ設定の概略処理の一例を示すフローチャートである。図１０は、図９のＩＯスタブ生成処理の一例を示すフローチャートである。図１０の処理では、例えば、後述するような図１２または図１３のＩＯスタブが生成される。このＩＯスタブの実現方法は、図１４で後述するようにＩＯデバイスの種類により相違する。図１１は、本実施の形態にかかる設定テーブルの編集処理の一例を示すフローチャートである。この編集処理は後述する。
【０１０３】
まず、図９を参照して、ＩＯ設定支援ツール３３の概略処理を説明する。制御部１０は、入力受付部１１を介して、ＩＯ設定支援ツール３３の起動操作を受付けると、ＩＯ設定支援ツール３３を起動する。
【０１０４】
ＩＯ設定支援ツール３３が起動されると、制御部１０は、ＩＯ設定支援プログラム３６１を実行する。ＩＯ設定支援プログラム３６１が実行されると、ＩＯ設定支援ツール３３は、ＰＬＣプログラム３７１を解析し、ＩＯ変数を抽出し（ステップＳ３）、抽出されたＩＯ変数のうち入力データ１４６の各入力変数に対応して変数名とデータを、および抽出されたＩＯ変数のうち出力データ１４５の各出力変数に対応して変数名とデータを、それぞれ格納可能に構成されるＩＯマップ３９１を生成し格納する（ステップＳ５）。ＩＯ設定支援ツール３３は、ＩＯマップ３９１を用いたＩＯスタブ生成処理を実施するためにＩＯスタブ生成ツール３６を起動する（ステップＳ７）。ＩＯスタブ生成ツール３６は、制御部１０が、ＩＯスタブ生成プログラム３６２を実行することにより実現される。
【０１０５】
（ｇ１．ＩＯスタブ生成処理）
上述のＩＯスタブ生成処理（ステップＳ７）を、図１０を参照して説明する。図１０を参照して、ＩＯスタブ生成処理において、ＩＯスタブ生成ツール３６は、入力受付部１１からのユーザ操作に従い、ＩＯマップ３９１の入力変数に関連付けてＩＯスタブ３９３を生成し、格納する。具体的には、ＩＯスタブ生成ツール３６は、ＩＯマップ３９１から複数の入力変数を抽出し、抽出された入力変数の一覧を作成し、ディスプレイ３８に、例えば図１５の一覧を表示する（ステップＳ１１、Ｓ１３）。図１５は、本実施の形態にかかる入力変数の一覧の表示例を示す図である。図１５を参照して、一覧は、各入力変数に対応して、値が設定されるビットの番号３８１および変数名３８２を含む。変数名３８２は、当該入力変数に値（検出値）を設定するＩＯデバイスを一意に識別する名称が充てられている。
【０１０６】
ＩＯスタブ生成ツール３６は、入力受付部１１からのユーザ操作に基づくＩＯスタブ自動生成のリクエストを受付けるか否かを判定し（ステップＳ１５）、リクエストを受付けない場合（ステップＳ１５でＮＯ）、ステップＳ１５の処理を繰返し、リクエストを受付けると（ステップＳ１５でＹＥＳ）、ＩＯスタブ生成ツール３６は、ディスプレイ３８の画面を、図１５の一覧画面から図１６の画面に切替る。図１６は、本実施の形態にかかるＩＯスタブを自動生成する際の表示画面の一例を示す図である。
【０１０７】
図１６の画面は、ＩＯスタブの生成指示のユーザ操作を受付け可能な画面例である。図１６では、ユーザが、ＩＯスタブを生成する入力変数を選択するケースが示される。例えば、図１６では、図１５の一覧から、Ｎｏｄｅ４に該当する複数ビットの入力変数群が選択されている。なお、入力変数の選択は変数群に限定されず、入力変数毎に個別に選択することもできる。
【０１０８】
図１６の画面は、選択された入力変数群の各変数に対応して、ビット識別の番号３８１および変数名３８２とともに、ＩＯスタブタイプ３８３を含む。ＩＯスタブタイプ３８３は、対応する入力変数のＩＯスタブのタイプを選択的に指定するためにユーザが操作するアイコンを含む。ＩＯスタブのタイプは、「不要」、「３Ｄ配置」、「３Ｄ配置なし」および「連動」を含む。「不要」は、ＩＯスタブを生成しないことを示す。「３Ｄ配置」は、ＩＯスタブを３次元仮想空間において設定することを示す。「３Ｄ配置なし」は、ＩＯスタブを３次元仮想空間に設定せずに、ＰＬＣプログラム３７１の制御ロジックと関連して実行されるよう設定することを示す。「連動」は、入力変数に対応したＩＯデバイスの動作を他の周辺機器の動作と連動させるようにＩＯスタブを設定することを示す。
【０１０９】
また、図１６の画面は、入力変数群に対して同一のタイプを一括設定するためのユーザ操作を受付けるアイコン６０と、設定したＩＯスタブのタイプに従いＩＯスタブを生成することを指示するユーザ操作を受付けるためのボタン６６１を含む。図１６の画面の各アイコンは、例えばラジオボタンまたはチェックボックスを含んで構成される。
【０１１０】
図１６の右側では、さらに、ビューリスト３９０の一例が示される。ビューリスト３９０は、図１６の左側の画面で設定された入力変数名の一覧を示す。
【０１１１】
ＩＯスタブ生成ツール３６は、図１６のアイコンを介したユーザ操作から、各入力変数のＩＯスタブのタイプの指定を受付ける（ステップＳ１７）とともに、ボタン６６１を介してＩＯスタブの生成指示を受付けるか否かを判定する（ステップＳ１９）。ＩＯスタブの生成指示を受付けていない、すなわちボタン６６１が操作されていない間は（ステップＳ１９でＮＯ）、ステップＳ１７の処理に戻るが、ＩＯスタブの生成指示を受付けた、すなわちボタン６６１が操作された判定したときは（ステップＳ１９でＹＥＳ）、ＩＯスタブ生成ツール３６は、ステップＳ２０に移行する。
【０１１２】
ステップＳ２０では、制御システム１を３次元仮想空間内に仮想的に構築するための３次元仮想化処理が実施される。具体的には、３Ｄビジュアライザ２７０は、仮想空間構築部２７４によって図２のような３次元仮想化空間を表すデータを作成し、作成したデータに基づく描画データ３０１に基づく画像をディスプレイ３８に表示させる。したがって、ユーザは、３次元仮想空間内で視覚化された制御システム１を確認しながら、ＩＯスタブの生成のための操作を実施することができる。
【０１１３】
ボタン６６１が操作されたと判定すると、ＩＯスタブ生成ツール３６は設定テーブル編集プログラム３６３を起動する。ＩＯスタブ生成ツール３６は、設定テーブル編集プログラム３６３を用いて、ユーザ操作に従い設定テーブル３９２を編集し、設定テーブル３９２を格納する（ステップＳ２１）。
【０１１４】
ＩＯスタブ生成ツール３６は、設定テーブル３９２の情報に基づき、指定された入力変数のＩＯスタブ３９３を生成し格納する（ステップＳ２３、Ｓ２５）。
【０１１５】
（ｇ１-１．設定テーブルの例示）
図１７と図１８を参照して、ステップＳ２１で生成される設定テーブルの一例を説明する。図１７は、本実施の形態にかかる「３Ｄ配置」と指定された入力変数の設定テーブル３９２の表示の一例を示す図である。図１８は、本実施の形態にかかる「３Ｄ配置なし」と指定された入力変数の設定テーブル３９２の表示の一例を示す図である。
【０１１６】
図１７を参照して、ＩＯスタブ生成ツール３６は、ディスプレイ３８の画面の領域Ｅ１に設定テーブルを編集するための項目一覧であるメニュー３９７を表示し、同一画面の領域Ｅ２に編集対象である設定テーブル３９２の内容を表示する。
【０１１７】
メニュー３９７は、項目として、複数の編集操作（追加、貼り付け、表示設定など）の種類と、編集対象のテーブルの識別子（３Ｄ配置、３Ｄ配置なし）とを含む。例えば、ユーザが、メニュー３９７の項目３９３１を指定操作した場合、ＩＯスタブ生成ツール３６は、項目３９３１の指定操作を受付けて、受付けた操作に基き「３Ｄ配置」の設定テーブル３９２を格納部から読出し、ディスプレイ３８の領域Ｅ２に「３Ｄ配置」の設定テーブル３９２の内容を表示する。
【０１１８】
図１７の設定テーブル３９２は、例えばセンサ６に対応する「ワーク１検出センサ」と「ワーク２検出センサ」の入力変数のＩＯスタブ２７３のパラメータの設定項目を示す。具体的には、設定項目は、ＰＬＣシミュレータ２６０で当該センサの入力変数を参照（使用）するか否かを指定する項目３９２１、変数名３９２２、検知時の動作（すなわち、検出値６１の値）３９２３、検出対象のワーク２３２の種類３９２４、当該センサが設置される３次元仮想空間上の位置３９２５、および３次元仮想空間における検出範囲３９２６を含む。
【０１１９】
ＩＯスタブ生成ツール３６は、設定テーブル３９２の各入力変数に対応した設定項目の内容に基づき３Ｄ（３次元）画像３９６を３Ｄビジュアライザ２７０に生成させて、ディスプレイ３８に表示させる。
【０１２０】
図１７では、３Ｄ（３次元）画像３９６は、設定テーブル３９２と関連づけて領域Ｅ２で表示されている。図示されるように３Ｄ画像３９６は、例えば「ワーク１検出センサ」と「ワーク２検出センサ」の検出範囲３９２６のそれぞれを表すオブジェクト画像３９６１，３９６２を含む。したがって、ユーザは、ディスプレイ３８の３Ｄ画像３９６を見ながら、設定テーブル３９２の検出範囲３９２６などの設定内容を調整することも可能である。
【０１２１】
図１８を参照して、ユーザが、メニュー３９７の項目３９３１を指定操作した場合、ＩＯスタブ生成ツール３６は、項目３９３１の指定操作を受付けて、受付けた操作に基き「３Ｄ配置なし」の設定テーブル３９２を格納部から読出し、ディスプレイ３８の領域Ｅ２に「３Ｄ配置なし」の設定テーブル３９２の内容を表示する。
【０１２２】
図１８の設定テーブル３９２は、例えば圧力スイッチ９に対応する２つの圧力スイッチの入力変数のＩＯスタブ３９３のために設定すべきパラメータの項目を示す。具体的には、設定項目は、ＰＬＣシミュレータ２６０で当該センサ（圧力スイッチ９）の入力変数を参照（使用）するか否かを指定する項目３９２１、変数名３９２２、検知時の動作（すなわち、検出値９１の値）、およびＩＯスタブが動作するための動作条件３９１１を含む。動作条件３９１１は、ＩＯスタブ３９３に設定されるべきパラメータに相当する。
【０１２３】
動作条件３９１１は、例えば、待機時間３９２７と検知の条件３９２８を有する。待機時間３９２７は、例えば、ロボットアーム２１４がワーク２３２を把持開始してから吸着が完了するまでの所要時間に基づいている。検知の条件３９２８は、吸着完了または吸着解除を検知するためのパラメータ値と条件式などを含む。図１８の検知の条件３９２８とＩＯスタブ３９３の動作は、以下の通りである。
【０１２４】
（Position．Z≦２９０）and（Trig1＝TRUE）。変数Position．Zはロボット２１０の位置（より特定的には、ロボットアーム２１４の位置）を示し、変数Trig１は、例えば把持の開始を示す指令値を示す。したがって、圧力スイッチ９のＩＯスタブ３９３が実行されて、条件３９２８が満たされたと判定されると、待機時間３９２７が示す時間だけ経過した後に、到着（吸着解除）を示す出力（検出値９１に相当）がＩＯスタブ３９３から導出される。
【０１２５】
図１８の画面では、設定テーブル３９２の内容を編集するために操作される編集ボタン３９８が表示される。ユーザは編集ボタン３９８を操作することにより、編集の指示を入力することができる。
【０１２６】
（ｇ１-２．設定テーブルの編集）
編集ボタン３９８が操作された場合の編集処理を説明する。ＩＯ設定支援ツール３３は、ユーザに対して、設定テーブル３９２を編集可能な環境を提供する。図１１を参照して、設定テーブルの編集処理を説明する。
【０１２７】
ＩＯ設定支援ツール３３は、入力受付部１１の出力に基き、ユーザから設定テーブルの表示指示を受付けるか否かを判定する（ステップＳ３１）。
【０１２８】
ＩＯ設定支援ツール３３は、表示指示を受付けない間は（ステップＳ３１でＮＯ）、ステップＳ３１の処理を繰返すが、表示指示を受付けたと判定すると（ステップＳ３１でＹＥＳ）、ＩＯ設定支援ツール３３は、格納部３００の設定テーブル３９２を、図１７または図１８のようにディスプレイ３８に表示する（ステップＳ３３）。また、ＩＯ設定支援ツール３３は、設定テーブル３９２の表示とともに、設定テーブル３９２の内容に基づき設定内容を視覚化して提示する３Ｄ画像３９６を生成して表示するように、３Ｄビジュアライザ２７０およびディスプレイ３８を制御してもよい（ステップＳ３４）。
【０１２９】
ＩＯ設定支援ツール３３は、入力受付部１１からの出力に基き、ユーザが編集ボタン３９８を操作したか否かを判定する（ステップＳ３５）。ＩＯ設定支援ツール３３は、編集ボタン３９８の操作を受付けない場合は（ステップＳ３５でＮＯ）、入力受付部１１から編集終了を指示する操作を受付けたか否かを判定する（ステップＳ３９）。ＩＯ設定支援ツール３３は、編集終了指示の操作を受付けないと判定すると（ステップＳ３９でＮＯ）、ステップＳ３５の処理に戻るが、編集終了の指示を受付けたと判定すると（ステップＳ３９でＹＥＳ）、編集処理を終了する。
【０１３０】
ステップＳ３５において、ＩＯ設定支援ツール３３は、ユーザによる編集ボタン３９８の操作を受付けたと判定すると（ステップＳ３５でＹＥＳ）、ＩＯ設定支援ツール３３は入力受付部１１から受付けるユーザ操作に従い、設定テーブル３９２を編集する（ステップＳ３７）。編集がなされると、ステップＳ３３に戻り、ＩＯ設定支援ツール３３は、編集後の設定テーブル３９２の内容を表示する。このとき、ＩＯ設定支援ツール３３は、編集後の設定テーブル３９２の内容に基づく３Ｄ画像３９６を表示するように、３Ｄビジュアライザ２７０およびディスプレイ３８を制御してもよい（ステップＳ３４）。
【０１３１】
ステップＳ３７では、例えば動作条件３９１１に関連の編集ボタン３９８がユーザにより操作されると、ＩＯ設定支援ツール３３は、動作条件３９１１を編集（設定、変更）するための図１８のウィンドウ３９９を表示する。なお、ウィンドウ３９９は、設定テーブル３９２の画面とは別画面に表示されてもよい。ユーザは、ウィンドウ３９９のデータを操作することにより、検知の条件３９２８のパラメータ値または演算子（例えば、論理演算子、または算術演算子など）を編集（変更）することができる。
【０１３２】
図１８では、編集ボタン３９８の操作に応じて動作条件３９１１が編集されたが、編集対象は動作条件３９１１に限定されず、例えば図１７の検出範囲３９２６であってもよい。
【０１３３】
＜Ｈ．ＩＯスタブの生成＞
ＩＯ設定支援ツール３３は、ＰＬＣシミュレータ２６０の実行時に参照されるデータを生成または更新するための設定を実行する。具体的には、ＩＯスタブの生成処理（図１０のステップＳ２３）において、ＩＯ設定支援ツール３３は、ＩＯスタブ生成ツール３６を起動する。ＩＯスタブ生成ツール３６は起動されると、ＩＯスタブ生成プログラム３６２を実行することにより、ＩＯスタブ２７３，３９３を生成し、格納する。
【０１３４】
図１４は、本実施の形態にかかるＩＯデバイスと、ＩＯデバイスの種類毎のＩＯスタブの実現方法の一例を表形式で示す図である。制御システム１に適用されるＩＯデバイスは、その検出動作の違いから異なるグループに分類されて、各グループについて、ＩＯスタブの実現方法は異なる。図１４を参照して、グループは、第１グループ１４１および第２グループ１４２を含む。第１グループ１４１には、対応のＩＯスタブ２７３が３次元仮想空間上の位置に基き設定（生成）され得るＩＯデバイスが属する。第１グループ１４１のＩＯデバイスは、その用途が、例えばワーク２３２の検出であるセンサ６を含む。センサ６の種類としては、例えば、光電センサ、ファイバセンサ、フォトマイクロセンサ、および近接スイッチなどを含む。
【０１３５】
第２グループ１４２には、対応のＩＯスタブ３９３をその動作条件３９１１に基き設定（生成）され得るＩＯデバイスが属する。第２グループ１４２は、その用途が周辺機器の動作と連動するＩＯデバイスのグループ１４３と、他のＩＯデバイスのグループ１４４を含む。グループ１４３は、例えば、周辺機器としてエアシリンダ８およびエアシリンダ８に関連のエアチャックの動作と連動するリミットスイッチ７を含む。
【０１３６】
グループ１４４は、その用途が、圧力または力の大きさなどの目に見えない現象、またはワーク２３２の検査結果からＯＮ/ＯＦＦを切替えるＩＯデバイスを含む。このＩＯデバイスとしては、例えば圧力スイッチ９、力覚センサ、スマートセンサなどを含む。グループ１４４は、機器が扱うワークの供給状態によってＯＮ／ＯＦＦを切替えるラベル剥離機およびねじ自動供給機などのＩＯデバイスも含み得る。
【０１３７】
本実施の形態では、その検出動作の違いからＩＯデバイスはグループ１４１、１４３および１４４に分類されて、各グループについてＩＯスタブの実現方法（１）〜（３）のそれぞれが提供される。なお、各グループに属するＩＯデバイスまたは周辺機器の種類は、これらに限定されない。
【０１３８】
（ｈ−１．ＩＯスタブの実現方法（１））
ＩＯスタブ２７３の実現方法を説明する。ＩＯスタブ２７３は、３次元仮想空間上の位置に基づき設定（生成）され得る。具体的には、ＩＯスタブ２７３は、実行されることにより、３次元仮想空間上に配置された例えばセンサ６に対応のオブジェクト（検出範囲３１４，３１５のオブジェクト）に関連付けたデータを生成または更新するための設定を実施する。
【０１３９】
図１９は、本実施の形態にかかるＩＯスタブの実現方法（１）を模式的に説明する図である。ユーザは、図１９（Ａ）のビューリスト３９０を検索し、センサ６の変数名（変数名：ワーク１検出センサ）を指定操作すると、ＩＯスタブ生成ツール３６は、ユーザが指定したセンサ６の変数名（変数名：ワーク１検出センサ）に対応する図１９（Ｂ）の設定テーブル３９２の検出範囲３９２６のパラメータに基くＩＯスタブ２７３を自動的に生成する。
【０１４０】
図１９（Ｂ）の設定テーブル３９２によれば、生成されるＩＯスタブ２７３は、「３次元仮想空間におけるワーク２３２の算出位置を、センサ６の検出範囲３１４の値（検出範囲３９２６のパラメータである３００ｍｍ）と比較し、比較結果を出力する干渉検出演算命令２７２と、干渉検出演算命令２７２の演算結果を検出値Ｖ２として出力するとの命令」のコードを有する。これにより、シミュレーションの実行時に、３次元仮想空間においてワーク２３２が、ユーザが設定した検出範囲３１４に達すると（干渉が検出されると）、ＩＯスタブ２７３が出力する検出値６１、すなわち干渉が有ることを示す検出値Ｖ２が入力データ１４６に設定される。次の制御周期では、ＰＬＣシミュレータ２６０は、この干渉有りを示す検出値６１に対応の入力データ１４６に応じて「ピック＆プレース動作」のシミュレーションを開始させることができる。
【０１４１】
（ｈ−２．ＩＯスタブの実現方法（２））
次に、シミュレーションプログラムの実行時に参照されるデータを生成または更新するための設定として、動作条件３９１１に基づく設定を実行することで実現する方法を説明する。図２０は、本実施の形態にかかるＩＯスタブの実現方法（２）を模式的に説明する図である。ユーザは、図２０（Ａ）のビューリスト３９０を検索し、３Ｄオブジェクトのエアシリンダ８を選択する。ＩＯスタブ生成ツール３６は、エアシリンダ８の動作の仕様を表す図２０（Ｂ）のパラメータの一覧３９１７から、図２０（Ｃ）のエアシリンダ８の動作と連動するリミットスイッチ７の挙動を表すＩＯスタブ３９３を生成する。具体的には、ＩＯスタブ生成ツール３６は、パラメータテーブル３７０から図２０（Ｂ）のパラメータの一覧３９１７を生成する。図２０（Ｂ）のパラメータの一覧は、周辺機器であるエアシリンダ８とリミットスイッチ７の連動の動作条件３９１１に相当する。ユーザは、図２０（Ｂ）のパラメータの一覧３９１７のデータを操作することにより、動作条件３９１１を編集することができる。
【０１４２】
図２０（Ｃ）のタイミングチャートは、動作条件３９１１が示すエアシリンダ８の図２０（Ｂ）の移動時間のパラメータ（５００ｍｓ）に基いている。このタイミングチャートは、エアシリンダ８の動作開始からピストンはシリンダから押出されて開始から５００ｍｓ経過時点で押出し完了し、その後、ピストンはシリンダへ引込まれて、引込み開始から５００ｍｓ経過時点で引込み完了することを示す。ＩＯスタブ生成ツール３６は、ＩＯスタブを生成する場合に、図２０（Ｂ）および図２０（Ｃ）の情報をディスプレイ３８に表示してもよい。
【０１４３】
ＩＯスタブの実現方法（２）で生成されるＩＯスタブ３９３の一例を説明する。図１２は、本実施の形態にかかる周辺機器の動作と連動するＩＯデバイスの一例を説明する図である。図１２は、エアシリンダ８の動作と連動するリミットスイッチ７のＩＯスタブ３９３を例示する。まず、図１２（Ａ）には、図２０（Ｃ）のタイミングチャートに従うエアシリンダ８の動作が示される。図１２（Ａ）では、引込み完了および押出し完了したときに、それぞれ、リミットスイッチ７により引込み完了と押出し完了の通知を表す検出値７１が出力される。
【０１４４】
図１２（Ｂ）は、エアシリンダ８の周辺機器ＦＢ３９１を含むプログラムコードの一例を示し、図１２（Ｃ）は、リミットスイッチ７のＩＯスタブ３９３のプログラムコードの一例を示す。図１２（Ｂ）を参照して、シミュレーションの実行時には、まず、エアシリンダ８の動作開始指令１１１１に応じて、開指令を生成するＦＢ１１１２が実行されて、シリンダ開指令１１１３が出力される。図１２（Ｃ）のＩＯスタブ３９３は、シミュレーションを実行中にシリンダ開指令１１１３を受付けると、押出しの時間５００ｍｓをカウント（待機）するｄｅｌａｙ１１２０を実行し、その後、開検知（押出し完了通知）１１１４を出力する。図１２（Ｂ）では、ＩＯスタブ２７３からの開検知１１１４に応じて、閉指令を生成するＦＢ１１１５が実行されて、シリンダ閉指令１１１６が出力される。リミットスイッチ７のＩＯスタブ３９３が実行されると、ＩＯスタブ３９３は、図示しないが、シリンダ閉指令１１１６を受付けて、引込みの時間５００ｍｓをカウントするｄｅｌａｙを実行し、その後、閉検知（引込み完了通知）１１１７を出力する。図１２（Ｂ）では、ＩＯスタブ３９３からの閉検知１１１７に応じて、保持していた指令をクリア（初期化）するＦＢ１１１８が実行されて、エアシリンダ８の当該制御周期における動作は終了する。次回の制御周期のシミュレーションおいても同様の処理が実施される。
【０１４５】
（ｈ−３．ＩＯスタブの実現方法（３））
次に、シミュレーションプログラムの実行時に参照されるデータを生成または更新するための設定として、動作条件３９１１に基づき実現する他の方法を説明する。図２１は、本実施の形態にかかるＩＯスタブの実現方法（３）を模式的に説明する図である。ユーザは、図２１（Ａ）の設定メニューからＩＯスタブ設定の項目を選択すると、ＩＯスタブ生成ツール３６は、例えば圧力スイッチ９についての図１８の設定テーブル３９２で設定された動作条件３９１１（待機時間３９２７のパラメータと条件３９２８）から、圧力スイッチ９の挙動を表すＩＯスタブ３９３を生成する。動作条件３９１１は、ユーザ操作によって設定および変更が可能である。
【０１４６】
図１３は、本実施の形態にかかる実現方法（３）に従い生成されるＩＯスタブの一例を説明する図である。図１３は、圧力スイッチ９のＩＯスタブを例示する。まず、図１３（Ａ）では、「ピック＆プレース動作」において、ロボットアーム２１４のロボットツール２１６の空気式の吸着装置が、ワーク２３２を把持して、プレース側のコンベア２４０の搬送面より上側でワーク２３２の吸着解除が実施されるシーンを模式的に示す。ロボットツール２１６は、吸着および吸着解除を検出する圧力スイッチ９を備える。
【０１４７】
図１３（Ｂ）は、ＰＬＣシミュレータ２６０の「ピック＆プレース動作」にかかるプログラムコードを例示し、図１３（Ｃ）と（Ｄ）は、圧力スイッチ９のＩＯスタブ３９３のプログラムコードを例示する。図１３（Ｂ）で、まず、シミュレーションを実行時には、ＰＬＣシミュレータ２６０では、把持開始指令１１３１に応じて、把持指令を生成するＦＢ１１３２が実行されて、把持指令１１３３が出力される。シミュレーションの実行時に、図１３（Ｃ）のＩＯスタブ３９３が実行されると、ＩＯスタブ３９３は、把持指令１１３３を受付けて、待機時間３９２７が示す５ｍｓをカウント（待機）するｄｅｌａｙ１１４１を実行し、その後、吸着検知１１４２を出力する。図１３（Ｂ）を参照して、シミュレーション実行時には、ＩＯスタブ３９３からの吸着検知１１４２に応じて、搬送指令を生成するＦＢ１１３５が実行されて、搬送指令１１３６が出力される。
【０１４８】
搬送指令１１３６が出力された後、図１３（Ｄ）のＩＯスタブ３９３の命令コード１１４３が実行されて、ＰＬＣプログラム３７１の変数Position．Zの値とユーザの設定値２９０を用いた条件３９２８が満たされたとき、ＩＯスタブ３９３は、到着通知１１４４を出力する。到着通知１１４４は、吸着解除指令に対応する。図１３（Ｂ）では、ＩＯスタブ３９３からの到着通知１１４４に応じて、ワークの配置を指示する配置指令を生成するＦＢ１１３８が実行されて、配置指令１１３９が出力される。
【０１４９】
なお、図２１（Ｂ）のパラメータ２０２が示す検知の継続時間は、ラベル剥離機の剥離完了信号の設定などに使用することができる。ユーザは、ＩＯスタブ３９３をラベル剥離機、または、ねじ自動供給機などのロボット２１０に適用する場合にパラメータ２０２を設定することができる。
【０１５０】
本実施の形態によれば、ＩＯ設定支援ツール３３は、ＰＬＣシミュレータ２６０（ＰＬＣプログラム３７１のシミュレーション）の実行時に参照される入力データ１４６を生成または制御周期毎に更新するための設定（例えば、ＩＯスタブ２７３，３９３の生成）を実行する。したがって、シミュレーションの実行時には、ユーザ操作から受付けた図１６のＩＯスタブタイプ３８３（「３Ｄ配置」、「３Ｄ配置なし」、「連動」）に従い、３次元仮想空間上の位置に基づく設定または動作条件（動作条件３９１１など）に基づく設定が選択的に実行される。
【０１５１】
＜Ｉ．プログラムデバッグ＞
本実施の形態では、オフラインシステム２０は、ＰＬＣプログラム３７１をデバッグする環境を提供してもよい。具体的には、ツール実行部３４は、格納部３００からＰＬＣプログラム３７１を読出し、読出されたプログラムを、表示制御部１５を介してディスプレイ３８に表示する。ユーザは、ディスプレイ３８に表示されたＰＬＣプログラム３７１を編集することによりデバッグすることができる。デバッグは、例えば、シミュレーション結果に基づくＰＬＣプログラム３７１の編集を含む。
【０１５２】
このシミュレーション結果は、シミュレーション時に参照される入力データ１４６を含むＩＯデータによって異ならせることが可能である。入力データ１４６は、シミュレーション時にＩＯスタブ２７３，３９３が実行されることで生成または更新される。したがって、ユーザは、ＩＯ設定支援ツール３３を介して、検出範囲３９２６の値、または動作条件３９１１を変更する操作をすることで、シミュレーション結果を簡単に異ならせることができる。ユーザは、各シミュレーション結果に基づき、ＰＬＣプログラム３７１を制御システム１にとって最適となるように編集またはデバッグすることが可能となる。
【０１５３】
さらに、本実施の形態では、ユーザは、ＩＯスタブタイプ３８３の値（「連動」、「３Ｄ配置」、「３Ｄ配置なし」、「連動」などの値）を変更することにより、シミュレーションプログラムの実行時に参照される入力データ１４６を生成または更新するための設定を、ＩＯスタブ２７３による３次元仮想空間上の位置に基づく設定またはＩＯスタブ３９３による動作条件３９１１に基づく設定の間で、選択的に切り換えることができる。
【０１５４】
また、ＩＯスタブ２７３，３９３を生成する際に、ユーザは、ＩＯ設定支援ツール３３が提供する環境において、対応のＩＯデバイスの動作を示すパラメータ（検出範囲３９２６など）または動作条件３９１１を設定する操作をするだけでよい。
【０１５５】
したがって、ＰＬＣプログラム３７１をデバッグするためのプログラムの作成工数を少なくすることができる。
【０１５６】
＜Ｊ．コンピュータプログラム＞
図５には、シミュレーション装置１００のＣＰＵ２がプログラムを実行することで提供される構成を例示したが、これらの提供される構成の一部または全部を、専用のハードウェア回路（たとえば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）またはＦＰＧＡ（Field-Programmable  Gate  Array）など）を用いて実装してもよい。あるいは、シミュレーション装置１００の主要部を、汎用的なアーキテクチャに従うハードウェアを用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating  System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【０１５７】
また、シミュレーション装置１００は、ＣＰＵ２のようなプロセッサを複数個備えてもよい。この場合は、図５に示す各部は、複数のプロセッサにより実行することが可能である。また、ＣＰＵ２が複数のコアを含む場合は、図５に示す各部は、ＣＰＵ２内の複数のコアにより実行することが可能である。
【０１５８】
オフラインシステム２０は、ＣＰＵ２、ＲＯＭ３、ＲＡＭ４等を含み、情報処理に応じて各構成要素の制御を行う。各構成要素のプログラムを記憶する記憶部は、例えば、ＨＤＤ５、ソリッドステートドライブ等の補助記憶装置でありプログラム実行部３１で実行されるＰＬＣシミュレータ２６０および３Ｄビジュアライザ２７０、仮想時刻生成プログラム２９、シミュレーション制御プログラム２１等を記憶する。
【０１５９】
記憶媒体９２は、コンピュータその他装置、機械等が記録されたプログラム等の情報を読み取り可能なように、当該プログラム等の情報を、電気的、磁気的、光学的、機械的または化学的作用によって蓄積する媒体である。シミュレーション装置１００のＣＰＵ２は、この記憶媒体９２から、上記に述べた格納部３００の各プログラムを取得してもよい。
【０１６０】
＜Ｋ．付記＞
本開示は、以下の技術思想を含む。
【０１６１】
（構成１）
対象（２３０、２４０、２１０）を制御する制御装置（２００）を含むシステム（１）の挙動を推定するシミュレーション装置（２００）であって、
前記挙動を推定するシミュレーションプログラム（２６０）を実行するプログラム実行手段（３１）と、
前記システムを３次元仮想空間内に仮想的に構築するための３次元仮想化手段（２７０）と、
前記シミュレーションプログラムの実行時に参照されるデータ（１４６）を生成または更新するための設定を実行する設定手段（３１，２７３，３９３）と、
前記シミュレーション装置に対するユーザ操作を受付ける受付手段（１１）と、を備え、
前記設定手段は、３次元仮想空間上の位置（３９２６）に基づく設定または動作条件（３９１１）に基づく設定を、前記ユーザ操作に従い選択的に実行する、シミュレーション装置。
（構成２）
前記システムは、前記制御のための検出動作を実施するセンサ（６）を含み、
前記３次元仮想空間上の位置に基づく設定は、前記３次元仮想空間上に配置された前記センサに対応のオブジェクト（３９６１、３９６２）に関連付けたデータを生成または更新するための設定を含む、構成１に記載のシミュレーション装置。
（構成３）
前記３次元仮想化手段は、
前記３次元仮想空間上に配置された前記センサに対応のオブジェクトを、当該３次元仮想空間に視覚化してディスプレイ（３８）に描画するための描画データ（３０１）を生成する、構成２に記載のシミュレーション装置。
（構成４）
前記システムは、前記制御のための検出動作を実施するセンサ（７）を含み、
前記システムは、前記制御に関連して動作する周辺機器（８）を含み、
前記センサの検出動作は、前記周辺機器の動作と連動し、
前記動作条件は、前記周辺機器の動作と連動する前記センサの検出動作に基づく条件（３９２８）を含む、構成１から３のいずれか１に記載のシミュレーション装置。
（構成５）
前記設定手段が実行する前記データを生成または更新するための設定は、前記ユーザ操作により受付けたパラメータ（３９１７，３９２７，３９３７）に対応するプログラム（２７３，３９３）を含む、構成１から３のいずれかに記載のシミュレーション装置。
（構成６）
前記３次元仮想化手段は、
前記シミュレーションプログラムを実行時の前記対象の動きを、前記３次元仮想空間に視覚化してディスプレイ（３８）に描画するための描画データ（３０１）を生成する、構成１から５のいずれか１に記載のシミュレーション装置。
（構成７）
対象を制御する制御装置を含むシステム（１）の挙動を推定するコンピュータ（１００）によって実施されるシミュレーション方法であって、
前記システムを３次元仮想空間内に仮想的に構築するステップ（Ｓ２０）と、
シミュレーションプログラムの実行時に参照されるデータを生成または更新するための設定を実行するステップ（Ｓ２３）と、を備え、
前記設定を実行するステップでは、３次元仮想空間上の位置に基づく設定または動作条件に基づく設定を、前記コンピュータに対するユーザ操作に従い選択的に実行する、シミュレーション方法。
（構成８）
構成７に記載のシミュレーション方法をコンピュータ（１００）に実行させるためのプログラム（３６１）。
【０１６２】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１６３】
６  センサ、７  リミットスイッチ、８  エアシリンダ、９  圧力スイッチ、１０  制御部、１１  入力受付部、１５  表示制御部、１８  周期生成部、１９  描画データ生成部、２０  オフラインシステム、２１  シミュレーション制御プログラム、３３  設定支援ツール、３４  ツール実行部、３６  ＩＯスタブ生成ツール、１００  シミュレーション装置、１３６  演算指令部、１４６  入力データ、１４５  出力データ、２００  制御装置、２０２  パラメータ、２１０，３１１，３１３  ロボット、２１４  ロボットアーム、２６０  ＰＬＣシミュレータ、２７０  ３Ｄビジュアライザ、２７３，３９３  ＩＯスタブ、２７４  仮想空間構築部、３９１  ＩＯマップ。
【図１】
2020187610.tif 000003
【図２】
2020187610.tif 000004
【図３】
2020187610.tif 000005
【図４】
2020187610.tif 000006
【図５】
2020187610.tif 000007
【図６】
2020187610.tif 000008
【図７】
2020187610.tif 000009
【図８】
2020187610.tif 000010
【図９】
2020187610.tif 000011
【図１０】
2020187610.tif 000012
【図１１】
2020187610.tif 000013
【図１２】
2020187610.tif 000014
【図１３】
2020187610.tif 000015
【図１４】
2020187610.tif 000016
【図１５】
2020187610.tif 000017
【図１６】
2020187610.tif 000018
【図１７】
2020187610.tif 000019
【図１８】
2020187610.tif 000020
【図１９】
2020187610.tif 000021
【図２０】
2020187610.tif 000022
【図２１】
2020187610.tif 000023