(57)【特許請求の範囲】
【請求項１】
機械の動きを制御するコントローラにおいて制御周期ごとに実行される制御プログラムをシミュレーションする情報処理装置であって、
前記制御プログラムを記憶する記憶手段と、
前記記憶手段に記憶された制御プログラムをシミュレーションするシミュレーション実行手段と、
前記シミュレーションの結果を表示装置に表示させる表示制御手段と、
前記シミュレーション中において、所定のオペレータ操作を受け付けるユーザインターフェイス手段と、
前記ユーザインターフェイス手段が前記オペレータ操作を受け付けたタイミングにおける少なくとも１つの入力変数の値と当該入力変数を識別するための識別情報とを取得する取得手段と、
前記取得手段によって取得された前記入力変数の値と前記識別情報とを、前記記憶手段にファイルとして保存する保存手段と、
前記記憶手段に記憶された制御プログラムを変更する変更手段とを備え、
前記シミュレーション実行手段は、
前記ファイルとして保存された前記入力変数の値と同じ値を用いて、当該入力変数の前記識別情報によって特定される入力変数の値を上書きし、
前記上書きされた入力変数の値を用いて、前記変更された制御プログラムをシミュレーションし、
前記表示制御手段は、前記変更された制御プログラムのシミュレーションの結果を前記表示装置に表示させる、情報処理装置。
【請求項２】
前記シミュレーション実行手段は、前記オペレータ操作を受け付けると、前記シミュレーションを一時停止する、請求項１に記載の情報処理装置。
【請求項３】
前記シミュレーション実行手段は、前記取得手段が前記入力変数の値と前記識別情報とを取得すると、前記シミュレーションを再開する、請求項２に記載の情報処理装置。
【請求項４】
前記取得手段は、任意のタイミングにおける複数の入力変数の値と、各前記入力変数を識別するための複数の識別情報とを対応付けて取得し、
前記シミュレーション実行手段は、前記複数の入力変数の中から少なくとも１つの入力変数が指定されたことに基づき、当該指定された入力変数の値を当該入力変数の識別情報に対応付けられた前記取得された入力変数の値として、前記変更された制御プログラムをシミュレーションする、請求項１から３のいずれか１項に記載の情報処理装置。
【請求項５】
前記入力変数の識別情報は、前記入力変数の名称であり、
前記表示制御手段は、前記取得された入力変数の名称を前記表示装置に一覧表示させ、
前記情報処理装置は、
前記一覧表示された複数の入力変数の中から１つ以上の入力変数の指定を受け付ける受付手段と、
前記複数の入力変数の値から前記指定された入力変数毎に当該入力変数の値を抽出する抽出手段とをさらに備え、
前記シミュレーション実行手段は、前記抽出された入力変数の値を用いて前記変更された制御プログラムをシミュレーションする、請求項４に記載の情報処理装置。
【請求項６】
機械の動きを制御するコントローラにおいて制御周期ごとに実行される制御プログラムをシミュレーションする情報処理装置におけるシミュレーション方法であって、
前記制御プログラムをシミュレーションするステップと、
前記シミュレーションの結果を表示するステップと、
前記シミュレーション中において、所定のオペレータ操作を受け付けるステップと、
前記オペレータ操作を受け付けたタイミングにおける少なくとも１つの入力変数の値と当該入力変数を識別するための識別情報とを取得するステップと、
取得された前記入力変数の値と前記識別情報とを、前記情報処理装置のメモリにファイルとして保存するステップと、
前記制御プログラムを変更するステップと、
前記ファイルとして保存された前記入力変数の値と同じ値を用いて、当該入力変数の前記識別情報によって特定される入力変数の値を上書きするステップと、
前記上書きされた入力変数の値を用いて、前記変更された制御プログラムをシミュレーションするステップと、
前記変更された制御プログラムのシミュレーションの結果を表示するステップとを備える、シミュレーション方法。
【請求項７】
機械の動きを制御するコントローラにおいて制御周期ごとに実行される制御プログラムをシミュレーションする情報処理装置を制御するためのプログラムであって、
前記制御プログラムをシミュレーションするステップと、
前記シミュレーションの結果を表示するステップと、
前記シミュレーション中において、所定のオペレータ操作を受け付けるステップと、
前記オペレータ操作を受け付けたタイミングにおける少なくとも１つの入力変数の値と当該入力変数を識別するための識別情報とを取得するステップと、
取得された前記入力変数の値と前記識別情報とを、前記情報処理装置のメモリにファイルとして保存するステップと、
前記制御プログラムを変更するステップと、
前記ファイルとして保存された前記入力変数の値と同じ値を用いて、当該入力変数の前記識別情報によって特定される入力変数の値を上書きするステップと、
前記上書きされた入力変数の値を用いて、前記変更された制御プログラムをシミュレーションするステップと、
前記変更された制御プログラムのシミュレーションの結果を表示するステップとを、前記情報処理装置のプロセッサに実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、シミュレーション方法、およびプログラムに関し、特に、制御プログラムをシミュレーション実行することができる情報処理装置、情報処理装置におけるシミュレーション方法、および情報処理装置を制御するためのプログラムに関する。
【背景技術】
【０００２】
従来、機械の動きを制御するコントローラにおいて制御周期ごとに実行される、シーケンス制御部分およびモーション制御部分を含む制御プログラムを、シミュレーション実行することができるコントローラサポート装置が知られている。
【０００３】
たとえば、特許文献１には、モーション制御を含む制御プログラムをシミュレーション実行する場合に、実行の開始から終了までの間の途中の制御周期からの再実行を可能にするコントローラサポート装置が開示されている。具体的には、当該コントローラサポート装置は、制御プログラムのシーケンス制御部分を１周期分シミュレーション実行し、シーケンス制御部分に関する実行結果を生成する。コントローラサポート装置は、モーション制御部分を１周期分シミュレーション実行し、モーション制御部分に関する実行結果を生成する。そして、次に、コントローラサポート装置は、制御周期番号をインクリメント更新する。コントローラサポート装置は、再開可能制御周期かどうかを判断し、再開可能制御周期であると判断した場合には、前の制御周期で更新された再開用データバッファの内容を再開用データ記憶部に保存する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１９２０１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１では、制御プログラムのシミュレーションの実行中において入力される変数および／または出力される変数を用いて、再度、制御プログラムをシミュレーションすることはできない。このため、ユーザは、制御プログラムを修正等した場合にシミュレーションを再度実行する場合、変数を入力し直す必要があった。
【０００６】
本願発明は、上記の問題点に鑑みなされたものであって、その目的は、容易にシミュレーションに用いる入力変数を設定可能な、コントローラをサポートする情報処理装置、シミュレーション方法、およびプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明のある局面に従うと、情報処理装置は、機械の動きを制御するコントローラにおいて制御周期ごとに実行される制御プログラムをシミュレーションする。情報処理装置は、制御プログラムを記憶する記憶手段と、記憶手段に記憶された制御プログラムをシミュレーションするシミュレーション実行手段と、シミュレーションの結果を表示装置に表示させる表示制御手段と、シミュレーション中の任意のタイミングにおける少なくとも１つの変数の値と当該変数を識別するための識別情報とを取得する取得手段と、記憶手段に記憶された制御プログラムを変更する変更手段とを備える。シミュレーションを実行手段は、取得された識別情報によって特定される変数の値を取得された変数の値として、変更された制御プログラムをシミュレーションする。表示制御手段は、変更された制御プログラムのシミュレーションの結果を表示装置に表示させる。
【０００８】
好ましくは、取得手段は、任意のタイミングにおける複数の変数の値と、各変数を識別するための複数の識別情報とを対応付けて取得する。シミュレーションを実行手段は、複数の変数の中から少なくとも１つの変数が指定されたことに基づき、当該指定された変数の値を当該変数の識別情報に対応付けられた取得された変数の値として、変更された制御プログラムをシミュレーションする。
【０００９】
好ましくは、複数の変数は、シミュレーションの入力に用いられる変更可能な変数と、シミュレーションの実行により出力される変更不可能な変数とを含む。シミュレーションを実行手段は、変更可能な変数および変更不可能な変数のうちの当該変更可能な変数のみを用いて、変更された制御プログラムをシミュレーションする。
【００１０】
好ましくは、任意のタイミングは、制御プログラムのシミュレーションの開始時、あるいは開始直後である。
【００１１】
好ましくは、変数の識別情報は、変数の名称である。表示制御手段は、取得された変数の名称を表示装置に一覧表示させる。情報処理装置は、一覧表示された複数の変数の中から１つ以上の変数の指定を受け付ける受付手段と、複数の変数の値から指定された変数毎に当該変数の値を抽出する抽出手段とをさらに備える。シミュレーションを実行手段は、抽出された変数の値を用いて変更された制御プログラムをシミュレーションする。
【００１２】
本発明の他の局面に従うと、シミュレーション方法は、機械の動きを制御するコントローラにおいて制御周期ごとに実行される制御プログラムをシミュレーションする情報処理装置において実行される。シミュレーション方法は、制御プログラムをシミュレーションするステップと、シミュレーションの結果を表示するステップと、シミュレーション中の任意のタイミングにおける少なくとも１つの変数の値と当該変数を識別するための識別情報とを取得するステップと、制御プログラムを変更するステップと、取得された識別情報によって特定される変数の値を取得された変数の値として、変更された制御プログラムをシミュレーションするステップと、変更された制御プログラムのシミュレーションの結果を表示するステップとを備える。
【００１３】
本発明のさらに他の局面に従うと、プログラムは、機械の動きを制御するコントローラにおいて制御周期ごとに実行される制御プログラムをシミュレーションする情報処理装置を制御するために用いられる。プログラムは、制御プログラムをシミュレーションするステップと、シミュレーションの結果を表示するステップと、シミュレーション中の任意のタイミングにおける少なくとも１つの変数の値と当該変数を識別するための識別情報とを取得するステップと、制御プログラムを変更するステップと、取得された識別情報によって特定される変数の値を取得された変数の値として、変更された制御プログラムをシミュレーションするステップと、変更された制御プログラムのシミュレーションの結果を表示するステップとを、情報処理装置のプロセッサに実行させる。
【発明の効果】
【００１４】
上記発明によれば、容易にシミュレーションに用いる入力変数を設定可能となる。
【図面の簡単な説明】
【００１５】
【図１】制御システムの構成を説明する図である。
【図２】ＰＣにおいて実行されるシミュレーションを説明するための図である。
【図３】ＰＣのハードウェア構成を説明する図である。
【図４】ＣＰＵがコントローラサポートプログラムを実行することにより実現される機能ブロックを説明する図である。
【図５】ＰＣがスナップショットを実行する際の処理の流れを説明するためのフローチャートである。
【図６】ＰＣがリストアを実行する際の処理の流れを説明するためのフローチャートである。
【図７】ＰＣがスナップショットを実行するときのシーケンスチャートを示した図である。
【図８】ＰＣがリストアを実行するときのシーケンスチャートを示した図である。
【図９】スナップショットにより得られた変数情報を表した図である。
【図１０】リストアに用いるデータを生成するために用いられるユーザインターフェイスの一例を表した図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照しつつ、本発明の実施の形態に係る制御システムについて説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００１７】
＜Ａ．システム構成＞
図１は、制御システムの構成を説明する図である。図１を参照して、本発明の実施の形態に従う制御システム１は、サーバ２と、ネットワーク４と、ＰＣ（パーソナルコンピュータ）６と、コントローラ１４と、制御対象装置１６とから構成されている。
【００１８】
サーバ２は、ネットワーク４を介してＰＣ６と接続されている。ＰＣ６は、制御対象装置１６を制御するコントローラ１４と通信可能に接続されている。
【００１９】
情報処理装置であるＰＣ６は、コントローラサポート装置として機能する。ＰＣ６には、コントローラサポートプログラム８がインストールされており、また、ユーザが作成した制御プログラム１０が記憶されている。ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）１２は、コントローラサポートプログラム８を格納している。ＰＣ６にインストールされているコントローラサポートプログラム８は、このＣＤ−ＲＯＭ１２からインストールされたものである。
【００２０】
コントローラ１４は、制御対象装置１６の動きを制御する。本発明の実施の形態においては、コントローラ１４として一例として、ＰＬＣ（Programmable Logic Controller）が用いられる。すなわち、このＰＬＣには、いわゆるモーションコントロール機能が備えられている。コントローラ１４は、制御対象装置１６に対する制御内容を規定する制御プログラム１５を記憶している。コントローラ１４は、制御周期ごとに制御プログラム１５を一巡実行する。ここで、コントローラ１４に記憶されている制御プログラム１５は、ＰＣ６に記憶されている制御プログラム１０をコピーしたコピーデータであり、ＰＣ６から送信されたものである。
【００２１】
制御対象装置１６は、サーボモータ、ステッピングモータなどのモータ１８およびモータを駆動するモータドライバ１７を含む。
【００２２】
モータ１８はモータドライバ１７から駆動電流を供給される。モータドライバ１７は、制御プログラム１５を実行するコントローラ１４から制御周期ごとに位置の指令値を与えられ、それに応じた駆動電流をモータ１８に供給する。モータ１８がサーボモータである場合、モータ１８にはエンコーダが備えられており、モータ１８の回転位置の実測値がエンコーダによって検出される。モータの回転位置の実測値は、モータドライバ１７がフィードバック制御に利用する。
【００２３】
なお、上記においては、ＣＤ−ＲＯＭ１２を介して、ＰＣ６にコントローラサポートプログラムをインストールする場合について説明したが、特にこれに限られず、サーバ２からネットワーク４を介してコントローラサポートプログラムをＰＣ６にダウンロードするようにしても良い。制御プログラムについても同様である。
【００２４】
＜Ｂ．処理の概要＞
図２は、ＰＣ６において実行されるシミュレーションを説明するための図である。図２を参照して、ＰＣ６は、ユーザの指示に基づき、予め用意した制御プログラム１０を用いて１回目のシミュレーションを実行する。この際、ユーザが、たとえばプログラムのシミュレーションの開始時（ｔ＝ｔ０）において、スナップショットの指示をＰＣ６に入力した場合、ＰＣ６はスナップショットを実行する。
【００２５】
「スナップショット」とは、ある時点におけるメモリ内の状態を取得して、データとして別途保存する処理である。具体的には、「スナップショット」とは、ある時点におけるメモリの変数の状態を取得して、当該取得された変数の状態をファイルに保存する処理である。本実施の形態では、ＰＣ６が、スナップショットによって、シミュレーション中の任意のタイミングにおける変数の値と、当該変数を識別するための識別情報と、当該変数の型とを取得するものとして説明する。なお、ＰＣ６は、取得される変数が複数の場合、複数の変数の値と、各変数を識別するための複数の識別情報と各変数の型とを対応付けて取得する。なお、ファイル形式としては、たとえば、ｃｓｖ形式を用いることができる。
【００２６】
上記変数としては、シミュレーションの入力に用いられる変更（書き込み）可能な変数と、シミュレーションの実行により出力される変更（書き込み）不可能な変数とが含まれる。また、識別情報としては、たとえば、変数の名称（以下、変数名）が挙げられる。変数の型としては、たとえば、ｂｏｏｌ、ｉｎｔ、ｓｔｒｉｎｇが挙げられる。
【００２７】
以下では、変更可能な変数の一例として入力変数を、変更不可能な変数の一例として出力変数を例に挙げて説明する。また、説明の便宜上、変数名と変数の値と変数の型との３つの情報を含めた情報を、「変数情報」とも称する。つまり、「変数情報」は、変数名と変数の値と変数の型とを含んだ情報であるとする。スナップショットにより、１つ以上の変数情報が取得されることになる。
【００２８】
（ｂ１．第１の例）
ＰＣ６は、スナップショットを実行すると、取得した変数情報（変数名、変数の値，変数の型）をファイルとして保存する。ここでは、説明の便宜上、時間ｔ＝ｔ０におけるスナップショットにより、たとえば６つの変数情報が取得され、当該取得された変数情報がファイル２０１に保存されたとする。具体的には、スナップショットにより、「変数名，値，型」＝「Ｖａｒ＿Ａ，Ｔｒｕｅ，Ｂｏｏｌ」，「Ｖａｒ＿Ｂ，Ｆａｌｓｅ，Ｂｏｏｌ」，「Ｖａｒ＿Ｃ，１０００，ｉｎｔ」，「Ｖａｒ＿Ｄ，Ｔｕｅｒ，Ｂｏｏｌ」，「Ｖａｒ＿Ｅ，２０００，ｉｎｔ」，「Ｖａｒ＿Ｆ，３０００，ｉｎｔ」がファイル２０１に保存されたとする。
【００２９】
ここで、ユーザは、ファイル２０１の各変数を確認する。ユーザは、各変数の値に問題があると判断した場合、制御プログラム１０を変更（修正）し、２回目のシミュレーションを行なう。
【００３０】
この場合、ユーザは、リストアの処理を実行する。「リストア」とは、スナップショットで得られた変数の値を、シミュレーションの変数の値として利用する（変数の値を戻す）ことをいう。具体的には、「リストア」とは、ファイル２０１の変数の中からシミュレーションの実行に必要な入力変数をユーザが選択し、当該選択された入力変数の値をメモリ上の当該入力変数の値に上書きする処理である。ＰＣ６は、当該上書きされた変数の値を用いて、再度シミュレーションを実行する。たとえば、ＰＣ６は、上記６つの変数の値のうち、変数Ｖａｒ＿Ａの値（Ｔｕｒｅ）と変数Ｖａｒ＿Ｂの値（Ｆａｌｓｅ）と変数Ｖａｒ＿Ｅの値（２０００）とを用いて、再度シミュレーションを実行する。
【００３１】
たとえば、ユーザは、ファイル２０１を編集して当該選択された入力変数の値を含むファイル２０１Ａを作成し、ファイル２０１ＡをＣＰＵ９０１（図３参照）に読み込ませることにより、上記リストアを実行することができる。
【００３２】
２回目のシミュレーションでも好ましい結果が得られない場合、ユーザは、再度、制御プログラム１０を変更する。そして、ＰＣ６は、２回目のシミュレーションで利用したファイル２０１Ａを用いて、３回目のシミュレーションを実行する。なお、シミュレーションの回数は、３回に限定されるものではない。
【００３３】
以上のように、ユーザは、スナップショットで得れらた変数を入力変数（入力条件）として利用し、制御プログラム１０を変更する都度、シミュレーションをＰＣ６に実行させる。これにより、制御プログラム１０を変更する都度、入力変数をユーザがて入力する必要がなくなる。
【００３４】
（ｂ２．第２の例）
ユーザの指示により、ＰＣ６が、時間ｔ＝ｔ０より後の時間ｔ１においてスナップショットを行なったとする。この場合に得られた変数情報を記憶したファイルをファイル２０２とする。
【００３５】
この場合も、第１の例と同様に、ユーザは、ファイル２０２の変数の中からシミュレーションの実行に必要な入力変数をユーザが選択し、ファイル２０２とは別のファイル２０２Ａに当該選択した入力変数（変数名、変数の値、変数の型）を記憶させる。
【００３６】
次いで、ユーザは、制御プログラムの変更後、ファイル２０２Ａを用いて２回目のシミュレーションを実行する。２回目のシミュレーションによっても好ましい結果が得られない場合には、制御プログラムを再度変更した上で３回目のシミュレーションを実行することになる。
【００３７】
（ｂ３．その他の例）
ユーザは、シミュレーションを一旦停止（中断）し、ファイル２０１Ａまたはファイル２０２Ａを用いてシミュレーションを再開させてもよい。たとえば、制御プログラムを変更したの後の２回目のシミュレーションの際には、ユーザは、時間ｔ２においてシミュレーションを一旦停止し、ファイル２０１Ａまたはファイル２０２Ａを用いてシミュレーションを再開させてもよい。また、制御プログラムをさらに変更したの後の３回目のシミュレーションの際には、ユーザは、時間ｔ３においてシミュレーションを一旦停止し、ファイル２０１Ａまたはファイル２０２Ａを用いてシミュレーションを再開させてもよい。
【００３８】
（ｂ４．まとめ）
以上のように、スナップショットを行なうタイミング、およびリストアを行なうタイミングは、特に限定されるものではない。好適な使用方法の一例としては、特に、上述した「第１の例」が挙げられる。また、好適な使用方法の他の例としては、シミュレーション途中に制御対象の動作が停止した場合、当該停止した時点での変数をスナップショットし、当該スナップショットにより得られた変数の一部をシミュレーションの開始時（時間ｔ０）または開始直後のタイミングでリストアすることが挙げられる。
【００３９】
いずれの場合であっても、ユーザは、スナップショットを行なうことにより、制御プログラムを変更した後の入力変数の設定が容易になる。つまり、ユーザは、ＰＣ６を用いることにより、スナップショットで得られた変数の一部（場合によっては全部）を利用してリストア処理を実行できるため、制御プログラムを都度変更した場合であっても、複数回のシミュレーションを容易に実行可能となる。
【００４０】
なお、１回目のシミュレーションにおけるスナップショットの回数は、１回に限定されるものではなく、複数回であってもよい。この場合、リストアには、複数回のスナップショットのうちいずれかの回のスナップショットで得られた変数（一部、または場合によっては全部）を用いることができる。
【００４１】
＜Ｃ．ＰＣ６について＞
図３は、ＰＣ６のハードウェア構成を説明する図である。図３を参照して、本発明の実施の形態に従うＰＣ６は、ＣＰＵ９０１と、ＲＯＭ９０２、ＲＡＭ９０３、およびＨＤＤ９０４と、ＣＤ−ＲＯＭ駆動装置９０８と、通信ＩＦ９０９と、モニタ９０７と、キーボード９０５およびマウス９０６とを含む。なお、これらの部位は、内部バス９１０を介して互いに接続される。
【００４２】
ＨＤＤ９０４は、典型的には不揮発性の磁気メモリであり、ＣＤ−ＲＯＭ駆動装置９０８によりＣＤ−ＲＯＭ１２から読取られたコントローラサポートプログラムを格納する。また、制御プログラム１５も格納している。
【００４３】
ＣＰＵ９０１は、ＨＤＤ９０４に格納されている、本実施の形態に従うコントローラサポートプログラム８をＲＡＭ９０３などに展開して実行する。
【００４４】
ＲＡＭ９０３は、揮発性メモリであり、ワークメモリとして使用される。ＲＯＭ９０２は、一般的に、オペレーティングシステム（ＯＳ：Operating System）等のプログラムを格納している。
【００４５】
通信ＩＦ９０９は、典型的にはイーサネット（登録商標）およびＵＳＢ（Universal Serial Bus）といった汎用的な通信プロトコルをサポートし、ネットワーク４を介してサーバ２との間でデータ通信を提供するとともに、コントローラ１４との間でデータ通信を提供する。
【００４６】
モニタ９０７は、液晶表示装置、ＣＲＴ（Cathode Ray Tube）、プラズマディスプレイ装置などで構成され、ＰＣ６による処理結果などを表示する。キーボード９０５は、ユーザによるキー入力を受付け、マウス９０６は、ユーザによるポインティング操作を受付ける。
【００４７】
図４は、ＣＰＵ９０１がコントローラサポートプログラム８を実行することにより実現される機能ブロックを説明する図である。図４を参照して、ここでは、ユーザインターフェイス部８０２と、表示データ作成部８０４と、シミュレーション部８０６と、制御プログラム記憶部８０８と、制御プログラム編集部８１０と、コントローラインタフェース部８１２とが示されている。
【００４８】
ユーザインターフェイス部８０２は、ＰＣ６のモニタ９０７に表示するウインドウ画面の内容を作成し、また、キーボード９０５やマウス９０６によるユーザの操作を受け付ける部位である。
【００４９】
制御プログラム編集部８１０は、制御プログラムの入力および編集をユーザに行わせる。制御プログラム編集部８１０は、制御プログラムを実行するためにコンパイルが必要である場合はコンパイルも行う。作成された制御プログラムは、コントローラインタフェース部８１２を介してコントローラ１４に送られる。また、作成された制御プログラムは、ＨＤＤ９０４の所定領域である制御プログラム記憶部８０８に格納される。また、制御プログラム編集部８１０は、コントローラインタフェース部８１２を介してコントローラ１４に記憶されている制御プログラム１５を読み出して編集することもできる。制御プログラム編集部８１０は、たとえば、ユーザからの制御プログラムの変更（たとえば修正）指示を受け付け、当該指示に基づいて制御プログラムを変更する。
【００５０】
シミュレーション部８０６は、コントローラ１４のシミュレータである。シミュレーション部８０６は、制御プログラム記憶部８０８に記憶された制御プログラム１０に従ってコントローラ１４が制御プログラム１５を実行する動作をシミュレートし、コントローラ１４が制御周期ごとに出力するはずの位置の指令値を算出する。
【００５１】
また、シミュレーション部８０６は、外部からの信号が到来して制御プログラムの動作に影響を与える状態をシミュレートしたり、制御プログラム１５の実行自体によってコントローラ１４のメモリの記憶内容などのコントローラ１４の内部状態が変化して、その変化が制御プログラム１５の動作に影響を与える状態をシミュレートしたりすることができる。
【００５２】
また、シミュレーション部８０６は、ユーザインターフェイス部８０２を介してシミュレーション実行に関するユーザの指示を受け付ける。すなわち、ユーザインターフェイス部８０２は、シミュレーション部８０６に対するユーザの指示を受け付ける手段としても働く。
【００５３】
表示データ作成部８０４は、シミュレーション部８０６によって作成された実行結果データの時間的な変化を表示するための表示データを作成する。表示データ作成部８０４は、作成した表示データをユーザインターフェイス部８０２に送ることによりＰＣ６のモニタ９０７に表示データをグラフや文字の態様で表示する。
【００５４】
＜Ｄ．制御構造＞
次に、ＰＣ６における制御構造について説明する。
【００５５】
（ｄ１．スナップショットのフロー）
図５は、ＰＣ６がスナップショットを実行する際の処理の流れを説明するためのフローチャートである。図５を参照して、ステップＳ５０２において、ＰＣ６のＣＰＵ９０１は、ユーザのシミュレーション開始指示に基づき、制御プログラム１０のシミュレーションを開始する。ＣＰＵ９０１は、スナップショットの指示を受け付けたか否かを判断する。
【００５６】
ＣＰＵ９０１は、ステップＳ５０４で肯定的な判断がなされた場合（ＹＥＳの場合）、ステップＳ５０６において、シミュレーションを一時停止する。ＣＰＵ９０１は、ステップＳ５０４において否定的な判断がなされた場合（ＮＯの場合）、処理をステップＳ５１６に進める。
【００５７】
ステップＳ５０８において、ＣＰＵ９０１は、変数名、変数の型、および変数の値とを取得する。つまり、ＣＰＵ９０１は、スナップショットの指示が入力された時点における変数情報を取得する。ステップＳ５１０において、ＣＰＵ９０１は、シミュレーションを再開する。なお、ＣＰＵ９０１は、シミュレーションを再開させるユーザからの指示が入力されたことをトリガとして、シミュレーションを再開させてもよい。
【００５８】
ステップＳ５１２において、ＣＰＵ９０１は、スナップショットにより取得した変数情報を保存するファイル名の指定を受け付ける。ステップＳ５１４において、ＣＰＵ９０１は、指定されたファイル名で取得した変数情報（変数名、変数の型、および変数の値）を保存する。
【００５９】
ステップＳ５１６において、ＣＰＵ９０１は、シミュレーションが終了したか否かを判断する。ＣＰＵ９０１は、ステップＳ５１６において肯定的な判断がなされた場合（ＹＥＳの場合）、一連の処理を終了する。ＣＰＵ９０１は、ステップＳ５１６において否定的な判断がなされた場合（ＮＯの場合）、処理をステップＳ５０４に進める。
【００６０】
（ｄ２．リストアのフロー）
図６は、ＰＣ６がリストアを実行する際の処理の流れを説明するためのフローチャートである。図６を参照して、ステップＳ６０２において、ＰＣ６のＣＰＵ９０１は、ユーザのシミュレーション開始指示に基づき、制御プログラム１０のシミュレーションを開始する。ステップＳ６０４において、ＣＰＵ９０１は、リストアに用いるファイルの指定があったか否かを判断する。
【００６１】
ＣＰＵ９０１は、ステップＳ６０４において肯定的な判断がなされた場合（ＹＥＳの場合）、ステップＳ６０６において、ユーザからリストアの指示を受け付けたか否かを判断する。ＣＰＵ９０１は、ステップＳ６０４において否定的な判断がなされた場合（ＮＯの場合）、処理をステップＳ６１６に進める。
【００６２】
ＣＰＵ９０１は、ステップＳ６０６において肯定的な判断がなされた場合（ＹＥＳの場合）、ステップＳ６０８において、シミュレーションを一時停止する。ＣＰＵ９０１は、ステップＳ６０６において否定的な判断がなされた場合（ＮＯの場合）、処理をステップＳ６１６に進める。
【００６３】
ステップＳ６１０において、ＣＰＵ９０１は、リストア対象の変数がメモリ（ＲＡＭ９０３）上に存在するか否かを判断する。すなわち、ＣＰＵ９０１は、ファイルに記載された変数名と同じ変数名の変数が、シミュレーションを一時停止した時に変数として出現しているか否かを判断する。ＣＰＵ９０１は、ステップＳ６１０において肯定的な判断がなされた場合（ＹＥＳの場合）、ステップＳ６１２において変数の値を書き換える。ＣＰＵ９０１は、ステップＳ６１０において否定的な判断がなされた場合（ＮＯの場合）、処理をステップＳ６１４に進める。
【００６４】
たとえば、スナップショットを実行した後、「Ｖａｒ＿Ａ，Ｔｒｕｅ，Ｂｏｏｌ」，「Ｖａｒ＿Ｂ，Ｆａｌｓｅ，Ｂｏｏｌ」，「Ｖａｒ＿Ｅ，２０００，ｉｎｔ」をファイル２０１Ａとして記憶させたとする。この場合に、ステップＳ６０８でシミュレーション一時停止したときに現れている変数が「Ｖａｒ＿Ｅ」だけのあれば、ステップＳ６１２において変数Ｖａｒ＿Ｅだけの数値を書き換える。
【００６５】
ステップＳ６１４において、ＣＰＵ９０１は、シミュレーションを再開する。ステップＳ６１６において、ＣＰＵ９０１は、シミュレーションが終了したか否かを判断する。ＣＰＵ９０１は、ステップＳ６１６において肯定的な判断がなされた場合（ＹＥＳの場合）、一連の処理を終了する。ＣＰＵ９０１は、ステップＳ６１６において否定的な判断がなされた場合（ＮＯの場合）、処理をステップＳ６０４に進める。
【００６６】
（ｄ３．スナップショットのシーケンス）
図７は、ＰＣ６がスナップショットを実行するときのシーケンスチャートを示した図である。図７を参照して、シーケンスＳＱ７０２において、ユーザインターフェイス部８０２は、スナップショットを実行する指示をシミュレーション部８０６の通信処理部８６１に送る。
【００６７】
通信処理部８６１は、シーケンスＳＱ７０４において、変数情報を読み出す指示（ｒｅａｄＭｅｍ（））を、シミュレーション実行部８６３に送る。シーケンスＳＱ７０６において、シミュレーション実行部８６３は、変数情報を通信処理部８６１に通知する。
【００６８】
シーケンスＳＱ７０８において、通信処理部８６１は、取得した変数情報を指定されたファイル名でファイルに保存する。シーケンスＳＱ７１０において、通信処理部８６１は、変数情報を保存したことを示す通知をユーザインターフェイス部８０２に通知する。ユーザインターフェイス部８０２は、当該通知を受け取ると、変数情報を保存したことを表す内容をモニタ９０７に表示させる。
【００６９】
（ｄ４．リストアのシーケンス）
図８は、ＰＣ６がリストアを実行するときのシーケンスチャートを示した図である。図８を参照して、シーケンスＳＱ８０２において、ユーザインターフェイス部８０２は、リストアを実行する指示をシミュレーション部８０６の通信処理部８６１に送る。シーケンスＳＱ８０４において、通信処理部８６１は、ファイルを読み出す。つまり、通信処理部８６１は、メモリにファイルとして保存された変数情報を読み出す。
【００７０】
通信処理部８６１は、シーケンスＳＱ８０６において、変数情報を書き込む指示（ＷｒｉｔｅＭｅｍ（））を、シミュレーション実行部８６３に送る。シーケンスＳＱ８０８において、シミュレーション実行部８６３は、通信処理部８６１に対して、書き込みが実行されたこと、あるいは書き込む変数が存在しなかったこと（エラー）を通知する。
【００７１】
シーケンスＳＱ８１０において、通信処理部８６１は、通知された内容をユーザインターフェイス部８０２に通知する。ユーザインターフェイス部８０２は、当該通知を受け取ると、リストアが終了したこと、リストアに失敗したこと等をモニタ９０７に表示させる。
【００７２】
＜Ｅ．データ構造＞
図９は、スナップショットにより得られた変数情報を表した図である。具体的には図９は、ファイル２０１（またはファイル２０２）の中身（変数情報）を表した図である。
【００７３】
図９を参照して、ファイル２０１には、共通情報と、変数情報とが含まれている。共通情報は、「［Ｃｏｍｍｏｎ］」の欄に示された情報を指す。変数情報としては、グローバス変数（［ｇｌｏｂａｌ］）と、プログラム変数（［ｐｒｏｇｒａｍ（）］）とが含まれている。
【００７４】
この場合、ユーザは、グローバル変数および／またはプログラム変数の一部（場合によっては全部）を用いて、リストアに使用するファイル２０１ＡをＰＣ６で生成することになる。なお、図９に示した例では、入力変数と出力変数とは区別された状態では示されていない。
【００７５】
＜Ｆ．ユーザインターフェイス＞
図１０は、リストアに用いるデータを生成するために用いられるユーザインターフェイスの一例を表した図である。つまり、図１０は、たとえばファイル２０１Ａ，２０２Ａ等のデータを表した図である。
【００７６】
図１０を参照して、ユーザインターフェイス部８０２は、スナップショットにより取得された複数の変数情報（変数名、変数の型、および変数の値）をモニタ９０７に一覧表示させる。より詳しくは、ユーザインターフェイス部８０２は、スナップショットにより取得された複数の変数情報の中から１つ以上の変数情報をユーザが選択可能とするためのユーザインターフェイス９０７１をモニタ９０７に表示させる。
【００７７】
ユーザがチェックボックスを利用して一覧表示された複数の変数情報の中から１つ以上の変数情報を指定すると、ＣＰＵ９０１は、当該指定を受け付ける。ＣＰＵ９０１は、複数の変数情報が記憶されたファイルから、指定された変数情報を抽出する。
【００７８】
ＣＰＵ９０１（シミュレーション実行部８６３）は、ユーザから、変更された制御プログラムを用いた再度のシミュレーションの指示を受け付けた場合には、抽出された変数情報を用いて当該制御プログラムをシミュレーションする。
【００７９】
したがって、ユーザは、ユーザインターフェイス９０７１を用いることにより、ユーザは、再度のシミュレーションに用いる入力変数をさらに容易に設定することができる。
【００８０】
今回開示された実施の形態は例示であって、上記内容のみに制限されるものではない。本発明の範囲は特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００８１】
１  制御システム、２  サーバ、４  ネットワーク、８  コントローラサポートプログラム、１０，１５  制御プログラム、１２  ＣＤ−ＲＯＭ、１４  コントローラ、１６  制御対象装置、１７  モータドライバ、１８  モータ、２０１，２０１Ａ，２０２，２０２Ａ  ファイル、８０２  ユーザインターフェイス部、８０４  表示データ作成部、８０６  シミュレーション部、８０８  制御プログラム記憶部、８１０  制御プログラム編集部、８１２  コントローラインタフェース部、８６１  通信処理部、８６３  シミュレーション実行部、９０２  ＲＯＭ、９０３  ＲＡＭ、９０７  モニタ、９０７１  ユーザインターフェイス、９０９  通信ＩＦ。
【図１】
0006051546.tif 000002
【図２】
0006051546.tif 000003
【図３】
0006051546.tif 000004
【図４】
0006051546.tif 000005
【図５】
0006051546.tif 000006
【図６】
0006051546.tif 000007
【図７】
0006051546.tif 000008
【図８】
0006051546.tif 000009
【図９】
0006051546.tif 000010
【図１０】
0006051546.tif 000011