JP2009193181A - ソフトウェアの開発支援システム、支援方法およびこの方法のプログラム - Google Patents
ソフトウェアの開発支援システム、支援方法およびこの方法のプログラム Download PDFInfo
- Publication number
- JP2009193181A JP2009193181A JP2008031191A JP2008031191A JP2009193181A JP 2009193181 A JP2009193181 A JP 2009193181A JP 2008031191 A JP2008031191 A JP 2008031191A JP 2008031191 A JP2008031191 A JP 2008031191A JP 2009193181 A JP2009193181 A JP 2009193181A
- Authority
- JP
- Japan
- Prior art keywords
- block
- variable
- information
- block diagram
- connection
- 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.)
- Pending
Links
Abstract
【課題】システム組み込みソフトウェアの設計をユーザ定義ブロックの接続で行い、ブロック図からのソースコードの作成を確実、容易にする。
【解決手段】ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義するユーザ定義ブロック設定装置10は、ブロック図で使用する変数情報や関数情報の宣言部と中間コードを組み合わせて当該ブロックのソースコードを生成する。ブロックのコード片で使用する変数を当該ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する。ブロックに設定するプロパティ値でブロックの出力を変化させる。
この定義されたブロック図に対応させたプログラムを自動生成するプログラム自動生成装置を備える。
【選択図】図1
【解決手段】ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義するユーザ定義ブロック設定装置10は、ブロック図で使用する変数情報や関数情報の宣言部と中間コードを組み合わせて当該ブロックのソースコードを生成する。ブロックのコード片で使用する変数を当該ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する。ブロックに設定するプロパティ値でブロックの出力を変化させる。
この定義されたブロック図に対応させたプログラムを自動生成するプログラム自動生成装置を備える。
【選択図】図1
Description
本発明は、ソフトウェアの開発支援システムに係り、特にユーザ定義ブロックとして記述する情報処理機能に対応させたプログラムを自動生成する装置および方法に関する。
監視制御や計測制御などのコンピュータ処理システムに組み込むアプリケーション・ソフトウェアの開発ではUMLで設計図の記述を行うことが多い。このUMLの設計図のうち、クラス図などからソースコードを出力し、残りのロジックに関する部分の実装を手作業で行う(例えば、非特許文献1参照)。
一方、組み込みソフトウェアの設計では、制御演算を司る部分の設計図については、従来からブロック図が用いられている。ブロック図の要素としてはブロックと線があり(図2参照)、これらが図面上で接続されることで、ソフトウェアとして実現したい内容を表現する。この設計図を元にして実装を行うにあたっては、実装者が設計図から設計情報を読み取りながら、手作業で実装が行われている。また、MATLAB/Simulinkに代表されるようなブロック図作成のためのアプリケーションでは、ブロック図を元にソースコードを出力するものもある(例えば、非特許文献2参照)。
明電時報、2006年9・10月、通巻310号、No.5「ソフトウェア開発総合支援システムにおける仕様作成支援機能」 MATLAB/Simulink(http://www.cybernet.co.jp/matlab/products/product_listing/simulink/)
明電時報、2006年9・10月、通巻310号、No.5「ソフトウェア開発総合支援システムにおける仕様作成支援機能」 MATLAB/Simulink(http://www.cybernet.co.jp/matlab/products/product_listing/simulink/)
MATLAB/Simulinkに代表されるような従来のブロック図作成のためのアプリケーションでは、ブロック図の配線情報を元にソースコードを出力する。しかし、組み込みソフトウェアでは、少ないリソースで所望のプログラムとして実現しなければならないため、出力されたソースコードそのものでは組み込みソフトウェアとして利用するのは困難であることが多い。
例えば、一般的なブロック図を用いて出力されたソースコードには、変数(グローバル変数、ローカル変数など)やレジスタなどを指定するような内容は含まれていない。そのため、ブロック図を元に実装を行う際には、手作業によりコーディング作業が行われることになる。これにより、実装時間が多くかかる。また、手作業によるコーディングではブロック図と実装が乖離しやすくなる。
また、ブロック図から出力されるソースコードはC言語であることがほとんどであり、他のプログラム言語やC言語でも特殊なものに対応するには、出力されたコードのすべてに対して実装者が変更の確認をする必要がある。
本発明の目的は、組み込みソフトウェアの設計として、ユーザ定義ブロックの接続をブロック図上で行い、ブロック図からのソースコードの作成を確実、容易にしたソフトウェアの開発支援システム、支援方法およびプログラムを提供することにある。
前記の課題を解決するため、本発明は以下のシステム、方法およびプログラムを特徴とする。
(システムの発明)
(1)ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援システムであって、
前記ブロックを定義するユーザ定義ブロック設定装置は、
ブロックなどを置くブロック図で使用する変数情報や関数情報の宣言部と中間コードを組み合わせて当該ブロックのソースコードを設定するコード片設定部と、
ブロックに設定されるコード片の中でCPUのレジスタの参照に置き換える構文を設定するレジスタ設定部と、
ブロックのコード片で使用する変数を当該ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する変数名自動生成部と、
ブロックに設定するプロパティ値でブロックの出力を変化させるプロパティ設定部と、
を備えたことを特徴とする。
(1)ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援システムであって、
前記ブロックを定義するユーザ定義ブロック設定装置は、
ブロックなどを置くブロック図で使用する変数情報や関数情報の宣言部と中間コードを組み合わせて当該ブロックのソースコードを設定するコード片設定部と、
ブロックに設定されるコード片の中でCPUのレジスタの参照に置き換える構文を設定するレジスタ設定部と、
ブロックのコード片で使用する変数を当該ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する変数名自動生成部と、
ブロックに設定するプロパティ値でブロックの出力を変化させるプロパティ設定部と、
を備えたことを特徴とする。
(2)ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援システムであって、
前記プログラムを自動生成するプログラム自動生成装置は、
定義されたブロックをブロック図に関連付けて表示するブロック−ブロック図関連情報設定部と、
前記ブロック間の結線を行い、さらに、この結線に対して割り当てた変数を一覧情報として設定し、接続元、接続先、割り当て変数を結線情報として設定する変数−結線関連情報設定部と、
前記ブロックと結線および変数より、コード片から中間コードを経由してソースコード(プログラム)を生成するプログラム自動生成部と、
を備えたことを特徴とする。
前記プログラムを自動生成するプログラム自動生成装置は、
定義されたブロックをブロック図に関連付けて表示するブロック−ブロック図関連情報設定部と、
前記ブロック間の結線を行い、さらに、この結線に対して割り当てた変数を一覧情報として設定し、接続元、接続先、割り当て変数を結線情報として設定する変数−結線関連情報設定部と、
前記ブロックと結線および変数より、コード片から中間コードを経由してソースコード(プログラム)を生成するプログラム自動生成部と、
を備えたことを特徴とする。
(3)前記プログラム自動生成部は、変数の設定を行った後で、変数と線を関連付け、この関連つけでソースコード(プログラム)を生成することを特徴とする。
(4)前記ブロック−ブロック図関連情報、変数−結線関連情報またはコード片に任意の文字列のコメントを入力するコメント設定部を備えたことを特徴とする。
(5)前記ブロック−ブロック図関連情報、変数−結線関連情報はファイルなどに保存しておくブロック図情報保存部を備えたことを特徴とする。
(6)前記ファイルなどに保存しておくブロック−ブロック図関連情報、変数−結線関連情報をプログラムの自動生成に際して変数一覧情報、結線情報、ブロック図接続情報に戻すためのブロック図情報読込部を備えたことを特徴とする。
(方法の発明)
(7)ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援方法であって、
前記ブロック図を定義するユーザ定義ブロック設定装置は、
ブロックなどを置くブロック図で使用する変数情報や関数情報の宣言部と中間コードを組み合わせて当該ブロックのソースコードを設定するコード片設定ステップと、
ブロックに設定されるコード片の中でCPUのレジスタの参照に置き換える構文を設定するレジスタ設定ステップと、
ブロックのコード片で使用する変数を当該ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する変数名自動生成ステップと、
ブロックに設定するプロパティ値でブロックの出力を変化させるプロパティ設定ステップと、
を備えたことを特徴とする。
(7)ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援方法であって、
前記ブロック図を定義するユーザ定義ブロック設定装置は、
ブロックなどを置くブロック図で使用する変数情報や関数情報の宣言部と中間コードを組み合わせて当該ブロックのソースコードを設定するコード片設定ステップと、
ブロックに設定されるコード片の中でCPUのレジスタの参照に置き換える構文を設定するレジスタ設定ステップと、
ブロックのコード片で使用する変数を当該ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する変数名自動生成ステップと、
ブロックに設定するプロパティ値でブロックの出力を変化させるプロパティ設定ステップと、
を備えたことを特徴とする。
(8)ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援方法であって、
前記プログラムを自動生成するプログラム自動生成装置は、
定義されたブロックをブロック図に関連付けて表示するブロック−ブロック図関連情報設定ステップと、
前記ブロック間の結線を行い、さらに、この結線に対して割り当てた変数を一覧情報として設定し、接続元、接続先、割り当て変数を結線情報として設定する変数−結線関連情報設定ステップと、
前記ブロックと結線および変数より、コード片から中間コードを経由してソースコード(プログラム)を生成するプログラム自動生成ステップと、
を備えたことを特徴とする。
前記プログラムを自動生成するプログラム自動生成装置は、
定義されたブロックをブロック図に関連付けて表示するブロック−ブロック図関連情報設定ステップと、
前記ブロック間の結線を行い、さらに、この結線に対して割り当てた変数を一覧情報として設定し、接続元、接続先、割り当て変数を結線情報として設定する変数−結線関連情報設定ステップと、
前記ブロックと結線および変数より、コード片から中間コードを経由してソースコード(プログラム)を生成するプログラム自動生成ステップと、
を備えたことを特徴とする。
(9)前記プログラム自動生成ステップは、変数の設定を行った後で、変数と線を関連付け、この関連つけでソースコード(プログラム)を生成することを特徴とする。
(10)前記ブロック−ブロック図関連情報、変数−結線関連情報またはコード片に任意の文字列のコメントを入力するコメント設定ステップを備えたことを特徴とする。
(11)前記ブロック−ブロック図関連情報、変数−結線関連情報はファイルなどに保存しておくブロック図情報保存ステップを備えたことを特徴とする。
(12)前記ファイルなどに保存しておくブロック−ブロック図関連情報、変数−結線関連情報をプログラムの自動生成に際して変数一覧情報、結線情報、ブロック図接続情報に戻すためのブロック図情報読込ステップを備えたことを特徴とする。
(プログラムの発明)
(13)上記(7)〜(12)に記載のソフトウェアの開発支援方法における処理ステップを、コンピュータで実行可能に構成したことを特徴とする。
(13)上記(7)〜(12)に記載のソフトウェアの開発支援方法における処理ステップを、コンピュータで実行可能に構成したことを特徴とする。
以上のとおり、本発明によれば、ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロック図として定義でき、この定義されたブロックに対応させたプログラムを自動生成できるようにしたため、組み込みソフトウェアの設計として、ユーザ定義ブロックの接続をブロック図上で行い、このブロック図からのソースコードの作成が確実、容易になる。
(実施形態1)
図1は、本実施形態を示すユーザ定義ブロック設定装置の構成図である。この装置は、ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義可能とし、これを「ユーザ定義ブロック」として効率よく作成できるようにする。なお、ここでは、対象となるプログラム言語はC言語を想定しているが、C言語以外のプログラム言語でも良い。また、このユーザ定義ブロックは、ブロック図上ではプログラム自動生成装置に固有の情報処理機能をブロックとして定義したものである基本ブロックと共通で扱えるものとして動作する。
図1は、本実施形態を示すユーザ定義ブロック設定装置の構成図である。この装置は、ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義可能とし、これを「ユーザ定義ブロック」として効率よく作成できるようにする。なお、ここでは、対象となるプログラム言語はC言語を想定しているが、C言語以外のプログラム言語でも良い。また、このユーザ定義ブロックは、ブロック図上ではプログラム自動生成装置に固有の情報処理機能をブロックとして定義したものである基本ブロックと共通で扱えるものとして動作する。
図1において、ユーザ定義ブロック設定装置10は、ユーザによって定義されたブロックのブロック名を設定するブロック名設定部11と、ブロックの端子に名前を設定する端子設定部12と、ブロックにコード片(ブロックに対応する部分的なソースコード)を設定するコード片設定部13と、ブロックのプロパティを設定するプロパティ設定部14と、ブロック名設定部・端子設定部・コード片設定部・プロパティ設定部で設定した内容を保持するブロック情報DB(データベース)15と、レジスタとレジスタ変数との割り当てを設定するレジスタ設定部16と、重複を回避した変数名を生成する変数名自動生成部17と、変数名自動生成した変数名をブロック情報DBに設定する変数名設定部18で構成する。このユーザ定義ブロック設定装置の外部入出力手段として、ブロック図およびブロックの設定情報を表示するブロック図情報出力部(デイスプレイ)20と、ブロックの情報を入力するブロック図情報入力部(マウス・キーボード)30を備える。
以下、「ユーザ定義ブロック」の作成手順を詳細に説明する。
(1)単純なブロックの定義
ここでは、ブロック、ブロック定義の方法、ブロックとソースコードとの関連付けについて説明する。
ここでは、ブロック、ブロック定義の方法、ブロックとソースコードとの関連付けについて説明する。
図2は単純なブロック図の定義例を示し、ブロックにはブロック名の設定と線の接続を行うことができる。ブロック図情報入力部30にて入力されたブロック名の設定はブロック設定部11で行い、ブロック図情報出力部20に表示される。ブロックと線とのつなぎ目の部分を端子と呼ぶ。図2では入力端子が2つ、出力端子が1つのブロックを表している。この入力端子の一方を「in1」、もう一方の入力端子を「in2」、出力端子を「out1」というように端子設定部12にて各端子にブロック図情報入力部30にて入力された名前をつけ、ブロック図情報出力部20に表示される。
また、コード片(ブロックに対応する部分的なソースコード)は単体ではプログラム、またはその一部として使用することはできない。使用する変数の情報(変数宣言)、所属する関数の情報(関数宣言、実装)などと組み合わせることで、コード片は中間コード(例えば、後に示すリスト5など)に変換する。関数や変数などの宣言部と中間コードを組み合わせることでソースコードとして使用する。ブロック図情報入力部30にて入力されたコード片はコード片設定部13にて設定を行い、ブロック図情報出力部20に表示される。
ブロックに関する情報であるブロック名、端子、コード片、プロパティ(プロパティについては後に説明する)はそれぞれ、ブロック名設定部11、端子設定部12、コード片設定部13、ブロパティ設定部14により設定され、これら情報はブロック情報DB(ファイル、メモリ上のデータなど)15に保存される。
例えば、図3の(a)に示す乗算ブロックを作成するときは、同図の(b)に示す情報設定を行う。この乗算ブロックのコード片では「$in1」というように、端子の名前に「$」が付いている。これは変数との置き換えを表しており、「in」に接続されている線の値(=変数)を代入するという意味で用いるための記号である。in1という端子に接続されている線には、このブロック以前に接続されている別のブロックの演算結果が入っており、その値はソースコード上では変数によって受け渡される。また、出力についても同様に、out1に接続されている線に乗算ブロックの演算結果を出力する(=変数に代入する)」という意味になる。
このように、ブロックに対して端子の名称とブロックに対応するコード片を設定することで、ユーザ定義ブロックとしてブロック図上で利用することができる。
例えば、図4のように乗算ブロックをブロック図上に置き、端子in1に変数VAR1を示す線を接続する。同様に、端子in2に変数VAR2、端子out1に変数RESを示す線を接続する。このときにコード片から変換された中間コードは図4の(b)のように、「RES=VAR1*VAR2;」となる。このリストは、$in1をVAR1に、$in2をVAR2に、out1をRESに置き換えることでコード片から中間コードヘの変換が完了する。
以上の手法により、ユーザ定義ブロックを定義することができる。また、ユーザ定義ブロックをブロック図上で使用することができる。
(2)変数を使用したブロックの定義
ここでは、レジスタの利用と、ブロック図からソースコードに変換したときに発生する変数名の重複について述べる。
ここでは、レジスタの利用と、ブロック図からソースコードに変換したときに発生する変数名の重複について述べる。
(2−1)レジスタの利用
ブロックに設定されるコード片の中でレジスタを参照する構文を設定する。これは図1のレジスタ設定部16にてCPU(中央演算処理装置)のレジスタとの関連付けを別途行うことにより、CPUのレジスタの参照に置き換える。同じレジスタを使用することで、他のブロックと変数を共用することができる。
ブロックに設定されるコード片の中でレジスタを参照する構文を設定する。これは図1のレジスタ設定部16にてCPU(中央演算処理装置)のレジスタとの関連付けを別途行うことにより、CPUのレジスタの参照に置き換える。同じレジスタを使用することで、他のブロックと変数を共用することができる。
例えば、図5の(a)に示すような加算ブロック(ADD3)の定義を考える。このブロックは入力端子in1〜in3のすべての値を足して出力端子out1に出力する。同図の(b)に示すリスト3にコード片を示す。リスト3にある$register1がレジスタ変数を表しており、$register1、$register2、…のように語尾の数字で個々のレジスタを区別する。
図6の(a)のように、ADD3ブロックをブロック図上に置き、端子in1に変数VAR1、端子in2に変数VAR2を、端子in3に変数VAR3を、端子out1に変数RESを示す線を接続する。また、$register1はレジスタ変数の宣言文に変換する。このときにコード片から変換された中間コードは図6の(b)に示すリスト4のようになる。
(2−2)変数名の重複
レジスタ変数の代わりに通常の変数を使用することもできる。これは関数内のローカル変数として使用する。各ブロックのコード片で変数を使用した場合には、変数名が重複することがある。このため、コード片を使用する際には変数名自動生成部17にて各ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する。変数名自動生成部17で生成した文字列を変数名として変数名設定部にて設定する。これにより変数名の重複を防ぎ、あるブロックで使用されている変数が他のブロックに影響を与えないようにする。
例えば、図7に示すリスト6(右)では、カウンタを用意して数字(0001)を生成し、変数名のあとに文字列として付加している(var_0001)。変数名自動生成の方法についてはこれ以外でもよい。
変数を使用する場合、図5のADD3ブロックのコード片は図7に示すリスト6の(左)のように変更することができる。また、変数名自動生成部により、コード片から変数名が生成された中間コードを出力した場合の例をリスト6の(右)に示す。
以上の手法により、コード片の中でレジスタを使用することができる。また、コード片の中で変数を使用することができる。さらに、変数名自動生成部が他のブロックで使用している変数名と重複しないような変数名を生成するため、コード片の中で変数を使用するときに、複数のブロックの間で変数名が重複しなくなる。
(3)ブロックのプロパティ
ここでは、ブロックに対してプロパティが定義できることと、ブロパティヘの設定値を変更することにより出力が変化することについて述べる。
ここでは、ブロックに対してプロパティが定義できることと、ブロパティヘの設定値を変更することにより出力が変化することについて述べる。
ブロックに設定する情報をプロパティと呼ぶ。プロパティには名前とそれに設定できる値の種類(型)を指定する必要がある。値の種類には文字列、数値、2値(真偽値)、選択(複数ある値の候補の中から1つを選ぶ)のいずれかを設定することができる。ブロック名、端子、コード片はブロパティには含まれない。ブロック図情報入力部30にて入力されたプロパティはプロパティ設定部14で設定を行い、ブロック図情報出力部20に表示される。
図8の(a)は加減算ブロックの定義とプロパティを示し、同図の(b)に示すリスト7には加減算ブロックのコード片を示している。この加減算ブロックにおいて、ブロパティはsign1、sign2の2つがあり、それぞれ真偽値を持つプロパティである。例えば、これらの値がtrueのときには符号は“+”、値がfalseのときには符号は“−”を出力するように設定する。プロパティを変更する際に、ブロック設定部14によりUI(ユーザインタフェース)を操作して変更するには、図9に示すそれぞれの型に対応したUIコンポーネントを使用する。例えば、文字列にはテキストボックスを、数値にはテキストボックスを、2値にはラジオボタンを、選択にはコンボボックスを使用する。
以下に、プロパティsign1の値を“+”から“−”に変更したときの中間コードの出力例を図10にリスト8、リスト9として示す。プロパティsign1,sign2を変更すれば、コード片を使用した場合の出力結果を変更することができる。
端子in1に変数VAR1、端子in2に変数VAR2、端子out1に変数RESを接続してあるものとし、図10のリスト8ではブロパティsign2は“+”に設定されているものとする。このプロパティsign1の値を“+”から“−”に変更したときの中間コードはリスト9に示すようになる。
以上の手法により、ブロックにプロパティを設定することができる。また、ブロックのプロパティを変更することで、コード片から出力されるソースコードを変更することができる。
(4)コード片の任意プログラム言語への対応
上記の(1)〜(3)では出力する内容はC言語を例としていた。しかし、コード片からソースコードに変換するにあたっては、ブロックに設定するコード片の内容を変更することで、任意のプログラム言語に対応することができる。図11に示すリスト10はBASICで出力する場合のコード片の記述例である。
上記の(1)〜(3)では出力する内容はC言語を例としていた。しかし、コード片からソースコードに変換するにあたっては、ブロックに設定するコード片の内容を変更することで、任意のプログラム言語に対応することができる。図11に示すリスト10はBASICで出力する場合のコード片の記述例である。
以上の手法により、コード片の記述を任意のプログラム言語に置き換えても、ユーザ定義ブロックとして有効である。
(実施形態2)
図12は、本実施形態を示すプログラム自動生成装置の構成図であり、実施形態1で作成された「ユーザ定義ブロック」からのプログラムの自動生成を行う。
図12は、本実施形態を示すプログラム自動生成装置の構成図であり、実施形態1で作成された「ユーザ定義ブロック」からのプログラムの自動生成を行う。
図12において、プログラム自動生成装置40は、変数の情報を保持する変数一覧情報DB41と、結線の情報を保持する結線情報DB42と、ブロックとブロック図の関連情報を保持するブロック図接続情報DB43と、変数と結線の情報を関連付けるための変数一結線関連情報設定部44と、ユーザが定義したブロックの情報を作成・保持するユーザ定義ブロック作成部45と、ブロックとブロック図の関連情報を設定するためのブロック―ブロック図関連情報設定部46と、変数一覧情報DB・結線情報DB・ブロック図接続情報DBに保持されている情報を元にソースコードを生成するプログラム自動生成部47を持つ。さらに、プログラム中にコメントを書き込むコメント設定部48、プログラムの元になったブロック図の情報読込部49とその情報の保存部50を持つ。
ブロック図およびブロックの設定情報を表示するブロック図情報出力部20と、ブロックの情報を入力するブロック図情報入力部30は図1のものと共用のものである。
以下、プログラムの自動生成の手法を詳細に説明する。
(1)プログラムの自動生成(その1)
ブロック図からソースコードを生成するには、実施形態1による「ユーザ定義ブロック作成」に加えて、以下の3つの処理を行う。
ブロック図からソースコードを生成するには、実施形態1による「ユーザ定義ブロック作成」に加えて、以下の3つの処理を行う。
(1−1)ブロックとブロック図との関連付け
まず、実施形態1に示すユーザ定義ブロック設定装置を使用して定義されたブロックをブロック図上に配置し、ブロック図情報出力部20で表示する。
まず、実施形態1に示すユーザ定義ブロック設定装置を使用して定義されたブロックをブロック図上に配置し、ブロック図情報出力部20で表示する。
例えば、ブロック図情報入力部30にてブロック図上に図13の(a)のように配置された場合は、ブロック−ブロック図関連情報設定部46により、ブロック図XにブロックAとBを関連付けて、表1に示すブロックAとBの情報をブロック図接続情報DB43に設定する。このとき、ブロックの内容をブロック図情報保存部50にて保存するために、ブロック図接続情報としてユーザ定義ブロック作成部にあるブロックの内容がブロック図接続情報DB43に書き写される。各ブロックの情報には、実施形態1で設定したブロック名、端子、コード片などが含まれている。
(1−2)変数一覧情報と結線との関連付け
上記の(1−1)にて図13の(a)に示すブロックをブロック図上に配置した後に、ブロック図情報入力部30にて図13の(b)ようなブロック間の結線を行う。さらに、ブロック図情報入力部30にて結線に対して割り当てた変数の情報を表2の内容で変数一覧情報DB41に設定する。変数一覧情報には変数ごとに型や変数種別などの層性情報を付加する。このとき、変数−結線関連情報設定部44により表3の結線情報(接続元、接続先、割り当て変数)を結線情報DB42に追加する。
上記の(1−1)にて図13の(a)に示すブロックをブロック図上に配置した後に、ブロック図情報入力部30にて図13の(b)ようなブロック間の結線を行う。さらに、ブロック図情報入力部30にて結線に対して割り当てた変数の情報を表2の内容で変数一覧情報DB41に設定する。変数一覧情報には変数ごとに型や変数種別などの層性情報を付加する。このとき、変数−結線関連情報設定部44により表3の結線情報(接続元、接続先、割り当て変数)を結線情報DB42に追加する。
(1−3)プログラム生成
「ユーザ定義ブロック」にて各ブロックにはブロックとコード片の関連付けがあらかじめ行われているので、ブロック図−ブロック(コード片)−結線−変数の流れを追うことで、コード片から中間コードを経由してソースコード(プログラム)を生成することができる。
「ユーザ定義ブロック」にて各ブロックにはブロックとコード片の関連付けがあらかじめ行われているので、ブロック図−ブロック(コード片)−結線−変数の流れを追うことで、コード片から中間コードを経由してソースコード(プログラム)を生成することができる。
例えば、上記の表3におけるブロックAには図14の(a)に示すリスト1にはブロックAのコード片が関連付けられ、(b)に示すリスト2にはブロックBのコード片が関連付けられており、ブロック図上で図13の(a)ように結線しているとする。このときに出力される中間コードは、リスト1、リスト2、表2、表3から図15に示すリスト3のように出力する。中間コードの出力は図13の(b)の入力から出力方向へ順番に行う。
さらに、リスト3の中間コードに対して、プログラム自動生成部47でC言語のソースコードに変換する場合、変数宣言、C言語としてコンパイルするための関数、変数宣言などを付加し、図16に示すリスト4のソースコードを得る。
この場合、表2の変数種別から、VAR1は関数の引数、VAR2はグローバル変数、RES1はローカル変数、RES2は関数の戻り値として宣言および使用している。また、変数の種別がレジスタ変数の場合は変数宣言の方の前にキーワード“register”を足す。関数名については、例えば文字列“func”とシステム内に持ったカウンタで生成した数字を文字列として付加したものとする。ただし、これ以外の方法でもよい。
以上の手法により、変数一覧情報DB、結線情報DB、ブロック図接続情報DBの情報に基づいて、ソースコードを自動生成することができる。
(2)プログラムの自動生成(その2)
プログラムの自動生成(その1)での変数を設定する機能では、その場で設定した変数を線に割り当てた。本例では、既に定義されている変数を線に設定する。
プログラムの自動生成(その1)での変数を設定する機能では、その場で設定した変数を線に割り当てた。本例では、既に定義されている変数を線に設定する。
前記の図13(a)にあるブロックをブロック図上に配置する前に、ブロック図情報入力部30により変数の情報を前記の表2の内容で変数一覧情報DB41に設定する。次にブロック図情報入力部30にて図13の(b)のような結線を行い、既に定義している変数を線に対して設定する。このとき、変数−結線関連情報設定部44により前記の表3の情報を結線情報DB42に追加する。
したがって、変数の設定を行った後で、変数と線を関連付けることができる。
(3)コメントを付加したプログラムの生成
ブロック図上でブロックに対してコメントを付加するために、下記の表4のようにブロック図接続情報にコメントの項目を増やす。ブロック図情報入力部30から入力を行い、コメント設定部48によりブロック図接続情報のコメントの項目について任意の文字列を設定する。また、結線情報についても下記の表5のようにコメントの項目を増やし、ブロック図接続情報と同様にコメント設定部48にてコメントを設定する。
ブロック図上でブロックに対してコメントを付加するために、下記の表4のようにブロック図接続情報にコメントの項目を増やす。ブロック図情報入力部30から入力を行い、コメント設定部48によりブロック図接続情報のコメントの項目について任意の文字列を設定する。また、結線情報についても下記の表5のようにコメントの項目を増やし、ブロック図接続情報と同様にコメント設定部48にてコメントを設定する。
プログラム生成の際に、上記で追加したブロック図接続情報DB43に設定したコメント、結線情報DB42に設定したコメント、およびブロックに関連付けられたコード片に埋め込まれたコメントを出力する。ブロック図接続情報DB43のコメントはそのブロックに対応する行の上に付加する。結線情報DB42のコメントは変数宣言に続いて付加する。ただし、引数は宣言の前の行に追加する。
例として、図16に示すリスト4に対して上配の表4、表5のようなコメントを付加した場合のソースコードを図17にリスト5で示す。例えば、VAR2はグローバル変数なので、変数宣言の横にコメントが追加される。VAR1は引数なので、関数宣言の前の行にコメントが追加される。ブロックAについてはリスト1にあるコード片の前の行にコメントが追加される。
また、コード片に埋め込まれたコメントについては、コード片から中間コードに変換する際に行う端子名の展開を適用する。例えば、リスト1のコード片を図18の(a)に示すリスト6のように変更した場合、リスト6のコード片を中間コードに変換したものを図18の(b)にリスト7で示す。
したがって、ブロックまたは変数にコメントをつけたコメントつきのソースコードを自動生成することができる。
(4)ブロック図の情報保存
上記の(1)から(3)までによって、プログラム自動生成は行うことができるが、組み込みソフトウェア開発支援システムを終了すると、それまでに作成したブロック図が破棄されてしまう。作成したブロック図の情報(ブロック図接続情報DB、結線情報DB、変数一覧情報DB)はブロック図情報保存部50でファイルなどに保存する。処理の手順を図19の(a)に示す。保存したファイルなどはブロック図情報読込部49にてブロック図情報として読み込まれる。処理の手順を図19の(b)に示す。
上記の(1)から(3)までによって、プログラム自動生成は行うことができるが、組み込みソフトウェア開発支援システムを終了すると、それまでに作成したブロック図が破棄されてしまう。作成したブロック図の情報(ブロック図接続情報DB、結線情報DB、変数一覧情報DB)はブロック図情報保存部50でファイルなどに保存する。処理の手順を図19の(a)に示す。保存したファイルなどはブロック図情報読込部49にてブロック図情報として読み込まれる。処理の手順を図19の(b)に示す。
したがって、ブロック図をファイルなどに保存することができ、このファイルなどに保存されているブロック図をプログラムの自動生成に際して読み込むことができる。
なお、本発明は、図1や図12に示した装置の一部又は全部の処理機能をプログラムとして構成してコンピュータに実行させることができる。
10 ユーザ定義ブロック設定装置
20 ブロック図情報出力部
30 ブロック図情報入力部
40 プログラム自動生成装置
20 ブロック図情報出力部
30 ブロック図情報入力部
40 プログラム自動生成装置
Claims (13)
- ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援システムであって、
前記ブロックを定義するユーザ定義ブロック設定装置は、
ブロックなどを置くブロック図で使用する変数情報や関数情報の宣言部と中間コードを組み合わせて当該ブロックのソースコードを設定するコード片設定部と、
ブロックに設定されるコード片の中でCPUのレジスタの参照に置き換える構文を設定するレジスタ設定部と、
ブロックのコード片で使用する変数を当該ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する変数名自動生成部と、
ブロックに設定するプロパティ値でブロックの出力を変化させるプロパティ設定部と、
を備えたことを特徴とするソフトウェアの開発支援システム。 - ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援システムであって、
前記プログラムを自動生成するプログラム自動生成装置は、
定義されたブロックをブロック図に関連付けて表示するブロック−ブロック図関連情報設定部と、
前記ブロック間の結線を行い、さらに、この結線に対して割り当てた変数を一覧情報として設定し、接続元、接続先、割り当て変数を結線情報として設定する変数−結線関連情報設定部と、
前記ブロックと結線および変数より、コード片から中間コードを経由してソースコード(プログラム)を生成するプログラム自動生成部と、
を備えたことを特徴とするソフトウェアの開発支援システム。 - 前記プログラム自動生成部は、変数の設定を行った後で、変数と線を関連付け、この関連つけでソースコード(プログラム)を生成することを特徴とする請求項2に記載のソフトウェアの開発支援システム。
- 前記ブロック−ブロック図関連情報、変数−結線関連情報またはコード片に任意の文字列のコメントを入力するコメント設定部を備えたことを特徴とする請求項2に記載のソフトウェアの開発支援システム。
- 前記ブロック−ブロック図関連情報、変数−結線関連情報はファイルなどに保存しておくブロック図情報保存部を備えたことを特徴とする請求項2〜4のいずれか1項に記載のソフトウェアの開発支援システム。
- 前記ファイルなどに保存しておくブロック−ブロック図関連情報、変数−結線関連情報をプログラムの自動生成に際して変数一覧情報、結線情報、ブロック図接続情報に戻すためのブロック図情報読込部を備えたことを特徴とする請求項2〜5のいずれか1項に記載のソフトウェアの開発支援システム。
- ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援方法であって、
前記ブロック図を定義するユーザ定義ブロック設定装置は、
ブロックなどを置くブロック図で使用する変数情報や関数情報の宣言部と中間コードを組み合わせて当該ブロックのソースコードを設定するコード片設定ステップと、
ブロックに設定されるコード片の中でCPUのレジスタの参照に置き換える構文を設定するレジスタ設定ステップと、
ブロックのコード片で使用する変数を当該ブロック内で閉じた変数名として、ブロックごとにコード片の元の変数名に続いて重複しない任意の文字列を付加する変数名自動生成ステップと、
ブロックに設定するプロパティ値でブロックの出力を変化させるプロパティ設定ステップと、
を備えたことを特徴とするソフトウェアの開発支援方法。 - ユーザがソフトウェアとして組み込もうとする任意の情報処理機能をブロックとして定義し、この定義されたブロックに対応させたプログラムを自動生成するソフトウェアの開発支援方法であって、
前記プログラムを自動生成するプログラム自動生成装置は、
定義されたブロックをブロック図に関連付けて表示するブロック−ブロック図関連情報設定ステップと、
前記ブロック間の結線を行い、さらに、この結線に対して割り当てた変数を一覧情報として設定し、接続元、接続先、割り当て変数を結線情報として設定する変数−結線関連情報設定ステップと、
前記ブロックと結線および変数より、コード片から中間コードを経由してソースコード(プログラム)を生成するプログラム自動生成ステップと、
を備えたことを特徴とするソフトウェアの開発支援方法。 - 前記プログラム自動生成ステップは、変数の設定を行った後で、変数と線を関連付け、この関連つけでソースコード(プログラム)を生成することを特徴とする請求項8に記載のソフトウェアの開発支援方法。
- 前記ブロック−ブロック図関連情報、変数−結線関連情報またはコード片に任意の文字列のコメントを入力するコメント設定ステップを備えたことを特徴とする請求項8に記載のソフトウェアの開発支援方法。
- 前記ブロック−ブロック図関連情報、変数−結線関連情報はファイルなどに保存しておくブロック図情報保存ステップを備えたことを特徴とする請求項8〜10のいずれか1項に記載のソフトウェアの開発支援方法。
- 前記ファイルなどに保存しておくブロック−ブロック図関連情報、変数−結線関連情報をプログラムの自動生成に際して変数一覧情報、結線情報、ブロック図接続情報に戻すためのブロック図情報読込ステップを備えたことを特徴とする請求項8〜11のいずれか1項に記載のソフトウェアの開発支援方法。
- 請求項7〜12に記載のソフトウェアの開発支援方法における処理ステップを、コンピュータで実行可能に構成したことを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008031191A JP2009193181A (ja) | 2008-02-13 | 2008-02-13 | ソフトウェアの開発支援システム、支援方法およびこの方法のプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008031191A JP2009193181A (ja) | 2008-02-13 | 2008-02-13 | ソフトウェアの開発支援システム、支援方法およびこの方法のプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009193181A true JP2009193181A (ja) | 2009-08-27 |
Family
ID=41075156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008031191A Pending JP2009193181A (ja) | 2008-02-13 | 2008-02-13 | ソフトウェアの開発支援システム、支援方法およびこの方法のプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009193181A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012022425A (ja) * | 2010-07-13 | 2012-02-02 | Fuji Electric Co Ltd | プログラム自動生成装置、自動生成方法、および、プログラム |
JP2014056579A (ja) * | 2012-09-11 | 2014-03-27 | Dspace Digital Signal Processing & Control Engineering Gmbh | 実行可能制御プログラムの少なくとも一部をコンピュータ支援により生成するための方法 |
US9251554B2 (en) | 2012-12-26 | 2016-02-02 | Analog Devices, Inc. | Block-based signal processing |
JP2016164751A (ja) * | 2015-03-06 | 2016-09-08 | 新日鐵住金株式会社 | シミュレーションプログラム生成装置、シミュレーションプログラム生成方法、及びプログラム |
WO2021044650A1 (ja) * | 2019-09-04 | 2021-03-11 | オムロン株式会社 | プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム |
WO2022004053A1 (ja) * | 2020-06-30 | 2022-01-06 | オムロン株式会社 | ビジュアルプログラミングエディタのプログラム、コンピューターおよび方法 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63138428A (ja) * | 1986-12-01 | 1988-06-10 | Hitachi Ltd | 論理変数の出力方法 |
JPH04273524A (ja) * | 1991-02-28 | 1992-09-29 | Toshiba Corp | プログラム自動生成装置 |
JPH06348463A (ja) * | 1993-06-02 | 1994-12-22 | Hitachi Ltd | 入出力装置模擬部作成方法 |
JPH07191840A (ja) * | 1993-12-27 | 1995-07-28 | Mitsubishi Electric Corp | プログラム自動生成装置 |
JPH08194510A (ja) * | 1995-01-19 | 1996-07-30 | Fuji Electric Co Ltd | プログラミング装置 |
JPH10116184A (ja) * | 1996-10-11 | 1998-05-06 | Denso Corp | プログラムを作成するための装置及び媒体 |
JPH10301765A (ja) * | 1997-03-31 | 1998-11-13 | Internatl Business Mach Corp <Ibm> | エクステンダ・スマート・ガイド |
WO1999006907A1 (fr) * | 1997-07-29 | 1999-02-11 | Yamatake Corporation | Appareil d'aide a la conception de systeme |
JPH11184685A (ja) * | 1997-12-24 | 1999-07-09 | Mitsubishi Heavy Ind Ltd | 制御プログラム開発装置 |
JP2001256050A (ja) * | 1999-11-30 | 2001-09-21 | Texas Instr Inc <Ti> | グラフィカル開発システム及び方法 |
JP2007041846A (ja) * | 2005-08-03 | 2007-02-15 | Fuji Electric Holdings Co Ltd | プログラム表示方法および装置 |
JP2007524156A (ja) * | 2003-12-22 | 2007-08-23 | ザ マスワークス, インク | グラフィカルプログラミング環境における入力データのブロック処理 |
-
2008
- 2008-02-13 JP JP2008031191A patent/JP2009193181A/ja active Pending
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63138428A (ja) * | 1986-12-01 | 1988-06-10 | Hitachi Ltd | 論理変数の出力方法 |
JPH04273524A (ja) * | 1991-02-28 | 1992-09-29 | Toshiba Corp | プログラム自動生成装置 |
JPH06348463A (ja) * | 1993-06-02 | 1994-12-22 | Hitachi Ltd | 入出力装置模擬部作成方法 |
JPH07191840A (ja) * | 1993-12-27 | 1995-07-28 | Mitsubishi Electric Corp | プログラム自動生成装置 |
JPH08194510A (ja) * | 1995-01-19 | 1996-07-30 | Fuji Electric Co Ltd | プログラミング装置 |
JPH10116184A (ja) * | 1996-10-11 | 1998-05-06 | Denso Corp | プログラムを作成するための装置及び媒体 |
JPH10301765A (ja) * | 1997-03-31 | 1998-11-13 | Internatl Business Mach Corp <Ibm> | エクステンダ・スマート・ガイド |
WO1999006907A1 (fr) * | 1997-07-29 | 1999-02-11 | Yamatake Corporation | Appareil d'aide a la conception de systeme |
JPH11184685A (ja) * | 1997-12-24 | 1999-07-09 | Mitsubishi Heavy Ind Ltd | 制御プログラム開発装置 |
JP2001256050A (ja) * | 1999-11-30 | 2001-09-21 | Texas Instr Inc <Ti> | グラフィカル開発システム及び方法 |
JP2007524156A (ja) * | 2003-12-22 | 2007-08-23 | ザ マスワークス, インク | グラフィカルプログラミング環境における入力データのブロック処理 |
JP2007041846A (ja) * | 2005-08-03 | 2007-02-15 | Fuji Electric Holdings Co Ltd | プログラム表示方法および装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012022425A (ja) * | 2010-07-13 | 2012-02-02 | Fuji Electric Co Ltd | プログラム自動生成装置、自動生成方法、および、プログラム |
JP2014056579A (ja) * | 2012-09-11 | 2014-03-27 | Dspace Digital Signal Processing & Control Engineering Gmbh | 実行可能制御プログラムの少なくとも一部をコンピュータ支援により生成するための方法 |
US9251554B2 (en) | 2012-12-26 | 2016-02-02 | Analog Devices, Inc. | Block-based signal processing |
JP2016164751A (ja) * | 2015-03-06 | 2016-09-08 | 新日鐵住金株式会社 | シミュレーションプログラム生成装置、シミュレーションプログラム生成方法、及びプログラム |
WO2021044650A1 (ja) * | 2019-09-04 | 2021-03-11 | オムロン株式会社 | プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム |
US11704113B2 (en) | 2019-09-04 | 2023-07-18 | Omron Corporation | Program development device, project creation method, and storage medium |
JP7322604B2 (ja) | 2019-09-04 | 2023-08-08 | オムロン株式会社 | プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム |
WO2022004053A1 (ja) * | 2020-06-30 | 2022-01-06 | オムロン株式会社 | ビジュアルプログラミングエディタのプログラム、コンピューターおよび方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2021012740A (ja) | 複合コントロール | |
CN102292736A (zh) | 利用合成容器的协作环境项目可扩展性 | |
JP2007323573A (ja) | 機能テスト・スクリプト生成装置 | |
JP2009193181A (ja) | ソフトウェアの開発支援システム、支援方法およびこの方法のプログラム | |
US20140214396A1 (en) | Specification properties creation for a visual model of a system | |
CN111428451B (zh) | 文本在线编辑方法、装置、电子设备及存储介质 | |
CN104969188A (zh) | 用于对具有缺少源位置的代码段的源代码建模的方法 | |
US8930923B2 (en) | Generating debugging extension source code utilizing debugging information | |
CN112069456A (zh) | 一种模型文件的生成方法、装置、电子设备及存储介质 | |
CN104731588A (zh) | 页面布局文件生成方法和页面布局文件生成装置 | |
US20110126171A1 (en) | Dynamic native editor code view facade | |
US20110231178A1 (en) | Modeling and generating computer software product line variants | |
CN105204837B (zh) | 一种逻辑编程的实现方法和装置 | |
Chen et al. | A novel automated construction scheme for efficiently developing cloud manufacturing services | |
JP5747698B2 (ja) | 要件管理支援装置 | |
US11809844B2 (en) | Creating an app method and system | |
JP4870956B2 (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
JP6287093B2 (ja) | ソフトウェア開発支援装置、ソフトウェア開発支援方法及びプログラム | |
KR101149655B1 (ko) | 프로그램 디자인 장치 및 그 방법 | |
JP2008071314A (ja) | 組み込み用プログラム開発装置、及びプログラム自動生成方法 | |
JP2015148925A (ja) | プログラム生成装置および方法 | |
JP2015022356A (ja) | テストシナリオバリエーション生成装置及び方法及びプログラム | |
JPWO2019244226A1 (ja) | プログラム実行支援装置、プログラム実行支援方法、およびプログラム実行支援プログラム | |
EP4261678A1 (en) | Generation of a technical instruction | |
JP7328922B2 (ja) | 設定装置、設定方法、及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20101108 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20120626 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120724 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20121113 |