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