(実施の形態1)
図1は、後述する各実施の形態に共通する、本発明に係るプログラム解析支援装置のハードウェア構成を示すブロック図である。図1に於いて、プログラム解析支援装置1は、(1)プログラム解析支援装置1の各機能を実行するマイクロプロセッサ2、(2)データを一時的に格納するための、例えばDRAMより成るデータ格納メモリ3、(3)液晶ディスプレイ等のディスプレイ装置より成る表示部4、(4)マウス及び/又はキーボード等の入力装置より成る入力部5、及び、(5)解析対象の計測制御プログラム及びプログラム解析支援装置の各機能を実現するためのプログラム解析支援用プログラム等のプログラム又は解析結果等のデータをそれぞれファイルとして記憶・保持する、ハードディスク等の記憶装置より成る保存部6を、備えている。そして、各部2〜6は、システムバスSBを通じて相互に接続されている。
計測制御プログラムに対するプログラム解析(クロスリファレンスの作成)を本解析支援装置1に於いて行う場合には、ユーザは、入力部5を操作することにより、プログラム解析条件を入力すると共に、保存部6に保持されている複数の計測制御プログラムの内で指定すべき計測制御プログラムを指定する。この入力操作に伴い、プログラム解析条件及び計測制御プログラムの指定内容は、マイクロプロセッサ2内のレジスタ(図示せず。)に保持される。その上で、マイクロプロセッサ2は、保存部6にアクセスして、ユーザにより指定された計測制御プログラムを保存部6から読み出し、ユーザにより入力されたプログラム解析条件に従って、当該計測制御プログラムの解析処理を実行する。そして、マイクロプロセッサ2は、その解析処理結果を、データ格納メモリ3に一時的に格納すると共に、同結果を表示部4の画面上に表示する、或いは、保存部6内に1ファイルとして記憶する。
尚、プログラム解析支援装置1の各機能ないしは各処理を実行させるための解析支援用プログラム自体は、パーソナルコンピュータ上で動作し得るソフトウェアツールとして提供される。その場合には、プログラム解析支援装置1は、上記パーソナルコンピュータにより構成される。或いは、上記解析支援用プログラムがGOT上に搭載されている場合もあり、この場合には、上記GOTがプログラム解析支援装置1を構成する。
図2は、プログラム解析支援装置1、従って、マイクロプロセッサ2により実行される解析処理に於ける各機能部を示す機能ブロック図(ソフトウェアブロック図に該当。)である。図2に示す通り、プログラム解析支援装置1ないしはマイクロプロセッサ2は、大要、解析条件設定部10と、解析条件実行部11と、解析結果表示部20とを、備えている。
これらの内で、解析条件実行部11は、プログラム解析処理のための各機能部を有する。即ち、本実施の形態では、変数(デバイス)のクロスリファレンスの抽出が行われるので、解析条件実行部11は、クロスリファレンス抽出の対象となるプログラムを読み込むためのPOU一覧抽出処理実行部14と、クロスリファレンス抽出処理を実行する部分である変数使用一覧抽出処理実行部12とを、備えている。
又、解析結果表示部20は、クロスリファレンス結果を図1の表示部4の画面上に表示するための形式を備えた表示データを作成する変数使用一覧表示部21を、備えている。
更に、解析条件実行部11は、解析結果論理演算処理実行部16を備えている。そして、解析結果論理演算処理実行部16は、プログラム解析処理の各機能による解析結果同士の論理演算を行う部分として、AND処理実行部17、OR処理実行部18及びNOT処理実行部19を、備えている。
ユーザは、図1の入力部5を介して、解析条件設定部10に対して、プログラム解析条件を入力する。この入力に応じて、解析条件実行部11は、ユーザが入力したプログラム解析条件に応じた解析処理を実行する。例えば、解析条件実行部11は、ユーザが指定した計測制御プログラム(解析対象プログラムファイル8に該当。)、又は、解析対象プログラムに関連するデバイスコメントファイル9を図1の保持部6より読み出す処理を行ったり、クロスリファレンスを作成したり、或いは、解析結果同士の論理演算(AND/OR/NOT)を処理したりする。その後、解析結果表示部20は、解析結果に応じた表示を図1の表示部4の画面上に表示させるためのデータ作成等の動作を行ったり、又は、解析結果のデータを解析結果ファイル25として外部に出力したりする。例えば、解析結果表示部20は、解析条件実行部11により作成されたクロスリファレンス結果を受信し、受信した当該クロスリファレンス結果を表示部4の画面上に表示させるための表示データを作成し、当該表示データを表示部4に出力することで、受信したクロスリファレンス結果をユーザに対して表示することとしたり、或いは、受信したクロスリファレンス結果を、クロスリファレンス結果ファイルとして、外部に出力したりする。
以下に於いては、PCの計測制御プログラムであるラダープログラムを、プログラム解析の対象とする一例を記載する。ここで、図3は、PCの計測制御プログラムを構成するPOUの一つであり、その名称はMAINラダー回路である。図3はラダー回路図表現であるが、それをテキスト形式(例えば、IL形式。IL:Instruction List)に表現するときには、図3は図4の様に表現される。更に、図5は、PCの計測制御プログラムを構成する別のPOUであり、その名称はSUBラダー回路である。図5はラダー回路図として表現されているが、それをテキスト形式で表現すると、図5は図6に示す様に表現される。
図7及び図8は、ユーザが図1の入力部5を用いてプログラム解析条件を本装置1のマイクロプロセッサ2に入力するために、表示部4上に表示された画面の一例を示す図である。この様なプログラム解析支援画面は、図2の解析条件設定部10の機能動作によって表示部4の画面上に表示され、同部10は、上記プログラム解析支援画面を通じてユーザによって入力されたプログラム解析条件を、そのまま保持する。
図7に示すプログラム解析支援画面の場合には、各行は、式番号セル、解析コマンドセル、解析対象セル、解析条件セル及び結果件数セルより構成されている。ユーザは、図7の画面を見て、解析コマンドに応じた解析対象及び解析条件をそれぞれ対応するセルに入力する。即ち、ユーザは、解析対象セルに、解析コマンドが解析処理を行う対象となる母集団を主に指定する。且つ、ユーザは、解析条件セルに、解析コマンドが解析処理を行う条件を主に指定する。
尚、図8に示す一例の様に、ユーザがプログラム解析条件を入力するための画面構成を、図7の様な入力データ種別に応じた各セルで構成する代わりに、ユーザがプログラム解析条件の式全体を入力する構成に設定しても良い。
ユーザは、図7又は図8の画面に示される解析条件セルに解析条件を入力する処理を完了させた後には、画面の式番号の欄の前に●印を付与する入力処理を行って、実行したい式番号を指定し、その上で、画面の左上側に表示された実行ボタンを押す(クリックする。)動作を行う。そのクリック処理(入力処理)が行われると、実行対象となっている若い式番号から順に、図2の解析条件設定部10が、解析条件実行部11に対して、解析条件式の処理を行う様に指示し、この指示に応答して、解析条件実行部11は各式番号の順序で解析処理を実行する。図7の画面構成例では、式番号S001から式番号S010迄のそれぞれに、プログラム解析条件(解析コマンド、解析対象及び解析条件)が入力されており、それぞれの式番号が●印の表示を通じて実行対象として指定されているので、ユーザが実行ボタンを押す(クリックする。)と、その後、式番号S001から順に式番号S010まで、入力されたプログラム解析条件に基づいて、図2の解析条件実行部11は解析処理を実行する。
解析処理の結果は、解析条件実行部11から解析条件設定部10へ返信される。その結果、解析条件設定部10は、解析処理の結果件数を、図1の表示部4に表示されたプログラム解析支援画面上の結果件数セルに表示する。そして、ユーザが結果件数セルの右側に表示されたボタンBTをクリックすると、それに応じて、解析結果表示部20は、解析処理の結果を、図1の表示部1の画面上に表示する。
<解析コマンドの処理内容(A)〜(E)>
次に、プログラム解析条件の一つを成す解析コマンドの処理内容について記載する。
(A)先ず、図7に示される解析コマンドPOU_READは、解析対象となるプログラム(POU)を指定するための乃至は読み込むためのコマンドであり、その後の処理に於いて式番号で以って指定される、解析対象とすべきプログラム名(POU名)を、ユーザは解析対象セル内に指定する。図7に於いては、式番号S001で表示されるコマンドの実行によって、プログラム名がMAINであるPOUの読み込みが指定されている例が示されており、その解析結果として、プログラムMAINを要素としたPOUのコレクションが出力される。「コレクション」とは、データ要素の集合を意味するソフトウェア技術用語である。「POUのコレクション」とは、プログラム(POU)を要素とした集合のことである。尚、解析対象セルに解析対象とすべきPOU名が指定されていないときには、プログラムを構成する全てのPOUを要素とするコレクションが、解析結果として出力される。ここで、図2のPOU一覧抽出処理実行部14が解析コマンドPOU_READを実行する際の処理の流れを、図9のフローチャートに示す。図9に示される通り、解析コマンドPOU_READの処理に係る技術は、従来のクロスリファレンス作成の際に検索範囲としてプログラムを指定する技術と同じである。
(B)次に、図7に示される解析コマンドVAR_REFは、変数(デバイス)のクロスリファレンスを抽出するコマンドであり、図2の変数使用一覧抽出処理実行部12により実行される。そこで、ユーザは、解析コマンドVAR_REFの解析対象となるプログラムを指定する式番号を、解析対象セルに指定すると共に、クロスリファレンス抽出の条件となる変数(デバイス)を、解析条件セルに指定する。図7の式番号S002は、式番号S001で与えられる解析コマンドPOU_READの実行により保存部6からマイクロプロセッサ2内に読み込んだPOUであるプログラムMAINに於ける、全てのデバイスMに関するクロスリファレンスの抽出を指定する例を示しており、図2の変数使用一覧抽出処理実行部12は、その解析結果として、プログラムMAINに於いて変数(デバイス)Mが使用されている箇所を要素としたコレクションを出力する。
ここで、図2の変数使用一覧抽出処理実行部12により実行される解析コマンドVAR_REFの処理の流れを、図10のフローチャートに示す。解析コマンドVAR_REFの処理に係る技術の中で、解析コマンドVAR_REFの解析対象セルに指定されたPOUコレクションの要素が1である場合の処理(ステップS40:S41〜S43)は、解析コマンドVAR_REFの基底となる処理であり、従来のクロスリファレンス作成の技術と同じである。つまり、式番号S002で与えられる解析コマンドVAR_REFの実行は、従来のクロスリファレンス作成の技術で以って処理可能である。
又、変数使用一覧抽出処理実行部12は、式番号S002の解析処理の結果コレクションを、VAR_REF結果表示画面として、図1の表示部4の画面上に表示する。この結果コレクションに基づいて表示されるVAR_REF結果表示画面の例を、図11に示す。図11に示される様に、MAINラダープログラムに於いては、変数(デバイス)Mを使用している箇所が6箇所存在しており(デバイスM1,M3〜M6)、それらのクロスリファレンス結果が表示されている。デバイスM3は、ステップ番号5に於いてSET命令のオペランドとして使用されている他に、ステップ番号6に於いて、接点のオペランドとしても使用されており、それぞれがクロスリファレンス結果の要素である。尚、解析コマンドVAR_REFの処理結果を表示する技術も、従来のクロスリファレンス作成の技術と同じである。
又、関連するデバイスコメントファイルに、変数(デバイス)Mのコメントが記載されている場合のVAR_REF結果表示画面例を、併せて、図12に示す。
同様に、図7の式番号S003は、POUであるプログラムSUBの読み込みを指定する例を示しており、引き続き実行される式番号S004は、式番号S003の解析コマンドの実行により読み込まれたプログラムSUBに於ける、全ての変数(デバイス)Mに関するクロスリファレンスの抽出を指定する例を示している。ここに、式番号S004のVAR_REF結果表示画面例を、図13に示す。
(C)次に、図7に示される解析コマンドANDは、処理結果として抽出されたデータ集合の論理積を抽出するためのコマンドであり、図2のAND処理実行部17により実行される。そこで、ユーザは、論理積の対象となる2つの式番号を、それぞれ解析対象(第1引数)セル及び解析条件(第2引数)セルに指定する。図7の式番号S005は、式番号S002に於いて抽出されたクロスリファレンス結果と、式番号S004に於いて抽出されたクロスリファレンス結果との論理積の抽出を指定する例を示している。即ち、式番号S005は、プログラムMAINで使用され且つプログラムSUBに於いても使用される、全ての変数(デバイス)Mに関するクロスリファレンスの抽出を指定する例を示している。
AND処理実行部17が実行する解析コマンドANDの処理の流れを、図14及び図15のフローチャートに示す。図14に示されるPOUコレクション同士のAND処理は単純な論理積の処理であるが、クロスリファレンス(指定デバイスの使用箇所)のコレクション同士のAND処理も単純に論理積としてしまえば、どの様な場合に於いても結果は空となる。何故ならば、プログラムMAINに於いて変数(デバイス)M4が使用されている箇所と、プログラムSUBに於いて変数(デバイス)M4が使用されている箇所とは、変数(デバイス)が同じだけで互いに異なっているので、両使用箇所が同一とは見做されないからである。
本発明の本実施の形態に於ける特徴点は、このクロスリファレンス(指定デバイスの使用箇所)のコレクション同士のAND処理(図15参照。)にある。即ち、変数(デバイス)が同じであることを論理積の演算基準としている点に、その特徴点がある。例えば、プログラムMAINに於いて変数(デバイス)M4が使用されている箇所(図11参照。)と、プログラムSUBに於いて変数(デバイス)が使用されている箇所(図13参照。)とは、変数(デバイス)が共に同じであることより、論理積の結果として残される。そして、それぞれの要素を結果として残す点に、更なる特徴点がある。例えば、プログラムMAINに於いて変数(デバイス)M4が使用されている箇所と、プログラムSUBに於いて変数(デバイス)が使用されている箇所とでは、共に変数(デバイス)が同じであるので、それらの両方が結果コレクションの要素として残される。この様にAND処理実行部17が処理することにより、図7の式番号S005の結果は、図16に示される通りとなる。
(D)次に、図7に示される解析コマンドORは、処理結果として抽出された異なるデータの集合の間の論理和を抽出するためのコマンドであり、図2のOR処理実行部18により実行される。そこで、ユーザは、論理和の対象となる2つの式番号を、それぞれ解析対象(第1引数)セル及び解析条件(第2引数)セルに指定する。図7の式番号S006は、式番号S002で抽出されたクロスリファレンス結果と、式番号S004で抽出された別のクロスリファレンス結果との論理和の抽出を指定する例を示している。即ち、式番号S006は、プログラムMAIN又はプログラムSUBで使用される全ての変数(デバイス)Mに関するクロスリファレンスの抽出を指定する例を示している。
ORコマンドの処理に関しては、POUのコレクション同士のOR処理は単純な論理和の処理であり、クロスリファレンス(指定デバイスの使用箇所)のコレクション同士のOR処理もまた単純な論理和の処理である。図2のOR処理実行部18が実行する解析コマンドORの処理の流れは、図17及び図18に示される通りとなる。この様に処理することにより、図7の式番号S006の処理結果は、図19に示される通りとなる。
(E)次に、図7に示される解析コマンドNOTは、処理結果として抽出されたあるデータ集合の要素から別のデータ集合の要素を除外したデータ集合を抽出するためのコマンドであり、図2のNOT処理実行部19により実行される。そこで、ユーザは、母集団となる式番号を解析対象セルに指定し、その母集団から除外する要素の集合となる式番号を解析条件セルに指定する。図7の式番号S007は、式番号S002に於いて抽出されたクロスリファレンス結果から、式番号S004に於いて抽出されたクロスリファレンス結果を除外した後のクロスリファレンスの抽出を指定する例を示している。即ち、式番号S007は、プログラムMAINに於いて使用されている全ての変数(デバイス)Mの内で、プログラムSUBに於いては使用されてはいない変数(デバイス)Mに関するクロスリファレンスの抽出を指定する例を示している。
NOT処理実行部19が実行する解析コマンドNOTの処理の流れを、それぞれ図20及び図21に示す。POUのコレクション同士のNOT処理(図20参照。)は単純な除外処理であるが、クロスリファレンス(指定デバイスの使用箇所)のコレクション同士のNOT処理も単純に除外処理としてしまえば、どのような場合でも何ら除外されない結果となる。何故ならば、プログラムMAINで変数(デバイス)M4が使用されている箇所と、プログラムSUBで変数(デバイス)M4が使用されている箇所とは、変数(デバイス)が同じだけにすぎず、互いに異なるので、それらの箇所は同一とは見做されないからである。
本発明の本実施の形態は、このクロスリファレンス(指定デバイスの使用箇所)のコレクション同士のNOT処理(図21参照。)に、その特徴点を有する。即ち、本実施の形態の特徴点は、変数(デバイス)が同じであることを、除外処理の演算基準としている点にある。例えば、プログラムMAINで変数(デバイス)M4が使用されている箇所と、プログラムSUBで変数(デバイス)M4が使用されている箇所とは、変数(デバイス)が同じであることから、除外処理の対象として、コレクションから除外される。この様にNOT処理実行部19がNOT処理を行うことにより、図7の式番号S007の結果は、図22に示される通りになる。
図7の式番号S008では、第1引数及び第2引数は共にPOUコレクションであり、そのOR処理の結果は、プログラムMAINとプログラムSUBとを要素としたPOUコレクションとなる。
図7の式番号S009の解析コマンドVAR_REFは、第1引数のPOUコレクションの要素数が1つではなくて2つある場合の一例であり、以下、図10に基づいて処理フローを記載する。
この様な場合は、解析コマンドVAR_REFの処理の中で、更に解析コマンドVAR_REFの処理を再帰的に利用することで、解決される。図7の式番号S009の場合には、図2の変数使用一覧抽出処理実行部12は、先ず、要素が2つあるPOUコレクションの1つ目の要素であるプログラムMAINが解析対象セルに指定された解析コマンドVAR_REFを処理し(尚、解析コマンドVAR_REFの解析対象セルに指定されたPOUコレクションの要素が1の場合の処理は、解析コマンドVAR_REFの基底となる処理であり、その処理は上記(B)に於いて既述した通りとなる。)、その結果コレクションと式番号S009の本結果コレクション(この時点では同コレクションは要素の無い空コレクションである。)とのOR処理を行い(OR処理は、上記(D)で記述した通りである。)、その結果を式番号S009の本結果コレクションとして更新する(この時点では、同コレクションの内容は、プログラムMAINが解析対象セルに指定された解析コマンドVAR_REFの処理結果コレクションと同じ内容である。)。
次に、変数使用一覧抽出処理実行部12は、2つ目の要素であるプログラムSUBが解析対象セルに指定された解析コマンドVAR_REFを処理し、その結果コレクションと式番号S009の本結果コレクション(この時点では、本結果コレクションの内容は、プログラムMAINが解析対象セルに指定された解析コマンドVAR_REFの処理結果コレクションと同じ内容である。)とのOR処理を行い、その結果を式番号S009の本結果コレクションとして更新する。
そして、変数使用一覧抽出処理実行部12は、解析対象セルに指定されたPOUコレクションの全ての要素に対して、再帰的な解析コマンドVAR_REFの処理及びその結果コレクションと式番号S009の本結果コレクションとのOR処理を完了すると、変数(デバイス)をキーに式番号S009の本結果コレクションをソートし、ソート後の本結果コレクションを、最終的な式番号S009の結果コレクションとして出力する。
この様に処理することにより、式番号S009の結果は、式番号S006の結果と同じ図19に示される通りとなる。
解析コマンドVAR_REFは、解析対象であるPOUコレクションに対して線形な演算子となる。即ち、解析コマンドVAR_REFが線形なコマンド定義となる様に、処理フローは図10で与えられることにしている。従って、この様な再帰的な処理が可能となるのである。
解析対象をVAR_REF関数の引数として表記し、OR演算を+で表記することによって、解析コマンドVAR_REFの線形性を記載すると、式番号S009は、数1で与えられる式で表される。
又、解析コマンドVAR_REFは、解析条件である変数(デバイス)に対しても線形な演算子として定義されている。式番号S010は、数2で与えられる式で表され、解析コマンドVAR_REFを再帰的に利用することで、式番号S010の処理が可能となる。
但し、処理時間の観点から再帰的に処理せずに、図10の処理フローのステップS42に於いて、変数使用一覧抽出処理実行部12は、M[0−9]及びM[20−29]を同時に処理することとしても良い。結果は、何れも同じである。
<実施の形態1の効果>
以上に記載した通り、クロスリファレンス(指定デバイスの使用箇所)のコレクション同士の論理演算(AND処理/OR処理/NOT処理)を実現可能にしたことにより、所望のクロスリファレンスを抽出することが出来る。
又、POUのコレクション同士の論理演算(AND処理/OR処理/NOT処理)の結果コレクションが解析対象に指定された際のクロスリファレンスの作成を実現可能にしたことにより、所望のクロスリファレンスを抽出することが出来る。
又、解析コマンドVAR_REFは、解析対象であるPOUコレクションに対して線形な演算子として定義されている。加えて、解析コマンドVAR_REFは、解析条件である変数(デバイス)に対しても線形な演算子として定義されている。従って、クロスリファレンス演算と論理演算の組み合わせとをどのような順序で行っても、同じ結果を保証することが可能なプログラム解析支援機能を提供することが出来る。
(実施の形態2)
本実施の形態に於いては、プログラムに於ける変数(デバイス)の依存関係の有向グラフを抽出する技術の具体例として、ラダープログラムに於けるデバイスの依存関係の有向グラフを抽出する技術について、以下に記載する。
図23に示す様に、図2の場合と比較して、解析条件実行部11は、変数(デバイス)依存関係有向グラフ抽出を処理するための機能部である変数依存関係抽出処理部13を更に備えており、又、解析結果表示部20は、変数(デバイス)依存関係有向グラフ結果を図1の表示部4に表示するための画像データを作成・出力する変数依存関係表示部22を更に備えている。
尚、一般的なプログラムに於ける変数の依存関係(の有向グラフ)についての基本的な説明は、非特許文献2に於いて開示されている。
先ず、ラダープログラムに於ける変数の依存関係の有向グラフについて、図24〜図27を用いて記載する。
基本的なラダープログラムは、接点,コイル,及び母線により構成される。特に、左母線及び右母線の各々と接続しており、且つ、接点及び/又はコイルが配置されている横線(ラダー回路)を、以下では、Rung(ラング)と言う。従って、Rungは、ラダープログラムの構成要素である。又、接点及びコイル等のRungを構成する要素を、以下では、Instruction(インストラクション)と言う。図24のラダー構造は、ラダープログラムの構成要素であるRung、及び、そのRungの構成要素であるInstructionの具体例を示している。
Instructionは、Operator(命令)とOperand(オペランド)とから構成される。OperandはOperatorの引数であり,1つのOperandを必要とするOperatorもあれば、或いは、2つ又はそれ以上のOperandを必要とするOperatorもある。図25は、OperatorとOperandとの具体例を示している。
ラダープログラムでは、接点の値(状態)が変われば、同じRungに置かれているコイルの値(状態)も変わる。即ち、コイルとなっているデバイスの値は、接点となっているデバイスの値に依存する関係にある。この関係を一般化して記載すると、デバイスを書き出すOperatorを有するInstructionは、同じRungの上流に、つまり左側に置かれており、デバイスを読み込むOperatorを有するInstructionに依存する関係にある、ということになる。
2つ又はそれ以上のOperandを必要とするOperatorを有するInstructionの中にも、デバイスの依存関係が存在する。例えば、MOV命令は、第1オペランドとして読み込みデバイスを指定し、第2オペランドとして書き出しデバイスを指定するので、第2オペランドの値は、第1オペランドに依存する関係にある。
又、あるRungに置かれた書き出しデバイスが、別のRungの読み出しデバイスとして置かれている場合には、そのデバイスを介して、デバイスの依存関係が繋がっていく。
図26〜図28の各々は、ラダープログラムに於けるInstructionの依存関係及びデバイスの依存関係の具体例を示している。
次に、ラダープログラムに於けるデバイスの依存関係の有向グラフを抽出する技術について記載する。ここで、図29は、ユーザがプログラム解析条件を入力するための表示部4の画面例であり、図7の画面例の続きに該当している。
図29の解析コマンドVAR_FWDは、指定した変数(デバイス)が影響を与える変数(デバイス)を抽出し、その変数依存関係を示す有向グラフ(前向き依存関係の有向グラフ)を得るためのコマンドである。ユーザは、解析コマンドVAR_FWDに対しては、解析対象となるプログラムを指定する式番号を解析対象セルに指定し、且つ、前向き依存関係有向グラフの起点となる変数(デバイス)を解析条件セルに指定する。式番号S011は、変数使用一覧抽出処理実行部12より、式番号S008の処理結果として出力されたPOUコレクションに含まれる要素であるプログラムMAIN及びプログラムSUBに於ける、変数(デバイス)X222からの前向き依存関係の有向グラフの抽出を指定する例を示しており、変数依存関係抽出処理実行部13は、式番号S011の解析結果として、有向グラフの描画に必要なデータを、変数依存関係表示部22へ出力する。
変数依存関係抽出処理実行部13が、ユーザにより指定された変数(デバイス)からの前向き依存関係の有向グラフを、ユーザにより指定されたラダープログラムから抽出する処理技術は、既述した非特許文献3には開示されていない。そこで、変数依存関係抽出処理実行部13が実行する解析コマンドVAR_FWDの処理フローを、図30のフローチャートに示す。
以下に於いては、変数依存関係抽出処理実行部13が図29の式番号S011で指定される処理を図30のフローに沿って処理することにより、図31の結果が得られることを記載する。
図30に於けるステップS86に於いて、変数依存関係抽出処理実行部13は、式番号S011の第2引数である変数(デバイス)X222を要素としたデバイスコレクション[1]を生成する。
ステップS87に於いて、同部13は、デバイスコレクション[2]及び有向線分コレクション[2]を生成する。
ステップS90では、同部13は、プログラムMAINに於いて、デバイスコレクション[1]の要素である変数(デバイス)X222が影響を与える他の変数(デバイス)M3を抽出する。
ステップS91に於いて、同部13は、変数(デバイス)X222から変数(デバイス)M3への有向線分を、有向線分コレクション[2]に追加する。この際の有向線分のデータ構造としては、依存元デバイスと依存先デバイスとを保持しておけば十分である。但し、後述する実施の形態に鑑みて、有向線分のデータ構造にPOU名とステップ番号と命令とを合わせて保持しておくことも可能である。
次のステップS92に於いて、同部13は、抽出した変数(デバイス)M3がデバイスコレクション[1]又は[2]に存在するか否かを判断する。本例では、変数(デバイス)M3はデバイスコレクション[1]及び[2]に存在しないので、ステップS93に於いて、抽出した変数(デバイス)M3をデバイスコレクション[2]に追加する。
次のステップS94に於いて、同部13は、次のPOUコレクション要素であるプログラムSUBに対して同等の処理を実行しようとするが、本例に於いては、変数(デバイス)X222はプログラムSUBには存在しない。
そこで、同部13は、ステップS95に於いて、次の要素デバイスに対して処理を実行しようとするが、本例では、デバイスコレクション[1]には変数(デバイス)X222以外の要素は存在しない。そのため、ステップS96に於いて、同部13は「NO」と判断して、次のステップS97に移行する。
次に、ステップS97に於いて、同部13は、デバイスコレクションの変数dをインクリメントする。その結果、同部13は、d=2に設定した上で、ステップS87に於いて、デバイスコレクション[3]と、有向線分コレクション[3]とを生成する。
次のステップS90では、同部13は、プログラムMAINに於いて、デバイスコレクション[2]の要素である変数(デバイス)M3が影響を与える他の変数(デバイス)M4を抽出する。
その上で、ステップS91に於いて、同部13は、変数(デバイス)M3から変数(デバイス)M4への有向線分を、有向線分コレクション[3]に追加する。
ステップS92に於いて、同部13は、抽出した変数(デバイス)M4がデバイスコレクション[1]〜[3]に存在するか否かを判断するが、本例では、変数(デバイス)M4はデバイスコレクション[1]〜[3]に存在しないので、ステップS93に於いて、変数(デバイス)M4をデバイスコレクション[3]内に追加する。
ステップS94に於いて、同部13は、次の要素POUであるプログラムSUBに対する処理の実行を開始しようとするが、プログラムSUBには変数(デバイス)M3は存在しないので、同部13は、ステップS95に於いて、次の要素デバイスに対して処理を実行しようとするが、デバイスコレクション[2]内には変数(デバイス)M3以外の要素は存在しないので、当該処理を実行出来ない。ステップS96では、同部13は「YES」と判断して、次のステップS97に移行する。
ステップS97に於いて、同部13は、デバイスコレクションの変数dを更にインクリメントする。その結果、同部13は、d=3に設定した上で、ステップS87に於いて、デバイスコレクション[4]と、有向線分コレクション[4]とを生成する。
プログラムMAINに於いては、デバイスコレクション[3]の要素である変数(デバイス)M4が影響を与える他の変数(デバイス)は存在しない。
そこで、同部13は、次のPOUコレクションの要素であるプログラムSUBに於いて、デバイスコレクション[3]の要素である変数(デバイス)M4が影響を与える他の変数(デバイス)M7及びM8を抽出する(ステップS90)。
その上で、ステップS91に於いて、同部13は、変数(デバイス)M4から変数(デバイス)M7への有向線分と、変数(デバイス)M4から変数(デバイス)M8への有向線分とを、有向線分コレクション[4]に追加する。
ステップS92に於いて、同部13は、抽出した変数(デバイス)M7及びM8がデバイスコレクション[1]〜[4]に存在するか否かを判断するが、本例では、変数(デバイス)M7及びM8はデバイスコレクション[1]〜[4]には存在しないので、ステップS93に於いて、同部13は、変数(デバイス)M7及びM8をデバイスコレクション[4]内に追加する。
ステップS94に於いて、次の要素POUは存在しない。
そこで、同部13は、ステップS95に於いて、次の要素デバイスに対して処理を実行しようとするが、デバイスコレクション[3]内には変数(デバイス)M4以外の要素は存在しないので、当該処理を実行出来ない。ステップS96では、同部13は「YES」と判断して、次のステップS97に移行する。
ステップS97に於いて、同部13は、デバイスコレクションの変数dを更にインクリメントする。その結果、同部13は、d=4に設定した上で、ステップS87に於いて、デバイスコレクション[5]と、有向線分コレクション[5]とを生成する。
プログラムMAINに於いては、デバイスコレクション[4]の一つ目の要素である変数(デバイス)M7が影響を与える他の変数(デバイス)は存在しない。
そこで、同部13は、次のPOUコレクションの要素であるプログラムSUBに於いて、デバイスコレクション[4]の要素である変数(デバイス)M7が影響を与える他の変数(デバイス)YOC10を抽出する(ステップS90)。
その上で、ステップS91に於いて、同部13は、変数(デバイス)M7から変数(デバイス)YOC10への有向線分を、有向線分コレクション[5]に追加する。
次のステップS92に於いて、同部13は、抽出した変数(デバイス)YOC10がデバイスコレクション[1]〜[5]に存在するか否かを判断するが、本例では、変数(デバイス)YOC10はデバイスコレクション[1]〜[5]には存在しないので、ステップS93に於いて、同部13は、変数(デバイス)YOC10をデバイスコレクション[5]内に追加する。
ステップS94に於いて、次の要素POUは存在しない。
そこで、同部13は、ステップS95に於いて、次の要素デバイスに対して処理を実行しようとするが、次の変数(デバイス)M8が影響を与える他の変数(デバイス)はプログラムMAIN及びプログラムSUBには存在しないので、ステップS96では、同部13は「YES」と判断して、次のステップS97に移行する。
ステップS97に於いて、同部13は、デバイスコレクションの変数dを更にインクリメントする。その結果、同部13は、d=5に設定した上で、ステップS87に於いて、デバイスコレクション[6]と、有向線分コレクション[6]とを生成する。
プログラムMAINに於いては、デバイスコレクション[5]の要素である変数(デバイス)YOC10が影響を与える他の変数(デバイス)は存在しない。しかも、次のPOUコレクションの要素であるプログラムSUBに於いても、変数(デバイス)YOC10が影響を与える他の変数(デバイス)は存在しない。
そこで、同部13は、ステップS96に於いて、デバイスコレクション[6]に要素が存在するか否かを判断するが、デバイスコレクション[6]には要素が存在しないので、同部13は、ステップS98に移行する。
ステップS98に於いて、同部13は、要素が存在するデバイスコレクション[1]〜[5]と、有向線分コレクション[2]〜[5]とを、前向き依存関係の有向グラフ解析結果として、変数依存関係表示部22へ出力する。
その後、変数依存関係表示部22は、デバイスコレクション[1]〜[5]と、有向線分コレクション[2]〜[5]とに基づき与えられる前向き依存関係の有向グラフ解析結果を示す描画データを図1の表示部4に出力し、その結果、表示部4は、その画面上に、デバイスコレクション[1]〜[5]と、有向線分コレクション[2]〜[5]とに基づき与えられる前向き依存関係の有向グラフ解析結果を描画する。その描画結果は、図31に示される通りとなる。
又、関連するデバイスコメントファイルに、変数(デバイス)のコメントが記載されている場合の画面例を、図31に併せて示す。
尚、有向グラフの描画に関しては従来技術を用いれば良く、有向グラフの構造を示すデバイスコレクション[1]〜[5]と有向線分コレクション[2]〜[5]とに基づいて、具体的に有向グラフを描画する手順の記載は、本発明の主旨から外れるので、ここでは省略される。
又、図29の式番号S012で指定される処理についても、変数依存関係抽出処理実行部13は、同様に、図30に示されるフローに従って処理すれば良く、その結果、図32に示される結果が得られる。
<実施の形態2の効果>
ラダープログラムを解析対象としたデバイスの前向き依存関係の有向グラフの抽出を可能にし、又、ラダープログラムに於けるPOUのコレクション及びPOUのコレクション同士の論理演算(AND処理/OR処理/NOT処理)の結果を解析対象としたデバイスの前向き依存関係の有向グラフの抽出を可能にしたことにより、プログラム解析に係る作業を省力化することが出来る。
(実施の形態3)
本実施の形態は、ラダープログラムに於ける変数(デバイス)の後向き依存関係の有向グラフを抽出する技術について記載する。
この場合に用いられる解析コマンドVAR_BWDは、ユーザにより指定された変数(デバイス)に影響を与える変数(デバイス)を抽出し、その依存関係を示す有向グラフ(後向き依存関係の有向グラフ)を得るためのコマンドである。プログラム解析条件の入力に関しては、解析コマンドVAR_BWDに対して、ユーザは、図1の入力部5を用いて、解析対象となるプログラムを指定する式番号を解析対象セルに指定すると共に、後向き依存関係有向グラフの起点となる変数(デバイス)を解析条件セルに指定する。図29に於ける式番号S015は、式番号S008の論理処理結果として出力されたPOUコレクションに含まれる要素(要素POU)であるプログラムMAIN及びプログラムSUBに於ける、変数(デバイス)YC10からの後向き依存関係の有向グラフの抽出処理を指定する例を示しており、図23の変数依存関係抽出処理実行部13は、その解析結果として、後向き依存関係の有向グラフの描画に必要なデータを、変数依存関係表示部22に出力する。
ここで、図33は、変数依存関係抽出処理実行部13が実行する解析コマンドVAR_BWDの処理フローを示すフローチャートである。当該処理フローは、実施の形態2に於いて既述した、図30に於ける解析コマンドVAR_FWDの処理フローと殆ど同一ではあるが、以下の3点に於いて相違する。
即ち、図33のステップS109に於いては、図30のステップS90とは異なり、変数依存関係抽出処理実行部13は、指定された変数(デバイス)に影響を与える他の変数(デバイス)を抽出する。
更に、図33のステップS110に於いては、図30のステップS91とは異なり、変数依存関係抽出処理実行部13は、ステップS109で抽出した変数(デバイス)からの依存関係を示す有向線分を追加処理する。
更に、図33のステップS117に於いては、変数依存関係抽出処理実行部13は、図30のステップS98の処理に加えて、デバイスコレクション及び有向線分コレクションの深さの番号を逆転させる処理を行った後に、逆転処理後の結果を、デバイス依存関係有向グラフ解析結果として出力する。
例えば、デバイスコレクション[1]〜[n]が得られたとすると、変数依存関係抽出処理実行部13は、デバイスコレクション[1]をデバイスコレクション[n]として出力し、デバイスコレクション[2]をデバイスコレクション[n−1]として出力し、…、一般にデバイスコレクション[k]をデバイスコレクション[n−k+1]として出力し、…、デバイスコレクション[n]をデバイスコレクション[1]として出力する。
又、有向線分コレクション[2]〜[n]が得られたとすると、変数依存関係抽出処理実行部13は、有向線分コレクション[2]を有向線分コレクション[n]として出力し、有向線分コレクション[3]を有向線分コレクション[n−1]として出力し、…、一般に有向線分コレクション[k]を有向線分コレクション[n−k+2]として出力し、…、有向線分コレクション[n]を有向線分コレクション[2]として出力する。
但し、有向線分は、その依存元デバイスの深さを基準とした有向線分コレクションの深さに属することを原則としており、有向線分コレクションの番号を逆転させた際には、変数依存関係抽出処理実行部13は、全ての有向線分の要素を、その属するべき深さへと移動させる。
以上の様にして得られたデバイスコレクションと有向線分コレクションとに基づいて有向グラフを描画すると、描画結果は図34に示される通りとなる。
特に注意すべき点は、有向線分コレクションの番号を逆転させた際には、全ての有向線分の要素を、その属するべき深さへと移動させる点にある。
図34の場合、有向線分コレクションの番号を逆転させる前に於いて、有向線分コレクション[d=3]には、「X223→M6」,「D2→M6」,「D3→M6」,「M4→M7」及び「M5→M7」の5つの要素有向線分が存在し、有向線分コレクション[d=4]には、「M3→M4」,「X223→M5」,「D2→M5」及び「D3→M5」の4つの要素有向線分が存在する。
その上で、先ず、変数依存関係抽出処理実行部13が、有向線分コレクションの深さ番号だけを逆転させる処理を行うと、有向線分コレクション[d=4]には、「X223→M6」,「D2→M6」,「D3→M6」,「M4→M7」及び「M5→M7」の5つの要素有向線分が存在し、他方、有向線分コレクション[d=3]には、「M3→M4」,「X223→M5」,「D2→M5」及び「D3→M5」の4つの要素有向線分が存在することとなる。
そこで、変数依存関係抽出処理実行部13は、各有向線分を、その依存元デバイスの深さを基準とした有向線分コレクションの深さに属する様に、移動させる処理を行う。その結果、有向線分コレクション[d=3]の要素有向線分の内の3つの要素有向線分「X223→M5」,「D2→M5」及び「D3→M5」は、深さ番号逆転後の依存元デバイスの深さがd=3であるので、属するべき深さはd=4であることとなり、有向線分コレクション[d=4]に移動させられる。
これにより、結果として、有向線分コレクション[d=4]には、「X223→M6」,「D2→M6」,「D3→M6」,「M4→M7」,「M5→M7」,「X223→M5」,「D2→M5」及び「D3→M5」の8つの要素有向線分が存在し、有向線分コレクション[d=3]には、「M3→M4」より成る1つの要素有向線分が存在する。
<実施の形態3の効果>
ラダープログラムを解析対象とした変数(デバイス)の後向き依存関係の有向グラフの抽出を可能にし、又、ラダープログラムに於けるPOUのコレクション及びPOUのコレクション同士の論理演算(AND処理/OR処理/NOT処理)の結果を解析対象とした変数(デバイス)の後向き依存関係の有向グラフの抽出を可能にしたので、プログラム解析に係る作業を省力化することが出来る。
(実施の形態4)
本実施の形態では、ラダープログラムに於けるデバイスの依存関係の有向グラフ同士の論理演算(論理和OR処理)を可能にする技術について記載する。
解析コマンドORは、処理結果として抽出された異なるデータの集合の間の論理和を抽出するためのコマンドである。そこで、ユーザは、入力部5を用いて、論理和の対象となる2つの式番号の各々を、解析対象(第1引数)セル及び解析条件(第2引数)セルに指定する。図29の式番号S013は、式番号S011の処理により抽出されたデバイス依存関係有向グラフ抽出結果と、式番号S012の処理により抽出された別のデバイス依存関係有向グラフ抽出結果との論理和の抽出を指定する例を示している。
従って、本発明に於いては、クロスリファレンス同士の論理和を実施するための解析コマンドと、デバイス依存関係有向グラフ同士の論理和を実施するための解析コマンドとを、共に同じ解析コマンドORにより指定する例が、提案されている。
ここで、図35は、図23のOR処理実行部18が実行する解析コマンドORの処理フローを示すフローチャートである。
先ず、同部18は、図35のステップS120及びS121に於いて、論理和の対象となるデータ種別がデバイス依存関係有向グラフであるか否かを確認する。若し、データ種別がデバイス依存関係有向グラフでなければ、同部18は、既述した図18の処理フローを実行する。
他方、解析コマンドORがデバイス依存関係有向グラフ同士の論理和の演算である場合には、同部18は、第1引数と第2引数とのコレクションを結合するための前準備として、両引数の互いの深さレベルを合わせる処理を行い(ステップS122)、第1引数の全ての要素を上記結合のベースとする(ステップS125)。
次に、同部18は、第1引数の要素と重複している第2引数の要素を確認しながらコレクションの結合を行っていく。コレクションの結合に際しては、同部18は、先ず、デバイスコレクションの結合(論理和)を処理した上で(ステップS128)、有向線分コレクションの結合(論理和)を処理する(ステップS132)。
OR処理実行部18が図29の式番号S013を図35に示す各フローに従って処理していくと、図31及び図32の論理和の処理結果として、図36に示される結果が得られる。その点を、以下に、詳述する。
図35のステップS123に於いて、同部18は、重複している要素数が最も多い深さとして、変数(デバイス)M7及びM8が重複している深さである第1引数のd=4と第2引数のd=3との組合せを、抽出する。
次のステップS124に於いて、同部18は、第1引数の深さをそのままに維持した上で、第2引数のd=3を第1引数のd=4に合わせる様に、コレクションの深さを再設定する。両引数の内で何れの深さをそのままとするかの判断基準として、ステップS123に於いて抽出された組合せの内で、値の大きい方の引数の深さがそのままに維持される。但し、抽出された組合せの深さの値が共に同じ場合には、何れの引数についても深さの再設定の必要性は無い。式番号S013の処理の場合には、第2引数のコレクションの深さの値に+1だけ加算された後の深さの値のコレクション(デバイスコレクション[2]〜[4],有向線分コレクション[3]〜[5])が、以降のステップに於いて、取り扱われる。
次のステップS126に於いて、同部18は、深さ再設定後の第1引数と第2引数の深さの大きい方の値の分だけの深さのコレクションを生成する。式番号S013の処理の場合には、同部18は、デバイスOR結果コレクション[1]〜[5]及び有向線分OR結果コレクション[2]〜[5]のそれぞれを、空で生成する。
その上で、ステップS127に於いて、同部18は、第1引数のコレクション要素の全てを、OR結果コレクションへコピーする。コピーに際しては、同部18は、ステップS124に於いて第1引数の深さをそのままに維持したことに留意して、コピー元(第1引数)の深さとコピー先(OR結果コレクション)の深さとをそのままとした上でコピー処理を実行する。仮に、ステップS124に於いて、第1引数の深さが再設定されたのであれば、コピー元(第1引数)の深さとコピー先(OR結果コレクション)の深さとは、その再設定を考慮して設定される。
次のステップS128の詳細は、以下の記載の通りである。
ステップS129に於いて、同部18は、先ず、第2引数のデバイスコレクション[再設定後の深さ=2のデバイスコレクション]の要素である変数(デバイス)X223は、デバイスOR結果コレクションの全ての深さに存在しないと判定する結果(YES)、次のステップS130に於いて、変数(デバイス)X223を、デバイスOR結果コレクション[2]にコピーする。そして、同部18は、ステップS131に移行する。
次に、第2引数のデバイスコレクション[再設定後の深さ=3のデバイスコレクション]の要素である変数(デバイス)M5は、デバイスOR結果コレクションの全ての深さに存在しないので(ステップS129に於いてYESの判定)、同部18は、変数(デバイス)M5を、デバイスOR結果コレクション[3]にコピーする(ステップS130)。
次に、第2引数のデバイスコレクション[再設定後の深さ=3のデバイスコレクション]の要素である変数(デバイス)M6は、デバイスOR結果コレクションの全ての深さに存在しないので(ステップS129に於いてYESの判定)、同部18は、変数(デバイス)M6を、デバイスOR結果コレクション[3]にコピーする(ステップS130)。
次に、第2引数のデバイスコレクション[再設定後の深さ=4のデバイスコレクション]の要素である変数(デバイス)M7は、デバイスOR結果コレクション[4]の深さに存在するので(ステップS129に於いてNOの判定)、同部18は、変数(デバイス)M7のコピー処理を行わない。
次に、第2引数のデバイスコレクション[再設定後の深さ=4のデバイスコレクション]の要素である変数(デバイス)M8は、デバイスOR結果コレクション[4]の深さに存在するので(ステップS129に於いてNOの判定)、同部18は、変数(デバイス)M8のコピー処理を行わない。
次に、第2引数のデバイスコレクション[再設定後の深さ=4のデバイスコレクション]の要素である変数(デバイス)D5は、デバイスOR結果コレクションの全ての深さに存在しないので(ステップS129に於いてYESの判定)、同部18は、変数(デバイス)D5を、デバイスOR結果コレクション[4]にコピーする(ステップS130)。
次に、第2引数のデバイスコレクション[再設定後の深さ=4のデバイスコレクション]の要素である変数(デバイス)YC10は、デバイスOR結果コレクション[5]の深さに存在するので(ステップS129に於いてNOの判定)、同部18は、変数(デバイス)YC10のコピー処理を行わない。
次のステップS132の詳細は、以下の記載の通りである。
ステップS133に於いて、同部18は、先ず、第2引数の有向線分コレクション[再設定後の深さ=3の有向線分コレクション]の要素である有向線分「X223→M5」は、有向線分OR結果コレクションの全ての深さに存在しないと判定し(YES)、次のステップS134に於いて、同部18は、有向線分OR結果コレクション[3]にコピーする。コピーに際しては、同部18は、コピーしようとしている有向線分の依存元デバイスが存在するデバイスOR結果コレクションの深さに基づいて、有向線分OR結果コレクションの深さ(即ち、デバイスOR結果コレクションの深さ+1)へコピーすることに留意する。この場合、コピーしようとしている有向線分「X223→M5」の依存元デバイスX223はデバイスOR結果コレクション[2]に存在するので、同部18は、有向線分「X223→M5」を、有向線分OR結果コレクション[3]へコピーする。そして、同部18は、次のステップS135へ移行する。
その結果、次に、第2引数の有向線分コレクション[再設定後の深さ=4の有向線分コレクション]の要素である有向線分「M5→M7」は、有向線分OR結果コレクションの全ての深さに存在しないので(ステップS133に於いてYESの場合)、同部18は、有向線分「M5→M7」を、有向線分OR結果コレクション[4]にコピーする(ステップS134)。
次に、第2引数の有向線分コレクション[再設定後の深さ=4の有向線分コレクション]の要素である有向線分「M5→M8」は、有向線分OR結果コレクションの全ての深さに存在しないので(ステップS133に於いてYESの場合)、同部18は、有向線分「M5→M8」を、有向線分OR結果コレクション[4]にコピーする(ステップS134)。
次に、第2引数の有向線分コレクション[再設定後の深さ=4の有向線分コレクション]の要素である有向線分「M6→D5」は、有向線分OR結果コレクションの全ての深さに存在しないので(ステップS133に於いてYESの場合)、同部18は、有向線分「M6→D5」を、有向線分OR結果コレクション[4]にコピーする(ステップS134)。
次に、第2引数の有向線分コレクション[再設定後の深さ=4の有向線分コレクション]の要素である有向線分「M6→YC10」は、有向線分OR結果コレクションの全ての深さに存在しないので(ステップS133に於いてYESの場合)、同部18は、有向線分「M6→YC10」を、有向線分OR結果コレクション[4]にコピーする(ステップS134)。ここで、コピーしようとしている有向線分「M6→YC10」の依存先デバイスYC10はデバイスOR結果コレクション[5]に存在するが、依存元デバイスM6はデバイスOR結果コレクション[3]に存在するので、同部18は、有向線分「M6→YC10」を、有向線分OR結果コレクション[4]へコピーする。
次に、第2引数の有向線分コレクション[再設定後の深さ=5の有向線分コレクション]の要素である有向線分「M7→YC10」は、有向線分OR結果コレクション[5]の要素として存在するので、同部18は、有向線分「M7→YC10」をコピーしない。
以上の処理により得られるデバイスコレクション[1]〜[5]と有向線分コレクション[2]〜[5]とに基づいて描画される有向グラフは、図36に示す通りとなる。
有向線分は、あるデバイスから別のデバイスへの依存関係を示すものであり、変数(デバイス)と有向線分とは互いに密接に関連しているが、図23のOR処理実行部18が以上の様に処理する、即ち、先ずデバイスコレクションの結合(論理和)を処理した上で、その結果に基づいて有向線分コレクションの結合(論理和)を処理することによって、有向グラフ同士を矛盾なく論理和(OR)演算することが可能となる。
尚、以上の有向グラフ同士の論理和(OR)演算は、その有向グラフの何れか一方又はその両方が前向き依存関係であるか、後向き依存関係であるかを問わない処理である。
図29の式番号S013は、図23のOR処理実行部18がデバイス依存関係有向グラフ同士の論理和の処理を実施するためのコマンドを、図2のOR処理実行部18がクロスリファレンス同士の論理和の処理を実施するためのコマンド(図7の式番号S006の指定)と同じである、解析コマンドORで以って指定する例を示している。これに代えて、仮に、それぞれを別のコマンドで定義して(例えば、前者をVAR_FWD_BWD_OR、後者をVAR_REF_ORと定義する。)、使い分ける実施の形態に於いても、そこで用いる技術は本実施の形態で既述した技術と同じである。
又、本実施の形態を用いれば、解析コマンドVAR_FWDは、解析条件(デバイス依存関係有向グラフの起点)である変数(デバイス)に対して線形な演算子となる。換言すれば、解析コマンドVAR_FWDが線形なコマンド定義となる様に、デバイス依存関係有向グラフの論理和の処理フローは、図35に示す様に設定されている。
ここで、解析条件をVAR_FWD関数の引数として表記し、解析コマンドORを+で表記することにより、解析コマンドVAR_FWDの線形性を記載するならば、図29の式番号S014で指定される解析コマンドは、次の数3で与えられる式となる。
従って、式番号S014で示す様に、解析コマンドVAR_FWDの解析条件(デバイス依存関係有向グラフの起点)である変数(デバイス)がユーザにより列挙して指定された場合には、それぞれの変数(デバイス)を解析条件とした解析コマンドVAR_FWDの結果を論理和(OR)処理した後の結果を式番号S014の結果とする様な、再帰的な処理が可能となる。この点は、解析コマンドVAR_BWDについても同様である。
この事は、ユーザが、一々、式番号S011,S012,S013の様に、3つの条件式を入力しなくとも、一つの式番号S014の入力とその実行とにより、式番号S13の処理結果と同じ処理結果が得られることを、意味している。
又、ユーザが解析条件セルに複数の変数(デバイス)を列挙して指定する方法も、図7の式番号S010で示された解析コマンドVAR_REFと、図29の式番号S014で示された解析コマンドVAR_FWDとでは、同じであり、異なる解析コマンド間での解析条件指定方法の整合性も取れていて、何等矛盾しない。この点は、解析コマンドVAR_BWDについても同様である。
<実施の形態4の効果>
1)ラダープログラムに於ける変数(デバイス)の依存関係の有向グラフ同士の論理演算(論理和OR処理)を可能としたことにより、所望のデバイス依存関係有向グラフを抽出することが出来、プログラム解析に係る作業を省力化することが出来る。
2)クロスリファレンス同士の論理和を実施するためのコマンドと、デバイス依存関係有向グラフ同士の論理和を実施するためのコマンドとを、同じ解析コマンドORでユーザは指定することが可能である。仮に、それぞれを別のコマンド(例えば、前者を解析コメンドVAR_REF_ORと、後者を解析コマンドVAR_FWD_BWD_ORと定義する。)で定義して使い分ける実施の形態も考えられるが、解析コマンドORの対象となるデータ種別によってコマンドを使い分ける必要性が生じる。データ種別に拘らず、論理和を実施する解析コマンドはORと定義しておく方が、使い勝手が良い。解析コマンドを使い分ける場合には、ユーザは、それぞれのデータ種別に対応した論理和コマンドをヘルプ又は取扱説明書等で調べる必要性が生じるが、全ての解析コマンドを解析コマンドORで実施出来るのであれば、その様なユーザがヘルプ等を参照する必要性は全く無く、プログラム解析に係る作業を省力化することが出来る。
(実施の形態5)
本実施の形態では、ラダープログラムに於けるデバイスの依存関係の有向グラフ同士の論理積演算(論理積AND処理)を可能にする技術が、記載される。
解析コマンドANDは、処理結果として抽出された異なるデータの集合の間の論理積を抽出するためのコマンドであり、ユーザは、論理積の対象となる2つの式番号のそれぞれを、解析対象(第1引数)セル及び解析条件(第2引数)セルに指定する。図29の式番号S016は、式番号S014で抽出されたデバイス依存関係有向グラフ抽出結果と、式番号S015で抽出された別のデバイス依存関係有向グラフ抽出結果との論理積の抽出を指定する例を示している。
つまり、本発明に於いては、既述したクロスリファレンス同士の論理積を実施するための解析コマンドと、デバイス依存関係有向グラフ同士の論理積を実施するための解析コマンドとは、同じないしは共通の解析コマンドANDで以って指定される例を示している。
ここで、図37は、図23のAND処理実行部17が実行する解析コマンドANDの処理フローを示すフローチャートである。以下、図37に示す処理フローに基づき、本実施の形態に係るデバイス依存関係有向グラフのAND処理を記載する。
先ず、ステップS137及びS138に於いて、AND処理実行部17は、論理積の対象となるデータ種別がデバイス依存関係有向グラフであるか否かを確認する。この確認処理に於いて、データ種別がデバイス依存関係有向グラフでないことが確認された場合には、同部17は、単に、既述した図15の処理フローを行う。
他方、当該式番号が指定する解析コマンドがデバイス依存関係有向グラフ同士の論理積を実行することを指定する場合には、第1引数及び第2引数のコレクションの共通要素のみを抽出するための前準備として、両引数のコレクションの互いの深さレベルを合わせる処理を行い(ステップS139)、更に、変数(デバイス)及び有向線分の各々につき、空のAND結果コレクションを生成して、このAND結果コレクションを以って共通要素のみを抽出するためのベースとする(ステップS142)。
次に、同部17は、第2引数と重複している第1引数の要素を確認しながら、共通要素のみを抽出していく処理を行う。その共通要素の抽出に際しては、同部17は、先ず、デバイスコレクションの共通要素のみを抽出(論理積)した上で(ステップS143)、その後に、有向線分コレクションの共通要素のみを抽出(論理積)する(ステップS147)。
AND処理実行部17が図29の式番号S016を図37に示す以下の処理フローに基づいてAND処理を行うと、図36の結果と図34の結果の論理積として、図38に示される結果が得られる。その点を詳述する。
ステップS140に於いて、同部17は、第1引数である式番号S014のデバイスコレクションと第2引数である式番号S015のデバイスコレクションとに於いて、重複している要素の数が最も多い深さを抽出する。その結果、同部17は、重複の最も多い深さとして、変数(デバイス)M4と変数(デバイス)M5とが重複している深さである、第1引数のd=3及び第2引数のd=3の組合せを、抽出する。
次のステップS141に於いて、同部17は、第1引数の深さと第2引数の深さとの何れをそのまま維持するかの判断基準の適用として、ステップS140で抽出した組合せの値の内で大きい値の方の深さをそのまま維持することとし、他方の深さを再設定する。これによって、再設定された深さが、以降のステップでは取り扱われる。図29の式番号S016の処理の場合には、ステップS140で抽出された組合せの深さの値が共に同じであり(d=3)、何れの引数についても、その深さの再設定の必要性は無い。
次のステップS141に於いて、同部17は、深さ再設定後の第1引数の深さと第2引数の深さの内でその値が大きい方の当該値の分だけの深さのAND結果コレクションを生成する。図29の式番号S016の処理の場合には、第1引数及び第2引数の何れのコレクションについてもその深さは同じであり(d=5)、デバイスAND結果コレクション[1]〜[5]と、有向線分AND結果コレクション[2]〜[5]とを、共に空の内容のAND結果コレクションとして生成する。
次のステップS144に於いて、同部17は、先ず、第1引数のデバイスコレクション[1]の要素である変数(デバイス)X222は、第2引数のデバイスコレクション[1]に存在すると判定するので、その次のステップS145に於いて、同部17は、デバイスAND結果コレクション[1]に、変数(デバイス)X222をコピーする。
次に、第1引数のデバイスコレクション[2]の要素である変数(デバイス)M3は、第2引数のデバイスコレクション[2]に存在するので、ステップS145に於いて、同部17は、変数(デバイス)M3を、デバイスAND結果コレクション[2]にコピーする。
次に、第1引数のデバイスコレクション[2]の要素である変数(デバイス)X223は、第2引数のデバイスコレクション[3]に存在するので、ステップS145に於いて、同部17は、変数(デバイス)X223を、デバイスAND結果コレクション[2]にコピーする。
次に、第1引数のデバイスコレクション[3]の要素である変数(デバイス)M4は、第2引数のデバイスコレクション[3]に存在するので、ステップS145に於いて、同部17は、変数(デバイス)M4を、デバイスAND結果コレクション[3]にコピーする。
次に、第1引数のデバイスコレクション[3]の要素である変数(デバイス)M5は、第2引数のデバイスコレクション[3]に存在するので、ステップS145に於いて、同部17は、変数(デバイス)M5を、デバイスAND結果コレクション[3]にコピーする。
次に、第1引数のデバイスコレクション[3]の要素である変数(デバイス)M6は、第2引数のデバイスコレクション[4]に存在するので、ステップS145に於いて、同部17は、変数(デバイス)M6を、デバイスAND結果コレクション[3]にコピーする。
次に、第1引数のデバイスコレクション[4]の要素である変数(デバイス)M7は、第2引数のデバイスコレクション[4]に存在するので、ステップS145に於いて、同部17は、変数(デバイス)M7を、デバイスAND結果コレクション[4]にコピーする。
次に、第1引数のデバイスコレクション[4]の要素である変数(デバイス)M8は、第2引数のデバイスコレクションの全ての深さに存在しないので、同部17はコピー処理を行わない。
次に、第1引数のデバイスコレクション[4]の要素である変数(デバイス)D5は、第2引数のデバイスコレクションの全ての深さに存在しないので、同部17はコピー処理を行わない。
次に、第1引数のデバイスコレクション[5]の要素である変数(デバイス)YC10は、第2引数のデバイスコレクション[5]に存在するので、ステップS145に於いて、同部17は、変数(デバイス)YC10を、デバイスAND結果コレクション[5]にコピーする。
次のステップS148では、先ず、第1引数の有向線分コレクション[2]の要素である有向線分「X222→M3」は、第2引数の有向線分コレクション[2]に存在するので、同部17は、ステップS149に於いて、有向線分「X222→M3」を、有向線分AND結果コレクション[2]にコピーする。コピーに際しては、同部17は、コピーしようとしている有向線分の依存元デバイスが存在するデバイスAND結果コレクションの深さに基づいて、有向線分AND結果コレクションの深さ、即ち、(デバイスAND結果コレクションの深さ+1)の深さへコピーする。この場合、コピーしようとしている有向線分「X222→M3」の依存元デバイスX222はデバイスAND結果コレクション[1]に存在するので、同部17は、有向線分「X222→M3」を有向線分AND結果コレクション[2]へコピーする。
次に、第1引数の有向線分コレクション[3]の要素である有向線分「M3→M4」は、第2引数の有向線分コレクション[3]に存在するので、同部17は、ステップS149に於いて、有向線分「M3→M4」を、有向線分AND結果コレクション[3]にコピーする。
次に、第1引数の有向線分コレクション[3]の要素である有向線分「X223→M5」は、第2引数の有向線分コレクション[4]に存在するので、同部17は、ステップS149に於いて、有向線分「X223→M5」を、有向線分AND結果コレクション[3]にコピーする。
次に、第1引数の有向線分コレクション[3]の要素である有向線分「X223→M6」は、第2引数の有向線分コレクション[4]に存在するので、同部17は、ステップS149に於いて、有向線分「X223→M6」を、有向線分AND結果コレクション[3]にコピーする。
次に、第1引数の有向線分コレクション[4]の要素である有向線分「M4→M7」は、第2引数の有向線分コレクション[4]に存在するので、同部17は、ステップS149に於いて、有向線分「M4→M7」を、有向線分AND結果コレクション[4]にコピーする。
次に、第1引数の有向線分コレクション[4]の要素である有向線分「M4→M8」は、第2引数の有向線分コレクションの全ての深さに存在しないので、同部17は、コピー処理を行わない。
次に、第1引数の有向線分コレクション[4]の要素である有向線分「M5→M7」は、第2引数の有向線分コレクション[4]に存在するので、同部17は、ステップS149に於いて、有向線分「M5→M7」を、有向線分AND結果コレクション[4]にコピーする。
次に、第1引数の有向線分コレクション[4]の要素である有向線分「M5→M8」は、第2引数の有向線分コレクションの全ての深さに存在しないので、同部17は、コピー処理を行わない。
次に、第1引数の有向線分コレクション[4]の要素である有向線分「M6→D5」は、第2引数の有向線分コレクションの全ての深さに存在しないので、同部17は、コピー処理を行わない。
次に、第1引数の有向線分コレクション[4]の要素である有向線分「M6→YC10」は、第2引数の有向線分コレクション[5]に存在するので、同部17は、ステップS149に於いて、有向線分「M6→YC10」を、有向線分AND結果コレクション[4]にコピーする。
次に、第1引数の有向線分コレクション[5]の要素である有向線分「M7→YC10」は、第2引数の有向線分コレクション[5]に存在するので、同部17は、ステップS149に於いて、有向線分「M7→YC10」を、有向線分AND結果コレクション[5]にコピーする。
以上の処理により得られたデバイスコレクション[1]〜[5]及び有向線分コレクション[2]〜[5]に基づいて有向グラフを描画すると、図38に示される結果となる。
有向線分は、あるデバイスから別のデバイスへの依存関係を示すものであり、デバイスと有向線分とは互いに密接に関連しているが、この様に、AND処理実行部17が、先ずデバイスコレクションの共通要素の抽出(論理積)を処理してから、その結果に基づいて有向線分コレクションの共通要素の抽出(論理積)を処理することによって、有向グラフ同士を矛盾無く論理積AND演算することが可能となる。
尚、有向グラフ同士の論理積AND演算は、その有向グラフの何れか又はその両方が前向き依存関係であるか、それとも後向き依存関係であるかを、問わない。
図29の式番号S016は、図23のAND処理実行部17がデバイス依存関係有向グラフ同士の論理積の処理を実施するためのコマンドを、図2のAND処理実行部17がクロスリファレンス同士の論理積の処理を実施するためのコマンドと同じである、解析コマンドANDで以って指定する例を示している。これに代えて、仮に、それぞれを別のコマンドで定義して(例えば、前者をVAR_FWD_BWD_AND、後者をVAR_REF_ANDと定義する。)、使い分ける実施の形態に於いても、そこで用いられる技術は本実施の形態で既述した技術と同じである。
又、本実施の形態の処理方法を用いて図29の式番号S017を処理する場合には、その結果は図38の下部に示される様になる。第1引数で指定された有向グラフの深さが結果に反映されるので、式番号S016の結果と式番号S017の結果とを比べると、要素デバイス及び要素有向線分が属しているコレクションの深さが異なってはいるが、デバイス依存関係有向グラフの構造は共に同じであることがわかる。
尚、デバイス依存関係有向グラフの構造のみならず、要素デバイス及び要素有向線分が属しているコレクションの深さまでも同じにするための処理を、本実施の形態の出力結果に対して更に追加的に実施することが可能であるが、それは本発明の主旨から外れるので、その記載を省略する。
<実施の形態5の効果>
1)ラダープログラムに於けるデバイスの依存関係の有向グラフ同士の論理演算(論理積AND処理)を可能としたことにより、所望のデバイス依存関係有向グラフを抽出することが出来、プログラム解析に係る作業を省力化することが出来る。
2)クロスリファレンス同士の論理積を実施するためのコマンドと、デバイス依存関係有向グラフ同士の論理積を実施するためのコマンドとを、同じ解析コマンドANDで以って指定することが可能である。仮に、それぞれを別のコマンド(例えば、前者をVAR_REF_AND、後者をVAR_FWD_BWD_AND)で定義して使い分ける実施の形態も考えられるが、解析コマンドANDの対象となるデータ種別によってコマンドを使い分ける必要性が生じる。データ種別に関わらず、論理積を実施するコマンドは解析コマンドANDと定義しておく方が、使い勝手が良い。コマンドを使い分ける場合には、ユーザは、それぞれのデータ種別に対応した論理積コマンドをヘルプ又は取扱説明書等で調べる必要性が生じるが、全てを解析コマンドANDで以って実施出来るのであれば、その必要性が無く、プログラム解析に係る作業を省力化することが出来る。
(実施の形態6)
本実施の形態では、ラダープログラムから抽出したデバイス依存関係の有向グラフに存在するデバイスに関するクロスリファレンスの抽出を可能にする技術について記載する。
解析コマンドVAR_REFは、既述した通り、変数(デバイス)のクロスリファレンスを抽出するためのコマンドであるが、図29の式番号S018では、解析対象となるデバイス依存関係有向グラフを指定する式番号が解析対象セルに指定され、クロスリファレンス抽出の条件となる変数(デバイス)が解析条件セルに指定されている例を示している。式番号S018では、解析条件セルに変数(デバイス)が指定されていないが、これは全てのデバイスを指定する例を示している。
ここで、図39は、図23の変数使用一覧抽出処理実行部12が実行する解析コマンドVAR_REFの処理フローを示すフローチャートである。
先ず、変数使用一覧抽出処理実行部12は、ステップS152に於いて、解析対象となるデータ種別がデバイス依存関係有向グラフであるか否かを確認する。若し、データ種別がデバイス依存関係有向グラフでなければ、同部12は、既述した図10の処理フローを行う。
他方、解析対処セルで指定された式番号が、デバイス依存関係有向グラフからのクロスリファレンスの抽出を指定する場合には、同部12は、前準備として、空の本結果コレクションを生成する(ステップS153)。
次に、変数使用一覧抽出処理実行部12は、デバイス依存関係有向グラフの有向線分コレクションの各要素から、クロスリファレンス情報を抽出する処理を行う(ステップS154)。尚、この処理を行うためには、図23の変数依存関係抽出処理実行部13が解析コマンドVAR_FWD又はVAR_BWDに基づきデバイス依存関係有向グラフを抽出する処理を実行する際に、有向線分のデータ構造として、図31により示されるデータを保持する様にしておく必要性がある。
変数使用一覧抽出処理実行部12が図29の式番号S018を図39に示す処理フローに基づいて処理を行うことにより、図31で示された式番号S011のデバイス依存関係有向グラフのデータから、図40の結果が得られる。この点の処理を以下に記載する。
式番号S018では解析条件が空欄であり、全デバイスを抽出対象としていることから、変数使用一覧抽出処理実行部12は、ステップS155に於いては当然に「YES」と判断し、次のステップS156に於いても、有向線分コレクション[2]の要素有向線分の依存元デバイスX222は、本結果コレクション(この時点では空。)に存在しないと判断するので、ステップS157に於いて、「POU名=MAIN,ステップ番号=4,命令=LD」の情報と共に、依存元デバイスX222を本結果コレクションに追加する。
次のステップS158では当然に「YES」と判断され、ステップS159に於いて、有向線分コレクション[2]の要素有向線分の依存先デバイスM3は、本結果コレクションに存在しないので、ステップS160に於いて、同部12は、「POU名=MAIN,ステップ番号=5,命令=SET」の情報と共に、依存先デバイスM3を本結果コレクションに追加する。
ステップS156に於いて、次の有向線分コレクション[3]の要素有向線分の依存元デバイスM3は、本結果コレクションに存在しない(同じ変数(デバイス)M3は既に存在しているが、POU名,ステップ番号,及び命令まで全て同じの変数(デバイス)M3は存在しない。)ので、ステップS157に於いて、同部12は、「POU=MAIN,ステップ番号=6,命令=LD」の情報と共に、依存元デバイスM3を本結果コレクション追加する。
ステップS159に於いて、有向線分コレクション[3]の要素有向線分の依存先デバイスM4は、本結果コレクションに存在しないので、ステップS160に於いて、同部12は、「POU名=MAIN,ステップ番号=7,命令=RST」の情報と共に、依存先デバイスM4を本結果コレクションに追加する。
ステップS156に於いて、次の有向線分コレクション[4]の1つ目の要素有向線分の依存元デバイスM4は、本結果コレクションに存在しない(同じ変数(デバイス)M4は既に存在しているが、POU名,ステップ番号,及び命令まで全て同じの変数(デバイス)M4は存在しない。)ので、ステップS157に於いて、同部12は、「POU=SUB,ステップ番号=0,命令=LDI』の情報と共に、依存元デバイスM4を本結果コレクションに追加する。
ステップS159に於いて、有向線分コレクション[4]の1つ目の要素有向線分の依存先デバイスM7は、本結果コレクションに存在しないので、ステップS160に於いて、同部12は、「POU=SUB,ステップ番号=2,命令=OUT」の情報と共に、依存先デバイスM7を本結果コレクションに追加する。
ステップS156に於いて、有向線分コレクション[4]の2つ目の要素有向線分の依存元デバイスM4は、本結果コレクションに存在する(POU名,ステップ番号,及び命令まで全て同じ変数(デバイス)M4が存在する。)ので、同部12は、本結果コレクションへの追加処理を行わない。
ステップS159に於いて、有向線分コレクション[4]の2つ目の要素有向線分の依存先デバイスM8は、本結果コレクションに存在しないので、ステップS160に於いて、同部12は、「POU名=SUB,ステップ番号=3,命令=OUT」の情報と共に、存先デバイスM8を本結果コレクションに追加する。
ステップS156に於いて、次に有向線分コレクション[5]の要素有向線分の依存元デバイスM7は、本結果コレクションに存在しない(確かに同じ変数(デバイス)M7は存在するが、POU名,ステップ番号,及び命令の全てが同じ変数(デバイス)M7は存在しない。)ので、ステップS157に於いて、同部12は、「POU名=SUB,ステップ番号=8,命令=AND」の情報と共に、依存元デバイスM7を本結果コレクションに追加する。
ステップS159に於いて、有向線分コレクション[5]の要素有向線分の依存先デバイスYC10は、本結果コレクションに存在しないので、ステップS160に於いて、同部12は、「POU名=SUB,ステップ番号=9,命令=OUT」の情報と共に、依存先デバイスYC10を本結果コレクションに追加する。
最後に、ステップS162に於いて、同部12は、変数(デバイス)をキーに本結果コレクションをソートして、ソートにより得られた結果を解析結果として出力する。その解析結果を与える信号を受信して、図23の変数使用一覧表示部21は図1の表示部4の画面に解析結果を表示するための表示信号を出力する。
又、図29の次の式番号S019も同部12は同様に処理し(但し、図39のステップS155及びステップS158に於いて、変数(デバイス)Mのみが対象として抽出される。)、その結果、図41に示される結果を得る。
<実施の形態6の効果>
1)指定した変数(デバイス)に関して依存関係のある変数(デバイス)のクロスリファレンスを抽出することが可能となり、所望のクロスリファレンスを抽出することが出来る。
2)これと同じことは、デバイス依存関係の有向グラフを抽出する際に指定したラダープログラムと、そのラダープログラムから抽出したデバイス依存関係の有向グラフに存在するデバイスとを、別のクロスリファレンスのコマンド式に対して、一々、ユーザが手動で入力して、解析コマンドVAR_REF(S008,X222,M3,M4,M7,M8,YC10)の様に指定しても同じ結果が得られるが、本実施の形態によれば、その入力の手間を省くことが可能となる。
(実施の形態7)
本実施の形態は、ラダープログラムに於けるサブルーチンコール(あるPOUから別のPOUをコールする。)の依存関係(以下「POUコール依存関係」と言う。)の有向グラフを抽出する技術に関する。
ここで、図42は、図1のプログラム解析支援装置に於けるマイクロプロセッサ2に於ける、本実施の形態に係る機能部分を示すソフトウェア構成図である。図42と図23とを比較すると、図42の機能部構成に於いては、解析条件実行部11は、POUコール依存関係の有向グラフの抽出処理を実行するためのPOU依存関係抽出処理実行部15を更に備えており、解析結果表示部20は、更に、POU一覧表示部23と、POUコール依存関係有向グラフ結果を表示するためのPOU依存関係表示部24とを備えている。
先ず、ラダープログラムに於けるPOUコール依存関係を、図43を用いて、以下に記載する。
POUコールは、CALL命令を使用し、コールする先のPOUのプログラムの先頭に記述されたプログラムポインタはCALL命令の引数に指定される。例えば、プログラムMAIN中には、プログラムポインタP10をコールする記述が成されており、プログラムポインタP10がプログラムの先頭に記述された、POU名がP10であるPOUがコールされる。この様に、図43は、プログラムMAINとプログラムSUB1,SUB2とを除いて、その他のプログラムにはプログラムポインタと同じPOU名が付与された例を示すと共に、プログラムMAINはスキャン実行を設定し、プログラムSUB1及びSUB2はスキャン実行又は周期実行又は初期実行を設定し、プログラムポインタと同じPOU名を付与されたその他のプログラムは待機実行を設定した例を、示している。尚、図43は、各POUのプログラム記述に於いて、コールに関連する部分だけを抜き出して図示しており、コールに関連しない部分のラダーは省略されている。
次に、ラダープログラムに於けるPOUコール依存関係の有向グラフを抽出する技術について記載する。
ここで、図44は、ユーザが図1の入力部5を用いてプログラム解析条件を入力するために表示部4の画面上に表示された例を示す図であり、既述した図7及び図29に引き続く図である。
解析コマンドPOU_FWDは、指定されたPOUがコールするPOUを(更には、そのPOUがコールするPOU…を再帰的に)抽出し、その依存関係を示す有向グラフ(POUコール前向き依存関係の有向グラフ)を得るためのコマンドである。ユーザは、解析コマンドPOU_FWDに対しては、解析対象となるプログラム範囲を指定する式番号を解析対象セルに指定し、POUコール前向き依存関係有向グラフの起点となるPOUを解析条件セルに指定する。
図44の式番号S020に於いては、解析コマンドPOU_READの解析対象セルにプログラム(POU)は指定されていないが、これは、プログラムを構成する全POUの読み込みを指定する例を示している。ここでは、図43に示された全てのプログラムが読み込まれ、その結果として、図44には、読み込んだ数21が、結果件数のセルに表示されている例が、示されている。
図44の式番号S021は、式番号S020の実行結果として各部14,23により出力されたコレクションに含まれる要素POU、即ち、プログラムを構成するPOU全体に於ける、プログラムMAINからのPOUコール前向き依存関係の有向グラフの抽出を指定する例を示しており、図42のPOU依存関係抽出処理実行部15は、当該式番号S021の解析結果として、POUコール前向き依存関係の有向グラフのデータをPOU依存関係表示部24へ出力し、同部24は、当該有向グラフの描画に必要な表示データを、図1の表示部4へ出力する。
次に、指定されたPOUからのPOUコール前向き依存関係の有向グラフを、指定されたラダープログラムから抽出する技術について、図42のPOU依存関係抽出処理実行部15が実行する解析コマンドPOU_FWDの処理フローを、図45に示す。図45に於ける処理の流れ及び図46に於けるデータ構造は、デバイス依存関係有向グラフを抽出する解析コマンドVAR_FWDの場合に類似している。
POU依存関係抽出処理実行部15が図44の式番号S021を図45に示される処理フローに従って処理すると、図46に示される結果が得られる。以下、この点を詳述する。
ステップS170に於いて、POU依存関係抽出処理実行部15は、POUコレクション[1]の要素POUであるプログラムMAINの中でコールされているプログラムポインタP10と同じ名のPOUが、第1引数のPOUコレクションに存在するので、同POUコレクションより、MAINがコールする他のPOUであるP10を抽出する。
ステップS172に於いて、同部15は、プログラムMAINから他のPOUであるP10への有向線分を、有向線分コレクション[2]に追加する。この際の有向線分のデータ構造としては、依存元POUと依存先POUとが保持されておれば十分である。但し、後述する他の実施の形態の場合を鑑みるときには、有向線分のデータ構造にステップ番号を合わせて保持しておくことも可能である。
ステップS173に於いては、P10はPOUコレクション[1]〜[2]には存在しないので、同部15は「NO」と判断し、ステップS174に於いて、同部15は、P10をPOUコレクション[2]に追加する。
本例では、プログラムMAINからコールされて抽出されるPOUは、プログラムP10だけであるので、ステップS175は実行されない。
ステップS176に於いて、同部15は、POUコレクション[1]の次の要素POUデバイスに対して処理しようとするが、本例では、POUコレクション[1]にはプログラムMAIN以外の要素は存在しないので、同部15はステップS177に移行し、「YES」と判定する結果、次のステップS178に於いて、同部15は、変数dを1だけインクリメントする。
インクリメント処理後のステップS170に於いて、POUコレクション[2]の要素POUであるプログラムP10の中でコールされているプログラムP11及びP12が、第1引数のPOUコレクション内に存在するので、同部15は、プログラムP11及びP12を第1引数のPOUコレクションより抽出する。
ステップS172に於いて、同部15は、プログラムP10からP11への有向線分を、有向線分コレクション[2]に追加する。
ステップS173に於いて、プログラムP11はPOUコレクション[1]〜[3]に存在しないので、ステップS174に於いて、同部15は、P11をPOUコレクション[3]内に追加する。
同部15は、抽出した次のPOUであるP12を処理する(ステップS176)。
ステップS172に於いて、同部15は、P10からP12への有向線分を、有向線分コレクション[2]に追加する。
ステップS173に於いて、プログラムP12はPOUコレクション[1]〜[3]に存在しないので、ステップS174に於いて、同部15は、P12をPOUコレクション[3]内に追加する。
同部15は、ステップS176に於いて、POUコレクション[2]の次の要素POUに対して処理しようとするが、POUコレクション[2]にはP10以外の要素POUが存在しないので、同部15はステップS177に移行し、「YES」と判定する結果、次のステップS178に於いて、同部15は、変数dを1だけインクリメントする。
インクリメント処理に引き続くステップS170に於いて、POUコレクション[3]の要素POUであるP11のプログラムの中でコールされているプログラムP35及びP36が、第1引数のPOUコレクション内に存在するので、同部15は、P35及びP36を、第1引数のPOUコレクションより抽出する。
ステップS172に於いて、同部15は、P11からP35への有向線分を、有向線分コレクション[4]に追加する。
ステップS173に於いて、P35はPOUコレクション[1]〜[4]に存在しないので、ステップS174に於いて、同部15は、P35をPOUコレクション[4]に追加する。
同部15は、抽出した次のPOUであるP36を処理する(ステップS175)。
ステップS172に於いて、同部15は、P11からP36への有向線分を、有向線分コレクション[4]に追加する。
ステップS173に於いて、P36はPOUコレクション[1]〜[4]に存在しないので、ステップS174に於いて、同部15は、P36をPOUコレクション[4]に追加する。
ステップS176に於いて、同部15は、POUコレクション[3]の次の要素POUデバイスであるP12を処理する。
先ず、ステップS170に於いて、同部15は、P12のプログラムの中でコールされているP37及びP38が、第1引数のPOUコレクションに存在するので、P37及びP38を抽出する。
ステップS172に於いて、同部15は、P12からP37への有向線分を、有向線分コレクション[4]に追加する。
ステップS173に於いて、P37はPOUコレクション[1]〜[4]に存在しないので、ステップS174に於いて、同部15は、P37をPOUコレクション[4]に追加する。
同部15は、抽出した次のPOUであるP38を処理する(ステップS175)。
ステップS172に於いて、同部15は、P12からP38への有向線分を、有向線分コレクション[4]に追加する。
ステップS173に於いて、P38はPOUコレクション[1]〜[4]に存在しないので、ステップS174に於いて、同部15は、P38をPOUコレクション[4]に追加する。
次のステップS175〜S178を経て、ステップS170に於いて、同部15は、POUコレクション[4]の要素POUであるP35のプログラムの中でコールされているP39が、第1引数のPOUコレクションに存在するので、P39を抽出する。
ステップS172に於いて、同部15は、P35からP39への有向線分を、有向線分コレクション[5]に追加する。
ステップS173に於いて、P39はPOUコレクション[1]〜[5]に存在しないので、ステップS174に於いて、同部15は、P39をPOUコレクション[5]に追加する。
ステップS175に於いて、抽出されたPOUはP39だけである。同部15は、ステップS176へ移行する。
ステップS170に於いて、同部15は、POUコレクション[4]の次の要素POUであるP36を処理しようとするが、P36のプログラムの中で、他のPOUはコールされてはいない。
ステップS170に於いて、同部15は、POUコレクション[4]の次の要素POUであるP37を処理しようとするが、P37のプログラムの中で、他のPOUはコールされてはいない。
ステップS170に於いて、同部15は、POUコレクション[4]の次の要素POUであるP38を処理しようとするが、P38のプログラムの中で、他のPOUはコールされてはいない。
ステップS177及びステップS178を経て、同部15は、ステップS170に於いて、POUコレクション[5]の要素POUであるP39を処理しようとするが、P39のプログラムの中で他のPOUはコールされていないので、同部15は、ステップS177に於いて「NO」と判断して、ステップS179へ移行し、POUコール依存関係有向グラフ解析結果を出力する。
同様に、POU依存関係抽出処理実行部15が図44の式番号S022を処理すると、プログラムSUB1を起点としたPOUコール前向き依存関係有向グラフとして、図47に示す結果が得られる。
<実施の形態7の効果>
ラダープログラムを解析対象としたPOUコールの前向き依存関係の有向グラフの抽出を可能としたことにより、プログラム解析に係る作業を省力化することが出来る。
(実施の形態8)
解析コマンドPOU_BWDは、ユーザが指定したPOUをコールするPOUを(更には、そのPOUをコールするPOUを、…を再帰的に)抽出し、その依存関係を示す有向グラフ(POUコール後向き依存関係の有向グラフ)を得るためのコマンドである。解析コマンドPOU_BWDに対しては、ユーザは、解析対象となるプログラム範囲を指定する式番号を解析対象セルに指定し、POUコール後向き依存関係有向グラフの起点となるPOUを解析条件セルに指定する。
図44の式番号S025は、式番号S020の結果として出力されたPOUコレクションに含まれる要素POU、即ち、プログラムを構成するPOU全体に於ける、P39からのPOUコール後向き依存関係の有向グラフの抽出を指定する例を示しており、その解析結果として、有向グラフの描画に必要なデータが出力される。
ここで、図48は、解析コマンドPOU_BWDの処理フローを示すフローチャートである。図48に於ける処理の流れ及びデータ構造は、デバイス依存関係有向グラフを抽出する解析コマンドVAR_BWDの場合に類似している。
図42のPOU依存関係抽出処理実行部15が図44の式番号S025を図48に示すフローに従って処理すると、図49に示す結果が得られる。この点を以下に詳述する。
ステップS189に於いて、POU依存関係抽出処理実行部15は、POUコレクション[1]の要素POUであるP39をコールしているか否かを、第1引数のPOUコレクションの各プログラムより確認し、その結果、要素POUのP11,P23,及びP28を第1引数のPOUコレクションより抽出する。
ステップS191に於いて、同部15は、P11からP39への有向線分を、有向線分コレクション[2]に追加する。この際の有向線分のデータ構造としては、依存元POUと依存先POUとが保持されておれば十分である。但し、後述の実施の形態を鑑みて、有向線分のデータ構造にステップ番号を合わせて保持しておくことも可能である。
ステップS192に於いて、P11はPOUコレクション[1]〜[2]に存在しないので、ステップS193に於いて、同部15は、P11をPOUコレクション[2]に追加する。
次のステップS194に於いて、同部15は、抽出した次のPOUであるP23を処理する。
ステップS191に於いて、同部15は、P23からP39への有向線分を、有向線分コレクション[2]に追加する。
ステップS192に於いて、P23はPOUコレクション[1]〜[2]に存在しないので、ステップS193に於いて、同部15は、P23をPOUコレクション[2]に追加する。
次のステップS194に於いて、同部15は、抽出した次のPOUであるP28を処理する。
ステップS191に於いて、同部15は、P28からP39への有向線分を、有向線分コレクション[2]に追加する。
ステップS192に於いて、P28はPOUコレクション[1]〜[2]に存在しないので、ステップS193に於いて、同部15は、P28をPOUコレクション[2]に追加する。
ステップS195に於いて、同部15は、POUコレクション[1]の次の要素POUに対して処理しようとするが、POUコレクション[1]にはP39以外の要素POUは存在しないので、ステップS196及びS197を経る。
ステップS189に於いて、POU依存関係抽出処理実行部15は、POUコレクション[2]の要素POUであるP11をコールしているか否かを、第1引数のPOUコレクションの各プログラムより確認し、その結果、要素POUのP10を第1引数のPOUコレクションより抽出する。
ステップS191に於いて、同部15は、P10からP11への有向線分を、有向線分コレクション[3]に追加する。
ステップS192に於いて、P10はPOUコレクション[1]〜[3]に存在しないので、ステップS193に於いて、同部15は、P10をPOUコレクション[3]に追加する。
次のステップS194に於いて、抽出されたPOUはP10だけであり、同部15は、POUコレクション[2]の次の要素POUであるP23を処理するべく、ステップS189に移行する。
ステップS189に於いて、POU依存関係抽出処理実行部15は、POUコレクション[2]の要素POUであるP23をコールしているか否かを、第1引数のPOUコレクションの各プログラムより確認し、その結果、要素POUのP20を第1引数のPOUコレクションより抽出する。
ステップS191に於いて、同部15は、P20からP23への有向線分を、有向線分コレクション[3]に追加する。
ステップS192に於いて、P20はPOUコレクション[1]〜[3]に存在しないので、ステップS193に於いて、同部15は、P20をPOUコレクション[3]に追加する。
次のステップS194に於いて、抽出されたPOUはP20だけであり、同部15は、POUコレクション[2]の残りの要素POUであるP28を処理するべく、ステップS189に移行する。
ステップS189に於いて、POU依存関係抽出処理実行部15は、POUコレクション[2]の要素POUであるP28をコールしているか否かを、第1引数のPOUコレクションの各プログラムより確認し、その結果、要素POUのP25を第1引数のPOUコレクションより抽出する。
ステップS191に於いて、同部15は、P25からP28への有向線分を、有向線分コレクション[3]に追加する。
ステップS192に於いて、P25はPOUコレクション[1]〜[3]に存在しないので、ステップS193に於いて、同部15は、P25をPOUコレクション[3]に追加する。
次のステップS194に於いて、抽出されたPOUはP25だけであり、同部15は、POUコレクション[2]内の全ての要素POUに対する処理を完了したので、ステップS195に於いて「YES」と判定した後、ステップS197及びS187を経て、ステップS189へ移行する。
ステップS189に於いて、POU依存関係抽出処理実行部15は、POUコレクション[3]の要素POUであるP10をコールしているか否かを、第1引数のPOUコレクションの各プログラムより確認し、その結果、要素POUのMAINを第1引数のPOUコレクションより抽出する。
ステップS191に於いて、同部15は、MAINからP10への有向線分を、有向線分コレクション[4]に追加する。
ステップS192に於いて、MAINはPOUコレクション[1]〜[4]に存在しないので、ステップS193に於いて、同部15は、MAINをPOUコレクション[4]に追加する。
次のステップS194に於いて、抽出されたPOUはMAINだけであり、同部15は、POUコレクション[3]の次の要素POUであるP20を処理するべく(ステップS195)、ステップS189に移行する。
ステップS189に於いて、POU依存関係抽出処理実行部15は、POUコレクション[3]の要素POUであるP20をコールしているか否かを、第1引数のPOUコレクションの各プログラムより確認し、その結果、要素POUのSUB1を第1引数のPOUコレクションより抽出する。
ステップS191に於いて、同部15は、SUB1からP20への有向線分を、有向線分コレクション[4]に追加する。
ステップS192に於いて、SUB1はPOUコレクション[1]〜[4]に存在しないので、ステップS193に於いて、同部15は、SUB1をPOUコレクション[4]に追加する。
次のステップS194に於いて、抽出されたPOUはSUB1だけであり、同部15は、POUコレクション[3]の最後の要素POUであるP25を処理するべく(ステップS195)、ステップS189に移行する。
ステップS189に於いて、POU依存関係抽出処理実行部15は、POUコレクション[3]の要素POUであるP25をコールしているか否かを、第1引数のPOUコレクションの各プログラムより確認し、その結果、要素POUのSUB2を第1引数のPOUコレクションより抽出する。
ステップS191に於いて、同部15は、SUB2からP25への有向線分を、有向線分コレクション[4]に追加する。
ステップS192に於いて、SUB2はPOUコレクション[1]〜[4]に存在しないので、ステップS193に於いて、同部15は、SUB2をPOUコレクション[4]に追加する。
次のステップS194に於いて、抽出されたPOUはSUB2だけであり、同部15は、POUコレクション[3]内の全ての要素POUに対する処理を完了したので、ステップS195に於いて「YES」と判定した後、ステップS197及びS187を経て、ステップS189へ再び移行する。
ステップS189に於いて、POU依存関係抽出処理実行部15は、POUコレクション[4]の要素POUであるMAIN,SUB1,又はSU2をコールしているか否かを、第1引数のPOUコレクションの各プログラムより確認するが、他の何れのプログラムもMAIN,SUB1,又はSU2をコールしていないので、ステップS196へ移行し、ステップS196に於いて「NO」と判定する結果、ステップS198へ移行する。
ステップS198に於いて、同部15は、要素POUが存在するPOUコレクション及び有向線分コレクションの深さを逆転させる処理を行う。その際、特に注意すべき点は、有向線分コレクションの番号を逆転させた際には、全ての有向線分の要素に対して、属するべき深さへと移動させること(但し、本例では該当するものがない。)である。
<実施の形態8の効果>
ラダープログラムを解析対象としたPOUコールの後向き依存関係の有向グラフの抽出を可能にしたことにより、プログラム解析に係る作業を省力化することが出来る。
(実施の形態9)
本実施の形態は、ラダープログラムに於けるPOUコール依存関係の有向グラフ同士の論理演算(論理和OR処理又は論理積AND処理)を可能にする技術に関する。
図44の式番号S023は、式番号S021で抽出されたPOUコール依存関係有向グラフ抽出結果と、式番号S022で抽出された別のPOUコール依存関係有向グラフ抽出結果との論理和の抽出を指定する例を示している。
つまり、本発明は、1)クロスリファレンス同士の論理和を実施するための解析コマンドと、2)デバイス依存関係有向グラフ同士の論理和を実施するための解析コマンドと、3)POUコール依存関係有向グラフ同士の論理和を実施するための解析コマンドとを、全て同じ解析コマンドORで以って共通して指定する。
ここで、図50は、図42のOR処理実行部18が実行する解析コマンドORの処理フローを示すフローチャートであり、図50の処理内容は、図35に示されるデバイス依存関係有向グラフ同士の論理和を実行する処理と同じである。
OR処理実行部18が図44の式番号S023を図50に示される処理フローに従って処理を行うと、図46の結果と図47の結果との論理和の結果として、図51に示す結果が得られる。
式番号S023は、クロスリファレンス同士の論理和を実施するための解析コマンドと、デバイス依存関係有向グラフ同士の論理和を実施するためのコマンドと、POUコール依存関係有向グラフ同士の論理和を実施するためのコマンドとを、同じ解析コマンドORにより指定する例を示していたが、仮に、それぞれ別のコマンド(例えば、前者をVAR_REF_OR,及び、VAR_FWD_BWD_ORと定義し、後者をPOU_FWD_BWD_ORと定義する。)で定義して使い分ける実施の形態に於いても、用いる技術は同じである。
又、本実施の形態を用いれば、解析コマンドPOU_FWDは、解析対象(POUコール依存関係有向グラフの起点)であるPOUに対して線形な演算子となる。換言すれば、解析コマンドPOU_FWDが線形な解析コマンドとして定義される様に,POUコール依存関係有向グラフの論理和ORの処理フローは、図50に示す様に設定されている。
ここで、解析対象をPOU_FWD関数の引数として表記し,OR演算を+で表記することによって、解析コマンドPOU_FWDの線形性を記載すると、式番号S024は、次の数4に示される式により表現される。
従って、図44の式番号S024で示される様に、解析コマンドPOU_FWDの解析対象(POUコール依存関係有向グラフの起点)であるPOUが列挙して指定されている場合に、それぞれのPOUを解析対象とする解析コマンドPOU_FWDの結果をOR処理して得られる結果を、式番号S024の結果とする様な、再帰的な処理が可能となる。解析コマンドPOU_BWDについても、同様に、再帰的な処理が可能である。
これによって、一々、ユーザが式番号S021,S022,S023の様に3つの条件式を入力しなくとも、式番号S023と同じ結果が、式番号S024の1つで得られることとなる。
又、解析対象デバイスの列挙指定の方法も、式番号S010で示された解析コマンドVAR_REFと、式番号S014で示された解析コマンドVAR_FWDと、式番号S024で示された解析コマンドPOU_FWDとで、同じであり、異なる解析コマンド間での解析条件指定方法の整合性も取れていて、何等、矛盾しない。この点は、解析コマンドPOU_BWDに関しても、同様である。
同様に、図42のAND処理実行部17が実行する解析コマンドANDの処理フローを、図52に示す。処理内容は、図37に示されるデバイス依存関係有向グラフ同士の論理積のときの処理と同じである。
AND処理実行部17が図44の式番号S026を図59に示される処理フローに従って処理すると、図49の結果と図51の結果との論理積の結果として、図53の結果が得られる。次の式番号S027の処理に関しても、同様の結果が得られる。
<実施の形態9の効果>
ラダープログラムに於けるPOUコールの依存関係の有向グラフ同士の論理演算(論理和OR処理)を可能としたことにより、所望のPOUコール依存関係有向グラフを抽出することが出来、プログラム解析に係る作業を省力化することが出来る。
又、クロスリファレンス同士の論理和を実施するためのコマンドと、デバイス依存関係有向グラフ同士の論理和を実施するためのコマンドと、POUコール依存関係有向グラフ同士の論理和を実施するためのコマンドとを、同じ解析コマンドORで以って指定することが可能である。仮に、それぞれ別のコマンド(例えば、前者をVAR_REF_OR及びVAR_FWD_BWD_OR、後者をPOU_FWD_BWD_OR)を定義して使い分ける実施の形態も考えられるが、解析コマンドORの対象となるデータ種別によってコマンドを使い分ける必要性が生じる。データ種別に拘らず、論理和を実施する解析コマンドは解析コマンドORに定義しておく方が、使い勝手が良い。解析コマンドを使い分ける場合には、ユーザは、それぞれのデータ種別に対応した論理和コマンドをヘルプ又は取扱説明書等で調べる必要性が生じるが、全てを解析コマンドORで実施出来るのであれば、ユーザは、その必要性を有することが無くなり、プログラム解析に係る作業を省力化することが出来る。
勿論、論理積AND処理についても、同様の効果がある。
(実施の形態10)
本実施の形態は、POUコール依存関係有向グラフに存在するPOUを対象として、デバイスクロスリファレンス又はデバイス依存関係有向グラフを抽出することを可能にする技術に関する。
図54の式番号S028は、図44の式番号S021で抽出されたPOUコール依存関係有向グラフに存在するPOUのコレクションの抽出を指定する例を示している。
つまり、本発明は、1)任意のPOUの読み込みを指定して当該POUのコレクションを出力するためのコマンドと、2)プログラムを構成する全てのPOUの読み込みを指定して当該POUのコレクションを出力するためのコマンドと、3)POUコール依存関係有向グラフに存在するPOUのコレクションを抽出するためのコマンドとを、同じ解析コマンドPOU_READによって指定する例を示している。
次に、解析コマンドPOU_READによってPOUコール依存関係有向グラフに存在するPOUのコレクションを抽出する技術について記載する。
ここで、図54は、ユーザが図1の入力部5を用いてマイクロプロセッサ2にプログラム解析条件を入力するための表示部4の画面の例を示しており、既述した図7,図29及び図44の続きに該当している。
又、図55は、図42のPOU一覧抽出処理実行部14が実行する解析コマンドPOU_READの処理フローを示すフローチャートである。
図55の処理内容は、デバイス依存関係有向グラフからデバイスクロスリファレンスを抽出するときの解析コマンドVAR_REFの処理(図39参照。)に類似する。但し、デバイスの場合には、有向線分の情報を付与したデバイス要素を扱うのであるが、POUの場合には、有向線分の情報をPOU要素に付与しない、という違いが両者間にある。
図42のPOU一覧抽出処理実行部14が式番号S028を図55に示される処理フローに従って処理すると、図46のPOUコール依存関係有向グラフから、MAIN,P10,P11,P12,P35,P36,P37,P38及びP39をPOU要素とするPOUコレクションが得られる。
図54の式番号S029は、式番号S028で抽出されたPOU要素に対して、デバイスクロスリファレンスの抽出を指定する例を示している。式番号S029の処理に関する技術は、既に、実施の形態1に於いて記載されている通りである。
これにより、POUコール依存関係有向グラフに存在するPOUを対象としたデバイスクロスリファレンスの抽出が可能となるだけでなく、解析コマンドVAR_REFの第1引数に対して、POUコール依存関係有向グラフから抽出されたPOU要素であるMAIN,P10,P11,P12,P35,P36,P37,P38及びP39を、ユーザが一々入力する手間が省かれる。
図54の次の式番号S030は、式番号S028で抽出されたPOU要素に対して、デバイス依存関係有向グラフの抽出を指定する例を示している。式番号S030の処理に関する技術は、実施の形態2及び3に既に記載した通りである。
これにより、POUコール依存関係有向グラフに存在するPOU要素を対象としたデバイス依存関係有向グラフの抽出が可能となるだけでなく、解析コマンドVAR_FWDの第1引数に対して、POUコール依存関係有向グラフから抽出されたPOU要素であるMAIN,P10,P11,P12,P35,P36,P37,P38及びP39を、ユーザが一々入力する手間が省かれる。この点は、解析コマンドVAR_BWDについても同様に成り立つ。
図54の式番号S031の解析コマンドVAR_REFは、式番号S021で抽出されたPOUコール依存関係有向グラフに対して、デバイスクロスリファレンスの抽出を指定する例を示している。即ち、式番号S031の解析コマンドVAR_REFは、POUコール依存関係有向グラフに存在するPOUに於けるデバイスクロスリファレンスの抽出を行うものである。
図42の変数使用一覧抽出処理実行部12が実行する解析コマンドVAR_REFの処理フローを、図56に示す。図56の処理内容は、本発明に於いて既述した図10に示される技術と図55に示される技術との組み合わせによって実現される。
これによって、式番号S021に対して、式番号S028及びS029の様に2つの条件式をユーザが一々入力しなくとも、同じ結果が、式番号S031という1つの条件式の入力により得られることとなる。
図54の式番号S032の解析コマンドVAR_FWDは、式番号S021で抽出されたPOUコール依存関係有向グラフに対して、デバイス依存関係有向グラフの抽出を指定する例を示している。即ち、式番号S032の解析コマンドVAR_FWDは、POUコール依存関係有向グラフに存在するPOUに於けるデバイス依存関係有向グラフの抽出を行うものである。
図42の変数依存関係抽出処理実行部13が実行する解析コマンドVAR_FWDの処理フローを、図57に示す。図57の処理内容は、本発明に於いて既述した図30に示される技術と図55に示される技術との組み合わせによって実現される。
これによって、式番号S021に対して、式番号S028及びS030の様に2つの条件式をユーザが一々入力しなくとも、同じ結果が、式番号S032という1つの条件式の入力により得られることとなる。
これらの点は、解析コマンドVAR_BWDについても成り立つ。
<実施の形態10の効果>
ラダープログラムに於けるPOUコール依存関係有向グラフに対して、デバイスクロスリファレンス又はデバイス依存関係有向グラフを抽出することが可能となる。又、POUコール依存関係有向グラフから抽出されたPOU要素をユーザが一々入力する手間を省くことが出来る。更には、ユーザが一々2つの条件式を入力しなくとも、1つの条件式の入力により所望のデバイスクロスリファレンス又はデバイス依存関係有向グラフを得ることが出来る。
これらの利点に伴い、プログラム解析に係る作業を省力化することが出来る。
(実施の形態11)
本実施の形態は、デバイスクロスリファレンス又はデバイス依存関係有向グラフに存在するPOUを抽出することを可能にする技術に関する。即ち、図71に示す様に、例えば、ユーザは、解析コマンドPOU_READとそれに引き続く解析コマンドVAR_REFとの実行により得られたデバイスクロスリファレンスを第2引数として指定し、第1引数に解析コマンドPOU_READを指定して当該式番号を実行させることにより、再度、POUのコレクションを得ることが出来る。この再度に得られたPOUのコレクションを構成するPOU要素の数は、当初の解析コマンドPOU_READの実行により得られたPOUコレクションのPOU要素よりも、より限定され得る。同様に、ユーザは、デバイス依存関係有向グラフを第2引数として指定し、第1引数に解析コマンドPOU_READを指定して当該式番号を実行させることにより、再度、POUのコレクションを得ることが出来、この場合にも再度に得られたPOUのコレクションを構成するPOU要素の数をより限定化させることが出来る。
その上で、更なる新技術の展開が下記の通りに得られる。
A)デバイスクロスリファレンスからのPOUの抽出に於いては、ユーザは、第1引数に解析対象となるPOUを指定し、第2引数に解析条件となる変数(デバイス)を指定するが、第1引数に於いて指定された全てのPOUに、第2引数で指定された変数(デバイス)が含まれるとは限らない。そこで、ユーザが、第1引数に於いてプログラムを構成する全POUを指定し、第2引数で指定された変数(デバイス)のクロスリファレンスが得られたときに、それらの変数(デバイス)を使用しているPOUの一覧を抽出したい場合に、本実施の形態で以下に記載される技術が用いられる。
B)デバイス依存関係有向グラフからのPOUの抽出に於いては、ユーザが第1引数に解析対象となるPOUを指定し、第2引数に依存解析の起点となる変数(デバイス)を指定するが、第1引数で指定された全てのPOUが、抽出結果のデバイス依存関係有向グラフに関係しているとは限らない。そこで、ユーザが、第1引数でプログラムを構成する全POUを指定し、第2引数で指定された変数(デバイス)を起点としたデバイス依存関係有向グラフが得られたときに、そのデバイス依存関係有向グラフに関係しているPOUの一覧を抽出したい場合に、本実施の形態で以下に記載される技術が適用される。
図54の式番号S034は、図44の式番号S020に於いて読み出したPOUのコレクション、従って、プログラムを構成する全POUに於ける、変数(デバイス)M[0−9]及びM[20−29]のデバイスクロスリファレンスの抽出を指定する例を示す。又、図54の式番号S035は、式番号S034の結果に存在するPOUの一覧を抽出する例を示している。
つまり、本発明は、1)任意のPOUの読み込みを指定して当該POUのコレクションを出力するためのコマンドと、2)プログラムを構成する全てのPOUの読み込みを指定して当該POUのコレクションを出力するためのコマンドと、3)POUコール依存関係有向グラフに存在するPOUのコレクションを抽出するためのコマンドと、4)デバイスクロスリファレンスに存在するPOUのコレクションを抽出するためのコマンドとを、同じ解析コマンドPOU_READで指定する例を示している。
図42のPOU一覧抽出処理実行部14が実行する解析コマンドPOU_READの処理フローを、図58に示す。先ず、同部14は、対象となるデータ種別がデバイスクロスリファレンスであるか否かを確認する。若しデバイスクロスリファレンスでなければ、同部14は、図55の処理フローを行う。他方、対象となるデータ種別がデバイスクロスリファレンスであれば、同部14は、そのデバイスクロスリファレンスに存在するPOUのコレクションを抽出して出力する処理を行う。
簡単化のために、図54の式番号S033の場合について記載すると、第1引数の式番号S006のデバイスクロスリファレンス結果を示す図19の画面に存在する各クロスリファレンスのプログラム名を参照すると、当該デバイスクロスリファレンスに存在するPOUは、MAIN及びSUBのみである。そこで、同部14が図58の処理フローに基づいて式番号S033を処理すると、MAINとSUBとを要素としたPOUのコレクションが得られる。
図54の式番号S036は、式番号S020で読み出したPOUのコレクション、従って、プログラムを構成する全てのPOUに於ける、変数(デバイス)M4095を起点としたデバイス依存関係有向グラフの抽出を指定する例を示しており、次の式番号S037は、式番号S036の抽出結果に存在するデバイスに関するクロスリファレンスの抽出を指定する例を示しており、次の式番号S038は、式番号S037の抽出結果に存在するPOUの一覧を抽出する例を示している。これらの各式番号の処理は、既に記載した通りである。
図54の式番号S039は、式番号S036の抽出結果に関係するPOUの一覧を抽出する例を示している。つまり、本発明は、1)任意のPOUの読み込みを指定して当該POUのコレクションを出力するためのコマンドと、2)プログラムを構成する全てのPOUの読み込みを指定して当該POUのコレクションを出力するためのコマンドと、3)POUコール依存関係有向グラフに存在するPOUのコレクションを抽出するためのコマンドと、4)デバイスクロスリファレンスに存在するPOUのコレクションを抽出するためのコマンドと、5)デバイス依存関係有向グラフに関係するPOUのコレクションを抽出するためのコマンドとを、同じ解析コマンドPOU_READで指定する例を示している。
図42のPOU一覧抽出処理実行部14が実行する解析コマンドPOU_READの処理フローを、図59に示す。先ず、同部14は、対象となるデータ種別がデバイス依存関係有向グラフであるか否かを確認する。若し、データ種別がデバイス依存関係有向グラフでなければ、同部14は、図58の処理フローを行う。他方、対象となるデータ種別がデバイス依存関係有向グラフであれば、同部14は、そのデバイス依存関係有向グラフに対して、図56に示した解析コマンドVAR_REFを適用してデバイスクロスリファレンスを抽出し、抽出されたデバイスクロスリファレンスに対して、図58に示す解析コマンドPOU_READの処理フローを適用して、POUのコレクションを抽出して出力する処理を行う。
これによって、ユーザは、式番号S036に対して、式番号S037及びS038の様に2つの条件式を一々入力しなくとも、同じ結果を、式番号S039の1つの条件式の入力によって得ることが出来ることとなる。
<実施の形態11の効果>
抽出したデバイスクロスリファレンス又はデバイス依存関係有向グラフに存在するPOUを抽出することが可能となる。
又、デバイス依存関係有向グラフに存在するPOUを抽出する際には、ユーザは、一々、2つの条件式を入力しなくとも、1つの条件式の入力によって結果を得ることが出来る様になる。
これらの利点により、プログラム解析に係る作業を省力化することが出来る。
(実施の形態12)
本実施の形態は、異なるデータの論理演算の指定を可能にする技術に関する。例えば、デバイスクロスリファレンスとデバイス依存関係有向グラフとの論理積ANDが指定された場合には、先ず、デバイス依存関係有向グラフをデバイスクロスリファレンスに変換した上で、次に、論理積演算の処理を実行する様に、図1のマイクロプロセッサ2は、その内部処理により、指定された式番号を自動的に解釈して処理すれば良い。
図54の式番号S041の論理積ANDでは、第1引数S005の出力がデバイスクロスリファレンスであり、第2引数S011の出力がデバイス依存関係有向グラフである。この様に、異なるデータ同士の論理演算が指定された場合には、マイクロプロセッサ2は、先ず、第1引数と同じデータ形式の内容を第2引数の出力内容から抽出した上で、その後に指定された解析コマンドの論理演算を実施する様に、プログラム解析支援装置の仕様は決められる。
これによって、ユーザは、式番号S011に対して解析コマンドVAR_REFを抽出する式番号S018を先ず入力してから、その後に、式番号S005と式番号S018との論理積ANDの条件式を図54の式番号S040の様に入力しなくとも、同じ結果が、式番号S041の1つの条件式の入力で以って得られることになる。
図54の式番号S042は、その第1引数及び第2引数が式番号S041の場合とは逆関係となる様に、指定されたものである。この場合にも、解析コマンドANDは、デバイスクロスリファレンスとデバイス依存関係有向グラフとの論理積ANDであるから、先ず、デバイス依存関係有向グラフをデバイスクロスリファレンスに変換してから、論理積演算を実行する様に、内部処理で以って自動的に解釈して処理すれば良い。即ち、式番号S041と式番号S042とでは、結果は同じである。
ここで、図60は、図42のAND処理実行部17が実行する解析コマンドANDの処理フローを示すフローチャートである。AND処理実行部17が図60の処理フローに基づいて式番号S041を処理すれば、図61に示す様に、変数(デバイス)M4がプログラムMAIN及びSUBの各々で使用されている解析結果を示すクロスリファレンスが得られる。
<実施の形態12の効果>
異なるデータ同士の論理演算の指定が可能となる。これによって、ユーザは論理演算の条件式を指定する前に、同じデータ形式に変換するための条件式を一々入力しなくとも、1つの条件式の入力で事足りることになるので、プログラム解析に係る作業を省力化することが出来る。
(実施の形態13)
これまでに、ユーザが入力部を用いてプログラム解析条件を入力するための表示部の画面の一例として、図7を示し、プログラム解析条件を自由に組み合わせたクロスリファレンスの作成を可能にする技術について記載してきた。この場合、プログラム解析条件の組み合わせに特に制約はないため、ユーザはプログラム解析条件を自由に組み合わせることが可能であるが、逆に、ユーザが所望のプログラム解析結果を得ようとすると、ユーザが自分でプログラム解析条件の組み合わせを考える必要性がある。
従来のプログラム解析支援装置は、用意されている条件指定機能範囲内でのクロスリファレンスの作成しか出来なかったが、逆に、用意されているクロスリファレンスを作成する際には、ユーザは、自分でプログラム解析条件の組み合わせを考える必要性が無い。
しかしながら、従来のプログラム解析支援装置と同様の方針で、ユーザが所望のプログラム解析結果を得ることを可能にしようとすると、多種多様なクロスリファレンス作成機能を用意する必要性がある。即ち、従来と同様の方針で、背景技術の欄で既述した様な構成により実現しようとすると、プログラム解析支援装置の開発者は多大な労力を要することになる。具体的には、解析条件実行部の内部構造が複雑になるという問題点がある。
そこで、本実施の形態では、従来のプログラム解析支援装置と同様の方針で、多種多様なクロスリファレンス作成機能等のプログラム解析機能を用意するに際して、これまでに記載してきた本発明の構成を利用することにより、プログラム解析支援装置の開発者の労力の大幅な軽減を可能にする技術について記載する。
具体例として、従来のプログラム解析支援装置と同様の方針で、ラダープログラム静的スライシング機能が、本実施の形態に係るプログラム解析支援装置に、専用プログラム解析機能として用意ないしはプログラムとして搭載されている場合が、記載される。
ここで、図62は、ラダープログラム静的スライシングのための表示部の画面の一例(ダイアログ・ボックス)を示す図である。
このラダープログラム静的スライシング機能は、ユーザにより指定された解析対象範囲POUに於けるデバイス依存関係有向グラフの抽出、及び、その有向グラフに存在する変数(デバイス)の一覧(クロスリファレンス)の抽出を、専用的ないしは専門的に提供する機能である。
図62のスライシング範囲には、ユーザが抽出したいと望むデバイス依存関係有向グラフの解析対象範囲となるPOU名称を、ユーザは入力する。ユーザが1つ以上のPOUを解析対象範囲として指定したい場合には、スライシング範囲に各POUをカンマ(,)区切りで列挙することとし、ユーザがプログラムを構成する全てのPOUの読み込みを指定したい場合には、ユーザはスライシング範囲に何も入力しない、という仕様である。
図62の画面に於いて、ユーザが、前向きスライシング起点デバイスと後向きスライシング起点デバイスとの両方に、それぞれ異なる変数(デバイス)を指定すると、前向きデバイス依存関係有向グラフと後向きデバイス依存関係有向グラフとの論理積ANDを処理したデバイス依存関係有向グラフが抽出される、という仕様である。
画面の前向きスライシング起点デバイスの欄には、ユーザは、抽出したいデバイス依存関係有向グラフの起点となる変数(デバイス)を入力する。若し、1つ以上の前向きデバイス依存関係有向グラフの論理和ORを処理したデバイス依存関係有向グラフを抽出したい場合には、ユーザは、変数(デバイス)を、カンマ(,)区切りで列挙する、という仕様である。
画面の後向きスライシング起点デバイスの欄には、ユーザは、抽出したいデバイス依存関係有向グラフの起点となる変数(デバイス)を入力する。若し、1つ以上の後向きデバイス依存関係有向グラフの論理和ORを処理したデバイス依存関係有向グラフを抽出したい場合には、ユーザは、変数(デバイス)を、カンマ(,)区切りで列挙する、という仕様である。
即ち、ユーザが、前向きスライシング起点デバイスと後向きスライシング起点デバイスとの両方に、それぞれ、異なる変数(デバイス)をそれぞれ複数指定すると、1つ以上の前向きデバイス依存関係有向グラフのORの処理により得られるデバイス依存関係有向グラフと、1つ以上の後向きデバイス依存関係有向グラフのORの処理により得られるデバイス依存関係有向グラフとを、AND処理することで得られるデバイス依存関係有向グラフが抽出される、という仕様である。
又、ユーザが、図62の画面の前向きスライシング起点デバイスの欄に変数(デバイス)を指定せずに、後向きスライシング起点デバイスの欄にのみ変数(デバイス)を指定するときには、後向きデバイス依存関係有向グラフが結果として抽出される。逆に、ユーザが、後向きスライシング起点デバイスの欄に変数(デバイス)を指定せずに、前向きスライシング起点デバイスの欄にのみ変数(デバイス)を指定するときには、前向きデバイス依存関係有向グラフが結果として抽出される、という仕様である。
ここで、図63は、図1のマイクロプロセッサ2に於ける、ラダープログラム静的スライシングを実現するための機能部の構成を示す機能ブロック図(ソフトウェアブロック構成図)である。
ラダープログラム静的スライシングに係る処理は、ユーザの画面入力及び画面上の実行釦開始の操作に応じて、ラダー静的スライシング条件設定部294が内部的に生成したコマンドを、解析条件実行部11が処理し、その処理結果を、解析結果表示部20が、図1の表示部4の画面に表示させると言う構成により、実現される。
ラダー静的スライシング条件設定部294が実行する処理フローを、図64に示す。同部294が図62に示される入力内容を、図64の処理フローに従って処理する点を、以下に記載する。
ステップS295に於いて、ユーザが、図62のラダープログラム静的スライシング画面上の実行ボタンをクリックすると、ラダー静的スライシング条件設定部294は以下の処理を開始する。
ステップS297に於いて、同部294は、図62のダイアログ・ボックスに於けるスライシング範囲に、POU名称が入力されているかを確認する。図62の本例では、同部294は、「YES」と判定する。
ステップS298に於いて、同部294は、図62のダイアログ・ボックスに於けるスライシング範囲に入力されているPOU名称が複数であるか否かを確認する。図62の本例では、同部294は、「YES」と判定する。
ステップS301に於いて、同部294は、本例に関しては、以下のコマンドを内部的に生成して実行する。
1)S901=POU_READ(MAIN)
2)S902=POU_READ(SUB4)
3)S903=OR(S901,S902)
本例のステップS301の適用に於いて、同部294は、更に次のコマンドを内部的に生成して実行する。
4)S904=POU_READ(SUB9)
5)S905=OR(S903,S904)
以上の様に同部294が各種コマンドの生成・実行を内部的に逐一行うことにより、ステップS301に於いて、同部294は、複数のPOU名称が入力された場合のPOUコレクションの生成に対処する。
同部294は、ステップS296の処理に於いて内部的に生成した最後の解析コマンドの式番号を、以降のステップS302及びステップS307に於いて処理するデバイス依存関係有向グラフの抽出処理の第1引数として、使用する。本例では、同部294は、第5番目に生成されたコマンドである式番号S905を、解析コマンドVAR_FWD及び解析コマンドVAR_BWDの第1引数として、指定する。
ステップS303に於いて、本例に関して、同部294は、図62の前向きスライシング起点デバイスに変数(デバイス)が入力されていることを確認する。
ステップS304に於いて、本例に関して、同部294は、図62の前向きスライシング起点デバイスに入力されている変数(デバイス)が複数個であることを確認する。
ステップS306に於いて、本例に関して、同部294は、以下のコマンドを内部的に生成して実行する。
6)S906=VAR_FWD(S905,X67)
7)S907=VAR_FWD(S905,X89)
8)S908=OR(S906,S907)
同部294は、ステップS302に於いて内部的に生成した最後のコマンドの式番号を、ステップS312に於いて処理するデバイス依存関係有向グラフ同士のAND処理の第1引数として使用する。この例では、同部294は、式番号S908を、AND処理の第1引数として指定する。
ステップS308に於いて、本例に関して、同部294は、図62の後向きスライシング起点デバイスに変数(デバイス)が入力されていることを確認する。
次のステップS309に於いて、本例に関して、同部294は、図62の後向きスライシング起点デバイスに入力されているデバイスが複数でないことを確認し(「NO」の判定。)、ステップS310へ移行する。
ステップS310に於いて、本例に関して、同部294は、以下のコマンドを内部的に生成して実行する。
9)S909=VAR_BWD(S905,Y234)
同部294は、ステップS307に於いて内部的に生成した最後のコマンドの式番号を、ステップS312に於いて処理するデバイス依存関係有向グラフ同士のAND処理の第2引数として使用する。この例では、同部294は、式番号S909を、ANDの第2引数として指定する。
ステップS312では、同部294は、ステップS302に於いて内部的に生成した最後のコマンドの式番号を第1引数とし、ステップS307に於いて内部的に生成した最後のコマンドの式番号を第2引数とした、解析コマンドANDを内部的に生成して実行する。
10)S910=AND(S908,S909)
但し、同部294は、ステップS302に於いて内部的に生成したコマンドが無い場合には、ステップS307に於いて内部的に生成した最後のコマンドの処理結果を、そのまま、ステップS312の処理結果とする。
又、同部294は、ステップS307に於いて内部的に生成したコマンドが無い場合には、ステップS302に於いて内部的に生成した最後のコマンドの処理結果を、そのまま、ステップS312の処理結果とする。
若し、ステップS302とステップS307の何れに於いても内部的に生成されたコマンドが存在しなれけば、同部294は、ステップS312の処理結果を空とする。
ラダー静的スライシング条件設定部294は、以上の処理により得られたデバイス依存関係有向グラフの結果を、解析結果表示部20へ送信し、同部20は上記バイス依存関係有向グラフの結果を描画するための表示信号を図1の表示部4へ出力し、その結果、上記バイス依存関係有向グラフの結果は表示部4の画面上に表示される。
更に、ユーザが図62のダイアログ・ボックスのクロスリファレンスボタンを入力部5によりクリックすると、ラダー静的スライシング条件設定部294は、既に得られているデバイス依存関係有向グラフに存在する変数(デバイス)のクロスリファレンスを抽出して、解析結果表示部20は、その結果を表示する。その処理フローを示すフローチャートの図示化は割愛されが、その処理手順を次の様に記載する。
ユーザが、ラダープログラム静的スライシング画面上のクロスリファレンスボタンを押す(クリックする。)と、同部294は、処理を開始する。
同部294は、同部294が実行した最後のコマンドの式番号S910を、第1引数とした解析コマンドVAR_REFを内部的に生成して実行する。その際、同部294は、第2引数には何も指定せず、デバイス依存関係有向グラフに存在する全ての変数(デバイス)のクロスリファレンスを抽出する。
11)S911=VAR_REF(S910)
但し、未だデバイス依存関係有向グラフが得られていなければ(処理されていなければ)、同部294は、処理結果を空とする。
ラダー静的スライシング条件設定部294は、図63の変数使用一覧表示部21を介在して、得られた変数(デバイス)のクロスリファレンスを表示する。
<実施の形態13の効果>
ユーザが自分でプログラム解析条件の組み合わせを考える必要性が無く、所望のプログラム解析結果を得ることを可能にする。従って、多種多様なクロスリファレンス作成機能等のプログラム解析機能を用意するための労力を大幅に軽減することが出来る。
これにより、プログラム解析支援装置の開発者は、ユーザが、プログラムの変更又は不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化して作業に要する時間を短縮することを可能にするための、プログラム解析支援装置の開発の工数(費用及び期間)を低減(短縮)することが出来る。プログラム解析支援装置に対して多種多様なクロスリファレンス作成機能等のプログラム解析機能を用意することが、容易となる。
これにより、プログラム解析支援装置に対して多種多様なクロスリファレンス作成機能等のプログラム解析機能が用意されることで、ユーザは、プログラムの変更又は不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化して、作業に要する時間を短縮することが出来る。
(実施の形態14)
これまでに、所定のプログラムPOUのコレクションを対象としたデバイスクロスリファレンスの抽出、デバイス依存関係有向グラフの抽出、及びPOUコール依存関係有向グラフの抽出の各プログラム解析機能について記載した。そして、それらの解析結果に対して論理演算(AND/OR/NOT)を行う機能についても記載した。更に、それらのプログラム解析機能の結果に対して、更にプログラム解析処理を行う機能についても、記載した。
この様な本発明のプログラム解析支援装置に対して、新しい解析機能(解析コマンド)を追加する場合には、その新しい解析機能(解析コマンド)が抽出するデータ形式が、本発明のプログラム解析支援装置には未だ無い新しいデータ形式であれば、その解析結果に対してAND/OR/NOTの論理演算を定義する必要性がある等、本発明のプログラム解析支援装置の特徴点を継承して損なわない様にする必要性がある。
本実施の形態は、この様な本発明のプログラム解析支援装置に対して、新しい解析機能(解析コマンド)を追加するための技術に関する。
これまでに、所定のプログラムPOUのコレクションを対象としたデバイスクロスリファレンスの抽出、デバイス依存関係有向グラフの抽出、及びPOUコール依存関係有向グラフの抽出の各プログラム解析機能、並びに、それらの解析結果に対してAND/OR/NOTの論理演算又は別のプログラム解析を行う機能について、記載してきた。これらの機能をまとめると、図66〜図71の各図に示す様になる。
ア)先ず、デバイスクロスリファレンス抽出コマンドVAR_REFについて図示した図66の内容を記載する。
解析コマンドVAR_REFの第2引数に指定されるのは、変数(デバイス)である。他方の第1引数には、本発明のプログラム解析支援装置が処理するプログラム解析機能の解析結果を指定することが出来る。
この内で、第1引数にPOUのコレクションを出力する式番号を指定する場合が、解析コマンドVAR_REFの最も基本的な処理形態(図66中に◎で示されている。)である。
又、第1引数にデバイス依存関係有向グラフを出力する式番号を指定する場合も、解析コマンドVAR_REFの基本的な処理形態(図66中に○で示されている。)である。
一方で、第1引数に、POUの名前が直接に指定される場合も、考えられる。この場合の処理フローは、明細書中には実施の形態として記載されてはいないが、この場合の処理形態については、図66に示す通り、マイクロプロセッサ2が内部的に解析コマンドPOU_READを処理してから、解析コマンドVAR_REFの最も基本的な処理形態で以って処理すれば良い。つまり、マイクロプロセッサ2は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る(図66中に△で示されている。)。
又、第1引数に、POUコール依存関係有向グラフを出力する式番号が指定される場合についても、同様に、マイクロプロセッサ2は、他の基本的な処理形態の組み合わせにより実現することが出来る(図66中に同様に△で示されている。)。
尚、第1引数にデバイスクロスリファレンスを出力する式番号が指定される場合は、定義されていない(図66中に×で示されている。)。これは、それを定義する意義ないしは必要性が見出せないからである。
イ)次に、デバイス依存関係有向グラフ抽出コマンドVAR_FWDについて図示した図67の内容を、記載する。尚、図67では、デバイス依存関係有向グラフについては前向き解析コマンドVAR_FWDの場合のみを示している、その点は便宜上のことにすぎず、後向き解析コマンドVAR_BWDについても、同様の内容が妥当する。)。解析コマンドVAR_FWDの第2引数に指定されるのは、変数(デバイス)である。同コマンドの第1引数には、ユーザは、本発明のプログラム解析支援装置が処理するプログラム解析機能の解析結果を指定することが出来る。
この内、第1引数に、POUのコレクションを出力する式番号が指定される場合が、解析コマンドVAR_FWDの最も基本的な処理形態(図67中には◎で示されている。)である。
一方で、第1引数に、POUの名前が直接に指定される場合も、考えられる。この場合の処理フローは、明細書中には実施の形態として記載されてはいないが、この場合の処理形態については、図67に示す通り、マイクロプロセッサ2が内部的に解析コマンドPOU_READを処理してから、解析コマンドVAR_FWDの最も基本的な処理形態で以って処理すれば良い。つまり、マイクロプロセッサ2は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る(図67中に△で示されている。)。
又、第1引数に、POUコール依存関係有向グラフを出力する式番号が指定される場合についても、同様に、マイクロプロセッサ2は、他の基本的な処理形態の組み合わせにより実現することが出来る(図67中に同様に△で示されている。)。
尚、第1引数にデバイス依存関係有向グラフを出力する式番号が指定される場合は、定義されていない(図67中に×で示されている。)。これは、それを定義する意義ないしは必要性が見出せないからである。
同じく、第1引数にデバイスクロスリファレンスを出力する式番号が指定される場合も、定義されていない(図67中に×で示されている。)。これも、それを定義する意義ないしは必要性が見出せないからである。
ウ)次に、POUのコレクションを抽出する解析コマンドPOU_READについて図示した図68の内容を、記載する。この場合、解析コマンドPOU_READの第2引数には、何も指定されない。他方、ユーザは、第1引数に、本発明のプログラム解析支援装置が処理するプログラム解析機能の解析結果を指定することが出来る。
この内、第1引数にPOUの名前が直接に指定される場合が、解析コマンドPOU_READの最も基本的な処理形態(図68に於いては、◎で示されている。)である。
又、第1引数にデバイスクロスリファレンスを出力する式番号が指定される場合も、解析コマンドPOU_READの基本的な処理形態(図68に於いては、○で示している)である。
更に、第1引数にPOUコール依存関係有向グラフを出力する式番号が指定される場合もまた、解析コマンドPOU_READの基本的な処理形態(図68に於いては、○で示されている。)である。
一方で、第1引数に、デバイス依存関係有向グラフを出力する式番号を指定する場合については、図68に示す通り、マイクロプロセッサ2が、内部的に解析コマンドVAR_REFを処理してから、解析コマンドPOU_READの基本的な処理形態で以って処理すれば良い。つまり、マイクロプロセッサ2は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る(図68中に、△で示されている。)。
尚、第1引数に、POUのコレクションを出力する式番号が指定される場合は、定義されていない(図68中に、×印が表示されている。)。これは、それを定義する意義ないしは必要性が見出せないからである。
エ)次に、POUコール依存関係有向グラフを抽出する解析コマンドPOU_FWDについて図示した図69の内容を、記載する。尚、図69には、POUコール依存関係有向グラフについては、前向きの解析コマンドPOU_FWDの場合のみが示されているが、後向きの解析コマンドPOU_BWDについても同様の内容が成立する。解析コマンドPOU_FWDの第2引数に指定されるのは、POU名称である。第1引数には、ユーザは、本発明のプログラム解析支援装置が処理するプログラム解析機能の解析結果を指定することが出来る。
この内で、第1引数にPOUのコレクションを出力する式番号が指定される場合が、解析コマンドPOU_FWDの最も基本的な処理形態(図69に於いては、◎で示されている。)である。
一方で、第1引数に、POUの名前が直接に指定される場合も、考えられる。この場合の処理フローは、明細書中には実施の形態として記載されてはいないが、この場合の処理形態については、図69に示す通り、マイクロプロセッサ2が内部的に解析コマンドPOU_READを処理してから、解析コマンドPOU_FWDの基本的な処理形態で以って処理すれば良い。つまり、マイクロプロセッサ2は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る(図69中には、△印で示されている。)。
尚、第1引数に、POUコール依存関係有向グラフを出力する式番号が指定される場合は、定義されていない(図69中に、×印が表示されている。)。これは、それを定義する意義ないしは必要性が見出せないからである。
同じく、第1引数に、デバイスクロスリファレンスを出力する式番号が指定される場合も、定義されていない(図69中に、×印が表示されている。)。これも、それを定義する意義ないしは必要性が見出せないからである。
同じく、第1引数に、デバイス依存関係有向グラフを出力する式番号が指定される場合も、定義されていない(図69中に、×印が表示されている。)。これも、それを定義する意義ないしは必要性が見出せないからである。
オ)最後に、これらの解析結果に対して論理演算ANDを行う機能について図示した図70の内容を、以下に記載する。尚、図70に於いては、論理演算の処理に関して、解析コマンドANDのみの処理が示されているが、その他の論理演算である解析コマンドOR及びNOTについても同様の内容が成立する。
この内、第1引数と第2引数とのデータ形式が共に同じである場合が、解析コマンドANDの基本的な処理形態(図70に於いて、◎印で示されている。)である。本発明に係るプログラム解析支援装置の各プログラム解析機能部が出力するデータ形式は、デバイスクロスリファレンス,デバイス依存関係有向グラフ,POUのコレクション,及びPOUコール依存関係有向グラフの4つの何れかであり、それぞれの場合の処理フローについては、既述した対応する実施の形態に於いて開示されている。
一方で、第1引数のデータ形式と第2引数のデータ形式とが異なる場合については、これを定義しないという方策も考えられる。しかしながら、例えば、第1引数にデバイスクロスリファレンスを出力する式番号が指定され、第2引数にデバイス依存関係有向グラフを出力する式番号が指定された場合に於いて解析コマンドANDが指定されることは、第1引数のデバイスクロスリファレンスと、第2引数のデバイス依存関係有向グラフに関するデバイスクロスリファレンスとの、AND処理をその結果として抽出したいという意図がある、と解釈することも出来る。これは、実施の形態12に於いて既述した通りである。この様な場合については、第1引数のデータ形式と第2引数のデータ形式とが異なっていても、最も近い解釈の処理が定義されても良い。この場合の処理形態は、図70に示す通り、図1のマイクロプロセッサ2は、内部的に解析コマンドVAR_REFを処理してから、解析コマンドANDの基本的な処理形態を実行することで処理すれば良い。つまり、マイクロプロセッサ2は、この場合の処理を、その他の基本的な処理形態の組み合わせにより実現することが出来る(図70に於いては、△印で示されている。)。
第1引数のデータ形式と第2引数のデータ形式とが異なるその他の場合についても、同様に、これを定義しないという方策も考えられるが、最も近い解釈の処理が定義された上で、図1のマイクロプロセッサ2が、その他の基本的な処理形態の組み合わせにより実現することとしても良い(図70に於いて、△印で示されている。)。
尚、第1引数のデータ形式と第2引数のデータ形式とが異なるその他の場合の内で、これを定義する意義ないしは必要性が見出せない場合には、本発明ではその定義は行われていない(図70に於いて、×印で示されている。)。
図70に於ける、これらの処理は、何れも、第1引数と第2引数とが逆に指定される場合に於いても、同じ解釈として対称的に定義されるが、非対称として定義する必要性がある場合には、第1引数と第2引数とが逆に指定された場合には異なる定義が行われることとしても良い。
以上の通り、本発明の重要なポイントは、図1のマイクロプロセッサ2内のプログラム解析機能部の基本的な処理(図70に於いて、◎印又は○印で示された処理。)と、上記の基本的な処理の組合せにより実現可能な処理(図70に於いて、△印で示された処理。)とを、明確に区分して定義した点にある。図70の△印の処理は、◎印又は○印の処理の組み合わせで以って実現されているが、決して循環しない。この関係を図にまとめると、図71に示される関係となる。
さて、新しい解析機能(解析コマンド)を担う部分を図1のマイクロプロセッサ2に追加する場合には、図65に示される(1)〜(7)の部分がソフトウェア上に於いて定義される。先ず、(1)解析コマンド名が定義され、(2)第2引数の指定の形態が定義される。次に、(3)〜(7)の定義に際しては、基本的な処理形態となるもの(◎印又は○印に相当する。)はどれかであるか、その他の基本的な処理の組み合わせによって実現可能なもの(△印に相当する。)はどれかであるか、定義する意義ないしは必要性が見出せないもの(×印に相当する。)はどれかであるか、という点が留意される。
更に、その新しい解析機能が抽出するデータ形式が、本発明に係るプログラム解析支援装置には未だ無い新しいデータ形式であれば、その解析結果に対してAND/OR/NOTの論理演算又は別のプログラム解析を行う機能が定義される必要性がある。
そこで、先ず、図65に示す(8)の部分がソフトウェア上に於いて定義される。
次に、本発明に係るプログラム解析支援装置の各プログラム解析機能の定義に対して、新しいデータ形式に対する定義がソフトウェア上に於いて追加される。即ち、図66〜図69の(9)〜(12)の部分が定義される。
そして、図70の(13)の部分(新しいデータ形式同士の論理演算。)が、ソフトウェア上に於いて定義される。
最後に、図70の(14)及び(15)の部分(新しいデータ形式とその他のデータ形式との論理演算。)が、ソフトウェア上に於いて定義される。
<実施の形態14の効果>
1)本発明のプログラム解析支援装置に対して、新しい解析機能(解析コマンド)を行う機能部を追加する場合に、本発明のプログラム解析支援装置の特徴点を継承して損なわない様に、その新しい解析機能の処理がソフトウェア上に於いて定義されることで、プログラム解析条件を自由に組み合わせたプログラム解析が可能となり、この解析結果に基づいて、ユーザは、編集対象となる場所を迅速に特定することが可能となり、プログラムの変更又はその不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化し、作業に要する時間を短縮化することが出来る。
2)又、その新しい解析機能を実行する機能部分が抽出するデータ形式が、本発明のプログラム解析支援装置には未だ無い新しいデータ形式であれば、その解析結果に対してAND/OR/NOTの論理演算が可能となる様に、本発明のプログラム解析支援装置の特徴点を継承して損なわない様に、その新しい解析機能及び本発明のプログラム解析支援装置の各解析機能の処理が定義されるので、プログラム解析条件を自由に組み合わせたプログラム解析が可能となり、ユーザは、この解析結果に基づいて編集対象となる場所を迅速に特定することが可能となり、プログラムの変更又はその不具合動作の解析等に於いて編集対象となる場所を特定するための作業を効率化し、作業に要する時間を短縮化することが出来る。
(付記)
以上の通り、本発明は、プログラム解析条件を自由に組み合わせることが可能なプログラム解析支援装置を実現するものであるが、本発明の特徴点と、既述したPATOLIS(登録商標)の様な特許文献の検索と比較すると、その相違点は、次の通りである。
即ち、特許文献の検索は、「特許文献の集合全体という母集合に対して検索式をかける」ことと、「その結果を論理演算する」ことの繰り返しであり、検索の対象となる母集団は常に特許文献の集合全体である。他方、本発明は、プログラム解析に於いても、「解析対象プログラム全体という母集合に対して検索式をかける」ことと、「その結果を論理演算する」ことの繰り返しを実現するものである。
更に、本発明は、検索の対象となる母集団が常に解析対象プログラム全体という他にも、「ある結果に対して別の検索式をかける」ことを実現するものである。
特許文献の検索は、「特許文献の集合全体という母集合に対して検索式をかけた」結果もまた特許文献の集合であるが、プログラム解析に於いては、「解析対象プログラム全体という母集合に対して検索式をかけた」結果は、様々なデータ種別の集合である。
従って、特許文献の検索の様に、「母集団に対して検索式をかける」及び「その結果を論理演算する」の繰り返しだけでは得られないプログラム解析が存在する。
本発明は、「母集団に対して検索式(解析条件式)をかける」、「その結果に対して別の検索式をかける」及び「それらの結果を論理演算する」の繰り返しを可能にすることで、所望のプログラム解析を実現するものである。
以上、本発明の実施の形態を詳細に開示し記述したが、以上の記述は本発明の適用可能な局面を例示したものであって、本発明はこれに限定されるものではない。即ち、記述した局面に対する様々な修正や変形例を、この発明の範囲から逸脱することの無い範囲内で考えることが可能である。