JP2009181446A - プログラム生成装置およびブロック線図生成装置 - Google Patents

プログラム生成装置およびブロック線図生成装置 Download PDF

Info

Publication number
JP2009181446A
JP2009181446A JP2008021342A JP2008021342A JP2009181446A JP 2009181446 A JP2009181446 A JP 2009181446A JP 2008021342 A JP2008021342 A JP 2008021342A JP 2008021342 A JP2008021342 A JP 2008021342A JP 2009181446 A JP2009181446 A JP 2009181446A
Authority
JP
Japan
Prior art keywords
block
block diagram
block element
output
input
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
Application number
JP2008021342A
Other languages
English (en)
Inventor
Ena Ishii
井 恵 奈 石
Mitsunobu Yoshida
田 充 伸 吉
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2008021342A priority Critical patent/JP2009181446A/ja
Priority to US12/361,704 priority patent/US8671386B2/en
Publication of JP2009181446A publication Critical patent/JP2009181446A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】プログラム(ソースコード)からブロック線図への復元を可能にするとともに、ソースコード内の各命令とブロック線図の各部分とを対応づけを可能とする。
【解決手段】本発明の装置は、ブロック線図を分岐点で複数に分割し、各分割片において分岐点に接続されていたデータ線の一端に分岐ブロック要素を接続することにより、複数のブロック線図片を生成するブロック線図分割手段と、各ブロック線図片の処理を実現するプログラム命令をそれぞれ生成するプログラム命令生成手段と、各プログラム命令の実行順序を決定する実行順序決定手段と、ブロック線図片毎にブロック線図片の構造情報を生成する構造情報生成手段と、実行順序に従って各プログラム命令を配置し、各ブロック線図片の構造情報を各プログラム命令に対応するコメント行に記述することによりプログラムを生成するプログラム生成手段と、を備える。
【選択図】図1

Description

