(57)【特許請求の範囲】
【請求項１】
プラントを制御するコントローラに出力する制御プログラムを作成するためのプログラムエディタで編集されたソースコードに含まれている第１の変数の選択を受け付ける選択受付部と、
前記ソースコードにおいて、複数の変数を配列としてまとめて処理するテーブル命令における、入力又は出力で用いられる配列に、前記第１の変数と同一のアドレスを参照する要素が含まれている場合に、当該入力又は出力に用いられている配列の先頭を示す、第２の変数を抽出する第１の抽出部と、
前記ソースコードで定義された変数のうち、前記第１の変数と同一のアドレスを参照する、第３の変数を抽出する第２の抽出部と、
前記第２の変数と、前記第３の変数と、を表示する表示制御部と、
を備える検索装置。
【請求項２】
前記ソースコードで用いられているテーブル命令毎に、当該テーブル命令の入力及び出力で利用される変数の配列に関する情報を記憶するテーブル命令データベースを、さらに備え、
前記第１の抽出部は、前記テーブル命令データベースに基づいて、前記第２の変数を抽出する、
請求項１に記載の検索装置。
【請求項３】
前記ソースコードで用いられている変数毎に、当該変数によって参照されるアドレスに関する情報を記憶する変数データベースを、さらに備え、
前記第２の抽出部は、前記変数データベースに基づいて、前記第３の変数を抽出する、
請求項１又は２に記載の検索装置。
【請求項４】
前記第１の抽出部は、さらに、前記ソースコードにおいて、前記テーブル命令のうち、入力又は出力に用いられている配列の先頭を示す変数が、前記第１の変数と一致している場合に、前記ソースコードのうち、前記配列に含まれている要素と同一のアドレスを参照する、第４の変数を抽出する、
請求項１乃至３のいずれか一つに記載の検索装置。
【請求項５】
前記第２の変数と、前記第３の変数と、に基づいて、複数のプログラムで相互参照されている変数を検索するクロスリファレンス検索部を、さらに備える、
請求項１乃至４のいずれか一つに記載の検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、検索装置に関する。
【背景技術】
【０００２】
従来から、プラント制御システムにおいて、プラントを制御するためのアプリケーションプログラムが作成されると共に、試験及び調整された後、作成されたアプリケーションプログラムは、プラントを制御するコントローラに提供されていた。
【０００３】
アプリケーションプログラムの作成、更新を行う場合に、アプリケーションプログラムで使用されている変数が、自アプリケーションプログラム、又は他のアプリケーションプログラムで使用されているかを確認する必要がある。その際に、クロスリファレンス検索が利用される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−３２７８７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術においては変数名等でクロスリファレンス検索が行われることが多く、同一アドレスに名前が異なる変数が複数割り当てられている等が考慮されていない場合が多かった。このため、アプリケーションの作成、更新を行う際に、当該変数が影響する範囲を把握するための作業負荷が大きいという問題が生じていた。
【課題を解決するための手段】
【０００６】
実施形態の検索装置は、選択受付部と、第１の抽出部と、第２の抽出部と、表示制御部と、を備える。選択受付部は、プラントを制御するコントローラに出力する制御プログラムを作成するためのプログラムエディタで編集されたソースコードに含まれている第１の変数の選択を受け付ける。第１の抽出部は、ソースコードにおいて、複数の変数を配列としてまとめて処理するテーブル命令における、入力又は出力で用いられる配列に、第１の変数と同一のアドレスを参照する要素が含まれている場合に、当該入力又は出力に用いられている配列の先頭を示す、第２の変数を抽出する。第２の抽出部は、ソースコードで定義された変数のうち、第１の変数と同一のアドレスを参照する、第３の変数を抽出する。表示制御部は、第２の変数と、第３の変数と、を表示する。
【図面の簡単な説明】
【０００７】
【図１】図１は、実施形態のシステムをツリー形式で示した図である。
【図２】図２は、実施形態の階層ごとに定義されている変数を例示した図である。
【図３】図３は、実施形態のプログラム制御装置と、コントローラと、の構成をツリー形式で示した図である。
【図４】図４は、実施形態のプログラム表示部によって表示されるプログラムの編集画面を例示した図である。
【図５】図５は、実施形態の変数データベースのテーブル構成を例示した図である。
【図６】図６は、実施形態のソースコードデータベースのテーブル構成を例示した図である。
【図７】図７は、実施形態のテーブル命令データベースのテーブル構成を例示した図である。
【図８】図８は、実施形態のプログラム表示部が表示するコントロール変数の一覧画面を例示した図である。
【図９】図９は、メモリ領域における各変数の割り当て状態を例示した図である。
【図１０】図１０は、実施形態のプログラム表示部により表示された編集画面から、ソースコードに含まれている変数の選択を受け付ける画面例を示した図である。
【図１１】図１１は、実施形態の検索結果表示部により表示される検索結果画面例を示した図である。
【図１２】図１２は、実施形態の検索結果表示部により表示される検索結果画面例を示した図である。
【図１３】図１３は、実施形態の検索結果表示部により表示される検索結果画面例を示した図である。
【図１４】図１４は、実施形態のプログラム表示部によって表示されるプログラムの編集画面を例示した図である。
【図１５】図１５は、実施形態の検索結果表示部により表示される検索結果画面例を示した図である。
【図１６】図１６は、実施形態の検索結果表示部により表示される検索結果画面例を示した図である。
【図１７】図１７は、実施形態の検索結果表示部により表示される検索結果画面例を示した図である。
【図１８】図１８は、実施形態の検索結果表示部により表示される検索結果画面例を示した図である。
【図１９】図１９は、実施形態のプログラム制御装置におけるクロスリファレンス検索処理の手順を示すフローチャートである。
【図２０】図２０は、実施形態のプログラム表示部によって表示されるプログラムの編集画面を例示した図である。
【図２１】図２１は、実施形態の検索結果表示部により表示される検索結果画面例を示した図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照し、本発明の検索装置に係る実施例を詳細に説明する。なお、以下に示す実施形態では、検索装置を、プログラム制御装置に適用した場合を示すこととするが、本発明はこれに制限するものではなく、変数を検索可能な装置であれば適用可能である。
【０００９】
図１は、本実施形態のシステム１をツリー形式で示した図である。図１に示されるように、本実施形態のシステム１は、複数のステーション１００、１０１を備えている。
【００１０】
ステーション１００は、コントローラ１５０、１５１の監視、操作用の端末であって、複数のコントローラ１５０、１５１と接続されている。なお、ステーション１０１は、ステーション１００と同様の構成を備えているものとして、説明を省略する。
【００１１】
コントローラ１５０は、プログラム１６１、１６２を備え、プラントを制御する装置である。本実施形態のコントローラ１５０は、プログラム１６１、１６２に従ってプラント制御を行う。なお、コントローラ１５１は、プログラム１６３、１６４を備え、コントローラ１５０と同様の制御を行う。
【００１２】
プログラム１６１、１６２は、プラントを制御するためのプログラムとする。プログラム１６１は、ファンクション１７１、ファンクションブロック１７２を備えている。
【００１３】
本実施形態では、図１で示したように、階層構造となっている構成毎に変数の定義が可能となる。
【００１４】
図２は、本実施形態の階層ごとに定義されている変数を例示した図である。図２に示されるように、システム１は、ネットワーク２５１、２６１と、ステーション１００、１０１と、を含んでいる。図２に示されるように、システム、ステーション、コントローラ、ローカルに従って、参照可能な範囲が定義されている。
【００１５】
図２に示されるように、ステーション１００、１０１の間は、複数のネットワーク２５１、２６１で接続されているが、ネットワーク構成を制限するものではない。
【００１６】
ネットワーク２５１は、ネットワーク変数２５２が定義され、ネットワーク２６１には、ネットワーク変数２６２が定義されている。
【００１７】
ネットワーク変数２５２、２６２は、例えば、スキャン伝送方式のＬＡＮ上のスキャンデータとする。
【００１８】
ステーション１００には、ステーション変数２０１と、Ｉ／Ｏ変数２０５と、が定義されていると共に、メインモジュール２０２、２０３、２０４と、Ｉ／Ｏモジュール２０６と、を備えている。なお、ステーション１０１は、ステーション１００と同様の構成として説明を省略する。
【００１９】
ステーション変数２０１は、コントローラ間のデータの送受信に使用される。
【００２０】
Ｉ／Ｏ変数２０５は、プロセスＩ／Ｏ信号２１９や、Ｉ／Ｏデータ２２０の送受信に使用される。
【００２１】
メインモジュール２０２は、コンフィグレーション２１１と、タスク２１２と、を備え、コントローラ変数２１３が、定義されている。メインモジュール２０３は、コンフィグレーション２１４と、タスク２１５と、を備え、コントローラ変数２１６が、定義されている。
【００２２】
コンフィグレーション２１１、２１４は、メインユニットや、Ｉ／Ｏなどのハードウェア構成情報とする。
【００２３】
タスク２１２、２１５は、制御プログラムの実行スケジュール単位とする。タスク２１２は、ローカル変数２１７が定義され、タスク２１５は、ローカル変数２１８が定義されている。ローカル変数２１７、２１８は、タスク内でのみ参照できる変数とする。
【００２４】
コントローラ変数２１３、２１６は、コントローラ内の各種レジスタ、パラメータ、データとする。
【００２５】
メインモジュール（伝送モジュール）２０４は、ネットワーク２５１とデータの送受信を行うためのモジュールとする。メインモジュール（伝送モジュール）２０４は、ネットワーク変数２５２を用いることで、データの送受信を可能とする。
【００２６】
図２に示されるように、変数毎に、参照可能な範囲が定義されている。これら変数から、所望の変数を検索するためには、クロスリファレンス検索が用いられている。クロスリファレンス検索は、変数が、どこ（例えば、システム、ステーション、コントローラ、プログラム、及びファンクション等）で使用されているかを特定することができる。このようなクロスリファレンス検索では、変数名に基づいた検索が一般的である。
【００２７】
しかしながら、複数の異なる変数が、同一のアドレスを参照する場合も多い。このような場合に、変数名に基づいた検索では、当該異なる変数を関連する変数として検出するのは難しい。そこで、本実施形態においては、同一のアドレスに割り当てられた変数を検出するよう制御を行うこととした。
【００２８】
図３は、本実施形態のプログラム制御装置３００と、コントローラ１５０と、の構成をツリー形式で示した図である。本実施形態のプログラム制御装置３００と、コントローラ１５０と、は、ネットワーク２５１を介して接続されている。
【００２９】
コントローラ１５０は、通信部３５１と、メモリ部３５２と、で構成されている。
【００３０】
通信部３５１は、ネットワーク２５１を介して接続されているプログラム制御装置３００とデータの送受信を制御する。
【００３１】
メモリ部３５２は、読み書き可能な記憶媒体とする。メモリ部３５２は、プログラム制御装置３００から通信部３５１を介して受信した、プログラム情報３６１と、バイナリプログラム情報３６２と、を格納する。
【００３２】
プログラム情報３６１は、プログラム制御装置３００から受信したプログラムに関する情報を記憶する。
【００３３】
バイナリプログラム情報３６２は、プログラム制御装置３００から受信したバイナリプログラムを記憶する。
【００３４】
これにより、コントローラ１５０は、当該バイナリプログラム情報３６２に従って、プラント制御が可能となる。
【００３５】
プログラム制御装置３００とは、制御プログラム編集部３０１と、データベース部３０２と、通信部３０３と、で構成されている。
【００３６】
通信部３０３は、ネットワーク２５１を介して接続されているコントローラ１５０とデータの送受信を制御する。本実施形態の通信部３０３は、プログラムコンパイラ３１２によってコンパイルされたプログラム(例えば、バイナリプログラム)を、コントローラ１５０に送信する。
【００３７】
制御プログラム編集部３０１は、プログラムエディタ３１１と、プログラムコンパイラ３１２とを備え、コントローラ１５０用の制御プログラム（例えば、プログラム１６１、１６２）を作成するためのツールとする。
【００３８】
プログラムコンパイラ３１２は、プログラムエディタ３１１で編集されたプログラムソースをコンパイルする。
【００３９】
プログラムエディタ３１１は、プログラム表示部３２１と、変数検索部３２２と、を備え、コントローラに出力する制御プログラムを作成するために、プログラムソースの編集を行う。
【００４０】
プログラム表示部３２１は、プログラムの編集画面を表示する。
【００４１】
図４は、プログラム表示部３２１によって表示されるプログラムの編集画面を例示した図である。図４に示される例では、“XV1”から１０個の行列を“XV2”に移動させるテーブル移動（TMOV）４０１と、“XV5”に“XV4”の代入する演算４０２と、“XV5_B2”による判定結果が“XV5_B3”に格納されると共に“XV4_B2”による判定結果が“XV4_B3”に格納される演算４０３と、が示されている。図４で示された演算は、最も左に配置された演算から右方向の順に行われるが、演算の順番を制限するものではない。
【００４２】
図３に戻り、データベース部３０２は、変数データベース３４１と、ソースコードデータベース３４２と、テーブル命令データベース３４３と、を備えている。
【００４３】
変数データベース３４１は、プログラム制御装置３００で作成された全てのプログラムソース用いられている変数毎に、当該変数によって参照されるアドレスに関する情報を記憶する。
【００４４】
図５は、本実施形態の変数データベース３４１のテーブル構成を例示した図である。図５に示されるように、変数データベース３４１は、ワード番号と、変数名と、データ型と、ビット番号と、ワードサイズと、配置数と、を対応付けている。
【００４５】
ワード番号は、当該変数が割り当てられているワード番号とする。本実施形態においてはワード単位でアドレスが割り当てられている。つまり、ワード番号を参照することで、当該変数がどのアドレスに割り当てられているか判断できる。これにより、ワード番号が同一の場合には、同一のアドレスに変数が割り当てられていることになる。なお、ワードのメモリサイズは、実施態様に応じて定められるものとする。
【００４６】
データ型は、当該変数に対して定義された型とする。本実施形態では、少なくとも“WORD型”と、“BOOL型”と、“WORD”型の配列(ARRAY[]  OF  WORD)と、“BOOL”型の配列(ARRAY[]  OF  BOOL)と、が定義可能とする。“WORD型”は、ワード単位で変数をメモリに割り当て、“BOOL型は、ビット単位で変数をメモリに割り当てる。
【００４７】
ビット番号は、変数に対して定義された型が“BOOL”型の場合に、ワード番号で示されたワードのうち、どのビットが、当該変数に割り当てられているかを識別する。
【００４８】
ワードサイズは、当該変数に割り当てられたワードのサイズを示している。なお、“BOOL”型の場合であっても、ワードサイズは“１”とする。
【００４９】
配列数は、“WORD”型の配列(ARRAY[]  OF  WORD)と、“BOOL”型の配列(ARRAY[]  OF  WORD)と、の場合に、当該配列に格納可能な要素の数とする。
【００５０】
図５の変数データベース３４１には全ての変数が格納される。例えば、コントローラ１５０のコントローラ変数が格納されてもよいし、ネットワーク変数、ローカル変数、Ｉ／Ｏ変数、ローカル変数が格納されてもよい。
【００５１】
ソースコードデータベース３４２は、プログラムエディタ３１１によって編集されたプログラムのソースコードをデータベースとして記憶する。
【００５２】
図６は、ソースコードデータベース３４２のテーブル構成を例示した図である。図６に示されるように、行と、列と、命令後番号と、ファンクション名と、変数名と、が対応付けられている。
【００５３】
行、及び列により、プログラムエディタの位置を特定している。そして、ファンクション名又は変数名は、行及び列によって特定された位置に対して設定されたファンクション又は変数を定義している。命令後番号は、従来と同様として説明を省略する。
【００５４】
テーブル命令データベース３４３は、プログラムエディタ３１１によって編集されたプログラムのソースコードに用いられているテーブル命令毎に、テーブル命令の入力及び出力で利用される変数に関する情報を記憶する。
【００５５】
図７は、テーブル命令データベース３４３のテーブル構成を例示した図である。図７に示されるように、ファンクション名と、行と、列と、接続されている変数名と、入力／出力と、転送数と、実際の転送数と、が対応付けられている。
【００５６】
ファンクション名は、テーブル命令を示すファンクション名とする。図７で示される例では、テーブル命令として、テーブル転送（TMOV）が設定されている例とする。
【００５７】
本実施形態においては、設定可能なテーブル命令を、テーブル転送（TMOV）に制限するものではない。テーブル命令としては、テーブル転送以外に、テーブル論理積、テーブル論理和、テーブル論理否定、テーブル排他的論理和、テーブル否定排他的論理和、テーブルマルチプレクサ、テーブル初期化を設定可能とする。
【００５８】
行、及び列により、テーブル命令が設定された位置を特定している。
【００５９】
接続されている変数名は、当該テーブル命令で利用されている変数を示している。
【００６０】
入力／出力は、接続されている変数名が入力又は出力で用いられているのかを示している。“０”の場合は入力で、“１”の場合は出力で用いられている。
【００６１】
転送数、実際の転送数は、当該テーブル命令で転送される変数の数を示している。
【００６２】
プログラム表示部３２１は、データベース部３０２を参照して、様々な情報を表示可能とする。
【００６３】
図８は、プログラム表示部３２１が表示するコントロール変数の一覧画面を例示した図である。図８に示される例では、コントロール変数の一覧を示しているが、本実施形態では、他の変数であっても同様に一覧表示を可能としている。図８に示される一覧では、変数毎に、データ型と、値と、ワード番号、ビット番号と、ワード長と、を対応付けて表示している。つまり、変数毎に、ワード番号及びビット番号を示しているため、変数毎に他の変数と同一アドレスを参照しているか否かを認識できる。
【００６４】
図９は、メモリ領域における各変数の割り当て状態を例示した図である。図９に示される例では、ワード番号で示されるアドレス毎に、当該アドレスに割り当てられた、WORD型の変数（ワード変数）と、BOOL型の変数（ブール変数）と、を示している。
【００６５】
図９に示される例では、例えばワード番号４、５、２２、２３、２４等に示されるように、一つのワード番号に複数の変数が割り当てられていることが確認できる。
【００６６】
図３に戻り、変数検索部３２２は、上述したデータベース部３０２を参照して、変数のクロスリファレンス検索を行う。
【００６７】
変数検索部３２２は、選択受付部３３１と、アドレス抽出部３３２と、テーブル抽出部３３３と、クロスリファレンス検索部３３４と、検索結果表示部３３５と、を備えている。
【００６８】
選択受付部３３１は、プログラムエディタ３１１で編集された制御プログラムのソースコードに含まれている変数の選択を受け付ける。
【００６９】
テーブル抽出部３３３は、プログラム制御装置３００で作成された制御プログラムのソースコードのうち、選択を受け付けた変数と同一スコープ内に設定されているテーブル命令における、入力又は出力で用いられる配列に、選択を受け付けた変数と同一のアドレスを参照する要素が含まれている場合に、当該入力又は出力に用いられている配列の先頭を示す、他の変数を抽出する。本実施形態のテーブル命令とは、複数の変数（要素）をまとめた配列の処理を行う命令とする。本実施形態のテーブル抽出部３３３は、テーブル命令データベースに基づいて、他の変数を抽出する。
【００７０】
アドレス抽出部３３２は、プログラム制御装置３００で作成された制御プログラムのソースコードで定義された変数であって、選択を受け付けた変数と同一スコープの変数のうち、選択受付部３３１で選択を受け付けた変数と同一のアドレスを参照する、他の変数を抽出する。本実施形態においては、アドレス抽出部３３２は、変数データベース３４１に基づいて、選択を受け付けた変数の格納先を示したアドレスを参照する、他の変数を抽出する。本実施形態においては、型が同じ変数同士は以下の手法で抽出される。
【００７１】
“BOOL”型以外の場合には、参照するワードアドレスが同一の場合が抽出される。換言すれば、ワード番号が一致する変数が抽出される。“BOOL”型以外とは、基本データ型（例えば“WORD”型）の他に、配列や、構造体（ユーザが定義するデータ型）を含んでいる。
【００７２】
また、“BOOL”型の場合には、参照するビットアドレスが同一の場合が抽出される。換言すれば、ワード番号及びブール番号が一致する変数が抽出される。
【００７３】
また、本実施形態のアドレス抽出部３３２は、変数の型が異なるか否かにかかわらず、同一のアドレスを参照する変数であれば抽出する。型の異なる場合抽出手法は、以下に示す手法で行うことが考えられる。
【００７４】
“BOOL”型と“BOOL”型以外との場合、参照するワードアドレスが同一の場合が検出される。換言すれば、ワード番号が一致する変数が抽出される。
【００７５】
クロスリファレンス検索部３３４は、テーブル抽出部３３３により抽出された変数と、アドレス抽出部３３２により抽出された変数と、についてクロスリファレンス検索を行う。
【００７６】
クロスリファレンス検索部３３４によるクロスリファレンス検索は、従来の手法と同様に、複数のプログラムやファンクション等において、相互参照されている同一名の変数を検索するものとして、説明を省略する。
【００７７】
検索結果表示部３３５は、アドレス抽出部３３２により抽出された他の変数と、テーブル抽出部３３３により抽出された他の変数と、クロスリファレンス検索部３３４により検索された変数と、を表示する。次に、具体的な画面例に従って説明する。
【００７８】
図１０は、プログラム表示部３２１により表示された編集画面から、ソースコードに含まれている変数の選択を受け付ける画面例を示した図である。
【００７９】
図１０に示されるように、カーソル１００１で変数“XV4”を指し示している状態で、左クリックがなされた場合に、変数“XV4”が選択状態１００２となる。その後、プルダウンメニュー１００３からクロスリファレンスリスト１００４の選択を受け付けた場合に、選択受付部３３１は、変数“XV4”のクロスリファレンス検索を受け付けたこととなる。
【００８０】
テーブル抽出部３３３は、テーブル命令における、入力又は出力で用いられる配列に、選択を受け付けた変数“XV4”と同一のアドレスを参照する要素が含まれている場合に、テーブル命令データベース３４３及び変数データベース３４１に基づいて、当該配列の先頭を示す、他の変数を抽出する。
【００８１】
具体的には、テーブル抽出部３３３は、テーブル命令データベース３４３のレコード毎に、変数“XV4”と同一のアドレスを参照する要素を含む配列であるか否かを判断する。
【００８２】
図７に示されるテーブル命令データベース３４３の１行目においては、変数“XV1”から転送数“１０”の場合、図５において、変数“XV1”のワード番号“１”から１０個、換言すればワード番号“１”〜“１０”が転送される。つまり、転送される配列には、変数“XV4”と同一アドレスであるワード番号“４”を参照する要素が含まれているため、テーブル抽出部３３３は、変数“XV1”を抽出する。
【００８３】
図７に示されるテーブル命令データベース３４３の２行目においては、変数“XV2”から転送数“１０”の場合、図５において、変数“XV2”のワード番号“２”から１０個、換言すればワード番号“２”〜“１１”に転送される。つまり、転送先の配列には、変数“XV4”と同一アドレスであるワード番号“４”を参照する要素が含まれているため、テーブル抽出部３３３は、変数“XV2”を抽出する。
【００８４】
そして、アドレス抽出部３３２は、変数データベース３４１を参照して、選択受付部３３１で選択を受け付けた変数“XV4”と同一のワード番号と対応付けられた（換言すれば、当該変数と同一のアドレスを参照する）、他の変数を抽出する。本実施形態においては、アドレス抽出部３３２は、図５に示される変数データベース３４１を参照し、変数“XV4”とワード番号“４”が同一の変数“XV4_B2”、“XV4_B3”を抽出する。
【００８５】
そして、クロスリファレンス検索部３３４は、テーブル抽出部３３３により抽出された変数“XV1”、“XV2”と、アドレス抽出部３３２により抽出された変数“XV4_B2”、“XV4_B3”と、についてクロスリファレンス検索を行う。
【００８６】
図１１は、検索結果表示部３３５により表示される検索結果画面例を示した図である。図１１に示される例では、変数“XV4”のクロスリファレンス検索を受け付けた場合を示している。このため、アドレス抽出部３３２により抽出される変数“XV4_B2”、“XV4_B3”と、テーブル抽出部３３３により抽出される変数“XV1”、“XV2”と、が表示される。また、クロスリファレンス検索部３３４により検索された変数も表示されるが、図１１では省略し、図１２〜図１８についても同様とする。また、表示された変数毎に、ステーション、コントローラ、タスクと、当該変数が設定された位置と、が表示される。これにより、変数毎の状況を認識できる。
【００８７】
次に、選択受付部３３１が、図４に示されるプログラムの編集画面において、変数“XV5_B2”の選択を受け付けた状態で、クロスリファレンス検索の選択を受け付けた場合について説明する。
【００８８】
テーブル抽出部３３３は、テーブル命令の入力又は出力で用いられる配列に、選択を受け付けた変数“XV5_B2”と同一のアドレスを参照する要素が含まれている場合に、テーブル命令データベース３４３及び変数データベース３４１に基づいて、当該配列の先頭を示す、他の変数を抽出する。
【００８９】
テーブル抽出部３３３は、テーブル命令データベース３４３のレコード毎に、変数“XV5_B2”と同一のアドレスを参照する要素を含む配列であるか否かを判断する。
【００９０】
図７に示されるテーブル命令データベース３４３の１行目においては、変数“XV1”から転送数“１０”の場合、図５において、変数“XV1”のワード番号“１”から１０個、換言すればワード番号“１”〜“１０”が転送される。つまり、転送される配列には、変数“XV5_B2”と同一アドレスであるワード番号“５”を参照する要素が含まれているため、テーブル抽出部３３３は、変数“XV1”を抽出する。
【００９１】
図７に示されるテーブル命令データベース３４３の２行目においては、変数“XV2”から転送数“１０”の場合、図５において、変数“XV2”のワード番号“２”から１０個、換言すればワード番号“２”〜“１１”に転送される。つまり、転送先の配列には、変数“XV5_B2”と同一アドレスであるワード番号“５”を参照する要素が含まれているため、テーブル抽出部３３３は、変数“XV2”を抽出する。
【００９２】
そして、アドレス抽出部３３２は、変数データベース３４１を参照して、選択受付部３３１で選択を受け付けた変数“XV5_B2”と同一のワード番号と対応付けられた（換言すれば、当該変数と同一のアドレスを参照する）、他の変数を抽出する。本実施形態においては、アドレス抽出部３３２は、図５に示される変数データベース３４１を参照し、変数“XV5_B2”とワード番号“５”が同一の変数“XV5”を抽出する。なお、“BOOL”型同士の場合は、ブール番号も一致する必要がある。このため、変数“XV5_B2”は、変数“XV5_B2”とワード番号“５”が一致するが、ブール番号が一致しないため抽出されない。
【００９３】
図１２は、検索結果表示部３３５により表示される検索結果画面例を示した図である。図１２に示される例では、変数“XV5_B2”のクロスリファレンス検索を受け付けた場合を示している。このため、アドレス抽出部３３２により抽出される変数“XV5”と、テーブル抽出部３３３により抽出される変数“XV1”、“XV2”と、が表示される。
【００９４】
次に、選択受付部３３１が、図４に示されるプログラムの編集画面において、変数“XV2”の選択を受け付けた状態で、クロスリファレンス検索を受け付けた場合について説明する。
【００９５】
テーブル抽出部３３３は、テーブル命令データベース３４３のレコード毎に、変数“XV2”と同一のアドレスを参照する要素を含む配列であるか否かを判断する。
【００９６】
図７に示されるテーブル命令データベース３４３の１行目においては、変数“XV1”から転送数“１０”の場合、図５において、変数“XV1”のワード番号“１”から１０個、換言すればワード番号“１”〜“１０”が転送される。つまり、転送される配列には、変数“XV2”と同一アドレスであるワード番号“２”を参照する要素が含まれているため、テーブル抽出部３３３は、変数“XV1”を抽出する。
【００９７】
図７に示されるテーブル命令データベース３４３の２行目においては、“接続された変数名”が、変数“XV2”と一致している。
【００９８】
テーブル抽出部３３３は、テーブル命令データベース３４３の“接続された変数名”で示された、配列の先頭を示す変数が、選択を受け付けた変数名と一致している場合に、当該ソースコードのうち、当該配列に含まれている要素と同一のアドレスを参照する変数を全て抽出する。換言すれば、テーブル抽出部３３３は、当該ソースコードにおいて、変数“XV2”のワード番号“２”から１０個、換言すればワード番号“２”〜“１１”を参照する全ての変数を抽出する。抽出には、図５に示されるような変数データベース３４１を用いるが、図９を用いて説明する。
【００９９】
図９に示されるようなメモリ領域における各変数の割り当て状態において、テーブル移動（TMOV）４０１は、変数“XV1”からの配列９０１を、変数“XV2”からの配列９０２に移動させている。
【０１００】
そして、テーブル抽出部３３３は、変数“XV2”からの配列９０２（ワード番号“２”〜“１１”）で示される範囲のうち、図４の編集画面に示されている、全ての変数“XV4”、“XV4_B2”、“XV4_B3”、“XV5”、“XV5_B2”、“XV5_B3”を抽出する。
【０１０１】
アドレス抽出部３３２は、変数データベース３４１を参照して、選択受付部３３１で選択を受け付けた変数“XV2”と同一のワード番号と対応付けられた他の変数を抽出する。図５に示された変数データベース３４１においては、変数“XV2”と同一のワード番号の変数は存在しない。このため、アドレス抽出部３３２は、変数を抽出しない。
【０１０２】
図１３は、検索結果表示部３３５により表示される検索結果画面例を示した図である。図１３に示される例では、変数“XV2”のクロスリファレンス検索を受け付けた場合を示している。このため、テーブル抽出部３３３により抽出される変数“XV1”、“XV4”、“XV4_B2”、“XV4_B3”、“XV5”、“XV5_B2”、“XV5_B3”と、が表示される。
【０１０３】
図１４は、プログラム表示部３２１によって表示されるプログラムの編集画面を例示した図である。図１４に示される例では、変数“XV20_ARRAY[0]”から５個の行列を変数“XV20_ARRAY[2]”に移動させるテーブル移動（TMOV）１４０１と、変数“XV20_ARRAY[2]”を変数“XV20_ARRAY[4]”の代入する演算１４０２と、変数“XV23”を変数“XV24”に代入する演算１４０３と、変数“XV22_B_ARRAY[0]”による判定結果が変数“XV22_B_ARRAY[5]”に格納される演算１４０４と、が示されている。
【０１０４】
次に、選択受付部３３１が、図１４に示されるプログラムの編集画面において、変数“XV20_ARRAY[4]”１４１１の選択を受け付けた状態で、クロスリファレンス検索を受け付けた場合について説明する。
【０１０５】
テーブル移動（TMOV）１４０１の入力では、変数“XV20_ARRAY[0]”から５ワード参照されている。変数“XV20_ARRAY[0]”から５ワードには、変数“XV20_ARRAY[4]”が含まれている。従って、テーブル抽出部３３３は、配列の先頭を示す変数“XV20_ARRAY[0]”を抽出する。
【０１０６】
テーブル移動（TMOV）１４０１では、出力で変数“XV20_ARRAY[2]”から５ワード参照されている。変数“XV20_ARRAY[2]”から５ワードには、変数“XV20_ARRAY[4]”が含まれている。従って、テーブル抽出部３３３は、配列の先頭を示す変数“XV20_ARRAY[2]”を抽出する。
【０１０７】
そして、アドレス抽出部３３２は、変数データベース３４１を参照して、選択受付部３３１で選択を受け付けた変数“XV20_ARRAY[4]”と同一のワード番号と対応付けられた、他の変数を抽出する。本実施形態においては、アドレス抽出部３３２は、図５に示される変数データベース３４１を参照し、変数“XV20_ARRAY[4]”とワード番号“２４”が同一の変数“XV24”を抽出する。
【０１０８】
図１５は、検索結果表示部３３５により表示される検索結果画面例を示した図である。図１５に示される例では、変数“XV20_ARRAY[4]”のクロスリファレンス検索を受け付けた場合を示している。このため、アドレス抽出部３３２により抽出される変数“XV24”と、テーブル抽出部３３３により抽出される変数“XV20_ARRAY[0]”、“XV20_ARRAY[2]”と、が表示される。
【０１０９】
次に、選択受付部３３１が、図１４に示されるプログラムの編集画面において、変数“XV22_B_ARRAY[0]”１４１２の選択を受け付けた状態で、クロスリファレンス検索を受け付けた場合について説明する。
【０１１０】
テーブル抽出部３３３は、テーブル命令データベース３４３のレコード毎に、当該テーブル命令で変数“XV22_B_ARRAY[0]”が参照されているか否かを判断する。
【０１１１】
テーブル移動（TMOV）１４０１の入力では、変数“XV20_ARRAY[0]”から５ワード参照されている。変数“XV20_ARRAY[0]”から５ワードには、変数“XV22_B_ARRAY[0]”が含まれている。従って、テーブル抽出部３３３は、配列の先頭を示す変数“XV20_ARRAY[0]”を抽出する。
【０１１２】
テーブル移動（TMOV）１４０１の出力では、変数“XV20_ARRAY[2]”から５ワード参照されている。変数“XV20_ARRAY[2]”から５ワードには、変数“XV22_B_ARRAY[0]”が含まれている。従って、テーブル抽出部３３３は、配列の先頭を示す変数“XV20_ARRAY[2]”を抽出する。
【０１１３】
そして、アドレス抽出部３３２は、変数データベース３４１を参照して、選択受付部３３１で選択を受け付けた変数“XV22_B_ARRAY[0]”と同一のワード番号と対応付けられた、他の変数を抽出する。本実施形態においては、アドレス抽出部３３２は、図５に示される変数データベース３４１を参照し、変数“XV22_B_ARRAY[0]”とワード番号“２２”が同一の変数“XV20_ARRAY[2]”を抽出する。
【０１１４】
図１６は、検索結果表示部３３５により表示される検索結果画面例を示した図である。図１６に示される例では、変数“XV22_B_ARRAY[0]”のクロスリファレンス検索を受け付けた場合を示している。このため、テーブル抽出部３３３により抽出される変数“XV20_ARRAY[0]”、“XV20_ARRAY[2]”と、アドレス抽出部３３２により抽出される変数“XV20_ARRAY[2]”と、が表示される。
【０１１５】
上述したように、選択を受け付けた変数名と、テーブル命令の入力又は出力で用いられている、配列の先頭の変数と、が一致している場合には、プログラムソースに含まれる変数のうち、当該配列に含まれている要素と同一のアドレスを参照する変数を全て抽出する。しかしながら、１つのプログラムソースに、１つの変数が複数箇所で設定されている場合に、選択を受け付けた変数の箇所に応じて、検出結果を異ならせても良い。例えば、同一の変数名の選択を受け付けた場合であっても、テーブル命令の入力又は出力に用いられる配列の先頭の変数であるか否かに応じて、抽出結果を異ならせても良い。
【０１１６】
例えば、図１４に示されるプログラムの編集画面において、変数“XV20_ARRAY[2]”１４１３が選択された場合と、変数“XV20_ARRAY[2]”１４１４が選択された場合と、で抽出される変数を異ならせることが考えられる。
【０１１７】
まずは、選択受付部３３１が、図１４に示されるプログラムの編集画面において、変数“XV20_ARRAY[2]”１４１４の選択を受け付けた状態（テーブル命令の入力又は出力に用いられる配列の先頭の変数を選択していない場合）で、クロスリファレンス検索を受け付けた場合について説明する。
【０１１８】
テーブル移動（TMOV）１４０１の入力では、変数“XV20_ARRAY[0]”から５ワード参照されている。“XV20_ARRAY[0]”から５ワードには、変数“XV20_ARRAY[2]”が含まれている。従って、テーブル抽出部３３３は、配列の先頭を示す変数“XV20_ARRAY[0]”を抽出する。
【０１１９】
テーブル移動（TMOV）１４０１の出力では、変数“XV20_ARRAY[2]”から５ワード参照されている。“XV20_ARRAY[2]”から５ワードには、変数“XV20_ARRAY[2]”が含まれている。従って、テーブル抽出部３３３は、配列の先頭を示す変数“XV20_ARRAY[2]”を抽出する。
【０１２０】
そして、アドレス抽出部３３２は、変数データベース３４１を参照して、選択受付部３３１で選択を受け付けた変数“XV20_ARRAY[2]”と同一のワード番号と対応付けられた、他の変数を抽出する。本実施形態においては、アドレス抽出部３３２は、図５に示される変数データベース３４１を参照し、変数“XV20_ARRAY[2]”とワード番号“２２”が同一の変数“XV22_B_ARRAY[0]”、及び変数“XV22_B_ARRAY[5]”を抽出する。
【０１２１】
図１７は、検索結果表示部３３５により表示される検索結果画面例を示した図である。図１７に示される例では、変数“XV20_ARRAY[2]”１４１４のクロスリファレンス検索を受け付けた場合を示している。このため、テーブル抽出部３３３により抽出される変数“XV20_ARRAY[0]”、及び変数“XV20_ARRAY[2]”と、アドレス抽出部３３２により抽出される変数“XV22_B_ARRAY[0]”、及び変数“XV22_B_ARRAY[5]”と、が表示される。
【０１２２】
次に、選択受付部３３１が、図１４に示されるプログラムの編集画面において、変数“XV20_ARRAY[2]”１４１３の選択を受け付けた状態（テーブル命令の入力又は出力に用いられる配列の先頭の変数を選択した場合）で、クロスリファレンス検索を受け付けた場合について説明する。
【０１２３】
テーブル移動（TMOV）１４０１の入力では、変数“XV20_ARRAY[0]”から５ワード参照されている。変数“XV20_ARRAY[0]”から５ワードには、変数“XV20_ARRAY[2]”が含まれている。従って、テーブル抽出部３３３は、配列の先頭を示す変数“XV20_ARRAY[2]”を抽出する。
【０１２４】
テーブル移動（TMOV）１４０１の出力では、選択を受け付けた変数“XV20_ARRAY[2]”１４１３が、配列の先頭の変数である。そこで、テーブル抽出部３３３は、ソースコードのうち、変数“XV20_ARRAY[2]”を先頭とした配列に含まれている要素と同一のアドレスを参照する変数を全て抽出する。換言すれば、テーブル抽出部３３３は、当該ソースコードにおいて、変数“XV20_ARRAY[2]”のワード番号“２２”から５個、換言すればワード番号“２２”〜“２６”を参照する全ての変数を抽出する。抽出には、図５に示されるような変数データベース３４１を用いるが、図９を用いて説明する。
【０１２５】
図９に示されるようなメモリ領域における各変数の割り当て状態において、テーブル移動（TMOV）１４０１は、変数“XV20_ARRAY[0]”からの配列９１１を、変数“XV20_ARRAY[2]”からの配列９１２に移動させている。
【０１２６】
そして、テーブル抽出部３３３は、変数“XV20_ARRAY[2]”からの配列９１２で示される範囲のうち、図１４のプログラムの編集画面に示されている、変数“XV20_ARRAY[4]”、“XV22_B_ARRAY[0]”、“XV22_B_ARRAY[5]”、“XV23”、及び“XV24”を抽出する。
【０１２７】
そして、アドレス抽出部３３２は、変数データベース３４１を参照して、選択受付部３３１で選択を受け付けた変数“XV20_ARRAY[2]”と同一のワード番号と対応付けられた、他の変数を抽出する。本実施形態においては、アドレス抽出部３３２は、図５に示される変数データベース３４１を参照し、変数“XV20_ARRAY[2]”とワード番号“２２”が同一の変数“XV22_B_ARRAY[0]”、及び“XV22_B_ARRAY[5]”を抽出する。
【０１２８】
図１８は、検索結果表示部３３５により表示される検索結果画面例を示した図である。図１８に示される例では、変数“XV20_ARRAY[2]”１４１４のクロスリファレンス検索を受け付けた場合を示している。このため、テーブル抽出部３３３及びアドレス抽出部３３２により抽出される変数“XV20_ARRAY[0]”、“XV20_ARRAY[2]”、“XV20_ARRAY[4]”、“XV22_B_ARRAY[0]”、“XV22_B_ARRAY[5]”、“XV23”、及び“XV24”が表示される。
【０１２９】
次に、本実施形態のプログラム制御装置３００におけるクロスリファレンス検索処理について説明する。図１９は、本実施形態のプログラム制御装置３００における上述した処理の手順を示すフローチャートである。
【０１３０】
まずは、選択受付部３３１が、プログラムの編集画面に表示されている変数の選択を受け付けた状態で、クロスリファレンス検索の選択を受け付ける（Ｓ１９０１）。
【０１３１】
テーブル抽出部３３３は、選択を受け付けた変数が含まれているソースコードに設定されているテーブル命令における、入力又は出力で用いられる配列に、選択を受け付けた変数と同一のアドレスを参照する要素が含まれている場合に、当該入力又は出力に用いられている配列の先頭を示す、他の変数を抽出する（Ｓ１９０２）。また、テーブル命令の入力又は出力における、配列の先頭の変数が、選択を受け付けた変数の場合に、テーブル抽出部３３３は、ソースコードのうち、当該配列に含まれている要素と同一のアドレスを参照する変数を全て抽出する。
【０１３２】
次に、アドレス抽出部３３２は、選択を受け付けた変数と同一スコープの変数のうち、選択を受け付けた変数と同一のアドレスを参照する、他の変数を抽出する（Ｓ１９０３）。
【０１３３】
クロスリファレンス検索部３３４は、Ｓ１９０２で抽出された、配列の先頭を示す他の変数について、クロスリファレンス検索を行う（Ｓ１９０４）。
【０１３４】
クロスリファレンス検索部３３４は、Ｓ１９０３で抽出された、同一のアドレスを参照する他の変数について、クロスリファレンス検索を行う（Ｓ１９０５）。
【０１３５】
検索結果表示部３３５は、配列の先頭を示す他の変数、同一のアドレスを参照する他の変数、及びＳ１９０４及びＳ１９０５のクロスリファレンス検索で検出された変数を表示する（Ｓ１９０６）。
【０１３６】
上述した処理手順により、選択を受け付けた変数に関連する他の変数が表示されるため、プログラムソースの開発負担を軽減できる。
【０１３７】
図２０は、プログラム表示部３２１によって表示されるプログラムの編集画面を例示した図である。図２０に示される例では、変数“XV1”から１０個の行列を変数“XV2”に移動させるテーブル移動（TMOV）２００１と、変数“XV5”に変数“XV4”の代入する演算２００２と、変数“XV5_B2”による判定結果が変数“XV5_B3”に格納されると共に変数“XV4_B2”による判定結果が変数“XV4_B3”に格納される演算２００３と、変数“V1”を用いて所定の演算を行った結果変数“V2”を出力する演算２００４と、を行うプログラムソース２０００と、変数“INV”と変数“XV1”とを用いた演算結果として変数“OUTV”を出力する所定の演算２０１１を行うプログラムソース２０１０と、が示されている。
【０１３８】
そして、選択受付部３３１は、変数“XV4”の選択を受け付けた状態２０５０で、クロスリファレンス検索の選択を受け付けたものとする。図２０で示される例では、選択を受け付けた変数“XV4”がローカル変数の場合とする。
【０１３９】
この場合、テーブル抽出部３３３は、同一スコープ内のテーブル移動（TMOV）から、変数“XV1”と変数“XV2”とを抽出する。そして、アドレス抽出部３３２は、変数“XV4”と同一スコープ内の変数のうち、変数“XV4”と同一のアドレスを参照する（ワード番号が一致する）、変数“XV_B2”、変数“XV_B3”を抽出する。
【０１４０】
さらに、クロスリファレンス検索部３３４は、変数“XV1”と変数“XV2”についてクロスリファレンス検索を行うことで、プログラムソース２０１０の演算２０１１の入力に用いられている変数“XV1”を検出する。同様に、クロスリファレンス検索部３３４は、変数“XV_B2”、変数“XV_B3”についてクロスリファレンス検索を行うが、特に検出されなかったものとする。
【０１４１】
図２１は、検索結果表示部３３５により表示される検索結果画面例を示した図である。図２１に示される例では、変数XVのクロスリファレンス検索を受け付けた場合を示している。このため、テーブル抽出部３３３により抽出される変数“XV1”、変数“XV2”、変数“XV20_ARRAY[2]”と、アドレス抽出部３３２により抽出される変数“XV4_B2”、変数“XV4_B3”に加えて、クロスリファレンス検索部３３４により検出された変数“XV1”（レコード２１０１）が表示される。
【０１４２】
本実施形態のプログラム制御装置３００は、アドレス抽出部３３２により変数を抽出することで、変数名が異なる場合であっても、選択を受け付けた変数と同一アドレスを参照する変数が抽出されるので、変数に関する変更を行う場合に影響を与える範囲を認識できるので、プログラムの作成、変更する際の負担を軽減できる。
【０１４３】
また、本実施形態のプログラム制御装置３００は、テーブル抽出部３３３により変数を抽出することで、テーブル命令の入力又は出力で用いられる変数の配列に、選択を受け付けた変数が含まれる場合に、当該入力又は出力で用いられる変数を抽出するので、変数に関する変更を行う場合に影響を与える範囲を認識できるので、プログラムの作成、変更する際の負担を軽減できる。
【０１４４】
また、本実施形態のプログラム制御装置３００は、アドレス抽出部３３２により抽出された変数と、テーブル抽出部３３３により抽出された変数と、を用いてクロスリファレンス検索を行うことで、同一スコープ内に限らず、他のスコープに影響を与える範囲を認識できるので、プログラムの作成、変更する際の負担を軽減できる。
【０１４５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１４６】
１…システム、１００、１０１…ステーション、１５０、１５１…コントローラ、２５１、２６１…ネットワーク、３００…プログラム制御装置、３０１…制御プログラム編集部、３０２…データベース部、３０３…通信部、３１１…プログラムエディタ、３１２…プログラムコンパイラ、３２１…プログラム表示部、３２２…変数検索部、３３１…選択受付部、３３２…アドレス抽出部、３３３…テーブル抽出部、３３４…クロスリファレンス検索部、３３５…検索結果表示部、３４１…変数データベース、３４２…ソースコードデータベース、３４３…テーブル命令データベース、３５１…通信部、３５２…メモリ部。
【図１】
0006989411.tif 000002
【図２】
0006989411.tif 000003
【図３】
0006989411.tif 000004
【図４】
0006989411.tif 000005
【図５】
0006989411.tif 000006
【図６】
0006989411.tif 000007
【図７】
0006989411.tif 000008
【図８】
0006989411.tif 000009
【図９】
0006989411.tif 000010
【図１０】
0006989411.tif 000011
【図１１】
0006989411.tif 000012
【図１２】
0006989411.tif 000013
【図１３】
0006989411.tif 000014
【図１４】
0006989411.tif 000015
【図１５】
0006989411.tif 000016
【図１６】
0006989411.tif 000017
【図１７】
0006989411.tif 000018
【図１８】
0006989411.tif 000019
【図１９】
0006989411.tif 000020
【図２０】
0006989411.tif 000021
【図２１】
0006989411.tif 000022