(57)【要約】【課題】処理効率が向上されたプログラムを記述し生成できる。【解決手段】真偽を返す関数に対応する論理ブロックを作成する論理ブロック作成手段１３ａ、機能ブロックが接続されたブロック列を作成するブロック列作成手段１３ｃ、機能ブロックを囲む切り替えブロック領域を作成する切り替えブロック領域作成手段１３ｂ、切り替えブロック領域に論理ブロックが接続されたデータフロー図を作成するブロック接続手段１３ｄを有するデータフロー図作成手段１３はデータフロー図１２ａを作成し、実装コード生成手段１４は、データフロー図１２ａから論理ブロックに対応する関数に入力値を入力させるコード、論理ブロックに対応する関数の出力値から実行時の出力値が真の時、切り替えブロック領域内のブロック列に対応する処理を実行させるコードおよびブロック列を構成する機能ブロックに対応する関数の実行を指示するコードより構成される実装コード３を生成する。【選択図】図１
2008084261.tif 000002
【特許請求の範囲】
【請求項１】
プログラムによるデータ処理を表す機能ブロックと、前記機能ブロック間のデータの受け渡し関係とを記述したデータフロー図から実装コードを生成するプログラム自動生成装置において、
ユーザによる操作入力を受け付け、前記機能ブロックの一種であり、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成する論理ブロック作成手段と、前記操作入力を受け付け、複数の前記機能ブロックが接続されたブロック列を作成するブロック列作成手段と、前記操作入力を受け付け、前記ブロック列を囲む切り替えブロック領域を作成する切り替えブロック領域作成手段と、前記操作入力を受け付け、前記切り替えブロック領域に前記論理ブロックが接続された前記データフロー図を作成するブロック接続手段と、を有するデータフロー図作成手段と、
作成された前記データフロー図を保持するデータフロー図記憶手段と、
前記データフロー図記憶手段に保持された前記データフロー図の前記論理ブロックに対応する前記関数に対して入力値を入力させるコードと、前記論理ブロックに対応する前記関数が返す出力値を判断し、実行時に前記出力値が真と判断されると、前記論理ブロックに接続された前記切り替えブロック領域内の前記ブロック列に対応する処理を実行させるコードと、前記切り替えブロック領域内の前記ブロック列を構成する前記機能ブロックに対応する関数の実行を指示するコードと、により構成される前記実装コードを生成する実装コード生成手段と、
を有することを特徴とするプログラム自動生成装置。
【請求項２】
前記実装コード生成手段は個々の前記機能ブロックに対応する前記関数が格納された機能ブロックライブラリ記憶手段をさらに有しており、前記機能ブロックライブラリ記憶手段に格納された前記関数を適用することで前記実装コードを生成することを特徴とする請求項１記載のプログラム自動生成装置。
【請求項３】
前記データフロー図が、前記切り替えブロック領域内の前記ブロック列から、入力値を保持する関数に対応する保持ブロックに接続されている場合、前記実装コード生成手段は、前記出力値が偽の時のみ、前記保持ブロックに対応する前記関数は、入力の値を保持する実装コードを生成することを特徴とする請求項１記載のプログラム自動生成装置。
【請求項４】
前記データフロー図が、前記切り替えブロック領域内の前記ブロック列から、保持ブロック以外の前記機能ブロックが接続されている場合、前記実装コード生成手段は、前記出力値が偽の時のみ、前記保持ブロック以外の前記機能ブロックに対応する関数は、入力の値をゼロとする実装コードを生成することを特徴とする請求項１記載のプログラム自動生成装置。
【請求項５】
前記データフロー図が、前記切り替えブロック領域内の前記論理ブロックと前記切り替えブロック領域外の通常ブロックとが接続されている場合、前記実装コード生成手段は、前記出力値が偽の時のみ、前記切り替えブロック領域内の前記論理ブロックに対応する関数からの出力値を偽とする実装コードを生成することを特徴とする請求項１記載のプログラム自動生成装置。
【請求項６】
前記データフロー図が、前記切り替えブロック領域から外へ分岐して接続されており、一方は、前記機能ブロックと接続されており、他方は保持ブロックと接続されている場合、前記実装コード生成手段は、異常を出力することを特徴とする請求項１記載のプログラム自動生成装置。
【請求項７】
プログラムによるデータ処理を表す機能ブロックと、前記機能ブロックのデータの受け渡し関係とを記述したデータフロー図から実装コードを生成するプログラム自動生成方法において、
論理ブロック作成手段が、ユーザによる操作入力を受け付け、前記機能ブロックの一種であり、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成し、
ブロック列作成手段が、前記操作入力を受け付け、複数の前記機能ブロックが接続されたブロック列を作成して、
切り替えブロック領域作成手段が、前記操作入力を受け付け、前記ブロック列を囲む切り替えブロック領域を作成して、
ブロック接続手段が、前記操作入力を受け付け、前記切り替えブロック領域に前記論理ブロックが接続された前記データフロー図を作成して、
実装コード生成手段が、前記データフロー図の前記論理ブロックに対応する前記関数に対して入力値を入力させるコードと、前記論理ブロックに対応する前記関数が返す出力値を判断し、実行時に前記出力値が真と判断されると、前記論理ブロックに接続された前記切り替えブロック領域内の前記ブロック列に対応する処理を実行させるコードと、前記切り替えブロック領域内の前記ブロック列を構成する前記機能ブロックに対応する関数の実行を指示するコードと、により構成される前記実装コードを生成する、
ことを特徴とするプログラム自動生成方法。
【請求項８】
プログラムによるデータ処理を表す機能ブロックと、前記機能ブロック間のデータの受け渡し関係とを記述したデータフロー図から実装コードを生成するプログラム自動生成プログラムにおいて、
コンピュータを、
ユーザによる操作入力を受け付け、前記機能ブロックの一種であり、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成する論理ブロック作成手段と、前記操作入力を受け付け、複数の前記機能ブロックが接続されたブロック列を作成するブロック列作成手段と、前記操作入力を受け付け、前記ブロック列を囲む切り替えブロック領域を作成する切り替えブロック領域作成手段と、前記操作入力を受け付け、前記切り替えブロック領域に前記論理ブロックが接続された前記データフロー図を作成するブロック接続手段と、を有するデータフロー図作成手段、
作成された前記データフロー図を保持するデータフロー図記憶手段、
前記データフロー図記憶手段に保持された前記データフロー図の前記論理ブロックに対応する前記関数に対して入力値を入力させるコードと、前記論理ブロックに対応する前記関数が返す出力値を判断し、実行時に前記出力値が真と判断されると、前記論理ブロックに接続された前記切り替えブロック領域内の前記ブロック列に対応する処理を実行させるコードと、前記切り替えブロック領域内の前記ブロック列を構成する前記機能ブロックに対応する関数の実行を指示するコードと、により構成される前記実装コードを生成する実装コード生成手段、
として機能させることを特徴とするプログラム自動生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム自動生成装置、プログラム自動生成方法およびプログラム自動生成プログラムに関し、特に、切り替え処理を有するプログラム自動生成装置、プログラム自動生成方法およびプログラム自動生成プログラムに関する。
【背景技術】
【０００２】
圧延プラント・発電プラントなどの大規模プラントや産業用機械装置などでは、コンピュータを用いたデジタル制御が、既に実用化されている。このような大規模プラントや産業用機械装置などにおいては、デジタル制御を実施するために、制御用のプログラムが必要となる。
【０００３】
そこで、このプログラムの開発に、Ｃ言語などの高級言語が広く利用されている。そして、高級言語によって作製されたプログラムは、コンパイラなどを用いて、ロードモジュールに変換されて、コンピュータによって処理が行われている。
【０００４】
また、一般に、高級言語によるプログラムと同時に、ドキュメントも作製される。このドキュメントは、視覚的把握の向上のために、図形を多用して作製されることが多い。
ところが、この図形によって作製されたドキュメントに基づいて手作業でプログラムを作成する場合、人為的ミスが多く生じることが問題視されていた。
【０００５】
そこで、現在では、図形ベースのドキュメントからテキストベースのプログラムへの自動生成が実現されている（例えば、特許文献１，２，３，４参照。）。このプログラムの自動生成によって、開発者の人為的ミスが減少され、操作の時間も短縮することができる。さらに、開発者は図形ベースのドキュメントとテキストベースのプログラムの２つを個別に記述し、生成する必要がなくなり、プログラムの開発効率がさらに向上する。
【０００６】
なお、図形ベースのドキュメントは、例えば、特許文献２に開示されているように、複数のブロックが接続されたデータフロー図と呼ばれる形式をとることがある。以下にこのデータフロー図の概要について説明する。
【０００７】
図１４は、従来のデータフロー図の例を示す図である。
データフロー図は、それぞれの関数で実行される処理の流れを記述したものである。図１４に示したデータフロー図５００には、開始ブロック５１０，５１１、通常ブロック５２０，５２１，５２２，５２３，５２４、終端ブロック５５０，５５１、分岐点５３０、保持ブロック５４０，５４１および論理ブロック５６０により記述されている。そして、矢印線によって、これらの機能ブロック間のデータ入出力関係が図１４に示すように記述されている。
【０００８】
開始ブロックは、処理の開始時に関数の外部から与えられた入力値を意味する。多くの場合、１つのデータフロー図につき、１以上の開始ブロックが記述される。図１４に示したデータフロー図５００では、処理の開始時に２つの入力値（開始ブロック５１０および開始ブロック５１１に対応する入力値）が与えられる。
【０００９】
通常ブロックは、一定のまとまったデータ処理を意味する。それぞれの通常ブロックでは、矢印線にそって入力されるデータに基づいて、矢印線にそって出力されるデータが計算される。例えば、図１４の通常ブロック５２０では、開始ブロック５１０で与えられる入力値に基づいて、通常ブロック５２１に対して出力するデータが計算される。
【００１０】
終端ブロックは、処理の終了時に関数の外部へと出力される戻り値を意味する。多くの場合、１つのデータフロー図につき、１つ以上の終端ブロックが記述される。図１４に示したデータフロー図５００では、後に説明する保持ブロック５４０または論理ブロック５６０が出力したデータが最終的な戻り値（終端ブロック５５０および終端ブロック５５１に対応する戻り値）として出力されている。
【００１１】
保持ブロックは、入力されたデータを保持するか、または保持しつつ、そのデータを計算して次のブロックへ出力するデータ処理を意味する。通常ブロックであれば、データが入力されると、一旦、そのデータはワーク領域などで保持される。その後、データが出力されると、そのワーク領域の役目が終わり、破棄される。しかし、例えば、図１４の保持ブロック５４０では、通常ブロック５２２から出力されたデータを保持したまま、計算して、計算結果を出力する。データを保持することによって、この保持ブロックの外からこのデータを参照するなど、データの保持が必要な場合に備えることができる。
【００１２】
論理ブロックは、入力されたデータに対して、真（ＴＲＵＥ）または偽（ＦＡＬＳＥ）のいずれかの値を出力するデータ処理を意味する。
上記のデータフロー図５００は、ユーザの操作入力に基づいて作成することができる。このようなデータフロー図５００を用いることで、ユーザは関数の内部で実行される処理の流れを容易に理解することができる。
【００１３】
図１５は、従来のデータフロー図の別の例を示す図である。
データフロー図の別の例として、図１５のデータフロー図６００は、データフロー図５００と同様に、開始ブロック６１０，６５０，６５１、終端ブロック６５２、通常ブロック６２０，６２１，６２２および論理ブロック６６０により記述されている。さらに、図１５では、切り替え要素として、切り替えブロック６９０が接続されている。そして、矢印線によって、これらの機能ブロック間のデータ入出力関係が図１５に示すように記述されている。
【００１４】
なお、切り替えブロックは、入力されたデータによって、出力を切り替えるデータ処理を意味する。例えば、図１５において、論理ブロック６６０に対応する関数からの信号が真である場合は、通常ブロック６２０から、切り替えブロック６９０を介して、通常ブロック６２２への出力と見なされる。一方、論理ブロック６６０に対応する関数からの信号が偽である場合は、通常ブロック６２１から、切り替えブロック６９０を介して、通常ブロック６２２への出力と見なされる。
【００１５】
図１４，１５ようにブロックを用いたデータフロー図は様々な表記を記述することができるため、データの受け渡しによって進行する処理の記述に適している。
【特許文献１】特開平８−５５０１９号公報
【特許文献２】特開平８−１０６３８０号公報
【特許文献３】特開平２−２３５１４４号公報
【特許文献４】特開平５−８８８６９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
ところが、図形ベースのドキュメントからテキストベースのプログラムへの自動生成には以下のような問題点があった。
データフロー図で表記される内容は、処理を伴うために、処理時間を必要とする。例えば、図１５の開始ブロック６１０の入力値が論理ブロック６６０に入力されて、真または偽であるか判断される。真である場合は、通常ブロック６２０から通常ブロック６２２側に出力される。しかし、一方で、通常ブロック６２１側のデータの処理の計算が行われている。結果的に、通常ブロック６２１側からのデータの処理の計算は捨てられてしまう。このように、切り替えブロック６９０では処理を行うために、不要な処理を行って余計な時間がかかってしまうという問題があった。
【００１７】
さらに、このような場合には、ブロックにそのブロックを呼び出すかどうかのデータを入力して、実行の制御を行っていた場合があった。しかし、このような制御の方法では、処理の内容が隠れてしまうため、プログラムの自動生成が適切に行われないという問題があった。
【００１８】
本発明はこのような点に鑑みてなされたものであり、処理効率が向上されたプログラムを記述し、生成できるプログラム自動生成装置、プログラム自動生成方法およびプログラム自動生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１９】
本発明では上記課題を解決するために、プログラムによるデータ処理を表す機能ブロックと、前記機能ブロック間のデータの受け渡し関係とを記述したデータフロー図から実装コードを生成するプログラム自動生成装置において、ユーザによる操作入力を受け付け、前記機能ブロックの一種であり、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成する論理ブロック作成手段と、前記操作入力を受け付け、複数の前記機能ブロックが接続されたブロック列を作成するブロック列作成手段と、前記操作入力を受け付け、前記ブロック列を囲む切り替えブロック領域を作成する切り替えブロック領域作成手段と、前記操作入力を受け付け、前記切り替えブロック領域に前記論理ブロックが接続された前記データフロー図を作成するブロック接続手段と、を有するデータフロー図作成手段と、作成された前記データフロー図を保持するデータフロー図記憶手段と、前記データフロー図記憶手段に保持された前記データフロー図の前記論理ブロックに対応する前記関数に対して入力値を入力させるコードと、前記論理ブロックに対応する前記関数が返す出力値を判断し、実行時に前記出力値が真と判断されると、前記論理ブロックに接続された前記切り替えブロック領域内の前記ブロック列に対応する処理を実行させるコードと、前記切り替えブロック領域内の前記ブロック列を構成する前記機能ブロックに対応する関数の実行を指示するコードと、により構成される前記実装コードを生成する実装コード生成手段と、を有することを特徴とするプログラム自動生成装置が提供される。
【００２０】
このようなプログラム自動生成装置によれば、ユーザによる操作入力を受け付け、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成する論理ブロック作成手段と、ユーザによる操作入力を受け付け、複数の機能ブロックが接続されたブロック列を作成するブロック列作成手段と、ユーザによる操作入力を受け付け、ブロック列の機能ブロックを囲む切り替えブロック領域を作成する切り替えブロック領域作成手段と、ユーザによる操作入力を受け付け、切り替えブロック領域に論理ブロックが接続されたデータフロー図を作成するブロック接続手段と、切り替えブロック領域に論理ブロックが接続されたデータフロー図を作成するデータフロー図作成手段と、により、データフロー図が作成される。そして、データフロー図から、実装コード生成手段によって、データフロー図記憶手段に保持されたデータフロー図の論理ブロックに対応する関数に対して入力値を入力させるコードと、論理ブロックに対応する関数が返す出力値を判断し、実行時に出力値が真と判断されると、論理ブロックに接続された切り替えブロック領域内のブロック列に対応する処理を実行させるコードと、切り替えブロック領域内のブロック列を構成する機能ブロックに対応する関数の実行を指示するコードと、により構成される実装コードが生成される。
【００２１】
また、上記課題を解決するために、プログラムによるデータ処理を表す機能ブロックと、前記機能ブロックのデータの受け渡し関係とを記述したデータフロー図から実装コードを生成するプログラム自動生成方法において、論理ブロック作成手段が、ユーザによる操作入力を受け付け、前記機能ブロックの一種であり、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成し、ブロック列作成手段が、前記操作入力を受け付け、複数の前記機能ブロックが接続されたブロック列を作成して、切り替えブロック領域作成手段が、前記操作入力を受け付け、前記ブロック列を囲む切り替えブロック領域を作成して、ブロック接続手段が、前記操作入力を受け付け、前記切り替えブロック領域に前記論理ブロックが接続された前記データフロー図を作成して、実装コード生成手段が、前記データフロー図の前記論理ブロックに対応する前記関数に対して入力値を入力させるコードと、前記論理ブロックに対応する前記関数が返す出力値を判断し、実行時に前記出力値が真と判断されると、前記論理ブロックに接続された前記切り替えブロック領域内の前記ブロック列に対応する処理を実行させるコードと、前記切り替えブロック領域内の前記ブロック列を構成する前記機能ブロックに対応する関数の実行を指示するコードと、により構成される前記実装コードを生成する、ことを特徴とするプログラム自動生成方法が提供される。
【００２２】
このようなプログラム自動生成方法によれば、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成する論理ブロック作成手段と、ユーザによる操作入力を受け付け、複数の機能ブロックが接続されたブロック列を作成するブロック列作成手段と、ユーザによる操作入力を受け付け、ブロック列の機能ブロックを囲む切り替えブロック領域を作成する切り替えブロック領域作成手段と、ユーザによる操作入力を受け付け、切り替えブロック領域に論理ブロックが接続されたデータフロー図を作成するブロック接続手段と、を有するデータフロー図作成手段により、切り替えブロック領域に論理ブロックが接続されたデータフロー図が作成され、実装コード生成手段によって、論理ブロックに対応する関数が返す出力値を判断し、実行時に出力値が真と判断されると、切り替えブロック領域内のブロック列の処理が実行される実装コードが生成される。
【００２３】
また上記課題を解決するために、プログラムによるデータ処理を表す機能ブロックと、前記機能ブロック間のデータの受け渡し関係とを記述したデータフロー図から実装コードを生成するプログラム自動生成プログラムにおいて、コンピュータを、ユーザによる操作入力を受け付け、前記機能ブロックの一種であり、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成する論理ブロック作成手段と、前記操作入力を受け付け、複数の前記機能ブロックが接続されたブロック列を作成するブロック列作成手段と、前記操作入力を受け付け、前記ブロック列を囲む切り替えブロック領域を作成する切り替えブロック領域作成手段と、前記操作入力を受け付け、前記切り替えブロック領域に前記論理ブロックが接続された前記データフロー図を作成するブロック接続手段と、を有するデータフロー図作成手段、作成された前記データフロー図を保持するデータフロー図記憶手段、前記データフロー図記憶手段に保持された前記データフロー図の前記論理ブロックに対応する前記関数に対して入力値を入力させるコードと、前記論理ブロックに対応する前記関数が返す出力値を判断し、実行時に前記出力値が真と判断されると、前記論理ブロックに接続された前記切り替えブロック領域内の前記ブロック列に対応する処理を実行させるコードと、前記切り替えブロック領域内の前記ブロック列を構成する前記機能ブロックに対応する関数の実行を指示するコードと、により構成される前記実装コードを生成する実装コード生成手段、として機能させることを特徴とするプログラム自動生成プログラムが提供される。
【００２４】
このようなプログラム自動生成プログラムによれば、ユーザによる操作入力を受け付け、入力値に応じて真偽の値を返す関数に対応する論理ブロックを作成する論理ブロック作成手段と、ユーザによる操作入力を受け付け、複数の機能ブロックが接続されたブロック列を作成するブロック列作成手段と、ユーザによる操作入力を受け付け、ブロック列の機能ブロックを囲む切り替えブロック領域を作成する切り替えブロック領域作成手段と、ユーザによる操作入力を受け付け、切り替えブロック領域に論理ブロックが接続されたデータフロー図を作成するブロック接続手段と、切り替えブロック領域に論理ブロックが接続されたデータフロー図を作成するデータフロー図作成手段と、により、データフロー図が作成される。そして、データフロー図から、実装コード生成手段によって、データフロー図記憶手段に保持されたデータフロー図の論理ブロックに対応する関数に対して入力値を入力させるコードと、論理ブロックに対応する関数が返す出力値を判断し、実行時に出力値が真と判断されると、論理ブロックに接続された切り替えブロック領域内のブロック列に対応する処理を実行させるコードと、切り替えブロック領域内のブロック列を構成する機能ブロックに対応する関数の実行を指示するコードと、により構成される実装コードが生成される。
【発明の効果】
【００２５】
本発明では、切り替えブロック領域を有するデータフロー図から、論理ブロックに対応する関数に対して入力値を入力させるコードと、論理ブロックに対応する関数が返す出力値を判断し、実行時に出力値が真と判断されると、論理ブロックに接続された切り替えブロック領域内のブロック列に対応する処理を実行させるコードと、切り替えブロック領域内のブロック列を構成する機能ブロックに対応する関数の実行を指示するコードと、により構成される実装コードを、生成するようにした。これにより、切り替えブロック領域内の処理の中身を表示することができるため、切り替えブロック領域を有するデータフロー図からプログラムの自動生成を効率よく行うことができる。
【発明を実施するための最良の形態】
【００２６】
以下、本発明の実施の形態を、図面を参照して詳細に説明する。
まず、本発明の概要について説明し、続いて、本発明の実施の形態について説明する。
図１は、本実施の形態の概念図である。
【００２７】
図１に示されるプログラム自動生成装置１０において、入力装置２を介して、データフロー図１２ａが作成され、作成されたデータフロー図１２ａから、プログラムの実装コード３が生成されるものである。
【００２８】
プログラム自動生成装置１０は、機能ブロックライブラリ記憶手段１１、データフロー図記憶手段１２、データフロー図作成手段１３および実装コード生成手段１４を有する。
機能ブロックライブラリ記憶手段１１は、データフロー図を構成する機能ブロックに対応した関数が格納されている。機能ブロックには、開始ブロック、通常ブロック、終端ブロック、保持ブロックおよび論理ブロックなどがある。開始ブロックとは、最初に与えられる入力値に対応する機能ブロックである。通常ブロックとは、データが入力されて処理を行ってデータを出力する機能ブロックである。終端ブロックとは、通常ブロックなどによってブロック図の最後に出力される値に対応する機能ブロックである。保持ブロックとは、入力値が計算されて出力されても、入力された値が保持される機能ブロックである。論理ブロックとは、入力された値に対し、出力の値は真（ＴＲＵＥ）または偽（ＦＡＬＳＥ）の２つの値のどちらかしか取れない機能ブロックである。また、プログラム自動生成装置１０において、機能ブロックライブラリ記憶手段１１を用いなくても、実装コードを作成することができる。その場合、機能ブロックに対応する関数の実行を支持するコードのみが生成されているために、ユーザによって適宜、関数の作成が必要となる。
【００２９】
データフロー図記憶手段１２は、データフロー図作成手段１３により作成されたデータフロー図１２ａが格納される。なお、このデータフロー図１２ａは、機能ブロックと機能ブロック間のデータの受け渡し関係とが記述されている。機能ブロックはプログラムによる一定のまとまったデータ処理を表す。
【００３０】
データフロー図作成手段１３は、論理ブロック作成手段１３ａ、切り替えブロック領域作成手段１３ｂ、ブロック列作成手段１３ｃおよびブロック接続手段１３ｄを有する。
論理ブロック作成手段１３ａでは、論理ブロックが作成される。
【００３１】
切り替えブロック領域作成手段１３ｂでは、切り替えブロック領域が作成される。切り替えブロック領域によって、後に形成されるブロック列のうちの任意の機能ブロックが囲まれることになる。複数の機能ブロックを囲む切り替えブロック領域は、論理ブロックによって判定された結果によって、切り替えブロック領域の中の機能ブロックによる処理が行われるか否かが決まる。
【００３２】
ブロック列作成手段１３ｃでは、複数のブロックが接続されたブロック列が作成される。
ブロック接続手段１３ｄでは、ブロック列作成手段１３ｃによって作成されたブロック列が中に配置された、切り替えブロック領域作成手段１３ｂによって作成された切り替えブロック領域に対して、論理ブロック作成手段１３ａによって作成された論理ブロックを接続させることによって、データフロー図が作成される。
【００３３】
以上により、データフロー図１２ａがデータフロー図作成手段１３によって作成される。
実装コード生成手段１４では、必要に応じて、機能ブロックライブラリ記憶手段１１を参照して、データフロー図１２ａからプログラムの自動生成が行われて実装コード３が生成される。
【００３４】
このプログラム自動生成装置１０では、データフロー図作成手段１３により、切り替え処理を行う機能ブロックが接続されたデータフロー図について、従来表示されなかった切り替えの処理の内容が表示されたデータフロー図を作成することができる。
【００３５】
これにより、実装コード生成手段１４において、切り替えの処理内容が表示されたデータフロー図１２ａからプログラムの自動生成を行うことができる。さらに、切り替え処理の内容が表示されるようになったために、データフロー図作成の際に、処理効率の良いプログラムを記述することができる。
【００３６】
以下に、本発明を利用した実施の形態について、図面を参照して説明する。
本実施の形態は、１つのプログラム自動生成装置で構成される。ユーザはプログラム自動生成装置を用いて、データフロー図などを記述することができる。そして、記述されたデータフロー図からプログラムの実装コードを生成することができる。
【００３７】
図２は、プログラム自動生成装置のハードウェア構造を示す図である。プログラム自動生成装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０６を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ：Hard Disc Drive）１０３、グラフィック処理装置１０４および入力インタフェース１０５が接続されている。
【００３８】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳプログラムやアプリケーションプログラムが格納される。
【００３９】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号を、バス１０６を介してＣＰＵ１０１に送信する。
【００４０】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
次に、プログラム自動生成装置１００のモジュール構成について説明する。
【００４１】
なお、本実施の形態では、機能ブロックライブラリ記憶部を参照して、データフロー図から、プログラムの自動生成を行う場合を例に挙げて説明する。
図３は、プログラム自動生成装置の機能を示すブロック図である。
【００４２】
プログラム自動生成装置１００は、機能ブロックライブラリ記憶部１１０、データフロー図記憶部１２０、ソースファイル記憶部１３０、データフロー図作成部１４０およびソースコード生成部１５０を有する。
【００４３】
機能ブロックライブラリ記憶部１１０は、データフロー図を構成する通常ブロック、保持ブロックおよび論理ブロックの各種ブロックに対応する関数が格納されている。
データフロー図記憶部１２０は、ブロック列作成部１４３によって作成されるブロック列、切り替えブロック領域作成部１４２によって作成される切り替えブロック領域および論理ブロック作成部１４１によって作成される論理ブロックから、ブロック接続部１４４によって作成されるデータフロー図を格納する。
【００４４】
ソースファイル記憶部１３０は、データフロー図からプログラムの自動生成が行われて生成された実装コードが格納される。
データフロー図作成部１４０は、論理ブロック作成部１４１、切り替えブロック領域作成部１４２、ブロック列作成部１４３およびブロック接続部１４４により構成される。なお、これらは、モニタ２１を介して、キーボード２２およびマウス２３を通じて、ユーザからの入力を受け付けることができる。
【００４５】
論理ブロック作成部１４１は、ユーザの操作入力を受け付け、機能ブロックライブラリ記憶部１１０に格納されている論理ブロックに対応する関数を参照し、そして、論理ブロックを作成する。
【００４６】
切り替えブロック領域作成部１４２は、ユーザの操作入力を受け付け、切り替えブロック領域を作成する。ブロック列作成部１４３にて作成されるブロック列の全て、もしくは一部の機能ブロックが、切り替えブロック領域作成部１４２にて作成された切り替えブロック領域に囲まれる。複数の機能ブロックが中に配置された切り替えブロック領域は、論理ブロックと接続され、論理ブロックに対応する関数から返される真の時のみ、切り替えブロック領域の中の機能ブロックによる処理が行われる。
【００４７】
ブロック列作成部１４３は、ユーザの操作入力を受け付け、機能ブロックライブラリ記憶部１１０に格納されてある各種ブロックに対応する関数を参照して、複数の機能ブロックを接続させてブロック列を作成する。
【００４８】
ブロック接続部１４４は、ブロック列作成部１４３によって作成されたブロック列が中に配置された、切り替えブロック領域作成部１４２によって作成された切り替えブロック領域に対して、論理ブロック作成部１４１によって作成された論理ブロックを接続させることによって、データフロー図が作成される。
【００４９】
ソースコード生成部１５０は、データフロー図記憶部１２０に格納されているデータフロー図から、機能ブロックライブラリ記憶部１１０に格納されてある各種ブロックに対応する関数を参照して、プログラムの自動生成が行われる。
【００５０】
次に、プログラム自動生成装置１００によって作成されたデータフロー図から実装コードを生成する処理について説明する。
図４は、実装コード生成の処理手順を示すフローチャートである。データフロー図作成部１４０によって作成されたデータフロー図から、ソースコード生成部１５０によって、プログラムを生成する処理について、図４を用いて説明する。
【００５１】
［ステップＳ１１］ソースコード生成部１５０は、選択した機能ブロックに対応するソースファイル記憶領域を確保する。
［ステップＳ１２］ソースコード生成部１５０は、データフロー図記憶部１２０から受け取ったデータフロー図のうち、開始ブロックから近い順に、未選択の機能ブロックを１つ選択する。
【００５２】
［ステップＳ１３］ソースコード生成部１５０は、ステップＳ１２にて選択したブロックが通常ブロックであるか判断する。通常ブロックである場合はステップＳ１４へ進められ、違う場合はステップＳ１５へ進められる。
【００５３】
［ステップＳ１４］ソースコード生成部１５０は、ステップＳ１３で選択した通常ブロックに対応する関数を機能ブロックライブラリ記憶部１１０から選択し、通常ブロックに対応する関数呼び出し文を作成し、ステップＳ１１で確保したソースファイル記憶領域に追記する。
【００５４】
［ステップＳ１５］ソースコード生成部１５０は、ステップＳ１２にて選択したブロックが保持ブロックであるか判断する。保持ブロックである場合はステップＳ１６へ進められ、違う場合はステップＳ１７へ進められる。
【００５５】
［ステップＳ１６］ソースコード生成部１５０は、ステップＳ１５で選択した保持ブロックに対応する関数を機能ブロックライブラリ記憶部１１０から選択し、保持ブロックに対応する関数呼び出し文を作成し、ステップＳ１１で確保したソースファイル記憶領域に追記する。
【００５６】
［ステップＳ１７］ソースコード生成部１５０は、ステップＳ１２にて選択したブロックが論理ブロックであるか判断する。論理ブロックである場合はステップＳ１８へ進められ、違う場合はステップＳ２９へ進められる。
【００５７】
［ステップＳ１８］ソースコード生成部１５０は、ステップＳ１７で選択した論理ブロックに対応する関数を機能ブロックライブラリ記憶部１１０から選択し、論理ブロックに対応する関数呼び出し文を作成し、ステップＳ１１で確保したソースファイル記憶領域に追記する。
【００５８】
［ステップＳ１９］ソースコード生成部１５０は、論理ブロックの次に、切り替えブロック領域の有無を判断する。切り替えブロック領域がある場合は、ステップＳ２０へ進められ、無い場合は、ステップＳ２３へ進められる。
【００５９】
［ステップＳ２０］ソースコード生成部１５０は、ステップＳ１９で切り替えブロック領域があると判断すると、切り替えブロック領域内に、通常ブロックを選択する。
［ステップＳ２１］ソースコード生成部１５０は、ステップＳ２０で通常ブロックを選択すると、それに対応する関数を機能ブロックライブラリ記憶部１１０から選択し、通常ブロックに対応する関数呼び出し文を作成し、ステップＳ１１で確保したソースファイル記憶領域に追記する。
【００６０】
［ステップＳ２２］ソースコード生成部１５０は、ステップＳ２０で選択した通常ブロックの次にさらにブロックがあるか判断する。次にブロックがある場合は、ステップＳ２１へ進められ、無い場合は、ステップＳ２３へ進められる。なお、次にブロックが無い場合は、切り替えブロック領域内の処理が終了し、切り替えブロック領域の外に続くブロックの処理となる。
【００６１】
［ステップＳ２３］ソースコード生成部１５０は、切り替えブロック領域の外にあるブロックが通常ブロックであるか判断する。通常ブロックである場合は、ステップＳ２４へ進められ、違う場合は、ステップＳ２５へ進められる。
【００６２】
［ステップＳ２４］ソースコード生成部１５０は、ステップＳ２３で選択した通常ブロックに対応する関数を機能ブロックライブラリ記憶部１１０から選択し、通常ブロックに対応する関数呼び出し文を作成し、ステップＳ１１で確保したソースファイル記憶領域に追記する。
【００６３】
［ステップＳ２５］ソースコード生成部１５０は、切り替えブロック領域の外にあるブロックが保持ブロックであるか判断する。保持ブロックである場合は、ステップＳ２６へ進められ、違う場合は、ステップＳ２７へ進められる。
【００６４】
［ステップＳ２６］ソースコード生成部１５０は、ステップＳ２５で選択した保持ブロックに対応する関数を機能ブロックライブラリ記憶部１１０から選択し、保持ブロックに対応する関数呼び出し文を作成し、ステップＳ１１で確保したソースファイル記憶領域に追記する。
【００６５】
［ステップＳ２７］ソースコード生成部１５０は、切り替えブロック領域の外にあるブロックが論理ブロックであるか判断する。論理ブロックである場合は、ステップＳ２８へ進められ、違う場合は、ステップＳ２９へ進められる。
【００６６】
［ステップＳ２８］ソースコード生成部１５０は、ステップＳ２７で選択した論理ブロックに対応する関数を機能ブロックライブラリ記憶部１１０から選択し、論理ブロックに対応する関数呼び出し文を作成し、ステップＳ１１で確保したソースファイル記憶領域に追記する。
【００６７】
［ステップＳ２９］ソースコード生成部１５０は、データフロー図のうち、ステップＳ１２で未選択のブロックがあるか判断する。未選択のブロックがある場合は、処理がステップＳ１２へ進められ、未選択のブロックが無い場合は、処理がステップＳ３０へ進められる。
【００６８】
［ステップＳ３０］ソースコード生成部１５０は、ステップＳ１１で確保したコード記憶領域にある実装コードをファイルに出力し、ソースファイル記憶部１３０に記憶して、処理がソースコード生成処理を終了する。
【００６９】
このようにして、ソースコード生成部１５０は、データフロー図のブロックごとにソースファイルに出力し、ソースファイル記憶部１３０に格納する。
このようなプログラム自動生成装置１００による、プログラム化されるデータフロー図について、以下に具体例として、データフロー図を挙げて説明する。
【００７０】
第１の例では、ブロック列の全てが切り替えブロック領域に囲まれる場合について説明する。
図５は、第１の例のデータフロー図を示す図である。
【００７１】
プログラム自動生成装置１００によって、図５に示すデータフロー図１２１を作成した場合を例に説明する。
データフロー図１２１は、開始ブロック１２１ａ、論理ブロック１２１ｂ、そして通常ブロック１２１ｄ，１２１ｅ，１２１ｆ、終端ブロック１２１ｇおよびこれらを囲む切り替えブロック領域１２１ａａを有する。
【００７２】
なお、データフロー図１２１は、開始ブロック１２１ａに対応する入力値が、論理ブロック１２１ｂに入力する。論理ブロック１２１ｂに対応する関数は、入力値に応じて、真または偽の値を返す。そして、真の時は、切り替えブロック領域１２１ａａ内の通常ブロック１２１ｄ，１２１ｅ，１２１ｆに対応する関数が順に処理を行って、終端ブロック１２１ｇに対応する出力値を出力する。
【００７３】
図６は、第１の例のデータフロー図から生成される実装コード例を示す図である。
図５のデータフロー図１２１からプログラム自動生成装置１００によって生成された実装コードの例を図６に示している。
【００７４】
実装コード１３１は、説明のためにＣ言語に類似の文法で記述されたものである。そして、ソースファイル記憶部１３０に格納されている。
関数宣言文１３１ａの引数は、図５のデータフロー図１２１の開始ブロック１２１ａ、および関数呼び出し文１３１ｂは、図５のデータフロー図１２１の論理ブロック１２１ｂに対応したものであり、引数の入力値“ｉｎ＿１”を関数に与えて出力データ“ｏｕｔ＿ｆ”を取得する。
【００７５】
ｉｆ文１３１ｃは、図５のデータフロー図１２１の切り替えブロック１２１ａａに対応したものである。出力データ“ｏｕｔ＿ｆ”が真の場合、図５のデータフロー図１２１の切り替えブロック領域１２１ａａ内の通常ブロック１２１ｄ，１２１ｅ，１２１ｆにて順に行われる処理に対応したものであり、入力データに対して、出力データ“ｏｕｔ＿ａ”が出力（１３１ｄ）され、入力データ“ｏｕｔ＿ａ”に対して、出力データ“ｏｕｔ＿ｂ”が出力（１３１ｅ）され、入力データ“ｏｕｔ＿ｂ”に対して、出力データ“ｏｕｔ＿ｃ”が取得（１３１ｆ）される。
【００７６】
なお、関数１３１ｇ，１３１ｈ，１３１ｉ，１３１ｊは、関数呼び出し文１３１ｂ，１３１ｄ，１３１ｅ，１３１ｆで呼び出される関数である。
なお、図５では、切り替えブロック領域１２１ａａに直接、論理ブロック１２１ｂの出力が接続されているが、その間に通常ブロックが挿入されても切り替えブロック１２１ａａなどの意味は同等である。
【００７７】
次に第２の例について説明する。
第２の例では、切り替えブロック領域から通常ブロックへ接続されている場合を例に挙げて説明する。
【００７８】
図７は、第２の例のデータフロー図を示す図である。
プログラム自動生成装置１００によって、図７に示すデータフロー図１２２が作成された場合を例に説明する。
【００７９】
データフロー図１２２は、開始ブロック１２２ａ、論理ブロック１２２ｂ、そして通常ブロック１２２ｄ，１２２ｅ，１２２ｆ，１２２ｇおよびこれらを囲む切り替えブロック領域１２２ａａ、通常ブロック１２２ｈ、終端ブロック１２２ｉを有する。
【００８０】
なお、データフロー図１２２は、開始ブロック１２２ａに対応する入力値が、論理ブロック１２２ｂに入力する。論理ブロック１２２ｂに対応する関数は、入力値に応じて、真または偽の値を返す。そして、真の時は、切り替えブロック領域１２２ａａ内の通常ブロック１２２ｄ，１２２ｅ，１２２ｆ，１２２ｇに対応する関数が順に処理を行う。そして、通常ブロック１２２ｇから、切り替えブロック領域１２２ａａの外から接続されている通常ブロック１２２ｈへ入力されて処理を行う。最後に、終端ブロック１２２ｉに対応する出力値を出力する。
【００８１】
図８は、第２の例のデータフロー図から生成される実装コード例を示す図である。
図７のデータフロー図１２２からプログラム自動生成装置１００によって生成された実装コードの例を図８に示している。
【００８２】
実装コード１３２は、説明のためにＣ言語に類似の文法で記述されたものである。そして、ソースファイル記憶部１３０に格納されている。
関数宣言文１３２ａの引数は、図７のデータフロー図１２２の開始ブロック１２２ａ、および関数呼び出し文１３２ｂは、図７のデータフロー図１２２の論理ブロック１２２ｂに対応したものであり、引数の入力値“ｉｎ＿１”を関数に与えて出力データ“ｏｕｔ＿ｆ”を取得する。
【００８３】
ｉｆ文１３２ｃは、図７のデータフロー図１２２の切り替えブロック１２２ａａに対応したものである。出力データ“ｏｕｔ＿ｆ”が真の場合、図７のデータフロー図１２２の切り替えブロック領域１２２ａａ内の通常ブロック１２２ｄ，１２２ｅ，１２２ｆ，１２２ｇにて順に行われる処理に対応したものであり、入力データに対して、出力データ“ｏｕｔ＿ａ”が出力（１３２ｄ）され、入力データ“ｏｕｔ＿ａ”に対して、出力データ“ｏｕｔ＿ｂ”が出力（１３２ｅ）され、入力データ“ｏｕｔ＿ｂ”に対して、出力データ“ｏｕｔ＿ｃ”が出力（１３２ｆ）され、入力データ“ｏｕｔ＿ｃ”に対して、出力データ“ｏｕｔ＿ｄ”が取得（１３２ｇ）される。他方、出力データ“ｏｕｔ＿ｆ”が偽の場合、図７のデータフロー図１２２の切り替えブロック領域１２２ａａ内において処理が行われないために、出力データが“ｏｕｔ＿ｄ＝０”（１３２ｈ）とされる。
【００８４】
そして、関数呼び出し文１３２ｉは、図７のデータフロー図１２２の通常ブロック１２２ｈに対応するものであり、図７のデータフロー図１２２の切り替えブロック領域１２２ａａからの出力データ“ｏｕｔ＿ｄ”が入力されて、出力データ“ｏｕｔ＿ｇ”が取得される。
【００８５】
なお、関数１３２ｊ，１３２ｋ，１３２ｌ，１３２ｍ，１３２ｎ，１３２ｏは、関数呼び出し文１３２ｂ，１３２ｄ，１３２ｅ，１３２ｆ，１３２ｇ，１３２ｉで呼び出される関数である。
【００８６】
次に第３の例について説明する。
第３の例では、切り替えブロック領域から保持ブロックへ接続されている場合を例に挙げて説明する。
【００８７】
図９は、第３の例のデータフロー図を示す図である。
プログラム自動生成装置１００によって、図９に示すデータフロー図１２３が作成された場合について説明する。
【００８８】
データフロー図１２３は、開始ブロック１２３ａ、論理ブロック１２３ｂ、そして通常ブロック１２３ｄ，１２３ｅ，１２３ｆ，１２３ｇおよびこれらを囲む切り替えブロック領域１２３ａａ、保持ブロック１２３ｈ、終端ブロック１２３ｉを有する。
【００８９】
なお、データフロー図１２３は、開始ブロック１２３ａに対応する入力値が、論理ブロック１２３ｂに入力する。論理ブロック１２３ｂに対応する関数は、入力値に応じて、真または偽の値を返す。そして、真の時は、切り替えブロック領域１２３ａａ内の通常ブロック１２３ｄ，１２３ｅ，１２３ｆ，１２３ｇに対応する関数が順に処理を行う。そして、通常ブロック１２３ｇから、切り替えブロック領域１２３ａａの外から接続されている保持ブロック１２３ｈへ入力し処理を行う。最後に、終端ブロック１２３ｉに対応する出力値を出力する。
【００９０】
図１０は、第３の例のデータフロー図から生成される実装コード例を示す図である。
図９のデータフロー図１２３からプログラム自動生成装置１００によって生成された実装コードの例を図１０に示している。
【００９１】
実装コード１３３は、説明のためにＣ言語に類似の文法で記述されたものである。そして、ソースファイル記憶部１３０に格納されている。
関数宣言文１３３ａは、図９のデータフロー図１２３の開始ブロック１２３ａの引数、および関数呼び出し文１３３ｂは、図９のデータフロー図１２３の論理ブロック１２３ｂに対応したものであり、引数の入力値“ｉｎ＿１”を関数に与えて出力データ“ｏｕｔ＿ｆ”を取得する。
【００９２】
ｉｆ文１３３ｃは、図９のデータフロー図１２３の切り替えブロック１２３ａａに対応したものである。出力データ“ｏｕｔ＿ｆ”が真の場合、図９のデータフロー図１２３の切り替えブロック領域１２３ａａ内の通常ブロック１２３ｄ，１２３ｅ，１２３ｆ，１２３ｇにて順に行われる処理に対応したものであり、入力データに対して、出力データ“ｏｕｔ＿ａ”が出力（１３３ｄ）され、入力データ“ｏｕｔ＿ａ”に対して、出力データ“ｏｕｔ＿ｂ”が出力（１３３ｅ）され、入力データ“ｏｕｔ＿ｂ”に対して、出力データ“ｏｕｔ＿ｃ”が出力（１３３ｆ）され、入力データ“ｏｕｔ＿ｃ”に対して、出力データ“ｏｕｔ＿ｄ”が取得（１３３ｇ）される。他方、出力データ“ｏｕｔ＿ｆ”が偽の場合、図９のデータフロー図１２３の切り替えブロック領域１２３ａａ内では処理は行われないが、出力データが“ｏｕｔ＿ｄ＝ｖａｒ＿ｉ”とされて、データが保持されるようにされている。
【００９３】
そして、関数呼び出し文１３３ｉは、図９のデータフロー図１２３の保持ブロック１２３ｈに対応するものであり、図９のデータフロー図１２３の切り替えブロック領域１２３ａａの出力データ“ｏｕｔ＿ｄ”が入力されて、出力データ“ｖａｒ＿ｉ”が取得される。
【００９４】
なお、関数１３３ｊ，１３３ｋ，１３３ｌ，１３３ｍ，１３３ｎ，１３３ｏは、関数呼び出し文１３３ｂ，１３３ｄ，１３３ｅ，１３３ｆ，１３３ｇ，１３３ｉで呼び出される関数である。
【００９５】
次に第４の例について説明する。
第４の例では、切り替えブロック領域内の論理ブロックから切り替えブロック領域外の通常ブロックへ接続されている場合を例に挙げて説明する。
【００９６】
図１１は、第４の例のデータフロー図を示す図である。
プログラム自動生成装置１００によって、図１１に示すデータフロー図１２４が作成された場合について説明する。
【００９７】
データフロー図１２４は、開始ブロック１２４ａ、論理ブロック１２４ｂ、そして通常ブロック１２４ｄ，１２４ｅ，１２４ｆ、論理ブロック１２４ｇおよびこれらを囲む切り替えブロック領域１２４ａａ、通常ブロック１２４ｉ、終端ブロック１２４ｊを有する。
【００９８】
なお、データフロー図１２４は、開始ブロック１２４ａに対応する入力値が、論理ブロック１２４ｂに入力する。論理ブロック１２４ｂに対応する関数は、入力値に応じて、真または偽の値を返す。そして、真の時は、切り替えブロック領域１２４ａａ内の通常ブロック１２４ｄ，１２４ｅ，１２４ｆ、論理ブロック１２４ｇに対応する関数が順に処理を行う。そして、論理ブロック１２４ｇに対応する関数が真を返すとき、論理ブロック１２４ｇから、切り替えブロック領域１２４ａａの外から接続されている通常ブロック１２４ｉへ入力し処理を行う。最後に、終端ブロック１２４ｊに対応する出力値を出力する。
【００９９】
図１２は、第４の例のデータフロー図から生成される実装コード例を示す図である。
図１１のデータフロー図１２４からプログラム自動生成装置１００によって生成された実装コードの例を図１２に示している。
【０１００】
実装コード１３４は、説明のためにＣ言語に類似した文法で記述されたものである。そして、ソースファイル記憶部１３０に格納されている。
関数宣言文１３４ａの引数は、図１１のデータフロー図１２４の開始ブロック１２４ａおよび関数呼び出し文１３４ｂは、図１１のデータフロー図１２４の論理ブロック１２４ｂに対応したものであり、引数の入力値“ｉｎ＿１”を関数に与えて出力データ“ｏｕｔ＿ｆ”を取得する。
【０１０１】
ｉｆ文１３４ｃは、図１１のデータフロー図１２４の切り替えブロック１２４ａａに対応したものである。出力データ“ｏｕｔ＿ｆ”が真の場合、図１１のデータフロー図１２４の切り替えブロック領域１２４ａａ内の通常ブロック１２４ｄ，１２４ｅ，１２４ｆおよび論理ブロック１２４ｇにて順に行われる処理に対応したものであり、入力データに対して、出力データ“ｏｕｔ＿ａ”が出力（１３４ｄ）され、入力データ“ｏｕｔ＿ａ”に対して、出力データ“ｏｕｔ＿ｂ”が出力（１３４ｅ）され、入力データ“ｏｕｔ＿ｂ”に対して、出力データ“ｏｕｔ＿ｃ”が出力（１３４ｆ）され、入力データ“ｏｕｔ＿ｃ”に対して、出力データ“ｏｕｔ＿ｄ”が取得（１３４ｇ）される。他方、出力データ“ｏｕｔ＿ｆ”が偽の場合、“０”とすると出力に不具合が生じるために、出力データが“ｏｕｔ＿ｄ＝ｆａｌｓｅ”とされている。
【０１０２】
そして、関数呼び出し文１３４ｉは、図１１のデータフロー図１２４の通常ブロック１２４ｉに対応するものであり、図１１のデータフロー図１２４の切り替えブロック領域１２４ａａの出力データ“ｏｕｔ＿ｄ”が入力されて、出力データ“ｏｕｔ＿ｊ”が取得される。
【０１０３】
なお、関数１３４ｊ，１３４ｋ，１３４ｌ，１３４ｍ，１３４ｎ，１３４ｏは、関数呼び出し文１３４ｂ，１３４ｄ，１３４ｅ，１３４ｆ，１３４ｇ，１３４ｉで呼び出される関数である。
【０１０４】
次に第５の例について説明する。
第５の例では、切り替えブロック領域からの出力が分岐しており、一方が通常ブロックと接続されており、他方は保持ブロックと接続されている場合を例に挙げて説明する。
【０１０５】
図１３は、第５の例のデータフロー図を示す図である。
プログラム自動生成装置１００によって、図１３のデータフロー図１２５が作成された場合について説明する。
【０１０６】
データフロー図１２５は、開始ブロック１２５ａ、論理ブロック１２５ｂ、そして通常ブロック１２５ｄ，１２５ｅ，１２５ｆ，１２５ｇおよびこれらを囲む切り替えブロック領域１２５ａａ、通常ブロック１２５ｈ、保持ブロック１２５ｉ、終端ブロック１２５ｊ，１２５ｋを有する。
【０１０７】
この図１３のデータフロー図１２５では、切り替えブロック領域１２５ａａ外に信号が出力される時、他の実施例と異なり、分岐しているために、ここでエラーが判定される。分岐の一方の出力先は通常ブロックで、他方が保持ブロックである場合は、ｉｆ文、ｅｌｓｅ節の生成が一意にできないために、エラーが判定されて、実装コードは出力されない。
【０１０８】
なお、第１〜第５の例では、説明のためにＣ言語に類似した文法で記述された実装コードを生成したが、第１の実施の形態に係るプログラム自動生成装置は特定のプログラミング言語に特化したものではなく、他のプログラミング言語への応用も容易に行える。
【０１０９】
以上、本発明のプログラム自動生成装置、プログラム自動生成方法およびプログラム自動生成プログラムを、図示の実施の形態について基づいて説明したが、本発明はこれに限定されるものではなく、各部の構成は、同様の機能を有する任意の構成のものに置換することができる。また本発明に、他の任意の構成物や工程が付加されてもよい。
【０１１０】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、プログラム自動生成装置１００が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどが挙げられる。磁気記録装置としては、例えば、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどが挙げられる。光ディスクとしては、例えば、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）などが挙げられる。光磁気記録媒体としては、例えば、ＭＯ（Magneto-Optical disk）などが挙げられる。
【０１１１】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１１２】
プログラム自動生成装置を実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記録装置に格納する。そして、コンピュータは、自己の記録装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【図面の簡単な説明】
【０１１３】
【図１】本実施の形態の概念図である。
【図２】プログラム自動生成装置のハードウェア構造を示す図である。
【図３】プログラム自動生成装置の機能を示すブロック図である。
【図４】実装コード生成の処理手順を示すフローチャートである。
【図５】第１の例のデータフロー図を示す図である。
【図６】第１の例のデータフロー図から生成される実装コード例を示す図である。
【図７】第２の例のデータフロー図を示す図である。
【図８】第２の例のデータフロー図から生成される実装コード例を示す図である。
【図９】第３の例のデータフロー図を示す図である。
【図１０】第３の例のデータフロー図から生成される実装コード例を示す図である。
【図１１】第４の例のデータフロー図を示す図である。
【図１２】第４の例のデータフロー図から生成される実装コード例を示す図である。
【図１３】第５の例のデータフロー図を示す図である。
【図１４】従来のデータフロー図の例を示す図である。
【図１５】従来のデータフロー図の別の例を示す図である。
【符号の説明】
【０１１４】
２  入力装置
３  実装コード
１０  プログラム自動生成装置
１１  機能ブロックライブラリ記憶手段
１２  データフロー図記憶手段
１２ａ  データフロー図
１３  データフロー図作成手段
１３ａ  論理ブロック作成手段
１３ｂ  切り替えブロック領域作成手段
１３ｃ  ブロック列作成手段
１３ｄ  ブロック接続手段
１４  実装コード生成手段
【図１】
2008084261.tif 000003
【図２】
2008084261.tif 000004
【図３】
2008084261.tif 000005
【図４】
2008084261.tif 000006
【図５】
2008084261.tif 000007
【図６】
2008084261.tif 000008
【図７】
2008084261.tif 000009
【図８】
2008084261.tif 000010
【図９】
2008084261.tif 000011
【図１０】
2008084261.tif 000012
【図１１】
2008084261.tif 000013
【図１２】
2008084261.tif 000014
【図１３】
2008084261.tif 000015
【図１４】
2008084261.tif 000016
【図１５】
2008084261.tif 000017