本発明はたとえばモデルベース開発ツールに利用可能なプログラム生成装置およびブロック線図生成装置に関する。
ソフトウェアの開発においてモデルベース設計/開発と呼ばれる手法が存在する。モデルベース設計/開発とはモデルを用いてソフトウェアの設計を行い、そのモデルに基づいてソフトウェアの開発を行う方法のことである。
中でも、制御系ソフトウェアのモデルベース設計とはブロック線図を用いて制御系設計およびシミュレーションを行い、ソフトウェアの開発を行う方法をいう。制御ソフトウェアのモデルベース設計/開発を支援するためにブロック線図からソフトウェアのソースコードを生成するツールがいくつか知られている(たとえば非特許文献1、2を参照)。
ブロック線図からのソースコードの生成に関していくつかの技術が知られている。特許文献1では複数のブロックに対応する処理をまとめて1つのソースコードとするグルーピング機能について述べられている。特許文献2ではコード生成対象のブロックとシミュレーションでのみ用いるブロックを命名規則によって区別することで1つのブロック線図内の必要な部分のみコード生成を行う技術に関連して、ブロック線図のシリアライズ(閉路除去)手段としてブロック線図上の矢印をすべて反対向きにして後退弧を切断する方法について述べられている。非特許文献3ではブロック線図をプログラム化する際にhistory block(記憶ブロックに相当)を前側と後側に分割する方法が示されている。
また、プログラムからモデルを抽出する技術として、オブジェクト指向言語で記述されたプログラムからUML(Unified Modeling Language)のクラス図を生成する技術(たとえば特許文献3を参照)などが知られている。
特開2000-20291号公報 特開2005-222221号公報 特開平11-95990号公報 http://www.cybernet.co.jp/matlab/products/product_listing/rtwembedded/ http://www.dspace.jp/ww/ja/jap/home/products/sw/pcgs/targetli.cfm T. Callenkamp, "Implementation of aReal0Time Simulator for Modelling the Dynamics of Closely Coupled Drive Systems", ISIE’93 IEEE International Symposium on Industrial Electronics, pp.341-346
ブロック線図モデルに関するモデルベース開発ツールではソースコードからモデル(ブロック線図)への変換は実現されていない。一方制御系ソフトウェアの開発においては既存のソフトウェアの再利用が一般的に行われている。この際に、従来のモデルベース開発ツールではソフトウェアからのモデルの復元が出来ないため、ソフトウェアとは別にモデル情報を管理しておく必要があったが、ソフトウェアとモデル情報とを別々に管理することは労力が大きい等、種々の問題があった。またソースコード内の各命令とブロック線図の各部分との対応が分かると、ソフトウェアの再利用に便利である。
本発明は、プログラム(ソースコード)からブロック線図への復元を可能にするとともに、ソースコード内の各命令とブロック線図の各部分とを対応づけを可能としたプログラム生成装置およびブロック線図生成装置ならびにこれらの方法を提供する。
本発明の一態様としてのプログラム生成装置は、
入力ブロック要素と、演算ブロック要素と、出力ブロック要素と、前記入力ブロック要素、前記演算ブロック要素および前記出力ブロック要素間のデータの流れを示すデータ線と、前記データ線を分岐する分岐点と、を有するブロック線図を読み出すブロック線図読出手段と、
前記分岐点で前記ブロック線図を入力側および出力側に分割することにより入力側片と1つ以上の出力側片とを生成し、
前記入力側片および前記1つ以上の出力側片において前記分岐点に接続されていたデータ線端に分岐ブロック要素を接続することにより、
前記入力側片および前記1つ以上の出力側片に対応して、複数のブロック線図片を生成するブロック線図分割手段と、
各前記ブロック線図片の処理を実現するプログラム命令をそれぞれ生成するプログラム命令生成手段と、
前記入力側片に対応するプログラム命令が前記出力側片に対応するプログラム命令よりも先に実行されるように、各前記プログラム命令の実行順序を決定する実行順序決定手段と、
前記ブロック線図片毎に前記ブロック線図片の構造情報を生成する構造情報生成手段と、
前記実行順序に従って各前記プログラム命令を配置し、
各前記ブロック線図片の構造情報を各前記プログラム命令に対応するコメント行に記述することにより
プログラムを生成するプログラム生成手段と、を備え、
前記構造情報生成手段は、
各前記ブロック線図片における末尾のブロック要素が木構造の根ノードの子ノードに割り当てられ、
前記根ノードと異なる各親ノードの子ノードには、前記各親ノードに割り当てられたブロック要素の直前の処理を行うブロック要素が割り当てられるように、
各前記ブロック線図片の構造情報を生成する、ことを特徴とする。
本発明の一態様としてのプログラム生成装置は、
入力ブロック要素、演算ブロック要素および出力ブロック要素のうち少なくとも前記入力ブロック要素および前記出力ブロック要素と、
サブシステムブロックと、
入力ブロック要素、演算ブロック要素、出力ブロック要素および前記サブシステムブロックのうち少なくとも前記入力ブロック要素、前記出力ブロック要素および前記サブシステムブロック間のデータの流れを示すデータ線と、
入力サブブロック要素と、演算サブブロック要素と、出力サブブロック要素と、前記入力サブブロック要素、前記演算サブブロック要素および前記出力サブブロック要素間のデータの流れを示すデータ線とを含む、前記サブシステムブロックのサブブロック線図と
を含む多段階層ブロック線図を読み出すブロック線図読出手段と、
前記多段階層ブロック線図における前記サブシステムブロックを前記サブブロック線図に置換し、前記サブシステムブロックの入力に接続されていたデータ線を前記入力サブブロック要素の入力に接続し、前記サブシステムブロックの出力に接続されていたデータ線を前記出力サブブロック要素の出力に接続することにより、単階層ブロック線図を生成する単階層ブロック線図生成手段と、
前記単階層ブロック線図の構造情報を生成する構造情報生成手段と、
前記単階層ブロック線図の処理を実現するプログラム命令を生成するプログラム命令生成手段と、
前記プログラム命令を配置し、
前記プログラム命令に対応するコメント行に前記単階層ブロック線図の構造情報を記述することにより、
プログラムを生成するプログラム生成手段と、を備える。
本発明の一態様としてのブロック線図生成装置は、
各々ブロック識別子を有する、入力ブロック要素と、演算ブロック要素と、出力ブロック要素と、データ線の分岐を表す分岐点ブロック要素とを、根ノードと異なる各ノードに割り当てた木構造のデータを、プログラムのコメント行から読み出すデータ読出手段と、
子ノードに割り当てられたブロック要素から、前記子ノードの親ノードに割り当てられたブロック要素へ向けてデータ線を接続することを、前記根ノードの各子ノードから開始して、前記木構造の各葉ノードまで順次行うことにより、複数のブロック線図片を生成するブロック線図片生成手段と、
各前記ブロック線図片間で同一のブロック識別子を持つ分岐点ブロック要素を統合して前記分岐点を形成することにより各前記ブロック線図片を合成したブロック線図を生成する合成手段と、
を備える。
本発明の一態様としてのブロック線図生成装置は、
入力ブロック要素と、出力ブロック要素と、演算ブロック要素とのうち少なくとも前記入力ブロック要素および出力ブロック要素と、
演算サブブロック要素と、データを受ける第1の入力サブブロック要素と、前記第1の入力サブブロック要素で受けたデータを送出する第2の入力サブブロック要素と、データを受ける第1の出力サブブロック要素と、前記第1の出力サブブロック要素で受けたデータを出力する第2の出力ブロック要素とを、
前記根ノードと異なる前記各ノードに割り当てた木構造のデータをプログラムのコメント行から読み出す木構造読出手段と、
子ノードに割り当てられた要素から、前記子ノードの親ノードに割り当てられた要素へ向けてデータ線により接続することを、各葉ノードを起点として前記根ノードの各子ノードまで順次行うことにより、複数のブロック線図片を生成するブロック線図片生成手段と、
第1および第2の入力サブブロック要素同士を単一の入力サブブロック要素に統合し、第1および第2の出力サブブロック要素同士を単一の出力サブブロック要素に統合することにより、各前記ブロック線図片を合成した単階層ブロック線図を生成する単階層ブロック線図生成手段と、
前記単階層ブロック線図において、前記単一の入力サブブロック要素、前記演算サブブロック要素および前記出力サブブロック要素と、これらの要素間を接続するデータ線とを含むサブブロック線図を特定し、
前記サブブロック線図をサブシステムブロックによって置換し、前記単一の入力サブブロック要素の入力に接続されていたデータ線を前記サブシステムブロックの入力に接続し、前記単一の出力サブブロック要素の出力に接続されていたデータ線を前記サブシステムブロックの出力に接続することによりブロック線図を生成し、
前記サブブロック線図と前記ブロック線図とを含む多段階層ブロック線図を出力する多段階層ブロック線図生成手段と、を備える。
本発明により、プログラム(ソースコード)からブロック線図への復元を可能にするとともに、ソースコード内の各命令とブロック線図の各部分とを対応づけが可能となる。
以下、図面を参照しながら、本発明の実施の形態を説明する。
図1は本発明の一実施形態によるブロック線図−プログラム相互変換システムの構成を示す図である。図1において10はプログラム生成装置の入力となるブロック線図、20はプログラム生成装置、30はプログラム生成装置によって生成されるプログラム(ソースコード)である。ブロック線図生成装置40はプログラム30を入力としてブロック線図10を生成し、生成したブロック線図10を出力する。プログラム生成装置20およびブロック線図生成装置40は例えばパーソナルコンピュータ(PC:Personal Computer)上などで実行される。
以下ではまず図1のブロック線図−プログラム相互変換システムの概要について説明し、その後、本システムの詳細を具体的に説明する。
プログラム生成装置20はブロック線図10から実行順情報22を生成する実行順生成処理部21と、実行順情報22からプログラム30を生成するプログラム生成処理部23からなる。
実行順生成処理部21は、図示しない記憶部からブロック線図(後述する図2参照)を読み出す。すなわち、実行順生成処理部21は、ブロック線図を読み出すブロック線図読出手段を備える。ブロック線図は、入力ブロック要素と、演算ブロック要素と、出力ブロック要素と、入力ブロック要素、演算ブロック要素および出力ブロック要素間のデータの流れを示すデータ線と、データ線を分岐する分岐点と、を有する。入力ブロック要素はブロックの種類ごとに定められた処理を行い、処理された信号を出力するブロック、出力ブロック要素は自身へ入力された信号に対してブロックの種類ごとに定められた処理を行うブロック、演算ブロック要素は、自身へ入力された信号に対してブロックの種類ごとに定められた処理を行い、処理された信号を出力するブロックである。
実行順生成処理部21は、ブロック線図を分岐点で入力側と出力側とに分割することにより入力側片と1つ以上の出力側片とを生成する。たとえば分岐点から出力側への分岐が複数あり、かつこれらの分岐が再度結合しないときは各分岐に応じてそれぞれ出力側片を生成し、再度結合するときは1つの出力側片を生成するようにする。実行順生成処理部21は、入力側片および各出力側片において分岐点に接続されていたデータ線端に分岐ブロック要素を接続することにより、複数のブロック線図片(後述する図5参照)を生成する。本段落で述べた処理は、ブロック線図分割手段の処理に相当し、実行順生成処理部21は、ブロック線図分割手段を備える。
実行順生成処理部21は、ブロック線図片毎にブロック線図片の構造情報を生成する。すなわち実行順生成処理部21は、各ブロック線図片の構造情報をそれぞれ生成する構造情報生成手段を備える。各ブロック線図片の構造情報は、各ブロック線図片における末尾のブロック要素が木構造の根ノードの子ノードに割り当てられ、根ノードと異なる各親ノードの子ノードには、各親ノードに割り当てられたブロック要素の直前の処理を行うブロック要素が割り当てられるように生成される(後述する図6、図11参照)。
実行順生成処理部21は、各ブロック線図片の処理を実現するプログラム命令の実行順序を決定する。より詳細には、上記入力側片に対応するプログラム命令が上記出力側片に対応するプログラム命令よりも先に実行されるように、各プログラム命令の実行順序を決定する。このように実行順生成処理部21は、各プログラム命令の実行順序を決定する実行順序決定手段を備える。
構造情報生成手段により生成された各ブロック線図片の構造情報と、実行順序決定手段により決定された各プログラム命令の実行順序とを併せ持った情報は実行順情報22に相当し、この実行順情報22は実行順生成処理部21の出力となる。実行順情報22の一例を図6に示す。図中左側にあるブロック線図片に対応するプログラム命令ほど先に実行される意味を含んでいる。図6の詳細は後述する。
プログラム生成処理部23は、各ブロック線図片の処理を実現するプログラム命令(後述する図8参照)を生成する。そして、各生成したプログラム命令を実行順序決定手段により決定された実行順序にしたがって配置し、各ブロック線図片の構造情報を各プログラム命令に対応するコメント行に記述することによりプログラム30(後述する図12参照)を生成する。プログラム生成処理部23は、各ブロック線図片の処理を実現するプログラム命令を生成するプログラム命令生成手段と、各生成されたプログラム命令と各ブロック線図片の構造情報とから実行順序に従ってプログラムを生成するプログラム生成手段とを備える。
ブロック線図生成装置40はプログラム30から実行順情報22を抽出する実行順抽出処理部41と、実行順情報22からブロック線図10を生成するブロック線図生成処理部42からなる。
実行順抽出処理部41は、プログラム30のコメント行からブロック線図片の構造情報を読み出す。読み出したブロック線図片の構造情報の集合は木構造を有し、この木構造のデータは実行順情報22に相当する。この木構造では、入力ブロック要素と、演算ブロック要素と、出力ブロック要素と、データ線の分岐を表す分岐点ブロック要素とが、根ノードと異なる各ノードに割り当てられている。実行順抽出処理部41は、プログラム30のコメント行から木構造のデータすなわち実行順情報22を読み出すデータ読出手段を備える。
ブロック線図生成処理部42は、子ノードに割り当てられたブロック要素から、子ノードの親ノードに割り当てられたブロック要素へ向けてデータ線を接続することを、根ノードの各子ノードから、木構造の各葉ノードまで順次行うことにより、複数のブロック線図片を生成する。そして、各ブロック線図片間で同一のブロック識別子を持つ分岐点ブロック要素を統合して分岐点を形成することにより各ブロック線図片を合成したブロック線図を生成する。このようにブロック線図生成処理部42は、上記実行順情報22から複数のブロック線図片を生成するブロック線図片生成手段と、複数のブロック線図片を合成してブロック線図を生成する合成手段とを備える。
以下、図1のブロック線図−プログラム相互変換システムについてさらに詳細に説明する。
図2にブロック線図10の一例101を示す。1001は入力ブロック要素in1、1002、1003は出力ブロック要素out1、out2、1004、1005、1006は演算ブロック要素a、b、cであり、1007〜1010は信号線(本発明のデータ線に相当する)、1011は分岐点である。図中のIn、Out、A、B、Cはブロック要素の種類であり、in1、a、b、c、out1、out2はブロック要素を識別する名前である。ブロック線図101は、入力ブロック要素1001から入力された信号に処理A、処理Bを順に施した信号を出力ブロック1002から出力し、入力ブロック要素1001から入力された信号に処理A、処理Cを順に施した信号を出力ブロック1003から出力することを表している。
ブロック線図101をプログラム生成装置20もしくはブロック線図生成装置40内で扱う際のデータ構造の一例102を図3に示す。1101〜1106がブロック要素1001〜1006を表し、1107〜1110が信号線を表す。
ブロック要素は種類属性、名前属性の他に、ブロックの種類毎に定められた属性、およびブロックの持つ入力端子の数等の属性を持つ。ブロックの種類毎に定められた属性としては、定数倍する機能を持つブロックの場合における定数、正弦波を発生する機能を持つブロックの場合における振幅と振動数といったものがある。定数等のブロックの種類毎に定められた属性については実行順情報を生成する際には利用しないためここでは表示していない。また、ブロック線図101では演算ブロック要素及び出力ブロック要素の入力端子はすべて1個(入力ブロック要素の入力端子は0個)であるのでここでは表示していない。入力端子が複数あるブロックを持つブロック線図については実施例2で説明する。
信号線は始点と終点のブロック要素の名前および端子番号を属性として持つが、上述のようにここでは端子番号は省略する。また分岐点は1108、1111a〜1111bのように、始点属性のみを持つ信号線要素と終点属性のみを持つ分岐線要素との組み合わせによって表現する。
ブロック線図101はたとえばデータ構造102を表すテキストファイルの形式でプログラム生成装置20に入力される。データ構造102を表すファイルの一例を図4に示す。
図2のブロック線図101から実行順生成処理部21によって生成されるブロック線図片の集合(実行順情報22)の一例221を図5に示す。2201〜2206はブロック要素1001〜1006に対応するブロック要素である。2221〜2223は分岐点ブロックであり、分岐点1011を入力側と出力側に分割したものである。同一の分岐点から分割された分岐点ブロックであるということは分岐点ブロックの名前属性が同一(a_out)であることから判断可能である。
ブロック線図片の集合221を表す実行順情報のデータ構造の一例222を図6に示す。データ構造の一例222は木構造を有し、根の子要素2220を根とする各部分木が、図5の各ブロック線図片に対応する。データ構造の一例222は、実行順木とも称される。
実行順生成処理部21の処理の概要について、入力をデータ構造102で示されるブロック線図101、出力をデータ構造222で示される実行順情報221とし、図7に示す流れ図を参照して説明する。
実行順生成処理部21においてはデータ構造102の有する各出力ブロック要素に対し、まず実行順木222の根に子要素として出力ブロック要素を追加する処理を行い、次にその出力ブロック要素を現在のブロックとして図7の流れ図に示す処理を行う、ということを繰り返すことにより、実行順情報を生成する。
データ構造102は1102と1103の2つの出力ブロックを有する。そこでまず、out1出力ブロック要素1102をout1出力ブロック要素2202として実行順木222の根の直下に追加し、図7の流れ図の開始2101から処理を行う。out1出力ブロック要素1002を終点とする信号線要素1109は分岐線ではないため、判断2102はNoとなり、判断2107に進む。信号線1109の始点である演算ブロック要素1105は記憶ブロックではないため判断2107はNoとなり判断2109に進む。信号線1109の始点である演算ブロック要素1105は入力ブロックでもないため、判断2109もNoとなり処理2112に進み、out1出力ブロック要素2202の子要素としてブロック要素2205(=ブロック要素1105)を登録する。
次にループ2113の処理を行うが、ブロック線図が入力端子が1個以下のブロック要素のみからなる場合、ループ端2113からループ端2116間の処理は処理2115を1回実行することと等価となる。処理2115では信号線1109の始点である演算ブロック要素1105を現在ブロックとして開始2101から始まる処理を再帰的に呼び出す。
ブロック要素1105を終点とする信号線は分岐線1111aであるため、判断2102はYesとなり処理2103に進む。処理2103で現在ブロック2205の下に分岐点ブロック2222を登録し、判断2104に進む。この際に登録する分岐点ブロックの名前属性の決定法はブロック線図上で該当する信号線に名前がつけられている場合はその名前にする、なければ規則を設定しその規則に従って名前をつけるなどの方法をとることが可能である。ここではブロック線図上でブロックa(ブロック要素1004)の出力に相当する信号であるのでa_outという名前属性を設定することとする。
実行順木の根2200の子要素にa_outという名前属性を持つ分岐点ブロックは存在しないため判断2104はNoとなり、処理2106によって分岐点ブロック2221が登録される。信号線1108の始点である演算ブロック1104は記憶ブロック、入力ブロックのいずれでもないため判断2107、2109はNoとなり、処理2112によってブロック要素2204(=ブロック要素1104)が分岐点ブロック2221の子要素として登録される。
次に処理2115によってブロック要素1104を現在ブロックとして始点2101から始まる処理が再帰的に呼び出される。ブロック要素1104を終点とする信号線1107は分岐線ではないため判断2102はNo、信号線1107の始点である入力ブロック要素1101は記憶ブロックではなく入力ブロックであるので判断2107はNo、判断2109はYesとなり処理2110によって入力ブロック要素2201が2204の子要素として追加され、終了2111によって処理は呼び出し元に戻る。
呼び出し元は2115であり、終了2117によって処理が呼び出し元に戻ることを2回繰り返し出力ブロック要素1002に対する処理は終了する。
データ構造102が有するもう1つの出力ブロック要素である出力ブロック要素1103(1003)に対しても同様に図7の流れ図に従って処理を行うことでブロック要素2203、2206、2223が登録される。ここで処理2103においてブロック要素2223を登録した後の判断2104でa_outという名前を持つ分岐点ブロックが実行順木の根の子要素として存在する(ブロック要素2221)ため、Yesとなり終了2105によって処理が終了となる。
上述のアルゴリズムによって実行順木(実行順情報)を生成する場合、ブロック線図片が生成される順序に関しては、まず2222、2205、2202からなるブロック線図片(図5参照)が生成され、次に2201、2204、2221からなるブロック線図片が生成され、最後に2223、2206、2203からなるブロック線図片が生成される。しかし実際のプログラム30を生成する際には分岐点ブロックの入力側の演算である2201、2204、2221からなるブロック線図片を分岐点ブロックの出力側の演算である残り2つのブロック線図片よりも先に計算するようにする必要がある。そこで、実行順木の根2200の直接の子要素を根とする部分木のうち部分木の根が分岐点ブロックであるものが、葉として同じ名前の分岐点ブロックを持つものよりも先に計算されるというブロック線図片(部分木)間の実行順序の情報を付加する。図6のデータ構造222では先に演算するブロック線図片を左側に書くことでブロック線図片(部分木)間の実行順序を示している。
プログラム生成処理部23の処理についてデータ構造222で表される実行順情報221(図5参照)を入力として説明する。その際に出力されるプログラムの一例301を図8に示す。実行順情報からプログラムを生成する際には各ブロック線図片の最後の要素(実行順木における各部分木の根に相当)がプログラムの1文で代入される(数式表現の場合左辺に相当する)値となり、最後の要素の直前の要素がプログラムの1文で最後に行われる演算となり、各ブロックの入力は直前のブロックの出力となる。図5においてブロック要素2201、2204、2221からなるブロック線図片の場合、ブロック2201の出力がブロック要素2204の入力となり、ブロック要素2204の出力が2221に代入される。これをプログラミング言語で表すと図8の3001となる。
プログラム生成処理部23の処理の一例としてブロック線図片に相当する各部分木に対して図9に示す流れ図の処理を行う方法がある。ブロック要素2201、2204、2221からプログラム3001を生成する手順について図9の流れ図、および図10に示すスタックの内容を参照して説明する。処理2302によって部分木の内容をすべてスタックに格納した状態が2390である。その後、処理2304によって被演算子in1と演算子(関数)Aが取り出され、処理2306によって作成された式が処理2307によって再びスタックに格納された状態が2391である。処理2307の後再びループ2303を実行し、スタックの内容が被演算子のみであるので処理2309によってプログラム命令3001を生成して終了2310によって部分木に対する処理が終了する。
同様にして、ブロック要素2222、2205、2202からなるブロック線図片からプログラム命令3002、ブロック要素2223、2206、2203からなるブロック線図片からプログラム命令3003が生成される。
ここで実行順情報222はたとえば図11に示す実行順情報223のようにテキスト形式で表現することも可能である。また、実行順情報222はプログラムの1文に対応する単位で区切られているため、プログラムの1文毎に実行順情報をテキスト形式でコメントとして付加することが可能となる。図8のプログラム301に図11の実行順情報223をコメントとして挿入したものの例302を図12に示す。尚、ここで行頭の#はプログラム301の記述言語におけるコメント文を示す。プログラム302においては、その他のコメント文と区別するための方法として実行順情報を表すコメント文については#を行頭に2文字続けることで表している。プログラム生成処理部23は、このようにプログラム301に実行順情報223をコメントとして挿入することによりプログラム302(図1のソースコード30に対応)を生成し、出力する。プログラムに対応するコメントはプログラミング言語におけるコメント文を用いて記述する方法以外に、プログラム命令の1文毎に識別情報をプログラミング言語におけるコメント文として付加するようにし、一方、対応する構造情報は同一の識別情報を付加した上、プログラム命令とは別のファイルに保存する方法によって管理することも可能である。
以上プログラム生成装置20について説明した。以下、ブロック線図生成装置40について説明する。
ブロック線図生成装置40にはたとえば図12のプログラム302のような実行順情報を挿入されたプログラムが入力される。
実行順情報抽出部41においてはプログラム302からコメント部を抽出し、実行順情報223(図11参照)のような実行順情報ファイルを生成する。実行順情報抽出部41の処理は例えばプログラム302を1行ずつ読み込み、その中から行頭に#が2文字続いている行だけを出力ファイルに書き込むなどの方法によって実現する。
ブロック線図生成部42では実行順情報223を入力としてブロック線図10を生成する。
ブロック線図生成部42の処理の流れを実行順情報のデータ構造222(図6参照)から図14に示すブロック線図のデータ構造102`への変換を行う例をもとに説明する。ブロック線図生成装置40では入力された実行順情報223の根の子要素すべてに対して順に図13に示す流れ図の処理を行う。
データ構造222の根2200は2221、2202、2203の3つの子要素を有する。
ここではまず、2221から処理を行う。2221は分岐点ブロックかつ実行順木の根2200の子要素であるので分岐点ブロックの入力側となり判断4202はYesとなる。処理4203によって取得される現在のブロックの子要素はブロック要素2204である。現在のブロックと一致する名前(a_out)を持つ信号線はまだ生成されていないため、判断4204はNoとなり処理4206によって信号線1108`が生成される。現在のブロックの子要素であるブロック要素2204は記憶ブロックの出力側ではないため判断4207はNoとなり、処理4218によってブロック要素2204を現在のブロックとして4201から始まる処理を再帰的に呼び出す。ブロック要素2204は演算ブロックであるため判断4202はNoとなり処理4209によってブロック要素2004がブロック要素1104としてデータ構造102`に追加される。ブロック要素2204は演算ブロックであるため判断4210はNoとなりループ4212の処理に進む。ここで実行順情報のデータ構造222上のブロックはすべて子要素が1個以下であるためループ端4212と4222で挟まれるループはすべて1度ずつしか実行されない。子要素が2個以上ある例については実施例2で示す。
ブロック要素2204の子要素は入力ブロック要素2201であるため判断4213はNoとなり処理4219によってブロック要素2201を始点、ブロック要素2204を終点とする信号線1107が生成される。判断4220はNoとなるため入力ブロック要素2201を現在ブロックとして4201からはじまる処理が再び呼び出される。判断4202はNoとなるため処理4209によって入力ブロック要素2201が入力ブロック要素1101としてデータ構造102`に追加される。現在のブロックは入力ブロック要素2201であるため判断4210はYesとなり処理は呼び出し元に戻る。呼び出し元でも終了4223によって処理が終了されることを2度繰り返し、2221に対する処理は終了する。
次にデータ構造の根の子要素2202に対しても図13の流れ図の処理を行う。2202は出力ブロック要素であるため判断4202はNoとなり、処理4209によって出力ブロック要素1102がブロック線図に追加される。判断4210、判断4213のいずれもNoとなるためブロック2202を終点、その子要素2205を始点とする信号線1109がブロック線図に追加される。子要素2205は演算ブロックであるため判断4220はNoとなり処理4218 によってブロック2205を現在のブロックとして4201からはじまる処理が再び呼び出される。ブロック2205は演算ブロックであるため判断4202はNoとなり処理4209によってブロック1105としてブロック線図に追加される。判断4210もNoとなり判断4213に進む。ブロック2205の子要素2222は分岐点でありかつ実行順木の葉であるため分岐点の出力側となり判断4213はYesとなる。子要素の名前a_outと同じ名前を持つ信号線1108`が既に存在するため、判断4214はYesとなり信号線1108`にブロック2205を終点とする分岐線1111aを追加する。処理4217により処理は呼び出し元に戻り、呼び出し元においても終了4223によって処理が終了される。
最後にデータ構造の根の子要素2203に対しても421の処理を行う。要素2203に対する処理の流れは要素2202に対する処理の流れと同様になり、出力ブロック要素1103、信号線1110、演算ブロック要素1106、分岐線1111bの順でブロック線図の要素が生成され、ブロック線図102`が生成される。
本実施例によれば、実行順情報はたとえばプログラムの1文に対応する単位に分割可能であるため、プログラム中に対応する実行順情報をコメントとして挿入することが容易である。このようにプログラム内にコメント文として挿入した実行順情報を利用することで、プログラムからブロック線図を復元することが可能となり、プログラムとモデル情報の一元管理が実現される。つまり、ソフトウェアの再利用の際にソースコード中にコメントとして挿入された実行順情報からモデルを生成し、モデルベースで制御系の再設計を行うことが可能となり、モデル情報を別途管理する必要がなくなる。
本発明の第2の実施例として図1のブロック線図−プログラム相互変換システムにおいて図15に示すブロック線図103をプログラム生成装置20の入力とした場合の例を示す。ブロック線図103が、図2のブロック線図101と異なる点は入力端子を2個有する演算ブロック1032と、記憶ブロック(記憶演算ブロック)1033を有する点、および信号線(データ線)1037に名前(res)がつけられている点である。記憶ブロックは演算ブロックの一種であるが、ブロックの出力がその瞬間の入力のみでなくブロックの内部状態(一般的にはその瞬間までの過去の入力に依存する)によって決定するため、ブロックの処理が内部状態データの記録および読み出しを含むものである。記憶ブロックの例としては積分器、単位時間遅れ、伝達関数などのブロック要素が挙げられる。
記憶ブロック(記憶演算ブロック)は、(1)接続元のブロックから受けたデータと、当該接続元のブロック要素から過去に受けたデータに基づく記憶データとのうち少なくとも後者を用いて、演算を行うことにより演算データを生成し、当該接続元のブロック要素から受けたデータを少なくとも用いて記憶データを更新し、(2)演算データを接続先のブロック要素に送出する。本実施例では、記憶演算ブロック要素は、(1)の処理を行う第1の演算ブロック要素と、(2)の処理を行う第2の演算ブロック要素とに分割(すなわち入力側と出力側に分割)して扱うことを特徴としている。
ブロック線図103をプログラム生成装置内で扱う際のデータ構造の一例104を図16に示す。
2個の入力端子を有する演算ブロック要素1032を表すブロック要素1132は入力端子数を表すInports属性を有している。なお、入力端子が1つのブロックに関してはInports属性は省略してある。信号線要素、分岐線要素も始点ブロック終点ブロック属性のみでなく始点端子、終点端子属性を有する。分岐点1038と演算ブロック1032の2番目の端子を結ぶ信号線を表す分岐線要素1138bの終点端子は2となる。更に、演算ブロック要素1032はsign属性を有する。演算ブロック要素1032の種類属性はSumであり、Sumブロックの機能はsign属性の符号に応じて各入力端子の値を加減算することである。ブロック要素1032の場合sign属性は+-(プラスマイナス)であり、これは入力端子1の入力から入力端子2の入力を減じた値を出力端子から出力することを意味する。また、信号線1037を表す信号線要素1137は名前属性を有する。
図16のデータ構造104を実施例1に示した実行順生成処理部21に入力した際に出力される実行順情報のデータ構造223を図17に示す。実行順情報はデータ構造104の有する唯一の出力ブロック要素である出力ブロック要素2234をデータ構造223の実行順木の根2230の直下に追加し、ブロック要素2234を現在のブロックとして図7に示した流れ図の処理を行うことによって生成する。処理2103、2106によってブロック2242、2241を生成する処理は実施例1の場合と同様であるが、このとき分岐点要素の名前属性として信号線1137の名前を利用する。次にブロック要素1033は記憶ブロックであるため、処理2108によって2233a、2233bが生成される。演算ブロック2232を生成する処理も実施例1と同様であるが、演算ブロック2232は入力端子を2個有しているためループ端2113と2116に挟まれるループが2回実行され、1周目でブロック2231、2周目でブロック2243が生成される。
実施例1の場合と同様に分岐点前後の依存関係を評価してブロック線図片間の実行順序を決定し、実行順木223を完成する。
実行順情報のデータ構造223をプログラム生成処理部23に入力し、図18に示すプログラム303を生成する。
その際プログラム生成処理部23では記憶ブロックに対しては、記憶ブロックの入力側に値を代入する処理3013と記憶ブロックの出力側の値を参照する処理3011の他に記憶ブロックの出力側の値を更新する処理を生成する必要がある。3014は連続時間系の積分器をEuler法(矩形則)で近似する場合の例である。
積分器をEuler法で近似する場合、
出力変数 = 出力変数 + 入力変数 * サンプリング周期
となるので出力変数に2233a、入力変数に2233bを当てはめ、3014を生成する。尚、3014においてstはサンプリング周期である。
積分器をEuler法ではなくHuen法(台形則)で近似する場合の更新処理は以下の2行で表わされる。
出力 = 入力 * サンプリング周期 / 2 + 状態
状態 = 入力 * サンプリング周期 / 2 + 出力
ここで、状態とは、記憶ブロックの内部演算のために用いる変数である。
また、Huen法(台形則)を用いた積分の近似は以下の2行で表わすことも可能である。
出力 = 出力 + (入力 + 状態) * サンプリング周期 / 2
状態 = 入力
記憶ブロックには積分器の他に遅延要素、伝達関数、離散時間伝達関数等の種類が存在する。
単位時間遅れ(遅延要素)の場合、更新処理は
出力 = 入力
となる。
伝達関数ブロックは伝達関数の次数および近似の方法によって多数の組み合わせが存在するが一例として
Figure 2009181446
で表わされる1次の伝達関数をEuler法で近似する場合、更新処理は以下の3行で表わされる。
出力 = b0 * 状態1
状態0 = 入力 + a0 * 状態1
状態1 = 状態1 + 状態0 * サンプリング周期
別の例として伝達関数
Figure 2009181446
で表わされる3次の伝達関数をEuler法で近似する場合、更新処理は以下の5行で表わされる。
出力 = b2 * 状態1 + b1 * 状態2 + b0 * 状態3
状態0 = 入力 + a2 * 状態1 + a1 * 状態2 + a0 * 状態3
状態1 = 状態1 + 状態0 * サンプリング周期
状態2 = 状態2 + 状態1 * サンプリング周期
状態3 = 状態3 + 状態2 * サンプリング周期
また、離散時間伝達関数の一例として伝達関数
Figure 2009181446
で表わされる2次の伝達関数の更新処理は以下の4行であらわされる。
出力 = b1* 状態1 + b0 * 状態2
状態0 = 入力 + a1 * 状態1 + a0 * 状態2
状態2 = 状態1
状態1 = 状態0
記憶ブロックをプログラムで表す場合、図18のプログラム303のように、記憶ブロックの入力側と出力側を分割し、出力側を更新する処理を別途記述するのが一般的である。これは、記憶ブロックが高次の伝達関数ブロックであったり、連続時間系で表された記憶ブロックのプログラム化の際に高次の近似を用いたりした場合にプログラムが複雑化するのを防止するためである。このように記憶ブロックを入力側と出力側に分割してプログラム化する場合、実行順情報を記憶ブロックの部分で分割することにより、実行順情報とプログラムの1文の対応付けが容易かつ明確になるという効果がある。
一方、図18のプログラム303の例のように記憶ブロックに対して次数の低い処理を用いる場合などは記憶ブロックの入力側と出力側を分割せずに処理を記述することも可能である。記憶ブロックの部分でプログラムを分割しない場合のプログラムの例404を図19に示す。記憶ブロックにおいてプログラムを分割しない場合の実行順情報は図7の流れ図に表す処理において記憶ブロックを一般の演算ブロックに対する処理と同一とすることで生成可能である。
図18のブロック要素3013のように、多入力ブロックを有する実行順情報をプログラムに変換する例を図9の流れ図、および図20に示すスタックの内容を参照して説明する。まず、要素2233b、2232、2231、2243からなる部分木の内容を処理2302によってすべてスタックに格納した状態が2392である。この際演算ブロック2232の処理は演算子“-”で表される。このような処理を実現するためにプログラム生成処理部23ではブロックの種類と演算の内容との対応情報を有している。次に処理2304によって被演算子res、被演算子in1と演算子-が取り出され、処理2306によって作られた式”in1-res”が処理2307によって再びスタックに格納された状態が2393である。最後に処理2307の後再びループ2303を実行し、スタックの内容が被演算子のみであるので処理2309によってプログラム3013を生成して終了2310によって部分木に対する処理が終了する。
記憶ブロックを前後に分割した情報は図17の実行順情報223に保存されている。図13の流れ図には記憶ブロックの入力側と出力側を結合する処理も含まれているため、図17の実行順情報223に対しても図13の流れ図の処理を用いることでブロック線図の生成(復元)が実現される。
第3の実施例として図1のブロック線図−プログラム相互変換システムにおいて図21に示すブロック線図(多段階層ブロック線図)105を入力とした場合の例を示す。
ブロック線図105が図1のブロック線図101および図15のブロック線図103と異なる点はサブシステムブロック1052を有し、階層化されている点である。サブシステムブロック1052のブロック線図は105bである。
サブシステムブロックのブロック線図は、入力サブブロック要素(サブシステム入力ブロック)と、演算サブブロック要素(サブシステム演算ブロック)と、出力サブブロック要素(サブシステム出力ブロック)と、これらの間のデータの流れを示すデータ線とを含む。
また本実施例での入力となる多段階層ブロック線図は、入力ブロック要素、演算ブロック要素および出力ブロック要素のうち少なくとも入力ブロック要素および出力ブロック要素と、上記サブシステムブロックと、これらの間のデータの流れを示すデータ線と、を含む。
ブロック線図105をプログラム生成装置20内で扱う際のデータ構造の一例106を図22に示す。ここでブロック要素1057は定数を乗じる働きをもつGainブロックであり、ブロック要素1057を表すブロック要素1157が持つGain属性は乗じる定数の値を表す。即ち、ブロック要素1057は入力を5倍した値を出力することを意味する。
階層化されたブロック線図に対してコード生成を行う場合には単階層のブロック線図に変換した後に、実施例1に示した実行順生成処理部21の処理によって実行順情報を生成する。階層化されたブロック線図の単階層への変換は、(1)サブシステム内の演算ブロック要素および信号線(データ線)は名前の先頭にサブシステム名を付加し1階層上位のシステムの演算ブロック要素もしくは信号線とし、(2)サブシステムの入出力ブロックは1階層上位のシステムのサブシステム入力ブロックおよびサブシステム出力ブロックとし、(3)1階層上位のシステム内の信号線のうちサブシステムを始点もしくは終点とするものをサブシステム入力ブロックおよびサブシステム出力ブロックを始点もしくは終点とする、ように変更する処理を階層の段数に応じて繰り返すことによって行う。
データ構造106のサブシステムを単階層のブロック線図に変換したもののデータ構造107を図23に示す。データ構造106に対し、サブシステム内の入力ブロック要素である1156をサブシステム入力ブロック1256、 サブシステム内の出力ポートである1158をサブシステム出力ポート1258として1階層上のブロック線図の要素としている。また、サブシステム内のブロック要素および信号線である1157、1159、1160 の名前属性の先頭にサブシステムブロックの名前(sub1)を付加したものである1257、1259、1260を1階層上のブロック線図の要素としている。また、1階層上のブロック線図の信号線で始点もしくは終点がサブシステムブロックであった1154、1155の始点もしくは終点をサブシステム入力ブロックおよびサブシステム出力ブロックに置き換えた1254、1255としている。これらによってデータ構造107への変換が実現される。
データ構造107に対して実施例1および実施例2で示した実行順生成処理部21およびプログラム生成処理部23の処理を行う。その際にサブシステム入力ブロックとサブシステム出力ブロックの取り扱い方は複数存在する。サブシステム入力ブロックおよびサブシステム出力ブロックをプログラム中に明示する場合の実行順情報224およびプログラム305の例を図24および図25に、サブシステムの入出力ブロックの情報をプログラム中に明示しない場合の実行順情報225およびプログラムの例306を図26および図27に示す。
ここで演算ブロック要素2257は定数の乗算である。そのため、実行順情報からプログラムを生成する際、図9の流れ図の処理2302において、演算ブロック要素2257に対しては、演算子“*”、被演算子の定数(=5)の順で1ブロックに対して2要素をスタックに格納する。
実行順情報224を生成する処理においては、サブシステム入力ブロックおよびサブシステム出力ブロックを実施例2における記憶ブロックと同様に扱い、入力側と出力側に分割し、別のブロック線図片とする(2256aと2256bおよび2258aと2258b)。
すなわちサブシステム入力ブロックを入力側の第1の入力サブブロック要素(あるいは第1のサブシステム入力ブロック)と第2の入力サブブロック要素(あるいは第2のサブシステム出力ブロック)として表しこれらの間で分割する。またサブシステム出力ブロックを入力側の第1の出力サブブロック要素(あるいは第1のサブシステム出力ブロック)と第2の出力サブブロック要素(あるいは第2のサブシステム出力ブロック)とで表しこれらの間で分割する。これによって複数のブロック線図片を生成する。そして、プログラム命令の実行順を決定する際、第1の入力サブブロック要素を含むブロック線図片に対応するプログラム命令が、第2の入力サブブロック要素を含むブロック線図片に対応するプログラム命令よりも先に実行され、第1の出力サブブロック要素を含むブロック線図片に対応するプログラム命令が第2の出力サブブロック要素を含むブロック線図片に対応するプログラム命令よりも先に実行されるように決定する。仮に分岐点が存在する場合は、実施例1で説明した制約(分岐点より入力側に位置するブロック線図片に対応するプログラム命令が分岐点より出力側に位置するブロック線図片に対応するプログラム命令よりも先に実行される)も加えて、実行順を決定する。
プログラム生成処理部23においてはサブシステム入力ブロックおよびサブシステム出力ブロックを分岐点と同様に扱うことで、サブシステム入力ブロックおよびサブシステム出力ブロックが変数(sub_in、 sub_out)としてプログラム305上に保存される。
サブシステムの入出力ブロックの情報をプログラム中に明示しない場合においても実行順情報225にはサブシステム入力ブロックおよびサブシステム出力ブロックの情報は保存するが、サブシステム入力ブロックおよびサブシステム出力ブロックの部分ではプログラムの文を分割しないため、ブロック線図片も分割しない。この場合、実行順生成処理部21においてはサブシステム入力ブロックおよびサブシステム出力ブロックを一般の演算ブロックと同様に扱い、プログラム生成処理部23においてサブシステム入力ブロックおよびサブシステム出力ブロックに対してはプログラムを生成しない(図9の流れ図の処理2302においてサブシステム入力ブロックおよびサブシステム出力ブロックはスタックに格納しない)方法をとる。
実行順情報224、実行順情報225ともにサブシステム入力ブロックおよびサブシステム出力ブロックの情報を保存している。そのため、図13の流れ図の処理を用い、実行順情報224に対する場合はサブシステム入力ブロックおよびサブシステム出力ブロックを記憶ブロックと同様に扱い、実行順情報225に対する場合はサブシステム入力ブロックおよびサブシステム出力ブロックを一般の演算ブロックと同様に扱うことにより、図23に示した単階層化されたブロック線図107を復元することが可能である。
図23の単層化されたデータ構造107から図22の階層化されたデータ構造106への復元を図28の流れ図を参照して説明する。図23のデータ構造107においてサブシステム入力ブロックおよびサブシステム出力ブロックは1256、1258であり、いずれも名前属性の先頭に付加されたサブシステム名はsub1であるので処理4232によって作成されるサブシステム名一覧の要素はsub1のみとなる。従って、処理4234によって図22のデータ構造106上の根1150以下に生成されるサブシステムブロックは1152のみとなる。
図23のデータ構造107に存在するブロック要素(サブシステム入力ブロックおよびサブシステム出力ブロックを除く)は1151、1257、1153である。1151、1153は名前属性にサブシステム名を含まないため、処理4239によってそのまま根1150以下に登録する。1257は名前の先頭に“sub1/”を含むため、処理4238によって“sub1/”を削除し1152以下に1157として登録する。
図23のデータ構造107に存在するサブシステム入力ブロックおよびサブシステム出力ブロックは1256、1258であり、いずれも名前の先頭にサブシステム名は“sub1” 1階層分しか付加されていないため処理4243によって1152以下に1156、1158として登録する。
図23のデータ構造107に存在する信号線要素は1154、1155、1259、1260である。このうち1259、1260は始点ブロック、終点ブロックすべてが同一サブシステム下にある信号線であるため、処理4250によってサブシステム名を削除し、1152以下に1159、1160として登録する。1154、1155に関しては始点ブロック、終点ブロックのいずれか一方がサブシステム“sub1”以下のブロック(サブシステム入力ブロックおよびサブシステム出力ブロック)で、残りの一方が現在のブロック下のブロックである。このため、処理4251によってサブシステム以下のブロックを指している方をサブシステム名に変更し、1154、1155として1150以下に登録する。
図22および図23のデータ構造106、107の表すブロック線図は一階層分のサブシステムしか含まない例であるため、判断4254がNoとなり4256によって処理が終了するが、サブシステムが複数階層の入れ子状になっている場合においても判断4242によってサブシステム入力ブロックおよびサブシステム出力ブロックの処理を区別していることおよび処理4255によって再帰することにより対応可能である。
このようにして図24の実行順情報224もしくは図26の実行順情報225から、階層化されたブロック線図のデータ構造106の生成(復元)が実現される。
本実施例では、階層化されたブロック線図とプログラムとの相互変換について説明した。
本実施例はサブシステムが分岐点や記憶ブロックを持たないものであるが、本実施例で説明した方法はサブシステムのブロック線図が、図2の101または図15の103に示したような、分岐点または記憶ブロックを持つものであっても適用可能である。
なぜならば、階層化されたブロック線図から単階層ブロック線図を生成する処理、および、単層化されたブロック線図から階層化されたブロック線図を復元する処理においては、サブシステム内の記憶ブロックはブロック要素、サブシステム内の分岐点を持つ信号線は分岐点を持たない信号線と同様に扱うことが可能であり、単階層ブロック線図からプログラムを生成する方法、およびプログラムから単階層のブロック線図を合成する方法は実施例1および実施例2で説明した方法と同一であり、よって、本実施例は、分岐点や記憶ブロックを含むブロック線図にも適用可能であるためである。
また、本実施例(図21)では最上位システムは入力ブロック、サブシステムブロック、出力ブロックしか有していないが、単階層ブロック線図からプログラムを生成する方法およびプログラムから単階層のブロック線図を合成する方法が実施例1、2で説明した方法と同一であることから、本実施例で説明した方法は最上位システムが分岐点や演算ブロックを含むブロック線図に対しても適用可能である。
ブロック線図‐プログラム相互変換システムの構成を示すブロック図 分岐点を含むブロック線図101 ブロック線図の計算機上でのデータ構造102を示す図 プログラム生成装置への入力となるブロック線図情報ファイルを示す図 実行順情報の一部であるブロック線図片の集合221を示す図 ブロック線図片の集合のデータ構造222を示す図 実行順情報生成部の処理の流れ図 プログラムの一例301を示す図 プログラム生成処理部の処理の流れ図 スタックの内容を示す図 実行順情報ファイル223を示す図 実行順情報をコメントとして挿入されたプログラム302を示す図 ブロック線図生成装置の処理の流れを示す図 ブロック線図生成システムによって生成されたブロック線図の計算機上でのデータ構造102`を示す図 記憶ブロックおよび多入力ブロックを含むブロック線図103 ブロック線図103の計算機上でのデータ構造104を示す図 実行順情報のデータ構造223を示す図 プログラムの一例303を示す図 プログラムの一例304を示す図 スタックの内容を示す図 サブシステムブロックを含むブロック線図105 ブロック線図105の計算機上でのデータ構造106を示す図 データ構造106を単階層に変換したデータ構造107を示す図 実行順情報224を示す図 プログラム例305を示す図 実行順情報225を示す図 プログラム例306を示す図 単層化されたデータ構造107から階層化されたデータ構造106への復元の流れを示す図
符号の説明
10 ブロック線図
20 プログラム生成装置
21 実行順生成処理部
22 実行順情報
23 プログラム生成処理部
30 ソースコード
40 ブロック線図生成装置
41 実行順抽出処理部
42 ブロック線図生成処理部
101 ブロック線図
1001 入力ブロック要素
1002 出力ブロック要素
1003 出力ブロック要素
1004 演算ブロック要素
1005 演算ブロック要素
1006 演算ブロック要素
1007 信号線
1008 信号線
1009 信号線
1010 信号線
1011 分岐点
102 ブロック線図のデータ構造
1101 入力ブロック要素
1102 出力ブロック要素
1103 出力ブロック要素
1104 演算ブロック要素
1105 演算ブロック要素
1106 演算ブロック要素
1107 信号線
1108 信号線
1109 信号線
1110 信号線
1111a 分岐線
1111b 分岐線
221 実行順情報
2200 実行順情報木の根
2201 入力ブロック要素
2202 出力ブロック要素
2203 出力ブロック要素
2204 演算ブロック要素
2205 演算ブロック要素
2206 演算ブロック要素
2221 分岐点ブロック
2222 分岐点ブロック
2223 分岐点ブロック
222 実行順情報
2101 開始
2102 判断
2103 処理
2104 判断
2105 終了
2106 処理
2107 判断
2108 処理
2109 判断
2110 処理
2111 終了
2112 処理
2113 ループ端
2114 処理
2115 処理
2116 ループ端
2117 終了
301 プログラム
3001 プログラム命令
3002 プログラム命令
3003 プログラム命令
2301 開始
2302 処理
2303 ループ端
2304 処理
2305 判断
2306 処理
2307 処理
2308 ループ端
2309 処理
2310 終了
2390 スタックの内容
2391 スタックの内容
223 実行順情報のテキスト表現
302 プログラム
102` ブロック線図のデータ構造
1108` 信号線
4201 開始
4202 判断
4203 処理
4204 判断
4205 処理
4206 処理
4207 判断
4208 終了
4209 処理
4210 判断
4211 終了
4212 ループ端
4213 判断
4214 判断
4215 処理
4216 処理
4217 終了
4218 処理
4219 処理
4220 判断
4221 終了
4222 ループ端
4223 終了
103 ブロック線図
1031 入力ブロック要素
1032 演算ブロック要素
1033 演算ブロック要素(記憶ブロック)
1034 出力ブロック要素
1035 信号線
1036 信号線
1037 信号線
1038 分岐点
104 ブロック線図のデータ構造
1131 入力ブロック要素
1132 演算ブロック要素
1133 演算ブロック要素(記憶ブロック)
1134 出力ブロック要素
1135 信号線
1136 信号線
1137 信号線
1138a 分岐線
1138b 分岐線
223 実行順情報
2230 実行順情報木の根
2231 入力ブロック要素
2232 演算ブロック要素
2233a 記憶ブロック(出力側)
2233b 記憶ブロック(入力側)
2234 出力ブロック要素
2241 分岐点ブロック(入力側)
2242 分岐点ブロック(出力側)
2243 分岐点ブロック(出力側)
303 プログラム
3011 プログラム命令
3012 プログラム命令
3013 プログラム命令
3014 プログラム命令
304 プログラム
3021 プログラム命令
3022 プログラム命令
2392 スタックの内容
2393 スタックの内容
105 ブロック線図
105b サブシステムのブロック線図
1051 入力ブロック要素
1052 サブシステムブロック
1053 出力ブロック要素
1054 信号線
1055 信号線
1056 入力ブロック要素
1057 演算ブロック
1058 出力ブロック要素
1059 信号線
1060 信号線
106 ブロック線図のデータ構造
1151 入力ブロック要素
1152 サブシステムブロック
1153 出力ブロック要素
1154 信号線
1155 信号線
1156 入力ブロック要素
1157 演算ブロック要素
1158 出力ブロック要素
1159 信号線
1160 信号線
107 単階層化したブロック線図のデータ構造
1256 サブシステム入力ブロック要素
1257 演算ブロック要素
1258 サブシステム出力ブロック要素
1259 信号線
1260 信号線
224 実行順情報
2251 入力ブロック要素
2253 出力ブロック要素
2256a サブシステム入力ブロック要素(出力側)
2256b サブシステム入力ブロック要素(入力側)
2257 演算ブロック要素
2258a サブシステム出力ブロック要素(出力側)
2258b サブシステム出力ブロック要素(入力側)
305 プログラム
3031 プログラム
3032 プログラム
3033 プログラム
225 実行順情報
306 プログラム
4231 開始
4232 処理
4233 ループ端
4234 処理
4235 ループ端
4236 ループ端
4237 判断
4238 処理
4239 処理
4240 ループ端
4241 ループ端
4242 判断
4243 処理
4244 処理
4245 ループ端
4246 ループ端
4247 判断
4248 処理
4249 判断
4250 処理
4251 処理
4252 ループ端
4253 ループ端
4254 判断
4255 処理
4256 終了
4257 ループ端
4258 終了

