JP4848772B2 - プログラム生成装置およびプログラム生成プログラム - Google Patents

プログラム生成装置およびプログラム生成プログラム Download PDF

Info

Publication number
JP4848772B2
JP4848772B2 JP2006001182A JP2006001182A JP4848772B2 JP 4848772 B2 JP4848772 B2 JP 4848772B2 JP 2006001182 A JP2006001182 A JP 2006001182A JP 2006001182 A JP2006001182 A JP 2006001182A JP 4848772 B2 JP4848772 B2 JP 4848772B2
Authority
JP
Japan
Prior art keywords
program
node
tree
data flow
generation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2006001182A
Other languages
English (en)
Other versions
JP2007183785A (ja
Inventor
寛和 徳田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Priority to JP2006001182A priority Critical patent/JP4848772B2/ja
Publication of JP2007183785A publication Critical patent/JP2007183785A/ja
Application granted granted Critical
Publication of JP4848772B2 publication Critical patent/JP4848772B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、プログラム生成装置およびプログラム生成プログラムに関し、特にプログラムの構成要素であるプログラム要素を結合することによってプログラムを生成するプログラム生成装置およびプログラム生成プログラムに関する。
従来から、プログラムを開発する方法として、テキストエディタを使用してC言語などのテキストベースの言語でプログラムを記述し、コンパイラなどのツールを使用してコンピュータが処理できる形式のロードモジュールに変換する方法が知られている。
上記の方法では、プログラムを作成すると同時にドキュメントを別途製作することが多く、この別途製作されたドキュメントは視覚的に把握しやすいように図形を多用した形式で記載されることが多い。
こうして製作されたドキュメントは、プログラムとは1対1で対応している。また、図形ベースのドキュメントからC言語などのテキストベースプログラムへ変換する操作には機械的な操作が多くあり、操作実行中に人的誤りが含まれてしまうことが多い。そのため、この操作に費やす時間や間違いが問題視されてきた。
そこで、図形ベースのドキュメントをテキストベースのプログラムに自動的に変換し、これらの時間の浪費や、人的誤りの混入を防止するシステムが開発されてきた。たとえば、プログラムを複数の図面で表現し、そのデータからソースコードを生成するプログラミング装置が提案されている(特許文献1参照)。図式を用いて記述したプログラムから、テキスト型のプログラミング言語を生成するプログラミング方法が提案されている(特許文献2参照)。
また、データフロー図とスケジュール表から、プログラム作成を行うプログラム装置が提案されている(特許文献3参照)。データフロー図を用いて記述したプログラムコードを生成するソフトウェア開発方式が提案されている(特許文献4参照)。プログラムを階層的な図的表現で表現するソフトウェア設計・試験支援装置が提案されている(特許文献5参照)。
ところで、このような図式プログラムにおいては、上述の機械的操作や人的誤りの軽減というメリットがあるものの、図で記述するのにそぐわないアルゴリズムを記述しようとすると不都合が生じるというデメリットも併せ持っている。
たとえば、データフロー図は、信号の流れなどを記述するのには非常に便利であるが、繰り返しループなどの制御構造を記述するのには困難がある。
そのため、複数の手段により製作したプログラムを結合してプログラムを作成する方法が提案されている。たとえば、入力と出力とだけに限定して他のモジュールと関連づけることによってプログラムを作成するプログラム作成支援方法が提案されている(特許文献6参照)。
また、プログラムが自動生成される第1領域と、それ以外のプログラムである第2領域にわけて取り扱うソフトウエア開発支援システムが提案されている(特許文献7参照)。複数の手段で製作されたプログラムを統一的な形式の中間オブジェクトに変換してから、組み合わせて1つのプログラムにまとめるシーケンスプログラム生成方法が提案されている(特許文献8参照)。
特開平10−307716号公報 特開平8−55019号公報 特許第3007248号公報 特開昭63−219036号公報 特開平10−171641号公報 特開平4−102919号公報 特開2000−89945号公報 特開2000−227854号公報
しかし、上記特許文献6記載のプログラム作成支援方法では、入出力インタフェースのみで関連づけられており、他のモジュールの持つ変数などの他の情報を、図式プログラムの製作装置内部のプログラムと同じように利用することができなかった。したがって、統一的なプログラム製作手法にのっとってプログラムを製作することができなかった。
また、上記特許文献8記載のシーケンスプログラム生成方法では、中間オブジェクトの段階で結合可能となるため、プログラマがプログラムを作成している段階では、統一的なプログラム製作手法にのっとってプログラムを製作することができなかった。
また、上記特許文献7記載のソフトウエア開発支援システムでは、既存のプログラムと図式プログラムからの自動生成結果が1つのファイルに合成されてしまい、既存のプログラムを改変せずに再利用することができず、再利用によるテスト工程の低減のメリットを得ることができなかった。
発明の目的は、外部プログラムをデータフローに変換することなくデータフローを持つプログラム要素とともにプログラミングを行うことが可能なプログラム生成装置を提供することである。
また、本発明の他の目的は、外部プログラムをデータフローに変換することなくデータフローを持つプログラム要素とともにプログラミングを行うことが可能なプログラム生成プログラムを提供することである。
発明では上記問題を解決するために、プログラムの構成要素であるプログラム要素を結合することによって前記プログラムを生成するプログラム生成装置において、前記プログラム要素の種類に応じて表示の異なるノードのアイコンが記憶されているノード記憶手段と、前記ノードの属性として少なくとも前記ノードに関連づけたファイル名が記憶されている属性記憶手段と、処理の流れを表すデータフローを有する前記プログラム要素、もしくは下位に処理の流れを表すデータフローを有する前記プログラム要素を有する前記プログラム要素に対応するノードの前記アイコンを前記ノード記憶手段から読み出し、ツリー状に接続することで、前記プログラム要素間の階層構造を表すプログラムツリーを生成するツリー生成手段と、前記ツリー生成手段が生成した前記プログラムツリーに対して、前記データフローを持たない前記プログラム要素である外部プログラムに対応した前記アイコンを前記ノード記憶手段から読み出し、前記ノードとして設定する外部プログラム設定手段と、前記データフローと、前記外部プログラムとから前記プログラムを生成するプログラム生成手段とを有し、前記属性記憶手段に記憶されたファイル名は、前記プログラム生成手段が前記ノードに対応するプログラム要素からプログラムを生成する際のプログラム名として設定されることを特徴とするプログラム生成装置が提供される。
これにより、ノード記憶手段が、プログラム要素に応じたノードを記憶する。ツリー生成手段が、処理の流れを表すデータフローを有するプログラム要素、もしくは下位に処理の流れを表すデータフローを有するプログラム要素を有するプログラム要素に対応するノードをツリー状に接続することで、プログラム要素間の階層構造を表すプログラムツリーを生成する。外部プログラム設定手段が、ツリー生成手段が生成したプログラムツリーに対して、データフローを持たないプログラム要素である外部プログラムをノードとして設定する。プログラム生成手段が、データフローと、外部プログラムとからプログラムを生成する。
また、本発明では、プログラムの構成要素であるプログラム要素を結合することによって前記プログラムを生成するプログラム生成プログラムにおいて、コンピュータを、前記プログラム要素の種類に応じて表示の異なるノードのアイコンをノード記憶手段に記憶させ、前記ノードの属性として少なくとも前記ノードに関連づけたファイル名を属性記憶手段に記憶させる記憶手段、処理の流れを表すデータフローを有する前記プログラム要素、もしくは下位に処理の流れを表すデータフローを有する前記プログラム要素を有する前記プログラム要素に対応するノードの前記アイコンを前記ノード記憶手段から読み出し、ツリー状に接続することで、前記プログラム要素間の階層構造を表すプログラムツリーを生成するツリー生成手段、前記ツリー生成手段が生成した前記プログラムツリーに対して、前記データフローを持たない前記プログラム要素である外部プログラムに対応した前記アイコンを前記ノード記憶手段から読み出し、前記ノードとして設定する外部プログラム設定手段、前記データフローと、前記外部プログラムとから前記プログラムを生成するとともに前記属性記憶手段に記憶されたファイル名を前記ノードに対応するプログラム要素からプログラムを生成する際のプログラム名として設定するプログラム生成手段として機能させることを特徴とするプログラム生成プログラムが提供される。
これにより、ノード記憶手段が、プログラム要素に応じたノードを記憶する。ツリー生成手段が、処理の流れを表すデータフローを有するプログラム要素、もしくは下位に処理の流れを表すデータフローを有するプログラム要素を有するプログラム要素に対応するノードをツリー状に接続することで、プログラム要素間の階層構造を表すプログラムツリーを生成する。外部プログラム設定手段が、ツリー生成手段が生成したプログラムツリーに対して、データフローを持たないプログラム要素である外部プログラムをノードとして設定する。プログラム生成手段が、データフローと、外部プログラムとからプログラムを生成する。
発明のプログラム生成装置によれば、外部プログラムをデータフローに変換することなくデータフローを持つプログラム要素とともにプログラムを生成することができるので、外部プログラムをデータフローに変換することに伴う作業工数が削減できる。したがって、プログラムを生成するためのコストを削減することができる。また、外部プログラムをデータフローに変換するときに発生する作業に伴うミスをなくすことができるので、生成されるプログラムの信頼性を向上することができる。
また、本発明のプログラム生成プログラムによれば、外部プログラムをデータフローに変換することなくデータフローを持つプログラム要素とともにプログラムを生成することができるので、外部プログラムをデータフローに変換することに伴う作業工数が削減できる。したがって、プログラムを生成するためのコストを削減することができる。また、外部プログラムをデータフローに変換するときに発生する作業に伴うミスをなくすことができるので、生成されるプログラムの信頼性を向上することができる。
以下、本発明の実施の形態を図面を参照して詳細に説明する。
図1は、本実施の形態に適用される発明の概念図である。図1に示すように、コンピュータ1は、ノード記憶手段1a、ツリー生成手段1b、および外部プログラム設定手段1cを備えている。また、コンピュータ1には、入力手段2と表示手段3が接続されている。
コンピュータ1は、入力手段2から入力された指示信号を受けて、プログラム全体をツリー状に表したプログラムツリーを生成し、そのプログラムツリーを表示手段3へ出力する。このプログラムツリーのノードは、プログラムの構成要素であるプログラム要素に対応づけられている。
また、コンピュータ1は、プログラム要素の1つである機能単位の処理の流れを示すデータフローから部分プログラムを生成し、生成した部分プログラムを結合することによって所望のプログラムを生成する。
また、生成された部分プログラムとは別に、あらかじめ用意された部分プログラムを用いてプログラムを生成するときには、データフローから生成した部分プログラムと、あらかじめ用意された部分プログラムを結合することによって所望のプログラムを生成する。
あらかじめ用意された部分プログラムとは、たとえば、プログラミングを行うときに頻繁に使用するために、プログラミング時に流用できるようにあらかじめ用意された部分プログラムであり、十分な回数使用されることによって信頼性が高く、もう修正の必要がないためデータフローに作り替えるメリットがない部分プログラムである。
ノード記憶手段1aには、プログラムツリーを表示するときに用いられる、プログラムツリーのノードを示すアイコンが記憶されている。このアイコンは、プログラム要素の種類ごとに用意されている。たとえば、プログラムが1つ以上のコンパイル単位と、1つ以上の機能単位から構成されているとき、ノード記憶手段1aには、プログラム全体、コンパイル単位、および機能単位を示すアイコンが記憶されている。
したがって、プログラムツリーが表示されているときに、プログラムツリーのノードとして表示されているアイコンの種類を見ることで、各ノードがどの種類のプログラム要素に対応づけられているかを一目で判断することが可能となる。
ツリー生成手段1bは、プログラムツリーに設定したいプログラム要素の親ノードとなるノードに対して、設定したいプログラム要素を子ノードとして設定する旨の操作を行うと、親ノードの一段下位に子ノードを形成し、親子ノード間の接続関係を設定する。
そして、子ノードとして設定されるプログラム要素の種類に応じてノード記憶手段1aからアイコンを取得し、表示手段3に表示する。また、必要であれば、プログラム要素の属性情報をノードに関連づけて受け付け、記憶する。
これを繰り返すことによってプログラム全体を表すノードを頂点とするツリー構造が形成され、このプログラムツリーを表示手段3に表示することによって、プログラム全体のプログラム要素の関係が一目でわかるようになる。
外部プログラム設定手段1cは、ツリー生成手段1bからツリー生成手段1bによって生成されたプログラムツリーを受け取り、プログラムツリーの所望の位置にデータフローに作り替えるメリットがないプログラム要素である外部プログラムを設定する。
具体的には、外部プログラム設定手段1cは、外部プログラムの親ノードとなるノードに対して、設定したいプログラム要素を子ノードとして設定する旨の操作を行うと、親ノードの一段下位に子ノードを形成し、親子ノード間の接続関係を設定する。
そして、子ノードとして設定されるプログラム要素の種類に応じてノード記憶手段1aからアイコンを取得し、表示手段3に表示する。また、必要であれば、外部プログラムの属性情報をノードに関連づけて受け付け、記憶する。
このとき、ノード記憶手段1aには、データフローがある部分プログラムのコンパイル単位を示すアイコンとは別に、データフローに作り替えるメリットがない部分プログラムのコンパイル単位を示すアイコンが記憶されている。
これにより、ツリー生成手段1bによって生成されたプログラムツリーに対して、外部プログラムに対応するノードを設定することができるので、データフローを持つプログラム要素と、データフローを持たないプログラム要素を構成要素に含むプログラムのプログラム要素間の階層構造を見ることが可能となる。
なお、外部プログラム設定手段1cがツリー生成手段1bからプログラムツリーを取得し、そのプログラムツリーに対して外部プログラムに対応するノードを設定する旨の説明をしたが、外部プログラムに対応するノードを設定した後に、外部プログラムに対応するノードが設定されたプログラムツリーをツリー生成手段1bが取得し、データフローがあるプログラム要素をさらに設定するなど、外部プログラム設定手段1cとツリー生成手段1bが交互にノードの追加を行ってもよい。
次に、本発明のプログラムツリー表示方法をプログラム生成装置に適用した場合の実施の形態について図面を参照して詳細に説明する。
図2は、本実施の形態に用いるプログラム生成装置のハードウェア構成例を示す図である。プログラム生成装置100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス106を介してRAM(Random Access Memory)102、ハードディスクドライブ(HDD:Hard Disk Drive)103、グラフィック処理装置104、および入力インタフェース105が接続されている。
RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。HDD103には、OSやアプリケーションプログラムが格納される。
グラフィック処理装置104には、モニタ13が接続されている。グラフィック処理装置104は、CPU101からの命令に従って、画像をモニタ13の画面に表示させる。入力インタフェース105には、キーボード12とマウス11とが接続されている。入力インタフェース105は、キーボード12やマウス11から送られてくる信号を、バス106を介してCPU101に送信する。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
次に、プログラム生成装置100が有する処理機能について説明する。
図3は、プログラム生成装置の処理機能を示す図である。図3に示すように、プログラム生成装置100は、図式プログラム管理部110、位置関係情報記憶部120、ライブラリ130、属性情報記憶部140、外部プログラム設定部150、およびプログラム自動生成部160を備えている。また、図式プログラム管理部110は、データフロー生成部111、およびプログラムツリー生成部112を備えている。
データフロー生成部111は、ユーザからデータフロー生成指示を受けると、指示信号に従ってプログラムを構成する機能単位の処理の流れを示すデータフローを生成する。具体的には、ユーザからの指示信号に基づいて、ライブラリ130からデータフローの構成要素である各種の単位ブロックを読み出し、各種単位ブロックを配列することによってデータフローを生成する。
そして、生成したデータフローの各種単位ブロック間の接続関係を位置関係情報記憶部120に記憶する。また、機能単位や各種単位ブロックに設定された属性情報を属性情報記憶部140に記憶する。
プログラムツリー生成部112は、ユーザからプログラムツリー指示を受けると、指示信号に従ってプログラムのプログラム要素をノードとしてツリー状に表したプログラムツリーを生成する。具体的には、ユーザからの指示信号に基づいて、ライブラリ130からプログラムツリーのノードアイコンを読み出し、指示された順番に各種アイコンを配列することによってプログラムツリーを生成する。
そして、生成したプログラムツリーの各種ノード間の接続関係を位置関係情報記憶部120に記憶する。また、各種ノードに設定された属性情報を属性情報記憶部140に記憶する。
位置関係情報記憶部120は、データフローの各構成要素の位置関係を記憶する。また、プログラムツリーの各ノードの位置関係を記憶する。
ライブラリ130には、データフロー生成部111がデータフローを生成するときに必要となるすべての機能単位に関する情報が記憶されている。また、プログラムツリー生成部112がプログラムツリーを生成するときに必要となるすべてのノードのアイコンが記憶されている。なお、すべての機能単位に関する情報とは、図形の種類、名称、機能単位が必要とするパラメータの属性、および機能単位が機能を実現するためのアルゴリズムである。
属性情報記憶部140は、機能単位が必要とする属性の属性情報を記憶している。
外部プログラム設定部150は、ユーザから外部プログラム設定指示を受けると、指示信号に従ってプログラムツリーに対して外部プログラムを設定する。具体的には、ユーザからの指示信号に基づいて、ライブラリ130からプログラムツリーに設定する外部プログラムを読み出し、プログラムツリーの指示された場所に外部プログラムを設定する。この外部プログラムは、ユーザが追加したものであってもよい。
プログラム自動生成部160は、データフロー、外部プログラム、およびデータフローと外部プログラムの属性情報からプログラムを生成する。具体的には、データフロー生成部111が生成したデータフローを、位置関係情報記憶部120に記憶されている位置関係情報と、属性情報記憶部140に記憶されている属性情報とともに取得し、取得したすべての情報からデータフローに対応するプログラム要素を生成する。
また、ライブラリ130から外部プログラムを取得する。そして、データフローから生成したプログラム要素と、外部プログラムをリンカで結合することによってプログラムを生成する。
以上のような機能を有しているプログラム生成装置100により、以下の処理が行われる。
図4は、プログラム生成装置100によるプログラムを生成する処理の手順を示すフローチャートである。以下、図4に示す処理をステップ番号に沿って説明する。
〔ステップS11〕プログラムツリー生成部112は、ユーザからマウス11もしくはキーボード12を介してプログラムツリーを生成するようにプログラムツリー生成指示を受け付ける。
〔ステップS12〕プログラムツリー生成部112は、プログラムツリー生成指示に基づいてプログラムツリーを生成する。
〔ステップS13〕図式プログラム管理部110は、データフローを持つプログラム要素に関係をツリー状に表したプログラムツリーの生成が完了したか否かを判断する。プログラムツリーの生成が完了したと判断した場合には、処理をステップS14へ進め、完了していないと判断した場合には、処理をステップS11へ進める。
〔ステップS14〕データフロー生成部111は、ユーザからマウス11もしくはキーボード12を介してデータフローを生成するようにデータフロー生成指示を受け付ける。
〔ステップS15〕データフロー生成部111は、データフロー生成指示に基づいてデータフローを生成する。
〔ステップS16〕図式プログラム管理部110は、プログラムを生成するのに必要なデータフローの生成が完了したか否かを判断する。データフローの生成が完了したと判断した場合には、処理をステップS17へ進め、完了していないと判断した場合には、処理をステップS14へ進める。
〔ステップS17〕外部プログラム設定部150は、ユーザからマウス11もしくはキーボード12を介して外部プログラムをプログラムツリー生成部112が生成したプログラムツリーに対して設定するように外部プログラム設定指示を受け付ける。
〔ステップS18〕外部プログラム設定部150は、外部プログラム設定指示に基づいて外部プログラムをプログラムツリー生成部112が生成したプログラムツリーに設定する。
〔ステップS19〕プログラム自動生成部160は、ユーザからマウス11もしくはキーボード12を介して、データフロー生成部111が生成したデータフローと外部プログラムからプログラムを自動生成するようにプログラム自動生成指示を受け付ける。
〔ステップS20〕プログラム自動生成部160は、データフロー生成部111からデータフローを受け取る。そのとき、データフローとともに、データフローに関連づけられている属性情報を受け取る。そして、データフローからプログラム要素を生成する。たとえば、データフローからC言語形式のソースコードを生成する。そして、データフローから生成したソースコードをコンパイルし、外部プログラムとリンカやリンケージ・エディタと呼ばれるツールを用いて結合することによって所望のプログラムを生成する。なお、この場合、外部プログラムがC言語形式のときには、外部プログラムもコンパイルする必要がある。
なお、上記ステップS11からステップS13までの処理をプログラムツリー生成処理と呼び、上記ステップS14からステップS16までの処理をデータフロー生成処理と呼び、上記ステップS17、18の処理を外部プログラム設定処理と呼ぶものとする。
上記図4のフローチャートで示した処理の順番は、あくまで一例であり、たとえば、データフローを生成している途中に、再度プログラムツリーを生成したくなったような場合には、データフロー生成処理の後に再度プログラムツリー生成処理を行ってもよい。
また、外部プログラムをプログラムツリーに設定した後で、さらにプログラムツリーにノードを追加したくなったような場合には、外部プログラム設定処理の後に再度プログラムツリー生成処理を行ってもよい。
次に、プログラム生成装置100がモニタ13に表示する画面表示例について説明する。
図5は、プログラムを自動生成するときの画面表示例を示す図である。図5に示すように、画面表示例200には、プログラムツリー表示部210とデータフロー表示部220を備えている。
プログラムツリー表示部210には、プログラム全体を示すノード211、データフローを持つプログラム要素がコンパイル単位であることを示すノード212、および外部プログラムのコンパイル単位であることを示すノード213が表示されている。本実施の形態においては、コンパイル単位を分離可能なソフトウェア部品であるモジュールと捉える。
プログラムツリー表示部210では、インバータ制御処理を行うプログラムのプログラム要素の階層構造を示しており、インバータ制御のプログラムは、入力制御、故障検出、および電源同期のコンパイル単位から構成されていることを示している。
ノード211の右に「インバータ制御」と表示されている文字211aは、ノード211がインバータ制御のプログラム全体を表すノードであることを示している。また、ノード212の右に「入力制御」と表示されている文字212aは、ノード212が入力制御の処理を行うモジュールを表すノードであり、ノード213の右に「電源同期」と表示されている文字213aは、ノード213が電源同期の処理を行う外部プログラムを表すノードであることを示している。
このように、各ノードの右側にノードの内容を表す文字を表示することにより、各ノードがどのような機能のプログラム要素と対応づけられているかを一目で判断することが可能となる。
ノード211の右側に表示されている文字211aは、ノード211に関連づけられており、プログラム自動生成部160によって最終的に生成されるプログラムのファイル名として設定される。
また、ノード212の右側に表示されている文字212aは、ノード212に関連づけられており、プログラム自動生成部160によってモジュールから生成されるプログラムのファイル名として設定される。
ただし、このようにノードに対して文字を関連づけると、使用するCコンパイラなどのツールによっては、データを受け付けられない場合がある。たとえば、日本語を表すための2バイト系の文字が使えないときには、ノードに関連づけて設定された文字に対してさらに関連づけたファイル名を別途設定する。このような属性情報は、属性情報記憶部140に格納される。
また、これらのノード211、212には、プログラムを生成するときに用いられる属性情報が関連づけられている。これらのノード211、212の右に表示される文字211a、212aを含めた属性情報は、たとえば、対応するノードから属性情報を入力するための入力窓を呼びだし、その入力窓に属性情報を入力することによって行う。以下に、ノードに関連づけて記憶する属性情報を入力するための入力窓の一例を説明する。
図6は、ノードに関連づけて記憶する属性情報を入力するための入力窓の一例を示す図である。図6に示すように、入力窓300は、たとえば、入力制御のモジュールを表すノード212を右クリックして、ノード212に関連づけられている入力窓を呼び出したものであり、入力欄310、入力欄の説明320、入力を確定する入力ボタン330、および入力を取り消す取消ボタン340を備えている。
入力窓300は、コンパイル単位の名称を入力する入力欄311と、生成C言語プログラム名を入力する入力欄312が表示されている。入力欄311に入力された文字列は、入力ボタン330が選択されることにより入力が確定されると、コンパイル単位の名称として、ノード212に関連づけて属性情報記憶部140に記憶される。そして、プログラムツリー表示部210のノード212の右には、入力欄311から入力された文字列が表示される。
また、入力欄312に入力された文字列は、入力ボタン330が選択されることにより入力が確定されると、ノード212に関連づけられているモジュールが、プログラム自動生成部160により生成されるC言語形式のプログラムのプログラム名として設定されるために、ノード212に関連づけて属性情報記憶部140に記憶される。
次に、プログラムツリーとして、コンパイル単位内の機能単位をも表示するときの表示例を示す。
図7は、コンパイル単位内の機能単位をも表示する画面表示例を示す図である。図7に示すように、画面表示例201は、データフロー表示部220とプログラムツリー表示部230を備えている。
プログラムツリー表示部230には、プログラム全体を示すノード211、データフローを持つプログラム要素がコンパイル単位であることを示すノード212、外部プログラムのコンパイル単位であることを示すノード213、および機能単位を示すノード214、215が表示されている。
ところで、電流制御の機能単位は、入力制御のコンパイル単位に属するものである。そこで、その従属関係を明確にするために、電流制御の機能単位を表すノード214は、入力制御のコンパイル単位を表すノード212の下位に従属するように表示している。また、コンパイル単位は、機能単位を入れる器のように考えるため、直接コンパイル単位に属する処理機能というのは存在せず、必ず処理機能は機能単位に属する。
また、機能単位の中には、さらに細かな機能単位が含まれていることがある。これは、構造化プログラミングの考え方におけるプログラムの構造化に伴う機能の詳細分割に相当する考え方である。
プログラムツリー表示部230に表示されているプログラムツリー上においては、その様子は電流制御の機能単位を表すノード214と、電流指令演算の機能単位を表すノード215の関係において示している。
つまり、電流指令演算の機能単位は、電流制御の機能単位に属する部分機能であり、お互いの機能単位同士の従属関係の視認性を向上するために、ノード215をノード214の下位に従属するように表示する。
このことは、細分化され、下位の機能単位においても同様に起こりうることであり、その場合には、再帰的に下位の部分機能単位を表すノードを、属する上位の機能単位に従属するように表示する。
機能単位の実装の形は、C言語では関数と呼ばれ、他のプログラミング言語では、サブルーチン、プロシージャなどと呼ばれていることもある副プログラムに相当するものである。
関数には、関数名、引数リスト、および返却値などの属性があるが、機能単位に関連づけられたプログラムはデータフローで表示しているため、これらの属性は図に記述されているものとすることができる。なお、関数名などの属性を別個に設定したい場合には、図6に示したような入力窓から属性を入力し、設定できるようにしてもよい。
ところで、コンパイル単位は、コンパイルした結果として1つのファイルを出力するものである。より具体的には、C言語形式のプログラムにおいて、コンパイル単位は拡張子が通常「c」で表されるC言語のソースファイルであり、これをコンパイルすることにより、拡張子が通常「o」や「obj」で表されるオブジェクトファイルが生成される。
この出力ファイルは、直接CPUが解釈して実行できるバイナリファイルとなっている場合もありうるが、バイナリファイルで出力すると中・大規模プログラムの製作や、プログラムの再利用が容易でないため、通常はコンパイルが終了した段階ではメモリ上での絶対位置が決定されておらず、モジュールの先頭からの相対位置でアドレスが記述されているようなリロケータブル・オブジェクトが生成される。
このようなリロケータブル・オブジェクトを1つ以上必要な分だけ製作してから、実行環境のメモリ環境に合致したリンク用のメモリマップコマンドなどの情報を与える。そして、リンカもしくはリンゲージ・エディタと呼ばれるツールでこれらを結合して、最終的な実行可能な形式のプログラムとする。
ところで、ノード213に関連づけられている外部プログラムとは、データフローを持たないのでデータフロー表示部220には表示できない形式の部分プログラムである。たとえば、あらかじめ完全な形でC言語のプログラムが用意されているときにおける用意されているプログラムを指す。
たとえば、このC言語ファイルには、機能単位として同期演算機能と、同期異常検出機能とが関数の形で実装されているものとすると、それらの関数名や引数リストや返却値の型をプログラムツリー表示部230に表示されているプログラムツリー上の機能単位の属性として記憶すれば、データフロー表示部220により表示できる形式のモジュールに属する機能単位と同様に扱うことができる。
つまり、データフロー内で他のモジュールの機能単位を呼び出すようなプログラムを書いた場合には、プログラムツリーの機能単位に関連づけて属性である関数名や、引数リストや、返却値の型を記憶しているので、データフロー同士でプログラムを接続してプログラムを記述することができる。
それと同じように、外部プログラムに属する機能単位の属性もノードに関連づけて記憶することにより、データフローから同じようにその機能単位を呼び出すことが可能となる。
ただし、外部プログラムの機能単位の属性は、プログラムツリーにノードを設定したときには関連づけができていないので、別途上述したような入力窓から入力することによって属性をノードに関連づけて記憶させるか、C言語パーサを用いて情報を拾い出し、ノードに関連づけて記憶させる必要がある。
プログラムツリー表示部230に表示されているプログラムツリーとして表されたプログラムは、3つのコンパイル単位を有しているが、コンパイル後にリンケージ・エディタを使って最終的な実行可能な形式のプログラム製作が目的であるから、リンケージ・エディタで結合する単位を表す概念を設けておくと有用である。
そこで、コンパイル単位を1つ以上含み、各コンパイル単位から生成される出力を結合してできるロードモジュールに対応する単位をプロジェクトと定義する。プロジェクトは、プログラムツリー表示部230に表示されているプログラムツリー上にノード211として示される記号で表している。
以上のことから、プログラムツリー表示部230に表示されたプログラムツリーは、インバータ制御のプロジェクトを構成するモジュールに分けてツリー状に図式化したものであるといえる。
上記のとおり、プログラム生成装置100によれば、画面表示例にプログラムツリーが表示され、プログラムの構造を簡易に読み取ることが可能となるので、構造化プログラミングによるプログラムの製作が容易になる。
ユーザは、プログラムツリー表示部210に表示されるプログラムツリーを見ることによって、プログラム生成装置100から生成されるプログラムのプログラム要素間の階層構造を見ることが可能となる。
また、データフロー表示部220に表示されるデータフローは、プログラムツリー表示部210に表示されるプログラムツリーのノードに関連づけられており、プログラムツリーのどのノードに関連づけられているデータフローを見ているかも容易に知ることが可能である。
また、データフローがプログラムツリーのノードに関連づけられているので、ノードごとのデータフローをデータフロー表示部220に表示させることによって、プログラムツリーのノードごとにプログラミングすることができる。
また、データフロー表示部220に表示できない部分プログラムをもプログラムツリー表示部230に表示できるようにすることによって、たとえば、ノード212に関連づけられている入力制御モジュールと、ノード213に関連づけられている電源同期プログラムという形式の異なるプログラムを1つのプログラムツリー上に表し、同様の操作によって扱うことができるようになる。
なお、外部プログラムのプログラムへの取り込み方は2パターン考えられる。外部プログラムのコンパイル単位の実体をプログラムの一部として取り込む場合と、外部プログラムのコンパイル単位の実体をプログラムの一部として取り込まずに、属性情報のみを登録する場合である。
上記2パターンで、表示の異なるアイコンを用いることによりそれぞれのパターンを区別してもよい。以下に、プログラムツリー表示部210もしくは230に示した外部プログラムのノードとは異なるアイコンが表示されているプログラムツリーを示す。
図8は、プログラムツリー表示部の表示例を示す図である。図8に示すように、プログラムツリー表示部231は、プログラム全体を示すノード211、データフローを持つプログラム要素がコンパイル単位であることを示すノード212、機能単位を示すノード214、215、および外部プログラムのコンパイル単位であることを示すノード216が表示されている。
ノード216は、プログラムツリー表示部210、およびプログラムツリー表示部230で示したプログラムツリーのノード213とは区別するためにノードの周りが太線になっている。
上述した、外部プログラムの取り込み方の2パターンを第1の方法、第2の方法とすると、第1の方法は、図式プログラムのデータを保存するディスク領域に外部プログラムもコピーし、第2の方法は、ファイルのコピーは行われない。
また、コンパイル時には、第2の方法の場合には、プログラム生成装置100で、データフローを持たない形式のコンパイル単位に属する機能単位の情報を用いて、プログラムツリーが書かれていた場合には、プログラムツリーからC言語形式のプログラムを生成するときに外部プログラムの機能単位の情報を用いて生成するだけであるが、第1の方法の場合には、それに加え、プログラムツリーの出力結果と同列に、登録したC言語ファイルもコピーする動作が付け加えられる。
なお、外部プログラムとして、あらかじめ用意されているC言語形式のファイルを用いる旨の説明をしたが、外部プログラムはあらかじめ用意されているファイルだけに限らない。たとえば、プログラム生成装置100に直接入力されるC言語形式のプログラムを用いてもよい。また、外部プログラム設定部150は、プログラム自動生成部160がデータフローから生成したC言語ファイルを直接受け取り、受け取ったファイルを外部プログラムとしてプログラムツリーに設定してもよい。
また、外部プログラムに属する機能単位を示すノードは、データフローを持つモジュールの機能単位を示すノードと一緒のアイコンを使い、その上位にあるコンパイル単位のノードのアイコンのみ変更することによって区別する旨の説明をしたが、機能単位のノードのアイコンを変更してもよい。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、プログラム生成装置が有すべき機能の処理内容を記述したプログラム生成プログラムが提供される。そのプログラム生成プログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラム生成プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、HDD、フレキシブルディスク、磁気テープなどがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録装置には、MO(Magneto Optical disk)などがある。
プログラム生成プログラムを流通させる場合には、たとえば、そのプログラム生成プログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラム生成プログラムを転送することもできる。
プログラム生成プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラム生成プログラムもしくはサーバコンピュータから転送されたプログラム生成プログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラム生成プログラムを読み取り、プログラム生成プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラム生成プログラムを読み取り、そのプログラム生成プログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラム生成プログラムが転送されるごとに、逐次、受け取ったプログラム生成プログラムに従った処理を実行することもできる。
なお、本発明は、上述の実施の形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更を加えることができる。
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
本実施の形態に適用される発明の概念図である。 本実施の形態に用いるプログラム生成装置のハードウェア構成例を示す図である。 プログラム生成装置の処理機能を示す図である。 プログラム生成装置によるプログラムを生成する処理の手順を示すフローチャートである。 プログラムを自動生成するときの画面表示例を示す図である。 ノードに関連づけて記憶する属性情報を入力するための入力窓の一例を示す図である。 コンパイル単位内の機能単位をも表示する画面表示例を示す図である。 プログラムツリー表示部の表示例を示す図である。
符号の説明
1 コンピュータ
1a ノード記憶手段
1b ツリー生成手段
1c 外部プログラム設定手段
2 入力手段
3 表示手段

Claims (5)

  1. プログラムの構成要素であるプログラム要素を結合することによって前記プログラムを生成するプログラム生成装置において、
    前記プログラム要素の種類に応じて表示の異なるノードのアイコンが記憶されているノード記憶手段と、
    前記ノードの属性として少なくとも前記ノードに関連づけたファイル名が記憶されている属性記憶手段と、
    処理の流れを表すデータフローを有する前記プログラム要素、もしくは下位に処理の流れを表すデータフローを有する前記プログラム要素を有する前記プログラム要素に対応するノードの前記アイコンを前記ノード記憶手段から読み出し、ツリー状に接続することで、前記プログラム要素間の階層構造を表すプログラムツリーを生成するツリー生成手段と、
    前記ツリー生成手段が生成した前記プログラムツリーに対して、前記データフローを持たない前記プログラム要素である外部プログラムに対応した前記アイコンを前記ノード記憶手段から読み出し、前記ノードとして設定する外部プログラム設定手段と、
    前記データフローと、前記外部プログラムとから前記プログラムを生成するプログラム生成手段と、
    を有し、前記属性記憶手段に記憶されたファイル名は、前記プログラム生成手段が前記ノードに対応するプログラム要素からプログラムを生成する際のプログラム名として設定されることを特徴とするプログラム生成装置。
  2. 前記プログラム生成手段は、前記外部プログラムの実体を前記プログラムに取り込み、前記プログラムを生成することを特徴とする請求項1記載のプログラム生成装置。
  3. 前記プログラム生成手段は、前記外部プログラムの実体を前記プログラムに取り込まず、前記外部プログラムの属性を取り込んで前記プログラムを生成することを特徴とする請求項1記載のプログラム生成装置。
  4. 前記プログラム要素には、プロジェクトと、コンパイル単位と、機能単位があることを特徴とする請求項1記載のプログラム生成装置。
  5. プログラムの構成要素であるプログラム要素を結合することによって前記プログラムを生成するプログラム生成プログラムにおいて、
    コンピュータを、
    前記プログラム要素の種類に応じて表示の異なるノードのアイコンをノード記憶手段に記憶させ、前記ノードの属性として少なくとも前記ノードに関連づけたファイル名を属性記憶手段に記憶させる記憶手段、
    処理の流れを表すデータフローを有する前記プログラム要素、もしくは下位に処理の流れを表すデータフローを有する前記プログラム要素を有する前記プログラム要素に対応するノードの前記アイコンを前記ノード記憶手段から読み出し、ツリー状に接続することで、前記プログラム要素間の階層構造を表すプログラムツリーを生成するツリー生成手段、
    前記ツリー生成手段が生成した前記プログラムツリーに対して、前記データフローを持たない前記プログラム要素である外部プログラムに対応した前記アイコンを前記ノード記憶手段から読み出し、前記ノードとして設定する外部プログラム設定手段、
    前記データフローと、前記外部プログラムとから前記プログラムを生成するとともに前記属性記憶手段に記憶されたファイル名を前記ノードに対応するプログラム要素からプログラムを生成する際のプログラム名として設定するプログラム生成手段、
    として機能させることを特徴とするプログラム生成プログラム。
JP2006001182A 2006-01-06 2006-01-06 プログラム生成装置およびプログラム生成プログラム Active JP4848772B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006001182A JP4848772B2 (ja) 2006-01-06 2006-01-06 プログラム生成装置およびプログラム生成プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006001182A JP4848772B2 (ja) 2006-01-06 2006-01-06 プログラム生成装置およびプログラム生成プログラム

Publications (2)

Publication Number Publication Date
JP2007183785A JP2007183785A (ja) 2007-07-19
JP4848772B2 true JP4848772B2 (ja) 2011-12-28

Family

ID=38339821

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006001182A Active JP4848772B2 (ja) 2006-01-06 2006-01-06 プログラム生成装置およびプログラム生成プログラム

Country Status (1)

Country Link
JP (1) JP4848772B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5125347B2 (ja) * 2007-09-20 2013-01-23 富士電機株式会社 ソフトウェア開発支援装置
KR101585048B1 (ko) * 2014-04-15 2016-01-13 주식회사 셈웨어 다이어그램 기반 알고리즘 시뮬레이션 시스템
KR101602658B1 (ko) * 2014-04-15 2016-03-21 주식회사 셈웨어 알고리즘 시뮬레이션 시스템을 위한 다이어그램 자동 정렬 모듈

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04268635A (ja) * 1991-02-25 1992-09-24 Nec Corp 木構造表示管理方法
JP2000112736A (ja) * 1998-10-01 2000-04-21 Seiko Epson Corp プログラム作成装置
JP2000311007A (ja) * 1999-04-27 2000-11-07 Mazda Motor Corp プログラム作成支援装置及びコンピュータ読み取り可能な記憶媒体
JP2002189507A (ja) * 2000-12-19 2002-07-05 Omron Corp コントローラ
JP2003067185A (ja) * 2001-08-14 2003-03-07 Internatl Business Mach Corp <Ibm> アプリケーション編集装置、データ処理方法及びプログラム
JP2003076545A (ja) * 2001-08-31 2003-03-14 Mitsubishi Electric Corp プログラム開発支援装置

Also Published As

Publication number Publication date
JP2007183785A (ja) 2007-07-19

Similar Documents

Publication Publication Date Title
Grönninger et al. Textbased modeling
JP4195479B2 (ja) インクリメンタル生成システム
US8566782B2 (en) Generating application data editors
US20090326694A1 (en) System and method for developing automated templates for knowledge capture
Mayer et al. Cross-language code analysis and refactoring
EP1292887A1 (en) Methods and systems for generating source code for object-oriented elements
García Frey et al. UsiComp: an extensible model-driven composer
JP5147240B2 (ja) リバーシブルなデザイン・ツリーの変換のための方法とシステム
Ding et al. Focus: A light-weight, incremental approach to software architecture recovery and evolution
US20110126171A1 (en) Dynamic native editor code view facade
JP4848772B2 (ja) プログラム生成装置およびプログラム生成プログラム
JP3577400B2 (ja) システム設計装置及びデータウエアハウス設計システム
JP2007011507A (ja) プログラムツリーの表示方法、およびプログラム生成システム
Pietsch et al. Delta-oriented development of model-based software product lines with DeltaEcore and SiPL: A comparison
Djukić et al. Handling complex representations in visual modeling tools for MDSD/DSM by means of code generator languages
Taentzer et al. Generating domain-specific model editors with complex editing commands
Bendisposto et al. Developing Camille, a text editor for Rodin
Vitzthum SSIML/AR: A visual language for the abstract specification of augmented reality user interfaces
Anquetil et al. Modular Moose: A new generation software reverse engineering environment
CN112181483B (zh) 等离子体控制系统软件开发平台及方法
Beaudoux et al. Using Model Driven Engineering technologies for building authoring applications
Schröpfer et al. A Framework for Projectional Multi-variant Model Editors.
JPH0683594A (ja) ウィズィウィグ式エディターとコンパイラーとを統合したグラフィカル・ユーザ・インターフェース
JP4670724B2 (ja) ソースコード生成装置、ソースコード生成方法およびソースコード生成プログラム
Pradhan User interface test automation and its challenges in an industrial scenario

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081114

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110622

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110628

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110829

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110920

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111003

R150 Certificate of patent or registration of utility model

Ref document number: 4848772

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141028

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250