(57)【特許請求の範囲】
【請求項１】
ＰＬＣ制御プログラムを構成するファンクションブロックの入出力変数のセットをインタフェースとして管理する手段と、
ファンクションブロックの代わりに前記インタフェースを型としたインスタンスを用いて制御プログラムの動作ロジック或いはファンクションブロックの内部プログラムの動作ロジックを作成する手段と、
ファンクションブロックに対し、前記インタフェースの実装を宣言し、そのインタフェースに定義されたものと同一定義の入出力変数が当該ファンクションブロックの入出力変数として追加されるとともに、追加された入出力変数に当該インタフェースの構成要素である旨の情報を記録する実装宣言手段と、
前記動作ロジック内に記述されたインタフェースのインスタンスのボディとして、そのインタフェースと同一定義のインタフェースが実装宣言されたファンクションブロックを関連付けることで、当該ファンクションブロックの内部を編集することなくＰＬＣ制御プログラムのコントローラインスタンス構成を作成するコントローラインスタンス構成設定手段と、
を備えたＰＬＣ制御プログラム開発装置。
【請求項２】
利用可能なファンクションブロックと、そのファンクションブロックに実装宣言されたインタフェースを関連付けたファンクションブロック定義情報を格納する記憶手段を持ち、
前記コントローラインスタンス構成設定手段は、前記動作ロジック内に記述されたインタフェースを検出すると、前記記憶手段にアクセスし、そのインタフェースと同一定義が実装宣言されたファンクションブロックを特定する情報を抽出し、その情報の一覧を表示装置に表示し、ユーザの選択を促す機能を備えた請求項１に記載のＰＬＣ制御プログラム開発装置。
【請求項３】
前記実装宣言されてファンクションブロックに追加された入出力変数は、個別の編集が禁止されるようにした請求項１または２に記載のＰＬＣ制御プログラム開発装置。
【請求項４】
前記実装宣言を解消する解消手段を備え、その解消手段によって実装宣言を解消したことを条件に前記ファンクションブロックに追加された入出力変数に対する個別の編集を許可するように構成した請求項３に記載のＰＬＣ制御プログラム開発装置。
【請求項５】
複数のプログラムやファンクションブロックのグループにインタフェースを定義し、内部が隠蔽された再利用コンポーネントを作成する手段を備えたことを特徴とする請求項１から４のいずれか１項に記載のＰＬＣ制御プログラム開発装置。
【請求項６】
複数の呼び出し関係をもつファンクションブロックをグループ化する第１グループ化手段と、
その第１グループ化手段でグループ化されたグループ内の最上位のファンクションブロックが実装しているインタフェースと、そのグループ内部のファンクションブロックが保有しているインタフェースのインスタンス群とをグループの実装インタフェースと呼び出しインタフェースインスタンスとして定義する手段とを備え、
その作成されたグループを再利用コンポーネントとして部品化することを特徴とする請求項１から５のいずれか１項に記載のＰＬＣ制御プログラム開発装置。
【請求項７】
複数のプログラムとそれが呼び出すファンクションブロック群およびインタフェース群をグループ化する第２グループ化手段と、
その第２グループ化手段でグループ化されたグループ内部のプログラムおよびファンクションブロックが保有しているインタフェースのインスタンス群をグループの呼び出しインタフェースインスタンスとして定義する手段とを備え、
複数のプログラムのグループを再利用コンポーネントとして部品化することを特徴とする請求項１から６のいずれか１項に記載のＰＬＣ制御プログラム開発装置。
【請求項８】
再利用コンポーネントに記述された呼び出しインタフェースのインスタンスに、合致するインタフェースを実装したファンクションブロックまたは再利用コンポーネントのインスタンスを関連付けることで、当該関連付けたファンションブロックまたは再利用コンポーネントを編集することなく、制御プログラムの構築を行なう機能を備えた請求項５から７のいずれか１項に記載のＰＬＣ制御プログラム開発装置。
【請求項９】
コンピュータを、
ＰＬＣ制御プログラムを構成するファンクションブロックの入出力変数のセットをインタフェースとして管理する手段、
ファンクションブロックの代わりに前記インタフェースを型としたインスタンスを用いて制御プログラムの動作ロジック或いはファンクションブロックの内部プログラムの動作ロジックを作成する手段、
ファンクションブロックに対し、前記インタフェースの実装を宣言し、そのインタフェースに定義されたものと同一定義の入出力変数が当該ファンクションブロックの入出力変数として追加されるとともに、追加された入出力変数に当該インタフェースの構成要素である旨の情報を記録する実装宣言手段、
前記動作ロジック内に記述されたインタフェースのインスタンスのボディとして、そのインタフェースと同一定義のインタフェースが実装宣言されたファンクションブロックを関連付けることで、当該ファンクションブロックの内部を編集することなくＰＬＣ制御プログラムのコントローラインスタンス構成を作成するコントローラインスタンス構成設定手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＰＬＣ制御プログラム開発装置及びプログラムに関するものである。
【背景技術】
【０００２】
工場に設置される検査装置や設備装置は、産業用制御装置が機器制御プログラムを実行することにより制御される。産業用制御装置の具体例は、プログラマブルコントローラ（ＰＬＣ）である。工場の設備担当者や生産技術担当者などのプログラマブルコントローラのユーザは、プログラマブルコントローラに任意の制御を実行させるために、プログラミングツール装置にてユーザプログラムを予め作成し、その作成したユーザプログラムをコンパイルしてプログラマブルコントローラにダウンロードする。プログラマブルコントローラは、ユーザプログラムをサイクリックに実行し、検査装置や設備装置を任意に制御する。
【０００３】
このユーザプログラムは、通常、ラダープログラムで作成されており、このラダープログラムにおいてＩＥＣ１１３１で規定されるファンクションブロック呼び出し命令が使用可能となっている。ファンクションブロックは、その内部のプログラム中において他のファンクションブロックを読み出すことができる。このファンクションブロックを用いてラダープログラムを構成するためのプログラミングツール装置としては、例えば、特許文献１に開示された技術がある。
【０００４】
このＩＥＣ１１３１に規定されるコンフィグレーション、タスク、プログラム、ファンクションブロックによるプログラムの構造化では、ファンクションブロック呼び出し機構によりプログラムの階層化が実現されている。図１は、このプログラムの階層化の一例として、製品検査ラインを制御するプログラムの階層化を示している。
【０００５】
製品検査ラインでは、検査対象の製品を搬送し、検査装置内の所定位置に所定の姿勢にセットする製品搬入機と、検査終了後に、その検査装置から製品を取り出して搬出する製品搬出機と、を備えている。製品搬入機と製品搬出機は、基本的な構成（機能）は同種のものであり、製品を掴むワーク把持部と、そのワーク把持部を所定の軌跡で移動させるための左右アクチュエータ並びに上下アクチュエータと、を備える。それらワーク把持部や、アクチュエータは、それぞれ機能・目的は同じであるものの具体的な機構が異なるものを複数備える。例えば、ワークを掴むワーク把持部は、エア吸着器を使用するタイプやメカニカルチャックを使用するタイプなどがあり、また上下アクチュエータに関しても、油圧シリンダを使用するタイプや、リニアモータを使用するタイプ等がある。そして、各構成要素（ワーク把持部，アクチュエータ）ごとに、その構成要素の動作を制御するための制御プログラムが、ファンクションブロックとして用意されている。
【０００６】
そこで、この例では、製品搬入機は、エア吸着器を使用するワーク把持部と、エアシリンダを使用する左右アクチュエータと、リニアモータを使用する上下アクチュエータと、から構成され、製品搬出機は、メカニカルチャックを使用するワーク把持部と、エアシリンダを使用する左右アクチュエータと、油圧シリンダを使用する上下アクチュエータと、から構成される。
【０００７】
各構成要素のファンクションブロックであるが、ワーク把握部として利用されるエア吸着器制御ＦＢとメカニカルチャック制御ＦＢは同一の入出力変数を持っており、上下アクチュエータとして利用されるリニアモータ制御ＦＢと油圧シリンダ制御ＦＢも同一の入出力変数を持っている。そのため搬送ロボット自体の制御ロジックはタイプＡもタイプＢもほぼ同一である。
【特許文献１】特開２００５−２９３３１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
最近では、プログラマブルコントローラの制御内容の一部が違っていても、既存のラダープログラムの一部を必要に応じて編集や修正等を施して、つまりラダープログラムを再利用して、プログラミング作業を効率化することが図られている。その際、プログラム部品管理ツールにて再利用の対象となるプログラムをデータベース化することも図られている。
【０００９】
ファンクションブロック呼び出し命令は、一組の入出力パラメータとしてデータを定義し、他のブロックや内部変数とソフトウェア接続でき、実行するたびに動作する１つのアルゴリズムを持った構成要素として定義されている。よって、ファンクションブロック呼び出し命令を利用する場合、まず、アルゴリズムを定義した型を予め作成し、実際にプログラムで利用する場合にインスタンス化してメモリを割り付けて使用するようになる。
【００１０】
そして、従来の方法では、上位のプログラム記述中にファンクションブロックのインスタンスを直接記述しているため、例えば図２（ａ）や図２（ｂ）で示す特定のファンクションブロックを起点として呼び出し階層末端のファンクションブロックまでをまとめて再利用部品化することしかできず、呼び出し階層上位の、あるいは中間のファンクションブロックだけを再利用することができない。
【００１１】
その結果、例えば、搬送ロボット自体の制御ロジックはほぼ同一にも関わらず、ワーク把握部と上下アクチュエータのファンクションブロックが異なるため、“搬送ロボット＿タイプＡ制御ＦＢ”と“搬送ロボット＿タイプＢ制御ＦＢ”とは、別々に部品化する必要が生じ、管理すべき部品が増えて煩雑になる。
【００１２】
或いは、“搬送ロボット＿タイプＡ制御ＦＢ”を再利用部品として保存しておき、タイプＢに使用するときにファンクションブロックを編集してワーク把握部と上下アクチュエータのファンクションブロックを貼りかえる運用も考えられる。この場合には、使用前に部品を編集する手間が生じるとともに、その際に誤った編集を行ない不具合を作りこんでしまう危険がある。
【００１３】
個々のファンクションブロックは、その単位で別々の部品として管理することはできる。図２（ａ），（ｂ）のように特定のファンクションブロックを起点とした呼び出し階層末端のファンクションブロックまでをひとまとめとして部品化された中に存在する各ファンクションブロックは、一連のプログラム中にインスタンスを直接書き込まれているため、個々のファンクションブロックを修正しても、それが反映されることはなく、それぞれが別々の部品として管理されることになる。よって、例えば、搬送ロボット＿タイプＡ制御ＦＢ内で使用されるエア吸着器制御ＦＢと、個別に部品として切り出されたエア吸着器制御ＦＢとは、別々の部品として管理されるので、同一名称を持つファンクションブロックでありながら、別々に編集管理されることになる。その結果、片方に加えた重要な修正をもう片方に加え忘れるおそれがあると共に、どの部品のなかのファンクションブロックがマスター版（最新版）なのかの管理が非常に困難になる。
【００１４】
この発明は、ファンクションブロックを含む部品の管理が確実かつ容易に行なえると共に、例えば呼び出し階層上位のプログラム部分だけ、あるいは中間のファンクションブロックだけを抽出し、任意の単位で部品化することができ、再利用の利便性が高いＰＬＣ制御プログラム開発装置及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
この発明によるＰＬＣ制御プログラム開発装置は、（１）ＰＬＣ制御プログラムを構成するファンクションブロックの入出力変数のセットをインタフェースとして管理する手段と、ファンクションブロックの代わりに前記インタフェースを型としたインスタンスを用いて制御プログラムの動作ロジック或いはファンクションブロックの内部プログラムの動作ロジックを作成する手段と、ファンクションブロックに対し、前記インタフェースの実装を宣言し、そのインタフェースに定義されたものと同一定義の入出力変数が当該ファンクションブロックの入出力変数として追加されるとともに、追加された入出力変数に当該インタフェースの構成要素である旨の情報を記録する実装宣言手段と、前記動作ロジック内に記述されたインタフェースのインスタンスのボディとして、そのインタフェースと同一定義のインタフェースが実装宣言されたファンクションブロックを関連付けることで、当該ファンクションブロックの内部を編集することなくＰＬＣ制御プログラムのコントローラインスタンス構成を作成するコントローラインスタンス構成設定手段と、を備えた。
【００１６】
インタフェースとして管理する手段は、たとえば、図８に示すように入出力変数のセットを設定したり、インタフェースの名称を指定したりするなど、インタフェース定義を設定する機能により実現することができ、また、このようにインタフェース定義を自ら設定するのではなく、予め作成されたインタフェース定義を記憶保持するものでもよい。また、異なるファンクションブロックが、同一のインタフェースを実装することはあり得る。たとえば、“製品を搬送する”などの同種の目的・機能を持った装置用のファンクションブロックの場合、入出力変数は同じになることがある。動作ロジックを作成する手段は、実施形態では、図１３に示すフローチャートを実行する論理プログラム構成表示／編集部２１に対応する。動作ロジックの記述は、たとえばラダー言語／ＳＴ言語／その他を用いて行なうことができる。
【００１７】
このように、ファンクションブロックの入出力変数の組を“インタフェース”として管理し、そのインタフェースのインスタンスを用いて動作ロジックを記述することができるので、たとえば、動作ロジックに記述されたインタフェースと同じ入出力変数のセットを持つインタフェースを持つファンクションブロックが複数存在する場合、いずれのファンクションブロックとも連携できる。そして、そのファンクションブロックを呼び出す上位のプログラム（ファンクションブロックの内部プログラムを含む）にとっては、命令を出力し、所望のレスポンスが返ってくればよく、ファンクションブロックの内部プログラムによってどのような制御が行なわれているかは問わない。よって、インタフェースを用いて記述されたプログラムは、異なるファンクションブロックに対応可能なものとなり、共通のプログラムの部品となるので、管理対象の部品の種類も削減できる。すなわち、同一の入出力変数のセットを備えた異なるファンクションブロックＡ，Ｂをそれぞれ実装するプログラム（呼び出し対象がファンクションＡ，Ｂと異なる以外はすべて同一）を想定した場合、従来は、別々のプログラム部品として切り出され、管理しなければならなかったが、本発明によれば、その同一の入出力変数のセットを定義したインタフェースを用いてプログラムを作成することで、１つのプログラム部品として管理できる。換言すると、インタフェース部分でファンクションブロックを切り離すことで、制御プログラムから重複なく“部品”を切り出すことができ、その管理を効率よく行うことがでる。
【００１８】
（２）ファンクションブロックに対し、前記インタフェースの実装を宣言し、そのインタフェースに定義されたものと同一定義の入出力変数が当該ファンクションブロックの入出力変数として追加されるとともに、追加された入出力変数に当該インタフェースの構成要素である旨の情報を記録する実装宣言手段と、前記動作ロジック内に記述されたインタフェースのインスタンスのボディとして、そのインタフェースと同一定義のインタフェースが実装宣言されたファンクションブロックを関連付けることで、当該ファンクションブロックの内部を編集することなくＰＬＣ制御プログラムのコントローラインスタンス構成を作成するコントローラインスタンス構成設定手段と、を備えるとよい。
【００１９】
実装宣言手段は、実施形態では、図１０に示すフローチャートを実行する論理プログラム構成表示／編集部２１に対応する。コントローラインスタンス構成設定手段は、実施形態では、図１６に示すフローチャートを実行するコントローラインスタンス構成表示／編集部２０に対応する。
【００２０】
このようにすると、ファンクションブロック内部を編集することなしに、部品を繋ぎ合わせて制御プログラムを作成することができる。また、動作ロジック内に直接ファンクションブロックを記述すると、そのファンクションブロックの内部プログラムに対して修正が発生すると、動作ロジック内に記述されたファンクションブロックも修正する必要がある。これに対し、本発明では、インタフェースを用いて記述された動作ロジックでは、そのインタフェース部分ではファンクションブロックが特定されないので、ファンクションブロックの内部プログラムに修正が入った場合でも動作ロジック側を修正する必要は生じない。よって、最新のプログラム内容のファンクションブロックの管理（マスター管理）が容易に行える。
【００２１】
（２）利用可能なファンクションブロックと、そのファンクションブロックに実装宣言されたインタフェースを関連付けたファンクションブロック定義情報を格納する記憶手段を持ち、前記コントローラインスタンス構成設定手段は、前記動作ロジック内に記述されたインタフェースを検出すると、前記記憶手段にアクセスし、そのインタフェースと同一定義が実装宣言されたファンクションブロックを特定する情報を抽出し、その情報の一覧を表示装置に表示し、ユーザの選択を促す機能を備えるとよい。
【００２２】
記憶手段は、実施形態では論理プログラム定義記憶部２６に対応する。ファンクションブロックを特定する情報は、たとえば名称を用いることができる。このように、インタフェースに関連づけることができるファンクションブロックの一覧を表示するので、ユーザは、その表示された一覧の中から使用しようとするファンクションブロックを選択すればよく、該当するファンクションブロックの指定が、容易かつ間違いなく行なうことができる。
【００２３】
（３）前記実装宣言されてファンクションブロックに追加された入出力変数は、個別の編集が禁止されるようにするとよい。このようにすると、関連づけたファンクションブロックの入出力変数が編集されてしまいエラーとなることを防止できる。
【００２４】
（４）上記の（３）の発明を前提とし、実装宣言を解消する解消手段を備え、その解消手段によって実装宣言を解消したことを条件に前記ファンクションブロックに追加された入出力変数に対する個別の編集を許可するように構成するとよい。
【００２５】
（５）複数のプログラムやファンクションブロックのグループにインタフェースを定義し、内部が隠蔽された再利用コンポーネントを作成する手段を備えるとよい。
【００２６】
（６）複数の呼び出し関係をもつファンクションブロックをグループ化する第１グループ化手段と、その第１グループ化手段でグループ化されたグループ内の最上位のファンクションブロックが実装しているインタフェースと、そのグループ内部のファンクションブロックが保有しているインタフェースのインスタンス群とをグループの実装インタフェースと呼び出しインタフェースインスタンスとして定義する手段とを備え、その作成されたグループを再利用コンポーネントとして部品化するとよい。
【００２７】
（７）複数のプログラムとそれが呼び出すファンクションブロック群およびインタフェース群をグループ化する第２グループ化手段と、その第２グループ化手段でグループ化されたグループ内部のプログラムおよびファンクションブロックが保有しているインタフェースのインスタンス群をグループの呼び出しインタフェースインスタンスとして定義する手段とを備え、複数のプログラムのグループを再利用コンポーネントとして部品化するとよい。
【００２８】
（８）再利用コンポーネントに記述された呼び出しインタフェースのインスタンスに、合致するインタフェースを実装したファンクションブロックまたは再利用コンポーネントのインスタンスを関連付けることで、当該関連付けたファンションブロックまたは再利用コンポーネントを編集することなく、制御プログラムの構築を行なう機能を備えるとよい。
【００２９】
これらの発明によれば、呼び出されるファンクションブロックだけでなく、ファンクションブロックを呼び出す側のプログラム／ファンクションブロックも再利用部品とすることができる。それによって、制御プログラムから重複なく部品を切り出すことができる。また、製品シリーズを構成する制御プログラムからより多くの箇所を再利用部品化することができる。さらに、部品の利用にあたり、部品自体を編集することなく、部品を接続することで制御プログラムを構成することができる。
【００３１】
（９）さらに、本発明のプログラムは、コンピュータを、ＰＬＣ制御プログラムを構成するファンクションブロックの入出力変数のセットをインタフェースとして管理する手段、ファンクションブロックの代わりに前記インタフェースを型としたインスタンスを用いて制御プログラムの動作ロジック或いはファンクションブロックの内部プログラムの動作ロジックを作成する手段、ファンクションブロックに対し、前記インタフェースの実装を宣言し、そのインタフェースに定義されたものと同一定義の入出力変数が当該ファンクションブロックの入出力変数として追加されるとともに、追加された入出力変数に当該インタフェースの構成要素である旨の情報を記録する実装宣言手段、前記動作ロジック内に記述されたインタフェースのインスタンスのボディとして、そのインタフェースと同一定義のインタフェースが実装宣言されたファンクションブロックを関連付けることで、当該ファンクションブロックの内部を編集することなくＰＬＣ制御プログラムのコントローラインスタンス構成を作成するコントローラインスタンス構成設定手段、として機能させるためのプログラムとするとよい。
【発明の効果】
【００３２】
本発明は、インタフェースを用いて論理ロジックを記述できるようにしたため、ファンクションブロックを含む部品の管理が確実かつ容易に行なえると共に、例えば呼び出し階層上位のプログラム部分だけ、あるいは中間のファンクションブロックだけを抽出し、任意の単位で部品化することができ、再利用の利便性が高くなる。
【発明を実施するための最良の形態】
【００３３】
図３，図４は、本実施形態のＰＬＣ制御プログラム開発装置の一実施形態を示している。ＰＬＣ制御プログラム開発装置１０は、ハードウェアの観点からは一般的なパーソナル・コンピュータであり、Windows（登録商標）などのオペレーティング・システム上で稼動するアプリケーション・プログラムによって、本装置の各機能が実現されている。従って、図３に示すように、ＰＬＣ制御プログラム開発装置１０は、ハードウェア構成としては、装置本体１０ａと、その装置本体１０ａに接続されるディスプレイ等の表示装置１７と、キーボード／マウス等の入力装置１８と、を備える。装置本体１０ａは、各種の処理を実行するプロセッサ１１と、作成したプログラムや部品その他の情報を格納するデータベースとしてのハードディスク（記憶部）１２と、プロセッサ１１が処理を実行する際にワークエリアとして使用するメモリ（ＲＡＭ）１３と、外部装置と接続するためのインタフェース（出力インタフェース１４，入力インタフェース１５，通信インタフェース１６）と、を備える。出力インタフェース１４は、表示装置１７に接続され、プロセッサ１１からの命令に従いその表示装置１７に所定の情報等を表示する。入力インタフェース１５は、入力装置１８に接続され、入力装置１８から与えられる情報を受け取り、プロセッサ１１へ送る。通信インタフェース１６は、ＰＬＣ１と接続され、作成したプログラムをダウンロードする。
【００３４】
図４に示すように、ＰＬＣ制御プログラム開発装置１０のソフトウェア構成は、コントローラインスタンス構成表示／編集部２０と、論理プログラム構成表示／編集部２１と、変数リストエディタ２２と、ラダー回路エディタ２３、ＳＴ言語エディタ２４と、プロジェクトデータファイル入出力部２８と、オブジェクトコードビルド部２９と、ＰＬＣ通信部３０と、を備え、更に、記憶装置として、コントローラインスタンス構成記憶部２５と、論理プログラム定義記憶部２６と、オブジェクトコード記憶部２７と、を備える。各記憶部２５〜２７は、ハードディスク１２の所定記憶エリアに構成される。
【００３５】
図５は、表示装置１７に表示される表示画面の一例を示している。図示するように、表示画面の左上の領域はプロジェクトの内部構成一覧表示ウィンドウＷ１となり、左下の領域はプログラム部品定義一覧表示ウィンドウＷ２となり、下方の領域はビルド結果表示部Ｗ３となり、右上の領域は変数定義ウィンドウＷ４となり、右下の領域はロジック編集ウィンドウＷ５となる。
【００３６】
“プロジェクトの内部構成一覧表示ウィンドウＷ１”は、制御プログラムの構成をツリー構造で表示するエリアである。“プログラム部品一覧ウィンドウＷ２”は、再利用部品として登録された部品の一覧を表示するエリアである。“ビルド結果表示部Ｗ３”は、制御プログラムのビルド結果として各種警告やエラーメッセージが表示されるエリアである。 “変数定義ウィンドウＷ４”は、“プロジェクトの内部構成一覧”で選択されたプロジェクト構成要素に定義された変数情報が一覧表示するエリアである。このウィンドウＷ４を使用して、ユーザの編集操作（入出力変数の追加・変更・削除）を受け付ける。“ロジック編集ウィンドウＷ５”は、ラダー回路やＳＴ言語その他で記述された制御プログラムの動作ロジックを表示したり、その表示した動作ロジックを修正したりするエリアである。
【００３７】
プロジェクトの内部構成一覧表示ウィンドウＷ１に表示される制御プログラムのプロジェクトは、図６に示すように、大別して論理プログラム定義と、コントローラインスタンス構成とがある。
【００３８】
“論理プログラム定義”には、“ユーザ定義データ型”、“ファンクションブロック”、“プログラム”、“インタフェース”といった、構造化されたプログラム構成単位の型が定義される。
【００３９】
ファンクションブロック定義一覧には、ＰＬＣ制御プログラムを記述する際に使用可能なファンクションブロックの型がリストアップされている。各ファンクションブロックの型は、“名称”と、“コメント”と、“実装インタフェース”と、“入出力変数リスト”と、“内部変数リスト”と、“保有インスタンスリスト”と、“ロジック記述”と、が関連付けて定義される。ここで、“名称”の欄には、当該ファンクションブロックの識別子となる名称が記述され、“コメント”の欄には、当該ファンクションブロックの簡単な説明が記述され、“実装インタフェース”の欄には、実装宣言しているインタフェース定義が存在する場合、そのインタフェース定義を参照するための情報が記述され、“入出力変数リスト”の欄には、当該ファンクションブロックの入出力変数のリストが“入出力変数定義”として記述され、“内部変数リスト”の欄には、当該ファンクションブロックの内部変数定義のリストが“変数定義”として記述され、“保有インスタンスリスト”の欄には、当該ファンクションブロックの保有インスタンスのリストが“ＦＢインスタンス定義”または“Ｉ／Ｆインスタンス定義”として記述され、“ロジック記述”の欄には、ラダー回路もしくはＳＴ言語によるプログラム動作ロジックが記述される。入出力変数定義や、変数定義や、“ＦＢインスタンス定義”または“Ｉ／Ｆインスタンス定義”は、それぞれ１または複数個記述される。
【００４０】
変数定義は、“名称”と、“型”と、“デフォルト値”と、“電断保持属性”と、“コメント”と、を関連付けて定義したものである。入出力変数定義は、係る変数定義の各項目に加えて“入出力属性”を更に加えて関連付けて定義したものである。ここで、“名称”の欄には、変数の識別子となる名称が記述され、“型”の欄には当該変数の型が記述され、“デフォルト値”の欄には、当該インタフェースを備えるファンクションブロックがインスタンス化されたときの当該変数の初期値が記述され、“電断保持属性”の欄には、電断保持を行うかどうかの設定が記述され、“コメント”の欄には、当該変数の簡単な説明が記述され、“入出力属性”の欄には、この変数の属性すなわち入力（Ｗｒｉｔｅ  Ｏｎｌｙ）／出力（Ｒｅａｄ  Ｏｎｌｙ）／入出力（Ｒｅａｄ，Ｗｒｉｔｅ）のいずれかが記述される。
【００４１】
“プログラム定義一覧”は、再利用部品として登録されたプログラムのプログラム定義がリストアップされている。各プログラム定義は、“名称”と、“コメント”と、“内部変数リスト”と、“保有インスタンスリスト”と、“ロジック記述”と、を関連付けて定義される。ここで、“名称”の欄には、当該プログラムの識別子となる名称が記述され、“コメント”の欄には、当該プログラムの簡単な説明が記述され、“内部変数リスト”の欄には、当該プログラムの内部変数定義のリストが“変数定義”として記述され、“保有インスタンスリスト”の欄には、当該プログラムの保有インスタンスのリストが“ＦＢインスタンス定義”または“Ｉ／Ｆインスタンス定義”として記述され、“ロジック記述”の欄には、ラダー回路もしくはＳＴ言語によるプログラム動作ロジックが記述される。変数定義や、“ＦＢインスタンス定義”または“Ｉ／Ｆインスタンス定義”は、それぞれ１または複数個記述される。
【００４２】
インタフェース定義一覧は、複数の入出力変数の組み合わせ（セット）からなる“インタフェース”の定義がリストアップされる。各インタフェースは、“名称”と、“コメント“と、“入出力変数リスト“と、を関連づけて定義される。ここで、“名称”の欄には、当該インタフェースの識別子となる名称が記述され、“コメント”の欄には、当該インタフェースの簡単な説明が記述され、“入出力変数リスト”の欄には、当該インタフェースの内容となる入出力変数のリストが“入出力変数定義”として記述される。
【００４３】
図７は、論理プログラム定義の各要素、すなわち、プログラム，ファンクションブロック，インタフェースの論理的な関係を示しており、この図７を用いて論理プログラム定義（特に、インタフェース）をさらに説明する。まず、インタフェースは、ファンクションブロックにおける入出力変数のセットであり、ファンクションブロックは自己が提供できるインタフェース（提供インタフェース）を１つ実装する。プログラムは、あるファンクションブロックを使用するに際し、ファンクションブロックを直接貼り付ける（記述する）のではなく、所望の入出力線数のセットとなるインタフェースを記述することができる。そして、このようにインタフェース（要求インタフェース）で記述したプログラムを実際に使用する場合には、同一の入出力変数のセットからなる提供インタフェースを備えたファンクションブロックを連結し、制御プログラムを構成する。
【００４４】
係る要求インタフェースを用いて記述するプログラムは、ファンクションブロックも含む。つまり、ファンクションブロックのプログラム中に、要求インタフェースを記述することもできる。このように、同一の入出力変数を持つ要求インタフェースと提供インタフェース（実装インタフェース）とを連結することで、実際に動作するプログラムが完成する。
【００４５】
本実施形態では、ファンクションブロックは、特定のインタフェース（提供インタフェース）を１つだけ備える（実装する）ことができ、図７の例では、ファンクションブロックＡは、インタフェースＸ（提供インタフェース）を実装している。つまり、ファンクションブロックＡは、インタフェースＸに定義された入出力変数と同じ入出力変数を持っていることを表す。このとき、ファンクションブロックＡは、このインタフェースＸで定義される入出力変数以外の入出力変数を追加して備えることは妨げない。
【００４６】
ファンクションブロックは、他のファンクションブロックのインスタンスを１または複数保有し、動作ロジックの記述中でそのインスタンスを使用することができる。つまり、インタフェースを用いるのではなく、従来同様ファンクションブロックを直接記述することができる。図７の例では、ファンクションブロックＡは、その動作記述中でファンクションブロックＢのインスタンス１を使用している。
【００４７】
ファンクションブロックは、特定のインタフェース（要求インタフェース）のインスタンスを１または複数保有し、動作ロジックの記述中でそのインスタンスを使用することができる。図７の例では、ファンクションブロックＡは、その動作記述中でインタフェースＹのインスタンス１、およびインスタンス２を使用している。この論理プログラムに基づき、実際に動作プログラムを作成する場合には、このインタフェースＹを実装インタフェースとして持つファンクションブロックを接続することになる。
【００４８】
プログラムは、タスク割付のために規定のプログラム共通インタフェースを備えている。さらに、プログラムは、ファンクションブロックのインスタンスを１または複数保有し、動作ロジックの記述中でそのインスタンスを使用することができる。図７の例では、プログラム２は、その動作記述中でファンクションブロックＥのインスタンス１を使用している。
【００４９】
プログラムは、特定のインタフェースのインスタンスを１または複数保有し、動作ロジックの記述中でそのインスタンスを使用することができる。図７において、ファンクションブロックＡは、その動作記述中でインタフェースＹのインスタンス１、およびインスタンス２を使用している。つまり、制御プログラムを記述するに際し、ユーザは、インタフェースを用いて記述してもよいし、従来同様ファンクションブロックを直接記述してもよい。
【００５０】
上記の論理プログラム定義一覧にリスト表示される各定義は、論理プログラム定義記憶部２６に格納されており、論理プログラム構成表示／編集部２１がそれを読み出すとともに、読み出した各定義をツリー状にしてプロジェクトの内部構成一覧表示ウィンドウＷ１の所定エリアに表示する。つまり、論理プログラム構成表示／編集部２１は、論理プログラム定義の構成を表示と編集を行わせるユーザーインタフェースとなる。論理プログラム構成表示／編集部２１は、ツリー状に表示した各定義を修正したり、削除したり、新たな定義を追加したりすることができる。これら編集等の修正処理は、各エディタ２２，２３，２４と連動して行なう。ここで、変数リストエディタ２２は、内部変数や入出力変数のリストを編集するユーザーインタフェースである。ラダー回路エディタ２３は、論理プログラムの動作ロジックを表現したラダー回路の編集を行うためのユーザーインタフェースである。ＳＴ言語エディタ２４は、論理プログラムの動作ロジックを表現したＳＴ言語プログラム編集を行うためのユーザーインタフェースである。
【００５１】
“インタフェース”は、新規作成しユーザ操作によって入力変数と出力変数を１つ１つ追加して定義することができる。また、“インタフェース”は、既に定義されたファンクションブロックの入出力変数の組を元に作成することができる。これらの処理は、主として変数リストエディタ２２が行なう。
【００５２】
図８に示すように、ユーザは、インタフェース定義画面において、インタフェース定義を編集しようとする処理対象の名称部分をクリック等して選択する。すると、論理プログラム構成表示／編集部２１は、ツリー状にリスト表示されたインタフェース定義の中から、処理対象の定義の名称部分が選択されたことを認識し、該当するインタフェース定義も内容を、論理プログラム定義記憶部２６から読み出すとともに、変数定義ウィンドウＷ４に出力表示する。変数リストエディタ２２は、ユーザからの入力に従いこの変数定義ウィンドウＷ４に表示されたインタフェースについて、入出力変数の追加・削除等を行なう。そして、そのインタフェースとして定義すべき入出力変数の入力が完了したならば、ユーザは、コマンド入力或いは図示省力するメニューリストからの選択により、“保存”命令を入力する。これを受けて、論理プログラム構成表示／編集部２１は、そのときの入出力変数のセットを、インタフェース定義として論理プログラム定義記憶部２６に登録する。
【００５３】
なお、ここでは、インタフェース定義の所要な構成となる入出力変数のセットについて変数リストエディタ２２を用いることを説明したが、名称や、コメントは、論理プログラム構成表示／編集部２１が登録する。具体的な一例としては、論理プログラム定義記憶部２６に入出力変数のセットを保存するに際し、その保存処理の処理画面として、ファイル名の入力欄や、コメントの入力欄を設けておき、ユーザが各入力欄に入力した情報を、それらの情報として入出力変数のセットと関連づけて格納することができる。もちろん、他の方法を採ることもできる。処理対象のインタフェース定義が、論理プログラム定義記憶部２６から読み出したものの場合、保存時のファイル名を同一にすることで登録内容の更新が行なわれインタフェース定義の編集をすることになり、ファイル名を替えることで新たなインタフェース定義の作成をすることになる。
【００５４】
また、インタフェース定義を全く新規に作成する場合は、たとえば、ユーザが“プロジェクトの内部構成一覧ウィンドウＷ１”にツリー表示されたリスト中の“インタフェース”の箇所をクリック等して選択した状態で、ポインティングデバイスの右クリック等してメニューリストを表示させ、そのメニューリスト中の“新規作成”を選択することを契機として行なう。この“新規作成”が選択された場合、変数定義ウィンドウＷ４はブランク状態となるので、変数リストエディタ２２を操作して入出力変数を記載する。名称やコメントの入力は、論理プログラム構成表示／編集部２１を用いて行なうことは、上述の通りである。また、名称を付すまでは、新規に作成されたインタフェース定義は、例えば、“新しい項目”等の一般的な名称を付してツリー一覧の所定位置に表示することができる。
【００５５】
なお、変数リストエディタ２２は、上述のインタフェース定義における入出力変数の登録処理以外に、通常のファンクションブロックや、プログラム（ラダー回路）における各種変数の入力・編集等にも使用される。
【００５６】
次に、インタフェース定義の実装宣言を説明する。ファンクションブロックは、特定のインタフェース（提供インタフェース）を１つだけ実装することができるが、このためには、以下に示すインタフェース定義の実装宣言を行なう必要がある。
【００５７】
つまり、ユーザは、プロジェクトワークスペースの“インタフェース”定義アイコンを、ファンクションブロックの変数定義ウィンドウへドラッグ＆ドロップするなどの操作によって、そのファンクションブロックに対して、定義済みの“インタフェース”の実装を宣言する（図９参照）。この宣言を行なうことで、たとえば、図７に示すファンクションブロックＡが、提供インタフェースＸを備えることになる。
【００５８】
この実装宣言は、論理プログラム構成表示／編集部２１が、図１０に示すフローチャートを実行する機能を備えることで実現される。論理プログラム構成表示／編集部２１は、ユーザ操作が行なわれるのを待ち（Ｓ１）、ユーザからファンクションブロックに実装するインタフェースの指定操作を受けたならば（Ｓ２）、当該ファンクションブロックの入出力変数リストと、指定されたインタフェースに定義された入出力変数リストをチェックする（Ｓ３）。上記の指定操作は、例えば、上述したドラッグ＆ドロップなどの操作である。そこで、論理プログラム構成表示／編集部２１は、ドラッグされたインタフェースとドロップ先のファンクションブロックを認識し、論理プログラム定義記憶部２６にアクセスして該当するインタフェース定義並びにファンクションブロック定義に規定されるそれぞれの入出力変数定義を取得し、変数名が重複していないかをチェックする。
【００５９】
変数名の重複の有無を判断した結果、重複している場合（Ｓ４でＹｅｓ）には、論理プログラム構成表示／編集部２１は、表示装置１７に向けてエラー表示をし（Ｓ５）、処理ステップ１に戻りユーザ操作を待つ。また、変数名に重複がない場合（Ｓ４でＮｏ）、論理プログラム構成表示／編集部２１は、論理プログラム定義記憶部２６に格納されている当該ファンクションブロックの実装インタフェースリストに当該インタフェースの名称を追加する（Ｓ６）。
【００６０】
更に、論理プログラム構成表示／編集部２１は、当該インタフェースに定義された入出力変数と同一の定義（名称、データ型、初期値、電断保持／非保持設定、コメント）を当該ファンクションブロックの入出力変数に追加する（Ｓ７）。
【００６１】
次いで、論理プログラム構成表示／編集部２１は、ファンクションブロックに追加した入出力変数に当該インタフェースの構成要素である旨と編集禁止フラグを設定する（Ｓ８）。この編集禁止フラグが設定された場合、ユーザが実装宣言を解消しない限り、そのインタフェース定義で規定される入出力変数に対する個別の変更・削除等の編集処理が禁止される。
【００６２】
その後、ユーザ操作を待ち（Ｓ９）、ユーザの指示に従い、追加された入出力変数を利用してファンクションブロック内部をプログラミングする（Ｓ１０）。このプログラミングは、ラダー回路エディタ２３やＳＴ言語エディタ２４を動作させ、ロジック編集ウィンドウＷ５のエリアを用いて行なうが、プログラミング処理自体は基本的に従来と同様である。
【００６３】
論理プログラム構成表示／編集部２１は、図１１に示すインタフェースの実装宣言解消フローチャートを実行する機能を備えている。すなわち、上述したように、実行宣言を行ない編集禁止フラグが設定された後は、ユーザはインタフェース定義で規定される入出力変数に対する個別の変更・削除等の編集処理が禁止されるので、係る編集処理を行なうためには、この解消機能を実行して編集禁止フラグを解消する必要がある。具体的には、論理プログラム構成表示／編集部２１は、ユーザ操作を待ち（Ｓ１１）、ユーザから、ファンクションブロックから取り外すインタフェースの指定操作を受け付けたならば、当該ファンクションブロックの入出力変数リストと、指定されたインタフェースに定義された入出力変数リストをチェックする（Ｓ１２，Ｓ１３）。この指定操作は、例えば、ユーザが、ファンクションブロック一覧にツリー状にリストアップされているものの中から、実装宣言を解消しようとするファンクションブロックをクリックなどして指定し、コマンド入力或いは図示省力するメニューリストからの選択により、“実装宣言解消”命令を入力することにより行なう。
【００６４】
論理プログラム構成表示／編集部２１は、係る実装宣言の解消を受け付けると、当該インタフェースの構成要素である旨が記録されたファンクションブロックの入出力変数からその記録を削除するとともに編集禁止フラグを解消し（Ｓ１４）、ファンクションブロックの実装インタフェースリストから当該インタフェースの名称を削除する（Ｓ１５）。
【００６５】
なお、この実装宣言の解消が行なわれても、インタフェース定義と同じ入出力変数は削除されることなくそのまま残すようにしている。これは、提供インタフェースとして使用することを停止しても、その一部または全部の入出力変数を通常のファンクションブロックの入出力変数として使用する余地を残したためである。
【００６６】
その後、論理プログラム構成表示／編集部２１は、ユーザ操作を待ち（Ｓ１６）、ユーザから不要な入出力変数定義の削除操作を受けた場合には、当該入出力変数の削除を行なう（Ｓ１７）。もちろん、この処理ステップ１７は実行されずに、実装宣言が解消された入出力変数がそのまま残されることもある。
【００６７】
次に、図１２，図１３を用いてインタフェース定義を用いた制御プログラム（動作ロジック）の記述について説明する。図１２は、インタフェースを用いて制御プログラムを記述する際の画面イメージを示しており、図１３はそのフローチャートを示している。本実施形態では、ラダー回路エディタ２３やＳＴ言語エディタ２４を用いてプログラム、またはファンクションブロックの動作ロジックの記述（ラダー言語／ＳＴ言語／その他）をするに際し、ファンクションブロックのインスタンスのみならず、インタフェースのインスタンスを用いてロジックを記述できる。このインタフェースのインスタンスを用いてロジックを記述するには、図１２に示すように、プログラムまたはファンクションブロックの編集画面において、プログラムワークスペースからインタフェースをあらわすシンボルＳをラダー回路にドラッグ＆ドロップするなどの操作により、ラダー回路中にインタフェースを型とするインスタンスが表示されるようになる。
【００６８】
係る処理は、具体的には、図１３に示すフローチャートを実行することで行なわれる。すなわち、論理プログラム構成表示／編集部２１は、ユーザ操作を待ち（Ｓ２１）、ユーザから、上記のドラッグ＆ドロップ処理によりファンクションブロック内部のプログラム中に、インタフェースのインスタンスの貼り付け操作を受け付けると（Ｓ２２）、ユーザに対してインタフェースのインスタンスにインスタンス名の入力を促す（Ｓ２３）。ユーザは、たとえば、表示画面にポップアップ表示されたインスタンス名の入力エリアに、入力装置を操作してそのインタフェースのインスタンスに付すべきインスタンス名を入力する。そこで、論理プログラム構成表示／編集部２１は、当該ファンクションブロックの保有インスタンスリストに、その入力により指定されたインスタンス名で指定されたインタフェースを型とするインスタンスを追加する（Ｓ２４）。
【００６９】
論理プログラム構成表示／編集部２１は、指定されたインスタンス名が重複しているか否かを判断し（Ｓ２５）、重複している場合には、エラー表示を出力し（Ｓ２６）、処理ステップ２１に戻り、次のユーザ操作を待つ。そして、インスタンス名が重複していない場合には、論理プログラム構成表示／編集部２１は、指定されたインタフェースと入出力変数リストを参照しそのインスタンスのシンボルＳを当該ファンクションブロックの編集画面Ｗ５上に表示する（Ｓ２７）。このシンボルＳを表示した状態が、図１２に示す表示画面例である。インタフェースのインスタンスは、ファンクションブロックのインスタンスと同様に入出力変数を備えたブロックとしてラダー回路内で結線することができる。本実施形態では、インタフェースのインスタンスは、ボディとなるファンクションブロックが特定されておらず、具体的な内部プログラムは未定となることから、シンボルＳは枠のみ（白抜き）を記載している。これに対し、ファンクションブロックのインスタンスのシンボルＳ′は、内部プログラムが記述されているとことから色つきとしている。
【００７０】
そこで、ラダー回路エディタ２４は、ユーザ装置を待ち（Ｓ２８）、ユーザからの入力に従い、インタフェースのインスタンスの入出力変数に当該ファンクションブロックの内部変数を結線する（Ｓ２９）。
【００７１】
一方、“コントローラインスタンス構成”には、“論理プログラム定義”を用いて実際にＰＬＣにダウンロードして動作させるプログラムのインスタンス構成が記述されるとともに、グローバル変数、Ｉ／Ｏ割付、ネットワーク変数のコネクション設定といったグローバルリソースへの割付設定が行われる。これらが一覧リストとなってツリー状に表記される。
【００７２】
図１４は、ＰＬＣにダウンロードし実行させる制御プログラムを表す“コントローラインスタンス構成”の一例を示している。ＰＬＣを表すコントローラインスタンスは、グローバル変数リストと各種タスク（サイクリックタスク、割込実行タスク、電断実行タスクなど）を持っており、タスクには規定のプログラム共通インタフェースによってプログラムのインスタンスが割り付けられる。
【００７３】
プログラムのインスタンス化に伴い、それが保有するファンクションブロックのインスタンスもコントローラインスタンス構成上に表される。プログラムまたはファンクションブロックのインスタンス化に伴い、それが保有するインタフェースのインスタンスには、それと同一のインタフェースを実装したファンクションブロックのインスタンスが接続され、コントローラインスタンス構成上に表される。さらに、ファンクションブロックのインスタンス化に伴い、それが保有する他のファンクションブロックのインスタンスもコントローラインスタンス構成上に表される。
【００７４】
さらに、図１４に示すように、インタフェース定義（要求インタフェース）を用いて記述された制御プログラムは、その要求インタフェースと同一のインタフェース定義からなる提供インタフェースを備えたファンクションブロックが接続される。
【００７５】
次に、図１５，図１６を参照しながら、制御プログラムを用いて、コントローラインスタンス構成を設定する処理機能を説明する。図１５は、コントローラインスタンス構成設定画面の一例を示し、図１６は、コントローラインスタンス構成を作成する機能を示すフローチャートである。このフローチャートを実行する機能は、コントローラインスタンス構成表示／編集部２０が備えている。図１５に示す例では、“ＵｎｉｔＣｏｎｔｒｏｌｌｅｒ”なる名称のファンクションブロック”の内部では、“搬入ユニットＩ／Ｆ”なる名称のインタフェースを用いてラダープログラムが記述されているものとする。また、この図１５に示すコントローラインスタンス構成設定画面は、初期状態では、コントローラインスタンスは定義されておらず、ユーザがプログラムを動作させるＰＬＣの機種にあわせて、プロジェクトの内部構成一覧画面内のツリービューにコントローラインスタンスを追加することになる。
【００７６】
コントローラインスタンス構成表示／編集部２０は、ユーザ操作を待ち（Ｓ３１）、ユーザのコントローラインスタンス作成操作を受け付ける（Ｓ３２）と、コントローラインスタンスツリーのルートノードに指定された機種のコントローラインスタンスを追加し、その下に機種のもつタスクを追加する（Ｓ３３）。このコントローラインスタンス作成操作は、例えば、論理プログラム定義一覧のプログラム定義一覧の中から、コントローラインスタンスを作成する対象のプログラムを選択し、所定のコマンド入力や、図示省略するメニューリストから作成命令を入力したり、コントローラインスタンスを作成する対象のプログラムをコントローラインスタンス構成の所定位置にドラッグ＆ドロップをしたりすることで行なうことができる。
【００７７】
次いで、コントローラインスタンス構成表示／編集部２０は、ユーザ操作を待ち（Ｓ３４）、ユーザからプログラムのタスク割付の指示を受ける（Ｓ３５）と、指定されたタスクに指定されたプログラムの割付を設定し（Ｓ３６）、設定されたプログラムまたはファンクションブロックのプログラム記述中で呼び出されているインタフェースのインスタンスを検索する（Ｓ３７）。つまり、コントローラインスタンス構成表示／編集部２０は、コントローラインスタンスが追加されると、その機種で使用可能なタスクがそのサブノードに表示するので、ユーザはこのタスクに対し、論理プログラム定義で作成しておいたプログラムのインスタンスを割り付けていくことになる。また、プログラム内でファンクションブロックのインスタンスが使用されている場合には、コントローラインスタンス構成のツリービュー上で、そのプログラムを表すノードのサブノードにそのファンクションブロックのインスタンスが表示される。
【００７８】
コントローラインスタンス構成表示／編集部２０は、検索したプログラムまたはファンクションブロック中のプログラム記述中にインタフェースの呼び出しがある場合（Ｓ３８でＹｅｓ）、ユーザに対し、当該インタフェースを実装宣言リストに持つファンクションブロックの一覧を表示する（Ｓ３９）。図１５の例をとって説明すると、“ＵｎｉｔＣｏｎｔｒｏｌｌｅｒ”ファンクションブロックがインスタンス化されると、そのファンクションブロックのプログラム中に要求インタフェースして“ｌｏａｄｅｒ”なる名称の“搬入ユニットＩ／Ｆ”が存在するので、コントローラインスタンス構成表示／編集部２０は、論理プログラム定義記憶部２６をアクセスして、“搬入ユニットＩ／Ｆ”を提供インタフェースとして持つ全てのファンクションブロックを検出し、その検出したファンクションブロックの一覧をリスト表示する。図１５では、“ＬｏａｄｉｎｇＡｒｍ”と“ＬｏａｄｉｎｇＴａｂｌｅ”の２つのファンクションブロックがリストアップされ、搬送ユニットＩ／Ｆはいずれのファンクションブロックにも入れ替え可能になる。そして、コントローラインスタンス構成表示／編集部２０は、ユーザからファンクションブロックの選択操作を受ける（Ｓ４０）と、その指定されたファンクションブロックをインタフェースの実体インスタンスとして設定する（Ｓ４１）。
【００７９】
すなわち、プログラムまたはファンクションブロックの内部でインタフェースのインスタンスが使用されている場合には、コントローラインスタンス構成のツリービュー上で、一旦インタフェースを表すアイコンでインスタンスが表示される。ただしこの状態でビルドを行うと、インタフェースインスタンスのボディとなるファンクションブロックが設定されていない旨のエラー表示がなされる。コントローラインスタンス構成ツリービュー上のインタフェースのアイコンをクリックすると、当該インタフェースを実装したファンクションブロックのリストが表示され、ユーザに選択が促される。ユーザが選択を行うと、選択されたファンクションブロックがインタフェースインスタンスのボディとして関連づけられる。
【００８０】
このようにして、プログラム中に存在する全てのインタフェースのインスタンスに対して、対応するファンクションブロックを関連付けたならば、処理ステップＳ３８の分岐判断はＮｏとなるので、コントローラインスタンス構成表示／編集部２０は、処理ステップＳ４１で指定されたファンクションブロックのプログラム記述中で使用されているファンクションブロックのインスタンスを検索し（Ｓ４３）、ファンクションブロック呼び出しがあるか否かを判断する（Ｓ４３）。そして、呼び出しがある場合には、処理ステップ３７に戻り、呼び出されたファンクションブロックについて、そのプログラム中にインタフェース定義で記述されているもの（要求インタフェース）が存在するか否かをチェックし（Ｓ３７，Ｓ３８）、存在する場合には、対応する提供インタフェースを持つファンクションブロックを関連付けるための処理（Ｓ３９〜Ｓ４１）を実行する。
【００８１】
上記の各処理を適宜実行することにより、コントローラインスタンス中に存在する全てのインタフェースインスタンスに対して、適切なファンクションブロックをボディとして関連付けることができたならば、処理ステップＳ４３の分岐判断はＮｏとなり、ユーザ操作待ちとなる。なお、このユーザ操作待ちに続き、例えば、制御プログラムをビルド後、ＰＬＣへのダウンロード等が行なわれる。
【００８２】
また、上記の各処理を実行することで作成されたコントローラインスタンス構成は、コントローラインスタンス構成記憶部２５に格納される。また、コントローラインスタンス構成表示／編集部２０は、コントローラインスタンス構成記憶部２５に格納されたコントローラインスタンス構成を呼び出して表示装置の所定エリアに表示したり、その内容を修正したり、修正した構成を当該機奥部２５に格納する処理を実行する。
【００８３】
図４に示すように、本ＰＬＣ制御プログラム開発装置は、通常の開発装置と同様に、作成したプログラムをＰＬＣが実行できる状態にビルドし、ダウンロードする機能として、オブジェクトコード記憶部２７と、プロジェクトデータファイル入出力部２８と、オブジェクトコードビルド部２９と、ＰＬＣ通信部３０と、備える。ここで、プロジェクトデータファイル入出力部２８は、各記憶部２６，２５に格納された論理プログラム定義やコントローラインスタンス構成などのプロジェクトデータのファイルシステムへの保存／読み出しを行うサブシステムである。また、オブジェクトコードビルド部２９は、論理プログラム定義とコントローラインスタンス構成を元に、実際にＰＬＣファームウェアにダウンロードされ実行される、制御プログラムのバイナリーデータであるオブジェクトコードを生成するサブシステムである。このオブジェクトコードビルド部２９で生成されたオブジェクトコードは、オブジェクトコード記憶部２７に格納される。ＰＬＣ通信部３０は、ＰＬＣ１のファームウェアと通信を行い、オブジェクトコード記憶部２７に格納されたオブジェクトコードのダウンロードやアップロードを行なう。さらにＰＬＣ通信部３０は、ＰＬＣの運転制御、モニタリングを行う機能も備える。
【００８４】
上述したように、本実施形態によれば、図１７に示すように、プログラムを、インタフェースを介してファンクションブロックを呼び出すように記述することによって、要求インタフェースと提供インタフェースの連結部分を切り離すことができ、それにより、インタフェース部分で上位のプログラムと、それに呼び出されるファンクションブロックとを切り分けることができる。よって、図１８に示すように各部分を再利用部品化することができる。
【００８５】
つまり、呼び出されるファンクションブロックだけでなく、ファンクションブロックを呼び出す側のプログラム／ファンクションブロックも再利用部品とすることができる。それによって、制御プログラムから重複なく部品を切り出すことができる。その結果、製品シリーズを構成する制御プログラムからより多くの箇所を再利用部品化することができ、部品の利用にあたり、部品自体を編集することなく、部品を接続することで制御プログラムを構成することができる。
【００８６】
これにより、例えば、製品を検査装置に供給するための製品ローダと、製品を検査装置から搬出する製品アンローダーは、共通の“搬送ロボット制御ＦＢ”にでき、管理しなければならない部品の数を低減できる。そして、管理しなければならない部品数を減らし、部品内に同名のファンクションブロックのコピーが重複して含まれることを防ぐことができる。また、プログラムやファンクションブロックを編集してファンクションブロックを貼り換えることなしに、部品をインタフェースに基づいて接続することによって、簡単に新しい制御プログラムが構成できる。
【００８７】
本実施形態では、図１９に示すように、ファンクションブロック群の単位で部品化することができる。すなわち、呼び出し関係がある複数のファンクションブロック群をグループ化しそのインタフェースを明示的に定義することで、あたかも１つのファンクションブロックのように取り扱える“ファンクションブロックコンポーネント”として定義できる。これにより、ファンクションブロックのみならず、コンポーネントという大きな粒度での制御プログラムの再利用部品化が行える。
【００８８】
さらには、図２０に示すように、プログラム群の部品化をすることもできる。つまり、複数の“プログラム”と、それと呼び出し関係がある複数のファンクションブロック群をグループ化しそれにインタフェースを明示的に定義することで、あたかも１つの“プログラム”のように取り扱える“プログラムコンポーネント”として定義できる。これにより、コンポーネントという大きな粒度での制御プログラムの再利用部品化が行える。
【００８９】
図１９，図２０に示すように、複数のファンクションブロックや複数のプログラムをグループ化して部品化するのは、たとえば、その前工程として、それら複数のファンクションブロックや複数のプログラムを用いてプログラムを作成し、プログラム一覧にリストアップされる。そして、そのリストアップされたプログラム単位で、部品化がなされる。このように鑑みた場合、第１，第２グループ化手段は、動作ロジックを作成する手段、つまり、図１３に示すフローチャートを実行する論理プログラム構成表示／編集部２１により実現されるともいえる。もちろん、動作ロジックとは別に、適宜のファンクションブロック等を指定し、グループ化してコンポーネントを作成するようにしてもよい。
【図面の簡単な説明】
【００９０】
【図１】従来例を説明する図である。
【図２】従来例を説明する図である。
【図３】本発明に係るＰＬＣ制御プログラム開発装置の好適な一実施形態を示す図である。
【図４】本発明に係るＰＬＣ制御プログラム開発装置の好適な一実施形態を示す図である。
【図５】表示画面の一例を示す図である。
【図６】プロジェクト情報のデータ構成の一例を示す図である。
【図７】論理プログラム定義の各要素の関連の一例を示す図である。
【図８】インタフェース定義画面の一例を示す図である。
【図９】インタフェースの実装宣言画面の一例を示す図である。
【図１０】インタフェースの実装宣言機能を示すフローチャートである。
【図１１】インタフェースの実装宣言の解消機能を示すフローチャートである。
【図１２】インタフェースを用いて制御プログラムを記述する際の画面イメージを示す図である。
【図１３】インタフェースを用いた動作ロジックを記述する機能を示すフローチャートである。
【図１４】コントローラインスタンス構成の一例を示す図である。
【図１５】コントローラインスタンス構成設定画面の一例を示す図である。
【図１６】コントローラインスタンス構成を作成する機能を示すフローチャートである。
【図１７】作用効果を説明する図である。
【図１８】作用効果を説明する図である。
【図１９】ファンクションブロック群の部品化を説明する図である。
【図２０】プログラム群の部品化を説明する図である。
【符号の説明】
【００９１】
２０  コントローラインスタンス構成表示／編集部
２１  論理プログラム構成表示／編集部
２２  変数リストエディタ
２３  ラダー回路エディタ
２４  ＳＴ言語エディタ
２５  コントローラインスタンス構成記憶部
２６  論理プログラム定義記憶部
２７  オブジェクトコード記憶部
２８  プロジェクトデータファイル入出力部
２９  オブジェクトコードビルド部
３０  ＰＬＣ通信部
【図１】
0004973867.tif 000002
【図２】
0004973867.tif 000003
【図３】
0004973867.tif 000004
【図４】
0004973867.tif 000005
【図５】
0004973867.tif 000006
【図６】
0004973867.tif 000007
【図７】
0004973867.tif 000008
【図８】
0004973867.tif 000009
【図９】
0004973867.tif 000010
【図１０】
0004973867.tif 000011
【図１１】
0004973867.tif 000012
【図１２】
0004973867.tif 000013
【図１３】
0004973867.tif 000014
【図１４】
0004973867.tif 000015
【図１５】
0004973867.tif 000016
【図１６】
0004973867.tif 000017
【図１７】
0004973867.tif 000018
【図１８】
0004973867.tif 000019
【図１９】
0004973867.tif 000020
【図２０】
0004973867.tif 000021