(57)【要約】【課題】任意のラダー図プログラムに応じた必要にして十分な試験データを自動作成する。【解決手段】ラダー図格納部２１は、ラダー図プログラムの各要素間の接続関係を示す情報が含まれる要素情報を記憶する。経路抽出部１１は、要素情報に基づいて、左母線からコイルに至る経路を全て抽出する。経路毎試験データ抽出部１２は、抽出した各経路毎に、その経路上の各接点のＯＮ／ＯＦＦパターンである経路毎試験パターンを生成する。試験データ生成部１３は、各経路毎試験データに基づいて、ラダー図プログラムの試験データを生成する。【選択図】図１
2015149004.tif 000002
【特許請求の範囲】
【請求項１】
試験データ作成対象のラダー図プログラムの各要素間の接続関係を示す情報が含まれる要素情報を記憶する要素情報記憶手段と、
該要素情報に基づいて、左母線からコイルに至る経路を全て抽出する経路抽出手段と、
該各経路毎に、その経路上の各接点のＯＮ／ＯＦＦパターンである経路毎試験パターンを生成する経路毎試験データ生成手段と、
前記各経路毎試験データに基づいて、前記試験データ作成対象のラダー図プログラムの試験データを生成する試験データ生成手段と、
を有することを特徴とするラダー図試験データ作成装置。
【請求項２】
前記経路毎試験データ生成手段は、前記各経路毎に、その経路上の全接点がＯＮとなる前記経路毎試験パターンを１つ生成すると共に、その経路上の何れか１つの接点のみがＯＦＦとなる前記経路毎試験パターンを該経路上の接点の数の分だけ生成することを特徴とする請求項１記載のラダー図試験データ作成装置。
【請求項３】
前記試験データ生成手段は、前記各経路毎に、その経路に係わる前記各経路毎試験パターン毎に、該経路毎試験パターンに対してその経路上に無い接点は全てＯＦＦとするパターンを組み合わせることで、試験パターンを生成し、該生成した試験パターン群を前記試験データとすることを特徴とする請求項１または２記載のラダー図試験データ作成装置。
【請求項４】
前記要素には、前記左母線、前記接点、前記コイルが含まれることを特徴とする請求項１〜３の何れかに記載のラダー図試験データ作成装置。
【請求項５】
スタック記憶手段を更に有し、
前記経路抽出手段は、前記経路の探索中に分岐を検出する毎に前記左母線から該分岐までの経路である途中経路情報を前記スタック記憶手段にスタックし、探索対象が前記コイルに至ることで１つの経路を抽出完了する毎に、前記スタック記憶手段に前記途中経路情報がスタックされている場合には該途中経路情報の１つを取り出して、該途中経路情報を用いて次の経路の探索を開始することを特徴とする請求項１〜４の何れかに記載のラダー図試験データ作成装置。
【請求項６】
事前に任意に生成されていた試験データである事前試験データを記憶する事前試験データ記憶手段と、
前記試験データ生成手段で生成された前記試験データと該事前試験データとを比較することで、該試験データの網羅度を算出する網羅度算出手段とを更に有することを特徴とする請求項１〜５の何れかに記載のラダー図試験データ作成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ラダー図プログラムの試験データの生成方式等に関する。
【背景技術】
【０００２】
シーケンス制御は、工業製品の制御及び、鉄鋼、化学、電力などの広範なプラントの制御に用いられている。シーケンス制御では、そのプログラムとしてラダー図が用いられることが少なくない。プログラマブル・コントローラ（ＰＬＣ：Programmable Logic Controller）で当該プログラムが実行されることで、シーケンス制御が実現される。
【０００３】
ラダー図はリレーロジックを模したものであり、ＯＮ/ＯＦＦの入力信号を論理和/論理積の組み合わせにより演算を行い、その結果を出力する。ＰＬＣはラダー図で作成されたその演算を実行するものである。リレーロジック（ラダー図）は入力条件の組み合わせで出力を決定するものであり、シーケンス制御に慣れた技術者には簡単に制御を行えるものであるが、作成されたロジックの機能を検証することについては、十分に配慮されていない。
【０００４】
作成されたロジックの機能（ラダー図）の検証に関しては、プログラムの実行の度に演算結果を記録して、演算結果の変化回数を累積して変化回数の数から不動作回路や動作回数は閾値以下の回路を検出する機能（特許文献１）や、ＰＬＣにトレース機能を設け、レジスタの変化を記録することによりシーケンスの動作網羅率を求める（特許文献２）こと等が行われている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−２６５３０６号公報
【特許文献２】特開２０００−２９３２０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来技術では、実機／シミュレーションによるプログラムの実行結果により、回路の不動作検出やシーケンス回路の動作網羅率を求めている。これらの方法によれば、試験データと、実際にプログラムを動作させる環境（ＰＬＣの実機／シミュレータ）が必要となる。
【０００７】
ラダー図は、単純化して考えればＯＮ/ＯＦＦの二値信号の論理和/論理積の組み合わせであるので、入力信号の数（入力条件）をＮとして２のＮ乗の試験データを準備すれば、全ての試験を行うことができるのは自明である。尚、上記Ｎは、例えば接点の数であると見做してよい。接点は、ＯＮとＯＦＦの何れかの状態と成るものである。
【０００８】
しかし、仮に入力条件が１０個あった場合には試験データは２の１０乗（＝1024種類）となってしまい、試験データは膨大になる。ところが１０個の入力条件がすべて直列（ＡＮＤ条件）で使用されている場合、実際の試験データは全ての条件が成立（ＯＮ）しているパターン（１種類）と、どれか一つだけ条件が成立していないパターン（１０種類）の合計１１種あれば十分である。このように、膨大な試験データから必要にして十分な試験データを選択することは、ラダーシーケンスの試験工数を削減する上で重要である。
【０００９】
例えば図８（ａ）のような直列／並列回路だけの組み合わせは、単純なＡＮＤ／ＯＲの論理演算に変換することが出来、その試験データも比較的簡単に生成することが出来る。これは、例えばＣ言語等の試験データ生成アルゴリズムを適用することが可能であるものである。しかし、図８（ｂ）のような回路では、単純なＡＮＤ／ＯＲの論理演算に変換することができない為、適切な試験データの生成ができない。
【００１０】
本発明の課題は、任意のラダー図プログラムに応じた試験データの自動作成を行える装置であって、特に必要にして十分な試験データを作成でき以って試験データ数を削減できるラダー図試験データ作成装置等を提供することにある。
【課題を解決するための手段】
【００１１】
本発明のラダー図試験データ作成装置は、試験データ作成対象のラダー図プログラムの各要素間の接続関係を示す情報が含まれる要素情報を記憶する要素情報記憶手段と、該要素情報に基づいて、左母線からコイルに至る経路を全て抽出する経路抽出手段と、該各経路毎に、その経路上の各接点のＯＮ／ＯＦＦパターンである経路毎試験パターンを生成する経路毎試験データ生成手段と、前記各経路毎試験データに基づいて、前記試験データ作成対象のラダー図プログラムの試験データを生成する試験データ生成手段とを有する。
【発明の効果】
【００１２】
本発明のラダー図試験データ作成装置等によれば、任意のラダー図プログラムに応じた試験データの自動作成を行える装置であって、特に必要にして十分な試験データを作成でき以って試験データ数を削減できる。
【図面の簡単な説明】
【００１３】
【図１】本例のラダー図試験データ作成装置の機能ブロック図である。
【図２】（ａ）はラダー図プログラムの一例、（ｂ）はこの例に応じたセル一覧と点一覧の具体例である。
【図３】図２（ｂ）の例の場合に求められる経路を示す図である。
【図４】経路抽出部の処理フローチャート図である。
【図５】（ａ）は途中経路情報の一例、（ｂ）は経路記憶部の格納データの一例である。
【図６】（ａ）は経路毎試験データ記憶部のデータ格納例、（ｂ）は試験データ生成部によって生成される試験データの具体例である。
【図７】（ａ）はＡＮＤの真偽表、（ｂ）はＯＲの真偽表である。
【図８】（ａ）、（ｂ）は、ラダー図プログラムの具体例である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例のラダー図試験データ作成装置１０の機能ブロック図である。
尚、ラダー図試験データ作成装置１０は、任意の上記ラダー図プログラムの試験データを自動的に生成する装置であって、特に適切な試験データを自動生成できる装置である。“適切な”とは、例えば、上述した“必要にして十分な試験データを作成できること”であり、以って試験データ数を削減でき、ラダーシーケンスの試験工数を削減できるものである。
【００１５】
また、本例のラダー図試験データ作成装置１０は、パソコン、サーバ装置等の汎用コンピュータ上で実現できるものであり、特に所謂“支援装置”の機能の１つと見做しても良いものである。よく知られているように、“支援装置”上でユーザは所望のシーケンス制御プログラムを作成できるものであり、一例としてラダー図によるプログラムを作成できるものである。本例のラダー図試験データ作成装置１０は、例えば、ユーザが任意に作成したラダー図プログラムに基づいて、その試験データを自動的に作成できる。但し、この例に限らない。
【００１６】
また、上記のように本例のラダー図試験データ作成装置１０は、汎用コンピュータ上で実現できるものであり、ハードウェア的には汎用コンピュータの一般的な構成を有している。つまり、特に図示しないが、ＣＰＵ、記憶装置（ハードディスク、メモリ等）等を備えている。このＣＰＵが、記憶装置に予め記憶されているアプリケーションプログラムを実行することで、図１に示す各種処理機能部１１〜１４が実現される。
【００１７】
図１に示す例では、ラダー図試験データ作成装置１０は、経路抽出部１１、経路毎試験データ抽出部１２、試験データ生成部１３、試験データ比較部１４等の各種処理機能部を有する。尚、試験データ比較部１４は、必ずしも必要ない。
【００１８】
また、ラダー図試験データ作成装置１０は、各種データを記憶する各種記憶部も有する。すなわち、例えば図示のラダー図格納部２１、途中経路記憶部２２、経路記憶部２３、経路毎試験データ記憶部２４、試験データ記憶部２５、事前試験データ記憶部２６等を有する。尚、事前試験データ記憶部２６は、必ずしも必要ない。
【００１９】
ラダー図格納部２１は、予め例えば上記のようにユーザ等が任意に作成したラダー図プログラム等を記憶する。これは、ラダー図の要素（左右母線、接点、コイル）とそれぞれの要素間の接続関係を示す情報等が格納されていればよい。この様な情報の一例を図２に示し、詳細は後に説明するが、以下、簡単に説明する。
【００２０】
例えば図２（ａ）に示すようなラダー図プログラムの場合、ラダー図格納部２１には図２（ｂ）に示すセル一覧３０及び点一覧４０が格納される。
この例では、左右の母線、接点、コイル等をセルとして、セル一覧３０には各セルの種類３１、名前３２、接続点との接続関係（左３３、右３４）等が格納される。また、各接続点に関する情報が、点一覧４０に格納される。各接続点には、ユニークな識別ＩＤであるＩＤ４１が割り当てられており、各セル毎に、そのセルに接続する接続点の上記識別ＩＤが上記左３３、右３４に格納される構造となっている。また、点一覧４０においては、各接続点毎に、その接続点の後段（右側）のセルを示す情報が、接続情報４４に格納されている。
【００２１】
尚、ここでは、図２（ａ）に示す接続点１のＩＤ４１が‘１’、接続点２のＩＤ４１が‘２’であるものとする。これより、例えばセル“接点C000”に関しては、左３３が‘１’、右３４が‘２’となっている。他の接続点や、各セルの接続点との接続関係も、図示の通りである。
【００２２】
以上、図２の例について簡単に説明したが、更に詳しい説明は後述する。
経路抽出部１１は、上記ラダー図格納部２１の格納データに基づいて経路探索を行って、左母線からコイルに至る経路を全て求める。これは、基本的には複数の経路が求まることになる。例えば、上記図２に示す例の場合、図３に示す（１）、（２）、（３）の３つの経路が、求められることになる。当該求められた複数経路の情報は、経路記憶部２３に記憶される。その一例を図５（ｂ）に示し後に説明する。
【００２３】
また、経路抽出部１１の処理フローチャート図を、図４に示し、後に説明する。
また、途中経路記憶部２２は、経路抽出部１１の経路探索処理の際に利用されるものであり、当該経路探索処理中に、途中までの経路を記録するものである。つまり、経路を辿る途中で分岐を検出した場合、左母線から当該分岐までの経路（中途経路）を記録しておくものである。尚、本例の経路抽出部１１の処理例の場合には、後から検出した分岐の方を先に処理する必要があるので、途中経路記憶部２２はスタック構造で構成する。但し、これは一例であり、この例に限らない。途中経路記憶部２２のデータ格納例は、図５（ａ）に示し、後に説明する。
【００２４】
何れにしても、経路抽出部１１は、経路探索処理中に途中経路記憶部２２に対して中途経路データの格納・取り出しを行う。そして、最終的には、上記複数の経路を求めることになる。
【００２５】
経路毎試験データ抽出部１２は、上記求められた各経路毎の試験データを生成する。これは、例えば、各経路毎に、その経路上の全ての接点がＯＮになる経路毎試験パターン（“成立している”パターン）と、何れか一つの接点だけがＯＦＦになる経路毎試験パターン（“成立していない”パターンの一例）を作成する。当該“成立していない”パターンは、基本的に、複数作成される。これは、特に、その経路上の接点の数の分だけ、“成立していない”パターンを作成する。つまり、この様な“成立していない”パターン群によれば、その経路上の全ての接点が、１度はＯＦＦされることになる試験データとなる。一例を図６（ａ）に示し後に説明する。
【００２６】
尚、上記“成立している”パターンのときに、コイルが例えばＯＮとなる。上記“成立していない”パターンのときに、コイルが例えばＯＦＦなる。尚、その意味では、“成立していない”パターンは、上記「何れか一つの接点だけがＯＦＦになるパターン」に限らず、例えば「何れか２つの接点だけがＯＦＦになるパターン」や「全ての接点がＯＦＦになるパターン」等も有り得る。しかし、本手法では、試験パターン数削減の為に、上記のように「何れか一つの接点だけがＯＦＦになるパターン」だけとするが、これだけでも必要にして十分な試験パターンが得られる。
【００２７】
生成された“経路毎試験データ”は、経路毎試験データ記憶部２４に記憶される。経路毎試験データ記憶部２４のデータ格納例は、図６（ａ）に示し後に説明するが、図示の例のように、経路毎試験データは、経路要素（ここでは接点）のＯＮ／ＯＦＦを、１／０の並びとして記録してもよい。ここでは、‘１’がＯＮ、‘０’がＯＦＦを意味するものとする。勿論、これは一例であり、この例に限らない。
【００２８】
試験データ生成部１３は、上記経路毎試験データ記憶部２４に格納される経路毎試験データに基づいて、上記ラダー図格納部２１に格納されているラダー図プログラムに応じた試験データを生成する。この試験データ生成方法については、詳しくは後述するが、経路同士は、左母線−コイル間において並列要素（ＯＲ条件）の関係になっているので、全ての経路が“成立していない”パターンと、何れか一つの経路だけが“成立している”パターンを生成する。生成された試験データは、試験データ記憶部２５に格納される。
【００２９】
ここで、何れか一つの経路だけが“成立している”試験パターンは、経路の数の分だけ生成し得る。この生成方法は、例えば各経路を順次処理対象として選択し、選択した経路に関する上記経路毎試験データのなかで「“成立する”経路毎試験パターン」（１つだけのはず）を採用すると共に、他の経路の接点は全てＯＦＦとする試験パターンを生成する。尚、他の経路の接点とは、上記選択した経路上にはない接点を意味する。よって、他の経路上にある接点であっても上記選択した経路に含まれる接点でもある場合には（例えばC000等）は、ＯＦＦにはしないことになる。
【００３０】
また、全ての経路が“成立していない”試験パターンの生成方法は、例えば各経路を順次処理対象として選択し、当該選択した経路に関して「“成立しない”経路毎試験パターン」を順次採用すると共に他の経路の接点は全てＯＦＦとする。尚、他の経路の接点とは、既に述べた通り、上記選択した経路上には無い接点を意味する。
【００３１】
上記のように、本例では、選択した経路に係わり採用した経路毎試験パターンが“成立する”パターン場合も“成立しない”パターン場合も、選択した経路上に無い接点は強制的に全てＯＦＦとするが、この例に限らない。
【００３２】
図６（ｂ）に、試験データ生成部１３によって生成される試験データ８３（試験パターン群）の具体例を示す。尚、この具体例は図６（ａ）に示す経路毎試験データ７２の具体例に基づいて生成されたものである。
【００３３】
例えば図６（ａ）に示す経路毎試験データの経路７１と経路毎試験データ７２とに基づいて、各経路毎に、その経路上の各接点だけでなくその経路上には無い接点も含めた各接点のＯＮ／ＯＦＦパターンを生成することで、図６（ｂ）に示す試験データ８３が生成される。上記の通り本例では、その経路上には無い接点に関しては、一律で全て‘０’（ＯＦＦ）とするが、この例に限らない。
【００３４】
図６（ｂ）に示す例の試験データ８０は、経路８１、経路毎試験データ８２、試験データ８３等から成る。経路８１は、上記経路７１に相当するが、ここでは各経路７１に任意に割り当てた経路識別番号（‘１’、‘２’、‘３’）を用いている。図示の例では、例えば経路“C000, C001, C003, C006”に対しては経路識別番号‘１’が割り当てられているものとする。
【００３５】
また、各経路８１毎に、その上記経路毎試験データ７２に格納される各経路毎試験パターンが、それぞれ、経路毎試験データ８２に格納される。
そして、試験データ８０の各レコード毎に、その経路８１（経路７１）と経路毎試験データ８２とに基づいて、図示の試験データ８３が生成・記憶されるものである。換言すれば、各経路毎に、その経路に係わる各経路毎試験パターン毎に、当該経路毎試験パターン＋「その経路上には無い接点に関しては、一律で全て‘０’（ＯＦＦ）としたパターン」によって、試験パターンを生成する。これによって、試験データ８３には、処理対象のラダー図プログラムの全ての接点について、１（ＯＮ）または０（ＯＦＦ）が設定された試験パターンが格納されることになる。
【００３６】
試験データ生成部１３は、上記試験データ８０の各レコード毎に、その経路８１と経路毎試験データ８２とに基づいて、試験データ８３における該当接点に対して‘１’または‘０’を格納する。例えば、図示の先頭レコードの場合、経路８１＝‘１’であるので、上記のことから該当接点はC000とC001とC003とC006とになる。そして、経路毎試験データ８２は‘1/1/1/1’であるので、試験データ８３におけるC000、C001、C003、C006に対しては全て‘１’が格納される。更に、これら該当接点以外の全ての接点に対して‘０’を格納する。これによって、先頭レコードの試験データ８３は図示の通りとなる。
【００３７】
また、２番目のレコードの場合も、経路８１＝‘１’であるので、該当接点はC000とC001とC003とC006とになる。そして、経路毎試験データ８２は‘0/1/1/1’であるので、試験データ８３におけるC001、C003、C006に対しては全て‘１’が格納されると共にC000に対してのみ‘０’が格納される。更に、これら該当接点以外の全ての接点には‘０’を格納する。
【００３８】
以上の処理を、図示の３番目のレコード以降に対しても順次実行することで、各レコード毎に図示の内容の試験データ８３（試験パターン）が生成されることになる。
以上の処理によって、試験データ８３が生成完了したものとしてもよいが、更に、図示のCoil（コイル）に対しても１（ＯＮ）または０（ＯＦＦ）が格納されるようにしてもよい。これは、上記のことからに、経路毎試験データ７２は、各経路７１毎に、その経路が成立する試験パターン（1/1/1/1）は１つだけであるように生成されるので、経路毎試験データ８２が‘1/1/1/1’であるレコードのみ、その試験データ８３におけるコイルに対して‘１’が格納され、それ以外は全て‘０’が格納されるようにすればよい。
【００３９】
以上の処理により自動生成される試験データ８３は、図示のように、任意の１つの経路のみが“成立する”が他の経路は“成立しない”試験パターンが、経路の数の分だけ生成されると共に（よって、本例では３個生成される）、それ以外は全ての経路が“成立しない”試験パターンとなる。
【００４０】
但し、ここでは、全ての経路が“成立しない”試験パターンは、任意の経路上の接点のなかで任意の１つの接点のみがＯＦＦ（０）となると共に、その経路上に無い接点は全てＯＦＦ（０）となるパターンとなる。これは、例えば、上記任意の経路毎に、その経路上の接点の数の分だけ生成される。
【００４１】
尚、上記のことは、換言すれば、全ての経路が成立していない“ＯＦＦパターン”と、どれか一つの経路だけが成立している“ＯＮパターン”とが生成されるものである。“ＯＦＦパターン”はコイルをオフするパターンであり、“ＯＮパターン”はコイルをオンするパターンと見做してよい。
【００４２】
以上述べた処理により、対象となるラダー図プログラムに応じた適切な試験データが自動的に生成される。
そして、本例では更に、上記自動生成された試験データ（試験パターン群）を利用して、事前に任意に生成されていた試験データ（事前試験データ）の網羅度を求めるものであってもよい。但し、網羅度を求める処理は、必ずしも必要ない。また、事前試験データを生成する必要性も、必ずしも無いものである。尚、上記事前試験データは、事前試験データ記憶部２６に格納されている。尚、事前試験データ記憶部２６は、試験データ記憶部２５と同一のデータ構造であってよい。
【００４３】
試験データ比較部１４は、上記試験データ記憶部２５に格納された試験データ８３（自動生成試験データ）と、上記事前試験データ記憶部２６に格納されている事前試験データとを比較して、一致するものを検出する処理を行う。例えば、一致するものにマークをつける処理を行う。これは、例えば、上記自動生成試験データの試験データ８３の各試験パターン毎に、そのパターンが事前試験データにあるか否かを検索して、ある場合にはそのパターンに対して上記マークを付ける処理であるが、この例に限らない。尚、検索を高速化するために、大量のデータから一致した部分を検索する別のアルゴリズムを適用することも可能である。
【００４４】
以上説明したように、本例のラダー図試験データ作成装置１０は、処理対象のラダー図の左母線からコイルに至る経路を全て抽出し、各経路毎の試験データを生成し、この経路毎試験データに基づいて、処理対象のラダー図プログラムの試験データを作成する。
【００４５】
ラダー図の左母線からコイルに至る経路を全て抽出する為に、探索中に途中までの経路を記録するスタック構造を設け、経路を探索する途中で分岐を検出した場合、そこまでの経路をスタック構造に記録して、分岐の一方の経路を続けて辿る。経路探索がコイルまで到達した場合、一つの経路の探索を終了し、経路を記録する。そして、スタック構造にデータが記録されている場合（途中までの経路が残っている場合）、当該スタック構造からデータ（途中までの経路）を取得することで、分岐のもう一方の経路を辿ってコイルに至るまで経路探索を行う。
【００４６】
尚、スタック構造からデータを取得することで、当該データはスタック構造から無くなることになる。また、スタック構造であるので、任意の分岐の後に更に別の分岐があった場合、上記一つの経路の探索を終了後、後の分岐の箇所から探索を再開することになる。
【００４７】
以上の操作を全ての経路の探索が終了するまで行う。これは、換言すれば、スタック構造に途中経路データが無くなるまで行うものと言える。
次に、経路毎の試験データを作成する。左母線からコイルに至る経路は直列要素（ＡＮＤ条件）であるので、各経路毎に、それぞれ、全ての条件（接点）がＯＮしているパターン（“成立している”パターン；コイルがＯＮするパターン）と、何れか一つの条件（接点）のみがＯＦＦしているパターン（“成立していない”パターン；コイルがＯＦＦするパターン）とを生成することができる。そして、これら生成した経路毎試験データを一時的に記憶しておき、後に試験データ生成の際に利用する。
【００４８】
尚、上記“成立していない”パターンは、上記何れか一つの条件（接点）のみがＯＦＦしているパターンに限らず、例えば何れか２つの条件（接点）がＯＦＦしているパターンや、全ての条件（接点）がＯＦＦしているパターン等も有り得る。しかし、この様に様々な試験パターンを生成すれば当然、試験パターン数が増大し、上記の通り問題となる。これに対して、既に述べたように、仮に経路が１つだけで且つ入力条件（接点）が１０個あった場合には、試験データは、全ての接点がＯＮしているパターン（１種類）と、どれか一つの接点だけがＯＮしていないパターン（１０種類）の合計１１種あれば十分である。
【００４９】
これより、本例では、上記の通り、各経路毎に、“成立していない”パターンとして、上記何れか一つの入力条件（接点）のみがＯＦＦしているパターンを生成するものである。これによって、試験パターン数を削減できると共に必要にして十分な試験パターンを得られる。
【００５０】
尚、上記入力条件とは本例では接点であるが、この例に限らない。
次に、全ての経路毎試験データに基づいて、試験データ（試験パターン群）を生成する。経路同士は、左母線−コイル間において並列要素（ＯＲ条件）になっているので、全ての経路が成立していない試験パターンと、何れか一つの経路だけが成立している試験パターンを生成すれば十分である。全ての経路が成立していない試験パターンは、一つの経路についてコイルＯＦＦとなるパターンとその経路に使われていない接点をすべてＯＦＦにしたパターンの組み合わせを作成し、それをすべての経路について作成すればよい。何れか一つの経路だけが成立（ＯＮ）している試験パターンは、一つの経路についてコイルＯＮとなるパターンとその経路に使われていない接点をすべてＯＦＦにしたパターンの組み合わせを作成し、それをすべての経路について作成すればよい。
【００５１】
最後に、上記のように作成した試験データ（試験パターン群）において重複した試験パターンを削除することによって、最終的な試験データとする。
また、例えば、試験データが事前に準備されている場合、当該事前試験データと自動生成された試験データを比較し、一致する試験パターンにはマークをつける。全ての試験パターンの比較が終了すれば、試験パターンの数に対する記録したマークの比率を計算することで、試験データの網羅度を算出する。
【００５２】
図４のフローチャート図について説明する。尚、その際、図２の例を用いて説明する場合もある。
これより、以下、まず、図２について説明しておく。
【００５３】
図２（ｂ）に示すセル一覧３０は、種類３１、名前３２、左３３、右３４から成る。
これらについては既に説明したように、例えば図２（ａ）に示すラダー図プログラムについて、各セル毎に、その種類（母線or接点orコイル）と名前が、種類３１と名前３２に格納される。更に、そのセルに接続する接続点の上記識別ＩＤが、左３３と右３４に格納される。左３３にはそのセルから左母線側（図２（ａ）では図上左側）の接続点の識別ＩＤが格納される。右３４にはそのセルから右母線側（図２（ａ）では図上右側）の接続点の識別ＩＤが格納される。
【００５４】
また、点一覧４０は、ＩＤ４１、座標４２、分岐４３、接続情報４４等から成る。
ＩＤ４１は既に説明した通りであり、座標４２についてはここでは関係ないので特に説明しないものとする。分岐４３には、その接続点が分岐点である場合には、分岐であることを示す情報（本例では‘１’）が格納される。図示の例では、接続点２と接続点４が分岐点である。後述する図４のステップＳ３の処理では、処理対象セルが接続点であって且つその分岐４３が‘１’である場合に、「分岐」と判定してステップＳ６、Ｓ７の処理を実行することになる。更に、このステップＳ７の処理では、処理対象セルのＩＤ４１を用いて、セル一覧３０において左３３が当該ＩＤ４１と同一であるレコードを求めることで、２つの走査対象候補を判別できる。これより、当該２つの走査対象候補の何れか一方を走査対象に決定する。残りが後にステップＳ１１で走査対象に決定されることになる。図４の処理については後に説明する。
【００５５】
尚、図示の例に限らず、例えば分岐４３は無くてもよい。接続情報４４に複数データが格納されている場合には分岐点であると判別できるからである。また、座標４２も無くてもよい。座標４２は、単に、分岐点に係わる識別情報と見做しても構わない。
【００５６】
また、接続情報４４には、その接続点に接続されるセルの識別情報等が格納される。図示の例では、その接続点の後段（図上右側）のセルの識別情報等が格納される。よって、例えば、接続点１に関しては“C000”が格納されるが、分岐点である接続点２に関しては“C001”と“C002”の２つが格納されることになる。
【００５７】
また、ここで、図５（ａ）に示す途中経路情報２２の一例についても説明しておく。
図示の例では、途中経路情報２２は、分岐位置５１、経路５２から成る。尚、分岐位置５１は、必ずしも必要ないものであり、説明する都合上、示しているものと見做しても構わない。
【００５８】
また、図示の例では、２つのレコードが格納されている状態を示すが、これは説明の都合上示しているだけであり、本具体例の場合、この様な格納状況となる場合はない。すなわち、本具体例の場合、最初に図示の分岐位置５１＝ａのレコードがステップＳ６で格納（スタック）され、その後、当該スタックデータがステップＳ１０で取り出される。これによって格納データが何も無い状態となった後、分岐位置５１＝ｂのレコードがステップＳ６で格納（スタック）され、その後、当該スタックデータがステップＳ１０で取り出されることになる。従って、図示の２つのレコードの両方が格納された状態となることはない。
【００５９】
以上、説明の都合上、図２等について説明した。
以下、図４のフローチャート図の処理について説明する。
図４の処理は、概略的には、処理対象のラダー図要素のデータを取得する（ステップＳ２）毎に、ステップＳ３以降の処理を実行することを、ステップＳ９の判定がＮＯとなるまで繰り返し実行するものである。
【００６０】
最初は、処理対象のラダー図プログラムの左母線を走査することで、処理対象を左母線に接続されているラダー図要素として（ステップＳ１）、この対象要素に関するデータをステップＳ２で取得することになる。その後は、ステップＳ５、Ｓ７，Ｓ１１等で対象要素を変更しながら、上記処理を繰り返すことになる。
【００６１】
最初は、例えば、セル一覧３０において、種類３１が“母線”であるレコードの右３４のデータ（＝‘１’）より、対象要素を決定する。尚、上記“要素”には、上記セルや接続点が含まれる。つまり、接点やコイルだけでなく、接続点も含まれる。
【００６２】
そして、セル一覧３０及び点一覧４０を検索して、該当レコード（処理対象要素のレコード）を求める（ステップＳ２）。つまり、セル一覧３０または点一覧４０において、そのＩＤ４１または名前３２が、上記対象要素を示すデータ（識別ＩＤまたは名前であり、最初は‘１’）と一致するレコードを、該当レコードとする。そして、当該該当レコードの種類３１または分岐４３を参照することで、対象要素が接点であるか、分岐であるか、コイルであるかを判定する処理を行う（ステップＳ３）。
【００６３】
そして、接点である場合にはステップＳ４，Ｓ５の処理を実行し、分岐である場合にはステップＳ６、Ｓ７の処理を実行し、コイルである場合にはステップＳ８〜Ｓ１２の処理を実行する。但し、ステップＳ１２の処理が実行された場合には本処理を終了する。それ以外の場合には、ステップＳ２の処理に戻る。
【００６４】
尚、図示していないが、対象要素が「分岐ではない接続点」である場合には、その接続情報４４によって次の対象要素を認識したうえでステップＳ２に戻る。
図示の例では最初はステップＳ１で上記の通り‘１’が取得され、ここでは数値は接続点の識別ＩＤを意味するものとし、これより取得データを用いて点一覧４０を検索して該当レコードを求めるものとする。この例では、点一覧４０の先頭レコードが該当レコードとなるので、その分岐４３が‘１’ではないことから、上記「分岐ではない接続点」であると判定することになる。これより、上記処理を行って、次の対象要素を“Ｃ０００”として、ステップＳ２に戻ることになる。
【００６５】
ステップＳ２では、“Ｃ０００”を用いてセル一覧３０、点一覧４０を検索して、該当レコードを求める。つまり、その名前３２またはＩＤ４１が“Ｃ０００”であるレコードを求める。該当レコードが点一覧４０内にある場合の処理は、既に述べた通りである。一方、該当レコードがセル一覧３０内にある場合には、この該当レコードの種類３１によって、ステップＳ３の判定を行う。図示の例では、名前３２が“Ｃ０００”のレコードの種類３１は“接点”であるので、上記の通り、ステップＳ４、Ｓ５の処理を実行することになる。
【００６６】
尚、ラダー図要素を単に要素と記す場合もあるものとする。
ステップＳ４では、処理対象のラダー図要素（接点）の名前３２を、経路６１に格納する。ここでは、上記“Ｃ０００”が格納されることになる。
【００６７】
ここで、図５（ｂ）に、上記経路記憶部２３の格納データの一例を示す。この例では、経路記憶部２３には図示の経路６１のみが格納される。経路６１は、複数のレコードから成り、各レコードは各経路に対応するものである。本例では上記の通り３つの経路が抽出されるので、図示のように３つのレコードが生成されることになる。そして、上記一例では、図示のように先頭レコードに“Ｃ０００”が格納されることになる。尚、図５（ｂ）には図４の処理完了時の状態を示してあり、上記の段階では、図示の先頭レコードの“Ｃ０００”のみが格納された状態となっている。
【００６８】
上記ステップＳ４の処理を実行したら、走査対象を右へ移動して（ステップＳ５）、ステップＳ２に戻る。ステップＳ５の処理は、上記該当レコードの右３４を用いて、次の処理対象要素を決定するものである。上記の例では該当レコードの右３４は‘２’であるので、識別ＩＤ＝‘２’の接続点が、次の処理対象要素となり、ステップＳ２でＩＤ４１＝‘２’のレコードが該当レコードとして取得されることになる。これより、図２（ｂ）に示す例では該当レコードの分岐４３が‘１’であることから、上記ステップＳ３で“分岐”と判定されるので、ステップＳ６．Ｓ７の処理を実行することになる。
【００６９】
ステップＳ６では、ここまでの経路を途中経路記憶部２２に記録する。これは、例えば、処理対象要素（接続点）の座標４２を分岐位置５１に格納すると共に、ここまでの経路を経路５２に格納する。尚、特に図示しないが、各経路毎にその探索開始から現在までに処理対象要素となった接点を全て記憶しておき、これを上記“ここまでの経路”とする。ここでは、図５（ａ）に示す分岐位置５１が“ａ”で経路５２が“C000”のデータが、途中経路記憶部２２にスタックされることになる。尚、上記の通り、実際には経路５２のデータのみが格納されるものと見做してもよい。つまり、実際には分岐位置５１は無いものと見做しても良い。
【００７０】
そして、走査対象を分岐の一方に移動して（ステップＳ７）、ステップＳ２に戻る。ステップＳ７の処理は、上記該当レコードの接続情報４４を用いて次の処理対象要素を決定する。この例では、該当レコードの接続情報４４には、「C001,C002」が格納されているので、C001とC002の何れか一方を、次の処理対象要素とする。
【００７１】
あるいは、上記該当レコードのＩＤ４１を用いて、次の処理対象要素を決定してもよい。この場合、セル一覧３０において、その左３３が、上記該当レコードのＩＤ４１と同一であるレコードを求める。これは、例えば２つのレコードが求められるはずであるので、何れか一方を次の処理対象要素とする。ここでは、ＩＤ４１＝‘２’であるので、名前３２が“COO1”と“COO2”の何れか一方が、次の処理対象要素となる。
【００７２】
ここでは仮に“COO1”が次の処理対象要素となったものとすると、ステップＳ３では“接点”と判定されることになり、上記ステップＳ４，Ｓ５の処理が実行される。特に説明しないが、それ以降、接点“C003”、接点“C006”が順次処理対象要素となって、同様にしてステップＳ４、Ｓ５の処理が実行されることになる。その結果、上記経路記憶部２３は、図５（ｂ）の先頭レコードが生成された状態となる。つまり、先頭レコードには、図示の「C000，C001，C003，C006」が，格納された状態となっている。
【００７３】
この状態で、次の処理対象要素が“コイル（Coil）”となるので、ステップＳ３では“コイル”と判定され、ステップＳ８の処理へ移行する。尚、特に図示していないが、ステップＳ８の処理の前に、１つの経路探索完了と見做して、経路記憶部２３に空レコードを追加作成する処理を実行する。ここでは、上記図５（ｂ）の先頭レコードを１つの経路として確定させると共に、図示の２番目のレコードを追加する。但し、この段階では２番目のレコードには未だデータは何も格納されていない状態（空レコード）となっている。
【００７４】
そして、ステップＳ８では、途中経路記憶部２２からデータを１つ取得する。スタック構造であるので、最新のスタックデータを取得することになる。但し、途中経路記憶部２２に１つもデータが格納されていない場合には（ステップＳ９，ＹＥＳ）、ステップＳ１２の処理を実行して、本処理を終了する。
【００７５】
ステップＳ１２では、経路記憶部２３の格納データ（経路６１）を、図６（ａ）に示す経路毎試験データ記憶部２４の経路７１にコピーする。本例では、ステップＳ１２の処理が実行されるときには、経路６１は図５（ｂ）に示す状態となっているので、これをコピーすることで、経路毎試験データ記憶部２４の経路７１は図６（ａ）に示す状態となる。尚、当然、この段階では、経路毎試験データ７２には何もデータは格納されていない。
【００７６】
一方、途中経路記憶部２２からデータを１つ取得できた場合には（ステップＳ９，ＮＯ）、ステップＳ１０、Ｓ１１の処理を実行して、ステップＳ２に戻る。まず、途中経路記憶部２２からの取得データを、経路６１の上記次のレコードに格納する。ここでは途中経路記憶部２２には１つのデータのみが格納された状態であり、その経路５２は“C000”であるので、図５（ｂ）に示す２番目のレコードに“C000”が格納されることになる。尚、この段階では、図５（ｂ）に示す２番目のレコードには、“C000”のみが格納された状態であり、図示の“C002”、“C004”、“C006”は、未だ格納されていない。
【００７７】
そして、走査対象を分岐の他方に移動させて（ステップＳ１１）、ステップＳ２に戻る。ステップＳ１１の処理は、上記ステップＳ８で取得した経路５２における最後の要素（接点）を、基点として、次の処理対象要素を決定する。ここでは、経路５２は“C000”のみであるので、“C000”を基点として次の処理対象要素を決定する。
【００７８】
これは、例えば、セル一覧３０において、その名前３２が上記基点（C000）と同一であるレコードを検索して、当該レコードの右３４を取得する。そして、その左３３が、当該取得した右３４と同一であるレコードを検索する。上記の例では、右３４は‘２’であるので、名前３２が“C001”と“C002”の２つのレコードが求められることになる。そして、この２つのうち、未だ経路６１に１つも格納されていない方を、次の処理対象要素に決定する。この例では、“C002”が次の処理対象要素に決定されることになる。
【００７９】
但し、次の処理対象要素の決定方法は、上記の例に限らない。例えば、途中経路記憶部２２に更に分岐先を格納するようにしてもよい。つまり、上記ステップＳ６、Ｓ７の処理において、ステップＳ７の「何れか一方の接点を走査対象に決定する処理」を先に行ったうえで、ステップＳ６において、他方の接点の名前も一緒に途中経路記憶部２２に格納するようにしてもよい。上記の例では“C002”が格納されることになる。
【００８０】
尚、ステップＳ１１の処理の際に、上記ステップＳ８で取得した経路５２を、新たな上記“ここまでの経路”とする。これによって、“ここまでの経路”が「C000」の状態で、次の経路探索を開始することになる。
【００８１】
そして、処理対象要素が“C002”であるので、ステップＳ３で“接点”と判定されて、ステップＳ４で経路６１の対象レコード（ここでは２番目のレコード）に“C002”が追加格納され、ステップＳ５で次の処理対象要素は接続点４（ＩＤ＝４）となる。これより、図２の例に応じて、ステップＳ３の判定は“分岐”となり、ステップＳ６で途中経路記憶部２２に図５（ａ）に示す“経路５２が「C000，C002」のデータ”が、スタックされることになる。
【００８２】
そして、ここではステップＳ７で“C004”の方へ分岐するものとし、これよりその後にステップＳ８の処理が実行されるときには、経路６１は図５（ｂ）の２番目のレコード「C000，C002，C004，C006」が、完成した状態となっている。更に、その後のステップＳ１０の処理によって、経路６１の３番目のレコードに「C000，C002」が格納された状態となる。勿論、このときには未だ図示の“C005”は、格納されていない。
【００８３】
そして、３つ目の経路の探索が終了したときには、経路６１は図５（ｂ）に示す状態となっており、上記の通りステップＳ１２の処理によって、これが経路７１にコピーされることになる。
【００８４】
尚、勿論、これは一例であり、例えば経路６１を経路７１にコピーする処理は、経路毎試験データ抽出部１２が実行してもよい。
そして、経路毎試験データ抽出部１２は、各経路７１に基づいて、各経路毎試験データ７２を生成する。これは、単純に、各経路７１毎に、その経路の要素（接点）の数に応じて、全てが‘１’であるパターンと、何れか１つの要素のみが‘０’となるパターン全てとを、生成するものである。よって、図示のように、要素数が４個であれば５個のパターンが生成され、要素数が３個であれば４個のパターンが生成されることになる。
【００８５】
これによって、図６（ａ）に示す例の場合、各レコード毎に、図示の経路７１の内容に応じて、図示の内容の経路毎試験データ７２が生成されることになる。そして、この様に生成された経路７１、経路毎試験データ７２等に基づいて、例えば図６（ｂ）に示す試験データ８０が生成されるものであるが、これについては既に説明済みであり、ここでは説明しない。
【００８６】
何れにしても、例えば図２に示す例のラダー図プログラムの場合、例えば図６（ｂ）に示す試験データ８０が生成されることになる。
例えば図２に示す例のラダー図プログラムの場合、接点の数が７個あるので、従来であれば２７＝１２８種類のテストデータが必要であった。これに対して、本例のラダー図試験データ作成装置１０によればテストデータは図６（ｂ）に示すように１４種類だけで済むことになる。更に、図６（ｂ）に示す試験データは、上述した必要にして十分な条件を満たしている。すなわち、課題で述べたように、仮に１０個の入力条件がすべて直列（ＡＮＤ条件）で使用されている場合、実際の試験データは全ての条件が成立（ＯＮ）している試験パターン（１種類）と、どれか一つだけ条件が成立していない試験パターン（１０種類）の合計１１種あれば十分である。これと同様に、図２に示す例のラダー図プログラムの場合、試験パターンは図６（ｂ）に示す１４種類だけで十分である。
【００８７】
この様に、本例のラダー図試験データ作成装置１０によれば、任意のラダー図プログラムに応じた試験データの自動作成を行える装置であって、特に必要にして十分な試験データを作成でき以って試験データ数を削減できる。
【００８８】
また、実際にプログラムを操作させる環境なしにラダー図の機能検証（回路の不動作検出・動作網羅率）を容易に行うことができる。
尚、最後に、図７（ａ）にＡＮＤの真偽表、図７（ｂ）にＯＲの真偽表を示しておく。尚、これらはよく知られたものであるので、ここでは特に説明しないが、図示のｘは、“Don’t Care”を意味するものである。つまり、ＡＮＤ条件の場合には、複数の入力のなかの１つでも‘０’であれば、残りの入力が何であっても結果は‘０’となる。一方、ＯＲ条件の場合、複数の入力のなかの１つでも‘１’であれば、残りの入力が何であっても結果は‘１’となる。
【００８９】
ここで、上記図１に示す各種機能部は、換言すれば、下記のように言うこともできるものである。
すなわち、まず、上記ラダー図格納部２１は、例えば、試験データ作成対象のラダー図プログラムの各要素間の接続関係を示す情報が含まれる要素情報を記憶するものと言うこともできる。この要素情報の一例が、上記セル一覧３０と点一覧４０であるが、これらの例に限るものではない。
【００９０】
尚、上記の通り、“要素”には、上記セル（左母線、接点、コイル等）が含まれるが、更に上記接続点も含まれると見做してもよい。上記の通り、接続点の情報は、任意のセル間の接続に係わる情報であり、分岐を示す情報も含まれていてもよい。
【００９１】
また、上記経路抽出部１１は、上記要素情報に基づいて、左母線からコイルに至る経路を全て抽出する処理部と言うこともできる。上記の通り、図２の例の場合は、図３に示す３つの経路が抽出されることになる。
【００９２】
また、上記経路毎試験データ抽出部１２は、上記抽出した各経路毎に、その経路上の各接点のＯＮ／ＯＦＦパターンである経路毎試験パターンを生成する処理部と言うことができる。これは、例えば、各経路毎に、その経路上の全接点がＯＮとなる経路毎試験パターンを１つ生成すると共に、その経路上の何れか１つの接点のみがＯＦＦとなる経路毎試験パターンを該経路上の接点の数の分だけ生成するものである。図２の例の場合、図６（ａ）の経路毎試験データ７２に示す複数の経路毎試験パターンが生成されることになる。つまり、図６（ａ）に示す１つ目と２つ目の経路に関しては、それぞれ、５つの経路毎試験パターンが生成され、３つ目の経路に関しては４つの経路毎試験パターンが生成される。従って合計で１４の経路毎試験パターンが生成されることになる。
【００９３】
また、上記試験データ生成部１３は、上記各経路毎試験データに基づいて、試験データ作成対象のラダー図プログラムの試験データを生成する処理部と言うことができる。これは、例えば、各経路毎に、その経路に係わる各経路毎試験パターン毎に、該経路毎試験パターンに対してその経路上に無い接点は全てＯＦＦとするパターンを組み合わせることで、試験パターンを生成し、該生成した試験パターン群を上記試験データとするものである。これは、例えば図６（ｂ）に示す試験データ８３を生成するものである。
【００９４】
また、上記経路抽出部１１は、例えば、経路の探索中に分岐を検出する毎に左母線から該分岐までの経路である途中経路情報をスタック記憶部にスタックする。そして、探索対象がコイルに至ることで１つの経路を抽出完了する毎に、上記スタック記憶部に上記途中経路情報がスタックされている場合には該途中経路情報の１つを取り出して、該途中経路情報を用いて次の経路の探索を開始する。
【００９５】
尚、上記スタック記憶部の一例が上記途中経路記憶部２２である。
また、上記試験データ比較部１４は、上記試験データ生成部１３で生成された試験データと上記事前試験データとを比較することで、該試験データの網羅度を算出するものと言える。
【符号の説明】
【００９６】
１０  ラダー図試験データ作成装置
１１  経路抽出部
１２  経路毎試験データ抽出部
１３  試験データ生成部
１４  試験データ比較部
２１  ラダー図格納部
２２  途中経路記憶部
２３  経路記憶部
２４  経路毎試験データ記憶部
２５  試験データ記憶部
２６  事前試験データ記憶部
３０  セル一覧
３１  種類
３２  名前
３３  左
３４  右
４０  点一覧
４１  ＩＤ
４２  座標
４３  分岐
４４  接続情報
５１  分岐位置
５２  経路
６１  経路
７１  経路
７２  経路毎試験データ
８１  経路
８２  経路毎試験データ
８３  試験データ
【図１】
2015149004.tif 000003
【図２】
2015149004.tif 000004
【図３】
2015149004.tif 000005
【図４】
2015149004.tif 000006
【図５】
2015149004.tif 000007
【図７】
2015149004.tif 000008
【図８】
2015149004.tif 000009
【図６】
2015149004.tif 000010