(57)【要約】【課題】  基準となる「親」のプログラム部品に対し、同種の他の「子」のプログラム部品を簡単に同期運転を実行することができるループコントローラを提供すること【解決手段】  時間経過に伴い出力値を求めるプログラム部品を備えたプログラマブルコントローラ用のループコントローラであり、そのプログラム部品は、同一種の物を複数備えるとともに、その複数のプログラム部品の１つが親となり、他のプログラム部品が子となるように設定し、記親に設定されたプログラム部品は、通常のプログラム運転を実行する。子に設定されたプログラム部品は、親のプログラム部品を特定する特定情報（アドレス）を有し、その特定情報に基づき、対応する親のプログラム部品から、実行中の時間データをコピーして取得し、その取得した親の時間データに基づいてプログラムを実行する機能を備えた。【選択図】        図６
2006048184.tif 000002
【特許請求の範囲】
【請求項１】
プログラムパターンが設定され、それを実行して出力値を求めるプログラム部品を備えたプログラマブルコントローラ用のループコントローラであって、
前記プログラム部品は、同一種の物が複数備えるとともに、その複数のプログラム部品の１つが親となり、他のプログラム部品が子となるように設定され、
前記親に設定されたプログラム部品は、通常のプログラム運転を実行するようにし、
前記子に設定されたプログラム部品は、前記親のプログラム部品を特定する特定情報（アドレス）を有し、その特定情報に基づき、対応する親のプログラム部品から、同期に必要な情報を取得する手段と、その取得した情報を元に親のプログラム部品のプログラム実行に同期をとって自身のプログラム運転を行うようにしたことを特徴とするループコントローラ。
【請求項２】
前記プログラムパターンは、時間経過に伴い出力値を求めるものであり、
前記子に設定されたプログラム部品は、対応する親のプログラム部品に対して設定されたプログラムパターンの時間データをコピーして取得し、その取得した親の時間データに基づいてプログラムを実行することを特徴とする請求項１に記載のループコントローラ。
【請求項３】
前記時間データは、時間軸を複数のステップに分割して構成され、
親のプログラム部品に対して任意のステップを指定し、その指定したステップからプログラムの実行を行なうことができるようにしたことを特徴とする請求項１または２に記載のループコントローラ。
【請求項４】
前記子に設定されたプログラム部品は、独立してプログラム実行を停止する機能を備えたことを特徴とする請求右１から３のいずれか１項に記載のループコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラマブルコントローラに実装されるループコントローラに関するもので、特に、同一種の複数のプログラム部品（ファンクションブロック）を実行可能とした物において、それら複数の風呂グラム部品の同期をとるようにした技術に関する。
【背景技術】
【０００２】
生産工場（製造現場）に設置されるＦＡ（ファクトリーオートメーション）システムの制御をつかさどるＰＬＣ（プログラマブルロジックコントローラ）は、制御プログラムに基づいて演算実行するＣＰＵユニット、センサやスイッチなどの入力機器を接続してそれらのオンオフ信号を入力信号として取り込む入力ユニット、アクチュエータやリレーなどの出力機器を接続してそれらに対して出力信号を送り出す出力ユニット、上位端末装置などと接続してそれと情報をやりとりする通信ユニット、各ユニットに電源を供給する電源ユニット、など複数のユニットを組み合わせることにより構成されている。そしてＰＬＣは、入力ユニットで入力した信号をＣＰＵユニットのＩ／Ｏメモリに取り込み（ＩＮリフレッシュ処理）、予め登録されたラダー言語で組まれた制御プログラムに基づき論理演算をし（プログラム演算実行処理）、その演算実行結果をＩ／Ｏメモリに書き込んで出力ユニットに送り出し（ＯＵＴリフレッシュ処理）、その後、ネットワーク接続された上位端末装置や表示器等と通信する（周辺サービス処理）、といった各処理をサイクリックに繰り返す。
【０００３】
ところで、ＣＰＵユニットは、通常、上記したユーザプログラムを格納するＲＡＭやシステムプログラムを格納するＲＯＭや、上記した演算処理等を実行するＭＰＵや、演算実行する際に使用するＲＡＭ（共有メモリ，Ｉ／Ｏメモリ，ワークメモリ）等を備えて構成される。これに対し、ＣＰＵユニット内に、インテリジェントな高機能ボードである特殊機能モジュールを着脱可能に実装したタイプのものもある。このように高機能ボードと同様の機能をＰＬＣを構成する別途のユニットとして実現した高機能ユニットもある。このように、ＣＰＵユニット無いに実装するボードタイプや、別構成のユニットタイプのいずれにおいても、そこにおいて実行される基本的な機能は同じである。
【０００４】
この高機能モジュール（ボードタイプ），高機能ユニットで行う制御の一つとしては、例えば、温度等のアナログ値を受け、ＰＩＤ制御を行う等の専用のプロセス制御（アナログ制御）のプログラムを実施する機能を持つものや、時間と出力を折れ線で設定したウェイト機能付きの折れ線プログラム（時間の経過に伴い予め設定した折れ線（一次関数で特定される値を求め、設定値・目標値等の出力値として出力するプログラム）を実行するものなど、各種のものがある。上述したごとく、これらの高機能でインテリジェントな機能を実現する機器は、ＣＰＵユニット内に実装するボードタイプと、別体のユニットがあるが、本明細書では、それらを総称してループコントローラと称する。
【０００５】
これらループコントローラは、ＣＰＵユニットの演算処理とは非同期に所定の制御を実行することにより、制御の高速化・高度化を図ることができるようになっている。また、ループコントローラは、自らの運転状態をＣＰＵユニットのＩ／Ｏメモリ上に常に反映させている。
【０００６】
さらに、ループコントローラを実際に使用するには、まず、予め用意された上記の各種の制御・機能を実現するためのプログラム部品（ファンクションブロック）の中から使用するプログラムを選択するとともに、そのプログラムを動作させるのに必要なパラメータを設定する。例えば、折れ線プログラムの場合、制御パターンとなる折れ線を特定するため、各ステップの時間軸条件（時間幅，単位等）と、各ステップの最終目標設定値（出力値）等を入力する。これにより、各ステップの最終も熊表設定値を、ステップの順に結ぶことにより制御パターンとなる折れ線が生成される。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
１つのループコントローラ内には、複数の種・或いは同一種の複数個のプログラム部品を実装することができる。この場合に、実行タイミングが来ると予め決定した適宜の順で、各プログラム部品を実行させることになる。これにより、例えば図１に示すように、工業炉１の内部の温度をループコントローラで制御するようなことができる。すなわち、工業炉で１は、炉自体が大きいため、１個の熱源を用いて工業炉１の内部全体の温度を制御しようとすると、温度ムラが発生してしまう。そこでこれを防止するために、通常複数の熱源を用いることにより、温度を均一にする。この熱源を制御するために、例えば折れ線プログラムを用いた目標値（設定温度）を指定するが、温度ムラを加味した目標値とする必要があり、熱源ごとにそれぞれに適した目標値を設けるとともに、時間の経過によって各目標値を変更させる。これにより、図１に示すように、必ずしも全ての熱源を制御する折れ線プログラムの制御パターンが一致しないが、結果として工業炉１の内部の温度ムラを可及的に抑制できるようになる。
【０００８】
このように複数のプログラムを同時に実行させることにより、温度ムラの抑制を図ることが可能となる。この温度ムラの抑制を図るためには、上記の複数の熱源を制御するプログラム部品（たとえば折れ線プログラムを実行するファンクションブロック）のプログラム運転を同期させる必要がある。しかし、従来、ファンクションブロックを同期をさせるための特別な機能はなく、プログラムの進行を一時停止したり、強制的に進めたりするといった時間進行に変化を与えるような操作を実行する場合には、すべてのプログラムに対して同時に係る指令を与えるようにしていた。
【０００９】
ところで、このようにプログラム進行の一時停止や、強制的に進めたりする範囲の操作であれば、その指令をすべてのプログラムに同時に与えることで同期をとることは可能である。しかし、基準となるプログラム運転においてＰＶスタート（運転開始時のＰＶ（ｐｒｅｓｅｎｔ  ｖａｌｕｅ）と一致するポイントからプログラム運転を開始する機能）させ、他のプログラム運転も同じ開始時刻より、運転を開始するような要求に応えることは難しく、実現するためには、ユーザプログラムによって、他のプログラム運転の開始位置を修正するといった対応が必要であった。
【００１０】
さらに、従来方式では、同期対象のプログラムのパラメータを設定するに際し、全てのプログラムに対して同一の時間設定を行なう必要があり、仮に、係る設定を間違えると同一タイミングで目的とする目標値の変更ができず同期運転と同等の処理・効果が得られなくなる。さらには、ステップの時間設定を変更する場合には、全てのプログラムパターンに対して係る変更を行なう必要があり、非常に煩雑である。
【００１１】
この発明は、基準となるプログラム部品に対し、簡単に同期運転を実行することができるループコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明に係るループコントローラは、プログラムパターンが設定され、それを実行して出力値を求めるプログラム部品を備えたプログラマブルコントローラ用のループコントローラであって、前記プログラム部品は、同一種の物が複数備えるとともに、その複数のプログラム部品の１つが親となり、他のプログラム部品が子となるように設定され、前記親に設定されたプログラム部品は、通常のプログラム運転を実行するようにし、前記子に設定されたプログラム部品は、親のプログラム部品を特定する特定情報（アドレス）を有し、その特定情報に基づき、対応する親のプログラム部品から、同期に必要な情報を取得する手段と、その取得した情報を元に親のプログラム部品のプログラム実行に同期をとって自身のプログラム運転を行うようにした。
【００１３】
このようにすると、例えば親のプログラム部品が停止・一時停止したりすると、このプログラム部品も同期して停止したり・一時停止したりする。つまり、ユーザ等からの指示は、親のプログラム部品に対して行なうだけで、それに関連する全ての子のプログラム部品も停止する。
【００１４】
前記プログラムパターンは、時間経過に伴い出力値を求めるものであり、前記子に設定されたプログラム部品は、対応する親のプログラム部品に対して設定されたプログラムパターンの時間データをコピーして取得し、その取得した親の時間データに基づいてプログラムを実行するようにすることもできる。
【００１５】
さらに、前記時間データは、時間軸を複数のステップに分割して構成され、親のプログラム部品に対して任意のステップを指定し、その指定したステップからプログラムの実行を行なうことができるようにすることができる。
【００１６】
このようにすると、子の時間デーは親の時間データと等しくなるため、親に対する時間経過を一時停止したり、強制的に進めたりした場合には、自動的に子の時間データも同一タイミングで変更することができ、どうかを簡単かつ確実にとることができる。
【００１７】
つまり、プログラム運転のプログラムパターンを設定するプログラム部品（ファンクションブロック）に対して、親か子かの設定をしておくことで、時間進行に関わる操作は親に対してのみ実行すれば良い。ステップ時間の変更も親に対してのみ実行すれば良い。基準となるプログラム運転においてＰＶスタートをさせた場合でも自動的に同期運転ができる。
【００１８】
また、前記子に設定されたプログラム部品は、独立してプログラム実行を停止する機能を備えるとよい。本発明は、基本的には親のプログラム部品の動作に同期してこのプログラム部品も動作するため、親のプログラム部品が実行されれば、このプログラム部品も実行され、親のプログラム部品が停止すればこのプログラム部品も停止する。たとえは、ある子のプログラム部品により制御される制御対象二位所等が生じた場合、子のプログラムを単独で停止する機能を備えていると、係る場合に迅速かつ影響のあるもののみ停止できる。
【発明の効果】
【００１９】
本発明では、基準となるプログラム部品に対し、同種の他のプログラム部品を簡単に同期運転を実行することができる。
【発明を実施するための最良の形態】
【００２０】
図２は、本発明のループコントローラが実装されるＰＬＣ１０の一例を示している。ＰＬＣ１０は、複数のユニットを連結して構成されている。すなわち、電源ユニット１１と、ＣＰＵユニット１２と、アナログ入力ユニット１３と、アナログ出力ユニット１４と、その他の所定のユニット１５とを備えている。もちろん、ＰＬＣの構成は、図示するものに限ることなく、必要に応じて所望のユニットを追加接続可能である。本実施の形態では、ループコントローラ２０は、ＣＰＵユニット１２のスロット１２ａに実装するインナーボードタイプである。もちろん、ユニット形式として実現しても良い。
【００２１】
また、ＣＰＵユニット１２には、ＲＳ２３２Ｃなどのシリアルインタフェース１２ｂを備え、そのシリアルインタフェース１２ｂにツール４０を接続すると、そのツール４０を介してＣＰＵユニット１２のユーザメモリ，Ｉ／Ｏメモリ等のデータメモリにユーザプログラムや各種のパラメータを書き換えすることができる。本発明との関係でいうと、ループコントローラ２０で使用するファンクションブロックの指定や、そのファンクションブロック（プログラム）を実行するのに必要なパラメータ等をＣＰＵユニット１２のデータモリに格納し、インナーバスを介してループコントローラ２０がデータメモリに格納されたデータを取得し、所定の機能（プログラム）を実行する。
【００２２】
図３は、ループコントローラ２０の内部構成を示している。このループコントローラ２０は、外部インタフェースとしては、ＲＳ２３２Ｃポート２１を有している。このＲＳ２３２Ｃポート２１は、温度調節器などと直接シリアル通信するためのポートであり、入出力可能となっている。また、外部に対する報知機能として、ＬＥＤ２２も備えている。このＬＥＤ２２は、ＣＰＵユニット１２とのバスが確立していることや、ファンクションブロックやシミュレーション機能が動作中であることや、ＲＳ２３２Cポート２１経由で、データ通信していることなどを示すものである。また、実装されたＣＰＵユニット１２との間でデータの送受をするためのインナーバスインタフェース２３も備えている。このインナーバスインタフェース２３を介してＣＰＵユニット１２のデータメモリとの間でデータ更新を行う。
【００２３】
具体的なデータ交換は、ＣＰＵユニットメモリアクセス機能２４や外部メッセージ通信処理部２５が実行し、上記のバスインタフェース２３を介して所定のデータを送受する。すなわち、外部メッセージ通信処理部２５は、専用ツールからのパラメータ設定や、パラメータ読出を行うための、メッセージコマンドをＣＰＵユニット１２経由で受信し、それに対するレスポンスデータを送信する機能を有する。つまり、パラメータ設定のメッセージコマンドは、受信機能で受信し、受信したパラメータをパラメータ設定処理部２６に渡す。すると、パラメータ設定処理部２６は、外部メッセージ通信処理部２５（受信機能）から取得したパラメータを記憶素子（ＳＲＡＭ）２７に格納する。また、外部メッセージ通信処理部２５が受信したメッセージがパラメータ読出の場合、受信機能からパラメータ設定処理部２６を介して記憶素子２７に格納された指定されたパラメータを読み出し、外部メッセージ通信処理部２５の返信機能がレスポンスとしてその読み出したパラメータを返信する。また、記憶素子２７はＳＲＡＭで揮発性メモリであるため、そこに記憶されたパラメータは、ＦＲＯＭバックアップ機能２８により読み出し、不揮発性記録素子（ＦＲＯＭ）２９に記憶する。
【００２４】
ＣＰＵユニットメモリアクセス機能２４は、ＣＰＵユニット間バス経由で、１ワード単位で、データ送受信できる手段である。これによりＣＰＵユニット１２上のデータメモリ（Ｉ／Ｏメモリ）とのデータ交換を行う。すなわち、たとえばアナログ入力ユニット１３を介して取得した入力データがＣＰＵユニット１２のデータメモリ（Ｉ／Ｏメモリ）に格納されるため、それをＣＰＵユニットメモリアクセス機能２４の入力インタフェース２４ａを介して取得し、ファンクションブロック３１に与える。また、ファンクションブロック３１により実行して得られた演算結果を指定値（指令値・設定値）は、ＣＰＵユニットメモリアクセス機能２４の出力インタフェース２４ｂからバスインタフェース２３を介してＣＰＵユニット１２のデータメモリに書き込まれる。
【００２５】
ファンクションブロック実行処理部３１は、実装された所定のファンクションブロックを実行するものである。ファンクションブロックとしては、折れ線プログラムブロック，ＰＩＤブロック，オンオフ制御ブロック，警報ブロック，四則演算ブロックなどがある。専用ツールにより自由にプログラミングできる。さらに、ファンクションブロック実行処理部３１にて実際に各ファンクションブロックを実行する際には、記憶素子（ＳＲＡＭ）２７上にあるパラメータを用いて、各種処理を行う。
【００２６】
なお、ファンクションブロック実行処理部３１に格納された各ファンクションブロック（プログラム部品）は、ファンクションブロックプログラム管理部３０からのコール命令を受けて実行される。このコール命令は、内部クロック３０ａにより予め設定されたスキャン周期に来たならば、そのファンクションブロック管理部３０が発行する。
【００２７】
図４は、ループコントローラ２０を含むＰＬＣ１０の内部構造並びに外部の装置等との接続形態の概略を示している。この図では、取得してデータの流れ・転送状態を中心に、必要な要素を図示して説明している。このＰＬＣ１０では、ループコントローラ（ループコントロールボード）２０を内蔵するＣＰＵユニット１２と、アナログ入力ユニット（ＡＤユニット）１３と、アナログ出力ユニット（ＤＡユニット）１４を接続している。そして、実際の制御対象４１に設置したセンサから、例えば液面，圧力，温度などのアナログデータを取得するとともに、アナログ入力ユニット（ＡＤユニット）１３のＩ／Ｏメモリ１３ａの所定エリアに格納する。このＩ／Ｏメモリ１３ａに格納されたデータ（ＡＤ変換値（入力））は、Ｉ／Ｏバス１０ａを介してＣＰＵユニット１２のＩ／Ｏメモリ１２ｃの所定エリアに転送される。
【００２８】
ループコントローラ２０は、予め設定されたＣＰＵユニット１２のＩ／Ｏメモリ１２ｃの所定エリアを定期的にアクセスして取得するため、そのＩ／Ｏメモリ１２ｃに格納されたＡＤ変換値（入力）は、ＣＰＵユニット１２のインナーバス１２ｂを介して入力インタフェース２４ａが取得し、ファンクションブロック実行処理部３１に渡す。ここでは、係るＡＤ変換値（入力）を、ＰＩＤ制御を実行するＰＩＤブロックに対し、入力値として渡している。ＰＩＤブロックは、与えられた入力値に基づきＰＩＤ演算を行なう。そして、算出して得られた出力値は、出力インタフェース２４ｂを介してインナーバス１２ｂ経由でＣＰＵユニット１２のＩ／Ｏメモリ１２ｃに格納する。この格納されたデータがアナログ出力ユニット（ＤＡユニット）１４のＩ／Ｏメモリ１４ｂに転送され、制御対象４１のバルブの開度などの指令値として出力される。このようにすることにより、アナログデータに基づくＰＩＤ制御が行なわれる。
【００２９】
ファンクションブロック実行処理部３１で実行されるファンクションブロックは、上記のＰＩＤブロック以外にも各種の物があることはすでに説明したとおりであり、例えば折れ線プログラムを実行するファンクションブロックの場合、演算実行中は、内部タイマなどに従って逐次演算処理をし、その結果を出力インタフェース２４ｂを介してＩ／Ｏメモリ１２ｃに書き込むことで、アナログ出力ユニット１４のＩ／Ｏメモリ１４ａに転送され、そのアナログ出力ユニット１４に接続された熱源となるヒータ等の動作の制御を行なうことになる。そして、入力インタフェース２４ａを介しては、例えば、演算処理の開始タイミングの指示や、ウェイト指示や、スキップ（別のステップに飛ぶ）などの動作時間軸の変更命令などを受ける。
【００３０】
次に、折れ線プログラムにおいて設定するパラメータについて説明する。折れ線プログラムは、例えば図５に示すように、時間経過（横軸）にともない縦軸の指令値が一時直線で変化する折れ線で表現され、各折れ点（頂点，谷点）ごとにステップに分けられる。その結果、通常複数のステップ（図ではＡ１からＡ６）を有し、１つのステップ内では一次関数で定義することができる。そして、設定するパラメータとしては、例えば、横軸の時間に関する条件として、ステップごとに、時間幅や、時間単位（秒、分、時間）等を設定する。また、各ステップの終了時の出力値（指令値）の目標値（Ｂ０，Ｂ１，Ｂ３，…）や最終折れ点、その他各種のパラメータを設定する。すると、１つの前のステップの終了時の出力値は、現在のステップの開始時の出力値と言うことになる。そして、各ステップの任意の場所における指令値は以下の式により求めることができる。
Ｙ１＝（Ｔ１＊（Ｂｎ）−Ｂ（ｎ−１））／Ｔ２＋Ｂ（ｎ−１）      （１）
Ｙ１：(プログラム出力値)
Ｔ１：ステップ内経過時間タイマ
Ｔ2：ステップ時間幅
B（ｎ）：ステップ(n)の目標値
ｎ：実行中ステップＮｏ．
【００３１】
なお、係る演算処理を実行する間隔（周期）をスキャン周期等としてパラメータ登録をする。このスキャン周期は、ファンクションブロック管理部３０が持つ内部クロック３０ａにより管理し、指定されたスキャン周期に来ると、該当するファンクションブロックに対して実行命令（ＣＡＬＬ）する。
【００３２】
また、実際の動作中に与えられる命令にともなう機能としては、一時停止命令や、ウェイト命令や、ステップ移行指令等がある。一時停止命令は、図５中に示す時間停止指令（Ｓ２）であり、この指令がＯＮの間、指令値を保持する。ウェイト命令を受けると、出力の値をそのステップの最終値にするとともに、指定されたウェイト幅（これも、パラメータとして予め設定される）だけその値を保持する。その後次のステップに移行して時間計測を開始し、時間経過に伴う出力値の折れ線変化を行なう。例えば、図５におけるステップＡ１の途中でウェイト命令を受けると、出力値をＢ１にするとともに、そのＢ１の値をウェイト幅だけ保持（ホールド）し、その後、つぎのＡ２ステップに移行し、上記の式（１）で規定される時間経過に伴う出力値Ｙ１を求め、出力する処理を行なうステップ以降異例は、文字通り指定されたステップに飛び、その後、時間計測を開始し、そのステップにおいて時間経過に伴う出力値の折れ線変化を行なう物である。例えば、頭５のＡ１のステップの実行中にＡ５のステップの移行命令を受けると、Ａ５のステップに飛び、そのＡ５ステップを実行する。もちろん、上述した機能は基本的な動作であり、それらを組み合わせたり、さらに別の機能も備えている。
【００３３】
ここで本発明では、同期運転させるプログラムについては、親子関係を持たせるようにした。そし、「親」ブロックについては、通常のパラメータの設定を行ない、従来と同様の処理に従い動作させる。これに対し、「子」ブロックは、時間軸の設定以外は通常のパラメータ（各ステップの目標値，スキャン周期等）の設定を行なう。そして、時間軸の設定を行なわない代わりに、「親」ブロックを特定する特定情報として「親」ブロックが格納・設定されるブロック番地（アドレス）を登録する。そして、「子」ブロックは、自己が実行する際の基準となる時間軸は、関連する親ブロックからの時間情報を取得し、そのときの時刻を自己の経過時間と設定した。つまり、「子」ブロックでは、時間軸に関する情報は、パラメータ登録せず、常に、関連得る親ブロックの時間軸についての情報（現在、実行中のステップＮｏ．，そのステップでの経過時間，一時停止指令や、ウェイト命令等を受けていないかなど）を取得し、取得した時間軸についての情報を自己の時間軸に設定し、それに基づいて上述した式（１）に基づいてその「子」ブロックについての出力値を演算し、出力する。
【００３４】
具体的には、「子」ブロックは、図６に示すフローチャートを実行する。なお、コールを受けた「親」ブロックは、通常の処理（従来公知の処理）をする。ファンクションブロック管理部３０は、各ファンクションブロックに設定されたスキャン周期に来たら、そのファンクションブロックに対して実行命令としてコールをする。従って、各ファンクションブロックは、そのコールを受けるのを待つ（Ｓ１１）。なお、このファンクション管理部３０からコール命令は、全てのファンクションブロックに対して一斉に行なわれるわけではなく、所定の順（例えばアドレス順）で実行されることになる。従って、図７に示すように、まず「親」ブロックに対してコール命令が与えられ、それが実抗されると、順次子ブロックに対してコール命令がなされる。従って、各「子」ブロックは、直前の実行された「親」ブロックの時間軸情報を取得し、それをすぐに反映して追従等することができる。
【００３５】
コールを受けた「子」ブロックは、「親」ブロック正当性を確認する（Ｓ１２）。すなわち、その子ブロックのパラメータの１つとして設定されている親ブロックのブロック番地（アドレス）に登録されている、親ブロックが自己と同じ「折れ線プログラム」であるか否かを確認する。異なって入れば異常となり、実行エラーコードをメモリの所定エリアに登録する（Ｓ２２）。なお、この所定エリアに右登録されエラーコードは、所定のタイミングでＣＰＵユニットに呼び出され、ファンクションブロックごと操作のミスや設定値ミスをユーザに知らせることができる。
【００３６】
「親」ブロックの正当性が確認されたならば、「親」ブロックに設定されたスキャン周期と、自己に設定されたスキャン周期が一致するか否かを確認する（Ｓ１３）。異なるときは、実行エラーとなり、所定のエラー度を登録する（Ｓ２２）。
【００３７】
両者のスキャン周期が一致すれば、次は、「親」ブロック運転開始状況を確認する（Ｓ１３）。すなわち、「子」ブロックは、「親」ブロックと同期して運転するため、「親」ブロックの動作指令がＯＮになって動作開始（運転中）であるか否かを判断する。動作指令がＯＮの場合には、対応する「親」ブロックも運転しているため、それに合わせて「子」ブロックも運転にする（Ｓ１４）。つまり、その「子」ブロックに対する動作指令もＯＮにする。そして「子」ブロックが運転開始していることを確認する（Ｓ１５）。「子」ブロックに対して停止命令等が発せられている場合には、ステップ２３に飛び、その「子」ブロックのみ停止する。
【００３８】
「子」ブロックが運転中であれば、ついで、「親」ブロックが正常運転をしているか確認する（Ｓ１６）。すなわち、「親」ブロックが実行エラーになっていないことを確認する。もし実行エラーになっている場合には、ステップＳ２２に飛び、実行エラーコードの登録を行なう。
【００３９】
さらに、「親」ブロックが正常運転している場合には、「親」ブロックの間時間軸停止中華否かを判断する（Ｓ７）。すなわち、「親」ブロックに対する時間軸停止指令がＯＮになっているか否かを判断する。「親」ブロックの時間軸停止指令がＯＮとなり、停止しているときは、「子」ブロックもプログラムを一時停止させる（Ｓ１８））。
【００４０】
一方、「親」ブロックが時間軸停止指令も受けておらず、正常に動作している場合には、「親」ブロック進捗状態を複写する（Ｓ２０）。すなわち、「親」ブロックについての経過時間出力値（動作指令ＯＮからの経過時間），ステップ出力値（実行中のステップＮｏ．を示す），経過時間単位（時間軸（横軸）の単位），時間軸停止指令（プログラム運転を一時停止させる指令），最終折れ点到達（プログラムが最終ポイントまで実行したことを示す情報），ウェイトに関する情報（ウェイト中か否か、ウェイト幅等），各ステップの時間幅（横軸）及び時間軸（横軸）の単位を設定ならびにステップ実行中フラグ（現在実行中のステップを示すフラグ）を取得する。
【００４１】
ついで、「子」ブロックの出力値を計算する（Ｓ２１）。すなわち、ステップＳ２０で取得した情報に基づき、「親」ブロックが現在どのステップを実行中で、そのステップにおける経過時間や、運転状況（一時停止，ウエイトの有無）等がわかおる。そこで、下記式に必要な情報を代入し、現在の出力を求める。
Ｙ1＝（Ｔ１＊（Ｂｎ）−Ｂ（ｎ−１））／Ｔ２＋Ｂ（ｎ−１）      （１）
Ｙ1：(プログラム出力値)
Ｔ１：ステップ内経過時間タイマ
Ｔ2：ステップ時間幅
Ｂ（ｎ）：ステップ（ｎ）の目標値
n：実行中ステップＮｏ．
【００４２】
ここで目標値Ｂ（ｎ），Ｂ（ｎ−１）は、その「子」ブロックに対して予めパラメータとして設定された値であり、Ｔ１，Ｔ２，nが「親」ブロックから取得したデータである。
【００４３】
また、ステップ１３，１５の分岐判断にて「親」ブロックが運転停止していたり、「子」ブロックが運転開始しない場合には、ステップ２３に飛び、「子」ブロック・リセット処理をする。具体的には、「親」ブロック、「子」ブロックの動作指令がＯＦＦのとき、すなわち、プログラム出力値，経過時間出力値（動作指令ＯＮからの経過時間を示す），ステップ出力値（実行中のステップＮｏ．を示す），(時間軸停止指令（プログラム運転を一時停止させる指令），最終折れ点到達（プログラムが最終ポイントまで実行したことを示す情報），ウェイト中等の変数を0クリアする。
【００４４】
図６に示すフローチャートを、毎スキャンごとに行なう。これにより、例えばオペーレータが制御（目標値の変更を停止）をする際にも、「親」ブロックのみ対象に停止をすれば、「子」の時間も停止する。さらに、従来であれば、各制御対象（例えば熱源）の目標値の変更を同期させるプログラムを制御するためのプログラムを構築する必要があるが。本機能を使えば、基準となる「親」ブロックを指定するだけで、親に対して操作すれば、子ブロックも時間を同期して動作することができる。
【００４５】
また、「子」ブロックは「親」ブロックの時間軸に同期して動作するため、例えば、下り勾配ステップ（例えば図５のＡ２やＡ６などのステップ）で、電断したときに、再開時に、その下り区間のステップから、再開させたいという要求がある場合に、「親」ブロックに対して再開時の開始ステップ（例えばＡ６）を指定して実行すると、「子」ブロックもそれに追従して下り勾配ステップのＡ６から実行することができる。
【図面の簡単な説明】
【００４６】
【図１】ループコントローラが実行する複数のプログラム部品（ファンクションブロック）が同期して動作させる必要性がある制御対象の一例を示す図である。
【図２】本発明が適用されるプログラマブルコントローラの一例を示す図である。
【図３】本発明に係るループコントローラの好適な一実施の形態を示す図である。
【図４】本発明に係るループコントローラの好適な一実施の形態を示す図である。
【図５】折れ線プログラムを説明する図である。
【図６】「子」の折れ線プログラム（ファンクションブロック）の機能を説明するフローチャートである。
【図７】各ファンクションブロックの実行順を説明するフローチャートである。
【符号の説明】
【００４７】
１０  ＰＬＣ
１１  電源ユニット
１２  ＣＰＵユニット
１３  アナログ入力ユニット
１４  アナログ出力ユニット
２０  ループコントローラ
３０  ファンクションブロック管理部
３１  ファンクションブロック実行処理部
４０  ツール
【図１】
2006048184.tif 000003
【図２】
2006048184.tif 000004
【図３】
2006048184.tif 000005
【図４】
2006048184.tif 000006
【図５】
2006048184.tif 000007
【図６】
2006048184.tif 000008
【図７】
2006048184.tif 000009