(57)【特許請求の範囲】
【請求項１】
テスト対象のラダープログラムを解析し、そのラダープログラムで使用される変数を抽出する変数抽出手段と、
その変数抽出手段で抽出された変数のうちの入力変数を取得し、その取得した入力変数についてテスト対象のラダープログラムにおける実行順を検索し、その実行順をテスト入力順とし、そのテスト入力順に、各入力変数に対し入力変数のコマンド，変数名，正常な入力値を関連付けたテーブルを記述したテスト入力シーケンスを管理するテスト入力シーケンス管理手段と、
前記テスト入力シーケンス管理手段で作成したテスト入力シーケンスに基づき、そのテスト入力シーケンスで規定される前記テスト入力順に従って、各入力変数のコマンドに対応するテスト入力ラダープログラムを生成するテスト入力ラダー生成手段を備えたことを特徴とするシミュレーション支援ツール。
【請求項２】
前記変数抽出手段で抽出した変数を、入力変数と出力変数で分類して記憶するとともに、前記入力変数については、テスト入力値として取りうる値を関連づけて記憶する変数管理手段と、
前記変数管理手段に格納されたテスト入力値を参照し、前記テスト入力シーケンスにおける所定の入力変数のテスト入力値として正常な入力値でない値に設定した異常パターンからなるテスト入力データパターンを生成し管理するテスト入力パターン管理手段を備え、
前記テスト入力ラダー生成手段は、前記異常パターンに基づいて前記テスト入力ラダープログラムを生成するようにした
ことを特徴とする請求項１に記載のシミュレーション支援ツール。
【請求項３】
前記ラダープログラムがモジュール単位で構成されたプログラムを含んで構成され、
前記テスト入力シーケンス管理手段は、モジュール単位で構成された各プログラムごとに、モジュール単位でテスト入力シーケンスを作成するものであって、
前記テスト入力シーケンス管理手段で作成されたモジュール単位のテスト入力シーケンスを、ラダープログラム全体のテスト入力シーケンスへインポートするモジュールテストシーケンスインポート手段を備えた
ことを特徴とする請求項１又は２に記載のシミュレーション支援ツール。
【請求項４】
請求項１から３のいずれか１項に記載のシミュレーション支援ツールと、このシミュレーション支援ツールが生成した前記テスト入力ラダープログラムが実装された仮想Ｉ／Ｏ用プログラマブルコントローラと、テスト対象のラダープログラムを実行するプログラマブルコントローラと、がネットワークを介して接続され、
前記仮想Ｉ／Ｏ用プログラマブルコントローラが、前記テスト入力ラダープログラムを実行し、得られたテスト入力信号を前記ネットラークを介して前記プログラマブルコントローラに対して順次与え、
前記プログラマブルコントローラは、前記テスト入力信号を取得し、その取得した前記テスト入力信号に基づき前記テスト対象のラダープログラムを実行するようにした
ことを特徴とするラダープログラムの検証システム。
【請求項５】
請求項１から３のいずれか１項に記載のシミュレーション支援ツールと前記仮想Ｉ／Ｏ用プログラマブルコントローラをネットワーク接続し、
前記シミュレーション支援ツールは、生成した前記テスト入力ラダープログラムを前記ネットワーク接続された前記仮想Ｉ／Ｏ用プログラマブルコントローラにダウンロードし、
前記仮想Ｉ／Ｏ用プログラマブルコントローラは、ダウンロードされた前記テスト入力ラダープログラムを実行し、前記テスト入力信号を出力するように構成した
ことを特徴とする請求項４に記載のラダープログラムの検証システム。
【請求項６】
テスト対象のラダープログラムを解析し、そのラダープログラムに使用される変数を抽出して解析し、入力変数を得る工程、
前記得た入力変数についてテスト対象のラダープログラムにおける実行順を検索し、その実行順をテスト入力順とし、そのテスト入力順に、各入力変数に対し入力変数のコマンド，変数名，正常な入力値を関連付けたテーブルを記述したテスト入力シーケンスを記憶する工程、
前記記憶したテスト入力シーケンスに基づき、そのテスト入力シーケンスで規定される前記テスト入力順に従って、各入力変数のコマンドに対応するテスト入力ラダープログラムを生成する工程、
からなることを特徴とするテスト入力ラダープログラム生成方法。
【請求項７】
前記入力変数を得る工程では、抽出した変数を入力変数と出力変数で分類して記憶するとともに、前記入力変数については、テスト入力値として取りうる値を関連づけて記憶し、
前記テスト入力シーケンス記憶工程では、さらに、前記記憶したテスト入力値を参照し、前記テスト入力シーケンスにおける所定の入力変数のテスト入力値として正常な入力値でない値に設定した異常パターンからなるテスト入力データパターンを生成し、
前記テスト入力ラダープログラム生成工程では、異常パターンに基づいて前記テスト入力ラダープログラムを生成するようにした
ことを特徴とする請求項６に記載のテスト入力ラダープログラム生成方法。
【請求項８】
請求項１から３のいずれか１項に記載のシミュレーション支援ツールが生成した前記テスト入力ラダープログラムが実装された仮想Ｉ／Ｏ用プログラマブルコントローラと、テスト対象のラダープログラムを実行するプログラマブルコントローラとをネットワークを介して接続し、
前記仮想Ｉ／Ｏ用プログラマブルコントローラにて前記テスト入力ラダープログラムを実行させることにより得られたテスト入力信号を、前記ネットラークを介して前記テスト対象プログラマブルコントローラに対して順次与え、
前記テスト対象プログラマブルコントローラにて前記テスト入力信号を取得し、その取得した前記テスト入力信号に基づき前記テスト対象のラダープログラムを実行するようにした
ことを特徴とするラダープログラムの検証方法。
【請求項９】
請求項８において、ネットワークに、さらにテスト対象プログラマブルコントローラの動作テスト中の状態やテスト結果をモニタするための作動モニタを接続し、
前記作動モニタにおいて、テスト対象プログラマブルコントローラが取得した前記テスト入力信号に基づいてテスト対象のラダープログラムを実行した結果を、モニタするようにした
ことを特徴とするラダープログラムの検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、シミュレーション支援ツールおよびラダープログラムの検証システムならびにテスト入力ラダープログラム生成方法ならびにラダープログラムの検証方法に関するものである。
【背景技術】
【０００２】
生産工場（製造現場）に設置されるＦＡ（ファクトリーオートメーション）システムの制御をつかさどるＰＬＣ（プログラマブルロジックコントローラ）は、制御プログラムに基づいて演算実行するＣＰＵユニット、センサやスイッチなどの入力機器を接続してそれらのオンオフ信号を入力信号として取り込む入力ユニット、アクチュエータやリレーなどの出力機器を接続してそれらに対して出力信号を送り出す出力ユニット、上位端末装置などと接続してそれと情報をやりとりする通信ユニット、各ユニットに電源を供給する電源ユニット、など複数のユニットを組み合わせて成っている。そしてＰＬＣは、入力ユニットで入力した信号をＣＰＵユニットのＩ／Ｏメモリに取り込み（ＩＮリフレッシュ処理）、予め登録されたラダー言語で組まれた制御プログラムに基づき論理演算をし（プログラム演算実行処理）、その演算実行結果をＩ／Ｏメモリに書き込んで出力ユニットに送り出し（ＯＵＴリフレッシュ処理）、その後、ネットワーク接続された上位端末装置や表示器等と通信する（周辺サービス処理）、といった各処理をサイクリックに繰り返す。
【０００３】
ところで、実際の運用を開始するに先立ち、制御プログラムが正常に動作するか否かの事前検証を行なう必要がある。そして、係る事前検証は、従来、実際の設備を用いずに、机上で制御プログラムをテストして、実際の設備設置現場で行う調整工数（例えばプログラムの修正や編集など）を削減することが図られている。現在行われている机上テスト方法に、検証対象の制御プログラムが実装されたＰＬＣに対して、ＰＬＣ用シミュレータ装置から入力信号を与えて行うものがある。このＰＬＣ用シミュレータ装置において、仮想的にＰＬＣに対するテスト用入力信号を生成させて、その生成した信号をＰＬＣへ与えるわけである。このＰＬＣ用シミュレータ装置がＰＬＣへのテスト入力信号を生成するためには、別途にテスト入力信号生成用のプログラム（例えばラダー言語で書いたプログラム）が必要である。従来は、このテスト入力信号生成用プログラムは人手によって作成されていた。しかし最近では、プログラム作成の労力軽減をするために次のような改良もされている。これも従来例であるが、例えば、検査テストの代表パターンに合わせて予め複数個のラダー基本回路を作成しておき、それらを記憶手段に記憶しておく。そしてシナリオ手段を設けて、複数のラダー基本回路のうち任意のものを選び、その実行順序および入出力データの内容などを人手により設定する。このようなシナリオ手段の設定に基づいて、記憶手段から必要なラダー基本回路を読み出してシミュレーション用のラダープログラム（テスト入力信号生成用のプログラム）を自動的に作成するような改良がなされていた。この方法では、シミュレーション用ラダープログラムを作成する労力を少し軽減できる。このことは、例えば特許文献１などに開示されている。
【０００４】
【特許文献１】特開平１０−１３３７１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の事前検証では、テスト入力用のラダープログラムを通常の制御プログラムと同様に、人手により作成していたため、作成者はラダープログラミングのスキルが必要となる。特に複雑なテストを行う場合は、高度なスキルが必要となる場合が多い。さらに、テスト対象のラダープログラムの入力Ｉ／Ｆが多い場合、テスト入力用のラダープログラムが膨大となり、係るテスト入力用のラダープログラムを作成するのが煩雑となり、テスト準備工数が多く必要となる。また、予め記憶したラダー基本回路を用いてシミュレーション用のラダープログラムを作成する構成では、基本回路で対応できる範囲のテストは限られ、基本回路で想定していないテストを行うことはできない。もし想定外のテストを行おうとすると、新しく人手によってプログラムを作成する必要が出てくる。
【０００６】
さらに、従来の事前検査は、入力信号が正規の順番で正しく入力された場合に、制御プログラムが正しく動作するかどうかの確認にとどまり、異常事態等が発生し、正規と異なる入力信号が入力された場合の動作確認をすることができなかった。さらにまた、ＰＬＣ上で行なっているプログラム演算実行処理を一時停止することができないため、テスト実行を途中で中断することが不可能であり、一瞬の結果変化を確認することができないという問題もあった。
【０００７】
この発明は、テスト対象となる制御プログラムから、テスト入力するための変数を自動抽出し、テスト入力用のラダープログラムを自動的に生成することができるシミュレーション支援ツールおよびラダープログラムの検証システムならびにテスト入力ラダープログラム生成方法ならびにラダープログラムの検証方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係るシミュレーション支援ツールは、テスト対象のラダープログラムを解析し、そのラダープログラムで使用される変数を抽出する変数抽出手段と、その変数抽出手段で抽出された変数のうちの入力変数を取得し、その取得した入力変数についてテスト対象のラダープログラムにおける実行順を検索し、その実行順をテスト入力順とし、そのテスト入力順に、各入力変数に対し入力変数のコマンド，変数名，正常な入力値を関連付けたテーブルを記述したテスト入力シーケンスを管理するテスト入力シーケンス管理手段と、前記テスト入力シーケンス管理手段で作成したテスト入力シーケンスに基づき、そのテスト入力シーケンスで規定される前記テスト入力順に従って、各入力変数のコマンドに対応するテスト入力ラダープログラムを生成するテスト入力ラダー生成手段を備えるように構成するようにした。
【０００９】
入力変数を実行順に並べたテスト入力シーケンスを作成し、そのテスト入力シーケンスに従ってテスト入力ラダープログラムを自動的に生成する。つまり、テスト入力シーケンスは、テスト入力順に配置され、しかも、各入力変数の正常な入力値などが関連づけられたテーブル構造となっているので、各入力変数の正常値を入力条件とする接点を配置することによりその入力変数についてのラダー回路を作成することができる。そして、入力順にリストアップされているので、その入力順に従って、各ラダー回路を配置することにより、簡単に入力信号を出力するテスト入力ラダープログラムを生成することができる。
【００１０】
従って、ラダーを意識しないで自動的にテスト入力用ラダーが生成されるため、メカ設計者などラダー知識の無い人でも精度の高いテストを行なうことができる。そして、長く複雑なラダーからも簡単に入力すべき変数をピックアップすることができるためテスト設計工数が短縮できる。さらに、テスト入力ラダー上に結果チェックを行うロジックを埋め込むようにすると、一瞬の結果変化も検知することができる。
【００１１】
また、前記変数抽出手段で抽出した変数を、入力変数と出力変数で分類して記憶するとともに、前記入力変数については、テスト入力値として取りうる値を関連づけて記憶する変数管理手段と、前記変数管理手段に格納されたテスト入力値を参照し、前記テスト入力シーケンスにおける所定の入力変数のテスト入力値として正常な入力値でない値に設定した異常パターンからなるテスト入力データパターンを生成し管理するテスト入力パターン管理手段を備え、前記テスト入力ラダー生成手段は、前記異常パターンに基づいて前記テスト入力ラダープログラムを生成するように構成することもできる。
【００１２】
このように、異常パターンに基づいてテスト入力ラダープログラムが生成されるので、正常動作のみ成らず、異常発生時の動作確認をすることができる。また、異常ケースなど複数のテストケースを連続実行するラダープログラムを自動生成することができ、無人テストを行うことができる。
【００１３】
さらに、前記ラダープログラムは、モジュール単位で構成されたプログラム、つまり部品化されたプログラムを複数含んで構成されていて、前記テスト入力シーケンス管理手段においては、このモジュール単位で構成された各プログラムごとに、モジュール単位でテスト入力シーケンスを作成する。そして、テスト入力シーケンス管理手段で作成されたモジュール単位のテスト入力シーケンスを、ラダープログラム全体のテスト入力シーケンスへインポートして合成するモジュールテストシーケンスインポート手段を備えるようにしてもよい。このようにすると、制御プログラム全体のテスト入力シーケンスを作成するに際し、モジュール単位で作成したテスト入力シーケンスを利用することができるので好ましい。
【００１４】
また、本発明に係るラダープログラムの検証システムでは、上記したシミュレーション支援ツールと、このシミュレーション支援ツールが生成した前記テスト入力ラダープログラムが実装された仮想Ｉ／Ｏ用プログラマブルコントローラと、テスト対象のラダープログラムを実行するプログラマブルコントローラがネットワークを介して接続され、前記仮想Ｉ／Ｏ用プログラマブルコントローラが、前記テスト入力ラダープログラムを実行し、得られたテスト入力信号を前記ネットラークを介して前記プログラマブルコントローラに対して順次与え、前記プログラマブルコントローラは、前記テスト入力信号を取得し、その取得した前記テスト入力信号に基づき前記テスト対象のラダープログラムを実行するようにすることができる。
【００１５】
このようにすると、自動作成されたテスト入力用のラダープログラムに基づいて事前検証をすることができ、時間制御が高く、繰り返し同じテストを実行することも容易に行える。
【００１６】
さらに、シミュレーション支援ツールと前記仮想Ｉ／Ｏ用プログラマブルコントローラをネットワーク接続し、前記シミュレーション支援ツールは、生成した前記テスト入力ラダープログラムを前記ネットワーク接続された前記仮想Ｉ／Ｏ用プログラマブルコントローラにダウンロードし、前記仮想Ｉ／Ｏ用プログラマブルコントローラは、ダウンロードされた前記テスト入力ラダープログラムを実行し、前記テスト入力信号を出力するように構成してもよい。なお、シミュレーション支援ツールと仮想Ｉ／Ｏ用プログラマブルコントローラが接続されたネットワークと、その仮想Ｉ／Ｏ用プログラマブルコントローラとテスト対象の制御プログラムを実行するプログラマブルコントローラを接続するネットワークは、同じでも良いし異なっていても良い。そして、同じ場合には、シミュレーション支援ツールは、プログラマブルコントローラからテスト対象の制御プログラムをアップロードすることができる。
【００１８】
また、本発明に係るテスト入力ラダープログラム生成方法は、テスト対象のラダープログラムを解析し、そのラダープログラムに使用される変数を抽出して解析し、入力変数を得る工程、前記得た入力変数についてテスト対象のラダープログラムにおける実行順を検索し、その実行順をテスト入力順とし、そのテスト入力順に、各入力変数に対し入力変数のコマンド，変数名，正常な入力値を関連付けたテーブルを記述したテスト入力シーケンスを記憶する工程と、前記記憶したテスト入力シーケンスに基づき、そのテスト入力シーケンスで規定される前記テスト入力順に従って、各入力変数のコマンドに対応するテスト入力ラダープログラムを生成する工程と、からなる方法である。
【００１９】
さらに、前記入力変数を得る工程では、抽出した変数を入力変数と出力変数で分類して記憶するとともに、前記入力変数については、テスト入力値として取りうる値を関連づけて記憶し、前記テスト入力シーケンス記憶工程では、さらに、前記記憶したテスト入力値を参照し、前記テスト入力シーケンスにおける所定の入力変数のテスト入力値として正常な入力値でない値に設定した異常パターンからなるテスト入力データパターンを生成し、前記テスト入力ラダープログラム生成工程では、異常パターンに基づいて前記テスト入力ラダープログラムを生成するようにすることができる。
【００２０】
また本発明に係るラダープログラムの検証方法は、前記のシミュレーション支援ツールが生成した前記テスト入力ラダープログラムが実装された仮想Ｉ／Ｏ用プログラマブルコントローラと、テスト対象のラダープログラムを実行するプログラマブルコントローラとをネットワークを介して接続し、前記仮想Ｉ／Ｏ用プログラマブルコントローラにて前記テスト入力ラダープログラムを実行させることにより得られたテスト入力信号を、前記ネットラークを介して前記テスト対象プログラマブルコントローラに対して順次与え、前記テスト対象プログラマブルコントローラにて前記テスト入力信号を取得し、その取得した前記テスト入力信号に基づき前記テスト対象のラダープログラムを実行する方法である。
【００２１】
さらに、前記ラダープログラムの検証方法において、ネットワークに、さらにテスト対象プログラマブルコントローラの動作テスト中の状態やテスト結果をモニタするための作動モニタを接続し、前記作動モニタにおいて、テスト対象プログラマブルコントローラが取得した前記テスト入力信号に基づいてテスト対象のラダープログラムを実行した結果をモニタするようにしてもよい。
【発明の効果】
【００２２】
本発明では、制御プログラム（ラダープログラム）からテスト入力するための変数を自動抽出し、テスト入力用のラダープログラムを自動的に生成することができる。よって、ラダーを意識しないテスト入力用ラダーが生成されるため、メカ設計者などラダー知識の無い人でも精度の高いテストを行なうことができる。
【発明を実施するための最良の形態】
【００２３】
本実施の形態は、センサその他の入力機器が存在していない状態か、または、仮に存在していたとしても、ＦＡシステム全体が動作しておらず、実機の入力機器から入力信号が与えられないような状態で、テスト対象のＰＬＣに実装された制御プログラムの事前検証を行うためのものである。この検証を行うため、テスト対象のＰＬＣに対して所定のタイミングで入力信号を与える必要があるが、本実施の形態では、係る検証のための入力信号を別のＰＬＣにて生成させる。この別のＰＬＣは、後述の「仮想Ｉ／Ｏ生成用ＰＬＣ」または「仮想Ｉ／Ｏ」に該当する。このＰＬＣとテスト対象のＰＬＣとを通信可能にネットワークで接続し、仮想Ｉ／Ｏ生成用ＰＬＣにて検証用のプログラム（仮想入力ラダープログラム）を実行させることにより、入力信号を生成し、その入力信号をテスト対象のＰＬＣへ通信して与える。なお、検証用プログラムは予め作成しておき、それを仮想Ｉ／Ｏ生成用ＰＬＣにダウンロードしておく。テストについては、この仮想Ｉ／Ｏ生成用ＰＬＣがネットワーク接続されたテスト対象のＰＬＣに対して所定のタイミングで生成した入力信号を与え、テスト対象のＰＬＣがその入力信号に基づいてテスト対象の制御プログラムを実行して、その結果から正常に動作するか否かの検証をしたり、デバッグを行う。
【００２４】
図１は、本発明が適用されるシステムの一例を示している。図１に示すように、生産工場（製造現場）に設置されるＦＡ（ファクトリーオートメーション）システムでは、所定数のＰＬＣ５が当該生産工場に設置される。そして、ＰＬＣ５が複数存在する場合、制御系ネットワーク６で接続され、複数のＰＬＣ５間で同期したり、協働したりしながら動作する。また、実際のシステムでは、この各ＰＬＣ５に、制御対象の各種の出力機器やロボットや等が接続されたり、センサ，スイッチ等の入力機器が直接或いは間接的に接続されたりするが、本発明が対象とするＰＬＣ５にダウンロードした制御プログラムの動作確認（事前検証）を行う際には、係る入出力機器は必ずしも接続されているとは限らず、少なくとも入力機器からの信号は与えられない。なお、ＰＬＣ５に実装された制御プログラムの代表例に、ファンクションブロックで構成されたものがある。ファンクションブロックは、入力パラメータと出力パラメータと内部データとプログラムコードとを併せ持っている。ファンクションブロックの表記は、中央に四角の形で表わしたボディ部と、ボディ部の左側に表わした入力部と、ボディ部の右側に表した出力部とからなる。ボディ部は、ひとかたまりの動作をするためのプログラムであり、別途にラダー言語などで作成される。
【００２５】
ここで本発明では、テスト対象のＰＬＣ５に対して検証用の入力信号を与えるための仮想入力ラダープログラムを作成するシミュレーション支援ツール１と、そのシミュレーション支援ツール１にて作成した仮想入力ラダープログラムを演算実行することにより所定のタイミングでテスト用の入力信号を出力する仮想Ｉ／Ｏ生成用ＰＬＣ２と、テスト対象のＰＬＣ５の動作テスト中の状態やテスト結果をモニタするための作動モニタ３と、テスト対象のＰＬＣ５とが同じネットワークに接続されている。これにより、シミュレーション支援ツール１は、テスト対象のＰＬＣ５に実装された検証対象となる制御プログラム等に基づき仮想入力ラダープログラムを作成し、その作成したプログラムを、ネットワーク６を介して仮想Ｉ／Ｏ生成シミュレータ（仮想I／O）となるＰＬＣ２にダウンロードする。そして、仮想Ｉ／ＯＰＬＣ２は、ダウンロードされた仮想入力ラダープログラムを実行することにより、所定のタイミングで入力信号をネットワーク６を介してテスト対象のＰＬＣ５へ出力する。
【００２６】
これにより、テスト対象のＰＬＣ５は、仮想Ｉ／ＯＰＬＣ２から所定のタイミングで与えられる検証用の入力信号を受けとり、制御用プログラムを順次実行する。そして、その実行中の状態や実行結果は、作動モニタ３により監視することができる。つまり、この動作モニタがテスト対象のＰＬＣ５のＩＯメモリに格納されたデータを収集して表示することでその動きをチェックすることができる。また、その動作モニタ３内で別途に３Ｄシミュレータを動作させておき、ＰＬＣ５により制御される想定のロボット等の動作を、その収集データに基づいて当該作動モニタ３のモニタ画面上に仮想空間的に表示させ、その動きをチェックすることができる。
【００２７】
仮想入力ラダープログラムを作成するシミュレーション支援ツール１は、所定の機能を持つアプリケーションプログラムをパソコン等にインストールすることにより実現される。従って、そのパソコンには他の機能のツールも実装されていることがある。そして、具体的な構成は図２に示すようになっている。
【００２８】
すなわち、テスト対象ラダー管理部１１は、テスト対象の制御プログラム（例えばラダー言語で作成されたプログラム）を管理するものである。管理するとは、例えば、テスト対象のＰＬＣ５に実装されているラダープログラムをアップロードして取得するとともに、所定の記憶部に格納し記憶保持する。また、その記憶保持しているテスト対象のラダープログラムを読み出す。そして読み出したプログラムを、他の処理部に渡したりする。また、シミュレーション支援ツール１を構成するパソコンに、制御プログラム（ラダープログラム）を作成・編集する機能を有するプログラミングツールが実装され、テスト対象のラダープログラムも同一のパソコンに実装されたプログラミングツールによって作成された場合、テスト対象ラダー管理部１１は、パソコン内で作成され、格納された当該テスト対象のラダープログラムを管理するようにしても良い。
【００２９】
また、制御プログラムが複数の部品モジュールプログラムから構成されている場合には、部品モジュールのプログラム毎にそのモジュールデータをモジュールデータ管理部１２が管理するようにしている。ここでモジュールデータとしては、モジュールにおける入出力変数のリスト（変数データ）と、モジュールラダープログラム（ラダー）と、モジュールのテスト時に設定したテストシーケンスやテストパターンデータ（テスト設定データ）から構成される。このモジュールデータ管理部１２で管理されるモジュールデータも、上記したテスト対象ラダー管理部１１と同様に、ＰＬＣ５からアップロード等することにより取得する。そして、このモジュールデータ管理部１２で管理されるモジュールデータは、テスト対処ラダー管理部１１にて呼び出され、他の処理部に渡される。
【００３０】
また、テスト対象プログラムで定義された変数は、変数管理部１３にて管理されている。つまり、テスト対象範囲における入力変数，出力変数，内部変数ごとに管理するもので、具体的に以下の通りである。
【００３１】
まず、説明の便宜上、モジュールデータ管理部１２に、図３に示すような設備制御全体プログラムが管理されているとする。この設備制御全体プログラムは、クランプ１モジュールと装置制御インターロックを組合わせて作成されている。この設備制御全体プログラムがテスト対象プログラムとなるものとする。各モジュールはファンクションブロックで記述される。そして、クランプ１モジュールの入力Ｉ／Ｆである「クランプ１作動指令」，「クランプ１作動条件」，「クランプ１作動速度」は、装置制御インターロックモジュールからの内部変数として扱うので、設備制御全体プログラムにおける入力変数とはならない。
【００３２】
さらに、この設備制御全体プログラム概要としては、クランプ１は、作動指令と作動条件がともにＯＮした場合クランプ作動（出／戻）の信号を出力し、作動後、完了ＬＳ（リミットスイッチ）がＯＮしたタイミングで完了とする。そして、設備制御全体としては、装置作動指令と装置作動条件がともにＯＮした場合に、クランプ１の作動を開始する。そして、作動後、クランプ１が完了したタイミングで完了とする。
【００３３】
変数管理部１３は、テスト対象プログラムで定義された全変数を、テスト対象範囲における入力変数と出力変数とで分類し、図３に示した制御プログラムの場合、図４に示したようなテーブル構造のリストが作成され、このテーブル構造のリストが変数管理部１３で管理される。ここで、入力Ｉ／Ｆ変数については、変数名とデータ型の他に後述するテストパターン自動生成を行なうための目的で、テスト入力値として取りうる値をユーザが設定する。図４の場合、「装置作動速度」の入力値として「２０」と「３０」が設定される。なお、ＢＯＯＬ型変数は「ＴＲＵＥ」または「ＦＡＬＳＥ」のどちらかのため設定は不要である。
【００３４】
そして、この変数管理部１３で管理する変数データのうち、変数名及びデータ型は、入出力変数抽出部１４で抽出される。すなわち、入出力変数抽出部１４が、テスト対象ラダー管理部１１を介してテスト対象ラダープログラムを取得し、その内容を解析して入力変数を抽出する。つまり、テスト対象のラダーで定義された全変数について、ラダープログラムを走査し、出力変数で使用されている場合は出力変数とし、使われていない場合は入力変数とすることによって、入出力分類を行う。すなわち、図５に示すように、図５（ａ）に示す装置制御全体ラダーの実際のラダープログラムは、図５（ｂ）のようになっているので、そこから装置作動速度，装置作動指令等の変数名を抽出することができる。そして、「クランプ１出」はＯＵＴ命令に使われているので、出力変数として分類し、「装置作動指令」は出力系命令で使われていないので入力変数として分類する。
【００３５】
そして、具体的には、図６に示すフローチャートを実行することにより行なう。すなわち、テスト対象のラダープログラムをサーチし、そこに使用されている全ての変数のリスト（ラダー全変数リスト）を作成する（ＳＴ１）。次いで、作成したリストの先頭から順に変数名を１つずつ選択し、その選択した変数名の変数が使用されているラダー命令を検索する（ＳＴ２）。すなわち、テスト対象ラダー管理部１１からテスト対象のラダープログラム（モジュールデータ）を取得し、選択した変数名の変数がそのラダープログラム中に使用されている箇所を全て抽出する。
【００３６】
そして、抽出した箇所に基づき、出力命令で使われているか否かを判断し（ＳＴ３）、出力命令で使用されている場合には、出力変数として分類する（ＳＴ４）。また、出力命令に使用されていない場合には、入力命令で使われているか否かを判断し（ＳＴ５）、入力命令で使用されている場合には、入力命令のみで使用されることになるので入力変数として分類する（ＳＴ６）。なお、出力命令並びに入力命令のいずれにも使用されていない場合には、ステップ５の分岐判断でＮＯとなるので、変数リストから削除する（ＳＴ７）。
【００３７】
上記の処理を行なうことにより、選択された変数名についての処理（分類分け）が完了するので、次の変数名について上記した処理を実行する。このようにして全ての変数についてのチェックが完了したならばステップ８の分岐判断がＹｅｓとなり、処理を終了する。
【００３８】
また、変数管理部１３で管理するデータのうち、ＢＯＯＬ以外の入力変数がとりうる入力値（テスト入力値）は、テスト設定入力部１５が行なう。つまり、このテスト設定入力部１５は、テスト設定データのユーザ入力受け付けを行うもので、シミュレーション支援ツール１の入力装置であるキーボード，マウスなどをユーザが操作して与えられたならば、そのデータをテスト入力値として変数管理部１３に渡し、そこにおいて対応する変数名と関連づけてテスト入力値を記憶保持する。
【００３９】
テスト入力シーケンス管理部１６は、ユーザ定義された入力変数に対するテスト入力順序を示すテスト入力シーケンスを管理する。すなわち、入出力変数抽出部１４にて抽出された入力変数を取得し、テスト対象のラダープログラムにおける実行順を検索し、その実行順にしたがって図７に示すようなテスト入力シーケンスを作成する。なお図７は、モジュールの一つであるクランプ１モジュールについてのテスト入力シーケンスの設定例である。
【００４０】
また、テスト入力順序とテスト入力に対するテスト結果チェックタイミングをスクリプト言語を用いて記述する。つまり、テスト入力順に、ＩＮ，ＣＨＥＣＫ，ＣＡＬＬのシーケンスコマンド及びオペランドを記述する。ここで、ＩＮコマンドのオペランドは入力変数であり、このコマンドは、入力変数に対してデータを入力するものである。変数選択は入力変数リストから行えるため、容易でミスの少ない選択が行える。また、ＣＨＥＣＫコマンドのオペランドは出力変数であり、このコマンドは、入力データに対する出力変数の変化をチェックするものである。変数選択は出力変数リストから行えるため、容易でミスの少ない選択が行える。更にＣＡＬＬコマンドのオペランドはシーケンス名であり、このコマンドは別途定義されたテストシーケンスを呼び出すものである。このコマンドにより、テストシーケンスの構造化が可能となる。さらに、図７に示すテストシーケンスでは、各入力変数に対するテスト入力値の正常な値を関連づけて管理しているが、この正常なテスト入力値からなる正常パターンは、ユーザが手動で入力する。つまり、テスト設定入力部１５は、係るユーザからの入力をテスト入力シーケンス管理部１６に渡し、そこにおいて取得した正常パターンを関連づけたテストシーケンスを作成するとともに記憶して管理する。
【００４１】
一方、この入力データパターン管理部１８は、図７に示す正常パターンが付記されたテストシーケンスに基づき、テスト入力値が正常動作でない値を含む異常パターンのテスト入力値も作成し、テストパターンに追加する機能を備えている。これにより、例えば図８に示すようなテストパターンが生成され、正常動作している場合のテスト対象のラダープログラムの動作のチェックに加え、正規の入力信号が与えられない異常事態が発生した場合の動作チェックも行うことができる仮想入力ラダープログラムを作成することが可能となる。なお、図８中、テストパターンでの空白は、左端（正常）パターンのデータと同じ値を採ることを意味する。また、図示省略するが、テストパターンの右側にも更に別の異常パターンが追加されている。
【００４２】
係る機能は、例えば、シーケンスで記述された変数を出力表示し、ユーザにその表示したリストの中から組合せパターンを生成したい変数のリストを選択させる（図８では、クランプ１作動指令、クランプ１作動条件、クランプ１作動速度を指定）。そして、係る選択された変数のデータ値の組合せを自動生成し、パターンデータとして新規列を追加する。つまり、選択された変数のテスト入力情報を変数管理部１３から取得し、ＢＯＯＬ型以外の変数については取り得る入力値を取得し、各変数についての正常の値と異常の値を認識し、複数個の変数が指定された場合には、少なくとも１つの変数が異常になるような入力値の組み合わせからなるパターンを生成する。
【００４３】
そして、具体的には、図９に示すフローチャートを実行するようになっている。すなわち、まず、ユーザがテスト設定入力部１５を介してテストシーケンスからパターン生成する変数を指定するので、係る指定を取得するのを待ち、指定を取得したならばパターン生成指示を行う（ＳＴ１０）。すなわち、例えば図７に示すようなテストシーケンスを、テスト設定内容表示部１９を介してモニタ画面に表示させ、その表示画面においてマウスその他のポインティングデバイスを操作して、パターン組み合わせを生成する変数を指定させる。そこで、係る指定された変数名を取得し、上記処理を行なう。
【００４４】
次に、指定された変数のテスト入力値情報を変数管理部１３から取得する（ＳＴ１１）。つまり、変数のデータ方がＢＯＯＬ以外の場合には、とりうる入力値の全ての情報（図４の場合には、装置作動速度が２０と３０）を取得する。また、データ型がＢＯＯＬの場合には、ＴＲＵＥ  ｏｒ  ＦＡＬＳＥの二値であるので、その旨取得してもよいし、具体的なテスト入力値が無い場合には、ＢＯＯＬ型と判断するようにし、特にテスト入力値を取得しないようにしても良い。
【００４５】
次いで、Ｎ（デフォルト値から値を変更する変数の数）を１にセットする（ＳＴ１３）。指定された変数群のうちＮ個の変数について入力値をデフォルト値（正常パターンで設定された値）から変更し、パターンを生成する（ＳＴ１４）。そして、このようにして生成したパターンと同一パターンが、テスト入力シーケンスで記述された変数に対するテスト入力パターンを管理する入力データパターン管理部１８に登録されていない場合には、当該入力データパターン管理部１８へ登録する（ＳＴ１５，ＳＴ１６）。なお、登録されていた場合何もしない。これにより、少なくとも１つの変数の入力値が正常でない異常パターンが生成される。
【００４６】
そして、デフォルト値と異ならせるＮ個の変数の組み合わせの全てのパターンを生成したか否かを判断し（ＳＴ１７）、生成していない場合には新たなパターン、つまりステップ１４で変更した変数以外のＮ個の変数の入力値をデフォルト値と異なる値に設定したパターンを生成し（ＳＴ１９）、ステップ１５に戻りそのパターンが未登録の場合には入力データパターン管理部１８に登録する。
【００４７】
また、Ｎ個の変数を変更する全てのパターンについて生成できたならば、ステップ１７の分岐判断がＹｅｓとなるので、ステップ１８に飛び、現在のＮがパターン生成を指定した変数の数に一致したか否かを判断する（ＳＴ１８）。そして、一致していれば、全ての異常パターンが生成されたことになるので処理を終了する。また、このステップ１８の分岐判断がＮｏの場合には、ステップ２０に進み、Ｎを１インクリメントし、新たなＮに基づいて、ステップ１４以降の処理を行なう。これにより、指定された変数のうち、いずれか１つのみの変数をデフォルト値と異なる値にした全ての異常パターンを生成し、次いで、指定された変数のうち任意の２つの変数をデフォルト値と異ならせる値にした全ての異常パターンを生成し、……というように異ならせる数を１つずつ増やし、最終的に指定された全ての変数がデフォルト値と異なる値を取る異常パターンを生成することにより、取りうる全ての異常パターンを生成することができる。
【００４８】
従って、例えば図８に示すシーケンスのうち、「クランプ１作動指令」，「クランプ１作動条件」，「クランプ１作動速度」の３つの変数についてパターン生成指示を受けたとすると、指定変数数は３となる。そして、ステップ１３よりＮ＝１に設定されるので、図１０に示すように、まず、ステップ１４或いはステップ１９を実行することにより、指定された３つのいずれか１つがデフォルト値と異なる値に設定された異常パターン（計３つ）が生成され、ステップ１６にて登録される。
【００４９】
次いで、ステップ１８，ステップ２０を経由してＮ＝２に設定されるため、新たに設定されたＮ（２）に基づきステップ１４或いはステップ１９を実行することにより、指定された３つのうちの任意の２つがデフォルト値と異なる値に設定された異常パターン（計３つ）が生成され、ステップ１６にて登録される。
【００５０】
その後、ステップ１８，ステップ２０を経由してＮ＝３に設定されるため、新たに設定されたＮ（３）に基づきステップ１４を実行し、指定された３つの変数をデフォルト値と異なる値に設定した異常パターンを生成し、ステップ１６にて登録される登録する。なお、Ｎ＝３の場合には、ステップ１４で生成された３つの全ての変数をデフォルト値と異なる値に設定するパターン以外には存在しないため、ステップ１７でＹｅｓとなるとともに、ステップ１８の分岐判断もＹｅｓとなるので、異常パターンの生成処理は終了する。これにより、入力データパターン管理部１８にて計７つの異常パターンが生成されるとともに登録されて管理される。
【００５１】
更に本実施の形態では、モジュールテストデータインポート部１７を設け、構成モジュールのテストデータを現在設定中のテストシーケンスにインポートできるようにしている。すなわち、上記したテスト入力シーケンス管理部１６では、各モジュール単位でテストシーケンスを作成し、テストパターンを作成することについて説明した。ところで、プログラムの検証は、モジュール単位でも行なうが、最終的には当該モジュールを含む制御プログラム全体での動作が正しく行なわれるかの検証を行なう必要がある。そこで、このモジュールテストデータインポート部１７にて、モジュールテスト時に設定したシーケンスを設備全体テスト時に再利用できるようにした。
【００５２】
つまり、ユーザがモジュールテストシーケンスからインポートする範囲を指定し、現在設定中の設備全体シーケンスのインポート位置を指定しインポート要求を出す。すると、変数管理部１３でモジュールテストシーケンスのＩＮコマンドのオペランドで記述された変数が、設備全体ラダーでも入力変数となっているか、或いは内部変数となっているかをチェックする。そして、係るチェックをした結果、内部変数となった変数が記述されたＩＮコマンドをＣＨＥＣＫコマンドに置き換えるようにする。
【００５３】
すなわち、図１１に示す設備装置全体ラダーテストシーケンスを作成するに際し、クランプ１モジュール用のテストシーケンスを再利用する場合、まず、「クランプ１作動指令」は、設備全体ラダーでは内部変数のためＩＮコマンドをＣＨＥＣＫコマンドに置き換える。一方、「クランプ１出端Ｓ１」は設備全体ラダーでも入力変数のためＩＮコマンドのままとする。
【００５４】
そして、上記処理を実行するための具体的な処理機能は、図１２に示すフローチャートのようになっている。すなわち、まず、ユーザが、モジュールテストシーケンスから指定したインポートする範囲をテスト設定入力部１５を介して取得する（ＳＴ２１）。図１１の例では、クランプ１テストシーケンスを表示装置に表示し、ポインティングデバイスにて画面上でインポートする範囲（ステップ番号３から１２）を指定したり、インポートする範囲を特定するための開始ステップ番号（図示の場合３）と終了ステップ番号（図示の場合１２）をテキスト入力して指定したりする。
【００５５】
そして、ユーザが指定したインポート先の設備全体テストシーケンス位置を取得する（ＳＴ２２）。図１１の場合では、設備制御全体ラダー中のステップ番号５以降をインポート先に指定することになる。この指定も、テストシーケンスを表示させておき、ポインティングデバイスにより直接インポート先を指定したり、ステップ番号を入力させたりすることにより行える。
【００５６】
次に、モジュールデータ管理部１２から指定されたモジュールに対応するテスト設定データの指定された範囲のテストシーケンスデータを読み出す（ＳＴ２３）。そして、読み出したモジュールテストシーケンスデータの各行のシーケンスコマンドを取得する（ＳＴ２４）。
【００５７】
取得した行で定義されたシーケンスコマンドがＩＮコマンドで、さらにオペランドで記述された変数が設備全体ラダーで内部変数となっているか否かを判断し（ＳＴ２５）、条件に合致する場合には、ＩＮコマンドをＣＨＥＣＫコマンドに変更し（ＳＴ２６）、設備全体シーケンスに挿入する（ＳＴ２７）。もちろん、内部変数になっていない場合には、ステップ２５の分岐判断でＮｏとなるので、その読み出した行を設備全体シーケンスへ挿入することになる。
【００５８】
そして、指定範囲の全行の挿入を完了したか否かを判断し（ＳＴ２８）、未挿入の行が存在する場合にはステップ２４に戻り次の行について上記した処理を実行する。このようにして、ステップ２４から２８を処理を繰り返し実行することにより、指定されたインポート範囲の全シーケンス行を設備制御全体シーケンスの所望の位置へ挿入することができる。
【００５９】
このようにモジュールテストシーケンスがインポートされた制御プログラム全体に対するテストシーケンス（設備制御全体ラダーテストシーケンス）に対しても、テスト入力シーケンス管理部１６，入力データパターン管理部１８により、正常パターン，異常パターンを含むテストパターンを生成することにより、図１３，図１４に示すような最終テストデータが生成される。すなわち、図１３は設備制御全体ラダーテストシーケンスであり、図１４は図１３に示す設備制御全体ラダーテストシーケンス中のＣＡＬＬコマンドにより呼び出される別のプログラムのシーケンスである。そして、図１４（ａ）は、設備制御全体ラダーテストシーケンスにおけるステップ１番のＣＡＬＬコマンドにより呼び出される初期化シーケンスであり、図１４（ｂ）は、設備制御全体ラダーテストシーケンスにおけるステップ２番のＣＡＬＬコマンドにより呼び出される異常発生シーケンスである。また、この最終テストデータは、各コマンドの処理の実行順を規定するテスト入力シーケンスと、シーケンス実行時に与える入力値を規定する入力データパターン（正常パターン＆異常パターン）を含み、テスト入力シーケンス（正常パターンを含む）は、テスト入力シーケンス管理部１６にて管理され、入力データパターンのうちの異常パターンは入力データパターン管理部１８で管理される。もちろん、正常パターンも入力データパターン管理部１８側で管理するようにしても良いし、各データを合体し、図示する最終テストデータの状態で管理（記憶保持）するようにしてもよい。
【００６０】
図１３，図１４に示した最終テストデータ（テスト入力シーケンスに入力データパターン（正常パターン＆異常パターン）を付加）は、仮想入力ラダー生成部２０に与えられ、そこにおいて仮想入力ラダーが生成される。すなわち、この仮想入力ラダー生成部２０では、テストシーケンス中の各コマンドに対応したラダー回路を生成し、各コマンド処理が終了すると次のコマンドに対応したラダーを実行するようにラダーを生成する。コマンドの実行順は、各パターンごとにステップ１から順に実行するようにしている。つまり、まず、１番目のパターン（パターン１）の正常のパターンについて、ステップ１から順に実行し、ステップ１７まで至ると、２番目のパターン（パターン２）の異常発生中について定義した異常パターンをステップ１からステップ１７まで順に実行する。次いで、先頭から３番目のパターン（パターン３）の指令非入力について定義した異常パターンをステップ１からステップ１７まで順に実行する（以下同じように繰り返し実行する）。
【００６１】
具体的には図１５以降に示すフローチャートを実行する機能を有する。図１５に示すように、テスト入力シーケンス管理部１６からテストシーケンスデータを取得する（ＳＴ３１）。そして、取得したテストシーケンスデータ中のコマンドの欄中に存在するＩＮコマンドを検索し、ＩＮコマンドに対応したラダーを生成する（ＳＴ３２）。次いで、同様にＣＨＥＣＫコマンドを検索し、ＣＨＥＣＫコマンドに対応したラダーを生成する（ＳＴ３３）。さらに、同様にＣＡＬＬコマンドを検索し、ＣＡＬＬコマンドに対応したラダーを生成する（ＳＴ３４）。そして、各処理ステップを実行して生成したラダーを順に並べることにより、仮想入力ラダーを生成する（ＳＴ３５）。
【００６２】
次に、各処理部、より具体的には、ラダーの生成処理プロセスについて説明する。まず、ステップ３２のＩＮコマンドに対応したラダー生成処理は、図１６に示すフローチャートを実行することにより行う。すなわち、シーケンスの先頭行からＩＮコマンドを検索する（ＳＴ４１）。そして、ＩＮコマンドを検出したか否かを判断する（ＳＴ４２）。この分岐判断は、最終行に至るまでＩＮコマンドが検出できなかった場合にＮｏとなる。つまり、ステップ４１では先頭行から順にサーチし、ＩＮコマンドを検出できたか、最終行に至ったならばステップ４２に移行する。
【００６３】
そして、ＩＮコマンドが存在した場合（ＳＴ４２の分岐判断でＹｅｓ）、同一オペランドの別のＩＮコマンドを検索する（ＳＴ４３）。つまり、同一変数についてＯＮ／ＯＦＦするステップを検索する。
【００６４】
ステップ４１，４３で検索した全てのＩＮコマンドにおいて、入力データパターン管理部１８から対応するパターン値を取得し、ＯＦＦ→ＯＮ，ＯＮ→ＯＦＦの変化入力があるか検出する（ＳＴ４４）。そして、ＯＦＦ→ＯＮの変化入力が存在するか否かを判断し（ＳＴ４５）、存在した場合には、それに基づいて自己保持回路のＯＮ部分を生成する（ＳＴ４６）。また、ＯＮ→ＯＦＦの変化入力が存在するか否かを判断し（ＳＴ４７）、存在した場合にはそれに基づいて自己保持回路のＯＦＦ部分を生成する（ＳＴ４８）。
【００６５】
そして、ステップ４６，４８で生成した自己保持回路のＯＮ部分並びにＯＦＦ部分を組合わせ、一つの入力変数に対する自己保持回路を完成する（ＳＴ４９）。次いで、ステップ４１（２回目以降は前回のステップ５０）で検出した次のステップ以降でＩＮコマンドが存在するか検索する（ＳＴ５０）。そして、ＩＮコマンドが存在したならば、ステップ４２でＹｅｓとなり、ステップ４３以降の処理を実行して自己保持回路を作成する。上記した処理を繰り返し実行することにより、全てのＩＮコマンドに対するラダー回路を生成する。
【００６６】
上記自己保持回路の作成プロセスを、ステップ番号１２の「クランプ１出端ＬＳ１」，ステップ番号１３「クランプ１出端ＬＳ２」を例にあげて説明すると以下の通りである。すなわち、パターン毎にＯＦＦ→ＯＮとなるタイミングを検索し、パターン番号とシーケンスステップ番号をＡＮＤ条件でグループ化する。また、同様にパターン毎にＯＮ→ＯＦＦとなるタイミングについて、パターン番号のＢ接点とステップ番号のＢ接点をＡＮＤ条件でグループ化する。
【００６７】
その後、全パターンにおいてグループ化したＯＦＦ→ＯＮタイミングに対応した回路をＯＲ条件でまとめ、ＯＮ→ＯＦＦタイミングに対応した回路をＡＮＤ条件でまとめ、１入力変数に対する入力ラダーとする。
【００６８】
これにより、例えば「クランプ１出端ＬＳ１」の場合、正常パターンのステップ番号１２でＯＦＦからＯＮになるので、パターン１，ステップ番号１２を直列（ＡＮＤ）接続したラダー回路が自己保持回路のＯＮ部分となる。一方、「クランプ１出端ＬＳ１」画ＯＮからＯＦＦに変わるのはパターン２（異常発生中）のステップ番号１２や、パターン３（指令非入力）のステップ番号１２などであるので、それら対となるパターン番号とステップ番号をＢ接点のＡＮＤ接続を採る。これにより、変数「クランプ１出端ＬＳ１」についての図１７（ａ）に示すような自己保持回路が生成される。同様に「クランプ１出端ＬＳ２」については、図１７（ｂ）に示すような自己保持回路が生成される。
【００６９】
一方、ステップ３３のＣＨＥＣＫコマンドに対応したラダーの生成処理プロセスは、具体的には、図１８に示すフローチャートを実行することにより行う。まず、ステップ３２のＩＮコマンドに基づく処理がすでに行われているので、係る処理の実行時にテスト入力シーケンス管理部１６から取得したテストシーケンスデータに対し、シーケンスの先頭行からＣＨＥＣＫコマンドを検索する（ＳＴ５１）。そして、ＣＨＥＣＫコマンドを検出したか否かを判断する（ＳＴ５２）。この分岐判断は、最終行に至るまでＣＨＥＣＫコマンドが検出できなかった場合にＮｏとなる。つまり、ステップ５１では先頭行から順にサーチし、ＣＨＥＣＫコマンドを検出できたか、最終行に至ったならばステップ５２に移行する。
【００７０】
そして、ＣＨＥＣＫコマンドが存在した場合（ＳＴ５２の分岐判断でＹｅｓ）、存在した場合には、入力データパターン管理部１８から対応するチェック値を取得し、チェック値に応じてＡ接点、Ｂ接点をＯＲ条件でまとめる（ＳＴ５３）。そして、ステップＮｏ．に対応した接点をＡＮＤ条件で追加し、チェック回路を完成する（ＳＴ５４）。その後、次ステップ以降でＣＨＥＣＫコマンドを検索する（ＳＴ５５）。すなわち、ステップ５１（２回目以降は前回のステップ５５）で検出した次のステップ以降でＣＨＥＣＫコマンドが存在するか検索する。そして、ＣＨＥＣＫコマンドが存在したならば、ステップ５２でＹｅｓとなり、ステップ５３以降の処理を実行する。
【００７１】
そして、全てのＣＨＥＣＫコマンドの検索が完了したならば、ステップ５２の分岐判断でＮｏとなるので、ステップ５６に飛び、ステップ移行回路を生成し、一連の処理を終了する。上記した一連の処理を実行することにより、例えばステップ番号６の「クランプ１作動指令」に対する仮想入力ラダーは、図１９に示すように生成される。
【００７２】
すなわち、ＣＨＥＣＫコマンドが記述されたステップでオペランドがその値に変化したかチェックする。そして、各パターン毎にＣＨＥＣＫ値がＯＮの場合、パターン番号とチェック対象の変数をＡＮＤ条件でグループ化し（パターン１＆クランプ作動指令）、ＣＨＥＣＫ値がＯＦＦの場合、パターン番号とチェック対象の変数のＢ接点をＡＮＤ条件でグループ化する（パターン２＆クランプ作動指令，パターン３＆クランプ作動指令）。その後、全パターンにおいてグループ化した回路をＯＲ条件でまとめ、さらにＣＨＥＣＫコマンドが記述されたステップ番号をＡＮＤ条件で加える。
【００７３】
そして、次のステップに移行するには、上記ラダーにおいてＣＨＥＣＫ条件が成立したとき、ラダー出力のステップＸ実行中フラグがＯＦＦとなり、当ステップ実行完了とする。
【００７４】
また、ＩＮコマンドは無条件で次ステップへ移行するが、ＣＨＥＣＫコマンドはＣＨＥＣＫ条件成立時に次ステップへ移行する。したがって、ＣＨＥＣＫコマンドが記述されたステップの実行中コイルがＯＦＦしたタイミングで次シーケンスへの移行を行うことになる。そして、これは図２０に示すようなラダー回路により実現できる。
【００７５】
さらに、ステップ３４のＣＡＬＬコマンドに対応したラダーの生成処理プロセスは、具体的には、図２１に示すフローチャートを実行することにより行う。まず、ステップ３２のＩＮコマンドに基づく処理がすでに行われているので、係る処理の実行時にテスト入力シーケンス管理部１６から取得したテストシーケンスデータに対し、シーケンスの先頭行からＣＡＬＬコマンドを検索する（ＳＴ６１）。
【００７６】
そして、ＣＡＬＬコマンドが存在した場合には、入力データパターン管理部１８から実行／非実行値を取得し、実行設定されたパターンに対応した接点をＯＲ条件でまとめる（ＳＴ６２，ＳＴ６３）。その後、次ステップ以降でＣＡＬＬコマンドを検索する（ＳＴ６４）。すなわち、ステップ６１（２回目以降は前回のステップ６４）で検出した次のステップ以降でＣＡＬＬコマンドが存在するか検索する。そして、ＣＡＬＬコマンドが存在したならば、ステップ６２でＹｅｓとなり、ステップ６３以降の処理を実行する。
【００７７】
そして、最終行に至ってもＣＡＬＬコマンドが検出されなければ（ステップ６２の分岐判断でＮｏ）、全てのＣＡＬＬコマンドの検索が終了したことになるので、ステップ移行回路を作成し（ＳＴ６５）、一連の処理を終了する。上記した一連の処理を実行することにより、例えば図１３に示すテストシーケンスからは、初期化シーケンスについて図２２に示すようなラダー回路が生成される。
【００７８】
すなわち、ＣＡＬＬ先のシーケンスの起動フラグをＯＮし、ＣＡＬＬ先シーケンス実行完了フラグがＯＮするまで停止させるため、ＣＡＬＬを実行するパターンをＯＲ条件で追加することになる。図１３から明らかなように、全てのパターンのステップ１で実行される。よって、パターン１，パターン２，パターン３，…の接点をＯＲ条件で接続し、各パターンに対してステップ１の接点をＡＮＤ接続する。なお、図示の例では、パターン３まで記述しているが、実際には、全てのパターンの接点がＯＲ接続されることになる。
【００７９】
そして、初期化シーケンス実行の接点がＯＮになると、ＣＡＬＬ先の初期化シーケンスに基づいて生成された仮想入力ラダー回路を順次実行し、最終回路を実行（ＣＡＬＬ先のシーケンス実行完了フラグがＯＮ）したとき、当ステップの実行完了とする。なお、具体的な図示は省略するが、ＣＡＬＬ先の図１４（ａ）に示した初期化シーケンスに基づいても、仮想入力ラダー生成部２０により仮想入力タープログラムが作成される。
【００８０】
ところで、次パターンへの移行は、そのパターンの最終行を実行した後に行われ、その次のパターンでは先頭のステップ番号から実行されるので、定義された最後のステップ（ステップ番号１７）まで実行が完了したことをチェックし、実行パターンを次パターンへ移行するラダー回路を作成する。具体的には、図２３に示すような回路が生成される。
【００８１】
そして、上記したように仮想入力ラダー生成部２０にて生成された仮想入力ラダープログラムは、ローダ２１により、ネットワーク６を介して仮想Ｉ／Ｏ（ＰＬＣ）２へダウンロードされる。
【００８２】
上記した実施の形態では、正常パターンと異常パターンに基づいて仮想入力ラダープログラムを生成したが、本発明はこれ限ることはなく、少なくとも正常パターンに基づいて仮想入力ラダープログラムを生成するようにすればよい。
【図面の簡単な説明】
【００８３】
【図１】本発明に係るラダープログラムの検証システムの好適な一実施の形態を示す図である。
【図２】本発明に係るシミュレーション支援ツールの好適な一実施の形態を示す図である。
【図３】設備制御全体ラダープログラムの一例を示す図である。
【図４】変数管理部が管理するデータ構造の一例を示す図である。
【図５】設備制御全体ラダープログラムの具体例を示す図である。
【図６】入出力変数抽出部１４の機能を示すフローチャートである。
【図７】クランプ１モジュールについてのテスト入力シーケンスの一例を示す図である。
【図８】異常パターンが付加されたテストパターンの一例を示す図である。
【図９】入力データパターン管理部の機能を示すフローチャートである。
【図１０】入力データパターン管理部の作用を説明する図である。
【図１１】設備装置全体ラダーテストシーケンスの一例を示す図である。
【図１２】モジュールテストシーケンスインポート部の機能を示すフローチャートである。
【図１３】設備制御全体ラダーテストシーケンスの一例を示す図である。
【図１４】ＣＡＡＬコマンドで呼び出される他のプログラムのテストシーケンスの一例を示す図である。
【図１５】仮想入力ラダー生成部の機能を説明するフローチャートである。
【図１６】ステップ３２の具体的な処理アルゴリズムを示すフローチャートである。
【図１７】ＩＮコマンドに対応するラダー回路の一例を示す図である。
【図１８】ステップ３３の具体的な処理アルゴリズムを示すフローチャートである。
【図１９】ＣＨＥＣＫコマンドに対応するラダー回路の一例を示す図である。
【図２０】ＣＨＥＣＫコマンドに対応するラダー回路の一例を示す図である。
【図２１】ステップ３４の具体的な処理アルゴリズムを示すフローチャートである。
【図２２】ＣＡＬＬコマンドに対応するラダー回路の一例を示す図である。
【図２３】実行パターンを次パターンへ移行するラダー回路の一例を示す図である。
【符号の説明】
【００８４】
１  シミュレーション支援ツール
２  仮想Ｉ／Ｏ（ＰＬＣ）
３  作動モニタ
５  ＰＬＣ
６  制御系ネットワーク
１１  テスト対処ラダー管理部
１２  モジュールデータ管理部
１３  変数管理部
１４  入出力変数抽出部
１５  テスト設定入力部
１６  テスト入力シーケンス管理部
１７  モジュールテストシーケンスインポート部
１８  入力データパターン管理部
１９  テスト設定内容表示部
２０  仮想入力ラダー生成部
２１  ローダ
【図１】
0003666507.tif 000002
【図２】
0003666507.tif 000003
【図３】
0003666507.tif 000004
【図４】
0003666507.tif 000005
【図５】
0003666507.tif 000006
【図６】
0003666507.tif 000007
【図７】
0003666507.tif 000008
【図８】
0003666507.tif 000009
【図９】
0003666507.tif 000010
【図１０】
0003666507.tif 000011
【図１１】
0003666507.tif 000012
【図１２】
0003666507.tif 000013
【図１３】
0003666507.tif 000014
【図１４】
0003666507.tif 000015
【図１５】
0003666507.tif 000016
【図１６】
0003666507.tif 000017
【図１７】
0003666507.tif 000018
【図１８】
0003666507.tif 000019
【図１９】
0003666507.tif 000020
【図２０】
0003666507.tif 000021
【図２１】
0003666507.tif 000022
【図２２】
0003666507.tif 000023
【図２３】
0003666507.tif 000024