(57)【特許請求の範囲】
【請求項１】
ＰＬＣシミュレーションシステムであって、
前記ＰＬＣシミュレーションシステムは、第１の周期により周期的に処理を繰り返すＰＬＣシミュレータと、前記第１の周期とは異なる第２の周期により周期的に処理を繰り返す外部シミュレータとを含み、
前記ＰＬＣシミュレータは、
プログラム実行のためのデータを保持し、前記ＰＬＣシミュレータおよび前記外部シミュレータによるアクセスが可能な記憶部と、
前記記憶部へのデータ入出力処理を伴うプログラムを実行する第１の実行部とを備え、
前記外部シミュレータは、
前記記憶部へのデータ入出力処理を伴うプログラムを実行する第２の実行部を備え、
前記第１の実行部または前記第２の実行部の少なくともいずれか一方は、他方におけるプログラムの実行が完了したことを検知する検知部を含み、
前記第１の実行部または前記第２の実行部は、プログラムを実行後、前記検知がなされるまで前記記憶部へのアクセスを伴うプログラム実行を抑止する、
ＰＬＣシミュレーションシステム。
【請求項２】
前記ＰＬＣシミュレータは、前記外部シミュレータと通信するためのソケットインターフェースを備え、前記ＰＬＣシミュレータに所定の処理を実行させるコマンドを前記外部シミュレータから受け付けるものであり、
前記第１の実行部は、前記ソケットインターフェースにより受け付けたコマンドに応じた処理を実行し、
前記コマンドは、前記第１の実行部によるプログラムの実行状態を前記外部シミュレータに通知する通知コマンドを含み、
前記第２の実行部は、前記検知部を含み、前記通知コマンドの使用により前記検知を行う、
請求項１記載のＰＬＣシミュレーションシステム。
【請求項３】
前記記憶部は、カウンタを含み、
前記第１の実行部または前記第２の実行部の少なくともいずれか一方は、プログラムの実行を完了するとカウンタ値を更新し、
前記検知部は、前記カウンタ値の更新を検知することにより、前記検知を行う、
請求項１記載のＰＬＣシミュレーションシステム。
【請求項４】
前記記憶部は、フラグを記憶し、
前記第１の実行部または前記第２の実行部の少なくともいずれか一方は、プログラムの実行を完了すると、前記フラグの値を、実行完了を示す値に変更し、
前記検知部は、前記フラグの値に基づいて前記検知を行う、
請求項１記載のＰＬＣシミュレーションシステム。
【請求項５】
第１の周期により周期的に処理を繰り返すＰＬＣシミュレータであって、
プログラム実行のためのデータを保持し、前記ＰＬＣシミュレータ、および、前記第１の周期とは異なる第２の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部と、
前記記憶部へのデータ入出力処理を伴うプログラムを実行する実行部とを備え、
前記実行部は、前記外部シミュレータにおけるプログラムの実行が完了したことを検知する検知部を含み、プログラムを実行後、前記検知部による検知がなされるまで前記記憶部へのアクセスを伴うプログラム実行を抑止する、
ＰＬＣシミュレータ。
【請求項６】
第１の周期により周期的に処理を繰り返すＰＬＣシミュレータであって、
前記第１の周期とは異なる第２の周期により周期的に処理を繰り返す外部シミュレータと情報を送受信するためのインターフェースと、
プログラム実行のためのデータを保持し、前記ＰＬＣシミュレータおよび前記外部シミュレータによるアクセスが可能な記憶部と、
前記記憶部へのデータ入出力処理を伴うプログラムを実行する実行部とを備え、
前記実行部は、プログラムの実行状態を、前記インターフェースにより前記外部シミュレータに通知する、
ＰＬＣシミュレータ。
【請求項７】
第２の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部を含み、前記第２の周期とは異なる第１の周期により周期的に処理を繰り返すＰＬＣシミュレータの動作を制御する制御プログラムであって、
前記記憶部へのデータ入出力処理を伴うユーザプログラムを前記ＰＬＣシミュレータに実行させるステップと、
前記外部シミュレータにおけるプログラムの実行が完了したことを前記ＰＬＣシミュレータに検知させるステップと、
前記ユーザプログラムを実行後、前記検知がなされるまで前記記憶部へのアクセスを伴うユーザプログラムの実行を前記ＰＬＣシミュレータに抑止させるステップと、
を含む制御プログラム。
【請求項８】
第２の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部を含み、前記第２の周期とは異なる第１の周期により周期的に処理を繰り返すＰＬＣシミュレータの動作を制御する制御プログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記制御プログラムは、
前記記憶部へのデータ入出力処理を伴うユーザプログラムを前記ＰＬＣシミュレータに実行させるステップと、
前記外部シミュレータにおけるプログラムの実行が完了したことを前記ＰＬＣシミュレータに検知させるステップと、
前記ユーザプログラムを実行後、前記検知がなされるまで前記記憶部へのアクセスを伴うユーザプログラムの実行を前記ＰＬＣシミュレータに抑止させるステップとを含む、
記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルロジックコントローラ（ＰＬＣ：Programmable  Logic  Controller、以下「ＰＬＣ」とも称する）およびＰＬＣと通信する各デバイスとをシミュレータによりシミュレーションするＰＬＣシミュレーションシステム、および、ＰＬＣシミュレータに関し、特に、ＰＬＣと各デバイスによるデータのアクセスを制御する技術に関する。
【背景技術】
【０００２】
ＰＬＣのプログラムの開発において、開発の生産性を高めるために、ＰＣ（Personal  computer）でＰＬＣシミュレータを動作させ、プログラムをデバッグすることが行われている。
【０００３】
ＰＬＣでは、プログラムとデータがメモリに格納されている。メモリの内容は、ＰＬＣと通信する各デバイスによっても書き換えられる。このようなＰＬＣシミュレーションシステムは、例えば、下記の特許文献１に開示されている。
【０００４】
特開２００９−２２３４７１号公報（下記の特許文献１）には、ＰＬＣおよびＰＬＣの表示器となるプログラマブルターミナル（ＰＴ）が協働するＰＬＣシステム全体をシミュレーションしつつ、プログラムおよびＰＴの表示プログラムのデバッグを行うため、ＰＬＣシミュレータとＰＴシミュレータとを備えるＰＬＣシミュレーションシステムが開示されている。
【０００５】
特許文献１によると、ＰＴシミュレータ側でのユーザ操作がＰＬＣシミュレータへも通知される。そのため、ＰＴの表示プログラムやＰＬＣのプログラムのデバッグを行うことができ、ユーザは、例えば、ＰＴのタッチパネルを操作した際のシミュレーションなどをＰＣで実行することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２２３４７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のように、ＰＬＣのメモリの内容は、ＰＬＣのみならず、ＰＬＣと通信する外部のデバイス等からのアクセスにより読み込み、書き込みがなされる。そのため、ＰＬＣと外部のデバイスとで、ＰＬＣメモリへのアクセスが競合しうる。その結果、意図しない動作が引き起こされるおそれがある。
【０００８】
そこで、本発明は、ＰＬＣシミュレーションシステムにおけるＰＬＣメモリへのデータのアクセス制御によりアクセスの競合を回避して、ＰＬＣシミュレーションシステムの信頼性を向上させることを目的とする。
【課題を解決するための手段】
【０００９】
一実地形態に従うＰＬＣシミュレーションシステムは、第１の周期により周期的に処理を繰り返すＰＬＣシミュレータと、第２の周期により周期的に処理を繰り返す外部シミュレータとを含み、ＰＬＣシミュレータは、プログラム実行のためのデータを保持し、ＰＬＣシミュレータおよび外部シミュレータによるアクセスが可能な記憶部と、記憶部へのデータ入出力処理を伴うプログラムを実行する第１の実行部とを備え、外部シミュレータは、記憶部へのデータ入出力処理を伴うプログラムを実行する第２の実行部を備え、第１の実行部または第２の実行部の少なくともいずれか一方は、他方におけるプログラムの実行が完了したことを検知する検知部を含み、第１の実行部または第２の実行部は、プログラムを実行後、検知がなされるまで記憶部へのアクセスを伴うプログラム実行を抑止する。
【００１０】
好ましくは、ＰＬＣシミュレータは、外部シミュレータと通信するためのソケットインターフェースを備え、ＰＬＣシミュレータに所定の処理を実行させるコマンドを外部シミュレータから受け付けるものであり、第１の実行部は、ソケットインターフェースにより受け付けたコマンドに応じた処理を実行し、コマンドは、第１の実行部によるプログラムの実行状態を外部シミュレータに通知する通知コマンドを含み、第２の実行部は、検知部を含み、通知コマンドの使用により検知を行うこととしてもよい。
【００１１】
好ましくは、記憶部は、カウンタを含み、第１の実行部または第２の実行部の少なくともいずれか一方は、プログラムの実行を完了するとカウンタ値を更新し、検知部は、カウンタ値の更新を検知することにより、検知を行うこととしてもよい。
【００１２】
好ましくは、記憶部は、フラグを記憶し、第１の実行部または第２の実行部の少なくともいずれか一方は、プログラムの実行を完了すると、フラグの値を、実行完了を示す値に変更し、検知部は、フラグの値に基づいて検知を行うこととしてもよい。
【００１３】
一実施形態に従うＰＬＣシミュレータは、第１の周期により周期的に処理を繰り返すＰＬＣシミュレータであって、プログラム実行のためのデータを保持し、ＰＬＣシミュレータ、および、第２の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部と、記憶部へのデータ入出力処理を伴うプログラムを実行する実行部とを備え、実行部は、外部シミュレータにおけるプログラムの実行が完了したことを検知する検知部を含み、プログラムを実行後、検知部による検知がなされるまで記憶部へのアクセスを伴うプログラム実行を抑止する。
【００１４】
一実施形態に従うＰＬＣシミュレータは、第１の周期により周期的に処理を繰り返すＰＬＣシミュレータであって、第２の周期により周期的に処理を繰り返す外部シミュレータと情報を送受信するためのインターフェースと、プログラム実行のためのデータを保持し、ＰＬＣシミュレータおよび外部シミュレータによるアクセスが可能な記憶部と、記憶部へのデータ入出力処理を伴うプログラムを実行する実行部とを備え、実行部は、プログラムの実行状態を、インターフェースにより外部シミュレータに通知する。
【００１５】
他の実施形態に従うと、第２の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部を含み、第１の周期により周期的に処理を繰り返すＰＬＣシミュレータの動作を制御する制御プログラムが提供される。この制御プログラムは、記憶部へのデータ入出力処理を伴うユーザプログラムをＰＬＣシミュレータに実行させるステップと、外部シミュレータにおけるプログラムの実行が完了したことをＰＬＣシミュレータに検知させるステップと、ユーザプログラムを実行後、検知がなされるまで記憶部へのアクセスを伴うユーザプログラムの実行をＰＬＣシミュレータに抑止させるステップと、をＰＬＣシミュレータに実行させる。
【００１６】
他の実施形態に従うと、第２の周期により周期的に処理を繰り返す外部シミュレータによるアクセスが可能な記憶部を含み、第１の周期により周期的に処理を繰り返すＰＬＣシミュレータの動作を制御する制御プログラムを記録したコンピュータ読み取り可能な記録媒体が提供される。この記録媒体に記録される制御プログラムは、記憶部へのデータ入出力処理を伴うユーザプログラムをＰＬＣシミュレータに実行させるステップと、外部シミュレータにおけるプログラムの実行が完了したことをＰＬＣシミュレータに検知させるステップと、ユーザプログラムを実行後、検知がなされるまで記憶部へのアクセスを伴うユーザプログラムの実行をＰＬＣシミュレータに抑止させるステップとをＰＬＣシミュレータに実行させる。
【発明の効果】
【００１７】
このような構成によると、ＰＬＣシミュレーションシステムの信頼性を向上させることができる。
【００１８】
この発明の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解されるこの発明に関する次の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施の形態に係るＰＬＣシミュレーションシステム１０を示す機能ブロック図である。
【図２】ＰＣ１１の構成を示す図である。
【図３】ＰＬＣシミュレータ２のソケットインターフェースにおけるコマンドシーケンスの一例を示す図である。
【図４】関連技術におけるＰＬＣシミュレータの動作を示すフローチャートである。
【００２０】
【図５】関連技術における外部シミュレータの動作を示すフローチャートである。
【図６】関連技術におけるシミュレーションシステムの動作例を示す図である。
【図７】本実施形態のＰＬＣシミュレータ２および外部シミュレータ４の動作を示すフローチャートである。
【図８】外部シミュレータ４とＰＬＣシミュレータ２のタイミングチャートを示す図である。
【図９】ＰＬＣシミュレータ２において動作するプログラムの実行が完了したことをカウンタを用いて通知する場合のタイミングチャートである。
【図１０】変形例２におけるＰＬＣシミュレータ２の動作を示すフローチャートである。
【図１１】変形例２における外部シミュレータ４の動作を示すフローチャートである。
【発明を実施するための形態】
【００２１】
以下、本発明にかかるＰＬＣシミュレータ２と、外部シミュレータ４と、ＰＬＣシミュレータ２および外部シミュレータ４が含まれるＰＬＣシミュレーションシステム１０とについて説明する。
【００２２】
＜１  ＰＬＣシミュレーションシステム１０の構成＞
図１は本発明の実施の形態に係るＰＬＣシミュレーションシステム１０の構成を示す機能ブロック図である。
【００２３】
同図に示されるように、このシミュレーションシステム１０は、ＰＬＣプログラミングツール１と、ＰＬＣシミュレータ２と、設定ツール３と、外部シミュレータ４とを含んで構成される。それらのシステム構成要素１〜４は、それぞれ専用のコンピュータプログラム（ＰＬＣプログラミングツールソフト、ＰＬＣシミュレータソフト、設定ツールソフト、外部シミュレータソフト）をコンピュータ（例えば、パーソナルコンピュータ（ＰＣ））に組み込むことにより、ソフトウェア的に実現される。
【００２４】
本実施形態では、１台のＰＣにおいて上記システム構成要素１〜４が動作するものとして説明する。
【００２５】
＜１．１  ＰＬＣプログラミングツール１の構成＞
ＰＬＣプログラミングツール１は、ＰＬＣシミュレータ２をデバッグするためのツールであり、ユーザ５の操作を受け付けてＰＬＣシミュレータ２の実行を制御する。
【００２６】
ＰＬＣプログラミングツール１は、グラフィカルユーザインタフェース（ＧＵＩ）部１０１と、プログラム管理部１０２と、ミドルウェアとして構成される通信部１０３と、シミュレーションインタフェース（Ｉ／Ｆ）部１０４とを含んでいる。
【００２７】
ＧＵＩ部１０１は、ＧＵＩ画面を表示して、ユーザ５の操作等を介して、ＰＬＣシミュレーションやデバック等に関する種々の情報（例えば、ＰＬＣシミュレーションの開始、停止等）をユーザ５とやり取りする機能を有する。
【００２８】
プログラム管理部１０２は、プログラムの作成や編集をする機能を有する。プログラム管理部１０２は、ＧＵＩ部１０１を介してユーザから与えられる指示に従った処理を行う。具体的には、プログラム管理部１０２は、通信部１０３を介しての記憶部２０５からのプログラムの読み込み又はプログラムの書き込み等の機能を有する。
【００２９】
通信部１０３は、ＰＬＣシミュレータ２の通信部２０２との通信インターフェースを有する。
【００３０】
シミュレーションインタフェース（Ｉ／Ｆ）部１０４は、ＰＬＣシミュレータ２との間で、ＰＬＣシミュレーションやデバック等に関する種々の情報（例えば、ＰＬＣシミュレータ２の起動、停止、プログラム実行部２０３におけるプログラムの起動、停止）をやり取りする機能を有する。
【００３１】
＜１．２  ＰＬＣシミュレータ２の構成＞
ＰＬＣシミュレータ２は、ＰＬＣのシミュレーション機能を有し、ユーザ５の操作に基づいて動作し、外部シミュレータ４と協働してシミュレーション結果を出力する。
【００３２】
ＰＬＣシミュレータ２は、外部シミュレータ４に対し、外部シミュレータ４と通信するためのソケットインターフェースを提供している。ＰＬＣシミュレータ２と外部シミュレータ４とが同一のＰＣにおいて動作する場合に、ＰＬＣシミュレータ２のソケットインターフェースによって外部シミュレータ４がＰＬＣシミュレータ２へ指示をすることにより、外部シミュレータ４はＰＬＣシミュレータ２を操作することができる。このソケットインターフェースについては後述する。
【００３３】
ＰＬＣシミュレータ２は、ＰＬＣプログラミングツール１からのＰＬＣシミュレータ起動停止指令を受けて、起動および停止する。ＰＬＣシミュレータ２は、プログラム制御部２０１と、通信部２０２と、プログラム実行部２０３と、停止条件保持部２０４と、記憶部２０５を含んでいる。
【００３４】
記憶部２０５は、ＲＡＭ（Random  Access  Memory）等における所定の記憶領域であり、ユーザが任意に作成したプログラム２０５ａと、プログラム２０５ａが参照するＰＬＣメモリ２０５ｂ（入出力メモリ、データメモリ等々）とを有する。
【００３５】
プログラム実行部２０３は、所定の起動停止指令が与えられるのに応答して、記憶部２０５よりプログラム２０５ａを読み出して実行する。
【００３６】
記憶部２０５に保持されるプログラム２０５ａとＰＬＣメモリ２０５ｂの内容とは、通信部２０２を介して、ＰＬＣプログラミングツール１からモニタ可能とされている。さらに、ＰＬＣメモリ２０５ｂの内容は、通信部２０２を介して、外部シミュレータ４からも読み込み又は書き込み可能とされている。
【００３７】
通信部２０２は、データの読み込みや書き込みをする機能を有する。また、通信部２０２は、外部シミュレータ４に対してソケットインターフェースを提供している。ソケットインターフェースを用いることにより、外部シミュレータ４はＰＬＣシミュレータ２を容易に操作することができる。
【００３８】
プログラム制御部２０１は、ＰＬＣプログラミングツール１から与えられる起動停止指令に応答して、プログラム実行部２０３によるプログラム２０５ａの実行の起動、停止を制御する機能を有する。
【００３９】
また、プログラム制御部２０１は、ＰＬＣプログラミングツール１から与えられる停止条件設定に応答して、その停止条件設定に含まれる「停止条件」を停止条件保持部２０４に設定保持させる機能を有する。
【００４０】
プログラム制御部２０１は、停止条件保持部２０４に設定保持される「停止条件」の成立を常時監視し、「停止条件」の成立が確認されたならば、プログラム実行部２０３におけるプログラム２０５ａの実行を直ちに停止させる機能を有する。したがって、停止条件保持部２０４に所望の「停止条件」を設定保持させることで、プログラムの実行を任意のタイミングで停止させる。これによりプログラムのデバッグが可能とされている。
【００４１】
停止条件保持部２０４は、上述の通り、プログラム２０５ａの実行を停止させる条件を保持している。
【００４２】
＜１．３  設定ツール３の構成＞
設定ツール３は、外部シミュレータ４のデバッグのためのツールであり、ユーザ５の操作を受け付けて外部シミュレータ４の起動や停止を制御する。
【００４３】
設定ツール３は、グラフィカルユーザインタフェース（ＧＵＩ）部３０１と、シミュレーションインタフェース（Ｉ／Ｆ）部３０３とを含んでいる。
【００４４】
ＧＵＩ部３０１は、ユーザ５との間で、画面表示、キーボード操作、マウス操作等々を介して、デバック等に関する種々の情報（例えば、ＰＬＣと通信するデバイスのシミュレーションの開始、停止等）をやり取りする機能を有する。
【００４５】
シミュレーションインタフェース（Ｉ／Ｆ）部３０３は、外部シミュレータ４との間で、デバック等に関する種々の情報（例えば、外部シミュレータ４の起動、停止等）をやり取りする機能を有する。
【００４６】
＜１．４  外部シミュレータ４の構成＞
外部シミュレータ４は、ＰＬＣシミュレータ２と協働して動作するデバイスのシミュレーション機能を発揮するプログラムである。本実施形態では、外部シミュレータ４は、ＰＬＣシミュレータ２のソケットインターフェースを用いて外部シミュレータ４が主導的にＰＬＣシミュレータ２に所定の指示をしてＰＬＣシミュレータ２を操作する。
【００４７】
外部シミュレータ４は、画面表示部４０１と、ミドルウェアとして構成される通信部４０２と、実行部４０３とを含んでいる。
【００４８】
画面表示部４０１は、シミュレーション対象のデバイスの実機の操作画面に対応する。実行部４０３における実行動作が開始されると、マウスやキーボードを介して仮想的に行われるユーザ５の操作等を受け付けて、その操作内容を実行部４０３へと受け渡す機能を有する。
【００４９】
実行部４０３は、所定のプログラムに従って動作し、通信部４０２を介してＰＬＣシミュレータ２のＰＬＣメモリ２０５ｂの該当するアドレスへの書き込み、読み出しを行う。実行部４０３は、検知部４０４を含む。
【００５０】
検知部４０４は、ＰＬＣシミュレータ２においてプログラム実行部２０３が所定のプログラムを実行しているか検知する。本実施形態では、後述するソケットインターフェースを用いて検知する。
【００５１】
＜１．５  ＰＬＣシミュレーションシステム１０の動作環境＞
上記の構成を備えるＰＬＣシミュレーションシステム１０は、ＰＣにおいてソフトウェア的に実現される。ここで、ＰＣ１１の構成を図２に示す。
【００５２】
図２に示すように、ＰＣ１１は、演算部１２と、ＲＯＭ１３と、ＲＡＭ１４と、入力部１５と、出力部１６とを含む。
【００５３】
演算部１２は、ＣＰＵ（Central  Processing  Unit）を備え、ＯＳ（Operating  System）やＰＬＣシミュレータ２や外部シミュレータ４など各プログラムの実行を制御する。
【００５４】
ＲＯＭ１３は、ＲＯＭ(Read  Only  Memory）であり、各種プログラムを記憶している。
【００５５】
ＲＡＭ１４は、ソフトウェアを実行するための記憶領域であり、ＰＬＣシミュレータ２などプログラムがＲＡＭ１４に読み込まれて各プログラムが動作する。
【００５６】
入力部１５は、ユーザ５の操作を受け付ける。具体的には入力部１５はキーボードやタッチパネル等により構成される。
【００５７】
出力部１６は、シミュレーションの結果などを出力する。具体的にはモニタなどの表示部により構成される。
【００５８】
＜２  ソケットインターフェース＞
次に、ＰＬＣシミュレータ２が提供するソケットインターフェースについて説明する。
【００５９】
図３は、ＰＬＣシミュレータ２のソケットインターフェースにおけるコマンドシーケンスの一例を示す図である。
【００６０】
外部シミュレータ４は、ソケットインターフェースにより、各コマンドを使用してＰＬＣシミュレータ２を操作することができる。
【００６１】
例えば、図示するように「GoOneScan」は、ＰＬＣシミュレータ２において動作するプログラムを１周期実行させるためのコマンドである。コマンドの引数の指定により、ＰＬＣシミュレータ２において動作するプログラムを１周期実行させて一定時間待機させるか、待機を解除するかを制御することができる。待機させてから一定時間経過後は、ＰＬＣシミュレータ２に通常の連続実行を開始させることとしてもよい。
【００６２】
また、例えば、「CheckPLCState」は、ＰＬＣシミュレータ２において動作するプログラムの実行状態を取得するためのコマンドである。このコマンドにより、ＰＬＣシミュレータ２において動作するプログラムの実行状態として、ＰＬＣシミュレータ２が１周期実行を終えて待機中であるか、１周期実行中であるかが外部シミュレータ４に通知される。
【００６３】
したがって、外部シミュレータ４は、「GoOneScan」コマンドによりＰＬＣシミュレータ２にプログラムの１周期実行を指示した後、「CheckPLCState」によりＰＬＣシミュレータ２におけるプログラムの実行状態を取得することで、ＰＬＣシミュレータ２が処理を終えたか検知することができる。
【００６４】
＜３  動作＞
次に、ＰＬＣシミュレーションシステム１０のＰＬＣシミュレータ２、外部シミュレータ４の動作について説明する。
【００６５】
本実施形態では、外部シミュレータ４とＰＬＣシミュレータ２の一方が制御の主導権を握り、もう一方へ処理の開始を指示して処理が実行されたことを確認する。
【００６６】
この実施形態の例では、ＰＬＣシミュレータ２がソケットインターフェースを用意し、外部シミュレータ４において動作するプログラムは、主導的にＰＬＣシミュレータ２を操作する。外部シミュレータ４において動作するプログラムは、ＰＬＣシミュレータ２におけるプログラムの動作が完了したことを、ソケットインターフェースを用いた所定のコマンドにより検知する。検知してから外部シミュレータ４のプログラムが動作する。
【００６７】
これにより、ＰＬＣメモリ２０５ｂへのアクセスが競合しないようプログラムが実行される。そのため、ＰＬＣメモリ２０５ｂのデータが意図しないまま改変され、想定外の動作をすることが防止される。
【００６８】
＜３．１  関連技術の動作＞
ここで、本発明との比較のため、ＰＬＣメモリへのアクセスの競合が起こりうるシミュレーションシステムの構成について説明する。
【００６９】
図４は、関連技術におけるＰＬＣシミュレータの動作を示すフローチャートである。
同図に示すように、関連技術におけるＰＬＣシミュレータは、周期的に処理を繰り返し実行する。すなわち、関連技術におけるＰＬＣシミュレータは、所定周期が経過する都度（Ｓ２１）、ＰＬＣメモリへのデータの入出力処理を行い（Ｓ２３）、プログラムを実行する（Ｓ２５）。
【００７０】
図５は、関連技術における外部シミュレータの動作を示すフローチャートである。
同図に示すように、関連技術における外部シミュレータ（例えば、ＰＬＣにより動作制御される検査用のベルトコンベアのシミュレータ）は、所定のモニタ周期が経過する都度（Ｓ３１）、ＰＬＣメモリへのデータのアクセスを伴うモニタ処理を行い（Ｓ３３）、所定の演算処理を実行する（Ｓ３５）。このように、外部シミュレータは、周期的に所定の動作を実行する。
【００７１】
このようにして動作する関連技術におけるシミュレーションシステムの動作例を、図６に示す。図６では、外部シミュレータよりもＰＬＣシミュレータの動作周期が短いものとして図示している。
【００７２】
同図のように、関連技術では、ＰＬＣシミュレータと外部シミュレータとがそれぞれ独立に動作するため、同時にＰＬＣメモリへアクセスしうる。外部シミュレータは、所定周期ごとに、ＰＬＣメモリへアクセスして所定の動作を行う。外部シミュレータがＰＬＣメモリのデータの読み出しと書き出しをしている間、外部シミュレータよりも動作周期が短いＰＬＣシミュレータがタスクを実行することにより、ＰＬＣメモリのデータが書き換えられる（同図中では、「Ａ」「Ｂ」「Ｃ」と書き換えられている）。
【００７３】
関連技術では、外部シミュレータとＰＬＣシミュレータとでＰＬＣメモリへのアクセスが同時になされるおそれがあり、ユーザが意図しない動作をし得ることとなる。
【００７４】
＜３．２  ＰＬＣシミュレータの動作＞
次に、本実施形態におけるＰＬＣシミュレータ２および外部シミュレータ４の動作について説明する。
【００７５】
図７は、本実施形態のＰＬＣシミュレータ２および外部シミュレータ４の動作を示すフローチャートである。同図に示すように、ＰＬＣシミュレータ２は、ソケットインターフェースにより外部シミュレータ４からの操作を受け付ける。同図では、ソケットの初期化等の処理を経て、外部シミュレータ４がコマンドシーケンスによりＰＬＣシミュレータ２の操作を開始する処理を示している。
【００７６】
外部シミュレータ４は、「GoOneScan」コマンドによりＰＬＣシミュレータ２において動作するプログラムに１周期の実行をさせる（Ｓ６２）。ＰＬＣシミュレータ２では、「GoOneScan」コマンドの受信によりプログラムの１周期の実行後、待機する（Ｓ６８）。
【００７７】
外部シミュレータ４は、「CheckPLCState」コマンド使用により、ＰＬＣシミュレータ２において１周期の実行がされたか確認する（Ｓ６３）。ＰＬＣシミュレータ２において１周期の実行中であれば（Ｓ６３：ＮＯ）、外部シミュレータ４は、ＰＬＣシミュレータ２より「待機中」を示す応答があるまで「CheckPLCState」コマンドを使用する。
【００７８】
ＰＬＣシミュレータ２より１周期の実行が完了して「待機中」を示す応答があると（Ｓ６３：ＹＥＳ）、外部シミュレータ４は、取得したアドレスに基づくＰＬＣメモリ２０５ｂへの書き込みなど所定の書込処理を実行する（Ｓ６４）。
【００７９】
書込処理が完了すると、外部シミュレータ４は、「GoOneScan」コマンド使用によりＰＬＣシミュレータ２において動作するプログラムに１周期の実行をさせる（Ｓ６５）。ＰＬＣシミュレータ２では、「GoOneScan」コマンドを受信してプログラムの１周期の実行後、待機する（Ｓ６８）。
【００８０】
外部シミュレータ４は、「CheckPLCState」コマンド使用により、ＰＬＣシミュレータ２において１周期の実行がされたか確認する（Ｓ６６）。
【００８１】
ＰＬＣシミュレータ２より１周期の実行が完了して「待機中」を示す応答があると（Ｓ６６：ＹＥＳ）、外部シミュレータ４は、取得したアドレスに基づくＰＬＣメモリ２０５ｂからの読み出しなど所定の読出処理を実行する（Ｓ６７）。その後、外部シミュレータ４は、ステップＳ６４以降の処理を繰り返す。
【００８２】
上記のように、外部シミュレータ４は、ステップＳ６５等によりＰＬＣシミュレータ２におけるプログラムの実行を主導し、ステップＳ６６等により、ＰＬＣシミュレータ２の実行が完了したか（ＢＵＳＹ状態かＩＤＬＥ状態か）確認してから処理（ステップＳ６７等）を行う。
【００８３】
このように動作する外部シミュレータ４とＰＬＣシミュレータ２のタイミングチャートを図８に示す。
【００８４】
図８に示すように、外部シミュレータ４とＰＬＣシミュレータ２とが交互にプログラムを動作させている。外部シミュレータ４がＰＬＣシミュレータ２において動作するプログラムに１周期の実行をさせると、ＰＬＣシミュレータ２は所定の演算を行い、この間ＢＵＳＹ状態となる。外部シミュレータ４は、ソケットインターフェースを用いたコマンドによりＰＬＣシミュレータ２の実行状態を確認し、ＰＬＣシミュレータ２が待機中の状態（ＩＤＬＥ状態）になってから処理を開始する。
【００８５】
＜３．３  変形例＞
上記の他にも、外部シミュレータ４とＰＬＣシミュレータ２とが交互にプログラムを動作させるために、一方の実行が完了したことを検知する方法は様々ある。すなわち、検知部４０４の機能を発揮させる具体的な方法は以下のようにしてもよい。
【００８６】
（変形例１）
上記の例では、外部シミュレータ４がＰＬＣシミュレータ２の実行状態を逐次確認する（「CheckPLCState」コマンドの使用）こととしていたが、この他に、実行状態が完了したことを、所定の記憶領域を用いて一方から他方へと通知することとしてもよい。
【００８７】
図９は、ＰＬＣシミュレータ２において動作するプログラムの実行が完了したことをカウンタを用いて通知する場合のタイミングチャートである。
【００８８】
図９の例では、外部シミュレータ４は、主導的にＰＬＣシミュレータ２のプログラムを動作させる。ＰＬＣシミュレータ２は、動作を完了するとカウンタ値を更新する。外部シミュレータ４は、カウンタ値の更新がされることによりＰＬＣシミュレータ２におけるプログラムの動作完了を検知している。
【００８９】
図９に示すように、ＰＬＣシミュレータ２は、処理を開始すると、所定の読み出し処理時にカウンタ値を取得し、演算を実行して所定の書き込み処理時にカウンタ値を更新する。外部シミュレータ４は、カウンタ値を監視しており、カウンタ値の更新があると、処理を開始する。
【００９０】
（変形例２）
また、所定の記憶領域に、外部シミュレータ４とＰＬＣシミュレータ２のうち一方の実行が完了したことを示すフラグを記憶部２０５において記憶することにより、実行状態を一方から他方へと通知することとしてもよい。
【００９１】
例えば、ＰＬＣシミュレータ２において動作するプログラムは、外部シミュレータ４よりも短い動作周期で動作するとする。すなわち、外部シミュレータ４の動作の間、ＰＬＣシミュレータ２により複数回ＰＬＣメモリ２０５ｂにアクセスされうるとする。
【００９２】
この場合、外部シミュレータ４は、動作を完了すると、上記のフラグをオンにすることでＰＬＣシミュレータ２に動作の完了を通知する。動作周期が比較的短いＰＬＣシミュレータ２は、周期が到来した際に、フラグがオフであれば外部シミュレータ４のプログラムの動作が完了していないとみなして処理を実行せず待機する。ＰＬＣシミュレータ２は、フラグがオンである場合は、外部シミュレータ４のプログラムの動作が完了したと検知して処理を実行する。
【００９３】
図１０は、変形例２におけるＰＬＣシミュレータ２の動作を示すフローチャートである。
【００９４】
ＰＬＣシミュレータ２は、所定の動作周期が到来するタイミングで、フラグがＯＮでなければ待機してプログラム２０３ａを実行せず、これによりＰＬＣメモリ２０５ｂへのアクセスを停止する（Ｓ９１：ＮＯ）。
【００９５】
所定周期が到来し、かつ、フラグがＯＮであると、ＰＬＣシミュレータ２は、フラグをオフにする（Ｓ９３）。
【００９６】
ＰＬＣシミュレータ２は、ＰＬＣメモリ２０５ｂへアクセスしてＰＬＣメモリ２０５ｂのデータの入出力処理（Ｓ９５）や、ＰＬＣメモリ２０５ｂのデータ等を用いてプログラム２０３ａを実行する（Ｓ９７）など所定の処理を実行する。
【００９７】
図１１は、変形例２における外部シミュレータ４の動作を示すフローチャートである。
外部シミュレータ４において動作するプログラムは、所定の動作周期（モニタ周期）が到来するまで待機する（Ｓ１０１：ＮＯ）。周期が到来すると（Ｓ１０１：ＹＥＳ）、外部シミュレータ４において動作するプログラムは、モニタ処理（Ｓ１０３）や演算処理（Ｓ１０５）などＰＬＣメモリ２０５ｂの読み出しおよび書き込みを伴う所定の処理を実行する。外部シミュレータ４において動作するプログラムは、これら処理が完了すると、フラグをオンにする（Ｓ１０７）。フラグとオンすることにより、外部シミュレータ４において動作するプログラムにおける処理が実行されたことをＰＬＣシミュレータ２に通知する。
【００９８】
上記の通りＰＬＣシミュレータ２の動作周期は外部シミュレータ４のものよりも短いため、外部シミュレータ４の周期的な処理の実行タイミングが再度、到来する前に、ＰＬＣシミュレータ２によるＰＬＣメモリ２０５ｂへのアクセスが完了している。したがって、ＰＬＣシミュレータ２と外部シミュレータ４との間で、ＰＬＣメモリ２０５ｂへのアクセスが同時になされることはなく、外部シミュレータ４においてユーザプログラムが意図しないデータに基づいて誤って動作するのを防ぐことができる。
【００９９】
実施形態の説明では、外部シミュレータ４は、検知部４０４によりＰＬＣシミュレータ２のプログラムの実行完了を検知するものとして説明した。上記変形例の説明からも明らかなように、ＰＬＣシミュレータ２側により外部シミュレータ４におけるプログラムの実行状態を検知して、ＰＬＣシミュレータ２におけるプログラムの実行抑止等の制御をすることとしてもよい。すなわち、検知部４０４の機能は、ＰＬＣシミュレータ２も発揮することができる。
【０１００】
また、外部シミュレータ４およびＰＬＣシミュレータ２の双方が、互いに検知部４０４の機能を発揮して、他方のプログラムの実行完了を検知することとしてもよい。
【０１０１】
上記のＰＬＣシミュレータ２の動作を制御する制御プログラムを、コンピュータ読み取り可能な記録媒体に記録し、記録媒体を流通させることにより、この制御プログラムを頒布することもできる。今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【産業上の利用可能性】
【０１０２】
本発明は、ＰＬＣシミュレーションシステムに用いることができる。
【符号の説明】
【０１０３】
１  ＰＬＣプログラミングツール、２  ＰＬＣシミュレータ、３  設定ツール、４  外部シミュレータ、５  ユーザ、１０  ＰＬＣシミュレーションシステム、１１  ＰＣ、１２  演算部、１３  ＲＯＭ、１４  ＲＡＭ、１５  入力部、１６  出力部、１０１  ＧＵＩ部、１０２  管理部、１０３  通信部、１０４  シミュレーションＩ／Ｆ部、２０１  制御部、２０２  通信部、２０３  プログラム実行部、２０４  停止条件保持部、２０５  記憶部、２０５ａ  プログラム、２０５ｂ  ＰＬＣメモリ、３０１  ＧＵＩ部、３０３  シミュレーションＩ／Ｆ部、４０１  画面表示部、４０２  通信部、４０３  実行部。
【図１】
0005962088.tif 000002
【図２】
0005962088.tif 000003
【図３】
0005962088.tif 000004
【図４】
0005962088.tif 000005
【図５】
0005962088.tif 000006
【図６】
0005962088.tif 000007
【図７】
0005962088.tif 000008
【図８】
0005962088.tif 000009
【図９】
0005962088.tif 000010
【図１０】
0005962088.tif 000011
【図１１】
0005962088.tif 000012