(57)【要約】【課題】制御プログラムが標準関数を含む場合でも、その制御プログラムから生産ラインを構成する複数のデバイス間の依存関係を適切に導出可能な技術を提供する。【解決手段】本発明の一側面に係る解析装置は、制御プログラムの依存性解析では導出不能な標準関数の入力パラメータ及び出力パラメータの間の依存関係の定義を関数構造情報という外部情報により与える。すなわち、当該構成に係る解析装置は、標準関数における入力パラメータ及び出力パラメータの間の依存関係を定義する関数構造情報に基づいて、標準関数における入力パラメータ及び出力パラメータの間の依存関係を特定する。これにより、標準関数の入出力間の依存関係が明らかになるため、標準関数を介在する複数のデバイス変数間の依存関係を特定することができる。【選択図】図１
2020149302.tif 000002
【特許請求の範囲】
【請求項１】
生産ラインに含まれる複数のデバイスの動作を制御するための複数の命令を含む制御プログラムを取得するプログラム取得部であって、当該複数の命令は、関数及び複数の変数を含み、当該関数は、標準で用意される標準関数を含み、複数の変数は、それぞれ当該各デバイスに対応する複数のデバイス変数を含む、プログラム取得部と、
制御プログラムに対して依存性解析を実行することで、前記関数の入力パラメータ又は出力パラメータに対する各デバイス変数の依存関係のパターンを抽出するプログラム解析部と、
標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報に基づいて、前記関数に含まれる標準関数における入力パラメータと出力パラメータとの間の依存関係を特定する定義付与部と、
抽出した依存関係のパターンにおいて、前記関数のうちの同一の関数の、入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定することで、前記各デバイス変数間の依存関係を特定する関係特定部と、
各デバイス変数間の依存関係を特定した結果に関する情報を出力する出力部と、
を備える、
解析装置。
【請求項２】
前記依存性解析を実行することで、前記依存関係のパターンを抽出することは、
前記制御プログラムに対する構文解析を実行することで、前記制御プログラムから抽象構文木を生成すること、
生成した抽象構文木から、前記各命令の依存する経路を示す制御フローグラフを生成すること、
抽象構文木又は制御フローグラフから各デバイス変数を抽出すること、
抽象構文木又は制御フローグラフから関数を抽出すること、
制御フローグラフを参照し、各命令の依存する経路をたどることで、抽出した関数の入力パラメータ又は出力パラメータに対する抽出した各デバイス変数の依存関係のパターンを抽出すること、
を含む、
請求項１に記載の解析装置。
【請求項３】
前記依存関係を特定した結果に基づいて、特定された前記各デバイス変数間の依存関係を示す有向グラフであって、前記各デバイス変数をそれぞれ表現する複数の第１ノード、及び前記依存関係を有することを表現するエッジを含む有向グラフを生成するグラフ生成部を更に備え、
前記出力部は、生成された有向グラフを前記結果に関する情報として出力する、
請求項１又は２に記載の解析装置。
【請求項４】
前記有向グラフは、前記関数を表現するブロックであって、表現される前記関数の入力パラメータ又は出力パラメータに対して依存関係を有するデバイス変数を表現する第１ノードに前記エッジを介して連結されたブロックを更に含むように生成される、
請求項３に記載の解析装置。
【請求項５】
前記複数の変数は、前記各デバイス変数とは異なる他の変数であって、前記複数のデバイス変数のうちのいずれかと前記関数の入力パラメータ又は出力パラメータとの間で利用される他の変数を含み、
前記有向グラフは、前記他の変数を表現する第２ノードであって、前記複数のデバイス変数のうちのいずれかを表現する第１ノード及び前記関数を表現するブロックの間に配置され、それぞれに前記エッジを介して連結された第２ノードを更に含むように生成される、
請求項４に記載の解析装置。
【請求項６】
前記有向グラフは、表現される前記関数の入力パラメータ及び出力パラメータそれぞれを区別して、前記依存関係を有する前記デバイス変数を表現する前記第１ノードに前記ブロックが前記エッジを介して連結され、かつ前記エッジ付近には、対応する入力パラメータ又は出力パラメータの名称が示されるように生成される、
請求項４又は５に記載の解析装置。
【請求項７】
前記複数の命令は、複数の前記関数を含み、
前記複数の関数は、前記標準関数とは異なるユーザ定義関数であって、前記制御プログラム内でユーザにより定義されるユーザ定義関数を更に含み、
前記有向グラフは、複数の前記ブロックのうち、前記複数の関数のうちの前記標準関数を表現する第１のブロックを第１の形態で示し、前記ユーザ定義関数を表現する第２のブロックを前記第１の形態とは異なる第２の形態で示すように生成される、
請求項４から６のいずれか１項に記載の解析装置。
【請求項８】
前記有向グラフは、前記ブロック内に配置され、表現される前記関数の入力パラメータ及び出力パラメータそれぞれをそれぞれ表現する複数の第３ノードであって、表現される前記入力パラメータ及び前記出力パラメータそれぞれに対して依存関係を有するデバイス変数を表現する前記第１ノードに前記エッジを介してそれぞれ連結され、かつ表現される前記関数において互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現する第３ノード同士が前記エッジを介して連結された、複数の第３ノードを更に含むように生成される、
請求項４から６のいずれか１項に記載の解析装置。
【請求項９】
前記複数の命令は、複数の前記関数を含み、
前記複数の関数は、前記標準関数とは異なるユーザ定義関数であって、前記制御プログラム内でユーザにより定義されるユーザ定義関数を更に含み、
前記有向グラフは、複数の前記ブロックのうち、前記複数の関数のうちの前記標準関数を表現する第１のブロックを第１の形態で示し、前記ユーザ定義関数を表現する第２のブロックを前記第１の形態とは異なる第２の形態で示すように生成される、
請求項８に記載の解析装置。
【請求項１０】
前記複数の変数は、前記各デバイス変数とは異なるローカル変数であって、前記ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用されるローカル変数を含み、
前記有向グラフは、前記ローカル変数を表現する第４ノードであって、前記ユーザ定義関数を表現する第２のブロック内において、前記互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現する第３ノードの間に配置され、かつそれぞれに前記エッジを介して連結された第４ノードを更に含むように生成される、
請求項９に記載の解析装置。
【請求項１１】
前記複数の関数は、前記ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用される標準関数を含み、
前記有向グラフは、前記ユーザ定義関数の内部で利用される前記標準関数を表現する第１のブロックが、前記ユーザ定義関数を表現する第２のブロック内において、前記互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現する第３ノードの間に配置され、かつそれぞれに前記エッジを介して連結されるように生成される、
請求項９又は１０に記載の解析装置。
【請求項１２】
前記複数の関数は、前記ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用される他のユーザ定義関数を更に含み、
前記有向グラフは、前記ユーザ定義関数の内部で利用される前記他のユーザ定義関数を表現する他の第２のブロックが、前記ユーザ定義関数を表現する第２のブロック内において、前記互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現する第３ノードの間に配置され、かつそれぞれに前記エッジを介して連結されるように生成される、
請求項９から１１のいずれか１項に記載の解析装置。
【請求項１３】
前記制御プログラムは、複数のサブプログラムに分割され、
前記有向グラフは、前記各サブプログラムにそれぞれ対応する複数の領域を含み、かつ前記各第１ノードが、前記複数の領域のうち、表現する前記デバイス変数を利用するサブプログラムの領域に配置される、ように生成される、
請求項３から１２のいずれか１項に記載の解析装置。
【請求項１４】
前記複数のサブプログラムのうちの少なくともいずれかのサブプログラムはセクションに分割され、
前記有向グラフは、前記セクションに分割されたサブプログラムの領域において、前記セクションに対応するサブ領域を含み、かつ前記セクションで利用されたデバイス変数を表現する第１ノードが、前記セクションに対応するサブ領域に配置される、ように生成される、
請求項１３に記載の解析装置。
【請求項１５】
コンピュータが、
生産ラインに含まれる複数のデバイスの動作を制御するための複数の命令を含む制御プログラムを取得するステップであって、当該複数の命令は、関数及び複数の変数を含み、当該関数は、標準で用意される標準関数を含み、複数の変数は、それぞれ当該各デバイスに対応する複数のデバイス変数を含む、ステップと、
制御プログラムに対して依存性解析を実行することで、前記関数の入力パラメータ又は出力パラメータに対する各デバイス変数の依存関係のパターンを抽出するステップと、
標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報に基づいて、前記関数に含まれる標準関数における入力パラメータと出力パラメータとの間の依存関係を特定するステップと、
抽出した依存関係のパターンにおいて、前記関数のうちの同一の関数の、入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定することで、前記各デバイス変数間の依存関係を特定するステップと、
各デバイス変数間の依存関係を特定した結果に関する情報を出力するステップと、
を実行する、
解析方法。
【請求項１６】
コンピュータに、
生産ラインに含まれる複数のデバイスの動作を制御するための複数の命令を含む制御プログラムを取得するステップであって、当該複数の命令は、当該関数及び複数の変数を含み、関数は、標準で用意される標準関数を含み、複数の変数は、それぞれ当該各デバイスに対応する複数のデバイス変数を含む、ステップと、
制御プログラムに対して依存性解析を実行することで、前記関数の入力パラメータ又は出力パラメータに対する各デバイス変数の依存関係のパターンを抽出するステップと、
標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報に基づいて、前記関数に含まれる標準関数における入力パラメータと出力パラメータとの間の依存関係を特定するステップと、
抽出した依存関係のパターンにおいて、前記関数のうちの同一の関数の、入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定することで、前記各デバイス変数間の依存関係を特定するステップと、
各デバイス変数間の依存関係を特定した結果に関する情報を出力するステップと、
を実行させるための、
解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析装置、解析方法、及び解析プログラムに関する。
【背景技術】
【０００２】
工場等における生産ラインは、コンベア、ロボットアーム等の複数のデバイス（機構）で構成されている。この生産ラインのいずれかのデバイスで異常が発生すると、製品の製造が停止してしまい、大きな損害をもたらす可能性がある。そのため、工場等では、保全員が、生産ラインを定期的に巡回して、異常の発生又はその予兆の有無の確認を行っている。
【０００３】
生産ライン内で異常の発生又はその予兆を検知したとき、異常が検知されたデバイスよりも前のデバイスに真の異常の原因が存在する場合がある。したがって、真の異常の原因を特定するためには、生産ライン内の各デバイスの依存関係を把握することが重要である。しかしながら、生産ラインを構成するデバイスの数が多くなり、かつ各デバイスの動作条件が日々変化し得ることから、全てのデバイスの依存関係を正確に把握するのは困難である。
【０００４】
そのため、従来、熟練の保全員が、自身の経験及び勘に基づいて、生産ラインを構成する複数のデバイス間の依存関係を把握して、生産ライン内で生じた異常又はその予兆の検知を行っていた。このような保全業務を非熟練の保全員が行うことができるようにするため、生産ラインを構成する複数のデバイスの依存関係を可視化する技術の開発が望まれていた。
【０００５】
そこで、特許文献１では、制御プログラムで定義されている制御アルゴリズム及び入出力機器の関係を可視化するための情報処理装置が提案されている。具体的には、特許文献１で提案されている情報処理装置は、制御プログラムに記述されている各信号入出力用変数が、いずれの入出力機器と信号を入出力するための変数であるかを特定し、特定した結果に基づいて、各変数間の依存関係を示す有向グラフを生成する。特許文献１で開示される発明によれば、生成される有向グラフにより、生産ラインを構成する入出力機器の依存関係を把握することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−２２５２５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本件発明者らは、制御プログラムから生産ラインを構成する各デバイスの依存関係を導出する特許文献１のような従来の技術には次のような問題点があることを見出した。すなわち、制御プログラムには、通常、様々な命令を規定するために１つ以上の関数（関数ブロック）が用いられる。関数は、入力パラメータに与えられた引数に基づいて、定められた演算処理を実行し、その演算結果を出力パラメータに出力する命令群である。この関数の種類には、標準関数とユーザ定義関数とが存在する。
【０００８】
これらのうち、ユーザ定義関数の内容は、制御プログラム内にユーザにより記述される。そのため、制御プログラムを解析することにより、ユーザ定義関数における入力パラメータと出力パラメータとの間の依存関係を特定（導出）することができる。一方、標準関数は、制御プログラムを作成する環境において標準で用意されるものであり、その内容は、制御プログラム内には記述されず、例えば、定義ファイル（ライブラリ）等の別ファイルに記述される。そのため、制御プログラムを解析しても、標準関数における入力パラメータと出力パラメータとの間の依存関係を導出することはできない。したがって、従来の技術では、この標準関数を利用した場合に、標準関数の入出力間で依存関係が不明になってしまい、デバイス（変数）間の依存関係を適切に導出することができないという問題点があった。
【０００９】
本発明は、一側面では、このような実情を鑑みてなされたものであり、その目的は、制御プログラムが標準関数を含む場合でも、その制御プログラムから生産ラインを構成する複数のデバイス間の依存関係を適切に導出可能な技術を提供することである。
【課題を解決するための手段】
【００１０】
本発明は、上述した課題を解決するために、以下の構成を採用する。
【００１１】
すなわち、本発明の一側面に係る解析装置は、生産ラインに含まれる複数のデバイスの動作を制御するための複数の命令を含む制御プログラムを取得するプログラム取得部であって、当該複数の命令は、関数及び複数の変数を含み、関数は、標準で用意される標準関数を含み、複数の変数は、それぞれ当該各デバイスに対応する複数のデバイス変数を含む、プログラム取得部と、制御プログラムに対して依存性解析を実行することで、前記関数の入力パラメータ又は出力パラメータに対する各デバイス変数の依存関係のパターンを抽出するプログラム解析部と、標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報に基づいて、前記関数に含まれる標準関数における入力パラメータと出力パラメータとの間の依存関係を特定する定義付与部と、抽出した依存関係のパターンにおいて、前記関数のうちの同一の関数の、入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定することで、前記各デバイス変数間の依存関係を特定する関係特定部と、各デバイス変数間の依存関係を特定した結果に関する情報を出力する出力部と、を備える。
【００１２】
当該構成に係る解析装置は、制御プログラムに対する依存性解析により、関数のパラメータに対する各デバイス変数の依存関係のパターンを抽出する。制御プログラムに標準関数が含まれている場合、抽出されるパターンには、標準関数に対するデバイス変数の依存関係のパターンが含まれ得る。上記のとおり、この標準関数の内容は、制御プログラム内には記述されないため、制御プログラムの依存性解析では、標準関数の入出力間の依存関係を導出することができない。
【００１３】
そこで、当該構成に係る解析装置は、制御プログラムの依存性解析では導出不能な標準関数の入力パラメータ及び出力パラメータの間の依存関係の定義を関数構造情報という外部情報により与える。すなわち、当該構成に係る解析装置は、標準関数における入力パラメータ及び出力パラメータの間の依存関係を定義する関数構造情報に基づいて、標準関数における入力パラメータ及び出力パラメータの間の依存関係を特定する。これにより、標準関数の入出力間の依存関係が明らかになるため、標準関数を介在する複数のデバイス変数間の依存関係を特定することができるようになる。したがって、当該構成によれば、制御プログラムが標準関数を含む場合でも、その制御プログラムから生産ラインを構成する複数のデバイス間の依存関係を適切に導出することができる。
【００１４】
なお、制御プログラムは、生産ラインに含まれる複数のデバイスの動作を制御するための一連の命令群を含む。一連の命令群は、１つ以上の関数のインスタンス及び複数の変数を含む。関数は、定義された情報処理を実行するための命令群により構成される。例えば、関数は、与えられた入力パラメータに基づいて、定められた演算処理を実行し、その演算結果を出力パラメータに出力する命令群により構成される。「関数」は、「関数ブロック」と称されてもよい。入力パラメータ（入力変数）は、関数に入力値（引数）を与えるためのパラメータである。出力パラメータ（出力変数）は、関数の演算結果（戻り値）を受け取るためのパラメータである。関数は、１つ以上の入力パラメータ及び１つ以上の出力パラメータを含むように定義されてよい。また、入力パラメータ及び出力パラメータは共通のパラメータで与えられてもよい。この共通のパラメータは「入出力パラメータ」と称されてよい。関数は、１つ以上の入出力パラメータを含むように定義されてよい。なお、１つの入出力パラメータを含むことは、１つの入力パラメータ及び１つの出力パラメータを含むことと同じとして取り扱われてよい。入出力パラメータには、配列が用いられてもよい。なお、以下では、入力パラメータ及び出力パラメータを単に「パラメータ」とも記載する。
【００１５】
関数の種類として、ユーザ定義関数及び標準関数の２種類の関数が存在する。ユーザ定義関数は、制御プログラム内にユーザにより定義された関数である。ユーザ定義関数の内容は、制御プログラム内に記述される。そのため、制御プログラムに対する依存性解析により、ユーザ定義関数における入出力間の依存関係を特定することができる。一方、標準関数は、システムに標準で用意された関数である。標準関数の内容は、定義ファイル（ライブラリ）等により制御プログラムとは別に与えられる。そのため、制御プログラムに対する依存性解析では、標準関数における入出力間の依存関係を特定することはできない。制御プログラムは、この標準関数のインスタンスを少なくとも１つ以上含んでよい。
【００１６】
デバイス変数は、生産ラインに含まれるデバイス（機構）に対応し、対応するデバイスに対する何らかの命令を定めるために制御プログラム内で利用される。ただし、制御プログラム内で利用される変数の種類は、デバイス変数に限られなくてもよい。制御プログラムには、デバイス変数以外の他の変数が利用されてもよい。他の変数は、例えば、生産ラインに対する何らかの命令を定めるために利用される。制御プログラムは、複数のサブプログラムに分割されてよい。この場合、変数の種別（属性）として、内部変数及び外部変数の２種類の種別を与えることができる。内部変数は、一つのサブプログラム内で利用される変数である。外部変数は、複数のサブプログラム間で共通に利用される変数である。デバイス変数は、これらのうちの外部変数の一種である。
【００１７】
生産ラインは、何らかの物を生産可能であればよく、その種類は、特に限定されなくてもよい。デバイスの種類は、特に限定されなくてもよく、実施の形態に応じて適宜選択されてよい。デバイスは、例えば、コンベア、ロボットアーム、サーボモータ、シリンダ、吸着パッド、カッター装置、シール装置等であってよい。また、デバイスは、例えば、成形機、印刷機、実装機、リフロー炉、基板検査装置等の複合装置であってもよい。更に、デバイスは、例えば、上記のような何らかの物理的な動作を伴う装置の他に、例えば、各種センサにより何らかの情報を検知する装置、各種センサからデータを取得する装置、取得したデータから何らかの情報を検知する装置、取得したデータを情報処理する装置等の内部処理を行う装置を含んでもよい。１つのデバイスは、１又は複数の装置で構成されてもよいし、装置の一部で構成されてもよい。複数のデバイスにより１つの装置が構成されてもよい。また、同一の装置が複数の処理を実行する場合には、それぞれを別のデバイスとみなしてもよい。例えば、同一の装置が第１の処理と第２の処理とを実行する場合に、第１の処理を実行する当該装置を第１のデバイスとみなし、第２の処理を実行する当該装置を第２のデバイスとみなしてもよい。
【００１８】
上記一側面に係る解析装置において、前記依存性解析を実行することで、前記依存関係のパターンを抽出することは、前記制御プログラムに対する構文解析を実行することで、前記制御プログラムから抽象構文木を生成すること、生成した抽象構文木から、前記各命令の依存する経路を示す制御フローグラフを生成すること、抽象構文木又は制御フローグラフから各デバイス変数を抽出すること、抽象構文木又は制御フローグラフから関数を抽出すること、制御フローグラフを参照し、各命令の依存する経路をたどることで、抽出した関数の入力パラメータ又は出力パラメータに対する抽出した各デバイス変数の依存関係のパターンを抽出すること、を含んでもよい。当該構成によれば、関数のパラメータに対する各デバイス変数の依存関係のパターンを適切に抽出することができるため、生産ラインを構成する複数のデバイス間の依存関係を適切に導出することができる。
【００１９】
上記一側面に係る解析装置は、前記依存関係を特定した結果に基づいて、特定された前記各デバイス変数間の依存関係を示す有向グラフであって、前記各デバイス変数をそれぞれ表現する複数の第１ノード、及び前記依存関係を有することを表現するエッジを含む有向グラフを生成するグラフ生成部を更に備えてもよい。また、前記出力部は、生成された有向グラフを前記結果に関する情報として出力してもよい。当該構成によれば、有向グラフを利用して、導出された複数のデバイス間の依存関係を把握しやすいグラフィカルな表現で示すことができる。
【００２０】
なお、ノード（節点）は、変数を表現する。エッジ（枝）は、２つのノードを連結する。エッジにより連結されることは、各節点に対応するデバイス同士が依存関係を有することを示す。このとき、エッジの矢印の始点が依存元を示し、矢印の終点が依存先を示す。「依存関係がある」とは、依存元のデバイスの動作の結果が依存先のデバイスの動作に関係することである。
【００２１】
上記一側面に係る解析装置において、前記有向グラフは、前記関数を表現するブロックであって、表現される前記関数の入力パラメータ又は出力パラメータに対して依存関係を有するデバイス変数を表現する第１ノードに前記エッジを介して連結されたブロックを更に含むように生成されてよい。当該構成によれば、制御プログラムにおける各デバイスに対応するデバイス変数間の依存関係と関数の各パラメータに対する各デバイス変数の依存関係とを関連付けて示すことができる。そのため、関数のパラメータに対する各デバイス変数の依存関係を各デバイス間の依存関係に関連付けて把握することができるようになる。なお、ブロックは、上記ノードと同様に取り扱われる。
【００２２】
上記一側面に係る解析装置において、前記複数の変数は、前記各デバイス変数とは異なる他の変数であって、前記複数のデバイス変数のうちのいずれかと前記関数の入力パラメータ又は出力パラメータとの間で利用される他の変数を含んでもよい。また、前記有向グラフは、前記他の変数を表現する第２ノードであって、前記複数のデバイス変数のうちのいずれかを表現する第１ノード及び前記関数を表現するブロックの間に配置され、それぞれに前記エッジを介して連結された第２ノードを更に含むように生成されてよい。当該構成によれば、各デバイス変数間に他の変数が介在する場合に、この他の変数に関する依存関係を各デバイス間の依存関係に関連付けて示すことができる。
【００２３】
上記一側面に係る解析装置において、前記有向グラフは、表現される前記関数の入力パラメータ及び出力パラメータそれぞれを区別して、前記依存関係を有する前記デバイス変数を表現する前記第１ノードに前記ブロックが前記エッジを介して連結され、かつ前記エッジ付近には、対応する入力パラメータ又は出力パラメータの名称が示されるように生成されてよい。当該構成によれば、関数の各パラメータに対する各デバイス変数の依存関係を、各デバイス変数間の依存関係に関連付けてかつより明確に示すことができる。
【００２４】
上記一側面に係る解析装置において、前記複数の命令は、複数の前記関数を含んでもよく、前記複数の関数は、前記標準関数とは異なるユーザ定義関数であって、前記制御プログラム内でユーザにより定義されるユーザ定義関数を更に含んでもよい。そして、前記有向グラフは、複数の前記ブロックのうち、前記複数の関数のうちの前記標準関数を表現する第１のブロックを第１の形態で示し、前記ユーザ定義関数を表現する第２のブロックを前記第１の形態とは異なる第２の形態で示すように生成されてもよい。当該構成によれば、関数の種別を区別した上で、関数の各パラメータに対する各デバイス変数の依存関係を示すことができる。
【００２５】
上記一側面に係る解析装置において、前記有向グラフは、前記ブロック内に配置され、表現される前記関数の入力パラメータ及び出力パラメータそれぞれをそれぞれ表現する複数の第３ノードであって、表現される前記入力パラメータ及び前記出力パラメータそれぞれに対して依存関係を有するデバイス変数を表現する前記第１ノードに前記エッジを介してそれぞれ連結され、かつ表現される前記関数において互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現する第３ノード同士が前記エッジを介して連結された、複数の第３ノードを更に含むように生成されてよい。当該構成によれば、第３ノードを含むグラフ表現により、制御プログラムにおけるデバイス変数間の関数を介した依存関係を示すことができる。そのため、デバイス変数間の関数を介した依存関係を適切に把握することができるようになる。
【００２６】
上記一側面に係る解析装置において、前記複数の命令は、複数の前記関数を含んでよく、前記複数の関数は、前記標準関数とは異なるユーザ定義関数であって、前記制御プログラム内でユーザにより定義されるユーザ定義関数を更に含んでもよい。そして、前記有向グラフは、複数の前記ブロックのうち、前記複数の関数のうちの前記標準関数を表現する第１のブロックを第１の形態で示し、前記ユーザ定義関数を表現する第２のブロックを前記第１の形態とは異なる第２の形態で示すように生成されてよい。当該構成によれば、関数の種別を区別した上で、制御プログラムにおけるデバイス変数間の関数を介した依存関係を示すことができる。
【００２７】
上記一側面に係る解析装置において、前記複数の変数は、前記各デバイス変数とは異なるローカル変数であって、前記ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用されるローカル変数を含んでもよい。そして、前記有向グラフは、前記ローカル変数を表現する第４ノードであって、前記ユーザ定義関数を表現する第２のブロック内において、前記互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現する第３ノードの間に配置され、かつそれぞれに前記エッジを介して連結された第４ノードを更に含むように生成されてよい。当該構成によれば、制御プログラムにおけるデバイス変数間のユーザ定義関数を介した依存関係を当該ユーザ定義関数の内部構造に関連付けて示すことができる。
【００２８】
上記一側面に係る解析装置において、前記複数の関数は、前記ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用される標準関数を含んでもよい。そして、前記有向グラフは、前記ユーザ定義関数の内部で利用される前記標準関数を表現する第１のブロックが、前記ユーザ定義関数を表現する第２のブロック内において、前記互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現する第３ノードの間に配置され、かつそれぞれに前記エッジを介して連結されるように生成されてよい。当該構成によれば、制御プログラムにおけるデバイス変数間のユーザ定義関数を介した依存関係を当該ユーザ定義関数の内部構造に関連付けて示すことができる。
【００２９】
上記一側面に係る解析装置において、前記複数の関数は、前記ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用される他のユーザ定義関数を更に含んでもよい。そして、前記有向グラフは、前記ユーザ定義関数の内部で利用される前記他のユーザ定義関数を表現する他の第２のブロックが、前記ユーザ定義関数を表現する第２のブロック内において、前記互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現する第３ノードの間に配置され、かつそれぞれに前記エッジを介して連結されるように生成されてよい。当該構成によれば、制御プログラムにおけるデバイス変数間のユーザ定義関数を介した依存関係を当該ユーザ定義関数の内部構造に関連付けて示すことができる。
【００３０】
上記一側面に係る解析装置において、前記制御プログラムは、複数のサブプログラムに分割されてよい。そして、前記有向グラフは、前記各サブプログラムにそれぞれ対応する複数の領域を含み、かつ前記各第１ノードが、前記複数の領域のうち、表現する前記デバイス変数を利用するサブプログラムの領域に配置される、ように生成されてよい。当該構成によれば、分割プログラミングが行われた場合に、各デバイスに対応するデバイス変数の制御プログラムにおける所在と各デバイス変数間の依存関係とを関連付けて示すことができる。なお、サブプログラムの件数は、特に限定されなくてもよく、実施の形態に応じて適宜決定されてよい。
【００３１】
上記一側面に係る解析装置において、前記複数のサブプログラムのうちの少なくともいずれかのサブプログラムはセクションに分割されてよい。そして、前記有向グラフは、前記セクションに分割されたサブプログラムの領域において、前記セクションに対応するサブ領域を含み、かつ前記セクションで利用されたデバイス変数を表現する第１ノードが、前記セクションに対応するサブ領域に配置される、ように生成されてよい。当該構成によれば、各デバイスに対応するデバイス変数の制御プログラムにおける所在を、各デバイス変数間の依存関係に関連付けてかつより明確に示すことができる。なお、セクションの数は、特に限定されなくてもよく、実施の形態に応じて適宜決定されてよい。
【００３２】
上記各形態に係る解析装置の別の態様として、本発明の一側面は、以上の各構成を実現する情報処理方法であってもよいし、プログラムであってもよいし、このようなプログラムを記憶した、コンピュータ等が読み取り可能な記憶媒体であってもよい。ここで、コンピュータ等が読み取り可能な記憶媒体とは、プログラム等の情報を、電気的、磁気的、光学的、機械的、又は、化学的作用によって蓄積する媒体である。
【００３３】
例えば、本発明の一側面に係る解析方法は、コンピュータが、生産ラインに含まれる複数のデバイスの動作を制御するための複数の命令を含む制御プログラムを取得するステップであって、当該複数の命令は、関数及び複数の変数を含み、関数は、標準で用意される標準関数を含み、複数の変数は、それぞれ当該各デバイスに対応する複数のデバイス変数を含む、ステップと、制御プログラムに対して依存性解析を実行することで、前記関数の入力パラメータ又は出力パラメータに対する各デバイス変数の依存関係のパターンを抽出するステップと、標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報に基づいて、前記関数に含まれる標準関数における入力パラメータと出力パラメータとの間の依存関係を特定するステップと、抽出した依存関係のパターンにおいて、前記関数のうちの同一の関数の、入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定することで、前記各デバイス変数間の依存関係を特定するステップと、各デバイス変数間の依存関係を特定した結果に関する情報を出力するステップと、を実行する情報処理方法である。
【００３４】
また、例えば、本発明の一側面に係る解析プログラムは、コンピュータに、生産ラインに含まれる複数のデバイスの動作を制御するための複数の命令を含む制御プログラムを取得するステップであって、当該複数の命令は、関数及び複数の変数を含み、関数は、標準で用意される標準関数を含み、複数の変数は、それぞれ当該各デバイスに対応する複数のデバイス変数を含む、ステップと、制御プログラムに対して依存性解析を実行することで、前記関数の入力パラメータ又は出力パラメータに対する各デバイス変数の依存関係のパターンを抽出するステップと、標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報に基づいて、前記関数に含まれる標準関数における入力パラメータと出力パラメータとの間の依存関係を特定するステップと、抽出した依存関係のパターンにおいて、前記関数のうちの同一の関数の、入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定することで、前記各デバイス変数間の依存関係を特定するステップと、各デバイス変数間の依存関係を特定した結果に関する情報を出力するステップと、を実行させるためのプログラムである。
【発明の効果】
【００３５】
本発明によれば、制御プログラムが標準関数を含む場合でも、その制御プログラムから生産ラインを構成する複数のデバイス間の依存関係を適切に導出することができる。
【図面の簡単な説明】
【００３６】
【図１】図１は、本発明が適用される場面の一例を模式的に例示する。
【図２】図２は、実施の形態に係る解析装置のハードウェア構成の一例を模式的に例示する。
【図３】図３は、実施の形態に係る制御装置（ＰＬＣ）のハードウェア構成の一例を模式的に例示する。
【図４】図４は、実施の形態に係る解析装置のソフトウェア構成の一例を模式的に例示する。
【図５Ａ】図５Ａは、実施の形態に係る解析装置の処理手順の一例を例示する。
【図５Ｂ】図５Ｂは、実施の形態に係る解析装置の処理手順の一例を例示する。
【図６】図６は、実施の形態に係る解析装置による依存性解析の処理手順の一例を例示する。
【図７】図７は、実施の形態に係る制御プログラムの一例を示す。
【図８】図８は、図７の制御プログラムから得られる抽象構文木の一例を示す。
【図９】図９は、図８の抽象構文木から得られる制御フローグラフの一例を示す。
【図１０Ａ】図１０Ａは、実施の形態に係る解析装置による依存パターンを抽出するための処理手順の一例を例示する。
【図１０Ｂ】図１０Ｂは、実施の形態に係る解析装置による依存パターンを抽出するための処理手順の一例を例示する。
【図１１Ａ】図１１Ａは、実施の形態に係る解析装置によるユーザ定義関数に関する依存パターンを抽出するための処理手順（サブルーチン）の一例を例示する。
【図１１Ｂ】図１１Ｂは、実施の形態に係る解析装置によるユーザ定義関数に関する依存パターンを抽出するための処理手順（サブルーチン）の一例を例示する。
【図１２】図１２は、図７の制御プログラムに対する依存性解析により得られる依存関係のパターンを示すデータの一例を示す。
【図１３Ａ】図１３Ａは、実施の形態に係る解析装置によるデバイス変数間の依存関係を特定するための処理手順の一例を例示する。
【図１３Ｂ】図１３Ｂは、実施の形態に係る解析装置によるデバイス変数間の依存関係を特定するための処理手順の一例を例示する。
【図１４Ａ】図１４Ａは、実施の形態に係る関数構造情報の一例を模式的に例示する。
【図１４Ｂ】図１４Ｂは、実施の形態に係る解析装置において、デバイス変数間の依存関係を特定する過程で得られる中間データの一例を例示する。
【図１５】図１５は、実施の形態に係る解析装置により特定されたデバイス変数間の依存関係を示す特定結果データの一例を例示する。
【図１６】図１６は、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１７Ａ】図１７Ａは、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１７Ｂ】図１７Ｂは、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１７Ｃ】図１７Ｃは、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１７Ｄ】図１７Ｄは、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１８Ａ】図１８Ａは、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１８Ｂ】図１８Ｂは、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１８Ｃ】図１８Ｃは、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１８Ｄ】図１８Ｄは、依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図１９】図１９は、他の制御プログラムの一例を示す。
【図２０Ａ】図２０Ａは、図１９の制御プログラムに対して依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図２０Ｂ】図２０Ｂは、図１９の制御プログラムに対して依存関係を特定した結果に基づいて、実施の形態に係る解析装置により生成される有向グラフの一例を例示する。
【図２１】図２１は、変形例に係るグラフ表示装置のハードウェア構成の一例を例示する。
【図２２】図２２は、変形例に係るグラフ表示装置のソフトウェア構成の一例を例示する。
【図２３】図２３は、変形例に係るグラフ表示装置の処理手順の一例を例示する。
【図２４】図２４は、本発明が適用される他の場面の一例を模式的に例示する。
【発明を実施するための形態】
【００３７】
以下、本発明の一側面に係る実施の形態（以下、「本実施形態」とも表記する）を、図面に基づいて説明する。ただし、以下で説明する本実施形態は、あらゆる点において本発明の例示に過ぎない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。つまり、本発明の実施にあたって、実施形態に応じた具体的構成が適宜採用されてもよい。なお、本実施形態において登場するデータを自然言語により説明しているが、より具体的には、コンピュータが認識可能な疑似言語、コマンド、パラメータ、マシン語等で指定される。
【００３８】
§１  適用例
まず、図１を用いて、本発明が適用される場面の一例について説明する。図１は、本実施形態に係る解析装置１の適用場面の一例を模式的に例示する。本実施形態に係る解析装置１は、「グラフ表示装置」の一例である。図１の例では、解析装置１とは別のコンピュータであるＰＬＣ（programmable logic controller）２が存在し、ＰＬＣ２が、制御プログラム２２１に基づいて、生産ライン２７を構成する複数のデバイス２８の動作を制御する場面を想定している。
【００３９】
本実施形態に係る解析装置１は、生産ライン２７に含まれる複数のデバイス２８間の依存関係を制御プログラム２２１から導出するように構成されたコンピュータである。具体的に、解析装置１は、生産ライン２７に含まれる複数のデバイス２８の動作を制御するための複数の命令（一連の命令群）を含む制御プログラム２２１を取得する。制御プログラム２２１内で定義される複数の命令は、１つ以上の関数のインスタンス及び複数の変数を含む。
【００４０】
関数は、定義された情報処理を実行するための命令群により構成される。例えば、関数は、与えられた入力パラメータに基づいて、定められた演算処理を実行し、その演算結果を出力パラメータに出力する命令群により構成される。「関数」は、「関数ブロック」と称されてもよい。入力パラメータ（入力変数）は、関数に入力値（引数）を与えるためのパラメータである。出力パラメータ（出力変数）は、関数の演算結果（戻り値）を受け取るためのパラメータである。
【００４１】
関数は、１つ以上の入力パラメータ及び１つ以上の出力パラメータを含むように定義されてよい。また、入力パラメータ及び出力パラメータは共通のパラメータで与えられてもよい。この共通のパラメータは「入出力パラメータ」と称されてよい。関数は、１つ以上の入出力パラメータを含むように定義されてよい。入出力パラメータには、配列が用いられてもよい。なお、１つの入出力パラメータを含むことは、１つの入力パラメータ及び１つの出力パラメータを含むことと同じとして取り扱われてよい。
【００４２】
関数の種類として、ユーザ定義関数及び標準関数の２種類の関数が存在する。ユーザ定義関数は、制御プログラム内にユーザにより定義された関数である。ユーザ定義関数の内容は、制御プログラム内に記述される。一方、標準関数は、システムに標準で用意された関数である。標準関数の内容は、定義ファイル（ライブラリ）等により制御プログラムとは別に与えられる。制御プログラム２２１の１つ以上の関数のインスタンスは、１つ以上の標準関数４１のインスタンスを含む。
【００４３】
また、複数の変数は、それぞれ各デバイス２８に対応する複数のデバイス変数３１を含む。デバイス変数３１は、生産ライン２７に含まれるデバイス２８に対応し、対応するデバイス２８に対する何らかの命令を定めるために制御プログラム２２１内で利用される。ただし、制御プログラム２２１内で利用される変数の種類は、デバイス変数３１に限られなくてもよい。制御プログラム２２１には、デバイス変数３１以外の他の変数が利用されていてもよい。他の変数は、例えば、生産ライン２７に対する何らかの命令を定めるために利用される。制御プログラム２２１は、複数のサブプログラムに分割されてよい。この場合、変数の種別（属性）として、内部変数及び外部変数の２種類の種別を与えることができる。内部変数は、一つのサブプログラム内で利用される変数である。外部変数は、複数のサブプログラム間で共通に利用される変数である。デバイス変数３１は、これらのうちの外部変数の一種である。
【００４４】
生産ライン２７は、何らかの物を生産可能であればよく、その種類は、特に限定されなくてもよい。デバイス２８の種類は、特に限定されなくてもよく、実施の形態に応じて適宜選択されてよい。デバイス２８は、例えば、コンベア、ロボットアーム、サーボモータ、シリンダ、吸着パッド、カッター装置、シール装置等であってよい。また、デバイス２８は、例えば、成形機、印刷機、実装機、リフロー炉、基板検査装置等の複合装置であってもよい。更に、デバイス２８は、例えば、上記のような何らかの物理的な動作を伴う装置の他に、例えば、各種センサにより何らかの情報を検知する装置、各種センサからデータを取得する装置、取得したデータから何らかの情報を検知する装置、取得したデータを情報処理する装置等の内部処理を行う装置を含んでもよい。１つのデバイス２８は、１又は複数の装置で構成されてもよいし、装置の一部で構成されてもよい。複数のデバイス２８により１つの装置が構成されてもよい。また、同一の装置が複数の処理を実行する場合には、それぞれを別のデバイス２８とみなしてもよい。例えば、同一の装置が第１の処理と第２の処理とを実行する場合に、第１の処理を実行する当該装置を第１のデバイスとみなし、第２の処理を実行する当該装置を第２のデバイスとみなしてもよい。
【００４５】
本実施形態に係る解析装置１は、取得された制御プログラム２２１に対して依存性解析を実行することで、関数のインスタンスの入力パラメータ又は出力パラメータに対する各デバイス変数３１の依存関係のパターンを抽出する。抽出されるパターンには、標準関数４１のインスタンスの入力パラメータ４３又は出力パラメータ４４に対する各デバイス変数３１の依存関係のパターンが含まれる。ただし、標準関数４１の内容（内部構造）は、制御プログラム２２１内には記述されないため、制御プログラム２２１に対する依存性解析では、標準関数４１のインスタンスにおける入力パラメータ４３と出力パラメータ４４との間の依存関係を導出することができない。
【００４６】
そこで、本実施形態に係る解析装置１は、制御プログラム２２１に対する依存性解析では導出不能な標準関数４１の入力パラメータ４３と出力パラメータ４４との間の依存関係の定義を外部情報により与える。すなわち、解析装置１は、標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報１２１を取得する。そして、解析装置１は、関数構造情報１２１に基づいて、制御プログラム２２１に含まれる標準関数４１のインスタンスにおける入力パラメータ４３と出力パラメータ４４との間の依存関係を特定する。
【００４７】
抽出した依存関係のパターンにおいて、複数のデバイス変数３１のうちの一のデバイス変数が、制御プログラム２２１に含まれる１つ以上の関数のうちのある関数のインスタンスの入力パラメータに依存関係を有すると想定する。また、他のデバイス変数が、当該入力パラメータとの間に依存関係を有する同一の関数の出力パラメータに依存関係を有すると想定する。この場合に、本実施形態に係る解析装置１は、当該一のデバイス変数が当該他のデバイス変数との間に依存関係を有すると認定する。
【００４８】
すなわち、複数のデバイス変数３１のうちの第１のデバイス変数（一のデバイス変数）は、制御プログラム２２１に含まれる１つ以上の関数のうちのいずれかの関数の入力パラメータに対して依存関係を有し、第２のデバイス変数（他のデバイス変数）は、いずれかの関数の出力パラメータに対して依存関係を有すると想定する。この場合に、入力パラメータ及び出力パラメータが同一の関数のもの（換言すると、第１のデバイス変数及び第２のデバイス変数が共通の関数に対して依存関係を有する）であり、かつ入力パラメータと出力パラメータとの間に依存関係が存在する場合に、解析装置１は、第１のデバイス変数と第２のデバイス変数との間に依存関係が存在すると認定する。
【００４９】
制御プログラム２２１にユーザ定義関数のインスタンスが含まれる場合、ユーザ定義関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係は、制御プログラム２２１に対する依存性解析により特定される。一方、標準関数４１のインスタンスにおける入力パラメータ４３と出力パラメータ４４との間の依存関係は、関数構造情報１２１により与えられる。そのため、上記認定処理により、解析装置１は、各デバイス変数３１間の依存関係を特定することができる。解析装置１は、各デバイス変数３１間の依存関係を特定した結果に関する情報を出力する。
【００５０】
図１の例では、デバイス変数「Ｄ１」は、標準関数４１のインスタンスの入力パラメータ「Ｉ１」に対して依存関係を有している。デバイス変数「Ｄ２」は、標準関数４１のインスタンスの入力パラメータ「Ｉ２」に対して依存関係を有している。デバイス変数「Ｄ３」は、標準関数４１のインスタンスの出力パラメータ「Ｏ１」に対して依存関係を有している。デバイス変数「Ｄ４」は、標準関数４１のインスタンスの出力パラメータ「Ｏ２」に対して依存関係を有している。これらの依存関係のパターンは、依存性解析により抽出される。また、関数構造情報１２１により、入力パラメータ「Ｉ１」と出力パラメータ「Ｏ１」との間に依存関係が存在し、入力パラメータ「Ｉ２」と出力パラメータ「Ｏ１」及び「Ｏ２」それぞれとの間に依存関係が存在するとの定義が与えられる。
【００５１】
そのため、図１の例では、解析装置１は、デバイス変数「Ｄ１」がデバイス変数「Ｄ３」との間に依存関係を有し、デバイス変数「Ｄ２」がデバイス変数「Ｄ３」及び「Ｄ４」それぞれとの間に依存関係を有するとのように、各デバイス変数３１間の依存関係を特定することができる。なお、図１は、各デバイス変数３１間の依存関係の一例を示すに過ぎない。デバイス変数３１の数、その他の変数の数、関数のインスタンスの数、関数における各パラメータの数、及び依存関係の有無はそれぞれ適宜設定されてよい。
【００５２】
以上のとおり、本実施形態では、関数構造情報１２１により、標準関数４１の入力パラメータ４３と出力パラメータ４４との間の依存関係が明らかになるため、標準関数４１を介在する複数のデバイス変数３１間の依存関係を特定することができるようになる。したがって、本実施形態によれば、図１に例示されるように、制御プログラム２２１が標準関数４１を含む場合でも、その制御プログラム２２１から生産ライン２７を構成する複数のデバイス２８間の依存関係を適切に導出することができる。
【００５３】
§２  構成例
［ハードウェア構成］
＜解析装置＞
次に、図２を用いて、本実施形態に係る解析装置１のハードウェア構成の一例について説明する。図２は、本実施形態に係る解析装置１のハードウェア構成の一例を模式的に例示する。
【００５４】
図２に示されるとおり、本実施形態に係る解析装置１は、制御部１１、記憶部１２、通信インタフェース１３、入力装置１４、表示装置１５、及びドライブ１６が電気的に接続されたコンピュータである。なお、図２では、通信インタフェースを「通信Ｉ／Ｆ」と記載している。
【００５５】
制御部１１は、ハードウェアプロセッサであるＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）等を含み、プログラム及び各種データに基づいて情報処理を実行するように構成される。記憶部１２は、メモリの一例であり、例えば、ハードディスクドライブ、ソリッドステートドライブ等の補助記憶装置により構成される。本実施形態では、記憶部１２は、解析プログラム８１、関数構造情報１２１等の各種情報を記憶する。
【００５６】
解析プログラム８１は、複数のデバイス２８間の依存関係の導出に関する情報処理（後述する図５Ａ〜図６、図１０Ａ〜図１１Ｂ、図１３Ａ、及び図１３Ｂ）を解析装置１に実行させるためのプログラムである。解析プログラム８１は、この情報処理の一連の命令群を含む。関数構造情報１２１は、標準関数における入力パラメータと出力パラメータとの間の依存関係の定義を示す。詳細は後述する。
【００５７】
通信インタフェース１３は、例えば、有線ＬＡＮ（Local Area Network）モジュール、無線ＬＡＮモジュール等であり、ネットワークを介した有線又は無線通信を行うためのインタフェースである。解析装置１は、この通信インタフェース１３により、ＰＬＣ２との間でネットワークを介したデータ通信を行い、制御プログラム２２１を取得することができる。なお、ネットワークの種類は、例えば、インターネット、無線通信網、移動通信網、電話網、専用網等から適宜選択されてよい。
【００５８】
入力装置１４は、例えば、マウス、キーボード等の入力を行うための装置である。また、表示装置１５は、出力装置の一例であり、例えば、ディスプレイである。オペレータは、入力装置１４及び表示装置１５を介して、解析装置１を操作することができる。なお、表示装置１５は、タッチパネルディスプレイであってもよい。この場合、入力装置１４は省略されてもよい。
【００５９】
ドライブ１６は、例えば、ＣＤドライブ、ＤＶＤドライブ等であり、記憶媒体９１に記憶されたプログラムを読み込むためのドライブ装置である。ドライブ１６の種類は、記憶媒体９１の種類に応じて適宜選択されてよい。上記解析プログラム８１、関数構造情報１２１及び制御プログラム２２１の少なくともいずれかは、この記憶媒体９１に記憶されていてもよい。
【００６０】
記憶媒体９１は、コンピュータその他装置、機械等が記録されたプログラム等の情報を読み取り可能なように、当該プログラム等の情報を、電気的、磁気的、光学的、機械的又は化学的作用によって蓄積する媒体である。解析装置１は、この記憶媒体９１から、上記解析プログラム８１、関数構造情報１２１及び制御プログラム２２１の少なくともいずれかを取得してもよい。
【００６１】
ここで、図２では、記憶媒体９１の一例として、ＣＤ、ＤＶＤ等のディスク型の記憶媒体を例示している。しかしながら、記憶媒体９１の種類は、ディスク型に限定される訳ではなく、ディスク型以外であってもよい。ディスク型以外の記憶媒体として、例えば、フラッシュメモリ等の半導体メモリを挙げることができる。
【００６２】
なお、解析装置１の具体的なハードウェア構成に関して、実施形態に応じて、適宜、構成要素の省略、置換及び追加が可能である。例えば、制御部１１は、複数のハードウェアプロセッサを含んでもよい。ハードウェアプロセッサは、マイクロプロセッサ、ＦＰＧＡ（field-programmable gate array）、ＤＳＰ（digital signal processor）等で構成されてよい。記憶部１２は、制御部１１に含まれるＲＡＭ及びＲＯＭにより構成されてもよい。通信インタフェース１３、入力装置１４、表示装置１５及びドライブ１６の少なくともいずれかは省略されてもよい。解析装置１は、例えば、スピーカ等の表示装置１５以外の出力装置を更に備えてもよい。解析装置１は、複数台のコンピュータで構成されてもよい。この場合、各コンピュータのハードウェア構成は、一致していてもよいし、一致していなくてもよい。また、解析装置１は、提供されるサービス専用に設計された情報処理装置の他、デスクトップＰＣ（Personal Computer）、タブレットＰＣ等の汎用の情報処理装置、汎用のサーバ装置等であってもよい。
【００６３】
＜ＰＬＣ＞
次に、図３を用いて、生産ライン２７の動作を制御するＰＬＣ２のハードウェア構成の一例を説明する。図３は、本実施形態に係るＰＬＣ２のハードウェア構成の一例を模式的に例示する。
【００６４】
図３に示されるとおり、ＰＬＣ２は、制御部２１、記憶部２２、入出力インタフェース２３、及び通信インタフェース２４が電気的に接続されたコンピュータである。これにより、ＰＬＣ２は、生産ライン２７の各デバイス２８の動作を制御するように構成される。なお、図３では、入出力インタフェース及び通信インタフェースをそれぞれ「入出力Ｉ／Ｆ」及び「通信Ｉ／Ｆ」と記載している。
【００６５】
制御部２１は、ＣＰＵ、ＲＡＭ、ＲＯＭ等を含み、プログラム及び各種データに基づいて情報処理を実行するように構成される。記憶部２２は、例えば、ＲＡＭ、ＲＯＭ等で構成され、制御プログラム２２１等の各種情報を記憶する。制御プログラム２２１は、生産ライン２７の動作を制御するためのプログラムである。制御プログラム２２１は、生産ライン２７に含まれる複数のデバイス２８の動作を制御するための複数の命令（一連の命令群）を含む。
【００６６】
入出力インタフェース２３は、外部装置と接続するためのインタフェースであり、接続する外部装置に応じて適宜構成される。本実施形態では、ＰＬＣ２は、入出力インタフェース２３を介して、生産ライン２７に接続される。入出力インタフェース２３の数は、特に限定されなくてもよく、実施の形態に応じて適宜設定されてよい。
【００６７】
通信インタフェース２４は、例えば、有線ＬＡＮモジュール、無線ＬＡＮモジュール等であり、有線又は無線通信を行うためのインタフェースである。ＰＬＣ２は、通信インタフェース２４により、解析装置１との間でデータ通信を行うことができる。
【００６８】
なお、ＰＬＣ２の具体的なハードウェア構成に関して、実施の形態に応じて、適宜、構成要素の省略、置換、及び追加が可能である。例えば、制御部２１は、複数のプロセッサを含んでもよい。記憶部２２は、制御部２１に含まれるＲＡＭ及びＲＯＭにより構成されてもよい。記憶部２２は、ハードディスクドライブ、ソリッドステートドライブ等の補助記憶装置により構成されてもよい。また、ＰＬＣ２は、提供されるサービス専用に設計された情報処理装置の他、制御する対象に応じて、デスクトップＰＣ、タブレットＰＣ等の汎用の情報処理装置に置き換えられてもよい。
【００６９】
［ソフトウェア構成］
次に、図４を用いて、本実施形態に係る解析装置１のソフトウェア構成の一例を説明する。図４は、本実施形態に係る解析装置１のソフトウェア構成の一例を模式的に例示する。
【００７０】
解析装置１の制御部１１は、記憶部１２に記憶された解析プログラム８１をＲＡＭに展開する。そして、制御部１１は、ＲＡＭに展開された解析プログラム８１をＣＰＵにより解釈及び実行して、各構成要素を制御する。これによって、図４に示されるとおり、本実施形態に係る解析装置１は、プログラム取得部１１１、プログラム解析部１１２、定義判定部１１３、定義受付部１１４、定義付与部１１５、関係特定部１１６、グラフ生成部１１７、及び出力部１１８をソフトウェアモジュールとして備えるコンピュータとして動作する。すなわち、本実施形態では、解析装置１の各ソフトウェアモジュールは、制御部１１（ＣＰＵ）により実現される。
【００７１】
プログラム取得部１１１は、生産ライン２７に含まれる複数のデバイス２８の動作を制御するための複数の命令を含む制御プログラム２２１を取得する。複数の命令は、１つ以上の関数のインスタンス及び複数の変数を含む。１つ以上の関数は、標準で用意される１つ以上の標準関数４１を含む。複数の変数は、各デバイス２８にそれぞれ対応する複数のデバイス変数３１を含む。
【００７２】
プログラム解析部１１２は、制御プログラム２２１に対して依存性解析を実行することで、関数のインスタンスの入力パラメータ又は出力パラメータに対する各デバイス変数３１の依存関係のパターンを抽出する。定義判定部１１３は、標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報１２１を参照し、関数構造情報１２１では依存関係の定義されていない１つ以上の未定義の標準関数のインスタンスが制御プログラム２２１に含まれているか否かを判定する。１つ以上の未定義の標準関数のインスタンスが制御プログラム２２１に含まれていると判定された場合に、定義受付部１１４は、当該未定義の標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する追加の関数構造情報１２３の入力を受け付ける。
【００７３】
定義付与部１１５は、関数構造情報１２１に基づいて、１つ以上の関数に含まれる１つ以上の標準関数４１のインスタンスにおける入力パラメータ４３と出力パラメータ４４との間の依存関係を特定する。また、定義付与部１１５は、１つ以上の未定義の標準関数のインスタンスが制御プログラム２２１に含まれていると判定された場合に、定義付与部１１５は、入力された追加の関数構造情報１２３に基づいて、制御プログラム２２１に含まれる標準関数４１のうちの１つ以上の未定義の標準関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係を特定する。
【００７４】
関係特定部１１６は、抽出した依存関係のパターンにおいて、１つ以上の関数のうちの同一の関数の、入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定することで、各デバイス変数３１間の依存関係を特定する。グラフ生成部１１７は、依存関係を特定した結果に基づいて、特定された各デバイス変数３１間の依存関係を示す有向グラフであって、各デバイス変数３１をそれぞれ表現するノード、及び依存関係を有することを表現する１つ以上のエッジを含む有向グラフを生成する。出力部１１８は、各デバイス変数３１間の依存関係を特定した結果に関する情報を出力する。本実施形態では、出力部１１８は、生成された有向グラフを当該結果に関する情報として出力する。
【００７５】
解析装置１の各ソフトウェアモジュールに関しては後述する動作例で詳細に説明する。なお、本実施形態では、解析装置１の各ソフトウェアモジュールがいずれも汎用のＣＰＵにより実現される例について説明している。しかしながら、以上のソフトウェアモジュールの一部又は全部が、１又は複数の専用のハードウェアプロセッサにより実現されてもよい。また、解析装置１のソフトウェア構成に関して、実施形態に応じて、適宜、ソフトウェアモジュールの省略、置換及び追加が行われてもよい。
【００７６】
§３  動作例
次に、図５Ａ及び図５Ｂを用いて、解析装置１の動作例について説明する。図５Ａ及び図５Ｂは、本実施形態に係る解析装置１の処理手順の一例を例示する。以下で説明する解析装置１の処理手順は、本発明の「解析方法」の一例である。ただし、以下で説明する処理手順は一例に過ぎず、各処理は可能な限り変更されてもよい。また、以下で説明する処理手順について、実施の形態に応じて、適宜、ステップの省略、置換、及び追加が可能である。
【００７７】
［ステップＳ１０１］
ステップＳ１０１では、制御部１１は、プログラム取得部１１１として動作し、制御プログラム２２１を取得する。
【００７８】
本実施形態では、制御部１１は、通信インタフェース１３を利用して、ネットワークを介してＰＬＣ２から制御プログラム２２１を取得する。ただし、制御プログラム２２１の所在及び取得方法は、このような例に限られなくてもよい。制御プログラム２２１が記憶部１２又は記憶媒体９１に存在する場合には、制御部１１は、記憶部１２又は記憶媒体９１から取得してもよい。また、制御プログラム２２１が他の情報処理装置に存在する場合には、制御部１１は、他の情報処理装置から制御プログラム２２１を取得してもよい。制御プログラム２２１を取得すると、制御部１１は、次のステップＳ１０２に処理を進める。
【００７９】
なお、制御プログラム２２１は、ＰＬＣ２で実行可能なように、例えば、ラダー・ダイアグラム言語、ファンクション・ブロック・ダイアグラム言語、ストラクチャード・テキスト言語、インストラクション・リスト言語、シーケンシャル・ファンクション・チャート言語、及びＣ言語の少なくともいずれかを利用して記述されていてもよい。これらの他、制御プログラム２２１は、例えば、Ｊａｖａ（登録商標）、Ｐｙｔｈｏｎ、Ｃ＋＋、Ｒｕｂｙ、Ｌｕａ等のプログラム言語を利用して記述されてもよい。制御プログラム２２１の種類は、特に限定されなくてもよく、実施の形態に応じて適宜選択されてよい。
【００８０】
［ステップＳ１０２］
ステップＳ１０２では、制御部１１は、プログラム解析部１１２として動作し、取得された制御プログラム２２１に対して依存性解析を実行することで、関数のインスタンスの入力パラメータ又は出力パラメータに対する各デバイス変数３１の依存関係のパターンを抽出する。
【００８１】
＜依存性解析＞
ここで、図６を用いて、ステップＳ１０２の処理の一例を詳細に説明する。図６は、本実施形態に係る解析装置１による依存性解析の処理手順の一例を例示する。本実施形態に係るステップＳ１０２の処理は、以下のステップＳ２０１〜ステップＳ２０５の処理を含む。ただし、以下で説明する処理手順は一例に過ぎず、各処理は可能な限り変更されてよい。また、以下で説明する処理手順について、実施の形態に応じて、適宜、ステップの省略、置換、及び追加が可能である。
【００８２】
（ステップＳ２０１）
ステップＳ２０１では、制御部１１は、制御プログラム２２１に対する構文解析を実行することで、制御プログラム２２１から抽象構文木を生成する。抽象構文木の生成には、トップダウン構文解析又はボトムアップ構文解析による公知の構文解析方法が用いられてよい。また、抽象構文木の生成には、特定の形式文法に従った文字列を扱う構文解析器が用いられてよい。構文解析の方法は、特に限定されなくてもよく、実施の形態に応じて適宜選択されてよい。
【００８３】
図７及び図８を用いて、生成される抽象構文木の一例について説明する。図７は、取得される制御プログラム２２１の一例を示す。図８は、図７の制御プログラム２２１から生成される抽象構文木２２２の一例を示す。図７の例では、ストラクチャード・テキスト（ＳＴ）言語で記述された制御プログラム２２１が取得された場面を想定している。図７で例示される制御プログラム２２１は、４つのデバイス変数（Ｄ１、Ｄ２、Ｄ３、Ｄ４）、１つのユーザ定義関数（Ｍｙ＿ＦＢ）のインスタンス（Ｉｎｓｔ＿ＭｙＦＢ）、及び２つの標準関数（Ｓｔｄ＿ＦＢ１、Ｓｔｄ＿ＦＢ２）のインスタンス（Ｉｎｓｔ＿ＳｔｄＦＢ１、Ｉｎｓｔ＿ＳｔｄＦＢ２）を含んでいる。ユーザ定義関数（Ｍｙ＿ＦＢ）は、３つの入力パラメータ（Ｅｎａｂｌｅ、Ａｒｇ１、Ａｒｇ２）及び２つの出力パラメータ（Ｏｕｔ１、Ｏｕｔ２）を含んでいる。標準関数（Ｓｔｄ＿ＦＢ１）は、３つの入力パラメータ（Ｅｘｅｃｕｔｅ、Ｉｎｐｕｔ１、Ｉｎｐｕｔ２）及び１つの出力パラメータ（Ｏｕｔ）を含んでいる。標準関数（Ｓｔｄ＿ＦＢ２）は、２つの入力パラメータ（Ｅｘｅｃｕｔｅ、Ｉｎｐｕｔ）及び２つの出力パラメータ（Ｏｕｔ１、Ｏｕｔ２）を含んでいる（後述する図１４も参照）。
【００８４】
図７で例示される制御プログラム２２１は、２つのサブプログラム（２２１１、２２１２）に分割されている。サブプログラム２２１１（Ｐｒｏｇｒａｍ０／Ｓｅｃｔｉｏｎ０）は、最初に呼び出されて実行される。サブプログラム２２１２には、ユーザ定義関数（Ｍｙ＿ＦＢ）の内容が記述されている。この制御プログラム２２１に対して構文解析を実行することで、図８に示される抽象構文木２２２を得ることができる。図８の例では、サブプログラム（２２１１、２２１２）毎に抽象構文木が得られている。抽象構文木２２２は、制御プログラム２２１内で利用される変数（パラメータを含む）、演算子、及びノード間の関係（演算と被演算との関係等）を示す。
【００８５】
なお、図８では、括弧を利用したネスト構造により抽象構文木を表現している。例えば、「ａ＝ｂ＋１」に対して構文解析を実行することで、抽象構文木「（＝ａ（＋  ｂ  １））」を得ることができる。このネスト構造で表現された抽象構文木では、「＝」が、根ノードである。「ａ」が、根ノード「＝」に連結される葉ノードであり、「＋」が、根ノード「＝」に連結される内部ノードである。「ｂ」及び「１」が、内部ノード「＋」に連結される葉ノードである。抽象構文木の生成が完了すると、制御部１１は、次のステップＳ２０２に処理を進める。
【００８６】
（ステップＳ２０２）
図６に戻り、ステップＳ２０２では、制御部１１は、生成された抽象構文木を利用して、フロー解析を実行する。フロー解析の方法は、特に限定されなくてもよく、実施の形態に応じて適宜選択されてよい。フロー解析には、公知の方法が採用されてよい。これにより、制御部１１は、制御プログラム２２１に含まれる各命令の依存する経路を示す制御フローグラフを抽象構文木から生成する。
【００８７】
図９は、図８の抽象構文木２２２から得られる制御フローグラフ２２３の一例を示す。制御フローグラフ２２３は、制御プログラム２２１の処理の流れ（実線の矢印）、データの依存性（一点鎖線の矢印）、及び制御の依存性（点線の矢印）を示す。処理の流れは、制御プログラム２２１内の処理が実行される順序を示す。例えば、制御プログラム２２１では、「Ａ１：＝Ｄ１」の処理の後に「ＣＡＬ  Ｉｎｓｔ＿ＭｙＦＢ」の処理が実行される。そのため、制御フローグラフ２２３において、「Ａ１：＝Ｄ１」及び「ＣＡＬ  Ｉｎｓｔ＿ＭｙＦＢ」は、処理の流れを示す矢印で連結されている。
【００８８】
データの依存性は、影響を与える処理の関係を示す。例えば、制御プログラム２２１では、「Ａ１：＝Ｄ１」の処理の結果が、「Ａｒｇ１：＝Ａ１」の処理に影響を与える。そのため、制御フローグラフ２２３において、「Ａ１：＝Ｄ１」及び「Ａｒｇ１：＝Ａ１」は、データの依存性を示す矢印で連結されている。また、制御の依存性は、条件分岐等により実行の可否を決定する処理の関係を示す。例えば、制御プログラム２２１では、「ＣＡＬ  Ｉｎｓｔ＿ＭｙＦＢ」の実行に応じて、「Ｅｎａｂｌｅ：＝Ｄ３」、「Ａｒｇ１：＝Ａ１」及び「Ａｒｇ２：＝Ｖａｒ１」が実行される。そのため、「ＣＡＬ  Ｉｎｓｔ＿ＭｙＦＢ」は、「Ｅｎａｂｌｅ：＝Ｄ３」、「Ａｒｇ１：＝Ａ１」及び「Ａｒｇ２：＝Ｖａｒ１」と制御の依存性を示す矢印で連結されている。
【００８９】
生成される制御フローグラフによれば、制御プログラム２２１における変数の演算を含む処理同士の依存関係を特定することができる。制御フローグラフの生成が完了すると、制御部１１は、次のステップＳ２０３に処理を進める。
【００９０】
（ステップＳ２０３及びステップＳ２０４）
図６に戻り、ステップＳ２０３では、制御部１１は、制御プログラム２２１内で利用されている各デバイス変数３１を抽象構文木又は制御フローグラフから抽出する。制御プログラム２２１内で利用されている各デバイス変数３１を抽出する方法は、実施の形態に応じて適宜選択されてよい。
【００９１】
一例として、制御部１１は、デバイス変数のリストを参照することで、利用されている各デバイス変数３１を抽象構文木又は制御フローグラフから抽出してもよい。具体的には、制御部１１は、抽象構文木又は制御フローグラフから制御プログラム２２１内で利用されている各変数を特定する。次に、制御部１１は、特定された各変数をデバイス変数のリストと照合することで、特定された各変数がデバイス変数であるか否かを判定する。これにより、制御部１１は、制御プログラム２２１内で利用されている各デバイス変数３１を抽出することができる。なお、デバイス変数のリストの形式は、特に限定されなくてもよく、実施の形態に応じて適宜設定されてよい。また、デバイス変数のリストは、ユーザの指定により与えられてもよいし、システムに予め保持されていてもよい。このデバイス変数のリストは、記憶部１２に格納されていてもよい。
【００９２】
次のステップＳ２０４では、制御部１１は、制御プログラム２２１内で利用されている関数（ユーザ定義関数及び標準関数）のインスタンスを呼び出すための関数呼び出し式を抽象構文木又は制御フローグラフから抽出する。利用されている関数の呼び出し式を抽出する方法は、実施の形態に応じて適宜選択されてよい。
【００９３】
一例として、制御部１１は、デバイス変数３１の抽出方法と同様に、関数のリストを参照することで、利用されている関数の呼び出し式を抽象構文木又は制御フローグラフから抽出してもよい。なお、関数のリストの形式は、特に限定されなくてもよく、実施の形態に応じて適宜設定されてよい。また、関数のリストは、ユーザの指定により与えられてもよいし、システムに予め保持されていてもよい。この関数のリストは、記憶部１２に格納されてもよい。関数のうち標準関数のリストは、関数構造情報１２１から得られてもよい。また、ユーザ定義関数のリストは、制御プログラム２２１内のサブプログラム等の名称から得られてもよい。関数の呼び出し式を抽出するその他の例として、制御部１１は、制御プログラム２２１の言語仕様に基づいて、関数の呼び出し式に対応するパターンを抽出してもよい。
【００９４】
上記の一例では、ステップＳ２０３において、４つのデバイス変数（Ｄ１、Ｄ２、Ｄ３、Ｄ４）を、抽象構文木２２２（図８）又は制御フローグラフ２２３（図９）から抽出することができる。また、ステップＳ２０４において、１つのユーザ定義関数（Ｍｙ＿ＦＢ）のインスタンス（Ｉｎｓｔ＿ＭｙＦＢ）、及び２つの標準関数（Ｓｔｄ＿ＦＢ１、Ｓｔｄ＿ＦＢ２）のインスタンス（Ｉｎｓｔ＿ＳｔｄＦＢ１、Ｉｎｓｔ＿ＳｔｄＦＢ２）の呼び出し式を、抽象構文木２２２又は制御フローグラフ２２３から抽出することができる。なお、ステップＳ２０３及びステップＳ２０４の処理順序は入れ替えられてもよい。制御プログラム２２１内で利用されている各デバイス変数３１及び関数の呼び出し式の抽出が完了すると、制御部１１は、次のステップＳ２０５に処理を進める。
【００９５】
（ステップＳ２０５）
ステップＳ２０５では、制御部１１は、制御フローグラフを参照し、各命令の依存する経路をたどることで、抽出された関数のインスタンスの入力パラメータ又は出力パラメータに対する抽出された各デバイス変数３１の依存関係のパターンを抽出する。制御フローグラフに基づいて依存関係のパターンを抽出する方法は、特に限定されなくてもよく、実施の形態に応じて適宜設定されてよい。
【００９６】
互いに依存関係を有する２つのデバイス変数の間に標準関数のインスタンスが介在していないと想定する。この場合、２つのデバイス変数が直接的に依存関係を有しているときには、制御フローグラフにおいて、一方のデバイス変数から他方のデバイス変数までの経路をたどることができる。制御プログラム２２１に含まれる複数のデバイス変数３１の中には、このように他のデバイス変数と直接的に依存関係を有するデバイス変数が存在してもよい。また、２つのデバイス変数の間に少なくとも１つのユーザ定義関数のインスタンスが介在していたとしても、ユーザ定義関数の内容は制御プログラム２２１内に記述されているため、制御フローグラフにおいて、一方のデバイス変数から他方のデバイス変数までの経路をたどることができる。なお、このときには、この経路をたどる過程で、ユーザ定義関数の内部構造が特定される。
【００９７】
これに対して、互いに依存関係を有する２つのデバイス変数の間に標準関数のインスタンスが介在していると想定する。この場合、標準関数の内容は制御プログラム２２１内に記述されていないため、制御フローグラフにおいて、一方のデバイス変数から他方のデバイス変数までの経路をたどることはできない。つまり、デバイス変数を起点に開始した経路の探索は、標準関数のパラメータに到達した時点で終了する。
【００９８】
そこで、本実施形態では、制御部１１は、制御フローグラフにおいて、抽出された各デバイス変数３１を起点に、終端のインスタンスの入力パラメータ若しくは出力パラメータ又は他のデバイス変数に到達するまで、データ又は制御の依存性の経路をたどる。上記の理由から、終端のインスタンスは、標準関数のインスタンスである。これにより、制御部１１は、各デバイス変数３１の依存関係のパターンを抽出する。
【００９９】
＜抽出処理＞
ここで、図１０Ａ及び図１０Ｂを更に用いて、ステップＳ２０５の処理の一例を詳細に説明する。図１０Ａ及び図１０Ｂは、本実施形態に係る解析装置１による依存関係のパターンを抽出するための処理手順の一例を例示する。本実施形態に係るステップＳ２０５の処理は、以下のステップＳ３０１〜ステップＳ３１５の処理を含む。ただし、以下で説明する処理手順は一例に過ぎず、各処理は可能な限り変更されてよい。また、以下で説明する処理手順について、実施の形態に応じて、適宜、ステップの省略、置換、及び追加が可能である。
【０１００】
（ステップＳ３０１）
ステップＳ３０１では、制御部１１は、ステップＳ２０３により抽出された各デバイス変数３１をリストアップする。上記図８及び図９の例では、４つのデバイス変数（Ｄ１、Ｄ２、Ｄ３、Ｄ４）がリストアップされる。抽出された各デバイス変数３１をリストアップすると、制御部１１は、次のステップＳ３０２に処理を進める。
【０１０１】
（ステップＳ３０２〜ステップＳ３０４）
ステップＳ３０２では、制御部１１は、抽出されたデバイス変数３１のリストから注目するデバイス変数（以下、「注目デバイス変数」とも記載する）をピックアップする。ステップＳ３０３では、制御部１１は、制御フローグラフにおいて、ピックアップした注目デバイス変数を起点に各命令の依存する経路（データ又は制御の依存性を示す経路）を一方向にたどる。なお、データ又は制御の依存性の経路は、矢印の方向に従う順方向及び矢印の方向に逆らう逆方向の２方向にたどることができる。そのため、ステップＳ３０３では、制御部１１は、これら２つの方向のうちのいずれかの方向を上記一方向として選択し、選択した方向に経路をたどる。ステップＳ３０４では、制御部１１は、経路をたどった結果、注目デバイス変数と依存関係を有する変数（関数のインスタンスのパラメータを含む）をリストアップする。依存関係を有する変数とは、経路上に登場する変数である。
【０１０２】
上記図８及び図９の例において、ステップＳ３０２により、デバイス変数「Ｄ１」を注目デバイス変数としてピックアップした場面を想定する。この場合、ステップＳ３０３では、「Ａ１：＝Ｄ１」から「Ａｒｇ１：＝Ａ１」へと依存性の経路をたどることができる。次のステップＳ３０４では、変数「Ａ１」及び「Ａｒｇ１」がリストアップされる。変数「Ａ１」は、デバイス変数３１以外の他の変数の一例であり、変数「Ａｒｇ１」は、ユーザ定義関数（Ｍｙ＿ＦＢ）のインスタンスの入力パラメータの一例である。依存関係を有する変数をリストアップすると、制御部１１は、次のステップＳ３０５に処理を進める。
【０１０３】
（ステップＳ３０５及びステップＳ３０６）
ステップＳ３０５では、制御部１１は、依存関係を有する変数のリストから解析対象とする変数をピックアップする。この解析対象の変数は、関数（標準関数又はユーザ定義関数）のインスタンスのパラメータ（入力パラメータ又は出力パラメータ）、デバイス変数、及びデバイス変数以外の他の変数のいずれかである。
【０１０４】
そこで、次のステップＳ３０６では、制御部１１は、ピックアップした解析対象の変数が、関数のインスタンスのパラメータ又はデバイス変数であるか否かを判定する。解析対象の変数が関数のインスタンスのパラメータ又はデバイス変数であると判定された場合には、制御部１１は、次のステップＳ３０８に処理を進める。一方、解析対象の変数が関数のインスタンスのパラメータ及びデバイス変数のいずれでもないと判定された場合、すなわち、解析対象の変数がデバイス変数以外の他の変数である場合には、制御部１１は、次のステップＳ３０７に処理を進める。
【０１０５】
例えば、上記の例において、ステップＳ３０５により、変数「Ａｒｇ１」が解析対象の変数としてピックアップされた場合には、制御部１１は、解析対象の変数は関数のインスタンスのパラメータであると判定して、次のステップＳ３０８に処理を進める。一方、上記の例において、ステップＳ３０５により、変数「Ａ１」が解析対象の変数としてピックアップされた場合には、制御部１１は、解析対象の変数は関数のインスタンスのパラメータ及びデバイス変数のいずれでもないと判定して、次のステップＳ３０７に処理を進める。
【０１０６】
（ステップＳ３０７）
ステップＳ３０７は、ステップＳ３０５でピックアップされた解析対象の変数がデバイス変数以外の他の変数である場合に実行される。この場合、注目デバイス変数から解析対象の変数までの依存性の経路は、注目デバイス変数と他の変数との間の依存関係を示しているに過ぎない。そのため、ステップＳ３０７では、制御部１１は、その解析対象の変数までの依存性の経路を破棄する。依存性の経路を破棄した後、制御部１１は、次のステップＳ３１３に処理を進める。
【０１０７】
（ステップＳ３０８）
ステップＳ３０８では、制御部１１は、ピックアップした解析対象の変数が、ユーザ定義関数のインスタンスのパラメータであるか否かを判定する。解析対象の変数がユーザ定義関数のインスタンスのパラメータであると判定された場合、制御部１１は、次のステップＳ３１０に処理を進める。一方、解析対象の変数がユーザ定義関数のインスタンスのパラメータではないと判定された場合、すなわち、解析対象の変数が、標準関数のインスタンスのパラメータ又はデバイス変数である場合、制御部１１は、次のステップＳ３０９に処理を進める。
【０１０８】
（ステップＳ３０９）
ステップＳ３０９は、ステップＳ３０５でピックアップされた解析対象の変数が標準関数のインスタンスのパラメータ又はデバイス変数である場合に実行される。各デバイス変数３１間の依存関係を特定する観点から、デバイス変数（特に、注目デバイス変数以外の他のデバイス変数）は、注目デバイス変数を起点とした経路の探索の終端である。また、制御プログラム２２１内には標準関数の内容は記述されないため、標準関数のインスタンスのパラメータも、注目デバイス変数を起点とした経路の探索の終端である。つまり、この注目デバイス変数を起点とした経路の探索は、標準関数のインスタンスのパラメータ又はデバイス変数に到達した時点で終了となる。
【０１０９】
そのため、ステップＳ３０９では、制御部１１は、注目デバイス変数から解析対象の変数までに経由した依存性の経路に基づいて、注目デバイス変数についての依存関係のパターンを特定する。解析対象の変数がデバイス変数である場合には、デバイス変数と注目デバイス変数との間の依存関係のパターンが特定される。一方、解析対象の変数が標準関数のインスタンスのパラメータである場合には、制御部１１は、標準関数のインスタンスのパラメータと注目デバイス変数との間の依存関係のパターンが特定される。制御部１１は、特定した依存関係のパターンを解析結果として保存する。なお、注目デバイス変数から解析対象の変数までの依存性の経路にデバイス変数以外の他の変数が含まれている場合には、制御部１１は、その経路に含まれる他の変数の情報も解析結果として保存する。解析結果を保存した後、制御部１１は、次のステップＳ３１３に処理を進める。
【０１１０】
（ステップＳ３１０〜ステップＳ３１２）
ステップＳ３１０〜ステップＳ３１２は、ステップＳ３０５でピックアップされた解析対象の変数がユーザ定義関数のインスタンスのパラメータである場合に実行される。解析対象の変数がユーザ定義関数のインスタンスのパラメータである場合、ユーザ定義関数の内容は制御プログラム２２１内に記述されているため、解析対象の変数を起点にして、そのユーザ定義関数の内部に向けて、依存性の経路を更にたどることができる。そこで、制御部１１は、ユーザ定義関数のインスタンスまでの解析結果を保存した後、解析対象の変数を新たな起点に設定して、依存性の経路をたどる処理を継続する。
【０１１１】
具体的には、ステップＳ３１０では、制御部１１は、注目デバイス変数から解析対象の変数までに経由した依存性の経路に基づいて、注目デバイス変数についての依存関係のパターンを特定する。この場面では、ユーザ定義関数のインスタンスのパラメータと注目デバイス変数との間の依存関係のパターンが特定される。制御部１１は、特定した依存関係のパターンを解析結果として保存する。ステップＳ３０９と同様に、注目デバイス変数から解析対象の変数までの依存性の経路にデバイス変数以外の他の変数が含まれている場合には、制御部１１は、その経路に含まれる他の変数の情報も解析結果として保存する。
【０１１２】
次のステップＳ３１１では、制御部１１は、解析対象の変数を新たな注目変数として指定する。そして、次のステップＳ３１２では、制御部１１は、制御フローグラフを参照し、注目変数を起点に各命令の依存する経路をたどることで、関数のパラメータ又はデバイス変数に対する注目変数の依存関係のパターンを抽出する。ステップＳ３１２のサブルーチンの詳細は後述する。ステップＳ３１２による依存関係のパターンの抽出が完了すると、制御部１１は、次のステップＳ３１３に処理を進める。
【０１１３】
（ステップＳ３１３）
ステップＳ３１３では、制御部１１は、ステップＳ３０４でリストアップされた全ての変数についてステップＳ３０５以下の処理が終了したか否かを判定する。ステップＳ３０５以下の処理を実行していない変数がリストに残っている場合には、制御部１１は、リストアップされた全ての変数についてはまだステップＳ３０５以下の処理は終了していないと判定する。この場合には、制御部１１は、ステップＳ３０５に処理を戻し、リストに残っている別の変数を解析対象の変数としてピックアップして、ステップＳ３０６以下の処理を繰り返す。一方、そうではない場合には、制御部１１は、リストアップされた全ての変数について処理が終了したと判定し、次のステップＳ３１４に処理を進める。
【０１１４】
（ステップＳ３１４）
ステップＳ３１４では、制御部１１は、順方向及び逆方向の両方向について、注目デバイス変数を起点とする経路の探索に関するステップＳ３０３〜ステップＳ３１３の一連の処理が終了したか否かを判定する。ステップＳ３０３〜ステップＳ３１３の一連の処理が一度しか実行されていない段階では、両方向についてはまだ経路探索に関する処理は終了していない。この段階では、制御部１１は、両方向についてはまだ経路探索に関する処理は終了していないと判定して、ステップＳ３０３に処理を戻し、経路をたどる方向を別の方向に変更して、ステップＳ３０３以下の処理を繰り返す。例えば、一度目に順方向に依存性の経路をたどった場合には、制御部１１は、次の経路探索に関する処理では逆方向に依存性の経路をたどる。一方、この処理の繰り返しにより、当該一連の処理が二度実行されると、両方向についての経路探索に関する処理が終了する。この段階では、制御部１１は、両方向について経路探索に関する処理が終了したと判定し、次のステップＳ３１５に処理を進める。
【０１１５】
（ステップＳ３１５）
ステップＳ３１５では、制御部１１は、ステップＳ３０１でリストアップされた全てのデバイス変数についてステップＳ３０２以下の処理が終了したか否かを判定する。ステップＳ３０２以下の処理を実行していないデバイス変数がリストに残っている場合には、制御部１１は、リストアップされた全てのデバイス変数についてはまだステップＳ３０２以下の処理は終了していないと判定する。この場合には、制御部１１は、ステップＳ３０２に処理を戻し、リストに残っている別のデバイス変数を注目デバイス変数としてピックアップして、ステップＳ３０３以下の処理を繰り返す。一方、そうではない場合には、制御部１１は、リストアップされた全てのデバイス変数について処理が終了したと判定し、依存関係のパターンを抽出するための処理を終了する。これにより、ステップＳ２０５の一連の処理が終了するため、ステップＳ１０２による依存性解析の処理が完了する。ステップＳ１０２による依存性解析の処理が完了すると、制御部１１は、次のステップＳ１０３に処理を進める。
【０１１６】
＜抽出処理のサブルーチン＞
次に、図１１Ａ及び図１１Ｂを更に用いて、ステップＳ３１２の処理の一例を詳細に説明する。図１１Ａ及び図１１Ｂは、本実施形態に係る解析装置１によるユーザ定義関数に関する依存パターンを抽出するための処理手順（サブルーチン）の一例を例示する。本実施形態に係るステップＳ３１２の処理は、以下のステップＳ４０１〜ステップＳ４１１の処理を含む。ただし、以下で説明する処理手順は一例に過ぎず、各処理は可能な限り変更されてよい。また、以下で説明する処理手順について、実施の形態に応じて、適宜、ステップの省略、置換、及び追加が可能である。
【０１１７】
ステップＳ４０１〜ステップＳ４１１の一連の処理では、ユーザ定義関数のインスタンスのパラメータを起点に依存性の経路の探索を実行する。そのため、ステップＳ４０１〜ステップＳ４１１の一連の処理は、ステップＳ３０２でピックアップされた注目デバイス変数をステップＳ３１１で指定された注目変数に置き換えたステップＳ３０３〜ステップＳ３１３の一連の処理と同様である。
【０１１８】
（ステップＳ４０１及びステップＳ４０２）
すなわち、ステップＳ４０１では、制御部１１は、制御フローグラフにおいて、指定された注目変数を起点に各命令の依存する経路を一方向にたどる。ステップＳ４０１では、制御部１１は、ステップＳ３０３で選択した方向に依存性の経路をたどる。ステップＳ４０２では、制御部１１は、経路をたどった結果、注目変数と依存関係を有する変数（関数のインスタンスのパラメータを含む）をリストアップする。
【０１１９】
（ステップＳ４０３及びステップＳ４０４）
ステップＳ４０３では、制御部１１は、依存関係を有する変数のリストから解析対象とする変数をピックアップする。ステップＳ４０４では、制御部１１は、ピックアップした解析対象の変数が、関数のインスタンスのパラメータ又はデバイス変数であるか否かを判定する。解析対象の変数が関数のインスタンスのパラメータ又はデバイス変数であると判定された場合には、制御部１１は、次のステップＳ４０６に処理を進める。一方、解析対象の変数が関数のインスタンスのパラメータ及びデバイス変数のいずれでもないと判定された場合、すなわち、解析対象の変数がデバイス変数以外の他の変数である場合には、制御部１１は、次のステップＳ４０５に処理を進める。
【０１２０】
（ステップＳ４０５）
ステップＳ４０５では、制御部１１は、その解析対象の変数までの依存性の経路を破棄する。依存性の経路を破棄した後、制御部１１は、次のステップＳ４１１に処理を進める。
【０１２１】
（ステップＳ４０６）
ステップＳ４０６では、制御部１１は、ステップＳ４０３によりピックアップした解析対象の変数が、ユーザ定義関数のインスタンスのパラメータであるか否かを判定する。解析対象の変数がユーザ定義関数のインスタンスのパラメータであると判定された場合、制御部１１は、次のステップＳ４０８に処理を進める。一方、解析対象の変数がユーザ定義関数のインスタンスのパラメータではないと判定された場合、すなわち、解析対象の変数が、標準関数のインスタンスのパラメータ又はデバイス変数である場合、制御部１１は、次のステップＳ４０７に処理を進める。
【０１２２】
（ステップＳ４０７）
ステップＳ４０７では、制御部１１は、注目変数から解析対象の変数までに経由した依存性の経路に基づいて、注目変数についての依存関係のパターンを特定する。そして、制御部１１は、特定した依存関係のパターンを解析結果として保存する。なお、注目変数から解析対象の変数までの依存性の経路にデバイス変数以外の他の変数が含まれている場合には、制御部１１は、その経路に含まれる他の変数の情報も解析結果として保存する。解析結果を保存した後、制御部１１は、次のステップＳ４１１に処理を進める。
【０１２３】
（ステップＳ４０８〜ステップＳ４１０）
ステップＳ４０８では、制御部１１は、注目変数から解析対象の変数までに経由した依存性の経路に基づいて、注目変数についての依存関係のパターンを特定し、特定した依存関係のパターンを解析結果として保存する。ステップＳ４０７と同様に、注目変数から解析対象の変数までの依存性の経路にデバイス変数以外の他の変数が含まれている場合には、制御部１１は、その経路に含まれる他の変数の情報も解析結果として保存する。
【０１２４】
ステップＳ４０９では、制御部１１は、解析対象の変数を新たな注目変数として指定する。そして、ステップＳ４１０では、制御部１１は、制御フローグラフを参照し、注目変数を起点に各命令の依存する経路をたどることで、関数のパラメータ又はデバイス変数に対する注目変数の依存関係のパターンを抽出する。このステップＳ４１０の処理は、ステップＳ３１２と同様である。すなわち、制御部１１は、新たに指定された注目変数に対してステップＳ４０１〜ステップＳ４１１の処理を実行する。ステップＳ４１０による依存関係のパターンの抽出が完了すると、制御部１１は、次のステップＳ４１１に処理を進める。
【０１２５】
なお、新たな注目変数のユーザ定義関数のインスタンスが、元の注目変数のユーザ定義関数のインスタンスとは異なっていると想定する。この場合、ステップＳ４１０の処理では、制御部１１は、新たな注目変数を起点にして、そのユーザ定義関数の内部に向けて、依存性の経路をたどることになる。一方、新たな注目変数のユーザ定義関数のインスタンスが、元の注目変数のユーザ定義関数のインスタンスと同じであると想定する。この場合には、元の注目変数から新たな注目変数まで依存性の経路をたどったことにより、そのユーザ定義関数の内部の探索が完了している。つまり、元の注目変数から新たな注目変数までの経路によりそのユーザ定義関数の内部構造が特定される。そのため、ステップＳ４１０の処理では、制御部１１は、新たに指定された注目変数を起点にして、そのユーザ定義関数の外部に向けて、依存性の経路をたどることになる。
【０１２６】
（ステップＳ４１１）
ステップＳ４１１では、制御部１１は、ステップＳ４０２でリストアップされた全ての変数についてステップＳ４０３以下の処理が終了したか否かを判定する。ステップＳ４０３以下の処理を実行していない変数がリストに残っている場合には、制御部１１は、リストアップされた全ての変数についてはまだステップＳ４０３以下の処理は終了していないと判定する。この場合には、制御部１１は、ステップＳ４０３に処理を戻し、リストに残っている別の変数を解析対象の変数としてピックアップして、ステップＳ４０４以下の処理を繰り返す。一方、そうではない場合には、制御部１１は、リストアップされた全ての変数について処理が終了したと判定し、本サブルーチンの処理を完了する。本サブルーチンの処理を完了すると、制御部１１は、次のステップＳ３１３（ステップＳ４１０によりサブルーチンの処理を繰り返している場合には、前のサブルーチンのステップＳ４１１）に処理を進める。
【０１２７】
なお、ステップＳ３１２及びステップＳ４１０は、これらよりも前に実行された同一の注目デバイス変数について依存性の経路をたどる処理を新たな注目変数を起点に継続する処理である。そのため、制御部１１は、この継続後に得られた解析結果を継続前に得られた解析結果に関連付けて保存する。具体的には、制御部１１は、ステップＳ４０７又はＳ４０８における解析結果を、ステップＳ３１０（ステップＳ４１０によりサブルーチンの処理を繰り返している場合には、前のサブルーチンのステップＳ４０８）における解析結果に従属させて保存する。
【０１２８】
図１２を用いて、上記抽出処理により依存関係のパターンを抽出した結果の一例について説明する。図１２は、図９の制御フローグラフ２２３から依存関係のパターンを抽出した結果を示す抽出結果データ２２４の一例を示す。図１２の例では、抽出結果データ２２４はテーブル構造を有しており、各レコード（行データ）は、「ＮＯ」、「ＰＡＲＥＮＴ」、「ＤＥＶＩＣＥ」、「ＦＯＣＵＳ」、「ＤＩＲＥＣＴＩＯＮ」、「ＶＡＲＩＡＢＬＥ」、「ＰＲＯＧＲＡＭ」、「ＩＮＳＴＡＮＣＥ」、「ＦＵＮＣＴＩＯＮ」、「ＰＡＲＡＭＥＴＥＲ」及び「ＩＯ」のフィールドを有している。１つのレコードが、１つの解析結果に対応している。ただし、抽出結果のデータ構成は、このような例に限定されなくてもよく、実施の形態に応じて適宜決定されてよい。
【０１２９】
「ＮＯ」フィールドには、各レコードの番号が格納される。各レコードの番号は、解析結果を識別するために利用される。「ＰＡＲＥＮＴ」フィールドには、各解析結果の従属関係を示すため、対象のレコードにより示される解析結果が従属する解析結果を示すレコードの番号が格納される。例えば、上記ステップＳ３０９及びステップＳ３１０における解析結果は、その他のいずれの解析結果にも従属しない。そのため、この解析結果を示すレコードの「ＰＡＲＥＮＴ」フィールドは空欄である（例えば、図１２の１、３、５、７、８番目のレコード）。一方、例えば、上記ステップＳ４０７又はＳ４０８における解析結果は、ステップＳ３１０（ステップＳ４１０によりサブルーチンの処理を繰り返している場合には、前のサブルーチンのステップＳ４０８）における解析結果に従属する。そのため、この解析結果を示すレコードの「ＰＡＲＥＮＴ」フィールドには、従属先の解析結果を示すレコードの番号が格納される（例えば、図１２の２、４、６番目のレコード）。
【０１３０】
「ＤＥＶＩＣＥ」フィールドには、依存関係のパターンを抽出するために注目しているデバイス変数（注目デバイス変数）の名称が格納される。「ＦＯＣＵＳ」フィールドには、依存性の経路をたどる際に起点にした変数の名称が格納される。例えば、上記ステップＳ３０９及びステップＳ３１０における解析結果を示すレコードの「ＦＯＣＵＳ」フィールドには、注目デバイス変数の名称が格納される。一方、例えば、上記ステップＳ４０７又はＳ４０８における解析結果を示すレコードの「ＦＯＣＵＳ」フィールドには、注目変数の名称が格納される。
【０１３１】
「ＶＡＲＩＡＢＬＥ」フィールドには、「ＦＯＣＵＳ」フィールドにより示される変数と依存関係を有する変数の名称が格納される。ステップＳ３０９、ステップＳ３１０、ステップＳ４０７、及びステップＳ４０８で抽出される依存性の経路に含まれる他の変数の情報は、この「ＶＡＲＩＡＢＬＥ」フィールドに格納される。「ＤＩＲＥＣＴＩＯＮ」フィールドには、「ＦＯＣＵＳ」フィールドにより示される変数と「ＶＡＲＩＡＢＬＥ」フィールドにより示される変数との間の依存関係の方向を示す情報が格納される。依存関係の方向は、依存性の経路をたどる方向に応じて特定される。「ＰＲＯＧＲＡＭ」フィールドには、対象のレコードにより示される解析結果を与えるプログラム部分の制御プログラム２２１内の所在を示す情報が格納される。
【０１３２】
「ＩＮＳＴＡＮＣＥ」フィールドには、「ＦＯＣＵＳ」フィールドにより示される変数と依存関係を有する関数のインスタンスの名称が格納される。ステップＳ３０５及びステップＳ４０３によりピックアップされた解析対象の変数が標準関数又はユーザ定義関数のインスタンスのパラメータである場合に、その標準関数又はユーザ定義関数のインスタンスの名称が「ＩＮＳＴＡＮＣＥ」フィールドに格納される。「ＦＵＮＣＴＩＯＮ」フィールドには、「ＩＮＳＴＡＮＣＥ」フィールドにより示されるインスタンスの関数の名称が格納される。「ＰＡＲＡＭＥＴＥＲ」フィールドには、「ＦＯＣＵＳ」フィールドにより示される変数と依存関係を有する関数のパラメータの名称が格納される。「ＩＯ」フィールドには、「ＰＡＲＡＭＥＴＥＲ」フィールドにより示されるパラメータの種別（入力パラメータであるか出力パラメータであるか）を示す情報が格納される。なお、解析対象の変数がデバイス変数である場合には、関数のインスタンスのパラメータに対する依存関係ではなく、このデバイス変数に対する依存関係のパターンが抽出される。そのため、得られるレコードの「ＩＮＳＴＡＮＣＥ」、「ＦＵＮＣＴＩＯＮ」、「ＰＡＲＡＭＥＴＥＲ」及び「ＩＯ」フィールドは空欄である。
【０１３３】
上記図９の例において、デバイス変数「Ｄ１」を注目デバイス変数としてステップＳ３０３の処理を実行したと想定する。この場合に、図１２で例示される１番目のレコード（「ＮＯ」が「１」のレコード）は、「Ａ１：＝Ｄ１」から「Ａｒｇ１：＝Ａ１」へと依存性の経路をたどった結果により抽出された依存関係のパターンを示す。すなわち、この１番目のレコードは、変数「Ａｒｇ１」を解析対象の変数としてピックアップした後に、ステップＳ３１０の処理を実行することで得られた解析結果を示す。
【０１３４】
この変数「Ａｒｇ１」は、ユーザ定義関数（Ｍｙ＿ＦＢ）のインスタンスの入力パラメータの一例である。そのため、変数「Ａｒｇ１」は新たな注目変数に指定され、ステップＳ３１２の処理が実行される。２番目のレコード（「ＮＯ」が「２」のレコード）は、１番目のレコードを得た後に、ステップＳ３１２の処理を実行することで得られた解析結果、すなわち、「Ｉｎｐｕｔ１：＝Ａｒｇ１」を参照した結果、ステップＳ４０７により抽出された依存関係のパターンを示す。そのため、２番目のレコードの「ＰＡＲＥＮＴ」フィールドには、１番目のレコードの番号が格納されている。なお、詳細には、この２番目のレコードは、標準関数（Ｓｔｄ＿ＦＢ１）のインスタンスの入力パラメータ「Ｉｎｐｕｔ１」に対して注目変数「Ａｒｇ１」が依存関係を有していることを示している。
【０１３５】
［ステップＳ１０３及びステップＳ１０４］
図５Ａ及び図５Ｂに戻り、ステップＳ１０３では、制御部１１は、定義判定部１１３として動作し、標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する関数構造情報１２１を参照する。そして、制御部１１は、関数構造情報１２１では依存関係の定義されていない１つ以上の未定義の標準関数のインスタンスが制御プログラム２２１に含まれているか否かを判定する。なお、ステップＳ１０３を実行する前に、制御部１１は、関数構造情報１２１を取得する。本実施形態では、関数構造情報１２１は記憶部１２に保持されている。そのため、制御部１１は、関数構造情報１２１を記憶部１２から取得する。ただし、関数構造情報１２１の取得先は、このような例に限定されなくてもよく、実施の形態に応じて適宜選択されてよい。
【０１３６】
未定義の標準関数のインスタンスが制御プログラム２２１に含まれているか否かを判定する方法は、実施の形態に応じて適宜決定されてよい。例えば、制御部１１は、ステップＳ２０４により抽出された関数のうちの標準関数４１が関数構造情報１２１で定義されているか否かを照合する。関数構造情報１２１には定義のない標準関数がステップＳ２０４で抽出された標準関数４１に含まれている場合には、制御部１１は、１つ以上の未定義の標準関数のインスタンスが制御プログラム２２１に含まれていると判定する。一方、ステップＳ２０４で抽出された全ての標準関数４１の定義が関数構造情報１２１に存在する場合には、制御部１１は、未定義の標準関数のインスタンスが制御プログラム２２１に含まれていないと判定する。
【０１３７】
ステップＳ１０４では、制御部１１は、ステップＳ１０３の判定結果に基づいて、処理の分岐先を決定する。ステップＳ１０３において、１つ以上の未定義の標準関数のインスタンスが制御プログラム２２１に含まれていると判定した場合には、制御部１１は、次のステップＳ１０５に処理を進める。一方、ステップＳ１０３において、未定義の標準関数のインスタンスが制御プログラム２２１に含まれていないと判定した場合には、制御部１１は、ステップＳ１０５の処理を省略し、次のステップＳ１０６に処理を進める。
【０１３８】
［ステップＳ１０５］
ステップＳ１０５では、制御部１１は、定義受付部１１４として動作し、未定義の標準関数における入力パラメータと出力パラメータとの間の依存関係を定義する追加の関数構造情報１２３の入力を受け付ける。追加の関数構造情報１２３の入力を受け付ける方法は、実施の形態に応じて適宜決定されてよい。例えば、制御部１１は、入力装置１４を介して未定義の標準関数についての定義の入力を受け付けてもよい。また、例えば、制御部１１は、未定義の標準関数についての定義を記述したデータを受信してもよい。これにより、追加の関数構造情報１２３が入力されると、制御部１１は、次のステップＳ１０６に処理を進める。
【０１３９】
［ステップＳ１０６及びステップＳ１０７］
ステップＳ１０６では、制御部１１は、定義付与部１１５として動作し、関数構造情報１２１に基づいて、制御プログラム２２１に含まれる１つ以上の標準関数４１のインスタンスにおける入力パラメータ４３と出力パラメータ４４との間の依存関係を特定する。上記ステップＳ１０５が実行されている場合には、制御部１１は、関数構造情報１２１及び追加の関数構造情報１２３に基づいて、制御プログラム２２１に含まれる１つ以上の標準関数４１のインスタンスにおける入力パラメータ４３と出力パラメータ４４との間の依存関係を特定する。すなわち、制御部１１は、入力された追加の関数構造情報１２３に基づいて、１つ以上の標準関数４１のうちの１つ以上の未定義の標準関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係を特定する。
【０１４０】
ステップＳ１０７では、制御部１１は、関係特定部１１６として動作し、抽出した依存関係のパターンにおいて、ある関数のインスタンスの入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する、同一の関数のインスタンスの出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定する。これにより、制御部１１は、各デバイス変数３１間の依存関係を特定する。
【０１４１】
＜特定処理＞
ここで、図１３Ａ及び図１３Ｂを用いて、ステップＳ１０６及びステップＳ１０７の処理の一例を詳細に説明する。図１３Ａ及び図１３Ｂは、本実施形態に係る解析装置１による各デバイス変数３１間の依存関係と特定するための処理手順の一例を例示する。本実施形態に係るステップＳ１０６及びＳ１０７の処理は、以下のステップＳ５０１〜ステップＳ５１２の処理を含む。ただし、以下で説明する処理手順は一例に過ぎず、各処理は可能な限り変更されてよい。また、以下で説明する処理手順について、実施の形態に応じて、適宜、ステップの省略、置換、及び追加が可能である。
【０１４２】
（ステップＳ５０１〜ステップＳ５０３）
ステップＳ５０１では、制御部１１は、制御プログラム２２１内で利用されているデバイス変数３１をリストアップする。ステップＳ５０１は、上記ステップＳ３０１と同様に処理されてよい。ステップＳ５０２では、制御部１１は、依存関係を解析する対象となるデバイス変数（以下、「解析対象のデバイス変数」とも記載する）をデバイス変数のリストからピックアップする。ステップＳ５０３では、制御部１１は、抽出結果（抽出結果データ２２４）を参照し、解析対象のデバイス変数に関する始端のレコードをリストアップする。
【０１４３】
始端のレコードは、依存性の経路をたどった結果、最初に抽出された依存関係のパターンを示す。つまり、始端のレコードは、他のレコードに従属せず、当該始端のレコードの「ＰＡＲＥＮＴ」フィールドは空欄である。制御部１１は、「ＰＡＲＥＮＴ」及び「ＤＥＶＩＣＥ」フィールドを参照することで、解析対象のデバイス変数に関する始端のレコードをリストアップすることができる。
【０１４４】
上記図１２の例において、例えば、デバイス変数「Ｄ１」を解析対象のデバイス変数としてピックアップした場合には、制御部１１は、デバイス変数「Ｄ１」に関する始端のレコードとして１番目のレコードをピックアップする。一方、例えば、デバイス変数「Ｄ３」を解析対象のデバイス変数としてピックアップした場合には、制御部１１は、デバイス変数「Ｄ３」に関する始端のレコードとして５番目及び７番目のレコードをピックアップする。
【０１４５】
解析対象のデバイス変数に関する始端のレコードのリストアップが完了すると、制御部１１は、次のステップＳ５０４に処理を進める。
【０１４６】
（ステップＳ５０４及びステップＳ５０５）
ステップＳ５０４では、制御部１１は、始端のレコードのリスト（リストアップされた始端のレコード）から解析処理の対象とする始端のレコードをピックアップする。ステップＳ５０５では、制御部１１は、始端のレコードから抽出結果の各レコードを探索し、終端のレコードを抽出する。
【０１４７】
終端のレコードは、依存性の経路とたどった結果、最終的に抽出された依存関係のパターンを示す。つまり、終端のレコードには、従属する他のレコードが存在しない。制御部１１は、「ＰＡＲＥＮＴ」及び「ＤＥＶＩＣＥ」フィールドを参照し、始端のレコードから抽出結果の各レコードをたどることで、終端のレコードを抽出することができる。１つの始端のレコードに対して複数の終端のレコードが存在する場合には、制御部１１は、全ての終端のレコードを抽出する。
【０１４８】
上記図１２の例において、例えば、５番目のレコードを処理対象の始端のレコードとしてピックアップした場合には、制御部１１は、５番目のレコードに対応する終端のレコードとして６番目のレコードを抽出する。また、例えば、７番目のレコードを処理対象の始端のレコードとしてピックアップした場合には、この７番目のレコードに従属するレコードは存在しないため、制御部１１は、そのまま７番目のレコードを終端のレコードとして抽出する。
【０１４９】
ピックアップした始端のレコードに対応する終端のレコードの抽出が完了すると、制御部１１は、次のステップＳ５０６に処理を進める。
【０１５０】
（ステップＳ５０６）
上記抽出処理では、解析対象の変数がユーザ定義関数のインスタンスのパラメータである場合には、依存性の経路をたどる処理は継続される。一方で、解析対象の変数が標準関数のインスタンスのパラメータ又は他のデバイス変数である場合には、依存性の経路をたどる処理は終了する。そのため、終端のレコードは、標準関数のインスタンスのパラメータ又は他のデバイス変数に対する依存関係を示す。
【０１５１】
そこで、ステップＳ５０６では、制御部１１は、抽出された終端のレコードが標準関数のインスタンスのパラメータに関するか他のデバイス変数に関するかを判定する。この判定方法は、実施の形態に応じて適宜決定されてよい。本実施形態では、抽出された終端のレコードが標準関数のインスタンスのパラメータに関する場合、当該終端のレコードの「ＰＡＲＡＭＥＴＥＲ」フィールドには、そのパラメータの名称が格納されている。一方、抽出された終端のレコードが他のデバイス変数に関する場合、当該終端のレコードの「ＰＡＲＡＭＥＴＥＲ」フィールドは空欄である。そのため、制御部１１は、「ＰＡＲＡＭＥＴＥＲ」フィールドの値を参照することで、抽出された終端のレコードが標準関数のインスタンスのパラメータに関するか他のデバイス変数に関するかを判定してもよい。
【０１５２】
抽出された終端のレコードが標準関数のインスタンスのパラメータに関すると判定した場合、制御部１１は、ステップＳ５０８に処理を進める。一方、抽出された終端のレコードが他のデバイス変数に関すると判定した場合、制御部１１は、次のステップＳ５０７に処理を進める。
【０１５３】
（ステップＳ５０７）
ステップＳ５０７では、制御部１１は、終端のレコードにより示される他のデバイス変数と解析対象のデバイス変数との間に依存関係があると認定し、認定結果及び参照レコードの情報（不図示）を保存する。制御部１１は、終端のレコードの「ＶＡＲＩＡＢＬＥ」フィールドから他のデバイス変数の名称を取得することができる。認定結果及び参照レコードの情報のデータ形式は、実施の形態に応じて適宜決定されてよい。認定結果及び参照レコードの情報の保存が完了すると、制御部１１は、次のステップＳ５１０に処理を進める。
【０１５４】
（ステップＳ５０８及びステップＳ５０９）
ステップＳ５０８では、制御部１１は、関数構造情報１２１を参照し、終端のレコードにより示される標準関数のパラメータについての依存関係の定義を抽出する。ステップＳ１０５により追加の関数構造情報１２３の入力を受け付けた場合には、制御部１１は、関数構造情報１２１及び追加の関数構造情報１２３を参照し、終端のレコードにより示される標準関数のパラメータについての依存関係の定義を抽出する。ステップＳ５０９では、制御部１１は、抽出した定義を参照することで、対象のパラメータに関する依存関係を特定し、依存関係を特定した結果及びレコードの探索結果の情報を保存する。
【０１５５】
ここで、図１４Ａ及び図１４Ｂを更に用いて、終端のレコードにより示される標準関数のパラメータに関する依存関係を特定する過程の一例について説明する。図１４Ａは、本実施形態に係る関数構造情報１２１（及び、追加の関数構造情報１２３）の一例を模式的に例示する。図１４Ｂは、ステップＳ５０９の処理の結果により得られる中間データ２２６の一例を例示する。
【０１５６】
図１４Ａの例では、関数構造情報１２１はテーブル構造を有しており、各レコード（行データ）は、「ＩＤ」、「ＦＢ」、「ＲＡＲ＿Ｘ」、及び「ＲＡＲ＿Ｙ」のフィールドを有している。「ＩＤ」フィールドには、依存関係を識別するための識別子が格納される。「ＦＢ」フィールドには、依存関係が定義される標準関数の名称が格納される。「ＲＡＲ＿Ｘ」フィールドには、依存関係が定義される入力パラメータの名称が格納される。「ＲＡＲ＿Ｙ」フィールドには、「ＲＡＲ＿Ｘ」フィールドにより示される入力パラメータとの間で依存関係を有する出力パラメータの名称が格納される。１つのレコードが、標準関数における入力パラメータと出力パラメータとの間の１つの依存関係に対応している。ただし、関数構造情報１２１のデータ構成は、このような例に限定されなくてもよく、実施の形態に応じて適宜決定されてよい。追加の関数構造情報１２３も、関数構造情報１２１と同様に構成される。
【０１５７】
本実施形態では、ステップＳ５０８では、制御部１１は、終端のレコードの「ＦＵＮＣＴＩＯＮ」フィールドの値を関数構造情報１２１の各レコードの「ＦＢ」フィールドの値と照合する。また、制御部１１は、終端のレコードの「ＰＡＲＡＭＥＴＥＲ」フィールドの値を関数構造情報１２１の各レコードの「ＰＡＲ＿Ｘ」又は「ＰＡＲ＿Ｙ」フィールドの値と照合する。終端のレコードの「ＩＯ」フィールドの値が入力パラメータであること示している場合には、制御部１１は、終端のレコードの「ＰＡＲＡＭＥＴＥＲ」フィールドの値を関数構造情報１２１の各レコードの「ＰＡＲ＿Ｘ」と照合する。一方、終端のレコードの「ＩＯ」フィールドの値が出力パラメータであること示している場合には、制御部１１は、終端のレコードの「ＰＡＲＡＭＥＴＥＲ」フィールドの値を関数構造情報１２１の各レコードの「ＰＡＲ＿Ｙ」と照合する。これにより、制御部１１は、関数構造情報１２１の各レコードを検索し、終端のレコードにより示される標準関数のパラメータについての依存関係を定義するレコードを抽出する。ステップＳ１０５により追加の関数構造情報１２３の入力を受け付けた場合には、制御部１１は、追加の関数構造情報１２３の検索も更に実行する。なお、以下では、追加の関数構造情報１２３に対する処理については、関数構造情報１２１と同様であるため、説明を省略する。
【０１５８】
ステップＳ５０９では、制御部１１は、関数構造情報１２１から抽出したレコードを参照することで、対象のパラメータと依存関係を有する他のパラメータを特定し、依存関係を特定した結果及びレコードの探索経路の情報を中間データ２２６の各レコードに格納する。
【０１５９】
図１４Ｂの例では、中間データ２２６はテーブル構造を有しており、各レコード（行データ）は、「ＤＥＶＩＣＥ」、「ＩＮＳＴＡＮＣＥ」、「ＤＥＰ」、「ＩＤ」及び「ＴＲＡＣＥ」のフィールドを有している。１つのレコードが、依存関係を特定した１つの結果、すなわち、関数構造情報１２１により定義を与えた１つの結果に対応する。ただし、中間データ２２６の構成は、このような例に限定されなくてもよく、実施の形態に応じて適宜決定されてよい。
【０１６０】
「ＤＥＶＩＣＥ」フィールドには、解析対象のデバイス変数の名称が格納される。「ＩＮＳＴＡＮＣＥ」フィールドには、関数構造情報１２１から抽出したレコードにより依存関係を特定した標準関数のインスタンスの名称が格納される。この標準関数のインスタンスの名称は、ステップＳ５０５により抽出された終端のレコードの「ＩＮＳＴＡＮＣＥ」フィールドから得られる。
【０１６１】
「ＤＥＰ」フィールドには、解析対象のデバイス変数と依存関係を有する標準関数のインスタンスにおけるパラメータであって、関数構造情報１２１により定義が与えられたパラメータの種別が格納される。上記の検索において、終端のレコードの「ＰＡＲＡＭＥＴＥＲ」フィールドの値を関数構造情報１２１の各レコードの「ＰＡＲ＿Ｘ」と照合した場合には、「ＤＥＰ」フィールドには、入力パラメータであることを示す情報（図では、「ＰＡＲ＿Ｘ」）が格納される。一方、終端のレコードの「ＰＡＲＡＭＥＴＥＲ」フィールドの値を関数構造情報１２１の各レコードの「ＰＡＲ＿Ｙ」と照合した場合には、「ＤＥＰ」フィールドには、出力パラメータであることを示す情報（図では、「ＰＡＲ＿Ｙ」）が格納される。
【０１６２】
「ＩＤ」フィールドには、ステップＳ５０８により抽出されたレコードの識別子（「ＩＤ」フィールドの値）が格納される。「ＴＲＡＣＥ」フィールドには、ステップＳ５０５により始端のレコードから終端のレコードまで探索した経路を示す情報が格納される。
【０１６３】
上記図１２の例において、解析対象のデバイス変数が「Ｄ１」である場合に、ステップＳ５０３では、１番目のレコードが始端のレコードとして抽出される。ステップＳ５０５では、２番目のレコードが終端のレコードとして抽出される。これに応じて、ステップＳ５０８では、図１４Ａにより例示される関数構造情報１２１の２番目のレコード（「ＩＤ」が「２」のレコード）が抽出される。その結果、ステップＳ５０９では、依存関係を特定した結果及びレコードの探索経路の情報として、図１４Ｂの１番目のレコード（「ＤＥＶＩＣＥ」が「Ｄ１」のレコード）が得られる。
【０１６４】
また、例えば、解析対象のデバイス変数が「Ｄ２」である場合に、ステップＳ５０３では、３番目のレコードが始端のレコードとして抽出される。ステップＳ５０５では、４番目のレコードが終端のレコードとして抽出される。これに応じて、ステップＳ５０８では、図１４Ａにより例示される関数構造情報１２１の１番目〜３番目の各レコード（「ＩＤ」が「１」〜「３」の各レコード）が抽出される。その結果、ステップＳ５０９では、依存関係を特定した結果及びレコードの探索経路の情報として、図１４Ｂの２〜４番目のレコード（「ＤＥＶＩＣＥ」が「Ｄ２」の各レコード）が得られる。
【０１６５】
対象のパラメータに関する依存関係を特定し、依存関係を特定した結果及びレコードの探索結果の情報の保存が完了すると、制御部１１は、次のステップＳ５１０に処理を進める。
【０１６６】
（ステップＳ５１０）
ステップＳ５１０では、制御部１１は、ステップＳ５０３でリストアップされた全ての始端のレコードについてステップＳ５０４以下の処理が終了したか否かを判定する。ステップＳ５０４以下の処理を実行していない始端のレコードがリストに残っている場合には、制御部１１は、リストアップされた全ての始端のレコードについてはまだステップＳ５０４以下の処理は終了していないと判定する。この場合には、制御部１１は、ステップＳ５０４に処理を戻し、リストに残っている別の始端のレコードを処理対象の始端のレコードとしてピックアップして、ステップＳ５０５以下の処理を繰り返す。一方、そうではない場合には、制御部１１は、リストアップされた全ての始端のレコードについて処理が終了したと判定し、次のステップＳ５１１に処理を進める。
【０１６７】
（ステップＳ５１１）
ステップＳ５１１では、制御部１１は、ステップＳ５０１でリストアップされた全てのデバイス変数についてステップＳ５０２以下の処理が終了したか否かを判定する。ステップＳ５０２以下の処理を実行していないデバイス変数がリストに残っている場合には、制御部１１は、リストアップされた全てのデバイス変数についてはまだステップＳ５０２以下の処理は終了していないと判定する。この場合には、制御部１１は、ステップＳ５０２に処理を戻し、リストに残っている別のデバイス変数を解析対象のデバイス変数としてピックアップして、ステップＳ５０３以下の処理を繰り返す。一方、そうではない場合には、制御部１１は、リストアップされた全てのデバイス変数について処理が終了したと判定し、次のステップＳ５１２に処理を進める。
【０１６８】
（ステップＳ５１２）
ステップＳ５１２では、制御部１１は、ステップＳ５０７による依存関係の認定結果、及びステップＳ５０９によるパラメータに関する依存関係の特定結果に基づいて、全てのデバイス変数間の依存関係を特定する。
【０１６９】
図１５は、本実施形態に係る解析装置１によりデバイス変数間の依存関係を特定した結果を示す特定結果データ２２７の一例を例示する。図１５の例では、特定結果データ２２７は隣接行列により表現されており、互いに依存関係を有するデバイス変数の組に対応する該当要素（成分）は「１」であり、そうではない要素（成分）は「０」である。列が依存元を示し、行が依存先を示している。ただし、特定結果データ２２７の構成は、このような例に限定されなくてもよく、実施の形態に応じて適宜決定されてよい。
【０１７０】
ステップＳ５０７による認定結果は、始端のレコードに対応するデバイス変数と終端のレコードに対応する他のデバイス変数とが依存関係を有していることを示す。そのため、制御部１１は、ステップＳ５０７による認定結果をそのまま利用して、各デバイス変数間の依存関係と特定する。具体的には、制御部１１は、ステップＳ５０７により互いに依存関係を有すると認定されるデバイス変数の組に対応する該当要素を「１」にする。
【０１７１】
一方、ステップＳ５０９による特定結果は、標準関数のインスタンスのパラメータに対する各デバイス変数の依存関係、及び標準関数における入出力間の依存関係を示す。そこで、制御部１１は、中間データ２２６を参照し、制御プログラム２２１内で利用される標準関数のうちのいずれかの標準関数の入力パラメータに依存関係を有する一のデバイス変数が、当該入力パラメータとの間に依存関係を有する当該いずれかの標準関数の出力パラメータに依存関係を有する他のデバイス変数との間に依存関係を有すると認定する。
【０１７２】
具体的には、制御部１１は、「ＩＮＳＴＡＮＣＥ」及び「ＩＤ」フィールドの値が一致するレコードの組み合わせを中間データ２２６から抽出する。抽出された組み合わせのうち一方のレコードの「ＤＥＰ」フィールドの値が「ＰＡＲ＿Ｘ」であり、他方のレコードの「ＤＥＰ」フィールドの値が「ＰＡＲ＿Ｙ」であると想定する。この場合に、制御部１１は、一方のレコードの「ＤＥＶＩＣＥ」フィールドにより示されるデバイス変数から他方のレコードの「ＤＥＶＩＣＥ」フィールドにより示されるデバイス変数に依存関係が存在すると認定する。そして、制御部１１は、互いに依存関係を有すると認定されたデバイス変数の組に対応する該当要素を「１」にする。
【０１７３】
図１４Ｂの例では、１番目のレコード及び３番目のレコードにより、デバイス変数「Ｄ１」からデバイス変数「Ｄ２」に依存関係が存在すると認定することができる。同様に、２番目のレコード及び５番目のレコードにより、デバイス変数「Ｄ３」からデバイス変数「Ｄ２」に依存関係が存在すると認定することができる。６番目のレコード及び８番目のレコードにより、デバイス変数「Ｄ３」からデバイス変数「Ｄ４」に依存関係が存在すると認定することができる。そのため、図１５により例示される特定結果データ２２７では、それぞれに該当する１行２列目の要素、３行２列目の要素、及び３行４列目の要素が「１」であり、その他の要素は「０」である。
【０１７４】
このように全てのデバイス変数間の依存関係を特定し、特定結果データ２２７の生成が完了すると、制御部１１は、各デバイス変数３１間の依存関係と特定するための処理を終了する。これにより、ステップＳ１０６及びステップＳ１０７の一連の処理が完了すると、制御部１１は、次のステップＳ１０８に処理を進める。
【０１７５】
［ステップＳ１０８及びステップＳ１０９］
ステップＳ１０８では、制御部１１は、グラフ生成部１１７として動作し、依存関係を特定した結果に基づいて、特定された各デバイス変数３１間の依存関係を示す有向グラフを生成する。ステップＳ１０９では、制御部１１は、出力部１１８として動作し、各デバイス変数３１間の依存関係を特定した結果に関する情報として、生成された有向グラフを表示装置１５に出力する。本実施形態では、制御部１１は、以下の第１モード〜第１０モードいずれかの有向グラフを生成し、生成した有向グラフを表示装置１５に出力する。
【０１７６】
（１）第１モード
図１６を用いて、第１モードの有向グラフの一例について説明する。図１６は、本実施形態に係る解析装置１により生成される第１モードの有向グラフ５１の一例を模式的に例示する。第１モードは、各デバイス変数間の依存関係を示す最もシンプルなモードである。第１モードの有向グラフ５１は、各デバイス変数３１をそれぞれ表現する複数のノード６１、及び依存関係を有することを表現する１つ以上のエッジ６２を含む。ノード６１は、本発明の「第１ノード」の一例である。
【０１７７】
制御部１１は、ステップＳ１０８において、依存関係を特定した結果に基づいて、当該有向グラフ５１を生成する。具体的には、制御部１１は、特定結果データ２２７を参照して、第１モードの有向グラフ５１を生成する。上記図１５の例では、特定結果データ２２７は、４つのデバイス変数Ｄ１〜Ｄ４について、Ｄ１からＤ２に、Ｄ３からＤ２に、及びＤ３からＤ４に依存関係を有していることを示している。そのため、図１６の例では、有向グラフ５１は、４つのデバイス変数Ｄ１〜Ｄ４にそれぞれ対応する４つのノード６１を含んでいる。「Ｄ１」のノード６１から「Ｄ２」のノード６１にエッジ６２が延びている。「Ｄ３」のノード６１から「Ｄ２」のノード６１にエッジ６２が延びている。「Ｄ３」のノード６１から「Ｄ４」のノード６１にエッジ６２が延びている。
【０１７８】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５１を表示装置１５に出力する。この有向グラフ５１によれば、各デバイス変数３１の表現を介して、生産ライン２７を構成する各デバイス２８間の依存関係をシンプルに示すことができる。そのため、表示装置１５の表示領域の消費量を抑えながら、各デバイス２８間の依存関係をユーザに的確に示すことができる。
【０１７９】
（２）第２モード
次に、図１７Ａを用いて、第２モードの有向グラフの一例について説明する。図１７Ａは、本実施形態に係る解析装置１により生成される第２モードの有向グラフ５２の一例を模式的に例示する。第２モードは、関数を更に示すモードである。
【０１８０】
この第２モードでは、有向グラフ５２は、上記複数のノード６１、上記１つ以上のエッジ６２の他に、関数のインスタンスを表現する１つ以上のブロック（６３、６４）を更に含むように生成される。各ブロック（６３、６４）は、表現される関数のインスタンスにおける入力パラメータ又は出力パラメータに対して依存関係を有するデバイス変数を表現するノード６１にエッジ６２を介して連結される。
【０１８１】
制御部１１は、ステップＳ１０８において、依存関係を特定した結果に基づいて、当該有向グラフ５２を生成する。具体的には、制御部１１は、特定結果データ２２７から中間データ２２６及び抽出結果データ２２４をさかのぼって参照する。例えば、デバイス変数「Ｄ１」とデバイス変数「Ｄ２」との依存関係は、中間データ２２６の１番目及び３番目のレコードから導出されている。また、中間データ２２６の１番目及び３番目のレコードは、抽出結果データ２２４の１番目〜４番目のレコードから導出されている。中間データ２２６と抽出結果データ２２４との対応関係を示す情報は、中間データ２２６の「ＴＲＡＣＥ」フィールドに格納されている。制御部１１は、特定結果データ２２７からさかのぼって中間データ２２６を参照し、該当レコードの「ＴＲＡＣＥ」フィールドの値に基づいて中間データ２２６からさかのぼって抽出結果データ２２４を参照する。
【０１８２】
制御部１１は、抽出結果データ２２４の該当レコードから、デバイス変数「Ｄ１」とデバイス変数「Ｄ２」との間にユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」が介在していることを特定することができる。同様に、制御部１１は、抽出結果データ２２４の該当レコードから、デバイス変数「Ｄ３」とデバイス変数「Ｄ２」との間にユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」が介在しており、デバイス変数「Ｄ３」とデバイス変数「Ｄ４」との間に標準関数のインスタンス「Ｉｎｓｔ＿ＳｔｄＦＢ２」が介在していることを特定することができる。これらの参照結果に基づいて、制御部１１は、第２モードの有向グラフ５２を生成する。
【０１８３】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５２を表示装置１５に出力する。この有向グラフ５２によれば、制御プログラム２２１における各デバイス変数３１間の依存関係と関数の各パラメータに対する各デバイス変数３１の依存関係とを関連付けて示すことができる。そのため、関数の各パラメータに対する各デバイス変数３１の依存関係を各デバイス変数３１間の依存関係に関連付けて把握することができるようになる。
【０１８４】
なお、上記の例では、ユーザ定義関数「Ｍｙ＿ＦＢ」の内部で標準関数「Ｓｔｄ＿ＦＢ１」が利用されている。制御部１１は、抽出結果データ２２４の該当レコードから、このような各関数の関係を特定することができる。例えば、抽出結果データ２２４の２番目のレコードは、「ＰＡＲＥＮＴ」フィールドの値に示されるとおり、１番目のレコードに従属している。１番目のレコードは、ユーザ定義関数「Ｍｙ＿ＦＢ」のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」の入力パラメータ「Ａｒｇ１」にデバイス変数「Ｄ１」が依存関係を有していることを示している。２番目のレコードは、標準関数「Ｓｔｄ＿ＦＢ１」のインスタンス「Ｉｎｓｔ＿ＳｔｄＦＢ１」の入力パラメータ「Ｉｎｐｕｔ１」に「Ａｒｇ１」が依存関係を有していることを示している。制御部１１は、抽出結果データ２２４の該当レコードからこれらの各関数の入れ子関係を特定することができる。この第２モードでは、制御部１１は、最も外部で利用されている関数を示すように有向グラフ５２を生成する。そのため、図１７Ａの例では、制御部１１は、ユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」を選択して、選択されたインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」に対応するブロック６４を含む有向グラフ５２を生成している。
【０１８５】
ここで、上記の例では、制御プログラム２２１は、標準関数のインスタンス「Ｉｎｓｔ＿ＳｔｄＦＢ２」の他に、ユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」を含んでいる。このように、制御プログラム２２１における複数の命令は複数の関数のインスタンスを含んでもよく、複数の関数のインスタンスは、１つ以上の標準関数のインスタンスの他に、標準関数とは異なる１つ以上のユーザ定義関数のインスタンスを含んでもよい。ユーザ定義関数は、制御プログラム２２１内でユーザにより定義される。この場合に、有向グラフは、各関数をそれぞれ表現する複数のブロックのうち、複数の関数のインスタンスのうちの標準関数のインスタンスを表現する第１のブロックを第１の形態で示し、ユーザ定義関数のインスタンスを表現する第２のブロックを第１の形態とは異なる第２の形態で示すように生成されてもよい。
【０１８６】
図１７Ａの例では、標準関数のインスタンス「Ｉｎｓｔ＿ＳｔｄＦＢ２」を表現するブロック６３が、第１のブロックの一例であり、ユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」を表現するブロック６４が、第２のブロックの一例である。また、図１７Ａの例では、ブロック６３を表現する実線が第１の形態の一例であり、ブロック６４を表現する点線が第２の形態の一例である。なお、異なる形態で各ブロック（６３、６４）を表現する方法は、このような線の種類による方法に限られなくてもよく、実施の形態に応じて適宜選択されてよい。例えば、各ブロック（６３、６４）の形態は、図１７Ａで例示される線の種類の他、色、形状、文字のフォント等の属性により規定されてよい。また、各ブロック（６３、６４）に対応するシンボルを定義し、定義された各シンボルを各ブロック（６３、６４）の表示に利用してもよい。
【０１８７】
このように、有向グラフ５２は、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とを異なる形態で示すように生成されてもよい。ただし、関数の各ブロック（６３、６４）を表現する方法は、このような例に限定されなくてもよい。標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とは同じ形態で示されてもよい。
【０１８８】
（３）第３モード
次に、図１７Ｂを用いて、第３モードの有向グラフの一例について説明する。図１７Ｂは、本実施形態に係る解析装置１により生成される第３モードの有向グラフ５３の一例を模式的に例示する。第３モードは、関数の各パラメータを区別して示すモードである。
【０１８９】
上記第２モードでは、有向グラフ５２は、表現される関数のインスタンスにおける入力パラメータ及び出力パラメータそれぞれの名称を示さずに、依存関係を有するデバイス変数３１を表現するノード６１をブロック（６３、６４）にエッジ６２を介して連結する表示形態を有している。これに対して、第３モードでは、有向グラフ５３は、表現される関数のインスタンスにおける入力パラメータ及び出力パラメータそれぞれを区別して、依存関係を有するデバイス変数３１を表現するノード６１にブロック（６３、６４）がエッジ６２を介して連結し、かつエッジ６２付近には、対応する入力パラメータ又は出力パラメータの名称を示す表示形態を有するように生成される。
【０１９０】
制御部１１は、ステップＳ１０８において、依存関係を特定した結果に基づいて、当該有向グラフ５３を生成する。具体的には、上記第２モードと同様に、制御部１１は、特定結果データ２２７から中間データ２２６及び抽出結果データ２２４をさかのぼって参照する。制御部１１は、抽出結果データ２２４の該当レコードに基づいて、関数の各パラメータに対して依存関係を有する各デバイス変数３１を特定する。制御部１１は、抽出結果データ２２４の各レコードの「ＰＡＲＡＭＥＴＥＲ」フィールドから各パラメータの名称を得ることができる。この第３モードでは、制御部１１は、「ＰＡＲＡＭＥＴＥＲ」フィールドから特定された各パラメータの名称の表記を各ブロックの対応する箇所に配置する。
【０１９１】
上記の例では、ユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」における入力パラメータ「Ａｒｇ１」に対してデバイス変数「Ｄ１」が依存関係を有しており、入力パラメータ「Ｅｎａｂｌｅ」に対してデバイス変数「Ｄ３」が依存関係を有している。制御部１１は、デバイス変数「Ｄ１」を表現するノード６１から延びるエッジ６２とデバイス変数「Ｄ３」を表現するノード６１から延びるエッジ６２とを区別して、ユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」するブロック６４に接続する。そして、制御部１１は、各入力パラメータの名称の表記６４１を各エッジ６２付近に配置する。
【０１９２】
同様の処理により、制御部１１は、デバイス変数「Ｄ２」とブロック６４とを連結するエッジ６２付近に、デバイス変数「Ｄ２」と依存関係を有する出力パラメータの名称の表記６４２を配置する。制御部１１は、デバイス変数「Ｄ３」とブロック６３とを連結するエッジ６２付近に、デバイス変数「Ｄ３」と依存関係を有する入力パラメータの名称の表記６３１を配置する。制御部１１は、デバイス変数「Ｄ４」とブロック６３とを連結するエッジ６２付近に、デバイス変数「Ｄ４」と依存関係を有する出力パラメータの名称の表記６３２を配置する。これにより、制御部１１は、第３モードの有向グラフ５３を生成することができる。
【０１９３】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５３を表示装置１５に出力する。この有向グラフ５３によれば、各デバイス変数３１が依存関係を有する関数のパラメータを識別することができるようになる。そのため、関数の各パラメータに対する各デバイス変数３１の依存関係を、各デバイス変数３１間の依存関係に関連付けてかつより明確に示すことができる。
【０１９４】
なお、この第３モードにおいても、上記第２モードと同様に、有向グラフ５３は、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とを異なる形態で示すように生成されてもよい。図１７Ｂの例では、各ブロック（６３、６４）は、上記図１７Ａと同様の形態で示されている。ただし、第３モードにおける関数の各ブロック（６３、６４）を表現する方法は、このような例に限定されなくてもよい。この第３モードにおいても、上記第２モードと同様に、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とは同じ形態で示されてもよい。
【０１９５】
（４）第４モード
次に、図１７Ｃを用いて、第４モードの有向グラフの一例について説明する。図１７Ｃは、本実施形態に係る解析装置１により生成される第４モードの有向グラフ５４の一例を模式的に例示する。第４モードは、デバイス変数とは異なる他の変数であって、関数の外部で利用される他の変数を示すモードである。
【０１９６】
上記の例では、制御プログラム２２１は、各デバイス変数３１とは異なる他の変数「Ａ１」を含んでおり、この他の変数「Ａ１」は、デバイス変数「Ｄ１」と関数のインスタンスにおける入力パラメータ「Ａｒｇ１」との間で利用されている。このように、制御プログラム２２１における複数の変数は、各デバイス変数３１とは異なる１つ以上の他の変数であって、複数のデバイス変数３１のうちのいずれかといずれかの関数の入力パラメータ又は出力パラメータとの間で利用される１つ以上の他の変数を含んでもよい。この場合に、第４モードの有向グラフ５４は、１つ以上の他の変数を表現する１つ以上のノード６５であって、複数のデバイス変数３１のうちのいずれかを表現するノード６１及び関数を表現するブロック（６３、６４）の間に配置され、それぞれにエッジ６２を介して連結された１つ以上のノード６５を含むように生成される。ノード６５は、本発明の「第２ノード」の一例である。
【０１９７】
制御部１１は、ステップＳ１０８において、依存関係を特定した結果に基づいて、当該有向グラフ５３を生成する。具体的には、上記第２モード及び第３モードと同様に、制御部１１は、特定結果データ２２７から中間データ２２６及び抽出結果データ２２４をさかのぼって参照する。制御部１１は、抽出結果データ２２４の各レコードの「ＶＡＲＩＡＢＬＥ」フィールドから、デバイス変数と関数の各パラメータとの間で利用されている他の変数を特定することができる。この第４モードでは、制御部１１は、「ＶＡＲＩＡＢＬＥ」フィールドから特定された他の変数を表現するノード６５を対応する箇所に配置する。
【０１９８】
上記の例では、制御部１１は、抽出結果データ２２４の１番目のレコードから、デバイス変数「Ｄ１」とユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」の入力パラメータ「Ａｒｇ１」との間に、他の変数「Ａ１」が介在していることを特定することができる。この参照結果に基づいて、制御部１１は、デバイス変数「Ｄ１」を表現するノード６１とユーザ定義関数のインスタンス「Ｉｎｓｔ＿ＭｙＦＢ」を表現するブロック６４との間に、他の変数「Ａ１」を表現するノード６５を配置する。そして、制御部１１は、ノード６５とノード６１及びブロック６４とをエッジ６２で連結する。なお、制御部１１は、抽出結果データ２２４の各レコードの「ＤＩＲＥＣＴＩＯＮ」フィールドの値に基づいてノード６５に連結する各エッジ６２の向きを決定する。これにより、制御部１１は、第４モードの有向グラフ５４を生成することができる。
【０１９９】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５４を表示装置１５に出力する。この有向グラフ５４によれば、各デバイス変数３１だけではなく、制御プログラム２２１で利用される他の変数も表現することができる。そのため、各デバイス変数３１間に他の変数が介在する場合に、その他の変数に関する依存関係を各デバイス変数３１間の依存関係に関連付けて示すことができる。
【０２００】
ここで、図１７Ｄを用いて、第４モードの有向グラフの異なる表示形態の一例について説明する。図１７Ｄは、本実施形態に係る解析装置１により、図１７Ｃとは異なる表示形態で生成された第４モードの有向グラフ５４１の一例を模式的に例示する。図１７Ｃの例では、有向グラフ５４は、上記第３モードと同様に、各表記（６３１、６３２、６４１、６４２）により、関数のインスタンスにおける入力パラメータ及び出力パラメータそれぞれの名称を示す表示形態で生成されている。これに対して、図１７Ｄで例示される有向グラフ５４１は、上記第２モードと同様に、関数のインスタンスにおける入力パラメータ及び出力パラメータそれぞれの名称を示さない表現形態で生成されている。この点を除いて、有向グラフ５４１は、上記有向グラフ５４と同様に生成されている。このように、第４モードの有向グラフの表示形態は、上記第３モードの表示形態に限られなくてもよく、実施の形態に応じて適宜選択されてよい。
【０２０１】
また、この第４モードにおいても、上記第２モード及び第３モードと同様に、各有向グラフ（５４、５４１）は、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とを異なる形態で示すように生成されてもよい。図１７Ｃ及び図１７Ｄの例では、各ブロック（６３、６４）は、上記図１７Ａと同様の形態で示されている。ただし、第４モードにおける関数の各ブロック（６３、６４）を表現する方法は、このような例に限定されなくてもよい。この第４モードにおいても、上記第２モード及び第３モードと同様に、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とは同じ形態で示されてもよい。
【０２０２】
（５）第５モード
次に、図１８Ａを用いて、第５モードの有向グラフの一例について説明する。図１８Ａは、本実施形態に係る解析装置１により生成される第５モードの有向グラフ５５の一例を模式的に例示する。第５モードは、関数の内部構造を示すモードである。
【０２０３】
この第５モードでは、有向グラフ５５は、上記複数のノード６１、上記１つ以上のエッジ６２、及びブロック（６３、６４）の他に、ブロック（６３、６４）内に配置され、表現される関数のインスタンスにおける入力パラメータ及び出力パラメータそれぞれをそれぞれ表現する複数のノード（６３４、６３５、６４４、６４５）を更に含むように生成される。各ノード（６３４、６３５、６４４、６４５）は、表現される入力パラメータ及び出力パラメータそれぞれに対して依存関係を有するデバイス変数３１を表現するノード６１にエッジ６２を介して連結される。また、表現される関数において互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現するノード（６３４、６３５）（６４４、６４５）同士は、エッジ６２を介して連結される。各ノード（６３４、６３５、６４４、６４５）は、本発明の「第３ノード」の一例である。
【０２０４】
制御部１１は、ステップＳ１０８において、依存関係を特定した結果に基づいて、当該有向グラフ５５を生成する。具体的には、上記第２モード〜第４モードと同様に、制御部１１は、特定結果データ２２７から中間データ２２６及び抽出結果データ２２４をさかのぼって参照する。制御部１１は、上記第３モードと同様に、抽出結果データ２２４の該当レコードに基づいて、関数の各パラメータに対して依存関係を有する各デバイス変数３１を特定する。この特定結果に基づいて、制御部１１は、エッジ６２により連結する各ノード６１と各ノード（６３４、６３５、６４４、６４５）との組み合わせを決定する。
【０２０５】
また、制御部１１は、標準関数のインスタンスを表現するブロック６３内に、入力パラメータを表現するノード６３４及び出力パラメータを表現するノード６３５を配置する。そして、制御部１１は、関数構造情報１２１（及び、追加の関数構造情報１２３）を参照することで、標準関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係を特定する。上記の例では、例えば、関数構造情報１２１の４番目〜６番目のレコードを参照することで、制御部１１は、標準関数のインスタンス「Ｉｎｓｔ＿ＳｔｄＦＢ２」における入力パラメータと出力パラメータとの依存関係を特定することができる。この特定結果に基づいて、制御部１１は、エッジ６２により連結するノード６３４及びノード６３５の組み合わせを決定する。
【０２０６】
更に、制御部１１は、ユーザ定義関数のインスタンスを表現するブロック６４内に、入力パラメータを表現するノード６４４及び出力パラメータを表現するノード６４５を配置する。ユーザ定義関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係は適宜特定されてよい。例えば、制御部１１は、抽出結果データ２２４の該当レコードに基づいて、ユーザ定義関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係を特定してもよい。また、例えば、制御部１１は、ユーザ定義関数のインスタンスにおける各パラメータを上記デバイス変数３１と同様に取り扱い、上記ステップＳ１０２〜ステップＳ１０７の処理を実行することで、ユーザ定義関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係を特定してもよい。この特定結果に基づいて、制御部１１は、エッジ６２により連結するノード６４４及びノード６４５の組み合わせを決定する。これにより、制御部１１は、第５モードの有向グラフ５５を生成することができる。
【０２０７】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５５を表示装置１５に出力する。この有向グラフ５５によれば、各パラメータを表現する各ノード（６３４、６３５、６４４、６４５）を含むグラフ表現により、制御プログラム２２１における各デバイス変数３１間の関数を介した依存関係を示すことができる。そのため、各デバイス変数３１間の関数を介した依存関係を適切に把握ことができるようになる。
【０２０８】
なお、この第５モードにおいても、上記第２モード〜第４モードと同様に、有向グラフ５５は、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とを異なる形態で示すように生成されてもよい。図１８Ａの例では、各ブロック（６３、６４）は、上記図１７Ａと同様の形態で示されている。ただし、第５モードにおける関数の各ブロック（６３、６４）を表現する方法は、このような例に限定されなくてもよい。この第５モードにおいても、上記第２モード〜第４モードと同様に、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とは同じ形態で示されてもよい。
【０２０９】
（６）第６モード
次に、図１８Ｂを用いて、第６モードの有向グラフの一例について説明する。図１８Ｂは、本実施形態に係る解析装置１により生成される第６モードの有向グラフ５６の一例を模式的に例示する。第６モードは、ユーザ定義関数の内部で利用される変数を示すモードである。
【０２１０】
上記の例では、制御プログラム２２１は、各デバイス変数３１とは異なるローカル変数「Ｅｘｅ」を含んでいる。このローカル変数「Ｅｘｅ」は、ユーザ定義関数「Ｍｙ＿ＦＢ」の内部において、互いに依存関係を有する入力パラメータ「Ｅｎａｂｌｅ」及び出力パラメータ「Ｏｕｔ１」の間で利用されている。このように、制御プログラム２２１における複数の変数は、各デバイス変数３１とは異なる１つ以上のローカル変数であって、ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用される１つ以上のローカル変数を含んでもよい。この場合に、第６モードの有向グラフ５６は、上記第５モードに加えて、１つ以上のローカル変数を表現する１つ以上のノード６７であって、ユーザ定義関数のインスタンスを表現するブロック６４内において、互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現するノード（６４４、６４５）間に配置され、かつそれぞれにエッジ６２を介して連結された１つ以上のノード６７を更に含むように生成される。ノード６７は、本発明の「第４ノード」の一例である。
【０２１１】
関数の各パラメータに対する各デバイス変数３１の依存関係を特定する過程で、各デバイス変数３１と関数の各パラメータとの間で利用される他の変数の存在を特定することができる。抽出結果データ２２４の各レコードの「ＶＡＲＩＡＢＬＥ」フィールドにはその結果を示す情報が格納されており、上記第４モードでは、制御部１１は、その情報を利用して、他の変数を表現するノード６５の配置及びエッジ６２の連結を決定している。これと同様に、ユーザ定義関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係を特定する過程で、入力パラメータと出力パラメータとの間で利用されているローカル変数の存在を特定することができる。
【０２１２】
例えば、制御部１１は、ステップＳ１０８において、上記第５モードと同様の方法で、ユーザ定義関数のインスタンスにおける入力パラメータと出力パラメータとの間の依存関係を特定してもよい。その過程で、制御部１１は、ローカル変数の利用されている場所を特定する。この特定結果を利用して、制御部１１は、ローカル変数を表現するノード６７をブロック６４内に配置し、そのローカル変数と依存関係を有する各パラメータを表現する各ノード（６４４、６４５）とノード６７とをエッジ６２により連結する。これにより、制御部１１は、第６モードの有向グラフ５６を生成することができる。
【０２１３】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５６を表示装置１５に出力する。この有向グラフ５６によれば、ユーザ定義関数内で利用されているローカル変数を表現することができる。そのため、制御プログラム２２１におけるデバイス変数３１間のユーザ定義関数を介した依存関係を当該ユーザ定義関数の内部構造に関連付けて示すことができる。
【０２１４】
なお、この第６モードにおいても、上記第２モード〜第５モードと同様に、有向グラフ５６は、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とを異なる形態で示すように生成されてもよい。図１８Ｂの例では、各ブロック（６３、６４）は、上記図１７Ａと同様の形態で示されている。ただし、第６モードにおける関数の各ブロック（６３、６４）を表現する方法は、このような例に限定されなくてもよい。この第６モードにおいても、上記第２モード〜第５モードと同様に、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック６４とは同じ形態で示されてもよい。
【０２１５】
（７）第７モード
次に、図１８Ｃを用いて、第７モードの有向グラフの一例について説明する。図１８Ｃは、本実施形態に係る解析装置１により生成される第７モードの有向グラフ５７の一例を模式的に例示する。第７モードは、ユーザ定義関数の内部で利用される標準関数を示すモードである。
【０２１６】
上記の例では、制御プログラム２２１は、ユーザ定義関数「Ｍｙ＿ＦＢ」の内部において、互いに依存関係を有する入力パラメータ「Ａｒｇ１」「Ｅｘｅ」及び出力パラメータ「Ｏｕｔ１」の間で利用される標準関数「ＳＴＤ＿ＦＢ１」を含んでいる。このように、制御プログラム２２１における複数の関数のインスタンスは、ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用される１つ以上の標準関数のインスタンスを含んでもよい。この場合に、第７モードの有向グラフ５７は、ユーザ定義関数のインスタンスの内部で利用される標準関数のインスタンスを表現するブロック６６が、ユーザ定義関数のインスタンスを表現するブロック６４内において、互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現するノード（６４４、６４５）間に配置され、かつそれぞれにエッジ６２を介して連結されるように生成される。ブロック６６は、本発明の「第１のブロック」の一例である。
【０２１７】
制御部１１は、ステップＳ１０８において、上記第６モードにおけるローカル変数と同様に、ユーザ定義関数のインスタンスの内部で利用される標準関数のインスタンスを表現するブロック６６の配置及びエッジ６２を介してブロック６６と連結する各ノード（６４４、６４５）を特定することができる。また、制御部１１は、抽出結果データ２２４の該当レコードからも、ブロック６６の配置及びエッジ６２を介してブロック６６と連結する各ノード（６４４、６４５）を特定することができる。これらの特定結果を利用して、制御部１１は、標準関数のインスタンスを表現するブロック６６をブロック６４内に配置し、その標準関数のインスタンスの各パラメータと依存関係を有する各パラメータを表現する各ノード（６４４、６４５）とブロック６６をエッジ６２により連結する。これにより、制御部１１は、第７モードの有向グラフ５７を生成することができる。
【０２１８】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５７を表示装置１５に出力する。この有向グラフ５７によれば、ユーザ定義関数内で利用されている標準関数を表現することができる。そのため、制御プログラム２２１におけるデバイス変数３１間のユーザ定義関数を介した依存関係を当該ユーザ定義関数の内部構造に関連付けて示すことができる。
【０２１９】
なお、図１８Ｃの例では、有向グラフ５７は、上記第６モードと同様に、ローカル変数を表現するノード６７を含むように生成されている。このように、第７モードの表示形態においても、第６モードの表示形態が採用されてもよい。ただし、第７モードの表示形態は、このような例に限定されなくてもよい。第７モードの表示形態において、第６モードの表示形態は省略されてもよい。図１８Ｃにより例示される有向グラフ５７から、ノード６７の表示は省略されてもよい。この場合、入力パラメータ「Ｅｎａｂｌｅ」を表現するノード６４４からブロック６６にエッジ６２が連結される。
【０２２０】
また、この第７モードにおいて、上記第２モード〜第６モードと同様に、有向グラフ５７は、標準関数のインスタンスを表現するブロック（６３、６６）とユーザ定義関数のインスタンスを表現するブロック６４とを異なる形態で示すように生成されてもよい。図１８Ｃの例では、各ブロック（６３、６４、６６）は、上記図１７Ａと同様の形態で示されている。ただし、第７モードにおける関数の各ブロック（６３、６４、６６）を表現する方法は、このような例に限定されなくてもよい。この第７モードにおいても、上記第２モード〜第６モードと同様に、標準関数のインスタンスを表現するブロック（６３、６６）とユーザ定義関数のインスタンスを表現するブロック６４とは同じ形態で示されてもよい。
【０２２１】
また、図１８Ｃの例では、ブロック６３は、上記第５モードと同様の形態で示されており、ブロック６６は、上記第２モード等におけるブロック６３と同様の形態で示されている。ただし、第７モードにおけるブロック６６を表現する方法は、このような例に限定されなくてもよい。ブロック６６も、上記第５モードにおけるブロック６３と同様の形態で示されてよい。
【０２２２】
（８）第８モード
次に、図１８Ｄを用いて、第８モードの有向グラフの一例について説明する。図１８Ｄは、本実施形態に係る解析装置１により生成される第８モードの有向グラフ５８の一例を模式的に例示する。第８モードは、ユーザ定義関数の内部で利用される他のユーザ定義関数を示すモードである。
【０２２３】
上記の例では、制御プログラム２２１は、ユーザ定義関数「Ｍｙ＿ＦＢ」の内部で利用される標準関数「ＳＴＤ＿ＦＢ１」を含んでいる。この標準関数「ＳＴＤ＿ＦＢ１」に代えて、あるいはこの標準関数「ＳＴＤ＿ＦＢ１」と共に、ユーザ定義関数「Ｍｙ＿ＦＢ」の内部において、ユーザ定義関数が利用されてもよい。つまり、制御プログラム２２１における複数の関数は、ユーザ定義関数の内部において、互いに依存関係を有する入力パラメータ及び出力パラメータの間で利用される他のユーザ定義関数を含んでもよい。この場合に、第８モードの有向グラフ５８は、ユーザ定義関数のインスタンスの内部で利用される他のユーザ定義関数のインスタンスを表現するブロック６６１が、ユーザ定義関数のインスタンスを表現するブロック６４内において、互いに依存関係を有する入力パラメータ及び出力パラメータそれぞれを表現するノード（６４４、６４５）間に配置され、かつそれぞれにエッジ６２を介して連結されるように生成される。ブロック６６１は、本発明の「他の第２のブロック」の一例である。
【０２２４】
第８モードは、ユーザ定義関数内で表示する関数の種別が異なる点を除き、上記第７モードと同様である。そのため、制御部１１は、ステップＳ１０８において、上記第７モードと同様の方法により、ユーザ定義関数のインスタンスの内部で利用される他のユーザ定義関数のインスタンスを表現するブロック６６１の配置及びエッジ６２を介してブロック６６１と連結する各ノード（６４４、６４５）を特定することができる。これらの特定結果を利用して、制御部１１は、他のユーザ定義関数のインスタンスを表現するブロック６６１をブロック６４内に配置し、当該他のユーザ定義関数のインスタンスの各パラメータと依存関係を有する各パラメータを表現する各ノード（６４４、６４５）とブロック６６１とをエッジ６２により連結する。これにより、制御部１１は、第８モードの有向グラフ５８を生成することができる。
【０２２５】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５８を表示装置１５に出力する。この有向グラフ５８によれば、ユーザ定義関数内で利用されている他のユーザ定義関数を表現することができる。そのため、制御プログラム２２１におけるデバイス変数３１間のユーザ定義関数を介した依存関係を当該ユーザ定義関数の内部構造に関連付けて示すことができる。
【０２２６】
なお、図１８Ｄの例では、有向グラフ５８は、上記第６モードと同様に、ローカル変数を表現するノード６７を含むように生成されている。このように、第８モードにおいても、第６モードの表示形態が採用されてもよい。ただし、第８モードの表示形態は、このような例に限定されなくてもよい。第８モードの表示形態において、第６モードの表示形態は省略されてもよい。図１８Ｄにより例示される有向グラフ５８から、ノード６７の表示は省略されてもよい。この場合、入力パラメータ「Ｅｎａｂｌｅ」を表現するノード６４４からブロック６６１にエッジ６２が連結される。
【０２２７】
また、上記第７モードと同様に、制御プログラム２２１が、ユーザ定義関数内で利用される標準関数を含む場合、第８モードの表示形態において、第７モードの表示形態を更に採用してもよい。更に、図１８Ｄにより例示されるとおり、第８モードにおいて、上記第２モード〜第７モードと同様に、有向グラフ５７は、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック（６４、６６１）とを異なる形態で示すように生成されてもよい。ただし、第８モードにおける関数の各ブロック（６３、６４、６６１）を表現する方法は、このような例に限定されなくてもよい。第８モードにおいても、上記第２モード〜第７モードと同様に、標準関数のインスタンスを表現するブロック６３とユーザ定義関数のインスタンスを表現するブロック（６４、６６１）とは同じ形態で示されてもよい。
【０２２８】
また、図１８Ｄの例では、ブロック６６１は、上記第５モード〜第８モードにおけるブロック６４とは異なり、上記第２モード〜第４モードにおけるブロック６４と同様の形態で示されている。しかしながら、第８モードにおけるブロック６６１を表現する方法は、このような例に限定されなくてもよい。ブロック６６１も、上記第５モード〜第８モードにおけるブロック６４と同様の形態で、すなわち、他のユーザ定義関数の内部構造が表現された状態で示されてよい。
【０２２９】
（９）第９モード
次に、図１９及び図２０Ａを用いて、第９モードの有向グラフの一例について説明する。図１９は、制御プログラム２２１の変形例である制御プログラム２２１Ａの一例を示す。図２０Ａは、図１９の制御プログラム２２１Ａに対して依存関係を特定した結果に基づいて、本実施形態に係る解析装置１により生成された第９モードの有向グラフ５９１の一例を模式的に例示する。第９モードは、各デバイス変数と制御プログラム内のサブプログラムとの対応関係を示すモードである。
【０２３０】
図１９に例示される制御プログラム２２１Ａは、サブプログラム２２１１を２つのサブプログラム（２２９１、２２９２）に分割した点を除き、上記図７に例示される制御プログラム２２１と同様である。以下の第９モード及び第１０モードの説明では、図１９に例示される制御プログラム２２１Ａに対してステップＳ１０１〜Ｓ１０９の処理が実行されるものと想定する。なお、図１９に例示される制御プログラムを区別して称す場合に「２２１Ａ」と符合し、区別せずに称す場合には「２２１」と符合する。
【０２３１】
図１９に例示される制御プログラム２２１Ａは、３つのサブプログラム２２９１〜２２９３に分割されている。このように、制御プログラム２２１は、複数のサブプログラムに分割されていてよい。この場合に、第９モードの有向グラフ５９１は、各サブプログラムにそれぞれ対応する複数の領域６８１を含み、各ノード６１が、複数の領域６８１のうち、表現するデバイス変数３１を利用するサブプログラムの領域６８１に配置される、ように生成される。
【０２３２】
制御部１１は、ステップＳ１０８において、制御プログラム２２１Ａを構成する各サブプログラム２２９１〜２２９３を特定する。制御プログラム２２１Ａを構成する各サブプログラム２２９１〜２２９３を特定する方法は、特に限定されなくてもよい。例えば、制御部１１は、制御プログラム２２１Ａから直接的に各サブプログラム２２９１〜２２９３を特定してもよい。また、依存性解析の結果として得られる抽出結果データ２２４の各レコードの「ＰＲＯＧＲＡＭ」フィールドには、対応するプログラム部分の所在を示す情報が格納されている。そのため、制御部１１は、抽出結果データ２２４の各レコードの「ＰＲＯＧＲＡＭ」フィールドの値を参照することで、各サブプログラム２２９１〜２２９３を特定してもよい。
【０２３３】
次に、制御部１１は、特定された各サブプログラム２２９１〜２２９３に対応する領域６８１を設定する。続いて、制御部１１は、特定された各サブプログラム２２９１〜２２９３から、各デバイス変数３１を利用するサブプログラムを特定する。図１９の制御プログラム２２１Ａでは、例えば、デバイス変数「Ｄ１」は、サブプログラム２２９１で利用されている。また、例えば、デバイス変数「Ｄ３」は、２つのサブプログラム（２２９１、２２９２）で利用されている。この利用関係は、適宜特定されてよい。例えば、制御部１１は、抽出結果データ２２４の各レコードの「ＰＲＯＧＲＡＭ」フィールドの値を参照することで、各デバイス変数３１を利用するサブプログラムを特定することができる。そして、制御部１１は、各デバイス変数３１を表現する各ノード６１を該当の領域６８１に配置する。有向グラフ５９１の生成処理に関して、その他の点については、上記第１モード〜第８モードまでと同様であってよい。これにより、制御部１１は、第９モードの有向グラフ５９１を生成することができる。
【０２３４】
なお、図２０Ａに例示されるように、有向グラフ５９１は、上記第２モード〜第８モードまでと同様に、関数のインスタンスを表現する各ブロック（６３、６４）を含むように生成されてよい。この場合、制御部１１は、各デバイス変数３１と同様に、関数を利用するサブプログラムを特定する。そして、制御部１１は、関数のインスタンスを表現する各ブロック（６３、６４）を該当の領域６８１に配置する。
【０２３５】
同様に、有向グラフ５９１は、上記第４モードと同様に、他の変数を表現するノード６５を含むように生成されてよい。この場合、制御部１１は、各デバイス変数３１と同様に、他の変数を利用するサブプログラムを特定する。そして、制御部１１は、他の変数を表現するノード６５を該当の領域６８１に配置する。
【０２３６】
また、デバイス変数「Ｄ３」のように、複数のサブプログラムで利用されているデバイス変数が存在する場合、制御部１１は、当該デバイス変数を表現するノード６１をそれぞれの領域６８１に配置してもよい。図２０Ａの例では、デバイス変数「Ｄ３」を表現するノード６１は、サブプログラム「Ｐｒｏｇｒａｍ０」及び「Ｐｒｏｇｒａｍ１」に対応する領域６８１それぞれに配置されている。この場合、図２０Ａに例示されるように、制御部１１は、同じデバイス変数に対応するノード６１同士をエッジ６８４で連結してもよい。これにより、エッジ６８４に連結されたノード６１が同じデバイス変数に対応することを示すことができる。その他の変数及び関数それぞれが複数のサブプログラムで利用されている場合についても同様である。
【０２３７】
更に、図２０Ａに示されるように、有向グラフ５９１は、各ノード６１の付近に、表現する各デバイス変数３１の制御プログラム２２１Ａにおける所在を示すように生成されてもよい。この所在を示す情報は、適宜取得されてよい。例えば、この所在を示す情報は、抽出結果データ２２４の各レコードの「ＰＲＯＧＲＡＭ」フィールドに格納されていてもよい。この場合、制御部１１は、抽出結果データ２２４の各レコードの「ＰＲＯＧＲＡＭ」フィールドを参照することで、各デバイス変数３１の所在を示す情報を取得することができる。また、制御部１１は、各デバイス変数３１の所在を示す情報を制御プログラム２２１Ａから直接的に取得してもよい。そして、制御部１１は、各デバイス変数３１を表現するノード６１付近に取得された所在を示す情報を表示する。制御部１１は、その他の変数及び関数についても同様に取り扱ってよい。図２０Ａの例では、有向グラフ５９１は、各ノード６１、ノード６５、及び各ブロック（６３、６４）付近に、表現する各デバイス変数３１、他の変数、及び関数の制御プログラム２２１Ａにおける所在を示す各所在表記６８３が配置されるように生成されている。
【０２３８】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５９１を表示装置１５に出力する。この有向グラフ５９１によれば、各デバイス変数３１と各サブプログラム２２９１〜２２９３との間の対応関係を示すことができる。そのため、分割プログラミングが行われた場合に、各デバイス２８に対応するデバイス変数３１の制御プログラム２２１Ａにおける所在と各デバイス変数３１間の依存関係とを関連付けて示すことができる。
【０２３９】
なお、図２０Ａに例示される有向グラフ５９１は、関数のインスタンスを表現する各ブロック（６３、６４）を含むように生成されている。ただし、第９モードの有向グラフ５９１は、このような例に限定されなくてもよい。第９モードの有向グラフ５９１において、上記第１モードと同様に、各ブロック（６３、６４）の表示は省略されてよい。
【０２４０】
また、図２０Ａに例示される有向グラフ５９１は、上記第４モードと同様に、他の変数を表現するノード６５を含むように生成されている。ただし、第９モードの有向グラフ５９１は、このような例に限定されなくてもよい。第９モードの有向グラフ５９１において、上記第１モード等と同様に、ノード６５の表示は省略されてよい。
【０２４１】
更に、図２０Ａに例示される有向グラフ５９１は、各所在表記６８３を示すように生成されている。ただし、第９モードの有向グラフ５９１は、このような例に限定されなくてもよい。第９モードの有向グラフ５９１において、各所在表記６８３は省略されてもよい。
【０２４２】
（１０）第１０モード
次に、図２０Ｂを用いて、第１０モードの有向グラフの一例について説明する。図２０Ｂは、図１９の制御プログラム２２１Ａに対して依存関係を特定した結果に基づいて、本実施形態に係る解析装置１により生成された第１０モードの有向グラフ５９２の一例を模式的に例示する。第１０モードは、各デバイス変数とサブプログラム内のセクションとの対応関係を示すモードである。
【０２４３】
上記図１９の例では、制御プログラム２２１Ａのサブプログラム２２９１は、セクション２２９５に分割され、サブプログラム２２９２は、セクション２２９６に分割されている。このように、制御プログラム２２１Ａが、複数のサブプログラムに分割されている場合に、複数のサブプログラムのうちの少なくともいずれかのサブプログラムは、１つ以上のセクションに分割されていてもよい。この場合に、第１０モードの有向グラフ５９２は、１つ以上のセクションに分割されたサブプログラムの領域６８１が、１つ以上のセクションに対応する１つ以上のサブ領域６８２を含み、かつセクションで利用されたデバイス変数３１を表現するノード６１が当該セクションに対応するサブ領域６８２に配置される、ように生成される。
【０２４４】
制御部１１は、ステップＳ１０８において、上記第９モードにおけるサブプログラム２２９１〜２２９３と同様に、各サブプログラム２２９１〜２２９３で利用されているセクション（２２９５、２２９６）を特定し、各セクション（２２９５、２２９６）に対応するサブ領域６８２を該当の領域６８１内に設定する。次に、制御部１１は、上記第９モードにおいて、各サブプログラム２２９１〜２２９３と各デバイス変数３１との間の利用関係を特定した方法と同様に、各セクション（２２９５、２２９６）と各デバイス変数３１との間の利用関係を特定する。そして、制御部１１は、各デバイス変数３１を表現する各ノード６１を該当のサブ領域６８２に配置する。有向グラフ５９２の生成処理に関して、その他の点については、上記第９モードと同様であってよい。これにより、制御部１１は、第１０モードの有向グラフ５９２を生成することができる。
【０２４５】
制御部１１は、ステップＳ１０９において、このように生成された有向グラフ５９２を表示装置１５に出力する。この有向グラフ５９２によれば、各デバイス変数３１と各サブプログラム２２９１〜２２９３の各セクション（２２９５、２２９６）との間の対応関係を示すことができる。そのため、分割プログラミングが行われた場合に、各デバイス２８に対応するデバイス変数３１の制御プログラム２２１Ａにおける所在と各デバイス変数３１間の依存関係とを関連付けてかつより明確に示すことができる。
【０２４６】
なお、図２０Ｂに例示される有向グラフ５９２は、関数のインスタンスを表現する各ブロック（６３、６４）を含むように生成されている。ただし、第１０モードの有向グラフ５９２は、このような例に限定されなくてもよい。第１０モードの有向グラフ５９２において、上記第１モードと同様に、各ブロック（６３、６４）の表示は省略されてよい。
【０２４７】
また、図２０Ｂに例示される有向グラフ５９２は、上記第４モードと同様に、他の変数を表現するノード６５を含むように生成されている。ただし、第１０モードの有向グラフ５９２は、このような例に限定されなくてもよい。第１０モードの有向グラフ５９２において、上記第１モード等と同様に、ノード６５の表示は省略されてよい。
【０２４８】
更に、図２０Ｂに例示される有向グラフ５９２は、上記第９モードと同様に、各所在表記６８３を示すように生成されている。ただし、第１０モードの有向グラフ５９２は、このような例に限定されなくてもよい。第１０モードの有向グラフ５９２において、各所在表記６８３は省略されてもよい。
【０２４９】
（表示制御）
ステップＳ１０９により、制御部１１は、上記第１モード〜第１０モードの有向グラフ（５１〜５４、５４１、５５〜５８、５９１、５９２）のいずれかを表示装置１５に出力する。この際、制御部１１、入力装置１４を介して、出力する有向グラフの形態の指定をユーザから受け付けてもよい。そして、制御部１１は、ユーザの指定に応じて、任意のモードから他のモードに有向グラフの形態を切り替えて表示装置１５に表示させてもよい。
【０２５０】
例えば、制御部１１は、ユーザの指示に応じて、第１モードの有向グラフ５１及び第２モードの有向グラフ５２を表示装置１５に切り替えて表示させてもよい。また、制御部１１は、ユーザの指示に応じて、第２モードの有向グラフ５２及び第３モードの有向グラフ５３を表示装置１５に切り替えて表示させてもよい。この場合、制御部１１は、第２モードの表示形態と第３モードの表示形態とを切り替え可能に有向グラフ（５２、５３）を生成する。更に、制御部１１は、ユーザの指示に応じて、第１モードの有向グラフ５１、第２モードの有向グラフ５２、及び第４モードの有向グラフ（５４、５４１）を表示装置１５に切り替えて表示させてもよい。なお、第４モードの有向グラフ５４では、第３モードの表示形態が採用されている。第４モードの有向グラフ５４１では、第２モードの表示形態が採用されている。第２モード及び第３モードの両方の表示形態を第４モードで採用する場合には、制御部１１は、各表示形態を切り替えて表示装置１５に表示可能に第４モードの有向グラフ（５４、５４１）を生成してもよい。
【０２５１】
また、例えば、制御部１１は、ユーザの指示に応じて、第２モードの有向グラフ５２及び第５モードの有向グラフ５５を表示装置１５に切り替えて表示させてもよい。このケースにおいて、制御部１１は、第２モードの有向グラフ５２に代えて、第３モードの有向グラフ５３又は第４モードの有向グラフ（５４、５４１）を表示装置１５に表示させてもよい。加えて、制御部１１は、ユーザの指示に応じて、第５モード〜第８モードの有向グラフ５５〜５８を表示装置１５に切り替えて表示させてもよい。この場合、制御部１１は、第５モード〜第８モードの表示形態を切り替え可能に有向グラフ５５〜５８を生成する。なお、このケースにおいて、第６モード〜第８モードのいずれかは省略されてよい。
【０２５２】
また、例えば、制御部１１は、ユーザの指示に応じて、第１モードの有向グラフ５１及び第９モードの有向グラフ５９１を表示装置１５に切り替えて表示させてもよい。このケースにおいて、制御部１１は、第１モードの有向グラフ５１に代えて、第２モード〜第８モードの有向グラフ（５２〜５４、５４１、５５〜５８）のいずれかを表示装置１５に表示させてもよい。加えて、制御部１１は、ユーザの指示に応じて、第９モードの有向グラフ５９１及び第１０モードの有向グラフ５９２を表示装置１５に切り替えて表示させてもよい。この場合、制御部１１は、第９モードの表示形態と第１０モードの表示形態とを切り替え可能に有向グラフ（５９１、５９２）を生成する。
【０２５３】
任意のモードから他のモードに変更する場合、制御部１１は、有向グラフ全体の表示を切り替えてもよい。あるいは、制御部１１は、有向グラフの一部の表示を切り替えてもよい。この場合、制御部１１は、有向グラフにおいてモードを変更する部分の指定を受け付けて、指定された部分の表示を切り替えてもよい。一例として、第１モードの有向グラフ５１を表示装置１５に表示させている間に、制御部１１は、モードを変更する部分の指定としてエッジ６２の選択を受け付けてもよい。そして、制御部１１は、選択されたエッジ６２により連結された２つデバイス変数間の依存関係を第２モードで示すように有向グラフの表示を切り替えてもよい。
【０２５４】
なお、上記第２モード〜第１０モードにおいて、「エッジを介して連結すること」は、直接的に依存関係を有する変数及び関数をそれぞれ表現するノード及びブロックを互いに直接的にエッジで連結することを含んでよい。加えて、上記第２モード〜第１０モードにおいて、「エッジを介して連結すること」は、他の変数又は／及び関数が介在し、間接的に依存関係を有する変数及び関数をそれぞれ表現するノード及びブロックを、他の変数又は／及び関数を表現するノード又は／及びブロックを介在させて、それぞれをエッジで連結するケースを含んでよい。
【０２５５】
また、上記第４モード〜第６モードのように、例えば、各ノード（６１、６５、６７、６３４、６３５、６４４、６４５）等の種別の異なる変数を表現する複数のノードを表示する場合、制御部１１は、上記各関数のブロックと同様に、各ノードを異なる形態で示してもよい。例えば、制御部１１は、デバイス変数／その他の変数、外部変数／内部変数、及びローカル変数／グローバル変数のいずれかの種別の相違に応じて、各ノードを異なる形態で示してもよい。各ノードの形態は、例えば、線の種類、色、形状、文字のフォント等の属性により規定されてよい。また、各ノードに対応するシンボルを定義し、定義された各シンボルを各ノードの表示に利用してもよい。
【０２５６】
このように、上記第１モード〜第１０モードの有向グラフ（５１〜５４、５４１、５５〜５８、５９１、５９２）のいずれかを表示装置１５に出力すると、制御部１１は、本動作例に係る処理を終了する。
【０２５７】
［特徴］
以上のとおり、本実施形態に係る解析装置１は、上記ステップＳ１０６（ステップＳ５０８）において、関数構造情報１２１を参照して、標準関数４１の入力パラメータ４３と出力パラメータ４４との間の依存関係を特定する。これにより、本実施形態に係る解析装置１は、上記ステップＳ１０７（ステップＳ５０９）において、標準関数４１を介在する複数のデバイス変数３１間の依存関係を特定することができる。したがって、本実施形態によれば、制御プログラム２２１が標準関数４１を含む場合でも、その制御プログラム２２１から生産ライン２７を構成する複数のデバイス２８間の依存関係を適切に導出することができる。
【０２５８】
§４  変形例
以上、本発明の実施の形態を詳細に説明してきたが、前述までの説明はあらゆる点において本発明の例示に過ぎない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。例えば、以下のような変更が可能である。なお、以下では、上記実施形態と同様の構成要素に関しては同様の符号を用い、上記実施形態と同様の点については、適宜説明を省略した。以下の変形例は適宜組み合わせ可能である。
【０２５９】
＜４．１＞
上記実施形態では、ステップＳ１０８において、制御部１１は、上記第１モード〜第１０モードの有向グラフ（５１〜５４、５４１、５５〜５８、５９１、５９２）を生成する。しかしながら、制御部１１により生成可能な有向グラフは、このような例に限られなくてもよい。例えば、上記第１モード〜第１０モードのうちの少なくともいずれかは省略されてもよい。また、例えば、制御部１１は、上記第１モード〜第１０モードとは異なる形態の有向グラフを生成してもよい。
【０２６０】
また、上記実施形態では、ステップＳ１０９において、制御部１１は、各デバイス変数３１間の依存関係を特定した結果に関する情報として有向グラフ（５１〜５４、５４１、５５〜５８、５９１、５９２）を出力する。しかしながら、各デバイス変数３１間の依存関係を特定した結果に関する情報の形態は、このような有向グラフに限られなくてもよく、実施の形態に応じて適宜選択されてよい。例えば、制御部１１は、各デバイス変数３１間の依存関係を特定した結果を、無向グラフにより示してもよいし、あるいはグラフ以外の表現（例えば、文字表現）により示してもよい。
【０２６１】
また、上記実施形態では、制御部１１は、各デバイス変数３１間の依存関係を特定した結果に関する情報を表示装置１５に出力している。しかしながら、情報の出力先は、このような例に限られなくてもよく、実施の形態に応じて適宜選択されてよい。例えば、制御部１１は、各デバイス変数３１間の依存関係を特定した結果に関する情報を、表示装置１５とは別の表示装置に出力してもよいし、表示装置以外の出力先（例えば、メモリ、表示装置以外の出力装置）に出力してもよい。
【０２６２】
＜４．２＞
上記実施形態では、解析装置１は、ステップＳ１０３において、未定義の標準関数のインスタンスが制御プログラム２２１に含まれているか否かを判定する。そして、未定義の標準関数のインスタンスが制御プログラム２２１に含まれていると判定した場合に、解析装置１は、ステップＳ１０５において、追加の関数構造情報１２３の入力を受け付ける。これらのステップＳ１０３〜ステップＳ１０５の処理は省略されてもよい。この場合、解析装置１のソフトウェア構成において、定義判定部１１３及び定義受付部１１４は省略されてよい。
【０２６３】
＜４．３＞
上記実施形態では、解析装置１は、ステップＳ１０１〜ステップＳ１０７の処理により、制御プログラム２２１から各デバイス変数３１間の依存関係を特定している。そして、解析装置１は、ステップＳ１０８及びステップＳ１０９の処理により、特定結果を示す有向グラフを生成し、生成した有向グラフを表示装置１５に出力している。これらの依存関係を特定する処理及び特定結果を出力する処理の両方を実行する上記解析装置１は、「グラフ表示装置」の一例である。上記プログラム取得部１１１〜関係特定部１１６は、「情報取得部」の一例である。ただし、これらの処理は、必ずしも同一のコンピュータで実行されなくてもよい。すなわち、これらの依存関係を特定する処理及び特定結果を出力する処理は、別々のコンピュータで実行されてよい。この場合に、特定結果を出力する処理を実行するコンピュータを「グラフ表示装置」と称してもよい。
【０２６４】
（ハードウェア構成）
図２１は、本変形例に係るグラフ表示装置７のハードウェア構成の一例を模式的に例示する。図２１に示されるとおり、本変形例に係るグラフ表示装置７は、制御部７１、記憶部７２、通信インタフェース７３、入力装置７４、表示装置７５、及びドライブ７６が電気的に接続されたコンピュータである。なお、図２１では、通信インタフェースを「通信Ｉ／Ｆ」と記載している。
【０２６５】
グラフ表示装置７の制御部７１〜ドライブ７６はそれぞれ、上記解析装置１の制御部１１〜ドライブ１６と同様であってよい。本変形例では、記憶部７２は、グラフ表示プログラム８２等の各種情報を記憶する。グラフ表示プログラム８２は、各デバイス変数３１間の因果関係を特定した結果を示す有向グラフを生成し、生成した有向グラフを表示装置（例えば、表示装置７５）に出力するための情報処理（後述する図２３）をグラフ表示装置７に実行させるためのプログラムである。グラフ表示プログラム８２は、この情報処理の一連の命令を含む。グラフ表示プログラム８２は、記憶媒体９２に記憶されていてもよい。また、グラフ表示装置７は、ドライブ７６を介して記憶媒体９２からグラフ表示プログラム８２を取得してもよい。
【０２６６】
なお、上記解析装置１と同様に、グラフ表示装置７の具体的なハードウェア構成に関して、実施形態に応じて、適宜、構成要素の省略、置換及び追加が可能である。グラフ表示装置７は、複数台のコンピュータで構成されてもよい。この場合、各コンピュータのハードウェア構成は、一致していてもよいし、一致していなくてもよい。また、グラフ表示装置７は、提供されるサービス専用に設計された情報処理装置の他、デスクトップＰＣ、タブレットＰＣ等の汎用の情報処理装置、汎用のサーバ装置等であってもよい。
【０２６７】
（ソフトウェア構成）
図２２は、本変形例に係るグラフ表示装置７のソフトウェア構成の一例を模式的に例示する。グラフ表示装置７の制御部７１は、記憶部７２に記憶されたグラフ表示プログラム８２をＲＡＭに展開する。そして、制御部７１は、ＲＡＭに展開されたグラフ表示プログラム８２をＣＰＵにより解釈及び実行して、各構成要素を制御する。これによって、図２２に示されるとおり、本実施形態に係るグラフ表示装置７は、情報取得部７１１、グラフ生成部７１２、及び表示制御部７１３をソフトウェアモジュールとして備えるコンピュータとして動作する。すなわち、本変形例では、グラフ表示装置７の各ソフトウェアモジュールは、制御部７１（ＣＰＵ）により実現される。
【０２６８】
情報取得部７１１は、制御プログラム２２１から特定された各デバイス変数３１間の依存関係を示す依存関係情報７２１を取得する。情報取得部７１１は、関数における入力パラメータと出力パラメータとの間の依存関係を示す関数情報７２３を更に取得してもよい。依存関係情報７２１及び関数情報７２３は、上記関数構造情報１２１、追加の関数構造情報１２３、抽出結果データ２２４、中間データ２２６、特定結果データ２２７等により構成されてよい。グラフ生成部７１２は、依存関係情報７２１（及び関数情報７２３）に基づいて、上記各モードの有向グラフを生成する。グラフ生成部７１２は、上記グラフ生成部１１７と同様であってよい。表示制御部７１３は、生成された各モードの有向グラフを表示装置（例えば、表示装置７５）に切り替えて表示させる。表示制御部７１３は、上記出力部１１８と同様であってよい。
【０２６９】
グラフ表示装置７の各ソフトウェアモジュールに関しては後述する動作例で詳細に説明する。なお、本実施形態では、グラフ表示装置７の各ソフトウェアモジュールがいずれも汎用のＣＰＵにより実現される例について説明している。しかしながら、以上のソフトウェアモジュールの一部又は全部が、１又は複数の専用のハードウェアプロセッサにより実現されてもよい。また、グラフ表示装置７のソフトウェア構成に関して、実施形態に応じて、適宜、ソフトウェアモジュールの省略、置換及び追加が行われてもよい。
【０２７０】
（動作例）
図２３は、本変形例に係るグラフ表示装置７の処理手順の一例を例示する。以下で説明するグラフ表示装置７の処理手順は、「グラフ表示方法」の一例である。ただし、以下で説明する処理手順は一例に過ぎず、各処理は可能な限り変更されてもよい。また、以下で説明する処理手順について、実施の形態に応じて、適宜、ステップの省略、置換、及び追加が可能である。
【０２７１】
ステップＳ７０１では、制御部７１は、情報取得部７１１として動作し、依存関係情報７２１を取得する。依存関係情報７２１は、制御プログラム２２１から特定された各デバイス変数３１間の依存関係を示す。依存関係情報７２１は、例えば、上記特定結果データ２２７を含むように構成されてよい。また、上記第２モード等の関数を表現するブロックを含む有向グラフを生成する場合、依存関係情報７２１は、関数の各パラメータに対する各デバイス変数３１の依存関係を更に示してもよい。この場合、依存関係情報７２１は、上記抽出結果データ２２４及び中間データ２２６を更に含むように構成されてよい。また、上記第９モード及び第１０モードのように、サブプログラム、セクション等の制御プログラム２２１内の各デバイス変数３１の所在を示す有向グラフを生成する場合、依存関係情報７２１は、抽出結果データ２２４の各レコードの「ＰＲＯＧＲＡＭ」フィールド等のように所在を示す情報を含むように構成されてよい。ただし、依存関係情報７２１の構成は、このような例に限定されなくてもよい。また、依存関係情報７２１のデータ形式は、特に限定されなくてもよく、実施の形態に応じて適宜設定されてよい。
【０２７２】
加えて、上記第５モード〜第８モードのように、関数の内部構造を示す有向グラフを生成する場合、制御部７１は、関数情報７２３を更に取得してもよい。この関数情報７２３は、関数構造情報１２１、追加の関数構造情報１２３、抽出結果データ２２４のユーザ定義関数に関するレコード、ユーザ定義関数の各パラメータに対して依存関係を特定した結果を示すデータ等により構成されてよい。ただし、関数情報７２３の構成は、このような例に限定されなくてもよい。また、関数情報７２３のデータ形式は、特に限定されなくてもよく、実施の形態に応じて適宜設定されてよい。
【０２７３】
依存関係情報７２１及び関数情報７２３は、上記解析装置１等の、各デバイス変数３１間の依存関係を特定するように構成された他の情報処理装置により生成されてよい。制御部７１は、例えば、ネットワーク、記憶媒体９２等を介して、当該他の情報処理装置から依存関係情報７２１及び関数情報７２３を取得してもよい。また、依存関係情報７２１及び関数情報７２３は、ＮＡＳ（Network Attached Storage）等の外部記憶装置に記憶されていてもよい。この場合、制御部７１は、依存関係情報７２１及び関数情報７２３を外部記憶装置から取得してもよい。また、依存関係情報７２１及び関数情報７２３は、予め記憶部７２に記憶されていてもよい。この場合、制御部７１は、依存関係情報７２１及び関数情報７２３を記憶部７２から取得してもよい。依存関係情報７２１及び関数情報７２３を取得する方法は、特に限定されなくてもよく、実施の形態に応じて適宜選択されてよい。依存関係情報７２１（及び関数情報７２３）を取得すると、制御部７１は、次のステップＳ７０２に処理を進める。
【０２７４】
ステップＳ７０２では、制御部７１は、依存関係情報７２１（及び関数情報７２３）に基づいて、上記各モードの有向グラフ（５１〜５４、５４１、５５〜５８、５９１、５９２）を生成する。ステップＳ７０２の処理は、上記ステップＳ１０８の処理と同様であってよい。ステップＳ７０３では、制御部７１は、生成された各モードの有向グラフ（５１〜５４、５４１、５５〜５８、５９１、５９２）を表示装置に切り替えて表示させる。出力先は、表示装置７５であってもよいし、その他の表示装置（例えば、他の情報処理装置の表示装置）であってもよい。ステップＳ７０３の処理は、上記ステップＳ１０９の処理と同様であってよい。当該出力処理が完了すると、制御部７１は、本変形例に係る処理を終了する。本変形例によれば、各デバイス変数３１間の依存関係を特定する処理を実行するコンピュータと特定結果を出力する処理を実行するコンピュータとを別々に構成することができる。
【０２７５】
＜４．４＞
上記実施形態では、解析装置１及びＰＬＣ２は別々のコンピュータにより構成されている。しかしながら、本発明が適用可能なシステムの構成は、このような例に限定されなくてもよい。解析装置１及びＰＬＣ２は一体のコンピュータにより構成されてよい。
【０２７６】
図２４は、本変形例に係る制御装置１Ａの適用場面を模式的に例示する。本変形例に係る制御装置１Ａは、上記実施形態に係る解析装置１及びＰＬＣ２の両方の役割を果たすように構成されたコンピュータである。この制御装置１Ａのハードウェア構成は、上記解析装置１のハードウェア構成にＰＬＣ２の入出力インタフェース２３を追加することで得られてよい。また、各デバイス２８間の依存関係を特定する処理に関して、制御装置１Ａのソフトウェア構成は、上記解析装置１のソフトウェア構成と同様であってよい。このように、生産ライン２７の動作を制御する装置（ＰＬＣ等）に本発明が適用されてよい。
【符号の説明】
【０２７７】
１…解析装置、
１１…制御部、１２…記憶部、１３…通信インタフェース、
１４…入力装置、１５…表示装置、１６…ドライブ、
１１１…プログラム取得部、１１２…プログラム解析部、
１１３…定義判定部、１１４…定義受付部、
１１５…定義付与部、１１６…関係特定部、
１１７…グラフ生成部、１１８…出力部、
１２１…関数構造情報、１２３…追加の関数構造情報、
８１…解析プログラム、９１…記憶媒体、
２…ＰＬＣ、
２１…制御部、２２…記憶部、２３…通信インタフェース、
２４…入出力インタフェース、
２７…生産ライン、２８…デバイス、
３１…デバイス変数、
４１…標準関数、
４３…入力パラメータ、４４…出力パラメータ、
２２１…制御プログラム、
２２１１・２２１２…サブプログラム、
２２２…抽象構文木、２２３…制御フローグラフ、
２２４…抽出結果データ、
２２６…中間データ、２２７…特定結果データ、
５１〜５８・５４１・５９１・５９２…有向グラフ、
６１…ノード、
６２…エッジ、
６３・６４…ブロック、
６３１…（入力パラメータの名称の）表記、
６３２…（出力パラメータの名称の）表記、
６３４・６３５…ノード、
６４１…（入力パラメータの名称の）表記、
６４２…（出力パラメータの名称の）表記、
６４４・６４５…ノード、
６５…ノード、
６６…ブロック、６７…ノード、
６８１…領域、６８２…サブ領域、
６８３…所在表記、６８４…エッジ、
７…グラフ表示装置、
７１…制御部、７２…記憶部、７３…通信インタフェース、
７４…入力装置、７５…表示装置、７６…ドライブ、
７１１…情報取得部、７１２…グラフ生成部、
７１３…表示制御部、
７２１…依存関係情報、７２３…関数情報、
８２…グラフ表示プログラム、９２…記憶媒体
【図１】
2020149302.tif 000003
【図２】
2020149302.tif 000004
【図３】
2020149302.tif 000005
【図４】
2020149302.tif 000006
【図５Ａ】
2020149302.tif 000007
【図５Ｂ】
2020149302.tif 000008
【図６】
2020149302.tif 000009
【図７】
2020149302.tif 000010
【図８】
2020149302.tif 000011
【図９】
2020149302.tif 000012
【図１０Ａ】
2020149302.tif 000013
【図１０Ｂ】
2020149302.tif 000014
【図１１Ａ】
2020149302.tif 000015
【図１１Ｂ】
2020149302.tif 000016
【図１２】
2020149302.tif 000017
【図１３Ａ】
2020149302.tif 000018
【図１３Ｂ】
2020149302.tif 000019
【図１４Ａ】
2020149302.tif 000020
【図１４Ｂ】
2020149302.tif 000021
【図１５】
2020149302.tif 000022
【図１６】
2020149302.tif 000023
【図１７Ａ】
2020149302.tif 000024
【図１７Ｂ】
2020149302.tif 000025
【図１７Ｃ】
2020149302.tif 000026
【図１７Ｄ】
2020149302.tif 000027
【図１８Ａ】
2020149302.tif 000028
【図１８Ｂ】
2020149302.tif 000029
【図１８Ｃ】
2020149302.tif 000030
【図１８Ｄ】
2020149302.tif 000031
【図１９】
2020149302.tif 000032
【図２０Ａ】
2020149302.tif 000033
【図２０Ｂ】
2020149302.tif 000034
【図２１】
2020149302.tif 000035
【図２２】
2020149302.tif 000036
【図２３】
2020149302.tif 000037
【図２４】
2020149302.tif 000038