Claims (7)

  1. 入力ブロック要素と、演算ブロック要素と、出力ブロック要素と、前記入力ブロック要素、前記演算ブロック要素および前記出力ブロック要素間のデータの流れを示すデータ線と、前記データ線を分岐する分岐点と、を有するブロック線図を読み出すブロック線図読出手段と、
    前記分岐点で前記ブロック線図を入力側および出力側に分割することにより入力側片と1つ以上の出力側片とを生成し、
    前記入力側片および前記1つ以上の出力側片において前記分岐点に接続されていたデータ線端に分岐ブロック要素を接続することにより、前記入力側片および前記1つ以上の出力側片に対応して、複数のブロック線図片を生成するブロック線図分割手段と、
    各前記ブロック線図片の処理を実現するプログラム命令をそれぞれ生成するプログラム命令生成手段と、
    前記入力側片に対応するプログラム命令が前記出力側片に対応するプログラム命令よりも先に実行されるように、各前記プログラム命令の実行順序を決定する実行順序決定手段と、
    前記ブロック線図片毎に前記ブロック線図片の構造情報を生成する構造情報生成手段と、
    前記実行順序に従って各前記プログラム命令を配置し、
    各前記ブロック線図片の構造情報を各前記プログラム命令に対応するコメント行に記述することにより、
    プログラムを生成するプログラム生成手段と、を備え、
    前記構造情報生成手段は、
    各前記ブロック線図片における末尾のブロック要素が木構造の根ノードの子ノードに割り当てられ、
    前記根ノードと異なる各親ノードの子ノードには、前記各親ノードに割り当てられたブロック要素の直前の処理を行うブロック要素が割り当てられるように、
    各前記ブロック線図片の構造情報を生成する、
    ことを特徴とするプログラム生成装置。
  2. 少なくとも1つの前記演算ブロック要素は、
    (1) 接続元のブロック要素から受けたデータと、前記接続元のブロック要素から過
    去に受けたデータに基づく記憶データとのうち少なくとも後者を用いて、演算
    を行うことにより演算データを生成し、
    前記接続元のブロック要素から受けたデータを少なくとも用いて前記記憶デー
    タを更新し、
    (2) 前記演算データを接続先のブロック要素に送出する、
    記憶演算ブロック要素であり、
    前記ブロック線図分割手段は、
    前記記憶演算ブロック要素を、(1)の処理を行う第1の演算ブロック要素と、(2)の処理を行う第2の演算ブロック要素とに分割し、
    前記第1の演算ブロック要素および前記第2の演算ブロック要素の間で前記ブロック線図を分割し、前記第1の演算ブロック要素は前記ブロック線図片における末尾のブロック要素であり、前記第2の演算ブロック要素は前記第1の演算ブロック要素と異なる前記ブロック線図片の先頭のブロック要素である
    ことを特徴とする請求項1に記載のプログラム生成装置。
  3. 入力ブロック要素、演算ブロック要素および出力ブロック要素のうち少なくとも前記入力ブロック要素および前記出力ブロック要素と、
    サブシステムブロックと、
    入力ブロック要素、演算ブロック要素、出力ブロック要素および前記サブシステムブロックのうち少なくとも前記入力ブロック要素、前記出力ブロック要素および前記サブシステムブロック間のデータの流れを示すデータ線と、
    入力サブブロック要素と、演算サブブロック要素と、出力サブブロック要素と、前記入力サブブロック要素、前記演算サブブロック要素および前記出力サブブロック要素間のデータの流れを示すデータ線とを含む、前記サブシステムブロックのサブブロック線図と
    を含む多段階層ブロック線図を読み出すブロック線図読出手段と、
    前記多段階層ブロック線図における前記サブシステムブロックを前記サブブロック線図に置換し、前記サブシステムブロックの入力に接続されていたデータ線を前記入力サブブロック要素の入力に接続し、前記サブシステムブロックの出力に接続されていたデータ線を前記出力サブブロック要素の出力に接続することにより、単階層ブロック線図を生成する単階層ブロック線図生成手段と、
    前記単階層ブロック線図の構造情報を生成する構造情報生成手段と、
    前記単階層ブロック線図の処理を実現するプログラム命令を生成するプログラム命令生成手段と、
    前記プログラム命令を配置し、
    前記プログラム命令に対応するコメント行に前記単階層ブロック線図の構造情報を記述することにより、
    プログラムを生成するプログラム生成手段と、
    を備えたプログラム生成装置。
  4. 前記単階層ブロック線図における前記入力サブブロック要素を、前記入力サブブロック要素の接続元要素からデータを受ける第1の入力サブブロック要素と、前記第1の入力サブブロック要素で受けたデータを前記入力サブブロック要素の接続先要素に送出する第2の入力サブブロック要素とに分割し、
    また前記単階層ブロック線図における前記出力サブブロック要素を、前記出力サブブロック要素の接続元要素からデータを受ける第1の出力サブブロック要素と、前記第1の出力サブブロック要素で受けたデータを前記出力サブブロック要素の接続先要素に出力する第2の出力サブブロック要素とに分割し、
    前記単階層ブロック線図を前記第1および第2の入力サブブロック要素間、ならびに前記第1および第2の出力サブブロック要素間で分割することにより複数のブロック線図片を生成する
    ブロック線図分割手段と、
    プログラム命令の実行順序を決定する実行順序決定手段と、をさらに備え、
    前記構造情報生成手段は、
    各前記ブロック線図片における末尾のブロック要素が木構造の根ノードの子ノードに割り当てられ、
    前記根ノードと異なる各親ノードの子ノードには、前記各親ノードに割り当てられたブロック要素の直前の処理を行うブロック要素が割り当てられるように、
    各前記ブロック線図片の構造情報を生成し、
    前記プログラム命令生成手段は、各前記ブロック線図片の処理を実現するプログラム命令をそれぞれ生成し、
    前記実行順序決定手段は、前記第1の入力サブブロック要素を含む前記ブロック線図片に対応する前記プログラム命令が前記第2の入力サブブロック要素を含む前記ブロック線図片に対応する前記プログラム命令よりも先に実行され、前記第1の出力サブブロック要素を含む前記ブロック線図片に対応する前記プログラム命令が前記第2の出力サブブロック要素を含む前記ブロック線図片に対応する前記プログラム命令よりも先に実行されるように、各生成されたプログラム命令の実行順序を決定し、
    前記プログラム生成手段は、前記実行順序に従って各前記生成されたプログラム命令を配置し、各前記ブロック線図片の構造情報を各前記生成されたプログラム命令に対応するコメント行に記述することにより前記プログラムを生成する、
    ことを特徴とする請求項3に記載のプログラム生成装置。
  5. 各々ブロック識別子を有する、入力ブロック要素と、演算ブロック要素と、出力ブロック要素と、データ線の分岐を表す分岐点ブロック要素とを、根ノードと異なる各ノードに割り当てた木構造のデータを、プログラムのコメント行から読み出すデータ読出手段と、
    子ノードに割り当てられたブロック要素から、前記子ノードの親ノードに割り当てられたブロック要素へ向けてデータ線を接続することを、前記根ノードの各子ノードから開始して、前記木構造の各葉ノードまで順次行うことにより、複数のブロック線図片を生成するブロック線図片生成手段と、
    各前記ブロック線図片間で同一のブロック識別子を持つ分岐点ブロック要素を統合して前記分岐点を形成することにより各前記ブロック線図片を合成したブロック線図を生成する合成手段と、
    を備えたブロック線図生成装置。
  6. 前記木構造は、
    データを受け取り、受け取ったデータと過去に受け取ったデータに基づいて生成された記憶データとのうち少なくとも後者を用いて、演算を行うことにより演算データを生成し、また前記受け取ったデータを用いて前記記憶データを生成する第1の演算ブロック要素と、
    前記第1の演算ブロック要素により生成された演算データを送出する第2の演算ブロック要素と、
    を前記根ノードと異なるノードに割り当て、
    前記合成手段は、各前記ブロック線図片間で、同一の識別子をもつ、前記第1の演算ブロック要素と前記第2の演算ブロック要素とを統合することにより記憶演算ブロック要素を生成する
    ことを特徴とする請求項5に記載のブロック線図生成装置。
  7. 入力ブロック要素と、出力ブロック要素と、演算ブロック要素とのうち少なくとも前記入力ブロック要素および出力ブロック要素と、
    演算サブブロック要素と、データを受ける第1の入力サブブロック要素と、前記第1の入力サブブロック要素で受けたデータを送出する第2の入力サブブロック要素と、データを受ける第1の出力サブブロック要素と、前記第1の出力サブブロック要素で受けたデータを出力する第2の出力ブロック要素とを、
    前記根ノードと異なる前記各ノードに割り当てた木構造のデータをプログラムのコメント行から読み出す木構造読出手段と、
    子ノードに割り当てられた要素から、前記子ノードの親ノードに割り当てられた要素へ向けてデータ線により接続することを、各葉ノードを起点として前記根ノードの各子ノードまで順次行うことにより、複数のブロック線図片を生成するブロック線図片生成手段と、
    第1および第2の入力サブブロック要素同士を単一の入力サブブロック要素に統合し、第1および第2の出力サブブロック要素同士を単一の出力サブブロック要素に統合することにより、各前記ブロック線図片を合成した単階層ブロック線図を生成する単階層ブロック線図生成手段と、
    前記単階層ブロック線図において、前記単一の入力サブブロック要素、前記演算サブブロック要素および前記出力サブブロック要素と、これらの要素間を接続するデータ線とを含むサブブロック線図を特定し、
    前記サブブロック線図をサブシステムブロックによって置換し、前記単一の入力サブブロック要素の入力に接続されていたデータ線を前記サブシステムブロックの入力に接続し、前記単一の出力サブブロック要素の出力に接続されていたデータ線を前記サブシステムブロックの出力に接続することによりブロック線図を生成し、
    前記サブブロック線図と前記ブロック線図とを含む多段階層ブロック線図を出力する多段階層ブロック線図生成手段と、
    を備えたブロック線図生成装置。
