(57)【特許請求の範囲】
【請求項１】
複数のコントローラと、それらと接続された入出力機器とからなる制御対象装置を制御するためのプログラムを生成するプログラム生成装置であって、
前記制御対象装置に関する複数の制御ブロックを接続して表現される、前記プログラムに変換可能な制御モデルを受け付ける制御モデル入力部と、
前記複数のコントローラの設定情報と、前記コントローラ同士の間、及び、前記コントローラと前記入出力機器との間の接続情報とを受け付ける設定情報入力部と、
前記制御モデル入力部で受け付けた前記制御モデルと、前記設定情報入力部で受け付けた前記設定情報及び前記接続情報とに基づいて、前記制御モデルの各前記制御ブロックを前記コントローラに割付ける制御分配部と、
割付けられた前記制御モデルにおいて、異なる前記コントローラに割付けられた第１の前記制御ブロック及び第２の前記制御ブロック同士が接続されている場合に、その接続部分に、前記第１の制御ブロック及び前記第２の制御ブロックのいずれか一方から出力された通信データに、制御周期に関するデータ処理を行ってから他方に入力する機能を含む通信用制御ブロックを追加し、前記制御モデル入力部で受け付けた前記制御モデルと、前記設定情報入力部で受け付けた前記設定情報とに基づいて、前記通信用制御ブロックが行うべき前記データ処理を決定する通信機能追加部と
を備える、プログラム生成装置。
【請求項２】
請求項１に記載のプログラム生成装置であって、
前記設定情報は、前記複数のコントローラが満たすべき制約条件を含み、
前記制御分配部は、
割付けられた前記制御モデルが、前記設定情報入力部で受け付けた前記設定情報に含まれる前記制約条件を満たさない場合に、前記制御モデルにおける前記制御ブロックの割付けを変更する、プログラム生成装置。
【請求項３】
請求項１または請求項２に記載のプログラム生成装置であって、
前記制御モデルは、
第３の前記制御ブロックと、
グローバル変数によって前記第３の制御ブロックとデータの送受信が可能であり、前記第３の制御ブロックと接続されていない第４の前記制御ブロックとを含み、
前記通信機能追加部は、
割付けられた前記制御モデルにおいて、前記第３の制御ブロックが割付けられた前記コントローラと前記第４の制御ブロックが割付けられた前記コントローラとが異なる場合に、前記第３の制御ブロックが割付けられたコントローラと前記第４の制御ブロックが割付けられたコントローラとの間のデータ通信処理を追加する、プログラム生成装置。
【請求項４】
請求項１または請求項２に記載のプログラム生成装置であって、
前記制御モデルの前記制御ブロックを割付けるべき前記コントローラを、外部入力によって指定可能な入力指定部をさらに備える、プログラム生成装置。
【請求項５】
複数のコントローラと、それらと接続された入出力機器とからなる制御対象装置を制御するためのプログラムを生成するプログラム生成方法であって、
前記制御対象装置に関する複数の制御ブロックを接続してなり、前記プログラムに変換可能な制御モデルを受け付け、
前記複数のコントローラの設定情報と、前記コントローラ同士の間、及び、前記コントローラと前記入出力機器との間の接続情報とを受け付け、
受け付けた前記制御モデルと、受け付けた前記設定情報及び前記接続情報とに基づいて、前記制御モデルの各前記制御ブロックを前記コントローラに割付け、
割付けられた前記制御モデルにおいて、異なる前記コントローラに割付けられた第１の前記制御ブロック及び第２の前記制御ブロック同士が接続されている場合に、その接続部分に、前記第１の制御ブロック及び前記第２の制御ブロックのいずれか一方から出力された通信データに、制御周期に関するデータ処理を行ってから他方に入力する機能を含む通信用制御ブロックを追加し、受け付けた前記制御モデルと、受け付けた前記設定情報とに基づいて、前記通信用制御ブロックが行うべき前記データ処理を決定する、プログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、複数のコントローラと、それらと接続された入出力機器とからなる制御対象装置を制御するためのプログラムを生成するプログラム生成装置及びプログラム生成方法に関する。
【背景技術】
【０００２】  生産設備を複数のコントローラで制御するためのプログラムを作成するプログラム生成装置として、コントローラ間の通信機能をシミュレーションすることによって、通信の設定を含む各コントローラのプログラムをシミュレーションする機能を有する技術が提案されている（例えば特許文献１）。【０００３】  また、制御ブロックを組合せて、コントローラの制御モデルや制御対象のモデルを設計し、制御対象のモデルを含めたコントローラのシミュレーションを実行可能なモデルベース開発のプログラミングソフトが知られている（例えば非特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−２０９４０７号公報
【非特許文献】
【０００５】
【非特許文献１】城所仁、「今、どうしてモデルベース開発なのか」、日経エレクトロニクス、２０１２年７月２３日、ｐ．９６−１０２
【発明の概要】
【発明が解決しようとする課題】
【０００６】  特許文献１の技術では、シミュレーションを実行するために、システムの細かい設定を含み、コントローラを実際に動作させるプログラムが必要となる。そのため、生産設備の設計の初期段階で、生産設備の生産能力を計るために機械の動作だけを簡単に検証したいという場合にも、機械を動作させるために、コントローラの細かい設定が必要になる。つまり、作業者が、コントローラ間の通信用のパラメータ設定やプログラムを記述する必要がある。しかしながら、この作業は、独立して動作する複数のコントローラ間でデータ同期を取るようにプログラムを作成する作業を伴うので、各コントローラの制御タイミングとコントローラ間の通信仕様との理解が求められる。このため、作業者の習熟が必要であるという問題あった。また、通信プログラムを実行するタイミングは、コントローラ内及びコントローラ間の他の処理の実行タイミングとも密接な関係があるため、プログラムの設計は複雑であり、半日程度の作業時間がかかることもある。そして、コントローラ間で通信するデータが変更されるなどの仕様変更が発生した場合にはプログラムの再設計となり、同等程度の作業時間を要することもある。【０００７】  また、非特許文献１の技術において、各コントローラのプログラムを設計するためには、その前段階として、作業者が、シミュレーション用のコントローラモデルに含まれる複数の制御ブロックを実際の各コントローラの制御に手作業で分解しなければならないという問題点がある。この作業では、各コントローラの仕様理解を作業者に要するだけでなく、実際の生産設備の構成と照らし合わせながら、コントローラモデルをコントローラの制御に最適に分解する能力を作業者に要する。したがって、作業者の習熟が必要であるという問題があった。【０００８】  そこで、本発明は、上記のような問題点を鑑みてなされたものであり、ユーザの作業を軽減可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明に係るプログラム生成装置は、複数のコントローラと、それらと接続された入出力機器とからなる制御対象装置を制御するためのプログラムを生成するプログラム生成装置であって、前記制御対象装置に関する複数の制御ブロックを接続して表現される、前記プログラムに変換可能な制御モデルを受け付ける制御モデル入力部と、前記複数のコントローラの設定情報と、前記コントローラ同士の間、及び、前記コントローラと前記入出力機器との間の接続情報とを受け付ける設定情報入力部と、前記制御モデル入力部で受け付けた前記制御モデルと、前記設定情報入力部で受け付けた前記設定情報及び前記接続情報とに基づいて、前記制御モデルの各前記制御ブロックを前記コントローラに割付ける制御分配部と、割付けられた前記制御モデルにおいて、異なる前記コントローラに割付けられた第１の前記制御ブロック及び第２の前記制御ブロック同士が接続されている場合に、その接続部分に、前記第１の制御ブロック及び前記第２の制御ブロックのいずれか一方から出力された通信データに、制御周期に関するデータ処理を行ってから他方に入力する機能を含む通信用制御ブロックを追加し、前記制御モデル入力部で受け付けた前記制御モデルと、前記設定情報入力部で受け付けた前記設定情報とに基づいて、前記通信用制御ブロックが行うべき前記データ処理を決定する通信機能追加部とを備える。
【発明の効果】
【００１０】  本発明によれば、制御モデル入力部で受け付けた制御モデルと、設定情報入力部で受け付けた設定情報及び接続情報とに基づいて、制御モデルの各制御ブロックをコントローラに割付け、割付けられた制御モデルにおいて、異なるコントローラに割付けられた第１及び第２の制御ブロック同士が接続されている場合に、その接続部分に通信用制御ブロックを追加する。これにより、コントローラの仕様を理解してプログラムを生成するというユーザの作業を軽減することができる。【００１１】  本発明の目的、特徴、態様及び利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【００１２】
【図１】制御モデルの一例を示す図である。
【図２】実施の形態１に係るプログラム生成装置の構成を示すブロック図である。
【図３】制御モデルの一例を示す図である。
【図４】制御モデルの一例を示す図である。
【図５】実施の形態１に係る制御分配部の処理結果の一例を示す図である。
【図６】実施の形態１に係る制御分配部の割付け処理を示すフローチャートである。
【図７】実施の形態１に係る制御分配部の処理の一例を示す図である。
【図８】実施の形態１に係る制御分配部の処理の一例を示す図である。
【図９】実施の形態１に係る通信機能追加部の処理結果の一例を示す図である。
【図１０】実施の形態２に係る制御分配部の割付け処理を示すフローチャートである。
【図１１】実施の形態５に係るプログラム生成装置の構成を示すブロック図である。
【図１２】プログラム生成装置のハードウェア構成を示すブロック図である。
【発明を実施するための形態】
【００１３】  ＜実施の形態１＞  本発明の実施の形態１に係るプログラム生成装置は、複数のコントローラと、それらと接続された入出力機器とからなる制御対象装置を制御するためのプログラムを生成する。制御対象装置には、例えば、工場用の生産装置（例えば半導体製造装置や自動機など）が適用される。
【００１４】  本実施の形態１に係るプログラム生成装置の詳細な説明の前に、コントローラの一種であるＦＡ用コントローラについて簡単に説明する。主に工場用の生産装置の制御に利用されるＦＡ用コントローラは、複数の入出力機器と接続され、それら機器を制御する。なお、入出力機器とは、例えばセンサやスイッチ等のコントローラへの入力機器や、表示灯やモータ等のコントローラからの出力信号に従って何らかの動作をする出力機器等である。
【００１５】  入出力機器同士の接続（接続部分）、及び、コントローラと入出力機器との接続（接続部分）は、総称してＩ／Ｏ（Input／Output）と呼ばれる。生産装置では、制御方法が異なる様々なＩ／Ｏを備えることから、Ｉ／Ｏのそれぞれを適切に制御可能にすべく、複数のコントローラを組合せることが多い。また、他装置のコントローラとの通信は、各コントローラに接続された入出力機器を利用して実現されることが多い。
【００１６】  装置の起動スイッチや表示灯などの離散的な事象に関するＩ／Ｏは、多数の機器が接続されるが、即時の制御は強く求められないため、Ｉ／Ｏの制御では、数ｍｓｅｃ程度の制御周期でも問題なく、その制御周期も一定性は強く求められない。一方、サーボモータの制御では、１００μｓｅｃ程度の一定で、かつ即時の制御が可能な制御周期で、サーボアンプへ指令値を送る必要がある。
【００１７】  前者の多数の離散的な事象に関するＩ／Ｏの制御では、ＰＬＣ（Programmable Logic Controller）と呼ばれるＦＡ用コントローラが用いられることが多い。ＰＬＣは、多くの機器を接続可能なように接続端子の拡張性に優れている。また、ＰＬＣは、多数の雑多な機器が接続可能なように、ベストエフォート型で制御周期が不定の処理方式と、複数の定周期での処理を並列的に実行可能な処理方式とを、実行可能に構成されていることが多い。
【００１８】  後者のサーボモータの制御では、サーボアンプに対して定周期で指令値を送る必要があり、モータの指令値生成には複雑な演算が必要なことから、サーボシステムコントローラと呼ばれるサーボモータの制御専用のＦＡ用コントローラが用いられることが多い。ただし、ＰＬＣの機能とサーボシステムコントローラの機能との両方を備えたＦＡ用コントローラが、サーボモータの制御に用いられることもある。
【００１９】  また、処理負荷や配線の都合から、複数のコントローラを使用する場合もある。生産装置の目標性能に対して、十分な処理性能が発揮できない場合には、複数のコントローラに処理を分散することで目標性能を確保することがある。また、コントローラと機器間の配線の長さを短くするために、コントローラを装置内に分散させて配置する場合もある。この場合には、コントローラ間は、例えば、Ethernet(登録商標)ベースのネットワークで接続することで、データ通信用の配線を減らすことができる。
【００２０】  さて、従来の一般的な生産装置に関するプログラムの設計及び制作では、先ず、タイミングチャートに基づいて、タクトタイムの検討と機械設計とを行う。続いて、タイミングチャートと、完成した機械設計とから定まる機械の動作設計を基に、コントローラと入出力機器との配線を含む電気設計を行う。最後に、各コントローラの制御設計を行う。
【００２１】  タイミングチャートに基づく上記のような設計は、経験や設計資産に基づくものであり、そのような設計では機構と動作とからタクトタイムを概算するに留まる。このため、タクトタイムの算出精度は高くない。また、機械の干渉などの検証も困難となっている。確度の高いタクトタイムの算出は、制御設計が完了する終盤段階で可能となり、目標性能を達成しない場合には、手直しの工数が多くなる。
【００２２】  一方、近年提案されているモデルベース開発環境では、設計の初期段階で、機械モデルと制御モデルとの両方を作成し、目標性能を満足するように機械モデルを制御することができるか否かを検証する。これによって、比較的早い段階で、目標性能を達成しない場合の手直しの工数を減らすことができる。なお、生産装置のタクトタイムを決める主要因は機械の動作時間であるため、設計の初期段階では、機械を動作させるだけの単純な制御モデルを作成することが多い。
【００２３】  ここで、制御モデルから、ＦＡ用コントローラでも処理できるプログラムに変換する技術は知られている。しかしながら、これは制御モデルと同じ振舞いをするプログラムを生成するだけに留まっている。つまり、機械を動作させるだけの単純な制御モデル、具体的には、各コントローラの設定情報並びにコントローラ及びＩ／Ｏの接続情報といった制約条件を含まない制御モデルから、ＦＡ用のコントローラでも処理できる制御プログラムを生成したとしても、制約条件等が考慮されていない制御プログラムなので、実際のコントローラで使用することはほぼできない。
【００２４】  よって、実際のコントローラで使用可能な制御プログラムにするためには、各コントローラの制約条件を満たすように制御モデルを、各コントローラの制御に分解する必要がある。さらに、異なるコントローラ間でデータのやり取りをする場合には、その間に通信用のプログラムを追加する必要がある。しかし、従来技術では、制御モデルの分解や、通信プログラムの追加は、各コントローラの仕様を理解した作業者が、生産装置の設計情報を基に手作業で行っており、その作業は困難であった。
【００２５】  これに対して、後述するように、本実施の形態１に係るプログラム生成装置は、各種の制約条件や設定条件を基に、実際のコントローラ構成やＩ／Ｏの接続情報といったものを無視して作成された制御モデル（コントローラモデル）を、実際のコントローラの構成に合わせて分割する機能と、通信用のプログラムを追加する機能とを有する。このため、本実施の形態１に係るプログラム生成装置によって、上述の実際のコントローラの構成に合わせて分解し、及び、通信用のプログラムの追加を行うことができるので、コントローラの仕様を理解してプログラムを生成するというユーザの作業を軽減することが可能となっている。
【００２６】  図１は、生産装置を制御するためのプログラムに変換可能な制御モデルの一例を示す図である。モデルベース開発のプログラミングでは、図１のようなグラフィカル言語でモデルを記述することが一般的である。
【００２７】  図１に示すように、制御モデルは、生産装置に関する複数の制御ブロックを接続して表現される。ここで、図１のＦｕｎ１〜５などの制御処理ブロック、図１のｉｎｐｕｔ１〜５などのｉｎｐｕｔ処理、及び、図１のｏｕｔｐｕｔ１〜３などのｏｕｔｐｕｔ処理などが、制御ブロックに含まれる。
【００２８】  以下の説明では、Ｆｕｎ１の制御処理ブロックを他の制御処理ブロックと区別する場合には「制御処理ブロックＦｕｎ１」と記載したり、Ｆｕｎ２〜５のそれぞれについても同様に記載したりする。
【００２９】  同様に以下の説明では、ｉｎｐｕｔ１のｉｎｐｕｔ処理を他のｉｎｐｕｔ処理と区別する場合には「ｉｎｐｕｔ１処理」と記載したり、ｉｎｐｕｔ２〜５のそれぞれについても同様に記載したりする。また同様に以下の説明では、ｏｕｔｐｕｔ１のｏｕｔｐｕｔ処理を他のｏｕｔｐｕｔ処理と区別する場合には「ｏｕｔｐｕｔ１処理」と記載したり、ｏｕｔｐｕｔ２，３のそれぞれについても同様に記載したりする。
【００３０】  さて、各制御処理ブロックには、複数の入力及び複数の出力が接続されることがある。入力及び出力が接続された制御処理ブロックは、入力と当該制御処理ブロックが保持する内部変数とに基づいて各種処理が行われ、その処理結果に基づいて出力及び内部変数の更新が行われる。
【００３１】  各制御処理ブロック間の矢印で表現された結線（接続線）は、各制御処理ブロック間のデータの入出力を表現する。制御処理ブロックへの入力は、制御処理ブロックの処理の開始及び選択、停止の少なくとも一つを制御するトリガー入力と、制御処理ブロックの処理で連続的に処理されるデータ入力と、の２通りが存在する。前者のトリガー入力は主に０／１のビット入力で表現され、後者のデータ入力は２値より大きい場合が多い。ただし、トリガー入力でも、処理の開始及び選択、停止を表現する場合などには、２値より大きくなる。定義によって、トリガー入力及びデータ入力の一方のみを、制御処理ブロックの入力に用いる場合もあるし、両方を制御処理ブロックの入力に用いる場合もある。例えば、両方を用いる場合としては、プログラム生成装置で予めパラメータ設定した数以下の離散値を取る場合にはトリガー入力を用い、それ以外の場合にはデータ入力を用いる場合などが挙げられる。
【００３２】  制御処理ブロックは階層化が可能であり、複数のブロックで記述されたモデルで各ブロックの中身を記述することも可能である。ブロック内の処理は、グラフィカル言語ではなく、Ｃ言語のようなテキストベースの手続き型言語で記述することも可能である。同様に、制御モデルも、グラフィカル言語以外で記述することが可能であり、異なる言語で記述された制御モデルを同時に実行するものとして、全体の制御モデルを定義することも一応は可能である。
【００３３】  制御モデル内のｉｎｐｕｔ処理（例えば図１のｉｎｐｕｔ１〜５）、及び、ｏｕｔｐｕｔ処理（例えば図１のｏｕｔｐｕｔ１〜３）は、設定によって、コントローラに接続された入出力機器の信号や他装置のコントローラとの通信信号に関連付けることが可能となっている。
【００３４】  図２は、本実施の形態１に係るプログラム生成装置の構成を示すブロック図である。図２のプログラム生成装置は、制御モデル入力部１と、設定情報入力部２と、制御分配部３と、通信機能追加部４とを備えている。制御モデル入力部１及び設定情報入力部２は、例えばキーボード、タッチパネルなどの各種入力装置または後述するソフトウェアなどが適用される。制御分配部３及び通信機能追加部４は、例えば後述するようにプロセッサがメモリに記憶されたプログラム等を実行することによって実現される。
【００３５】  制御モデル入力部１は、制御モデル（ここではユーザが設計した制御モデル）を受け付ける。つまり、制御モデル入力部１には制御モデル（ここではユーザが設計した制御モデル）が入力される。
【００３６】  先ず、制御モデルの設計の初期段階では、従来のモデルベース開発と同様に、図１のようなグラフィカル言語で、機械を動作させるだけの単純な制御モデルを作成し、機械モデルを制御してタクトタイム等の検討を行う。この時点では、タクトタイムの検証が主目的であるので、図３のように、正常系の機械動作のみを含む単純な制御モデルとなる。
【００３７】  目標性能を満足する見込みの制御モデルが作成された後は、図４のように、正常系の機械動作以外の制御も含んだ制御モデルを作成する。正常系の機械動作以外の制御とは、例えば、機械の原点復帰や停止動作等のエラー系の動作に関する制御や、機械の起動及び停止処理、各種スイッチや表示の入出力といった、生産装置に付加すべき種々の制御である。ただし、制御モデル入力部１に入力される制御モデルは、生産装置に付加すべき種々の制御の一部または全てを含まなくてもよい。さらには、制御モデル（複数の制御ブロック）を各コントローラに分解（分配）した後に、それら制御を各コントローラに個別に追加してもよい。以上のことを換言すれば、制御モデル入力部１には、図３の制御モデルが入力されてもよいし、図４の制御モデルが入力されてもよい。
【００３８】  なお、制御モデル入力部１に入力された制御モデル（複数の制御ブロック）は、後述するように各コントローラに分解（分配）される。このため、複数のコントローラの処理に関係するような制御処理については、制御モデル入力部１に入力される制御モデルに含めておくことが望ましい。
【００３９】  設定情報入力部２は、複数のコントローラの設定情報と、コントローラ同士の間の接続情報、及び、コントローラと入出力機器との間の接続情報（Ｉ／Ｏの接続情報）とを受け付ける。
【００４０】  コントローラの設定情報は、例えば、コントローラの制御周期を含む。設定情報はコントローラを実際に動作させる時の設定パラメータでもよいが、未確定である場合には制約条件を設定してもよい。例えば、制御周期であれば、設定パラメータとして実際に動作させる時の処理周期（例えば１ｍｓｅｃの一定周期）を設定してもよいし、制約条件として１ｍｓｅｃ以内には処理が完了するなどと設定してもよいし、制約条件は無いと設定してもよい。
【００４１】  コントローラ同士の間の接続情報は、例えば、コントローラの構成情報と、コントローラ間がどのようなネットワークで繋がれているかについての情報と、コントローラ間の通信の設定情報とを含む。
【００４２】  Ｉ／Ｏの接続情報は、例えば、他装置のコントローラとの通信も含めて、どのような機器がどのコントローラに接続されているかについての情報と、その機器とコントローラとの間でどのようなデータを通信するかについての情報と、そのデータがコントローラ内でどういった内部変数で処理されているかの情報とを含む。
【００４３】  制御分配部３は、制御モデル入力部１で受け付けた制御モデルと、設定情報入力部２で受け付けた設定情報及び接続情報とに基づいて、制御モデルの各制御ブロックをコントローラに割付ける。図５に、図４の制御モデルを制御分配部３によって各コントローラに割付けた（分配した）結果の一例を示す。
【００４４】  図５の例では、制御処理ブロックＦｕｎ１と、それに接続された定数と、ｉｎｐｕｔ１処理と、ｏｕｔｐｕｔ１処理と、ｉｎｐｕｔ４処理とが、ＰＬＣに割付けられ、それ以外はサーボシステムコントローラに割付けられている。なお以下の説明では、制御モデルの制御ブロックは、ＰＬＣ及びサーボシステムコントローラという２種類のコントローラに割付けられるものとして説明するが、もちろんコントローラの種類はこれらに限ったものではない。
【００４５】  図６は、本実施の形態１に係る制御分配部３の割付け処理を示すフローチャートである。
【００４６】  先ずステップＳ１にて、制御分配部３は、Ｉ／Ｏ接続判定処理を行う。具体的には、制御分配部３は、設定情報入力部２で受け付けたＩ／Ｏの接続情報から、制御モデル入力部１で受け付けた制御モデルのｉｎｐｕｔ処理及びｏｕｔｐｕｔ処理の中で、入出力機器に繋がっているものを抽出する。そして、制御分配部３は、抽出されたｉｎｐｕｔ処理とｏｕｔｐｕｔ処理とを、Ｉ／Ｏの接続情報が示す入出力機器に接続されたコントローラに割付ける。図５の例では、このステップＳ１にてｉｎｐｕｔ１処理、ｉｎｐｕｔ４処理、及び、ｏｕｔｐｕｔ１処理がＰＬＣに割付けられ、その他のｉｎｐｕｔ処理及びｏｕｔｐｕｔ処理はサーボシステムコントローラに割付けられていたことになる。
【００４７】  ステップＳ２にて、制御分配部３は、出力機器での制約判定処理を行う。具体的には、制御分配部３は、ステップＳ１でｏｕｔｐｕｔ処理が割付けられたコントローラ（図５の例ではＰＬＣ及びサーボシステムコントローラ）の中で、最も制御処理の制約条件が厳しいコントローラを抽出できるか否かを判定する。ここで、制御分配部３は、例えば、設定情報入力部２で入力されたコントローラの設定情報または制約条件において制御周期が最も短い場合、または、既に他の制御処理が多く割付けられており制御処理能力として余裕がない（例えば割付けた制御処理負荷が閾値以上である）場合などに、制約条件が厳しいと判定する。なお制御分配部３は、一つまたは複数の要因に基づいて制約条件が厳しいか否かを判定してもよい。この結果、最も制御処理の制約条件が厳しいコントローラは、追加で割付け可能な制御処理が少ないコントローラを指すことになる。
【００４８】  上述のステップＳ２にてコントローラを抽出できると判定した場合にはステップＳ３（制御ブロック接続判定処理１）に進み、抽出できないと判定した場合にはステップＳ４（入力機器での制約判定処理）に進む。
【００４９】  ステップＳ３にて、制御分配部３は、制御ブロック接続判定処理１を行う。具体的には、制御分配部３は、ステップＳ２で抽出されたコントローラに割付けられたｏｕｔｐｕｔ処理に接続されている制御処理ブロックを、ステップＳ２で抽出されたコントローラに割付ける。ただし、この割付けは、当該制御処理ブロックの割付け先が既に決まっている場合には行わない。続いて、制御分配部３は、今回新規にコントローラに割付けられた制御処理ブロックに関して、データ入力側に接続されている制御処理ブロックの中で、割付け先が決まっていない制御処理ブロックを、ステップＳ２で抽出されたコントローラに割付ける。
【００５０】  図７は、ステップＳ３における制御分配部３の処理の一例を示す図である。図７の例では、制御処理ブロックＦｕｎＸは、制御処理ブロックＦｕｎＹに関してデータ入力側に接続され、制御処理ブロックＦｕｎＹは、ｏｕｔｐｕｔＺ処理に接続されている。そして、ｏｕｔｐｕｔＺ処理は、ＰＬＣというコントローラに既に割付けられているが、制御処理ブロックＦｕｎＸ及び制御処理ブロックＦｕｎＹはいずれも、どのコントローラにもまだ割付けられていないものとする。
【００５１】  この場合、ステップＳ３で、制御分配部３は、制御処理ブロックＦｕｎＹを、ｏｕｔｐｕｔＺ処理のコントローラ（ＰＬＣ）に割付ける。続いて、制御分配部３は、制御処理ブロックＦｕｎＸを、制御処理ブロックＦｕｎＹのコントローラ（ＰＬＣ）に割付ける。
【００５２】  制御分配部３は、以上のような、新規に割付けられた制御処理ブロックからの割付け処理を、再帰的に繰返す。そして、新規に制御処理ブロックをコントローラに割付けることができなくなったらステップＳ３を終了して、ステップＳ２に戻る。
【００５３】  ステップＳ３からステップＳ２に戻った場合、制御分配部３は、ステップＳ１でｏｕｔｐｕｔ処理が割付けられたコントローラの中で、前回のステップＳ２で抽出したコントローラの次に制約条件が厳しいコントローラを抽出できるか否かを判定する。そして、抽出できると判定した場合にはステップＳ３（制御ブロック接続判定処理１）に進み、抽出できないと判定した場合にはステップＳ４（入力機器での制約判定処理）に進む。ここで抽出できないと判定される場合としては、全てのｏｕｔｐｕｔ処理がコントローラに割付けられた場合などが想定される。
【００５４】  ステップＳ４にて、制御分配部３は、入力機器での制約判定処理を行う。具体的には、制御分配部３は、ステップＳ１でｉｎｐｕｔ処理が割付けられたコントローラの中で、最も制御処理の制約条件が厳しいコントローラを抽出できるか否かを判定する。なお、制約条件が厳しいか否かの判定は、ステップＳ２（出力機器での制約判定処理）と同様であるものとするが、必ずしも完全に同一でなくてもよい。
【００５５】  上述のステップＳ４にてコントローラを抽出できると判定した場合にはステップＳ５（制御ブロック接続判定処理２）に進み、抽出できないと判定した場合にはステップＳ６（制御処理ブロックでの制約判定処理）に進む。
【００５６】  ステップＳ５にて、制御分配部３は、制御ブロック接続判定処理２を行う。具体的には、制御分配部３は、ステップＳ４で抽出されたコントローラに割付けられたｉｎｐｕｔ処理に接続されている制御処理ブロックを、ステップＳ４で抽出されたコントローラに割付ける。ただし、この割付けは、当該制御処理ブロックの割付け先が既に決まっている場合には行わない。続いて、制御分配部３は、今回新規にコントローラに割付けられた制御処理ブロックに関して、データ出力側に接続されている制御処理ブロックの中で、割付け先が決まっていない制御処理ブロックを、ステップＳ４で抽出されたコントローラに割付ける。制御分配部３は、以上のような、新規に割付けられた制御処理ブロックからの割付け処理を、再帰的に繰返す。そして、新規に制御処理ブロックをコントローラに割付けることができなくなったらステップＳ５を終了して、ステップＳ４に戻る。
【００５７】  ステップＳ５からステップＳ４に戻った場合、制御分配部３は、ステップＳ１でｉｎｐｕｔ処理が割付けられたコントローラの中で、前回のステップＳ４で抽出したコントローラの次に制約条件が厳しいコントローラを抽出できるか否かを判定する。そして、抽出できると判定した場合にはステップＳ５（制御ブロック接続判定処理２）に進み、抽出できないと判定した場合にはステップＳ６（制御処理ブロックでの制約判定処理）に進む。ここで抽出できないと判定される場合としては、全てのｉｎｐｕｔ処理がコントローラに割付けられた場合などが想定される。
【００５８】  ステップＳ６にて、制御分配部３は、制御処理ブロックでの制約判定処理を行う。具体的には、制御分配部３は、既にコントローラに割付けられている制御処理ブロックの中で、コントローラに割付けられていない別の制御処理ブロックが接続されている制御処理ブロックを抽出できるか否かを判定する。
【００５９】  上述のステップＳ６にて制御処理ブロックを抽出できると判定した場合には、抽出された制御処理ブロックの中で、最も制約条件が厳しいコントローラに割付けられている制御処理ブロックを抽出してから、ステップＳ７（制御ブロック接続判定処理３）に進む。一方、ステップＳ６にて抽出できないと判定した場合にはステップＳ８（未接続の制約判定処理）に進む。
【００６０】  ステップＳ７にて、制御分配部３は、制御ブロック接続判定処理３を行う。具体的には、制御分配部３は、ステップＳ６で抽出された制御処理ブロックに接続された別の制御処理ブロックを、ステップＳ６で抽出された制御処理ブロックのコントローラに割付ける。ただし、この割付けは、別の制御処理ブロックの割付け先が既に決まっている場合には行わない。続いて、制御分配部３は、今回新規にコントローラに割付けられた別の制御処理ブロックと接続されているさらに別の制御処理ブロックの中で、割付け先が決まっていない制御処理ブロックを、ステップＳ６で抽出された制御処理ブロックのコントローラに割付ける。
【００６１】  図８は、ステップＳ７における制御分配部３の処理の一例を示す図である。図８（ａ）の例では、ｉｎｐｕｔＰ処理及び制御処理ブロックＦｕｎＺは、制御処理ブロックＦｕｎＸに接続され、制御処理ブロックＦｕｎＸは、制御処理ブロックＦｕｎＹに接続されている。そして、制御処理ブロックＦｕｎＺ以外は、ＰＬＣというコントローラに既に割付けられているが、制御処理ブロックＦｕｎＺは、どのコントローラにもまだ割付けられていないものとする。
【００６２】  この場合、ステップＳ７で、制御分配部３は、制御処理ブロックＦｕｎＺを、制御処理ブロックＦｕｎＸのコントローラ（ＰＬＣ）に割付ける。なお、図８（ａ）の処理は、ステップＳ３の制御ブロック接続判定処理１と似ているが、制御ブロック接続判定処理１はｏｕｔｐｕｔ処理を起点にしてデータ入力側に向かって行われるのに対して、図８の処理は制御処理ブロックを起点にしてデータ入力側にもデータ出力側にも向かって行われる点が異なる。
【００６３】  また、図８（ｂ）の例では、制御処理ブロックＦｕｎＸは、制御処理ブロックＦｕｎＹに接続され、制御処理ブロックＦｕｎＹは、制御処理ブロックＦｕｎＺ及びｏｕｔｐｕｔＱ処理に接続されている。そして、制御処理ブロックＦｕｎＺ以外は、ＰＬＣというコントローラに既に割付けられているが、制御処理ブロックＦｕｎＺは、どのコントローラにもまだ割付けられていないものとする。
【００６４】  この場合、ステップＳ７で、制御分配部３は、制御処理ブロックＦｕｎＺを、制御処理ブロックＦｕｎＹのコントローラ（ＰＬＣ）に割付ける。なお、図８（ｂ）の処理は、ステップＳ５の制御ブロック接続判定処理２と似ているが、制御ブロック接続判定処理２はｉｎｐｕｔ処理を起点にしてデータ出力側に向かって行われるのに対して、図８の処理は制御処理ブロックを起点にしてデータ入力側にもデータ出力側にも向かって行われる点が異なる。
【００６５】  制御分配部３は、以上のような、新規に割付けられた制御処理ブロックからの割付け処理を、再帰的に繰返す。そして、新規に制御処理ブロックをコントローラに割付けることができなくなったらステップＳ７を終了して、ステップＳ６に戻る。
【００６６】  ステップＳ７からステップＳ６に戻った場合、制御分配部３は、上述と同様に、既にコントローラに割付けられている制御処理ブロックの中で、コントローラに割付けられていない別の制御処理ブロックが接続されている制御処理ブロックを抽出できるか否かを判定する。制御処理ブロックを抽出できると判定した場合には、当該制御処理ブロックの中で、最も制約条件が厳しいコントローラに割付けられている制御処理ブロックを抽出してから、ステップＳ７（制御ブロック接続判定処理３）に進む。一方、ステップＳ６にて抽出できないと判定した場合にはステップＳ８（未接続の制約判定処理）に進む。
【００６７】  ステップＳ８にて、制御分配部３は、未接続での制約判定処理を行う。具体的には、制御分配部３は、まだコントローラに割付けられていない制御処理ブロックの中から、一つの制御処理ブロックを適当な判断基準に基づいて抽出できるか否かを判定する。ここで、適当な判断基準には、例えば、制御処理ブロックに含まれる処理負荷が比較的高い順であるとか、制御処理ブロック内で処理されるグローバル変数の数が比較的多い順であるとか、単純に制御処理ブロックに割付けられた識別番号順などが適用される。制御分配部３は、適当な判断基準を、単一の条件で判断してもよいし、複数の条件を組合せて判断してもよい。なお、グローバル変数とは、一般に、制御モデルにおいて制御処理ブロックと接続されていない、制御モデル内の任意の箇所から、当該制御処理ブロックにアクセス可能にする変数であり、アクセス可能な範囲を限定した変数も含む。
【００６８】  上述のステップＳ８にて制御処理ブロックを抽出できないと判定した場合には、図６の処理を終了する。
【００６９】  一方、ステップＳ８にて制御処理ブロックを抽出できると判定した場合には、制御分配部３は、抽出された制御処理ブロックを割付けるべきコントローラを、適当な判断基準に基づいて抽出する。ここで、適当な判断基準には、例えば、最も制約条件が緩いコントローラであること、抽出された制御処理ブロックで使用されているグローバル変数を参照している他の制御処理ブロックが多く割付けられているコントローラであることなどが適用される。制御分配部３は、適当な判断基準を、単一の条件で判断してもよいし、複数の条件を組合せて判断してもよい。その後、ステップＳ９（制御ブロック接続判定処理４）に進む。以上のステップＳ８の処理により、ステップＳ９に進む場合には、制御処理ブロックとコントローラとが抽出された状態となっている。
【００７０】  ステップＳ９にて、制御分配部３は、制御ブロック接続判定処理４を行う。具体的には、制御分配部３は、ステップＳ８で抽出された制御処理ブロックを、ステップＳ８で抽出されたコントローラに割付ける。続いて、制御分配部３は、今回新規にコントローラに割付けられた制御処理ブロックと接続されている別の制御処理ブロックの中で、割付け先が決まっていない制御処理ブロックを、ステップＳ８で抽出されたコントローラに割付ける。制御分配部３は、以上のような、新規に割付けられた制御処理ブロックからの割付け処理を、再帰的に繰返す。そして、新規に制御処理ブロックをコントローラに割付けることができなくなったらステップＳ９を終了して、ステップＳ８に戻る。
【００７１】  以上の一連の処理によって、制御分配部３は、制御モデル内の全ての制御処理ブロックをコントローラに分配する。
【００７２】  図２の通信機能追加部４は、割付けられた制御モデルにおいて、異なるコントローラに割付けられた第１及び第２の制御ブロック同士が接続されている場合に、その接続部分（接続線）に通信用制御ブロックを追加する。
【００７３】  図９は、図５のように割付けられた制御モデルに対する、通信機能追加部４の処理結果の一例を示す図である。図９に示されるように、ＰＬＣに割付けられた制御処理ブロックＦｕｎ１及びｉｎｐｕｔ４処理のそれぞれと、サーボシステムコントローラに割付けられた制御処理ブロックＦｕｎ３との間に、通信用制御ブロックであるデータ通信処理が、通信機能追加部４によって追加されている。
【００７４】  なお、データ通信処理には、異なるコントローラ間でデータ通信処理を行うための各種処理が含まれており、例えば各コントローラの内部変数を通信用の内部変数に割付ける処理などが含まれる。この際、通信機能追加部４は、設定情報入力部２で受け付けたコントローラの接続情報に基づいて、通信用の内部変数の割付けを行ってもよい。
【００７５】  これまでの処理によって、制御モデル内の全ての制御ブロックはコントローラに割付けられ、異なるコントローラに割付けられた制御ブロック同士の接続部分には通信用制御ブロックが配置された制御モデル（例えば図９のような制御モデル）が得られる。
【００７６】  その後、作業者などのユーザは、制御モデルを、ＦＡ用コントローラでも処理可能なプログラムに変換する既知の技術を用いて、コントローラ毎に割付けられた制御ブロックを各コントローラ用のプログラムに変換する。以上により、ユーザが入力した、コントローラの制約条件を無視した制御モデルと、コントローラの制約条件であるコントローラの設定情報と、コントローラ及びＩ／Ｏの接続情報とから、各コントローラの制御プログラムを生成することができる。
【００７７】  ＜実施の形態１のまとめ＞  以上のような本実施の形態１に係るプログラム生成装置によれば、制御モデル入力部１で受け付けた制御モデルと、設定情報入力部２で受け付けた設定情報及び接続情報とに基づいて、制御モデルの各制御ブロックをコントローラに割付け、割付けられた制御モデルにおいて、異なるコントローラに割付けられた第１及び第２の制御ブロック同士が接続されている場合に、その接続部分に通信用制御ブロックを追加する。これにより、コントローラの制約条件を無視した制御モデルから、各コントローラ向けのプログラムに変換可能な制御モデルを概ね自動的に生成することができる。この結果、コントローラの仕様を理解してプログラムを生成するというユーザの作業を軽減することができる。
【００７８】  なお、本実施の形態１で説明した制御分配部３の処理は一例であり、判定処理の条件や順番など、これに限定されるものではない。また本実施の形態１は、制御分配部３や通信機能追加部４の後に、ユーザが制御モデルを調整することを制限するものではない。
【００７９】  また、本実施の形態１では、制御ブロック接続判定処理１，２，３，４は、新規にコントローラに割付けられた制御処理ブロックがある限り、再帰的にコントローラへの割付け処理を実行したが、途中で各制約判定処理に移行してもよい。そして、各制約判定処理では、再度、各コントローラの制約条件の厳しさを判定してコントローラを抽出してもよい。また、各制約判定処理では、制約条件の厳しさの判定結果から、コントローラへの割付け禁止処理や、禁止処理の解除を行ってもよい。
【００８０】  ＜実施の形態２＞  本発明の実施の形態２に係るプログラム生成装置のブロック構成は、実施の形態１のブロック構成（図２）と同様である。以下、本実施の形態２に係るプログラム生成装置のうち、実施の形態１と同じまたは類似する構成要素については同じ参照符号を付し、異なる構成要素について主に説明する。
【００８１】  実施の形態１では、制御分配部３は、コントローラに割付けられた制御モデル（制御ブロック）の割付けを変更しない。しかし、制御分配部３で、制御モデル内の全ての制御ブロックをコントローラに割付けた段階で、何れかのコントローラが制御周期などの制約条件を満たせない場合には、割付けを見直して変更することが望ましい。
【００８２】  そこで本実施の形態２では、設定情報は、複数のコントローラが満たすべき制約条件を含み、制御分配部３は、コントローラに割付けられた制御モデルが、設定情報入力部２で受け付けた設定情報に含まれる制約条件を満たさない場合に、制御モデルにおける制御ブロックの割付けを変更するように構成されている。具体的には、制御分配部３は、コントローラに割付けられた制御ブロックの割付けを解除すること、及び、制御モデル全体を鑑みて再帰的に最適なコントローラへの割付けを行うことを、再帰的に行う。
【００８３】  図１０は、本実施の形態２に係る制御分配部３の割付け処理を示すフローチャートである。なお、図１０においては、図６に示したものと同様の処理を行うステップにはそれと同一符号を付し、異なる部分について主に以下説明する。
【００８４】  図１０に示すように、本実施の形態２に係る制御分配部３の処理には、図６のステップＳ９の後に、制約条件判定処理がステップＳ１１として追加されている。
【００８５】  ステップＳ１１（制約条件判定処理）にて、制御分配部３は、制御ブロックを各コントローラに割付けた結果が、設定情報入力部２で入力された各コントローラの設定情報内の各コントローラの制約条件を満たしているか否かを判定する。例えば、各コントローラに割付けられた制御ブロックを処理する場合に、制約条件である制御周期を満しているかなどを判定する。
【００８６】  ステップＳ１１にて全ての制約条件を満たしていると判定した場合には、制御分配部３は、ステップＳ１１を終了して、図１０の処理も終了する。一方、ステップＳ１１にて全ての制約条件を満たしていると判定しなかった場合には、制御分配部３は、制約条件を満たしていないコントローラに割付けられた制御ブロックについて、そのコントローラへの割付けを解除する。図１０の例では、割付け解除後にはステップＳ２に戻る。ただし、割付け解除後の再度の割付け処理では、解除された制御ブロックが、解除前と同じコントローラに割付けられることは禁止された状態で、割付け処理（以下「禁止付き割付け処理」と記す）が行われるものとする。
【００８７】  なお、図では示していないが、再帰的に予め定められた回数探索しても、全ての制約条件を満足する割付けが得られなかった場合には、制約条件を満足していないというエラーメッセージをユーザに通知するとともに、図１０の処理を終了してもよい。
【００８８】  以上、図１０を用いてコントローラへの割付け解除の一例について説明したが、コントローラへの割付け解除はこれに限ったものではなく、例えば、割付けられた順序の逆順で割付けの解除が行われてもよい。具体的には、ステップＳ１１で全ての制約条件を満たしていると判定しなかった場合には、制御分配部３は、ステップＳ９（制御ブロック接続判定処理４）で割付けられた全ての制御ブロックについて割付けの解除を行って、禁止付き割付け処理（再度のステップＳ９など）を行う。そして、上述と同様にステップＳ１１を行う。再度のステップＳ９及びステップＳ１１を、予め定められた回数行っても、全ての制約条件を満足していると判定しなかった場合には、ステップＳ７（制御ブロック接続判定処理３）で割付けられた全ての制御ブロックについて割付けの解除を行って、禁止付き割付け処理（再度のステップＳ７など）を行う。以下同様に、ステップＳ１１で全ての制約条件を満たしていると判定されない限りにおいて、ステップＳ５、ステップＳ３の順に遡って割付けの解除及び禁止付き割付け処理を行う。
【００８９】  他にも、トリガー入力による接続をデータ入力による接続より優先して解除するようにしてもよい。トリガー入力は離散的なイベントを通知するものが多く、他コントローラに割付けても問題ないことが多いからである。なお以上の説明では、制御分配部３は、制御ブロック接続判定処理１，２，３，４のそれぞれで割付けられた「全ての制御ブロック」について割付けの解除を行うとして説明した。しかしこれに限ったものではなく、各制御ブロック接続判定処理の中でも、割付けられた順の逆順に制御ブロックの割付けの解除を行い、禁止付き割付け処理を実行するようにしてもよい。
【００９０】  ＜実施の形態２のまとめ＞  以上のような本実施の形態２に係るプログラム生成装置によれば、コントローラに割付けられた制御モデルが、設定情報入力部２で受け付けた設定情報に含まれる制約条件を満たさない場合に、制御ブロックの割付けを変更する。したがって、制約条件を満たす最適な割付けを再帰的に探索することができる。
【００９１】  ＜実施の形態３＞  本発明の実施の形態３に係るプログラム生成装置のブロック構成は、実施の形態１のブロック構成（図２）と同様である。以下、本実施の形態３に係るプログラム生成装置のうち、実施の形態１と同じまたは類似する構成要素については同じ参照符号を付し、異なる構成要素について主に説明する。
【００９２】  本実施の形態３では、図９に示したデータ通信処理（通信用制御ブロック）が、上述の第１の制御ブロック及び上述の第２の制御ブロックのいずれか一方から出力された通信データに、制御周期（通信同期）に関するデータ処理を行ってから他方に入力する機能を含んでいる。そして、通信機能追加部４は、制御モデル入力部１で受け付けた制御モデルと、設定情報入力部２で受け付けた設定情報とに基づいて、データ通信処理（通信用制御ブロック）で行うべき上記データ処理を決定するように構成されている。
【００９３】  例えば、コントローラの制御周期が異なる場合、通信機能追加部４は、通信データの送受信漏れを防止する目的、または、通信データを利用した制御の性能を向上する目的などを目的として、データ通信処理にデータ処理を追加する。
【００９４】  以下、制御周期が長い長周期コントローラＡと、制御周期が短い短周期コントローラＢとに関して、通信機能追加部４によるデータ処理の決定の一例について説明する。短周期コントローラＢが、長周期コントローラＡにパルスデータを送信する場合、通信データの送受信漏れを防止するために、通信機能追加部４は、長周期コントローラＡが受信するまで短周期コントローラＢからの通信データを保持する処理を、データ通信処理で行うべき上述のデータ処理として決定する。逆に、短周期コントローラＢが、長周期コントローラＡからパルスデータを受信する場合、通信機能追加部４は、長周期コントローラＡからの通信データをパルス化する処理を、データ通信処理で行うべき上述のデータ処理として決定する。また、短周期コントローラＢが、長周期コントローラＡからの通信データを連続変化量として処理することが求められる場合には、通信機能追加部４は、長周期コントローラＡからの通信データを補間する処理を、データ通信処理で行うべき上述のデータ処理として決定する。
【００９５】  以上のように、データ通信処理（通信用制御ブロック）で、どのようなデータ処理を行うかは、通信機能追加部４が、コントローラの設定条件と、データ通信処理が接続される制御ブロックの入出力データの種類とに基づいて決定する。
【００９６】  ＜実施の形態３のまとめ＞  以上のような本実施の形態３に係るプログラム生成装置によれば、制御モデル入力部１で受け付けた制御モデルと、設定情報入力部２で受け付けた設定情報とに基づいて、データ通信処理（通信用制御ブロック）で行うべきデータ処理を決定する。これにより、ユーザによる通信用のプログラムの追加作業を軽減することができる。
【００９７】  ＜実施の形態４＞  本発明の実施の形態４に係るプログラム生成装置のブロック構成は、実施の形態１のブロック構成（図２）と同様である。以下、本実施の形態４に係るプログラム生成装置のうち、実施の形態１と同じまたは類似する構成要素については同じ参照符号を付し、異なる構成要素について主に説明する。
【００９８】  制御ブロック間のデータ通信は、通常は制御モデルにおける制御ブロック同士間の接続でプログラミングされる。しかし、制御モデル全体のグローバル変数を定義して、そのグローバル変数へのアクセスによって制御ブロック間で通信するようにプログラミングされる場合がある。グローバル変数へのアクセスは制御ブロック内の処理や、他のプログラム言語で記述された処理内で行われるため、制御ブロックの接続情報としては表現されない。
【００９９】  本実施の形態４に係るプログラム生成装置では、このような場合でもプログラムを作成することが可能となっている。具体的には、制御モデルは、第３の制御ブロック、及び、グローバル変数によって第３の制御ブロックとデータの送受信が可能であり、第３の制御ブロックと接続されていない第４の前記制御ブロックを含んでいる。そして、通信機能追加部４は、図９のような制御モデルにおいて、第３の制御ブロックが割付けられたコントローラと第４の制御ブロックが割付けられたコントローラとが異なる場合に、第３の制御ブロックが割付けられたコントローラと第４の制御ブロックが割付けられたコントローラとの間のデータ通信処理を追加するように構成されている。
【０１００】  より具体的には、通信機能追加部４は、各コントローラに割付けられた制御ブロック内のグローバル変数を抽出し、グローバル変数は同じで互いにアクセス可能であるがコントローラが異なる複数の制御ブロックが存在するかを判定する。そして、通信機能追加部４は、そのような複数の制御ブロックが存在すると判定した場合には、コントローラの接続情報に基づいて、コントローラ間の通信プログラム（データ通信処理）を追加する。この通信プログラムは、例えば、他の制御ブロックと接続されていない独立の制御ブロックとして追加してもよいし、制御ブロックを接続するプログラム言語以外のプログラムで追加されてもよいし、コントローラのパラメータ設定として追加されてもよい。ただし、上記通信プログラムは、これらの方法に限定されるものではない。
【０１０１】  ＜実施の形態４のまとめ＞  以上のような本実施の形態４に係るプログラム生成装置によれば、制御モデルでは接続されていないがグローバル変数によってデータを送受信可能な第３及び第４の制御ブロックにおいて、第３の制御ブロックが割付けられたコントローラと第４の制御ブロックが割付けられたコントローラとが異なる場合に、第３の制御ブロックが割付けられたコントローラと第４の制御ブロックが割付けられたコントローラとの間のデータ通信処理を追加する。これにより、ユーザによる通信用のプログラムの追加作業を軽減することができる。
【０１０２】  ＜実施の形態５＞  図１１は、本発明の実施の形態５に係るプログラム生成装置の構成を示すブロック図である。図１１のプログラム生成装置は、実施の形態１に係るプログラム生成装置（図２）に加えて、入力指定部５を備えている。入力指定部５は、制御モデルの制御ブロックを割付けるべきコントローラを、外部入力（ユーザ入力）によって指定することが可能となっている。なお、入力指定部５は、例えばキーボード、タッチパネルなどの各種入力装置または後述するソフトウェアなどが適用される。
【０１０３】  割付けるコントローラを指定したい制御ブロックがある場合には、ユーザは、入力指定部５を用いて制御モデル上で指定する。この指定は、制御分配部３に入力される前の制御モデルに対して行ってよいし、制御分配部３の出力結果に対して、手動で割付けるコントローラの再割付けを行ってもよい。また、手動で再割付けを行った制御モデルを再度、制御分配部３に入力してもよい。
【０１０４】  ＜実施の形態５のまとめ＞  以上のような本実施の形態４に係るプログラム生成装置によれば、制御ブロックを割付けるコントローラをユーザが手動で指定する機能を有することから、ユーザは詳細な設計を行うことができる。
【０１０５】  ＜その他＞  以上に説明したプログラム生成装置における制御モデル入力部１、設定情報入力部２、制御分配部３、通信機能追加部４の各機能は、処理回路により実現される。すなわち、プログラム生成装置は、制御対象装置に関する複数の制御ブロックを接続して表現される、プログラムに変換可能な制御モデルを受け付け、複数のコントローラの設定情報と、コントローラ同士の間、及び、コントローラと入出力機器との間の接続情報とを受け付け、受け付けた制御モデルと、受け付けた設定情報及び接続情報とに基づいて、制御モデルの各制御ブロックをコントローラに割付け、割付けられた制御モデルにおいて、異なるコントローラに割付けられた第１及び第２の制御ブロック同士が接続されている場合に、その接続部分に通信用制御ブロックを追加するための処理回路を備える。処理回路は、メモリに格納されるプログラムを実行する図１２のようなプロセッサ９１である。このプロセッサ９１は、ＣＰＵ（Central Processing Unit）、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサ、ＤＳＰを含む。
【０１０６】  制御モデル入力部１、設定情報入力部２、制御分配部３、通信機能追加部４の機能は、ソフトウェア、ファームウェア、またはソフトウェアとファームウェアとの組み合わせにより実現される。ソフトウェアやファームウェアはプログラムとして記述され、図１２のようなメモリ９２に格納される。処理回路は、メモリに記憶されたプログラムを読み出して実行することにより、各部の機能を実現する。すなわち、プログラム生成装置は、処理回路により実行されるときに、制御対象装置に関する複数の制御ブロックを接続して表現される、プログラムに変換可能な制御モデルを受け付けるステップと、複数のコントローラの設定情報と、コントローラ同士の間、及び、コントローラと入出力機器との間の接続情報とを受け付けるステップと、受け付けた制御モデルと、受け付けた設定情報及び接続情報とに基づいて、制御モデルの各制御ブロックをコントローラに割付けるステップと、割付けられた制御モデルにおいて、異なるコントローラに割付けられた第１及び第２の制御ブロック同士が接続されている場合に、その接続部分に通信用制御ブロックを追加するステップが結果的に実行されることになるプログラムを格納するためのメモリを備える。また、これらのプログラムは、制御モデル入力部１、設定情報入力部２、制御分配部３、通信機能追加部４の手順や方法をコンピュータに実行させるものであるともいえる。ここで、メモリとは、例えば、ＲＡＭ、ＲＯＭ、フラッシュメモリー、ＥＰＲＯＭ、ＥＥＰＲＯＭ等の、不揮発性または揮発性の半導体メモリや、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等が該当する。なお、実施の形態５で説明した入力指定部５も、制御モデル入力部１などと同様に構成される。
【０１０７】  なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略したりすることが可能である。
【０１０８】  本発明は詳細に説明されたが、上記した説明は、すべての態様において、例示であって、本発明がそれに限定されるものではない。例示されていない無数の変形例が、本発明の範囲から外れることなく想定され得るものと解される。
【符号の説明】
【０１０９】  １  制御モデル入力部、２  設定情報入力部、３  制御分配部、４  通信機能追加部、５  入力指定部。
【要約】  ユーザの作業を軽減可能な技術を提供することを目的とする。プログラム生成装置は、制御分配部（３）と、通信機能追加部（４）とを備える。制御分配部（３）は、制御モデル入力部（１）で受け付けた制御モデルと、設定情報入力部（２）で受け付けた設定情報及び接続情報とに基づいて、制御モデルの各制御ブロックをコントローラに割付ける。通信機能追加部（４）は、割付けられた前記制御モデルにおいて、異なる前記コントローラに割付けられた第１及び第２の前記制御ブロック同士が接続されている場合に、その接続部分に通信用制御ブロックを追加する。【図１】
0005911044.tif 000002
【図２】
0005911044.tif 000003
【図３】
0005911044.tif 000004
【図４】
0005911044.tif 000005
【図５】
0005911044.tif 000006
【図６】
0005911044.tif 000007
【図７】
0005911044.tif 000008
【図８】
0005911044.tif 000009
【図９】
0005911044.tif 000010
【図１０】
0005911044.tif 000011
【図１１】
0005911044.tif 000012
【図１２】
0005911044.tif 000013