(57)【要約】解析条件設定操作部と、変数依存関係抽出部と、変数依存関係表示処理部とを備え、前記解析条件設定操作部は、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスに係る第１の条件、又はさらなる前向き又は後向きのデバイス依存関係を抽出するデバイスに係る第２の条件を設定し、前記変数依存関係抽出部は、前記第１の条件に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出しないように、且つ前記第２の条件に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出するように、前記ラダープログラムから設定された起点を起点として前向き又は後向きのデバイス依存関係を抽出して、第１の抽出結果を生成し、前記変数依存関係表示処理部は、前記第１の抽出結果に従って、デバイス依存関係を表示する。
2014097379.tif 000002
【特許請求の範囲】
【請求項１】
解析対象となるラダープログラムを設定するとともに、抽出したい依存関係の起点を設定する解析条件設定操作部と、
前記ラダープログラムから前向き又は後向きのデバイス依存関係を抽出する変数依存関係抽出部を有する解析処理実行部と、
前記抽出されたデバイス依存関係を表示する変数依存関係表示処理部を有する解析結果表示処理部と、
前記ラダープログラムを表示する回路表示処理部と、
を備え、
前記解析条件設定操作部は、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスに係る第１の条件、又はさらなる前向き又は後向きのデバイス依存関係を抽出するデバイスに係る第２の条件を設定し、
前記変数依存関係抽出部は、前記第１の条件に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出しないように、且つ前記第２の条件に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出するように、前記ラダープログラムから前記設定された起点を起点として前向き又は後向きのデバイス依存関係を抽出して、第１の抽出結果を生成し、
前記変数依存関係表示処理部は、前記第１の抽出結果に従って、デバイス依存関係を表示する
ことを特徴とするプログラム解析支援装置。
【請求項２】
前記回路表示処理部は、前記第１の抽出結果に従って表示されたデバイス依存関係の中から１つのデバイスが指定されたとき、前記指定されたデバイスをコイル出力するラダー回路を選択的に表示する、又は、前記第１の抽出結果に従ったデバイス依存関係の全体を表示しつつ前記指定されたデバイスをコイル出力するラダー回路を選択的に表示する
ことを特徴とする請求項１に記載のプログラム解析支援装置。
【請求項３】
前記変数依存関係抽出部は、前記第１の抽出結果に従ったデバイス依存関係における終点デバイスについて、別途、前記終点デバイスを起点としたデバイス依存関係を抽出して、第２の抽出結果を生成し、
前記変数依存関係表示処理部は、前記解析条件設定操作部により設定された起点を起点とするデバイス依存関係を、前記第１の抽出結果及び前記第２の抽出結果に基づいて、２以上のデバイス依存関係に分割して表示する
ことを特徴とする請求項１に記載のプログラム解析支援装置。
【請求項４】
前記変数依存関係表示処理部は、前記第１の抽出結果に従って、デバイス依存関係の起点と終点とについて表示するとともに、前記起点と前記終点との中間点である途中のデバイスについて、展開表示操作に従って表示し、折りたたみ表示操作指示に従って表示を省略する
ことを特徴とする請求項１に記載のプログラム解析支援装置。
【請求項５】
前記解析処理実行部は、
前記第１の条件を設定する際の参考情報として供するように、前記ラダープログラムからデバイスについて、複数のラダー行で接点として参照使用されている回数、又は、１つのラダー行でいくつの接点から制御依存を受けているのかを示す回数に関するヒストグラムを抽出する変数使用状況抽出部をさらに有し、
前記解析結果表示処理部は、
前記抽出されたヒストグラムを表示する変数使用状況表示処理部をさらに有する
ことを特徴とする請求項１に記載のプログラム解析支援装置。
【請求項６】
請求項１に記載のプログラム解析支援装置と、
前記ラダープログラムにおいて異常発生が検出されたときに、前記異常発生を表示する異常発生表示処理部と、
前記異常発生表示処理部により表示される異常発生のうち１つの異常発生が選択されたとき、前記選択された異常発生を出力するデバイスを抽出したい依存関係の起点として設定し、得られたデバイス依存関係を表示するように、前記プログラム解析支援装置を制御する制御部と、
を備えたことを特徴とする制御装置。
【請求項７】
前記制御装置は、前記ラダープログラムにおいて異常発生が検出されたときに、前記異常発生を出力するデバイスに係るメモリをダンプして保持する異常発生時メモリダンプ処理部をさらに備え、
前記制御部は、前記異常発生表示処理部により表示される異常発生のうち１つの異常発生が選択されたとき、前記選択された異常発生を出力するデバイスを抽出したい依存関係の起点として設定するとともに、前記選択された異常発生を出力するデバイスに係る条件として前記選択された異常発生を出力するデバイスに関する前記異常発生時メモリダンプ処理部の保持内容を参酌してさらなる前向き又は後向きのデバイス依存関係を抽出することを指定し、得られたデバイス依存関係を表示するように、前記プログラム解析支援装置を制御する
ことを特徴とする請求項６に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム解析支援装置及び制御装置に関する。
【背景技術】
【０００２】
ラダープログラムについて、コントローラが正しく動作しているかどうかをデバッグするための機能として、サンプリングトレース機能が知られている。サンプリングトレース機能とは、指定されたタイミングで指定されたデバイスの状態を示すデータ（トレースデータ）を一定の周期（サンプリング周期）で取得（サンプリング）し、取得したトレースデータを所定のメモリ（サンプリングトレースメモリ）に格納するものである。サンプリングトレースの詳細については、非特許文献１〜２に記載されている。【０００３】
ここで言うデバイスとは、ＰＣの計測監視制御対象とＰＣとの間の入出力を、ＰＣのメモリアドレスに割り付けたもの、および、ＰＣが内部的に使用するメモリアドレスを指している。例えば非特許文献１〜２に記載のＰＣでは、入力を割り付けたものをＸデバイス、出力を割り付けたものをＹデバイス、内部的に使用するビットデータ（内部リレー）をＭデバイス、通信に使用するものをＢデバイス、エラーの発生を示すものをＦデバイス、などというようにデータ種別によってデバイス文字が予め決められている。各デバイスのアドレスは、ＸデバイスやＹデバイスやＢデバイスなどについては１６進表現で、ＭデバイスやＦデバイスなどについては１０進表現となっている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１０／０９５２８９号
【非特許文献】
【０００５】
【非特許文献１】「ＱＣＰＵユーザーズマニュアル（機能解説・プログラム基礎編）」三菱電機株式会社、マニュアル番号ＳＨ−０８０４７３
【非特許文献２】「ＧＸ  Ｄｅｖｅｌｏｐｅｒ  Ｖｅｒｓｉｏｎ８  オペレーティングマニュアル」三菱電機株式会社、マニュアル番号ＳＨ−０８０３５６
【非特許文献３】「プログラムスライシング技術と応用」  下村隆夫著  共立出版  ＩＳＢＮ４−３２０−０２７４３−４
【非特許文献４】「三菱数値制御装置ＰＬＣプログラミング説明書」三菱電機株式会社、マニュアル番号ＩＢ−１５０００３５−Ｆ
【発明の概要】
【発明が解決しようとする課題】
【０００６】
不具合動作の原因と疑われるデバイスについて、サンプリングトレースを行い、その内容をタイミングチャートとして表示するなどして解析すれば、不具合動作の原因特定が期待される。しかしながら、一度にサンプリングトレースできるメモリサイズには限りがある。【０００７】
それについて、本発明者は、検討を行い、２つの問題点があることを見出した。第１の問題点として、一度にサンプリングトレースできるメモリサイズには限りがあるので、不具合動作の原因と疑われるデバイスを絞り込む必要がある。また、第２の問題点として、実質的に不具合原因の特定に直接的に寄与しないもの（例えば、デバイスの動作）を多く含んでサンプリングトレースしてしまうことがある。【０００８】
第１の問題点を解決する技術として、非特許文献３に記載のスライシング技術がある。すなわち、ラダープログラムに於いては、デバイス（変数）の依存関係（の有向グラフ）を抽出することである。デバイスの依存関係（の有向グラフ）を利用することで、プログラム中から、不具合動作の原因と疑われるデバイスを絞り込むことが可能となる。【０００９】
しかしながら、近年、ラダープログラムが大規模かつ複雑になりつつあり、依存関係（の有向グラフ）を利用してもなお、不具合動作の原因と疑われるデバイスを絞り込むことが困難になっている。【００１０】
それに対して、特許文献１には、複数の解析条件（解析コマンド、解析対象等）を自由に組み合わせてプログラム解析を行うことが記載されている。これにより、特許文献１によれば、プログラム解析の結果に基づいて、編集対象となる場所を迅速に特定することが可能となるとされている。【００１１】
すなわち、特許文献１に記載の技術を利用すれば、依存関係（の有向グラフ）どうしの論理演算ＡＮＤ／ＯＲ／ＮＯＴを行うことで、巨大で複雑な依存関係（の有向グラフ）から、より深く解析条件に合致する依存関係（の有向グラフ）だけを抽出することが可能となるようにも考えられる。【００１２】
一方、デバッグ作業は、ＰＣが組み込まれた生産設備を使って行われる。前述のとおり、パーソナルコンピュータとＰＣとを接続してデバッグ作業が行われるほか、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業が行われる。【００１３】
特許文献１に記載の技術を利用するためには、複数の解析条件を自由に組み合わせて指定するための高度なユーザインタフェースが必要となる。よって、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業が行われる場合には、これら限られたユーザインタフェースの範囲内で、解析条件を自由に組み合わせて指定するための操作方法を実現せざるをえないため、パーソナルコンピュータの場合に比べ、格段に操作数が多くなり、かえって手間となってしまう可能性がある。【００１４】
例えば、特許文献１に記載の技術では、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業を行う場合に、格段に操作数が多いために、操作ミスを誘発しやすく、適正に解析条件が組み合わされない可能性があり、不具合動作の原因と疑われるデバイスを絞り込むことが困難になりやすい。結果として、第１の問題点が未解決のままとなる。【００１５】
また、特許文献１には、不具合の再現性について一切記載がなく、再現性の低い不具合への対処について不具合に深く関係する依存関係をどのように抽出するのかについても一切記載がない。すなわち、第２の問題点も依然として未解決のままである。【００１６】
本発明は、上記に鑑みてなされたものであって、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業を行う場合に、巨大で複雑な依存関係（の有向グラフ）から不具合に深く関係する依存関係（の有向グラフ）を少ない操作数で抽出して表示できるプログラム解析支援装置を得ることを目的とする。
【課題を解決するための手段】
【００１７】
上述した課題を解決し、目的を達成するために、本発明の１つの側面にかかるプログラム解析支援装置は、解析対象となるラダープログラムを設定するとともに、抽出したい依存関係の起点を設定する解析条件設定操作部と、前記ラダープログラムから前向き又は後向きのデバイス依存関係を抽出する変数依存関係抽出部を有する解析処理実行部と、前記抽出されたデバイス依存関係を表示する変数依存関係表示処理部を有する解析結果表示処理部と、前記ラダープログラムを表示する回路表示処理部とを備え、前記解析条件設定操作部は、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスに係る第１の条件、又はさらなる前向き又は後向きのデバイス依存関係を抽出するデバイスに係る第２の条件を設定し、前記変数依存関係抽出部は、前記第１の条件に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出しないように、且つ前記第２の条件に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出するように、前記ラダープログラムから前記設定された起点を起点として前向き又は後向きのデバイス依存関係を抽出して、第１の抽出結果を生成し、前記変数依存関係表示処理部は、前記第１の抽出結果に従って、デバイス依存関係を表示することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、第１の条件又は第２の条件を用いることで、デバイス依存関係の方向性を利用してデバイス依存関係を効率的に絞り込むことができる。この結果、多数の解析条件（解析コマンド、解析対象等）を組み合わせて指定せずとも、巨大で複雑な依存関係（の有向グラフ）から、不具合に深く関係する依存関係（の有向グラフ）だけを抽出することが可能となる。すなわち、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業を行う場合に、巨大で複雑な依存関係（の有向グラフ）から不具合に深く関係する依存関係（の有向グラフ）を少ない操作数で抽出して表示できる。
【図面の簡単な説明】
【００１９】
【図１】図１は、実施の形態１にかかるプログラム解析支援装置のハードウェア構成を示す図である。
【図２】図２は、実施の形態１にかかるプログラム解析支援装置の機能構成を示す図である。
【図３】図３は、実施の形態１における解析条件設定操作部の構成を示す図である。
【図４】図４は、実施の形態１における前向き依存関係抽出結果に対応した有向グラフを示す図である。
【図５】図５は、実施の形態１におけるラダープログラムの構成を示す図である。
【図６】図６は、実施の形態１におけるデバイス種別を考慮した前向き解析条件設定例を示す図である。
【図７】図７は、実施の形態１におけるデバイス種別を考慮した前向き依存関係抽出結果例に対応した有向グラフを示す図である。
【図８】図８は、実施の形態１におけるデバイス種別を考慮した後向き解析条件設定例を示す図である。
【図９】図９は、実施の形態１における依存関係グラフ表示から当該部分に係るラダー回路を表示する例を示す図である。
【図１０】図１０は、実施の形態１におけるデバイス種別を考慮した依存関係の抽出処理を示すフローチャートである。
【図１１】図１１は、実施の形態１におけるデバイス種別を考慮した前向き解析条件設定例を示す図である。
【図１２】図１２は、実施の形態１におけるデバイス種別を考慮した依存関係の抽出処理を示すフローチャートである。
【図１３】図１３は、実施の形態２における参照回数を考慮した前向き解析条件設定例を示す図である。
【図１４】図１４は、実施の形態２における参照回数を考慮した前向き依存関係抽出結果例を示す図である。
【図１５】図１５は、実施の形態２における参照回数を考慮した依存関係の抽出処理を示すフローチャートである。
【図１６】図１６は、実施の形態２における解析条件設定操作部を示す図である。
【図１７】図１７は、実施の形態２における使用状況抽出結果を示す図である。
【図１８】図１８は、実施の形態３におけるラダープログラムの構成を示す図である。
【図１９】図１９は、実施の形態３における後向き依存関係抽出結果を示す図である。
【図２０】図２０は、実施の形態３における解析条件設定操作部を示す図である。
【図２１】図２１は、実施の形態３におけるラダー１行中の制御依存回数を考慮した後向き依存関係抽出結果を示す図である。
【図２２】図２２は、実施の形態３におけるラダー１行中の制御依存回数を考慮した依存関係の抽出処理を示すフローチャートである。
【図２３】図２３は、実施の形態４における自己保持を示す図である。
【図２４】図２４は、実施の形態４における自己保持デバイスを考慮した前向き解析条件設定例を示す図である。
【図２５】図２５は、実施の形態４における自己保持デバイスを考慮した依存関係の抽出処理を示すフローチャートである。
【図２６】図２６は、実施の形態５における得られた依存関係の終点を自動的に新たな起点とする抽出処理を示すフローチャートである。
【図２７】図２７は、実施の形態５における前向き依存関係抽出結果を示す図である。
【図２８】図２８は、実施の形態７におけるＡ接点を考慮した依存関係の抽出処理を示すフローチャートである。
【図２９】図２９は、実施の形態８における解析条件設定操作部を示す図である。
【図３０】図３０は、実施の形態８におけるデバイスメモリダンプを示す図である。
【図３１】図３１は、実施の形態８におけるラダープログラムの構成を示す図である。
【図３２】図３２は、実施の形態８における後向き依存関係抽出結果を示す図である。
【図３３】図３３は、実施の形態８におけるデバイスメモリダンプを考慮した依存関係の抽出処理を示すフローチャートである。
【図３４】図３４は、実施の形態９における依存関係抽出結果を示す図である。
【図３５】図３５は、実施の形態９における依存関係表示を示す図である。
【図３６】図３６は、実施の形態１０におけるハードウェア構成を示す図である。
【図３７】図３７は、実施の形態１０における異常発生表示からその原因特定のための依存関係を表示する例を示す図である。
【発明を実施するための形態】
【００２０】
以下に、本発明にかかるプログラム解析支援装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００２１】
実施の形態１．
実施の形態１にかかるプログラム解析支援装置１について説明する。
【００２２】
プログラム解析支援装置１は、プログラマブルコントローラ（以下「ＰＣ」と言う。）、モーションコントローラ（以下「ＭＣ」と言う。）、数値制御装置コントローラ（以下「ＮＣ」と言う。）、検査装置コントローラ、又は表示器（以下「ＧＯＴ」と言う。）等の各種の産業用のコントローラ、制御装置、或いは、マイクロコンピュータに於いて実行されるラダープログラムに関して、開発した新しいラダープログラムの動作不具合の発生原因を探索するデバッグ作業を、効率化するための装置である。以下に於いては、ＰＣを例として記載する。
【００２３】
ＰＣは、ラダープログラム（計測制御プログラム）を実行して、計測制御対象の状態を把握したり、又は、動作を計測制御対象に指示したりする。ラダープログラムの作成には、所定のラダープログラム作成支援装置（計測制御プログラム作成支援装置）が用いられる。ラダープログラム作成支援装置は、一般的にはパーソナルコンピュータ上で動作するソフトウェアツールとして提供され、ＰＣが計測制御対象を計測したり又は制御したりする際に用いられるプログラムであるラダープログラムの編集を支援する機能を有している。その他にも、ラダープログラム作成支援装置は、パーソナルコンピュータとＰＣとを接続して、編集したラダープログラムをＰＣへ転送したり、計測制御対象の状態又はラダープログラムの実行によって変化する変数（以下「デバイス」と言う。）の値の状態を監視したりする機能をも有している。
【００２４】
なお、ラダープログラム作成支援装置が提供するプログラム編集機能及び監視機能は、ＧＯＴ上にも搭載されており、ＰＣと常時接続状態にあるＧＯＴ上からもラダープログラムの編集又はデバイスの値の状態の監視を行うことが出来る。
【００２５】
ラダープログラムについて、コントローラが正しく動作しているかどうかをデバッグするための機能として、サンプリングトレース機能が知られている。サンプリングトレース機能とは、指定されたタイミングで指定されたデバイスの状態を示すデータ（トレースデータ）を一定の周期（サンプリング周期）で取得（サンプリング）し、取得したトレースデータを所定のメモリ（サンプリングトレースメモリ）に格納するものである。
【００２６】
ここで言うデバイスとは、ＰＣの計測監視制御対象とＰＣとの間の入出力を、ＰＣのメモリアドレスに割り付けたもの、および、ＰＣが内部的に使用するメモリアドレスを指している。例えば、ＰＣでは、入力を割り付けたものをＸデバイス、出力を割り付けたものをＹデバイス、内部的に使用するビットデータ（内部リレー）をＭデバイス、通信に使用するものをＢデバイス、エラーの発生を示すものをＦデバイス、などというようにデータ種別によってデバイス文字が予め決められている。各デバイスのアドレスは、例えば、ＸデバイスやＹデバイスやＢデバイスなどについては１６進表現で、ＭデバイスやＦデバイスなどについては１０進表現となっている。
【００２７】
不具合動作の原因と疑われるデバイスについて、サンプリングトレースを行い、その内容をタイミングチャートとして表示するなどして解析すれば、不具合動作の原因特定が期待される。しかしながら、一度にサンプリングトレースできるメモリサイズには限りがある。
【００２８】
それについて、本発明者は、検討を行い、２つの問題点があることを見出した。
【００２９】
第１の問題点として、一度にサンプリングトレースできるメモリサイズには限りがあるので、不具合動作の原因と疑われるデバイスを絞り込む必要がある。
【００３０】
また、第２の問題点として、実質的に不具合原因の特定に直接的に寄与しないもの（例えば、デバイスの動作）を多く含んでサンプリングトレースしてしまうことがある。例えば、再現性の低い不具合、すなわち、いつ発生するか予測不能な不具合動作についてサンプリングトレースを行いたい場合には、サンプリング周期を長くすることで、サンプリング実施時間を長くする対処が考えられるが、サンプリング周期を長くすれば、実質的に不具合原因の特定に直接的に寄与しないものを多く含んでサンプリングトレースしてしまい、不具合動作について詳細な動作の解析が困難になる可能性がある。
【００３１】
第１の問題点を解決する技術として、スライシング技術が考えられる。すなわち、ラダープログラムに於いては、デバイス（変数）の依存関係（の有向グラフ）を抽出することである。
【００３２】
例えば、ラダープログラムは、複数のラダー行を含む（図５参照）ものである。ラダープログラムは、各ラダー行を左から右に読むように、複数のラダー行を上から下に読むように、構成されている。各ラダー行の演算結果は、コイル出力に格納されるとともに、後続のラダー行で入力として扱われることがある（図５参照）。言い換えると、ラダープログラムでは、左から右に、且つ、上から下に、シーケンシャルに処理が行われる。
【００３３】
前向きの依存関係は、あるデバイスの値が変化することによって影響を受ける他のデバイスを抽出し、さらにそれらデバイスによって影響を受ける他のデバイスを抽出してゆくことで、あるデバイスの値が変化することによって影響を受ける全てのデバイスを抽出するものである。すなわち、前向きの依存関係は、シーケンシャルな処理の方向に沿って依存関係をたどっていくものである。そうして抽出されたデバイス群は、有向グラフを構成する（図４参照）。
【００３４】
後向きの依存関係は、あるデバイスの値の変化に影響を与える他のデバイスを抽出し、さらにそれらデバイスに影響を与える他のデバイスを抽出してゆくことで、あるデバイスの値の変化に影響を与える全てのデバイスを抽出するものである。すなわち、後向きの依存関係は、シーケンシャルな処理の方向と逆に依存関係を遡ってたどっていくものである。そうして抽出されたデバイス群は、有向グラフを構成する（図４参照）。
【００３５】
このようなデバイスの依存関係（の有向グラフ）を利用することで、ラダープログラム中から、不具合動作の原因と疑われるデバイスをある程度絞り込むことが可能となる。
【００３６】
しかしながら、近年、ラダープログラムが大規模かつ複雑になりつつあり、依存関係（の有向グラフ）を利用してもなお、不具合動作の原因と疑われるデバイスを要求レベルまで絞り込むことが困難になっている。なぜならば、近年のラダープログラムにおいては、あるデバイスの値が変化することによって影響を受けるデバイスの数が膨大であり、あるいは、あるデバイスの値の変化に影響を与えるデバイスの数が膨大であり、抽出した依存関係（の有向グラフ）が巨大で複雑なものとなり、それだけでは実質的に要求レベルまでデバイスを絞り込めない可能性が高いからである。
【００３７】
それに対して、仮に、多数の解析条件（解析コマンド、解析対象等）を自由に組み合わせてプログラム解析を行う場合を考える。この場合、依存関係（の有向グラフ）どうしの論理演算ＡＮＤ／ＯＲ／ＮＯＴを多数行うことで、巨大で複雑な依存関係（の有向グラフ）から、より深く解析条件に合致する依存関係（の有向グラフ）だけを抽出すること、すなわち不具合動作の原因と疑われるデバイスを要求レベルまで絞り込むことが可能となるようにも考えられる。
【００３８】
一方、デバッグ作業は、ＰＣが組み込まれた生産設備を使って行われる。前述のとおり、パーソナルコンピュータとＰＣとを接続してデバッグ作業が行われるほか、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業が行われる。
【００３９】
多数の解析条件（解析コマンド、解析対象等）を自由に組み合わせてプログラム解析を行うためには、多数の解析条件を自由に組み合わせて指定するための高度なユーザインタフェースが必要となる。よって、パーソナルコンピュータとＰＣとを接続してデバッグ作業を行う場合には、キーボード、マウス、高解像度ディスプレイにより、あるいはそれらがタッチパネル式となっているものにより、高度なユーザインタフェースが実現されうるため問題ないが、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業が行われる場合には、これら限られたユーザインタフェースの範囲内で、多数の解析条件を自由に組み合わせて指定するための操作方法を実現せざるをえないため、パーソナルコンピュータの場合に比べ、格段に操作数が多くなり、かえって手間となってしまう可能性がある。
【００４０】
すなわち、多数の解析条件（解析コマンド、解析対象等）を自由に組み合わせてプログラム解析を行う場合、例えば、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業を行うと、格段に操作数が多いために、操作ミスを誘発しやすく、適正に解析条件が組み合わされない可能性があり、不具合動作の原因と疑われるデバイスを要求レベルまで絞り込むことが困難になりやすい。結果として、第１の問題点が未解決のままとなる。
【００４１】
また、多数の解析条件（解析コマンド、解析対象等）を自由に組み合わせてプログラム解析を行う場合、再現性の低い不具合については、不具合動作がいつ発生するのか予測不能であるため、多数の解析条件を想定することも困難である。すなわち、第２の問題点も依然として未解決のままである。
【００４２】
そこで、実施の形態１では、まず、第１の問題点の解決を目指し、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業を行う場合に、巨大で複雑な依存関係（の有向グラフ）から不具合に深く関係する依存関係（の有向グラフ）を少ない操作数で選択的に抽出するための仕組みを提案する。
【００４３】
具体的には、プログラム解析支援装置１は、図１に示すようなハードウェア構成を備える。図１は、プログラム解析支援装置１のハードウェア構成を示す図である。
【００４４】
プログラム解析支援装置１は、マイクロプロセッサ２、データ格納メモリ３、表示部４、入力部５、保存部６、及びシステムバス７を備える。マイクロプロセッサ２、データ格納メモリ３、表示部４、入力部５、及び保存部６は、システムバス７を介して互いに接続されている。
【００４５】
マイクロプロセッサ２は、プログラム解析支援装置１の各部を全体的に制御し、プログラム解析支援装置１の各機能を実行する。
【００４６】
データ格納メモリ３は、マイクロプロセッサ２による制御のもと、データを一時的に格納する。データ格納メモリ３は、例えば、マイクロプロセッサ２による作業領域となるワーク領域３ａを有している。データ格納メモリ３は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）より成る。
【００４７】
表示部４は、マイクロプロセッサ２による制御のもと、所定の情報を表示画面４ａ上に表示する。表示部４は、例えば、生産設備が備える表示器であってもよい。表示器は、例えば、液晶ディスプレイ等を有する。あるいは、表示部４は、例えば、ディスプレイ装置であってもよい。ディスプレイ装置は、例えば、液晶ディスプレイ等を有する。
【００４８】
入力部５は、操作ボタン５ａ等を介して、ユーザから所定の指示を受け付ける。操作ボタン５ａは、例えば、生産設備が備える操作ボタンである。操作ボタン５ａは、例えば、生産設備が備える表示器の表示画面４ａ上にボタンオブジェクト及びタッチパネルとして実現されていてもよい。あるいは、例えば、入力部５は、操作ボタン５ａ等を有する入力装置であってもよい。操作ボタン５ａは、例えば、入力装置に設けられた物理的なボタンであってもよい。
【００４９】
保存部６は、例えば、解析対象のラダープログラム及びプログラム解析支援装置１の各機能を実現するためのプログラム解析支援用プログラム６ａ等のプログラム及び解析結果等のデータ６ｂをそれぞれファイルとして記憶・保持する。保存部６は、例えば、ハードディスク等の記憶装置より成る。
【００５０】
また、プログラム解析支援装置１は、図２に示すような機能構成を備える。図２は、プログラム解析支援装置１の機能構成を示す図である。
【００５１】
プログラム解析支援装置１は、例えば、プログラム解析支援用プログラムがマイクロプロセッサ２により実行されることで、図２に示すような機能構成がプログラム解析支援装置１内（例えば、データ格納メモリ３におけるワーク領域３ａ内）に形成される。なお、プログラム解析支援装置１の各機能部は、プログラム解析支援用プログラムの実行開始に応じて一括して形成されてもよいし、プログラム解析支援用プログラムの実行状況に応じて順次に形成されてもよい。
【００５２】
具体的には、プログラム解析支援装置１は、解析条件設定操作部９、解析処理実行部１３、解析結果表示処理部１０、及び回路表示処理部１９を備える。
【００５３】
ラダープログラム１６に対するプログラム解析を行う場合には、ユーザは、入力部５の操作ボタン５ａ等を操作し、プログラム解析条件を入力するユーザ操作８を行う。解析条件設定操作部９は、ユーザ操作８に対応する指示に応じて、プログラム解析条件を設定して解析処理実行部１３へ供給する。
【００５４】
例えば、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起動指示に応じて、プログラム解析支援用プログラムの起動指令を生成して解析処理実行部１３へ供給する。
【００５５】
例えば、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられたプログラム設定指示に応じて、解析対象となるラダープログラム１６を設定する。プログラム設定指示は、解析対象となるラダープログラム１６を設定させる指示である。解析条件設定操作部９は、設定されたラダープログラム１６の情報を解析処理実行部１３へ供給する。
【００５６】
また、例えば、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起点設定指示に応じて、抽出したい依存関係の起点を設定する。起点設定指示は、抽出したい依存関係の起点を設定させる指示である。解析条件設定操作部９は、設定された、抽出したい依存関係の起点の情報を解析処理実行部１３へ供給する。
【００５７】
また、解析条件設定操作部９は、第１の条件及び第２の条件のいずれか一方を設定する。第１の条件は、さらなる前向き又は後向きのデバイス依存関係を抽出しないものとするデバイスに係る条件である。第２の条件は、さらなる前向き又は後向きのデバイス依存関係を抽出するものとするデバイスに係る条件である。第１の条件及び第２の条件の詳細は、後述する。
【００５８】
例えば、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた第１の条件設定指示に応じて、第１の条件を設定する。第１の条件設定指示は、第１の条件を設定させる指示である。解析条件設定操作部９は、設定された第１の条件の情報を解析処理実行部１３へ供給する。
【００５９】
あるいは、例えば、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた第２の条件設定指示に応じて、第２の条件を指定する。第２の条件設定指示は、第２の条件を設定させる指示である。解析条件設定操作部９は、設定された第２の条件の情報を解析処理実行部１３へ供給する。
【００６０】
解析処理実行部１３は、プログラム解析支援用プログラムの起動指令を解析条件設定操作部９から受ける。解析処理実行部１３は、プログラム解析支援用プログラムの起動指令に応じて、保存部６に保持されているプログラム解析支援用プログラムを読み出す。
【００６１】
また、解析処理実行部１３は、プログラム解析条件の設定結果を解析条件設定操作部９から受ける。解析処理実行部１３は、プログラム解析条件の設定結果に応じて、プログラム解析処理を実行して、プログラム解析処理の結果、すなわち解析結果を解析結果表示処理部１０へ供給する。
【００６２】
例えば、解析処理実行部１３は、変数使用状況抽出部１４及び変数依存関係抽出部１５を有する。変数使用状況抽出部１４は、例えば、解析条件設定操作部９を介して使用状況を抽出するよう指示された場合に、デバイスの使用状況を抽出する。変数使用状況抽出部１４は、デバイスの使用状況の抽出結果を生成して解析結果表示処理部１０へ供給する。
【００６３】
変数依存関係抽出部１５は、例えば、解析条件設定操作部９を介して依存関係を抽出するよう指示された場合に、デバイスの依存関係を抽出する。すなわち、変数依存関係抽出部１５は、ラダープログラム１６から前向き又は後向きのデバイス依存関係を抽出する。
【００６４】
このとき、変数依存関係抽出部１５は、解析条件設定操作部９を介して設定された第１の条件に合致するデバイスについて、さらなる前向き又は後向きのデバイス依存関係を抽出しないようにする。また、変数依存関係抽出部１５は、解析条件設定操作部９を介して設定された第２の条件に合致するデバイスについて、さらなる前向き又は後向きのデバイス依存関係を抽出するようにする。
【００６５】
なお、変数依存関係抽出部１５は、デバイス依存関係を抽出する際に、デバイスメモリダンプ１８の保持内容を参酌してもよい。
【００６６】
そして、変数依存関係抽出部１５は、デバイス依存関係の抽出結果、すなわち第１の抽出結果を生成して解析結果表示処理部１０へ供給する。
【００６７】
解析結果表示処理部１０は、プログラム解析処理の結果を解析処理実行部１３から受ける。解析結果表示処理部１０は、プログラム解析処理の結果を用いて表示情報を生成し、生成された表示情報に従って、プログラム解析処理の結果を表示部４の表示画面４ａ上に表示する。
【００６８】
例えば、解析結果表示処理部１０は、変数使用状況表示処理部１１及び変数依存関係表示処理部１２を有する。変数使用状況表示処理部１１は、例えば、デバイスの使用状況の抽出結果を変数使用状況抽出部１４から受ける。変数使用状況表示処理部１１は、デバイスの使用状況の抽出結果を用いて表示情報を生成し、生成された表示情報に従って、デバイスの使用状況の抽出結果を表示部４の表示画面４ａ上に表示する。例えば、変数使用状況表示処理部１１は、デバイスの使用状況の抽出結果をグラフにまとめたグラフ情報を生成し、グラフ情報に従って、デバイスの使用状況の抽出結果を表示部４の表示画面４ａ上にグラフの形態で表示する。これにより、表示画面４ａを閲覧したユーザは、デバイスの使用状況の抽出結果を視覚的に容易に把握することができる。
【００６９】
変数依存関係表示処理部１２は、例えば、デバイス依存関係の抽出結果、すなわち第１の抽出結果を変数使用状況抽出部１４から受ける。変数依存関係表示処理部１２は、第１の抽出結果を表示情報に変換し、変換された表示情報に従って、デバイス依存関係の抽出結果を表示部４の表示画面４ａ上に表示する。例えば、変数依存関係表示処理部１２は、デバイス依存関係の抽出結果を有向グラフ（図４、図７参照）にまとめた有向グラフ情報を生成し、有向グラフ情報に従って、デバイス依存関係の抽出結果を表示部４の表示画面４ａ上に有向グラフの形態で表示する。これにより、表示画面４ａを閲覧したユーザは、デバイス依存関係の抽出結果を視覚的に容易に把握することができる。
【００７０】
また、変数依存関係表示処理部１２は、例えば、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられたデバイス選択指示に応じて、選択されたデバイスを指定する。デバイス選択指示は、変数依存関係表示処理部１２により表示画面４ａ上に表示されたデバイス依存関係（例えば、有向グラフ）の中から１つのデバイスが選択されたとき、その選択されたデバイスを指定させる指示である。変数依存関係表示処理部１２は、指定されたデバイスの情報を回路表示処理部１９へ供給する。
【００７１】
回路表示処理部１９は、指定されたデバイスの情報を変数依存関係表示処理部１２から受ける。回路表示処理部１９は、指定されたデバイスに応じて、ラダー回路の表示情報を生成する。例えば、回路表示処理部１９は、指定されたデバイスをコイル出力するラダー回路の表示情報を生成する。
【００７２】
そして、例えば、回路表示処理部１９は、変数依存関係表示処理部１２により表示されたデバイス依存関係（例えば、有向グラフ）に代えて、指定されたデバイスをコイル出力するラダー回路を選択的に表示する（図９の右図参照）。
【００７３】
あるいは、例えば、回路表示処理部１９は、変数依存関係表示処理部１２により表示されたデバイス依存関係、すなわち抽出されたデバイス依存関係（例えば、有向グラフ）の全体を表示しつつ、指定されたデバイスをコイル出力するラダー回路を表示する（図９参照）。例えば、回路表示処理部１９は、抽出されたデバイス依存関係の全体の有向グラフと、指定されたデバイスをコイル出力するラダー回路とを、横に並べて表示する（図９参照）。あるいは、例えば、回路表示処理部１９は、抽出されたデバイス依存関係の全体の有向グラフを表示しつつ、その有向グラフの上に重なるように、指定されたデバイスをコイル出力するラダー回路を（例えば、表示画面４ａの中心に）表示する。
【００７４】
次に、解析条件設定操作部９の構成について図３を用いて説明する。図３は、解析条件設定操作部９の構成を示す図である。
【００７５】
解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起動指示に応じて解析処理実行部１３によりプログラム解析支援用プログラムが読み出された際に、解析処理実行部１３により展開された画面データを受ける。解析条件設定操作部９は、その画面データに従って、例えば図３に示すような解析条件設定操作画面９ａを表示画面４ａ上に表示する。解析条件設定操作部９は、例えば解析条件設定操作画面９ａを介してユーザ操作８を受け付ける。
【００７６】
例えば、図３は、プログラム解析支援装置１がデバイスの使用状況を抽出する機能とデバイスの依存関係を抽出する機能とを有している場合であって、ユーザがデバイスの依存関係を抽出する機能を選択して指定している場合を示している。さらに、デバイスの依存関係を抽出する機能の場合には、前向きの依存関係を抽出するのか、後向きの依存関係を抽出するのかを指定し、そして解析処理の起点を指定する。図３では、前向きを指定し、起点として入力デバイスＸ１を指定している場合を示している。
【００７７】
具体的には、解析条件設定操作画面９ａは、解析選択欄９ａ１，９ａ２、実行ボタン９ａ３、キャンセルボタン９ａ４、向き指定欄９ａ５、起点指定欄９ａ６、種別指定オンオフ欄９ａ７、種別指定欄９ａ８、回数指定オンオフ欄９ａ９、及び回数指定欄９ａ１０を有する。解析選択欄９ａ１，９ａ２、実行ボタン９ａ３、キャンセルボタン９ａ４、向き指定欄９ａ５、起点指定欄９ａ６、種別指定オンオフ欄９ａ７、種別指定欄９ａ８、回数指定オンオフ欄９ａ９、及び回数指定欄９ａ１０は、それぞれ、操作ボタン５ａに相当する。
【００７８】
２つの解析選択欄９ａ１，９ａ２は、いずれか一方が択一的に選択される。例えば、解析選択欄９ａ１が選択された場合、解析条件設定操作部９は、解析処理として、デバイスの使用状況の抽出を選択し、デバイスの使用状況の抽出が選択された旨の情報を変数使用状況抽出部１４に通知する。これに応じて、変数使用状況抽出部１４は、例えば、解析条件設定操作部９を介して使用状況を抽出するよう指示されたことを認識する。
【００７９】
そして、実行ボタン９ａ３が押されたら、解析条件設定操作部９は、解析処理の開始を変数使用状況抽出部１４に指令する。これに応じて、変数使用状況抽出部１４は、デバイスの使用状況を抽出し、変数使用状況表示処理部１１は、その抽出結果を用いて表示情報（例えば、グラフ情報）を表示画面４ａ上に表示する。
【００８０】
あるいは、キャンセルボタン９ａ４が押されたら、解析条件設定操作部９は、解析処理のキャンセルを変数使用状況抽出部１４に指令する。これに応じて、変数使用状況抽出部１４は、デバイスの使用状況の抽出を中止する。
【００８１】
あるいは、例えば、解析選択欄９ａ２が選択された場合、解析処理として、デバイスの依存関係の抽出が選択され、デバイスの依存関係の抽出が選択された旨の情報が変数依存関係抽出部１５に通知される。これに応じて、変数依存関係抽出部１５は、例えば、解析条件設定操作部９を介してデバイスの依存関係を抽出するよう指示されたことを認識する。
【００８２】
向き指定欄９ａ５では、抽出したいデバイス依存関係の向きとして、前向き及び後向きのいずれかが選択される。図３では、前向きが選択された場合が例示されている。向き指定欄９ａ５では、例えば、黒三角をクリックすることでプルダウンメニューとして前向き及び後向きが表示され、前向き及び後向きのいずれかがクリックされることで選択されてもよい。
【００８３】
起点指定欄９ａ６では、抽出したい依存関係の起点が指示される。図３では、抽出したい依存関係の起点として、デバイスＸ１が指示された場合が例示されている。
【００８４】
種別指定オンオフ欄９ａ７では、種別指定を行うこと（オン）及び種別指定を行わないこと（オフ）のいずれかが指示される。図３では、種別指定を行わないこと（オフ）が指示された場合が例示されている。種別指定オンオフ欄９ａ７では、例えば、チェックを入れることで種別指定を行うこと（オン）を指示し、チェックを外すことで種別指定を行わないこと（オフ）を指示してもよい。
【００８５】
種別指定欄９ａ８では、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスに係る第１の条件が指示される。例えば、種別指定欄９ａ８では、第１の条件として、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスの種別が指示される。デバイスの種別は、例えば、入力を割り付けたものを示すＸデバイス、出力を割り付けたものを示すＹデバイス、内部的に使用するビットデータ（内部リレー）を示すＭデバイス、通信に使用するものを示すＢデバイス、エラーの発生を示すＦデバイスを含む。図３では、種別指定欄９ａ８が指示されていない場合が例示されている。
【００８６】
そして、実行ボタン９ａ３が押されたら、解析条件設定操作部９は、解析処理の開始を変数依存関係抽出部１５に指令する。これに応じて、変数依存関係抽出部１５は、デバイス依存関係を抽出し、変数依存関係表示処理部１２は、その抽出結果、すなわち第１の抽出結果を用いて、表示情報（例えば、有向グラフ情報）を表示画面４ａ上に表示する。
【００８７】
あるいは、キャンセルボタン９ａ４が押されたら、解析条件設定操作部９は、解析処理のキャンセルを変数依存関係抽出部１５に指令する。これに応じて、変数依存関係抽出部１５は、デバイス依存関係の抽出を中止する。
【００８８】
なお、起点としての入力デバイスＸ１は、回路表示処理部１９によって表示されるラダープログラムの中から接点やコイルを選択することによって指定するように構成してもよい。
【００８９】
図４は、解析条件設定操作画面９ａが図３に示すように操作され、実行ボタン９ａ３が押された場合の実行結果の一例である。図４では、多数のデバイスおよび依存関係が抽出されている場合を示している。
【００９０】
本実施の形態では、このように抽出結果が発散的になる原因として、図５に示すように、出力デバイスＹが、さらに接点としても参照されている場合があり、これによって依存関係として抽出されるデバイスの数が多くなっていることに着目し、例えば、指定したデバイス種別については、それ以上の依存関係の抽出処理を行わないようにする。
【００９１】
例えば、Ｙデバイスは、出力デバイスなのであるから、本来ならば、入力デバイスＸを起点として前向き依存関係を抽出する場合、その終点はＹデバイスである。にも関わらず、そのＹデバイスがさらに接点としても参照されているところまで依存関係の抽出処理を進めることは、Ｘデバイスを起点とした依存関係の抽出の範囲を超えて、さらにそのＹデバイスを起点とした依存関係の抽出を行っているに他ならない。
【００９２】
そこで、本実施の形態では、図６に示すように、例えば、Ｙデバイスを起点とした依存関係の抽出を抑制するために、解析条件設定操作画面９ａにおいて、デバイス種別によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にし、それ以上の依存関係の抽出処理を行わないことにするデバイス種別として、Ｙデバイスを指定している。
【００９３】
例えば、図６に示すように、解析条件設定操作画面９ａにおいて、２つの解析選択欄９ａ１，９ａ２のうち解析選択欄９ａ２が選択され、向き指定欄９ａ５で前向きが選択され、起点指定欄９ａ６で抽出したい依存関係の起点としてデバイスＸ１が指示され、種別指定オンオフ欄９ａ７で種別指定を行うこと（オン）が指示される。そして、種別指定欄９ａ８で、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスの種別（第１の条件）として、Ｙデバイスが指示される。
【００９４】
次に、デバイス種別によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理について、図１０を用いて説明する。図１０は、デバイス種別を考慮した依存関係の抽出処理を示すフローチャートである。
【００９５】
ステップＳ１では、解析条件設定操作部９が、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起点設定指示に応じて、抽出したい依存関係の起点を設定する。例えば、図６に示す場合、解析条件設定操作部９は、抽出したい依存関係の起点としてデバイスＸ１を設定する。解析条件設定操作部９は、設定された、抽出したい依存関係の起点の情報を解析処理実行部１３へ供給する。
【００９６】
また、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた第１の条件設定指示に応じて、第１の条件を設定する。例えば、図６に示す場合、解析条件設定操作部９は、第１の条件として、すなわち、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイス種別として、Ｙデバイスを設定する。解析条件設定操作部９は、設定された第１の条件の情報を解析処理実行部１３へ供給する。
【００９７】
ステップＳ１０では、変数依存関係抽出部１５が、再帰処理を行う。具体的には、変数依存関係抽出部１５は、以下のステップＳ１１〜ステップＳ１７の処理を行う。
【００９８】
ステップＳ１１では、変数依存関係抽出部１５が、解析条件設定操作部９により設定された起点デバイス（例えば、デバイスＸ１）を起点として、デバイスの依存関係を抽出する。例えば、変数依存関係抽出部１５は、前向きのデバイス依存関係の抽出が指定された場合、起点デバイスが影響を与える全てのデバイスをラダープログラム１６中より抽出する。あるいは、例えば、変数依存関係抽出部１５は、後向きのデバイス依存関係の抽出が指定された場合、起点デバイスに影響を与える全てのデバイスをラダープログラム１６中より抽出する。
【００９９】
ステップＳ１２では、変数依存関係抽出部１５が、抽出された全てのデバイスについてステップＳ１３〜ステップＳ１７の処理を完了したか否かを判断する。変数依存関係抽出部１５は、完了していない（ステップＳ１２で「Ｎｏ」）場合、処理をステップＳ１３へ進め、完了している（ステップＳ１２で「Ｙｅｓ」）場合、処理を終了する。
【０１００】
ステップＳ１３では、変数依存関係抽出部１５が、抽出された全てのデバイスのうち、未処理のデバイスを１つ、処理対象として選択する。
【０１０１】
ステップＳ１４では、変数依存関係抽出部１５が、処理対象のデバイスが第１の条件に合致するか否かを判断する。例えば、図６に示す場合、変数依存関係抽出部１５は、処理対象のデバイスが、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイス種別（例えば、Ｙデバイス）であるか否かを判断する。変数依存関係抽出部１５は、第１の条件に合致する（ステップＳ１４で「Ｙｅｓ」）場合、処理をＳ１７へ進め、第１の条件に合致しない（ステップＳ１４で「Ｎｏ」）場合、処理をＳ１５へ進める。
【０１０２】
ステップＳ１５では、変数依存関係抽出部１５が、処理対象のデバイスを新たに起点として設定する。
【０１０３】
ステップＳ１６では、変数依存関係抽出部１５が、ステップＳ１５で設定された起点を第２の起点デバイスとして、デバイスの依存関係を抽出する。例えば、変数依存関係抽出部１５は、前向きのデバイス依存関係の抽出が指定された場合、第２の起点デバイスが影響を与える全てのデバイスをラダープログラム１６中より抽出する。あるいは、例えば、変数依存関係抽出部１５は、後向きのデバイス依存関係の抽出が指定された場合、第２の起点デバイスに影響を与える全てのデバイスをラダープログラム１６中より抽出する。変数依存関係抽出部１５は、抽出処理が完了したら、処理をステップＳ１２へ戻す。
【０１０４】
ステップＳ１７では、変数依存関係抽出部１５が、処理対象のデバイスについてのさらなる依存関係の抽出処理は行わないので、処理対象のデバイスについての処理を終了する。そして、変数依存関係抽出部１５は、処理をステップＳ１２へ戻す。
【０１０５】
このように、デバイス種別によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理により、例えば、図７に示す有向グラフが表示画面４ａ上に表示される。図７は、デバイス種別を考慮した前向き依存関係抽出結果例に対応した有向グラフを示す図である。図７に示す有向グラフは、デバイスＸ１を起点として前向き依存関係を抽出する処理を行う過程で、第１の条件に合致しないデバイスであるデバイスＭ１については、さらに依存関係の抽出処理を進め、第１の条件に合致するデバイスであるデバイスＹ１，Ｙ２，Ｙ３（図４参照）に行き着いたら、それ以上の依存関係の抽出処理を行わないようにして得られたものである。
【０１０６】
図４に示す有向グラフが図７に示す有向グラフのごとく絞り込めていることからもわかるように、デバイス種別によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にすることで、多数の解析条件（解析コマンド、解析対象等）を組み合わせて指定せずとも、巨大で複雑な依存関係（の有向グラフ）を絞り込むことができる。
【０１０７】
図６が前向き依存関係の抽出の場合を例示したものであるに対して、図８は後向き依存関係の抽出の場合を例示したものである。デバイス種別によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にし、それ以上の依存関係の抽出処理を行わないことにするデバイス種別として、こんどはＸを指定するとよい。
【０１０８】
例えば、図８に示すように、解析条件設定操作画面９ａにおいて、２つの解析選択欄９ａ１，９ａ２のうち解析選択欄９ａ２が選択され、向き指定欄９ａ５で後向きが選択され、起点指定欄９ａ６で抽出したい依存関係の起点としてデバイスＹ１が指示され、種別指定オンオフ欄９ａ７で種別指定を行うこと（オン）が指示される。そして、種別指定欄９ａ８で、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスの種別（第１の条件）として、Ｘデバイスが指示される。
【０１０９】
そして、実行ボタン９ａ３が押されると、依存関係の抽出処理を進め、入力Ｘデバイスに行き着いたら、それ以上の依存関係の抽出処理を行わないように処理される。効果は、図６の場合と同様であり、例えば、図４に示す有向グラフを図７に示す有向グラフのごとく絞り込むことができる。
【０１１０】
なお、ＰＣにとっての入力となるデバイスには、Ｘデバイスのみならず、通信による入力となるＢデバイスなどがあるし、ＰＣにとっての出力となるデバイスには、Ｙデバイスのみならず、通信による出力となるＢデバイスやエラー出力となるＦデバイスなどがある。したがって、例えば、図６の例において、起点デバイスとして、Ｘデバイスに代えてＢデバイスなどを指定してもよいし、それ以上の依存関係の抽出処理を行わないデバイス種別として、Ｙデバイスに代えてＢデバイス、Ｆデバイスなどを指定してもよい。あるいは、例えば、図８の例において、起点デバイスとして、Ｙデバイスに代えてＢデバイス、Ｆデバイスなどを指定してもよいし、それ以上の依存関係の抽出処理を行わないデバイス種別として、Ｘデバイスに代えてＢデバイスなどを指定してもよい。
【０１１１】
また、図１１に示すように、解析条件設定操作画面９ａは、種別指定オンオフ欄９ａ７ａをさらに有していてもよい。例えば、種別指定オンオフ欄９ａ７ａと種別指定オンオフ欄９ａ７とは、両方非選択とすることは可能だが、選択する場合にいずれか一方が択一的に選択される。例えば、種別指定オンオフ欄９ａ７が選択（例えば、チェック）されると、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスに係る第１の条件を設定することが選択される。あるいは、例えば、種別指定オンオフ欄９ａ７ａが選択（例えば、チェック）されると、さらなる前向き又は後向きのデバイス依存関係を抽出するデバイスに係る第２の条件を設定することが選択される。
【０１１２】
この場合、例えば、Ｙデバイスを起点とした依存関係の抽出を抑制するために、解析条件設定操作画面９ａにおいて、図１１に示すように、デバイス種別によってそれ以上の依存関係の抽出処理を行う機能をチェックして有効にし、第２の条件として、すなわちそれ以上の依存関係の抽出処理を行うことにするデバイス種別として、Ｙデバイスを除いたデバイスを指定している。例えば、図１１では、種別指定欄９ａ８でＸデバイス、Ｍデバイス、Ｂデバイスが指示されている。
【０１１３】
また、デバイス種別によってそれ以上の依存関係の抽出処理を行う機能をチェックして有効にした場合の依存関係の抽出処理について、図１２を用いて説明する。図１２に示す処理は、図１０に示す処理と次の点で異なる。
【０１１４】
ステップＳ１ａでは、解析条件設定操作部９が、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起点設定指示に応じて、抽出したい依存関係の起点を設定する。例えば、図１１に示す場合、解析条件設定操作部９は、抽出したい依存関係の起点としてデバイスＸ１を設定する。解析条件設定操作部９は、設定された、抽出したい依存関係の起点の情報を解析処理実行部１３へ供給する。
【０１１５】
また、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた第２の条件設定指示に応じて、第２の条件を設定する。例えば、図１１に示す場合、解析条件設定操作部９は、第２の条件として、すなわち、さらなる前向き又は後向きのデバイス依存関係を抽出するデバイス種別として、Ｘデバイス、Ｍデバイス、Ｂデバイスを設定する。解析条件設定操作部９は、設定された第２の条件の情報を解析処理実行部１３へ供給する。
【０１１６】
ステップＳ１４ａでは、変数依存関係抽出部１５が、処理対象のデバイスが第２の条件に合致するか否かを判断する。例えば、図１１に示す場合、変数依存関係抽出部１５は、処理対象のデバイスが、さらなる前向き又は後向きのデバイス依存関係を抽出するデバイス種別（例えば、Ｘデバイス、Ｍデバイス、Ｂデバイス）であるか否かを判断する。変数依存関係抽出部１５は、第２の条件に合致する（ステップＳ１４ａで「Ｙｅｓ」）場合、処理をＳ１５へ進め、第２の条件に合致しない（ステップＳ１４ａで「Ｎｏ」）場合、処理をＳ１７へ進める。
【０１１７】
このように、デバイス種別によってそれ以上の依存関係の抽出処理を行う機能をチェックして有効にした場合の依存関係の抽出処理によっても、例えば、図７に示す有向グラフが表示画面４ａ上に表示される。図７に示す有向グラフは、デバイスＸ１を起点として前向き依存関係を抽出する処理を行う過程で、第２の条件に合致するデバイスであるデバイスＭ１については、さらに依存関係の抽出処理を進め、第２の条件に合致しないデバイスであるデバイスＹ１，Ｙ２，Ｙ３（図４参照）に行き着いたら、それ以上の依存関係の抽出処理を行わないようにしても得られる。
【０１１８】
このようにして抽出されて表示される依存関係（の有向グラフ）の中から１つのデバイスを選択すれば、変数依存関係表示処理部１２は回路表示処理部１９に対して、その選択されたデバイスをコイル出力するラダー回路のみを表示するように、あるいは、第１の抽出結果に従ったデバイス依存関係の全体を表示しつつ選択されたデバイスをコイル出力するラダー回路を表示するように、指示するように構成してもよい。そうすれば図９のような表示の構成となり、解析作業をより一層効率化することに寄与する。依存関係（の有向グラフ）は、ラダーの制御構造から依存関係だけを抽出し、他の情報をそぎ落とすことで、ラダーの制御構造を大局的な視点で把握することを支援するものであるから、依存関係（の有向グラフ）を表示するだけでなく、その中から注目したい部分を局所的に詳細確認するために、その部分に相当するラダー回路を表示することは、解析作業をより一層効率化するためには効果的である。
【０１１９】
なお、抽出されて表示される依存関係（の有向グラフ）の中から１つのデバイスが選択された際に、その選択されたデバイスを、依存関係（の有向グラフ）の中における他のデバイスと区別できる表示形態で表示してもよい。例えば、図９に示すように、デバイスＹ３から表示されたラダー回路へ向けて破線の矢印を表示することで、表示されたラダー回路でコイル出力されるデバイスＹ３と第１の抽出結果に従った依存関係（の有向グラフ）の中におけるデバイスＹ３とを対応付けて表示してもよい。
【０１２０】
また、ラダー回路の表示においてはデバイスに付与されたデバイスコメント１７（図２参照）を合わせて表示できるのと同様に、依存関係（の有向グラフ）の表示おいてもデバイスに付与されたデバイスコメント１７を合わせて表示できる。
【０１２１】
以上のように、実施の形態１では、解析条件設定操作部９が、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスに係る第１の条件、又はさらなる前向き又は後向きのデバイス依存関係を抽出するデバイスに係る第２の条件を設定する。変数依存関係抽出部１５は、第１の条件に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出しないように、且つ第２の条件に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出するように、ラダープログラム１６から解析条件設定操作部９で設定された起点を起点として前向き又は後向きのデバイス依存関係を抽出して、第１の抽出結果を生成する。変数依存関係表示処理部１２は、第１の抽出結果に従って、デバイス依存関係を表示する。これにより、第１の条件又は第２の条件を用いることで、デバイス依存関係の方向性を利用してデバイス依存関係を効率的に絞り込むことができる。この結果、多数の解析条件（解析コマンド、解析対象等）を組み合わせて指定せずとも、巨大で複雑な依存関係（の有向グラフ）から、不具合に深く関係する依存関係（の有向グラフ）だけを抽出することが可能となる。すなわち、生産設備が備える表示器と操作ボタンとを用いてデバッグ作業を行う場合に、巨大で複雑な依存関係（の有向グラフ）から不具合に深く関係する依存関係（の有向グラフ）を少ない操作数で抽出して表示できる。
【０１２２】
また、実施の形態１では、解析条件設定操作部９が、第１の条件として、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイス種別（例えば、Ｙデバイス）を設定する。又は、解析条件設定操作部９が、第２の条件として、さらなる前向き又は後向きのデバイス依存関係を抽出するデバイス種別を設定する。変数依存関係抽出部１５は、抽出しないデバイス種別（第１の条件）に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出しないように、且つ抽出するデバイス種別（第２の条件）に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出するように、ラダープログラム１６から解析条件設定操作部９で設定された起点を起点として前向き又は後向きのデバイス依存関係を抽出して、第１の抽出結果を生成する。これにより、第１の条件又は第２の条件を用いることで、デバイス依存関係の方向性を利用してデバイス依存関係を効率的に絞り込むことができる。
【０１２３】
また、実施の形態１では、回路表示処理部１９が、第１の抽出結果に従ったデバイス依存関係の中から１つのデバイスが指定されたとき、指定されたデバイスをコイル出力するラダー回路を選択的に表示する、又は、第１の抽出結果に従ったデバイス依存関係の全体を表示しつつ指定されたデバイスをコイル出力するラダー回路を選択的に表示する。これにより、依存関係（の有向グラフ）を用いてラダーの制御構造を大局的な視点で把握することを支援できるとともに、その中から注目したい部分を局所的に詳細確認することを支援できる。その結果、解析作業をより一層効率化できる。
【０１２４】
実施の形態２．
次に、実施の形態２にかかるプログラム解析支援装置について説明する。以下では、実施の形態１と異なる部分を中心に説明する。
【０１２５】
抽出されたデバイスおよび依存関係が巨大となる原因は、実施の形態１で述べた原因以外にもある。それは、多くの箇所で接点として参照されるＭデバイスの存在である。このようなＭデバイスが存在すれば、依存関係（の有向グラフ）を十分に絞り込むことができない可能性がある。
【０１２６】
そこで、実施の形態２では、多くの箇所で接点として参照される（参照回数の多い）Ｍデバイスが存在するような場合に対処するための仕組みについて説明する。
【０１２７】
Ｍデバイスは内部的に使用されるものであって、処理結果の一時的な保持を目的として使用される。よって、どのような性質のものを一時的に保持すべくＭデバイスを使用しているかについては、ラダー作成者に依存するところとなる。しかしながらＭデバイスの使用目的は、単なる処理結果の一時的な保持という場合と、対象を計測制御する上で不可欠となるコントローラの内部状態の保持という場合とに、大別される。
【０１２８】
単なる処理結果の一時的な保持としてのＭデバイスは、これを接点として参照されている数は少ない。これに対して、コントローラの内部状態を保持するＭデバイスは、これを接点として参照されている回数は格段に多い。コントローラの内部状態は、種々の計測制御機能において、インタロック条件の確認など、とても重要だからである。
【０１２９】
すなわち、コントローラの内部状態を保持するＭデバイスは、実際にはその値をコントローラ外部に出力することがないものの、単なる処理結果の一時的な保持としての役割を超えて、実質的にはＹデバイスと同等の役割を果たしているものである。したがって、実施の形態１で述べたとおり、そのＭデバイスがさらに接点としても参照されているところまで依存関係の抽出処理を進めることは、当初の依存関係の抽出の範囲を超えて、さらに当該Ｍデバイスを起点とした依存関係の抽出を行っているに他ならない。
【０１３０】
ここに着目し、実施の形態２では、接点として参照されている回数、すなわち、当該デバイスが影響を与える他のデバイスの数が、指定の閾値以上であるデバイスについては、それ以上の依存関係の抽出処理を行わないことにする。すなわち、解析条件設定操作部９は、第１の条件として、起点デバイスからの起点デバイスを含めたデバイスの参照回数（の閾値）を設定する。
【０１３１】
図１３は、参照回数によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にし、それ以上の依存関係の抽出処理を行わないことにする参照回数の閾値として、３回を指定している場合を示している。
【０１３２】
例えば、回数指定オンオフ欄９ａ９では、参照回数の指定を行うこと（オン）及び参照回数の指定を行わないこと（オフ）のいずれかが指示される。図１３では、参照回数の指定を行うこと（オン）が指示された場合が例示されている。回数指定オンオフ欄９ａ９では、例えば、チェックを入れることで参照回数の指定を行うこと（オン）を指示し、チェックを外すことで参照回数の指定を行わないこと（オフ）を指示してもよい。
【０１３３】
回数指定欄９ａ１０では、起点デバイスからの起点デバイスを含めたデバイスの参照回数の閾値が指示される。図１３では、参照回数の閾値として、３回が指示された場合が例示されている。例えば、向き指定欄９ａ５で前向きが選択され、起点指定欄９ａ６でデバイスＸ１が指示され、回数指定オンオフ欄９ａ９で参照回数の指定を行うこと（オン）が指示され、回数指定欄９ａ１０で３（回）が指示された場合、デバイスＸ１を起点として前向きにデバイス依存関係をたどっていったときにデバイスＸ１を含めてデバイスを３回以上参照するものが発生したら、さらなる前向きのデバイス依存関係を抽出しないようにする。
【０１３４】
次に、デバイスの参照使用の回数によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理について、図１５を用いて説明する。図１５は、参照回数を考慮した依存関係の抽出処理を示すフローチャートである。
【０１３５】
ステップＳ２１では、解析条件設定操作部９が、参照回数の閾値の指定があるか否かを判断する。解析条件設定操作部９は、参照回数の閾値の指定がある（ステップＳ２１で「Ｙｅｓ」）場合、処理をステップＳ２３へ進め、参照回数の閾値の指定がない（ステップＳ２１で「Ｎｏ」）場合、処理をステップＳ２２へ進める。
【０１３６】
ステップＳ２２では、解析条件設定操作部９が、デバイス使用状況ヒストグラムを抽出するよう変数使用状況抽出部１４に指示する。変数使用状況抽出部１４は、例えば、解析条件設定操作部９を介して使用状況を抽出するよう指示されたことを認識する。例えば、変数使用状況抽出部１４は、解析選択欄９ａ１が選択された場合、使用状況を抽出するよう指示されたことを認識する（図１６参照）。変数使用状況抽出部１４は、例えば、使用状況を抽出するよう指示されたことを認識すると、デバイスの使用状況を抽出する。変数使用状況抽出部１４は、デバイスの使用状況の抽出結果を生成して変数使用状況表示処理部１１へ供給する。
【０１３７】
変数使用状況表示処理部１１は、例えば、デバイスの使用状況の抽出結果を変数使用状況抽出部１４から受ける。変数使用状況表示処理部１１は、デバイスの使用状況の抽出結果を用いて表示情報を生成し、生成された表示情報に従って、デバイスの使用状況の抽出結果を表示部４の表示画面４ａ上に表示する。例えば、変数使用状況表示処理部１１は、デバイスの使用状況の抽出結果をグラフにまとめたグラフ情報を生成し、グラフ情報に従って、デバイスの使用状況の抽出結果を表示部４の表示画面４ａ上にグラフの形態で表示する。
【０１３８】
例えば、変数使用状況表示処理部１１は、デバイスの使用状況の抽出結果を用いて、デバイス個数を縦軸とし接点参照回数を横軸とするデバイス使用状況ヒストグラム（図１７参照）を表示画面４ａ上に表示する。これにより、デバイス使用状況ヒストグラムを閲覧したユーザは、デバイス使用状況ヒストグラムのプロファイルに応じて、参照回数の閾値を決めることができる。
【０１３９】
例えば、ユーザは、デバイス使用状況ヒストグラムのプロファイルが多峰性である場合、第１極小点に対応した接点参照回数（例えば、図１７の場合、６回）を参照回数の閾値として決定できる。また、例えば、ユーザは、デバイス使用状況ヒストグラムのプロファイルが単峰性である場合、デフォルト値（例えば、３回）を参照回数の閾値として決定できる。
【０１４０】
そして、解析条件設定操作部９は、ユーザ操作８に応じて、デバイス依存関係の抽出を行うように変数依存関係抽出部１５に指示する。変数依存関係抽出部１５は、例えば、解析条件設定操作部９を介してデバイス依存関係を抽出するよう指示されたことを認識する。例えば、変数使用状況抽出部１４は、解析選択欄９ａ２が選択された場合、デバイス依存関係を抽出するよう指示されたことを認識する（図１３参照）。
【０１４１】
ステップＳ２３では、解析条件設定操作部９が、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起点設定指示に応じて、抽出したい依存関係の起点を設定する。例えば、図６に示す場合、解析条件設定操作部９は、抽出したい依存関係の起点としてデバイスＸ１を設定する。解析条件設定操作部９は、設定された、抽出したい依存関係の起点の情報を解析処理実行部１３へ供給する。
【０１４２】
また、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた第１の条件設定指示に応じて、第１の条件を設定する。例えば、図１３に示す場合、解析条件設定操作部９は、第１の条件として、すなわち、さらなる前向き又は後向きのデバイス依存関係を抽出しないための参照回数の閾値として、３回を設定する。解析条件設定操作部９は、設定された第１の条件の情報を解析処理実行部１３へ供給する。
【０１４３】
ステップＳ３０では、変数依存関係抽出部１５が、再帰処理を行う。具体的には、変数依存関係抽出部１５は、実施の形態１の再帰処理（ステップＳ１０）と基本的に同様であるが、次の点で異なる処理を行う。
【０１４４】
ステップＳ３４では、変数依存関係抽出部１５が、処理対象のデバイスが参照使用される回数がステップＳ２３で設定された閾値以上であるか否かを判断する。例えば、図１３に示す場合、変数依存関係抽出部１５は、処理対象のデバイスが参照使用される回数が３回以上であるか否かを判断する。変数依存関係抽出部１５は、閾値以上である（ステップＳ３４で「Ｙｅｓ」）場合、処理をＳ１７へ進め、閾値以上でない（ステップＳ３４で「Ｎｏ」）場合、処理をＳ１５へ進める。
【０１４５】
このように、デバイスの参照使用の回数によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理により、例えば、図１４に示す有向グラフが表示画面４ａ上に表示される。図１４は、参照回数を考慮した前向き依存関係抽出結果例に対応した有向グラフを示す図である。閾値として３回が指定されているから、参照回数が３回未満のデバイスであるデバイスＭ１，Ｙ３については、さらに依存関係の抽出処理を進め、参照回数が３以上であるデバイスＭ２，Ｍ３については、それ以上の依存関係の抽出処理を行わない。
【０１４６】
図４に示す有向グラフが図１４に示す有向グラフのごとく絞り込めていることからもわかるように、デバイスの参照使用の回数によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にすることで、多数の解析条件（解析コマンド、解析対象等）を組み合わせて指定せずとも、巨大で複雑な依存関係（の有向グラフ）を絞り込むことができる。
【０１４７】
なお、抽出された依存関係の表示の際、参照回数が閾値以上であることにより先の依存関係抽出を止めたデバイスについては、それぞれの参照回数を合わせて表示することもできる。
【０１４８】
実際のところ、どの程度の数を閾値として、設定すべきかについては、作成されたラダープログラムに依存するところとなる。しかしながら、たとえラダー作成者の当人といえども、この閾値を適当に設定することは容易ではない。そこで、各デバイスが、どの程度に接点として参照使用されているか、その参照回数を使用状況として抽出する機能、すなわちデバイスの接点参照回数のヒストグラム機能を設けることにしている。
【０１４９】
図１６は、デバイスの使用状況を抽出する機能を選択している場合を示している。この場合、解析条件の設定は、特段に必要ない。図１７は、その実行結果の一例である。このヒストグラムは、接点参照回数が１回、すなわち、プログラム中で接点として使用されているところが１箇所であるようなデバイスが４０個ある、という見方をするものである。そして図１７は、接点参照回数の多いデバイスの個数は少なくなる傾向にある中で、接点参照回数が６回、７回というデバイスが０個になったのに対して、接点参照回数が８回というデバイスが数個存在している例を示している。
【０１５０】
一般的なラダープログラムに対して、このようなデバイスの使用状況を抽出すれば、およそ図１７のような傾向、つまり、ヒストグラムの形状が単峰性ではなく、多峰性を示すことが、多くの場合で見られる。
【０１５１】
これは、例えば、Ｍデバイスの使用目的は、単なる処理結果の一時的な保持という場合と、対象を計測制御する上で不可欠となるコントローラの内部状態の保持という場合とに、大別されるところ、単なる処理結果を一時的に保持するＭデバイスは接点参照回数が少なく、しかしそのようなＭデバイスの個数は多い傾向にあることに対応している。そして、これは、さらに、対象を計測制御する上で不可欠となるコントローラの内部状態を保持するＭデバイスは、インタロック条件の確認など、とても重要であるから、種々の計測制御機能において参照されるから、接点参照回数が多く、しかしそのようなＭデバイスの個数は限られている、ということに対応している。
【０１５２】
このようにして得られた、接点参照回数のヒストグラムの結果に基づいて、それ以上の依存関係の抽出処理を行わないことにする参照回数の値を決めることができる。具体的には、図１７のような接点参照回数のヒストグラムが得られた場合には、それ以上の依存関係の抽出処理を行わないことにする参照回数の閾値として、例えば第１極小点に対応した６回を指定すればよい。図１７の場合、接点参照回数の６〜７回が、単なる処理結果の一時的な保持デバイスと、対象を計測制御する上で不可欠となるコントローラの内部状態の保持デバイスとの、分かれ目となる閾値と考えられるからである。
【０１５３】
なお、これを自動的に行うように構成してもよい。すなわち、ユーザが明示的にデバイス使用状況を抽出して、閾値を見出すことを必要としないように構成するものである。例えば、回数指定の機能をチェックするだけで、その閾値を入力しなかった場合には、依存関係の抽出処理を行う前に、自動的にデバイス使用状況を抽出し、そのヒストグラムから第１極小点を抽出し、その第１極小点を閾値として採用して、依存関係の抽出処理を行う、という構成が考えられる。
【０１５４】
こうすることで、多数の解析条件（解析コマンド、解析対象等）を組み合わせて指定せずとも、巨大で複雑な依存関係（の有向グラフ）を絞り込むことができる。
【０１５５】
Ｍデバイス以外のデバイス種別でも、参照回数が多くなることがあり、デバイス種別をＭデバイスに限定することなく、実施の形態２を適用してもよい。
【０１５６】
実施の形態２においても、後向き依存関係の抽出も、前向き依存関係の抽出と同じである。特に、前向きの依存関係を抽出する際に、絞り込みの効果が大きい。
【０１５７】
なお、実施の形態１と実施の形態２とを組み合わせて実施することができる。これにより、さらなる絞り込みが可能となる。
【０１５８】
以上のように、実施の形態２では、変数使用状況抽出部１４（図２参照）が、第１の条件（例えば、参照回数の閾値）を設定する際の参考情報として供するように、ラダープログラムからデバイスについて、複数のラダー行で接点として参照使用されている回数に関するヒストグラムを抽出する。これにより、ヒストグラムの抽出結果に応じて、単なる処理結果の一時的な保持デバイスと対象を計測制御する上で不可欠となるコントローラの内部状態の保持デバイスとの分かれ目となる回数の閾値を特定することができ、第１の条件として、例えば、それ以上の依存関係の抽出処理を行わないことにする参照回数の閾値を決めることができる。
【０１５９】
また、実施の形態２では、解析条件設定操作部９が、第１の条件として、さらなる前向き又は後向きのデバイス依存関係を抽出しない参照回数の閾値を設定する。変数依存関係抽出部１５は、抽出しない参照回数の閾値（第１の条件）に合致する、すなわちその参照回数が閾値以上であるデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出しないように、ラダープログラム１６から解析条件設定操作部９で設定された起点を起点として前向き又は後向きのデバイス依存関係を抽出して、第１の抽出結果を生成する。これにより、第１の条件を用いることで、デバイス依存関係の方向性を利用してデバイス依存関係を効率的に絞り込むことができる。
【０１６０】
実施の形態３．
次に、実施の形態３にかかるプログラム解析支援装置について説明する。以下では、実施の形態２と異なる部分を中心に説明する。
【０１６１】
実施の形態２では、多くの箇所で接点として参照されるＭデバイスに着目しているが、内部的に使用されるＭデバイスのうち、重要なものは、これを接点として参照されている回数が多いというほかに、そのＭデバイスに直接的に影響を与えるデバイスの数、すなわち、そのＭデバイスがコイルとなっているラダー１行中において、そのコイルを制御する接点の数が多い場合もある。図１８は、そのようなラダーの一例であり、このようなラダープログラムに対して、後向きの依存関係を抽出すれば、図１９に示すような有向グラフが得られ、抽出結果が発散的になる傾向にあることが分かる。
【０１６２】
そこで、実施の形態３では、Ｍデバイスがコイルとなっているラダー１行中において、そのコイルを制御する接点の数（制御依存回数）が多い場合に対処するための仕組みについて説明する。
【０１６３】
実施の形態２でいうところの、接点として参照されている回数が多いＭデバイスは、コントローラの内部状態を保持しているという制御上の意味において重要であるのに対し、実施の形態３でいうところの、そのコイルを制御する接点が多いＭデバイスは、そのＭデバイスをＯＮ／ＯＦＦ制御する条件がとても複雑であって不具合が起こりやすいという意味において重要である。
【０１６４】
ここに着目し、実施の形態３では、当該デバイスがコイルとなっているラダー１行中の接点の数、すなわち、当該デバイスに直接的に影響を与える他のデバイスの数が、制御依存回数の閾値を超えているデバイスについては、それ以上の依存関係の抽出処理を行わないことにする。すなわち、解析条件設定操作部９は、第１の条件として、１つのラダー行でいくつの接点から制御依存を受けているのかを示す制御依存回数（の閾値）を設定する。
【０１６５】
図２０は、ラダー１行中にそのコイルを制御する接点の数を示す制御依存回数によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にし、それ以上の依存関係の抽出処理を行わないことにするコイルの制御依存回数の閾値として、３回を指定している場合を示している。
【０１６６】
例えば、解析条件設定操作画面９ａは、回数指定オンオフ欄９ａ９ａをさらに有してもよい。回数指定オンオフ欄９ａ９ａと回数指定オンオフ欄９ａ９とは、ともに非選択とすることは可能だが、選択される場合に択一的に選択される。
【０１６７】
例えば、回数指定オンオフ欄９ａ９ａでは、制御依存回数の指定を行うこと（オン）及び制御依存回数の指定を行わないこと（オフ）のいずれかが指示される。図２０では、制御依存回数の指定を行うこと（オン）が指示された場合が例示されている。回数指定オンオフ欄９ａ９ａでは、例えば、チェックを入れることで制御依存回数の指定を行うこと（オン）を指示し、チェックを外すことで制御依存回数の指定を行わないこと（オフ）を指示してもよい。
【０１６８】
回数指定欄９ａ１０では、ラダー１行中にそのコイルを制御する接点の数を示す制御依存回数の閾値が指示される。図２０では、制御依存回数の閾値として、３回が指示された場合が例示されている。例えば、向き指定欄９ａ５で後向きが選択され、起点指定欄９ａ６でデバイスＹ１が指示され、回数指定オンオフ欄９ａ９ａで制御依存回数の指定を行うこと（オン）が指示され、回数指定欄９ａ１０で３（回）が指示された場合、デバイスＹ１を起点として後向きにデバイス依存関係をたどっていったときに、ラダー１行中に制御依存する回数が３回以上のコイル（例えば、図１８に示すデバイスＭ１１，Ｍ１２）が発生したら、さらなる後向きのデバイス依存関係を抽出しないようにする。
【０１６９】
デバイスがコイルとなっているラダー１行中のコイルの制御依存回数によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理について、図２２を用いて説明する。図２２は、制御依存回数を考慮した依存関係の抽出処理を示すフローチャートである。
【０１７０】
ステップＳ４１では、解析条件設定操作部９が、制御依存回数の閾値の指定があるか否かを判断する。解析条件設定操作部９は、制御依存回数の閾値の指定がある（ステップＳ４１で「Ｙｅｓ」）場合、処理をステップＳ４３へ進め、制御依存回数の閾値の指定がない（ステップＳ４１で「Ｎｏ」）場合、処理をステップＳ４２へ進める。
【０１７１】
ステップＳ４２では、解析条件設定操作部９が、デバイス使用状況ヒストグラムを抽出するよう変数使用状況抽出部１４に指示する。変数使用状況抽出部１４は、例えば、解析条件設定操作部９を介して使用状況を抽出するよう指示されたことを認識する。例えば、変数使用状況抽出部１４は、解析選択欄９ａ１が選択された場合、使用状況を抽出するよう指示されたことを認識する（図１６参照）。変数使用状況抽出部１４は、例えば、使用状況を抽出するよう指示されたことを認識すると、デバイスの使用状況を抽出する。変数使用状況抽出部１４は、デバイスの使用状況の抽出結果を生成して変数使用状況表示処理部１１へ供給する。
【０１７２】
変数使用状況表示処理部１１は、例えば、デバイスの使用状況の抽出結果を変数使用状況抽出部１４から受ける。変数使用状況表示処理部１１は、デバイスの使用状況の抽出結果を用いて表示情報を生成し、生成された表示情報に従って、デバイスの使用状況の抽出結果を表示部４の表示画面４ａ上に表示する。例えば、変数使用状況表示処理部１１は、デバイスの使用状況の抽出結果をグラフにまとめたグラフ情報を生成し、グラフ情報に従って、デバイスの使用状況の抽出結果を表示部４の表示画面４ａ上にグラフの形態で表示する。
【０１７３】
例えば、変数使用状況表示処理部１１は、デバイスの使用状況の抽出結果を用いて、デバイス個数を縦軸とし制御依存回数を横軸とするデバイス使用状況ヒストグラム（例えば、図１７で横軸を制御依存回数に置き換えたもの）を表示画面４ａ上に表示する。これにより、デバイス使用状況ヒストグラムを閲覧したユーザは、デバイス使用状況ヒストグラムのプロファイルに応じて、制御依存回数の閾値を決めることができる。
【０１７４】
例えば、ユーザは、デバイス使用状況ヒストグラムのプロファイルが多峰性である場合、第１極小点に対応した制御依存回数（例えば、図１７で横軸を制御依存回数に置き換えたものの場合、６回）を制御依存回数の閾値として決定できる。また、例えば、ユーザは、デバイス使用状況ヒストグラムのプロファイルが単峰性である場合、デフォルト値（例えば、３回）を制御依存回数の閾値として決定できる。
【０１７５】
そして、解析条件設定操作部９は、ユーザ操作８に応じて、デバイス依存関係の抽出を行うように変数依存関係抽出部１５に指示する。変数依存関係抽出部１５は、例えば、解析条件設定操作部９を介してデバイス依存関係を抽出するよう指示されたことを認識する。例えば、変数使用状況抽出部１４は、解析選択欄９ａ２が選択された場合、デバイス依存関係を抽出するよう指示されたことを認識する（図２０参照）。
【０１７６】
ステップＳ４３では、解析条件設定操作部９が、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起点設定指示に応じて、抽出したい依存関係の起点を設定する。例えば、図２０に示す場合、解析条件設定操作部９は、抽出したい依存関係の起点としてデバイスＹ１を設定する。解析条件設定操作部９は、設定された、抽出したい依存関係の起点の情報を解析処理実行部１３へ供給する。
【０１７７】
また、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた第１の条件設定指示に応じて、第１の条件を設定する。例えば、図２０に示す場合、解析条件設定操作部９は、第１の条件として、すなわち、さらなる前向き又は後向きのデバイス依存関係を抽出しないための制御依存回数の閾値として、３回を設定する。解析条件設定操作部９は、設定された第１の条件の情報を解析処理実行部１３へ供給する。
【０１７８】
ステップＳ５０では、変数依存関係抽出部１５が、再帰処理を行う。具体的には、変数依存関係抽出部１５は、実施の形態１の再帰処理（ステップＳ１０）と基本的に同様であるが、次の点で異なる処理を行う。
【０１７９】
ステップＳ５４では、変数依存関係抽出部１５が、処理対象のデバイスを制御する接点数、すなわち制御依存回数がステップＳ４３で設定された閾値以上であるか否かを判断する。例えば、図２０に示す場合、変数依存関係抽出部１５は、制御依存回数がが３回以上であるか否かを判断する。変数依存関係抽出部１５は、閾値以上である（ステップＳ５４で「Ｙｅｓ」）場合、処理をＳ１７へ進め、閾値以上でない（ステップＳ５４で「Ｎｏ」）場合、処理をＳ１５へ進める。
【０１８０】
このように、デバイスがコイルとなっているラダー１行中のコイルの制御依存回数によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理により、例えば、図２１に示す有向グラフが表示画面４ａ上に表示される。図２１は、制御依存回数を考慮した後向き依存関係抽出結果例に対応した有向グラフを示す図である。閾値として３回が指定されているから、制御依存回数が３回未満であるデバイスＭ１については、さらに依存関係の抽出処理を進め、制御依存回数が３回以上であるデバイスＭ１１，Ｍ１２（図１９参照）については、それ以上の依存関係の抽出処理を行わない。
【０１８１】
図１９に示す有向グラフが図２１に示す有向グラフのごとく絞り込めていることからもわかるように、デバイスがコイルとなっているラダー１行中のコイルの制御依存回数によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にすることで、多数の解析条件（解析コマンド、解析対象等）を組み合わせて指定せずとも、巨大で複雑な依存関係（の有向グラフ）を絞り込むことができる。
【０１８２】
なお、抽出された依存関係の表示の際、制御依存回数が閾値以上であることにより先の依存関係抽出を止めたデバイスについては、それぞれの制御依存回数を合わせて表示することもできる。
【０１８３】
実際のところ、どの程度の数を閾値として、設定すべきかについては、作成されたラダープログラムに依存するところとなるのは、実施の形態２で述べたとおりであるから、各デバイスがコイルとなっているラダー１行中において、どの程度の接点数（制御依存回数）によって制御されているか、その接点数（制御依存回数）を使用状況として抽出する機能、すなわちデバイスの制御接点数（制御依存回数）のヒストグラム機能を設けることにしている。その内容等についても、実施の形態２と同様である。
【０１８４】
実施の形態３においても、後向き依存関係の抽出も、前向き依存関係の抽出と同じである。特に、後向きの依存関係を抽出する際に、絞り込みの効果が大きい。
【０１８５】
なお、実施の形態１〜３を適宜組み合わせて実施することができる。例えば、実施の形態１と実施の形態３、実施の形態２と実施の形態３、実施の形態１と実施の形態２と実施の形態３のように適宜組み合わせて実施することができる。これにより、さらなる絞り込みが可能となる。
【０１８６】
以上のように、実施の形態３では、変数使用状況抽出部１４（図２参照）が、第１の条件（例えば、制御依存回数の閾値）を設定する際の参考情報として供するように、ラダープログラムからデバイスについて、１つのラダー行でいくつの接点から制御依存を受けているのかを示す回数に関するヒストグラムを抽出する。これにより、ヒストグラムの抽出結果に応じて、ＯＮ／ＯＦＦ制御する条件がとても複雑であって不具合が起こりやすいデバイスとそうでないデバイスとの分かれ目となる閾値を特定することができ、第１の条件として、例えば、それ以上の依存関係の抽出処理を行わないことにする制御依存回数の閾値を決めることができる。
【０１８７】
また、実施の形態３では、解析条件設定操作部９が、第１の条件として、さらなる前向き又は後向きのデバイス依存関係を抽出しない制御依存回数の閾値を設定する。変数依存関係抽出部１５は、抽出しない制御依存回数の閾値（第１の条件）に合致する、すなわちその制御依存回数が閾値以上であるデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出しないように、ラダープログラム１６から解析条件設定操作部９で設定された起点を起点として前向き又は後向きのデバイス依存関係を抽出して、第１の抽出結果を生成する。これにより、第１の条件を用いることで、デバイス依存関係の方向性を利用してデバイス依存関係を効率的に絞り込むことができる。
【０１８８】
実施の形態４．
次に、実施の形態４にかかるプログラム解析支援装置について説明する。以下では、実施の形態２及び実施の形態３と異なる部分を中心に説明する。
【０１８９】
実施の形態２及び実施の形態３に見られるような、内部的に使用されるＭデバイスのうち重要なものは、自己保持となっている場合が多い。
【０１９０】
そこで、実施の形態４では、自己保持となっているデバイスに対処するための仕組みについて説明する。
【０１９１】
ここで、自己保持とは、図２３で示されるようなラダーのことであって、デバイスＭ５は、デバイスＸ５がＯＮになればＯＮとなり、しかもデバイスＸ５がＯＦＦになっても、デバイスＭ５はＯＮを保持し続けることから、自己保持と呼ばれる。ＯＮを保持し続けるデバイスＭ５をＯＦＦにするためには、デバイスＸ６またはデバイスＸ７をＯＮにすればよい。そのため、デバイスＭ５にとって、デバイスＸ５の位置に記述される接点はＯＮ条件としての依存関係、デバイスＸ６又はデバイスＸ７の位置に記述される接点はＯＦＦ条件としての依存関係であるといえる。
【０１９２】
このように、自己保持となっているデバイスは、状態を保持するものであるから、制御において重要な役割を果たすことが多いのである。
【０１９３】
ここに着目し、実施の形態４では、ラダー１行中で接点としてもコイルとしても使用されていて自己保持となっているデバイスについては、それ以上の依存関係の抽出処理を行わないことにする。
【０１９４】
図２４は、デバイス種別によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にし、それ以上の依存関係の抽出処理を行わないことにするデバイス種別として、自己保持を指定している場合を示している。
【０１９５】
例えば、図２４に示すように、解析条件設定操作画面９ａにおいて、２つの解析選択欄９ａ１，９ａ２のうち解析選択欄９ａ２が選択され、向き指定欄９ａ５で前向きが選択され、起点指定欄９ａ６で抽出したい依存関係の起点としてデバイスＸ１が指示され、種別指定オンオフ欄９ａ７で種別指定を行うこと（オン）が指示される。そして、種別指定欄９ａ８で、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスの種別（第１の条件）として、自己保持デバイスが指示される。
【０１９６】
デバイス種別によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理について、図２５を用いて説明する。図２５は、自己保持デバイスを考慮した依存関係の抽出処理を示すフローチャートである。
【０１９７】
ステップＳ６１では、解析条件設定操作部９が、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起点設定指示に応じて、抽出したい依存関係の起点を設定する。例えば、図２４に示す場合、解析条件設定操作部９は、抽出したい依存関係の起点としてデバイスＸ１を設定する。解析条件設定操作部９は、設定された、抽出したい依存関係の起点の情報を解析処理実行部１３へ供給する。
【０１９８】
また、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた第１の条件設定指示に応じて、第１の条件を設定する。例えば、図２４に示す場合、解析条件設定操作部９は、第１の条件として、すなわち、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイス種別として、自己保持デバイスを設定する。解析条件設定操作部９は、設定された第１の条件の情報を解析処理実行部１３へ供給する。
【０１９９】
ステップＳ７０では、変数依存関係抽出部１５が、再帰処理を行う。具体的には、変数依存関係抽出部１５は、実施の形態１の再帰処理（ステップＳ１０）と基本的に同様であるが、次の点で異なる処理を行う。
【０２００】
ステップＳ７４では、変数依存関係抽出部１５が、処理対象のデバイスが自己保持デバイスであるか否かを判断する。変数依存関係抽出部１５は、自己保持デバイスである（ステップＳ７４で「Ｙｅｓ」）場合、処理をＳ１７へ進め、自己保持デバイスでない（ステップＳ７４で「Ｎｏ」）場合、処理をＳ１５へ進める。
【０２０１】
このように、デバイス種別によってそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理により、多数の解析条件（解析コマンド、解析対象等）を組み合わせて指定せずとも、巨大で複雑な依存関係（の有向グラフ）を絞り込むことができる。
【０２０２】
なお、実施の形態４においても、後向き依存関係の抽出も、前向き依存関係の抽出と同様である。
【０２０３】
また、実施の形態１から４を適宜組み合わせて実施することができる。これにより、さらなる絞り込みが可能となる。
【０２０４】
以上のように、実施の形態４では、解析条件設定操作部９が、第１の条件として、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイス種別（例えば、自己保持デバイス）を設定する。変数依存関係抽出部１５は、抽出しないデバイス種別（第１の条件）に合致するデバイスについてさらなる前向き又は後向きのデバイス依存関係を抽出しないように、ラダープログラム１６から解析条件設定操作部９で設定された起点を起点として前向き又は後向きのデバイス依存関係を抽出して、第１の抽出結果を生成する。これにより、第１の条件を用いることで、デバイス依存関係の方向性を利用してデバイス依存関係を効率的に絞り込むことができる。
【０２０５】
実施の形態５．
次に、実施の形態５にかかるプログラム解析支援装置について説明する。以下では、実施の形態１〜４と異なる部分を中心に説明する。
【０２０６】
実施の形態１〜４によれば、巨大で複雑な依存関係は絞り込むことができるものの、それによって絞り込まれた結果として、得られた依存関係には、当然ながら、起点となるデバイスが影響を与えるデバイスあるいは起点となるデバイスに影響を与えるデバイスの全てのデバイスが含まれていない。従来の依存関係抽出が、抽出してほしいと意図する依存関係の抽出の範囲を超えて、さらなる依存関係の抽出を行っているところ、実施の形態１から４は、これを防止することを目的としているからである。
【０２０７】
そこで、起点となるデバイスが影響を与えるデバイスあるいは起点となるデバイスに影響を与えるデバイスの全てのデバイスを、１つの巨大で複雑な依存関係として抽出するのではなく、複数からなる、適度に絞り込まれた依存関係のセットとして抽出することを考えるのが実施の形態５である。
【０２０８】
例えば、図５のラダープログラムに対して、デバイスＸ１を起点とした場合、従来の依存関係抽出では図４を抽出するところ、実施の形態１では、図７のように絞り込まれた結果として抽出するのであるが、こうして得られた図７の終点の１つであるデバイスＹ３を新たな起点として、別途、さらなる依存関係を抽出することができる。このようにして得られた２つの依存関係は、デバイスＸ１を起点として絞り込むことなく得られた場合の１つの依存関係をデバイスＹ３によって分割したものに相当する。
【０２０９】
このように、１つの巨大で複雑な依存関係を確認するよりは、複数からなる、適度に絞り込まれた依存関係のセットを確認するほうが、理解しやすい。しかも、これら複数の依存関係は、１つの巨大で複雑な依存関係を、ラダー処理上において重要な意味をもつデバイスで切り分けて分断したものであるから、より理解がしやすいものとなっている。
【０２１０】
これを実施するための方法として、絞り込まれた依存関係の終点について、自動的に、新たな起点として、別途、さらなる依存関係を抽出する。すなわち、実施の形態１〜４と同様にして抽出されたデバイス依存関係における各終点を新たな起点として、別途、さらなるデバイス依存関係を抽出する。
【０２１１】
例えば、変数依存関係抽出部１４は、第１の抽出結果に従ったデバイス依存関係における終点デバイスについて、別途、その終点デバイスを起点としたデバイス依存関係を抽出して、第２の抽出結果を生成する。変数依存関係抽出部１４は、生成された第２の抽出結果を変数依存関係表示処理部１２へ供給する。
【０２１２】
変数依存関係表示処理部１２は、第２の抽出結果を変数依存関係抽出部１４から受ける。例えば、変数依存関係表示処理部１２は、第１の抽出結果に従ってデバイス依存関係を表示するとともに、第２の抽出結果に従ってデバイス依存関係を表示する。例えば、変数依存関係表示処理部１２は、第１の抽出結果に従ったデバイス依存関係の有向グラフと第２の抽出結果に従ったデバイス依存関係の有向グラフとを、互いに識別可能な形態で表示画面４ａ上に表示する（図２７参照）。すなわち、変数依存関係表示処理部１２は、解析条件設定操作部９により設定された起点を起点とするデバイス依存関係（図４参照）を、第１の抽出結果及び第２の抽出結果に基づいて、２以上のデバイス依存関係に分割して表示する（図２７参照）。
【０２１３】
実施の形態１〜４と同様にして抽出されたデバイス依存関係における各終点を新たな起点として、別途、さらなるデバイス依存関係を抽出する処理について、図２６を用いて説明する。図２６は、抽出された依存関係の終点を自動的に新たな起点とする抽出処理を示すフローチャートである。
【０２１４】
ステップＳ８１では、実施の形態１〜４と同様の前処理を行う。例えば、解析条件設定操作部９は、実施の形態１のステップＳ１（図１０参照）と同様の処理を行う。あるいは、例えば、解析条件設定操作部９及び変数使用状況抽出部１４は、実施の形態２のステップＳ２１〜ステップＳ２３（図１５参照）と同様の処理を行う。あるいは、例えば、解析条件設定操作部９及び変数使用状況抽出部１４は、実施の形態３のステップＳ４１〜ステップＳ４３（図２２参照）と同様の処理を行う。あるいは、例えば、解析条件設定操作部９は、実施の形態４のステップＳ６１（図２５参照）と同様の処理を行う。
【０２１５】
ステップＳ８２では、変数依存関係抽出部１５が、実施の形態１〜４と同様の再帰処理を行う。例えば、変数依存関係抽出部１５は、ステップＳ８１で実施の形態１の前処理が行われた場合、実施の形態１のステップＳ１０（図１０参照）と同様の処理を行う。あるいは、例えば、変数依存関係抽出部１５は、ステップＳ８１で実施の形態２の前処理が行われた場合、実施の形態２のステップＳ３０（図１５参照）と同様の処理を行う。あるいは、例えば、変数依存関係抽出部１５は、ステップＳ８１で実施の形態３の前処理が行われた場合、実施の形態３のステップＳ５０（図２２参照）と同様の処理を行う。あるいは、例えば、変数依存関係抽出部１５は、ステップＳ８１で実施の形態４の前処理が行われた場合、実施の形態４のステップＳ７０（図２５参照）と同様の処理を行う。これにより、変数依存関係抽出部１５は、デバイス依存関係を抽出する。
【０２１６】
ステップＳ９０では、変数依存関係抽出部１５が、再帰処理を行う。具体的には、変数依存関係抽出部１５は、以下のステップＳ９１〜ステップＳ９６の処理を行う。
【０２１７】
ステップＳ９１では、変数依存関係抽出部１５が、ステップＳ８２で抽出されたデバイス依存関係における全ての終点デバイスを起点としたか否かが判断される。変数依存関係抽出部１５は、全ての終点デバイスを起点とした（ステップＳ９１で「Ｙｅｓ」）場合、処理を終了し、全ての終点デバイスを起点としていない（ステップＳ９１で「Ｎｏ」）場合、処理をステップＳ９２へ進める。
【０２１８】
ステップＳ９２では、変数依存関係抽出部１５が、ステップＳ８２で抽出されたデバイス依存関係における全ての終点デバイスのうち、未処理のデバイスを１つ、処理対象として選択する。変数依存関係抽出部１５は、選択されたデバイスを新たに起点として設定する。
【０２１９】
ステップＳ９３では、変数依存関係抽出部１５が、ステップＳ８２で行ったのと同じ実施形態の方式により、デバイス依存関係を抽出する。
【０２２０】
ステップＳ９４では、変数依存関係抽出部１５が、ステップＳ９３でさらなる依存関係の抽出が行われたか否かを判断する。変数依存関係抽出部１５は、さらなる依存関係の抽出が行われた（ステップＳ９４で「Ｙｅｓ」）場合、処理をステップＳ９５へ進め、さらなる依存関係の抽出が行われていない（ステップＳ９４で「Ｎｏ」）場合、処理をステップＳ９１へ戻す。
【０２２１】
ステップＳ９５では、変数依存関係抽出部１５が、処理対象のデバイスを新たに起点として設定する。
【０２２２】
ステップＳ９６では、変数依存関係抽出部１５が、ステップＳ９５で設定された起点を第２の起点デバイスとして、デバイスの依存関係を抽出する。例えば、変数依存関係抽出部１５は、前向きのデバイス依存関係の抽出が指定された場合、第２の起点デバイスが影響を与える全てのデバイスをラダープログラム１６中より抽出する。あるいは、例えば、変数依存関係抽出部１５は、後向きのデバイス依存関係の抽出が指定された場合、第２の起点デバイスに影響を与える全てのデバイスをラダープログラム１６中より抽出する。変数依存関係抽出部１５は、抽出処理が完了したら、処理をステップＳ９１へ戻す。
【０２２３】
この方法によれば、図５のラダープログラムに対して、デバイスＸ１を起点とした場合、図２７のような依存関係を抽出することができる。図２７では、デバイスＸ１を起点として実施の形態１と同様にして抽出されたデバイス依存関係の有向グラフがタブ「Ｘ１」とともに示され、抽出されたデバイス依存関係における終点デバイスＹ３について、別途、終点デバイスＹ３を起点としたデバイス依存関係の有向グラフがタブ「Ｙ３」とともに示されている。
【０２２４】
なお、解析条件設定操作部９において指定された条件に合致するデバイスについては、変数依存関係抽出部１５において考慮して絞り込む代わりに、変数依存関係表示部１２において考慮することにして、絞り込むことなく得られた一のデバイス依存関係を、指定された条件に合致するデバイスに基づいて、二以上のデバイス依存関係に分割して表示してもよい。これは、変数依存関係抽出部１５において処理していたデバイス依存関係の分割処理を、変数依存関係表示部１２のほうへ移動させたに過ぎないので、実質的な処理内容は、同様である。
【０２２５】
以上のように、実施の形態５では、変数依存関係抽出部１５が、第１の抽出結果に従ったデバイス依存関係における終点デバイスについて、別途、その終点デバイスを起点としたデバイス依存関係を抽出して、第２の抽出結果を生成する。変数依存関係表示処理部１２は、解析条件設定操作部９により設定された起点を起点とするデバイス依存関係（図４参照）を、第１の抽出結果及び第２の抽出結果に基づいて、２以上のデバイス依存関係に分割して表示する（図２７参照）。これにより、１つの巨大で複雑な依存関係を、ラダー処理上において重要な意味をもつデバイスで切り分けて分断した、適度に絞り込まれた依存関係のセットとして、理解しやすい形態で、抽出することができる。
【０２２６】
実施の形態６．
次に、実施の形態６にかかるプログラム解析支援装置について説明する。以下では、実施の形態２と異なる部分を中心に説明する。
【０２２７】
実施の形態２の依存関係の抽出では、制御において重要な役割を果たすデバイスより先の依存関係を抽出しないものとしている。これらは、すなわち、起点となるデバイスと、制御において重要な役割を果たすデバイスとの間の依存関係を抽出するものである。
【０２２８】
ところで、ラダープログラムが実現している制御の全体を鳥瞰するためには、制御において重要な役割を果たすデバイス間の依存関係を確認するのが、効率的である。
【０２２９】
そこで、実施の形態６では、実施の形態２とは逆に、参照回数の多いデバイスのみ、その先の依存関係を抽出し、参照回数の少ないデバイスについては、その先の依存関係を抽出しないことにする。
【０２３０】
例えば、図１５に示すフローチャートにおいて、ステップＳ３４の処理を、次のステップＳ３４ａ（図示せず）の処理に置き換える。
【０２３１】
ステップＳ３４ａでは、変数依存関係抽出部１５が、処理対象のデバイスが参照使用される回数がステップＳ２３で設定された閾値以上であるか否かを判断する。例えば、図１３に示す場合、変数依存関係抽出部１５は、処理対象のデバイスが参照使用される回数が３回以上であるか否かを判断する。変数依存関係抽出部１５は、閾値以上である（ステップＳ３４で「Ｙｅｓ」）場合、処理をＳ１５へ進め、閾値以上でない（ステップＳ３４で「Ｎｏ」）場合、処理をＳ１７へ進める。
【０２３２】
このようにすれば、参照回数が多く制御において重要な役割を果たすデバイス間の依存関係だけを抽出し、参照回数が少なく制御において付随的・補助的な役割のデバイスを省略することで、ラダープログラムが実現している制御の全体を鳥瞰することが可能となる。
【０２３３】
なお、実施の形態１から５を適宜組み合わせて実施することができ、より効果的となる。例えば、実施の形態２と組み合わせた場合について説明すると、先ず実施の形態２を利用して、参照回数が少なく制御において付随的・補助的な役割のデバイスを起点として、制御において重要な役割を果たすデバイスとの間の依存関係を抽出し、その後、そうしてたどり着いた重要デバイスを、実施の形態５によって自動的に起点として、実施の形態６によって、ラダーが実現している制御の全体を鳥瞰することが可能となる依存関係を抽出し、最後に、その中から最も不具合の原因と思われるデバイスを起点として、従来の依存関係を抽出することで、無用に依存関係が発散した結果となることを回避しつつ、末端の原因にたどり着くことができる。
【０２３４】
実施の形態７．
次に、実施の形態７にかかるプログラム解析支援装置について説明する。以下では、実施の形態１から４と異なる部分を中心に説明する。
【０２３５】
実施の形態１から４では、巨大で複雑な依存関係は絞り込むことができるものの、それによって絞り込まれた結果として、得られた依存関係には、当然ながら、起点となるデバイスが影響を与えるデバイスあるいは起点となるデバイスに影響を与えるデバイスの全てデバイスが含まれていない。従来の依存関係抽出が、抽出してほしいと意図する依存関係の抽出の範囲を超えて、さらなる依存関係の抽出を行っているところ、実施の形態１から４は、これを防止することを目的としているからである。
【０２３６】
ところで、生産設備で起こる不具合動作には、入力をＯＮしたにも関わらず、出力がＯＮしない、というものがある。そのどこに原因があるかを解析するためには、起点となるデバイスが影響を与える全てのデバイスを抽出しなくとも、起点がＯＮすることによってＯＮされるデバイスだけを抽出すればよい場合がある。
【０２３７】
ここに着目し、実施の形態７では、ａ接点として使用されているところに限って、依存関係の抽出処理を進めることにしている。ａ接点は、例えば、図２３に示される、デバイスＸ５やデバイスＭ５のような正論理で参照される接点のことであり、接点がＯＮすればコイルがＯＮするものである。
【０２３８】
ａ接点として使用されているところに限った依存関係の抽出処理について図２８を用いて説明する。図２８は、ａ接点を考慮した依存関係の抽出処理を示すフローチャートである。
【０２３９】
ステップＳ１００では、変数依存関係抽出部１５が、再帰処理を行う。具体的には、変数依存関係抽出部１５は、実施の形態１の再帰処理（ステップＳ１０）と基本的に同様であるが、次の点で異なる処理を行う。
【０２４０】
ステップＳ１０１では、変数依存関係抽出部１５が、解析条件設定操作部９により設定された起点デバイス（例えば、デバイスＸ１）を起点として、デバイスの依存関係を抽出する。例えば、変数依存関係抽出部１５は、前向きのデバイス依存関係の抽出が指定された場合、起点デバイスがａ接点によって影響を与える全てのデバイスをラダープログラム１６中より抽出する。あるいは、例えば、変数依存関係抽出部１５は、後向きのデバイス依存関係の抽出が指定された場合、起点デバイスにａ接点によって影響を与える全てのデバイスをラダープログラム１６中より抽出する。
【０２４１】
このように、ａ接点として使用されているところに限った依存関係の抽出処理により、例えば、起点がＯＮすることによってＯＮされるデバイスを選択的に抽出できる。すなわち、多数の解析条件（解析コマンド、解析対象等）を組み合わせて指定せずとも、巨大で複雑な依存関係（の有向グラフ）を絞り込むことができる。
【０２４２】
なお、入力が負論理の場合は、ａ接点ではなくｂ接点となるから、ｂ接点として使用されているところに限って、依存関係の抽出処理を進めることについては、同様である。ここで、ｂ接点とは、図２３において、デバイスＸ６及びデバイスＸ７のような負論理で参照される接点のことであり、接点がＯＦＦすればコイルがＯＮするものである。
【０２４３】
また、以上においては、前向き依存関係の場合について説明したが、出力がＯＮしない原因がどこにあるかを解析するためには、起点デバイスにａ接点によって影響を与える全てのデバイスを抽出しなくとも、起点がＯＮするための条件となるＯＮされるべきデバイスを選択的に抽出すればよい場合があるから、後向き依存関係の場合においても、ａ接点として使用されているところに限って、依存関係の抽出処理を進めることについては、同様である。なお、ａ接点とｂ接点とは論理が逆転しているものであるから、ｂ接点について選択的に依存抽出処理を進めることは、ａ接点での依存抽出処理を止めることである。
【０２４４】
実施の形態７は、実施の形態１から６と適宜組み合わせて実施することができる。これにより、デバイス依存関係のさらなる絞り込みが可能となる。
【０２４５】
実施の形態８．
次に、実施の形態８にかかるプログラム解析支援装置について説明する。以下では、実施の形態１と異なる部分を中心に説明する。
【０２４６】
実施の形態１では、上記の第１の問題点の解決を目指しているが、実施の形態８では、さらに、上記の第２の問題点の解決を目指す。すなわち、実施の形態８では、第２の問題点への対処として、エラーが発生した時のデバイスメモリの値を保持しておき、その値を考慮したデバイス依存関係の抽出処理を行うことで、再現性の低い不具合原因を特定する。
【０２４７】
生産設備では、不具合動作を起こした場合には、その旨を作業者に伝えるとともに、復旧作業を促す必要がある。このためＰＣでは、エラーの発生を示すＦデバイスが用意されており、各種の不具合動作を起こした場合には、それぞれのＦデバイスをＯＮにするようなラダープログラムが作成される。
【０２４８】
そして、従来のサンプリングトレースでは、予め指定した数点のデバイスについて、常時サンプリングトレースを実行しつつ、当該ＦデバイスがＯＮとなったとき（または当該ＦデバイスがＯＮとなったときから一定時間あるいは一定点数に達すれば）サンプリングトレースを停止して、得られたサンプリングトレース結果を見て、当該ＦデバイスがＯＮに至るまでの他デバイスの値の時系列変化を確認して、不具合原因を特定している。
【０２４９】
しかし、それぞれのＦデバイスをＯＮにする原因、すなわち、当該Ｆデバイスに影響を与える他のデバイスの数は膨大であるから、第２の問題点が存在することは、前述のとおりである。
【０２５０】
従来のサンプリングトレースには、上述のとおり、常時サンプリングトレースを実行しつつ指定されたトリガ条件の成立で停止（またはトリガ条件成立から一定後に停止）するプレトリガ機能のほか、トリガ条件成立からサンプリングトレースを開始する通常トリガ機能がある。
【０２５１】
そこで、実施の形態８では、この通常トリガ機能を利用し、ＦデバイスがＯＮとなるときをトリガ条件とし、サンプリング点数を１点とする代わりに、サンプリング対象となるデバイスを全デバイス（サンプリング可能な範囲内での全デバイス）に設定する。すなわち、解析条件設定操作部９は、第１の条件として、さらなる前向き又は後向きのデバイス依存関係を抽出しないデバイスをデバイスメモリダンプ１８のデバイスにすることを設定する。
【０２５２】
例えば、デバイス２つを８１９２点サンプリングすると、総計１６３８３点のサンプリング容量が必要となるが、同じサンプリング容量でも、１点サンプリングなら、１６３８３個分のデバイスの値を得ることができるのであるから、当該ＦデバイスがＯＮとなった瞬間に限り、そのときのＰＣの内部状態をおよそ把握することができる。
【０２５３】
このようにして得られたサンプリングトレース結果は、その瞬間のデバイスメモリの状態をダンプしたものであるといえる。ＰＣの内部の全メモリをダンプすることが、容量的に無理であれば、ダンプのトリガとなっている当該Ｆデバイス値に影響を与えるデバイスを選択的にダンプしてもよい。これは、当該Ｆデバイスを起点とした後向き依存関係を抽出して得られたデバイスであり、予め設定しておくことが可能である。
【０２５４】
こうして得られるデバイスメモリダンプ１８（図２参照）を考慮し、当該デバイスをＯＮとする条件となっているデバイスを選択的に遡ることで、後向き依存関係を絞り込むことが可能となる。
【０２５５】
例えば、解析条件設定操作部９は、異常発生を出力するデバイス（例えば、デバイスＦ１）を抽出したい依存関係の起点として設定するとともに、デバイスメモリダンプ１８を考慮したデバイス依存関係の抽出を行うように変数依存関係抽出部１５に指示する。
【０２５６】
図２９は、デバイスメモリダンプ１８を考慮してそれ以上のデバイス依存関係の抽出処理を行わない機能をチェックして有効にしている場合を示している。
【０２５７】
例えば、解析条件設定操作画面９ａは、種別指定オンオフ欄９ａ７、種別指定欄９ａ８、回数指定オンオフ欄９ａ９、及び回数指定欄９ａ１０に代えて、メモリダンプオンオフ欄９ａ１１を有する。なお、解析条件設定操作画面９ａは、種別指定オンオフ欄９ａ７、種別指定欄９ａ８、回数指定オンオフ欄９ａ９、及び回数指定欄９ａ１０に加えて、メモリダンプオンオフ欄９ａ１１を有していてもよい。
【０２５８】
メモリダンプオンオフ欄９ａ１１では、メモリダンプ指定（すなわち、デバイスメモリダンプ１８を考慮すること）を行うこと（オン）及びメモリダンプ指定を行わないこと（オフ）のいずれかが指示される。図２９では、メモリダンプ指定を行うこと（オン）が指示された場合（すなわち、が例示されている。メモリダンプオンオフ欄９ａ１１では、例えば、チェックを入れることでメモリダンプ指定を行うこと（オン）を指示し、チェックを外すことでメモリダンプ指定を行わないこと（オフ）を指示してもよい。
【０２５９】
変数依存関係抽出部１５は、解析条件設定操作部９からの指示に応じて、デバイスメモリダンプ１８（図２参照）を参照し、解析条件設定操作部９により設定された起点（例えば、デバイスＦ１）を起点として、デバイスメモリダンプ１８の保持内容を参酌しながら、前向き又は後向きのデバイス依存関係を抽出し、第１の抽出結果を生成する。変数依存関係抽出部１５は、第１の抽出結果を変数依存関係表示処理部１２へ供給する。
【０２６０】
変数依存関係表示処理部１２は、第１の抽出結果を用いて、表示情報を生成して表示画面４ａ上に表示する。例えば、変数依存関係表示処理部１２は、図３２の右図の有効グラフを表示画面４ａ上に表示する。
【０２６１】
デバイスメモリダンプ１８を考慮してそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にした場合の依存関係の抽出処理について、図３３を用いて説明する。図３３は、デバイスのメモリダンプを考慮した依存関係の抽出処理を示すフローチャートである。
【０２６２】
ステップＳ１１１では、解析条件設定操作部９が、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた起点設定指示に応じて、抽出したい依存関係の起点を設定する。例えば、図２９に示す場合、解析条件設定操作部９は、抽出したい依存関係の起点としてデバイスＦ１を設定する。解析条件設定操作部９は、設定された、抽出したい依存関係の起点の情報を解析処理実行部１３へ供給する。
【０２６３】
また、解析条件設定操作部９は、ユーザ操作８に対応して操作ボタン５ａ等で受け付けられた第２の条件設定指示に応じて、第２の条件を設定する。例えば、図２９に示す場合、解析条件設定操作部９は、第２の条件として、すなわち、デバイスメモリダンプ１８の保持内容を設定する。解析条件設定操作部９は、設定された第２の条件の情報を解析処理実行部１３へ供給する。
【０２６４】
ステップＳ１２０では、変数依存関係抽出部１５が、再帰処理を行う。具体的には、変数依存関係抽出部１５は、実施の形態１の再帰処理（ステップＳ１０）と基本的に同様であるが、次の点で異なる処理を行う。
【０２６５】
ステップＳ１２１では、変数依存関係抽出部１５が、デバイスメモリダンプ１８（図２、図３０参照）を考慮し、起点デバイス（例えば、デバイスＦ１）がＯＮとなるか否かを判断する。変数依存関係抽出部１５は、ＯＮとなる（ステップＳ１２１で「Ｙｅｓ」）場合、処理をステップＳ１２２へ進め、ＯＦＦとなる（ステップＳ１２１で「Ｎｏ」）場合、処理を終了する。
【０２６６】
ステップＳ１２２では、変数依存関係抽出部１５が、解析条件設定操作部９により設定された起点デバイス（例えば、デバイスＦ１）を起点として、デバイスメモリダンプ１８を考慮しながら、デバイスの依存関係を抽出する。
【０２６７】
例えば、変数依存関係抽出部１５は、前向きのデバイス依存関係の抽出が指定された場合、起点デバイスが影響を与える全てのデバイスのうち、起点デバイスのＯＮが条件となっているデバイスをラダープログラム１６中より抽出する。あるいは、例えば、変数依存関係抽出部１５は、後向きのデバイス依存関係の抽出が指定された場合、起点デバイスに影響を与える全てのうち、起点デバイスのＯＮが条件となっているデバイスをラダープログラム１６中より抽出する。起点デバイスのＯＮが条件となっているデバイスは、例えば、デバイスメモリダンプ１８（図３０参照）を参照することで把握できる。
【０２６８】
例えば、図３０は、デバイスＦ１がＯＮとなるときをトリガ条件として取得したデバイスメモリダンプ１８である。このＯＮ／ＯＦＦ状況をラダープログラム上に反映すると、図３１のようになる。
【０２６９】
この場合、デバイスＦ１を起点として後向き依存関係を抽出すれば、まずデバイスＦ１に影響を与えるデバイスとしてデバイスＭ９が抽出される。デバイスメモリダンプ１８を考慮すれば、デバイスＭ９はＯＮであって、かつ、そのラダー行のコイルであるデバイスＦ１をＯＮにしているので、さらにデバイスＭ９に遡る。
【０２７０】
次にデバイスＭ９に影響を与えるデバイスとしてデバイスＭ９０，Ｍ９１，Ｍ９２が抽出される。デバイスＭ９０はＯＮであって、かつ、そのラダー行のコイルであるデバイスＭ９をＯＮにしているので、さらにデバイスＭ９０に遡る。一方でデバイスＭ９１はＯＮであるが、そのラダー行のコイルであるデバイスＭ９をＯＮにするものではない。なぜならばデバイスＭ９１とデバイスＭ９２の両方がＯＮの場合に限りデバイスＭ９がＯＮとなるラダーとなっているからである。よってデバイスＭ９１はこれ以上遡らない。デバイスＭ９２はＯＦＦであるから、これ以上遡らない。
【０２７１】
次にデバイスＭ９０に影響を与えるデバイスとしてデバイスＸ９が抽出される。デバイスＸ９はＯＮであって、かつ、そのラダー行のコイルであるデバイスＭ９０をＯＮにしているので、さらにデバイスＸ９に遡るが、デバイスＸ９に影響を与えるそれ以上の依存関係はない。
【０２７２】
単にデバイスＦ１を起点とした後向き依存関係を抽出すれば図３２の左図のような結果が得られるところ、デバイスメモリダンプ１８を考慮してそれ以上の依存関係の抽出処理を行わない機能をチェックして有効にすることで、図３２の右図のような絞り込んだ結果が得られる。
【０２７３】
こうすることで、再現性の低い不具合について、エラー発生の原因となりうる膨大な数のデバイスの中から、実際にエラー発生の原因となっているデバイスを絞り込むことができ、前述の第２の問題点を解決できる。
【０２７４】
なお、エラー発生時のサンプリングトレース機能によるデバイスメモリダンプの代わりに、任意の時点でのデバイスメモリそのものを参照することもできる。参照する先が、デバイスメモリダンプか、任意の時点でのデバイスメモリか、だけの違いだからである。エラー発生してからしばらくしてエラー停止するまでの間において、デバイスの状況が変化しない場合などでは、エラー発生時のサンプリングトレース機能によるデバイスメモリダンプを取るまでもなく、エラー停止の時点でのデバイスメモリそのものを参照しても、大差ないことも多い。
【０２７５】
実施の形態８において、当該デバイスがＯＮとなっている原因を遡るべく、後向き依存関係の抽出では１行のラダープログラムにはコイルに影響を与える接点が複数あるところ、メモリダンプを参照すれば実際にその瞬間においてコイルをＯＮにしている接点を選択的に遡っている。当該デバイスがＯＮとなっていることに起因しているところを掘り下げる場合も同様であって、前向き依存関係の抽出では複数のラダープログラムにおいて接点として参照されるために接点が影響を与えるコイルが複数あるところ、メモリダンプを参照すれば、実際にその瞬間において接点がＯＮにしているコイルを選択的に掘り下げることができる。
【０２７６】
また、ＯＮしているデバイスを遡るのではなく、ＯＦＦしているデバイスを遡るようにしてもよい。エラー発生の不具合の場合には、エラー発生を示すＦデバイスがＯＮとなるから、そのＦデバイスが何故ＯＮとなっているかの原因を探るべく、ＯＮしているデバイスを選択的に遡るが、動作すべき機能が動作しないような不具合の場合は、そのＹデバイスが何故ＯＮになっていないのか、すなわち何故ＯＦＦなのかの原因を探ることもある。この場合には、ＯＦＦしているデバイスを選択的に遡る。
【０２７７】
加えて、起点となるデバイスを指定すれば、その起点となるデバイスがＯＮとなっている場合には、ＯＮしているデバイスを選択的に遡って、その起点となるデバイスがＯＦＦとなっている場合には、ＯＦＦしているデバイスを選択的に遡るようにしてもよい。この場合、ＯＮを遡るか、ＯＦＦを遡るかの指定操作が不要となる。
【０２７８】
実施の形態８は、実施の形態１から７を適宜組み合わせて実施することができる。これにより、さらなる絞り込みが可能となる。
【０２７９】
以上のように、実施の形態８では、解析条件設定操作部９が、異常発生を出力するデバイス（例えば、デバイスＦ１）を抽出したい依存関係の起点として設定する。変数依存関係抽出部１５は、異常発生を出力するデバイスを起点としてデバイスメモリダンプ１８の保持内容を参酌して前向き又は後向きのデバイス依存関係を抽出する。これにより、再現性の低い不具合について、実質的に不具合原因の特定に直接的に寄与しないもの（例えば、デバイスの動作）を除外しながら、不具合に深く関係する依存関係（の有向グラフ）を抽出して表示できる。この結果、再現性の低い不具合について、不具合動作について詳細な動作の解析を行うことができる。
【０２８０】
実施の形態９．
次に、実施の形態９にかかるプログラム解析支援装置について説明する。以下では、実施の形態１と異なる部分を中心に説明する。
【０２８１】
デバイス依存関係は、有向グラフによる表示（ブロックダイアグラム形式での表示）が、理解に適している。しかしながら、デバイス依存関係が巨大で複雑な場合には、その表示操作のために高度なユーザインタフェースが必要となる。よって、パーソナルコンピュータとＰＣとを接続してデバッグ作業を行う場合には、キーボード、マウス、高解像度ディスプレイにより、高度なユーザインタフェースが実現されうるため、問題ないが、生産設備が備える表示器と操作ボタンを用いてデバッグ作業が行われる場合には、これら限られたユーザインタフェースの範囲内で、デバイス依存関係の有向グラフによる表示（ブロックダイアグラム形式での表示）操作方法を実現せざるをえないため、パーソナルコンピュータの場合に比べ、格段に操作数が多くなり、かえって手間となってしまうという問題点がある。
【０２８２】
実施の形態１から８を適宜組み合わせて実施することで、巨大で複雑な依存関係は絞り込むことができるものの、限られたユーザインタフェースの範囲内で依存関係の有向グラフによる表示（ブロックダイアグラム形式での表示）操作しなければならないことに変わりない。
【０２８３】
ここで問題としているデバッグ作業とは、ＰＣが組み込まれた生産設備などラダープログラムによって計測制御されている生産設備を使って行われるのであって、不具合動作を解消するために行われるものであるから、巨大で複雑なラダープログラムの構造を解析して理解することよりもむしろエラー原因を迅速に特定することが直接的な目的である。
【０２８４】
ここに着目して、実施の形態９では、抽出されたデバイス依存関係の途中の表示を省略し、原因と結果とを選択的に表示可能とする。すなわち、変数依存関係表示処理部１２（図２参照）は、デバイス依存関係の起点となるデバイスと、抽出されたデバイス依存関係の終点デバイスとを選択的に表示する機能を有する。例えば、変数依存関係表示処理部１２は、ユーザ操作８に応じて、図３４のようなデバイス依存関係を、図３５に示すように、デバイス依存関係の起点デバイスと終点デバイスとの間を省略した表示形態で表示する。
【０２８５】
表示を省略されたデバイス依存関係の途中については、デバイス依存関係の階層ごとに展開して表示できるよう、別途、表示を省略した部分を展開して表示したり、展開して表示した部分を省略して閉じたりするボタンを設ける。例えば、変数依存関係表示処理部１２は、第１の抽出結果に従って、デバイス依存関係の起点と終点とについて表示するとともに、起点と終点との中間点である途中のデバイスについて、展開表示操作に従って表示し、折りたたみ表示操作指示に従って表示を省略する。このとき、変数依存関係表示処理部１２は、例えば、起点と終点との中間点である途中のデバイスについて、各階層ごとに、展開表示操作に従って表示し、折りたたみ表示操作指示に従って表示を省略する。これにより、デバイス依存関係の全体のうち、確認したい任意の部分（例えば、任意の階層）を選択的に確認することができる。
【０２８６】
例えば、全てを展開して表示すれば、実質的に、デバイス依存関係の有向グラフによる表示（ブロックダイアグラム形式での表示）と同じになる。
【０２８７】
実施の形態９によれば、デバイス依存関係の起点となるデバイスと、抽出されたデバイス依存関係の終点デバイスとを選択的に表示することが可能となり、ＰＣが組み込まれた生産設備といった、限られたユーザインタフェースの範囲内でも、エラー原因を迅速に特定することが可能となる。
【０２８８】
なお、抽出された依存関係が巨大で複雑であれば、終点デバイスの数も膨大なものとなるが、実施の形態１から８を実施することで、あるいは、実施の形態１から８を適宜組み合わせて実施することで、依存関係の末端デバイスの数は現実的な範囲内に絞り込むことができるから、実施の形態９の効果が十分に発揮される。
【０２８９】
以上のように、実施の形態９では、変数依存関係表示処理部１２が、第１の抽出結果に従って、デバイス依存関係の起点と終点とについて表示するとともに、デバイス依存関係における起点と終点との中間点である途中のデバイスについて、展開表示操作に従って表示し、折りたたみ表示操作指示に従って表示を省略する。例えば、変数依存関係表示処理部１２は、起点と終点との中間点である途中のデバイスについて、各階層ごとに、展開表示操作に従って表示し、折りたたみ表示操作指示に従って表示を省略する。これにより、デバイス依存関係の全体のうち、確認したい任意の部分（例えば、任意の階層）を選択的に確認することができる。
【０２９０】
実施の形態１０．
次に、実施の形態１０にかかるプログラム解析支援装置について説明する。以下では、実施の形態８と異なる部分を中心に説明する。
【０２９１】
Ｆデバイスが用意されていることについては、実施の形態８で述べたとおりであって、不具合動作を起こした場合には、その旨を作業者に伝えるとともに、復旧作業を促すために、生産設備では、その表示部に、異常の発生を表示する（例えば非特許文献４）。このとき作業者が、異常の原因がどこにあるかを特定するために、異常発生の画面をみてから、その異常に相当するＦデバイスを別途しらべて、そのＦデバイスを別途解析条件として設定して、依存関係やラダー回路を見るという作業は煩雑である。
【０２９２】
ここに着目して、実施の形態１０では、図３６に示すように、生産設備における制御装置２０がプログラム解析支援装置１を備えることとして、異常発生表示の中から１つの異常表示を選択すると、その異常表示に相当するＦデバイスを起点とした依存関係を表示させることにする。このとき、当該異常が発生した際のデバイスメモリダンプ１８を参酌して、依存関係を抽出させることもできる。
【０２９３】
例えば、制御装置２０は、プログラム解析支援装置１、デバイスメモリダンプ１８、異常発生表示処理部２１、表示部２４、異常発生時メモリダンプ処理部２２、及び制御部２３を備える。プログラム解析支援装置１は、例えば、実施の形態１〜９のいずれかにかかるプログラム解析支援装置を用いることができる。デバイスメモリダンプ１８は、実施の形態１，８におけるデバイスメモリダンプを用いることができる。
【０２９４】
異常発生表示処理部２１は、ラダープログラム１６（図２参照）において異常発生が検出されたときに、異常発生を表示部２４上に表示する。表示部２４は、例えば、液晶ディスプレイなどの表示装置であってもよい。異常発生表示処理部２１は、例えば、１以上の異常発生について表示部２４上に表示する。例えば、異常発生表示処理部２１は、図３７の左図に示すように、複数の異常発生について表示部２４上に表示する。このとき、異常発生表示処理部２１は、例えば、制御部２３からの要求に応じて、表示部２４上に表示している表示情報をプログラム解析支援装置１へ供給してもよい。これにより、プログラム解析支援装置１の表示部４上にも複数の異常発生について表示できる。
【０２９５】
異常発生表示処理部２１は、ユーザ操作８に応じて、表示された異常発生のうち１つの異常発生が選択されたことを認識すると、選択された異常発生の情報をプログラム解析支援装置１及び制御部２３に通知する。
【０２９６】
異常発生時メモリダンプ処理部２２は、ラダープログラム１６において異常発生が検出されたときに、異常発生を出力するデバイスに係るメモリをダンプして保持する（図３０参照）。異常発生時メモリダンプ処理部２２は、保持しているメモリダンプの内容を、定期的に、又は、制御部２３からの要求に応じて、デバイスメモリダンプ１８に書き込む。
【０２９７】
制御部２３は、制御装置２０の各部を全体的に制御する。
【０２９８】
例えば、制御部２３は、ラダープログラム１６において異常発生が検出されたときに、異常発生を表示部２４上に表示するように、異常発生表示処理部２１を制御する。このとき、制御部２３は、表示部２４上に表示している表示情報をプログラム解析支援装置１へ供給するように、異常発生表示処理部２１を制御してもよい。
【０２９９】
例えば、制御部２３は、ラダープログラム１６において異常発生が検出されたときに、異常発生を出力するデバイスに係るメモリをダンプするように、異常発生時メモリダンプ処理部２２を制御する。
【０３００】
例えば、制御部２３は、所定のタイミング（例えば、異常発生時メモリダンプ処理部２２におけるメモリダンプが完了したものと推定されるタイミング）において、保持しているメモリダンプの内容をデバイスメモリダンプ１８に書き込むように、異常発生時メモリダンプ処理部２２を制御する。
【０３０１】
例えば、制御部２３は、異常発生表示処理部２１により表示される異常発生のうち１つの異常発生が選択されたとき、選択された異常発生を出力するデバイスを抽出したい依存関係の起点として前向き又は後向きのデバイス依存関係を抽出するように、プログラム解析支援装置１を制御する。このとき、制御部２３は、選択された異常発生を出力するデバイスに係る条件として、選択された異常発生を出力するデバイスに関する異常発生時メモリダンプ処理部２２の保持内容、すなわちデバイスメモリダンプ１８の保持内容を参酌して、前向き又は後向きのデバイス依存関係を抽出するように、プログラム解析支援装置１を制御する。
【０３０２】
例えば、制御部２３は、抽出して得られたデバイス依存関係を表示するように、プログラム解析支援装置１を制御する（図３７の右図参照）。このとき、制御部２３は、選択された異常発生と抽出して得られたデバイス依存関係とを対応付けた表示形態で表示するように、プログラム解析支援装置１を制御してもよい。例えば、図３７の場合、アラームメッセージ１から有向グラフに延びた破線の矢印により、異常発生を示すアラームメッセージ１と、抽出されたデバイス依存関係に対応した有向グラフとが対応付けられている。
【０３０３】
例えば、図３７に示すような表示形態により、はじめに異常発生の原因となる制御構造を大局的な視点で把握でき、その中から注目したい部分を局所的に詳細確認するためにその部分に相当するラダー回路を表示することが可能となり、異常原因の特定作業をより一層効率化できる。
【０３０４】
以上のように、実施の形態１０では、制御装置２０において、制御部２３は、異常発生表示処理部２１により表示される異常発生のうち１つの異常発生が選択されたとき、選択された異常発生を出力するデバイスを抽出したい依存関係の起点として前向き又は後向きのデバイス依存関係を抽出し、得られたデバイス依存関係を表示するように、プログラム解析支援装置１を制御する。これにより、再現性の低い不具合について、実質的に不具合原因の特定に直接的に寄与しないもの（例えば、デバイスの動作）を除外しながら、不具合に深く関係する依存関係（の有向グラフ）を抽出して表示できる。この結果、再現性の低い不具合について、不具合動作について詳細な動作の解析を行うことができる。
【０３０５】
また、実施の形態１０では、制御装置２０において、制御部２３は、異常発生表示処理部２１により表示される異常発生のうち１つの異常発生が選択されたとき、選択された異常発生を出力するデバイスを抽出したい依存関係の起点として設定するとともに、選択された異常発生を出力するデバイスに係る条件として選択された異常発生を出力するデバイスに関する異常発生時メモリダンプ処理部２２の保持内容を参酌して前向き又は後向きのデバイス依存関係を抽出し、得られたデバイス依存関係を表示するように、プログラム解析支援装置１を制御する。このとき、例えば、制御部２３は、選択された異常発生と抽出して得られたデバイス依存関係とを対応付けた表示形態で表示するように、プログラム解析支援装置１を制御する。これにより、はじめに異常発生の原因となる制御構造を大局的な視点で把握でき、その中から注目したい部分を局所的に詳細確認するためにその部分に相当するラダー回路を表示することが可能となり、異常原因の特定作業をより一層効率化できる。
【産業上の利用可能性】
【０３０６】
以上のように、本発明にかかるプログラム解析支援装置は、ラダープログラムの不具合解析に有用である。
【符号の説明】
【０３０７】
１  プログラム解析支援装置、２  マイクロプロセッサ、３  データ格納メモリ、４  表示部、５  入力部、６  保存部、７  システムバス、８  ユーザ操作、９  解析条件設定操作部、１０  解析結果表示処理部、１１  変数使用状況表示処理部、１２  変数依存関係表示処理部、１３  解析処理実行部、１４  変数使用状況抽出部、１５  変数依存関係抽出部、１６  ラダープログラム、１７  デバイスコメント、１８  デバイスメモリダンプ、１９  回路表示処理部、２０  制御装置、２１  異常発生表示処理部、２２  異常発生時メモリダンプ処理部、２３  制御部、２４  表示部。
【図１】
2014097379.tif 000003
【図２】
2014097379.tif 000004
【図３】
2014097379.tif 000005
【図４】
2014097379.tif 000006
【図５】
2014097379.tif 000007
【図６】
2014097379.tif 000008
【図７】
2014097379.tif 000009
【図８】
2014097379.tif 000010
【図９】
2014097379.tif 000011
【図１０】
2014097379.tif 000012
【図１１】
2014097379.tif 000013
【図１２】
2014097379.tif 000014
【図１３】
2014097379.tif 000015
【図１４】
2014097379.tif 000016
【図１５】
2014097379.tif 000017
【図１６】
2014097379.tif 000018
【図１７】
2014097379.tif 000019
【図１８】
2014097379.tif 000020
【図１９】
2014097379.tif 000021
【図２０】
2014097379.tif 000022
【図２１】
2014097379.tif 000023
【図２２】
2014097379.tif 000024
【図２３】
2014097379.tif 000025
【図２４】
2014097379.tif 000026
【図２５】
2014097379.tif 000027
【図２６】
2014097379.tif 000028
【図２７】
2014097379.tif 000029
【図２８】
2014097379.tif 000030
【図２９】
2014097379.tif 000031
【図３０】
2014097379.tif 000032
【図３１】
2014097379.tif 000033
【図３２】
2014097379.tif 000034
【図３３】
2014097379.tif 000035
【図３４】
2014097379.tif 000036
【図３５】
2014097379.tif 000037
【図３６】
2014097379.tif 000038
【図３７】
2014097379.tif 000039
【国際調査報告】
2014097379.tif 000040
2014097379.tif 000041