JP2008021342A 2008-01-31 2008-01-31 プログラム生成装置およびブロック線図生成装置 Pending JP2009181446A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008021342A JP2009181446A (ja) 2008-01-31 2008-01-31 プログラム生成装置およびブロック線図生成装置
US12/361,704 US8671386B2 (en) 2008-01-31 2009-01-29 Program generating apparatus and block diagram generating apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008021342A JP2009181446A (ja) 2008-01-31 2008-01-31 プログラム生成装置およびブロック線図生成装置

Publications (1)

Publication Number Publication Date
JP2009181446A true JP2009181446A (ja) 2009-08-13

Family

ID=40932992

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008021342A Pending JP2009181446A (ja) 2008-01-31 2008-01-31 プログラム生成装置およびブロック線図生成装置

Country Status (2)

Country Link
US (1) US8671386B2 (ja)
JP (1) JP2009181446A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102010018563A1 (de) 2009-08-04 2011-02-10 Hitachi Automotive Systems, Ltd., Hitachinaka-shi Aufhängungssteuerungsvorrichtung
WO2019171425A1 (ja) * 2018-03-05 2019-09-12 三菱電機株式会社 ソフトウェア開発支援装置、ソフトウェア開発支援方法およびソフトウェア開発支援プログラム
JP2021140501A (ja) * 2020-03-05 2021-09-16 日立Astemo株式会社 モデル並列化装置および方法

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101802826B (zh) * 2007-09-10 2013-09-25 Abb技术有限公司 智能电子设备的配置
KR102087395B1 (ko) * 2013-01-16 2020-03-10 삼성전자주식회사 전자 장치에서 응용프로그램을 실행하기 위한 장치 및 방법
FR3013175B1 (fr) * 2013-11-08 2015-11-06 Trixell Circuit integre presentant plusieurs blocs identiques identifies
US10318251B1 (en) * 2016-01-11 2019-06-11 Altair Engineering, Inc. Code generation and simulation for graphical programming
WO2018092237A1 (ja) * 2016-11-17 2018-05-24 三菱電機株式会社 プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1300265C (en) * 1987-06-22 1992-05-05 William Curtis Newman Block diagram simulator
JPH1195990A (ja) 1997-09-22 1999-04-09 Nippon Telegr & Teleph Corp <Ntt> プログラム構造表示方法および装置
JP2000020291A (ja) 1998-07-06 2000-01-21 Toyota Motor Corp 車両用プログラム開発支援方法および装置
US6425121B1 (en) * 2000-01-14 2002-07-23 Softwire Technology, Llp Method and apparatus for resolving divergent paths in graphical programming environments
US7200838B2 (en) * 2000-12-20 2007-04-03 National Instruments Corporation System and method for automatically generating a graphical program in response to a state diagram
US20020178434A1 (en) * 2001-02-22 2002-11-28 Fox Gary L. Apparatus and method for automatic source code generation in a process control environment
JP2005222221A (ja) 2004-02-04 2005-08-18 Hitachi Ltd 組込コントローラ開発ツール、組込コントローラ、及び組込コントローラ開発プロセス

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102010018563A1 (de) 2009-08-04 2011-02-10 Hitachi Automotive Systems, Ltd., Hitachinaka-shi Aufhängungssteuerungsvorrichtung
DE102010018563B4 (de) 2009-08-04 2022-05-05 Hitachi Astemo, Ltd. Aufhängungssteuerungsvorrichtung
WO2019171425A1 (ja) * 2018-03-05 2019-09-12 三菱電機株式会社 ソフトウェア開発支援装置、ソフトウェア開発支援方法およびソフトウェア開発支援プログラム
JP2021140501A (ja) * 2020-03-05 2021-09-16 日立Astemo株式会社 モデル並列化装置および方法
JP7307011B2 (ja) 2020-03-05 2023-07-11 日立Astemo株式会社 モデル並列化装置および方法

