〔実施形態1〕
以下、本発明の一側面に係る実施の形態(以下、「本実施形態」とも表記する)を、図1から図12に基づいて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。本実施の形態においては、例えば開発支援装置10を開発支援装置の典型例として説明を行う。本発明の一態様に係る開発支援装置10についての理解を容易にするため、先ず、開発支援装置10を含む制御システム1の概要を、図2を用いて説明する。
§1.適用例
(制御システムの全体概要)
図2は、開発支援装置10を含む制御システム1の全体概要を示す図である。制御システム1は、マスタ装置としてのPLC(Programmable Logic Controller)20と、マスタ装置にネットワーク(フィールドネットワーク60)を介して接続される1つ以上のスレーブ装置40と、を含むマスタスレーブ制御システムである。PLC20は、フィールドネットワーク60を介したデータ伝送を管理しているという意味で「マスタ装置」と呼ばれる。
フィールドネットワーク60に複数のPLC20が接続される場合には、いずれか1つのPLC20がマスタ装置となり、残りのPLC20がスレーブ装置になる場合もある。また、PLC20およびスレーブ装置40のいずれとも異なる制御主体がマスタ装置になってもよい。すなわち、「マスタ装置」および「スレーブ装置」は、フィールドネットワーク60上のデータ伝送の制御機能に着目して定義されるものであり、各装置間でどのような情報が送受信されるかについては、特に限定されない。
PLC20は、制御システム1の全体の制御を行う。具体的には、PLC20は、スレーブ装置40を介して、センサなどの入力機器であるデバイス50からの情報を入力データとして取得する。PLC20は、予め組み込まれたユーザプログラムに従って、取得した入力データを用いた演算処理を実行する。PLC20は、前記演算処理を実行して、アクチュエータなどの出力機器であるデバイス50への制御内容を決定し、その制御内容に対応する制御データを、スレーブ装置40を介して、デバイス50へと出力する。
フィールドネットワーク60は、PLC20が受信し、またはPLC20が送信する各種データを伝送し、例えば、EtherCAT(登録商標)、PROFINET(登録商標)、MECHATROLINK(登録商標)-III、Powerlink、SERCOS(登録商標)-III、CIP Motionである。また、フィールドネットワーク60は、例えば、EtherNet/IP(登録商標)、DeviceNet、CompoNet(登録商標)などであってもよい。なお、以下では、フィールドネットワーク60上をデータフレームが順次転送されることで、PLC20とスレーブ装置40との間、または、複数のスレーブ装置40の間でデータが送受信される制御システム1について説明を行う。
スレーブ装置40は、PLC20をマスタ装置とするネットワーク(フィールドネットワーク60)におけるスレーブ装置であり、例えば、デバイス50との通信を管理する通信カプラ等のデバイス通信管理ユニットである。スレーブ装置40は、フィールドネットワーク60に直接接続される、サーボドライバであってもよい。デバイス50は、例えばセンサなどの入力機器であり、また、例えばアクチュエータなどの出力機器である。1つ以上のデバイス50が、通信ケーブルを介して、スレーブ装置40に接続される。
開発支援装置10は、例えばUSB(Universal Serial Bus)ケーブルである通信ケーブルを介して、PLC20に接続する。開発支援装置10は、PLC20で実行されるユーザプログラム、および、制御システム1に対する各種の設定情報などを生成するための情報処理装置である。
開発支援装置10は、例えば、PLC20の開発環境を提供し、ユーザが、制御目的(たとえば、対象のラインおよびプロセス)に応じてユーザプログラム等のプログラムを作成する(作成・編集する)ための環境を提供する。ユーザは、開発支援装置10の提供する開発環境(プログラミングツール)を用いて、PLC20で実行させる制御プログラム(ユーザプログラム)のプログラムコードを作成する。開発支援装置10は、PLC20で実行させる制御プログラムをユーザが作成・編集するのを支援するため、デバック機能およびシミュレーション機能を有していてもよい。
また、開発支援装置10は、例えば、PLC20による状態値の取得(入力リフレッシュ)のタイミング、および、PLC20による出力値の更新(出力リフレッシュ)のタイミングの算出および設定を実行してもよい。開発支援装置10は、PLC20の運転状態、および各種データの値などを監視してもよい。
つまり、開発支援装置10は、PLC20のプログラミング、コンフィグレーション(構成設定)、デバッグ、メンテナンス、モニタリング機能の他、3Dモーションシミュレーションにも対応した統合開発環境を提供する装置であってもよい。また、開発支援装置10は、スレーブ装置40のための各種のパラメータの設定および調整を行ってもよい。
開発支援装置10は、典型的には、汎用のコンピュータで構成される。例えば、開発支援装置10で実行される情報処理プログラムは、不図示のCD-ROM(Compact Disk-Read Only Memory)に格納されて流通してもよい。このCD-RO Mに格納されたプログラムは、図示しないCD-ROM駆動装置によって読取られ、開発支援装置10のハードディスクなどへ格納される。あるいは、開発支援装置10は、上位のホストコンピュータなどから、ネットワークを通じて、前記DVD-ROMに格納されたプログラムと同様のプログラムをダウンロードするように構成してもよい。
図2に示すように、HMI(Human Machine Interface)30が、通信ケーブルを介して、PLC20に接続されてもよい。HMI30は、人間と機械とが情報をやり取りするための手段であり、具体的には、人間が機械を操作したり(機械に指示を与えたり)、機械が現在の状態・結果を人間に知らせたりする手段である。HMI30について、人間が機械に指示を与える手段としてはスイッチ、ボタン、ハンドル、ダイヤル、ペダル、リモコン、マイク、キーボード、マウスなどが含まれ、機械が現在の状態・結果等に係る情報を人間に伝える手段としては液晶画面、メーター、ランプ、スピーカーなどが含まれる。
HMI30は、表示部と、操作部と、PLC20と通信する通信部と、各部を制御する制御部と、を備える。HMI30は、操作部へのユーザ操作に応じて、制御システム1(例えば、PLC20)の各種の設定を変更することができる。また、HMI30の表示部は、制御システム1についての所定の情報を表示する。
開発支援装置10の提供する開発環境を利用してユーザが作成・編集するプログラムは、ユーザプログラム、モーション演算プログラム、およびシーケンス命令演算プログラム等を含む。「ユーザプログラム」は、ユーザの制御対象(例えば、対象のラインおよびプロセス)に応じて作成される。開発支援装置10は、ラダーロジック(ラダー言語)などによって記述されたラダープログラム(ソースプログラム)をコンパイルすることにより、ユーザプログラムを生成する。ラダーロジックは、論理回路を記述するための手法で、多くのPLCで採用されているプログラム言語である。ユーザプログラムは、例えば、PLC20に含まれるマイクロプロセッサで実行可能なオブジェクトプログラム形式で生成される。「モーション演算プログラム」は、ユーザプログラムによる指示に従って実行され、サーボモータドライバおよびパルスモータドライバなどのモータドライバに対して出力する指令値を実行されるごとに算出するプログラムである。「シーケンス命令演算プログラム」は、ユーザプログラムで使用される所定のシーケンス命令が実行されるときに呼び出され、該命令の内容を実現するために実行されるプログラムである。
開発支援装置10は、或る変数(第1変数)の各要素(要素変数、第2変数)に対してユーザが設定したコメントを、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式のファイル(後述する出力リストL1)として出力する。変数の各要素とは、例えば配列型変数の各配列要素(各配列メンバ)であり、また、例えば構造体型変数の各構造体メンバである。
例えば、開発支援装置10は、ユーザによって指定された変数について、その変数の各要素に対するコメントを、Microsoft(登録商標)Excel(登録商標)ファイル等の、表計算ソフトで編集可能なデータ形式のファイルとして出力する。
したがって、ユーザは、Excel(登録商標)等の表計算ソフトを用いて、出力リストL1の内容を容易に確認し、また、出力リストL1の内容を容易に編集(更新)することができる。ユーザは、Excel(登録商標)等の表計算ソフトが有する、高い一覧性および操作性を享受して、変数の各要素に対して付されたコメントを閲覧し、編集することができる。
また、ユーザは、開発支援装置10が出力した出力リストL1をコピー&ペーストして、1つ以上のリストL1(1)、L1(2)、L1(3)、・・・L1(n)を生成することができる(「n」は「1以上の自然数」とする)。ユーザは、複数のリストL1(1)、L1(2)、L1(3)、・・・L1(n)の各々において、変数の各要素に対するコメントを、複数の言語の各々で記載しておくことによって、変数の各要素に対するコメントを、複数の言語の各々で作成し、管理することができる。
例えば、開発支援装置10は、ユーザに指定された配列型変数v1について、配列型変数v1の各配列要素についてのコメントを、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式の出力リストL1(v1)に出力する。ユーザは、出力リストL1(v1)をコピー&ペーストして、リストL1(v1)(1)、L1(v1)(2)、L1(v1)(3)、・・・L1(v1)(n)を生成する。例えば、ユーザは、リストL1(v1)(1)において、配列型変数v1の各配列要素についてのコメントを、英語で記載する。例えば、ユーザは、リストL1(v1)(2)において、配列型変数v1の各配列要素についてのコメントを、日本語で記載する。例えば、ユーザは、リストL1(v1)(3)において、配列型変数v1の各配列要素についてのコメントを、中国語で記載する。例えば、ユーザは、リストL1(v1)(n)において、配列型変数v1の各配列要素についてのコメントを、スペイン語で記載する。
したがって、開発支援装置10は、「ユーザが、複数の言語の各々で、或る変数(第1変数)の各要素(要素変数、第2変数)に対するコメントを準備する」ことを容易にする。また、ユーザは、各々が複数の言語の各々で記載された複数のコメント(例えば、上述のリストL1(v1)(1)、L1(v1)(2)、L1(v1)(3)、・・・L1(v1)(n))を、容易に管理することができる。
また、開発支援装置10は、ユーザがExcel(登録商標)等の表計算ソフトを用いて編集したファイル(後述する入力リストL2)をインポートすることができる。例えば、開発支援装置10は、ユーザが更新した出力リストL1を入力リストL2としてインポートする。開発支援装置10は、入力リストL2において変数(例、配列型変数または構造体型変数)の各要素(例、各配列要素または各構造体メンバ)に対して付されたコメントによって、自装置の記憶部に保存している、各要素に対するコメントを更新する。そして、開発支援装置10は、例えばプログラムで配列型変数を使用している箇所で、配列型変数の各配列要素の意味をユーザが把握できるように、各配列要素に対して付されたコメント(更新済の出力リストL1にしたがって更新されたコメント)を表示する。
したがって、ユーザは、開発支援装置10にインポートする入力リストL2を切り替えることによって、容易に、開発支援装置10が表示するコメントについて、例えば、そのコメントを表記する言語を切り替えることができる。ユーザは、開発支援装置10に、コメントが英語で記載されたリストL1(1)に代えて、コメントが日本語で記載されたリストL1(2)をインポートさせることによって、英語表記のコメントから日本語表記のコメントに切り替えることができる。
複数の言語の各々でコメントを記載した、複数のリストL1(1)~L1(n)を予め準備しておけば、ユーザは、開発支援装置10にインポートさせるリストを切り替えるだけで、開発支援装置10の表示するコメントの表記言語を、切り替えることができる。
開発支援装置10が出力する出力リストL1がExcel(登録商標)によって編集可能なファイルであることは必須ではなく、開発支援装置10は、外部の装置、ソフトウェアによって編集、利用されるのに好適なデータ形式で、出力リストL1を出力する。
(用語の説明)
以下の説明において、「或る変数を先祖ノードとする木構造(ツリー)における子孫ノードとして表すことのできる変数」、例えば、配列要素であったり、構造体メンバであったりする変数を、「要素変数(第2変数)」と称することがある。
同様に、「或る変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数」についてのコメントは、「要素コメント」と称することがある。すなわち、「要素変数」についてのコメントを「要素コメント」と称し、「要素変数以外の変数」についてのコメントである「コメント」と区別することがある。「要素コメント」は、例えば、開発支援装置10が提供するプログラム開発環境で使用する変数宣言において、或る変数の型が配列型および構造体型の少なくとも一方である場合に、配列要素または構造体メンバに対して設定できるコメントである。すなわち、「要素コメント」は、或る変数(第1変数)を先祖ノードとするツリーの子孫ノードとして表すことのできる変数(要素変数、第2変数)に対するコメントである。
「変数テーブル画面」は、プログラムで使用する変数をテーブル形式で記述する編集画面であり、変数についての、変数名、変数のデータ型、およびコメントなどを確認、編集(更新)することができる。
§2.構成例
これまで、図2を用いて、制御システム1の概要を説明してきた。次に、開発支援装置10について、その詳細を説明する。図1等を用いて以下に詳細を説明する開発支援装置10について、最初に概要を整理しておけば、以下の通りである。
すなわち、開発支援装置10は、PLC20(制御装置)で実行されるプログラムをユーザが作成するのを支援する開発支援装置である。開発支援装置10は、前記プログラムで用いられる変数に対して、当該変数の定義に併せてユーザが任意で付すことのできるコメントを、外部出力するよう指示するユーザ操作を受け付ける操作受付部110(特に、出力指示受付部111)と、操作受付部110によって前記ユーザ操作が受け付けられると、前記変数のうち、第1変数を先祖ノードとする木構造(ツリー)における子孫ノードとして表すことのできる複数の要素変数(第2変数)の各々に対する要素コメント(コメント)を、前記第1変数の名称と、前記第1変数に対して前記複数の第2変数の各々を識別するための識別情報と、に対応付けて、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式のファイル(出力リストL1)として出力する出力部120と、を備えている。
前記の構成によれば、開発支援装置10は、前記複数の第2変数の各々に対する要素コメントを、前記第1変数の名称と前記識別情報とに対応付けて、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式のファイルとして出力する。
したがって、開発支援装置10は、ユーザにとって確認しやすく、かつ、編集しやすい形式で、前記複数の第2変数の各々に対する要素コメントのリストを出力することができるとの効果を奏する。つまり、開発支援装置10は、ユーザが、前記複数の第2変数の各々に対する要素コメントを容易に確認し、かつ、容易に編集することを可能とするとの効果を奏する。
また、開発支援装置10は、表計算ソフト等を用いてユーザが編集可能な形式のファイルとして要素コメントを出力するので、ユーザは、前記ファイルを用いて、例えば、複数の言語の各々で要素コメントを作成し、管理することができるという効果を奏する。例えば、ユーザは、開発支援装置10が出力した出力リストL1をコピー&ペーストして複数のリストL1(1)~L1(n)を生成し、複数のリストL1(1)~L1(n)の各々において、複数の言語の各々で要素コメントを作成し、管理することができる。すなわち、開発支援装置10は、前記複数の第2変数の各々に対する、複数の言語の各々で記載した要素コメントを、ユーザが容易に生成し、容易に管理することができるようにするという効果を奏する。
開発支援装置10において、前記第1変数は、配列型変数または構造体型変数であり、前記複数の第2変数の各々は、配列型変数の配列要素または構造体型変数のメンバであってもよい。
前記の構成によれば、開発支援装置10は、配列型変数の配列要素または構造体型変数のメンバである前記複数の第2変数の各々に対する要素コメントを、配列型変数または構造体型変数である前記第1変数の名称と、前記識別情報と、に対応付けて出力する。
したがって、開発支援装置10は、ユーザにとって確認しやすく、かつ、編集しやすい形式で、配列型変数の配列要素または構造体型変数のメンバである前記複数の第2変数の各々に対する要素コメントのリストを出力することができるとの効果を奏する。
開発支援装置10において、出力部120は、前記複数の第2変数の各々に対する要素コメントを、前記第1変数の名称と前記識別情報とを含む1つの文字列に対応付けて、出力してもよい。
前記の構成によれば、開発支援装置10は、前記複数の第2変数の各々に対する要素コメントを、前記第1変数の名称と前記識別情報とを含む1つの文字列に対応付けて、表計算ソフト等で編集可能なファイルとして出力する。例えば、開発支援装置10は、(A)前記第1変数の名称と前記識別情報とを含む1つの文字列と、(B)前記要素コメントと、を隣り合わせに表示したリストを、表計算ソフト等で編集可能なデータ形式で出力する。
具体的には、開発支援装置10は、例えば表計算ソフトにおいて編集可能なデータ形式のファイルとして、前記複数の第2変数の各々に対する要素コメントを、前記第1変数の名称と前記識別情報とを含む1つの文字列に対応付けて、出力する。この場合、前記第1変数の名称と前記識別情報とを含む1つの文字列は1つのセルに格納され、また、前記複数の第2変数の各々に対する要素コメントも1つのセルに格納されることになる。そのため、ユーザは、前記複数の第2変数の各々に対する要素コメントと、当該要素コメントが付された前記第2変数と、前記第2変数の先祖ノードである前記第1変数との関係を、一目で確認することができる。例えば、ユーザは、前記第1変数の名称と前記識別情報とを含む1つの文字列と、前記要素コメントを示す1つの文字列と、が隣り合う列で対応付けられたリストを、一目で確認することができるようになる。
したがって、開発支援装置10は、ユーザにとって視認性が極めて高く、かつ、編集しやすい形式で、前記複数の第2変数の各々に対する要素コメントのリストを出力することができるとの効果を奏する。
開発支援装置10において、前記識別情報は、前記木構造における前記第1変数から前記複数の第2変数の各々までのパスを示すパス情報を含む。前記パス情報は、前記木構造における前記第1変数から前記複数の第2変数の各々までの、1つ以上の親子関係の各々を、以下の規則にしたがって示す。すなわち、前記パス情報は、(1)親子関係が、親ノードに相当する変数が配列型変数であって、子ノードに相当する変数が前記配列型変数の配列要素である場合、その親子関係を、カッコ([])を用いて示す。また、前記パス情報は、(2)親子関係が、親ノードに相当する変数が構造体型変数であって、子ノードに相当する変数が前記構造体型変数のメンバである場合、その親子関係を、ピリオド(.)を用いて示す。或る要素変数のパス情報は、「その或る要素変数を子孫ノードとするツリーにおいて、その或る要素変数に相当する子孫ノードを特定する情報」であり、「そのツリーにおける、その或る要素変数に相当する子孫ノードの階層を示す情報」を含んでいる。
前記の構成によれば、開発支援装置10は、前記複数の第2変数の各々に対する要素コメントを、前記パス情報を含む前記識別情報と前記第1変数の名称とに対応付けて出力する。そして、前記パス情報において、前記第1変数から前記複数の第2変数の各々までの、1つ以上の親子関係の各々は、親と子が配列型変数と配列型変数の配列要素とであるのか、または、親と子が構造体型変数と構造体型変数のメンバとであるのか、が区別される。
したがって、開発支援装置10は、前記第1変数と前記複数の第2変数との関係をユーザが確認することができるようにして、前記ファイルを出力することができるとの効果を奏する。例えば、開発支援装置10は、第2変数が配列型変数である前記第1変数の配列要素であるのか、第2変数が構造体型変数である前記第1変数の構造体メンバであるのか、または、第2変数が、複数の構造体型変数の各々を配列要素とする配列型変数(構造体型配列)である前記第1変数の、所定の前記構造体型変数の構造体メンバであるのか・・・等を、ユーザが区別できるようにして、前記ファイルを出力することができるとの効果を奏する。
これまでに概要を説明した開発支援装置10について、次に、その構成の詳細について図1を参照しながら説明し、その後、開発支援装置10が実行する処理の概要について、図3を参照しながら説明していく。
(開発支援装置の詳細)
(従来までの開発支援装置との主要な相違点)
図12を用いて説明したように、従来までの開発支援装置は、「変数テーブル画面」において、要素コメントを、一覧形式でユーザに示すことができない。例えば、従来までの開発支援装置は、「変数テーブル画面」において、配列型変数の配列要素および構造体型変数の構造体メンバなどの「或る変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数(要素変数)」に対するコメント(要素コメント)を、一覧形式で表示できない。そのため、従来までの開発支援装置は、複数の要素変数の各々に対する要素コメントを確認したり、編集したりしようとするユーザにとって、利便性、操作性が低い。
具体的には、「或る変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数」のコメントについて、確認等を行おうとするユーザは、先祖ノード(例、親ノード)に相当する変数を選択した上で、要素コメントのダイアログを開く必要があった。
これに対して、開発支援装置10は、複数の要素変数の各々についての要素コメントを、一覧形式のリストとして、特に、表計算ソフト等で編集可能なデータ形式の、一覧形式のリスト(出力リストL1)として、出力する。
ユーザは、例えば配列型変数の各配列要素について、開発支援装置10が出力した出力リストL1を利用して、各配列要素に付与している意味等を示す要素コメントを、容易に確認することができる。また、ユーザは、例えば、開発支援装置10が出力した出力リストL1をコピー&ペーストして生成した複数のリストL1(1)~L1(n)の各々において、要素コメントを複数の言語の各々で記載しておくことができる。複数の言語の各々で要素コメントを記載した複数のリストL1(1)~L1(n)を予め準備しておくことで、ユーザは、開発支援装置10にインポートするリストを切り替えるだけで、開発支援装置10が表示する要素コメントの表記言語を、容易に切り替えることができる。
(開発支援装置の詳細構成)
図1は、開発支援装置10の要部構成を示すブロック図である。図1に示すように、開発支援装置10は、機能ブロックとして、操作受付部110と、出力部120と、記憶部130と、入力部140と、コメント更新部150とを備えている。
開発支援装置10は、上述の各機能ブロックに加え、ユーザが制御目的に応じてPLC20に実行させる制御プログラムとしてのユーザプログラムをプログラミングするための環境を提供する、不図示のプログラミング支援部などを備えていてもよい。しかしながら、記載の簡潔性を担保するため、本実施の形態に直接関係のない構成は、説明およびブロック図から省略している。ただし、実施の実情に則して、開発支援装置10は、当該省略された構成を備えてもよい。
操作受付部110、出力部120、入力部140、および、コメント更新部150は、例えば、CPU(central processing unit)等が、ROM(read only memory)、NVRAM(non-Volatile random access memory)等で実現された記憶装置(記憶部130)に記憶されているプログラムを不図示のRAM(random access memory)等に読み出して実行することで実現できる。以下、操作受付部110、出力部120、入力部140、および、コメント更新部150の各々について説明する。
操作受付部110は、出力リストL1の出力処理(エキスポート処理)の実行を指示するユーザ操作、または、入力リストL2の入力処理(インポート処理)の実行を指示するユーザ操作を受け付ける。操作受付部110は、出力指示受付部111と、入力指示受付部112と、を含む。
出力指示受付部111は、エキスポート処理の実行を指示するユーザ操作を受け付け、受け付けたユーザ操作を出力部120に通知する。入力指示受付部112は、インポート処理の実行を指示するユーザ操作を受け付け、受け付けたユーザ操作を入力部140に通知する。
出力部120は、出力指示受付部111が受け付けたユーザ操作に従って、「第1変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数(要素変数)」に対するコメント(要素コメント)を一覧形式で示すリスト(出力リストL1)を出力する。
例えば、出力部120は、ユーザ操作において指定された第1変数について、第2変数定義テーブル131Bを参照して、「その第1変数を先祖ノードとするツリーにおける、子孫ノードとして表すことのできる」複数の要素変数(第2変数)を特定する。また、出力部120は、第2変数定義テーブル131Bを参照して、特定した複数の要素変数の各々に対する要素コメントを取得する。出力部120は、「特定した複数の要素変数の各々を、第1変数に対して識別する」識別情報に対応付けて、特定した複数の要素変数の各々に対する要素コメントを、表計算ソフト等で編集可能なデータ形式の出力リストL1に出力する。特に、出力部120は、複数の要素変数の各々に対する要素コメントを、「第1変数の名称」および「複数の要素変数の各々の識別情報」に対応付けて、出力リストL1に出力する。出力部120は、第1取得部121と、第2取得部122と、第3取得部123と、文字列生成部124と、を含む。
第1取得部121は、「出力指示受付部111が受け付けたユーザ操作」においてユーザによって選択された第1変数の名称を特定する。第1取得部121は、ユーザによって選択された第1変数の名称を、第1変数定義テーブル131Aまたは第2変数定義テーブル131Bを参照して、特定してもよい。
第2取得部122は、第2変数定義テーブル131Bを参照して、ユーザによって選択された第1変数を先祖ノードとするツリーを辿り、第1変数を先祖ノードとするツリーの子孫ノードに相当する複数の要素変数の各々を特定する。
第2取得部122は、第2変数定義テーブル131Bを参照して、特定した複数の要素変数の各々を第1変数に対して識別するための識別情報を生成し、特に、特定した複数の要素変数の各々のパス情報を含む識別情報を生成する。第2取得部122は、複数の要素変数の各々の識別情報として、「第1変数を先祖ノードとするツリーにおいて、複数の子孫ノード(つまり、複数の要素変数の各々に相当する、複数の子孫ノード)の各々を識別する識別情報」を、生成する。
パス情報は、「第1変数を先祖ノードとするツリーにおいて、第1変数から複数の要素変数の各々までのパス(1つ以上の親子関係)を示す情報」である。言い換えれば、パス情報は、「第1変数を先祖ノードとするツリー」において、「先祖ノードである第1変数」から「子孫ノードである複数の要素変数の各々」までの間に存在する、1つ以上の親子関係を示す情報である。パス情報は、「第1変数を先祖ノードとするツリーにおける、各要素変数に対応する子孫ノードのインスタンスを示す情報」に対応する。
第2取得部122は、識別情報(特に、パス情報)において、親子関係(親ノードに相当する変数と、子ノードに相当する変数との関係)を、例えば以下の規則にしたがって示す。すなわち、親ノードに相当する変数が配列型変数であって、子ノードに相当する変数が前記配列型変数の配列要素である場合、第2取得部122は、親子関係を、カッコ([])を用いて示す。また、親ノードに相当する変数が構造体型変数であって、子ノードに相当する変数が前記構造体型変数のメンバである場合、第2取得部122は、親子関係を、ピリオド(.)を用いて示す。
第3取得部123は、第2変数定義テーブル131Bを参照して、第2取得部122が特定した複数の要素変数の各々に対する要素コメントを取得する。
文字列生成部124は、第2取得部122が特定した複数の要素変数の各々について、以下の文字列を生成する。すなわち、文字列生成部124は、第1取得部121が特定した第1変数の名称と、第2取得部122が生成した「複数の要素変数の各々の識別情報(複数の要素変数の各々のパス情報を含む)」と、を含む1つの文字列を生成する。複数の要素変数の各々について文字列生成部124が生成する1つの文字列は、「コメント名称」とも称される。
出力部120は、第3取得部123が取得した「複数の要素変数の各々に対する要素コメント」を、複数の要素変数の各々のコメント名称に対応付けて、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能な出力リストL1に出力する。
入力部140は、操作受付部110が受け付けたユーザ操作(インポート処理の実行指示)に従って、入力リストL2を取り込む。入力リストL2は、「或る第1変数を先祖ノードとするツリーの子孫ノードとして表すことのできる要素変数」についての要素コメントが一覧形式で示されたリストであり、例えば、ユーザによって内容を更新された出力リストL1である。
コメント更新部150は、入力部140が取り込んだ入力リストL2の内容にしたがって、記憶部130の第2変数定義テーブル131Bにおける要素コメントを更新する。コメント更新部150は、文字列解析部151と、第1特定部152と、第2特定部153と、第3特定部154と、を含む。
文字列解析部151は、入力部140が取り込んだ入力リストL2のコメント名称から、第1変数の名称を抽出し、抽出した第1変数の名称を第1特定部152に通知する。第1特定部152は、入力リストL2のコメント名称から抽出された「第1変数の名称」から、第1変数を特定する。第1特定部152は、特定した第1変数を第2特定部153に通知する。
第2特定部153は、マップ情報132を参照して、入力リストL2の「コメント名称」に対応する「ノードインスタンス」を取得する。そして、第2特定部153は、第1特定部152が特定した第1変数と、マップ情報132を参照して取得した「ノードインスタンス」と、から、入力リストL2に要素コメントが格納された要素変数を特定する。
ここで、入力リストL2における各「コメント名称」の記載規則は、出力リストL1における「コメント名称」の記載規則と同様である。したがって、第2特定部153は、マップ情報132を参照せずに、入力リストL2の「コメント名称」から直接、第1変数を先祖ノードとするツリーにおいて、入力リストL2に要素コメントが格納された要素変数を識別するための識別情報を取得してもよい。言い換えれば、第2特定部153は、入力リストL2の「コメント名称」から、「入力リストL2に要素コメントが格納された要素変数のパス情報」を含む、「入力リストL2に要素コメントが格納された要素変数の識別情報」を抽出してもよい。
第3特定部154は、入力部140が取り込んだ入力リストL2から、「入力リストL2において、コメント名称に対応付けられている要素コメント」を取得する。つまり、第3特定部154は、入力リストL2から、「入力リストL2のコメント名称によって一意に特定される要素変数」に対する「入力リストL2における要素コメント」を取得する。
コメント更新部150は、第2特定部153によって特定された要素変数の、第2変数定義テーブル131Bにおける要素コメントを、第3特定部154が入力リストL2から取得した要素コメントによって、更新する。
記憶部130は、開発支援装置10が使用する各種データを格納する記憶装置である。なお、記憶部130は、開発支援装置10が実行する(1)制御プログラム、(2)OSプログラム、(3)開発支援装置10が有する各種機能を実行するためのアプリケーションプログラム、および、(4)該アプリケーションプログラムを実行するときに読み出す各種データを非一時的に記憶してもよい。上記の(1)~(4)のデータは、例えば、ROM(read only memory)、フラッシュメモリ、EPROM(Erasable Programmable ROM)、EEPROM(登録商標)(Electrically EPROM)、HDD(Hard Disc Drive)等の不揮発性記憶装置に記憶される。開発支援装置10は、図示しない一時記憶部を備えていてもよい。一時記憶部は、開発支援装置10が実行する各種処理の過程で、演算に使用するデータおよび演算結果等を一時的に記憶するいわゆるワーキングメモリであり、RAM(Random Access Memory)等の揮発性記憶装置で構成される。どのデータをどの記憶装置に記憶するのかについては、PLC20の使用目的、利便性、コスト、または、物理的な制約等から適宜決定される。記憶部130はさらに、変数定義テーブル131およびマップ情報132を格納している。
変数定義テーブル131は、要素変数の以外の変数について、コメント等を格納した第1変数定義テーブル131Aと、要素変数について、要素コメント等を格納した第2変数定義テーブル131Bと、を含む。
第1変数定義テーブル131Aは、要素変数以外の変数(例えば、第1変数)の「変数名、データ型、およびコメント」等のセットを格納している。第1変数定義テーブル131Aは、複数の「要素変数以外の変数」の各々の「変数名、データ型、およびコメント」等のセットを、複数の「要素変数以外の変数」の各々の属性として、一覧形式で格納している。第1変数定義テーブル131Aの詳細については、図5を用いて後述する。
第2変数定義テーブル131Bは、複数の要素変数の各々について、複数の要素変数の各々を子孫ノードとするツリーの先祖ノードに相当する変数(第1変数)の名称、前記ツリーの階層構造、要素コメント等を格納している。第2変数定義テーブル131Bには、第1変数と複数の要素変数の各々との関係、第1変数に対して複数の要素変数の各々を識別するための識別情報、前記ツリーにおいて複数の要素変数の各々に相当する子孫ノードのインスタンス等が格納されていてもよい。第2変数定義テーブル131Bの詳細については、図6の(A)、図7の(A)、および、図8を用いて後述する。
マップ情報132は、入力リストL2における各「コメント名称」の内容と、「複数の要素変数の各々のインスタンス(ノードインスタンス)を示す情報」と、を対応付けた情報であり、その詳細については、図11を用いて後述する。前述の通り、入力リストL2には、各要素変数のコメント名称に対応付けられて、各要素変数の要素コメントが示されている。
入力リストL2における各「コメント名称」、つまり、各要素変数の「入力リストL2におけるコメント名称」は、各要素変数の第1変数の名称、および、各要素変数の識別情報(パス情報を含む)を示している。
「要素変数のインスタンスを示す情報」は、「第1変数を先祖ノードとするツリーにおける、複数の要素変数の各々に相当する複数の子孫ノードの各々のインスタンス」を示す情報である。第2特定部153は、或る要素変数のインスタンスを示す情報を用いて、第1変数に対する、その或る要素変数の関係を把握することができ、したがって、その或る要素変数を、第2変数定義テーブル131Bにおいて特定することができる。
§3.動作例
図3は、開発支援装置10が実行する処理の全体概要を示す図である。すなわち、開発支援装置10は、エキスポート処理を実行して、第2変数定義テーブル131Bを参照して取得した各要素変数の要素コメントを、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式の出力リストL1に出力する。また、開発支援装置10は、インポート処理を実行して、取り込んだ入力リストL2にしたがって、第2変数定義テーブル131Bにおける各要素変数の要素コメントを更新する。
(エキスポート処理の内容)
図4は、開発支援装置が10実行する出力処理(エキスポート処理)の全体概要を示す図である。出力指示受付部111は、選択した第1変数の各要素(要素変数。以下、「対象変数」とも称する)についての要素コメントを、外部へと出力することを指示するユーザ操作を取得する(出力指示取得処理、S110)。すなわち、出力指示受付部111は、エキスポート処理の実行を指示するユーザ操作を受け付ける。
第1取得部121は、対象変数の先祖ノードに相当する変数(つまり、ユーザが選択した第1変数)の名称を取得する(親ノード名取得処理、S120)。第2取得部122は、第2変数定義テーブル131Bを参照して、第1変数を先祖ノードとする他の子孫ノードに相当する変数から、対象変数を識別するための識別情報を取得(生成)する(識別情報取得処理、S130)。
例えば、「startCondition」という名称の配列型変数の配列要素[0]は、「startCondition」という名称の配列型変数の他の配列要素(例、[1]および[2])から、「0」によって識別される。したがって、第2取得部122は、第2変数定義テーブル131Bを参照して、配列型変数:startConditionの配列要素[0]を、配列型変数:startConditionの他の配列要素から識別する「0」を、識別情報として取得する。
第3取得部123は、第2変数定義テーブル131Bを参照して、対象変数に対する要素コメントを取得する(コメント取得処理、S140)。そして、文字列生成部124は、第1取得部121が取得した第1変数の名称と、第2取得部122が取得した識別情報とを組み合わせた、1つの文字列を生成する(パス文字列生成処理、S150)。
出力部120は、第3取得部123が取得した対象変数に対するコメントを、文字列生成部124がパス文字列生成処理において生成した文字列へと対応付けたリスト(出力リストL1)を、外部へ出力する(エキスポート処理、S160)。出力部120は、出力リストL1を、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式のファイルとして出力する。
これまでに図4を参照しながら説明してきた開発支援装置10が実行する処理(特に、エキスポート処理)は、言い換えれば、開発支援装置10が実行する制御方法は、以下のように整理することができる。すなわち、開発支援装置10が実行する処理(制御方法)は、PLC20(制御装置)で実行されるプログラムをユーザが作成するのを支援する開発支援装置の制御方法であって、前記プログラムで用いられる変数に対して、当該変数の定義に併せてユーザが任意で付すことのできる要素コメントを、外部出力するよう指示するユーザ操作を受け付ける操作受付ステップ(出力指示取得処理S110)と、前記操作受付ステップにて前記ユーザ操作が受け付けられると、前記変数のうち、第1変数を先祖ノードとする木構造(ツリー)における子孫ノードとして表すことのできる複数の第2変数の各々に対する要素コメントを、前記第1変数の名称と、前記第1変数に対して前記複数の第2変数の各々を識別するための識別情報と、に対応付けて、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式のファイルとして出力する出力ステップ(エキスポート処理S160)と、を含んでいる。
前記の構成によれば、前記制御方法は、前記複数の第2変数の各々に対する要素コメントを、前記第1変数の名称と前記識別情報とに対応付けて、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式のファイルとして出力する。
したがって、前記制御方法は、ユーザにとって確認しやすく、かつ、編集しやすい形式で、前記複数の第2変数の各々に対する要素コメントのリストを出力することができるとの効果を奏する。つまり、前記制御方法は、ユーザが、前記複数の第2変数の各々に対する要素コメントを容易に確認し、かつ、容易に編集することを可能とするとの効果を奏する。
また、前記制御方法は、表計算ソフト等を用いてユーザが編集可能な形式のファイルとして前記要素コメントを出力するので、ユーザは、前記ファイルを用いて、例えば、複数の言語の各々で前記要素コメントを作成し、管理することができるという効果を奏する。すなわち、前記制御方法は、前記複数の第2変数の各々に対する、複数の言語の各々で記載した要素コメントを、ユーザが容易に生成・管理することができるようにするという効果を奏する。
(データ形式)
(要素変数以外の変数のデータ形式例)
開発支援装置10において、要素変数以外の変数は、つまり、「或る変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数」以外の変数は、例えば、以下のデータ形式で、第1変数定義テーブル131Aに格納されている。すなわち、要素変数以外の変数については、各変数の「変数名、データ型、およびコメント」等のセットが、各変数の属性として、一覧形式で、第1変数定義テーブル131Aに格納されている。
図5は、第1変数定義テーブル131Aに格納されている、要素変数以外の変数の一例を示す図である。すなわち、図5には、第1変数定義テーブル131Aに格納されている、「或る変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数」以外の変数の一例が示されている。
図5に例示するように、第1変数定義テーブル131Aにおいて、「startCondition」という名称の配列型変数と、「errorStatus」という名称の配列型変数とは、各変数の属性と共に、一覧形式で格納されている。すなわち、第1変数定義テーブル131Aにおいて、要素変数以外の変数について、各変数の変数名は、各変数のデータ型、および、各変数のコメントに対応付けられて、格納されている。
「或る変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数」以外の変数について、開発支援装置10は、例えば第1変数定義テーブル131Aにおける格納内容をそのまま、「変数テーブル画面」に表示する(可視化する)。
(要素変数のデータ形式例1:配列型変数の各配列要素)
これに対して、「或る変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数」は、つまり、要素変数は、開発支援装置10において、例えば、以下のデータ形式で、第2変数定義テーブル131Bに格納されている。すなわち、第2変数定義テーブル131Bにおいて、複数の要素変数の各々は、或る変数を先祖ノードとするツリーの複数の子孫ノードの各々に相当するものとして管理されている。第2変数定義テーブル131Bには、前記ツリーの構造を示す情報、特に、複数の要素変数の各々に相当する複数の子孫ノードの各々を、前記ツリーにおいて特定する情報が格納されている。また、第2変数定義テーブル131Bにおいて、複数の要素変数の各々に対する要素コメントは、複数の要素変数の各々に相当する複数の子孫ノードの各々に対応付けられている。
図6は、第2変数定義テーブル131Bに格納されている要素変数の一例(図6の(A))と、出力リストL1における要素変数についての要素コメントの一例(図6の(B))を示す図である。具体的には、図6の(A)には、「startCondition」という名称の配列型変数の各配列要素(すなわち、[0]、[1]、[2])について、各配列要素の要素コメント等が、第2変数定義テーブル131Bに格納されている例が示されている。
開発支援装置10は、先祖ノードに相当する第1変数(例えば、配列型変数または構造体型変数である第1変数)に対して、配列要素または構造体メンバ(要素変数。つまり、第2変数)が子孫ノードとして階層化されたツリーを構成する。例えば、開発支援装置10は、配列型変数:startConditionの配列要素[0]、[1]、[2]を、配列型変数:startConditionを親ノードとするツリーの子ノードとして管理する。
開発支援装置10は、第1変数(例えば、配列型変数:startCondition)を先祖ノードとするツリーの兄弟ノードに相当する複数の第2変数(例えば、配列要素[0]、[1]、[2])の各々を、以下のように識別する。すなわち、開発支援装置10は、第1変数に対して複数の第2変数の各々を識別するための識別情報(図6の(A)に示す例では、「0」、「1」、「2」)を、複数の第2変数の各々に付与することにより、兄弟ノードに相当する複数の第2変数の各々を識別する。配列型変数:startConditionを親ノードとするツリーの兄弟ノードに相当する配列要素[0]、[1]、[2]は、子ノードを示す階層において、各々、「0」、「1」、「2」によって、兄弟ノードに相当する他の配列要素から区別される。
そして、開発支援装置10は、第2変数定義テーブル131Bにおいて、「各要素変数に相当する、上記ツリー内の各子孫ノード」に対応付けて、各要素変数の要素コメントを格納している。
すなわち、図6の(A)の第2変数定義テーブル131Bにおいて、配列型変数:startConditionの配列要素:[0]は、配列型変数:startConditionを親ノードとするツリーの子ノードとして格納されている。配列型変数:startConditionの配列要素:[0]に対する要素コメント:「コンテナ起動条件」は、上記ツリーにおいて配列要素:[0]を示す子ノードに対応付けられている。
また、第2変数定義テーブル131Bの「ノードの説明」欄の内容は、「上記ツリーにおける、各要素変数に相当する各子孫ノードのインスタンスを示す情報」と捉えることができる。特に、「ノードの説明」欄には、各要素変数を子ノードとするツリーにおける、各要素変数に相当する子ノードのインスタンスを示す情報が示されている。
る。配列型変数:startConditionの配列要素:[0]の「ノードの説明」欄には、「配列要素:[0]は、配列型変数:startConditionを親ノードとするツリーにおいて、子ノード0に相当する」ことが示されている。
また、図6の(A)の第2変数定義テーブル131Bにおいて、配列型変数:startConditionの配列要素:[1]は、配列型変数:startConditionを親ノードとするツリーの子ノードとして格納されている。そして、配列型変数:startConditionの配列要素:[1]に対する要素コメント:「ロボット起動条件」は、上記ツリーにおいて配列要素:[1]を示す子ノードに対応付けられている。また、「ノードの説明」欄には、配列要素:[1]が、配列型変数:startConditionを親ノードとするツリーにおいて、子ノード1に相当することが示されている。配列型変数:startConditionの配列要素:[2]についても同様である。
(出力リストにおける要素コメント例1:配列要素に対する要素コメント)
前述の通り、開発支援装置10は、エキスポート処理の実行を指示するユーザ操作を受け付けると、以下の処理を実行する。すなわち、開発支援装置10は、前述のユーザ操作において選択された或る変数(第1変数)について、第2変数定義テーブル131Bを参照して、その或る変数を先祖ノードとするツリーの子孫ノードに相当する複数の第2変数の各々を特定する。開発支援装置10は、第2変数定義テーブル131Bを参照して、特定した複数の第2変数の各々についての要素コメントを取得する。また、開発支援装置10は、第2変数定義テーブル131Bを参照して、複数の第2変数の各々を識別する識別情報を取得し、特に、第1変数を先祖ノードとするツリーの、第1変数から複数の第2変数の各々までのパス情報を取得する。開発支援装置10は、第1変数の名称と、複数の第2変数の各々を識別する識別情報(第1変数から複数の第2変数の各々までのパス情報を含む)とを含む1つの文字列に、複数の第2変数の各々についての要素コメントを対応付けた出力リストL1を出力する。
図6の(B)には、図6の(A)に例示した配列型変数:startConditionの各配列要素に対する要素コメントが出力リストL1に出力された例が示されている。例えば、エキスポート処理の実行を指示するユーザ操作において、配列型変数:startConditionが選択されると、開発支援装置10は、以下の処理を実行する。
すなわち、先ず、出力部120(特に、第1取得部121)は、ユーザによって選択された第1変数の名称を、つまり、配列型変数:startConditionの名称である「startCondition」を特定する。
出力部120(特に、第2取得部122)は、第2変数定義テーブル131Bを参照して、配列型変数:startConditionを先祖ノードとするツリーを辿り、そのツリーにおける複数の子孫ノードに相当する複数の第2変数を特定する。すなわち、第2取得部122は、配列型変数:startConditionの配列要素[0]、[1]、[2]を特定する。そして、出力部120は、第1変数に対して、複数の第2変数(例えば、配列要素[0]、[1]、[2])の各々を識別するための識別情報(つまり、「0」、「1」、「2」)を取得する。
出力部120(特に、第2取得部122)は、第2変数定義テーブル131Bを参照して、配列型変数:startConditionの配列要素[0]、[1]、[2]の各々のパス情報を生成する。第2取得部122は、配列型変数:startConditionを先祖ノードとするツリーにおいて、先祖ノードである配列型変数:startConditionから、子孫ノードである配列要素[0]、[1]、[2]の各々までのパスを特定する。言い換えれば、第2取得部122は、上記ツリーにおいて、先祖ノードである配列型変数:startConditionから、子孫ノードである配列要素[0]、[1]、[2]の各々までの間にある、1つ以上の親子関係を、特定する。第2取得部122は、特定したパス(1つ以上の親子関係)を示すパス情報を生成する。「第1変数に対して複数の第2変数の各々を識別するための識別情報」は、「第1変数を先祖ノードとするツリーにおける、第1変数から複数の第2変数の各々までのパスを示すパス情報」を含んでいる。
図6に示す例では、変数名が「startCondition」である変数は配列型変数であり、配列型変数:startConditionの配列要素は、配列要素[0]、[1]、[2]である。前述の通り、第2取得部122は、識別情報(特に、パス情報)において、配列型変数と配列要素との間の親子関係を、カッコ([])を用いて示す。
第2取得部122は、第2変数定義テーブル131Bを参照して、配列型変数:startConditionと、配列要素[0]との間には親子関係が1つ存在し、その親子関係は、配列型変数と配列要素との間の親子関係であることを特定する。また、第2取得部122は、配列型変数:startConditionを親ノードとするツリーにおいて、兄弟ノードに相当する他の配列要素([1]、[2])から、配列要素[0]を識別する情報として、「1」を特定する。したがって、第2取得部122は、配列要素[0]について、パス情報を含む識別情報として、「[0]」を生成する。同様に、第2取得部122は、配列要素[1]について、パス情報を含む識別情報として、「[1]」を生成し、また、配列要素[2]について、パス情報を含む識別情報として、「[2]」を生成する。
「[0]」とのパス情報は、そのパス情報に対応する要素変数が、配列型変数である第1変数の配列要素であり、第1変数の他の配列要素から「0」によって識別されることを示す。同様に、「[1]」とのパス情報は、そのパス情報に対応する要素変数が、配列型変数である第1変数の配列要素であり、第1変数の他の配列要素から「1」によって識別されることを示す。また、「[2]」とのパス情報は、そのパス情報に対応する要素変数が、配列型変数である第1変数の配列要素であり、第1変数の他の配列要素から「2」によって識別されることを示す。
出力部120(特に、文字列生成部124)は、第1変数の名称(startCondition)と、複数の第2変数の各々の識別情報と、を含む1つの文字列を生成する。文字列生成部124は、配列要素[0]について、「startCondition」と、配列要素[0]の識別情報([0])と、を含む1つの文字列(つまり、「startCondition[0]」)を生成する。同様に、文字列生成部124は、配列要素[1]について「startCondition[1]」を生成し、配列要素[2]について「startCondition[2]」を生成する。
出力部120(特に、第3取得部123)は、第2変数定義テーブル131Bを参照して、第1変数を先祖ノードとするツリーの子孫ノードに相当する複数の第2変数(例えば、配列要素[0]、[1]、[2])の各々について、要素コメントを取得する。具体的には、第3取得部123は、第2変数定義テーブル131Bを参照して、配列要素[0]に対する要素コメント:コンテナ起動条件を取得する。同様に、第3取得部123は、第2変数定義テーブル131Bを参照して、配列要素[1]に対する要素コメント:ロボット起動条件を取得し、また、配列要素[2]に対する要素コメント:XXX起動条件を取得する。
そして、出力部120は、複数の第2変数の各々の要素コメントを、複数の第2変数の各々の「先祖ノードに相当する第1変数の名称と、識別情報と、を含む1つの文字列」に対応付けて、出力リストL1に出力する。図6の(B)に例示するように、出力部120は、配列要素[0]に対する要素コメント:コンテナ起動条件を、「startCondition[0]」とのコメント名称に対応付けて、出力リストL1に出力する。同様に、出力部120は、配列要素[1]に対する要素コメント:ロボット起動条件を、「startCondition[1]」とのコメント名称に対応付けて、出力リストL1に出力する。また、出力部120は、配列要素[2]に対する要素コメント:XXX起動条件を、「startCondition[2]」とのコメント名称に対応付けて、出力リストL1に出力する。
(要素変数のデータ形式例2:構造体型変数の各構造体メンバ)
図7は、図6と同様に、第2変数定義テーブル131Bに格納されている要素変数の一例(図7の(A))と、出力リストL1における要素変数についての要素コメントの一例(図7の(B))を示している。具体的には、図7の(A)には、「startCondition」という名称の構造体型変数の各構造体メンバについて、各構造体メンバの要素コメント等が、第2変数定義テーブル131Bに格納されている例が示されている。図7の(A)に示す例において、「startCondition」という名称の構造体型変数の構造体メンバは、Member1およびMember2である。
開発支援装置10は、構造体型変数:startConditionの構造体メンバMember1およびMember2を、構造体型変数:startConditionを親ノードとするツリーの子ノードとして管理する。上記ツリーにおいて兄弟ノードに相当する構造体メンバMember1およびMember2は、子ノードを示す階層において、各々、「Member1」または「Member2」によって、兄弟ノードに相当する他の配列要素から区別される。
すなわち、図7の(A)の第2変数定義テーブル131Bにおいて、構造体型変数:startConditionの構造体メンバ:Member1は、構造体型変数:startConditionを親ノードとするツリーの子ノードとして格納されている。そして、構造体型変数:startConditionの構造体メンバ:Member1に対する要素コメント:「コンテナ起動条件」は、上記ツリーにおいて構造体メンバ:Member1を示す子ノードに対応付けられている。また、「ノードの説明」欄には、構造体メンバ:Member1が、構造体型変数:startConditionを親ノードとするツリーにおいて、子ノードに相当することが示されている。
同様に、図7の(A)の第2変数定義テーブル131Bにおいて、構造体型変数:startConditionの構造体メンバ:Member2は、構造体型変数:startConditionを親ノードとするツリーの子ノードとして格納されている。そして、構造体型変数:startConditionの構造体メンバ:Member2に対する要素コメント:「ロボット起動条件」は、上記ツリーにおいて構造体メンバ:Member2を示す子ノードに対応付けられている。また、「ノードの説明」欄には、構造体メンバ:Member2が、構造体型変数:startConditionを親ノードとするツリーにおいて、子ノードに相当することが示されている。
(出力リストにおける要素コメント例2:構造体メンバに対する要素コメント)
図7の(B)には、図7の(A)に例示した構造体型変数:startConditionの各構造体メンバに対する要素コメントが出力リストL1に出力された例が示されている。例えば、エキスポート処理の実行を指示するユーザ操作において、構造体型変数:startConditionが選択されると、開発支援装置10は、以下の処理を実行する。
すなわち、第1取得部121は、構造体型変数:startConditionの名称である「startCondition」を特定する。第2取得部122は、第2変数定義テーブル131Bを参照して、第1変数を先祖ノードとするツリーを辿り、第1変数を先祖ノードとするツリーの子孫ノードに相当する複数の第2変数(例えば、構造体メンバMember1、Member2)の各々を特定する。そして、出力部120は、第1変数に対して、複数の第2変数(例えば、構造体メンバMember1、Member2)の各々を識別するための識別情報(つまり、Member1またはMember2)を取得する。識別情報は、パス情報を含んでいる。
図7に示す例では、変数名が「startCondition」である変数は構造体型変数であり、構造体型変数:startConditionの構造体メンバは、構造体メンバMember1およびMember2である。前述の通り、第2取得部122は、識別情報(特に、パス情報)において、構造体型変数と構造体メンバとの間の親子関係を、ピリオド(.)を用いて示す。
第2取得部122は、第2変数定義テーブル131Bを参照して、構造体変数:startConditionと、構造体メンバMember1との間には親子関係が1つ存在し、その親子関係は、構造体型変数と構造体メンバとの間の親子関係であることを特定する。また、第2取得部122は、構造体型変数:startConditionを親ノードとするツリーにおいて、兄弟ノードに相当する他の構造体メンバ(Member2)から、構造体メンバMember1を識別する情報として、「Member1」を特定する。したがって、第2取得部122は、構造体メンバMember1について、パス情報を含む識別情報として、「.Member1」を生成する。同様に、第2取得部122は、構造体メンバMember2について、パス情報を含む識別情報として、「.Member2」を生成する。
「.Member1」とのパス情報は、そのパス情報に対応する要素変数が、構造体型変数である第1変数の構造体メンバであり、第1変数の他の構造体メンバから「Member1」によって識別されることを示している。同様に、「.Member2」とのパス情報は、そのパス情報に対応する要素変数が、構造体型変数である第1変数の構造体メンバであり、第1変数の他の構造体メンバから「Member2」によって識別されることを示している。
文字列生成部124は、構造体メンバMember1について、第1変数の名称(startCondition)と、構造体メンバMember1の識別情報(.Member1)と、を含む、以下の1つの文字列を生成する。すなわち、文字列生成部124は、構造体メンバMember1について、「startCondition.Member1」という1つの文字列を生成する。同様に、文字列生成部124は、構造体メンバMember2について、「startCondition.Member2」という1つの文字列を生成する。
出力部120(特に、第3取得部123)は、第2変数定義テーブル131Bを参照して、構造体メンバMember1に対する要素コメント:コンテナ起動条件を取得し、また、構造体メンバMember2に対する要素コメント:ロボット起動条件を取得する。
そして、出力部120は、図7の(B)に例示するように、構造体メンバMember1に対する要素コメント:コンテナ起動条件を、「startCondition.Member1」とのコメント名称に対応付けて、出力リストL1に出力する。同様に、出力部120は、構造体メンバMember2に対する要素コメント:ロボット起動条件を、「startCondition.Member2」とのコメント名称に対応付けて、出力リストL1に出力する。
(要素変数のデータ形式例3:配列型変数の配列要素である構造体変数のメンバ)
図8は、図6および図7と同様に、第2変数定義テーブル131Bに格納されている要素変数の一例を示している。具体的には、図8には、「startCondition」という名称の、構造体型変数を配列要素とする配列型変数について、各配列要素および各構造体メンバに対する要素コメント等が、第2変数定義テーブル131Bに格納されている例が示されている。図8に示す例において、配列型変数:startConditionの各配列要素(すなわち、[0]、[1])は構造体型変数であり、構造体型変数である各配列要素の構造体メンバは、Member1およびMember2である。
開発支援装置10は、先祖ノードに相当する配列型変数:startConditionに対して、構造体型変数[0]および[1]が子ノードとして、構造体メンバMember1およびMember2が孫ノードとして、階層化されたツリーを構成する。
また、開発支援装置10は、「0、1、Member1、および、Member2」の少なくとも1つを識別情報として用いて、複数の要素変数の各々を、上記ツリーの同階層の兄弟ノードに相当する他の要素変数から識別する。例えば、開発支援装置10は、配列型変数:startConditionの配列要素[0]および[1]の各々を、「0」または「1」を識別情報として用いて、区別する。また、開発支援装置10は、構造体型変数[0]の構造体メンバMember1およびMember2の各々を、「Member1」または「Member2」を識別情報として用いて、区別する。さらに、開発支援装置10は、上記ツリーの4つの孫ノードの各々に相当する要素変数の各々を、「0」または「1」と、「Member1」または「Member2」と、を組み合わせた識別情報を用いて、区別する。
すなわち、図8に示すように、配列型変数:startConditionの各配列要素(すなわち、[0]、[1])は、配列型変数:startConditionを親ノードとするツリーの子ノードとして、第2変数定義テーブル131Bに格納されている。第2変数定義テーブル131Bにおいて、配列型変数:startConditionの各配列要素は、配列型変数に対して各配列要素を識別する情報(図8に示す例では、「0」、「1」)を用いて識別されている。以下の説明においては、構造体型変数を配列要素とする配列型変数:startConditionの配列要素である、配列要素[0]および[1]の各々を、構造体型変数[0]および[1]と称することがある。
構造体型変数[0]の構造体メンバ(すなわち、Member1およびMember2)は、構造体型変数[0]を親ノードとするツリーの子ノードとして、第2変数定義テーブル131Bに格納されている。言い換えれば、構造体型変数[0]の各構造体メンバは、配列型変数:startConditionを先祖ノードとするツリーの孫ノードとして、第2変数定義テーブル131Bに格納されている。第2変数定義テーブル131Bにおいて、構造体型変数[0]の各構造体メンバは、構造体型変数[0]に対して各構造体メンバを識別する情報(図8の例では、「Member1」または「Member2」)を用いて、識別されている。
同様に、構造体型変数[1]の構造体メンバ(すなわち、Member1およびMember2)は、構造体型変数[1]を親ノードとするツリーの子ノードとして、第2変数定義テーブル131Bに格納されている。言い換えれば、構造体型変数[1]の各構造体メンバは、配列型変数:startConditionを先祖ノードとするツリーの孫ノードとして、第2変数定義テーブル131Bに格納されている。第2変数定義テーブル131Bにおいて、構造体型変数[1]の各構造体メンバは、構造体型変数[1]に対して各構造体メンバを識別する情報(図8の例では、「Member1」または「Member2」)を用いて、識別されている。
配列型変数:startConditionの配列要素:[0]に対する要素コメント:「工程Aの起動条件」は、上記ツリーにおいて配列要素:[0]を示す子ノードに対応付けられている。また、「ノードの説明」欄には、配列要素:[0]が、配列型変数:startConditionを親ノードとするツリーにおいて、子ノード0に相当することが示されている。
同様に、図8の第2変数定義テーブル131Bにおいて、構造体型変数[0]の構造体メンバ:Member1は、構造体型変数[0]を親ノードとするツリーの子ノードとして格納されている。つまり、図8の第2変数定義テーブル131Bにおいて、構造体型変数[0]の構造体メンバ:Member1は、配列型変数:startConditionを先祖ノードとするツリーの孫ノードとして格納されている。そして、構造体型変数[0]の構造体メンバ:Member1に対する要素コメント:「コンテナ起動条件(工程A)」は、上記ツリーにおいて構造体型変数[0]の構造体メンバ:Member1を示すノードに対応付けられている。また、「ノードの説明」欄には、構造体型変数[0]の構造体メンバ:Member1が、配列要素:[0]である構造体型変数を親ノードとするツリーにおいて、子ノードに相当することが示されている。
(出力リストにおける要素コメント例3:配列型変数の配列要素である構造体変数のメンバ等)
図9は、出力リストL1における要素変数についての要素コメントの一例を示している。特に、図9には、図8に例示した「構造体型変数を配列要素とする、『startCondition』という名称の配列型変数(第1変数)」が含む複数の要素変数の各々に対する要素コメントが出力リストL1に出力された例が示されている。例えば、エキスポート処理の実行を指示するユーザ操作において「構造体型変数を配列要素とする、『startCondition』という名称の配列型変数(第1変数)」が選択されると、開発支援装置10は、以下の処理を実行する。
すなわち、第1取得部121は、第1変数の名称として、「startCondition」を特定する。第2取得部122は、第2変数定義テーブル131Bを参照して、第1変数を先祖ノードとするツリーを辿り、第1変数を先祖ノードとするツリーの子孫ノードに相当する複数の第2変数の各々を特定する。例えば、第2取得部122は、配列要素[0]および[1]、構造体型変数[0]の構造体メンバMember1およびMember2、さらに、構造体型変数[1]の構造体メンバMember1およびMember2の各々を特定する。第2取得部122は、それら複数の第2変数の各々を識別するための識別情報(それら複数の第2変数の各々のパス情報を含む)を取得する。
例えば、第2取得部122は、第2変数定義テーブル131Bを参照して、配列型変数:startConditionと、配列要素[0]との間には親子関係が1つ存在し、その親子関係は、配列型変数と配列要素との間の親子関係であることを特定する。また、第2取得部122は、配列型変数:startConditionを親ノードとするツリーにおいて、兄弟ノードに相当する他の配列要素([1])から、配列要素[0]を識別する情報として、「1」を特定する。したがって、第2取得部122は、配列要素[0]について、パス情報を含む識別情報として、「[0]」を生成する。同様に、第2取得部122は、配列要素[1]について、パス情報を含む識別情報として、「[1]」を生成する。また、第2取得部122は、配列型変数:startConditionを親ノードとするツリーにおいて、兄弟ノードに相当する他の配列要素([1])から、配列要素[0]を識別する情報として、「1」を特定する。したがって、第2取得部122は、配列要素[0]について、パス情報を含む識別情報として、「[0]」を生成する。「[0]」とのパス情報は、そのパス情報に対応する要素変数が、配列型変数である第1変数の配列要素であり、第1変数の他の配列要素から「0」によって識別されることを示す。
同様に、第2取得部122は、第2変数定義テーブル131Bを参照して、配列型変数:startConditionと、構造体型変数[0]の構造体メンバ:Member1との間には、2つの親子関係が存在することを特定する。
すなわち、第2取得部122は、配列型変数:startConditionを親ノードとし、構造体型変数[0]を子ノードとする第1の親子関係が存在し、第1の親子関係は、配列型変数と配列要素との間の親子関係であることを特定する。そして、第2取得部122は、配列型変数:startConditionを親ノードとするツリーにおいて、兄弟ノードに相当する他の配列要素([1])から、配列要素[0]を識別する情報として、「1」を特定する。したがって、第2取得部122は、配列要素[0]について、パス情報を含む識別情報として、「[0]」を生成する。
また、第2取得部122は、構造体型変数[0]を親ノードとし、構造体型変数[0]の構造体メンバ:Member1を子ノードとする第2の親子関係が存在し、第2の親子関係は、構造体型変数と構造体メンバとの間の親子関係であることを特定する。そして、第2取得部122は、構造体型変数[0]を親ノードとするツリーにおいて、兄弟ノードに相当する他の構造体メンバ(Member2)から、Member1を識別する情報として、「Member1」を特定する。したがって、第2取得部122は、配列要素[0]について、パス情報を含む識別情報として、「.Member1」を生成する。
したがって、第2取得部122は、先祖ノードとしての配列型変数:startConditionに対して、構造体型変数[0]の構造体メンバ:Member1を他の兄弟ノードから識別する識別情報として、以下の文字列を生成する。すなわち、第2取得部122は、構造体型変数[0]の構造体メンバ:Member1の識別情報として、「[0].Member1」を生成する。
「[0].Member1」とのパス情報は、そのパス情報に対応する要素変数が、「構造体型変数を配列要素とする第1変数」の配列要素である配列要素[0]の、つまり、構造体型変数である配列要素[0]の、構造体メンバであることを示す。また、「[0].Member1」とのパス情報は、そのパス情報に対応する要素変数が、第1変数を先祖ノードとするツリーの、他の兄弟ノードから、「0」と「Member1」とをこの順に並べた識別情報によって識別されることを示す。
文字列生成部124は、配列要素[0]について、第1変数の名称である「startCondition」と、配列要素[0]の識別情報([0])と、を含む1つの文字列(つまり、「startCondition[0]」)を生成する。また、文字列生成部124は、構造体型変数[0]の構造体メンバ:Member1について、「startCondition」と、構造体型変数[0]の構造体メンバ:Member1の識別情報([0].Member1)と、を含む以下の文字列を生成する。
すなわち、文字列生成部124は、構造体型変数[0]の構造体メンバ:Member1について、「startCondition[0].Member1」を生成する。
第3取得部123は、第2変数定義テーブル131Bを参照して、配列要素[0]に対する要素コメント:工程Aの起動条件を取得する。同様に、第3取得部123は、第2変数定義テーブル131Bを参照して、構造体型変数[0]の構造体メンバ:Member1に対する要素コメント:コンテナ起動条件(工程A)を取得する。
そして、出力部120は、図9に例示するように、配列要素[0]に対する要素コメント:工程Aの起動条件を、「startCondition[0]」とのコメント名称に対応付けて、出力リストL1に出力する。同様に、出力部120は、構造体型変数[0]の構造体メンバ:Member1に対する要素コメント:コンテナ起動条件(工程A)を、「startCondition[0].Member1」とのコメント名称に対応付けて、出力リストL1に出力する。
(1つの出力リストに納める要素コメント数の制限)
開発支援装置10(特に、出力部120)は、1つの出力リストL1に出力する要素コメントの数(つまり、要素コメントを出力する要素変数の数)を制約することによって、出力リストL1のデータサイズが大きくなりすぎるのを回避する。
例えば、出力部120は、1つの出力リストL1に出力する要素コメントの数について、予め最大数(所定値)を設定しておく。出力部120は、出力予定の要素コメントの数が最大数を超えると判定すると、出力予定の要素コメントを、複数の出力リストL1(例えば、出力リストL1(1)、L1(2)、L1(3)、・・・L1(n))に分けて出力する。
すなわち、開発支援装置10において、前記第2変数の総数が所定値(最大値)より大きいと、出力部120は、前記ファイル(出力リストL1)を2以上に分割して出力してもよい。
前記の構成によれば、開発支援装置10は、前記第2変数の総数が前記所定値より大きいと、前記ファイルを2以上に分割して出力する。つまり、開発支援装置10は、前記第2変数の総数が前記所定値より大きくなって、前記ファイルのデータサイズが大きくなり過ぎると判断すると、前記ファイルを2以上に分割して出力する。
例えば、開発支援装置10は、前記第1変数が共通である前記複数の第2変数の総数が前記所定値より大きいと、前記複数の第2変数の各々に付された要素コメントを、2つ以上の前記ファイルに分けて出力する。また、例えば、開発支援装置10は、複数の前記第1変数の各々を先祖ノードとする前記複数の第2変数の総数が前記所定値より大きいと、前記複数の第2変数の各々に付された要素コメントを、2つ以上の前記ファイルに分けて出力する。
ここで、前記第2変数の総数が増えれば、当然、前記ファイルのデータサイズも大きくなり、データサイズが大きくなり過ぎると、前記ファイルを開いて内容を確認したり、前記ファイルを編集したりするのが困難になることがある。
したがって、開発支援装置10は、前記ファイルを2以上に分割することによって、前記ファイルのデータサイズが大きくなり過ぎて前記ファイルのユーザ利便性が低下するという事態が発生するのを回避することができるとの効果を奏する。
さらに、出力部120は、前記第1変数が共通である前記複数の第2変数の各々に対する要素コメントを全て、1つの前記ファイルに出力してもよい。
前記の構成によれば、開発支援装置10は、前記第1変数が共通である前記複数の第2変数の各々に対する要素コメントを全て、1つの前記ファイルに出力する。したがって、開発支援装置10は、前記第1変数が共通である前記複数の第2変数の各々に対する要素コメントが複数のファイルに分かれてしまい、ユーザにとって視認性および利便性が低下するのを回避することができるとの効果を奏する。
出力部120は、先祖ノードに相当する変数(第1変数)が共通である複数の要素変数の各々に対する要素コメントの数が最大行数以下である場合、それら「第1変数が共通である複数の要素変数の各々に対する要素コメント」を、1つの出力リストL1に出力する。つまり、出力部120は、先祖ノードに相当する変数が共通である複数の要素変数の各々に対する要素コメントは全て、1つの出力リストL1に収まるようにし、複数の出力リストL1に分割されないようにする。ただし、先祖ノードに相当する変数が共通である複数の要素変数の各々に対する要素コメントの数が最大数を超える場合、出力部120は、それら「第1変数が共通である複数の要素変数の各々に対する要素コメント」を、複数の出力リストL1に分けて出力する。
例えば、出力部120は、複数の要素変数の各々に対する要素コメントをL1(m)に出力する際、最大数から「出力リストL1(m)に出力済の要素コメントの数」を減じた「残り数」を、出力リストL1(m)について算出する。「m」は「1」以上の自然数である。出力部120は、「出力リストL1(m)に出力予定の要素コメントの数」と、出力リストL1(m)について算出した「残り数」とを比較する。出力部120は、「出力リストL1(m)に出力予定の要素コメントの数」よりも「残り数」の方が少ないと判定すると、出力予定の要素コメントの出力先のファイルを、出力リストL1(m)から出力リストL1(m+1)に切り替える。
(インポート処理の概要)
開発支援装置10は、入力リストL2における各「コメント名称」の内容と、複数の要素変数の各々のインスタンス(ノードインスタンス)を示す情報と、を対応付けたマップ情報132を、予め記憶部130に格納している。入力リストL2における「コメント名称」には、出力リストL1における「コメント名称」と同様に、子孫ノードに相当する複数の要素変数の各々のパス情報(先祖ノードに相当する第1変数の名称を含む)が記載されている。
入力リストL2における各「コメント名称」の記載規則は、出力リストL1における「コメント名称」の記載規則と同様である。すなわち、「コメント名称」は、先祖ノードに相当する変数(第1変数)の名称と、第1変数に対して複数の第2変数の各々を識別するための識別情報とを含む。識別情報は、「第1変数を先祖ノードとするツリーにおける、第1変数から複数の第2変数の各々までのパスを示すパス情報」を含む。パス情報は、第1変数を先祖ノードとするツリーにおいて、第1変数から複数の第2変数の各々までの間に存在する、1つ以上の親子関係の各々を特定する情報である。パス情報において、親ノードに相当する変数が配列型変数であって、子ノードに相当する変数が前記配列型変数の要素である場合、親子関係はカッコ([])を用いて示される。また、パス情報において、親ノードに相当する変数が構造体型変数であって、子ノードに相当する変数が前記構造体型変数のメンバである場合、親子関係は、ピリオド(.)を用いて示される。
入力リストL2における「複数の要素変数の各々のインスタンスを示す情報」とは、「複数の要素変数の各々を子孫ノードとするツリーにおいて、複数の子孫ノードの各々のインスタンス」を示す情報である。「複数の要素変数の各々のインスタンスを示す情報」は、「子孫ノードに相当する複数の要素変数(第2変数)と、先祖ノードに相当する変数(第1変数)との関係を示す情報」ということもできる。
これまで説明したように、開発支援装置10は、入力部140と、コメント更新部150と、をさらに備えてもよい。入力部140は、前記第1変数の名称と前記識別情報とに対応付けられて前記第2変数の各々に対する要素コメントが記載された、テキストエディタおよび表計算ソフトの少なくとも一方において編集可能なデータ形式のファイル(入力リストL2)のインポートを指示するユーザ操作が操作受付部110(特に、入力指示受付部112)によって受け付けられると、インポートを指示された前記ファイルをインポートする。コメント更新部150は、入力部140によってインポートされた前記ファイルにしたがって、記憶部130に格納された前記第2変数の各々に対する要素コメントを更新する。
前記の構成によれば、開発支援装置10は、前記ユーザ操作にしたがって、前記第1変数の名称と前記識別情報とに対応付けられて前記第2変数の各々に対する要素コメントが記載された入力リストL2をインポートする。そして、開発支援装置10は、インポートした入力リストL2にしたがって、記憶部130に格納された前記第2変数の各々に対する要素コメントを更新する。特に、開発支援装置10は、ユーザが容易に内容を確認し、かつ、容易に内容を編集できる形式の入力リストL2に記載された、前記複数の第2変数の各々に対する要素コメントをインポートして、記憶部130に格納された前記第2変数の各々に対する要素コメントを更新する。
したがって、開発支援装置10は、自装置が用いる前記第2変数の各々に対する要素コメントを、ユーザが、入力リストL2を用いて、容易に管理し、かつ、容易に編集できるようにすることができるとの効果を奏する。
また、各々、複数の言語の各々で記載された複数の入力リストL2を準備することによって、開発支援装置10は、インポートする入力リストL2を変更することで、自装置が用いる前記第2変数の各々に対する要素コメントの言語を、容易に切り替えることができる。
ユーザは、例えば、或る第2変数に対する要素コメントを、英語で記載した入力リストL2(1)、日本語で記載した入力リストL2(2)、中国語で記載した入力リストL2(3)、および、スペイン語で記載した入力リストL2(4)を、予め準備しておく。開発支援装置10は、英語で記載した入力リストL2(1)をインポートすることにより、前記第2変数に対する英語の要素コメントを用いることができ、また、日本語で記載した入力リストL2(2)をインポートすることにより、前記第2変数に対する日本語の要素コメントを用いることができる。同様に、開発支援装置10は、中国語で記載した入力リストL2(3)をインポートすることにより、前記第2変数に対する中国語の要素コメントを用いることができ、また、スペイン語で記載した入力リストL2(4)をインポートすることにより、前記第2変数に対するスペイン語の要素コメントを用いることができる。
すなわち、開発支援装置10は、自装置において前記第2変数に対する何語の要素コメントを用いるか(前述の例でいえば、英語、日本語、中国語、および、スペイン語のいずれの要素コメントを用いるか)を容易に切り替えることができるとの効果を奏する。
(インポート処理の詳細)
図10は、開発支援装置が10実行する入力処理(インポート)の全体概要を示す図である。入力指示受付部112は、インポート処理の実行を指示するユーザ操作を受け付け、すなわち、入力リストL2の入力処理の実行を指示するユーザ操作を受け付ける(入力指示取得処理、S210)。入力リストL2において、要素変数である対象変数に対するコメント(要素コメント)は、コメント名称に対応付けられている。コメント名称は、(i)対象変数の先祖ノードに相当する変数(第1変数)の名称と、(ii)第1変数を先祖ノードとするツリーにおいて、他の子孫ノードに相当する要素変数から対象変数を識別するための識別情報と、を含む。
入力部140が、入力リストL2をインポートすると(インポート処理、S220)、コメント更新部150(特に、文字列解析部151)は、入力リストL2のコメント名称から、第1変数の名称を抽出し、抽出した第1変数の名称を第1特定部152に通知する。第1特定部152は、入力リストL2のコメント名称から抽出された「第1変数の名称」から、第1変数を特定する(第1変数特定処理、S230)。第2特定部153は、入力リストL2のコメント名称から抽出された「識別情報」から、対象変数が、第1変数の子孫ノードに相当する変数のうち、どの変数であるのかを特定する(第2変数特定処理、S240)。例えば、第2特定部153は、マップ情報132を参照して、入力リストL2の「コメント名称」に対応する「ノードインスタンス」を取得し、取得した「ノードインスタンス」を用いて、対象変数を第2変数定義テーブル131Bにおいて特定する。また、第3特定部154は、入力リストL2においてコメント名称に対応付けられているコメント(要素コメント)を特定し、つまり、コメント名称に対応する要素コメントを、入力リストL2から取得する。
コメント更新部150は、第2変数特定処理において特定した対象変数の、第2変数定義テーブル131Bにおけるコメントを、入力リストL2における対象変数に対するコメントによって更新する(コメント更新処置、S250)。つまり、コメント更新部150は、第2変数特定処理において特定した対象変数の、第2変数定義テーブル131Bにおける要素コメントを、第3特定部154が入力リストL2から取得した要素コメントによって、更新する。
(マップ情報の例)
(第1変数を先祖(親)ノードとするツリーの、子ノードに相当する変数について)
図11は、マップ情報132の一例を示す図である。前述の通り、マップ情報132は、「コメント名称」と、「インスタンス」と、を対応付けている。
例えば、「startCondition[0]」というコメント名称は、先祖ノードに相当する変数(第1変数)の名称である「startCondition」と、第1変数に対して複数の第2変数の各々を識別するための識別情報である「[0]」とを含む。「startCondition」の直後の「[0]」は、以下の情報を示している。第1に、そのコメント名称に対応する要素変数は、変数名が「startCondition」である変数(第1変数)を先祖ノードとするツリーの、子ノードに相当することを示している。第2に、そのコメント名称に対応する要素変数は、第1変数の、配列要素である(つまり、第1変数は配列型の変数である)ことを示している。第3に、そのコメント名称に対応する要素変数を、第1変数を親ノードとするツリーの他の子ノードに相当する変数(他の配列要素)から識別するため識別情報は、「0」であることを示している。
「startCondition[0]」というコメント名称が示すこれらの情報は、マップ情報132において、このコメント名称に対応付けられている「[0]のノード」というノードインスタンスが示す情報と同様である。すなわち、「[0]のノード」というノードインスタンスは、或る要素変数が、或る第1変数の子ノードに相当し、特に、その或る第1変数の配列要素であり、その或る第1変数の他の配列要素から「0」という識別情報によって識別されることを示している。
(第1変数を先祖ノードとするツリーの、孫ノードに相当する変数について)
同様に、例えば「startCondition[1].Member2」というコメント名称は、先祖ノードに相当する変数(第1変数)の名称である「startCondition」を含んでいる。また、「startCondition[1].Member2」というコメント名称は、そのコメント名称に対応する要素変数を、前記第1変数を先祖ノードとする他の子孫ノードに相当する変数から識別する識別情報として、「[1].Member2」を含む。
「startCondition」の直後の「[1].Member2」は、以下の情報を示している。第1に、そのコメント名称に対応する要素変数は、変数名が「startCondition」である変数(第1変数)を先祖ノードとするツリーの、孫ノードに相当することを示している。第2に、そのコメント名称に対応する要素変数は、第1変数の配列要素[1]である構造体型変数の、構造体メンバである(つまり、第1変数は、構造体型変数を配列要素とする、配列型の変数である)ことを示している。
第3に、そのコメント名称に対応する要素変数を、「第1変数を先祖ノードとするツリーの、他の孫ノードに相当する変数」から識別するため識別情報は、「1」および「Member2」であることを示している。
具体的には、そのコメント名称に対応する要素変数は、「第1変数の配列要素[1]である構造体型変数の、構造体メンバである」点で、「第1変数の配列要素[0]である構造体型変数の、構造体メンバ」から識別される。つまり、そのコメント名称に対応する要素変数は、第1変数の配列要素[1]を親ノードとする点で、「第1変数の配列要素[0]を親ノードとするツリーの、子ノードに相当する変数」から識別される。
また、そのコメント名称に対応する要素変数は、「第1変数の配列要素[1]である構造体型変数の、Member2である」点で、「第1変数の配列要素[1]である構造体型変数の、他の構造体メンバ(例えば、Member1)」から識別される。
「startCondition[1].Member2」というコメント名称が示すこれらの情報は、マップ情報132において、このコメント名称に対応付けられている「[1]-Member2のノード」というノードインスタンスが示す情報と同様である。「[1]-Member2のノード」というノードインスタンスは、以下の情報を示している。すなわち、「[1]-Member2のノード」というノードインスタンスは、或る要素変数が、或る第1変数の孫ノードに相当し、特に、その或る第1変数の配列要素[1]である構造体型変数の、構造体メンバであることを示している。また、「[1]-Member2のノード」というノードインスタンスは、その或る要素変数は、「第1変数を先祖ノードとするツリーの、他の孫ノードに相当する変数」から、「1」および「Member2」という識別情報によって識別されることを示している。
前述の通り、第2特定部153が、入力リストL2における要素変数の各々を特定するのに際して、マップ情報132を参照することは必須ではない。第2特定部153は、マップ情報132を参照せずに、入力リストL2の「コメント名称」から直接、第1変数を先祖ノードとするツリーにおいて、入力リストL2に要素コメントが格納された要素変数を識別するための識別情報を取得してもよい。
マップ情報132における「ノードインスタンス」は、第2変数定義テーブル131Bにおける「ノードの説明」に対応付けられていてもよい。
§4.変形例
これまで、第1変数が配列型変数または構造体型変数であり、第2変数が配列要素または構造体メンバである例を説明してきた。しかしながら、第1変数が配列型変数または構造体型変数であり、第2変数が配列要素または構造体メンバであることは必須ではない。第2変数は、第1変数を先祖ノードとするツリーの子孫ノードとして表すことのできる変数であればよい。
〔ソフトウェアによる実現例〕
開発支援装置10の機能ブロック(具体的には、出力部120、入力部140、および、コメント更新部150)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPU(CenTral Processing Unit)を用いてソフトウェアによって実現してもよい。
後者の場合、開発支援装置10は、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、上記プログラムおよび各種データがコンピュータ(またはCPU)で読み取り可能に記録されたROM(Read Only Memory)または記憶装置(これらを「記録媒体」と称する)、上記プログラムを展開するRAM(Random Access Memory)等を備えている。そして、コンピュータ(またはCPU)が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して上記コンピュータに供給されてもよい。なお、本発明は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。