(58)【調査した分野】(Int.Cl.,DB名)
前記PLCシミュレータは、前記外部シミュレータと通信するためのソケットインターフェースを備え、前記PLCシミュレータに所定の処理を実行させるコマンドを前記外部シミュレータから受け付けるものであり、
前記第1の実行部は、前記ソケットインターフェースにより受け付けたコマンドに応じた処理を実行し、
前記コマンドは、前記第1の実行部によるプログラムの実行状態を前記外部シミュレータに通知する通知コマンドを含み、
前記第2の実行部は、前記検知部を含み、前記通知コマンドの使用により前記検知を行う、
請求項1記載のPLCシミュレーションシステム。
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記のように、PLCのメモリの内容は、PLCのみならず、PLCと通信する外部のデバイス等からのアクセスにより読み込み、書き込みがなされる。そのため、PLCと外部のデバイスとで、PLCメモリへのアクセスが競合しうる。その結果、意図しない動作が引き起こされるおそれがある。
【0008】
そこで、本発明は、PLCシミュレーションシステムにおけるPLCメモリへのデータのアクセス制御によりアクセスの競合を回避して、PLCシミュレーションシステムの信頼性を向上させることを目的とする。
【課題を解決するための手段】
【0009】
一実地形態に従うPLCシミュレーションシステムは、第1の周期により周期的に処理を繰り返すPLCシミュレータと、第2の周期により周期的に処理を繰り返す外部シミュレータとを含み、PLCシミュレータは、プログラム実行のためのデータを保持し、PLCシミュレータおよび外部シミュレータによるアクセスが可能な記憶部と、記憶部へのデータ入出力処理を伴うプログラムを実行する第1の実行部とを備え、外部シミュレータは、記憶部へのデータ入出力処理を伴うプログラムを実行する第2の実行部を備え、第1の実行部または第2の実行部の少なくともいずれか一方は、他方におけるプログラムの実行が完了したことを検知する検知部を含み、第1の実行部または第2の実行部は、プログラムを実行後、検知がなされるまで記憶部へのアクセスを伴うプログラム実行を抑止する。
【0010】
好ましくは、PLCシミュレータは、外部シミュレータと通信するためのソケットインターフェースを備え、PLCシミュレータに所定の処理を実行させるコマンドを外部シミュレータから受け付けるものであり、第1の実行部は、ソケットインターフェースにより受け付けたコマンドに応じた処理を実行し、コマンドは、第1の実行部によるプログラムの実行状態を外部シミュレータに通知する通知コマンドを含み、第2の実行部は、検知部を含み、通知コマンドの使用により検知を行うこととしてもよい。
【0011】
好ましくは、記憶部は、カウンタを含み、第1の実行部または第2の実行部の少なくともいずれか一方は、プログラムの実行を完了するとカウンタ値を更新し、検知部は、カウンタ値の更新を検知することにより、検知を行うこととしてもよい。
【0012】
好ましくは、記憶部は、フラグを記憶し、第1の実行部または第2の実行部の少なくともいずれか一方は、プログラムの実行を完了すると、フラグの値を、実行完了を示す値に変更し、検知部は、フラグの値に基づいて検知を行うこととしてもよい。
【0013】
一実施形態に従うPLCシミュレータは、第1の周期により周期的に処理を繰り返すPLCシミュレータであって、プログラム実行のためのデータを保持し、PLCシミュレータ、および、第2の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部と、記憶部へのデータ入出力処理を伴うプログラムを実行する実行部とを備え、実行部は、外部シミュレータにおけるプログラムの実行が完了したことを検知する検知部を含み、プログラムを実行後、検知部による検知がなされるまで記憶部へのアクセスを伴うプログラム実行を抑止する。
【0014】
一実施形態に従うPLCシミュレータは、第1の周期により周期的に処理を繰り返すPLCシミュレータであって、第2の周期により周期的に処理を繰り返す外部シミュレータと情報を送受信するためのインターフェースと、プログラム実行のためのデータを保持し、PLCシミュレータおよび外部シミュレータによるアクセスが可能な記憶部と、記憶部へのデータ入出力処理を伴うプログラムを実行する実行部とを備え、実行部は、プログラムの実行状態を、インターフェースにより外部シミュレータに通知する。
【0015】
他の実施形態に従うと、第2の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部を含み、第1の周期により周期的に処理を繰り返すPLCシミュレータの動作を制御する制御プログラムが提供される。この制御プログラムは、記憶部へのデータ入出力処理を伴うユーザプログラムをPLCシミュレータに実行させるステップと、外部シミュレータにおけるプログラムの実行が完了したことをPLCシミュレータに検知させるステップと、ユーザプログラムを実行後、検知がなされるまで記憶部へのアクセスを伴うユーザプログラムの実行をPLCシミュレータに抑止させるステップと、をPLCシミュレータに実行させる。
【0016】
他の実施形態に従うと、第2の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部を含み、第1の周期により周期的に処理を繰り返すPLCシミュレータの動作を制御する制御プログラムを記録したコンピュータ読み取り可能な記録媒体が提供される。この記録媒体に記録される制御プログラムは、記憶部へのデータ入出力処理を伴うユーザプログラムをPLCシミュレータに実行させるステップと、外部シミュレータにおけるプログラムの実行が完了したことをPLCシミュレータに検知させるステップと、ユーザプログラムを実行後、検知がなされるまで記憶部へのアクセスを伴うユーザプログラムの実行をPLCシミュレータに抑止させるステップとをPLCシミュレータに実行させる。
【発明の効果】
【0017】
このような構成によると、PLCシミュレーションシステムの信頼性を向上させることができる。
【0018】
この発明の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解されるこの発明に関する次の詳細な説明から明らかとなるであろう。
【発明を実施するための形態】
【0021】
以下、本発明にかかるPLCシミュレータ2と、外部シミュレータ4と、PLCシミュレータ2および外部シミュレータ4が含まれるPLCシミュレーションシステム10とについて説明する。
【0022】
<1 PLCシミュレーションシステム10の構成>
図1は本発明の実施の形態に係るPLCシミュレーションシステム10の構成を示す機能ブロック図である。
【0023】
同図に示されるように、このシミュレーションシステム10は、PLCプログラミングツール1と、PLCシミュレータ2と、設定ツール3と、外部シミュレータ4とを含んで構成される。それらのシステム構成要素1〜4は、それぞれ専用のコンピュータプログラム(PLCプログラミングツールソフト、PLCシミュレータソフト、設定ツールソフト、外部シミュレータソフト)をコンピュータ(例えば、パーソナルコンピュータ(PC))に組み込むことにより、ソフトウェア的に実現される。
【0024】
本実施形態では、1台のPCにおいて上記システム構成要素1〜4が動作するものとして説明する。
【0025】
<1.1 PLCプログラミングツール1の構成>
PLCプログラミングツール1は、PLCシミュレータ2をデバッグするためのツールであり、ユーザ5の操作を受け付けてPLCシミュレータ2の実行を制御する。
【0026】
PLCプログラミングツール1は、グラフィカルユーザインタフェース(GUI)部101と、プログラム管理部102と、ミドルウェアとして構成される通信部103と、シミュレーションインタフェース(I/F)部104とを含んでいる。
【0027】
GUI部101は、GUI画面を表示して、ユーザ5の操作等を介して、PLCシミュレーションやデバック等に関する種々の情報(例えば、PLCシミュレーションの開始、停止等)をユーザ5とやり取りする機能を有する。
【0028】
プログラム管理部102は、プログラムの作成や編集をする機能を有する。プログラム管理部102は、GUI部101を介してユーザから与えられる指示に従った処理を行う。具体的には、プログラム管理部102は、通信部103を介しての記憶部205からのプログラムの読み込み又はプログラムの書き込み等の機能を有する。
【0029】
通信部103は、PLCシミュレータ2の通信部202との通信インターフェースを有する。
【0030】
シミュレーションインタフェース(I/F)部104は、PLCシミュレータ2との間で、PLCシミュレーションやデバック等に関する種々の情報(例えば、PLCシミュレータ2の起動、停止、プログラム実行部203におけるプログラムの起動、停止)をやり取りする機能を有する。
【0031】
<1.2 PLCシミュレータ2の構成>
PLCシミュレータ2は、PLCのシミュレーション機能を有し、ユーザ5の操作に基づいて動作し、外部シミュレータ4と協働してシミュレーション結果を出力する。
【0032】
PLCシミュレータ2は、外部シミュレータ4に対し、外部シミュレータ4と通信するためのソケットインターフェースを提供している。PLCシミュレータ2と外部シミュレータ4とが同一のPCにおいて動作する場合に、PLCシミュレータ2のソケットインターフェースによって外部シミュレータ4がPLCシミュレータ2へ指示をすることにより、外部シミュレータ4はPLCシミュレータ2を操作することができる。このソケットインターフェースについては後述する。
【0033】
PLCシミュレータ2は、PLCプログラミングツール1からのPLCシミュレータ起動停止指令を受けて、起動および停止する。PLCシミュレータ2は、プログラム制御部201と、通信部202と、プログラム実行部203と、停止条件保持部204と、記憶部205を含んでいる。
【0034】
記憶部205は、RAM(Random Access Memory)等における所定の記憶領域であり、ユーザが任意に作成したプログラム205aと、プログラム205aが参照するPLCメモリ205b(入出力メモリ、データメモリ等々)とを有する。
【0035】
プログラム実行部203は、所定の起動停止指令が与えられるのに応答して、記憶部205よりプログラム205aを読み出して実行する。
【0036】
記憶部205に保持されるプログラム205aとPLCメモリ205bの内容とは、通信部202を介して、PLCプログラミングツール1からモニタ可能とされている。さらに、PLCメモリ205bの内容は、通信部202を介して、外部シミュレータ4からも読み込み又は書き込み可能とされている。
【0037】
通信部202は、データの読み込みや書き込みをする機能を有する。また、通信部202は、外部シミュレータ4に対してソケットインターフェースを提供している。ソケットインターフェースを用いることにより、外部シミュレータ4はPLCシミュレータ2を容易に操作することができる。
【0038】
プログラム制御部201は、PLCプログラミングツール1から与えられる起動停止指令に応答して、プログラム実行部203によるプログラム205aの実行の起動、停止を制御する機能を有する。
【0039】
また、プログラム制御部201は、PLCプログラミングツール1から与えられる停止条件設定に応答して、その停止条件設定に含まれる「停止条件」を停止条件保持部204に設定保持させる機能を有する。
【0040】
プログラム制御部201は、停止条件保持部204に設定保持される「停止条件」の成立を常時監視し、「停止条件」の成立が確認されたならば、プログラム実行部203におけるプログラム205aの実行を直ちに停止させる機能を有する。したがって、停止条件保持部204に所望の「停止条件」を設定保持させることで、プログラムの実行を任意のタイミングで停止させる。これによりプログラムのデバッグが可能とされている。
【0041】
停止条件保持部204は、上述の通り、プログラム205aの実行を停止させる条件を保持している。
【0042】
<1.3 設定ツール3の構成>
設定ツール3は、外部シミュレータ4のデバッグのためのツールであり、ユーザ5の操作を受け付けて外部シミュレータ4の起動や停止を制御する。
【0043】
設定ツール3は、グラフィカルユーザインタフェース(GUI)部301と、シミュレーションインタフェース(I/F)部303とを含んでいる。
【0044】
GUI部301は、ユーザ5との間で、画面表示、キーボード操作、マウス操作等々を介して、デバック等に関する種々の情報(例えば、PLCと通信するデバイスのシミュレーションの開始、停止等)をやり取りする機能を有する。
【0045】
シミュレーションインタフェース(I/F)部303は、外部シミュレータ4との間で、デバック等に関する種々の情報(例えば、外部シミュレータ4の起動、停止等)をやり取りする機能を有する。
【0046】
<1.4 外部シミュレータ4の構成>
外部シミュレータ4は、PLCシミュレータ2と協働して動作するデバイスのシミュレーション機能を発揮するプログラムである。本実施形態では、外部シミュレータ4は、PLCシミュレータ2のソケットインターフェースを用いて外部シミュレータ4が主導的にPLCシミュレータ2に所定の指示をしてPLCシミュレータ2を操作する。
【0047】
外部シミュレータ4は、画面表示部401と、ミドルウェアとして構成される通信部402と、実行部403とを含んでいる。
【0048】
画面表示部401は、シミュレーション対象のデバイスの実機の操作画面に対応する。実行部403における実行動作が開始されると、マウスやキーボードを介して仮想的に行われるユーザ5の操作等を受け付けて、その操作内容を実行部403へと受け渡す機能を有する。
【0049】
実行部403は、所定のプログラムに従って動作し、通信部402を介してPLCシミュレータ2のPLCメモリ205bの該当するアドレスへの書き込み、読み出しを行う。実行部403は、検知部404を含む。
【0050】
検知部404は、PLCシミュレータ2においてプログラム実行部203が所定のプログラムを実行しているか検知する。本実施形態では、後述するソケットインターフェースを用いて検知する。
【0051】
<1.5 PLCシミュレーションシステム10の動作環境>
上記の構成を備えるPLCシミュレーションシステム10は、PCにおいてソフトウェア的に実現される。ここで、PC11の構成を
図2に示す。
【0052】
図2に示すように、PC11は、演算部12と、ROM13と、RAM14と、入力部15と、出力部16とを含む。
【0053】
演算部12は、CPU(Central Processing Unit)を備え、OS(Operating System)やPLCシミュレータ2や外部シミュレータ4など各プログラムの実行を制御する。
【0054】
ROM13は、ROM(Read Only Memory)であり、各種プログラムを記憶している。
【0055】
RAM14は、ソフトウェアを実行するための記憶領域であり、PLCシミュレータ2などプログラムがRAM14に読み込まれて各プログラムが動作する。
【0056】
入力部15は、ユーザ5の操作を受け付ける。具体的には入力部15はキーボードやタッチパネル等により構成される。
【0057】
出力部16は、シミュレーションの結果などを出力する。具体的にはモニタなどの表示部により構成される。
【0058】
<2 ソケットインターフェース>
次に、PLCシミュレータ2が提供するソケットインターフェースについて説明する。
【0059】
図3は、PLCシミュレータ2のソケットインターフェースにおけるコマンドシーケンスの一例を示す図である。
【0060】
外部シミュレータ4は、ソケットインターフェースにより、各コマンドを使用してPLCシミュレータ2を操作することができる。
【0061】
例えば、図示するように「GoOneScan」は、PLCシミュレータ2において動作するプログラムを1周期実行させるためのコマンドである。コマンドの引数の指定により、PLCシミュレータ2において動作するプログラムを1周期実行させて一定時間待機させるか、待機を解除するかを制御することができる。待機させてから一定時間経過後は、PLCシミュレータ2に通常の連続実行を開始させることとしてもよい。
【0062】
また、例えば、「CheckPLCState」は、PLCシミュレータ2において動作するプログラムの実行状態を取得するためのコマンドである。このコマンドにより、PLCシミュレータ2において動作するプログラムの実行状態として、PLCシミュレータ2が1周期実行を終えて待機中であるか、1周期実行中であるかが外部シミュレータ4に通知される。
【0063】
したがって、外部シミュレータ4は、「GoOneScan」コマンドによりPLCシミュレータ2にプログラムの1周期実行を指示した後、「CheckPLCState」によりPLCシミュレータ2におけるプログラムの実行状態を取得することで、PLCシミュレータ2が処理を終えたか検知することができる。
【0064】
<3 動作>
次に、PLCシミュレーションシステム10のPLCシミュレータ2、外部シミュレータ4の動作について説明する。
【0065】
本実施形態では、外部シミュレータ4とPLCシミュレータ2の一方が制御の主導権を握り、もう一方へ処理の開始を指示して処理が実行されたことを確認する。
【0066】
この実施形態の例では、PLCシミュレータ2がソケットインターフェースを用意し、外部シミュレータ4において動作するプログラムは、主導的にPLCシミュレータ2を操作する。外部シミュレータ4において動作するプログラムは、PLCシミュレータ2におけるプログラムの動作が完了したことを、ソケットインターフェースを用いた所定のコマンドにより検知する。検知してから外部シミュレータ4のプログラムが動作する。
【0067】
これにより、PLCメモリ205bへのアクセスが競合しないようプログラムが実行される。そのため、PLCメモリ205bのデータが意図しないまま改変され、想定外の動作をすることが防止される。
【0068】
<3.1 関連技術の動作>
ここで、本発明との比較のため、PLCメモリへのアクセスの競合が起こりうるシミュレーションシステムの構成について説明する。
【0069】
図4は、関連技術におけるPLCシミュレータの動作を示すフローチャートである。
同図に示すように、関連技術におけるPLCシミュレータは、周期的に処理を繰り返し実行する。すなわち、関連技術におけるPLCシミュレータは、所定周期が経過する都度(S21)、PLCメモリへのデータの入出力処理を行い(S23)、プログラムを実行する(S25)。
【0070】
図5は、関連技術における外部シミュレータの動作を示すフローチャートである。
同図に示すように、関連技術における外部シミュレータ(例えば、PLCにより動作制御される検査用のベルトコンベアのシミュレータ)は、所定のモニタ周期が経過する都度(S31)、PLCメモリへのデータのアクセスを伴うモニタ処理を行い(S33)、所定の演算処理を実行する(S35)。このように、外部シミュレータは、周期的に所定の動作を実行する。
【0071】
このようにして動作する関連技術におけるシミュレーションシステムの動作例を、
図6に示す。
図6では、外部シミュレータよりもPLCシミュレータの動作周期が短いものとして図示している。
【0072】
同図のように、関連技術では、PLCシミュレータと外部シミュレータとがそれぞれ独立に動作するため、同時にPLCメモリへアクセスしうる。外部シミュレータは、所定周期ごとに、PLCメモリへアクセスして所定の動作を行う。外部シミュレータがPLCメモリのデータの読み出しと書き出しをしている間、外部シミュレータよりも動作周期が短いPLCシミュレータがタスクを実行することにより、PLCメモリのデータが書き換えられる(同図中では、「A」「B」「C」と書き換えられている)。
【0073】
関連技術では、外部シミュレータとPLCシミュレータとでPLCメモリへのアクセスが同時になされるおそれがあり、ユーザが意図しない動作をし得ることとなる。
【0074】
<3.2 PLCシミュレータの動作>
次に、本実施形態におけるPLCシミュレータ2および外部シミュレータ4の動作について説明する。
【0075】
図7は、本実施形態のPLCシミュレータ2および外部シミュレータ4の動作を示すフローチャートである。同図に示すように、PLCシミュレータ2は、ソケットインターフェースにより外部シミュレータ4からの操作を受け付ける。同図では、ソケットの初期化等の処理を経て、外部シミュレータ4がコマンドシーケンスによりPLCシミュレータ2の操作を開始する処理を示している。
【0076】
外部シミュレータ4は、「GoOneScan」コマンドによりPLCシミュレータ2において動作するプログラムに1周期の実行をさせる(S62)。PLCシミュレータ2では、「GoOneScan」コマンドの受信によりプログラムの1周期の実行後、待機する(S68)。
【0077】
外部シミュレータ4は、「CheckPLCState」コマンド使用により、PLCシミュレータ2において1周期の実行がされたか確認する(S63)。PLCシミュレータ2において1周期の実行中であれば(S63:NO)、外部シミュレータ4は、PLCシミュレータ2より「待機中」を示す応答があるまで「CheckPLCState」コマンドを使用する。
【0078】
PLCシミュレータ2より1周期の実行が完了して「待機中」を示す応答があると(S63:YES)、外部シミュレータ4は、取得したアドレスに基づくPLCメモリ205bへの書き込みなど所定の書込処理を実行する(S64)。
【0079】
書込処理が完了すると、外部シミュレータ4は、「GoOneScan」コマンド使用によりPLCシミュレータ2において動作するプログラムに1周期の実行をさせる(S65)。PLCシミュレータ2では、「GoOneScan」コマンドを受信してプログラムの1周期の実行後、待機する(S68)。
【0080】
外部シミュレータ4は、「CheckPLCState」コマンド使用により、PLCシミュレータ2において1周期の実行がされたか確認する(S66)。
【0081】
PLCシミュレータ2より1周期の実行が完了して「待機中」を示す応答があると(S66:YES)、外部シミュレータ4は、取得したアドレスに基づくPLCメモリ205bからの読み出しなど所定の読出処理を実行する(S67)。その後、外部シミュレータ4は、ステップS64以降の処理を繰り返す。
【0082】
上記のように、外部シミュレータ4は、ステップS65等によりPLCシミュレータ2におけるプログラムの実行を主導し、ステップS66等により、PLCシミュレータ2の実行が完了したか(BUSY状態かIDLE状態か)確認してから処理(ステップS67等)を行う。
【0083】
このように動作する外部シミュレータ4とPLCシミュレータ2のタイミングチャートを
図8に示す。
【0084】
図8に示すように、外部シミュレータ4とPLCシミュレータ2とが交互にプログラムを動作させている。外部シミュレータ4がPLCシミュレータ2において動作するプログラムに1周期の実行をさせると、PLCシミュレータ2は所定の演算を行い、この間BUSY状態となる。外部シミュレータ4は、ソケットインターフェースを用いたコマンドによりPLCシミュレータ2の実行状態を確認し、PLCシミュレータ2が待機中の状態(IDLE状態)になってから処理を開始する。
【0085】
<3.3 変形例>
上記の他にも、外部シミュレータ4とPLCシミュレータ2とが交互にプログラムを動作させるために、一方の実行が完了したことを検知する方法は様々ある。すなわち、検知部404の機能を発揮させる具体的な方法は以下のようにしてもよい。
【0086】
(変形例1)
上記の例では、外部シミュレータ4がPLCシミュレータ2の実行状態を逐次確認する(「CheckPLCState」コマンドの使用)こととしていたが、この他に、実行状態が完了したことを、所定の記憶領域を用いて一方から他方へと通知することとしてもよい。
【0087】
図9は、PLCシミュレータ2において動作するプログラムの実行が完了したことをカウンタを用いて通知する場合のタイミングチャートである。
【0088】
図9の例では、外部シミュレータ4は、主導的にPLCシミュレータ2のプログラムを動作させる。PLCシミュレータ2は、動作を完了するとカウンタ値を更新する。外部シミュレータ4は、カウンタ値の更新がされることによりPLCシミュレータ2におけるプログラムの動作完了を検知している。
【0089】
図9に示すように、PLCシミュレータ2は、処理を開始すると、所定の読み出し処理時にカウンタ値を取得し、演算を実行して所定の書き込み処理時にカウンタ値を更新する。外部シミュレータ4は、カウンタ値を監視しており、カウンタ値の更新があると、処理を開始する。
【0090】
(変形例2)
また、所定の記憶領域に、外部シミュレータ4とPLCシミュレータ2のうち一方の実行が完了したことを示すフラグを記憶部205において記憶することにより、実行状態を一方から他方へと通知することとしてもよい。
【0091】
例えば、PLCシミュレータ2において動作するプログラムは、外部シミュレータ4よりも短い動作周期で動作するとする。すなわち、外部シミュレータ4の動作の間、PLCシミュレータ2により複数回PLCメモリ205bにアクセスされうるとする。
【0092】
この場合、外部シミュレータ4は、動作を完了すると、上記のフラグをオンにすることでPLCシミュレータ2に動作の完了を通知する。動作周期が比較的短いPLCシミュレータ2は、周期が到来した際に、フラグがオフであれば外部シミュレータ4のプログラムの動作が完了していないとみなして処理を実行せず待機する。PLCシミュレータ2は、フラグがオンである場合は、外部シミュレータ4のプログラムの動作が完了したと検知して処理を実行する。
【0093】
図10は、変形例2におけるPLCシミュレータ2の動作を示すフローチャートである。
【0094】
PLCシミュレータ2は、所定の動作周期が到来するタイミングで、フラグがONでなければ待機してプログラム203aを実行せず、これによりPLCメモリ205bへのアクセスを停止する(S91:NO)。
【0095】
所定周期が到来し、かつ、フラグがONであると、PLCシミュレータ2は、フラグをオフにする(S93)。
【0096】
PLCシミュレータ2は、PLCメモリ205bへアクセスしてPLCメモリ205bのデータの入出力処理(S95)や、PLCメモリ205bのデータ等を用いてプログラム203aを実行する(S97)など所定の処理を実行する。
【0097】
図11は、変形例2における外部シミュレータ4の動作を示すフローチャートである。
外部シミュレータ4において動作するプログラムは、所定の動作周期(モニタ周期)が到来するまで待機する(S101:NO)。周期が到来すると(S101:YES)、外部シミュレータ4において動作するプログラムは、モニタ処理(S103)や演算処理(S105)などPLCメモリ205bの読み出しおよび書き込みを伴う所定の処理を実行する。外部シミュレータ4において動作するプログラムは、これら処理が完了すると、フラグをオンにする(S107)。フラグとオンすることにより、外部シミュレータ4において動作するプログラムにおける処理が実行されたことをPLCシミュレータ2に通知する。
【0098】
上記の通りPLCシミュレータ2の動作周期は外部シミュレータ4のものよりも短いため、外部シミュレータ4の周期的な処理の実行タイミングが再度、到来する前に、PLCシミュレータ2によるPLCメモリ205bへのアクセスが完了している。したがって、PLCシミュレータ2と外部シミュレータ4との間で、PLCメモリ205bへのアクセスが同時になされることはなく、外部シミュレータ4においてユーザプログラムが意図しないデータに基づいて誤って動作するのを防ぐことができる。
【0099】
実施形態の説明では、外部シミュレータ4は、検知部404によりPLCシミュレータ2のプログラムの実行完了を検知するものとして説明した。上記変形例の説明からも明らかなように、PLCシミュレータ2側により外部シミュレータ4におけるプログラムの実行状態を検知して、PLCシミュレータ2におけるプログラムの実行抑止等の制御をすることとしてもよい。すなわち、検知部404の機能は、PLCシミュレータ2も発揮することができる。
【0100】
また、外部シミュレータ4およびPLCシミュレータ2の双方が、互いに検知部404の機能を発揮して、他方のプログラムの実行完了を検知することとしてもよい。
【0101】
上記のPLCシミュレータ2の動作を制御する制御プログラムを、コンピュータ読み取り可能な記録媒体に記録し、記録媒体を流通させることにより、この制御プログラムを頒布することもできる。今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。