(57)【要約】【課題】フィールドネットワークの通信態様をコンピュータ上で再現する技術が要望されている。【解決手段】情報処理装置は、第１，第２アクチュエータエミュレータと、第１，第２コントローラエミュレータと、第１，第２データを格納する記憶装置とを含む。第１コントローラエミュレータは、第１制御周期ごとに、第１データを入力として第１アクチュエータエミュレータに対する第１指令値を計算し、収集対象のデータで第２データを更新する。第２コントローラエミュレータは、第２制御周期ごとに、第２データを入力として第２アクチュエータエミュレータに対する第２指令値を計算し、収集対象のデータで第１データを更新する。【選択図】図１
2019067285.tif 000002
【特許請求の範囲】
【請求項１】
入力された第１指令値に従って、第１駆動機器の挙動を模擬する第１アクチュエータエミュレータと、
入力された第２指令値に従って、前記第１駆動機器と協働する第２駆動機器の挙動を模擬する第２アクチュエータエミュレータと、
前記第１アクチュエータエミュレータに前記第１指令値を出力することで、前記第１駆動機器を制御する第１コントローラの挙動を模擬する第１コントローラエミュレータと、
前記第２アクチュエータエミュレータに前記第２指令値を出力することで、前記第２駆動機器を制御する第２コントローラの挙動を模擬する第２コントローラエミュレータと、
前記第１コントローラエミュレータおよび前記第２コントローラエミュレータ間で共有される第１，第２データを格納するための記憶装置とを備え、
前記第１コントローラエミュレータは、前記第１コントローラと前記第２コントローラとの通信周期に従った予め定められた第１制御周期ごとに、前記第１データを入力として前記第１指令値を計算するとともに、前記第１制御周期ごとに、前記第１アクチュエータエミュレータの挙動を表わす予め定められた収集対象のデータで前記第２データを更新し、
前記第２コントローラエミュレータは、前記通信周期に従った予め定められた第２制御周期ごとに、前記第２データを入力として前記第２指令値を計算するとともに、前記第２アクチュエータエミュレータの挙動を表わす予め定められた収集対象のデータで前記第１データを更新する、情報処理装置。
【請求項２】
前記情報処理装置は、仮想時刻を生成するためのタイマーをさらに備え、
前記第１制御周期および前記第２制御周期は、前記仮想時刻によって同期されている、請求項１に記載の情報処理装置。
【請求項３】
前記第１コントローラエミュレータによる前記収集対象のデータは、前記第１アクチュエータエミュレータの状態値を含み、
前記第２コントローラエミュレータによる前記収集対象のデータは、前記第２アクチュエータエミュレータの状態値を含み、
前記第１コントローラエミュレータは、前記第１制御周期ごとに、前記第２アクチュエータエミュレータの状態値に基づいて前記第１指令値を計算するとともに前記第１アクチュエータエミュレータの現在の状態値で前記第２データを更新し、
前記第２コントローラエミュレータは、前記第２制御周期ごとに、前記第１アクチュエータエミュレータの状態値に基づいて前記第２指令値を計算するとともに前記第２アクチュエータエミュレータの現在の状態値で前記第１データを更新する、請求項１または２に記載の情報処理装置。
【請求項４】
前記記憶装置は、前記第１コントローラエミュレータを制御するための第１制御プログラムと、前記第２コントローラエミュレータを制御するための第２制御プログラムとをさらに格納し、
前記第１制御プログラムの種類は、前記第２制御プログラムの種類とは異なる、請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第１制御プログラムは、サイクリック実行型のプログラムであり、
前記第２制御プログラムは、逐次実行型のプログラムである、請求項４に記載の情報処理装置。
【請求項６】
入力された第１指令値に従って、第１駆動機器の挙動を模擬する第１アクチュエータエミュレータを制御するステップと、
入力された第２指令値に従って、前記第１駆動機器と協働する第２駆動機器の挙動を模擬する第２アクチュエータエミュレータを制御するステップと、
前記第１アクチュエータエミュレータに前記第１指令値を出力することで、前記第１駆動機器を制御する第１コントローラの挙動を模擬する第１コントローラエミュレータを制御するステップと、
前記第２アクチュエータエミュレータに前記第２指令値を出力することで、前記第２駆動機器を制御する第２コントローラの挙動を模擬する第２コントローラエミュレータを制御するステップと、
前記第１コントローラエミュレータおよび前記第２コントローラエミュレータ間で共有される第１，第２データを準備するステップとを備え、
前記第１コントローラエミュレータを制御するステップは、前記第１コントローラと前記第２コントローラとの通信周期に従った予め定められた第１制御周期ごとに、前記第１データを入力として、前記第１指令値を計算するとともに、前記第１制御周期ごとに、前記第１アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで前記第２データを更新することを含み、
前記第２コントローラエミュレータを制御するステップは、前記通信周期に従った予め定められた第２制御周期ごとに、前記第２データを入力として、前記第２指令値を計算するとともに、前記第２アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで前記第１データを更新するステップとを含む、情報処理方法。
【請求項７】
コンピュータに実行される情報処理プログラムであって、
前記情報処理プログラムは、前記コンピュータに、
入力された第１指令値に従って、第１駆動機器の挙動を模擬する第１アクチュエータエミュレータを制御するステップと、
入力された第２指令値に従って、前記第１駆動機器と協働する第２駆動機器の挙動を模擬する第２アクチュエータエミュレータを制御するステップと、
前記第１アクチュエータエミュレータに前記第１指令値を出力することで、前記第１駆動機器を制御する第１コントローラの挙動を模擬する第１コントローラエミュレータを制御するステップと、
前記第２アクチュエータエミュレータに前記第２指令値を出力することで、前記第２駆動機器を制御する第２コントローラの挙動を模擬する第２コントローラエミュレータを制御するステップと、
前記第１コントローラエミュレータおよび前記第２コントローラエミュレータ間で共有される第１，第２データを準備するステップと実行させ、
前記第１コントローラエミュレータを制御するステップは、前記第１コントローラと前記第２コントローラとの通信周期に従った予め定められた第１制御周期ごとに、前記第１データを入力として、前記第１指令値を計算するとともに、前記第１制御周期ごとに、前記第１アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで前記第２データを更新することを含み、
前記第２コントローラエミュレータを制御するステップは、前記通信周期に従った予め定められた第２制御周期ごとに、前記第２データを入力として、前記第２指令値を計算するとともに、前記第２アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで前記第１データを更新するステップとを含む、情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、産業用のネットワークにおける通信態様をコンピュータ上で実現するための技術に関する。
【背景技術】
【０００２】
様々な生産現場において、生産工程を自動化するＦＡ（Factory  Automation）システムが普及している。ＦＡシステムは、たとえば、ワークを移動するための移動テーブルや、ワークを搬送するためのコンベアや、予め定められた目的の場所までワーク移動するためのアームロボットなどで構成されている。以下では、移動テーブル、コンベア、アームロボットなどを総称して「搬送装置」ともいう。これらの搬送装置は、ＰＬＣ（Programmable Logic Controller）やロボットコントローラなどのコントローラによって制御される。
【０００３】
通常、設計者は、設計した制御プログラムがシミュレーション上で意図した通りに動作することを確認した上で制御プログラムをコントローラに書き込む。このようなシミュレーションを支援するための技術に関し、特開２０１６−４２３７８号公報（特許文献１）は、視覚センサを含めた統合的なシミュレーションを実現することが可能なシミュレーション装置を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−４２３７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＦＡシステムを構成する各機器は、産業用のネットワーク（以下、「フィールドネットワーク」という。）で繋がれている。このようなＦＡシステムの挙動を正確にシミュレーションするためには、フィールドネットワークの通信態様をコンピュータ上で再現する必要がある。特許文献１に開示されるシミュレーション装置は、フィールドネットワークの通信態様までは再現していない。したがって、フィールドネットワークの通信態様をコンピュータ上で再現するための技術が望まれている。
【課題を解決するための手段】
【０００６】
本開示の一例では、情報処理装置は、入力された第１指令値に従って、第１駆動機器の挙動を模擬する第１アクチュエータエミュレータと、入力された第２指令値に従って、上記第１駆動機器と協働する第２駆動機器の挙動を模擬する第２アクチュエータエミュレータと、上記第１アクチュエータエミュレータに上記第１指令値を出力することで、上記第１駆動機器を制御する第１コントローラの挙動を模擬する第１コントローラエミュレータと、上記第２アクチュエータエミュレータに上記第２指令値を出力することで、上記第２駆動機器を制御する第２コントローラの挙動を模擬する第２コントローラエミュレータと、上記第１コントローラエミュレータおよび上記第２コントローラエミュレータ間で共有される第１，第２データを格納するための記憶装置とを備える。上記第１コントローラエミュレータは、上記第１コントローラと上記第２コントローラとの通信周期に従った予め定められた第１制御周期ごとに、上記第１データを入力として上記第１指令値を計算するとともに、上記第１制御周期ごとに、上記第１アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで上記第２データを更新する。上記第２コントローラエミュレータは、上記通信周期に従った予め定められた第２制御周期ごとに、上記第２データを入力として上記第２指令値を計算するとともに、上記第２アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで上記第１データを更新する。
【０００７】
この開示によれば、第１コントローラの挙動を模擬する第１コントローラエミュレータおよび第２コントローラの挙動を模擬する第２コントローラエミュレータの間で、入力データおよび出力データが共有される。第１コントローラエミュレータは、第１コントローラと第２コントローラとの通信周期に従った第１制御周期ごとに入力データを取得するとともに出力データを更新する。一方で、第２コントローラエミュレータは、第１コントローラと第２コントローラとの通信周期に従った第２制御周期ごとに出力データを取得するとともに入力データを更新する。これにより、情報処理装置は、第１コントローラエミュレータと第２コントローラエミュレータとの間のデータ交換をフィールドネットワーク上でのデータ交換と同じように実現することができる。
【０００８】
本開示の他の例では、上記情報処理装置は、仮想時刻を生成するためのタイマーをさらに備える。上記第１制御周期および上記第２制御周期は、上記仮想時刻によって同期されている。
【０００９】
この開示によれば、第１制御周期および第２制御周期が同期されることで、第１コントローラエミュレータの挙動と、第２コントローラエミュレータの挙動とを同期させることができる。
【００１０】
本開示の他の例では、上記第１コントローラエミュレータによる上記収集対象のデータは、上記第１アクチュエータエミュレータの状態値を含む。上記第２コントローラエミュレータによる上記収集対象のデータは、上記第２アクチュエータエミュレータの状態値を含む。上記第１コントローラエミュレータは、上記第１制御周期ごとに、上記第２アクチュエータエミュレータの状態値に基づいて上記第１指令値を計算するとともに上記第１アクチュエータエミュレータの現在の状態値で上記第２データを更新する。上記第２コントローラエミュレータは、上記第２制御周期ごとに、上記第１アクチュエータエミュレータの状態値に基づいて上記第２指令値を計算するとともに上記第２アクチュエータエミュレータの現在の状態値で上記第１データを更新する。
【００１１】
この開示によれば、第１コントローラエミュレータは、第２駆動機器の状態値に合わせて第１アクチュエータエミュレータに対する指令値を計算することができる。一方で、第２コントローラエミュレータは、第１駆動機器の状態値に合わせて第２アクチュエータエミュレータに対する指令値を計算することができる。これにより、情報処理装置は、第１駆動機器および第２駆動機器をシミュレーション上で協働させることができる。
【００１２】
本開示の他の例では、上記記憶装置は、上記第１コントローラエミュレータを制御するための第１制御プログラムと、上記第２コントローラエミュレータを制御するための第２制御プログラムとをさらに格納する。上記第１制御プログラムの種類は、上記第２制御プログラムの種類とは異なる。
【００１３】
この開示によれば、第１コントローラエミュレータおよび第２コントローラエミュレータがそれぞれ異なる種類の制御プログラムで制御される場合であっても、情報処理装置は、フィールドネットワークの通信態様をコンピュータ上で再現することができ、汎用性が上がる。
【００１４】
本開示の他の例では、上記第１制御プログラムは、サイクリック実行型のプログラムである。上記第２制御プログラムは、逐次実行型のプログラムである。
【００１５】
この開示によれば、第１コントローラエミュレータおよび第２コントローラエミュレータがそれぞれ実行形態の異なる制御プログラムで制御される場合であっても、情報処理装置は、フィールドネットワークの通信態様をコンピュータ上で再現することができ、汎用性が上がる。
【００１６】
本開示の他の例では、情報処理方法は、入力された第１指令値に従って、第１駆動機器の挙動を模擬する第１アクチュエータエミュレータを制御するステップと、入力された第２指令値に従って、上記第１駆動機器と協働する第２駆動機器の挙動を模擬する第２アクチュエータエミュレータを制御するステップと、上記第１アクチュエータエミュレータに上記第１指令値を出力することで、上記第１駆動機器を制御する第１コントローラの挙動を模擬する第１コントローラエミュレータを制御するステップと、上記第２アクチュエータエミュレータに上記第２指令値を出力することで、上記第２駆動機器を制御する第２コントローラの挙動を模擬する第２コントローラエミュレータを制御するステップと、上記第１コントローラエミュレータおよび上記第２コントローラエミュレータ間で共有される第１，第２データを準備するステップとを備える。上記第１コントローラエミュレータを制御するステップは、上記第１コントローラと上記第２コントローラとの通信周期に従った予め定められた第１制御周期ごとに、上記第１データを入力として、上記第１指令値を計算するとともに、上記第１制御周期ごとに、上記第１アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで上記第２データを更新することを含む。上記第２コントローラエミュレータを制御するステップは、上記通信周期に従った予め定められた第２制御周期ごとに、上記第２データを入力として、上記第２指令値を計算するとともに、上記第２アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで上記第１データを更新するステップとを含む。
【００１７】
この開示によれば、第１コントローラの挙動を模擬する第１コントローラエミュレータおよび第２コントローラの挙動を模擬する第２コントローラエミュレータの間で、入力データおよび出力データが共有される。第１コントローラエミュレータは、第１コントローラと第２コントローラとの通信周期に従った第１制御周期ごとに入力データを取得するとともに出力データを更新する。一方で、第２コントローラエミュレータは、第１コントローラと第２コントローラとの通信周期に従った第２制御周期ごとに出力データを取得するとともに入力データを更新する。これにより、第１コントローラエミュレータと第２コントローラエミュレータとの間のデータ交換がフィールドネットワーク上でのデータ交換と同じように実現される。
【００１８】
本開示の他の例では、情報処理プログラムは、コンピュータに、入力された第１指令値に従って、第１駆動機器の挙動を模擬する第１アクチュエータエミュレータを制御するステップと、入力された第２指令値に従って、上記第１駆動機器と協働する第２駆動機器の挙動を模擬する第２アクチュエータエミュレータを制御するステップと、上記第１アクチュエータエミュレータに上記第１指令値を出力することで、上記第１駆動機器を制御する第１コントローラの挙動を模擬する第１コントローラエミュレータを制御するステップと、上記第２アクチュエータエミュレータに上記第２指令値を出力することで、上記第２駆動機器を制御する第２コントローラの挙動を模擬する第２コントローラエミュレータを制御するステップと、上記第１コントローラエミュレータおよび上記第２コントローラエミュレータ間で共有される第１，第２データを準備するステップと実行させる。上記第１コントローラエミュレータを制御するステップは、上記第１コントローラと上記第２コントローラとの通信周期に従った予め定められた第１制御周期ごとに、上記第１データを入力として、上記第１指令値を計算するとともに、上記第１制御周期ごとに、上記第１アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで上記第２データを更新することを含む。上記第２コントローラエミュレータを制御するステップは、上記通信周期に従った予め定められた第２制御周期ごとに、上記第２データを入力として、上記第２指令値を計算するとともに、上記第２アクチュエータエミュレータの挙動に関する予め定められた収集対象のデータで上記第１データを更新するステップとを含む。
【００１９】
この開示によれば、第１コントローラの挙動を模擬する第１コントローラエミュレータおよび第２コントローラの挙動を模擬する第２コントローラエミュレータの間で、入力データおよび出力データが共有される。第１コントローラエミュレータは、第１コントローラと第２コントローラとの通信周期に従った第１制御周期ごとに入力データを取得するとともに出力データを更新する。一方で、第２コントローラエミュレータは、第１コントローラと第２コントローラとの通信周期に従った第２制御周期ごとに出力データを取得するとともに入力データを更新する。これにより、第１コントローラエミュレータと第２コントローラエミュレータとの間のデータ交換がフィールドネットワーク上でのデータ交換と同じように実現される。
【発明の効果】
【００２０】
ある局面において、フィールドネットワークの通信態様をコンピュータ上で再現することができる。
【図面の簡単な説明】
【００２１】
【図１】実施の形態に従うＦＡシステムのシミュレーション環境を提供する情報処理装置を示す図である。
【図２】共有データの更新プロセスを時系列で表わした図である。
【図３】実施の形態に従うＦＡシステムのシステム構成の一例を示す図である。
【図４】実施の形態に従う仮想ＦＡシステムの構成の一例を示す図である。
【図５】生成された軌跡の一例を示す図である。
【図６】ＰＬＣプログラムおよびロボットプログラムの編集画面の一例を示す図である。
【図７】ＰＬＣプログラムおよびロボットプログラムの編集画面の一例を示す図である。
【図８】アクチュエータエミュレータに対する指令値の出力タイミングの同期処理を説明するための図である。
【図９】実施の形態に従う情報処理装置によるシミュレーション画面の一例を示す図である。
【図１０】実施の形態に従う情報処理装置のハードウェア構成を示す模式図である。
【図１１】実施の形態に従う情報処理装置の制御装置が実行する処理の一部を表わすフローチャートである。
【発明を実施するための形態】
【００２２】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
【００２３】
＜Ａ．適用例＞
まず、図１を参照して、本発明の適用例について説明する。図１は、ＦＡシステムのシミュレーション環境を提供する情報処理装置１００を示す図である。
【００２４】
情報処理装置１００は、産業用のネットワーク（すなわち、フィールドネットワーク）の通信態様をコンピュータ上で再現しながらＦＡシステムの挙動をシミュレーションする。フィールドネットワークとは、データの到達時間が保証される定周期通信を行うネットワークのことをいう。このような定周期通信を行うネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００２５】
理解を促すために、ＥｔｈｅｒＣＡＴの通信態様を例に挙げてフィールドネットワークについて説明する。フィールドネットワークには、主に１つのマスター機器と、複数のスレーブ機器とが接続される。マスター機器は、Ｉ／Ｏリフレッシュのためのフレームをフィールドネットワークに送出する。Ｉ／Ｏリフレッシュとは、各スレーブ機器からの入力値、および、各スレーブ機器への出力値および指令値を更新する処理を意味する。このＩ／Ｏリフレッシュにおいて、マスター機器は、Ｉ／Ｏリフレッシュのためのフレームを各スレーブ機器に送出し、各スレーブ機器は、マスター機器からのフレームを受けると、当該フレームに含まれる出力値または指令値を読出した後に、予め収集している入力値をフレームの予め定められた領域に書き込む。このようなフレームの送出が所定周期ごとに行われることで定周期通信が実現される。
【００２６】
情報処理装置１００は、フィールドネットワークの通信態様をコンピュータ上で再現しながらＦＡシステムの挙動をシミュレーションする。そのための構成として、情報処理装置１００は、記憶装置１１０と、ＰＬＣエミュレータ１５１（第１コントローラエミュレータ）と、アクチュエータエミュレータ１５５（第１アクチュエーターエミュレータ）と、ロボットコントローラエミュレータ１６１（第２コントローラエミュレータ）と、アクチュエータエミュレータ１６５（第２アクチュエーターエミュレータ）とを含む。
【００２７】
記憶装置１１０は、ＰＬＣエミュレータ１５１およびロボットコントローラエミュレータ１６１の間での共有データ１３０を格納する。共有データ１３０は、入力データ１３０Ａ（第１データ）と、出力データ１３０Ｂ（第２データ）とを含む。
【００２８】
ＰＬＣエミュレータ１５１は、ＰＬＣなどのコントローラ（第１コントローラ）の挙動を模擬するためのプログラムである。図１の例では、ＰＬＣエミュレータ１５１は、アクチュエータエミュレータ１５５を制御するように実装されている。アクチュエータエミュレータ１５５は、ワークの搬送装置（たとえば、移動テーブル、コンベア、アームロボットなど）などの駆動機器の挙動を模擬するためのプログラムである。
【００２９】
ロボットコントローラエミュレータ１６１は、ロボットコントローラなどのコントローラ（第２コントローラ）の挙動を模擬するためのプログラムである。図１の例では、ロボットコントローラエミュレータ１６１は、アクチュエータエミュレータ１６５を制御するように実装されている。アクチュエータエミュレータ１６５は、ワークの搬送装置（たとえば、移動テーブル、コンベア、アームロボット）などの駆動機器の挙動を模擬するためのプログラムである。
【００３０】
ＰＬＣエミュレータ１５１は、コントローラ間の通信周期に従った予め定められた第１制御周期ごとに、入力データ１３０Ａを入力として、アクチュエータエミュレータ１５５に対する指令値（第１指令値）を計算するとともに、当該第１制御周期ごとに、アクチュエータエミュレータ１５５の挙動に関する予め定められた収集対象のデータで出力データ１３０Ｂを更新する。収集対象のデータは、予め指定されており、たとえば、ロボットコントローラエミュレータ１６１に利用される各種のデータである。なお、第１制御周期は、コントローラ間の通信周期をコンピュータ上で再現することができればコントローラ間の通信周期とは必ずしも同じである必要はない。
【００３１】
ロボットコントローラエミュレータ１６１は、コントローラ間の通信周期に従った予め定められた第２制御周期ごとに、出力データ１３０Ｂを入力として、アクチュエータエミュレータ１６５に対する指令値（第２指令値）を計算するとともに、当該第２制御周期ごとに、アクチュエータエミュレータ１６５の挙動に関する予め定められた収集対象のデータで入力データ１３０Ａを更新する。当該収集対象のデータは、予め指定されており、たとえば、ＰＬＣエミュレータ１５１に利用される各種のデータである。なお、第２制御周期は、第１制御周期と同じであってもよいし異なっていてもよい。また、第２制御周期は、コントローラ間の通信周期をコンピュータ上で再現することができればコントローラ間の通信周期とは必ずしも同じである必要はない。
【００３２】
このように、ＰＬＣエミュレータ１５１は、コントローラ間の通信周期に従った第１制御周期ごとに、入力データ１３０Ａを取得するとともに出力データ１３０Ｂを更新する。一方で、ロボットコントローラエミュレータ１６１は、コントローラ間の通信周期に従った第２制御周期ごとに、出力データ１３０Ｂを取得するとともに入力データ１３０Ａを更新する。これにより、情報処理装置１００は、ＰＬＣエミュレータ１５１とロボットコントローラエミュレータ１６１との間のデータ交換をフィールドネットワーク上でのデータ交換と同じように実現することができる。フィールドネットワークの通信態様がコンピュータ上で再現されることで、情報処理装置１００は、ＦＡシステムの挙動を正確にシミュレーションすることができる。
【００３３】
＜Ｂ．共有データの更新タイミング＞
図２を参照して、上述の共有データ１３０の更新タイミングについて説明する。図２は、共有データ１３０の更新プロセスを時系列で表わした図である。
【００３４】
情報処理装置１００は、仮想時刻ｔを生成するためのタイマー１４０を含む。仮想時刻とは、シミュレーション中における一タイミングを示す仮想的な時間の尺度である。タイマー１４０は、仮想時刻ｔを順次カウントアップする。カウントアップの間隔は、一定である必要はなく異なっていてもよい。仮想時刻ｔは、ＰＬＣエミュレータ１５１およびロボットコントローラエミュレータ１６１に定期的に出力される。
【００３５】
ＰＬＣエミュレータ１５１による共有データ１３０の更新周期である第１制御周期と、アクチュエータエミュレータ１５５による共有データ１３０の更新周期である第２制御周期とは、タイマー１４０によって生成された仮想時刻ｔによって同期される。仮想時刻ｔによって同期が実現されることで、第１制御周期と第２制御周期は、実時間の制約を受けずに同期される。
【００３６】
第１制御周期および第２制御周期は、任意に設定され得る。以下では、第１制御周期として制御周期「２Ｔ」が設定されており、第２制御周期として制御周期「３Ｔ」が設定されている前提で共有データ１３０の更新プロセスについて説明を行う。
【００３７】
ステップＳ１において、仮想時刻ｔが時刻「Ｔ」になったとする。このとき、ＰＬＣエミュレータ１５１は、共有データ１３０の更新タイミングが到来したと判断しない。この場合、ＰＬＣエミュレータ１５１は、共有データ１３０を更新しない。同様に、仮想時刻ｔが「Ｔ」であるときには、ロボットコントローラエミュレータ１６１は、共有データ１３０の更新タイミングが到来したと判断しない。この場合、ロボットコントローラエミュレータ１６１は、共有データ１３０を更新しない。
【００３８】
ステップＳ２において、仮想時刻ｔが時刻「２Ｔ」になったとする。このことに基づいて、ＰＬＣエミュレータ１５１は、共有データ１３０の更新タイミングが到来したと判断する。この場合、ＰＬＣエミュレータ１５１は、共有データ１３０の内の入力データ１３０Ａを入力として、アクチュエータエミュレータ１５５に対する指令値を計算するとともに、予め定められた収集対象のデータで共有データ１３０の内の出力データ１３０Ｂを更新する。一方で、ロボットコントローラエミュレータ１６１は、共有データ１３０の更新タイミングが到来したと判断しない。この場合、ロボットコントローラエミュレータ１６１は、共有データ１３０を更新しない。
【００３９】
ステップＳ３において、仮想時刻ｔが時刻「３Ｔ」になったとする。このとき、ＰＬＣエミュレータ１５１は、共有データ１３０の更新タイミングが到来したと判断しない。この場合、ＰＬＣエミュレータ１５１は、共有データ１３０を更新しない。一方で、ロボットコントローラエミュレータ１６１は、共有データ１３０の更新タイミングが到来したと判断する。この場合、ロボットコントローラエミュレータ１６１は、共有データ１３０の内の出力データ１３０Ｂを入力として、アクチュエータエミュレータ１６５に対する指令値を計算するとともに、予め定められた収集対象のデータで共有データ１３０の内の入力データ１３０Ａを更新する。
【００４０】
以降、ＰＬＣエミュレータ１５１は、仮想時刻ｔが「２Ｔ」の整数倍になったときに共有データ１３０の更新タイミングが到来したと判断する。それ以外のときには、ＰＬＣエミュレータ１５１は、共有データ１３０の更新タイミングが到来したと判断しない。同様に、ロボットコントローラエミュレータ１６１は、仮想時刻ｔが「３Ｔ」の整数倍になったときに共有データ１３０の更新タイミングが到来したと判断する。それ以外のときには、ロボットコントローラエミュレータ１６１は、共有データ１３０の更新タイミングが到来したと判断しない。
【００４１】
＜Ｃ．ＦＡシステムの構成＞
図３を参照して、情報処理装置１００によるシミュレーション対象のＦＡシステムの一例について説明する。図３は、ＦＡシステム１のシステム構成の一例を示す図である。
【００４２】
ＦＡシステム１は、情報処理装置１００と、ＰＬＣ（Programmable Logic Controller）２００と、ロボットコントローラ３００と、アームロボット４００と、サーボドライバ５００Ａ，５００Ｂと、移動テーブル６００とを含む。
【００４３】
説明の便宜のために、以下では、水平面上における所定方向をｘ方向ともいう。また、水平面上においてｘ方向に直交する方向をｙ方向ともいう。ｘ方向およびｙ方向に直交する方向をｚ方向ともいう。すなわち、ｚ方向は、鉛直方向に相当する。
【００４４】
情報処理装置１００は、ＰＬＣ２００やロボットコントローラ３００の制御プログラムを設計するための開発環境を設計者に提供する。情報処理装置１００は、たとえば、ＰＣ（Personal Computer）、タブレット端末、または、スマートフォンなどのサポート装置である。情報処理装置１００およびＰＬＣ２００は、フィールドネットワークＮＷ１に接続されている。フィールドネットワークＮＷ１には、たとえば、ＥｔｈｅｒＮＥＴ（登録商標）が採用される。但し、フィールドネットワークＮＷ１は、ＥｔｈｅｒＮＥＴに限定されず、任意の通信手段が採用され得る。たとえば、情報処理装置１００およびＰＬＣ２００は、信号線で直接接続されてもよい。
【００４５】
ＰＬＣ２００、ロボットコントローラ３００、およびサーボドライバ５００Ａ，５００Ｂは、デイジーチェーンでフィールドネットワークＮＷ２に接続されている。フィールドネットワークＮＷ２には、データの到達時間が保証される、定周期通信を行うネットワークを採用することが好ましい。このような定周期通信を行うネットワークとしては、ＥｔｈｅｒＣＡＴ、ＥｔｈｅｒＮｅｔ／ＩＰ、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔなどが知られている。
【００４６】
アームロボット４００は、たとえば、スカラロボットである。アームロボット４００は、基台４２０と、第１アーム４２４と、第２アーム４２８と、エンドエフェクタ４３２とで構成されている。第１アーム４２４は、基台４２０に連結され、当該連結点を回転軸としてｘｙ平面上においてサーボモータ４４０Ａによって回転可能に構成される。第２アーム４２８は、第１アーム４２４に連結され、当該連結点を回転軸としてｘｙ平面上においてサーボモータ４４０Ｂによって回転駆動される。エンドエフェクタ４３２は、第２アーム４２８に連結されており、サーボモータ４４０Ｃによってｚ方向に沿って駆動可能に構成されるとともに、サーボモータ４４０Ｄによって回転可能に構成される。
【００４７】
以下では、サーボモータ４４０Ａ〜４４０Ｄを総称してサーボモータ４４０ともいう。ロボットコントローラ３００には、複数のサーボドライバ（図示しない）が内蔵されており、各サーボドライバは、対応するサーボモータ４４０を制御する。サーボモータ４４０の回転軸にはエンコーダ（図示しない）が設けられている。当該エンコーダは、サーボモータ４４０の位置（回転角度）、サーボモータ４４０の回転速度、サーボモータ４４０の累積回転数などを、対応するサーボドライバにフィードバックする。なお、当該サーボドライバは、ロボットコントローラ３００に必ずしも内蔵されている必要はなく、ロボットコントローラ３００と別に設けられてもよい。
【００４８】
エンドエフェクタ４３２は、たとえば、ワークＷのピックアップツールである。ワークＷは、製品または半製品である。一例として、エンドエフェクタ４３２は、吸引力を利用してワークＷを吸着することでワークＷをピックアップする。なお、アームロボット４００は、ワークＷを把持することによりワークＷをピックアップするように構成されてもよい。
【００４９】
移動テーブル６００は、サーボモータ６０１Ａ，６０１Ｂと、ワークＷの設置台６０２とを含む。サーボモータ６０１Ａは、サーボドライバ５００Ａによって制御され、ｘ軸方向において設置台６０２を駆動する。サーボモータ６０１Ｂは、サーボドライバ５００Ｂによって制御され、ｙ軸方向において設置台６０２を駆動する。サーボモータ６０１Ａ，６０１Ｂが協働して駆動されることで、設置台６０２は、ｘｙ平面上の任意の位置に駆動される。
【００５０】
以下では、サーボドライバ５００Ａ，５００Ｂを総称してサーボドライバ５００ともいい、サーボモータ６０１Ａ，６０１Ｂを総称してサーボモータ６０１ともいう。サーボドライバ５００は、対応するサーボモータ６０１を制御する。サーボモータ６０１の回転軸にはエンコーダ（図示しない）が設けられている。当該エンコーダは、サーボモータの位置（回転角度）、回転速度、累積回転数などをサーボドライバ５００にフィードバックする。
【００５１】
ＰＬＣ２００およびロボットコントローラ３００が協働して動作することで、アームロボット４００および移動テーブル６００が同期して駆動される。その結果、たとえば、移動テーブル６００が移動している間に、アームロボット４００が設置台６０２上のワークＷをピックアップすることなどが可能になる。
【００５２】
＜Ｄ．仮想ＦＡシステム＞
本実施の形態に従う情報処理装置１００は、図３に示される実機のＦＡシステム１の動作をシミュレーションするために、ＦＡシステム１内の各機器の挙動を模擬するエミュレータ群を利用する。ここでいうエミュレータとは、ＦＡシステム１内の各機器の挙動を再現することが可能なプログラムのことをいう。各エミュレータがＦＡシステム１内の各機器の挙動を正確に模擬することで、情報処理装置１００は、実機としてのＦＡシステム１の動作を正確にシミュレーションすることができる。
【００５３】
以下では、図４および図５を参照して、エミュレータで構成された仮想ＦＡシステム１Ｘについて説明する。図４は、仮想ＦＡシステム１Ｘの構成の一例を示す図である。
【００５４】
図４に示されるように、仮想ＦＡシステム１Ｘは、記憶装置１１０と、仮想時刻を生成するためのタイマー１４０と、第１エミュレータ１５０と、第２エミュレータ１６０とを含む。
【００５５】
記憶装置１１０は、仮想ＦＡシステム１Ｘを制御するための異なる種類の制御プログラムと、上述の共有データ１３０とを格納する。図４の例では、記憶装置１１０には、第１エミュレータ１５０を制御するためのＰＬＣプログラム１１１と、第２エミュレータ１６０を制御するためのロボットプログラム１１２とが格納されている。
【００５６】
第１エミュレータ１５０は、ＰＬＣ２００の挙動を模擬するＰＬＣエミュレータ１５１と、移動テーブル６００などの駆動機器の挙動を模擬するアクチュエータエミュレータ１５５とで構成されている。ＰＬＣエミュレータ１５１は、実行部１５１Ａと、指令値生成部１５３とで構成されている。アクチュエータエミュレータ１５５は、サーボドライバ５００Ａ，５００Ｂ（図３参照）の挙動を模擬するためのサーボドライバエミュレータ１５６Ａ，１５６Ｂと、サーボモータ６０１Ａ，６０１Ｂ（図３参照）の挙動を模擬するためのサーボモータエミュレータ１５７Ａ，１５７Ｂとで構成されている。
【００５７】
実行部１５１Ａは、アクチュエータエミュレータ１５５を制御するためのＰＬＣプログラム（第１制御プログラム）と、アクチュエータエミュレータ１６５を制御するためのロボットプログラム１１２（第２制御プログラム）とを実行する。
【００５８】
実行部１５１Ａは、軌跡演算部１５２と、解釈部１５４とで構成されている。軌跡演算部１５２は、アクチュエータエミュレータ１５５をシミュレーション上で駆動するためのＰＬＣプログラム１１１を読み込んでアクチュエータエミュレータ１５５を駆動するための軌跡を生成する。ＰＬＣプログラム１１１は、サイクリック実行型のプログラム言語で記述されており、たとえば、ラダー言語やＳＴ（Structured Text）言語で記述されている。サイクリック実行型とは、予め定められた制御周期ごとにプログラムに含まれる命令群を繰り返し実行する実行形態のことをいう。すなわち、軌跡演算部１５２は、予め定められた制御周期（第１制御周期）ごとにＰＬＣプログラム１１１に含まれる命令群を繰り返し実行する。当該制御周期は、タイマー１４０によって生成される仮想時刻を尺度とする。
【００５９】
ＰＬＣプログラム１１１には、移動テーブル６００を目標位置まで移動させるための移動命令が含まれている。軌跡演算部１５２は、ＰＬＣプログラム１１１に含まれる移動命令を実行すると、アクチュエータエミュレータ１５５による制御対象をシミュレーション上で移動させるための軌跡を生成する。当該軌跡は、たとえば、駆動対象の現在位置と、移動命令に含まれる目標位置とに基づいて生成される。図５は、生成された軌跡の一例を示す図である。図５の例では、ｘｙ平面上の軌跡が示されているが、生成される軌跡は、一次元であってもよいし、三次元であってもよい。生成された軌跡は、指令値生成部１５３に出力される。軌跡演算部１５２は、アクチュエータエミュレータ１６５によって駆動されるアームロボット４００の位置が目標位置に到達したことに基づいて、次の命令の解釈指示を解釈部１５４に送る。
【００６０】
指令値生成部１５３は、生成された軌跡に従ってアクチュエータエミュレータ１５５に出力するための指令値を生成する。当該指令値は、サーボモータエミュレータ１５７Ａ，１５７Ｂをシミュレーション上で駆動するための制御値であり、たとえば、回転角度、回転速度、または位置などで示される。図５の例では、指令値生成部１５３は、サーボモータエミュレータ１５７Ａについての回転角度θｘと、サーボモータエミュレータ１５７Ｂについての回転角度θｙとを指令値として各制御周期ごとに生成している。現在の仮想時刻に応じて、対応する回転角度θｘ，θｙがサーボモータエミュレータ１５７Ａ，１５７Ｂに順次出力される。
【００６１】
典型的には、指令値生成部１５３によって生成される指令値は、共有データ１３０の内の入力データ１３０Ａに基づいて生成される。入力データ１３０Ａには、ロボットコントローラエミュレータ１６１によって制御されるアクチュエータエミュレータ１６５の状態値が格納されている。ここでいう状態値とは、アクチュエータエミュレータ１６５によるコンピュータ上での駆動対象（たとえば、アームロボット４００）の各部品の現在位置を特定するための情報のことである。一例として、当該状態値は、アクチュエータエミュレータ１６５に出力される指令値や、アームロボット４００を駆動する各サーボモータの回転角、回転速度、回転加速度や、アームロボット４００の各関節の位置、角度などを含む。このような入力データ１３０Ａに基づいて指令値が生成されることで、指令値生成部１５３は、アームロボット４００の現在位置に合わせて、移動テーブル６００の位置を制御することができ、シミュレーション上で移動テーブル６００をアームロボット４００と協働させることができる。
【００６２】
指令値生成部１５３は、予め定められた収集対象のデータで共有データ１３０の内の出力データ１３０Ｂを更新する。一例として、収集対象のデータは、ＰＬＣエミュレータ１５１による駆動対象（たとえば、移動テーブル６００）の状態値を含む。当該状態値は、アクチュエータエミュレータ１５５に出力される指令値や、移動テーブル６００を駆動する各サーボモータの回転角、回転速度、回転加速度や、移動テーブル６００の座標値などを含む。
【００６３】
サーボドライバエミュレータ１５６Ａ，１５６Ｂは、指令値生成部１５３から出力される指令値に従ってサーボモータエミュレータ１５７Ａ，１５７Ｂをシミュレーション上で駆動する。
【００６４】
第２エミュレータ１６０は、ロボットコントローラ３００の挙動を模擬するロボットコントローラエミュレータ１６１と、アームロボット４００の駆動機器の挙動を模擬するアクチュエータエミュレータ１６５とで構成されている。ロボットコントローラエミュレータ１６１は、軌跡演算部１６２と、指令値生成部１６３とで構成されている。アクチュエータエミュレータ１６５は、図３に示されるサーボモータ４４０Ａ，４４０Ｂの挙動を模擬するサーボモータエミュレータ１６７Ａ，１６７Ｂとで構成されている。
【００６５】
解釈部１５４は、ロボットプログラム１１２を実行する。ロボットプログラム１１２は、アクチュエータエミュレータ１６５（第２アクチュエータエミュレータ）をシミュレーション上で駆動するための命令群を含む。ロボットプログラム１１２は、逐次実行型のロボット言語で記述されている。逐次実行型とは、予め定められた実行順序に従ってプログラムに含まれる命令群を順次実行する実行形態のことをいう。すなわち、解釈部１５４は、ロボットプログラム１１２（第２制御プログラム）に含まれる命令群を予め定められた実行順序で逐次的に実行する。当該命令群の実行は、タイマー１４０によって生成される仮想時刻に従って実行される。図４の例では、解釈部１５４は、ロボットプログラム１１２に含まれる命令群を予め定められた実行順序に従って解釈し、その解釈結果を順次ロボットコントローラエミュレータ１６１に出力している。
【００６６】
軌跡演算部１６２は、解釈部１５４から出力される解釈結果が移動命令を示す場合、アクチュエータエミュレータ１６５による制御対象をシミュレーション上で移動させるための軌跡を生成する。当該軌跡は、駆動対象の現在位置と、移動命令に含まれる目標位置とに基づいて生成される。生成された軌跡は、指令値生成部１６３に出力される。
【００６７】
指令値生成部１６３は、軌跡演算部１６２から出力された軌跡に従ってアクチュエータエミュレータ１６５に出力するための指令値を生成する。当該指令値は、サーボモータエミュレータ１６７Ａ，１６７Ｂをシミュレーション上で駆動するための制御値であり、たとえば、サーボモータエミュレータ１６７Ａ，１６７Ｂの仮想的な回転角度、回転速度、または位置などで示される。アクチュエータエミュレータ１６５に対する指令値の生成方法は、アクチュエータエミュレータ１５５に対する指令値の生成方法と同じであるので、その説明については繰り返さない。
【００６８】
典型的には、指令値生成部１６３によって生成される指令値は、共有データ１３０の内の出力データ１３０Ｂに基づいて生成される。出力データ１３０Ｂには、ロボットコントローラエミュレータ１６１によって制御されるアクチュエータエミュレータ１６５の状態値が格納されている。ここでいう状態値とは、アクチュエータエミュレータ１６５によるコンピュータ上での駆動対象（たとえば、移動テーブル６００）の各部品の現在位置を特定するための情報のことである。一例として、当該状態値は、アクチュエータエミュレータ１６５に出力される指令値や、移動テーブル６００を駆動する各サーボモータの回転角、回転速度、回転加速度や、移動テーブル６００の座標値などを含む。このような出力データ１３０Ｂに基づいて指令値が生成されることで、指令値生成部１６３は、移動テーブル６００の現在位置に合わせて、アームロボット４００の位置を制御することができ、シミュレーション上でアームロボット４００を移動テーブル６００と協働させることができる。
【００６９】
指令値生成部１６３は、予め定められた収集対象のデータで共有データ１３０の内の入力データ１３０Ａを更新する。一例として、収集対象のデータは、ロボットコントローラエミュレータ１６１による駆動対象（たとえば、アームロボット４００）の状態値を含む。当該状態値は、アクチュエータエミュレータ１６５に出力される指令値や、アームロボット４００を駆動する各サーボモータの回転角、回転速度、回転加速度や、アームロボット４００の各関節の位置、角度などを含む。
【００７０】
サーボモータエミュレータ１６７Ａ，１６７Ｂは、指令値生成部１６３から出力される指令値に従ってシミュレーション上で駆動される。なお、アクチュエータエミュレータ１６５は、アクチュエータエミュレータ１５５と同様に、サーボドライバエミュレータを含んでもよい。
【００７１】
なお、上述では、ＰＬＣプログラム１１１およびロボットプログラム１１２を例に挙げて説明を行ったが、情報処理装置１００による実行対象の制御プログラムは、ＰＬＣプログラム１１１およびロボットプログラム１１２に限定されない。制御プログラムには、種類が異なるプログラム言語で記述されている制御プログラムであれば任意の制御プログラムが採用される。
【００７２】
＜Ｅ．制御プログラムの同期実行処理＞
上述のＰＬＣプログラム１１１およびロボットプログラム１１２は、同期して実行される。これにより、情報処理装置１００は、ＰＬＣプログラム１１１に従って駆動されるテーブルと、ロボットプログラム１１２に従って駆動されるロボットとをシミュレーション上で協働させることができる。以下では、図６および図７を参照して、ＰＬＣプログラム１１１およびロボットプログラム１１２の同期処理について説明する。
【００７３】
図６および図７は、ＰＬＣプログラム１１１およびロボットプログラム１１２の編集画面の一例を示す図である。情報処理装置１００の表示部１２０には、ＰＬＣプログラム１１１およびロボットプログラム１１２の編集画面１２５が表示されている。編集画面１２５は、ＰＬＣプログラム１１１の編集領域１２０Ａと、ロボットプログラム１１２の編集領域１２０Ｂとを含む。編集領域１２０Ａ，１２０Ｂは、１つの画面において並べて表示されている。これにより、設計者は、ＰＬＣプログラム１１１およびロボットプログラム１１２を並行して設計することができる。
【００７４】
上述したように、ＰＬＣプログラム１１１は、サイクリック実行型のプログラムである。そのため、ＰＬＣエミュレータ１５１（図４参照）は、予め定められた制御周期ごとにＰＬＣプログラム１１１に含まれる命令群を繰り返し実行する。より具体的には、ＰＬＣエミュレータ１５１は、ＰＬＣプログラム１１１の先頭から最終までを１制御周期で実行する。その次の制御周期では、ＰＬＣエミュレータ１５１は、再び、ＰＬＣプログラム１１１の先頭から最終までを実行する。
【００７５】
一方で、ロボットプログラム１１２は、逐次実行型のプログラムである。そのため、解釈部１５４（図４参照）は、ロボットプログラム１１２に含まれる命令群を予め定められた実行順序で逐次的に解釈する。その結果、ロボットコントローラエミュレータ１６１は、ロボットプログラム１１２を上から順に１行ずつ実行する。このとき、解釈部１５４は、各行の命令の実行が完了するまでは次の行の命令を解釈しない。より具体的には、ロボットコントローラエミュレータ１６１は、現命令の実行が完了したことに基づいて、そのことを解釈部１５４にフィードバックする。解釈部１５４は、このフィードバックを受けて次の行の命令を解釈する。
【００７６】
このような実行形態の違いから、ＰＬＣプログラム１１１およびロボットプログラム１１２を同期して実行するためには、ＰＬＣプログラム１１１における命令群とロボットプログラム１１２に含まれる命令群とが、同期された制御周期で実行される必要がある。
【００７７】
同期実行を実現するために、解釈部１５４は、ロボットプログラム１１２（第２制御プログラム）に含まれる各命令について、当該命令の実行に要する実行時間を算出する。ここでいう実行時間は、ロボットプログラム１１２に含まれる命令の実行に要する時間に相関する指標で表されればよく、たとえば、ロボットプログラム１１２に含まれる各命令の実行に要する制御周期のサイクル数などで表されてもよい。当該サイクル数は、タイマー１４０による仮想時刻を尺度とする。仮想時刻の単位は、たとえば、「ｍｓ」で表される。図６の例では、ロボットプログラム１１２の１４行目に示されるロボット命令１１４については「２００ｍｓ」のサイクル数が特定されている。ロボット命令１１４に示される「ＡＰＰＲＯＳ  ｐｉｃｋ  ｌｏｃ，２５」は、目標位置「２５」にアームロボット４００を移動させる移動命令である。解釈部１５４が当該移動命令を解釈することにより、アームロボット４００を目標位置まで動作させるのに要する制御周期のサイクル数として「２００ｍｓ」が特定される。
【００７８】
ＰＬＣエミュレータ１５１は、ロボットコントローラエミュレータ１６１がロボット命令１１４を実行している間、ロボット命令１１４の実行に要する時間「２００ｍｓ」の分、ＰＬＣプログラム１１１に含まれる命令群を繰り返し実行する。一例として、ＰＬＣプログラム１１１の制御周期が「１ｍｓ」である場合には、ロボット命令１１４が実行されている間に、ＰＬＣエミュレータ１５１は、ＰＬＣプログラム１１１を２００サイクル（＝２００ｍｓ／１ｍｓ）繰り返し実行する。
【００７９】
ＰＬＣエミュレータ１５１が、ロボット命令１１４の実行に要する実行時間の分、ＰＬＣプログラム１１１に含まれる命令群を繰り返した後、ロボットコントローラエミュレータ１６１は、ロボット命令１１４の次の命令の実行を開始する。その例が図７に示されている。図７の例では、解釈部１５４は、ロボット命令１１４からロボット命令１１５に制御を切り替えている。ロボット命令１１５に示される「ＭＯＶＥＳ  ｐｉｃｋ．ｌｏｃ」は、目標位置「ｐｉｃｋ．ｌｏｃ」にアームロボット４００を移動させる移動命令である。解釈部１５４がロボット命令１１５を解釈することにより、アームロボット４００を目標位置まで動作させるのに要する実行時間「１０ｍｓ」が特定される。当該実行時間は、ロボット命令１１５の実行開始前または実行開始時に特定される。
【００８０】
その後、ＰＬＣエミュレータ１５１は、解釈部１５４がロボット命令１１５を実行している間、ロボット命令１１５の実行に要する時間「１０ｍｓ」の分、ＰＬＣプログラム１１１に含まれる命令群を繰り返し実行する。一例として、ＰＬＣプログラム１１１の制御周期が「１ｍｓ」である場合には、ロボット命令１１５が実行されている間に、ＰＬＣエミュレータ１５１は、ＰＬＣプログラム１１１を１０サイクル（＝１０ｍｓ／１ｍｓ）繰り返し実行する。
【００８１】
＜Ｆ．指令値の同期出力処理＞
ＥｔｈｅｒＣＡＴでの通信態様を模擬するために、ＰＬＣエミュレータ１５１（図４参照）は、ＥｔｈｅｒＣＡＴの通信周期に従った予め定められた制御周期ごとに、アクチュエータエミュレータ１５５に指令値を出力する。同様に、ロボットコントローラエミュレータ１６１（図４参照）は、ＥｔｈｅｒＣＡＴの通信周期に従った予め定められた制御周期ごとに、アクチュエータエミュレータ１６５に指令値を出力する。これにより、実システムと同様の通信態様でＦＡシステム１の動作をシミュレーションすることができる。
【００８２】
図８は、アクチュエータエミュレータ１５５，１６５（図４参照）に対する指令値の出力タイミングの同期処理を説明するための図である。以下では、ロボットプログラム１１２に含まれるロボット命令１１４，１１５（図６，図７参照）の実行過程を例に挙げて、指令値の出力タイミングの同期処理について説明する。
【００８３】
制御周期「Ｎ」において、ＰＬＣエミュレータ１５１は、Ｏ／Ｉ（Output/Input）処理、指令値計算処理、および解釈処理を順に実行する。ＰＬＣエミュレータ１５１の「Ｏ／Ｉ処理」により、予め定められた収集対象のデータが共有データ１３０の内の出力データ１３０Ｂに書き込こまれ、共有データ１３０の内の入力データ１３０Ａが今回の指令値計算処理に用いられる情報として取得される。ＰＬＣエミュレータ１５１の「指令値計算処理」により、取得した入力データ１３０Ａに基づいて、アクチュエータエミュレータ１５５に対する指令値が計算される。ＰＬＣエミュレータ１５１の「解釈処理」により、ロボットプログラム１１２の実行対象の行が解釈される。図８の例では、この解釈処理により、ロボットプログラム１１２に含まれるロボット命令１１４の実行時間として「２００ｍｓ」が特定される。
【００８４】
同様に、制御周期「Ｎ」において、ロボットコントローラエミュレータ１６１は、Ｏ／Ｉ処理、および指令値計算処理を順に実行する。ロボットコントローラエミュレータ１６１の「Ｏ／Ｉ処理」により、予め定められた収集対象のデータが共有データ１３０の内の入力データ１３０Ａに書き込まれ、共有データ１３０の内の出力データ１３０Ｂが今回の指令値計算処理に必要な情報として取得される。ロボットコントローラエミュレータ１６１の「指令値計算処理」により、取得した出力データ１３０Ｂに基づいて、アクチュエータエミュレータ１６５に対する指令値が計算される。
【００８５】
ＰＬＣエミュレータ１５１は、ロボットコントローラエミュレータ１６１がロボット命令１１４を実行している間、ロボット命令１１４の実行時間「２００ｍｓ」の分、ＰＬＣプログラム１１１を繰り返し実行する。制御周期が「１ｍｓ」である場合、ＰＬＣエミュレータ１５１は、ＰＬＣプログラム１１１を２００サイクル（＝２００ｍｓ／１ｍｓ）実行する。その間、ＰＬＣエミュレータ１５１は、Ｏ／Ｉ処理および指令値計算処理を制御周期「１ｍｓ」ごとに実行し、制御周期「１ｍｓ」ごとにアクチュエータエミュレータ１５５に指令値を出力する。
【００８６】
一方で、ロボットコントローラエミュレータ１６１は、ロボット命令１１４を実行している間、予め定められた制御周期ごとにＯ／Ｉ処理および指令値計算処理を実行する。制御周期が「１ｍｓ」である場合、ロボットコントローラエミュレータ１６１は、Ｏ／Ｉ処理および指令値計算処理を制御周期「１ｍｓ」ごとに実行し、制御周期「１ｍｓ」ごとにアクチュエータエミュレータ１６５に指令値を出力する。
【００８７】
ロボット命令１１４の実行から「２００ｍｓ」後である制御周期「Ｎ＋２００」において、ロボット命令１１４の実行が完了する。ＰＬＣエミュレータ１５１は、次の制御周期「Ｎ＋２０１」において、次のロボット命令１１５の解釈処理を実行する。図８の例では、この解釈処理により、ロボット命令１１５の実行時間として「１０ｍｓ」が特定される。
【００８８】
ＰＬＣエミュレータ１５１は、ロボットコントローラエミュレータ１６１がロボット命令１１５を実行している間、ロボット命令１１５の実行時間「１０ｍｓ」の分、ＰＬＣプログラム１１１を繰り返し実行する。制御周期が「１ｍｓ」である場合、ＰＬＣエミュレータ１５１は、ＰＬＣプログラム１１１を１０サイクル（＝１０ｍｓ／１ｍｓ）実行する。その間、ＰＬＣエミュレータ１５１は、Ｏ／Ｉ処理および指令値計算処理を実行し、制御周期「１ｍｓ」ごとにアクチュエータエミュレータ１５５に指令値を出力する。
【００８９】
一方で、ロボットコントローラエミュレータ１６１は、ロボット命令１１５を実行している間、予め定められた制御周期ごとにＯ／Ｉ処理および指令値計算処理を実行する。制御周期が「１ｍｓ」である場合、ロボットコントローラエミュレータ１６１は、Ｏ／Ｉ処理および指令値計算処理を制御周期「１ｍｓ」ごとに実行し、制御周期「１ｍｓ」ごとにアクチュエータエミュレータ１６５に指令値を出力する。
【００９０】
このように、ＰＬＣエミュレータ１５１およびロボットコントローラエミュレータ１６１が同期された状態で、アクチュエータエミュレータ１５５，１６５のそれぞれに指令値が出力されることで、異なる種類の制御対象の（たとえば、アームロボットや移動テーブルなど）を同期することが可能になる。
【００９１】
なお、上述では、ＰＬＣエミュレータ１５１の制御周期とロボットコントローラエミュレータ１６１の制御周期とが同じである例について説明を行ったが、これらの制御周期は、同期されていれば異なっていてもよい。一例として、これらの制御周期の一方は、他方の制御周期の整数倍であってもよい。たとえば、ＰＬＣエミュレータ１５１の制御周期が「１ｍｓ」であり、ロボットコントローラエミュレータ１６１の制御周期が「２ｍｓ」または「４ｍｓ」であってもよい。
【００９２】
また、上述では、ＰＬＣエミュレータ１５１の制御周期とロボットコントローラエミュレータ１６１の制御周期とが同期されている例について説明を行ったが、これらの制御周期は、同期されていなくてもよい。すなわち、ＰＬＣエミュレータ１５１およびロボットコントローラエミュレータ１６１は、アクチュエータエミュレータ１５５，１６５をそれぞれ非同期で制御してもよい。
【００９３】
＜Ｇ．シミュレーション画面＞
図９は、情報処理装置１００によるシミュレーション画面の一例を示す図である。図９を参照して、同期シミュレーションを実現するためのシミュレーション画面の一例について説明する。
【００９４】
情報処理装置１００の表示部１２０には、ＰＬＣプログラム１１１およびロボットプログラム１１２を編集するための編集画面１２５が示されている。編集画面１２５は、ＰＬＣプログラム１１１の編集領域１２０Ａと、ロボットプログラム１１２の編集領域１２０Ｂと、アームロボットや移動テーブルなどの駆動対象のシミュレーション上での挙動をリアルタイムに表示する表示領域１２０Ｃとを含む。
【００９５】
表示領域１２０Ｃには、実機のアームロボット４００を表したロボット画像４００Ａ，４００Ｂと、実機の移動テーブル６００を表した移動テーブル画像６００Ａとが示されている。ロボット画像４００Ａ，４００Ｂや移動テーブル画像６００Ａは、たとえば、ＣＡＤ（Computer Aided Design）データなどから生成される。一例として、情報処理装置１００は、三次元の形状をＣＡＤデータのインポート機能を有し、このインポート機能により、アームロボット４００のＣＡＤデータと、移動テーブル６００のＣＡＤデータを読み込む。情報処理装置１００は、２つのアームロボット４００と１つの移動テーブル６００とについて同期シミュレーションを行う場合には、アームロボット４００のＣＡＤデータから２つのアームロボットの三次元データを生成するとともに、移動テーブル６００のＣＡＤデータから１つの移動テーブルの三次元データを生成する。
【００９６】
図９の例のように、１つの移動テーブル６００と２つのアームロボット４００とについてシミュレーションを行う場合には、１つの第１エミュレータ１５０と、２つの第２エミュレータ１６０とが用いられる。上述したように、第１エミュレータ１５０および第２エミュレータは、同期した制御周期に従って、対応するアクチュエータエミュレータに指令値を出力する。情報処理装置１００は、順次出力されるこれらの指令値に基づいて、アームロボットの各三次元データを逐次更新するとともに、移動テーブルの三次元データを逐次更新する。情報処理装置１００は、逐次更新されるアームロボットの各三次元データからロボット画像４００Ａ，４００Ｂの表示を逐次更新する。これと同期して、情報処理装置１００は、逐次更新される移動テーブルの三次元データから移動テーブル画像６００Ａの表示を逐次更新する。
【００９７】
これにより、ＰＬＣプログラム１１１およびロボットプログラム１１２の実行に従って、ロボット画像４００Ａ，４００Ｂの表示および移動テーブル画像６００Ａの表示が同期して更新される。その結果、設計者は、ＰＬＣプログラム１１１およびロボットプログラム１１２が意図した通りに動作しているか否かを容易に確認することができ、ＰＬＣプログラム１１１およびロボットプログラム１１２を容易にデバッグすることができる。
【００９８】
＜Ｈ．情報処理装置１００のハードウェア構成＞
図１０を参照して、情報処理装置１００のハードウェア構成について説明する。図１０は、情報処理装置１００のハードウェア構成を示す模式図である。
【００９９】
情報処理装置１００は、一例として、汎用的なコンピュータアーキテクチャに準じて構成されるコンピュータからなる。情報処理装置１００は、制御装置１０１と、主メモリ１０２と、通信インターフェイス１０３と、操作インターフェイス１０５と、表示インターフェイス１０６と、光学ドライブ１０７と、記憶装置１１０（記憶部）とを含む。これらのコンポーネントは、内部バス１１９を介して互いに通信可能に接続されている。
【０１００】
制御装置１０１は、たとえば、少なくとも１つの集積回路によって構成される。集積回路は、たとえば、少なくとも１つのＣＰＵ（Central  Processing  Unit）、少なくとも１つのＡＳＩＣ（Application  Specific  Integrated  Circuit）、少なくとも１つのＦＰＧＡ（Field  Programmable  Gate  Array）、またはそれらの組み合わせなどによって構成される。制御装置１０１は、プログラムを主メモリ１０２に展開して実行することで、本実施の形態に従う各種処理を実現する。主メモリ１０２は、揮発性メモリにより構成され、制御装置１０１によるプログラム実行に必要なワークメモリとして機能する。
【０１０１】
通信インターフェイス１０３は、外部機器との間でネットワークを介してデータを遣り取りする。当該外部機器は、たとえば、上述のＰＬＣ２００（図３参照）、サーバ、その他の通信機器などを含む。情報処理装置１００は、通信インターフェイス１０３を介して、情報処理プログラム１１３をダウンロードできるように構成されてもよい。情報処理プログラム１１３は、ＰＬＣプログラム１１１やロボットプログラム１１２の統合開発環境を提供するためのプログラムであり、上述の同期シミュレーション処理などの機能を提供する。
【０１０２】
操作インターフェイス１０５は、操作部１２２に接続され、操作部１２２からのユーザ操作を示す信号を取り込む。操作部１２２は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。設計者は、操作部１２２を用いて、ＰＬＣプログラム１１１やロボットプログラム１１２を編集することができる。
【０１０３】
表示インターフェイス１０６は、表示部１２０と接続され、制御装置１０１などからの指令に従って、表示部１２０に対して、画像を表示するための画像信号を送出する。表示部１２０は、ディスプレイ、インジケータなどからなり、ユーザに対して各種情報を提示する。
【０１０４】
光学ドライブ１０７は、光学ディスク１０７Ａなどから、その中に格納されている各種プログラムを読み出して、記憶装置１１０にインストールする。
【０１０５】
図１０には、光学ドライブ１０７を介して必要なプログラムを情報処理装置１００にインストールする構成例を示すが、これに限られることなく、ネットワーク上のサーバ装置などからダウンロードするようにしてもよい。あるいは、情報処理装置１００上のプログラムは、ＵＳＢ（Universal Serial Bus）メモリ、ＳＤ（Secure Digital）カード、ＣＦ（Compact Flash）などの記憶媒体に書き込まれているプログラムによって書き換えられるように構成されてもよい。
【０１０６】
記憶装置１１０は、たとえば、ハードディスクや外付けの記憶媒体である。一例として、記憶装置１１０は、ＰＬＣプログラム１１１と、ロボットプログラム１１２と、情報処理プログラム１１３と、共有データ１３０とを格納する。情報処理プログラム１１３は、単体のプログラムとしてではなく、任意のプログラムの一部に組み込まれて提供されてもよい。この場合、任意のプログラムと協働して本実施の形態に従う同期処理が実現される。このような一部のモジュールを含まないプログラムであっても、本実施の形態に従う情報処理装置１００の趣旨を逸脱するものではない。さらに、本実施の形態に従う情報処理プログラム１１３によって提供される機能の一部または全部は、専用のハードウェアによって実現されてもよい。さらに、少なくとも１つのサーバが本実施の形態に従う同期処理を実現する、所謂クラウドサービスの形態で情報処理装置１００が構成されてもよい。
【０１０７】
＜Ｉ．情報処理装置１００の制御構造＞
図１１を参照して、情報処理装置１００の制御構造について説明する。図１１は、情報処理装置１００の制御装置１０１が実行する処理の一部を表わすフローチャートである。図１１の処理は、制御装置１０１がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【０１０８】
ステップＳ１１０において、制御装置１０１は、同期シミュレーションの実行開始操作を受け付けたか否かを判断する。一例として、編集画面１２５（図９参照）における同期シミュレーションの実行ボタンが押下されたことに基づいて、制御装置１０１は、同期シミュレーションの実行開始操作を受け付けたと判断する。制御装置１０１は、同期シミュレーションの実行開始操作を受け付けたと判断した場合（ステップＳ１１０においてＹＥＳ）、制御をステップＳ１１２に切り替える。そうでない場合には（ステップＳ１１０においてＮＯ）、制御装置１０１は、ステップＳ１１０の処理を再び実行する。
【０１０９】
ステップＳ１１２において、制御装置１０１は、上述の解釈部１５４（図４参照）として、ロボットプログラム１１２の実行対象の行に示されるロボット命令を解釈し、アクチュエータエミュレータ１５５をシミュレーション上で駆動するための軌跡演算を実行する。当該演算結果から実行対象の行に示されるロボット命令の実行に要するサイクル数が特定される。
【０１１０】
ステップＳ１１４において、制御装置１０１は、ロボットコントローラ３００の動作を模擬するロボットコントローラエミュレータ１６１として機能し、実行対象のロボット命令の実行を開始する。
【０１１１】
ステップＳ１２０において、制御装置１０１は、タイマー１４０が示す仮想時刻に基づいて、予め定められた第１制御周期が到来したか否かを判断する。制御装置１０１は、予め定められた第１制御周期が到来したと判断した場合（ステップＳ１２０においてＹＥＳ）、制御をステップＳ１２１に切り替える。そうでない場合には（ステップＳ１２０においてＮＯ）、制御装置１０１は、制御をステップＳ１３０に切り替える。
【０１１２】
ステップＳ１２１において、制御装置１０１は、予め定められた収集対象のデータで共有データ１３０の内の出力データ１３０Ｂを更新する。典型的には、収集対象のデータは、予め指定されている。一例として、収集対象のデータは、ＰＬＣエミュレータ１５１による駆動対象（たとえば、移動テーブル６００）の状態値を含む。当該状態値は、アクチュエータエミュレータ１５５に出力される指令値や、移動テーブル６００を駆動する各サーボモータの回転角、回転速度、回転加速度や、移動テーブル６００の座標値などを含む。
【０１１３】
ステップＳ１２２において、制御装置１０１は、移動テーブル６００のアクチュエータエミュレータ１５５に、前回にステップＳ１２４で生成された指令値を出力する。すなわち、後続のステップＳ１２４で生成された指令値は、ステップＳ１２２が次に実行されるときにアクチュエータエミュレータ１５５に出力される。
【０１１４】
ステップＳ１２４において、制御装置１０１は、上述の指令値生成部１５３（図４参照）として、共有データ１３０の内の入力データ１３０Ａに基づいて、移動テーブル６００のアクチュエータエミュレータ１５５に出力するための指令値を生成する。
【０１１５】
ステップＳ１３０において、制御装置１０１は、タイマー１４０が示す仮想時刻に基づいて、予め定められた第２制御周期が到来したか否かを判断する。なお、ステップＳ１２０での第１制御周期とステップＳ１３０での第２制御周期とが同じ場合には、ステップＳ１３０の判断処理は省かれてもよい。制御装置１０１は、予め定められた第２制御周期が到来したと判断した場合（ステップＳ１３０においてＹＥＳ）、制御をステップＳ１３１に切り替える。そうでない場合には（ステップＳ１３０においてＮＯ）、制御装置１０１は、制御をステップＳ１４０に切り替える。
【０１１６】
ステップＳ１３１において、制御装置１０１は、予め定められた収集対象のデータで共有データ１３０の内の入力データ１３０Ａを更新する。典型的には、収集対象のデータは、予め指定されている。一例として、収集対象のデータは、ロボットコントローラエミュレータ１６１による駆動対象（たとえば、アームロボット４００）の状態値を含む。当該状態値は、アクチュエータエミュレータ１６５に出力される指令値や、アームロボット４００を駆動する各サーボモータの回転角、回転速度、回転加速度や、アームロボット４００の各関節の位置、角度などを含む。
【０１１７】
ステップＳ１３２において、制御装置１０１は、アームロボット４００のアクチュエータエミュレータ１６５に、前回にステップＳ１３４で生成された指令値を出力する。すなわち、後続のステップＳ１３４で生成された指令値は、ステップＳ１３２が次に実行されるときにアクチュエータエミュレータ１６５に出力される。
【０１１８】
ステップＳ１３４において、制御装置１０１は、上述の指令値生成部１６３（図４参照）として、共有データ１３０の出力データ１３０Ｂに基づいて、アームロボット４００のアクチュエータエミュレータ１５５に出力するための指令値を生成する。当該指令値の生成方法については図５で説明した通りであるので、その説明については繰り返さない。
【０１１９】
ステップＳ１４０において、制御装置１０１は、タイマー１４０の仮想時刻をカウントアップする。仮想時刻は、たとえば、１ｍｓカウントアップされる。
【０１２０】
ステップＳ１５０において、制御装置１０１は、ステップＳ１１２で特定されたサイクル数に基づいて、アクチュエータエミュレータ１６５によってシミュレーション上で駆動されるアームロボットの位置が目標位置に到達したか否かを判断する。制御装置１０１は、アクチュエータエミュレータ１６５によってシミュレーション上で駆動されるアームロボットの位置が目標位置に到達したと判断した場合（ステップＳ１５０においてＹＥＳ）、制御をステップＳ１５２に切り替える。そうでない場合には（ステップＳ１５０においてＮＯ）、制御装置１０１は、制御をステップＳ１２０に戻す。
【０１２１】
ステップＳ１５２において、制御装置１０１は、上述の解釈部１５４として、ロボットプログラム１１２における実行対象の行を次の行に切り替える。
【０１２２】
＜Ｊ．まとめ＞
以上のようにして、情報処理装置１００の記憶装置１１０は、ＰＬＣエミュレータ１５１およびロボットコントローラエミュレータ１６１の間で共有される共有データ１３０を格納している。ＰＬＣエミュレータ１５１は、予め定められた第１制御周期ごとに、共有データ１３０の内の入力データ１３０Ａを入力として、アクチュエータエミュレータ１５５に対する指令値を計算する。また、ＰＬＣエミュレータ１５１は、当該第１制御周期ごとに、予め定められた収集対象のデータで共有データ１３０の内の出力データ１３０Ｂを更新する。
【０１２３】
一方で、ロボットコントローラエミュレータ１６１は、予め定められた第２制御周期ごとに、共有データ１３０の内の出力データ１３０Ｂを入力として、アクチュエータエミュレータ１６５に対する指令値を計算する。また、ロボットコントローラエミュレータ１６１は、当該第２制御周期ごとに、予め定められた収集対象のデータで共有データ１３０の内の入力データ１３０Ａを更新する。
【０１２４】
このように、ＰＬＣエミュレータ１５１は、第１制御周期ごとに、入力データ１３０Ａを取得するとともに出力データ１３０Ｂを更新し、ロボットコントローラエミュレータ１６１は、第２制御周期ごとに、出力データ１３０Ｂを取得するとともに入力データ１３０Ａを更新する。これにより、情報処理装置１００は、ＰＬＣエミュレータ１５１とロボットコントローラエミュレータ１６１との間のデータ交換をフィールドネットワーク上でのデータ交換と同じように実現することができる。フィールドネットワークの通信態様がコンピュータ上で再現されることで、情報処理装置１００は、ＦＡシステムの挙動を正確にシミュレーションすることができる。
【０１２５】
＜Ｋ．付記＞
以上のように、本実施形態は以下のような開示を含む。
【０１２６】
［構成１］
第１駆動機器（６００）の挙動を模擬する第１アクチュエータエミュレータ（１５５）と、
前記第１駆動機器（６００）と協働する第２駆動機器（４００）の挙動を模擬する第２アクチュエータエミュレータ（１６５）と、
前記第１駆動機器（６００）を制御するコントローラの挙動を模擬する第１コントローラエミュレータ（１５１）と、
前記第２駆動機器（４００）を制御するコントローラの挙動を模擬する第２コントローラエミュレータ（１６１）と、
前記第１コントローラエミュレータ（１５１）および前記第２コントローラエミュレータ（１６１）間で共有される第１，第２データ（１２０Ａ，１２０Ｂ）を格納するための記憶装置（１１０）とを備え、
前記第１コントローラエミュレータ（１５１）は、予め定められた第１制御周期ごとに、前記第１データ（１３０Ａ）を入力として、前記第１アクチュエータエミュレータ（１５５）に対する第１指令値を計算するとともに、前記第１制御周期ごとに、予め定められた収集対象のデータで前記第２データ（１３０Ｂ）を更新し、
前記第２コントローラエミュレータ（１６１）は、予め定められた第２制御周期ごとに、前記第２データ（１３０Ｂ）を入力として、前記第２アクチュエータエミュレータ（１６５）に対する第２指令値を計算するとともに、予め定められた収集対象のデータで前記第１データ（１３０Ａ）を更新する、情報処理装置（１００）。
【０１２７】
［構成２］
前記情報処理装置（１００）は、仮想時刻を生成するためのタイマー（１４０）をさらに備え、
前記第１制御周期および前記第２制御周期は、前記仮想時刻によって同期されている、構成１に記載の情報処理装置（１００）。
【０１２８】
［構成３］
前記第１コントローラエミュレータ（１５１）による前記収集対象のデータは、前記第１駆動機器（６００）の状態値を含み、
前記第２コントローラエミュレータ（１６１）による前記収集対象のデータは、前記第２駆動機器（４００）の状態値を含み、
前記第１コントローラエミュレータ（１５１）は、前記第１制御周期ごとに、前記第２駆動機器（４００）の状態値に基づいて前記第１指令値を計算するとともに前記第１駆動機器（６００）の現在の状態値で前記第２データ（１３０Ｂ）を更新し、
前記第２コントローラエミュレータ（１６１）は、前記第２制御周期ごとに、前記第１駆動機器（６００）の状態値に基づいて前記第２指令値を計算するとともに前記第２駆動機器（４００）の現在の状態値で前記第１データ（１３０Ａ）を更新する、構成１または２に記載の情報処理装置（１００）。
【０１２９】
［構成４］
前記記憶装置（１１０）は、前記第１コントローラエミュレータ（１５１）を制御するための第１制御プログラム（１１１）と、前記第２コントローラエミュレータ（１６１）を制御するための第２制御プログラム（１１２）とをさらに格納し、
前記第１制御プログラム（１１１）の種類は、前記第２制御プログラム（１１２）の種類とは異なる、構成１〜３のいずれか１項に記載の情報処理装置（１００）。
【０１３０】
［構成５］
前記第１制御プログラム（１１１）は、サイクリック実行型のプログラムであり、
前記第２制御プログラム（１１２）は、逐次実行型のプログラムである、構成４に記載の情報処理装置（１００）。
【０１３１】
［構成６］
第１駆動機器（６００）の挙動を模擬する第１アクチュエータエミュレータ（１５５）を制御するステップと、
前記第１駆動機器（６００）と協働する第２駆動機器（４００）の挙動を模擬する第２アクチュエータエミュレータ（１６５）を制御するステップと、
前記第１駆動機器（６００）を制御するコントローラの挙動を模擬する第１コントローラエミュレータ（１５１）を制御するステップと、
前記第２駆動機器（４００）を制御するコントローラの挙動を模擬する第２コントローラエミュレータ（１６１）を制御するステップと、
前記第１コントローラエミュレータ（１５１）および前記第２コントローラエミュレータ（１６１）間で共有される第１，第２データ（１２０Ａ，１２０Ｂ）を準備するステップとを備え、
前記第１コントローラエミュレータ（１５１）を制御するステップは、予め定められた第１制御周期ごとに、前記第１データ（１３０Ａ）を入力として、前記第１アクチュエータエミュレータ（１５５）に対する第１指令値を計算するとともに、前記第１制御周期ごとに、予め定められた収集対象のデータで前記第２データ（１３０Ｂ）を更新することを含み、
前記第２コントローラエミュレータ（１６１）を制御するステップは、予め定められた第２制御周期ごとに、前記第２データ（１３０Ｂ）を入力として、前記第２アクチュエータエミュレータ（１６５）に対する第２指令値を計算するとともに、予め定められた収集対象のデータで前記第１データ（１３０Ａ）を更新するステップとを含む、情報処理方法。
【０１３２】
［構成７］
コンピュータに実行される情報処理プログラムであって、
前記情報処理プログラムは、前記コンピュータに、
第１駆動機器（６００）の挙動を模擬する第１アクチュエータエミュレータ（１５５）を制御するステップと、
前記第１駆動機器（６００）と協働する第２駆動機器（４００）の挙動を模擬する第２アクチュエータエミュレータ（１６５）を制御するステップと、
前記第１駆動機器（６００）を制御するコントローラの挙動を模擬する第１コントローラエミュレータ（１５１）を制御するステップと、
前記第２駆動機器（４００）を制御するコントローラの挙動を模擬する第２コントローラエミュレータ（１６１）を制御するステップと、
前記第１コントローラエミュレータ（１５１）および前記第２コントローラエミュレータ（１６１）間で共有される第１，第２データ（１２０Ａ，１２０Ｂ）を準備するステップとを実行させ、
前記第１コントローラエミュレータ（１５１）を制御するステップは、予め定められた第１制御周期ごとに、前記第１データ（１３０Ａ）を入力として、前記第１アクチュエータエミュレータ（１５５）に対する第１指令値を計算するとともに、前記第１制御周期ごとに、予め定められた収集対象のデータで前記第２データ（１３０Ｂ）を更新することを含み、
前記第２コントローラエミュレータ（１６１）を制御するステップは、予め定められた第２制御周期ごとに、前記第２データ（１３０Ｂ）を入力として、前記第２アクチュエータエミュレータ（１６５）に対する第２指令値を計算するとともに、予め定められた収集対象のデータで前記第１データ（１３０Ａ）を更新するステップとを含む、情報処理プログラム。
【０１３３】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１３４】
１  ＦＡシステム、１Ｘ  仮想ＦＡシステム、１００  情報処理装置、１０１  制御装置、１０２  主メモリ、１０３  通信インターフェイス、１０５  操作インターフェイス、１０６  表示インターフェイス、１０７  光学ドライブ、１０７Ａ  光学ディスク、１１０  記憶装置、１１１  ＰＬＣプログラム、１１２  ロボットプログラム、１１３  情報処理プログラム、１１４，１１５  ロボット命令、１１９  内部バス、１２０  表示部、１２０Ａ，１２０Ｂ  編集領域、１２０Ｃ  表示領域、１２２  操作部、１２５  編集画面、１３０  共有データ、１３０Ａ  入力データ、１３０Ｂ  出力データ、１４０  タイマー、１５０  第１エミュレータ、１５１  ＰＬＣエミュレータ、１５１Ａ  実行部、１５２，１６２  軌跡演算部、１５３，１６３  指令値生成部、１５４  解釈部、１５５，１６５  アクチュエータエミュレータ、１５６Ａ，１５６Ｂ  サーボドライバエミュレータ、１５７Ａ，１５７Ｂ，１６７Ａ，１６７Ｂ  サーボモータエミュレータ、１６０  第２エミュレータ、１６１  ロボットコントローラエミュレータ、３００  ロボットコントローラ、４００  アームロボット、４００Ａ，４００Ｂ  ロボット画像、４２０  基台、４２４  第１アーム、４２８  第２アーム、４３２  エンドエフェクタ、４４０，４４０Ａ，４４０Ｂ，４４０Ｃ，４４０Ｄ，６０１，６０１Ａ，６０１Ｂ  サーボモータ、５００，５００Ａ，５００Ｂ  サーボドライバ、６００  移動テーブル、６００Ａ  移動テーブル画像、６０２  設置台。
【図１】
2019067285.tif 000003
【図２】
2019067285.tif 000004
【図３】
2019067285.tif 000005
【図４】
2019067285.tif 000006
【図５】
2019067285.tif 000007
【図６】
2019067285.tif 000008
【図７】
2019067285.tif 000009
【図８】
2019067285.tif 000010
【図９】
2019067285.tif 000011
【図１０】
2019067285.tif 000012
【図１１】
2019067285.tif 000013