(57)【要約】      （修正有）【課題】他の命令に影響を与える出力系の命令等のプログラムの構成要素を簡単に検出し、該当する部分を表示することができ、その出力系の命令等に関係する他の命令を抽出して表示すること。【解決手段】ユーザプログラムの構成要素のうち、抽出対象の構成要素を受け付ける構成要素選択手段と、そのプログラム記憶手段に記憶されたユーザプログラムの構成要素を先頭から順に走査して、構成要素選択手段で受け付けた構成要素を、そのユーザプログラム上での出現順の情報とともに記録したアウトライン情報記憶部３４ｂを備える。表示画面には、ユーザプログラムを表示するプログラム表示部と、アウトライン情報を出現順に配列して表示するアウトライン情報表示部と、クロスリファレンス情報表示部を設け、構成要素には、固有のインデックス番号が付し、その固有のインデックス番号を用いてアウトライン情報と、ユーザプログラムを連係させる。【選択図】図３
2007086831.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブルコントローラのユーザプログラムを開発するための開発支援装置であって、
ユーザプログラムを記憶するプログラム記憶手段と、
前記ユーザプログラムの構成要素のうち、抽出対象の構成要素を受け付ける構成要素選択手段と、
前記プログラム記憶手段に記憶されたユーザプログラムの構成要素を先頭から順に走査して、前記構成要素選択手段で受け付けた構成要素を抽出し、その抽出した構成要素にユーザプログラム上での出現順に固有のインデックス番号を付したアウトライン情報を生成するアウトライン情報生成手段と、
前記アウトライン情報を格納するアウトライン情報記憶手段と、
ユーザプログラムを表示するプログラム表示部と、前記アウトライン情報を前記出現順に表示するアウトライン情報表示部とを有する表示装置と
を設けたことを特徴とする開発支援装置。
【請求項２】
前記構成要素選択手段でファンクションが選択された場合，
ファンクションブロックの内部のプログラムについても構成要素を抽出し、アウトライン表示する機能を有し、
その抽出されたファンクションブロックの内部のプログラムの構成要素は、当該ファンクションブロック以外の構成要素と区別可能に表示するようにしたことを特徴とする請求項１に記載の開発支援装置。
【請求項３】
前記アウトライン情報をソートし、ソート後のアウトライン情報を前記アウトライン情報表示部に表示する機能を備えたことを特徴とする請求項１または２に記載の開発支援装置。
【請求項４】
構成要素選択手段により選択可能な構成要素を追加登録する構成要素追加手段を備えたことを特徴とする請求項１から３のいずれか１項に記載の開発支援装置。
【請求項５】
構成要素選択手段により選択可能な構成要素を削除する構成要素削除手段を備えたことを特徴とする請求項１から４のいずれか１項に記載の開発支援装置。
【請求項６】
コンピュータに記憶されたプログラマブルコントローラのユーザプログラムを走査して前記ユーザプログラムの構成要素を取得するステップと、
前記取得した構成要素が予め用意された構成要素群の中から選択された構成要素かどうかを判定するステップと、
前記取得した構成要素が選択された構成要素の場合には、その構成要素に対応するアイコンを取得するステップと、
前記取得した構成要素に対応するアイコンと前記取得した構成要素とを表示するステップと
を備えたことを特徴とするアウトライン情報生成プログラム。
【請求項７】
プログラマブルコントローラのユーザプログラムを走査して前記ユーザプログラムの構成要素を取得するステップと、
前記取得した構成要素が予め用意された構成要素群の中から選択された構成要素かどうかを判定するステップと、
前記取得した構成要素が選択された構成要素の場合には、その構成要素に対応するアイコンを取得するステップと、
前記取得した構成要素に対応するアイコンと前記取得した構成要素とを表示するステップと
を備えたことを特徴とするアウトライン情報生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、開発支援装置およびアウトライン情報生成プログラムならびにアウトライン情報生成方法に関するものである。
【背景技術】
【０００２】
ファクトリーオートメーション（ＦＡ）の制御装置として、プログラマブルコントローラ（ＰＬＣ）が用いられている。このＰＬＣは、複数のユニットから構成される。すなわち、ＰＬＣは、電源供給源の電源ユニット，ＰＬＣ全体の制御を統率するＣＰＵユニット，ＦＡの生産装置や設備装置の適所に取り付けたスイッチやセンサの信号を入力する入力ユニット，アクチュエータなどに制御出力を出す出力ユニット，通信ネットワークに接続するための通信ユニットなどの各種のユニットを適宜組み合わせて構成される。
【０００３】
ＰＬＣのＣＰＵユニットにおける制御は、入力ユニットで入力した信号をＣＰＵユニットのＩ／Ｏメモリに取り込み（ＩＮリフレッシュ）、予め登録されたラダー言語で組まれたユーザプログラムに基づき論理演算をし（演算実行）、その演算実行結果をＩ／Ｏメモリに書き込んで出力ユニットに送り出し（ＯＵＴリフレッシュ）、その後、いわゆる周辺処理を行うということをサイクリックに繰り返し処理するようになる。
【０００４】
上記したユーザプログラムは、通常、開発支援装置を用いて生成したラダープログラムであり、通信回線を介してＰＬＣのＣＰＵユニットにダウンロードする。また、作成したラダープログラムに不具合が生じた場合には、ユーザは開発支援装置の表示画面にそのラダープログラムを表示させて検証し、不良箇所を見つけて修正作業を行なう。そして、ユーザは、修正したラダープログラムをＰＬＣにダウンロードする。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ラダープログラムのデバッグの作業は、想定外の動作をした出力命令のオペランド（接点番号やメモリ番号）をキーにして、その出力命令に関連する入力命令または出力命令を探して、ラダープログラムを修正、編集することを繰り返す。接点番号は、入力ユニットの端子台の端子場所を示す端子番号や、出力ユニットの端子台の端子場所を示す端子番号である。メモリ番号は、プログラマブルコントローラ内のＩＯデータメモリのアドレス値である。この際、デバッグ作業者にとって、想定外の動作をした出力命令に関連する入力命令または出力命令を探すことは煩雑である。例えば、ある出力命令に問題がある場合において、その出力命令に関連する入力命令が複数あるような場合には、それら複数の入力命令を全てチェックする必要があり、探し出す処理が煩雑である。また、上記出力命令と同じオペランドを持つ入力命令を含むプログラム部分がある場合は、問題となる出力命令に関係するプログラムを修正した後、そのプログラムも正常に動作することを確認する必要があり、確認すべき命令を漏らすことなく全てチェックすることは非常に煩雑である。そして、ラダープログラムが長くなるほどその問題は顕著となる。
【０００６】
この発明は、他の命令に影響を与える出力命令を含むプログラムの構成要素を簡単に検出し、その構成要素を含むプログラムを表示したり、その構成要素に関係する他の構成要素を抽出して表示することができ、ユーザプログラムのデバッグが容易に行なえる開発支援装置およびアウトライン情報生成プログラムならびにアウトライン情報生成方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の開発支援装置は、例えばプログラマブルコントローラにダウンロードするユーザプログラムを編集等するのに適したものである。具体的な構成としては、ユーザプログラムを記憶するプログラム記憶手段と、前記ユーザプログラムの構成要素のうち、抽出対象の構成要素を受け付ける構成要素選択手段と、プログラム記憶手段に記憶されたユーザプログラムの構成要素を先頭から順に走査して、前記構成要素選択手段で受け付けた構成要素を抽出し、その抽出した構成要素にユーザプログラム上での出現順に固有のインデックス番号を付したアウトライン情報を生成するアウトライン情報生成手段と、アウトライン情報を格納するアウトライン情報記憶手段と、表示画面には、前記ユーザプログラムを表示するプログラム表示部と、アウトライン情報記憶手段に格納された構成要素を前記出現順に表示するアウトライン情報表示部とを設け、アウトライン表示部に表示された構成要素とプログラム表示部に表示されたラダープログラムを連携させるようにした。
【０００８】
なお、アウトライン情報の表示形態としては、実施の形態で示したように、ツリー状に配置しても良いし、リスト状に表示しても良いし、その他各種の表示形態をとることができる。また、処理対象のユーザプログラムは、実施の形態で示すようにラダー言語，ＳＴ言語その他の各種の言語で構成されたものに適用できる。
【０００９】
このようにすると、ユーザが選択した所望の構成要素のみがアウトライン情報表示部にプログラム上での出現順に表示されるため、その表示された構成要素を見ることにより、ユーザプログラム上で所望の構成要素が全体のどの位の位置に存在しているかなどのユーザプログラムのアウトラインを認識することができる。特に、表示される構成要素は、ユーザが選択した構成要素であるので、そのときユーザが必要とするもののみが的確に過不足無く表示される。
【００１０】
また通常コメントには、ユーザプログラム上での位置を示すステップ番号は付与されないが、本発明ではコメントを含めてユーザプログラムのすべての構成要素に別途固有のインデックス番号を付与したことにより、コメントを所定の構成要素に設定した場合でもそのインデックス番号を用いてアウトライン情報表示部と、プログラム表示部の連係を取ることができる。つまり、アウトライン情報表示部に表示された所定の構成要素を選択すると、その選択された構成要素に付されたインデックス番号に対応するユーザプログラムの構成要素を認識し、それをプログラム表示部に表示することができる。よって、目的とするユーザプログラムの構成要素を簡単に見つけることができる。
【００１１】
また、前記構成要素選択手段でファンクションが選択された場合、ファンクションブロックの内部のプログラムについても構成要素を抽出し、アウトライン表示する機能を有し、その抽出されたファンクションブロックの内部のプログラムの構成要素は、当該ファンクションブロックに関連づけて表示するようにするとよい。関連づけは、実施の形態では一段字下げする事により実現している。
【００１２】
前記アウトライン情報をソートし、ソート後のアウトライン情報を前記アウトライン情報表示部に表示する機能を備えるとよい。ソートすることで、指定された項目単位にまとめることができる。
【００１３】
構成要素選択手段により選択可能な構成要素を追加登録する構成要素追加手段を備えるとよい。これにより、ユーザは任意の構成要素をアウトライン情報に表示することができるようになる。この構成要素追加手段は、実施の形態では、図３８に示すフローチャートを実施する機能や、図３７（ａ）の「追加」ボタンをクリックすることで、図３７（ｂ）の追加可能な命令一覧を表示することなどにより実現されている。
【００１４】
また、構成要素選択手段により選択可能な構成要素を削除する構成要素削除手段を備えるとよい。このようにすると、不必要な構成要素を選択可能な構成要素として表示されることを除去できる。この構成要素削除手段は、実施の形態では、図３９に示すフローチャートを実施する機能や、図３７（ａ）の「削除」ボタンクリックすることなどにより実現されている。
【００１５】
本発明の開発支援装置はまた、上述したアウトライン情報を自動で生成し、登録することができる。さらに、プログラム表示部に表示されたユーザプログラムにおいて選択された命令と同一のオペランドを有する命令を抽出し、その抽出した命令に関する情報を前記表示画面上に設けられたクロスリファレンス情報表示部に表示するクロスリファレンス情報生成手段を備えるとよい。このようにすると、例えば、プログラム表示部に表示されたユーザプログラムの出力命令を選択することにより、クロスリファレンス情報表示部には、その出力命令と同一のオペランドを持つ入力命令等を抽出し表示することができる。これにより、出力命令の影響を受ける入力命令を一覧リストとして表示することができる。
【００１６】
クロスリファレンス情報表示部に表示された所定の命令が選択された際に、その選択された命令が属するユーザプログラムを検知し、その選択された命令を前記プログラム表示部に表示する機能を備えるとよい。このようにすると、クロスリファレンス情報表示部に表示された命令に対応する実際のユーザプログラムを表示することができ、その命令が、プログラム上でどのように他の回路に影響しているかを容易に確認できる。
【００１７】
さらに、クロスリファレンス情報表示部に表示された１または複数の命令についての情報を記憶保持し、クロスリファレンス情報表示部に表示される情報が切り替った後で、記録保持した情報をクロスリファレンス情報表示部に再表示可能とするとよい。これは、実施の形態におけるブックマーク機能に対応する。このように一旦表示したクロスリファレンス情報を記憶することにより、後で簡単に戻って再表示することができる。
【００１８】
本発明のアウトライン情報生成プログラムは、コンピュータに記憶されたプログラマブルコントローラのユーザプログラムを走査して前記ユーザプログラムの構成要素を取得するステップと、前記取得した構成要素が、予め用意された構成要素群の中から選択された構成要素かどうかを判定するステップと、前記取得した構成要素が選択された構成要素の場合には、その構成要素に対応するアイコンを取得するステップと、前記取得した構成要素に対応するアイコンと前記取得した構成要素とを表示するステップとを備えて構成される。
【００１９】
本発明のアウトライン情報生成方法は、プログラマブルコントローラのユーザプログラムを走査して前記ユーザプログラムの構成要素を取得するステップと、前記取得した構成要素が予め用意された構成要素群の中から選択された構成要素かどうかを判定するステップと、前記取得した構成要素が選択された構成要素の場合には、その構成要素に対応するアイコンを取得するステップと、前記取得した構成要素に対応するアイコンと前記取得した構成要素とを表示するステップとを備えた。
【発明の効果】
【００２０】
この発明では、プログラム（ユーザプログラム）の中で他の命令に影響を与える出力命令等の所定のプログラム構成要素を簡単に抽出し、アウトライン表示部に表示することができる。しかも、その表示する構成要素をユーザが選択できるため、ユーザが必要とする情報のみを抽出し、表示することができ、使い勝手がよい。
【００２１】
また、クロスリファレンス情報生成手段を設けたことにより、その出力命令と同じオペランドを持つ他の命令を抽出して表示することができる。これらにより、多数存在する命令の中から問題となる命令を探したり、問題のある出力命令に接続される入力命令が複数あるような場合に、それら複数の入力命令を全て探してチェックしたり、また問題となる出力命令に関係するプログラムを修正した場合に、その出力命令と同じオペランドを持つ入力命令を含むプログラム部分が正常に動作することの確認が漏れなくでき、ユーザプログラムのデバッグを容易に行うことができる。
【発明を実施するための最良の形態】
【００２２】
図１は、本発明の好適な一実施の形態を示している。開発支援装置１０とＰＬＣ（ＣＰＵユニット）２０が、所定の通信回線２１を介して接続されている。この通信回線２１は、例えば、ＲＳ２３２Ｃなどのシリアル回線を用いて直接ケーブル接続することにより実現される。もちろん、このように直接接続するものに限ることはなく、他の通信回線を用いネットワーク経由でＰＬＣ２０と開発支援装置１０とを接続する構成を採っても良い。開発支援装置１０は、プログラマブルコントローラで実行されるユーザプログラムを作成する機能、通信回線２１を介して作成したユーザプログラムをＰＬＣ２０にダウンロードする機能、プログラマブルコントローラの動作に関する各種のパラメータ等を設定する機能、を持っている。
【００２３】
ユーザプログラムは、図２に示すようなラダー言語によって記述されたプログラムである。現在のユーザプログラムは、ラダー言語で記述されることが多いが、後述するように、ラダー言語以外のプログラム言語により記述されることもある。
【００２４】
開発支援装置１０は、パソコンに、予めインストールしてあるソフトウェアを起動することにより、上述の機能を実現する。そのハードウエア構成は、キーボード，ポインティングデバイス等の入力装置１１と、表示装置１２と、中央演算装置１３と、記憶装置１４とからなる。記憶装置１４には図示しないが不揮発性記憶装置と揮発性記憶装置があり、不揮発性記憶装置はユーザプログラムやユーザプログラムのアウトライン情報、クロスリファレンス情報などを記憶する。また中央演算装置１３の実行時のワークメモリとして揮発性記憶装置が適宜使用される。
【００２５】
図３は、図１の中央演算装置１３、記憶装置１４を使って実現される本発明の開発支援装置１０の機能ブロック図である。開発支援装置１０は、入力装置１１からの入力を処理する入力処理部３１、表示装置１２に出力する表示データを作成する表示処理部３２、各機能を実行する演算部３３、演算結果やユーザプログラム等を格納する記憶部３４、ＰＬＣとの通信を処理する通信処理部３５からなる。演算部３３はユーザプログラム編集部３３ａ、アウトライン情報生成部３３ｂ、クロスリファレンス情報生成部３３ｃを含む。また記憶部３４はユーザプログラム記憶部３４ａ、アウトライン情報記憶部３４ｂ、クロスリファレンス情報記憶部３４ｃを含む。
【００２６】
図４は、表示装置１２に表示される表示画面を示している。図示するように、ラダープログラムその他のプログラム言語で記述されたユーザプログラムを表示するプログラム表示部１２ａと、ユーザプログラムの構成を示すアウトライン情報を表示するアウトライン情報表示部１２ｂと、指定された命令のオペランドと同一のオペランドを持つ命令についての情報を表示するクロスリファレンス情報表示部１２ｃを備えている。具体的には図９，図１０，図１３，図１４などを用いて後述するが、本実施の形態では命令のオペランドに相当する接点番号やメモリ番号にそれぞれ対応させて変数名をつけることができ、変数名を用いたプログラム編集が可能となっている。変数名を用いたプログラム編集が可能であることにより、プログラム表示部１２ａ、アウトライン情報表示部１２ｂ、クロスリファレンス情報表示部１２ｃにもオペランドを変数名で表示することもできる。もちろん、このような変数名を利用せずに、接点番号や、メモリ番号を利用して表示してもよい。
【００２７】
アウトライン情報表示部１２ｂに表示するアウトライン情報は、アウトライン情報生成部３３ｂが作成し、記憶部３４内のアウトライン情報記憶部３４ｂに格納する。そして、表示処理部３２は、プログラム表示部１２ａに表示されているユーザプログラムについてのアウトライン情報をアウトライン情報表示部１２ｂに表示する。
【００２８】
アウトライン情報は、ユーザプログラムの構成の概要を示す情報のことであり、ユーザプログラムに使用されている所定の構成要素をそのユーザプログラムの先頭から順に抽出したものである。図２に示すラダープログラムのアウトライン情報は一例として、図５のように表示される。このように、アウトライン情報をアウトライン情報表示部１２ｂに表示する際には、ユーザプログラム（この例では、ラダープログラム（以下、同じ））の先頭から出現順に所定の構成要素を配列するとともに、複数の命令の集合体である回路部品については一列右に字下げしてツリー状に表示する。デバッグ作業者は、このアウトライン情報を見ることにより、抽出した各構成要素がそのラダープログラム中にどんな順番で、どの位置に存在しているかを認識することができる。
【００２９】
アウトライン情報表示部に表示するラダープログラムの構成要素は、固定ではなく選択可能である。本実施の形態では、出力命令，コメント，エンド，ファンクションブロック（ＦＢ），インターロック／インターロッククリア，回路部品の開始および終了を選択している。他の例として、出力命令のみを選択した場合には、ラダープログラム中の出力命令だけを抽出し、先頭から出現順に配列して表示する。
【００３０】
アウトライン情報生成部３３ｂは、アウトライン情報生成命令を受けると、対象となったラダープログラムの先頭から構成要素をひとつずつ走査し、予め抽出対象として選択した構成要素があると、それを抽出するとともに、順次登録し、階層構造を持つアウトライン情報を生成する。図６に本発明の前提の一つとなるアウトライン生成部のフローチャートを示す。すなわち、プログラムの先頭から順に走査し、構成要素があったならば（Ｓ１０でＹｅｓ）その構成要素を取得する（Ｓ１１）。ここではラダープログラムで使用されているすべての構成要素を取得する。そして、取得した構成要素が抽出対象構成要素か否かを判断する（Ｓ１２）。Ｓ１１で取得した構成要素が抽出対象の構成要素でなければ、分岐判断はＮｏとなる。そして、対象構成要素でない場合には、次の構成要素を探すために、走査の続きを行う（Ｓ２０）。次の構成要素がない場合にはＳ１０の分岐判断がＮｏとなるので、処理を終了する。
【００３１】
一方、取得した構成要素が対象構成要素である場合は、さらに「回路部品の開始または終了」か「回路部品以外」かを判断する（Ｓ１２）。回路部品以外の場合には、それぞれの構成要素に対応するアイコンを取得し（Ｓ１３）、ツリーに登録する（Ｓ１４）。
【００３２】
対応するアイコンは、構成要素の種類ごとに異なるとし、各構成要素とアイコンの対応関係は、予めテーブルを作成し、記憶装置１４に登録しておく。例えば抽出した構成要素が出力命令の場合には電球のようなマークとし、コメントの場合にはしおりのようなマークとする。これにより、Ｓ１３の処理では取得した命令の種類を認識し、上記テーブルを参照して、対応するアイコンを取得することになる。また、ツリーへの登録は、現在の階層の一行下に追加する。
【００３３】
ツリーに登録する情報としては、アイコンと、インデックス番号と、ステップ番号と、変数名である。ここでインデックス番号とは、ラダープログラム上でユニークに存在する番号であり、各命令はもちろんのこと、ステップ番号が付与されないコメントに対しても昇順に設定される。デバッグ作業者は、ラダープログラム内において、インデックス番号を特定すると、任意の命令，コメントを一意に特定することができる。
【００３４】
一方、取得した命令が回路部品の開始または終了の場合には、回路部品の開始か否かを判断し（Ｓ１５）、開始の場合には、回路部品のアイコンを取得するとともに（Ｓ１６）、ツリーに登録する（Ｓ１７）。このツリーへの登録処理は、Ｓ１４の処理と同様である。その後、ツリーを一列右に字下げをする（Ｓ１８）。そして、Ｓ２０（次の構成要素へ進む）を経由してＳ１０に戻る。これにより、これ以降に検出された構成要素についてのツリーの登録（Ｓ１４の処理）は、この字下げしたツリーの下に追加されることになり、回路部品に属する構成要素であることが一目で分かる。
【００３５】
また、取得した構成要素（命令）が、回路部品の終了の場合には、Ｓ１５の分岐判断はＮｏとなるのでＳ１９に進み、ツリーの字下げを解除し（Ｓ１９）、Ｓ２０（次の構成要素へ進む）を経由してＳ１０に戻る。これにより、これ以降に検出された構成要素（命令等）は、元（字下げされた１つ前、つまり１つ上位の階層）のツリーに追加されることになる。
このように、プログラムの先頭から出現順に走査して処理することにより、プログラム上で出現する順番通りに、ツリーの上から順に構成要素を登録することができる。
【００３６】
次に、具体例に基づき各処理を説明する。例えば、処理対象のラダープログラムが図２（ラダー図表示）のようになっているとすると、その構成要素リストは図７のようになる。各図において、丸数字がそれぞれ対応する対象構成要素である。図７に示すように、ステップ番号は、命令の先頭から出現する順番で、０番から昇順した番号を付与する。命令に付与されるため、コメントには付与されない。そこで、上述したごとく図７に示すようにプログラムの構成要素（命令，コメントなど）に対して出現順に昇順でインデックス番号を付与した。また、図２において、９行目から１５行目は１つの回路部品（部品名が［ｐａｒｔｓ１］）である。
【００３７】
係るラダープログラムに対応した構成要素リスト（図７）に対して、先頭の命令から順に処理すると、最初の構成要素（Ｉｎｄｅｘ００００００）は、入力命令であるので、Ｓ１２でＮｏとなる。次のＩｎｄｅｘ０００００１の構成要素は出力命令（ＯＵＴ）であるので、Ｓ１２でＹｅｓとなり、対応するアイコン（電球マーク）を取得し（Ｓ１３）、Ｓ１４の処理を実行し、ツリーへ登録する。これにより、図５に示すように１行目に「アイコン，ステップ番号（０００００１），変数名（ｂ）」が追加される。次の構成要素（ステップ番号無し，Ｉｎｄｅｘ０００００２）はコメントであるのでＳ１２でＹｅｓとなり、対応するアイコン（しおりマーク）を取得し（Ｓ１３）、Ｓ１４の処理を実行しツリーへ登録する。これにより、図５に示すように、２行目に「アイコン，コメント」（ステップ番号はないので非表示）が追加される。
【００３８】
以下順次処理し、例えば、Ｉｎｄｅｘ０００００Ａでは、構成要素は回路部品の開始であるため、Ｓ１５からＳ１７の処理をすることにより、図５に示すように、７行目に「回路部品名（［ｐａｒｔｓ１］）」が追加される。そして、Ｓ１８の実行によりツリーが一列右に字下げされるため、その次に検出された対象構成要素であるＩｎｄｅｘ０００００Ｂのコメント（「＊ｃｏｍｍｅｎｔ２＊」）が、８行目に追加されるが、このとき、７行目の［ｐａｒｔｓ１］の下に字下げされて表示される。以降検出された構成要素は、回路部品の終了を示すＩｎｄｅｘ００００１３のＰＡＲＴＳ＿ＥＮＤにてＳ１９を実行しツリーの字下げが解除されるまで、全て一列右に字下げされて表示される。
【００３９】
ツリーの字下げが解除されたあと、Ｉｎｄｅｘ００００１５のファンクションブロック（「ＦＢ１  ｉｎｓｔ１」）が、図５の１３行目に追加される。そして、Ｉｎｄｅｘ００００１７のＥＮＤ命令についてＳ１４の処理を実行してツリーに追加すると、それ以降は構成要素がないのでＳ１０の分岐判断がＮｏとなり処理を終了することになる。
【００４０】
上記のようにして生成されたアウトライン情報は、アウトライン情報記憶部３４ｂに格納される。そして、アウトライン情報表示部１２ｂにツリー状に表示されるアウトライン情報を見ると、他の命令に影響を与える出力命令やコメントなどが、プログラムにおける出現順に配置されるとともに、回路部品は字下げ表示により階層的に表示されるため、各構成要素のプログラム中のおおよその存在位置などが一目で分かる。
【００４１】
次にプログラム表示部１２ａに表示されるラダープログラムと、アウトライン情報表示部１２ｂに表示されるツリー状のアウトライン情報の連動について説明する。すなわち、アウトライン情報表示部１２ｂに表示されたツリー状のアウトライン情報の中から任意の構成要素を選択すると、それに対応したラダープログラムの該当する構成要素を表示するようになる。具体的には、図８に示すフローチャートを実施する機能により、係る連動させることを実現している。
【００４２】
すなわち、アウトライン情報表示部１２ｂ内のカーソル位置の登録情報を取得する（Ｓ２１）。これは、例えばユーザは、ポインティングデバイス等の入力装置１１を操作して、ツリー状のリストの中で任意の構成要素を選択する。すると、選択された構成要素を認識し、アウトライン情報記憶部３４ｂにアクセスしアウトライン情報の中からインデックス番号を取得する。
【００４３】
次いで、現在プログラム表示部１２ａに表示されているラダー画面を表示する表示処理部３２に対し、ジャンプ依頼をする（Ｓ２２）。つまり、インデックス番号を渡す。そして、そのインデックス番号を取得したならば、プログラム表示部１２ａに表示されたラダープログラムの該当位置にジャンプする（Ｓ２３）。すなわち、取得したインデックス番号をキーにユーザプログラム記憶部３４ａにアクセスし、該当する構成要素を認識する。そして、その構成要素が、現在プログラム表示部１２ａに表示されている場合には、対応する構成要素にカーソルを移動する。また、プログラム表示部１２ａに表示されていない場合には、該当する構成要素をプログラム表示部１２ａ内に表示するとともに、その構成要素にカーソルを移動する。
【００４４】
これにより、例えば、図９に示すように、アウトライン情報表示部１２ｂのツリーの中で、「ステップ番号：００００７，変数名：Ｃｏｍｐｌｅｔｅ１」が選択すれると、プログラム表示部１２ａにおいても対応する出力命令（変数名：Ｃｏｍｐｌｅｔｅ１）にカーソルが当てられる（反転表示している）。この状態で、アウトライン情報表示部１２ｂのツリーの中で、「ステップ番号：０００１０，変数名：Ｃｏｍｐｌｅｔｅ２」が選択すれると、図１０に示すように、プログラム表示部１２ａにおいても対応する出力命令（変数名：Ｃｏｍｐｌｅｔｅ２）にカーソルが移動する。
【００４５】
次に、クロスリファレンス情報表示部１２ｃに表示するクロスリファレンス情報について説明する。クロスリファレンス情報表示部１２ｃには、プログラム表示部１２ａに表示されたラダープログラム中の所定の構成要素を選択すると、その構成要素と同一のオペランド（変数名）を持つ構成要素を抽出し、それをクロスリファレンス情報表示部１２ｃに表示する。係る処理は、ユーザプログラム編集部３３ａが、図１１に示すフローチャートを実行することにより得られた情報に基づき、図１１に示すフローチャートをクロスリファレンス情報生成部３３ｃが実行することにより行なう。図１１でまず、プログラム表示部１２ａに表示されたユーザプログラム画面（図ではラダー画面）上でカーソルを移動する（Ｓ３１）。移動したカーソルのカーソル位置が、オペランド部か否かを判断し（Ｓ３２）、オペランド部の場合には、そのカーソル位置にある構成要素についてのプログラム名，ステップ番号，オペランド（変数名）をクロスリファレンス情報生成部３３ｃに渡す（Ｓ３３）。
【００４６】
図１２に示すように、ユーザプログラム編集部３３ａから所定の情報を取得すると（Ｓ４０）、オペランド（変数名）がグローバル変数か否かを判断する（Ｓ４１）。グローバル変数とは複数のＰＬＣで共通に使用される変数のことである。グローバル変数か否かは、オペランド（変数名）の前に付加されたパスにより判断できる。例えば、グローバル変数のパスは、「プロジェクト名￥コンフィグレーション名￥変数名」となる。また、特定のＰＬＣでのみ使用されるローカル変数（タスク）の場合は、「プロジェクト名￥コンフィグレーション名￥タスク名￥変数名」となる。このように、グローバル変数かローカル変数かにより、パスが異なるので、容易に判断できる。
【００４７】
グローバル変数の場合には、パスで指定されるプログラムが存在するか否かを判断し（Ｓ４２）、存在しなければそこで処理を終了し、存在する場合には、プログラムを取得する（Ｓ４３）。
【００４８】
取得したプログラムを先頭の命令から順に走査し、命令が存在するか否かを判断する（Ｓ４４）。そして、命令を検出したならば、その命令を取得し（Ｓ４５）、その命令のオペランド（変数名）と、ラダーエディタから取得したオペランド（変数名）が一致するか否かを判断する（Ｓ４６）。そして、一致する場合には、そのプログラムがタスク実行中か否かを判断し（Ｓ４７）、実行の有無により対応するアイコンを取得する（Ｓ４８，Ｓ４９）。その後、その命令についてのクロスリファレンス情報を登録する（Ｓ５０）。ここで登録する情報としては、少なくともオペランド（変数名），アドレス，言語，パス，タスク実行状態，ステップ番号である。
【００４９】
この登録後、或いは処理ステップＳ４６の分岐判断でオペランド（変数名）が一致しない場合には、次の命令へ進む（Ｓ５１）。最後の命令まで処理すると、Ｓ４４の分岐判断がＮｏとなるので、処理ステップＳ５２に飛び、次のプログラムを走査する。このようにして、全てのプログラムに付いてオペランド（変数名）が一致する命令の抽出・登録処理を終了したならば、処理ステップＳ４２の分岐判断がＮｏとなるので一連の処理を終了する。
【００５０】
一方、グローバル変数でない場合には、処理ステップＳ４１の分岐判断がＮｏとなるので、パスにて指定されたプログラムが存在するか否かを判断し（Ｓ５３）、存在しない場合には、処理を終了する。また、存在する場合には、そのプログラムについて処理ステップＳ４３から処理ステップＳ５１までの処理を実行し、そのプログラム中に存在するオペランド（変数名）が一致する命令を取得するともに、関連する情報（アイコン，クロスリファレンス情報）を登録する。なお、プログラムの最後まで走査したならば、処理ステップＳ４４の分岐判断はＮｏとなるが、その場合は処理を終了する（Ｓ５４）。
【００５１】
これらのクロスリファレンス情報等は、記憶装置４内の一時ファイルに格納されるとともに、例えば図１３に示すように、クロスリファレンス情報表示部に表示される。図１３では、プログラム表示部１２ａに表示されたユーザプログラム画面（ラダー画面）中の変数名がＣｏｍｐｌｅｔｅ１の出力命令が選択されたため、同一の変数名を持つ入力命令等として４つの命令が抽出され、表示された例を示している。
【００５２】
この状態から、クロスリファレンス情報表示部１２ｃに表示された任意の変数名（例えば、図１４に示すように、２行目の変数名）を選択すると、該当する変数名（命令）を含むプログラムをプログラム表示部１２ａに表示する。このとき、カーソルを当てた強調表示することにより、ユーザに容易に理解させることができる。
【００５３】
係る処理を行うための機能は、図１５に示すフローチャートを実行するようなる。まずクロスリファレンス情報表示部１２ｃ上のカーソル位置を取得する（Ｓ６１）。このカーソル位置は、図では、選択されて反転表示されている位置である。そして、そのカーソルで選択された変数名のパス情報から、その変数名が属するプログラムを探索し（Ｓ６２）、プログラム表示部１２ａにプログラムが表示されているか否かを判断する（Ｓ６３）。プログラムが表示されていない場合には、処理ステップＳ６２で探索したプログラムを表示する（Ｓ６４）。
【００５４】
そして、プログラム表示部1２ａに表示された対応するプログラムにジャンプし（Ｓ６５）、そのプログラム中の該当する命令位置にジャンプする（Ｓ６６）。この処理ステップＳ６６の処理は、図８における処理ステップＳ２３の処理と同様である。これにより、該当する命令をプログラム表示部１２ａ上に表示するとともに、カーソルを移動し、強調して表示する。
【００５５】
また、クロスリファレンス情報表示部１２ｃに表示する情報は、プログラム表示部１２ａに表示されたユーザプログラム（ラダープログラム）中の選択された構成要素（命令）に対応してクロスリファレンス情報生成部３３ｃが都度生成し、表示する。従って、現在クロスリファレンス情報表示部１２ｃに表示されていない構成要素がプログラム表示部１２ａ側で選択されると、クロスリファレンス情報表示部１２ｃに表示されるクロスリファレンス情報も変化する。ここでユーザは１つ前に表示していた情報に簡単に戻ることができない。実際のデバッグ処理では、１つ前さらには何回か前の表示に戻したいという要求があるが、従来は係る要求を満たすことができなかった。
【００５６】
そこで、図４に示すように、クロスリファレンス情報表示部１３ｃの上部に、ブックマークボタンＢ１と、後退ボタンＢ２と、前進ボタンＢ３を用意した。ブックマークボタンＢ１をクリックしたときに表示されていたクロスリファレンス情報を記憶装置１４に記憶保持する機能を備えた。記憶装置１４に記憶保持されたクロスリファレンス情報は、記憶した順に番号を付与する。これにより、後退ボタンＢ１を選択実行する都度、番号を参照し、現在表示されているクロスリファレンス情報の１つ前に表示（格納）されたクロスリファレンス情報を記憶装置１４から呼び出して表示する。また、前進ボタンＢ３をクリックすることにより、番号を参照し、現在表示されているクロスリファレンス情報の次に表示（格納）されたクロスリファレンス情報を記憶装置１４から呼び出して表示する。
【００５７】
このように、クロスリファレンス情報の表示履歴を逐次表示することができ、所望のクロスリファレンス情報を簡単に見ることができるため、ラダー言語その他のプログラム言語で記述されたユーザプログラムのデバッグ作業を容易に行うことができる。
【００５８】
上述した例では、アウトライン情報表示部１２ｂに表示する構成要素のうち、回路部品については、その前記回路部品の構成要素について字下げを行ない、リストに追加するように表示することで、一目で各構成要素が同一の回路部品を構成していることが分かるようにしている。
【００５９】
一方、ファンクションブロックは、予め定められた所定の処理を実行するものであるが、図２にも示すように、ラダープログラム上では、１つのブロックとして記述され、内部にてどのような処理が実行されるようにプログラムが組まれているかが分からないようになっている。ユーザプログラムの作成等の通常の使用においては、少なくともそのファンクションブロックがどのような機能を持っているかを知っていれば、足りる。しかし、デバッグ等を行なう場合には、ファンクションブロックの構成要素を知りたいという要求がある。そこで、上述した他の構成要素と同様に、ファンクションブロックを構成するプログラム中に抽出対象として選択した構成要素があると、それを抽出するとともに、順次登録し、階層構造を持つアウトライン情報を生成する。この時、回路部品と同様に、一つのファンクションブロックを構成する構成要素は、一纏めに管理し、アウトライン情報を表示する際には、適宜字下げを行ない、一目でそのファンクションブロックを構成する構成要素であることが分かるようにしている。
【００６０】
ファンクションブロックの場合も、基本的には回路部品と同様であり、その概略を説明すると、以下の手順に従って処理を実行する。まず、ユーザプログラムを先頭から順に走査し、ファンクションブロックを検出したならば、以下に示す手順に従い、ファンクションブロックの再入処理を行なう。
（１）ファンクションブロックのアイコンを取得する；
（２）ファンクションブロックをツリー／リストに登録する；
（３）字下げを行なう；
（４）現在の構成要素群をスタック上に格納する；
（５）ファンクションブロックに構成要素を置換える。
【００６１】
また、現在処理中のファンクションブロックからの復帰処理は、以下の手順に従い行なう。
（１１）スタック上を確認し、スタックが空ならば、終了と判断する；
（１２）スタック上から格納されている構成要素群を取得する；
（１３）字下げを解除する。
【００６２】
また、ファンクションブロック中にさらにファンクションブロックが存在する場合には、上記の（３）の処理により、現在のファンクションブロックの次からネストするため、字下げされる。そして、（４），（５）の処理を実行し、現在処理中（ファンクションブロックの中のファンクションブロック）についての構成要素群をスタックに格納し、当該ファンクションブロックのプログラムをメモリ上にロードしてアウトラインを同じように作成する。そして、当該ファンクションブロックについての必要な構成要素が抽出されたならば、字下げを解除する（当該ファンクションブロックのネストを解除し、呼び出し元にリンクさせて登録していく。）。最上位（親）のファンクションブロックについて、全ての構成要素が抽出された（構成要素の末端まできた）ならば、最上位（親）のファンクションブロックについての字下げが解除され、復帰する。
【００６３】
次に、具体例を挙げつつ説明する。図１６は、ラダー言語で記述された別のユーザプログラムの一例を示している。この図１６に示した例では、ファンクションブロックとして、［ＦＢ１］，［ＦＢ２］，［ＦＢ３］の３つが使用されている。それら各ファンクションブロックの具体的な内部プログラムは、それぞれ図１７（ａ），図１８（ａ），（ｂ）に示すようになっている。さらに、図１７（ａ）に示すように、ファンクションブロック［ＦＢ１］は、内部にさらに別のファンションブロック［ＦＢ１１］（図１７（ｂ）参照）を備えている。このように、ファンクションブロックの中にさらにファンクションブロックが存在する場合、その内部に存在するファンクションブロックについても、上述した再入処理と復帰処理を行なうことになる。
【００６４】
また、この図１６に示したユーザプログラムには、たとえば、ステップ番号［０００００８］の「ＭＯＶ」や、ステップ番号［００００１８］の「ＴＩＭＸ」の構成要素も記述されている。これらの構成要素は、上述した例では、アウトライン情報として表示する構成要素とはなっていないため、たとえば図６に示すフローチャートを実行した場合、たとえユーザプログラム上に記述されていても、構成要素としては抽出されない。よって、アウトライン情報表示部１２ｂに表示されることもない。
【００６５】
図１６に示すラダープログラムのアウトライン情報は、一例として、アウトライン表示部１２ｂに図１７のようにリスト表示される。このように、アウトライン情報をアウトライン情報表示部１２ｂに表示する際には、ラダープログラムの先頭から出現順に所定の構成要素を配列するとともに、複数の命令の集合体である回路部品や、内部に具体的なプログラム，構成要素を含むファンクションブロックについては一列右に字下げしてツリー状に表示する。デバッグ作業者は、このアウトライン情報を見ることにより、抽出した各構成要素がそのラダープログラム中にどんな順番で、どの位置に存在しているかを認識することができる。
【００６６】
アウトライン情報表示部１２ｂに表示するラダープログラムの構成要素は、予め用意された固定のものでも良いし、たとえば、図１９に示すような、アウトライン情報に表示する構成要素を選択するためのダイアログウインドウ（アウトライン表示オプション）を表示装置に出力し、ユーザが表示したい構成要素を選択するようにしてもよい。この選択は、リストアップされた構成要素の前に配置されたチェックＢＯＸをチェックすることで行なう。図１９に示す例では、リストアップされた全ての構成要素（出力命令，コメント，エンド，ファンクションブロック（ＦＢ），インターロック／インターロッククリア，回路部品の開始および終了）が選択されている。
【００６７】
アウトライン情報生成部３３ｂは、アウトライン情報生成命令を受けると、対象となったラダープログラムの先頭から構成要素をひとつずつ走査し、予め表示する抽出対象として選択された構成要素（図１９のチェックＢＯＸで選択されたもの）があると、それを抽出するとともに、順次登録し、階層構造を持つアウトライン情報を生成する。
【００６８】
図２０は、上述したファンクションブロック内の構成要素も抽出し、アウトライン情報を生成する本発明の前提の一つとなるアウトライン生成部のフローチャートを示す。すなわち、プログラムの先頭から順に走査し、構成要素があったならば（Ｓ１０でＹｅｓ）その構成要素を取得する（Ｓ１１）。ここではラダープログラムで使用されているすべての構成要素を取得する。そして、取得した構成要素が抽出対象構成要素（図１９に示すダイアログウインドウでチェックされた構成要素）か否かを判断する（Ｓ１２）。処理ステップＳ１１で取得した構成要素が抽出対象の構成要素でなければ、分岐判断はＮｏとなる。そして、対象構成要素でない場合には、次の構成要素を探すために、走査の続きを行う（Ｓ２０）。
【００６９】
一方、取得した構成要素が対象構成要素である場合（分岐判断のＳ１２でＹｅｓ）は、対象構成要素がファンクションブロックか否かを判断する（Ｓ７１）。そして、ファンクションブロックでない場合には、構成要素が回路部品以外（回路部品中の構成要素も回路部品以外となる）か、回路部品の開始か、回路部品の終了かを判断する（Ｓ７８）。そして、回路部品以外の場合には、それぞれの構成要素に対応するアイコンを取得し（Ｓ１３）、ツリー及びまたはリストに登録する（Ｓ１４）。すなわち、具体的な表示例は後述するが、本実施の形態では、上述したように、アウトライン情報表示部１２ｂに表示するアウトライン情報の表示形態として、上述したツリー形式のツリー表示に加え、表形式のリスト表示も行なえるようにした。そこで、この処理ステップＳ１４の登録処理では、ツリーとリストの両方に登録するようにした。もちろん、予め定めた、一方にのみ登録するようにしてもよい。この点は、以下に示すツリー，リストに対する処理でも同様である。
【００７０】
対応するアイコンは、構成要素の種類ごとに異なるとし、各構成要素とアイコンの対応関係は、予めテーブルを作成し、記憶装置１４に登録しておく。例えば抽出した構成要素が出力命令の場合には電球のようなマークとし、コメントの場合にはしおりのようなマークとする。これにより、Ｓ１３の処理では取得した命令の種類を認識し、上記テーブルを参照して、対応するアイコンを取得することになる。また、ツリー／リストへの登録は、現在の階層の一行下に追加する。
【００７１】
ツリーに登録する情報としては、アイコンと、インデックス番号と、ステップ番号（アドレス）と、変数名（名前）である。ここでインデックス番号とは、ラダープログラム上でユニークに存在する番号であり、各命令はもちろんのこと、ステップ番号が付与されないコメントに対しても昇順に設定される。デバッグ作業者は、ラダープログラム内において、インデックス番号を特定すると、任意の命令，コメントを一意に特定することができる。
【００７２】
一方、取得した命令が回路部品の開始の場合には、回路部品のアイコンを取得するとともに（Ｓ１６）、ツリー／リストに登録する（Ｓ１７）。このツリー／リストへの登録処理は、Ｓ１４の処理と同様である。その後、ツリー／リストを一列右に字下げをする（Ｓ１８）。そして、Ｓ２０（次の構成要素へ進む）を経由してＳ１０に戻る。これにより、これ以降に検出された構成要素についてのツリー／リストの登録（Ｓ１４の処理）は、この字下げしたツリー／リストの下に追加されることになり、回路部品に属する構成要素であることが一目で分かる。
【００７３】
また、取得した構成要素（命令）が、回路部品の終了の場合には、Ｓ１９に進み、ツリー／リストの字下げを解除し（Ｓ１９）、Ｓ２０（次の構成要素へ進む）を経由してＳ１０に戻る。これにより、これ以降に検出された構成要素（命令等）は、元（字下げされた１つ前、つまり１つ上位の階層）のツリー／リストに追加されることになる。
【００７４】
一方、対象構成要素がファンクションブロックの場合には、Ｓ７１の分岐判断がＹｅｓとなるので、処理ステップＳ７２に飛び、処理を実行する。すなわち、まず、対応するファンクションブロックのアイコンを取得する（Ｓ７２）とともに、ツリー／リストに登録する（Ｓ７３）。このツリー／リストへの登録処理は、Ｓ１４等の処理と同様である。その後、ツリー／リストを一列右に字下げをする（Ｓ７４）。そして、現在の構成要素群（パス付きプログラム名称とＦＢインスタンスのインデックス番号）をスタック上に格納する（Ｓ７５）。次いで、ファンクションブロックの命令からプログラム（構成要素群）を内部メモリにロードする（Ｓ７６）。上記の処理が、ファンクションブロックの再入処理（１）から（５）に対応する。
【００７５】
この後、Ｓ１０に戻り構成要素の有無を判断する。構成要素が無い場合には、スタックの有無を判断する（Ｓ８０）。Ｓ７６からＳ１０経由でＳ８０に来た場合には、Ｓ７５の処理を実行しているためスタックが存在するので、このＳ８０の分岐判断は、Ｙｅｓとなる。そこで、スタック上から格納されている構成要素群を取得し（Ｓ８２）、ツリー／リストの字下げを解除し（Ｓ８２）、Ｓ２０（次の構成要素へ進む）を経由してＳ１０に戻る。これにより、これ以降に検出された構成要素（命令等）は、元（字下げされた１つ前、つまり１つ上位の階層）のツリー／リストに追加されることになる。換言すると、Ｓ７４で字下げしてから、Ｓ８２で字下げ解除するまでの行に格納される構成要素は、１つのファンクションブロックを構成することが一目でわかる。上記の処理が、ファンクションブロックの復帰処理（１１）から（１３）に対応する。
【００７６】
また、次の構成要素がない場合にはＳ１０の分岐判断がＮｏとなるので、スタックがあるか否かを判断する（Ｓ８０）。そして、スタックが無い（空の）場合には、処理を終了する。このように、プログラムの先頭から出現順に走査して処理することにより、プログラム上で出現する順番通りに、ツリーの上から順に構成要素を登録することができる。しかも、回路部品に属する構成要素や、ファンクションブロックに属する構成要素は、一列字下げされるため、アウトライン情報表示部１６ｂに出力した際には、一目でそれらに属する構成要素であることが認識できる。このようにして生成されたアウトライン情報は、アウトライン情報記憶部３４ｂに格納されるのは、上述したとおりである。
【００７７】
図１６に示すユーザプログラムは、図２０に示すフローチャートを実行することにより、図２１（ツリー表示）あるいは図２２（リスト表示）に示すアウトライン情報が、アウトライン情報表示部１６ｂに表示される。この図２１，図２２は、図１９に示すダイアログウインドウにおいて、全ての構成要素をチェックしたものである。図２１，図２２から明らかなように、各ファンクションブロックの構成要素は、字下げされて表示されるため、それぞれ各ファンクションブロックの構成要素であることが一目でわかる。さらに、［ＦＢ１］については、［ＦＢ１１］を有しているので、［ＦＢ１１］の部分で再入と復帰が行なわれることで、［ＦＢ１］の構成要素に［ＦＢ１１］が入っていることはもちろんのこと、［ＦＢ１１］の部分がさらに字下げされるため、［ＦＢ１１］の構成要素も一目でわかる。
【００７８】
また、図２１（ツリー表示）に示すアウトライン情報において、ネスト無しの状態とすると、図２３に示すようなアウトライン情報がアウトライン情報表示部１２ｂに表示される。同様に、図２２に示すアウトライン情報（リスト表示）において、ネスト無しの状態とすると、図２４に示すようなアウトライン情報がアウトライン情報表示部１２ｂに表示される。
【００７９】
なお、具体的な図示は省略するが、アウトライン表示部１２ｂに、図２１（ツリー表示）あるいは図２２（リスト表示）に示すアウトライン情報が表示されている場合には、プログラム表示部１２ａには、対応するユーザプログラム（図１６に示したもの）の対応する部分が表示されるとともに、クロスリファレンス情報表示部１２ｃにも、指定された構成要素に該当するものが表示される。つまり、ファンクションブロックについてのアウトライン情報の生成アルゴリズムが相違するだけであるため、プログラム表示部１２ａに表示されるユーザプログラム（図１６では、ラダープログラム）と、アウトライン情報表示部１２ｂに表示されるアウトライン情報（ツリー表示／リスト表示）との連動や、それら各表示部に表示された構成要素とクロスリファレンス情報表示部１２ｃに表示する情報の連動は、図８から図１５を用いて説明した機能・アルゴリズムと同様であるため、その説明を省略する。係る点は、以下に示す説明についても同様である。
【００８０】
また、上述した表示例は、図１９に示すダイアログウインドウにリストアップされた全ての構成要素にチェックをつけた場合であるが、本実施の形態では、任意の構成要素をチェックすることができる。例えば、図１９のダイアログウインドウにおいて、ファンクションブロックのみをチェックした場合、図２０のＳ１２の対象構成要素か否かの判断は、ファンクションブロック以外は全てＮｏとなる。よって、ファンクションブロックのみが対象構成要素として抽出され、処理がすすむ。その結果、図１６に示すユーザプログラムについてのアウトライン情報は、ツリー表示すると図２５（ａ）に示すようになり、リスト表示すると図２５（ｂ）に示すようになる。なお、図２５（ａ），（ｂ）は、共にネスト無しの状態を示しているが、図２１，図２２と同様にファンションブロックの構成要素を表示することももちろんできる。
【００８１】
また、例えば、図１９のダイアログウインドウにおいて、コメントのみをチェックした場合、図２０のＳ１２の対象構成要素か否かの判断は、コメント以外は全てＮｏとなる。よって、コメントのみが対象構成要素として抽出され、処理がすすむ。その結果、図１６に示すユーザプログラムについてのアウトライン情報は、ツリー表示すると図２６（ａ）に示すようになり、リスト表示すると図２６（ｂ）に示すようになる。
【００８２】
また、例えば、図１９のダイアログウインドウにおいて、出力，ファンクションブロック，コメントのように複数の構成要素をチェックすることもできる。係る場合、図２０のＳ１２の対象構成要素か否かの判断は、上記３つの構成要素以外は全てＮｏとなる。よって、指定されたもののみが対象構成要素として抽出され、処理がすすむ。その結果、図１６に示すユーザプログラムについてのアウトライン情報は、ツリー表示すると図２７（ａ）に示すようになり、リスト表示すると図２７（ｂ）に示すようになる。なお、図２７（ａ），（ｂ）は、共にネスト無しの状態を示しているが、図２１，図２２と同様にファンションブロックの構成要素を表示することももちろんできる。
【００８３】
上述した各例は、いずれもユーザプログラムとしてラダー言語を使用したものについて説明したが、本発明はこれに限ることはなく、他のプログラム言語についてももちろん適用できる。一例を示すと、図２８（ａ）に示すようなＳＴ言語を用いて作成したプログラムの場合、図２０に示すフローチャートを実行することで、図２８（ｂ）に示すアウトライン情報を生成することができる。
【００８４】
図２９以降は、本発明の第２の実施の形態を示している。上述した実施の形態では、ツリー表示，リスト表示のいずれも、アウトライン情報はプログラムの出現順に表示するようにした。本実施の形態は、指定した項目でソートすることができるようにした。
【００８５】
例えば、リスト表示されたアウトライン情報が、図２９に示すようになっている場合において、アドレスをキーとしてソートすると、図３０に示すようになる。図から明らかなように、まず、リスト表示されたアドレスの欄において、数値の小さい順に昇準し、アドレスが空欄のものについては、基準となる出現順（インデックス番号順）にソートする。つまり、ソート前の表示状態に関係なく、ソートする場合の対象は、出現順に配置されたアウトライン情報（図２２）に示したものとなる。
【００８６】
また、種別（構成要素の種類）をキーにソートをした場合には、図３１に示すようになる。同様に変数名でソートしたときのアウトライン情報は、図３２に示すようになるし、コメントでソートしたときのアウトライン情報は、図３３に示すようになる。上述したように、ソートする際の基準となるアウトライン情報は、インデックス番号順に配列した図２２に示すものであるため、ソートする直前にアウトライン情報表示部１２ｂに表示されていたアウトライン情報がどの項目をキーにしてソートしていたかに関わらず、各項目でソートした場合のそれぞれの結果は同じになる。つまり、例えば、アドレスをキーとしてソートした場合には、直前の表示形態が、例えば図３１，図３２，図３３のいずれであっても、常に図３０に示すようになる。もちろん、ソート対象を直前に表示されたアウトライン情報としても良い。
【００８７】
なお、リスト表示のアウトライン情報の表示形態のものに対し、係るソートを行なうための具体的な内部処理は、例えば、表計算ソフト（アプリケーションプログラム）の機能と同様のものを用いることができるので、当該処理を実施するための具体的なフローチャート等を用いた説明を省略する。
【００８８】
また、上述した例では、リスト表示に基づくソート処理を行なうようにしたが、例えば図３４に示すフローチャートを実行する機能を実装することで、ツリー表示のアウトライン情報に対してもソート処理を行なうことができる。まず、ソート処理する際の選択画面（入力画面）として、例えば図３５に示すような画面を出力表示する。この選択画面中の、情報に設けられた「種別表示を有効」のチェックＢＯＸにチェックを入れることで、項目をキーにしたソートを行なうようになる。なお、係るチェックＢＯＸにチェックを入れないと、図２０に示したフローチャートを実行し、出現順（インデックス番号順）に配列したアウトライン情報を生成するようになる。また、この例でも、構成要素をチェックＢＯＸと共にリスト表示し、チェックが入れられたものをアウトライン情報として表示する対象構成要素とするようにしている。図では、全ての構成要素が選択されている。
【００８９】
図３４は、基本的に図２０に示すフローチャートを前提としている。対応する処理ステップには同一のステップ番号を付している。図３４と図２０とを比較すると明らかなように、本実施の形態では、まず種別を取得する（Ｓ９０）。つまり、図３５に示す選択画面でリスト表示された構成要素のうち、チェックＢＯＸにチェックが入っている構成要素を取得する。
【００９０】
次いで、Ｓ９０で取得した構成要素をツリーへ種別登録する（Ｓ９１）。すなわち、図３５では、全ての構成要素がチェックされているため、全ての構成要素をツリーへ登録する。これにより、図３６に示す「出力」，「部品（回路部品）」（ライブラリ），「コメント」，「ファンクションブロック」，「インターロック」，「エンド」を対応するアイコンと共にリストに登録する。
【００９１】
その後、Ｓ１０以降の処理を実行し、対象構成要素が検出されたら対応するアイコンを取得し、ツリーへ登録する際に、同一の構成要素の下に順次追加登録する。これにより、図３６に示すように、種別（構成要素）単位でまとめられた状態（ソートがかけられた状態）のツリー状のアウトライン情報が生成される。なお、この図３４の処理を実行することで、リスト表示におけるソート処理も可能である。
【００９２】
図３７以降は、本発明の第３の実施の形態を示している。図３７から明らかなように、本実施の形態では、アウトライン情報表示部１２ｂに表示する表示項目をユーザが追加できるようにしている。すなわち、上述した各実施例では、表示する構成要素を選択することができたもののその選択範囲は予め設定されたものに限られていた。これに対し、本実施の形態では、図３７（ａ）に示すようにアウトライン表示オプションのダイアログウインドウに、構成要素の「追加」ボタンと、「削除」ボタンを用意すると共に、図３７（ｂ）に示す追加可能な命令一覧ウインドウを用意する。
【００９３】
図３７（ａ）において、「追加」ボタンがクリックされると、図３７（ｂ）に示す命令一覧ウインドウが表示される。ユーザは、その命令一覧ウインドウを用いて追加したい構成要素のチェックＢＯＸをチェックすると共に、「ＯＫ」ボタンをクリックする。これにより、記憶装置１４に記憶されている表示対象の構成要素（当初は、基本表示構成要素である「コメント」，「ファンクションブロック」，「出力」，「ライブラリ」（回路部品のこと），「インターロック」，「エンド」）のみが登録されている）に、命令一覧でチェックされた構成要素が追加される。図３７（ｂ）の例では、「ＭＯＶ」と「ＴＩＭＸ」がチェックされて追加されたため、その後表示されるアウトライン表示オプションは、図３７（ｃ）に示すように、６つの基本表示構成要素に、「ＭＯＶ」と「ＴＩＭＸ」が追加されて８個の構成要素が表示される。なお、追加した構成要素を最初に表示する際にチェックＢＯＸにチェックを入れた状態としても良いし、初期状態は空欄としても良い。図３７（ｃ）に示すアウトライン表示オプションのダイアログウインドウは、その後のユーザの操作により、基本表示構成要素と、「ＭＯＶ」のチェックＢＯＸにチェックが入り、「ＴＩＭＸ」はアウトライン表示オプションに追加したもののチェックＢＯＸのチェックをはずすことで、今回の処理ではアウトライン情報として表示しないようにした状態を示している。
【００９４】
係る登録処理を行なうための機能は、図３８に示すフローチャートを実行することで行える。すなわち、追加対象の構成要素があるか否かを判断する（Ｓ１０１）。これは、アウトライン表示オプションの「追加」ボタンがクリックされて表示された命令一覧ウインドウにおいて、「ＯＫ」ボタンがクリックされた際に、チェックＢＯＸにチェックされた構成要素があるか否かにより判断できる。
【００９５】
追加対象の構成要素がある場合には、その追加対象の構成要素を抽出し（Ｓ１０２）、その抽出した構成要素を記録装置１４に格納されている対象構成要素に記録する（Ｓ１０３）。これにより、アウトライン表示オプションのダイアログウインドウを表示する場合には、この記録装置１４に格納された対象構成要素を読み出して表示するため、このＳ１０３の処理を実行して追加対象構成要素を追加した以降は、その追加した対象構成要素もリスト一覧に表示される（図３７（ｃ），参照）。
【００９６】
一方、本実施の形態では、一旦追加した構成要素を削除する機能も備えている。すなわち、図３７（ｃ）に示すように、追加した構成要素が存在する場合において、削除したいものがあると、削除対象の構成要素のチェックＢＯＸにチェックを入れた状態で「削除」ボタンをクリックすると、そのチェックが入れられた構成要素が削除される。但し、本実施の形態では、６つの基本表示構成要素については削除を禁止している。これにより、例えば図３７（ｃ）に示すアウトライン表示オプションにおいて、全てのチェックＢＯＸにチェックを入れた状態で「削除」ボタンをクリックすると、基本表示構成要素以外の「ＭＯＶ」と「ＴＩＭＸ」が削除され、図３７（ａ）に示す状態になる。
【００９７】
係る削除処理を行なうための機能は、図３９に示すフローチャートを実行することで行える。すなわち、削除の選択があるか否かを判断する（Ｓ１０４）。つまり、少なくとも１つの構成要素のチェックＢＯＸにチェックが入った状態で「削除」ボタンがクリックされた場合には、この分岐判断はＹｅｓなり、それ以外はＮｏとなり処理を終了する。
【００９８】
選択があった場合には、削除可能な構成要素であるか否かが判断される（Ｓ１０５）。つまり、６個の基本表示構成要素以外の構成要素が選択されている場合には、削除可能な構成要素となり、この分岐判断はＹｅｓとなる。そして、削除可能な場合には、チェックＢＯＸで選択された削除対象構成要素を抽出し、記録装置１４に格納された対象構成要素から選択された構成要素を消去する（Ｓ１０６，Ｓ１０７）。上記処理を繰り返し実行することで、基本表示構成要素以外の構成要素については、一旦登録後も削除可能である。もちろん、削除しなくても、通常のアウトライン情報生成処理において、チェックＢＯＸにチェックを入れないことでアウトライン情報に表示されることはないため、同等の効果は発揮できるが、不必要に多くの構成要素がアウトライン表示オプションに表示されることを解消する効果が期待できる。
【００９９】
上述したように、新たな構成要素を追加・削除したり、構成要素について必要なものをチェックすることで、ユーザがそのとき見たい構成要素のみが抽出されたアウトライン情報を生成し、表示することができる。一例を示すと、図３７（ｃ）に示す状態で「ＯＫ」ボタンがクリックされると、６個の基本表示構成要素に、「ＭＯＶ」が追加された７つの構成要素によるアウトライン情報が生成されるため、アウトライン情報表示部１２ｂには、図４０に示すようなツリー表示や、図４１に示すリスト表示の形態からなるアウトライン情報が表示される。
【図面の簡単な説明】
【０１００】
【図１】本発明の一実施の形態を示すハードウェアブロック図である。
【図２】プログラム表示部に表示されるラダープログラムの一例を示す図である。
【図３】本発明の一実施の形態を示す機能ブロック図である。
【図４】表示画面の一例を示す図である。
【図５】アウトライン情報表示部に表示される図２に示すラダープログラムに対するアウトライン情報を示す図である。
【図６】アウトライン情報生成部の機能を示すフローチャートである。
【図７】図２に示すプログラムのリストを示す図である。
【図８】アウトライン情報表示部に表示されたリストからプログラム表示部に表示されるユーザプログラム（ラダープログラム等）へのジャンプ機能の一例を示す図である。
【図９】作用効果を説明する表示画面の表示例である。
【図１０】作用効果を説明する表示画面の表示例である。
【図１１】プログラムエディタ（ラダーエディタ等）の機能を説明するフローチャートである。
【図１２】クロスリファレンス情報生成部の機能を示すフローチャートである。
【図１３】作用効果を説明する表示画面の表示例である。
【図１４】作用効果を説明する表示画面の表示例である。
【図１５】クロスリファレンス情報表示部に表示された命令からプログラム表示部に表示されるラダープログラムへのジャンプ機能の一例を示す図である。
【図１６】プログラム表示部に表示されるラダープログラムの一例を示す図である。
【図１７】図１６のユーザプログラムに使用されるファンクションブロックの内部構成を示す図である。
【図１８】図１６のユーザプログラムに使用されるファンクションブロックの内部構成を示す図である。
【図１９】アウトライン表示オプションのダイアログウインドウの一例を示す図である。
【図２０】アウトライン情報生成部の機能を示すフローチャートである。
【図２１】アウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報（ツリー表示）を示す図である。
【図２２】アウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報（リスト表示）を示す図である。
【図２３】アウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報（ツリー表示）を示す図である。
【図２４】アウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報（リスト表示）を示す図である。
【図２５】表示する構成要素を選択した場合のアウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報を示す図である。
【図２６】表示する構成要素を選択した場合のアウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報を示す図である。
【図２７】表示する構成要素を選択した場合のアウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報を示す図である。
【図２８】（ａ）は、プログラム表示部に表示されるＳＴ言語によるプログラムの一例を示す図であり、（ｂ）は、そのプログラムに対するアウトライン情報表示部に表示されるアウトライン情報を示す図である。
【図２９】本発明の第２の実施の形態を説明する図で、基本状態のアウトライン表示部に表示されるアウトライン情報（リスト表示）を示す図である。
【図３０】本発明の第２の実施の形態を説明する図で、ソート後のアウトライン表示部に表示されるアウトライン情報（リスト表示）を示す図である。
【図３１】本発明の第２の実施の形態を説明する図で、ソート後のアウトライン表示部に表示されるアウトライン情報（リスト表示）を示す図である。
【図３２】本発明の第２の実施の形態を説明する図で、ソート後のアウトライン表示部に表示されるアウトライン情報（リスト表示）を示す図である。
【図３３】本発明の第２の実施の形態を説明する図で、ソート後のアウトライン表示部に表示されるアウトライン情報（リスト表示）を示す図である。
【図３４】本発目委の第２の実施の形態の要部となるソート機能を説明するフローチャートである。
【図３５】ソートを実行するか否かを選択する選択画面の一例を示す図である。
【図３６】ソートされたアウトライン情報の一例を示す図である。
【図３７】本発明の第３の実施の形態を説明する入力画面の一例を示す図である。
【図３８】構成要素を追記する機能を実現するためのフローチャートを示す図である。
【図３９】ユーザが追加した構成要素を削除する機能を実現するためのフローチャートを示す図である。
【図４０】アウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報（ツリー表示）を示す図である。
【図４１】アウトライン情報表示部に表示される図１６に示すラダープログラムに対するアウトライン情報（リスト表示）を示す図である。
【符号の説明】
【０１０１】
１０  開発支援装置
１１  入力装置
１２  表示装置
１２ａ  ユーザプログラム表示部
１２ｂ  アウトライン情報表示部
１２ｃ  クロスリファレンス情報表示部
１３  中央演算装置
１４  記憶装置
１５  通信Ｉ／Ｆ
２０  ＰＬＣ
２１  通信回線
３１  入力処理部
３２  表示処理部
３３  演算部
３３ａ  ユーザプログラム編集部
３３ｂ  アウトライン情報生成部
３３ｃ  クロスリファレンス情報生成部
３４  記憶部
３４ａ  ラダープログラム記憶部
３４ｂ  アウトライン情報記憶部
３４ｃ  クロスリファレンス情報記憶部
３５  通信処理部
【図１】
2007086831.tif 000003
【図２】
2007086831.tif 000004
【図３】
2007086831.tif 000005
【図４】
2007086831.tif 000006
【図５】
2007086831.tif 000007
【図６】
2007086831.tif 000008
【図７】
2007086831.tif 000009
【図８】
2007086831.tif 000010
【図９】
2007086831.tif 000011
【図１０】
2007086831.tif 000012
【図１１】
2007086831.tif 000013
【図１２】
2007086831.tif 000014
【図１３】
2007086831.tif 000015
【図１４】
2007086831.tif 000016
【図１５】
2007086831.tif 000017
【図１６】
2007086831.tif 000018
【図１７】
2007086831.tif 000019
【図１８】
2007086831.tif 000020
【図１９】
2007086831.tif 000021
【図２０】
2007086831.tif 000022
【図２１】
2007086831.tif 000023
【図２２】
2007086831.tif 000024
【図２３】
2007086831.tif 000025
【図２４】
2007086831.tif 000026
【図２５】
2007086831.tif 000027
【図２６】
2007086831.tif 000028
【図２７】
2007086831.tif 000029
【図２８】
2007086831.tif 000030
【図２９】
2007086831.tif 000031
【図３０】
2007086831.tif 000032
【図３１】
2007086831.tif 000033
【図３２】
2007086831.tif 000034
【図３３】
2007086831.tif 000035
【図３４】
2007086831.tif 000036
【図３５】
2007086831.tif 000037
【図３６】
2007086831.tif 000038
【図３７】
2007086831.tif 000039
【図３８】
2007086831.tif 000040
【図３９】
2007086831.tif 000041
【図４０】
2007086831.tif 000042
【図４１】
2007086831.tif 000043