(57)【要約】【課題】ＰＬＣシステムで発生するネットワーク共有メモリへの書込み遅延を正確に模擬する模擬装置を提供する。【解決手段】遅延模擬装置１０００は、各実機ＰＬＣと一対一に対応し、実機ＰＬＣのプログラム１１１を実行してネットワーク共有メモリへの値の書込み要求を出力する複数の仮想ＰＬＣユニット１００と、各プログラム１１１の状態遷移を監視する状態遷移監視部３００と、いずれかの仮想ＰＬＣユニット１００から書込み要求を入力すると状態遷移監視部３００からすべての仮想ＰＬＣユニット１００のプログラム１１１の現在の遷移状態を取得し、書込み要求を出力した以外の各仮想ＰＬＣユニット１００の遅延模擬結果メモリ１２０へ前記値を書込むべきタイミングを示す遅延時間を取得された遷移状態に基づき個別に決定し、遅延時間が経過すると、対応する遅延模擬結果メモリ１２０に前記値を書込む遅延模擬部５００とを備えた。【選択図】図３
2009037329.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが所定のプログラムを実行する複数のＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）をネットワークで接続したＰＬＣシステムであって、それぞれの前記ＰＬＣによって共有が可能なメモリ空間であるネットワーク共有メモリを備えたＰＬＣシステムを模擬するＰＬＣシステム模擬装置において、
前記複数のＰＬＣと一対一に対応する複数の仮想ＰＬＣ部であって、対応する前記ＰＬＣが実行する前記プログラムを格納して実行することにより前記ネットワーク共有メモリへの所定の値の書込みを要求する書込み要求と前記ネットワーク共有メモリの参照を要求する参照要求とを出力する複数の仮想ＰＬＣ部と、
前記ネットワーク共有メモリに相当するとともに前記複数の仮想ＰＬＣ部に一対一に対応する複数の対応メモリと、
前記複数の仮想ＰＬＣ部のそれぞれにより実行される前記プログラムの状態遷移を監視する状態遷移監視部と、
いずれかの前記仮想ＰＬＣ部が前記書込み要求を出力すると、前記状態遷移監視部からすべての前記仮想ＰＬＣ部における前記プログラムの現在の状態を取得し、取得された前記状態に基づくことにより前記書込み要求を出力した前記仮想ＰＬＣ部である出力仮想ＰＬＣ以外のすべての前記仮想ＰＬＣ部に対応する前記対応メモリに前記所定の値を書込むべきタイミングを示す遅延時間を個別に決定し、個別に決定された前記遅延時間が経過したときに、経過した前記遅延時間に対応する前記対応メモリに前記所定の値を書込む遅延模擬部と
を備えたことを特徴とするＰＬＣシステム模擬装置。
【請求項２】
前記ＰＬＣシステム模擬装置は、さらに、
前記仮想ＰＬＣ部により格納される前記プログラムごとに、前記プログラムが状態遷移する場合のそれぞれの状態とその状態の実行に要する時間を示すスキャンタイムとの対応が記載されたスキャンタイムテーブルを格納するスキャンタイムテーブル格納部を備え、
前記遅延模擬部は、
前記スキャンタイムテーブルを参照することにより取得された前記状態に対応するスキャンタイムを特定し、特定されたスキャンタイムに基づいて、前記遅延時間を個別に決定することを特徴とする請求項１記載のＰＬＣシステム模擬装置。
【請求項３】
前記遅延模擬部は、
前記遅延時間を決定する場合に、前記出力仮想ＰＬＣにおける前記プログラムの現在の状態に対応するスキャンタイムと、前記遅延時間を決定するべき前記対応メモリに対応する前記仮想ＰＬＣ部における前記プログラムの現在の状態に対応するスキャンタイムとに基づいて、その前記仮想ＰＬＣ部に対応する前記対応メモリについての前記遅延時間を決定することを特徴とする請求項２記載のＰＬＣシステム模擬装置。
【請求項４】
前記仮想ＰＬＣに格納される前記プログラムのうちの少なくともいずれかは、
状態遷移するうちの少なくともいずれかの状態がネスト状態であり、
前記スキャンタイムテーブルは、
前記ネスト状態のそれぞれの状態について、スキャンタイムであるネスト状態スキャンタイムが記載され、
前記遅延模擬部は、
前記遅延時間を決定する場合に前記出力仮想ＰＬＣにおける前記プログラムと前記遅延時間を決定するべき対象となる前記対応メモリに対応する前記仮想ＰＬＣ部における前記プログラムとの少なくともいずれかに前記ネスト状態が存在するときは、前記スキャンタイムテーブルを参照することにより、前記ネスト状態である前記状態のスキャンタイムとして、その前記ネスト状態における最大の前記ネスト状態スキャンタイムを用いることを特徴とする請求項３記載のＰＬＣシステム模擬装置。
【請求項５】
前記ＰＬＣシステム模擬装置は、さらに、
それぞれの前記仮想ＰＬＣ部から前記仮想ＰＬＣ部の格納する前記プログラムが遷移し得るそれぞれの状態と前記状態に対応する前記プログラムのうちの部分的な部分プログラムとを入力し、前記部分プログラムを解析することにより前記状態ごとに前記スキャンタイムを算出するスキャンタイム計算部を備え、
前記スキャンタイムテーブル格納部は、
前記スキャンタイム計算部により算出された前記スキャンタイムを前記スキャンタイムテーブルに記載することを特徴とする請求項２〜４のいずれかに記載のＰＬＣシステム模擬装置。
【請求項６】
状態遷移するとともに各状態を複数回繰り返しながら状態遷移するプログラムを実行する複数のＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）をネットワークで接続したＰＬＣシステムであって、それぞれの前記ＰＬＣによって共有が可能なメモリ空間であるネットワーク共有メモリを備えたＰＬＣシステムを模擬するＰＬＣシステム模擬装置において、
前記複数のＰＬＣと一対一に対応する複数の仮想ＰＬＣ部であって、対応する前記ＰＬＣが実行する前記プログラムを格納して実行することにより前記ネットワーク共有メモリへの所定の値の書込みを要求する書込み要求と前記ネットワーク共有メモリの参照を要求する参照要求とを出力する複数の仮想ＰＬＣ部と、
前記ネットワーク共有メモリに相当するとともに前記複数のＰＬＣに一対一に対応する複数の対応メモリと、
前記複数の仮想ＰＬＣ部のそれぞれを監視するＰＬＣ部監視部と、
いずれかの前記仮想ＰＬＣ部が前記書込み要求を出力すると、前記書込み要求を出力した前記仮想ＰＬＣ部以外のそれぞれの前記仮想ＰＬＣ部に対応する前記対応メモリに前記所定の値を書込むべきタイミングを示す遅延時間を決定する遅延模擬部と
を備え、
前記複数の仮想ＰＬＣ部のそれぞれは、
自己の格納する前記プログラムの状態が複数回繰り返される場合に、その状態ごとに、1回ぶんのスキャンタイムを順次計測するとともに前回の計測値よりも今回の計測値のほうが大きい場合には、今回の計測値をその状態のスキャンタイムとして記憶し、
前記遅延模擬部は、
いずれかの前記仮想ＰＬＣ部により前記書込み要求が出力されると、前記ＰＬＣ監視部に対してすべての前記仮想ＰＬＣ部における前記プログラムの現在の状態のスキャンタイムの取得を依頼する取得要求を出力し、
前記ＰＬＣ監視部は、
前記遅延模擬部から前記取得要求を入力し、前記取得要求を入力するとすべての前記仮想ＰＬＣ部からそれぞれの前記仮想ＰＬＣ部の記憶している前記スキャンタイムを収集し、収集されたそれぞれの前記スキャンタイムを前記遅延模擬部に出力し、
前記遅延模擬部は、
前記ＰＬＣ監視部の出力したそれぞれの前記スキャンタイムを入力し、それぞれの前記スキャンタイムに基づき前記書込み要求を出力した前記仮想ＰＬＣ部以外のそれぞれの前記仮想ＰＬＣ部に対応する前記対応メモリに前記所定の値を書込むべき前記遅延時間を個別に決定し、個別に決定された前記遅延時間が経過したときに、経過した前記遅延時間に対応する前記対応メモリに前記所定の値を書込むことを特徴とするＰＬＣシステム模擬装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）を備えたＰＬＣシステムを模擬する装置に関する。
【背景技術】
【０００２】
従来のエミュレータ装置は、複数のＰＬＣを伝送路で接続したシステム（プログラム）についてＰＬＣ等の実機を必要とせずデバッグ・テストを可能することを目的として、実機に近い振る舞いを模擬するにあたり、エミュレータ装置上で動作する各仮想ＰＬＣ部に伝送路を用いてデータの送受信を行う仮想通信ユニット手段を設け、本仮想通信ユニット手段同士を伝送路エミュレーション手段で接続する。仮想通信ユニット手段は、伝送路等による遅延を模擬するために、遅延時間を設定する入力手段を持ち、本遅延時間を手動またはプログラムによって設定可能とする。また、仮想通信ユニットはタイムアウトによる定期的な遅延を行うことを可能としていた（例えば、特許文献１）。
【特許文献１】特開平１１−７３２１０号公報「エミュレーション方法およびエミュレータ装置」第１図
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来のエミュレーション方法およびエミュレータ装置では、ＰＬＣ間の伝送路等よる遅延を模擬する際に、手動またはプログラムによって固定的に設定された遅延時間を用いて模擬するか、あるいは、タイマー部を用いた固定的な遅延時間を模擬するか、のいずれかの方法をとっていた。どちらの方法も遅延時間については固定的であり、各ＰＬＣのプログラム実行状態とともに変化し得る遅延時間を正確に模擬できないという課題があった。
【０００４】
この発明は上記のような課題を解決するためになされたもので、各ＰＬＣのプログラム実行状態から遅延時間を計算し正確な遅延模擬方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
この発明のＰＬＣシステム模擬装置は、
それぞれが所定のプログラムを実行する複数のＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）をネットワークで接続したＰＬＣシステムであって、それぞれの前記ＰＬＣによって共有が可能なメモリ空間であるネットワーク共有メモリを備えたＰＬＣシステムを模擬するＰＬＣシステム模擬装置において、
前記複数のＰＬＣと一対一に対応する複数の仮想ＰＬＣ部であって、対応する前記ＰＬＣが実行する前記プログラムを格納して実行することにより前記ネットワーク共有メモリへの所定の値の書込みを要求する書込み要求と前記ネットワーク共有メモリの参照を要求する参照要求とを出力する複数の仮想ＰＬＣ部と、
前記ネットワーク共有メモリに相当するとともに前記複数の仮想ＰＬＣ部に一対一に対応する複数の対応メモリと、
前記複数の仮想ＰＬＣ部のそれぞれにより実行される前記プログラムの状態遷移を監視する状態遷移監視部と、
いずれかの前記仮想ＰＬＣ部が前記書込み要求を出力すると、前記状態遷移監視部からすべての前記仮想ＰＬＣ部における前記プログラムの現在の状態を取得し、取得された前記状態に基づくことにより前記書込み要求を出力した前記仮想ＰＬＣ部である出力仮想ＰＬＣ以外のすべての前記仮想ＰＬＣ部に対応する前記対応メモリに前記所定の値を書込むべきタイミングを示す遅延時間を個別に決定し、個別に決定された前記遅延時間が経過したときに、経過した前記遅延時間に対応する前記対応メモリに前記所定の値を書込む遅延模擬部と
を備えたことを特徴とする。
【発明の効果】
【０００６】
この発明により、ＰＬＣシステムにおける正確な遅延模擬を提供する模擬装置を提供することができる。
【発明を実施するための最良の形態】
【０００７】
実施の形態１．
図１は、コンピュータである遅延模擬装置１０００（ＰＬＣシステム模擬装置）の外観の一例を示す図である。図１において、遅延模擬装置１０００は、システムユニット８３０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置８１３、キーボード８１４（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス８１５、ＦＤＤ８１７（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・  Ｄｒｉｖｅ）、コンパクトディスク装置８１８（ＣＤＤ：Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｄｒｉｖｅ）、プリンタ装置８１９などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
【０００８】
システムユニット８３０は、コンピュータであり、また、ネットワークに接続されている。
【０００９】
図２は、実施の形態１における遅延模擬装置１０００のハードウェア資源の一例を示す図である。図２において、遅延模擬装置１０００は、プログラムを実行するＣＰＵ８１０（中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ８１０は、バス８２５を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）８１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）８１２、表示装置８１３、キーボード８１４、マウス８１５、通信ボード８１６、ＦＤＤ８１７、ＣＤＤ８１８、プリンタ装置８１９、磁気ディスク装置８２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置８２０の代わりに、光ディスク装置、フラッシュメモリなどの記憶装置でもよい。
【００１０】
ＲＡＭ８１２は、揮発性メモリの一例である。ＲＯＭ８１１、ＦＤＤ８１７、ＣＤＤ８１８、磁気ディスク装置８２０等の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部、格納部の一例である。通信ボード８１６、キーボード８１４、ＦＤＤ８１７などは、入力部、入力装置の一例である。また、通信ボード８１６、表示装置８１３、プリンタ装置８１９などは、出力部、出力装置の一例である。
【００１１】
通信ボード８１６は、ネットワーク（ＬＡＮ等）に接続されている。通信ボード８１６は、ＬＡＮに限らず、インターネット、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。
【００１２】
磁気ディスク装置８２０には、オペレーティングシステム８２１（ＯＳ）、ウィンドウシステム８２２、プログラム群８２３、ファイル群８２４が記憶されている。プログラム群８２３のプログラムは、ＣＰＵ８１０、オペレーティングシステム８２１、ウィンドウシステム８２２により実行される。
【００１３】
上記プログラム群８２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ８１０により読み出され実行される。
【００１４】
ファイル群８２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の算出結果」、「〜の抽出結果」、「〜の生成結果」、「〜の処理結果」として説明する情報や、データや信号値や変数値やパラメータなどが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ８１０によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００１５】
また、以下に述べる実施の形態の説明においては、データや信号値は、ＲＡＭ８１２のメモリ、ＦＤＤ８１７のフレキシブルディスク、ＣＤＤ８１８のコンパクトディスク、磁気ディスク装置８２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス８２５や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００１６】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「手段」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ８１１に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ８１０により読み出され、ＣＰＵ８１０により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００１７】
図３は、本実施の形態１における遅延模擬装置１０００（ＰＬＣシステム模擬装置）の構成を示す図である。遅延模擬装置１０００は、パーソナルコンピュータ等の汎用計算機上で動作する。本実施の形態１（実施の形態２〜４も同様）は、ＰＣＬネットワークにおける「ネットワーク共有メモリ」への値の書込みにおける遅延の模擬を目的とする。
【００１８】
遅延模擬装置１０００は、仮想ＰＬＣユニット１００ａ、１００ｂと、スキャンタイムテーブル格納部２００と、状態遷移監視部３００と、クロック部４００と、遅延模擬部５００と、共有メモリ部６００とを備える。一つの仮想ＰＬＣユニットは、実際の一台のＰＬＣ（以下、実ＰＬＣという場合がある。）に対応する。例えば、仮想ＰＬＣユニット１００ａは実際の一台のＰＬＣに対応し、仮想ＰＬＣユニット１００ｂは、別の実際の一台のＰＬＣに対応する。図３では仮想ＰＬＣユニット１００ａ、１００ｂの２つのユニットを示しているが、これは説明の便宜のためであり、仮想ＰＬＣユニットの数は限定されない。仮想ＰＬＣユニットの構成は同じであるので、仮想ＰＬＣユニット１００ａを例に説明する。仮想ＰＬＣユニット１００ａは、仮想ＰＬＣ部１１０ａと遅延模擬結果メモリ１２０ａ（対応メモリの一例）とを備える。また、仮想ＰＬＣ部１１０ａは、実際のＰＬＣに格納されるプログラムに対応するプログラム１１１ａ、内部メモリ１１３ａ、プログラム１１１ａを実行する実行部１１２ａ、状態変更検出部１１４ａ、コンフィグレーション部１１５ａを備える。なお、仮想ＰＬＣユニット１００ａ、仮想ＰＬＣユニット１００ｂ等あるいはその構成要素を区別する必要のない場合には、アルファベットを省略する場合がある。これらの構成要素の機能は、以下の動作説明等で述べる。また、スキャンタイムテーブル格納部２００は、スキャンタイムテーブル２１０とスキャンタイム入力部２２０とを備える。状態遷移監視部３００は、メモリ／状態対応テーブル３１０を備える。遅延模擬部５００は、遅延時間管理テーブル５１０を備える。なお、構成要素の具体的な機能は、動作の説明で述べる。
【００１９】
仮想ＰＬＣユニット１００ａを例に説明する。仮想ＰＬＣ部１１０は、パーソナルコンピュータ等の汎用計算機上で動作する実ＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）の模擬ソフトウェア（インタプリタ）である。プログラム１１１ａは実ＰＬＣで実行されるプログラムである。実ＰＬＣで実行されるプログラム１１１ａを仮想ＰＬＣ部１１０ａに与えることで、実ＰＬＣを必要とせずプログラム１１１ａの実行／デバッグが可能である。実行部１１２ａは、プログラム１１１ａを実行する。内部メモリ１１３ａは、プログラム１１１ａの実行状態を格納する。状態変更検出部１１４ａ、コンフィグレーション部１１５については、後述する。
【００２０】
（共有メモリ６００）
実ＰＬＣのＰＬＣシステムでは、複数の実ＰＬＣをネットワークで接続し、連携動作させることが可能である。このようなネットワーク（ＰＬＣシステム）の例としてＭＥＬＳＥＣＮＥＴ（登録商標）やＣＣ−Ｌｉｎｋ（登録商標）などがある。特に、ＭＥＬＳＥＣＮＥＴ（登録商標）では、「共有メモリ型のネットワークシステム」が提供されており、全ＰＬＣから共有可能なメモリ空間（以下ではこれをと呼ぶ）が提供される。前記のように、本実施の形態１（実施の形態２〜４も同様）は、「ネットワーク共有メモリ」への値の書込みにおける遅延の模擬を目的とする。本実施の形態１における共有メモリ部６００は、この「ネットワーク共有メモリ」を模擬する。実際のＰＬＣシステムでは、それぞれの実ＰＬＣは、「ネットワーク共有メモリ」への値の書込み、また、「ネットワーク共有メモリ」上の値の参照が可能である。通常、ある実ＰＬＣが「ネットワーク共有メモリ」上に書込んだ値が、ネットワークを介して別の実ＰＬＣに物理的に伝播するまで遅延が存在する。遅延模擬部５００と遅延模擬結果メモリ１２０とは、「ネットワーク共有メモリ」における更新値の伝播遅延を模擬するものである。なお、クロック部４００は、遅延模擬部５００に対して遅延時間を計測するためのクロックを供給する。
【００２１】
（状態遷移監視部３００）
状態遷移監視部３００は、それぞれの仮想ＰＬＣ部１１０で実行中のプログラム１１１の状態遷移を監視する。プログラム１１１の状態遷移条件と各状態とについては、ＳＦＣ（Ｓｅｑｕｅｎｔｉａｌ  Ｆｕｎｃｔｉｏｎ  Ｃｈａｒｔ）やＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）などによってユーザが設計（定義）するものとする。状態遷移を基本とする設計手法は本実施の形態１と密接な関連があるため、以下、図４を用いてＳＦＣと状態とについて簡単に説明する。
【００２２】
図４は、具体的な設例のＳＦＣを示す図である。この設例では、次の様な場合を想定する。
（１）台車２１は、最初Ａ地点に停止（状態Ｓ０）している。
（２）スタートボタンを押すことにより、台車２１はＢ地点へ向かって移動（状態Ｓ１）を開始する。
（３）台車２１はＢ地点に到着すると、１分間停止（状態Ｓ２）した後、Ａ地点へと移動（状態Ｓ３）を開始する。
（４）台車２１はＡ地点に到着すると、次にスタートボタンが押されるまで、Ａ地点で停止（状態Ｓ０へ戻る）する。
【００２３】
（ＳＦＣとラダープログラム）
このような制御を記述するＳＦＣは、図４の左に示すＳＦＣ２００２のようになる。本設例のＳＦＣの実行状態には状態Ｓ０〜状態Ｓ３がある。その各実行状態での処理を記述したラダープログラムでは、状態Ｓ０〜状態Ｓ３は、それぞれＭ００、Ｍ０１、Ｍ０２、Ｍ０３等の仮想ＰＬＣ部１１０の内部メモリ１１３の値として表現できる。
【００２４】
例えば、図５は、ラダープログラムにおいて状態Ｓ１をＭ０１に記憶する方法を示している。本プログラムにおいて、スタートボタンＸ０１が押されると、メモリＸ００１が１（ＯＮを意味する）になる。メモリＸ００１が１（ＯＮ）になると、メモリＭ０１が１（ＯＮ）になり、その後、台車２１がＢ地点に到着するまで、自己保持回路によりＭ０１は１（ＯＮ）を維持する。このように、ＳＦＣでは、１つまたは複数のメモリ値によってプログラム実行の状態を表すことが可能であり、状態遷移監視部３００は本メモリ値を参照することで、プログラム実行の状態を検出する。スキャンタイムテーブル格納部２００のスキャンタイムテーブル２１０には、各仮想ＰＬＣで実行中のプログラムの状態とそれに対応するスキャンタイム値を格納する。
【００２５】
次に、図４の台車２１の設例における動作について説明する。ここでは、図４に示した制御を仮想ＰＬＣ１（仮想ＰＬＣ部１１０ａに相当）と仮想ＰＬＣ２（仮想ＰＬＣ部１１０ｂに相当）とを用いて実施する場合について説明する。
【００２６】
図６は、仮想ＰＬＣ１と仮想ＰＬＣ２が制御するＩ／Ｏ（読み書きするメモリ）についてまとめた表である。図６に示すように、
Ｘ００はスタートボタン、
Ｙ０１は台車２１をＢ地点へ移動するためのモーター、
Ｘ０１は台車２１がＡ地点に到着したことを検知するためのセンサー、
Ｘ０２は台車２１がＢ地点に到着したことを検知するためのセンサー、
Ｔ０２は台車２１がＢ地点で１分間停止するためのタイマー、
Ｙ０２は台車２１がＡ地点へ移動するためのモーター
を表している。そして、図６の右欄には、各メモリ（Ｉ／Ｏ）に関して直接的に制御を実行する仮想ＰＬＣを明記した。例えば、スタートボタンＸ００の値（ＯＮ／ＯＦＦ）は、仮想ＰＬＣ１が入力として受け取る。Ｂ地点への台車２１の移動は、仮想ＰＬＣ１がモーターＹ０１をＯＮにすることで開始する。Ａ地点への台車２１の移動は仮想ＰＬＣ２がＹ０２をＯＮにすることで開始する。
【００２７】
図４のＬＢ０１およびＬＢ０２は、仮想ＰＬＣ１および仮想ＰＬＣ２によって共有されるメモリ（ネットワーク共有メモリ空間上のメモリ）を表している。ＬＢ０１についてはセンサーＸ０１がＯＮ（１）／ＯＦＦ（０）すると、その値を仮想ＰＬＣ１上のプログラム（プログラム１１１ａ）がＬＢ０１に書き込む。同様に、ＬＢ０２についてはセンサーＸ０２がＯＮ／ＯＦＦすると、その値を仮想ＰＬＣ２上のプログラム（プログラム１１１ｂ）がＬＢ０２に書き込む。ＬＢ０１の値は仮想ＰＬＣ２上のプログラムからも参照可能であり、ＬＢ０２の値は仮想ＰＬＣ１からも参照可能である。
【００２８】
図７は、それぞれの仮想ＰＬＣで動作するプログラムの状態遷移を表したものである。通常、このようなＰＬＣシステムでは、１つの状態遷移を２つの仮想ＰＬＣで共有することが考えられるが、ここではより一般的な状況として、仮想ＰＬＣ１と仮想ＰＬＣ２の状態遷移を別々に記述した。最初に仮想ＰＬＣ１の状態遷移５００１について説明する。
【００２９】
（仮想ＰＬＣ１の状態遷移５００１）
仮想ＰＬＣ１（のプログラム）の初期状態Ｓ１１は、台車２１がＡに停車している状態を表す。スタートボタンＸ００がＯＮになると、仮想ＰＬＣ１はモーターＹ０１をＯＮにし、Ｂへの移動状態Ｓ１２へと遷移する。一方、センサーＸ０２がＯＮになると仮想ＰＬＣ２によってＬＢ０２がＯＮに設定され、仮想ＰＬＣ１はモーターＹ０１をＯＦＦする。これにより、仮想ＰＬＣ１は、台車２１がＢへ到着した状態Ｓ１３へと遷移する。この後、仮想ＰＬＣ２によって台車２１がＡに戻されると、センサーＸ０１がＯＮになり、仮想ＰＬＣ１のプログラムは状態Ｓ１１へと戻る。
【００３０】
（仮想ＰＬＣ２の状態遷移５００２）
次に、仮想ＰＬＣ２の状態遷移５００２について説明する。仮想ＰＬＣ２の初期状態Ｓ２１は、台車２１がＡに到着している状態を表す（この状態はすでにＡを出発して移動している状態を含んでいる）。センサーＸ０２がＯＮになると、仮想ＰＬＣ２はＬＢ０２をＯＮにし、仮想ＰＬＣ１はモーターＹ０１をＯＦＦにする。これにより、仮想ＰＬＣ２は台車２１がＢに停止した状態Ｓ２２へと遷移する。Ｂに停止後、タイマーＴ０２は設定して１分後にＯＮになる。Ｔ０２がＯＮになると、仮想ＰＬＣ２はモーターＹ０２をＯＮにし、Ａへの移動状態Ｓ２３になる。台車２１がＡへ到着するとセンサーＸ０１がＯＮになる。仮想ＰＬＣ１がＬＢ０１をＯＮにすると、仮想ＰＬＣ２は状態Ｓ２１へと戻る。本実施の形態１では、単純化のため、図７に示すように上記の仮想ＰＬＣ（上のプログラム）の各状態Ｓ１１〜Ｓ２３をそれぞれ対応する単一のメモリＭ１１〜Ｍ２３で表す。具体的には、Ｍ１１がＯＮの場合、仮想ＰＬＣ１のプログラムは状態Ｓ１１にあり、Ｍ２３がＯＮの場合、仮想ＰＬＣ２のプログラムは状態Ｓ２３にある。
【００３１】
（スキャンタイムテーブル格納部２００）
図８は、スキャンタイムテーブル格納部２００が格納するスキャンタイムテーブル２１０を示す図である。図３のスキャンタイムテーブル格納部２００は、図８のようにそれぞれの仮想ＰＬＣ部におけるプログラムの状態と、プログラムの状態に対応するスキャンタイムとの組から構成されるスキャンタイムテーブル２１０を格納する。スキャンタイムテーブル格納部２００はスキャンタイム入力部２２０を備える。スキャンタイム入力部２２０により、プログラムの各状態と状態に対応するスキャンタイムを外部から設定可能である。図８に示したスキャンタイムの設定例では、仮想ＰＬＣ１については、状態Ｓ１１のスキャンタイムは１０ｍｓ、状態Ｓ１２のスキャンタイムは２０ｍｓ、状態Ｓ１３のスキャンタイムは１５ｍｓ、仮想ＰＬＣ２ついては、状態Ｓ２１のスキャンタイムは４０ｍｓ、状態Ｓ２２のスキャンタイムは１０ｍｓ、状態Ｓ２３のスキャンタイムは２５ｍｓと設定されている。
【００３２】
（状態遷移監視部３００）
状態遷移監視部３００は、各仮想ＰＬＣの状態遷移を監視する。監視の具体的な方法については、次の「（１）ポーリング」と「（２）仮想ＰＬＣ部からの通知」とがある。
（１）ポーリング：状態遷移監視部３００が各仮想ＰＬＣ部内にある状態を表すメモリ（Ｍ１１〜Ｍ２３）の値の変化を期的にポーリングすることによって監視する。
（２）仮想ＰＬＣ部からの通知：プログラムを実行中の仮想ＰＬＣ部から状態を示すメモリ値を書き換えたという通知を受けることによって監視する。
これら、いずれの方法も適用できる。
【００３３】
（「（１）ポーリング」による方法）
図９は、状態遷移監視部３００による「（１）ポーリング」の方法を示している。状態遷移監視部３００は、メモリ／状態対応テーブル３１０を持つ。メモリ／状態対応テーブル３１０は、各仮想ＰＬＣ部の状態（即ち各仮想ＰＬＣ部の格納するプログラムの状態）を表す内部メモリ識別子（Ｍ１１〜Ｍ２３）と、その内部メモリがＯＮになった場合の状態との対応を示すテーブルである。ここでは、仮想ＰＬＣ１の内部メモリＭ１１が状態Ｓ１１に対応し、内部メモリＭ１２が状態Ｓ１２に対応し、内部メモリＭ１３が状態Ｓ１３に対応する。また、仮想ＰＬＣ２の内部メモリＭ２１が状態Ｓ２１に対応し、内部メモリＭ２２が状態Ｓ２２に対応し、内部メモリＭ３３が状態Ｓ２３に対応する。
【００３４】
状態遷移監視部３００は、クロック部４００を用いて時間間隔を設定し、これに基づいて定期的に全仮想ＰＬＣ部の内部メモリ１１３の変化（ＯＦＦ→ＯＮ）を監視し、各仮想ＰＬＣ部の現在状態７００２を追跡する。それぞれの仮想ＰＬＣ部１１０上のプログラム１１１は、実行部１１２により実行され、それぞれの仮想ＰＬＣ部１１０上のプログラム１１１の状態は、実行部１１２により内部メモリ１１３に書き込まれる。図９では、ある周期のポーリングにて仮想ＰＬＣ１のＭ１１がＯＮであり、仮想ＰＬＣ１は状態Ｓ１１にある。また、仮想ＰＬＣ２のＭ２３がＯＮであり、仮想ＰＬＣ２は状態Ｓ２３にあることを表している。
【００３５】
図１０は、状態遷移監視部３００によるポーリング動作を示すフローチャートである。ステップ８００１において、状態遷移監視部３００は、クロック部４００を用いてタイムアウト待ちをする。ステップ８００２において、状態遷移監視部３００は、ポーリングしていない仮想ＰＬＣ部があるかどうかを判定する。ある場合はステップ８００３に進み、ない場合はステップ８００１にもどる。ステップ８００３において、状態遷移監視部３００は、ポーリングしていない仮想ＰＬＣ部の内部メモリ１１３の値を取得する。ステップ８００４において、状態遷移監視部３００は、内部メモリ１１３の値から現在の状態を識別して保存する。
【００３６】
（「（２）仮想ＰＬＣ部からの通知」による方法：状態変更検出部１１４）
図１１は、「（２）仮想ＰＬＣ部からの通知」による方法を示す図である。この方法は、仮想ＰＬＣ部が状態の変化を状態遷移監視部３００に通知する。この場合、仮想ＰＬＣ部１１０は、状態変更検出部１１４を持つ。実行部１１２は、プログラム１１１の実行の際、状態変更検出部１１４を介して内部メモリ１１３へ値を書込む。状態変更検出部１１４は、メモリ／状態対応テーブル１１４−１を持つ。メモリ／状態対応テーブル１１４−１は、「（１）ポーリング」の場合の状態遷移監視部３００が持つメモリ／状態対応テーブル３１０に対応するテーブルである。状態変更検出部１１４は、内部メモリ１１３への値の書込みが発生すると、メモリ／状態対応テーブル１１４−１を更新するとともに更新後のメモリ／状態対応テーブル１１４−１をもとに、新たな状態を状態遷移監視部３００へ通知する。状態遷移監視部３００は、この通知に基づいて各仮想ＰＬＣ部（即ち各プログラム）の現在状態７００２を更新する。このように上記の「（１）ポーリング方式」とは異なり「（２）仮想ＰＬＣからの通知方式」では、状態遷移監視部３００は、その監視にクロック部４００を利用しない。
【００３７】
（遅延模擬部５００）
次に、遅延模擬部５００の動作を説明する。遅延模擬部５００は、各仮想ＰＬＣ部１１０から「ネットワーク共有メモリ」（ＬＢ０１、ＬＢ０２）に対する書込み要求を受ける。各仮想ＰＬＣ部１１０は、「ネットワーク共有メモリ」上の値を参照する場合、遅延模擬結果メモリ１２０上の値を参照する。遅延模擬結果メモリ１２０は、図３に示したように仮想ＰＬＣ部１１０ごとに存在する。以下の例では、ＬＢ０１やＬＢ０２が「ネットワーク共有メモリ」であり、遅延模擬部５００は、仮想ＰＬＣ１（仮想ＰＬＣ部１１０ａに対応）上のプログラム（プログラム１１１に相当）のＬＢ０１への書込み要求、仮想ＰＬＣ２のＬＢ０２への書込み要求を受ける。
【００３８】
（１）遅延模擬部５００は、仮想ＰＬＣ部１１０から「ネットワーク共有メモリ」に対する書込み要求を受けると、要求を受けた仮想ＰＬＣ部１１０（出力ユニットの仮想ＰＬＣ部）の遅延模擬結果メモリ１２０と共有メモリ部６００とに対して、すぐにその値を書き込む。
（２）一方、遅延模擬部５００は、それ以外（出力ユニット以外）の仮想ＰＬＣ部１１０の遅延模擬結果メモリ１２０に対しては、以下で説明する遅延の後、共有メモリ部６００より値を取り出し遅延模擬結果メモリ１２０に対して値の書込みを行う。
【００３９】
例えば、図１２は、仮想ＰＬＣ１がＬＢ０１（ネットワーク共有メモリ）に対して書込みを行った様子を表している。遅延模擬部５００は、仮想ＰＬＣ１から「書込み要求」を受けると、仮想ＰＬＣ１用の遅延模擬結果メモリ１２０と共有メモリ部６００とにＬＢ０１の値を書き込む。一方、遅延模擬部５００は、仮想ＰＬＣ２の遅延模擬結果メモリ１２０に対しては、所定の時間が経過した後、ＬＢ０１の値を共有メモリ部６００から取り出して書込みを行う。例えば、遅延模擬部５００は、図１２の「式１０００１」で計算される遅延時間の後、ＬＢ０１の値を共有メモリ部６００から取り出して仮想ＰＬＣ２の遅延模擬結果メモリ１２０に書き込む。
【００４０】
「式１０００１」において、遅延模擬部５００は、仮想ＰＬＣ１および仮想ＰＬＣ２のスキャンタイム「Ｓ１、Ｓ２」及びその他の各種値「α１、α２、ＬＳ」から遅延時間を計算しているが、「α１、α２、ＬＳ」については、各仮想ＰＬＣ部１１０のコンフィグレーション部１１５を参照することで、遅延時間を計算することができる。コンフィグレーション部１１５は、実ＰＬＣで用いる設定情報などを保有しており、「α１、α２、ＬＳ」は、この設定情報から導かれる値であるが、ここでは簡単化のため固定値として扱う。遅延模擬部５００は、仮想ＰＬＣ１と仮想ＰＬＣ２とのスキャンタイム「Ｓ１，Ｓ２」は、それぞれで実行中のプログラムの状態に依存し、遅延模擬部５００が状態遷移監視部３００に問い合わせて取得する。遅延模擬部５００は、スキャンタイム「Ｓ１，Ｓ２」や「α１、α２、ＬＳ」に基づいて計算された遅延時間の経過後に、仮想ＰＬＣ２の遅延模擬結果メモリ１２０に対してＬＢ０１の値を書き込む必要があることを、遅延時間管理テーブル５１０に記録する。遅延模擬部５００は、クロック部４００を用いて、記録した遅延時間だけ経過した後、共有メモリ部６００からＬＢ０１の値を取り出し、仮想ＰＬＣ２の遅延模擬結果メモリ１２０に対してＬＢ０１の値を書き込む。
【００４１】
図１３は、仮想ＰＬＣ３部を加えた３台がネットワーク共有メモリを共有している場合を示す図である。以上の説明では、仮想ＰＬＣ１と仮想ＰＬＣ２との２台が「ネットワーク共有メモリ」を共有し、「ネットワーク共有メモリ」（ＬＢ０１）の値が仮想ＰＬＣ１から仮想ＰＬＣ２へ伝播する遅延の模擬方法を示したが、図１３に示すように、仮想ＰＬＣ３を加えた３台がネットワーク共有メモリを共有しても良いのはもちろんである。３台の場合は、２台の場合と同様に、仮想ＰＬＣ１がＬＢ０１に対して値を書き込むとする。ここでの注意点は、ＬＢ０１を参照する仮想ＰＬＣが複数台いる場合、図１３の「式１１００１」、「式１１００２」に示すように、遅延時間をそれぞれの仮想ＰＬＣ部（即ちプログラム）の「状態」とスキャンタイムとに応じて求める必要がある。即ち遅延模擬部５００は、遅延時間を決定する場合に、書込み要求を出力した仮想ＰＬＣ部１１０のプログラム１１１の現在の遷移状態に対応するスキャンタイムと、遅延時間を決定するべき遅延模擬結果メモリ１２０を有するその仮想ＰＬＣ部のプログラムの現在の遷移状態に対応するスキャンタイムとに基づいて、遅延時間を決定するべき遅延模擬結果メモリ１２０を有するその仮想ＰＬＣユニットについての遅延時間を決定する。この設例で具体的に説明すれば、遅延模擬部５００は、仮想ＰＬＣ１から仮想ＰＬＣ２へ伝播する遅延時間については図１３の「式１１００１」を用いて計算し、仮想ＰＬＣ１から仮想ＰＬＣ３へ伝播する遅延時間については「式１１００２」を用いて計算する。
【００４２】
以上のように、複数台のＰＬＣをＭＥＬＳＥＣＮＥＴ（登録商標）のような共有メモリ型のネットワークシステムによって接続したＰＬＣシステムにおいて、このようなＰＬＣシステムを汎用計算機上でエミュレーションするに際し、各仮想ＰＬＣ部のプログラムの状態遷移を把握する手段（監視部３００）を提供し、かつ、それぞれの状態におけるスキャンタイムを設定／取得する手段を提供することで、ネットワーク共有メモリに書込んだ値のＰＬＣ間での伝播遅延の計算を容易化し、各仮想ＰＬＣのＩ／Ｏ（メモリの値の変化）のタイミングを正確に模擬することで、プログラムのデバッグを仮想ＰＬＣにおいても正確に行える効果がある。
【００４３】
実施の形態２．
実施の形態１では、各仮想ＰＬＣ部の状態が確定的な場合において、それぞれの遷移状態に対応したスキャンタイムを取得し、このスキャンタイムを遅延時間の計算に用いて遅延を模擬した。本実施の形態２では、仮想ＰＬＣ部の遷移状態がネストしており、ネストした状態のいずれの状態にあるかが確定的でない場合の遅延時間の計算方法について示す。但し、ネストした状態を含む上位レベルの状態では、どの状態にあるのかが確定できるものとする。
【００４４】
遅延模擬装置１０００の構成は、実施の形態１の図３と同じである。
【００４５】
図１４は、仮想ＰＬＣ１が、状態Ｓ１１においてネストした状態Ｓ１１１，状態Ｓ１１２、状態Ｓ１１３を持つ状態遷移図１２００１を示す。例えば、台車２１には荷物を入れる開口部があり、状態Ｓ１１１は開口部の扉のロックが解かれた状態を表し、状態Ｓ１１２は開口部の扉が開いた状態を表し、状態Ｓ１１３は開口部の扉が閉まりロックがかけられた状態を表している。状態Ｓ１１３になってからも、更に、荷物を入れるためにロックが再び解かれ状態Ｓ１１１に遷移することもある。また、本実施の形態２においては、台車２１がＡ地点に停車してセンサーＸ０１がＯＮした際、状態Ｓ１１１、状態Ｓ１１２、状態Ｓ１１３のいずれかを初期状態として取るかは条件によって変わるものとする（図１４ではハレルの表記に従いこれをＣｏｎｄｉｔｉｏｎのＣで表している）。すなわち、本実施野形態２においては、遅延模擬部５００は、仮想ＰＬＣ１が状態Ｓ１１にあることは識別できても、ネストした状態状態Ｓ１１１、状態Ｓ１１２、状態Ｓ１１３のいずれの状態にあるかは識別できないとする。このようなケースは、プログラム設計において、状態Ｓ１１１、状態Ｓ１１２、状態Ｓ１１３を区別するメモリを用意しない等の理由により発生することがある。仮想ＰＬＣ２の状態遷移図１２００３については実施の形態１と同様であり、説明は省略する。
【００４６】
（遅延模擬部５００の動作）
実際の遅延模擬部５００の動作について説明する。実施の形態１と同様に、センサーＸ０１がＯＮすることで、仮想ＰＬＣ１上のプログラム１１１は、ＬＢ０１に対してＯＮを書き込む。このとき遅延模擬部５００は、仮想ＰＬＣ１用の遅延模擬結果メモリ１２０と共有メモリ部６００にＬＢ０１の値を書込む。一方、遅延模擬部５００は、仮想ＰＬＣ２の遅延模擬結果メモリ１２０対しては、図１４に示す「式１２００２」を用いて遅延時間の計算を行い、計算された遅延時間の後、仮想ＰＬＣ２の遅延模擬結果メモリ１２０に対してＬＢ０１の値を書き込む。
【００４７】
図１４に示すように、スキャンタイムテーブル２１０には、ネストした状態Ｓ１１１、状態Ｓ１１２、状態Ｓ１１３におけるスキャンタイムがそれぞれ１５ｍｓ、２０ｍｓ、１０ｍｓと与えられている。遅延模擬部５００は、仮想ＰＬＣ１の現在の状態が状態Ｓ１１にある場合、これらのうち最大のスキャンタイム２０ｍｓを用いて遅延時間の計算を行う。仮想ＰＬＣ２についてはネストした状態がないので、実施の形態１と同様に状態に対応するスキャンタイムを用いる。「式１２００２」では、仮想ＰＬＣ１のスキャンタイムをＳ１（Ｍａｘ）、仮想ＰＬＣのスキャンタイムをＳ２（Ｍａｘ）で表している。
【００４８】
以上のように、遅延模擬部５００が、遅延時間の計算を行う際、仮想ＰＬＣの上位レベルの状態は識別できてもネストした状態が識別できない場合、取り得るネスト状態のそれぞれのスキャンタイムから最大のスキャンタイムを取得し、これを用いて遅延時間を計算することで、遅延時間の最悪値を容易に求めることが可能となり、タイミングを考慮したプログラムのデバッグを仮想ＰＬＣにおいても正確に行えるという効果がある。
【００４９】
実施の形態３．
実施の形態２では、仮想ＰＬＣの状態がネストしており、ネストした状態のいずれの状態にあるかが確定的でない場合の遅延時間の計算方法について示した。本実施の形態３では、実施の形態１で示したスキャンタイムテーブル２１０に記載されるスキャンタイムを自動的に計算する方法を示す。
【００５０】
図１５は、実施の形態３における遅延模擬装置１０００の構成を示す図である。実施の形態３の遅延模擬装置１０００は、実施の形態１に対して、さらに、スキャンタイムを自動的に計算するスキャンタイム計算部７００を備える。
【００５１】
図１６は、図１５からスキャンタイム計算部７００を抜きだした図である。スキャンタイム計算部７００は、入力としてプログラム１１１の状態とその状態で実行されるプログラム（プログラム１１１の一部分である部分プログラム）を受け取り、その状態に対応するプログラムのスキャンタイムを出力する。出力結果はスキャンタイム入力部２２０へと渡され、スキャンタイム入力部２２０がスキャンタイムテーブル２１０に、その状態とその状態におけるスキャンタイムとを登録する。
【００５２】
図１５、図１６に示すように、スキャンタイム計算部７００は、スキャンタイム積算算出部７１０と命令実行時間データベース部７２０とを備える。命令実行時間データベース部７２０には、仮想ＰＬＣ部１１０が実行する全命令と、それぞれの命令の実行時間が記録されている。例えば、スキャンタイム計算部７００は、状態Ｓ１１で実行されるプログラムが入力されると、スキャンタイム積算算出部７１０が、そのプログラムの命令列を解析する。図１６では、スキャンタイム積算算出部７１０により、状態Ｓ１１で実行されるプログラムは命令１１〜命令１９で構成されていることが解析される。スキャンタイム積算算出部７１０は、命令１１〜命令１９について、それぞれの命令の実行時間を命令実行時間データベース部７２０から取得し、全実行時間の和を求める。そして、状態Ｓ１１と算出された実行時間（全実行時間）をスキャンタイム入力部２２０へ渡す。スキャンタイム入力部２２０は、状態Ｓ１１と算出された実行時間を入力すると、その組をスキャンタイムテーブル２１０に登録する。
【００５３】
以上のように、スキャンタイムテーブル格納部２００のスキャンタイムテーブル２１０に状態とスキャンタイムとを登録する際、各状態で実行されるプログラムの命令列をオフラインで解析し、命令実行時間データベース部７２０を用いて、命令列全体の実行時間を算出し、状態と算出結果とをスキャンタイムテーブル２１０に登録する。これにより、正確なスキャンタイムを取得することが可能となる。正確なスキャンタイムにより、遅延模擬部５００が算出する遅延時間も正確な値を計算することが可能となる。
【００５４】
実施の形態４．
実施の形態３では、スキャンタイムテーブル２１０に登録するスキャンタイムをオフライン時にプログラム解析を行い自動的に計算する方法を示した。実施の形態１〜実施の形態３ではスキャンタイムテーブル２１０から取得していたスキャンタイムを、本実施の形態４では、仮想ＰＬＣの実行時（ランタイム時）に取得する方法を説明する。
【００５５】
図１７は、実施の形態４における遅延模擬装置１０００の構成を示すブロック図である。実施の形態４の遅延模擬装置１０００は、実施の形態１の場合と比較して、スキャンタイムテーブル格納部２００を持たないこと、一方、最大スキャンタイム記録部１１６、最大値記憶部１１７を備える点が異なる。図１８は、プログラム実行時におけるスキャンタイム算出を説明する図である。
【００５６】
最大スキャンタイム記録部１１６は、プログラムを実行する際、クロック部４００を用いてスキャンタイムを計測する。最大スキャンタイム記録部１１６は、プログラムの実行部１１２からプログラム（プログラム１１１が状態遷移する場合における一つの状態に対応するプログラム）の開始イベント１４００３とＥＮＤイベント１４００４を受ける。開始イベント１４００３は、その状態（例えば図８における状態Ｓ１１）のプログラム実行がプログラムの先頭に移った際に発生する。ＥＮＤイベント１４００４は、その状態（例えば図８における状態Ｓ１１）のプログラム実行がプログラム（ここでは状態Ｓ１１に対応するプログラムを意味する）の終わりに達した際に発生する。通常、ラダープログラムでは、プログラム実行がプログラムの終わりに達すると、その他の処理を行った後、プログラム実行は先頭に戻る。例えば、状態Ｓ１１に対応するプログラムが繰り返し実行される。
（１）最大スキャンタイム記録部１１６は、イベントを受けた際、時刻をクロック部４００から取得し、開始イベントを受け取った時刻とＥＮＤイベントを受け取った時刻の差分からスキャンタイムを計測する。
（２）そして、最大スキャンタイム記録部１１６は、計測されたスキャンタイムが最大値記憶部１１７に記録されたスキャンタイムよりも大きい場合、新たな最大スキャンタイムとして最大値記憶部１１７に記録する。すなわち、前記のように、例えば、状態Ｓ１１に対応するプログラムは繰り返し実行されるので、最大スキャンタイム記録部１１６は、その状態Ｓ１１における最大のスキャンタイムを最大値記憶部１１７に記録する（繰り返し実行されるプログラムのスキャンタイムは通常、異なる）。
（３）また、本実施の形態４では、状態変更検出部１１４は、新たな状態にプログラムが遷移した場合に、すなわち、状態Ｓ１１に対応するプログラムが状態Ｓ１２に対応するプログラムに遷移した場合、最大値記憶部１１７に記憶されているスキャンタイムをゼロにリセットする。また、状態変更検出部１１４は、実施の形態１とは異なり、状態遷移監視部３００に新たな状態に関する通知は行わない。
【００５７】
（遅延模擬部５００）
遅延模擬部５００は、遅延時間を計算する際、実施の形態１と同様に状態遷移監視部３００（ＰＬＣ監視部の一例）に各仮想ＰＬＣ部のスキャンタイムを問い合わせる。この際、状態遷移監視部３００は、スキャンタイムテーブル２１０を参照するのではなく（実施の形態３の遅延模擬装置１０００はスキャンタイムテーブル２１０を持たない）、各仮想ＰＬＣ部１１０の最大値記憶部１１７に記憶されているスキャンタイムの値を参照し、この値を遅延模擬部５００に返す。遅延模擬部５００はこの値を用いて、実施の形態１と同様に図１２の「式１０００１」を用いて、遅延時間を計算する。この実施の形態４では、各仮想ＰＬＣ部のプログラムの状態を取得する必要がない。状態遷移監視部３００は、取得したスキャンタイムの最大値がどの仮想ＰＬＣ部のものかを知っている。このため、この情報を状態遷移監視部３００から取得することで、遅延模擬部５００は、「式１０００１」のＳ１、Ｓ２にどの仮想ＰＬＣ部から取得した値を代入すればよいかがわかるからである。よって、各仮想ＰＬＣ部におけるプログラムの状態を取得するには及ばない。
【００５８】
実施の形態１に示した設計者によるスキャンタイムの入力が不可能な場合、また、実施の形態３に示したオフラインでのスキャンタイムの計算が困難な場合、本実施の形態３の方式を用いることで、最大スキャンタイムを実行時に取得することを可能とし、遅延の模擬を正確に行うことができる。
【００５９】
以上の実施の形態１〜４では装置としての遅延模擬装置１０００を説明したが、遅延模擬装置１０００の各構成要素の動作を処理ととらえることにより、遅延模擬装置１０００の動作をコンピュータに実行させるプログラムとして把握することも可能である。また、このプログラムを記憶した記憶媒体として把握することも可能である。
【００６０】
以上の実施の形態では、複数の実ＰＬＣをＰＬＣネットワークで接続したシステムを汎用計算機上で模擬するにあたり、各実ＰＬＣについてそこでのプログラム実行を模擬する仮想ＰＬＣを提供し、各仮想ＰＬＣの状態とそれぞれの状態に対応するスキャンタイム（プログラム実行時間）を定義しそれをスキャンタイムテーブルに格納し参照可能とする手段を提供し、各仮想ＰＬＣで実行中のプログラムの現在状態について状態を示す一連のメモリをポーリングまたはイベントによって監視する手段を提供するとともに、ある仮想ＰＬＣがＰＬＣネットワークに対してデータを書込んだ際、本ＰＬＣネットワークに接続するすべての仮想ＰＬＣの現在状態から上記スキャンタイムテーブルを用いて各仮想ＰＬＣのスキャンタイムを取得し、取得したスキャンタイムから導かれる遅延時間を計算し、本遅延時間に基づいて遅延の後、各仮想ＰＬＣが個別に参照するメモリに対して書き込まれたデータを書き込む、上記のような特徴を持つ遅延模擬装置を説明した。
【００６１】
以上の実施の形態では、複数の実ＰＬＣをＰＬＣネットワークで接続したシステムを汎用計算機上で模擬するにあたり、各実ＰＬＣについてそこでのプログラム実行を模擬する仮想ＰＬＣを提供し、各仮想ＰＬＣの状態またはネストした状態とそれぞれの状態に対応するスキャンタイム（プログラム実行時間）を定義しそれをスキャンタイムテーブルに格納し参照可能とする手段を提供し、各仮想ＰＬＣで実行中のプログラムの現在状態を示す一連のメモリをポーリングまたはイベントによって監視する手段を提供するとともに、ある仮想ＰＬＣがＰＬＣネットワークに対してデータを書込んだ際、本ＰＬＣネットワークに接続するすべての仮想ＰＬＣの現在状態を取得するが、上位レベルの現在状態は判定できるが同状態におけるネストしたどの状態にあるのか不明の場合、上記スキャンタイムテーブルを用いて、ネストした状態のうち最大のスキャンタイムを取得し、取得したスキャンタイムから導かれる遅延時間を計算し、本遅延時間に基づいて遅延の後、各仮想ＰＬＣが個別に参照するメモリに対して書き込まれたデータを書き込む、上記のような特徴を持つ遅延模擬装置を説明した。
【００６２】
以上の実施の形態では、遅延模擬装置において、スキャンタイムテーブルの値を定義するにあたり、各状態において実行されるプログラムについてどのような命令列から構成されるかを解析する手段を提供し、命令と各命令実行にかかる時間を記録した命令実行時間データベースを提供しこれを参照することで、前記プログラムの実行にかかる時間を算出する手段を提供し、更に、本手段によって積算された値と状態とを前記スキャンタイムテーブルの入力部を通じて入力する、上記のような特徴を持つ遅延模擬装置を説明した。
【００６３】
以上の実施の形態では、遅延模擬装置において、各仮想ＰＬＣの現在状態におけるスキャンタイムを取得するにあたり、各仮想ＰＬＣに内に、プログラムの開始イベントとＥＮＤイベントからスキャンタイムを計測する手段を提供し、計測された値と過去のスキャンで計測した値とを比べ、もし今回の値が大きければ、本値を記憶部に記録し最大値を更新する手段を提供し、ある仮想ＰＬＣがＰＬＣネットワークに対してデータを書込んだ際、本ＰＬＣネットワークに接続するすべての仮想ＰＬＣの現在状態を取得するが、この際、上記記憶部を参照しスキャンタイムを取得し、取得したスキャンタイムから導かれる遅延時間を計算し、本遅延時間に基づいて遅延の後、各仮想ＰＬＣが個別に参照するメモリに対して書き込まれたデータを書き込む、上記のような特徴を持つ遅延模擬装置を説明した。
【図面の簡単な説明】
【００６４】
【図１】実施の形態１の、遅延模擬装置１０００の外観を示す図。
【図２】実施の形態１の、遅延模擬装置１０００のハードウェア構成を示す図。
【図３】実施の形態１の、遅延模擬装置１０００の構成を示すブロック図。
【図４】実施の形態１の、具体例のＳＦＣ。
【図５】図４の具体例に対応するラダープログラムを示す図。
【図６】実施の形態１の、仮想ＰＬＣ１、仮想ＰＬＣ２が制御するＩ／Ｏを示す図。
【図７】実施の形態１の、仮想ＰＬＣ１、仮想ＰＬＣ２の状態遷移を示す図。
【図８】実施の形態１の、スキャンタイムテーブル２１０を示す図。
【図９】実施の形態１の、状態遷移監視部３００によるポーリングを示す図。
【図１０】実施の形態１の、状態遷移監視部３００によるポーリングの動作フロー。
【図１１】実施の形態１の、仮想ＰＬＣから状態遷移監視部３００への通知を示す図。
【図１２】実施の形態１の、遅延模擬部５００の動作を示す図。
【図１３】実施の形態１の、仮想ＰＬＣ部が３台接続された場合を示す図。
【図１４】実施の形態２の、ネスト状態を説明する図。
【図１５】実施の形態３の、遅延模擬装置１０００の構成を示すブロック図。
【図１６】実施の形態３の、スキャンタイム計算部７００の動作を説明する図。
【図１７】実施の形態４の、遅延模擬装置１０００の構成を示すブロック図。
【図１８】実施の形態４の、プログラム実行時におけるスキャンタイム算出を説明する図。
【符号の説明】
【００６５】
２１  台車、１００，１００ａ，１００ｂ  仮想ＰＬＣユニット、１１０，１１０ａ，１１０ｂ  仮想ＰＬＣ部、１１１，１１１ａ，１１１ｂ  プログラム、１１２，１１２ａ，１１２ｂ  実行部、１１３，１１３ａ，１１３ｂ  内部メモリ、１１４，１１４ａ，１１４ｂ  状態変更検出部、１１４−１，１１４−ａ，１１４−ｂ  メモリ／状態対応テーブル、１１５，１１５ａ，１１５ｂ  コンフィグレーション部、１１６，１１６ａ，１１６ｂ  最大スキャンタイム記録部、１１７，１１７ａ，１１７ｂ  最大値記憶部、１２０，１２０ａ，１２０ｂ  遅延模擬結果メモリ、２００  スキャンタイムテーブル格納部、２１０  スキャンタイムテーブル、２２０  スキャンタイム入力部、３００  状態遷移監視部、３１０  メモリ／状態対応テーブル、４００  クロック部、５００  遅延模擬部、５１０  遅延時間管理テーブル、６００  共有メモリ部、７００  スキャンタイム計算部、７１０  スキャンタイム積算算出部、７２０  命令実行時間データベース部、１０００  遅延模擬装置。
【図１】
2009037329.tif 000003
【図２】
2009037329.tif 000004
【図３】
2009037329.tif 000005
【図４】
2009037329.tif 000006
【図５】
2009037329.tif 000007
【図６】
2009037329.tif 000008
【図７】
2009037329.tif 000009
【図８】
2009037329.tif 000010
【図９】
2009037329.tif 000011
【図１０】
2009037329.tif 000012
【図１１】
2009037329.tif 000013
【図１２】
2009037329.tif 000014
【図１３】
2009037329.tif 000015
【図１４】
2009037329.tif 000016
【図１５】
2009037329.tif 000017
【図１６】
2009037329.tif 000018
【図１７】
2009037329.tif 000019
【図１８】
2009037329.tif 000020