この発明は、プログラム開発支援装置およびその方法に関するものである。
FA(Factory Automation)分野の制御装置としてプログラマブルコントローラ(以下、PLCという)が用いられている。このPLCのプログラミングコストが、FAシステムにおける開発コストの大部分を占めるようになってきている。
こうした中、PLCのプログラミングに関する標準規格IEC61131−3(JISB3503)が策定された。IEC61131−3は単なるプログラミング言語の規格であるだけではなく、プログラムの構成要素、変数の定義も標準化されている。これによりメーカや機種に依存することなくソフトウェアの開発ができるようになった。
IEC61131−3が普及するにつれ、プログラムの開発において、プログラムの品質と開発効率を高めるためにプログラムの標準化(部品化)・構造化が進められている。標準化の一つの流れとして、プログラムのファンクションブロック(Function Block:以下、FBという)化がある。
PLCプログラムの構成要素には、プログラムと、複数のプログラムの集まりであるプロジェクトと、プログラム内の複数の命令をまとめて1つのブロックとしたFBと、がある。FBは、実行するたびに動作するコードと、内部メモリの状態により制御処理を行うものである。FB内で使用される変数の種類には、入力変数、出力変数、内部変数および外部変数がある。
入力変数は、FBの入力パラメータの役割を果たし、FB外から値を受け取るための変数である。出力変数は、FBの出力パラメータの役割を果たし、FBの演算結果の値をFB外へ引き渡すための変数である。入力変数および出力変数は、プログラムの図上ではそれぞれ入力ピンおよび出力ピンとして表示される。
内部変数は、FB内やFBが存在するプログラム内でのみ使用できる変数であり、外部プログラムから値の参照や変更することはできない。
外部変数は、グローバル変数をFB内から参照するための変数である。ここで、グローバル変数とは、FB内で使う変数ではなく、プロジェクトのどのプログラムからも参照できる変数のことである。外部変数は、同じ変数名のグローバル変数を参照し、その値を、外部変数が宣言されているプログラムで使用するための変数である。
ここで、プログラムをFB化する場合、FB型の定義およびFB内に存在する変数の種別を設定する必要があり、手続きが煩雑であった。そこで、この手続きの煩雑さを解消するPLCのプログラム開発支援装置が提案されている(たとえば、特許文献1参照)。この特許文献1の手法によれば、プログラムのFB化の際に自動でFB型やFB内に存在する変数の種別が自動で設定される。
しかしながら、特許文献1に記載の技術では、FB内の変数は、入力変数、出力変数および内部変数のうちのいずれかに割り振られるのみである。すなわち、FB内で外部変数として使用される変数があっても、外部変数に自動で設定されないという問題点があった。そのため、流用元プログラムの変数(外部変数)をFB内で使用したい場合には、FBの内部変数とのデータ交換のためのプログラムを作成しなければならなかった。
この発明は上記に鑑みてなされたもので、煩雑な手続きやプログラムを追加すること無しに、外部変数を含めてプログラムの部品化を簡単に行うことが可能なプログラム開発支援装置およびその方法を得ることを目的とする。
上記目的を達成するため、この発明にかかるプログラム開発支援装置は、IEC61131−3準拠のプログラム言語を使用したプログラム開発支援装置であって、流用元プログラム中の部品化を行う部品化対象プログラムで使用される流用元変数に付加し、前記部品化対象プログラムの挿入先の流用先プログラム全体で一意となるように識別子を生成する識別子生成手段と、前記部品化対象プログラムに存在する前記流用元変数の名称と前記識別子とを組み合わせた名称を有する新規変数を前記流用先プログラムに追加するとともに、前記部品化対象プログラムの前記流用元変数と前記新規変数とを対応付けた変数対応付け情報を生成する新規変数生成手段と、前記部品化対象プログラムで使用される前記流用元変数を、前記変数対応付け情報に基づいて前記新規変数に置換して、流用プログラムを生成する流用プログラム生成手段と、前記流用プログラムを前記流用先プログラムに挿入するプログラム挿入手段と、を備えることを特徴とする。
この発明によれば、流用元プログラムで使用されている流用元変数は、流用先プログラムにおいて一意となる変数名に置換され、流用先プログラムに変数として追加されるようにしたので、既存の流用元プログラムにある処理を流用しながらも、流用先プログラムごとに変数の状態を持つことができ、FB化によるプログラムの流用と同等の動作を得ることができる。また、追加された新規変数は、流用先プログラムの変数として追加されるため、流用先プログラム内の別の箇所でそのまま使用できる。そのため、データ交換のプログラミングが不要になるという効果を有する。
図1は、実施の形態1によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。
図2は、実施の形態1によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。
図3は、実施の形態1によるプログラム開発支援方法の処理手順の一例を模式的に示す図である。
図4は、従来のプログラムをFB化する際の様子を模式的に示す図である。
図5は、実施の形態2によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。
図6は、実施の形態2によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。
図7は、流用プログラム中の変数の使用状況を示す図である。
図8は、流用プログラムのブロック表示の一例を示す図である。
図9は、実施の形態3によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。
図10は、流用プログラムのブロック表示の一例を示す図である。
図11は、実施の形態4によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。
図12は、編集画面の一例を示す図である。
図13は、実施の形態4による流用プログラムの変更処理の様子を模式的に示す図である。
図14は、実施の形態4による流用プログラムの変更処理の様子を模式的に示す図である。
図15は、実施の形態5によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。
図16は、実施の形態5による部品化した流用プログラムをFBに変換する処理手順の一例を示すフローチャートである。
図17は、実施の形態5によるFBを部品化したプログラムに変換する処理手順の一例を示すフローチャートである。
以下に添付図面を参照して、この発明にかかるプログラム開発支援装置およびその方法の好適な実施の形態を詳細に説明する。なお、これらの実施の形態によりこの発明が限定されるものではない。
実施の形態1.
実施の形態1では、既に作成されているプログラム中で、多く流用されることが見込まれる部分を部品化して、再利用可能な構成とするプログラム開発支援装置およびその方法について説明する。
図1は、実施の形態1によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。プログラム開発支援装置10は、入力部11と、表示部12と、プログラム部品化情報取得部13と、識別子生成部14と、新規変数生成部15と、流用プログラム生成部16と、プログラム挿入部17と、これらの各処理部を制御する制御部18と、を備える。
入力部11は、キーボードまたはポインティングデバイスなどのユーザとの間の入力インタフェースである。表示部12は、液晶表示装置などのユーザに対して情報を表示する装置である。
プログラム部品化情報取得部13は、プログラムを部品化するに当たって必要なプログラム部品化情報を取得する。プログラム部品化情報として、たとえばユーザによって指定される流用したい部品化対象プログラムを含む流用元プログラムと、流用元プログラム中の部品化対象プログラムと、部品化対象プログラムの挿入先である流用先プログラムの挿入位置と、を挙げることができる。プログラム部品化情報取得部13は、流用元プログラムを、たとえば流用元プログラムが格納されたプログラマブルコントローラ、またはデータベースなどから取得する。また、部品化対象プログラムは、流用元プログラムから部品化したい箇所がユーザによって入力部11を介して選択されることによって取得される。流用先プログラム挿入位置は、ユーザによって入力部11を介して流用先プログラム中の挿入位置が選択されることによって取得される。
識別子生成部14は、選択された部品化対象プログラムで、流用先のプログラム全体で一意となる識別子を生成する。
新規変数生成部15は、選択された部品化対象プログラムに存在する変数を解析し、所定の規則にしたがって選択される変数に対して、変数の名称に識別子生成部14で生成された識別子を組み合わせて新規変数を生成する。また、新規変数生成部15は、生成した新規変数を流用先プログラムに追加し、部品化対象プログラムに元々含まれている変数と、追加した新規変数と、を対応付ける変数対応付け情報を生成する。なお、この実施の形態1では、新規変数生成部15は、LD(LDI)命令の引数になっている変数と、MOV命令の第2引数になっている変数を、置換対象の変数として抽出する。
流用プログラム生成部16は、新規変数生成部15によって生成された変数対応付け情報に基づいて部品化対象プログラム中の変数を新規変数に置換し、流用プログラムを生成する処理を行う。
プログラム挿入部17は、流用プログラム生成部16によって生成された流用プログラムを、流用先プログラムのユーザによって選択された領域に挿入する。
つぎに、このような構成のプログラム開発支援装置10におけるプログラム開発支援方法について説明する。図2は、実施の形態1によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。また、図3は、実施の形態1によるプログラム開発支援方法の処理手順の一例を模式的に示す図である。なお、ここでは、流用元プログラムと流用先プログラムがプログラム開発支援装置10によって読込まれた状態にあるものとする。
まず、ユーザによって入力部11を介して流用元プログラム中の部品化したい箇所が範囲選択される(ステップS11)。図3(a)は、ラダー形式で記述された流用元プログラム中で流用したい箇所である部品化対象プログラムP1がユーザによって選択された状態を示している。なお、ここでは、流用元プログラム中の部品化したい箇所の範囲選択を行っているが、たとえば流用元プログラムの部品化したい箇所をメモリに一時的に記憶させることで範囲選択を行ってもよい。
ついで、選択された部品化対象プログラムP1を部品化して、流用先プログラムに挿入する処理を実行する指示を与え(ステップS12)、流用先プログラム中の部品化対象プログラムP1を挿入する位置を取得する(ステップS13)。
部品化対象プログラムP1の流用先プログラムでの挿入位置が取得(選択)されると、識別子生成部14は、部品化対象プログラムP1内で使用される変数に付加する識別子を生成する(ステップS14)。ついで、新規変数生成部15は、流用元プログラム内の変数(以下、流用元変数ということがある)に、ステップS14で生成された識別子を付加した新規変数を生成する(ステップS15)。ここでは、たとえば、新規変数は、「識別子¥」+「変数」という形とすることができる。なお、これは一例であり、他の形式であってもよい。この生成された新規変数は、流用先プログラムに追加される。
また、新規変数生成部15は、流用するプログラムで使われている変数の使用状況(読出し、書込み)を解析し、部品化対象プログラムP1中で新規変数に置換する流用元変数を抽出する(ステップS16)。図3(b)は、図3(a)のプログラムをリスト表示したプログラムP2を示している。置換対象とするか否かの基準はつぎの通りである。LD命令(LDI命令)の引数になっている変数と、MOV命令の第2引数になっている変数と、が置換対象の変数である。これは、LD命令で実行条件が成立した場合にのみMOV命令が実行されるため、いつでもMOV命令が実行されるわけではないからである。出力に関しては無い場合に出力先の値を維持するだけでよい。その結果、図3(b)における変数の使用状況の解析と置換対象の判断はつぎのように行われる。命令文301では、LD命令の引数となっている変数FLAG1は置換対象と判断される。命令文302では、MOV命令の第2引数となっている変数VAR1が置換対象と判断される。命令文303では、変数FLAG1が置換対象と判断される。命令文304では、変数VAR2が置換対象と判断される。
ついで、新規変数生成部15は、部品化対象プログラムP1中の流用元変数と、識別子を付加して生成される新規変数と、を対応付ける変数対応付け情報を生成する(ステップS17)。図3(c)は、変数対応付け情報の一例を示している。このように、変数対応付け情報では、部品化対象プログラムP1内で使用される流用元変数のうち、新規変数に置換されるものが、新規変数と対応付けされる。
その後、流用プログラム生成部16は、変数対応付け情報に基づいて、部品化対象プログラムP1中の流用元変数を新規変数に置換し、流用プログラムを生成する(ステップS18)。図3(d)は、置換した流用プログラムP3を示している。
ついで、プログラム挿入部17は、ステップS18で生成された流用プログラムP3をステップS12で指定された流用先プログラムの挿入位置に挿入する(ステップS19)。そしてプログラム挿入部17は、流用プログラムP3を挿入した流用先プログラムにおいて、流用プログラムP3の挿入位置の直前に、入力変数への入力インタフェースとなるプログラムを追加し、挿入位置の直後に、出力変数からの出力インタフェースのプログラムを追加する(ステップS20)。図3(e)は、入出力インタフェースプログラムを追加した流用プログラムを示している。ここでは、流用プログラムP3の直前に入力インタフェースとなるプログラムP4が追加され、流用プログラムP3の直後に出力インタフェースとなるプログラムP5が追加されている。以上によって、プログラムの部品化処理が終了する。
図4は、従来のプログラムをFB化する際の様子を模式的に示す図であり、(a)はFB化するプログラムを示し、(b)はFB化した後のプログラムを示す。特許文献1によるFB化では、プログラムをFB化する場合、FB型の定義やFB内に存在する変数の種別が自動設定されるが、FB内の変数は、外部変数に自動で設定されることがない。そのため、流用元のプログラムの変数をFB内で使用したい場合(図4(a)のFBのロジックとなるプログラムP101の例では、「IN1」がその変数にあたる)には、図4(b)に示されるように、FB P102の内部変数とのデータ交換のためのプログラムP103を作成しなければならなかった。
一方、実施の形態1では、流用元プログラムで使用されている流用元変数は、流用先プログラムにおいて一意となる変数名に置換され、流用先プログラムに変数として追加される。そのため、追加された変数は、流用先プログラム内の別の箇所でもそのまま使用することができる。このように、実施の形態1による方法では、従来のプログラムのFB化の際に必要であったデータ化交換のためのプログラムP103が不要になるという効果を有する。また、新規変数の一部に流用元変数の名称を含むようにしたので、名称に付けた変数の意図が失われず、作成された流用プログラム内の処理の可読性を維持することができるという効果も有する。
さらに、プログラムをFB化すると、FB型の定義やFB内に存在する変数の種別の設定が必要であるが、実施の形態1のように部品化するのみの場合には、FB型の定義やFB内に存在する変数の種別の設定を行う必要がないという効果を有する。
実施の形態2.
実施の形態2では、実施の形態1で得られる部品化されたプログラムをブロック化表示することができるプログラム開発支援装置およびその方法について説明する。
図5は、実施の形態2によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。このプログラム開発支援装置10は、実施の形態1のプログラム開発支援装置に、変数解析部19と、流用プログラムブロック表示部20と、をさらに備える。
変数解析部19は、流用プログラム中で使用される変数の状態(読出し、書込み)である使用状況を解析して、処理開始時に値の読出しを必要とする変数と、処理終了時に値が書込みされる変数と、に分別する。
流用プログラムブロック表示部20は、変数解析部19による解析の結果、読出しが必要とされる側の変数を入力ピンとし、書込みされる側の変数を出力ピンとして、流用プログラム生成部16で生成された流用プログラムを、ブロック表示する。具体的には、プログラムがラダープログラム(シーケンスプログラム)で構成される場合には、流用プログラムをプログラム中に矩形で表示し、矩形のプログラムブロック中の左側に入力ピンを配置し、右側に出力ピンを配置する。なお、その他の構成要素は、実施の形態1と同一であるので、その説明を省略する。
つぎに、このような構成のプログラム開発支援装置10におけるプログラム開発支援方法について説明する。図6は、実施の形態2によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。ここでは、流用プログラム生成部16で生成された流用プログラムをブロック化して表示する処理について説明する。
まず、変数解析部19は、流用するプログラムで使用されている変数の使用状況(読出し、書込み)を解析する(ステップS31)。たとえば、命令の引数において、読出しとなっている引数と書込みとなっている引数とを予め命令ごとに定義しておき、その定義に基づいて、流用プログラム中の命令の引数となっている変数の使用状況を取得する。
具体的な解析手順について図3(b)のプログラムP2を用いて説明する。命令文301では、LD命令の引数となっている変数FLAG1は読出しと判断される。命令文302では、MOV命令の第1引数となっている変数IN1や読出しと判断され、第2引数となっている変数VAR1は書込みと判断される。命令文303では、変数FLAG1が読出しと判断される。命令文304では、第1引数となっている変数VAR1が読出しと判断され、第2引数となっている変数VAR2が書込みと判断される。
図7は、流用プログラム中の変数の使用状況を示す図である。この図に示されるように、変数FLAG1は、読出しとして使用されているため、流用プログラムではFBでいう入力変数の使われ方をしていると判断される。変数IN1は、読出しとして使用されており、流用先プログラムで変数置換されないため、FBでいう外部変数の使われ方をしていると判断される。変数VAR1は、読出しと書込みの両方に使用されているため、流用プログラムではFBでいう内部変数の使われ方をしていると判断される。変数VAR2は、書込みとして使用されているため、流用プログラムではFBでいう出力変数の使われ方をしていると判断される。なお、図7では、流用プログラムP3に変換する前の部品化対象プログラムP2のリストを例に挙げているので、各変数には識別子がついていないが、実際には、識別子(この例では「PB1¥」)が付加されている。
つぎに、流用プログラムブロック表示部20は、ステップS31の解析の結果から、入力ピンとなる変数と出力ピンとなる変数を抽出し、流用プログラムをブロック表示し、その流用プログラム中に抽出した入力ピンと出力ピンを表示する(ステップS32)。入力ピンとなる変数は、読出しのみとして使用されている変数(入力変数)であり、出力ピンとなる変数は、書込みのみとして使用されている変数(出力変数)である。このとき、入力ピンと出力ピンは、それぞれ識別子が付加された変数名称としてブロック中に表示される。
たとえば、図7の例では、変数FLAG1は、読出しのみに使用されている入力変数であり、入力ピンに表示されるが、出力ピンには表示されないことになる。変数IN1は、内部変数的に使用されているので、入力ピンおよび出力ピンには表示されない。変数VAR1は、読出しと書込みの両方に使用されているので、入力ピンおよび出力ピンには表示されない。変数VAR2は、書込みにのみ使用されている出力変数であり、出力ピンには表示されるが、入力ピンには表示されないことになる。
図8は、流用プログラムのブロック表示の一例を示す図であり、(a)は流用プログラムを示し、(b)は(a)の流用プログラムをブロック表示した例を示している。図8(a)と図7から、流用プログラムP3中では、符号321で示される変数PB1¥FLAG1が入力変数の使われ方をしているので、入力ピンとなり、符号322で示される変数PB1¥VAR2が出力変数の使われ方をしているので、出力ピンとなる。そして、図8(b)に示されるように、流用プログラムP3をブロック表示し、そのブロック401の左側に入力ピンとして変数PB1¥FLAG1を配置し、右側に出力ピンとして変数PB1¥VAR2を配置する。以上によって、流用プログラムのブロック化処理が終了する。
実施の形態2では、部品化された流用プログラムから入力変数と出力変数とを抽出し、流用プログラムをFBと同様にブロック化して表示し、その中に入力変数を入力ピンとして表示し、出力変数を出力ピンとして表示するようにした。これによって、FBと同等の操作で流用ができ、使用容易性が向上するという効果を有する。
実施の形態3.
実施の形態2では、流用プログラムをブロック表示する際に、識別子を付加した変数名で入力ピンと出力ピンとをブロック中に配置した。実施の形態3では、これとは異なる方法で流用プログラムをブロック表示する場合を説明する。
実施の形態3によるプログラム開発支援装置10の構成は、実施の形態2のものと同様である。ただし、流用プログラムブロック表示部20は、ブロック表示する際に、入力ピンと出力ピンの変数の名称を、識別子とそれ以外(流用元変数名)に分ける。そして、識別子をブロック名としてブロックに表示し、読出し側の流用元変数名を入力ピンに表示し、書込み側の流用元変数名を出力ピンに表示する。その他の構成要素は、実施の形態1,2と同一であるので、その説明を省略する。
つぎに、このような構成のプログラム開発支援装置10におけるプログラム開発支援方法について説明する。図9は、実施の形態3によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。ここでは、流用プログラム生成部16で生成された流用プログラムをブロック化して表示する処理について説明する。
まず、変数解析部19は、実施の形態2と同様に、流用するプログラムで使用されている変数の使用状況(読出し、書込み)を解析する(ステップS51)。
つぎに、流用プログラムブロック表示部20は、ステップS51の解析の結果から、入力ピンとなる変数と出力ピンとなる変数を抽出し(ステップS52)、入力ピンと出力ピンに表示する変数の変数名を、識別子とそれ以外に分ける(ステップS53)。
その後、流用プログラムブロック表示部20は、流用プログラムをブロック表示し、そのブロックに名称として識別子も表示する(ステップS54)。また、流用プログラムブロック表示部20は、識別子以外の流用元変数名を、その流用プログラム中に抽出した入力ピンと出力ピンとして表示する(ステップS55)。具体的には、読出しに使用されている抽出された新規変数の流用元変数を入力ピンに表示し、書込みに使用されている抽出された新規変数の流用元変数を出力ピンに表示する。以上によって、処理が終了する。
図10は、流用プログラムのブロック表示の一例を示す図であり、(a)は流用プログラムを示し、(b)は(a)の流用プログラムをブロック表示した例を示している。図8(b)と比較して、図10(b)では、ブロック401の上部に識別子411が表示され、入力ピンと出力ピンは、識別子が除去された変数名として表示されている。
実施の形態3では、部品化した流用プログラムをブロック化する際に、識別子をブロックの名称とし、新規変数から識別子を除去した流用元変数を入力ピンと出力ピンの表示名とした。これによって、流用プログラムの使用において、識別子がFBインスタンス名のように表示され、またピンの名称が流用元変数で表示されるので、FBと同等の使い勝手となり、実施の形態2の場合に比してさらに使用容易性が向上するという効果を有する。
実施の形態4.
実施の形態4では、流用プログラムで使用する変数の名称や種別、データ型を変更することができるプログラム開発支援装置およびその方法について説明する。
図11は、実施の形態4によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。このプログラム開発支援装置10は、実施の形態2または実施の形態3のプログラム開発支援装置10に、流用プログラム編集部21をさらに備える。
流用プログラム編集部21は、流用プログラムの編集画面を表示部12に表示するとともに、編集画面にユーザによって入力部11を介して設定された内容を流用プログラムに反映させる機能を有する。具体的には、流用プログラム編集部21は、流用プログラム中の識別子の名称と、流用プログラム中で使用されている変数名と、を取得し、編集画面に表示する。図12は、編集画面の一例を示す図である。この図に示されるように、編集画面500には、識別子の名称510と、流用プログラム中の変数をリスト表示した変数リスト520と、が含まれる。変数リスト520は、取得した変数名521と、その変数名のデータ型522と、その変数名について変数解析部19で取得した使用状況に基づいて判断される変数種別523と、を有する。変数名521と変数種別523に関しては、流用プログラム編集部21で予め入力されるが、データ型522については、空白としておいてもよいし、変数名521について予めデータ型が定義されている場合にはその値を取得して入力されるようにしてもよい。
編集画面500の識別子の名称510と変数リスト520とは、ともに編集可能な構成となっている。そのため、入力部11を介してユーザが変更することが可能である。そして、ユーザによって編集画面500の内容が確定されると、流用プログラム編集部21は、その内容が流用プログラムとそれに基づいて作成されるブロックに反映する。なお、その他の構成要素は、実施の形態1〜3と同一であるので、その説明を省略する。
図13と図14は、実施の形態4による流用プログラムの変更処理の様子を模式的に示す図である。図13(a)に示されるように、識別子の名称510が「PB1」の場合の流用プログラムの構造(b)と、流用プログラムから生成されるブロック(c)を示している。ここで、図14(a)に示されるように、編集画面500で識別子の名称510を「PB2」と変更することによって、(b)に示されるように流用プログラムの識別子が「PB2」に変更される。また、ブロック表示においても、ブロックの名称が「PB2」へと変更される。このように、編集画面500での編集内容を容易に流用プログラムとブロックに反映させることができる。
実施の形態4では、流用プログラムの内容の変更を編集画面500で行い、その結果を流用プログラムと流用プログラムから生成されるブロックに反映させるようにした。これによって、従来ではFB化で必要だった定義のプログラムの変更が不要になるという効果を有する。また、流用元のプログラムまで変更されることがなくなり、流用したプログラムを再利用しやすくなるという効果を有する。
実施の形態5.
実施の形態5では、部品化した流用プログラムをFBに変換する場合、またはFBを部品化した流用プログラムに変換する場合について説明する。
図15は、実施の形態5によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。このプログラム開発支援装置10は、実施の形態4のプログラム開発支援装置10に、流用プログラム−FB変換部22をさらに備える。
流用プログラム−FB変換部22は、ユーザによって選択された部品化されたプログラムをFBに変換したり、または逆にユーザによって選択されたFBを部品化されたプログラムに変換したりする機能を有する。なお、プログラムの一部をFBに変換する技術と、FBをプログラムに変換する技術については、公知であるので、その説明を省略する。また、その他の構成要素は、実施の形態1〜4と同一であるので、その説明を省略する。
図16は、実施の形態5による部品化した流用プログラムをFBに変換する処理手順の一例を示すフローチャートである。まず、ユーザによって、部品化したプログラムが選択される(ステップS71)。ついで、流用プログラム−FB変換部22は、ステップS71で選択された部品化したプログラムを、従来のプログラムの一部をFBに変換する方法にしたがって、FBに変換する(ステップS72)。以上によって、処理が終了する。
図17は、実施の形態5によるFBを部品化したプログラムに変換する処理手順の一例を示すフローチャートである。まず、ユーザによって、部品化したプログラムに変換したいFBが選択される(ステップS91)。ついで、流用プログラム−FB変換部22は、ステップS91で選択したFBを、従来のFBをプログラムの一部に変換する方法にしたがって、部品化したプログラムに変換する(ステップS92)。以上によって、処理が終了する。
実施の形態5では、既存のFBを当該流用プログラムの効果が得られるように変換されるので、ソフトウェア資産を有効活用することができるという効果を有する。
なお、上述した説明では、部品化する対象として、ラダープログラム(シーケンスプログラム)を例に挙げたが、これに限定されるものではない。たとえば、ST(Structured Text)やFBD(Function Block Diagram)言語などのIEC61131−3に準拠したプログラム言語に対しても適用することができる。
以上のように、この発明にかかるプログラム開発支援装置は、あるプログラム中の使用頻度の高いプログラムの再利用に有用である。
10 プログラム開発支援装置、11 入力部、12 表示部、13 プログラム部品化情報取得部、14 識別子生成部、15 新規変数生成部、16 流用プログラム生成部、17 プログラム挿入部、18 制御部、19 変数解析部、20 流用プログラムブロック表示部、21 流用プログラム編集部、22 流用プログラム−FB変換部。
この発明は、プログラム開発支援装置およびその方法に関するものである。
FA(Factory Automation)分野の制御装置としてプログラマブルコントローラ(以下、PLCという)が用いられている。このPLCのプログラミングコストが、FAシステムにおける開発コストの大部分を占めるようになってきている。
こうした中、PLCのプログラミングに関する標準規格IEC61131−3(JISB3503)が策定された。IEC61131−3は単なるプログラミング言語の規格であるだけではなく、プログラムの構成要素、変数の定義も標準化されている。これによりメーカや機種に依存することなくソフトウェアの開発ができるようになった。
IEC61131−3が普及するにつれ、プログラムの開発において、プログラムの品質と開発効率を高めるためにプログラムの標準化、部品化、または構造化が進められている。標準化の一つの流れとして、プログラムのファンクションブロック(Function Block:以下、FBという)化がある。
PLCプログラムの構成要素には、プログラムと、複数のプログラムの集まりであるプロジェクトと、プログラム内の複数の命令をまとめて1つのブロックとしたFBと、がある。FBは、実行するたびに動作するコードと、内部メモリの状態により制御処理を行うものである。FB内で使用される変数の種類には、入力変数、出力変数、内部変数および外部変数がある。
入力変数は、FBの入力パラメータの役割を果たし、FB外から値を受け取るための変数である。出力変数は、FBの出力パラメータの役割を果たし、FBの演算結果の値をFB外へ引き渡すための変数である。入力変数および出力変数は、プログラムの図上ではそれぞれ入力ピンおよび出力ピンとして表示される。
内部変数は、FB内やFBが存在するプログラム内でのみ使用できる変数であり、外部プログラムから値の参照や変更することはできない。
外部変数は、グローバル変数をFB内から参照するための変数である。ここで、グローバル変数とは、FB内で使う変数ではなく、プロジェクトのどのプログラムからも参照できる変数のことである。外部変数は、同じ変数名のグローバル変数を参照し、この値を、外部変数が宣言されているプログラムで使用するための変数である。
ここで、プログラムをFB化する場合、FB型の定義およびFB内に存在する変数の種別を設定する必要があり、手続きが煩雑であった。そこで、この手続きの煩雑さを解消するPLCのプログラム開発支援装置が提案されている(たとえば、特許文献1参照)。この特許文献1の手法によれば、プログラムのFB化の際に自動でFB型やFB内に存在する変数の種別が自動で設定される。
しかしながら、特許文献1に記載の技術では、FB内の変数は、入力変数、出力変数および内部変数のうちのいずれかに割り振られるのみである。すなわち、FB内で外部変数として使用される変数があっても、外部変数に自動で設定されないという問題点があった。そのため、流用元プログラムの変数である外部変数をFB内で使用したい場合には、FBの内部変数とのデータ交換のためのプログラムを作成しなければならなかった。
この発明は上記に鑑みてなされたもので、煩雑な手続きやプログラムを追加すること無しに、外部変数を含めてプログラムの部品化を簡単に行うことが可能なプログラム開発支援装置およびその方法を得ることを目的とする。
上記目的を達成するため、この発明にかかるプログラム開発支援装置は、流用元プログラム中の部品化を行う部品化対象プログラムで使用される流用元変数に付加し、前記部品化対象プログラムの挿入先の流用先プログラム全体で一意となるように識別子を生成する識別子生成手段と、前記部品化対象プログラムに存在する前記流用元変数の名称と前記識別子とを組み合わせた名称を有する新規変数を前記流用先プログラムに追加するとともに、前記部品化対象プログラムの前記流用元変数と前記新規変数とを対応付けた変数対応付け情報を生成する新規変数生成手段と、前記部品化対象プログラムで使用される前記流用元変数を、前記変数対応付け情報に基づいて前記新規変数に置換して、流用プログラムを生成する流用プログラム生成手段と、前記流用プログラムを前記流用先プログラムに挿入するプログラム挿入手段と、を備えることを特徴とする。
この発明によれば、流用元プログラムで使用されている流用元変数は、流用先プログラムにおいて一意となる変数名に置換され、流用先プログラムに変数として追加されるようにしたので、既存の流用元プログラムにある処理を流用しながらも、流用先プログラムごとに変数の状態を持つことができ、FB化によるプログラムの流用と同等の動作を得ることができる。また、追加された新規変数は、流用先プログラムの変数として追加されるため、流用先プログラム内の別の箇所でそのまま使用できる。そのため、データ交換のプログラミングが不要になるという効果を有する。
図1は、実施の形態1によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。
図2は、実施の形態1によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。
図3は、実施の形態1によるプログラム開発支援方法の処理手順の一例を模式的に示す図である。
図4は、従来のプログラムをFB化する際の様子を模式的に示す図である。
図5は、実施の形態2によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。
図6は、実施の形態2によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。
図7は、流用プログラム中の変数の使用状況を示す図である。
図8は、流用プログラムのブロック表示の一例を示す図である。
図9は、実施の形態3によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。
図10は、流用プログラムのブロック表示の一例を示す図である。
図11は、実施の形態4によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。
図12は、編集画面の一例を示す図である。
図13は、実施の形態4による流用プログラムの変更処理の様子を模式的に示す図である。
図14は、実施の形態4による流用プログラムの変更処理の様子を模式的に示す図である。
図15は、実施の形態5によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。
図16は、実施の形態5による部品化した流用プログラムをFBに変換する処理手順の一例を示すフローチャートである。
図17は、実施の形態5によるFBを部品化したプログラムに変換する処理手順の一例を示すフローチャートである。
以下に添付図面を参照して、この発明にかかるプログラム開発支援装置およびその方法の好適な実施の形態を詳細に説明する。なお、これらの実施の形態によりこの発明が限定されるものではない。
実施の形態1.
実施の形態1では、既に作成されているプログラム中で、多く流用されることが見込まれる部分を部品化して、再利用可能な構成とするプログラム開発支援装置およびその方法について説明する。
図1は、実施の形態1によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。プログラム開発支援装置10は、入力部11と、表示部12と、プログラム部品化情報取得部13と、識別子生成部14と、新規変数生成部15と、流用プログラム生成部16と、プログラム挿入部17と、これらの各処理部を制御する制御部18と、を備える。
入力部11は、キーボードまたはポインティングデバイスなどのユーザとの間の入力インタフェースである。表示部12は、液晶表示装置などのユーザに対して情報を表示する装置である。
プログラム部品化情報取得部13は、プログラムを部品化するに当たって必要なプログラム部品化情報を取得する。プログラム部品化情報として、たとえばユーザによって指定される流用したい部品化対象プログラムを含む流用元プログラムと、流用元プログラム中の部品化対象プログラムと、部品化対象プログラムの挿入先である流用先プログラムの挿入位置と、を挙げることができる。プログラム部品化情報取得部13は、流用元プログラムを、たとえば流用元プログラムが格納されたプログラマブルコントローラ、またはデータベースなどから取得する。また、部品化対象プログラムは、流用元プログラムから部品化したい箇所がユーザによって入力部11を介して選択されることによって取得される。流用先プログラム挿入位置は、ユーザによって入力部11を介して流用先プログラム中の挿入位置が選択されることによって取得される。
識別子生成部14は、選択された部品化対象プログラムで、流用先のプログラム全体で一意となる識別子を生成する。
新規変数生成部15は、選択された部品化対象プログラムに存在する変数を解析し、所定の規則にしたがって選択される変数に対して、変数の名称に識別子生成部14で生成された識別子を組み合わせて新規変数を生成する。また、新規変数生成部15は、生成した新規変数を流用先プログラムに追加し、部品化対象プログラムに元々含まれている変数と、追加した新規変数と、を対応付ける変数対応付け情報を生成する。なお、この実施の形態1では、新規変数生成部15は、LD命令またはLDI命令の引数になっている変数と、MOV命令の第2引数になっている変数を、置換対象の変数として抽出する。
流用プログラム生成部16は、新規変数生成部15によって生成された変数対応付け情報に基づいて部品化対象プログラム中の変数を新規変数に置換し、流用プログラムを生成する処理を行う。
プログラム挿入部17は、流用プログラム生成部16によって生成された流用プログラムを、流用先プログラムのユーザによって選択された領域に挿入する。
つぎに、このような構成のプログラム開発支援装置10におけるプログラム開発支援方法について説明する。図2は、実施の形態1によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。また、図3は、実施の形態1によるプログラム開発支援方法の処理手順の一例を模式的に示す図である。なお、ここでは、流用元プログラムと流用先プログラムがプログラム開発支援装置10によって読込まれた状態にあるものとする。
まず、ユーザによって入力部11を介して流用元プログラム中の部品化したい箇所が範囲選択される(ステップS11)。図3(a)は、ラダー形式で記述された流用元プログラム中で流用したい箇所である部品化対象プログラムP1がユーザによって選択された状態を示している。なお、ここでは、流用元プログラム中の部品化したい箇所の範囲選択を行っているが、たとえば流用元プログラムの部品化したい箇所をメモリに一時的に記憶させることで範囲選択を行ってもよい。
ついで、選択された部品化対象プログラムP1を部品化して、流用先プログラムに挿入する処理を実行する指示を与え(ステップS12)、流用先プログラム中の部品化対象プログラムP1を挿入する位置を取得する(ステップS13)。
部品化対象プログラムP1の流用先プログラムでの挿入位置が取得または選択されると、識別子生成部14は、部品化対象プログラムP1内で使用される変数に付加する識別子を生成する(ステップS14)。ついで、新規変数生成部15は、流用元プログラム内の変数(以下、流用元変数ということがある)に、ステップS14で生成された識別子を付加した新規変数を生成する(ステップS15)。ここでは、たとえば、新規変数は、「識別子¥」+「変数」という形とすることができる。なお、これは一例であり、他の形式であってもよい。この生成された新規変数は、流用先プログラムに追加される。
また、新規変数生成部15は、流用するプログラムで使われている変数の読出し、書込みなどの使用状況を解析し、部品化対象プログラムP1中で新規変数に置換する流用元変数を抽出する(ステップS16)。図3(b)は、図3(a)のプログラムをリスト表示したプログラムP2を示している。置換対象とするか否かの基準はつぎの通りである。LD命令またはLDI命令の引数になっている変数と、MOV命令の第2引数になっている変数と、が置換対象の変数である。これは、LD命令で実行条件が成立した場合にのみMOV命令が実行されるため、いつでもMOV命令が実行されるわけではないからである。出力に関しては無い場合に出力先の値を維持するだけでよい。その結果、図3(b)における変数の使用状況の解析と置換対象の判断はつぎのように行われる。命令文301では、LD命令の引数となっている変数FLAG1は置換対象と判断される。命令文302では、MOV命令の第2引数となっている変数VAR1が置換対象と判断される。命令文303では、変数FLAG1が置換対象と判断される。命令文304では、変数VAR2が置換対象と判断される。
ついで、新規変数生成部15は、部品化対象プログラムP1中の流用元変数と、識別子を付加して生成される新規変数と、を対応付ける変数対応付け情報を生成する(ステップS17)。図3(c)は、変数対応付け情報の一例を示している。このように、変数対応付け情報では、部品化対象プログラムP1内で使用される流用元変数のうち、新規変数に置換されるものが、新規変数と対応付けされる。
その後、流用プログラム生成部16は、変数対応付け情報に基づいて、部品化対象プログラムP1中の流用元変数を新規変数に置換し、流用プログラムを生成する(ステップS18)。図3(d)は、置換した流用プログラムP3を示している。
ついで、プログラム挿入部17は、ステップS18で生成された流用プログラムP3をステップS12で指定された流用先プログラムの挿入位置に挿入する(ステップS19)。そしてプログラム挿入部17は、流用プログラムP3を挿入した流用先プログラムにおいて、流用プログラムP3の挿入位置の直前に、入力変数への入力インタフェースとなるプログラムを追加し、挿入位置の直後に、出力変数からの出力インタフェースのプログラムを追加する(ステップS20)。図3(e)は、入出力インタフェースプログラムを追加した流用プログラムを示している。ここでは、流用プログラムP3の直前に入力インタフェースとなるプログラムP4が追加され、流用プログラムP3の直後に出力インタフェースとなるプログラムP5が追加されている。以上によって、プログラムの部品化処理が終了する。
図4は、従来のプログラムをFB化する際の様子を模式的に示す図であり、(a)はFB化するプログラムを示し、(b)はFB化した後のプログラムを示す。特許文献1によるFB化では、プログラムをFB化する場合、FB型の定義やFB内に存在する変数の種別が自動設定されるが、FB内の変数は、外部変数に自動で設定されることがない。そのため、流用元のプログラムの変数をFB内で使用したい場合、たとえば図4(a)のFBのロジックとなるプログラムP101の例では、「IN1」を変数に使用したい場合、には、図4(b)に示されるように、FB P102の内部変数とのデータ交換のためのプログラムP103を作成しなければならなかった。
一方、実施の形態1では、流用元プログラムで使用されている流用元変数は、流用先プログラムにおいて一意となる変数名に置換され、流用先プログラムに変数として追加される。そのため、追加された変数は、流用先プログラム内の別の箇所でもそのまま使用することができる。このように、実施の形態1による方法では、従来のプログラムのFB化の際に必要であったデータ化交換のためのプログラムP103が不要になるという効果を有する。また、新規変数の一部に流用元変数の名称を含むようにしたので、名称に付けた変数の意図が失われず、作成された流用プログラム内の処理の可読性を維持することができるという効果も有する。
さらに、プログラムをFB化すると、FB型の定義やFB内に存在する変数の種別の設定が必要であるが、実施の形態1のように部品化するのみの場合には、FB型の定義やFB内に存在する変数の種別の設定を行う必要がないという効果を有する。
実施の形態2.
実施の形態2では、実施の形態1で得られる部品化されたプログラムをブロック化表示することができるプログラム開発支援装置およびその方法について説明する。
図5は、実施の形態2によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。このプログラム開発支援装置10は、実施の形態1のプログラム開発支援装置に、変数解析部19と、流用プログラムブロック表示部20と、をさらに備える。
変数解析部19は、流用プログラム中で使用される変数の読出し、書込みなどの状態である使用状況を解析して、処理開始時に値の読出しを必要とする変数と、処理終了時に値が書込みされる変数と、に分別する。
流用プログラムブロック表示部20は、変数解析部19による解析の結果、読出しが必要とされる側の変数を入力ピンとし、書込みされる側の変数を出力ピンとして、流用プログラム生成部16で生成された流用プログラムを、ブロック表示する。具体的には、プログラムがラダープログラム、すなわちシーケンスプログラムで構成される場合には、流用プログラムをプログラム中に矩形で表示し、矩形のプログラムブロック中の左側に入力ピンを配置し、右側に出力ピンを配置する。なお、その他の構成要素は、実施の形態1と同一であるので、その説明を省略する。
つぎに、このような構成のプログラム開発支援装置10におけるプログラム開発支援方法について説明する。図6は、実施の形態2によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。ここでは、流用プログラム生成部16で生成された流用プログラムをブロック化して表示する処理について説明する。
まず、変数解析部19は、流用するプログラムで使用されている変数の読出し、書込みなどの使用状況を解析する(ステップS31)。たとえば、命令の引数において、読出しとなっている引数と書込みとなっている引数とを予め命令ごとに定義しておき、その定義に基づいて、流用プログラム中の命令の引数となっている変数の使用状況を取得する。
具体的な解析手順について図3(b)のプログラムP2を用いて説明する。命令文301では、LD命令の引数となっている変数FLAG1は読出しと判断される。命令文302では、MOV命令の第1引数となっている変数IN1や読出しと判断され、第2引数となっている変数VAR1は書込みと判断される。命令文303では、変数FLAG1が読出しと判断される。命令文304では、第1引数となっている変数VAR1が読出しと判断され、第2引数となっている変数VAR2が書込みと判断される。
図7は、流用プログラム中の変数の使用状況を示す図である。この図に示されるように、変数FLAG1は、読出しとして使用されているため、流用プログラムではFBでいう入力変数の使われ方をしていると判断される。変数IN1は、読出しとして使用されており、流用先プログラムで変数置換されないため、FBでいう外部変数の使われ方をしていると判断される。変数VAR1は、読出しと書込みの両方に使用されているため、流用プログラムではFBでいう内部変数の使われ方をしていると判断される。変数VAR2は、書込みとして使用されているため、流用プログラムではFBでいう出力変数の使われ方をしていると判断される。なお、図7では、流用プログラムP3に変換する前の部品化対象プログラムP2のリストを例に挙げているので、各変数には識別子がついていないが、実際には、識別子、この例では「PB1¥」、が付加されている。
つぎに、流用プログラムブロック表示部20は、ステップS31の解析の結果から、入力ピンとなる変数と出力ピンとなる変数を抽出し、流用プログラムをブロック表示し、その流用プログラム中に抽出した入力ピンと出力ピンを表示する(ステップS32)。入力ピンとなる変数は、読出しのみとして使用されている変数、すなわち入力変数であり、出力ピンとなる変数は、書込みのみとして使用されている変数、すなわち出力変数である。このとき、入力ピンと出力ピンは、それぞれ識別子が付加された変数名称としてブロック中に表示される。
たとえば、図7の例では、変数FLAG1は、読出しのみに使用されている入力変数であり、入力ピンに表示されるが、出力ピンには表示されないことになる。変数IN1は、内部変数的に使用されているので、入力ピンおよび出力ピンには表示されない。変数VAR1は、読出しと書込みの両方に使用されているので、入力ピンおよび出力ピンには表示されない。変数VAR2は、書込みにのみ使用されている出力変数であり、出力ピンには表示されるが、入力ピンには表示されないことになる。
図8は、流用プログラムのブロック表示の一例を示す図であり、(a)は流用プログラムを示し、(b)は(a)の流用プログラムをブロック表示した例を示している。図8(a)と図7から、流用プログラムP3中では、符号321で示される変数PB1¥FLAG1が入力変数の使われ方をしているので、入力ピンとなり、符号322で示される変数PB1¥VAR2が出力変数の使われ方をしているので、出力ピンとなる。そして、図8(b)に示されるように、流用プログラムP3をブロック表示し、そのブロック401の左側に入力ピンとして変数PB1¥FLAG1を配置し、右側に出力ピンとして変数PB1¥VAR2を配置する。以上によって、流用プログラムのブロック化処理が終了する。
実施の形態2では、部品化された流用プログラムから入力変数と出力変数とを抽出し、流用プログラムをFBと同様にブロック化して表示し、その中に入力変数を入力ピンとして表示し、出力変数を出力ピンとして表示するようにした。これによって、FBと同等の操作で流用ができ、使用容易性が向上するという効果を有する。
実施の形態3.
実施の形態2では、流用プログラムをブロック表示する際に、識別子を付加した変数名で入力ピンと出力ピンとをブロック中に配置した。実施の形態3では、これとは異なる方法で流用プログラムをブロック表示する場合を説明する。
実施の形態3によるプログラム開発支援装置10の構成は、実施の形態2のものと同様である。ただし、流用プログラムブロック表示部20は、ブロック表示する際に、入力ピンと出力ピンの変数の名称を、識別子とこれ以外の流用元変数名に分ける。そして、識別子をブロック名としてブロックに表示し、読出し側の流用元変数名を入力ピンに表示し、書込み側の流用元変数名を出力ピンに表示する。その他の構成要素は、実施の形態1,2と同一であるので、その説明を省略する。
つぎに、このような構成のプログラム開発支援装置10におけるプログラム開発支援方法について説明する。図9は、実施の形態3によるプログラム開発支援方法の処理手順の一例を示すフローチャートである。ここでは、流用プログラム生成部16で生成された流用プログラムをブロック化して表示する処理について説明する。
まず、変数解析部19は、実施の形態2と同様に、流用するプログラムで使用されている変数の読出し、書込みなどの使用状況を解析する(ステップS51)。
つぎに、流用プログラムブロック表示部20は、ステップS51の解析の結果から、入力ピンとなる変数と出力ピンとなる変数を抽出し(ステップS52)、入力ピンと出力ピンに表示する変数の変数名を、識別子とこれ以外に分ける(ステップS53)。
その後、流用プログラムブロック表示部20は、流用プログラムをブロック表示し、このブロックに名称として識別子も表示する(ステップS54)。また、流用プログラムブロック表示部20は、識別子以外の流用元変数名を、この流用プログラム中に抽出した入力ピンと出力ピンとして表示する(ステップS55)。具体的には、読出しに使用されている抽出された新規変数の流用元変数を入力ピンに表示し、書込みに使用されている抽出された新規変数の流用元変数を出力ピンに表示する。以上によって、処理が終了する。
図10は、流用プログラムのブロック表示の一例を示す図であり、(a)は流用プログラムを示し、(b)は(a)の流用プログラムをブロック表示した例を示している。図8(b)と比較して、図10(b)では、ブロック401の上部に識別子411が表示され、入力ピンと出力ピンは、識別子が除去された変数名として表示されている。
実施の形態3では、部品化した流用プログラムをブロック化する際に、識別子をブロックの名称とし、新規変数から識別子を除去した流用元変数を入力ピンと出力ピンの表示名とした。これによって、流用プログラムの使用において、識別子がFBインスタンス名のように表示され、またピンの名称が流用元変数で表示されるので、FBと同等の使い勝手となり、実施の形態2の場合に比してさらに使用容易性が向上するという効果を有する。
実施の形態4.
実施の形態4では、流用プログラムで使用する変数の名称や種別、データ型を変更することができるプログラム開発支援装置およびその方法について説明する。
図11は、実施の形態4によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。このプログラム開発支援装置10は、実施の形態2または実施の形態3のプログラム開発支援装置10に、流用プログラム編集部21をさらに備える。
流用プログラム編集部21は、流用プログラムの編集画面を表示部12に表示するとともに、編集画面にユーザによって入力部11を介して設定された内容を流用プログラムに反映させる機能を有する。具体的には、流用プログラム編集部21は、流用プログラム中の識別子の名称と、流用プログラム中で使用されている変数名と、を取得し、編集画面に表示する。図12は、編集画面の一例を示す図である。この図に示されるように、編集画面500には、識別子の名称510と、流用プログラム中の変数をリスト表示した変数リスト520と、が含まれる。変数リスト520は、取得した変数名521と、この変数名のデータ型522と、この変数名について変数解析部19で取得した使用状況に基づいて判断される変数種別523と、を有する。変数名521と変数種別523に関しては、流用プログラム編集部21で予め入力されるが、データ型522については、空白としておいてもよいし、変数名521について予めデータ型が定義されている場合にはこの値を取得して入力されるようにしてもよい。
編集画面500の識別子の名称510と変数リスト520とは、ともに編集可能な構成となっている。そのため、入力部11を介してユーザが変更することが可能である。そして、ユーザによって編集画面500の内容が確定されると、流用プログラム編集部21は、その内容が流用プログラムとこれに基づいて作成されるブロックに反映する。なお、その他の構成要素は、実施の形態1〜3と同一であるので、その説明を省略する。
図13と図14は、実施の形態4による流用プログラムの変更処理の様子を模式的に示す図である。図13(a)に示されるように、識別子の名称510が「PB1」の場合の流用プログラムの構造(b)と、流用プログラムから生成されるブロック(c)を示している。ここで、図14(a)に示されるように、編集画面500で識別子の名称510を「PB2」と変更することによって、(b)に示されるように流用プログラムの識別子が「PB2」に変更される。また、ブロック表示においても、ブロックの名称が「PB2」へと変更される。このように、編集画面500での編集内容を容易に流用プログラムとブロックに反映させることができる。
実施の形態4では、流用プログラムの内容の変更を編集画面500で行い、その結果を流用プログラムと流用プログラムから生成されるブロックに反映させるようにした。これによって、従来ではFB化で必要だった定義のプログラムの変更が不要になるという効果を有する。また、流用元のプログラムまで変更されることがなくなり、流用したプログラムを再利用しやすくなるという効果を有する。
実施の形態5.
実施の形態5では、部品化した流用プログラムをFBに変換する場合、またはFBを部品化した流用プログラムに変換する場合について説明する。
図15は、実施の形態5によるプログラム開発支援装置の構成の一例を模式的に示すブロック図である。このプログラム開発支援装置10は、実施の形態4のプログラム開発支援装置10に、流用プログラム−FB変換部22をさらに備える。
流用プログラム−FB変換部22は、ユーザによって選択された部品化されたプログラムをFBに変換したり、または逆にユーザによって選択されたFBを部品化されたプログラムに変換したりする機能を有する。なお、プログラムの一部をFBに変換する技術と、FBをプログラムに変換する技術については、公知であるので、その説明を省略する。また、その他の構成要素は、実施の形態1〜4と同一であるので、その説明を省略する。
図16は、実施の形態5による部品化した流用プログラムをFBに変換する処理手順の一例を示すフローチャートである。まず、ユーザによって、部品化したプログラムが選択される(ステップS71)。ついで、流用プログラム−FB変換部22は、ステップS71で選択された部品化したプログラムを、従来のプログラムの一部をFBに変換する方法にしたがって、FBに変換する(ステップS72)。以上によって、処理が終了する。
図17は、実施の形態5によるFBを部品化したプログラムに変換する処理手順の一例を示すフローチャートである。まず、ユーザによって、部品化したプログラムに変換したいFBが選択される(ステップS91)。ついで、流用プログラム−FB変換部22は、ステップS91で選択したFBを、従来のFBをプログラムの一部に変換する方法にしたがって、部品化したプログラムに変換する(ステップS92)。以上によって、処理が終了する。
実施の形態5では、既存のFBを当該流用プログラムの効果が得られるように変換されるので、ソフトウェア資産を有効活用することができるという効果を有する。
なお、上述した説明では、部品化する対象として、ラダープログラムすなわちシーケンスプログラムを例に挙げたが、これに限定されるものではない。たとえば、ST(Structured Text)やFBD(Function Block Diagram)言語などのIEC61131−3に準拠したプログラム言語に対しても適用することができる。
以上のように、この発明にかかるプログラム開発支援装置は、あるプログラム中の使用頻度の高いプログラムの再利用に有用である。
10 プログラム開発支援装置、11 入力部、12 表示部、13 プログラム部品化情報取得部、14 識別子生成部、15 新規変数生成部、16 流用プログラム生成部、17 プログラム挿入部、18 制御部、19 変数解析部、20 流用プログラムブロック表示部、21 流用プログラム編集部、22 流用プログラム−FB変換部。