(57)【要約】【課題】異なる種類の制御プログラムを同期して実行する技術が要望されている。【解決手段】情報処理装置１００は、第１制御対象を駆動する駆動機器の挙動を模擬するアクチュエータエミュレータ１５５と、第１制御対象と協働する第２制御対象を駆動する駆動機器の挙動を模擬するアクチュエータエミュレータ１６５と、仮想時刻を生成するタイマー１４０と、アクチュエータエミュレータ１５５を制御するＰＬＣプログラム１１１と、アクチュエータエミュレータ１６５を制御するロボットプログラム１１２とを実行する実行部１５１Ａとを備える。実行部１５１Ａによる制御プログラムの実行モードは、仮想時刻に従ってＰＬＣプログラム１１１およびロボットプログラム１１２を同期して実行する同期実行モードと、ＰＬＣプログラム１１１およびロボットプログラム１１２を同期せずに実行する非同期実行モードとを含む。【選択図】図２
2019032789.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）などの記憶媒体に書き込まれているプログラムによって書き換えられるように構成されてもよい。
【０１０１】
記憶装置１１０は、たとえば、ハードディスクや外付けの記憶媒体である。一例として、記憶装置１１０は、開発中のＰＬＣプログラム１１１と、情報処理プログラム１１３とを格納する。情報処理プログラム１１３は、単体のプログラムとしてではなく、任意のプログラムの一部に組み込まれて提供されてもよい。この場合、任意のプログラムと協働して本実施の形態に従う同期処理が実現される。このような一部のモジュールを含まないプログラムであっても、本実施の形態に従う情報処理装置１００の趣旨を逸脱するものではない。さらに、本実施の形態に従う情報処理プログラム１１３によって提供される機能の一部または全部は、専用のハードウェアによって実現されてもよい。さらに、少なくとも１つのサーバが本実施の形態に従う同期処理を実現する、所謂クラウドサービスの形態で情報処理装置１００が構成されてもよい。
【０１０２】
［Ｊ．情報処理装置１００の制御構造］
図１２〜図１４を参照して、情報処理装置１００のハードウェア構成について説明する。図１２は、同期実行モードでの制御プログラムの実行処理を表わすフローチャートである。図１３は、非同期実行モードでの制御プログラムの実行処理を表わすフローチャートである。図１４は、制御プログラムの実行の一時停止中における処理を表わすフローチャートである。図１２〜図１４の処理は、情報処理装置１００の制御装置１０１がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【０１０３】
（Ｊ１．同期実行モードにおける制御フロー）
まず、図１２を参照して、同期実行モードにおける制御フローについて説明する。
【０１０４】
ステップＳ１１０において、制御装置１０１は、同期実行モードが指定された状態で制御プログラムの実行開始操作を受け付けたか否かを判断する。制御装置１０１は、同期実行モードが指定された状態で制御プログラムの実行開始操作を受け付けたと判断した場合（ステップＳ１１０においてＹＥＳ）、制御をステップＳ１１２に切り替える。そうでない場合には（ステップＳ１１０においてＮＯ）、制御装置１０１は、ステップＳ１１０の処理を再び実行する。
【０１０５】
ステップＳ１１２において、制御装置１０１は、上述の解釈部１５４（図２参照）として、ロボットプログラム１１２の実行対象の行に示されるロボット命令を解釈し、アクチュエータエミュレータ１５５をシミュレーション上で駆動するための軌跡演算を実行する。当該演算結果から実行対象の行に示されるロボット命令の実行に要するサイクル数が特定される。
【０１０６】
ステップＳ１１４において、制御装置１０１は、ロボットコントローラ３００の動作を模擬するロボットコントローラエミュレータ１６１として機能し、実行対象のロボット命令の実行を開始する。
【０１０７】
ステップＳ１２０において、制御装置１０１は、タイマー１４０が示す仮想時刻に基づいて、ＰＬＣプログラム１１１の実行周期が到来したか否かを判断する。制御装置１０１は、ＰＬＣプログラム１１１の実行周期が到来したと判断した場合（ステップＳ１２０においてＹＥＳ）、制御をステップＳ１２２に切り替える。そうでない場合には（ステップＳ１２０においてＮＯ）、制御装置１０１は、制御をステップＳ１３０に切り替える。
【０１０８】
ステップＳ１２２において、制御装置１０１は、移動テーブル６００のアクチュエータエミュレータ１５５に、前回にステップＳ１２４で生成された位置指令値を出力する。すなわち、後続のステップＳ１２４で生成された位置指令値は、ステップＳ１２２が次に実行されるときにアクチュエータエミュレータ１５５に出力される。
【０１０９】
ステップＳ１２４において、制御装置１０１は、上述の指令値生成部１５３（図２参照）として、移動テーブル６００のアクチュエータエミュレータ１５５に出力するための位置指令値を生成する。当該位置指令値の生成方法については図３で説明した通りであるので、その説明については繰り返さない。
【０１１０】
ステップＳ１３０において、制御装置１０１は、タイマー１４０が示す仮想時刻に基づいて、ロボットプログラム１１２の実行周期が到来したか否かを判断する。なお、ＰＬＣプログラム１１１の実行周期とロボットプログラム１１２の実行周期とが同じ場合には、ステップＳ１３０の判断処理は省かれてもよい。制御装置１０１は、ロボットプログラム１１２の実行周期が到来したと判断した場合（ステップＳ１３０においてＹＥＳ）、制御をステップＳ１３２に切り替える。そうでない場合には（ステップＳ１３０においてＮＯ）、制御装置１０１は、制御をステップＳ１４０に切り替える。
【０１１１】
ステップＳ１３２において、制御装置１０１は、アームロボット４００のアクチュエータエミュレータ１６５に、前回にステップＳ１３４で前回に生成された位置指令値を出力する。すなわち、後続のステップＳ１３４で生成された位置指令値は、ステップＳ１３２が次に実行されるときにアクチュエータエミュレータ１６５に出力される。
【０１１２】
ステップＳ１３４において、制御装置１０１は、上述の指令値生成部１６３（図２参照）として、ロボットコントローラ３００の動作を模擬するＰＬＣエミュレータ１５１として機能し、ステップＳ１１２で生成された軌跡に従って、アームロボット４００のアクチュエータエミュレータ１５５に出力するための位置指令値を生成する。当該位置指令値の生成方法については図３で説明した通りであるので、その説明については繰り返さない。
【０１１３】
ステップＳ１４０において、制御装置１０１は、タイマー１４０の仮想時刻をカウントアップする。仮想時刻は、たとえば、１ｍｓカウントアップされる。
【０１１４】
ステップＳ１５０において、制御装置１０１は、アクチュエータエミュレータ１６５によってシミュレーション上で駆動されるアームロボットの位置が目標位置に到達したか否かを判断する。制御装置１０１は、アクチュエータエミュレータ１６５によってシミュレーション上で駆動されるアームロボットの位置が目標位置に到達したと判断した場合（ステップＳ１５０においてＹＥＳ）、制御をステップＳ１５２に切り替える。そうでない場合には（ステップＳ１５０においてＮＯ）、制御装置１０１は、制御をステップＳ１２０に戻す。
【０１１５】
ステップＳ１５２において、制御装置１０１は、上述の解釈部１５４として、ロボットプログラム１１２における実行対象の行を次の行に切り替える。
【０１１６】
ステップＳ１６０において、制御装置１０１は、ＰＬＣプログラム１１１およびロボットプログラム１１２のいずれかについてブレークポイントに到来したか否かを判断する。制御装置１０１は、ＰＬＣプログラム１１１およびロボットプログラム１１２のいずれかについてブレークポイントに到来したと判断した場合（ステップＳ１６０においてＹＥＳ）、図１２に示される処理を終了する。そうでない場合には（ステップＳ１６０においてＮＯ）、制御装置１０１は、制御をステップＳ１１２に戻す。
【０１１７】
（Ｊ２．非同期実行モードにおける制御フロー）
次に、図１３を参照して、非同期実行モードにおける制御フローについて説明する。
【０１１８】
ステップＳ２１０において、制御装置１０１は、非同期実行モードが指定された状態で制御プログラムの実行開始操作を受け付けたか否かを判断する。制御装置１０１は、非同期実行モードが指定された状態で制御プログラムの実行開始操作を受け付けたと判断した場合（ステップＳ２１０においてＹＥＳ）、制御をステップＳ２１２に切り替える。そうでない場合には（ステップＳ２１０においてＮＯ）、制御装置１０１は、ステップＳ２１０の処理を再び実行する。
【０１１９】
ステップＳ２１２において、制御装置１０１は、非同期実行モードでの制御プログラムの実行を開始する。これにより、ＰＬＣプログラム１１１の実行と、ロボットプログラム１１２の実行とが並列的に開始される。ＰＬＣプログラム１１１の実行処理は、ステップＳ２２０，Ｓ２２２，Ｓ２２４，Ｓ２２６によって実現される。ロボットプログラム１１２の実行処理は、ステップＳ２３２，Ｓ２３４，Ｓ２３６によって実現される。
【０１２０】
ステップＳ２２０において、制御装置１０１は、タイマー１４０が示す仮想時刻に基づいて、ＰＬＣプログラム１１１の実行周期が到来したか否かを判断する。制御装置１０１は、ＰＬＣプログラム１１１の実行周期が到来したと判断した場合（ステップＳ２２０においてＹＥＳ）、制御をステップＳ２２２に切り替える。そうでない場合には（ステップＳ２２０においてＮＯ）、制御装置１０１は、ステップＳ２２０の処理を再び実行する。
【０１２１】
ステップＳ２２２において、制御装置１０１は、移動テーブル６００のアクチュエータエミュレータ１５５に、前回にステップＳ２２４で生成された位置指令値を出力する。すなわち、後続のステップＳ２２４で生成された位置指令値は、ステップＳ２２２が次に実行されるときにアクチュエータエミュレータ１５５に出力される。
【０１２２】
ステップＳ２２４において、制御装置１０１は、上述の指令値生成部１５３（図２参照）として、ロボットプログラム１１２の実行対象の行に示されるロボット命令を実行し、移動テーブル６００のアクチュエータエミュレータ１５５に出力するための位置指令値を生成する。当該位置指令値の生成方法については図３で説明した通りであるので、その説明については繰り返さない。
【０１２３】
ステップＳ２２６において、制御装置１０１は、タイマー１４０の仮想時刻をカウントアップする。仮想時刻は、たとえば、１ｍｓカウントアップされる。
【０１２４】
ステップＳ２３２において、制御装置１０１は、アームロボット４００のアクチュエータエミュレータ１６５に、前回にステップＳ２３４で生成された位置指令値を出力する。すなわち、後続のステップＳ２３４で生成された位置指令値は、ステップＳ２３２が次に実行されるときにアクチュエータエミュレータ１６５に出力される。
【０１２５】
ステップＳ２３４において、制御装置１０１は、上述の指令値生成部１６３（図２参照）として、ロボットコントローラ３００の動作を模擬するＰＬＣエミュレータ１５１として機能し、アームロボット４００のアクチュエータエミュレータ１５５に出力するための位置指令値を生成する。当該位置指令値の生成方法については図３で説明した通りであるので、その説明については繰り返さない。
【０１２６】
ステップＳ２３６において、制御装置１０１は、上述の解釈部１５４として、ロボットプログラム１１２における実行対象の行を次の行に切り替える。
【０１２７】
ステップＳ２４０において、制御装置１０１は、ＰＬＣプログラム１１１およびロボットプログラム１１２のいずれかについてブレークポイントに到来したか否かを判断する。制御装置１０１は、ＰＬＣプログラム１１１およびロボットプログラム１１２のいずれかについてブレークポイントに到来したと判断した場合（ステップＳ２４０においてＹＥＳ）、図１３に示される処理を終了する。そうでない場合には（ステップＳ２４０においてＮＯ）、制御装置１０１は、制御をステップＳ２２０に戻す。
【０１２８】
（Ｊ３．一時停止中における制御フロー）
次に、図１４を参照して、ＰＬＣプログラム１１１およびロボットプログラム１１２の実行の一時停止中における制御フローについて説明する。
【０１２９】
ステップＳ３１０において、制御装置１０１は、ＰＬＣプログラム１１１およびロボットプログラム１１２の実行が一時停止中であるか否かを判断する。制御装置１０１は、ＰＬＣプログラム１１１およびロボットプログラム１１２の実行が一時停止中である場合（ステップＳ３１０においてＹＥＳ）、制御をステップＳ３１２に切り替える。そうでない場合には（ステップＳ３１０においてＮＯ）、制御装置１０１は、ステップＳ３１０の処理を再び実行する。
【０１３０】
ステップＳ３１２において、制御装置１０１は、同期実行モードまたは非同期実行モードの指定を受け付ける。実行モードの切り替え操作は、たとえば、編集画面１２５に対して行われる。一例として、編集画面１２５に対するクリック操作や、編集画面１２５に対する所定のマウスジェスチャ操作などで実行モードが指定される。
【０１３１】
ステップＳ３２０において、制御装置１０１は、ステップ実行を行うための操作を受け付けたか否かを判断する。ステップ実行は、たとえば、キーボードの所定キーの押下操作などによって実現される。制御装置１０１は、ステップ実行を行うための操作を受け付けたと判断された場合（ステップＳ３２０においてＹＥＳ）、制御をステップＳ３３０に切り替える。そうでない場合には（ステップＳ３２０においてＮＯ）、制御装置１０１は、制御をステップＳ３４０に切り替える。
【０１３２】
ステップＳ３３０において、制御装置１０１は、指定されている実行モードが同期実行モードであるか否かを判断する。制御装置１０１は、指定されている実行モードが同期実行モードであると判断した場合（ステップＳ３３０においてＹＥＳ）、制御をステップＳ３３２に切り替える。そうでない場合には（ステップＳ３３０においてＮＯ）、制御装置１０１は、制御をステップＳ３３４に切り替える。
【０１３３】
ステップＳ３３２において、制御装置１０１は、ＰＬＣプログラム１１１とロボットプログラム１１２とを同期させて１周期分実行を行う。この同期実行については図１２で説明した通りであるので、その説明については繰り返さない。
【０１３４】
ステップＳ３３４において、制御装置１０１は、ＰＬＣプログラム１１１とロボットプログラム１１２との内の指定されている方の制御プログラムをステップ実行する。ステップ実行を行う方の制御プログラムは、ステップＳ３２０におけるステップ実行操作の内容によって区別される。一例として、制御装置１０１は、ステップ実行を行うための予め定められた第１操作（たとえば、キーボードに対する所定の第１キーの押下操作）をステップＳ３２０で受け付けている場合、ＰＬＣプログラム１１１をステップ実行する。一方で、制御装置１０１は、ステップ実行を行うための予め定められた第２操作（たとえば、第１キーとは異なる所定の第２キーの押下操作）をステップＳ３２０で受け付けている場合、ロボットプログラム１１２をステップ実行する。
【０１３５】
ステップＳ３４０において、制御装置１０１は、制御プログラムの再実行操作または停止操作を受け付けたか否かを判断する。制御装置１０１は、制御プログラムの再実行操作または停止操作を受け付けたと判断した場合（ステップＳ３４０においてＹＥＳ）、図１４に示される処理を終了する。そうでない場合には（ステップＳ３４０においてＮＯ）、制御装置１０１は、制御をステップＳ３２０に戻す。
【０１３６】
より具体的には、制御装置１０１は、制御プログラムの再実行操作を受け付けた場合において、同期実行モードが指定されているときには、図１４に示される処理を終了し、図１２に示される同期実行モードでの実行を開始する。また、制御装置１０１は、制御プログラムの再実行操作を受け付けた場合において、非同期実行モードが指定されているときには、図１４に示される処理を終了し、図１３に示される非同期実行モードでの実行を開始する。また、制御装置１０１が制御プログラムの停止操作を受け付けた場合には、図１４に示される処理を終了し、編集画面１２５に対する制御プログラムの編集が可能な状態になる。
【０１３７】
［Ｋ．まとめ］
以上のようにして、情報処理装置１００によるプログラムの実行モードは、仮想時刻に従ってＰＬＣプログラム１１１およびロボットプログラム１１２を同期して実行する同期実行モードと、ＰＬＣプログラム１１１およびロボットプログラム１１２を同期せずに実行する非同期実行モードとを含む。これにより、設計者は、ＰＬＣプログラム１１１およびロボットプログラム１１２を同期してデバッグ（シミュレーション）することもできるし、非同期でデバッグ（シミュレーション）することもできる。その結果、設計者は、状況に応じたデバッグ（シミュレーション）が可能になり、デバッグ（シミュレーション）の汎用性が改善される。
【０１３８】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１３９】
１  ＦＡシステム、１Ｘ  仮想ＦＡシステム、１００  情報処理装置、１０１  制御装置、１０２  主メモリ、１０３  通信インターフェイス、１０５  操作インターフェイス、１０６  表示インターフェイス、１０７  光学ドライブ、１０７Ａ  光学ディスク、１１０  記憶装置、１１１  ＰＬＣプログラム、１１２  ロボットプログラム、１１３  情報処理プログラム、１１４，１１５  ロボット命令、１１９  内部バス、１２０  表示部、１２０Ａ，１２０Ｂ  編集領域、１２０Ｃ  表示領域、１２１  実行モード表示領域、１２２  操作部、１２５  編集画面、１４０  タイマー、１５０  第１エミュレータ、１５１  ＰＬＣエミュレータ、１５１Ａ  実行部、１５２，１６２  軌跡演算部、１５３，１６３  指令値生成部、１５４  解釈部、１５５，１６５  アクチュエータエミュレータ、１５６Ａ，１５６Ｂ  サーボドライバエミュレータ、１５７Ａ，１５７Ｂ，１６７Ａ，１６７Ｂ  サーボモータエミュレータ、１６０  第２エミュレータ、１６１  ロボットコントローラエミュレータ、３００  ロボットコントローラ、４００  アームロボット、４００Ａ，４００Ｂ  ロボット画像、４２０  基台、４２４  第１アーム、４２８  第２アーム、４３２  エンドエフェクタ、４４０，４４０Ａ，４４０Ｂ，４４０Ｃ，４４０Ｄ，６０１，６０１Ａ，６０１Ｂ  サーボモータ、５００，５００Ａ，５００Ｂ  サーボドライバ、６００  移動テーブル、６００Ａ  移動テーブル画像、６０２  設置台。
【図１】
2019032789.tif 000003
【図２】
2019032789.tif 000004
【図３】
2019032789.tif 000005
【図４】
2019032789.tif 000006
【図５】
2019032789.tif 000007
【図６】
2019032789.tif 000008
【図７】
2019032789.tif 000009
【図８】
2019032789.tif 000010
【図９】
2019032789.tif 000011
【図１０】
2019032789.tif 000012
【図１１】
2019032789.tif 000013
【図１２】
2019032789.tif 000014
【図１３】
2019032789.tif 000015
【図１４】
2019032789.tif 000016