Also Published As

Publication number Publication date
US8671386B2 (en) 2014-03-11
US20090199157A1 (en) 2009-08-06

Similar Documents

Publication Publication Date Title
JP2009181446A (ja) プログラム生成装置およびブロック線図生成装置
JP5381710B2 (ja) ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
US11106437B2 (en) Lookup table optimization for programming languages that target synchronous digital circuits
CN106648662B (zh) 基于工程造价计算描述语言bcl的报表生成装置及生成方法
JP5005510B2 (ja) ソフトウェアの設計支援方法、設計支援装置及び設計支援プログラム
US20210365253A1 (en) Heterogeneity-agnostic and topology-agnostic data plane programming
EP1683057A1 (en) Simplified data signal support for diagramming environment languages
EP2510433B1 (en) Canonicalized versions of reuse candidates in graphical state diagrams
CN108153896B (zh) 针对输入数据、输出数据的处理方法及装置
CN113128015B (zh) 预估单振幅模拟量子计算所需资源的方法和系统
WO2021161426A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
JP2005234959A (ja) テンプレート作成装置、プログラム、および方法
JP5275087B2 (ja) プログラム生成装置およびブロック線図生成装置
JP2010049439A (ja) ソフトウェアモデルを用いたシステム構築方法およびモデリング装置
JP2009163662A (ja) 情報処理装置、情報処理装置の制御方法、および情報処理装置の制御プログラム
JP2011186999A (ja) 浮動小数点表現プログラムの固定小数点表現化支援装置及び支援プログラム
JP2006202330A (ja) システムlsiの設計方法及びこれを記憶した記録媒体
WO2011090032A1 (ja) 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置
WO2022249255A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
JP5254149B2 (ja) プラントモデル作成システムおよびプラントモデル作成方法
JP2010165205A (ja) モデルのテンプレート自動生成システム、方法及びプログラム
WO2021161428A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
WO2022249422A1 (ja) コードマッピング装置、コードマッピング方法、及びプログラム
JP2002312167A (ja) 変数の値をコンピュータに算出させるためのプログラム、コンパイルプログラム、変数値確定方法およびプログラム生成方法
JP5589528B2 (ja) プログラム検証装置、プログラム検証方法及びプログラム