(57)【特許請求の範囲】
【請求項１】
ラダーダイアグラムで記載され、プログラマブルロジックコントローラにリレー回路の機能を実現させるプログラム内の変数の依存関係を解析する解析装置であって、
前記プログラムは、第１プログラムと、前記第１プログラムの実行中に前記第１プログラムの実行を中断して割り込み処理を実行する第２プログラムとを含み、
前記第１プログラム内の前記変数の依存関係である第１依存関係と、前記第２プログラム内の前記変数の依存関係である第２依存関係とを抽出する第１抽出手段と、
設定された条件に従って前記第１プログラムを少なくとも２つのブロックに分割する分割手段と、
前記第１プログラムの前記ブロック内で割り込みが発生した場合の、前記第２プログラム内の前記変数と前記第１プログラム内の前記変数との依存関係を、前記第２依存関係に追加して、第３依存関係を抽出する第２抽出手段と、
前記第１依存関係と前記第３依存関係とを統合して、統合依存関係を示す情報である統合依存関係情報を生成する統合手段と、
前記統合依存関係情報を表示する表示手段と、
を含む解析装置。
【請求項２】
前記分割手段は、
前記第１プログラム内の出力コイルに対応する命令から、前記第２プログラム内の入力接点に対応する命令に影響を与える前記出力コイルに対応する命令を探索し、該当する前記出力コイルに対応する命令の直前で、前記第１プログラムを区切ることにより、前記第１プログラムを前記ブロックに分割し、
前記第１プログラム内の前記入力接点に対応する命令から、前記第２プログラム内の前記出力コイルに対応する命令から影響を受ける前記入力接点に対応する命令を探索し、該当する前記入力接点に対応する命令の直前で、前記第１プログラムを区切ることにより、前記ブロックをさらに分割する、
請求項１に記載の解析装置。
【請求項３】
前記第１抽出手段は、前記第１依存関係を表す第１グラフと、前記第２依存関係を表す第２グラフとを生成し、
前記第１グラフは、前記第１プログラム内における、前記変数をノード、前記変数の間の依存関係をエッジとしたグラフであり、
前記第２グラフは、前記第２プログラム内における、前記変数を前記ノード、前記変数の間の依存関係を前記エッジとしたグラフである、
請求項２に記載の解析装置。
【請求項４】
前記第１抽出手段は、
前記第１プログラム内における、前記出力コイルに対応する命令の対象である前記変数を表す前記ノードと、その前記出力コイルに対応する命令に影響を与える前記入力接点に対応する命令の対象である前記変数を表す前記ノードと、が接続されている前記第１グラフを生成する、
請求項３に記載の解析装置。
【請求項５】
前記第１抽出手段は、前記第１プログラム内における、前記入力接点に対応する命令の対象である前記変数を表す前記ノードと、前記入力接点に影響を与える前記出力コイルに対応する命令の対象である前記変数を表す前記ノードと、が接続されている前記第１グラフを生成する、
請求項４に記載の解析装置。
【請求項６】
前記分割手段は、前記第１グラフ内の前記第１プログラム内の前記入力接点及び前記出力コイルに対応する命令の対象である前記変数を表す前記ノードに、前記入力接点及び前記出力コイルが配置されている前記ブロックを特定する情報を付加する、
請求項５に記載の解析装置。
【請求項７】
前記第１抽出手段は、前記第２プログラム内における、前記出力コイルに対応する命令の対象である前記変数を表す前記ノードと、その前記出力コイルに対応する命令に影響を与える前記入力接点に対応する命令の対象である前記変数を表す前記ノードと、が接続されている前記第２グラフを生成する、
請求項３から６のいずれか１項に記載の解析装置。
【請求項８】
前記第１抽出手段は、前記第２プログラム内における、前記入力接点に対応する命令の対象である前記変数を表す前記ノードと、前記入力接点に影響を与える前記出力コイルに対応する命令の対象である前記変数を表す前記ノードと、が接続されている前記第２グラフを生成する、
請求項７に記載の解析装置。
【請求項９】
前記第２抽出手段は、
前記第１プログラムの前記ブロック内で割り込みが発生した場合において、前記第１プログラム内の前記入力接点または前記出力コイルに対応する命令のうち、前記第２プログラム内の前記入力接点に対応する命令に影響を与える前記第１プログラム内の前記入力接点または前記出力コイルに対応する命令を探索し、該当する命令の対象である前記変数を表す前記ノードを、前記第２プログラム内の前記入力接点に対応する命令の対象である前記変数を表す前記第２グラフの前記ノードに接続して、前記第３依存関係を表す第３グラフを生成する、
請求項３から８のいずれか１項に記載の解析装置。
【請求項１０】
前記第２抽出手段は、
前記第３グラフを生成する際に、前記第１プログラム内の該当する命令の対象である前記変数を表すノードと、前記第２プログラム内の前記入力接点に対応する命令の対象である前記変数を表す前記第２グラフの前記ノードとを接続する際に、割り込みが発生した前記ブロックを特定する情報を、前記第１プログラム内の該当する命令の対象である前記変数を表すノードに付加する、
請求項９に記載の解析装置。
【請求項１１】
前記第２抽出手段は、前記第１プログラム内の前記入力接点に対応する命令のうち、前記第２プログラム内の出力コイルに対応する命令から影響を受ける命令の対象である前記変数を表す前記第１グラフの前記ノードに、前記第２グラフを連結して、前記統合依存関係を表す統合グラフを生成する、
請求項９または１０に記載の解析装置。
【請求項１２】
前記表示手段は、前記統合グラフを表す図と前記第１プログラムを表す図とを併せて表示する、
請求項１１に記載の解析装置。
【請求項１３】
前記表示手段は、前記第１プログラムを表す図に前記ブロックの境界を示す境界線を付加した図を表示する、
請求項１２に記載の解析装置。
【請求項１４】
前記表示手段は、前記分割手段が前記第１グラフ内の前記ノードに付加した前記ブロックを特定する情報に基づいて、前記第１グラフ内の前記ノードに対応する前記統合グラフ内の前記ノードに前記ブロックを特定する情報を併せて表示する、
請求項１２または１３に記載の解析装置。
【請求項１５】
前記表示手段は、前記第２抽出手段が前記第３グラフ内の前記ノードに付加した前記ブロックを特定する情報に基づいて、前記第３グラフ内の前記ノードに対応する前記統合グラフ内の前記ノードに前記ブロックを特定する情報を併せて表示する、
請求項１２から１４のいずれか１項に記載の解析装置。
【請求項１６】
ラダーダイアグラムで記載され、プログラマブルロジックコントローラにリレー回路の機能を実現させるプログラム内の変数の依存関係をコンピュータが解析する方法であって、
前記プログラムは、第１プログラムと、前記第１プログラムの実行中に前記第１プログラムの実行を中断して割り込み処理を実行する第２プログラムとを含み、
前記第１プログラム内の前記変数の依存関係である第１依存関係を抽出するステップと、
前記第２プログラム内の前記変数の依存関係である第２依存関係を抽出するステップと、
設定された条件に従って前記第１プログラムを少なくとも２つのブロックに分割するステップと、
前記第１プログラムの前記ブロック内で割り込みが発生した場合の、前記第２プログラム内の前記変数と前記第１プログラム内の前記変数との依存関係を、前記第２依存関係に追加して、第３依存関係を抽出するステップと、
前記第１依存関係と前記第３依存関係とを統合し、統合依存関係を示す情報である統合依存関係情報を生成するステップと、
前記統合依存関係情報を表示するステップと、
を含む方法。
【請求項１７】
ラダーダイアグラムで記載され、プログラマブルロジックコントローラにリレー回路の機能を実現させるプログラム内の変数の依存関係を解析するため、コンピュータが実行するプログラムであって、
前記プログラムは、第１プログラムと、前記第１プログラムの実行中に前記第１プログラムの実行を中断して割り込み処理を実行する第２プログラムとを含み、
前記コンピュータに、
前記第１プログラム内の前記変数の依存関係である第１依存関係を抽出させ、
前記第２プログラム内の前記変数の依存関係である第２依存関係を抽出させ、
設定された条件に従って前記第１プログラムを少なくとも２つのブロックに分割させ、
前記第１プログラムの前記ブロック内で割り込みが発生した場合の、前記第２プログラム内の前記変数と前記第１プログラム内の前記変数との依存関係を、前記第２依存関係に追加して、第３依存関係を抽出させ、
前記第１依存関係と前記第３依存関係とを統合して、統合依存関係を示す情報である統合依存関係情報を生成させ、
前記統合依存関係情報を表示させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析装置、方法、及びプログラムに関する。
【背景技術】
【０００２】
生産システム、制御システム等において稼動するプログラマブルロジックコントローラは、制御プログラムを実行することにより、制御対象の機器を制御する。制御プログラムは、論理回路を記述するための言語であるラダーダイアグラムで記載されることがある。【０００３】
プログラムの作成にはデバッグが欠かせないが、例えば、特許文献１には、ラダーダイアグラムで記載されたプログラムを効率的にデバッグするため、プログラム中の変数の依存関係を解析し、依存関係を示すグラフを表示するプログラム解析支援装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第５１３８０９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、プログラム実行中に割り込みが発生する場合、特許文献１に記載された方法ではプログラム中の変数の依存関係を抽出することができない。例えば、メインプログラムを実行中に、決められた条件が成立すると割り込みが発生するとする。割り込みが発生すると、メインプログラムの実行が中断され、割り込みプログラムが実行される。メインプログラムと割り込みプログラムとは、例えば、関連した処理を行うものであって、同じメモリ領域の値を使用するものであるとする。【０００６】
割り込みが発生し、割り込みプログラムが実行されることにより、メモリ領域のある値が書き換えられた場合、再び、メインプログラムの実行が再開されたときに、メインプログラムの処理が、メモリ領域のある値が書き換えられていない場合と異なることがある。特許文献１に記載された方法では、割り込み処理について考慮しておらず、複数のプログラム中の変数の依存関係を解析することができない。【０００７】
本発明は上記実情に鑑みてなされたものであり、割り込みが発生するプログラム中の変数の依存関係を解析することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明に係る解析装置は、ラダーダイアグラムで記載され、プログラマブルロジックコントローラにリレー回路の機能を実現させるプログラム内の変数の依存関係を解析する。プログラムは、第１プログラムと、第１プログラムの実行中に第１プログラムの実行を中断して割り込み処理を実行する第２プログラムとを含む。第１抽出手段は、第１プログラム内の変数の依存関係である第１依存関係と、第２プログラム内の変数の依存関係である第２依存関係を抽出する。分割手段は、設定された条件に従って第１プログラムを少なくとも２つのブロックに分割する。第２抽出手段は、第１プログラムのブロック内で割り込みが発生した場合の、第２プログラム内の変数と第１プログラム内の変数との依存関係を、第２依存関係に追加して、第３依存関係を抽出する。統合手段は、第１依存関係と第３依存関係とを統合して、統合依存関係を示す情報である統合依存関係情報を生成する。表示手段は、統合依存関係情報を表示する。
【発明の効果】
【０００９】
本発明に係る解析装置は、第１プログラム内の変数の依存関係である第１依存関係と、割り込み処理を実行する第２プログラム内の変数の依存関係である第２依存関係を抽出する。解析装置は、第１プログラムのブロック内で割り込みが発生した場合の、第２プログラム内の変数と第１プログラム内の変数との依存関係を、第２依存関係に追加して、第３依存関係を抽出する。解析装置は、第１依存関係と第３依存関係とを統合して、統合依存関係を示す情報である統合依存関係情報を生成する。このような構成を備えることで、割り込みが発生するプログラム中の変数の依存関係を解析することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施の形態に係る解析装置の機能構成を示すブロック図
【図２Ａ】実施の形態に係るメインプログラムの一例を示す図
【図２Ｂ】実施の形態に係る割り込みプログラムの一例を示す図
【図３】実施の形態に係る解析装置のハードウェア構成を示す図
【図４】メインプログラム中で使用される変数の依存関係を示す図
【図５】割り込みプログラム中で使用される変数の依存関係を示す図
【図６】メインプログラムをブロックに分割した様子を示す図
【図７】メインプログラムの変数の依存関係を示すグラフにブロックの情報を付加した図
【図８】メインブロックをサブブロックに分割した様子を示す図
【図９Ａ】ブロックＡにおいて割り込みが発生した場合の、割り込みプログラム中で使用される変数と、メインプログラム中で使用されるデバイスを示す変数との依存関係を示す図
【図９Ｂ】さらにブロックＢにおいて割り込みが発生した場合の、割り込みプログラム中で使用される変数と、メインプログラム中で使用される変数との依存関係を示す図
【図９Ｃ】さらにブロックＣにおいて割り込みが発生した場合の、割り込みプログラム中で使用される変数と、メインプログラム中で使用される変数との依存関係を示す図
【図１０】割り込みが発生した場合の、メインプログラムの変数と割り込みプログラムの変数との依存関係を示す図
【図１１】割り込みが発生した場合の、メインプログラムの変数と割り込みプログラムの変数との依存関係を示す統合グラフを表示する画面の一例を示す図
【図１２Ａ】割り込み発生位置が指定された場合において、メインプログラムの変数と割り込みプログラムの変数との依存関係を示す統合グラフを表示する画面の例を示す図
【図１２Ｂ】割り込み発生位置が指定された場合において、メインプログラムの変数と割り込みプログラムの変数との依存関係を示す統合グラフを表示する画面の他の例を示す図
【図１３】解析処理の流れを示すシーケンスチャート
【図１４】メインプログラムに割り込み禁止区間を設定した例を示す図
【図１５】割り込み禁止区間が設定されている場合の、統合グラフを表示する画面の一例を示す図
【発明を実施するための形態】
【００１１】
（実施の形態）
以下、本発明の実施の形態に係る解析装置について、図面を参照しつつ詳細に説明する。
【００１２】
図１に示す解析装置１００は、プログラマブルロジックコントローラが実行する制御プログラムを解析する。
【００１３】
プログラマブルロジックコントローラは、制御プログラムを実行して、制御対象の機器のオン／オフを制御する制御装置である。具体的には、プログラマブルロジックコントローラは、センサ、スイッチ等から入力されたオン／オフ信号（以下、入力信号）が示す「真」または「偽」の論理値を使用して、プログラムされている演算を実行する。プログラマブルロジックコントローラは、演算により得られた「真」または「偽」の論理値が示すオン／オフ信号（以下、出力信号）を接触器、モータ等の制御対象の機器に出力する。よって、制御対象の機器のオン／オフが制御される。このように、プログラマブルロジックコントローラが実行する制御プログラムはリレー回路の機能を実現するプログラムである。制御プログラムは、例えば、プログラマブルロジックコントローラの管理者が作成する。
【００１４】
制御プログラムは、ラダーダイアグラムで記載されることがある。ラダーダイアグラムは論理回路を記述するための言語であり、ラダーロジックと呼ばれることもある。ラダーダイアグラムで記載されたプログラムをラダープログラムあるいはラダーロジックプログラムと称することがある。
【００１５】
実施の形態において、解析装置１００の解析対象は、ラダーダイアグラムで記載され、割り込みが発生する制御プログラムである。図２Ａ及び２Ｂに、ラダーダイアグラムで記載された制御プログラムの一例を示す。図２Ａは、メインプログラムＰ１であり、図２Ｂは、割り込みプログラムＰ２である。
【００１６】
プログラマブルロジックコントローラは、設定された周期が示すタイミングでメインプログラムＰ１の実行を開始し、プログラムの最後の命令であるＥＮＤ命令を実行した後、メインプログラムＰ１の実行を終了する。次の周期で、プログラマブルロジックコントローラは再びメインプログラムＰ１の実行を開始する。
【００１７】
さらに、プログラマブルロジックコントローラは、割り込みプログラムＰ２の実行条件として予め設定された条件が満たされた場合に、割り込みプログラムＰ２を実行する。例えば、プログラマブルロジックコントローラの特定のメモリ領域に決められた値が書き込まれると、プログラマブルロジックコントローラは割り込みプログラムＰ２を実行する。割り込みプログラムＰ２が実行されると、メインプログラムＰ１の処理は一旦中断される。割り込みプログラムＰ２の一連の処理が終了すると、再度メインプログラムＰ１の処理が再開される。
【００１８】
割り込みプログラムＰ２が実行されるタイミングは不定であるため、メインプログラムＰ１の実行中の割り込みの発生を予測することは難しい。このため、解析装置１００は、メインプログラムＰ１をいくつかのブロックに分割し、割り込みが発生する位置をブロック単位で予測した場合のプログラム中の変数の依存関係を抽出する。メインプログラムＰ１は、本発明の第１プログラムの一例である。割り込みプログラムＰ２は、本発明の第２プログラムの一例である。
【００１９】
以下、図２Ａ、図２Ｂを参照しながら、メインプログラムＰ１において実行される命令と割り込みプログラムＰ２において実行される命令との例を説明する。ラダーロジックダイアグラムで記載されたプログラムは、リレー回路を論理的に記述したものであるので、以下の説明においては、リレー回路と同様の呼称を使用することがある。
【００２０】
メインプログラムＰ１及び割り込みプログラムＰ２の実行の際には、デバイスメモリと呼ばれる記憶領域に格納されている値が使用される。デバイスメモリには、例えば、センサ、スイッチ等から供給される入力信号を示す「真」または「偽」の論理値が格納される。以下、デバイスメモリを単にデバイスということがある。
【００２１】
センサ、スイッチ等から供給される入力信号は、例えば、デバイスメモリの「Ｘ」の領域に格納される。符号に付された番号は、デバイスメモリの「Ｘ」の領域におけるアドレスに相当する。
【００２２】
また、メインプログラムＰ１及び割り込みプログラムＰ２の実行の際には、内部リレーが示す論理値が使用されることもある。内部リレーは、プログラム上での仮想的なリレーである。内部リレーが示す論理値は、例えば、デバイスメモリの「Ｍ」の領域に格納される。符号に付された番号は、デバイスメモリの「Ｍ」の領域におけるアドレスに相当する。なお、内部リレーを補助リレーと称することもある。
【００２３】
プログラマブルロジックコントローラが、接触器、モータ等の制御対象の機器のオン／オフを制御するために、入力された信号を使用した演算を実行して出力した「真」または「偽」の論理値も、デバイスメモリに格納される。プログラマブルロジックコントローラが出力した論理値は、例えば、デバイスメモリの「Ｙ」の領域に格納される。符号に付された番号は、デバイスメモリの「Ｙ」の領域におけるアドレスに相当する。例えば、メインプログラムＰ１において「Ｙ０」と記載している出力コイルに対応する命令の対象であるデバイスを示す変数に「真」がセットされると、「Ｙ０」に対応する機器へオン信号が供給される。
【００２４】
メインプログラムＰ１及び割り込みプログラムＰ２において、入力接点に対応する命令の対象であるデバイスの値が「真」であるときに、その入力接点がオンするものとする。入力接点がオンすると、出力コイルに対応する命令の対象であるデバイスを示す変数に「真」の値が保持されるものとする。
【００２５】
例えば、入力接点に「Ｍ２」と記載されている場合、デバイスメモリの「Ｍ２」の領域に格納されている値が「真」であるときに、その入力接点がオンする。よって、その入力接点に接続されている出力コイルに対応する命令の対象であるデバイスを示す変数に「真」の値が保持されるものとする。以下、入力接点を単に接点と呼ぶことがある。出力コイルを単にコイルと呼ぶことがある。
【００２６】
図２Ａ〜２Ｂにおいて、紙面に向かって左側の縦の線の横に括弧書きで記載している番号は、命令の実行順序を示すステップ番号である。
【００２７】
プログラマブルロジックコントローラは、設定された周期でメインプログラムＰ１の実行を開始し、ＳＴ１から、一番上の行から下に向かって命令を順次実行する。各行において、入力接点がオンしない場合には、その行の命令は実行されない。ラダーダイアグラムで記載されたプログラムにおいては、すべてのステップ番号が記載されていないため、図２Ａには、各命令の実行順序を表す符号を追記している。以下、図２Ａ、図２Ｂに追記した符号を使用して説明する。メインプログラムＰ１の命令はＳＴ１、ＳＴ２、…、ＳＴ２２の順で実行される。同様に、図２Ｂには、各命令の実行順序を表す符号を追記している。割り込みプログラムＰ２の命令は、ＳＴ５１、ＳＴ５２、…、ＳＴ５９の順で実行される。
【００２８】
図２Ａに示すメインプログラムＰ１を実行することにより実現されるリレー回路の動作の一部を説明する。まず、ＳＴ１の命令が実行される。ＳＴ１の命令の実行により、デバイスＸ１の値がロードされる。即ち、デバイスＸ１の値が読み出される。デバイスＸ１の値が「真」である場合、ＳＴ１の入力接点がオンしたことになり、ＳＴ２の命令が実行される。ＳＴ２の命令の実行により、デバイスＭ１１に「真」が保持される。次に、ＳＴ３の命令が実行される。ＳＴ３の命令の実行により、デバイスＭ２の値がロードされる。デバイスＭ２の値が「真」である場合、ＳＴ３の入力接点がオンしたことになり、ＳＴ４の命令が実行される。ＳＴ４の命令の実行により、デバイスＭ３０に「真」が保持される。このように、一番上の行から下に向かって命令が順次実行される。図２Ｂに示す割り込みプログラムＰ２の実行も同様である。
【００２９】
図２Ａ、２Ｂに示すように、メインプログラムＰ１で使用されている内部リレーは、割り込みプログラムＰ２においても使用されている。メインプログラムＰ１中のどの命令を実行しているときに割り込みが発生するかは不定である。割り込みプログラムＰ２の実行により、内部リレーを示す変数の値が更新されるため、割り込みが終了し、再び、メインプログラムＰ１の実行が再開された場合、メインプログラムＰ１の入力接点のオン／オフが異なることがある。また、メインプログラムＰ１中のどの命令を実行しているときに、割り込みプログラムＰ２が実行されるかは不定である。このため、割り込みが発生する直前の内部リレーを示す変数の値が異なることになり、割り込みプログラムＰ２を実行する際に割り込みプログラムＰ２の入力接点のオン／オフが異なることがある。このように、メインプログラムＰ１と割り込みプログラムＰ２との間には、内部リレーを示す変数の依存関係が存在する。
【００３０】
具体的な例を説明する。図２Ｂに示すように、割り込みプログラムＰ２のＳＴ５３の命令の実行により、デバイスＭ２２の値がロードされる。デバイスＭ２２の値が「真」である場合、ＳＴ５３のＭ２２の入力接点がオンしたことになり、ＳＴ５４の命令が実行される。ＳＴ５４の命令の実行により、Ｍ２のデバイスを示す変数に「真」の値が保持される。ここで、図２Ａに示すメインプログラムＰ１のＳＴ３では、デバイスＭ２の値に応じて入力接点がオンまたはオフする。メインプログラムＰ１のＳＴ３の命令の実行前に、割り込みプログラムＰ２が実行されるか否かに応じて、メインプログラムＰ１のＳＴ４で、Ｍ３０の出力コイルに保持される値が異なる場合がある。
【００３１】
また、図２Ａに示すように、メインプログラムＰ１のＳＴ５の命令の実行により、デバイスＸ２の値がロードされる。デバイスＸ２の値が「真」である場合、Ｘ２の入力接点がオンしたことになり、ＳＴ６の命令が実行される。ＳＴ６の命令の実行により、デバイスＭ２２を示す変数に「真」が保持される。一方、Ｘ２の入力接点がオフの場合、Ｍ２２を示す変数には「真」の値が保持されない。ここで、図２Ｂを参照する。割り込みプログラムＰ２のＳＴ５３では、デバイスＭ２２の値に応じて、Ｍ２２の入力接点は、オンまたはオフする。割り込みプログラムＰ２のＳＴ５３の実行前に、メインプログラムＰ１のＳＴ６が実行されるか否かに応じて、割り込みプログラムＰ２のＳＴ５４で、Ｍ２の出力コイルに保持される値が異なる場合がある。以上説明したように、メインプログラムＰ１と割り込みプログラムＰ２との間では、内部リレーを示す変数の依存関係が存在する。
【００３２】
上記の実情を鑑みて、実施の形態に特徴的な構成として、解析装置１００は割り込みが発生するプログラムにおける変数の依存関係を抽出する。
【００３３】
解析装置１００は、例えば、解析用のプログラムをインストールしたパーソナルコンピュータである。図３に示すように、解析装置１００は、ハードウェア構成として、各種のプログラム及びデータを記憶するメモリ１１と、ユーザの入力操作を検出する入力装置１２と、画像を出力する表示装置１３と、解析装置１００全体を制御するＣＰＵ（Central Processing Unit）１４とを有する。メモリ１１と入力装置１２と表示装置１３とＣＰＵ１４とはバス１９を介してＣＰＵ１４に接続されており、それぞれＣＰＵ１４と通信する。
【００３４】
メモリ１１は、揮発性メモリと不揮発性メモリとを含む。メモリ１１は、解析装置１００の各種機能を実現するためのプログラムを格納する。具体的には、メモリ１１は、解析プログラム１１１を記憶する。解析プログラム１１１は、プログラムを解析する機能をＣＰＵ１４に実現させるためのプログラムである。メモリ１１は、解析対象のメインプログラムＰ１及び割り込みプログラムＰ２を記憶する。さらに、メモリ１１はＣＰＵ１４のワークメモリとして用いられる。
【００３５】
入力装置１２は、マウス、操作キー等を含み、ユーザからの操作入力を受け付け、ユーザの操作入力を示す信号をＣＰＵ１４に出力する。表示装置１３は、ディスプレイを含み、ＣＰＵ１４から供給される信号に基づく画像をディスプレイに表示する。
【００３６】
ＣＰＵ１４は、メモリ１１に記憶されている各種プログラムを実行して、解析装置１００の各種機能を実現する。具体的には、ＣＰＵ１４は、解析プログラム１１１を実行することにより、ラダーダイアグラムで記載された制御プログラムを解析する。
【００３７】
続いて、図１を参照して、解析装置１００の機能構成を説明する。解析装置１００は、機能的には、メインプログラムＰ１の出力コイルと入力接点との依存関係を抽出する第１抽出部１１０と、メインプログラムＰ１を２以上のブロックに分割する分割部１２０と、割り込み発生位置に応じた、割り込みプログラムＰ２の変数とメインプログラムＰ１の変数との依存関係を抽出する第２抽出部１３０と、第１抽出部１１０が抽出した依存関係と第２抽出部１３０が抽出した依存関係とを統合する統合部１４０と、統合された依存関係を示す情報を表示出力する表示部１５０とを含む。
【００３８】
第１抽出部１１０は、本発明の第１抽出手段の一例である。分割部１２０は、本発明の分割手段の一例である。第２抽出部１３０は、本発明の第２抽出手段の一例である。統合部１４０は、本発明の統合手段の一例である。表示部１５０は、本発明の表示手段の一例である。図３に示すＣＰＵ１４は、解析プログラム１１１を実行することにより、第１抽出部１１０、分割部１２０、第２抽出部１３０、統合部１４０、表示部１５０として機能する。
【００３９】
図１に示す第１抽出部１１０は、メインプログラムＰ１のデバイスを示す変数の依存関係を抽出する。第１抽出部１１０は、選択された出力コイルに対応する命令の対象であるデバイスを示す変数を起点として依存関係を抽出する。例えば、ユーザが図２Ａの示すメインプログラムＰ１のＳＴ２２で実行される出力コイルＹ０を選択したと仮定する。第１抽出部１１０は、メインプログラムＰ１のデバイスを示す変数の依存関係を、特許文献１に記載されている方法を採用して抽出する。
【００４０】
第１抽出部１１０は、メインプログラムＰ１内の命令を下から上へ向かって順に追っていき、メインプログラムＰ１のデバイスを示す変数の依存関係を抽出する。第１抽出部１１０は、依存関係を表すため、出力コイルに対応する命令の対象であるデバイス及び入力接点に対応する命令の対象であるデバイスを示すノードを接続した有向グラフを生成する。以下の説明においては、デバイスを示す変数をノードで表し、デバイスを示す変数の間の依存関係をエッジで表す。
【００４１】
図２Ａに示す例では、出力コイルＹ０には、（ａ）直列に接続されたＭ１０の入力接点（ＳＴ１７）とＭ２０の入力接点（ＳＴ１８）と、（ｂ）直列に接続されたＭ３０の入力接点（ＳＴ１９）とＭ４０の入力接点（ＳＴ２０）と、（ｃ）Ｍ５０の入力接点（ＳＴ２１）と、の（ａ）〜（ｃ）が並列に接続されている。このため、第１抽出部１１０は、図４に示すように、Ｙ０を示すノードに、Ｍ１０を示すノード及びＭ２０を示すノードの積と、Ｍ３０を示すノード及びＭ４０を示すノードの積と、Ｍ５０を示すノードと、が接続されているグラフを生成する。
【００４２】
図４に示すグラフは有向グラフであるので、第１抽出部１１０は、例えば、ノードのペアを特定する情報、ノードを接続するエッジの向きを特定する情報等をメモリ１１に格納する。例えば、第１抽出部１１０は、ノードである変数の名前と、その変数と依存関係を有する他の変数の名前と、矢印の先側のノードである変数の名前と、をメモリ１１に格納する。
【００４３】
図２Ａを参照する。続いて、第１抽出部１１０は、ＳＴ２１で実行されるＭ５０の入力接点のオン／オフに影響を与えるＭ５０の出力コイルがＳＴ２１の命令より上に存在するかを判別するため、メインプログラムＰ１からＭ５０の出力コイルを探索する。Ｍ５０の出力コイルは存在しないため、第１抽出部１１０は、図４に示すようにグラフのＭ５０のノードには他のノードを接続しない。
【００４４】
図２Ａを参照する。第１抽出部１１０は、ＳＴ２０で実行されるＭ４０の入力接点のオン／オフに影響を与えるＭ４０の出力コイルがＳＴ２０の命令より上に存在するかを判別するため、メインプログラムＰ１からＭ４０の出力コイルを探索する。ここでは、ＳＴ８にＭ４０の出力コイルが存在する。ＳＴ８のＭ４０の出力コイルは、ＳＴ７で実行されるＭ１１の入力接点のオン／オフに応じて動作する。このため、第１抽出部１１０は、図４に示すＭ４０を示すノードにＭ１１を示すノードを接続する。第１抽出部１１０は、ノードのペアを特定する情報、ノードを接続するエッジの向きを特定する情報等をメモリ１１に格納する。
【００４５】
図２Ａを参照する。第１抽出部１１０は、ＳＴ１９で実行されるＭ３０の入力接点のオン／オフに影響を与えるＭ３０の出力コイルがＳＴ１９の命令より上に存在するかを判別するため、メインプログラムＰ１からＭ３０の出力コイルを探索する。ここでは、ＳＴ４にＭ３０の出力コイルが存在する。ＳＴ４のＭ３０の出力コイルは、ＳＴ３で実行されるＭ２の入力接点のオン／オフに応じて動作する。このため、第１抽出部１１０は、図４に示すように、Ｍ３０を示すノードにＭ２を示すノードを接続する。第１抽出部１１０は、ノードのペアを特定する情報、ノードを接続するエッジの向きを特定する情報等をメモリ１１に格納する。
【００４６】
図２Ａを参照する。第１抽出部１１０は、ＳＴ１８で実行されるＭ２０の入力接点のオン／オフに影響を与えるＭ２０の出力コイルがＳＴ１８の命令より上に存在するかを判別するため、メインプログラムＰ１からＭ２０の出力コイルを探索する。ここでは、ＳＴ１０にＭ２０の出力コイルが存在する。ＳＴ１０のＭ２０の出力コイルは、ＳＴ９で実行されるＭ２の入力接点のオン／オフに応じて動作する。このため、第１抽出部１１０は、図４に示すように、Ｍ２０を示すノードにＭ２を示すノードを接続する。第１抽出部１１０は、ノードのペアを特定する情報、ノードを接続するエッジの向きを特定する情報等をメモリ１１に格納する。
【００４７】
図２Ａを参照する。第１抽出部１１０は、ＳＴ１７で実行されるＭ１０の入力接点のオン／オフに影響を与えるＭ１０の出力コイルがＳＴ１７の命令より上に存在するかを判別するため、メインプログラムＰ１からＭ１０の出力コイルを探索する。ここでは、ＳＴ１６にＭ１０の出力コイルが存在する。ＳＴ１６のＭ１０の出力コイルは、ＳＴ１５で実行されるＭ１０１の入力接点に応じて動作する。このため、第１抽出部１１０は、図４に示すＭ１０を示すノードにＭ１０１を示すノードを接続する。第１抽出部１１０は、ノードのペアを特定する情報、ノードを接続するエッジの向きを特定する情報等をメモリ１１に格納する。
【００４８】
図２Ａを参照する。第１抽出部１１０は、ＳＴ１５で実行されるＭ１０１の入力接点のオン／オフに影響を与えるＭ１０１の出力コイルがＳＴ１５の命令より上に存在するかを判別するため、メインプログラムＰ１からＭ１０１の出力コイルを探索する。ここでは、ＳＴ１４にＭ１０１の出力コイルが存在する。ＳＴ１４のＭ１０１の出力コイルは、ＳＴ１３で実行されるＭ３の入力接点のオン／オフに応じて動作する。このため、第１抽出部１１０は、図４に示すＭ１０１を示すノードにＭ３を示すノードを接続する。第１抽出部１１０は、ノードのペアを特定する情報、ノードを接続するエッジの向きを特定する情報等をメモリ１１に格納する。
【００４９】
図２Ａを参照する。第１抽出部１１０は、ＳＴ１３のＭ３の入力接点のオン／オフに影響を与えるＭ３の出力コイルがＳＴ１３の命令より上に存在するかを判別するため、メインプログラムＰ１からＭ３のコイルを探索する。Ｍ３の出力コイルは存在しないため、第１抽出部１１０は、図４に示すように、Ｍ３を示すノードには他ノードを接続しない。
【００５０】
第１抽出部１１０は、上記のような手順を繰り返し、選択された出力コイルから、メインプログラムＰ１内の命令を下から上へ向かって順に追っていき、図４に示すようなメインプログラムＰ１の変数の依存関係を表すツリー構造のグラフを生成する。第１抽出部１１０が抽出するメインプログラムＰ１中のデバイスを示す変数の依存関係は、本発明の第１依存関係の一例である。第１抽出部１１０が生成した第１依存関係を表すグラフは、本発明の第１グラフの一例である。
【００５１】
さらに、第１抽出部１１０は、メインプログラムでの命令の実行順序の逆順を示す番号をグラフの各ノードに割り当てて、番号とノードとの対応を示すデータをメモリ１１に格納する。図２Ａに示すメインプログラムＰ１では、Ｍ５０の入力接点が一番最後に実行されるので、図４に示すように、Ｍ５０には番号「０」が割り当てられ、一番最初に実行されるＸ１の入力接点に最終の番号「１０」が割り当てられている。
【００５２】
さらに、第１抽出部１１０は、割り込みプログラムＰ２中のデバイスを示す変数の依存関係を抽出する。
【００５３】
ここで、第１抽出部１１０は、割り込みプログラムＰ２の出力コイルのうち、メインプログラムＰ１に影響を与えない出力コイルについては、抽出の対象外とする。図２Ｂに示す割り込みプログラムＰ２の出力コイルは、Ｍ１、Ｍ２、Ｍ３、Ｍ５０である。これらの出力コイルのうち、図２Ａに示すメインプログラムＰ１の入力接点となっているのは、Ｍ２、Ｍ３、Ｍ５０である。Ｍ１は、メインプログラムＰ１の入力接点となっていないため割り込みプログラムＰ２中のＭ１は、メインプログラムＰ１に影響を与えない。このため、Ｍ１は抽出の対象外となる。よって、第１抽出部は、割り込みプログラムＰ２のＭ２、Ｍ３、Ｍ５０の出力コイルに対応する命令の対象であるデバイスを示す変数を起点として依存関係を抽出する。
【００５４】
割り込みプログラムＰ２の変数の依存関係の抽出方法は、第１抽出部１１０と同様である。第１抽出部１１０は、割り込みプログラムＰ２内の命令を下から上へ向かって順に追っていき、図５に示すような、割り込みプログラムＰ２の変数の依存関係を表すグラフを生成する。第１抽出部１１０は、図５に示すグラフの構造を特定するため、例えば、ノードのペアを特定する情報、ノードを接続するエッジの向きを特定する情報等をメモリ１１に格納する。第１抽出部１１０が抽出する割り込みプログラムＰ２における出力コイルと入力接点との依存関係は、本発明の第２依存関係の一例である。第１抽出部１１０が生成した第２依存関係を表すグラフは、本発明の第２グラフの一例である。
【００５５】
図１に示す分割部１２０は、設定された条件に従ってメインプログラムＰ１を２以上のブロックに分割する。具体的には、分割部１２０は、（ｉ）割り込みプログラムＰ２の入力接点を決められた条件で選択し、（ｉｉ）選択した入力接点に影響を与えるメインプログラムＰ１の出力コイルを探索し、（ｉｉｉ）該当する出力コイルの直前の位置で、メインプログラムＰ１を区切る。
【００５６】
分割部１２０は、（ｉ）の処理を次のように行う。まず、分割部１２０は、図２Ａに示すメインプログラムＰ１の出力コイルであり、図２Ｂに示す割り込みプログラムＰ２の入力接点であるものを選択する。ここでは、Ｍ１１、Ｍ２２、Ｍ３３が該当する。
【００５７】
続いて、分割部１２０は、割り込みプログラムＰ２内の選択した入力接点が動作させる出力コイルのうち、メインプログラムＰ１に影響を与えない出力コイルを探索する。分割部１２０は、該当する出力コイルに接続されている入力接点を選択の対象から除外する。Ｍ１１の入力接点にはＭ１の出力コイルが接続されているが、メインプログラムＰ１の入力接点にはＭ１が存在しない。よって、分割部１２０は、割り込みプログラムＰ２のＭ１１、Ｍ２２、Ｍ３３の入力接点のうち、Ｍ１１を除外する。このようにして、分割部１２０は、割り込みプログラムＰ２の入力接点のうち、Ｍ２２、Ｍ３３を選択する。
【００５８】
分割部１２０は（ｉｉ）の処理を次のように行う。分割部１２０は、メインプログラムＰ１の出力コイルから、（ｉ）で選択した割り込みプログラムＰ２の入力接点であるＭ２２、Ｍ３３に影響を与える出力コイルを探索する。メインプログラムＰ１では、ＳＴ６にＭ２２の出力コイル、ＳＴ１２にＭ３３の出力コイルが存在する。
【００５９】
分割部１２０は（ｉｉｉ）の処理を次のように行う。分割部１２０は、図６に示すように、Ｍ２２の出力コイルとＭ３３の出力コイルの直前でメインプログラムＰ１を区切る。図示する例では、Ｍ２２の出力コイルの前のブロックをブロックＡ、Ｍ２２の出力コイルからＭ３３の出力コイルの直前までをブロックＢ、Ｍ３３の出力コイルより後ろをブロックＣとした。分割部１２０は、ブロック名、ブロック間の区切りの直後に配置されている入力接点または出力コイルを特定する情報等をメモリ１１に格納する。
【００６０】
前述の通り、メインプログラムＰ１実行中に発生する割り込みの位置が不定であるため、解析装置１００は、メインプログラムＰ１をいくつかのブロックに分割し、それぞれのブロックで割り込みが発生した場合のデバイスを示す変数の依存関係を抽出する。
【００６１】
分割部１２０は、第１抽出部１１０が生成した図４に示すグラフの各ノードに、そのノードに対応する入力接点または出力コイルがどのブロックに属しているかを示す情報を付加する。図７に、分割部１２０がブロックの情報を付加したグラフを示す。
【００６２】
なお、メインプログラムＰ１内の命令は、プログラムの一番上の行から一番下の行に向かって実行される。メインプログラムＰ１内に同じ内部リレーが複数配置されている場合、最終出力である出力コイルＹ０に近い方のブロックを示す情報が、ノードに付加されている。例えば、メインプログラムＰ１において、Ｍ２０は、ＳＴ１８の入力接点であり、ＳＴ１０の出力コイルでもある。出力コイルＹ０に近いのは、ＳＴ１８のＭ２０の入力接点であるので、図４に示すグラフで、ＳＴ１８のＭ２０の入力接点が含まれているブロックＣが、Ｍ２０を示すノードに割り当てられる。
【００６３】
さらに、分割部１２０は、ブロックをサブブロックに分割する。具体的には、分割部１２０は、メインプログラムＰ１から、割り込みプログラムＰ２の出力コイルにより影響を受ける入力接点を探索する。分割部１２０は、該当する入力接点の直前の位置でメインプログラムＰ１を区切る。
【００６４】
ここで、Ｍ２、Ｍ３、Ｍ５０は、図２Ｂに示す割り込みプログラムＰ２の出力コイルであり、図２Ａに示すメインプログラムＰ１の入力接点である。この場合、メインプログラムＰ１の入力接点のうちＭ２、Ｍ３、Ｍ５０は、割り込みプログラムＰ２の出力コイルにより影響を受ける。分割部１２０は、メインプログラムＰ１を、Ｍ２、Ｍ３、Ｍ５０の入力接点の直前で区切る。図８に示すように、分割部１２０は、ブロックＡをサブブロックＡ１及びＡ２に、ブロックＢをサブブロックＢ１及びＢ２に、ブロックＣをサブブロックＣ１、Ｃ２、及びＣ３に区切る。分割部１２０は、サブブロック名、サブブロック間の区切りの直後に配置されている入力接点または出力コイルを特定する情報等をメモリ１１に格納する。
【００６５】
図１に示す第２抽出部１３０は、メインプログラムＰ１の各ブロックにおいて割り込みが発生した場合の、割り込みプログラムＰ２のデバイスを示す変数とメインプログラムＰ１のデバイスを示す変数との依存関係を抽出する。第２抽出部１３０は、図２Ｂに示す割り込みプログラムＰ２の入力接点のうち、メインプログラムＰ１において、出力コイルとなっている内部リレーを探索する。図２Ａ、２Ｂに示す例では、Ｍ１１、Ｍ２２、Ｍ３３が該当する。ここで、割り込みプログラムＰ２においてＭ１１の入力接点によりＭ１の出力コイルが動作するが、Ｍ１は、メインプログラムＰ１内の入力接点ではない。このため、割り込みプログラムＰ２のＭ１１の入力接点は、メインプログラムＰ１に影響を与えない。よって、第２抽出部１３０は、Ｍ１１を対象から外す。
【００６６】
第２抽出部１３０は、図２Ａに示すメインプログラムＰ１のブロックＡから、Ｍ２２、Ｍ３３の出力コイルを探索する。ブロックＡには、Ｍ２２、Ｍ３３の出力コイルが存在しないため、第２抽出部１３０は、第１抽出部１１０が出力した図５に示すグラフに他のノードを追加しない（図９Ａ）。
【００６７】
続いて、第２抽出部１３０は、図２Ａに示すメインプログラムＰ１のブロックＢから、Ｍ２２及びＭ３３の出力コイルを探索する。ブロックＢ内にＳＴ６で実行されるＭ２２の出力コイルが存在し、Ｍ２２の出力コイルは、ＳＴ５で実行されるＸ２の入力接点のオン／オフにより動作する。このため、第２抽出部１３０は、第１抽出部１１０が出力した図５に示すグラフ内のＭ２２を示すノードにＸ２を示すノードを接続し、図９Ｂに示すようなグラフを生成する。ここで、第２抽出部１３０は、割り込みプログラムＰ２がメインプログラムＰ１のブロックＢ内で割り込みを実行した場合に、割り込みプログラムＰ２の入力接点が、メインプログラムＰ１のＸ２の入力接点の影響を受けることを示す情報として、追加したＸ２を示すノードにブロックＢを特定する情報を付加する。
【００６８】
続いて、第２抽出部１３０は、メインプログラムＰ１のブロックＣから、Ｍ２２及びＭ３３の出力コイルを探索する。ブロックＣ内にＳＴ１２で実行されるＭ３３の出力コイルが存在する。Ｍ３３の出力コイルは、ＳＴ１１で実行されるＭ１１の入力接点のオン／オフにより動作する。このため、第２抽出部１３０は、図９Ｂに示すグラフのＭ３３を示すノードに、Ｍ１１を示すノードを接続する。さらに、メインプログラムＰ１内において、Ｍ１１の入力接点のオン／オフに影響を与えるＳＴ２のＭ１１の出力コイルが存在する。Ｍ１１の出力コイルは、ＳＴ１で実行されるＸ１の入力接点のオン／オフにより動作する。このため、第２抽出部１３０は、さらに、Ｍ１１を示すノードにＸ１を示すノードを接続し、図９Ｃに示すようなグラフを生成する。
【００６９】
ここで、第２抽出部１３０は、割り込みプログラムＰ２がメインプログラムＰ１のブロックＣ内で割り込みを実行した場合に、割り込みプログラムＰ２の入力接点が、メインプログラムＰ１のＭ１１及びＸ１の入力接点の影響を受けることを示す情報として、追加したＭ１１及びＸ１を示すノードに、ブロックＣを特定する情報を付加する。第２抽出部１３０は、生成したグラフの形状を特定するための情報をメモリ１１に格納する。
【００７０】
上記のように、第２抽出部１３０は、割り込みプログラムＰ２中で参照されるデバイスを示す変数とメインプログラムＰ１中で参照されるデバイスを示す変数との依存関係を、割り込みプログラムＰ２の変数の依存関係を表すグラフに追加する。このように、第２抽出部１３０は、ブロック内で割り込みが発生した場合の、割り込みプログラムＰ２中で参照されるデバイスを示す変数とメインプログラムＰ１中で参照されるデバイスを示す変数との依存関係を抽出する。第２抽出部１３０が抽出する依存関係は、本発明の第３依存関係の一例である。第２抽出部１３０が生成する第３依存関係を表すグラフは、本発明の第３グラフの一例である。
【００７１】
図１に示す統合部１４０は、図７に示すような、第１抽出部１１０が生成したメインプログラムＰ１のデバイスを示す変数の依存関係を表すグラフと、図９Ｃに示すような、第２抽出部１３０が生成した割り込みプログラムＰ２のデバイスを示す変数とメインプログラムＰ１のデバイスを示す変数との依存関係を表すグラフとを統合し、図１０に示すようなグラフ（以下、統合グラフ）を生成する。統合部１４０は、生成した統合グラフの形状を特定するための情報をメモリ１１に格納する。統合グラフは、本発明の統合依存関係情報を表したグラフである。
【００７２】
表示部１５０は、図１１に示すように、統合部１４０が統合した統合グラフを表示装置１３に表示する。図示する例では、表示部１５０は、メインプログラムＰ１中の入力接点、出力コイルが、どのブロックに属しているかを示す情報をノードに付加している。この情報は、図７に示すように、分割部１２０が、ノードに付加したブロックの情報である。
【００７３】
表示部１５０は、割り込みプログラムＰ２による割り込みが発生した場合に、割り込みプログラムＰ２の入力接点に影響を与えるメインプログラムＰ１の入力接点及び出力コイルを示すノードに、割り込み位置を示すブロックの情報を付加して表示する。この情報は、第２抽出部１３０が、割り込みプログラムＰ２の入力接点が、メインプログラムＰ１の入力接点、出力接点からの影響を受けることを示す情報として、図９Ｂ、９Ｃのように、ノードに付加したブロックの情報である。
【００７４】
表示部１５０は、図１１に示すように、統合グラフとともに、ラダーダイアグラムで記載されたメインプログラムＰ１を表示する。ここで、表示部１５０は、ブロックの境界を示す境界線を付加したメインプログラムＰ１を表示する。
【００７５】
さらに、図１１に示すように、ユーザが画面上で所望のサブブロックを指定した場合、表示部１５０は、指定されたサブブロックで割り込みが発生した場合の依存関係のみを表示する。図１２Ａは、サブブロックＢ１が選択された場合に、表示部１５０が表示する画像の例である。図１２Ｂは、サブブロックＣ１が選択された場合に、表示部１５０が表示する画像の例である。
【００７６】
続いて、上記機能を備える解析装置１００において、依存関係のグラフを生成する一連の流れを説明する。
【００７７】
上述した解析装置１００の各部は、メインプロセスから呼び出されると、それぞれの処理を実行するものとする。ここで、図３に示す解析プログラム１１１においては、例えば、第１抽出部１１０と、分割部１２０と、第２抽出部１３０と、統合部１４０とは、サブプロセスとして動作するようプログラムされており、メインプロセスから呼び出されると、それぞれの処理を行うものとする。ここで、メインプロセスは、図３に示すＣＰＵ１４が解析プログラム１１１を実行することにより、最初に起動されるプロセスであるとする。
【００７８】
図１３に示すように、メインプロセス２００は、まず、第１抽出部１１０に、メインプログラムＰ１中のデバイスを示す変数の依存関係を抽出することを指示する（ステップＳ１００１）。これに応答して、第１抽出部１１０は、メインプログラムＰ１中のデバイスを示す変数の依存関係を抽出し（ステップＳ１００２）、図４に示すようなグラフを生成し、生成したグラフを特定するデータをメモリ１１に保存する。その後、図１３に示すように、第１抽出部１１０は、メインプログラムＰ１についての依存関係の抽出処理が完了したことをメインプロセス２００に通知する（ステップＳ１００３）。
【００７９】
続いて、メインプロセス２００は、第１抽出部１１０に、割り込みプログラムＰ２中のデバイスを示す変数の依存関係を抽出することを指示する（ステップＳ１００４）。これに応答して、第１抽出部１１０は、割り込みプログラムＰ２中のデバイスを示す変数の依存関係を抽出し（ステップＳ１００５）、図５に示すようなグラフを生成し、生成したグラフを特定するデータをメモリ１１に保存する。その後、図１３に示すように、第１抽出部１１０は、割り込みプログラムＰ２についての依存関係の抽出処理が完了したことをメインプロセス２００に通知する（ステップＳ１００６）。
【００８０】
続いて、メインプロセス２００は、分割部１２０にメインプログラムＰ１をブロックに分けることを指示する（ステップＳ１００７）。これに応答して、分割部１２０は、図６の破線で示すように、まず、メインプログラムＰ１をブロックに分け（ステップＳ１００８）、ブロックの区切りの位置を特定するデータをメモリ１１に格納する。
【００８１】
その後、分割部１２０は、メインプログラムＰ１における入力接点、出力コイルの位置がどのブロックに属しているかに応じて、第１抽出部１１０が出力した図７に示すようなグラフ内の各ノードにブロックを特定する情報を付加したデータをメモリ１１に格納する。
【００８２】
次に、分割部１２０は、図８の太い破線で示すようにメインプログラムＰ１をサブブロックに分け、サブブロックの区切りの位置を特定するデータをメモリ１１に格納する。その後、図１３に示すように、分割部１２０は、ブロックを分割したことをメインプロセス２００に通知する（ステップＳ１００９）。
【００８３】
続いて、メインプロセス２００は、第２抽出部１３０に、メインプログラムＰ１の各ブロックにおいて割り込みが発生した場合の、割り込みプログラムＰ２のデバイスを示す変数と、メインプログラムＰ１のデバイスを示す変数との依存関係を抽出することを指示する（ステップＳ１０１０）。これに応答して、第２抽出部１３０は、メインプログラムＰ１の各ブロックにおいて割り込みが発生した場合の、割り込みプログラムＰ２のデバイスを示す変数と、メインプログラムＰ１のデバイスを示す変数との依存関係を抽出し（ステップＳ１０１１）、図９Ａ〜９Ｃに示すようなグラフを生成し、生成したグラフを特定するデータをメモリ１１に保存する。その後、図１３に示すように、第２抽出部１３０は、抽出処理が完了したことをメインプロセス２００に通知する（ステップＳ１０１２）。
【００８４】
続いて、メインプロセス２００は、統合部１４０に、図７に示すような、第１抽出部１１０したグラフ（図４）にブロックの情報を付加されたグラフと、第２抽出部１３０が生成した図９Ｃに示すようなグラフとを統合することを指示する（ステップＳ１０１３）。これに応答して、統合部１４０は、グラフを統合し（ステップＳ１０１４）、図１０に示すようなグラフを生成し、生成したグラフを特定するデータをメモリ１１に保存する。その後、図１３に示すように、統合部１４０は、統合処理が完了したことをメインプロセス２００に通知する（ステップＳ１０１５）。
【００８５】
続いて、メインプロセス２００は、表示部１５０に、統合部１４０が生成したグラフを表示することを指示する（ステップＳ１０１６）。これに応答して、表示部１５０は、グラフを表示する画像を生成し、生成した画像をディスプレイに表示する（ステップＳ１０１７）。その後、図１３に示すように、統合部１４０は、表示処理が完了したことをメインプロセス２００に通知する（ステップＳ１０１８）。
【００８６】
また、メインプロセス２００は、ユーザの操作指示により、割り込みが発生するブロックが選択された場合、選択されたブロックで割り込みが発生した場合のグラフを表示することを指示する。これに応答して、表示部１５０は、例えば、図１２Ａ、１２Ｂに示すような画面を表示する。
【００８７】
以上説明したように、実施の形態に係る構成においては、まず、解析装置１００の第１抽出部１１０が、メインプログラムＰ１中で使用されるデバイスを示す変数の依存関係（第１依存関係）を抽出し、割り込みプログラムＰ２中で使用されるデバイスを示す変数の依存関係（第２依存関係）を抽出する。解析装置１００の分割部１２０は、メインプログラムＰ１をブロックに分割し、第２抽出部１３０は、ブロックで特定される領域において割り込みが発生した場合の、割り込みプログラムＰ２中のデバイスを示す変数とメインプログラムＰ１中のデバイスを示す変数との依存関係を第２依存関係に結合して、結合依存関係を抽出する。統合部１４０は、第１依存関係に結合依存関係を統合する。解析装置１００はこのような構成を備えることにより、割り込み処理が発生するプログラム中の変数の依存関係を解析することができる。
【００８８】
また、ユーザがメインプログラムＰ１の特定の領域において割り込み処理を禁止するよう設定することがある。例えば、ユーザが、プログラムの開発ツールを使用して、図１４の二点破線で挟まれた区間においては割り込み処理を禁止することをメインプログラムＰ１に設定したとする。この区間を割り込み禁止区間というものとする。よって、メモリ１１のメインプログラムＰ１に割り込み禁止区間の情報が書き込まれる。
【００８９】
この場合、統合部１４０は、統合グラフを生成した後、割り込み禁止区間に含まれている依存関係を示すノードとエッジに、割り込み禁止区間に含まれていることを示す情報を付加し、付加した情報をメモリ１１に格納する。表示部１５０は、割り込み禁止区間に含まれているノード及びエッジについては、ユーザが視角的に確認できるように、例えば、図１５に示すような画面を表示する。
【００９０】
（変形例）
実施の形態においては、メインプログラムＰ１に割り込みプログラムＰ２が割り込む例を説明したが、解析装置１００は、多重割り込みが発生するプログラムを解析することが可能である。
【００９１】
例えば、２つのプログラムＰ２１、Ｐ３１が、メインプログラムＰ１の実行中に割り込みを行うとする。プログラムＰ２１と、プログラムＰ３１には、プログラムの実行の優先度が設定されており、プログラムＰ３１の優先度の方が、プログラムＰ２１の優先度より高いとする。よって、プログラムＰ２１が実行中に、プログラムＰ３１は、割り込んで処理を行うことができる。一方、プログラムＰ３１が実行中には、プログラムＰ２１は割り込むことはできない。
【００９２】
このような場合、解析装置１００は、優先度が低いプログラムＰ２１がメインプログラムに相当するものとし、優先度が高いプログラムＰ３１が割り込みプログラムに相当するものとして、実施の形態で説明したような方法で解析を行う。その後、解析装置１００は、プログラムＰ２１及びプログラムＰ３１を１つの割り込みプログラムとみなして、解析を行うことができる。このような方法で、多重割り込みが発生するプログラムを解析することが可能である。
【００９３】
実施の形態において、解析装置１００のメモリ１１にメインプログラムＰ１及び割り込みプログラムＰ２が格納されている例を説明したが、解析装置１００は、ネットワークを介して接続されている他のコンピュータのメモリに格納されているプログラムを解析してもよい。
【００９４】
実施の形態において、予め設定された条件が満たされた場合に、割り込みプログラムＰ２が実行される例を説明したが、あるいは、プログラマブルロジックコントローラは、スキャンタイムとは異なる周期で、周期的に割り込みプログラムＰ２を実行してもよい。
【００９５】
上記のプログラムを記録する記録媒体としては、磁気ディスク、光ディスク、光磁気ディスク、フラッシュメモリ、半導体メモリ、磁気テープを含むコンピュータ読取可能な記録媒体を使用することができる。
【００９６】
本発明は、広義の精神と範囲を逸脱することなく、様々な実施形態及び変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。つまり、本発明の範囲は、実施形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、本発明の範囲内とみなされる。
【符号の説明】
【００９７】
Ａ，Ｂ，Ｃ  ブロック、Ａ１，Ｂ１，Ｃ１，Ｃ２  サブブロック、Ｍ２，Ｍ３，Ｍ１０，Ｍ１１，Ｍ２０，Ｍ２２，Ｍ３０，Ｍ３３，Ｍ４０，Ｍ５０，Ｍ１０１，Ｘ１，Ｘ２，Ｘ９９  デバイス、Ｐ１  メインプログラム、Ｐ２  割り込みプログラム、Ｐ２１，Ｐ３１  プログラム、Ｙ０  出力コイル、１１  メモリ、１２  入力装置、１３  表示装置、１４  ＣＰＵ、１９  バス、１００  解析装置、１１０  第１抽出部、１１１  解析プログラム、１２０  分割部、１３０  第２抽出部、１４０  統合部、１５０  表示部、２００  メインプロセス
【要約】
解析装置（１００）は、プログラマブルロジックコントローラにリレー回路の機能を実現させるプログラム内の変数の依存関係を解析する。プログラムは、第１プログラムと、第１プログラムの実行を中断して割り込み処理を実行する第２プログラムとを含む。第１抽出部（１１０）は、第１プログラム内の変数の依存関係である第１依存関係と、第２プログラム内の変数の依存関係である第２依存関係とを抽出する。分割部（１２０）は、設定された条件に従って第１プログラムを少なくとも２つのブロックに分割する。第２抽出部（１３０）は、第１プログラムのブロック内で割り込みが発生した場合の、第２プログラム内の変数と第１プログラム内の変数との依存関係を、第２依存関係に追加して、第３依存関係を抽出する。統合部（１４０）は、第１依存関係と第３依存関係とを統合して、統合依存関係を示す情報である統合依存関係情報を生成する。【図１】
0006692510.tif 000002
【図２Ａ】
0006692510.tif 000003
【図２Ｂ】
0006692510.tif 000004
【図３】
0006692510.tif 000005
【図４】
0006692510.tif 000006
【図５】
0006692510.tif 000007
【図６】
0006692510.tif 000008
【図７】
0006692510.tif 000009
【図８】
0006692510.tif 000010
【図９Ａ】
0006692510.tif 000011
【図９Ｂ】
0006692510.tif 000012
【図９Ｃ】
0006692510.tif 000013
【図１０】
0006692510.tif 000014
【図１１】
0006692510.tif 000015
【図１２Ａ】
0006692510.tif 000016
【図１２Ｂ】
0006692510.tif 000017
【図１３】
0006692510.tif 000018
【図１４】
0006692510.tif 000019
【図１５】
0006692510.tif 000020