(57)【特許請求の範囲】
【請求項１】
プログラムを構成する部品の階層構造を示す部品リストと、
前記プログラムの部分記述と、階層構造における子テンプレートの挿入位置を示す記述とからなり、前記プログラムの部分記述として、階層構造中の相対位置で対象を指定するためのパラメタを含むテンプレートとを設けると共に、
前記部品リストと前記テンプレートとを入力とし、前記テンプレートのパラメタの対象指定を、当該パラメタが記述されたテンプレートの階層構造中の位置と、前記部品リストの階層構造中で同じ位置にある要素を起点とした相対位置で解釈した対象の部品で置換することによりプログラムを生成するプログラム生成部を備えたことを特徴とするプログラム生成装置。
【請求項２】
テンプレートは、階層構造中の相対位置で複製対象親を指定するための複製指定を有し、
プログラム生成部は、前記複製指定に基づき、部品リストの階層構造中で同じ位置にある要素を起点とした相対位置で解釈した前記複製対象親の子それぞれに対するテンプレートを複製し、当該複製したテンプレート中のパラメタの対象指定を、前記複製に用いた前記複製対象親の子を起点とした相対位置で解釈した対象部品で置換することによりプログラムを生成することを特徴とする請求項１記載のプログラム生成装置。
【請求項３】
複製指定は、複製毎に複製を行うか否かの複製制約を有し、プログラム生成部は、当該複製制約を満たす場合のみテンプレートの複製を行うことを特徴とする請求項２記載のプログラム生成装置。
【請求項４】
複製制約は、異なる階層間の複製指定に基づいて複製された各々のテンプレートが何番目の子に対するものであるかの関係を規定することを特徴とする請求項３記載のプログラム生成装置。
【請求項５】
全てのパラメタの対象指定となる位置全てを含む部品リストの階層構造を生成する自動生成部を備えたことを特徴とする請求項１から請求項４のうちのいずれか１項記載のプログラム生成装置。
【請求項６】
特定の要素が複製指定を持つテンプレートに対して、前記特定の要素以下から参照される部品リストを１次元に横方向に並べ、かつ、当該１次元部品リストを縦方向に並べて表形式の部品リストを設けると共に、
前記縦方向への伸縮指示を受けた場合、当該伸縮に応じて所定の数値の補完を行い前記部品リストを増減させる部品リスト編集部を備えたことを特徴とする請求項１から請求項５のうちのいずれか１項記載のプログラム生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム生成装置に関し、特に、産業用コントローラやマイコンで実行される計測監視制御プログラムの作成支援を行うプログラム生成装置に関する。
【背景技術】
【０００２】
従来より、各種設備の計測監視制御の目的で、プログラマブルコントローラ（Programmable Controller；ＰＣ）、モーションコントローラ（Motion Controller；ＭＣ）、数値制御装置コントローラ（Numerical Controller；ＮＣ）、検査装置コントローラ、表示器（Graphic Operation Terminal；ＧＯＴ）などの産業用コントローラが用いられている。産業用コントローラで実行される計測監視制御プログラムに用いられる言語としては、ラダーを代表例とするＩＥＣ６１１３１−３規格に準拠した言語や、コントローラ専用の言語などがあげられる。
【０００３】
以下、産業用コントローラの代表として、プログラマブルコントローラ（以下、ＰＣという）を例にあげて説明する。ＰＣは計測監視制御プログラム（以下、プログラムという）を実行して、計測監視制御対象の状態を把握したり、動作を指示したりする。プログラムは、所定のプログラム作成支援装置（例えば、ラダー作成支援装置）を用いて作成され、主に変数、デバイス、数値を用いて記述される。
【０００４】
ここでいうデバイスとは、ＰＣとそれが接続する計測監視制御対象との間の入出力をＰＣのメモリアドレスに割りつけたもの、および、ＰＣが内部的に使用するメモリアドレスを指している。例えば、非特許文献１に示されたようなプログラム作成支援装置（ラダー作成支援装置）に対応するＰＣでは、入力を割りつけたものをＸデバイス、出力を割りつけたものをＹデバイス、内部的に使用するビットデータ（内部リレー）をＭデバイス、内部的に使用するワードデータ（レジスタ）をＤデバイスやＲデバイス、というようにデータ種別によってデバイス文字が予め決められている。デバイスはデバイス文字とアドレスにより表記され、例えば入力デバイスのアドレス０のものは「Ｘ０」と表記される。
【０００５】
プログラム作成支援装置は、一般的にはパーソナルコンピュータ（以下、パソコンという）上で動作するソフトウェアツールとして提供され、ＰＣが設備の計測・監視・制御を行うためのプログラムの編集を支援する他、ＰＣをパソコンに接続して、パソコンで編集したプログラム（あるいはそれをコンパイルして得られた実行コード）をＰＣへ転送する機能などを有している。非特許文献１はこうしたプログラム作成支援装置の例である。なお、プログラム作成支援装置が提供するプログラム編集機能などを搭載する表示器（ＧＯＴ）もある。これにより、ＰＣと常時接続状態にあるＧＯＴ上から、プログラムの編集などを行うことができる。
【０００６】
計測監視制御対象である設備の仕様およびプログラムは、パソコン上で動作するソフトウェアツールを用いて記述されることにより、電子的にデータ化されているが、仕様とプログラムの間には電子データ的な相互関係がないことから、計測監視制御プログラムは、仕様に基づいて、プログラム作成支援装置を用いて人手により作成されている。そのため、仕様に記述された機能を過不足なく、不具合無く動作させるプログラムの作成には多大な労力が必要であった。
【０００７】
近年では、よく使用するプログラムをプログラムモジュール（Program Organization Unit；ＰＯＵ）として部品化し、設備の仕様に合致するＰＯＵを再利用しつつ、複数のＰＯＵからプログラムを構成することが可能なプログラム作成支援装置もある。プログラム言語がラダーであれば、ＰＯＵはサブルーチンや機能ブロック（Function Block；ＦＢ）に相当し、ストラクチャードテキスト（Structured Text；ＳＴ）などであれば、ＰＯＵはサブルーチンや関数に相当する。
【０００８】
さらに、複数のプログラム部品からなる任意のプログラムパタンに名前（マクロ名）をつけて登録しておき、プログラムの作成時にそれを呼び出して再利用（マクロ流用）できるマクロ機能を有するプログラム作成支援装置もある。このようにプログラム部品を再利用できるプログラム作成支援装置を用いることにより、プログラム作成の労力は軽減される。
【０００９】
例えば、特許文献１ではこのようなプログラム再利用に関してプログラム部品中のデバイスなどを示す場所をユーザが抽象的な名前で記述したものを再利用し、抽象名を部品実体化情報により実体化して具体的なプログラムを生成する方法について述べているが、抽象名で記述された部品挿入箇所と挿入する実体との間には単純な関係しかなく、ある部品実体が複数箇所に展開されることにより論理回路を構成する具体的な方法については述べられていない。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平７−４９６５１号公報
【非特許文献】
【００１１】
【非特許文献１】「GX Developer Version 8 オペレーティングマニュアル」 三菱電機株式会社、マニュアル番号SH-080356
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上記のように、プログラムの作成は、作成者即ち人間が計測監視制御対象の仕様記述を理解した上で手作業により行われる。近年のプログラム作成支援装置では、プログラム部品を再利用することにより、プログラムの作成労力はある程度軽減されるが、仕様に合致するようにプログラムを作成するためには、どのプログラム部品を選定し、それらをどのように組み合わせるかといった判断が難しく、更にその労力を軽減することが望まれていた。
【００１３】
この発明は上記のような課題を解決するためになされたもので、プログラム作成効率の向上を図ることのできるプログラム生成装置を得ることを目的とする。
【課題を解決するための手段】
【００１４】
この発明に係るプログラム生成装置は、プログラムを構成する部品の階層構造を示す部品リストと、プログラムの部分記述と、階層構造における子テンプレートの挿入位置を示す記述とからなり、プログラムの部分記述として、階層構造中の相対位置で対象を指定するためのパラメタを含むテンプレートとを設けると共に、部品リストとテンプレートとを入力とし、テンプレートのパラメタの対象指定を、パラメタが記述されたテンプレートの階層構造中の位置と、部品リストの階層構造中で同じ位置にある要素を起点とした相対位置で解釈した対象の部品で置換することによりプログラムを生成するプログラム生成部を備えたものである。
【発明の効果】
【００１５】
この発明のプログラム生成装置は、テンプレートのパラメタの対象指定を、パラメタが記述されたテンプレートの階層構造中の位置と、部品リストの階層構造中で同じ位置にある要素を起点とした相対位置で解釈した対象の部品で置換することによりプログラムを生成するようにしたので、プログラム作成効率の向上を図ることができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１に係るプログラム生成装置の最小構成を示す構成図である。
【図２】実施の形態１に係るプログラム生成装置の拡張構成を示す構成図である。
【図３】自己保持回路を表すラダープログラムの説明図である。
【図４】図３のラダープログラムを論理式で表現した説明図である。
【図５】図３のラダープログラムを木構造で表現した説明図である。
【図６】実施の形態１に係る１階層と２階層の部品リストの例を示す説明図である。
【図７】実施の形態１に係る２階層と１階層のテンプレートの例を示す説明図である。
【図８】実施の形態１に係るパラメタを示す説明図である。
【図９】実施の形態１に係る参照指定・複製指定および複製制約を示す説明図である。
【図１０】実施の形態１に係るテンプレートと部品リストとの階層構造の対応と生成されるプログラムを示す説明図である。
【図１１】実施の形態１に係るテンプレート階層の順次処理を示すフローチャートである。
【図１２】実施の形態１に係るテンプレートのパラメタを部品リスト中の要素で置き換える処理を示すフローチャートである。
【図１３】図１０のラダープログラムをラダー図で表現した説明図である。
【図１４】実施の形態１に係るプログラムを内部に含むテンプレートと、それを用いたプログラム生成例を示す説明図である。
【図１５】実施の形態１に係る親を参照するパラメタを含むテンプレートと、それを用いたプログラム生成例を示す説明図である。
【図１６】図１５のラダープログラムをラダー図で表現した説明図である。
【図１７】実施の形態１に係る複製指定を含むテンプレートと、それを用いたプログラム生成例を示す説明図である。
【図１８】実施の形態１に係る複数の複製指定を含むテンプレートと、それを用いたプログラム生成例を示す説明図である。
【図１９】図１８のラダープログラムをラダー図で表現した説明図である。
【図２０】実施の形態１に係る複製指定を持ったテンプレートと複製インデクスを示す説明図である。
【図２１】実施の形態１に係る複製制約を含むテンプレートと、それを用いたプログラム生成例を示す説明図である。
【図２２】図２１のラダープログラムをラダー図で表現した説明図である。
【図２３】実施の形態１に係る複製指定・複製制約を含んだテンプレート処理のフローチャートである。
【図２４】実施の形態１に係るインターロック回路を表現したテンプレートと部品リストを示す説明図である。
【図２５】図２４の１つ目の複製指定によりテンプレートを複製した状態を示す説明図である。
【図２６】図２４の左端の部分木に対し、２つ目の複製指定によりテンプレートを複製した状態に複製インデクスを付記した状態を示す説明図である。
【図２７】図２４の左端の部分木に対し、２つ目の複製指定と複製制約によりテンプレートを複製した状態を示す説明図である。
【図２８】図２４の構成から生成したプログラムを示す説明図である。
【図２９】図２４〜図２８で生成されるインターロック回路をラダー図で表現した説明図である。
【図３０】図２４〜図２８のテンプレートに対応した５要素のインターロック回路の部品リストを示す説明図である。
【図３１】図３０の部品リストを用いて生成されるインターロック回路をラダー図で表現した説明図である。
【図３２】オン優先インターロック回路を表現したテンプレートの説明図である。
【図３３】図３２のテンプレートから生成されるオン優先インターロック回路をラダー図で表現した説明図である。
【図３４】実施の形態１に係るテンプレート編集画面の実現例を示す説明図である。
【図３５】実施の形態１に係るプログラム編集画面の実現例を示す説明図である。
【図３６】ＸＭＬで記述した図６の部品リストを示す説明図である。
【図３７】Ｓ式で記述した図６の部品リストを示す説明図である。
【図３８】実施の形態１に係るテンプレート表示領域とプログラム表示領域を持つプログラム編集画面の実現例を示す説明図である。
【図３９】実施の形態２に係る表計算ソフト特有の操作を用いてプログラムを生成するシステムの画面と操作を示す説明図である。
【発明を実施するための形態】
【００１７】
実施の形態１．
図１は、この発明の実施の形態１によるプログラム生成装置の構成図である。
図１に示すプログラム生成装置は、テンプレート１、部品リスト２、プログラム生成部３を備えている。テンプレート１は、プログラムの部分記述と、階層構造における子テンプレートの挿入位置を示す記述とからなり、また、プログラムの部分記述として、階層構造中の相対位置で対象を指定するためのパラメタを含むものである。部品リスト２は、プログラムを構成する部品の階層構造を示すものである。プログラム生成部３は、部品リスト２とテンプレート１とを入力とし、テンプレート１のパラメタの対象指定を、そのパラメタが記述されたテンプレート１の階層構造中の位置と、部品リスト２の階層構造中で同じ位置にある部品リスト２を起点とした相対位置で解釈した対象の部品で置換することによりプログラム４を生成するものである。また、この構成は本発明の最小構成であるが、さらに、各種の機能部を備えてもよい。
【００１８】
なお、プログラム生成装置はコンピュータを用いて実現され、プログラム生成部３は、その機能に対応したソフトウェアと、このソフトウェアを実行するＣＰＵやメモリといったハードウェアから構成されている。また、プログラム生成装置は、ユーザが各種の入力を行うための入力部や、テンプレート１や部品リスト２、プログラム４等を表示するための表示部を備えている。
【００１９】
図２は、プログラム生成装置の拡張構成を示す構成図である。
図示のプログラム生成装置は、テンプレート１を保持するテンプレート保持部５と、部品リスト２を保持する部品リスト保持部６を備えると共に、図１と同様のプログラム生成部３と、テンプレート編集部７、テンプレート表示部８、部品リスト編集部９、部品リスト表示部１０、自動生成部１１、プログラム編集部１２、プログラム表示部１３を備えている。
【００２０】
テンプレート編集部７は、テンプレート１の編集を行う処理部であり、テンプレート表示部８は、テンプレート編集部７で編集するテンプレート１やテンプレート保持部５で保持されているテンプレート１の情報を表示する表示部である。部品リスト編集部９は、プログラム編集部１２からの指示に従い、部品リスト２の編集を行う処理部である。また、部品リスト表示部１０は部品リスト２に関する情報を表示する表示部である。自動生成部１１は、テンプレート１から部品リスト２の自動生成を行う処理部である。プログラム編集部１２は、部品リスト編集部９やプログラム生成部３を呼び出し、プログラム編集を行う処理部である。また、プログラム表示部１３は、プログラム編集部１２の編集するプログラム４やプログラム生成部３によって生成されたプログラム４を表示するための表示部である。なお、テンプレート表示部８、部品リスト表示部１０およびプログラム表示部１３は、それぞれ独立した表示部であっても、画面中の部分的な領域であってもよい。
以上、実施の形態１では、図２に示した各機能部を任意の組み合わせで構成することができる。
【００２１】
ラダー言語はＰＬＣプログラムの記述に用いられるプログラミング言語であり、一般に図３のようなラダー図で表現される。ラダープログラムはリレー回路を表現しており、スイッチおよびコイルの直列・並列結合が入れ子になった回路と等価である。３０１の記号はＡ接点であり、デバイスＸ０がオンになると通電するスイッチを表す。３０２の記号はＢ接点であり、デバイスＸ１がオフになると通電するスイッチを表す。３０３の記号はコイルであり、入力がオンになった場合に出力がオンとなる電磁スイッチである。Ｘ０，Ｘ１，Ｙ１０などはデバイスであり、ある特定のスイッチ・センサなどを表す。以下、デバイスＸ０につながった接点を接点Ｘ０などと呼称する。接点Ｘ０とＹ１０は並列結合されており、いずれかのスイッチがオンの場合通電し、出力がオンとなる。Ｘ１はその出力に直列結合されており、Ｂ接点なのでＸ１がオフの時通電する。よって、Ｘ０またはＹ１０のいずれかがオンで、Ｘ１がオフの場合のみＹ１０の入力はオンになる。
【００２２】
即ち、ラダーはブール式を表現しており、図３のラダーは図４に示す論理式と等価である。ブール式はＡＮＤ，ＯＲの入れ子として表現できる。同様にラダープログラムは直列・並列結合回路の入れ子として表現できる。図５に図３のラダーを階層表現したものを示す。図５において、接点Ｘ１とコイルＹ１０の関係は論理式のＡＮＤとは異なるが、回路上は直列回路であるので接続関係については同様の表現が可能である。
【００２３】
図３の回路は自己保持回路とよばれ、ラダープログラムでは重要な回路である。もし、３０４がないとすると、スイッチＸ１は押されていない状態では通電しているため、スイッチＸ０を押すとコイルＹ１０はオンとなり、離すとオフとなる。３０４が存在すると、Ｘ０を押した時にＹ１０がオンとなり、３０４もオンとなるため、Ｘ０を離しても３０４がオンとなり、３０１と３０４の並列結合の出力はオンとなり、３０３の入力はオンのままとなる。つまり、Ｘ０を一度押すと、離してもＹ１０がオンの状態を維持する回路である。直列接続となっている３０２を押すとＹ１０はオフとなる。
【００２４】
以下では、上記の階層構造を利用し、部分プログラムの構造を表し再利用可能なテンプレート１と、部品リスト２から具体値を取得してテンプレート１に適用してラダープログラムを生成する装置について述べる。
部品リスト２は部品具体値または部品リストを要素とするリストである。図６に部品リスト２の例を示す。部品リスト２は階層構造を取る。図６の（ａ）が１階層の例であり、（ｂ）が２階層の例である。部品リストＢが部品リストＡの要素である時、ＢはＡの子部品リストであり、ＡはＢの親部品リストである。図６の（ｂ）では、６０１は６０２の親部品リストであり、６０２は６０１の子部品リストである。ユーザがテンプレート１に対し、テンプレート１が必要とする構造の部品リスト２を定義することによりプログラム生成部３はプログラム４を生成する。
【００２５】
テンプレート１はプログラム４の構造を定義するプログラム部品である。同一の構造を持つプログラム４に対しては同じテンプレート１を利用して異なった部品リスト２を定義することによりプログラム４を生成することができる。
テンプレート１はプログラム内容の記述を含む。ラダー言語のテンプレート１の最も単純なものはラダー言語そのものであり、例えば、図５に示した階層構造がテンプレート１の例となる。
プログラム内容の記述にはテンプレート１を含むことができる。含まれるテンプレート１を子テンプレートと呼ぶ。子テンプレートにとって自分を含むテンプレート１は親テンプレートである。図５では、５０２は５０１の子テンプレートであり、５０１は５０２の親テンプレートである。図７は、テンプレートの例であり、図７（ａ）が２階層のテンプレート、図７（ｂ）が１階層のテンプレートを示している。
【００２６】
プログラム内容の記述にはパラメタを含むことができる。図８にパラメタを含むテンプレートを示す。接点・コイルなどの示すデバイスがパラメタとなっているため、異なったデバイスに対する同じ構造の回路（図示例では自己保持回路）を同一のテンプレート１から生成できる。パラメタは参照指定を持っており、プログラム生成部３はパラメタの位置に展開する部品を指定に沿って選択する。指定の詳細は後述する。
【００２７】
プログラム生成部３は上記のテンプレート１と部品リスト２を入力とし、プログラム４を生成する。プログラム生成部３はテンプレート１中のパラメタを、そのパラメタが参照指定する部品リスト２中の要素と置き換えることによりプログラム４を生成する。図９は、この参照指定及び複製指定、複数制約を表現したものである。以下、参照指定について説明する。
【００２８】
テンプレート１と部品リスト２は共に階層構造を持つ。テンプレート１中のパラメタは参照指定を持つが、参照指定は、テンプレート階層構造の中で自分が持つ位置と同じ部品リスト階層構造中の位置を起点として参照先を指定する。図１０（ａ）において、テンプレート１と部品リスト２は同じ階層構造を持っており、接点１００１は部品１００２と同じ位置にある。参照指定により部品リスト２中の同じ位置にある部品を参照することができる。図１０では１００１のパラメタは参照指定「＄．」がこれを表している。これにより、プログラム生成部３はテンプレート１中の１００１部品のデバイスを部品リスト２中の１００２の部品Ｘ０と置き換える。他のパラメタについても同様の置き換えを行い、図１０（ｂ）に示すラダープログラムを得る。
【００２９】
図１１にテンプレート階層をたどる処理を表すフローチャートを示す。
即ち、先ず、現在位置をテンプレート１のトップに設定し（ステップＳＴ１）、その後、パラメタ展開など現在位置のテンプレート１の処理を行う（ステップＳＴ２）。次に、現在位置のテンプレート１に子があるかを判定し（ステップＳＴ３）、子があった場合は最初の子テンプレートに現在位置を移動して（ステップＳＴ４）、ステップＳＴ２に戻る。一方、ステップＳＴ３において、子がなかった場合は、現在位置のテンプレートに次の兄弟があるかを判定し（ステップＳＴ５）、兄弟があった場合は、次の兄弟テンプレートに現在位置を移動して（ステップＳＴ６）、ステップＳＴ２に戻り、なかった場合は親テンプレートがあるかを判定する（ステップＳＴ７）。ステップＳＴ７において親テンプレートがあった場合は、親テンプレートに現在位置を移動して（ステップＳＴ８）、ステップＳＴ２に戻り、親テンプレートが無かった場合は終了となる。
【００３０】
図１１のフローチャートにおけるステップＳＴ２の詳細を図１２に示す。即ち、テンプレート中、置き換えられていないパラメタがあるか否かを判定し（ステップＳＴ２１）、あった場合は、現在位置のテンプレート１と同じ位置の部品リスト２中の要素を起点として、パラメタが示す位置にある要素を取得し、パラメタと置き換える（ステップＳＴ２２）。
【００３１】
図１３は、図１０（ｂ）のプログラム４をラダー図で表現したものである。上下２つならんだ回路は同じテンプレートから生成されたので同じ構造を持ち、部品リスト２の異なった部分からの部品を用いているため、異なったデバイスを使っている。従来のラダーエディタの持つマクロ機能も同じ構造にパラメタを適用するものであり、繰り返し適用すれば同様の結果を得られるが、本実施の形態では複数の回路のパラメタを一斉に与えることができるためより効率的である。
【００３２】
参照指定により部品リスト２中の同じ位置にある部品の指定した順番の子要素を参照することができる。図１４（ａ）に示したテンプレートは図１０（ａ）のものと異なり、階層が少ない。１４０１に対応する部品リスト中の要素は１４０２である。１４０１は内部にプログラムを持っており、パラメタの参照指定は「＄０」となっているがこれは０番目の子要素を表す。１４０２の０番の子要素は１４０３であるため、プログラム生成部３はＸ０をこのパラメタの位置に展開する。同様に１４０１の＄１などを展開すると１４（ｂ）のプログラムを得る。これは図１０と同じプログラムである。
【００３３】
参照指定により部品リスト２中の同じ位置にある部品の親、あるいはさらにその親を再帰的に参照することができる。図１５の（ａ）において、テンプレート１５０１と同じ位置にある部品リスト中の要素は１５０３である。１５０１は内部にプログラム定義を持っており、パラメタの参照指定は「＄＄０」となっているが、＄の数がいくつ親をさかのぼるかを表す。１つの場合が自身を表し、ここでは２つなので１５０３の親、即ち、１５０２を表す。＄＄０は１５０２の０番目の子を表すため１５０３である。即ち、＄＄０はＸ０に置き換えられる。同様に＄＄１は１５０４であり、Ｙ１０に置き換えられる。ここで、１５０５と同じ位置にある部品リスト中の要素は１５０２であるが、１５０５中の＄１は１５０２の１番目の子、即ち１５０４を表す。つまり、１５０１の＄＄１と１５０５の＄１は同じ要素を指しており、このようなテンプレート表現により部品リスト中の単一の要素が複数箇所に展開される。図１５の（ｂ）ではＹ１０が２ヶ所に現れており、ラダー図で表現すると図１６となる。これはオフ用の接点を持たない自己保持回路である。３つの要素からなるが使用するデバイスは２つであるため、部品リストには２要素の記述でプログラムを生成することができた。これにより、全てを入力する場合に比べて効率的に作成でき、またＹ１０は自動的に２ヶ所に展開されるため、意図せず異なったものを入れてしまう入力ミスも軽減される。
【００３４】
次に、テンプレート１が複製指定を持つ場合を説明する。
テンプレート１が複製指定を持つ場合、プログラム生成部３はテンプレート１を複製する。複製指定は部品リスト２中の要素を複製対象親として指定する。図１７の（ａ）において、テンプレート１７０１は複製指定１７０２を持つため、プログラム生成部３は、１７０１を複製する。複製対象親の指定はパラメタの参照指定と同様に、部品リスト２中の同じ位置を起点として親やある順番の子を指定できる。１７０２では「＄＄*」となっており、すぐ上の親、即ち、１７０３を親として指定している。１７０３は２つの子を持っているため、１７０１は２つ複製される。この時、複製された２つのテンプレートでは対応する１７０３の子が参照指定の起点となる。図１７の（ｂ）にこの様子を示す。１７０１から複製された０番目の子である１７０５には１７０３の０番目の子である１７０４が起点となり、その０番目の子１７０６の参照の起点は１７０７である。１７０６の参照は「＄．」つまり同じ位置なので、１７０６のパラメタはＸ０で置き換えられる。
【００３５】
この結果、生成されるラダープログラムは図１３のものであり、図１０の（ｂ）で示したものと同じである。図１０の（ａ）ではテンプレート１も部品リスト２と同じ数の子テンプレートを持っていたが、子テンプレートの構造は同じであるため、ここでの複製による方法で十分であり、より効率的である。また、複製数が３以上になった場合、図１０の（ａ）の定義ではテンプレート１の変更が必要だが、複製を用いたものは任意の数に対応できる。
【００３６】
複製を用いることにより同じ構造の回路が並ぶような回路の記述がより容易になる。
テンプレート１は複数の複製指定を持つことができる。プログラム生成部３は、複製指定ごとにテンプレート１を複製する。図１８の（ａ）のテンプレート１は１８０１と１８０２の２ヶ所に複製指定を持つ。１８０１の複製指定は１つ上の親を複製対象親に指定しており、１８０２の複製指定は２つ上の親を複製対象親に指定しているので、どちらも同じ親１８０３を指定している。１８０３は２つの子を持っているので複製の都度２つの子ができ、合計４つに展開され、その都度、１８０３の対応する子が参照の起点となる（図１８の（ｂ）→（ｃ））。結果として図１８の（ｄ）に示すプログラム４が生成される。このプログラム４をラダー図で表すと図１９に示す回路となる。
【００３７】
プログラム生成部３が複製を行うときに、複製インデクスを生成する。複製インデクスは複製内から参照でき、その複製が何番目の複製であるかを返す。図２０の（ａ）において２００１は複製指定を持ち、複製指定親は２００２である。２００２は３つの子を持つためテンプレートは２００３，２００４，２００５の３つが複製され、それぞれが２００２の３つの子を参照の起点とする。この時、２００３の２００１での複製における複製インデクスは０であり、２００４は１、２００５は２である。複製が入れ子になっている場合、全ての段階での複製インデクスが参照できる。図２１の（ａ）では、２１０１と２１０２の２回の複製が行われているので２組の複製インデクスが生成される。２１０１の複製における２１０３の複製インデクスは０である。また、２１０５は２１０３の下にあるため、２１０１の複製における２１０５の複製インデクスも０である。２１０４は２１０２によっても複製されるため、ここでも別の複製インデクスを持つ。２１０２の複製における２１０４の複製インデクスは１である。
【００３８】
複製指定は複製制約を持つことができる。複製制約がある場合、複製制約を満たす子テンプレートのみが複製される。複製制約指定に複製インデクスを用いることができる。図２１の（ａ）において、２１０１，２１０２の２回の複製が行われるが、２１０２は複製制約２１０６を持つ。２１０２から複製された２１０５，２１０４は２つの複製インデクスを持つが、複製制約２１０６においてこれらのインデクス間の制約が記述されている。「＄．」はこの位置、つまり２１０２での複製インデクスを表し、「＄．．」は１つ上の位置、つまり２１０１での複製インデクスを表しており、複製制約「＄．！＝＄．．」はこの２つが等しくないことを要求している。２１０５においては「＄．」「＄．．」ともに０であるため制約を満たさない。このため、プログラム生成部３は２１０５を生成しない。２１０４においては「＄．」は１、「＄．．」は０であるため制約を満たす。結果として図２１の（ｄ）が生成される。これはラダー図で表現すると図２２に示す回路となる。
【００３９】
複製指定・複製制約を含んだ処理では、図１１に示した階層処理の中で、ステップＳＴ２の処理部分が図２３のフローチャートに示す処理になる。即ち、プログラム生成部３は、テンプレート１に複製指定があるかを判定し（ステップＳＴ２０１）、あった場合は、複製指定の指定する複製対象親の先頭の子を起点に選ぶ（ステップＳＴ２０２）。次に、テンプレート１に複製制約があるかを調べ（ステップＳＴ２０３）、あった場合は複製制約が満たされているかを判定する（ステップＳＴ２０４）。ステップＳＴ２０４において、満たされていた場合はテンプレート１を複製し（ステップＳＴ２０５）、満たされていない場合は次の子を起点に選び（ステップＳＴ２０６）、ステップＳＴ２０３に戻る。
【００４０】
ステップＳＴ２０５において、テンプレート１を複製した後は、複製したテンプレート１に置き換えされていないパラメタがあるかを調べ（ステップＳＴ２０７）、あった場合は、起点として選択した要素を起点として、パラメタが示す位置にある要素を取得し、パラメタと置き換え（ステップＳＴ２０８）、ステップＳＴ２０７に戻る。ステップＳＴ２０７において、置き換えられていないパラメタがなかった場合は、子がまだ残っているかを判定し（ステップＳＴ２０９）、残っていた場合はステップＳＴ２０６に移行し、残っていない場合は終了する。
【００４１】
一方、ステップＳＴ２０１において、複製指定がなかった場合は、図１２に示す動作と同様である。即ち、テンプレート１中、置き換えられていないパラメタがあるか否かを判定し（ステップＳＴ２１０）、あった場合は、現在位置のテンプレート１と同じ位置の部品リスト２中の要素を起点として、パラメタが示す位置にある要素を取得し、パラメタと置き換えて（ステップＳＴ２１１）、ステップＳＴ２１０に戻る。ステップＳＴ２１０において置き換えられていないパラメタがなかった場合は終了する。
【００４２】
図２４に示すテンプレートは２４０１と２４０２の２ヶ所に複製指定を持つ。２４０１の複写指定は２４０３の３つの子に沿ってテンプレートを３つ複製する。２４０２の部分は２つ上の要素、つまり２４０３を複写対象親としており、同様に３つの子を複製する。冗長であるため、図２６及び図２７に、図２５における２４０４以下の部分のみ記す。２４０２からは３つのテンプレートが複製されるが、複製制約があるため複製インデクスが０である２４０５は複製されない。結果として、全体としては図２８の回路が生成される。これはラダー図で表すと図２９の回路であり、インターロック回路と呼ばれる。Ｘ０，Ｘ１，Ｘ２の３つのスイッチがお互いをオフにしあうため、Ｙ１０，Ｙ１１，Ｙ１２のうちいずれかひとつのみしかオンにならない。
【００４３】
インターロック回路は汎用性の高い回路であるが通常の単純なマクロでは表現できないが、本実施の形態のプログラム生成装置では、単一のテンプレート１として表現でき、３つのスイッチと３つのコイル以外の冗長な入力も必要としない。図２４の部品リスト２が３組の部品からなるのに対し、図３０は５組の部品からなる。全く同じテンプレート１に対して図３０の部品リスト２を用いることにより、図３１のインターロック回路が生成できる。部品リスト２の要素数を変化させるだけで、任意の要素数のインターロック回路を同一のテンプレート１から生成できることを示している。
【００４４】
ここまで示したインターロック回路はオフ優先インターロック回路と呼ばれるもので、２つ以上のスイッチを同時に押した場合、全ての出力がオフになる特性を持っている。図３２に示したテンプレート１はオン優先インターロック回路のものであり、２つ以上のスイッチを同時に押した場合、押されたスイッチに対応するコイルの出力が同時にオンになる特性を持っている。このオン優先インターロック回路テンプレートに対応する部品リスト２はオフ優先インターロック回路のものと構造が同じであるため、図２４〜図２８で示したものと同じ部品リストを再利用することができる。図３３に図２４〜図２８で用いた部品リスト２から生成されたオン優先インターロック回路のラダー図を示す。
実施の形態１におけるこのような構成により、テンプレート１のみならず、同じ構造を要求するテンプレート１に対して部品リスト２も再利用可能であることが示される。
【００４５】
次に、上述したテンプレート１や部品リスト２の編集について説明する。
テンプレート編集画面は、テンプレート名入力領域、プログラム編集領域、プログラム要素アイコン表示領域からなる。図３４にその一例を示す。
テンプレート名入力領域では作成したテンプレートに名前をつけることができ、プログラム編集部１２などでテンプレート保持部５に保存したテンプレート１をテンプレート名を用いて呼び出すことができる。
テンプレート編集領域ではテンプレート１の階層構造を表示している。ノードはテンプレートを表しており、選択することができる。選択したノードに対して、ノードごとに規定された編集が可能である。例えば、接点なら対象指定の編集が可能である。図３４では「＄＄＄０」「＄＄１」などの部分である。
【００４６】
また、テンプレート編集画面は、選択されたノードの削除や左右への移動を行うボタンがあり、階層構造を編集できる。さらに、複製指定追加・複製制約追加ボタンにより、選択したノードに複製指定・複製制約を追加できる。複製指定ノード・複製制約ノードを選択すると内容を編集できる。複製指定ノードでは複製対象親の指定を編集できる。図３４では「＄＄＄*」の値を取るノードが示されている。複製制約ノードでは複製制約を編集できる。図３４では「＄．！＝＄．．」即ち、この複製での複製インデクスが、１つ上の階層での複製インデクスと等しくない、という複製制約を示している。
【００４７】
さらに、テンプレート編集画面には、ラダープログラムで用いることのできる要素がアイコンとして表示されている。あるノードをテンプレート編集領域で選択し、アイコンをクリックすることでアイコンを選択したノードの子として追加できる。また、ユーザはこれらのアイコンをテンプレート編集領域のノードにドラッグアンドドロップ等の操作を行うことで、対象要素内に追加することもできる。図３４では、ＡＮＤ・ＯＲ・Ａ接点・Ｂ接点・コイルの５種類が表示されているが、これ以外にもラダープログラムで利用できる要素を含むことが可能である。
【００４８】
プログラム編集部１２では、ユーザが部品リスト編集部９を呼び出して部品リスト２を編集することができる。また、プログラム編集部１２では、テンプレート保持部５からテンプレート１を選択し、テンプレート１に対応する部品リスト２を部品リスト編集部９で編集してプログラム生成部３を呼び出し、プログラム４を自動生成することができる。
【００４９】
プログラム編集部１２の編集画面は、テンプレート名表示領域、部品リスト編集領域からなり、この例を図３５に示す。図３５において、テンプレート名表示領域は生成に使用しているテンプレート１の名称を表示している。図３５では、上部にテンプレート名表示領域があり、「インターロック回路」のテンプレート１を利用していることを表している。テンプレート名表示領域にテンプレート名を入力することで使用するテンプレート１を選択するようにしても良い。また、テンプレート名表示領域がメニューとなっており、利用可能なテンプレート一覧を提供し、メニューの選択によりテンプレート１を選択するようにしても良い。
【００５０】
部品リスト編集部９は、部品リスト２のツリー構造を編集可能なインタフェースとなっており、テンプレート１のトップ要素に対応する部品リスト２のトップ要素以下にリストの要素としてリストを追加する機能と、リストの要素として具体値を追加する機能を有する。要素の追加は対応するアイコンで指定したり、テキストで入力することもできる。図３５の例では、下部に部品リスト編集領域があり、部品リストの階層構造が表示されている。リストの各ノードは選択でき、Ｘ０，Ｙ１０などの具体値を表すノードは内容を編集できる。また、部品リスト編集部９は選択したノードの子として部品リストノード・具体値ノードを追加、削除するボタンと、選択したノードを左右に移動させるボタンを持ち、リスト構造を自由に編集できる。
テンプレート１から部品リスト構造を自動生成部１１で自動生成した場合は、ノード構造を編集する上記ボタン群を使用できないようにし、ノードへの具体値入力のみ可能にしてもよい。
【００５１】
部品リスト編集部９は、編集された部品リスト２を再利用のために保持する部品リスト保持部６を用いるようにしてもよい。部品リスト保持部６から取り出した部品リスト２を更に編集したり、部品の一部を流用したりして編集に利用する機能を持つことも考えられる。
部品リスト編集部９は、編集中の、あるいは部品リスト保持部６の保持する部品リスト２を表示する部品リスト表示部１０を合わせ持っても良い。図３５の例では部品リスト編集領域が部品リスト表示部１０となっており、編集中の部品リスト２を表示している。
【００５２】
本実施の形態では、階層構造を表現できるなんらかのスクリプトで書いても良い。例えば、ＸＭＬやＬｉｓｐのＳ式などで表現することが考えられる。
図３６にＸＭＬで記述した図６の（ｂ）の部品リスト２を示す。また、図３７にＳ式で記述した図６の（ｂ）の部品リスト２を示す。
【００５３】
プログラム編集部１２の編集画面は、選択されたテンプレート１を表示する表示領域を持っても良い。図３８ではテンプレート表示領域にテンプレート１が表示されている。
テンプレート１中の各パラメタを具体化するためには部品リスト２がその全ての参照先に部品を配置することが必要であるが、自動生成部１１がテンプレート１中の参照指定を解析することにより、これに十分な構造の部品リスト２を生成することが可能である。
【００５４】
例えば図１５において、テンプレート１５０５はパラメタ「＄１」を含むが、これは部品リスト２中で同じ位置にあるリスト１５０２のインデクス１の子を指すので、１５０２は子１５０４を必要とする。また、１５０１は「＄＄０」と「＄＄１」を含むので、部品リスト２中で１５０１の親１５０５と同じ位置にある１５０２はインデクス０の子１５０３およびインデクス１の子１５０４を必要とする。合わせると、このテンプレート１に対しては、１５０２，１５０３，１５０４からなる構造の部品リスト２が必要なことがわかる。１５０３，１５０４にどのような具体値が入るかはテンプレート１からは決定できないため、生成された部品リスト２には未定値や仮のデフォルト値を入れる。
【００５５】
プログラム編集において、部品リスト２の形状は自動生成部１１によって自動的に決定されるため、ユーザはリスト構造を編集する必要はなく、具体値のみ記述すれば良い。図で言うと１５０３にＸ０、１５０４にＹ１０を挿入するのみでプログラム生成に十分な部品リスト２の定義を行うことができる。
【００５６】
プログラム編集部１２は、選択されたテンプレート１と、編集された部品リスト２を与えてプログラム生成部３を呼び出し、プログラムを生成することができる。
【００５７】
また、実際には、既に完成したラダープログラムを元にしてテンプレート１を作成する場合が多いが、このような場合でもラダープログラム中のパラメタ化したい要素を指定し、そこの位置指定を＄．とすることによってテンプレート１が作成でき、また、上述した自動生成部１１の機能により対応した部品リスト２の構造も自動生成することができる。例えば、図１０に示すようなテンプレート１と部品リスト２（図１３に示すラダープログラム）のような場合は自動生成することができる。
【００５８】
プログラム編集部１２の編集画面には、生成したプログラムを表示するプログラム表示領域があってもよい。編集した部品リスト２の現在の状態に応じてどのようなプログラムが生成されるかをユーザの要求に応じて、あるいは部品リスト２の変更が行われる都度表示することも考えられる。図３８ではプログラム表示領域に生成したプログラム４が表示されている。
【００５９】
従来のプログラム作成支援装置では、異なる形態のプログラム、例えば図２９と図３１のインターロック回路を、同一のプログラム部品を用いて生成することができなかったが、本実施の形態ではそれが可能となる。これにより、プログラム部品を応用可能な範囲が広くなり、計測監視制御対象である設備の使用記述に、より直接的に合致するようにプログラム部品を定義することができるようになる。
よって、仕様記述に合致するプログラムを作成するための、プログラム部品の選定およびそれらの組み合わせに関する設計の労力を軽減し、仕様に記述された機能を過不足なく備えるプログラムの作成の量力を大幅に軽減できる。
【００６０】
以上説明したように、実施の形態１のプログラム生成装置によれば、プログラムを構成する部品の階層構造を示す部品リストと、プログラムの部分記述と、階層構造における子テンプレートの挿入位置を示す記述とからなり、プログラムの部分記述として、階層構造中の相対位置で対象を指定するためのパラメタを含むテンプレートとを設けると共に、部品リストとテンプレートとを入力とし、テンプレートのパラメタの対象指定を、パラメタが記述されたテンプレートの階層構造中の位置と、部品リストの階層構造中で同じ位置にある要素を起点とした相対位置で解釈した対象の部品で置換することによりプログラムを生成するプログラム生成部を備えたので、プログラム作成効率の向上を図ることができる。
【００６１】
また、実施の形態１のプログラム生成装置によれば、テンプレートは、階層構造中の相対位置で複製対象親を指定するための複製指定を有し、プログラム生成部は、複製指定に基づき、部品リストの階層構造中で同じ位置にある要素を起点とした相対位置で解釈した複製対象親の子それぞれに対するテンプレートを複製し、複製したテンプレート中のパラメタの対象指定を、複製に用いた複製対象親の子を起点とした相対位置で解釈した対象部品で置換することによりプログラムを生成するようにしたので、複数箇所に同じ部品を持つプログラム構造を部品化することができ、また、部品の複製により、単一の記述から複数部品を生成でき、プログラム作成効率を向上させることができる。
【００６２】
また、実施の形態１のプログラム生成装置によれば、複製指定は、複製毎に複製を行うか否かの複製制約を有し、プログラム生成部は、複製制約を満たす場合のみテンプレートの複製を行うようにしたので、部品の複製を行うかどうかを指定でき、より複雑なプログラムを部品化することができる。
【００６３】
また、実施の形態１のプログラム生成装置によれば、複製制約は、異なる階層間の複製指定に基づいて複製された各々のテンプレートが何番目の子に対するものであるかの関係を規定するようにしたので、より複雑なプログラムを部品化することができる。
【００６４】
また、実施の形態１のプログラム生成装置によれば、全てのパラメタの対象指定となる位置全てを含む部品リストの階層構造を生成する自動生成部を備えたので、テンプレートに対して必要となる部品リストの構造を自動生成でき、プログラム作成効率を向上させることができる。
【００６５】
実施の形態２．
トップレベルのテンプレートの直下の要素が複製指定を持つ場合、この要素以下から参照される部品リストを１次元にまとめて横方向に並べ、縦方向にこの１次元部品リストを並べると、部品リストが表形式になる。これにより、高度な編集機能を持った表計算ソフトで部品リスト２を作成し、コピーと貼り付けによりプログラム４を生成することができる。また、表形式インタフェースは部品リスト２を縦方向を伸縮させる要素を持ち、これにより複製数を変化させることができる。この際、数字の連続値補完などにより、定型的な入力を簡易化することが考えられる。例えばインターロック回路の場合、スイッチがＸ０から連続アドレスであり、コイルがＹ０から連続アドレスであれば、インターロック回路の数が増えた場合にも表形式部品リストを縦に伸縮させるだけで必要な数のインターロック回路が生成できる。スイッチ・コイルの名称に数字の入ったラベル名を用いれば、より一般的にこの手法が利用可能である。実施の形態２では、以上のような機能を部品リスト編集部９で実現している。なお、図面上の構成は実施の形態１における図２の構成と同様であるため、図２を用いて説明する。
【００６６】
図３９に画面と操作の例を示す。ユーザがテンプレート表示部８でオフ優先インターロック回路を選択すると、プログラム生成装置は、図３９に示すようなテンプレート兼プログラム表示画面にテンプレート１を表示する。ユーザが部品リスト編集部９にＸ０，Ｙ０を入力すると、テンプレート兼プログラム表示画面に、生成されたプログラム４が表示される（画面３９０１）。
【００６７】
ユーザが部品リスト編集部９のＹ０を表示するセルの隅を下方にドラッグすることにより、部品リスト編集部９は表を拡張する。まず、表の行数をドラッグ幅にあわせて増やす。図３９では４行に増やしている。Ｘ０は数値０を持っているため、これを元に１，２，３という数値が生成され、それぞれの行はＸ１，Ｘ２，Ｘ３で埋められる。同様にＹ０からはＹ１，Ｙ２，Ｙ３が生成される。これにより部品リストが４つの子を持ったため、プログラム生成部３は４つの自己保持回路からなるプログラムをその場で生成し、テンプレート兼プログラム表示画面に表示される（画面３９０２）。
【００６８】
次にユーザがテンプレート表示部８でオン優先インターロック回路を選択すると、プログラム生成部３に与えられるテンプレート１が切り替えられる。両テンプレートの要求する部品リスト２の構成は同じなので、現在の部品リスト２がそのまま使用され、４つの自己保持回路からなるオン優先インターロック回路を生成し、テンプレート兼プログラム表示画面に表示される（画面３９０３）。この時、テンプレート表示部８で選択可能なテンプレートを、現在の部品リスト２を適用可能なものに制限してもよい。または、適用可能かどうかを色などの情報でユーザに提示しても良い。
【００６９】
以上説明したように、実施の形態２のプログラム生成装置によれば、特定の要素が複製指定を持つテンプレートに対して、特定の要素以下から参照される部品リストを１次元に横方向に並べ、かつ、１次元部品リストを縦方向に並べて表形式の部品リストを設けると共に、縦方向への伸縮指示を受けた場合、伸縮に応じて所定の数値の補完を行い部品リストを増減させる部品リスト編集部を備えたので、テンプレートに対して必要となる部品リストの構造を自動生成でき、プログラム作成効率を向上させることができる。
【００７０】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【００７１】
１  テンプレート、２  部品リスト、３  プログラム生成部、４  プログラム、５  テンプレート保持部、６  部品リスト保持部、７  テンプレート編集部、８  テンプレート表示部、９  部品リスト編集部、１０  部品リスト表示部、１１  自動生成部、１２  プログラム編集部、１３  プログラム表示部。
【図１】
0005785130.tif 000002
【図２】
0005785130.tif 000003
【図３】
0005785130.tif 000004
【図４】
0005785130.tif 000005
【図５】
0005785130.tif 000006
【図６】
0005785130.tif 000007
【図７】
0005785130.tif 000008
【図８】
0005785130.tif 000009
【図９】
0005785130.tif 000010
【図１０】
0005785130.tif 000011
【図１１】
0005785130.tif 000012
【図１２】
0005785130.tif 000013
【図１３】
0005785130.tif 000014
【図１４】
0005785130.tif 000015
【図１５】
0005785130.tif 000016
【図１６】
0005785130.tif 000017
【図１７】
0005785130.tif 000018
【図１８】
0005785130.tif 000019
【図１９】
0005785130.tif 000020
【図２０】
0005785130.tif 000021
【図２１】
0005785130.tif 000022
【図２２】
0005785130.tif 000023
【図２３】
0005785130.tif 000024
【図２４】
0005785130.tif 000025
【図２５】
0005785130.tif 000026
【図２６】
0005785130.tif 000027
【図２７】
0005785130.tif 000028
【図２８】
0005785130.tif 000029
【図２９】
0005785130.tif 000030
【図３０】
0005785130.tif 000031
【図３１】
0005785130.tif 000032
【図３２】
0005785130.tif 000033
【図３３】
0005785130.tif 000034
【図３４】
0005785130.tif 000035
【図３５】
0005785130.tif 000036
【図３６】
0005785130.tif 000037
【図３７】
0005785130.tif 000038
【図３８】
0005785130.tif 000039
【図３９】
0005785130.tif 000040