JP2012256178A - 情報処理装置及び情報処理方法及びプログラム - Google Patents

情報処理装置及び情報処理方法及びプログラム Download PDF

Info

Publication number
JP2012256178A
JP2012256178A JP2011128468A JP2011128468A JP2012256178A JP 2012256178 A JP2012256178 A JP 2012256178A JP 2011128468 A JP2011128468 A JP 2011128468A JP 2011128468 A JP2011128468 A JP 2011128468A JP 2012256178 A JP2012256178 A JP 2012256178A
Authority
JP
Japan
Prior art keywords
graph
directed
devices
control program
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011128468A
Other languages
English (en)
Other versions
JP5762154B2 (ja
Inventor
Hironori Okahara
弘典 岡原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2011128468A priority Critical patent/JP5762154B2/ja
Publication of JP2012256178A publication Critical patent/JP2012256178A/ja
Application granted granted Critical
Publication of JP5762154B2 publication Critical patent/JP5762154B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Programmable Controllers (AREA)

Abstract

【課題】制御プログラムで定義されている制御アルゴリズムを理解しやすい形式で可視化する。
【解決手段】デバイス抽出部102は、複数のデバイスが記述されるとともにデバイス間の依存関係が記述され、複数のデバイスの記述とデバイス間の依存関係の記述により複数のデバイスに対する制御アルゴリズムが定義される制御プログラムから、各デバイスの記述を抽出する。依存関係抽出部103は、制御プログラムから、デバイス間の依存関係の記述を抽出する。グラフ生成部112は、デバイス抽出部102により抽出されたデバイスの記述と依存関係抽出部103により抽出されたデバイス間の依存関係の記述とに基づき、ノードがデバイスを表し、有向エッジがデバイス間の依存関係を表し、制御プログラムで定義されている制御アルゴリズムをノードと有向エッジとの接続で表す有閉路有向グラフを生成する。
【選択図】図1

Description

本発明は、制御プログラムのデバッグ作業を容易化させる技術に関する。
≪対象とする領域について≫
今日、FA(ファクトリーオートメーション)システムやPA(プロセスオートメーション)システムではシーケンス制御を行う機器としてプログラミング可能なCPU機器、すなわち、プログラマブルコントローラ(PLC、シーケンサ機器)が用いられている。
FAシステムの制御プログラマ(システムインテグレータや、FAシステムを構成するコンポーネントの装置メーカなど)は、パソコンで動作するFA専用のエンジニアリング環境ソフトウェア上にてシーケンサ機器用の制御プログラムを作成(クロス開発)するのが一般的である。
エンジニアリング環境ソフトウェアは、プログラマが作成した制御プログラムを、シーケンサ機器内で解釈可能な中間言語プログラムにコンパイルし、シーケンサ機器へダウンロードする。
中間言語プログラムがダウンロードされたシーケンサ機器は、その制御プログラムに従って、様々な入出力ユニットやネットワークを介してセンサやモータを制御して、FA・PAシステムを動作させる。
FA・PAシステム用の制御プログラムが通常の組込みシステムと異なる点は、プログラミングを行うのがシーケンサ機器のメーカではなく一般エンドユーザであることと、制御プログラムの制御対象がユーザのFAシステム内の比較的マクロな要素であること、つまり制御対象は、FA・PAシステム全体の中で意味のある単位となりうること、が挙げられる。
この意味のある制御対象(変数、デバイス)の単位は、ラベルやシステムラベルと呼ばれることもある。
≪制御プログラムの運用について≫
プログラマが作成する制御プログラムは、国際規格IEC61131−3で定義された5言語、インストラクションリスト(IL)、ラダー(LD)、ストラクチャードテキスト(ST)、ファンクションブロックダイアグラム(FBD)、シーケンシャルファンクションチャート(SFC)などで記述されることが多い。
また、CやC++などの汎用プログラミング言語で記述されることもある。
FA・PAシステムは組み込みシステムであり、通常、制御対象は物理的な機械である。
このため、机上で制御プログラムをデバッグするだけでなく、プログラム作成の最終段階、あるいは工場等においてラインを立ち上げる段階において、制御プログラムと制御対象である実機システムとを組み合わせて、動作タイミング等の確認や微調整を行う必要がある。
また、FA・PAシステムはその性質上、数十年にわたって稼動するものも珍しくない。
しかし、その長期間にわたって制御プログラムが変更されないわけではない。
例えば工場の製造ラインなどの場合は、製造する製品の仕様などの変化に伴って、制御プログラムに少しずつ修正が加えられることがある。
これらの修正過程では、ラインの運用中にシーケンサ機器へエンジニアリング端末を接続して、その場で変更などを行うことも多い。
この調整や変更は、ラダー(LD)やインストラクションリスト(IL)という、中間言語とほぼ一対一に対応した、機械語レベルの低級言語により行われることがある。
なぜならば、この作業を行うのは制御プログラマ(装置メーカ)ではなく、機械や製造ラインの専門家(エンドユーザ)であることが多く一般的に高級言語に不慣れなことや、微調整や少しの修正のために上流の設計(高級言語)を変更するのは時間がかかることを理由に、この手順が省略されるためである。
このため、計画的なバックアップ作業を行っていない限り、稼働中の実機システムを動作させている制御プログラムと整合性の取れている「マスタプログラム」が事務所などに保管されていないことがある。
そもそも、稼働中の実機システムのシーケンサ機器内に格納されている中間言語プログラムを「マスタプログラム」と考えているユーザも少なくない。
したがって、FA・PAシステムにおいて、特に保守時に対象とする制御プログラムは、ILやLDなどの機械語レベルの言語で記述されたものを前提として考える必要がある。
≪デバッグ・保守作業の困難性について≫
FA・PAシステムでは「制御プログラム設計段階における構造化支援」と「制御プログラム試験段階におけるデバッグ効率の向上」と「実機システム運用段階における障害発生時の早急な復旧」が大きな課題となっている。
IEC61131−3でも定義されているファンクションブロック(FB)などを用い、制御プログラムの標準化と構造化を支援しているエンジニアリング環境も数多くあるが、FBを有効に使用できているユーザ(特にエンドユーザ)は多くはないのが実情である。
FBなどを用いた構造化プログラミングを阻害しているのは、制御プログラムのどの部分を切り出して構造化し、再利用可能なプログラム部品として定義すべきかを、プログラミング前にあらかじめ設計しにくいことが原因の一つと考えられる。
実機システムの運用中に発生する、工場の製造ラインを停止してしまうような障害については、復旧に費やされる時間がそのままラインの停止時間になり、エンドユーザの損失に直結するために、早急な復旧が必要である。障害の原因究明に費やされる時間を短縮するため、可読性の高い制御プログラムが必要である。
しかしFA・PAシステムの制御プログラムをLDやILにて作成する場合、何千何万行となる「巻物」プログラムを記述することになる。LDやILで記述されたプログラムは構造を持たせにくく、これらは言語仕様上コメント等が入れにくいことなどもあり、他人が見たときに分かりづらいプログラムとなりがちである。LDやILで記述されたプログラムを短時間で正しく解釈するためには、LDやIL言語、制御プログラムに熟練している必要がある。
例えば実機システムの保守時に障害が顕在化したデバイスに注目し、制御プログラムに対して、このデバイスがコイル(出力)となっているラング(LD言語の回路ブロック)を検索し、そのラングで条件として使用されている接点(入力条件)のデバイス(通常は複数)を特定し、それがコイルとなっているラングを検索し...と順を追って検索を行うことで、障害が顕在化したデバイスに影響を与えているデバイスおよび処理を網羅してチェックすることが可能となる。
しかしながら、この方法では、コイル→接点と遡るたびに、探索木の分岐が行われるため、ユーザが途中の状態を記憶しておく必要がある。
また接点とコイルが循環していないか(探索木に繰返しが存在しないか)を随時チェックする必要がある。
なお、制御プログラマは通常、コイルに登場するデバイスを基準に処理を記述する。
つまり、2重コイル(プログラム中の複数個所で同一コイル出力が登場すること)は好まれないことが多い。
しかし、ラダー言語の接点−コイルの関係には、接点デバイスの条件によってコイルに書かれたデバイスのON/OFFが同時に定義されており、C言語などの汎用プログラミング言語に慣れているユーザにとっては分かりづらいところがある。
このため、SET命令やRESET命令によって明示的にデバイスのON/OFFを記すプログラマも増えてきている。
つまり、この場合は、コイル→接点デバイス検索における毎回の分岐の幅が増えることになり、ユーザに対して更なる負担を強いることになる。
≪先行技術について≫
制御プログラムのデバッグ時の容易化技術として、制御プログラムの解析結果やモニタ結果をGUI(Graphical User Interface)を用いて可視的にユーザへ提供する技術については、これまでに幾つか開示されている。
例えば、特許文献1では、デバッグを行うための制御プログラムのモニタ方法として、制御プログラムのSFC言語表現などのフロー図を画面上に表示して、この上に制御プログラムのブロックの活性/非活性状態を表示することなどによって、可視的にモニタ結果が表現される方法が開示されている。
また特許文献2では、FB言語などによって構造化された制御プログラムを対象として、その制御ブロックの呼出関係をツリー構造に変換し、元の制御プログラムと対応する形で表示する方法が開示されている。
特許文献3では、制御プログラムを走査して出力命令部分について抽出し、利用デバイスの出力が、制御プログラム全体のどの位置で実行されているのかを示すアウトラインを作成することで、デバッグの容易化を実現する方法について開示している。
特許文献4では、障害発生時に原因となるデバイスの特定のために、1画面中に表示可能なLD言語形式の情報量を増やすため、LD言語表示には簡略形式で制御プログラムを表示して、別の詳細画面内に、関連する詳細情報を表示する方法について開示している。
以上のようにいずれも、制御プログラム自体や、制御プログラム内でのデバイス検索結果を、SFC言語やLD言語の形式もしくはそれに類似したアウトライン形式で表示することによって、制御プログラムのデバッグ作業を容易化させる技術である。
また、一般的なプログラムの解析技術として「フローグラフ」がある。
これはプログラムスライシング技術(非特許文献1)等で使用されるプログラム内の処理(制御)間の依存関係を有向グラフにて表したものである。
特開2001−154711号公報 特開2004−303217号公報 特開2006−318504号公報 特開2003−084811号公報
「プログラムスライシング技術と応用」、ISBN4−320−02743−4、下村隆夫、共立出版、1995
上述したように、制御プログラムはその性質上、実機システム内で稼働中の機械語レベルのコードをマスタプログラムと考えることが多い。またそれらの機械語レベルの中間コードと整合性のとれた、より可読性の高い上級言語プログラムや内部仕様書がユーザの元に存在するとは限らない。
このことからFA・PAシステムを対象とする場合、その制御プログラムはLDやIL言語で記述されていることを前提とする必要がある。
しかし一方で、LDやILなどの機械語レベルのコードをプログラミングすることや、これらのコードのみを使用してデバッグや障害発生時の原因究明を短時間で行うには、熟練した技術が必要である。
つまり、FA・PAシステムの課題として「LDやIL言語などの機械語レベルの言語をターゲットとしながら、それを熟練者でないユーザでも短時間でデバッグや障害要因の究明を行えるようにする」という課題がある。
本発明は、このような課題を解決することを主な目的としており、制御プログラムで定義されている制御アルゴリズムを理解しやすい形式で可視化するグラフを生成することを主な目的とする。
本発明に係る情報処理装置は、
複数のデバイスが記述されるとともにデバイス間の依存関係が記述され、前記複数のデバイスの記述とデバイス間の依存関係の記述により前記複数のデバイスに対する制御アルゴリズムが定義される制御プログラムから、各デバイスの記述を抽出するデバイス抽出部と、
前記制御プログラムから、デバイス間の依存関係の記述を抽出する依存関係抽出部と、
前記デバイス抽出部により抽出されたデバイスの記述と前記依存関係抽出部により抽出されたデバイス間の依存関係の記述とに基づき、ノードがデバイスを表し、有向エッジがデバイス間の依存関係を表し、前記制御プログラムで定義されている制御アルゴリズムをノードと有向エッジとの接続で表す有閉路有向グラフを生成するグラフ生成部とを有することを特徴とする。
本発明によれば、制御プログラムで定義されている制御アルゴリズムをノードと有向エッジとの接続で表す有閉路有向グラフを生成する。
このため、制御プログラムで定義されている制御アルゴリズムを理解しやすい形式で可視化することができ、制御プログラムのデバッグ作業等を容易にすることができる。
実施の形態1〜3に係る情報処理装置の構成例を示す図。 実施の形態1に係る情報処理装置のグラフ表示動作のフローチャート図。 実施の形態1に係る情報処理装置の対応制御部分プログラム表示動作のフローチャート図。 実施の形態1に係る情報処理装置の特定デバイス仕様出力動作のフローチャート図。 実施の形態1に係る情報処理装置の影響範囲図示動作のフローチャート図。 実施の形態1に係る情報処理装置の未使用箇所検出動作のフローチャート図。 実施の形態1に係る情報処理装置の循環定義検出動作のフローチャート図。 実施の形態1に係る情報処理装置のデバイス値モニタ動作のフローチャート図。 実施の形態1に係る情報処理装置の障害可能性要因図示動作のフローチャート図。 実施の形態2に係るLD言語による制御プログラムの例を示す図。 実施の形態2に係る制御プログラムのグラフ表示例1(模式図)を示す図。 実施の形態2に係るノード構造体の例を示す図。 実施の形態2に係るエッジ構造体の例を示す図。 実施の形態2に係る接続情報の例を示す図。 実施の形態3に係る制御プログラムのグラフ表示例2(模式図)を示す図。 実施の形態3に係る影響範囲図示のグラフ表示例(模式図)を示す図。 実施の形態3に係る循環定義検出のグラフ表示例(模式図)を示す図。 実施の形態2に係る制御プログラム例のIL言語表現を示す図。 実施の形態1〜3に係る情報処理装置のハードウェア構成例を示す図。
実施の形態1.
≪概要≫
まず、本実施の形態に係る情報処理装置の動作の概要を説明し、その後、構成例及び動作手順の詳細を説明する。
本実施の形態に係る情報処理装置は、制御プログラムで制御される変数(デバイス)を抽出してノードとし、デバイス間の相互作用を依存関係として抽出してエッジとすることで、制御プログラムを有閉路有向グラフとしてみて、その構造を保持することで、制御プログラム設計時あるいは保守時に、ユーザ作業の効率化、作業の時間短縮を支援する。
また、本実施の形態に係る情報処理装置は、例えば、制御プログラム設計時に制御プログラム内で使用されているデバイス間の関係を、GUIにて可視的に表示することや、制御プログラム保守時にGUIにて可視的に表示された依存関係グラフ上にて、デバイス値をモニタする、などの機能を持つ。
ここでは、本実施の形態に係る情報処理装置が対象とする言語の1つとして、ラダー(LD)言語を説明するとともに、LD言語で記述された制御プログラムから有閉路有向グラフを生成する例を説明する。
ラダー(LD)言語は電気回路をモデル化した言語である。
LD言語では、左右の母線間をラング(回路ブロック)の単位で通常一つの意味のある処理が記述される。
回路ブロックにはその処理に必要な変数(デバイス)が接点やコイルの形で登場する。
したがって、LD言語はデバイス間の処理を列挙した「処理志向型言語」と考えることができる。
なお、インストラクションリスト(IL)言語についても、構成する命令は基本的にLD言語の要素と一対一に対応可能である。
しかしながら、制御プログラムの目的は、物理的な機械の駆動や電子デバイスへの電圧付加など、実際の物理的なデバイスへの指示が基本である。
例えば、ある生産ラインにおいて以下の仕様にて制御を行う必要があるとする。
1)センサAがONで、押しボタンB1押下時に、ベルトコンベアCのモータが正転する
2)センサAがONで、押しボタンB2押下時に、ベルトコンベアCのモータが逆転する
この制御プログラムを考えた場合、上記の1)の文と2)の文をそれぞれ記述するのがラダー言語(処理指向型言語)である。
LD言語において1)及び2)の文(処理)が、それぞれラングで表現され、それぞれのラングには、以下のように、A、B1、C(正転)およびA、B2、C(逆転)の3つのデバイス間の関係が記述されることになる。
・センサA:ベルトコンベアCの正転・逆転に影響を与える
・押しボタンB1:ベルトコンベアCの正転に影響を与える
・押しボタンB2:ベルトコンベアCの逆転に影響を与える
・ベルトコンベアC(正転):センサA、押しボタンB1に影響を受ける
・ベルトコンベアC(逆転):センサA、押しボタンB2に影響を受ける
上記のように、制御対象であるデバイス間の関係を表現するのが本実施の形態に係る表示形式の考え方であり、本実施の形態では、それを有閉路有向グラフ構造として保持する方法をとる。
前述のとおり、FA・PAシステムの制御プログラムはその目的が、具体的な「デバイス」を制御することである。
LD言語やIL言語で記述される制御プログラムのほとんどは「接点→コイル」の組合せで記述され、その単位処理自体は単純なものである。
またFA・PAシステムの制御プログラムは、デバイスに対する操作として間接アドレシング(ポインタ)などを使用することは少ない特徴もある。
基本的に、物理的に実在する機器に対応するものとして各デバイスが定義されるため、デバイスをポインタやインデクスとして使用する例は多くない。
本実施の形態の手法と類似した、一般的なプログラムの解析技術として「フローグラフ」がある。
これは、前述したように、プログラムスライシング技術(非特許文献1)等で使用されるプログラム内の処理(制御)間の依存関係を有向グラフにて表したものである。
フローグラフは一般的なプログラム全てに適用可能であり、本実施の形態に係る情報処理装置が対象とするFA・PAシステムの制御プログラムに対しても定義可能である。
しかし、フローグラフはプログラムの構造を抽象的に表現したものであって、個々のグラフ要素(ノード、エッジ)が具体的な何かに対応するものではない。
またフローグラフのノードは、それ自体が何らかの処理を内包しており、その処理自体の依存関係がエッジとして表現される。
しかしFA・PAシステムの制御プログラムは、通常プログラムの制御の構造が浅い。
つまりIF文やループ文などの構造を持つことがほとんど無い。
これはサイクリック演算によって繰返し実行されることにも起因している。
本実施の形態では、処理間の依存関係を表現する理由が少なく、むしろ変数(デバイス)と処理を明確に分離した方が可視化の際にユーザに理解されやすいと考える。
このように、フローグラフのようなノードとエッジの定義による可視化は、少なくともFA・PAシステムの制御プログラムを対象とする場合には適していない。
そもそも一般的なプログラムの場合は、使用される変数自体が抽象的なものであり、ポインタや配列などを頻繁に使用するため、その変数の実体(メモリ領域)が固定していないことが多い。
このため、本実施の形態で開示するようなグラフ構造を構築するのは困難である。
しかし、対象をFA・PAシステムの制御プログラムに限定した場合は、より詳細なデバイス単位でのグラフ構築が可能になる。
つまり、デバイスをノードとして表現することでそのイメージが固定され、表示される有閉路有向グラフは、実機システムを構成する要素群のイメージに近いものとなる。
本実施の形態は、FA・PAシステムの制御プログラムのこの特徴を拠りどころとしている。
グラフ表示による可視化は、ユーザに対して制御プログラムの直感的な理解の手助けになると考える。
本実施の形態は、制御プログラム内のデバイス間の関係を一度すべて解析し、有向グラフという形式で、直感的に分かりやすい形で可視化することを特徴としている。
例えばLDやIL言語で使われる接点とコイルの関係「A⇒B」(条件Aならば結果B)は、接点とコイルをノードとしたときに、有向エッジによって表す方法が最も簡単であり、これ以上簡略また有効な可視化方法はない。
本実施の形態で開示する有閉路有向グラフは、FA・PAシステムの制御プログラムの設計フェーズおよび保守フェーズにて有用である。
前者については、対象となる制御プログラムの解析を行うことより、プログラムの構造化・再利用化の支援となる。また後者については、グラフ上でモニタを行うことで、視覚的にデバッグ作業を実施することが可能となるほか、制御プログラム全体に対して問題箇所(バグ)を最小の手順で見つけ出すことを容易にするため、障害発生時の早急な原因究明の支援となる。
≪構成の説明≫
以降に、図1を用いて、本実施の形態に係る情報処理装置100の構成例を説明する。
図1において、制御プログラム中間コード記憶部101は、FA・PAシステムの制御プログラムが格納されているメモリである。
制御プログラム中間コード記憶部101で記憶されている制御プログラムのソースコードはどのような言語で記述されていても良い。
なお、制御プログラム中間コード記憶部101で記憶されている制御プログラムの中間コードは、制御プログラム中間コード1010と表記する。
この制御プログラム中間コード1010は、FA・PAシステムのエンジニアリング開発環境により、ユーザのプログラミングによって作成されたソースコードをコンパイルした結果である。
後述するように、この制御プログラムは作成中である場合と全て完成されている場合がある。
通常この制御プログラム中間コード1010はエンジニアリング環境のコンパイル生成物であり、シーケンサ機器にダウンロードされる対象でもある。
前述したように、制御プログラム中間コード1010には、複数のデバイスが記述されるとともにデバイス間の依存関係が記述され、複数のデバイスの記述とデバイス間の依存関係の記述により複数のデバイスに対する制御アルゴリズムが定義される。
デバイス抽出部102は、制御プログラムの中で使用されているデバイスの記述を抽出する。
抽出されるデバイスは、制御プログラムがLD言語の場合は接点デバイスやコイルデバイスであり、IL言語である場合はオペランドとして指定するソースデバイスやデスティネーションデバイスである。
デバイス抽出部102で抽出されたデバイスは、ノード情報としてノード構造体記憶部104に格納される。
デバイスの抽出は、例えば制御プログラムの設計段階においては、ユーザが制御プログラムを作成し、意味のある単位(LD言語では例えばラング)を作成するたびに抽出処理をおこなってもよいし、例えば実機システムの保守段階においては、障害が発生した段階で、稼働中の制御プログラム全体に対して一括して行ってもよい。
依存関係抽出部103は、制御プログラムの中のデバイス間の依存関係の記述を抽出する。
抽出される依存関係は、制御プログラムがLD言語の場合は、例えば接点で指定されたデバイスAとコイルで指定されたデバイスBの間の依存関係や、比較条件Cと演算対象Dの間の依存関係である。
依存関係抽出部103で抽出された依存関係は、エッジ情報としてエッジ構造体記憶部105に格納される。
依存関係の抽出は、例えば制御プログラムの設計段階においては、ユーザが制御プログラムを作成し、意味のある単位(LD言語では例えばラング)を作成するたびに抽出処理をおこなってもよいし、例えば実機システムの保守段階においては、障害が発生した段階で、稼働中の制御プログラム全体に対して一括して行ってもよい。
ノード構造体記憶部104は、デバイス抽出部102によって抽出されたデバイスの情報を記憶しておく領域である。
ノード構造体記憶部104で記憶される情報は、ノード構造体1040と表記する。
ノード構造体1040では、デバイスに対して、デバイス名あるいは、ユーザによって命名されたラベル名が格納される。
また、ノード構造体1040にはモニタを行うためのデバイスの現在値の格納エリアも設けてある。
エッジ構造体記憶部105は、依存関係抽出部103によって抽出されたデバイス間の依存関係を記憶しておく領域である。
デバイス間の依存関係はいくつか種別がある。
LD言語を例に取ると例えば、A接点−コイルの関係(D1⇒D2)、B接点−コイルの関係(D1⇒D2)、演算式の関係(D2=D1+1)、条件式の関係(IF D1>0THEN D2=1)などである。
これらの例では全てデバイスD2はデバイスD1に依存している。
依存関係抽出部103では、これらの依存関係の種別と、対象となる2つ以上のデバイスの組合せを抽出する。
依存関係の種別はエッジ構造体1050として格納する。
対象デバイスの組合せは、エッジ構造体1050もしくは、後述する接続情報1060として保存する。
接続情報記憶部106は、デバイスを記憶しているノード構造体1040と、デバイス間の依存関係を記憶しているエッジ構造体1050の間の接続関係を保持しておく記憶領域である。
接続情報記憶部106で記憶されている情報を接続情報1060と表記する。
接続情報1060は、ノード構造体1040とエッジ構造体1050、つまり、デバイス抽出部102で抽出されたデバイスと依存関係抽出部103で抽出された依存関係を対応付ける情報である。
グラフ生成部112は、デバイス抽出部102により抽出されたデバイスの記述と依存関係抽出部103により抽出されたデバイス間の依存関係の記述とに基づき、有閉路有向グラフを生成する。
より具体的には、グラフ生成部112は、ノード構造体1040とエッジ構造体1050と接続情報1060を用い、接続情報1060に示されている対応付けに従って、ノード構造体1040のデバイスとエッジ構造体1050の依存関係を組み合わせて、有閉路有向グラフを生成する。
有閉路有向グラフは、ノードがデバイスを表し、有向エッジがデバイス間の依存関係を表し、制御プログラムで定義されている制御アルゴリズムをノードと有向エッジとの接続で表すグラフである。
有閉路有向グラフの例は、後述する。
条件入力部107は、グラフ生成部112で生成された有閉路有向グラフに対して、グラフ内の要素を検索するための条件やフィルタリングするための条件をユーザがGUIを通して入力する手段である。
例えばGUIによって表示されたグラフに対して、その任意のノードを指定することでノードが特定される。
またはグラフに対して、任意の領域を選択することで、そのデバイス群が選択される。
グラフ解析部108は、用途に応じて有閉路有向グラフをグラフ解析するエンジン部分である。
例えば、条件入力部107で選択されたデバイス群「が」影響を与え得る範囲(当該デバイス群から有向エッジを介して到達可能なノード全て)を抽出することや、逆に条件入力部107で指定されたデバイス「に」影響を与え得る範囲(当該デバイスから有向エッジを逆向きに介して到達可能なノード)を段階的に抽出するなどを行う。
また、グラフ全体のクラスタ性について計測を行い、制御プログラムのデバイス間の結合度合いを算出する、などを行う。
グラフ解析部108は、一般的なグラフ解析ロジックを用いることもできる。
結果出力部109は、グラフ全体や、グラフ解析部108によってフィルタリングされた部分グラフをGUIを通してユーザに表示する手段である。
FA・PAシステムの制御プログラムで用いられるデバイスの数や処理の数は膨大なものになりうるため、本実施の形態で開示している有閉路有向グラフも大規模なものになる可能性がある。
このため、この結果出力部109にはグラフの拡大縮小表示機能や、選択デバイス/依存関係のみを表示する機能、あるいは選択されたデバイス群を縮約して、単一な仮想デバイスとして表示する機能などを持つことができる。
結果出力部109の一部機能は、一般的な複雑グラフ表示技術やツールを用いることもできる。
結果出力部109は表示部の例である。
リンク管理部110は、制御プログラムのコードと、それを変換した有閉路有向グラフの要素(ノード:デバイス、エッジ:ラング(LDの場合))を対応付ける手段である。
リンク管理部110は、GUIを通してユーザに表示されるグラフと、元の制御プログラムコードを対応付けるために用いられる。
例えばグラフのノードを選択すると、それに対応するデバイスが、元の制御プログラムコードの中から検索され、当該デバイスが使用されている全てのラング(LDの場合)が一覧表示される。またエッジを選択すると、それに対応するラング(LDの場合)が表示される。
リンク管理部110は、これらの機能を実現するために使用される。
リンク管理部110はプログラムコード抽出部の例である。
オンラインモニタ部111は、実際のシーケンサ機器と通信を行って、デバイスの現在値を取得する手段である。
ここで取得されたデバイス値は、グラフ表示を用いて現在値モニタを行う際に結果出力部109を介してGUI表示される。
一般的なFA・PAシステムのエンジニアリング開発環境は、既存のプログラミング言語エディタ上にてデバイスのオンラインモニタ機能を実現しているものが多い。
したがって、オンラインモニタ部111は、このオンラインモニタ機能で使用しているデバイス値取得機能部分を流用してもよい。
オンラインモニタ部111は計測値入力部の例である。
≪動作の説明≫
≪1.グラフの表示≫
制御プログラム内で使用されているデバイス間の関係をGUIにて可視的に表示する手順について図2をもとに以下に述べる。
まず、処理202にて、ユーザが制御プログラムを入力する。
続いて、処理203にて、コンパイルを実行する。
しかし、コンパイル可能な単位の入力が完了していない場合は、再び処理202に戻って、制御プログラムの入力を待つ。
コンパイル可能な単位での入力が完了したら、コンパイル操作によって制御プログラム中間コード1010を作成する。
ここまでの処理は一般的なFA・PAシステムのエンジニアリング環境が持つ機能を流用することもできる。
続いて、処理204にて、デバイス抽出部102が制御プログラム中間コード1010からデバイスの抽出を行う。
これにより対象とする制御プログラムの全体あるいは部分で使用されるデバイスの一覧が取得できる。
これらのデバイス情報はノード構造体1040としてノード構造体記憶部104に格納される。
この際、デバイスに関する種々の情報(例えばデバイス種別やラベル名など)も格納する。
同様に、処理205にて、依存関係抽出部103が制御プログラム中間コード1010から依存関係の抽出を行う。
これにより対象とする制御プログラムの全体あるいは部分で処理されているデバイス間の依存関係が抽出される。
これらの情報はエッジ構造体1050としてエッジ構造体記憶部105に格納される。
エッジ構造体1050には後述するように、グラフ解析に利用するための、正論理/負論理の情報なども格納する。
ここでもエッジに関する種々の情報(例えばエッジのタイプなど)も格納する。
同様に、処理206にて、依存関係抽出部103が制御プログラム中間コード1010とエッジ構造体1050から、接続情報1060を構築する。
次に、処理207にて、ノード構造体1040とエッジ構造体1050の間の接続関係を表す接続情報1060およびそれにリンクしたノード構造体1040とエッジ構造体1050から、グラフ生成部112が有閉路有向グラフを生成し、結果出力部109が表示する。
これらの処理を処理201と処理208間で繰り返す。
このループは制御プログラムの作成が完了するまで繰り返される。
上記の流れ以外にも、制御プログラムのコンパイルが完了したことをトリガとして、デバイスの抽出処理204を開始する方法を取ることもできる。
また制御プログラムを保存したタイミング、シーケンサ機器へダウンロードしたタイミングをトリガとする方法もとることができる。
また、処理203のコンパイル時に、前回のコンパイル結果との照合を行い、修正のあった箇所についてのみ処理204以降の処理を行うことで、差分描画処理を行うこともできる。
≪2.対応制御部分プログラム表示≫
GUIにて可視化されたグラフの要素(ノード/エッジ)を選択することで、対応する元の制御プログラムの要素の検索結果を表示する手順について、図3をもとに以下に述べる。
まず、処理301にて、グラフを構築する(接続情報1060構築)段階で、デバイス抽出部102及び依存関係抽出部103が、元の制御プログラムの各要素とグラフの要素(ノード/エッジ)とのリンクを作成する。
グラフのノードと元の制御プログラムのデバイス間のリンク情報はノード構造体1040に、構造体の要素として格納される。
また、グラフのエッジと元の制御プログラムの処理(LD言語であればラング)間のリンク情報はエッジ構造体1050に、構造体の要素として格納される。
これにより、表示されるグラフの各要素が元の制御プログラムの要素と関連づいた状態となる。
処理302により、ユーザがGUIに表示されたグラフの要素を選択する。
すると処理303において、グラフ解析部108により、そのグラフ要素がノードであるかエッジであるかが判別される。
ノードである場合は処理304にて、リンク管理部110により、ノード構造体1040とそこからリンクを辿った先の制御プログラム中間コード1010から、該当ノードが表すデバイスを使用した全ての処理(LD言語であればラング)が検索される。
エッジである場合は処理305にて、リンク管理部110により、エッジ構造体1050とそこからリンクを辿った先の制御プログラム中間コード1010から、該当エッジが表す処理(LD言語であればラング)が抽出される。
最後に、処理306にて、結果出力部109により、処理304もしくは処理305で抽出した制御プログラム中間コード1010が表示される。
この表示は、例えば、グラフと制御プログラム中間コード1010とを並べて表示することが考えられる。
処理304および処理305によりグラフ上の対応要素が特定され、制御プログラム中間コード1010内の対応要素が特定された後は、一般的なエンジニアリング環境で実現されている検索結果表示機能を用いて、対応する制御プログラム検索結果表示処理306を行うこともできる。
≪3.特定デバイス仕様出力≫
GUIにて可視化されたグラフの特定ノードを選択することで、当該ノードの仕様を日本語(自然言語の一例)にて表示する手順について、図4をもとに以下に述べる。
まず、処理401にて、ユーザによってGUIに表示されたグラフから、対象となるノードが選択される。
次に、処理402にて、グラフ解析部108によるグラフ解析により、指定されたノードに至る全てのパスを構成するノード、エッジを含む部分グラフを抽出する。
つまり、グラフ解析部108は、指定されたノードに影響を与える可能性のあるノードとエッジを全て抽出する。
この処理は対象ノードから全ての有向エッジを逆向きに辿り、見つかったノードとエッジを部分グラフに追加していき、新しいノードが見つからなくなるまで続けることで実行可能である。
これは一般的なグラフ解析ロジックを用いてもよい。
処理403にて、グラフ解析部108は、作成した部分グラフ内で入出力デバイスを表現しているノードのみを抽出する。
これは特定デバイスの仕様を出力する際に、実機システムとのインタフェースとしてユーザに分かりやすいデバイスを表示する意味がある。
しかし、入出力デバイスに限定する必要はなく、内部デバイスに対しても実行してもよい。
また、この処理を行うため、ノード構造体1040にはあらかじめ対応するデバイスの種別情報を格納しておく必要がある。
入出力デバイスそれぞれについて処理を行うため、処理404から処理407でループ処理を行う。
この内部では、処理405にて、グラフ解析部108は、対象となる入出力デバイスから出ている有向エッジについて日本語へ変換する。
例えば、特定デバイスが「モータC(正転)」であり、対象となった入力デバイスのラベル名が「センサA」であり、そこから出る有向エッジのタイプが「A接点−コイル」だとすると、「モータC(正転)はセンサAに依存する」という説明文が作成される。
また、もう一つの入力デバイスのラベルが「非常停止ボタンB」であり、エッジのタイプが「B接点−コイル」だとすると、「モータC(正転)は非常停止ボタンBに依存する」という説明文が作成される。
処理406にてこれらの説明文が、結果出力部109により、一文ずつユーザに提示される。
処理405にて、入出力デバイスに隣接するエッジのみを考慮に入れているが、これは出力される仕様の文章を単純化するためである。
より厳密に、入出力デバイスから特定デバイスに至るパスを有向エッジに沿った形で連ね、全て日本語化することも可能である。
また、逆に、405の処理は割愛し、入出力デバイスのみを持って、簡単な仕様として表示する方法もある。
この場合は入出力デバイスに隣接するエッジの情報は使用されず、一様に「[入出力デバイス]に依存する」という記述になる。
≪4.影響範囲図示≫
GUIにて可視化されたグラフの特定領域を選択することで、それらの範囲に変更を行った場合の、制御プログラムに与える影響範囲を図示する手順について、図5をもとに以下に述べる。
まず、処理501にて、ユーザによってGUIに表示されたグラフから、対象となる領域(部分グラフ)が選択される。
次に、処理502にて、グラフ解析部108が、グラフ解析により、指定された領域に至る全てのパスを構成するノード、エッジを含む部分グラフを抽出する。
この処理は対象領域内にある全てのノードについて、そのノードに隣接する有向エッジを逆向きに辿って、見つかったノードとエッジを部分グラフに追加していき、新しいノードが見つからなくなるまで続けることで実行可能である。
この処理により、グラフ解析部108は、ユーザによって指定された対象領域内の要素(指定要素)に変更があった場合に当該変更の影響を受ける影響範囲を抽出することができる。
なお、この影響範囲の抽出処理は、一般的なグラフ解析ロジックを用いてもよい。
処理503にて、結果出力部109が、既に表示されている全体グラフの中で、作成した部分グラフについて強調表示等を行って、影響範囲が分かるようにする。
なお、ここでは、結果をグラフ上に図示する例のみを載せているが、制御プログラム中間コード内の処理(LD言語ではラング)を表示する方法も取ることができる。
≪5.未使用箇所検出≫
GUIにて可視化されたグラフ上で、制御プログラム内のどの出力デバイスにも影響を与えないデバイス群(未使用デバイス群)を図示する手順について、図6をもとに以下に述べる。
まず処理601から処理603にて、全ての出力デバイスについて繰り返す。
処理602にて、グラフ解析部108が、グラフ解析により、出力デバイスへ至る全てのパスを構成するノード、エッジを含む部分グラフを抽出する。
この処理は出力デバイスを表すノードについて、そのノードに隣接する有向エッジを逆向きに辿って、見つかったノードとエッジを部分グラフに追加していき、新しいノードが見つからなくなるまで続けることで実行可能である。
これは一般的なグラフ解析ロジックを用いてもよい。
また、この部分は前述した影響範囲図示と同じアルゴリズムを流用することもできる。
また出力デバイス以外にも外部システムとのインタフェースとなるデバイスが存在する可能性がある。
これらについて、ユーザが任意にデバイス群を指定する、あるいはデバイス種別を選択することができても良い。
処理604にて、グラフ解析部108は、既に表示されている全体グラフの中から、処理603にて抽出した部分グラフに含まれない、全てのノード(未使用デバイス)とエッジを抜き出す。
また未使用デバイスのみを一覧表示するため、ここで抜き出す要素をノードのみに限っても良い。
そして、処理605にて、結果出力部109が、これらの部分グラフ群を強調表示する。
なお、ここでは、結果をグラフ上に図示する例のみを載せているが、制御プログラム中間コード内の処理(LD言語ではラング)を表示する方法も取ることができる。
≪6.循環定義検出≫
GUIにて可視化されたグラフ上で、制御プログラム内でソフトウェアによるチャタリング(特定のデバイスがサイクリック時間(の定数倍)ごとにONとOFFを繰り返す現象)を起こす危険性のあるデバイスの組合せを検出する手順について、図7をもとに以下に述べる。
この現象は通常、本実施の形態で開示している有向グラフ表現において、循環(エッジの向きを考慮した閉路)があり、その循環のパス上で奇数回の負論理回路が存在するときに発生する可能性がある。
ただし、タイマデバイスやカウンタデバイスなど、条件が満たされてからコイルがONとなるまでに遅延があるものは対象外とする。
まず、処理701にて、グラフ解析部108は、任意のビットデバイスを開始地点として対象ノードとする。
上記したように、対象ノードにはタイマやカウンタなど、状態を持つことで条件ONからコイルONまでに時間的遅延が発生するものは対象としない。
次にグラフ内のノードを探索するため、処理702および処理703から処理708にて、グラフ解析部108はグラフ内の探索を行う。
ここでの目的は、タイマやカウンタを含まず、負論理が奇数回登場する循環定義を検出するため、処理704にて負論理に相当するエッジ(処理)の数をカウントする。
この時に必要となるそのエッジが負論理であるかどうかの情報は、先に述べた「依存関係の抽出」処理205にて、エッジ構造体1050内に格納しておく。
次に、グラフ解析部108は、探索中に経由するノードについて、処理705にて、カウンタやタイマにたどり着いたかどうかチェックを行う。
カウンタやタイマを経由する場合は、循環定義として抽出しない(サイクリック時間とは異なったユーザ定義値を基準にしてデバイスのON/OFFが切り替わるため、正常な動作と考えられるため)。
しかし、実装する機能としては、ユーザへ循環定義抽出結果にカウンタやタイマを含むことを知らせた上で、条件分岐処理705を除くこともできる。
次に処理706にて、グラフ解析部108は、循環を形成するかどうかチェックを行う。
現時点までの探索経路内に訪れたノードに至った場合は循環(閉路)が存在することになるため、処理707にてその循環パスを記録する。
最後に、グラフ解析部108は、処理709にて、記録した循環パスの負論理の数が奇数のものについて、循環定義によってソフトウェアによるチャタリングが発生する危険性がある循環定義として抽出する。
そして、処理710において、結果出力部109が、該当するパスを図示する。
図7は対象とする制御プログラムおよびそれを表現しているグラフが連結していることを前提としている。
制御プログラムがいくつかの独立した部分グラフから構成される場合は、それぞれ独立した部分グラフ内で、処理701によって一つの開始ノードを選択する必要がある。
なお、処理702から処理708までに記述したグラフ内の探索手順は一例であり、その他のグラフ解析アルゴリズムを用いてもよい。
≪7.デバイス値モニタ≫
GUIにて可視化されたグラフ上で、ユーザが現在値モニタを行いたいデバイス群を指定し、シーケンサ機器、あるいは制御プログラムシミュレータと接続時に、それらのデバイスの現在値をモニタする手順について、図8をもとに以下に述べる。
まず、処理801にて、GUIにて可視化されたグラフ上で、ユーザがモニタを行いたい任意のデバイス群を選択する。
ただし、制御プログラム内の全てのデバイス、あるいは画面表示された全てのデバイスを対象とする場合は、ユーザからの指定は不要である。
次に、選択されたデバイスについて、処理802から処理805までを繰り返す。
処理803では、オンラインモニタ部111が、対象デバイスそれぞれについて、シーケンサ機器または制御プログラムシミュレータから、対応するデバイスの現在値を取得してノード構造体1040へ格納する。
続いて処理804にて、結果出力部109が、グラフのノード上にテキストとして、あるいはノードの形状変更、あるいはノードの色変更等によって、ノードが表現するデバイスの現在値を表示する。
なお、モニタを定期的に行う場合は、例えば1秒毎に処理802から処理805までの処理を繰り返すことで実現が可能である。
また、シーケンサ機器や制御プログラムシミュレータから、デバイスの現在値だけでなく、制御プログラム内のどの処理が実行されたのかが取得可能であれば、オンラインモニタ部111が、エッジ構造体1050に処理実行中フラグを設定/解除することによりグラフ上に表示することもできる。
≪8.障害要因の図示≫
実機システムあるいは制御プログラムシミュレータ上にて、障害が発生した場合、その要因となる制御プログラム上のバグを特定するため、GUIにて可視化されたグラフ上で、ユーザにより障害が顕在化しているデバイス、また完全に正常に動作しているデバイスを特定することで、障害の要因となるデバイスあるいは処理を図示する手順について、図9をもとに以下に述べる。
まず、処理901にて、グラフ解析部108が、初期処理として要因領域を空に設定する。
要因領域は、障害の要因の候補としてグラフ上に示す要素を格納する領域である。
以降処理902から処理909までは、ユーザが障害要因を特定するまで繰返し実行する。
処理903にて、ユーザは障害が発生した時に、その現象が直接現れたデバイス、あるいは確実に異常な振舞いをしているデバイスを指定し、それが「異常」デバイスであることを入力する。
グラフ解析部108は、処理904にて、全体グラフから、ユーザが指定したデバイスのノード(異常発生デバイスノード)に至るパス全てをマージした部分グラフを抽出する。
つまり、グラフ解析部108は、異常発生デバイスノードと接続している有向エッジを有閉路有向グラフから抽出するとともに、抽出した有向エッジと接続しているノード(デバイス)を抽出する。
この処理は前述した502の処理と同じである。
次に、処理905にて、グラフ解析部108は、抽出したデバイスの正常/異常をチェックする。
デバイスごとの正常/異常は、ユーザが指定する。
ユーザから「正常」と指定されたデバイスについては、処理906にて、現時点の要因領域から、抽出した部分グラフを削除する(「正常」と指定されたデバイスのノードと当該ノードに接続しているエッジを要因領域に含めない)。
これは障害要因が含まれる可能性がある要因領域のうち、全ての条件において完全に正常であると判断されたデバイスに影響を与える領域については、要因領域から除くことができるためである。
反対に、ユーザから「異常」と指定されたデバイスについては、処理907にて、現時点の要因領域に抽出した部分グラフを追加する(「異常」と指定されたデバイスのノードと当該ノードに接続しているエッジを要因領域に含める)。
これは障害要因が含まれる可能性がある要因領域が拡大するためである。
ここでは障害要因が1つであるとは限らないため、907の処理において抽出した部分グラフとその時点の要因領域のANDを取ることはしていない。
次に、処理908にて、結果出力部109が、その時点での要因領域をグラフ上に強調表示する。
これにより障害の要因と考えられるデバイスおよび処理を絞り込むことが可能となる。
また、処理907にて部分グラフとその時点の要因領域のAND領域に相当する部分について、色変更や形状変更などにより要因領域全体と区別して表示することも可能である。
これにより、より要因が存在する可能性が高い領域を絞り込むことが可能である。
実施の形態2.
≪グラフ表示の例≫
ここでは、LD言語で記述されたFAシステム用の制御プログラムがどのように有閉路有向グラフへ変換され、それが表示されるのかについて、具体例をもって説明する。
図10は、FAシステム用の制御プログラムの例であり、LD言語により記述されている。
この制御プログラムは次のような仕様で動作する。
なお、図18は、図10の制御プログラムをIL言語で記述したものである。
a)入力(開始ボタン)を押下すると出力(ランプ)が点灯する。
b)出力(ランプ)は3秒間点灯する。
c)3回実行すると、入力(開始ボタン)には反応しなくなる。
d)入力(リセットボタン)を押下するとデバイス値をリセットして最初の状態へ戻る。
e)入力(開始ボタン)は押し続ける必要はなく、内部デバイスは自己保持する。
以下にLDプログラムを示した図10について説明する。
1000は上記した1)から5)の仕様を満たす制御プログラムの例である。
まず、最初のラング(回路ブロック)にて内部デバイスのコイル1004の定義を行っている。
内部デバイス1004は、出力(ランプ)を直接定義するための中間的なデバイスである。
上記仕様のa)にあるように、内部デバイス1004は、入力(開始ボタン)の押下によってONするため、入力(開始ボタン)のA接点1001が条件となる。
次に、仕様c)にあるように、ボタン押下を3回行って3回実行が完了したとき、またd)にあるように入力(リセットボタン)押下されたときは、内部デバイスのコイル1004がOFFとなることを実現するため、カウンタ1002のB接点1002と、入力(リセットボタン)のB接点1003をそれぞれAND条件とする。
e)にあるように、内部デバイスは自己保持するため、入力(開始ボタン)とOR条件で内部デバイスのA接点1005を付け、ただしこの自己保持はb)の仕様から3秒間のみ継続するため、タイマのB接点1006をAND条件として付ける。
次に、タイマのコイル1008と出力(ランプ)コイル1009の定義を行っている。
これらのコイルは何れも内部デバイスから直接定義されるため、内部デバイスのA接点1007のみを条件とする。
タイマのコイル1008は、内部デバイス1007がONになった状態で3秒間経過するとONする。つまり3秒経過した時点でタイマのB接点1006がOFFとなる。
次にカウンタのコイル1012の定義を行う。
仕様c)より、カウンタは入力(開始ボタン)を3回押下し、処理が完了したときにカウントアップする必要がある。このため、タイマのタイムアップタイミング(つまりタイマのA接点1011)をカウンタの条件としている。カウンタ1012は、タイマのA接点1011が3回OFFからONになったタイミングでONする。
最後のラングでは入力(リセットボタン)1013を実現している。
仕様d)を実現するため、入力(リセットボタン)のA接点1013がONしたタイミングで、カウントアップしているカウンタを0にリセットするため、RESET命令1014を使用している。
以上のような制御プログラム1000がシステム内の制御プログラム中間コード1010として格納されている場合の、グラフ表示が行われる流れについて、グラフ表示のフロー200の中の処理204から具体的に説明する。
まず、デバイス抽出部102が、デバイスの抽出処理204を行う。
これは制御プログラムをスキャンして、使用しているデバイスを抽出することで実現する。
制御プログラム1000の例では、ノード構造体1040として、デバイス一覧1200(図12)が抽出される。
ノード構造体例1200のデバイス(ラベル)名欄には制御プログラムで通常そのデバイスを特定する名称が登録されるが、ここにはデバイスIDやラベルIDや変数名など、デバイスを一意に特定できるものであればなにを登録しても良い。
また、デバイス種別欄には対象とするシーケンサ機器や制御プログラムで使用できるデバイス種別が格納される。
次に、依存関係抽出部103が、依存関係の抽出処理205を行う。
これは制御プログラムをスキャンして、各ラングの「条件⇒コイル」の関係を抽出することで実現する。
制御プログラム1000の例では、エッジ構造体1050として、依存関係一覧1300(図13)が抽出される。
エッジ構造体例1300のエッジタイプには、そのエッジが表している制御プログラムの処理のタイプが登録される。
例えば制御プログラム1000の最後のラングに注目する。
このラングでは入力(リセットボタン)のA接点1013と、カウンタのRESET1014との間に依存関係が存在している。
この部分をIL言語で表現すると以下のようになる。
なお制御プログラム1000をIL言語で表現した例を図18に載せる。
前述のとおり、一般的にLD言語のプログラム要素とIL言語のプログラム要素は一対一に対応させることができる。
LOAD 入力(リセットボタン) ――― 1013
RESET カウンタ ―――――――――― 1014
エッジ構造体1300の例では、このIL言語の命令を組み合わせてエッジタイプとしている。
上記の例はエッジ構造体1300の番号9に表されている「LOAD−RESET」がエッジタイプとなる。
このエッジタイプにより、2デバイス間の依存関係の概略を表現することが可能となる。
次に論理の欄は、エッジによって接続される2デバイス間の論理(正論理/負論理)を登録する。
ここでいう論理とは、有向エッジによって表現される処理が、デバイスのON/OFFを逆転させるかどうかを表している。このためデバイス種別がビットでない場合(ワードである場合)は無効となる。
次に、依存関係抽出部103が、接続情報の構築処理206を行う。
これは処理204と処理205で作成したノード構造体1200とエッジ構造体1300の間をリンク付けする処理である。
制御プログラム1000の例では、接続情報1400(図14)が構築される。
接続情報1400のエッジ欄は接続関係を表現しているエッジ構造体1300内のエッジの番号を示している。
同様に元ノード欄と先ノード欄は、ノード構造体1200内のノードの番号を示している。
接続情報で表現されているエッジは必ず有向グラフであるため、元ノード欄と先ノード欄に分けて設定される。
なお、通常エッジ構造体1300の番号欄と接続情報1400のエッジ欄は一対一に対応するため、エッジ構造体1300と接続情報1400は同一の表として実現してもよい。
最後に、グラフ生成部112が有閉路有向グラフの生成・描画処理207を行う。
上述した処理205までの処理によってグラフ描画のための情報であるノード構造体1200、エッジ構造体1300、接続情報1400は全て作成されている。
このため、グラフ生成部112は、接続情報1400に示されている対応付けに従って、ノード構造体1200のデバイスとエッジ構造体1300の依存関係を組み合わせて、有閉路有向グラフの生成・描画を行う。
図11は、制御プログラム1000を、本実施の形態に係るグラフ表示方法によって表示した例を模式的に表したものである。
入力デバイスと出力デバイスは矩形、内部のデバイスは円で示している。
また、正論理の処理は実線、負論理の処理は破線で示している。
また、図11のノード内の(1)〜(6)は、ノード構造体1200(図12)に示されている番号を表し、エッジ近傍の(1)〜(9)は、エッジ構造体1300(図13)に示されている番号を表している。
ここでは、グラフを構成する要素であるノードとエッジを描画する手順について説明する。
例えばノード(デバイス)の種別毎に画面上で分類をして表示を行いたければ、ノード構造体1200内のデバイス種別の同じものを集めて画面上へノードを表示する。
ノード構造体1200のデバイス種別から、入力のデバイスを取得すると、「ビット入力」であるものは入力(開始ボタン)1101と入力(リセットボタン)1102となる。
同様にノード構造体1200のデバイス種別から、内部のデバイスを取得すると、「タイマ」「カウンタ」「ビット内部」であるものは、内部デバイス1103とタイマ1104とカウンタ1105となる。
次に、ノード構造体1200のデバイス種別から、出力のデバイスを取得すると、「ビット出力」であるものは、出力(ランプ)1106となる。
次に、接続情報1400の表の元ノード欄と先ノード欄をチェックして、エッジ番号およびエッジ構造体1300のエッジタイプや論理を取得する。
これにより、グラフとして表示されるノード間がどのようなエッジで接続されているのかを知り、そのエッジタイプや論理によってエッジの線種などを変更する。
前述のように図11の例では、エッジ構造体1300の論理欄から、その処理(エッジ)が正論理の場合は実線、負論理の場合は破線で示している。
接続情報1400の一行目を見ると、元ノード番号が1、先ノード番号が2でエッジ番号が1であるため、入力(開始ボタン)1101と内部デバイス1103の間にエッジが存在し、そのエッジはエッジタイプが「LOAD−OUT」であり、正論理であることが分かる。
したがって、画面にはグラフとして入力(開始ボタン)1101と内部デバイス1103の間に、有向エッジとして実線のエッジ1110を描画する。
さらに、例えば接続情報1400の2行目にあるように、自分自身のノードへのエッジの場合は、ループの形でエッジ1113を表示する。
このように、エッジ構造体1300および接続情報1400内の、エッジ番号1は実線エッジ1110、番号2は実線ループエッジ1113、番号3は破線エッジ1116、番号4は破線エッジ1118、番号5は破線エッジ1111、番号6は実線エッジ1115、番号7は実線エッジ1114、番号8は実線エッジ1117、番号9は破線エッジ1112、にそれぞれ対応する。
このようにして、制御プログラム1000は、図11に示すようなグラフ表示が可能となる。
制御プログラム1000から自動的に図11のグラフ表示を行うため、図11のグラフのノードの配置アルゴリズムについては、さまざまな方法をとることができる。
上述したように、ノードの同一な種別を同一領域にまとめて配置する方法や、ノードとして表されたデバイスの番号順や名称順に並べる方法、さらにノードの次数(ノードから出入りするエッジの数)の多い順などが考えられる。
また、エッジによって接続された2つのノードをより近くに表示させる方法などもある。
これらのノードおよびエッジの配置方法については一般的な複雑グラフ表示アルゴリズムを用いることもできる。
また、グラフは2次元平面上だけでなく、3次元空間上に表示させることもできる。
さらに一度表示されたノードおよびエッジはその位置をユーザが自由に変更させることができる。
この場合、一般的なグラフ描画ツールに搭載される機能と同じように、ノードやエッジをマウスによるドラッグ&ドロップなどの方法で、ユーザの好みの配置へ変更することができる。
実施の形態3.
≪影響範囲図示の例≫
図15は、ある制御プログラムをグラフ表示した例である。
この制御プログラムは入力ビットデバイスが1501、1502の2つ、内部ビットデバイスが1503、1504、1505の3つ、出力ビットデバイスが1506、1507、1508の3つから成っている。
実線のエッジは、エッジが表す処理が正論理であることを示し、破線のエッジはエッジが表す処理が負論理であることを示している。
このグラフを使用して、影響範囲図示の例について以下に説明する。
影響範囲図示のフローを示した図5を参照すると、まずユーザによって対象領域の選択処理501が行われる。
ここでの例では、ユーザによって出力1のノード1506が選択されたとする。
次の502の処理にて、グラフ解析部108が、対象領域に至る全てのノードを列挙する。
図15の例の場合、まず対象領域であるノード1506に至る隣り合った有向エッジは、エッジ1515のみであるため、まずパスとしてこれを加える。
次に、エッジ1515の元ノード1503に注目する。
このノードへ至る隣り合った有向エッジは、エッジ1514とエッジ1510であるため、パスとしてこれを加える。
このときエッジ1514はノード1503へ戻るループであるため、こちらのパスはここで探索を終える。
もう片方のエッジ1510の元ノード1501に注目する。
このノード1501については、このノードへ至る隣り合った有向エッジが存在しないため、ここで探索を終える。
この結果、503の処理において強調表示される部分は、図16に示す領域となる。
つまり出力1のノード1606を対象とした場合、このノードに影響を与える範囲としては、図16内の黒塗り及び太線で示した部分、つまり処理1615と、内部1デバイス1603と、処理1614と、処理1610と、入力デバイス1601となる。
このように、影響範囲図示のフローの502の処理は、グラフについて、有向エッジを逆向きに辿る探索を行うことで全てのパスを抽出することができる。
この際の探索方法は、一般的なグラフ探索アルゴリズムを用いることができる。
探索方法は深さ優先探索でも幅優先探索でもかまわない。
ただし、グラフが有閉路グラフであるため、既に訪れたノードを記憶しておくこと、また有向グラフであるため、エッジの向きを逆向きに探索するという制約がある。
≪循環定義検出の例≫
同様に図15のグラフを使用して、循環定義検出の例について以下に説明する。
循環定義検出のフローを示した図7を参照すると、まず処理701にて、任意のビットデバイスを対象ノードとする。
ここでは例として、入力1のノード1501を選択する。
次に、処理702にて、グラフ解析部108が、対象ノードから出ているエッジを選択する。
図15の例では、エッジ1510とエッジ1511が対象となる。
ここから処理703にてグラフ内探索を開始する。
ループ内では処理704によりエッジの論理をチェックする。
エッジ1510とエッジ1511は両方とも正論理であるため、カウントアップは行わない。
そして、処理705により、グラフ解析部108は、次に至るノードがカウンタやタイマであるかどうかを判断する。
エッジ1510によって至るノードである内部1ノード1503と、エッジ1511によって至るノードである内部2ノード1504は、両方ともカウンタやタイマではないため、そのまま処理706の処理に移る。
次の処理706において、この時点で「既に経由したノード」として記憶されているのは、最初に選択した入力1ノードのみであるため、ここで至った内部1ノード1503と内部2ノード1504と異なり、条件706には合致しない。
このため、処理704へ戻る。
次に、内部1ノード1503に注目し、このノードから出ているエッジ1514とエッジ1515について判断する。
エッジ1514は正論理であるため、処理705にてカウントアップは行わないが、エッジ1514はループエッジであるため、条件706に合致する。
そして、処理707にて、循環定義としてそのパスと負論理のカウント値の組「内部1ノード1503、エッジ1514、カウント0」が保存される。
内部1ノード1503から出ているエッジ1515の方は、そのまま出力1ノード1506へ至り、ノード1506から出ているエッジは存在しないため、ここでこの枝の探索は終了する。
次に、内部2ノード1504を対象として、同様にグラフ探索を続ける。
すると「内部2ノード1504、エッジ1517、内部3ノード1505、エッジ1518、出力3ノード1508、エッジ1519、カウント1」と、閉路が存在することが分かる。
なおかつこの閉路を構成する3つのエッジのうち、エッジ1519のみが負論理の処理を表している。
この結果、処理709において、この閉路は循環定義パスのうち負論理が奇数のものに該当する。
なお、先に抽出した「内部1ノード1503、エッジ1514、カウント0」はカウントが偶数であるため、対象からは外れる。
したがって、処理710にて、図17に示すように循環定義「内部2ノード1704、エッジ1717、内部3ノード1705、エッジ1718、出力3ノード1708、エッジ1719、カウント1」が抽出できる。
よって、この図15または図17で表される制御プログラムにおいて、3つのデバイス、内部1、内部2および出力3は、ソフトウェアによるチャタリングを起こす危険性があるということが分かる。
≪実施の形態における効果≫
実施の形態1〜3で開示する方法によれば、制御プログラムで制御される変数(デバイス)を抽出してノードとし、デバイス間の相互作用を依存関係として抽出してエッジとすることで、制御プログラムを有閉路有向グラフとして制御プログラム内で使用されているデバイス間の関係を、GUIにて可視的に表示することが可能となる。
グラフ表示内の特定のノード、つまりデバイスに注目した場合には、制御プログラムによって、そのデバイスによって引き起こされる全ての操作が、そのノードから出ているエッジとして表現されており、またそのデバイスへ影響を与える全ての操作が、そのノードへ入っているエッジとして表現されることになる。
このため、制御プログラムのグラフ表示を確認させることで、LD言語やIL言語の熟練者でない作業者に対しても、デバイスを中心とした制御プログラムの理解支援が可能となる。
また、制御プログラムを有閉路有向グラフとして表示し、可視化された表示の一部分を指定することで、指定するデバイス群に対して変更を行った場合の影響範囲について図示することが可能となる。
この結果、例えば制御プログラムが動作するFA・PAシステムにおける障害発生時に、LD言語やIL言語のみを用いて障害の原因究明を行うよりも短時間で、その要因発見を支援することができる。
また、制御プログラムを有閉路有向グラフとしてデータ構造に保持することにより、ソフトウェアによるチャタリングなどのプログラム上の潜在バグについて確認することが可能となるため、制御プログラムの設計時に、シミュレータや実際のFA・PAシステムと接続して判明するような潜在バグや不安定な動作の危険性を、プログラムの静的チェックで知ることが可能となる。
この結果、制御プログラムの設計フェーズにおける手戻り工数の削減を助けることが可能となる。
以上の実施の形態1〜3では、
制御プログラムで制御される変数(デバイス)を抽出してノードとし、デバイス間の相互作用を依存関係として抽出してエッジとすることで、制御プログラムを有閉路有向グラフとしてデータ構造に保持することで、制御プログラム設計時に以下の支援を行うシステムを説明した。
1)制御プログラム内で使用されているデバイス間の関係を、GUIにて可視的に表示する
2)可視化された表示の部分を指定することで、対応する元の制御プログラムの部分を表示する
3)特定のデバイスについて、他デバイスとの関係を表す仕様を文章で表示する
4)指定するデバイス群に対して変更を行った場合の影響範囲について図示する
5)制御プログラム内に登場する、未使用デバイスについて指摘する
6)ソフトウェアによるチャタリングなどのプログラム上の潜在バグについて指摘する
7)複数箇所で登場する同一構造を可視化することで、ソフトウェア部品の再利用を支援する
8)デバイス群の疎結合部分を見つけ出すことで、制御プログラムの分割について支援する
9)有閉路有向グラフを解析し、制御プログラムのデバイス間の結合度合いの指標を示す。
また、実施の形態1〜3では、
制御プログラムで制御される変数(デバイス)を抽出してノードとし、デバイス間の相互作用を依存関係として抽出してエッジとすることで、制御プログラムを有閉路有向グラフとしてデータ構造に保持することで、制御プログラム保守時に以下の支援を行うシステムを説明した。
10)GUIにて可視的に表示された依存関係上にて、デバイス値をモニタする
11)障害が現れたデバイス群を指定することで、その要因となりうる箇所を図示する。
また、上記を実現するための以下の構成も説明した。
1)制御プログラムで使用されているデバイスをノードとして抽出する「デバイス抽出部」
2)記述されたデバイス間の依存関係(処理)をエッジとして抽出する「依存関係抽出部」
3)解析条件および障害状況を入力する「条件入力部」
4)有閉路有向グラフの構造を解析する「グラフ解析部」
5)解析結果を出力する「結果出力部」
6)制御プログラムと有閉路有向グラフの部分の対応関係を管理する「リンク管理部」
7)実機器との通信によって、デバイスの現在値を取得する「オンラインモニタ部」。
更に、上記のグラフ構築部にて構築される有閉路有向グラフをシステム内のメモリに保持するための以下の特徴を持つデータ構造を説明した。
1)デバイス(ラベル)をノード構造体として表現
2)処理を、元の制御プログラムの処理位置へのリンク情報を持つエッジ構造体として表現
3)ノード構造体とエッジ構造体を接続するトポロジ情報。
また、ネットワーク上の制御機器上などに格納された、複数に分割された制御プログラムについて、その制御プログラム間の共通デバイス設定を参照することで、複数の制御プログラムをシームレスに一つの有閉路有向グラフとして扱うシステムと構成と手順についても説明した。
≪ハードウェア構成例≫
最後に、実施の形態1〜3に示した情報処理装置100のハードウェア構成例について説明する。
図19は、実施の形態1〜3に示す情報処理装置100のハードウェア資源の一例を示す図である。
なお、図19の構成は、あくまでも情報処理装置100のハードウェア構成の一例を示すものであり、情報処理装置100のハードウェア構成は図19に記載の構成に限らず、他の構成であってもよい。
図19において、情報処理装置100は、プログラムを実行するCPU911(Central Processing Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。
CPU911は、バス912を介して、例えば、ROM(Read Only Memory)913、RAM(Random Access Memory)914、通信ボード915、表示装置901、キーボード902、マウス903、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。
更に、CPU911は、FDD904(Flexible Disk Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907と接続していてもよい。また、磁気ディスク装置920の代わりに、SSD(Solid State Drive)、光ディスク装置、メモリカード(登録商標)読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
実施の形態1〜3で説明した「〜記憶部」は、RAM914、磁気ディスク装置920等により実現される。
通信ボード915、キーボード902、マウス903、スキャナ装置907などは、入力装置の一例である。
また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置の一例である。
通信ボード915は、ネットワークに接続されている。
例えば、通信ボード915は、LAN(ローカルエリアネットワーク)、インターネット、WAN(ワイドエリアネットワーク)、SAN(ストレージエリアネットワーク)などに接続される。
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。
プログラム群923のプログラムは、CPU911がオペレーティングシステム921、ウィンドウシステム922を利用しながら実行する。
また、RAM914には、CPU911に実行させるオペレーティングシステム921のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、RAM914には、CPU911による処理に必要な各種データが格納される。
また、ROM913には、BIOS(Basic Input Output System)プログラムが格納され、磁気ディスク装置920にはブートプログラムが格納されている。
情報処理装置100の起動時には、ROM913のBIOSプログラム及び磁気ディスク装置920のブートプログラムが実行され、BIOSプログラム及びブートプログラムによりオペレーティングシステム921が起動される。
上記プログラム群923には、実施の形態1〜3の説明において「〜部」(「〜記憶部」以外、以下同様)として説明している機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
ファイル群924には、実施の形態1〜3の説明において、「〜の抽出」、「〜の生成」、「〜の構築」、「〜の選択」、「〜の変換」、「〜の設定」、「〜の登録」、「〜の取得」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのCPUの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態1〜3で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD等の記録媒体に記録される。
また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
また、実施の形態1〜3の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、実施の形態1〜3で説明したフローチャートに示すステップ、手順、処理により、本発明に係る「情報処理方法」を実現することができる。
また、「〜部」として説明しているものは、ROM913に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。
プログラムはCPU911により読み出され、CPU911により実行される。
すなわち、プログラムは、実施の形態1〜3の「〜部」としてコンピュータを機能させるものである。あるいは、実施の形態1〜3の「〜部」の手順や方法をコンピュータに実行させるものである。
このように、実施の形態1〜3に示す情報処理装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
100 情報処理装置、101 制御プログラム中間コード記憶部、102 デバイス抽出部、103 依存関係抽出部、104 ノード構造体記憶部、105 エッジ構造体記憶部、106 接続情報記憶部、107 条件入力部、108 グラフ解析部、109 結果出力部、110 リンク管理部、111 オンラインモニタ部、112 グラフ生成部。

Claims (15)

  1. 複数のデバイスが記述されるとともにデバイス間の依存関係が記述され、前記複数のデバイスの記述とデバイス間の依存関係の記述により前記複数のデバイスに対する制御アルゴリズムが定義される制御プログラムから、各デバイスの記述を抽出するデバイス抽出部と、
    前記制御プログラムから、デバイス間の依存関係の記述を抽出する依存関係抽出部と、
    前記デバイス抽出部により抽出されたデバイスの記述と前記依存関係抽出部により抽出されたデバイス間の依存関係の記述とに基づき、ノードがデバイスを表し、有向エッジがデバイス間の依存関係を表し、前記制御プログラムで定義されている制御アルゴリズムをノードと有向エッジとの接続で表す有閉路有向グラフを生成するグラフ生成部とを有することを特徴とする情報処理装置。
  2. 前記依存関係抽出部は、
    前記デバイス抽出部により抽出されたデバイスの記述と、抽出した依存関係の記述とを対応付ける接続情報を生成し、
    前記グラフ生成部は、
    前記デバイス抽出部により抽出されたデバイスの記述と、前記依存関係抽出部により抽出されたデバイス間の依存関係の記述と、前記依存関係抽出部により生成された接続情報とを用いて、前記有閉路有向グラフを生成することを特徴とする請求項1に記載の情報処理装置。
  3. 前記デバイス抽出部は、
    IEC(International Electrotechnical Commission)61131−3規格で定義されている言語で作成された制御プログラムから、各デバイスの記述を抽出し、
    前記依存関係抽出部は、
    IEC61131−3規格で定義されている言語で作成された前記制御プログラムから、デバイス間の依存関係の記述を抽出することを特徴とする請求項1又は2に記載の情報処理装置。
  4. 前記情報処理装置は、更に、
    前記グラフ生成部により生成された有閉路有向グラフをGUI(Graphical User Interface)方式にて表示する表示部を有することを特徴とする請求項1〜3のいずれかに記載の情報処理装置。
  5. 前記依存関係抽出部は、
    デバイス間の依存関係として、1つの動作手順において起点となる起点デバイスと起点デバイスの動作に動作状態が依存する依存デバイスとが記述されている制御プログラムから、デバイス間の依存関係の記述を抽出し、
    前記グラフ生成部は、
    前記制御プログラムで定義されている制御アルゴリズムを、起点デバイスから依存デバイスに向かう有向エッジを用いて表す有閉路有向グラフを生成することを特徴とする請求項1〜4のいずれかに記載の情報処理装置。
  6. 前記依存関係抽出部は、
    デバイス間の依存関係として、正論理の依存関係及び負論理の依存関係のいずれであるかが記述されている制御プログラムから、デバイス間の依存関係の記述を抽出し、
    前記グラフ生成部は、
    正論理の依存関係を表す有向エッジと、負論理の依存関係を表す有向エッジとが区別される有閉路有向グラフを生成することを特徴とする請求項1〜5のいずれかに記載の情報処理装置。
  7. 前記情報処理装置は、更に、
    前記制御プログラムに記述されている特定のデバイス及び特定の依存関係の少なくともいずれかを指定要素として指定する指定要素情報を入力する情報入力部と、
    前記有閉路有向グラフを解析し、前記指定要素情報で指定されている指定要素に変更があった場合に当該変更の影響を受ける影響範囲を前記有閉路有向グラフから抽出するグラフ解析部と、
    前記グラフ解析部により抽出された影響範囲を前記有閉路有向グラフにおいて表示する表示部とを有することを特徴とする請求項1〜6のいずれかに記載の情報処理装置。
  8. 前記情報処理装置は、更に、
    前記制御プログラムに記述されている特定のデバイス及び特定の依存関係の少なくともいずれかを指定要素として指定する指定要素情報を入力する情報入力部と、
    前記指定要素情報で指定されている指定要素が記述されているプログラムコードを前記制御プログラムから抽出するプログラムコード抽出部と、
    前記グラフ生成部により生成された有閉路有向グラフと、前記プログラムコード抽出部により抽出されたプログラムコードとを表示する表示部とを有することを特徴とする請求項1〜7のいずれかに記載の情報処理装置。
  9. 前記情報処理装置は、更に、
    前記有閉路有向グラフを解析し、チャタリングを発生させる可能性のある循環を前記有閉路有向グラフから抽出するグラフ解析部と、
    前記グラフ解析部により抽出された循環を前記有閉路有向グラフにおいて表示する表示部とを有することを特徴とする請求項1〜8のいずれかに記載の情報処理装置。
  10. 前記情報処理装置は、更に、
    前記制御プログラムに記述されている特定のデバイスを指定要素として指定する指定要素情報を入力する情報入力部と、
    前記有閉路有向グラフを解析し、前記指定要素情報で指定要素として指定されているデバイスを表すノードと接続している有向エッジを前記有閉路有向グラフから抽出するとともに、抽出した有向エッジと接続しているノードを前記有閉路有向グラフから抽出し、抽出した有向エッジとノードとに基づき、前記指定要素情報で指定要素として指定されているデバイスと抽出したノードが表しているデバイスとの間の依存関係を自然言語にて説明する説明文を生成するグラフ解析部と、
    前記グラフ生成部により生成された有閉路有向グラフと、前記グラフ解析部により生成された説明文とを表示する表示部とを有することを特徴とする請求項1〜9のいずれかに記載の情報処理装置。
  11. 前記情報処理装置は、更に、
    前記有閉路有向グラフを解析し、いずれのデバイスとも依存関係にないデバイスを表すノードを未使用デバイスノードとして前記有閉路有向グラフから抽出するグラフ解析部と、
    前記グラフ解析部により抽出された未使用デバイスノードを、他のノードと区別して前記有閉路有向グラフにおいて表示する表示部とを有することを特徴とする請求項1〜10のいずれかに記載の情報処理装置。
  12. 前記情報処理装置は、更に、
    前記複数のデバイスに対して前記制御プログラムを用いた制御が行われている場合に、所定のデバイスで計測された計測値を入力する計測値入力部と、
    前記有閉路有向グラフ内の該当するデバイスのノードに対して前記計測値入力部により入力された計測値を表示する表示部とを有することを特徴とする請求項1〜11のいずれかに記載の情報処理装置。
  13. 前記情報処理装置は、更に、
    いずれかのデバイスで障害が発生した場合に、前記有閉路有向グラフを解析し、障害が発生したデバイスを表す障害発生デバイスノードと接続している有向エッジを前記有閉路有向グラフから抽出するとともに、抽出した有向エッジと接続しているノードを抽出し、抽出したノードが表しているデバイスに異常が発生していると判定された場合に、抽出したノードと接続している有向エッジの抽出及び抽出した有向エッジと接続しているノードの抽出を行い、抽出したノードが表しているデバイスに異常が発生していると判定された場合に、更に、抽出したノードと接続している有向エッジの抽出及び抽出した有向エッジと接続しているノードの抽出を繰り返すグラフ解析部と、
    前記障害発生デバイスノードと、異常が発生していると判定されたデバイスを表すノードとを、他のノードから区別して前記有閉路有向グラフにおいて表示する表示部とを有することを特徴とする請求項1〜12のいずれかに記載の情報処理装置。
  14. コンピュータが、複数のデバイスが記述されるとともにデバイス間の依存関係が記述され、前記複数のデバイスの記述とデバイス間の依存関係の記述により前記複数のデバイスに対する制御アルゴリズムが定義される制御プログラムから、各デバイスの記述を抽出するデバイス抽出ステップと、
    前記コンピュータが、前記制御プログラムから、デバイス間の依存関係の記述を抽出する依存関係抽出ステップと、
    前記コンピュータが、前記デバイス抽出ステップにより抽出されたデバイスの記述と前記依存関係抽出ステップにより抽出されたデバイス間の依存関係の記述とに基づき、ノードがデバイスを表し、有向エッジがデバイス間の依存関係を表し、前記制御プログラムで定義されている制御アルゴリズムをノードと有向エッジとの接続で表す有閉路有向グラフを生成するグラフ生成ステップとを有することを特徴とする情報処理方法。
  15. 複数のデバイスが記述されるとともにデバイス間の依存関係が記述され、前記複数のデバイスの記述とデバイス間の依存関係の記述により前記複数のデバイスに対する制御アルゴリズムが定義される制御プログラムから、各デバイスの記述を抽出するデバイス抽出ステップと、
    前記制御プログラムから、デバイス間の依存関係の記述を抽出する依存関係抽出ステップと、
    前記デバイス抽出ステップにより抽出されたデバイスの記述と前記依存関係抽出ステップにより抽出されたデバイス間の依存関係の記述とに基づき、ノードがデバイスを表し、有向エッジがデバイス間の依存関係を表し、前記制御プログラムで定義されている制御アルゴリズムをノードと有向エッジとの接続で表す有閉路有向グラフを生成するグラフ生成ステップとをコンピュータに実行させることを特徴とするプログラム。
JP2011128468A 2011-06-08 2011-06-08 情報処理装置及び情報処理方法及びプログラム Active JP5762154B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011128468A JP5762154B2 (ja) 2011-06-08 2011-06-08 情報処理装置及び情報処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011128468A JP5762154B2 (ja) 2011-06-08 2011-06-08 情報処理装置及び情報処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2012256178A true JP2012256178A (ja) 2012-12-27
JP5762154B2 JP5762154B2 (ja) 2015-08-12

Family

ID=47527693

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011128468A Active JP5762154B2 (ja) 2011-06-08 2011-06-08 情報処理装置及び情報処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5762154B2 (ja)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016194099A1 (ja) * 2015-06-01 2016-12-08 三菱電機株式会社 デバッグ装置、デバッグ方法及びデバッグプログラム
JP2018535488A (ja) * 2015-10-27 2018-11-29 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 臨床データの特性を解析して患者コホートを生成するためのパターン発見視覚的解析システム
JP6664562B1 (ja) * 2019-04-18 2020-03-13 三菱電機株式会社 デバッグ支援装置、デバッグ支援方法、デバッグ支援プログラム
CN112534369A (zh) * 2019-03-13 2021-03-19 欧姆龙株式会社 图表显示装置、图表显示方法以及图表显示程序
CN112543898A (zh) * 2019-03-13 2021-03-23 欧姆龙株式会社 图表显示装置、图表显示方法以及图表显示程序
WO2021065032A1 (ja) * 2019-10-03 2021-04-08 オムロン株式会社 制御システム、サポート装置およびサポートプログラム
WO2021192646A1 (ja) * 2020-03-27 2021-09-30 パナソニックIpマネジメント株式会社 プログラム作成方法、プログラム作成支援装置及びプログラマブルコントローラ
US11188048B2 (en) 2018-10-23 2021-11-30 Keyence Corporation Programmable logic controller and main unit
CN113950649A (zh) * 2019-06-18 2022-01-18 三菱电机株式会社 解析装置、方法及程序
CN115066676A (zh) * 2020-02-14 2022-09-16 三菱电机株式会社 控制系统、程序创建辅助装置、程序创建辅助方法及程序创建辅助程序
WO2024202057A1 (ja) * 2023-03-31 2024-10-03 三菱電機株式会社 プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラム

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08292881A (ja) * 1995-04-24 1996-11-05 Nec Corp プログラム影響範囲表示装置
JP2001154711A (ja) * 1999-11-29 2001-06-08 Omron Corp 工程歩進型プログラムのデバッグ方法および装置
JP2003084811A (ja) * 2001-09-10 2003-03-19 Digital Electronics Corp ラダーモニタ装置、並びに、そのプログラムおよび記録媒体
JP2004164013A (ja) * 2002-11-08 2004-06-10 Mitsutoyo Corp シーケンス制御系のモデリングシステム、シーケンスプログラム作成支援システム及びシーケンスプログラム作成支援プログラム
JP2004303217A (ja) * 2003-03-14 2004-10-28 Omron Corp 表示・編集装置及び表示方法並びにプログラム製品
JP2006318504A (ja) * 2004-03-31 2006-11-24 Omron Corp 開発支援装置の制御方法
JPWO2010095289A1 (ja) * 2009-02-18 2012-08-16 三菱電機株式会社 プログラム解析支援装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08292881A (ja) * 1995-04-24 1996-11-05 Nec Corp プログラム影響範囲表示装置
JP2001154711A (ja) * 1999-11-29 2001-06-08 Omron Corp 工程歩進型プログラムのデバッグ方法および装置
JP2003084811A (ja) * 2001-09-10 2003-03-19 Digital Electronics Corp ラダーモニタ装置、並びに、そのプログラムおよび記録媒体
JP2004164013A (ja) * 2002-11-08 2004-06-10 Mitsutoyo Corp シーケンス制御系のモデリングシステム、シーケンスプログラム作成支援システム及びシーケンスプログラム作成支援プログラム
JP2004303217A (ja) * 2003-03-14 2004-10-28 Omron Corp 表示・編集装置及び表示方法並びにプログラム製品
JP2006318504A (ja) * 2004-03-31 2006-11-24 Omron Corp 開発支援装置の制御方法
JPWO2010095289A1 (ja) * 2009-02-18 2012-08-16 三菱電機株式会社 プログラム解析支援装置

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016194099A1 (ja) * 2015-06-01 2016-12-08 三菱電機株式会社 デバッグ装置、デバッグ方法及びデバッグプログラム
JPWO2016194099A1 (ja) * 2015-06-01 2017-06-22 三菱電機株式会社 デバッグ装置、デバッグ方法及びデバッグプログラム
JP2018535488A (ja) * 2015-10-27 2018-11-29 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 臨床データの特性を解析して患者コホートを生成するためのパターン発見視覚的解析システム
US11087860B2 (en) 2015-10-27 2021-08-10 Koninklijke Philips N.V. Pattern discovery visual analytics system to analyze characteristics of clinical data and generate patient cohorts
US11188048B2 (en) 2018-10-23 2021-11-30 Keyence Corporation Programmable logic controller and main unit
CN112543898A (zh) * 2019-03-13 2021-03-23 欧姆龙株式会社 图表显示装置、图表显示方法以及图表显示程序
CN112534369A (zh) * 2019-03-13 2021-03-19 欧姆龙株式会社 图表显示装置、图表显示方法以及图表显示程序
CN112543898B (zh) * 2019-03-13 2024-04-12 欧姆龙株式会社 图表显示装置、图表显示方法以及记录介质
CN112534369B (zh) * 2019-03-13 2024-04-12 欧姆龙株式会社 图表显示装置、图表显示方法以及记录介质
CN113711142A (zh) * 2019-04-18 2021-11-26 三菱电机株式会社 调试辅助装置、调试辅助方法、调试辅助程序
US11300612B2 (en) 2019-04-18 2022-04-12 Mitsubishi Electric Corporation Debug support device, debug support method, and computer readable storage medium
WO2020213129A1 (ja) * 2019-04-18 2020-10-22 三菱電機株式会社 デバッグ支援装置、デバッグ支援方法、デバッグ支援プログラム
JP6664562B1 (ja) * 2019-04-18 2020-03-13 三菱電機株式会社 デバッグ支援装置、デバッグ支援方法、デバッグ支援プログラム
CN113711142B (zh) * 2019-04-18 2022-09-09 三菱电机株式会社 调试辅助装置、调试辅助方法、记录介质
CN113950649B (zh) * 2019-06-18 2022-12-09 三菱电机株式会社 解析装置、方法及计算机可读取的记录介质
CN113950649A (zh) * 2019-06-18 2022-01-18 三菱电机株式会社 解析装置、方法及程序
CN114514484A (zh) * 2019-10-03 2022-05-17 欧姆龙株式会社 控制系统、支持装置以及支持程序
JP7392370B2 (ja) 2019-10-03 2023-12-06 オムロン株式会社 制御システム、サポート装置およびサポートプログラム
JP2021060675A (ja) * 2019-10-03 2021-04-15 オムロン株式会社 制御システム、サポート装置およびサポートプログラム
WO2021065032A1 (ja) * 2019-10-03 2021-04-08 オムロン株式会社 制御システム、サポート装置およびサポートプログラム
CN114514484B (zh) * 2019-10-03 2024-09-03 欧姆龙株式会社 控制系统、支持装置以及计算机程序产品
CN115066676A (zh) * 2020-02-14 2022-09-16 三菱电机株式会社 控制系统、程序创建辅助装置、程序创建辅助方法及程序创建辅助程序
CN115066676B (zh) * 2020-02-14 2023-06-09 三菱电机株式会社 控制系统、程序创建辅助装置、程序创建辅助方法及计算机可读取的记录介质
WO2021192646A1 (ja) * 2020-03-27 2021-09-30 パナソニックIpマネジメント株式会社 プログラム作成方法、プログラム作成支援装置及びプログラマブルコントローラ
JP7526909B2 (ja) 2020-03-27 2024-08-02 パナソニックIpマネジメント株式会社 プログラム作成方法、プログラム作成支援装置及びプログラマブルコントローラ
WO2024202057A1 (ja) * 2023-03-31 2024-10-03 三菱電機株式会社 プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラム

Also Published As

Publication number Publication date
JP5762154B2 (ja) 2015-08-12

Similar Documents

Publication Publication Date Title
JP5762154B2 (ja) 情報処理装置及び情報処理方法及びプログラム
JP2013225251A (ja) 情報処理装置及び情報処理方法及びプログラム
CN107085415B (zh) 过程控制网络中的规则构建器
JP6096414B2 (ja) バッチ構成を試験するための方法、装置、およびプログラム
US9747190B2 (en) Analysis system, analysis method, and computer program product
EP3314340B1 (en) Control contextualization and reasoning about control
US7761765B2 (en) Automated root cause identification of logic controller failure
US20150052596A1 (en) Network based firmware feature configuration and firmware image generation
Heimdahl et al. Reduction and slicing of hierarchical state machines
US9588837B2 (en) Generating a fault tree
CN111108481B (zh) 故障分析方法及相关设备
WO2011149553A1 (en) Partitioning block diagrams into executable contextual models
US20120116561A1 (en) Program testing apparatus, method of testing a program, and program testing program
US20140280831A1 (en) Sample driven visual programming system for network management
CN109918081B (zh) 一种编译方法及编译器
JP5489958B2 (ja) 試験テーブル生成装置及びその方法
Aho et al. Automated java gui modeling for model-based testing purposes
Angerer et al. Configuration-aware change impact analysis (t)
JP2017167653A (ja) 評価システム、評価プログラムおよび評価方法
US20120023054A1 (en) Device and Method for Creating a Process Model
KR101772785B1 (ko) 프로그램 그래프 표시 장치, 프로그램 그래프 표시 방법 및 프로그램 그래프 표시 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
KR100938179B1 (ko) 플랜트 제어 시스템의 제어 프로그램 작성·표시 장치
Nair et al. A static code analysis tool for control system software
White Mastering PLC Programming: The software engineering survival guide to automation programming
Jnanamurthy et al. Analysis of industrial control system software to detect semantic clones

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140827

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140902

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141009

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150413

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150512

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150609

R150 Certificate of patent or registration of utility model

Ref document number: 5762154

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250