(57)【特許請求の範囲】
【請求項１】
複数のプログラマブルコントローラを通信手段を介して相互に接続してなるプログラマブルコントローラシステムであって、
前記プログラマブルコントローラのそれぞれには、
それぞれユーザの作成するアプリケーションプログラムであるプログラムブロックを１又は２以上に亘り格納可能なユーザプログラムメモリと、センサやスイッチなどに接続される入力装置と、モータやアクチュエータなどに接続される出力装置とを組み合わせた入出力装置との間でやり取りされる入出力パラメータを格納するための入出力メモリと、中央演算装置とが含まれており、かつ、
前記中央演算装置においては、前記ユーザプログラムメモリに格納されたプログラムブロックを順次に読み出して実行するプログラム実行処理を含むプログラムブロック運転処理と、前記入出力装置と入出力メモリとの間で入出力パラメータの更新を行う入出力リフレッシュ処理と、前記通信手段を介して他のプログラマブルコントローラとの間でコマンドやレスポンスのやり取りを行うためのネットワーク処理とが、サイクリックに実行されるように仕組まれており、
前記プログラムブロックのそれぞれは、プログラムブロック識別子と、入出力パラメータ指定データと、プログラムブロック本体とを含んでおり、かつ
前記プログラムブロック実行処理は、
前記ユーザプログラムメモリから読み出されるプログラムブロックが前記プログラムブロック識別子に基づいてノーマルプログラムブロックと識別されたときには、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入力パラメータを前記入出力メモリから読み出して一次記憶させると共に、この一次記憶させた入力パラメータを使用して、前記プログラムブロック本体を構成する命令コード列に従った実行処理を行って出力パラメータを生成して一次記憶すると共に、実行処理の終了を待って、一次記憶された出力パラメータを、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入出力メモリ内の出力パラメータを書き替える第１のプログラムブロック実行処理と、
前記ユーザプログラムメモリから読み出されるプログラムブロックが前記プログラムブロック識別子に基づいて入出力パラメータ送受信プログラムブロックと識別されときには、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入力パラメータを前記入出力メモリから読み出し、これを前記プログラムブロック本体を構成するプログラマブルコントローラのアドレスおよびプログラムブロックＩＤ番号から構成される相手先プログラム位置情報と前記入力パラメータの送信先である相手先プログラムブロックの相手先入力パラメータ位置情報とを含むデータ送信コマンドとしてネットワーク上に送信する一方、前記相手先プログラム位置情報で指定されるプログラマブルコントローラがこれを受信し、前記入力パラメータを相手先グラムブロックの相手先入力パラメータへ書き込み処理を完了したことを示す正常レスポンスをネットワーク上に送信し、前記入出力パラメータ送受信プログラムブロックがそのレスポンスを受信したときには、前記入出力パラメータ指定データで指定される入出力メモリの出力パラメータを前記プログラムブロック本体を構成する前記相手先プログラム位置情報と前記相手先出力パラメータ位置情報とを含むデータ受信コマンドをネットワーク上に送信し、前記相手先プログラム位置情報で指定されるプログラマブルコントローラが前記受信コマンドを受信するとその相手先プログラムブロックのプログラムブロック本体を構成する命令コード列に従った実行処理結果である相手先出力パラメータの値を正常レスポンスとしてネットワーク上に送信し、前記入出力パラメータ送受信プログラムブロックがそのレスポンスを受信すると前記入出力パラメータ指定データで指定される入出力メモリの出力パラメータとして書き替える第２のプログラムブロック実行手段とを含み、
それにより、ユーザプログラムメモリ中に入出力パラメータ送受信プログラムブロックを含ませることにより、当該プログラマブルコントローラのノーマルプログラムブロックの実行の際に、他のプログラマブルコントローラの入出力メモリから取得した入出力パラメータの値を使用可能とした、ことを特徴とするプログラマブルコントローラシステム。
【請求項２】
それぞれユーザの作成するアプリケーションプログラムであるプログラムブロックを１又は２以上に亘り格納可能なユーザプログラムメモリと、センサやスイッチなどに接続される入力装置と、モータやアクチュエータなどに接続される出力装置とを組み合わせた入出力装置との間でやり取りされる入出力パラメータを格納するための入出力メモリと、中央演算装置とが含まれており、かつ、
前記中央演算装置においては、前記ユーザプログラムメモリに格納されたプログラムブロックを順次に読み出して実行するプログラム実行処理を含むプログラムブロック運転処理と、前記入出力装置と入出力メモリとの間で入出力パラメータの更新を行う入出力リフレッシュ処理と、前記通信手段を介して他のプログラマブルコントローラとの間でコマンドやレスポンスのやり取りを行うためのネットワーク処理とが、サイクリックに実行されるように仕組まれており、
前記プログラムブロックのそれぞれは、プログラムブロック識別子と、入出力パラメータ指定データと、プログラムブロック本体とを含んでおり、かつ
前記プログラムブロック実行処理は、
前記ユーザプログラムメモリから読み出されるプログラムブロックが前記プログラムブロック識別子に基づいてノーマルプログラムブロックと識別されたときには、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入力パラメータを前記入出力メモリから読み出して一次記憶させると共に、この一次記憶させた入力パラメータを使用して、前記プログラムブロック本体を構成する命令コード列に従った実行処理を行って出力パラメータを生成して一次記憶すると共に、実行処理の終了を待って、一次記憶された出力パラメータを、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入出力メモリ内の出力パラメータを書き替える第１のプログラムブロック実行処理と、
前記ユーザプログラムメモリから読み出されるプログラムブロックが前記プログラムブロック識別子に基づいて入出力パラメータ送受信プログラムブロックと識別されときには、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入力パラメータを前記入出力メモリから読み出し、これを前記プログラムブロック本体を構成するプログラマブルコントローラのアドレスおよびプログラムブロックＩＤ番号から構成される相手先プログラム位置情報と前記入力パラメータの送信先である相手先プログラムブロックの相手先入力パラメータ位置情報とを含むデータ送信コマンドとしてネットワーク上に送信する一方、前記相手先プログラム位置情報で指定されるプログラマブルコントローラがこれを受信し、前記入力パラメータを相手先グラムブロックの相手先入力パラメータへ書き込み処理を完了したことを示す正常レスポンスをネットワーク上に送信し、前記入出力パラメータ送受信プログラムブロックがそのレスポンスを受信したときには、前記入出力パラメータ指定データで指定される入出力メモリの出力パラメータを前記プログラムブロック本体を構成する前記相手先プログラム位置情報と前記相手先出力パラメータ位置情報とを含むデータ受信コマンドをネットワーク上に送信し、前記相手先プログラム位置情報で指定されるプログラマブルコントローラが前記受信コマンドを受信するとその相手先プログラムブロックのプログラムブロック本体を構成する命令コード列に従った実行処理結果である相手先出力パラメータの値を正常レスポンスとしてネットワーク上に送信し、前記入出力パラメータ送受信プログラムブロックがそのレスポンスを受信すると前記入出力パラメータ指定データで指定される入出力メモリの出力パラメータとして書き替える第２のプログラムブロック実行手段とを含み、
それにより、ユーザプログラムメモリ中に入出力パラメータ送受信プログラムブロックを含ませることにより、当該プログラマブルコントローラのノーマルプログラムブロックの実行の際に、他のプログラマブルコントローラの入出力メモリから取得した入出力パラメータの値を使用可能とした、ことを特徴とするプログラマブルコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ネットワーク等の通信手段を介して複数のプログラマブルコントローラと少なくとも１つのサポートツールとを相互に接続したプログラマブルコントローラシステムに係り、特に、アプリケーションプログラムを複数のプログラムブロックに分割して複数のプログラマブルコントローラに分散格納することによりシステムの柔軟性を確立するとともに負荷分散を図ったプログラマブルコントローラシステムに関する。
【０００２】
【従来の技術】
昨今のネットワーク技術の発達により、設備や装置を制御するためのプログラマブルコントローラ（以下、コントローラという）においても通信速度を含むコントローラ間の情報伝達能力は飛躍的に向上してきている。
【０００３】
また、コントローラの低コスト化、小サイズ化により、複数のコントローラを通信により接続したシステム構成は、高速で大型のコントローラ１台によるシステムと比較しても、コスト面でもスペース効率面でも遜色ないような状況になってきている。
【０００４】
この種の制御システムにおいてネットワークを使って複数のコントローラを分散接続すると、以下のようなメリットが生じる。
【０００５】
１）ハードウエアの構成上と配置上、システム構築に柔軟性が生じるため、設備や装置等の組み替えが容易である。
【０００６】
２）処理が複数のコントローラに負荷分散されるため、個々のコントローラに求められる性能が抑えられ、安価なコントローラを利用できる。
【０００７】
３）コントローラの故障の際でも、システムを構成するコントローラが複数に分かれているため、システムダウンする範囲が一部にとどめられ、システム全体の信頼性が向上する。
【０００８】
このように設備や装置の構成、或いは、負荷分散や最適なパフォーマンスのために、複数のコントローラによりシステムを構築することが可能になり、これにより、今後、制御システムの分散化傾向は更に強まると予想される。
【０００９】
一方、コントローラは半導体メモリのコストダウン、マイコンチップの高性能化に相俟って、１台のコントローラで制御できる入出力点数が飛躍的に増加している傾向にある。また、これに比例してコントローラのプログラム容量も増大している。
【００１０】
また、コントローラを組み込むことで設計される各種機械や製造設備自身の高機能化もプログラム容量の増大に拍車をかけている。
【００１１】
このような傾向の中で、コントローラには、近年、大容量のプログラムを効率よくまた品質よく設計するために、また、再利用やメンテナンス管理のために、プログラムを分割や階層化したりブロック分割する機能が付け加えられている傾向にある。
【００１２】
加えて、コントローラを用いたシステムの開発保守環境面でもブロック分割されたプログラムデータを個別にコントローラにダウンロードやアップロードする機能を持つものも提案されている。
【００１３】
ユーザは、この機能を利用して、分割ブロック化したプログラムを１台のコントローラにて制御される装置のうちの個々の装置に割り当てたり、装置内の独立性の高い機能ユニット個々と対応させることで、プログラム設計において装置毎や機能毎の設計を順次または複数の作業者で分担して行うことができ、その結果その生産性を高めている。
【００１４】
また、この機能はコントローラ内のプログラム機能分割をより明確なものとすることができるため、１台のコントローラで複数の制御対象を制御しているような場合にも、対象のプログラムをブロック分割した形でプログラミングされている。
【００１５】
また、先に述べたネットワークによるシステムの分散化とアプリケーションプログラムの分割を組み合わせることにより、分散方法はより柔軟になり、コントローラという単位ではなく、ネットワークに跨ったプログラムブロック単位での分散が可能となっている。
【００１６】
併せて、コントローラに跨って分散したアプリケーションプログラムを、仮想的に１本のプログラムとして扱うための技術も考えられている。
【００１７】
【発明が解決しようとする課題】
しかし、コントローラを分散させることはアプリケーションプログラムも分散してしまうため、従来の１台のコントローラを使ったシステムの構築と比較して、以下の弊害が発生している。
【００１８】
１）１台のコントローラを使用している際には、単にコントローラ内のメモリへのデータ書き込みと読み出しで済んでいたプログラムブロック間のデータの受け渡しが、コントローラ間でのデータの送受信を介するため、別途そのためのプログラムが必要になり、プログラミング作業の負担が新たに発生する。
【００１９】
２）プログラムがコントローラ毎に物理的に分散され、全体的な論理構造が見えづらくなり、設計者や保全者である作業員の作業が難解になる。
【００２０】
３）従来ならば１台のコントローラに対して行えばよかったものを、複数のコントローラに対して、また、その中の所定のプログラムブロックに対してそれぞれ行わなければならなくなるため、デバックやメンテナンス作業が複雑になり、作業量が増大する。
【００２１】
４）複数のコントローラに分散したプログラムをサポートツールを使って、論理構造的に表示するためには、ノーマルプログラムの全体構造と個々のプログラムがいずれのコントローラに格納されているかを管理するための情報が、プログラムデータ以外に必要となるため、その情報の維持管理作業が作業者側の負担となり、かつ、その情報を解析するための資源をサポートツールに設ける必要が生じる。
【００２２】
そこで、この発明は、アプリケーションプログラムを複数に分割して相互に接続された複数のコントローラに分散格納したコントローラシステムを効率よくかつ少ない負担で構築することができるようにすることを目的とする。
【００２３】
また、この発明は、アプリケーションプログラムを複数に分割してネットワークを介して相互に接続された複数のコントローラに分散格納したコントローラシステムを効率よくかつ少ない負担で構築することができるようにしたコントローラを提供することを目的とする。
【００２４】
また、この発明は、アプリケーションプログラムを複数に分割してネットワークを介して相互に接続された複数のコントローラに分散格納したコントローラシステムの複数のコントローラに跨るアプリケーションプログラムの構造を論理的に容易に認識することができ、設備のデバックやメンテナンス時等の作業効率を大幅に向上させることができるようにしたサポートツールを提供することを目的とする。
【００２５】
【課題を解決するための手段】
上述の技術的課題は、以下の構成を有するプログラマブルコントローラが適用されたプログラマブルコントローラシステムにより解決することができると考えられる。
【００２６】
すなわち、本発明のプログラマブルコントローラシステムは、複数のプログラマブルコントローラを通信手段を介して相互に接続してなることを特徴とする。
【００２７】
前記プログラマブルコントローラのそれぞれには、それぞれユーザの作成するアプリケーションプログラムであるプログラムブロックを１又は２以上に亘り格納可能なユーザプログラムメモリと、入出力装置との間でやり取りされる入出力信号に相当する入出力パラメータを格納するための入出力メモリと、中央演算装置とが含まれている。
【００２８】
前記中央演算装置においては、前記ユーザプログラムメモリに格納されたプログラムブロックを順次に読み出して実行するプログラム実行処理を含むプログラムブロック運転処理と、前記入出力装置と入出力メモリとの間で入出力パラメータの更新を行う入出力リフレッシュ処理と、前記通信手段を介して他のプログラマブルコントローラ等との間でコマンドやレスポンスのやり取りを行うためのネットワーク処理とが、サイクリックに実行されるように仕組まれており、前記プログラムブロックのそれぞれは、プログラムブロック識別子と、入出力パラメータ指定データと、プログラムブロック本体とを含んでいる。
【００２９】
前記プログラムブロック実行処理は、第１のプログラムブロック実行処理と、第２のプログラムブロック実行手段とからなる。
【００３０】
前記第１のプログラムブロック実行処理は、前記ユーザプログラムメモリから読み出されるプログラムブロックが前記プログラムブロック識別子に基づいてノーマルプログラムブロックと識別されときには、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入力パラメータを前記入出力メモリから読み出して一次記憶させると共に、この一次記憶させた入力パラメータを使用して、前記プログラムブロック本体を構成する命令コード列に従った実行処理を行って出力パラメータを生成して一次記憶すると共に、実行処理の終了を待って、一次記憶された出力パラメータを、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入出力メモリ内の出力パラメータを書き替えられる。
【００３１】
前記第２のプログラムブロック実行処理は、前記ユーザプログラムメモリから読み出されるプログラムブロックが前記プログラムブロック識別子に基づいて入出力パラメータ送受信プログラムブロックと識別されときには、当該プログラムブロックに含まれる入出力パラメータ指定データで指定される入力パラメータを前記入出力メモリから読み出し、これを前記プログラムブロック本体を構成する相手先プログラム位置情報と相手先入出力パラメータ位置情報とを含むデータ送信コマンドとしてネットワーク上に送信する一方、これに対して正常レスポンスが受信されたときには、前記プログラムブロック本体を構成する相手先プログラム位置情報と相手先入出力パラメータ位置情報とを含むデータ受信コマンドをネットワーク上に送信し、そのレスポンスとして受信されるデータを入出力パラメータ指定データで指定される入出力メモリの出力パラメータを書き替えられる。
【００３２】
このような構成によれば、ユーザプログラムメモリ中に入出力パラメータ送受信ブロックを含ませることにより、当該プログラマブルコントローラのノーマルプログラムブロックの実行の際に、他のプログラマブルコントローラの入出力メモリから取得した入出力パラメータの値を使用することができる。
【００３３】
【発明の実施の形態】
本発明は、いくつかの実施形態として実現することができる。例えば、第１の実施形態としては、プログラマブルコントローラシステムとして実現することができる。
【００３４】
このコントローラシステムは、複数のコントローラと少なくとも１つのサポートツールとを通信手段を介して相互に接続し、かつアプリケーションプログラムをいくつかのプログラムブロックに分割してそれら複数のコントローラに分散配置してなるものである。
【００３５】
上記コントローラそれぞれには、複数のプログラムブロックに分割されたアプリケーションプログラムのうちのノーマルプログラムブロックを実行するノーマルプログラムブロック実行手段と、上記プログラムブロックに対して入出力パラメータを定義する入出力パラメータ定義手段と、他のコントローラのプログラムブロックに格納されているプログラムに対して上記入出力パラメータの送受信を行う入出力パラメータ送受信プログラムブロックを実行する入出力パラメータ送受信プログラムブロック実行手段と、上記入出力パラメータ送受信プログラムブロックに対して相手先プログラムブロックの位置情報を記憶する相手先プログラムブロック位置情報記憶手段と、プログラムブロックの読み出し要求に際して、該当プログラムブロックがノーマルプログラムブロックである場合は、該ノーマルプログラムブロックのデータを返信し、該当プログラムブロックが入出力パラメータ送受信プログラムブロックである場合は、該入出力パラメータ送受信プログラムブロックから相手先プログラムブロックの位置情報を抽出して返信する送受信制御手段と、が具備される。
【００３６】
また、上記サポートツールには、上記コントローラに対してプログラムブロックの読み出し要求を送信するプログラムブロック読出要求送信手段と、上記プログラムブロック読出要求送信手段によるプログラムブロックの読み出し要求に対して上記コントローラから返信された内容について、ノーマルプログラムブロックのデータか入出力パラメータ送受信ブロックの相手先プログラムブロックの位置情報かを判別する判別手段と、上記判別手段によりノーマルプログラムブロックのデータであると判別された場合は、該ノーマルプログラムブロックのデータをそのまま表示し、入出力パラメータ送受信ブロックの相手先プログラムブロックの位置情報であると判別された場合は、その位置情報に基づき相手先プログラムブロックを読み出し、それを表示する表示制御手段と、が具備される。
【００３７】
ここで、通信手段は、ＬＡＮ（ローカルエリアネットワーク）等を含む。また、ノーマルプログラムブロックは、例えば、この発明のコントローラシステムが実行するアプリケーションプログラムを複数に分割した各プログラムブロックを示す。
【００３８】
上述のコントローラシステムにおいては、アプリケーションプログラムを複数のプログラムブロックに分割し、該分割したプログラムブロックを複数のコントローラに分散格納することで負荷分散を図るとともに、コントローラシステムを少ない負担でかつ効率よく構築することができるように構成されている。
【００３９】
また、上述のコントローラシステムにおいては、上記プログラムブロックに対して入出力パラメータを定義する入出力パラメータ定義手段を設け、他のコントローラのプログラムブロックに格納されているプログラムに対して上記入出力パラメータの送受信を行う入出力パラメータ送受信プログラムブロックを実行する入出力パラメータ送受信プログラムブロック実行手段を設ける。
【００４０】
そして、上記入出力パラメータ送受信プログラムブロックに対して相手先プログラムブロックの位置情報を記憶する相手先プログラムブロック位置情報記憶手段を設け、上記サポートツールからのプログラムブロックの読み出し要求に際して、該当プログラムブロックがノーマルプログラムブロックである場合は、該ノーマルプログラムブロックのデータを返信し、該当プログラムブロックが入出力パラメータ送受信プログラムブロックである場合は、該入出力パラメータ送受信プログラムブロックから相手先プログラムブロックの位置情報を抽出して返信する送受信制御手段を設ける。
【００４１】
また、サポートツールには、上記コントローラに対してプログラムブロックの読み出し要求を送信するプログラムブロック読出要求送信手段を設け、上記プログラムブロック読出要求送信手段によるプログラムブロックの読み出し要求に対して上記コントローラから返信された内容について、ノーマルプログラムブロックのデータか相手先プログラムブロックの位置情報かを判別手段で判別し、上記判別手段によりノーマルプログラムブロックのデータであると判別された場合は、該ノーマルプログラムブロックのデータをそのまま表示し、入出力パラメータ送受信ブロックの相手先プログラムブロックの位置情報であると判別された場合は、その位置情報に基づき相手先プログラムブロックを読み出し、それを表示する表示制御手段を設ける。
【００４２】
このような構成によると、複数のコントローラに跨るアプリケーションプログラムの構造がサポートツールで論理的に認識できるため、作業者による認識が容易になり作業ミスがなくなる。
【００４３】
また、複数のコントローラに格納されているアプリケーションプログラムの所定の部分が、論理的なプログラム構造に従ってサポートツールに自動的に表示されるため、従来の１台のコントローラ毎にかつプログラムブロック毎に繰り返していた作業操作が単純化でき、設備のデバック／メンテナンス時等の作業効率が大幅に向上する。
【００４４】
また、複数のコントローラに跨るアプリケーションプログラムを特別な構成情報なしに、コントローラに格納されているアプリケーションデータだけで論理的に表示できることで、構成情報の作成、保存、読み出しなどの管理に関して作業者への負担がなくなる。
【００４５】
また、複数のコントローラアプリケーションプログラムを論理構造を持って表示するために、特別な構成情報が必要でなくなりサポートツール側のハード資源負担が軽くなり、より低コストなサポートツールが提供しやすくなる。
【００４６】
また、ネットワークを介してデータの送受信が、プログラムブロックへのパラメータ定義だけで実現されるため、設計者の負担が軽くなるとともに、データの送受信部が特定のプログラムブロックに集約されるため構造的に分かりやすい設計が可能になる。
【００４７】
また、別の実施形態である、この発明のコントローラは、複数のコントローラを通信手段を介して相互に接続し、かつアプリケーションプログラムをいくつかのプログラムブロックに分割してそれら複数のコントローラに分散配置してなるコントローラシステムにおけるコントローラである。
【００４８】
そして、このコントローラには、複数のプログラムブロックに分割されたアプリケーションプログラムのうちのノーマルプログラムブロックを実行するノーマルプログラムブロック実行手段と、上記プログラムブロックに対して入出力パラメータを定義する入出力パラメータ定義手段と、他のコントローラのプログラムブロックに格納されているプログラムに対して上記入出力パラメータの送受信を行う入出力パラメータ送受信プログラムブロックを実行する入出力パラメータ送受信プログラムブロック実行手段と、上記入出力パラメータ送受信プログラムブロックに対して相手先プログラムブロックの位置情報を記憶する相手先プログラムブロック位置情報記憶手段と、プログラムブロックの読み出し要求に際して、該当プログラムブロックがノーマルプログラムブロックである場合は、該ノーマルプログラムブロックのデータを返信し、該当プログラムブロックが入出力パラメータ送受信プログラムブロックである場合は、該入出力パラメータ送受信プログラムブロックから相手先プログラムブロックの位置情報を抽出して返信する送受信制御手段と、が具備される。
【００４９】
ここで、サポートツールは必須ではなく、複数のコントローラによる運転状態だけを想定すればサポートツールを接続しない構成も考えられる。
【００５０】
また、別の実施形態である、この発明のサポートツールは、複数のコントローラと少なくとも１つのサポートツールを通信手段を介して相互に接続し、かつアプリケーションプログラムをいくつかのプログラムブロックに分割してそれら複数のコントローラに分散配置してなるコントローラシステムにおけるサポートツールである。
【００５１】
そして、このサポートツールには、上記コントローラに対してプログラムブロックの読み出し要求を送信するプログラムブロック読出要求送信手段と、上記プログラムブロック読出要求送信手段によるプログラムブロックの読み出し要求に対して上記コントローラから返信された内容について、ノーマルプログラムブロックのデータか入出力パラメータ送受信ブロックの相手先プログラムブロックの位置情報かを判別する判別手段と、上記判別手段によりノーマルプログラムブロックのデータであると判別された場合は、該ノーマルプログラムブロックのデータをそのまま表示し、入出力パラメータ送受信ブロックの相手先プログラムブロックの位置情報であると判別された場合は、その位置情報に基づき相手先プログラムブロックを読み出して表示する表示制御手段と、が具備される。
【００５２】
さらに、別の実施形態は、相互接続されて複数のコントローラからなるコントローラシステムを構成するコントローラでもある。そして、このコントローラには、アプリケーションプログラムを１つ以上に分割したプログラムブロックを実行する手段と、プログラムに対し入出力パラメータを定義する手段と、コントローラ外部より指定された入出力パラメータを受け取る手段と、コントローラ外部よりプログラムブロックの起動の指示を受け取る手段と、指定された入力パラメータにより、該当のプログラムブロックを実行し、出力指定されたパラメータとして、実行結果を指示元に返す手段と、が具備される。
【００５３】
図１は、以上説明したコントローラシステムの一実施形態の全体構成を示すブロック図である。図１において、このコントローラシステムは、３台のコントローラ、すなわちコントローラ（コントローラＡ）１０−１、コントローラ（コントローラＢ）１０−２、コントローラ（コントローラＣ）１０−３と、サポートツール２０とを、ネットワーク３０に接続して構成される。
【００５４】
ここで、この実施の形態のコントローラシステムにおいては、このコントローラシステムが実行するアプリケーションプログラムを複数のプログラムブロックに分割し、この分割したプログラムブロックを上記３台のコントローラ１０−１〜１０−３に分散して格納して実行するように構成される。
【００５５】
図２は、図１に示したコントローラシステムのコントローラ１０−１〜１０−３の詳細構成をコントローラ１０として示したブロック図である。
図２において、このコントローラ１０は、演算プロセッサ（ＣＰＵ）１１、システムプログラムメモリ１２、ユーザプログラムメモリ１３、パラメータメモリ１４、ワークメモリ１５、入出力メモリ（Ｉ／Ｏメモリ）１６、通信インタフェース（通信Ｉ／Ｆ）１７、入出力インタフェース（Ｉ／Ｆ）１８を具備して構成され、通信インタフェース１７は、図１に示したネットワーク３０に接続され、入出力インタフェース１８は、入出力装置１９に接続される。
【００５６】
ここで、演算プロセッサ１１は、このコントローラ１０の全体動作を統括制御するものであり、システムプログラムメモリ１２は、演算プロセッサ１１により処理されるこのコントローラ１０のシステムプログラムを記憶するためのメモリである。
【００５７】
また、ユーザプログラムメモリ１３は、このシステムのアプリケーションプログラムを記憶するためのメモリであり、パラメータメモリ１４は、このコントローラ１０における各種演算や処理のための各種パラメータを記憶するためのメモリである。
【００５８】
ワークメモリ１５は、このコントローラ１０における各種演算や処理を行うためのデータを一時記憶するためのメモリである。
【００５９】
入出力メモリ（Ｉ／Ｏメモリ）１６は、このコントローラ１０におけるプログラム実行により入出力情報の代用として参照や書き換えられるメモリである。また、この入出力メモリ１６には、プログラムブロック毎のパラメータも格納される。
【００６０】
また、通信インタフェース（通信Ｉ／Ｆ）１７は、ネットワーク３０に接続するためのインタフェースを構成する。
【００６１】
また、入出力装置１９は、センサやスイッチなどに接続される入力装置と、モータやアクチュエータなどに接続される出力装置とを組み合わせた装置であり、ネットワーク３０は、サポートツール２０および他のコントローラとの間で情報交換を行うための通信手段を構成する。尚、入出力装置１９は、独立したいくつかの入力装置と独立したいくつかの出力装置のかたまりの総称といった意味もある。
【００６２】
図３は、図１に示したコントローラシステムのサポートツール２０の詳細構成を示したブロック図である。
図３において、このサポートツール２０は、演算装置２１、入力装置２７、表示装置２８を具備して構成される。演算装置２１は、中央処理装置２２、メモリ空間２３、表示装置用メモリ２４、バス２５、インタフェース（Ｉ／Ｆ）２６を具備する。メモリ空間２３には、パラメータデータエリア２３−１、ユーザプログラムデータエリア２３−２、サポートツールプログラムエリア２３−３が設けられている。
【００６３】
ここで、中央処理装置２２は、このサポートツール２０の全体動作を統括制御する演算プロセッサである。
【００６４】
また、メモリ空間２３のパラメータデータエリア２３−１にはこのサポートツール２０の処理に必要な各種パラメータが格納され、ユーザプログラムデータエリア２３−２には、コントローラ１０−１〜１０−３から読み出された「アプリケーションプログラム」のデータが格納され、サポートツールプログラムエリア２３−３には、中央処理装置２２が実行するこのサポートツール２０で実行するプログラムが格納される。
【００６５】
また、表示装置用メモリ２４は、表示装置２８に出力される情報が格納されるメモリで、この情報は中央処理装置２２により書き換えられる。
【００６６】
また、インタフェース２６は、コントローラ１０−１〜１０−３と通信を行うための通信インタフェースを構成する。
【００６７】
また、入力装置２７は、ユーザ要求を入力するための装置で、キーボード、ポインティングデバイスなどから構成され、表示装置２８は、表示装置用メモリ２４の情報を表示する装置で、例えば、ＣＲＴ等から構成される。
【００６８】
上記構成の実施の形態のコントローラシステムにおいては、後に詳述するように、ネットワーク３０に分散接続された複数のコントローラ１０−１〜１０−３に跨ったアプリケーションプログラム間のパラメータの受け渡しを自動化するためのプログラムブロックの実行処理と、各コントローラ１０−１〜１０−３内に格納されたアプリケーションプログラムデータを使って、分散したコントローラのアプリケーションプログラムを一本のプログラムのように表示するサポートツール２０を提供する。
【００６９】
さて、この実施の形態のコントローラシステムにおいて、ネットワーク３０上では、メッセージサービスにより情報交換を行い、これにより相手先に各要求を発行する。このメッセージサービスは、サポートツール２０からコントローラ１０−１〜１０−３への要求、コントローラから他のコントローラへの要求に使用される。
【００７０】
各メッセージは、コマンドに相手先のネットワークアドレスを付加し、それにより各メッセージの受信先が特定される。この実施の形態のコントローラシステムにおいては以下のメッセージサービスコマンドを用意する。
【００７１】
１）データ送信
送信コマンドのパラメータ
相手コントローラにおけるデータ格納先メモリアドレス
格納データ
受信レスポンスの内容
正常終了コード
何らかの理由で処理が正常に完了しなかった場合はエラー終了
２）データ受信
送信コマンドのパラメータ
データ長
相手コントローラにおけるデータ読出先メモリアドレス
受信レスポンスの内容
正常終了コードと読出データ
何らかの理由で処理が正常に完了しなかった場合はエラー終了
３）プログラム読出
送信コマンドのパラメータ
なし
受信レスポンスの内容
アプリケーションプログラムデータ全体
何らかの理由で処理が正常に完了しなかった場合はエラー終了コード
４）プログラムブロック読出
送信コマンドのパラメータ
プログラムブロックＩＤ番号
受信レスポンスの内容
実体が自コントローラ内の場合、正常終了コードとプログラムブ
ロックデータ
実体が他コントローラ内の場合、正常終了コードとコントローラ
のアドレスとプログラムブロックＩＤ番号
何らかの理由で処理が正常に完了しなかった場合はエラー終了コ
ード
５）プログラム構成読出
送信コマンドのパラメータ
なし
受信レスポンスの内容
正常終了コードとプログラム構成情報
何らかの理由で処理が正常に完了しなかった場合はエラー終了コ
ード
なお、プログラム構成読出に対する受信レスポンスのプログラム構成情報の一例を示すと図４のようになる。
【００７２】
図４において、このプログラム構成情報は、全プログラムの個別情報（ブロックＡ）と毎サイクル起動プログラムＩＤ番号（ブロックＢ）とからなり、全プログラムの個別情報は、レコード１からレコードＮにそれぞれプログラムブロックＩＤ番号（フィールド１）、プログラムブロック種別（フィールド２）、プログラムブロック本体からの情報（フィールド３）があり、プログラムブロック本体からの情報には、
１）命令コードに含まれるプログラムブロック起動命令に定義されたプログラ      ムブロックＩＤ番号（種別がノーマルプログラムブロックの場合）
２）相手先プログラムブロック位置情報（種別が入出力パラメータプログラム      ブロックの場合）
が含まれている。
【００７３】
また、毎サイクル起動プログラムＩＤ番号には、プログラムブロックＩＤ番号が含まれている。
【００７４】
次に、この実施の形態のコントローラシステムの詳細動作を以下に示すフローチャートを参照して詳細に説明する。
【００７５】
図５は、図２に示したコントローラ１０における全体処理フローを示すフローチャートである。
図５において、コントローラ１０の電源ＯＮ初期処理に続いて処理が開始されると（ステップ５０１）、コントローラ１０は、まず、所定の共通処理を実行し（ステップ５０２）、次に、プログラム運転が可能であるかを調べる（ステップ５０３）。
【００７６】
ここで、プログラム運転可であると判断されると（ステップ５０３でＹＥＳ）、プログラム運転処理を実行し（ステップ５０４）、その後、Ｉ／Ｏメモリ１６のＩ／Ｏリフレッシュ処理を行う（ステップ５０５）。
【００７７】
なお、ステップ５０３でプログラム運転可でないと判断されると（ステップ５０３でＮＯ）、プログラム運転処理を実行することなく、Ｉ／Ｏメモリ１６のＩ／Ｏリフレッシュ処理を行う（ステップ５０５）。
【００７８】
Ｉ／Ｏメモリ１６のＩ／Ｏリフレッシュ処理が終了すると、次に所定のネットワーク処理を実行し（ステップ５０６）、ステップ５０２に戻り、上記処理を繰り返す。
【００７９】
図６は、図５に示したステップ５０６のネットワーク処理の詳細を示すフローチャートである。
ネットワーク処理では、サポートツール２０または他コントローラ１０からのコマンドの受信状態、他処理からのネットワーク処理依頼の状態に応じて、以下の処理がおこなわれる。ここで、コマンドやレスポンス受信自体は割り込み処理にて行われ、ワークメモリ１５上の一時記憶エリアに記憶される。
【００８０】
１）サポートツール２０および他コントローラ１０からのコマンドに従った処      理
２）他処理からのネットワーク処理依頼内容に従ったコマンド発行処理
３）発行したコマンドに対するレスポンスに従った処理
【００８１】
さて、図６において、このネットワーク処理が開始されると（ステップ６０１）、まず、受信コマンド若しくはレスポンスがあるかを調べる（ステップ６０２）。ここで、受信コマンド若しくはレスポンスがないと判断されると（ステップ６０２でＮＯ）、ステップ６０５に進むが、受信コマンド若しくはレスポンスがあると判断されると（ステップ６０２でＹＥＳ）、各コマンド又はレスポンスを解析したのち（ステップ６０３）、各コマンド及びレスポンス別の処理を実行する（ステップ６０４）。
【００８２】
ここで、各コマンド別のレスポンス処理内容を以下に示す。なお、以下に示す処理以外にも、コントローラとして持つべきコマンド処理は存在するが、この実施の形態の内容には依存しないのでここではその説明を省略する。
１）「データ送信」コマンドに対する処理
コマンドパラメータに指定されたデータ格納メモリアドレス以降に、コマンドパラメータに指定された格納データを書き込む。処理が完了したら、正常終了コードを返信する。ただし、何らかの原因で、正常に処理が終了しなければ、エラー終了のレスポンスを返信する。
【００８３】
２）「データ受信」コマンドに対する処理
コマンドパラメータに指定された読み出し先メモリアドレス以降から、データ長分のデータを正常終了コードとともに返信する。ただし、何らかの原因で、正常に処理が終了しなければ、エラー終了のレスポンスを返信する。
【００８４】
３）「プログラム読出」コマンドに対する処理
ユーザプログラムメモリ１３領域内の所定の場所から「アプリケーションプログラムデータ」を読出し、正常終了コードとともに返信する。ただし、何らかの原因で、正常に処理が終了しなければエラー終了のレスポンスを返信する。なお、「アプリケーションプログラムデータ」は、後に説明する図２５の「アプリケーションプログラムデータ」のような構成となる。
【００８５】
４）「プログラムブロック読出」コマンドに対する処理
コマンドパラメータに指定されたプログラムブロックＩＤに従い、ユーザプログラムメモリ１３領域内の「アプリケーションプログラムデータ」から該当のプログラムブロックデータを抽出し、正常終了コードとともに返信する。ただし、何らかの原因で、正常に処理が終了しなければエラー終了のレスポンスを返信する。なお、「アプリケーションプログラムデータ」は、後に説明する図２５の「アプリケーションプログラムデータ」のような構成となり、「プログラムブロックデータ」は、後に説明する図２０に示す「ノーマルプログラムブロックの構造」若しくは図２１の「入出力パラメータ送信プログラムブロックの構造」のような構成となる。
【００８６】
５）「プログラム構成読出」コマンドに対する処理
後に説明する図１６の「プログラム構成情報抽出処理フロー」の処理によりプログラム構成情報（図４参照）を作成し、正常終了コードとともに返信する。ただし、何らかの原因で、正常に処理が終了しなければエラー終了のレスポンスを返信する。
【００８７】
ステップ６０５では、ネットワーク処理依頼項目記憶エリアを読み出し、次に、処理依頼があるかを調べる（ステップ６０６）。ここで、処理依頼がないと判断されると（ステップ６０６でＮＯ）、このまま、このネットワーク処理を終了する（ステップ６１０）。
【００８８】
ステップ６０６で、処理依頼があると判断されると（ステップ６０６でＹＥＳ）、ネットワーク処理依頼項目記憶エリアの先頭の依頼を読み出し（ステップ６０７）、この依頼に対応したコマンドを生成して送信し（ステップ６０８）、ネットワーク処理依頼項目を一段つめ（ステップ６０９）、このネットワーク処理を終了する（ステップ６１０）。
【００８９】
図７は、図５に示したステップ５０４のプログラム運転処理の詳細を示すフローチャートである。
図７において、プログラム運転処理が開始されると（ステップ７０１）、まず、初回実行かを調べる（ステップ７０２）。ここで、初回実行でないと判断されると（ステップ７０２でＮＯ）、ステップ７０４に進むが、初回実行であると判断されると（ステップ７０２でＹＥＳ）、プログラム運転処理用ワークを初期化し（ステップ７０３）、ステップ７０４に進む。
【００９０】
さて、この実施の形態のコントローラシステムにおいては、「プログラム運転処理」起動により、毎サイクル起動されるものと、任意のプログラムブロックより起動されるものがある。
【００９１】
また、「プログラム運転処理」起動により、毎サイクル起動されるプログラムブロックは、プログラミングの際に作業者が設定しておき、アプリケーションプログラムデータ内のデータ情報領域に格納されている。
【００９２】
ステップ７０４では、プログラムブロックステータス情報の先頭レコードを読み出し、プログラムブロック実行処理を行う（ステップ７０５）。そして、プログラムブロックステータス情報の次のレコードを読み出し（ステップ７０６）、残りプログラムブロックなしかを調べる（ステップ７０７）。
【００９３】
ここで、残りプログラムブロックありと判断された場合は（ステップ７０７でＮＯ）、ステップ７０５に戻り、ステップ７０５からステップ７０７の処理を繰り返すが、残りプログラムブロックなしと判断された場合は（ステップ７０７でＹＥＳ）、プログラム実行処理を終了する（ステップ７０８）。
【００９４】
図８，図９は、図７に示したステップ７０５のプログラムブロック実行処理の詳細を示すフローチャートである。
図８において、プログラムブロック実行処理が開始されると（ステップ８０１）、まず、プログラムブロックデータを読み出し（ステップ８０２）、次に、プログラムブロックの種別を調べる（ステップ８０３）。
【００９５】
ここで、プログラムブロックがノーマルブロックであると判断されると、Ｉ／Ｏメモリ１６より入力パラメータの値を読み出し、プログラムブロック実行処理へ引数としてセットする（ステップ８０４）。そして、プログラムブロック本体を順次読み出し、命令コードに従った実行処理を行う（ステップ８０５）。
【００９６】
次に、命令コード終了かを調べ、命令コード終了でないと判断されると（ステップ８０６でＮＯ）、ステップ８０５に戻り、ステップ８０６にて命令コード終了と判断されるまで、ステップ８０５、８０６の処理を繰り返すが、命令コード終了と判断されると（ステップ８０６でＹＥＳ）、プログラムブロック実行処理の結果を出力パラメータの値としてＩ／Ｏメモリ１６にセットし、このプログラムブロック実行処理を終了する（ステップ８０８）。
【００９７】
また、ステップ８０３で、プログラムブロックが入出力パラメータ送受信プログラムブロックであると判断された場合は、図９に移って、Ｉ／Ｏメモリ１６より入力パラメータの値を読み出し（ステップ９０１）、プログラムブロック本体として格納された「相手先プログラム位置情報」と「相手先入出力パラメータ位置情報」の入力パラメータ位置情報を用いて、「データ送信コマンド」によりＩ／Ｏメモリ１６より読み込んだデータを送信し、レスポンスが返されるのを待つ（ステップ９０２）。
【００９８】
次に、レスポンス正常かを調べ（ステップ９０３）、レスポンス正常であると判断された場合は（ステップ９０３でＹＥＳ）、プログラム本体として格納された「相手先プログラム位置情報」と「相手先入出力パラメータ位置情報」の出力パラメータ位置情報を用いて、「データ受信コマンド」を発行し、レスポンスが返されるのを待つ（ステップ９０４）。
【００９９】
そして、レスポンス正常かを調べ（ステップ９０５）、レスポンス正常であると（ステップ９０５でＹＥＳ）、レスポンスの値をＩ／Ｏメモリ１６にセットし（ステップ９０６）、図８のフローチャートに戻って、このプログラムブロック実行処理を終了する（ステップ８０８）。
【０１００】
なお、ステップ９０３で、レスポンスが正常でない（ステップ９０３でＮＯ）若しくはステップ９０５で、レスポンスが正常でない（ステップ９０５でＮＯ）と判断された場合は、そのままこのプログラムブロック実行処理を終了する（ステップ８０８）。
【０１０１】
図１０は、図３に示したサポートツール２０における全体処理を示すフローチャートである。
図１０において、サポートツール２０の処理が開始されると（ステップ１００１）、先ず、所定の起動時初期処理を実行し（ステップ１００２）、次に、ユーザ操作による機能選択が行われる（ステップ１００３）。
【０１０２】
次に、ステップ１００３の機能選択により選択された機能がプログラム読出機能かを調べる（ステップ１００４）。ここで、選択された機能がプログラム読出機能であると判断されると（ステップ１００４でＹＥＳ）、プログラム読出機能処理を実行し（ステップ１００５）、ステップ１００３に戻る。
【０１０３】
また、ステップ１００４で選択された機能がプログラム読出機能でないと判断された場合は（ステップ１００４でＮＯ）、他の機能の選択に応じてサポートツール各機能への分岐を行い、サポートツール各機能処理を実行する。
【０１０４】
そして、次に、サポートツール各機能処理が終了かを調べ（ステップ１００６）、終了でないと判断されると（ステップ１００６でＮＯ）、ステップ１００３へ戻るが、終了であると判断されると（ステップ１００６でＹＥＳ）、所定の終了処理を実行し（ステップ１００７）、このサポートツール２０における全体処理フローを終了する（ステップ１００８）。
【０１０５】
図１１，図１２は、図１０に示したステップ１００５のプログラム読出機能処理の詳細を示すプログラム読出機能フローのフローチャートである。
図１１において、プログラム読出機能が開始されると（ステップ１１０１）、演算装置２１のメモリ空間２３におけるパラメータデータエリア２３−１の「コントロール別ネットワークアドレス情報」よりネットワークに接続しているコントローラＩＤを抽出する（ステップ１１０２）。
【０１０６】
次に、表示装置２８の画面上に表示フレーム（Ａ）を開きネットワーク３０に接続しているコントローラ１０−１〜１０−３を「コントローラの一覧」として表示する（ステップ１１０３）。
【０１０７】
この「コントローラの一覧」の一例は、例えば、後述する図３２に示すようなもので、図３２においては、ネットワーク３０に接続しているコントローラが、コントローラ（コントローラＡ）１０−１、コントローラ（コントローラＢ）１０−２、コントローラ（コントローラＣ）１０−３であることを示している。
【０１０８】
ここで、作業者が表示フレーム（Ａ）内のコントローラを指定する（ステップ１１０４）。
【０１０９】
これにより、指定されたコントローラのコントローラＩＤ番号をもとに「コントローラ別ネットワークアドレス情報」より該当のコントローラのアドレス情報を抽出する（ステップ１１０５）。
【０１１０】
そして、抽出したアドレス宛てに「プログラム読出」コマンドを発行し（ステップ１１０６）、レスポンス待ちになる（ステップ１１０７）。
【０１１１】
ステップ１１０７でレスポンスありと判断されると、コマンドのレスポンスとして選択されたコントローラ１０のユーザプログラムから「アプリケーションプログラムデータ」を読み込み（ステップ１１０８）、この「アプリケーションプログラムデータ」を解析し、別の表示フレーム（Ｂ）を開き「アプリケーションプログラム構造」を表示する（ステップ１１０９）。
【０１１２】
ここで、表示フレーム（Ｂ）は、図３３に示すように、例えばコントローラ（コントローラＡ）１０−１の「アプリケーションプログラム構造」を示しており、ここでは、コントローラ（コントローラＡ）１０−１のアプリケーションプログラム構成をプログラムブロック単位で表示している。
【０１１３】
次に、作業者が表示フレーム（Ｂ）内のプログラムブロックを指定する（ステップ１１１０）。
【０１１４】
そして、指定されたプログラムブロックのデータを図２５に示すような「アプリケーションプログラムデータ」より抽出し（ステップ１１１１）、抽出したプログラムブロックの種別を調べる（ステップ１１１２）。
【０１１５】
ここで、抽出したプログラムブロックの種別が入出力パラメータ送受信プログラムブロックであると、プログラムデータブロックより相手先プログラムブロック位置情報（相手先コントローラアドレスと相手先プログラムブロックＩＤ番号）を抽出し（ステップ１２０１）、次に、指定されたプログラムブロックデータより入力パラメータ、出力パラメータ（ｂ）を抽出し（ステップ１２０２）、抽出した相手先コントローラアドレス宛に、同じく抽出したプログラムブロックＩＤ番号をパラメータして「プログラムブロック読出コマンドを発行し（ステップ１２０３）、レスポンス待ちになる（ステップ１２０４）。
【０１１６】
そして、ステップ１２０４でレスポンスありと判断されると、コマンドのレスポンスとして「プログラムブロックデータ」を読み込み（ステップ１２０５）、さらに、プログラムデータブロックより入力パラメータ、出力パラメータおよびプログラムブロック本体であるプログラムコードリストを抽出し、図３５に示されるように、（ｂ）とともに新しい表示フレーム（Ｃ）を開いて表示する（ステップ１２０６）。
【０１１７】
次に、作業者が別ブロックの読み出しを指定した場合は、別のプログラムブロックを読み出すかを調べ（ステップ１２０７）、別のプログラムブロックを読み出すと判断されると（ステップ１２０７でＹＥＳ）、フレーム（Ｃ）を閉じ（ステップ１２０８）、図１１のステップ１１１０へ進む。
【０１１８】
また、ステップ１２０７で別のプログラムブロックは読み出さないと判断されると（ステップ１２０７でＮＯ）、次に、作業者が別コントローラの読み出しを指定した場合は、別のコントローラを指定するかを調べる（ステップ１２０９）。ここで、別のコントローラを指定すると判断されると（ステップ１２０９でＹＥＳ）、フレーム（Ｂ），（Ｃ）を閉じ（ステップ１２１０）、図１１のステップ１１０４へ進む。
【０１１９】
また、ステップ１２０９で、別のコントローラは指定しないと判断されると（ステップ１２０９でＮＯ）、作業者が機能終了を指定した場合は、このプログラム読出機能を終了するかを調べ（ステップ１２１１）、このプログラム読出機能を終了しないと判断されると（ステップ１２１１でＮＯ）、ステップ１２０７に戻るが、このプログラム読出機能を終了すると判断されると（ステップ１２１１でＹＥＳ）、すべてのフレーム（Ａ）〜（Ｃ）を閉じ（ステップ１２１２）、このプログラムブロック処理を終了する（ステップ１２１３）。
【０１２０】
一方、図１１のステップ１１１２で抽出したプログラムブロックの種別がノーマルプログラムブロックであると、プログラムブロックデータより入力パラメータ、出力パラメータおよびプログラムブロック本体であるプログラムコードリストを抽出し、図３４に示されるように、新しい表示フレーム（Ｃ）を開いて表示し（ステップ１１１３）、ステップ１２０７へ進む。以下、ステップ１２０７〜ステップ１２１３の処理は前述した処理と同様である。
【０１２１】
図１３，図１４，図１５は、図１０に示したステップ１００５のプログラム読出機能処理の詳細を示す他のプログラム読出機能フローのフローチャートである。
図１３において、プログラム読出機能が開始されると（ステップ１３０１）、まず、演算装置２１のメモリ空間２３におけるパラメータデータエリア２３−１の「コントロール別ネットワークアドレス情報」よりネットワークに接続しているコントローラＩＤを抽出する（ステップ１３０２）。
【０１２２】
次に、表示装置２８の画面上に表示フレーム（Ａ）を開き「コントローラの一覧」として表示する（ステップ１３０３）。
【０１２３】
ここで、作業者が表示フレーム（Ａ）内のコントローラを指定する（ステップ１３０４）。
【０１２４】
これにより、指定されたコントローラのコントローラＩＤ番号をもとに「コントローラ別ネットワークアドレス情報」より該当のコントローラのアドレス（ａ）を抽出する（ステップ１３０５）。
【０１２５】
そして、抽出したアドレス（ａ）宛てに「プログラム構成読出」コマンドを発行し（ステップ１３０６）、レスポンス待ちになる（ステップ１３０７）。
【０１２６】
ステップ１３０７でレスポンスありと判断されると、このレスポンス（ｂ）、すなわち、抽出したアドレスのコントローラ１０のアプリケーションプログラムをメモリ空間２３のユーザプログラムデータエリア２３−２へ保存する（ステップ１３０８）。
【０１２７】
次に、レスポンス（ｂ）を解析し、別の表示フレーム（Ｂ）を開き、「アプリケーションプログラム構造」を表示する（ステップ１３０９）。ここで、表示フレーム（Ｂ）の一例を示すと後述する図３３のようになる。
【０１２８】
ここで、作業者が表示フレーム（Ｂ）内のプログラムブロックを指定する（ステップ１３１０）。そして、図１４に移って、抽出したプログラムブロックの種別を判別する（ステップ１４０１）。
【０１２９】
ステップ１４０１で、抽出したプログラムブロックが、ノーマルプログラムブロックであると判別されると、アドレス（ａ）宛にプログラムブロックＩＤ番号をパラメータとして「プログラムブロック読出」コマンドを発行する（ステップ１４０２）。そして、レスポンス待ちとなり（ステップ１４０３）、レスポンスがあると、コマンドのレスポンスとして「プログラムブロックデータ」を読み込む（ステップ１４０４）。
【０１３０】
次に、プログラムデータブロックより入力パラメータ、出力パラメータおよびプログラムブロック本体であるプログラムコードリストを抽出し、図３４に示されるように、新しい表示フレーム（Ｃ）を開いて表示し（ステップ１４０５）、図１５のステップ１５０１へ進む。
【０１３１】
一方、図１４のステップ１４０１で、抽出したプログラムブロックが、入出力パラメータ送受信プログラムブロックであると判別されると、相手先コントローラアドレス宛にプログラムブロックＩＤ番号をパラメータとして「プログラムブロック読出」コマンドを発行する（ステップ１４０６）。そして、レスポンス待ちとなり（ステップ１４０７）、レスポンスがあると、コマンドのレスポンスとして「プログラムブロックデータ」を読み込む（ステップ１４０８）。
【０１３２】
そして、プログラムデータブロックより入力パラメータ、出力パラメータおよびプログラムブロック本体であるプログラムコードリストを抽出し、（ｂ）より指定されたプログラムブロックの入力パラメータ、出力パラメータを抽出し、図３４に示されるように、新しい表示フレーム（Ｃ）を開いて表示し（ステップ１４０９）、図１５のステップ１５０１へ進む。
【０１３３】
ステップ１５０１では、作業者が別ブロックの読み出しを指定した場合は、別のプログラムブロックを読み出すかを調べ、別のプログラムブロックを読み出すと判断されると（ステップ１５０１でＹＥＳ）、フレーム（Ｃ）を閉じ（ステップ１５０２）、図１３のステップ１３１０へ進む。
【０１３４】
また、ステップ１５０１で別のプログラムブロックは読み出さないと判断されると（ステップ１５０１でＮＯ）、次に、作業者が別コントローラの読み出しを指定した場合は、別のコントローラを指定するかを調べる（ステップ１５０３）。ここで、別のコントローラを指定すると判断されると（ステップ１５０３でＹＥＳ）、フレーム（Ｂ），（Ｃ）を閉じ（ステップ１５０４）、図１３のステップ１３０４へ進む。
【０１３５】
また、ステップ１５０３で、別のコントローラは指定しないと判断されると（ステップ１５０３でＮＯ）、作業者が機能終了を指定した場合は、このプログラム読出機能を終了するかを調べ（ステップ１５０５）、このプログラム読出機能を終了しないと判断されると（ステップ１５０５でＮＯ）、ステップ１５０１に戻るが、このプログラム読出機能を終了すると判断されると（ステップ１５０５でＹＥＳ）、すべてのフレーム（Ａ）〜（Ｃ）を閉じ（ステップ１５０６）、このプログラムブロック処理を終了する（ステップ１５０７）。
【０１３６】
次に、アプリケーションプログラムデータからその構成情報を抽出する手法とこの構成情報より表示イメージを作成する手法について説明する。
【０１３７】
図１６は、アプリケーションプログラムデータからその構成情報を抽出する手法を示すプログラム構成情報抽出処理フローのフローチャートである。尚、この処理は図１１，図１２の例ではサポートツールにて、図１３〜図１５の例では「プログラム構成読出」コマンド処理としてコントローラが行なう。
【０１３８】
図１６において、プログラム構成情報抽出処理が開始されると（ステップ１６０１）、まず、アプリケーションプログラムのデータ領域情報より順次個々のプログラムブロックのデータを抽出する（ステップ１６０２）。
【０１３９】
次に、プログラムブロック識別子より「プログラムブロックＩＤ番号」と「プログラムブロック種別」を抽出し、構成情報の一部として記憶する（ブロックＡの各レコードのフィールド１および２）（ステップ１６０３）。
【０１４０】
そして、抽出したプログラムブロックの種別を調べる（ステップ１６０４）。ここで、抽出したプログラムブロックの種別が入出力パラメータ送受信プログラムブロックであると判別されると、プログラムブロック本体より相手先プログラムブロック位置情報を抽出し、構成情報の一部として記憶する（ブロックＡの各レコードのフィールド３）（ステップ１６０５）。
【０１４１】
次に、抽出したプログラムブロックが最終プログラムブロックかを調べ（ステップ１６１１）、抽出したプログラムブロックが最終プログラムブロックでない場合は（ステップ１６１１でＮＯ）、ステップ１６０２に戻るが、抽出したプログラムブロックが最終プログラムブロックであると判断された場合は（ステップ１６１１でＹＥＳ）、アプリケーションプログラムの情報領域よりサイクル毎に実行されるプログラムブロックの一覧情報のプログラムブロックＩＤ番号を抽出し、構成情報の一部として記憶（ブロックＢのフィールド１〜Ｎ）したのち（ステップ１６１２）、このプログラム構成情報抽出処理を終了する（ステップ１６１３）。
【０１４２】
一方、ステップ１６０４で、抽出したプログラムブロックの種別がノーマルプログラムブロックであると判別された場合は、プログラムブロック本体を読み出し（ステップ１６０６）、その命令コードを順次解析する（ステップ１６０７）。
【０１４３】
そして、この解析した命令コードがプログラムブロック起動命令かを調べる（ステップ１６０８）。ここで、プログラムブロック起動命令でないと判別された場合は（ステップ１６０８でＮＯ）、ステップ１６１０へ進むが、解析した命令コードがプログラムブロック起動命令であると判別されると（ステップ１６０８でＹＥＳ）、命令コードより起動対象のプログラムブロックＩＤ番号を抽出し、構成情報の一部として記憶したのち（ブロックＡの各レコードのフィールド３）（ステップ１６０９）、ステップ１６１０へ進む。
【０１４４】
尚、プログラムブロック起動命令とは、任意のプログラムブロックを指定して、そのプログラムブロックの起動を開始させる命令である。命令コードはオペコードとオペランドの２つの構成に分かれ、オペコードは本命令がプログラムブロック起動命令であることを示すコードで、オペランドは起動対象となるプログラムブロックのＩＤ番号が格納される。
【０１４５】
ステップ１６１０では、命令コード終了かを調べる。ここで、命令コード終了でないと判別されると（ステップ１６１０でＮＯ）、ステップ１６０７に戻るが、命令コード終了と判別されるとステップ１６１１へ進む。
【０１４６】
そして、抽出したプログラムブロックが最終プログラムブロックかを調べ（ステップ１６１１）、抽出したプログラムブロックが最終プログラムブロックでない場合は（ステップ１６１１でＮＯ）、ステップ１６０２に戻るが、抽出したプログラムブロックが最終プログラムブロックであると判断された場合は（ステップ１６１１でＹＥＳ）、アプリケーションプログラムの情報領域よりサイクル毎に実行されるプログラムブロックの一覧情報のプログラムブロックＩＤ番号を抽出し、構成情報の一部として記憶（ブロックＢのフィールド１〜Ｎ）したのち（ステップ１６１２）、このプログラム構成情報抽出処理を終了する（ステップ１６１３）。
【０１４７】
図１７は、アプリケーションプログラムデータから抽出された構成情報（図４参照）より表示イメージ（図２９参照）を作成する手法を示すプログラム構成表示生成処理フローのフローチャートである。
【０１４８】
図１７において、プログラム構成表示生成処理が開始されると（ステップ１７０１）、まず、プログラム構成情報のブロックＢよりプログラムＩＤを抽出し、上段表示要素とする（ステップ１７０２）。
【０１４９】
次に、上段表示要素に対応するレコードをプログラム構成情報のブロックＡより検索する（各レコードのフィールド１との一致）（ステップ１７０３）。
【０１５０】
そして、該当レコードのフィールド２を調べる（ステップ１７０４）。ここで、該当レコードのフィールド２が入出力パラメータ送受信プログラムブロックであると判別されると、フィールド３より相手先プログラムブロック位置情報のコントローラアドレスを抽出し、「コントローラ別ネットワークアドレス情報」よりコントローラＩＤに変換したうえで、現在の表示要素の右に追加する（ステップ１７０５）。
【０１５１】
次に、フィールド３より相手先プログラムブロックＩＤ番号を抽出し、現在の表示要素の右に追加し（ステップ１７０６）、上段表示要素は最終かを調べる（ステップ１７１４）。ここで、上段表示要素が最終でないと判断されると（ステップ１７１４でＮＯ）、次の表示要素を読み込み（ステップ１７１５）、ステップ１７０３に戻るが、上段表示要素が最終であると判断されると（ステップ１７１４でＹＥＳ）、このプログラム構成表示生成処理を終了する（ステップ１７１６）。
【０１５２】
一方、ステップ１７０４で該当レコードのフィールド２がノーマルプログラムブロックであると判別されると、フィールド３より相手先プログラムブロックＩＤ番号を抽出し、下段表示要素として次ラインに加える（ステップ１７０７）。
【０１５３】
そして、下段表示要素に対応するレコードをプログラム構成情報のブロックＡより検索する（各レコードのフィールド１との一致）（ステップ１７０８）。
【０１５４】
次に、該当レコードのフィールド２を調べる（ステップ１７０９）。ここで、該当レコードのフィールド２がノーマルプログラムブロックであると判別されると、ステップ１７１２へ進むが、該当レコードのフィールド２が入出力パラメータ送受信プログラムブロックであると判別されると、フィールド３より相手先プログラムブロック位置情報のコントローラアドレスを抽出し、「コントローラ別ネットワークアドレス情報」よりコントローラＩＤに変換したうえで、現在の表示要素の右に追加する（ステップ１７１０）。
【０１５５】
次に、フィールド３より相手先プログラムブロックＩＤ番号を抽出し、現在の表示要素の右に追加し（ステップ１７１１）、下段表示要素が最終かを調べる（ステップ１７１２）。ここで、下段表示要素が最終でないと判断されると（ステップ１７１２でＮＯ）、次の表示要素を読み込み（ステップ１７１３）、ステップ１７０８に戻るが、下段表示要素が最終であると判断されると（ステップ１７１２でＹＥＳ）、ステップ１７１４へ進む。
【０１５６】
そして、ステップ１７１４で、上段表示要素が最終でないと判断されると（ステップ１７１４でＮＯ）、次の表示要素を読み込み（ステップ１７１５）、ステップ１７０３に戻るが、上段表示要素が最終であると判断されると（ステップ１７１４でＹＥＳ）、このプログラム構造表示生成処理を終了する（ステップ１７１６）。
【０１５７】
次に、この実施の形態のコントローラシステムの物理的なアプリケーションプログラムの構造の具体例について説明する。
【０１５８】
図１８は、図１に示したこの実施の形態のコントローラシステムにおける物理的なアプリケーションプログラムの構造の一例を示す図である。
【０１５９】
図１８において、この実施の形態のコントローラシステムにおける物理的なアプリケーションプログラムにおいて、コントローラ（コントローラＡ）１０−１のアプリケーションプログラムは、プログラムブロックＰＢ１０〜ＰＢ１５の６つのプログラムブロックで構成されている。ここで、プログラムブロックＰＢ１０とプログラムブロックＰＢ１３、ＰＢ１４との間は階層的な構造にあり、また、プログラムブロックＰＢ１１とプログラムブロックＰＢ１４、ＰＢ１５との間も階層的な構造にある。
【０１６０】
また、コントローラ（コントローラＢ）１０−２のアプリケーションプログラムは、プログラムブロックＰＢ２０、ＰＢ２１の２つのプログラムブロックで構成されており、コントローラ（コントローラＣ）１０−３のアプリケーションプログラムは、プログラムブロックＰＢ３０の１つのプログラムブロックで構成されている。
【０１６１】
ここで、コントローラ（コントローラＡ）１０−１のプログラムブロックＰＢ１２は、コントローラ（コントローラＣ）１０−３のプログラムブロックＰＢ３０に対して入力パラメータとしてデータを渡し、プログラムブロックＰＢ３０の演算結果、すなわち出力パラメータを受け取るプログラムブロックである。
【０１６２】
また、コントローラ（コントローラＡ）１０−１のプログラムブロックＰＢ１３は、コントローラ（コントローラＢ）１０−２のプログラムブロックＰＢ２０に対して入力パラメータとしてデータを渡し、プログラムブロックＰＢ２０の演算結果、すなわち出力パラメータを受け取るプログラムブロックである。
【０１６３】
また、コントローラ（コントローラＡ）１０−１のプログラムブロックＰＢ１４は、コントローラ（コントローラＢ）１０−２のプログラムブロックＰＢ２１に対して入力パラメータとしてデータを渡し、プログラムブロックＰＢ２１の演算結果、すなわち出力パラメータを受け取るプログラムブロックである。
【０１６４】
図１９は、図１８に示した物理的なアプリケーションプログラムの構造に対応する論理的なアプリケーションプログラムの構造を示す図である。
図１９において、コントローラ（コントローラＡ）１０−１のアプリケーションプログラムは、論理的なアプリケーションプログラムの構造として、プログラムブロックＰＢ１０、ＰＢ１１、ＰＢ１５、ＰＢ２０、ＰＢ２１、ＰＢ３０の６つのプログラムブロックで構成されている。
【０１６５】
ここで、プログラムブロックＰＢ１０とプログラムブロックＰＢ２０、ＰＢ２１との間は階層的な構造にあり、また、プログラムブロックＰＢ１１とプログラムブロックＰＢ２１、ＰＢ１５との間も階層的な構造にある。
【０１６６】
なお、プログラムブロックＰＢ２０、ＰＢ２１の実体は、コントローラ（コントローラＢ）１０−２に存在し、プログラムブロックＰＢ３０の実体は、コントローラ（コントローラＣ）１０−３に存在する。
【０１６７】
図２０は、この実施の形態のコントローラシステムで採用するノーマルプログラムブロックの構造の具体例を示す図である。
図２０において、この実施の形態のコントローラシステムで採用するノーマルプログラムブロックは、「プログラムブロック識別子」、「入力パラメータ」、「出力パラメータ」、「プログラムブロック本体」から構成される。
【０１６８】
ここで、「プログラムブロック識別子」は、「プログラムブロック種別」と「プログラムブロックＩＤ番号」からなり、「プログラムブロック種別」には「ノーマルプログラムブロック」が格納される。また、「プログラムブロックＩＤ番号」には、コントローラ内でのユニークな番号が割り付けられる。
【０１６９】
また、「入力パラメータ」には、「プログラムブロック本体」の実行のための入力パラメータが格納され、「出力パラメータ」には、「プログラムブロック本体」の実行結果としての出力パラメータが格納される。
【０１７０】
また、「プログラムブロック本体」には、ラダープログラムなどのプログラムブロックの起動時に実行されるプログラムコードが格納される。
【０１７１】
図２１は、この実施の形態のコントローラシステムで採用する入出力パラメータ送受信プログラムブロックの構造の具体例を示す図である。
図２１において、この実施の形態のコントローラシステムで採用する入出力パラメータ送受信プログラムブロックは、「プログラムブロック識別子」、「入力パラメータ」、「出力パラメータ」、「プログラムブロック本体」から構成される。
【０１７２】
ここで、「プログラムブロック識別子」は、「プログラムブロック種別」と「プログラムブロックＩＤ番号」からなり、「プログラムブロック種別」には「入出力パラメータ送受信プログラムブロック」が格納される。また、「プログラムブロックＩＤ番号」には、コントローラ内でのユニークな番号が割り付けられる。
【０１７３】
また、「入力パラメータ」には、相手先に送信する入力パラメータが格納され、「出力パラメータ」には、相手先から受信した実行処理結果に相当する出力パラメータが格納される。
【０１７４】
また、「プログラムブロック本体」には、入出力パラメータを送受信するための「相手先の位置情報」が格納される。ここで、「相手先の位置情報」には、「相手先プログラムのプログラムブロック位置情報」および「相手先入出力パラメータ位置情報」があり、「相手先プログラムのプログラムブロック位置情報」は、「コントローラのアドレス」および「プログラムブロックＩＤ番号」から構成される。尚、ここで、「相手先入出力パラメータ位置情報」とは、入出力パラメータを送受信するための相手先コントローラでの位置である。
【０１７５】
図２２は、図１８に示したプログラムブロックＰＢ１０のプログラムブロックデータの具体例を示す図である。
図２２において、プログラムブロックＰＢ１０のプログラムブロックデータは、「プログラムブロック識別子」の「プログラムブロック種別」として「ノーマルプログラムブロック」が格納され、「プログラムブロックＩＤ番号」として「ＰＢ１０」が格納される。
【０１７６】
また、「入力パラメータ」として「ＤＭ００００」が格納され、「出力パラメータ」として「ＤＭ０００１」が格納される。なお、図２２において「プログラムブロック本体」のプログラムコードは省略している。
【０１７７】
図２３は、図１８に示したプログラムブロックＰＢ１３のプログラムブロックデータの具体例を示す図である。
図２３において、プログラムブロックＰＢ１３のプログラムブロックデータは、「プログラムブロック識別子」の「プログラムブロック種別」として「入出力パラメータ送受信プログラムブロック」が格納され、「プログラムブロックＩＤ番号」として「ＰＢ１３」が格納される。
【０１７８】
また、「入力パラメータ」として「ＤＭ２０００」が格納され、「出力パラメータ」として「ＤＭ２００１」が格納される。
【０１７９】
また、「プログラムブロック本体」の「相手先プログラムのプログラムブロック位置情報」の「コントローラのアドレス」には「コントローラＢ」が格納され、「プログラムブロックＩＤ番号」には、「ＰＢ２０」が格納される。
【０１８０】
また、「プログラムブロック本体」の「相手先入出力パラメータ位置情報」には、「入力」として「ＣＭ００００」が格納され、「出力」として「ＣＭ０００１」が格納される。
【０１８１】
図２４は、図１８に示したプログラムブロックＰＢ２０のプログラムブロックデータの具体例を示す図である。
図２４において、プログラムブロックＰＢ２０のプログラムブロックデータは、「プログラムブロック識別子」の「プログラムブロック種別」として「ノーマルプログラムブロック」が格納され、「プログラムブロックＩＤ番号」として「ＰＢ２０」が格納される。
【０１８２】
また、「入力パラメータ」として「ＣＭ００００」が格納され、「出力パラメータ」として「ＣＭ０００１」が格納される。なお、図２４において「プログラムブロック本体」のプログラムコードは省略している。
【０１８３】
図２５は、図１８に示したコントローラシステムで採用されるアプリケーションプログラムデータの具体例を示す図である。
図２５において、アプリケーションプログラムデータのデータ領域情報は、アプリケーションプログラムデータのデータ構造を示すもので、各プログラムブロック毎の格納場所が記述されている。また、毎サイクル起動されるプログラムブロックの一覧情報もここに格納される。
【０１８４】
ここで、プログラムブロックＰＢ１０〜ＰＢ１５のデータには、プログラム運転処理にて実行される命令語群が実行順に格納される。
【０１８５】
なお、図２５は、コントローラ（コントローラＡ）１０−１のアプリケーションプログラムデータの具体例を示したが、コントローラ（コントローラＢ）１０−２およびコントローラ（コントローラＣ）１０−３のアプリケーションプログラムデータも同様に構成される。
【０１８６】
図２６は、図１８に示したコントローラシステムで採用されるアプリケーションプログラムデータテーブルの具体例を示す図である。
図２６において、このアプリケーションプログラムデータテーブルはサポートツール２４内に記憶され、このアプリケーションプログラムデータテーブルのデータ領域情報は、アプリケーションプログラムデータテーブルのデータ構造を示し、各アプリケーションプログラムデータ毎の格納場所が記述されている。
【０１８７】
この例では、アプリケーションプログラムデータとしてコントローラ（コントローラＡ）１０−１〜コントローラ（コントローラＣ）１０−３のアプリケーションプログラムデータが存在するが、ネットワーク３０に接続されるコントローラの数が増えると、同様にデータ領域が追加される。
【０１８８】
また、アプリケーションプログラムデータは、コントローラ毎に記憶されるアプリケーションプログラムデータと同一の構造を持つ。
【０１８９】
図２７は、図１８に示したコントローラシステムで採用されるプログラムブロックステータス情報の具体例を示す図である。
図２７において、プログラムブロックステータス情報は「プログラムブロックＩＤ番号」と「ステータス」とからなる。
【０１９０】
ここで、「プログラムブロックＩＤ番号」はプログラムブロックの識別子であり、「ステータス」は該当プログラムブロックの状態および状態指示を示す。
【０１９１】
この情報は、コントローラにおいて、各プログラムブロックの実行を制御するための情報であり、図２のワークメモリ１５に生成される。毎サイクルに実行処理されるすべてのプログラムブロックのプログラムブロックＩＤに対してその状態が記憶される。
【０１９２】
プログラム運転処理の初回時にすべてのプログラムブロックが起動としてワークメモリ１５に生成記憶され、プログラム運転処理においてこのワークエリアの内容に従って各プログラムブロックが実行または停止される。
【０１９３】
図２８は、図１８に示したコントローラシステムで採用されるコントローラ別ネットワークアドレス情報の具体例を示す図である。
図２８において、このコントローラ別ネットワークアドレス情報は、「コントローラＩＤ」と「アドレス」とからなる。この情報が図２のワークメモリ１５に記憶される。
【０１９４】
ここで、「コントローラＩＤ」は、ネットワーク３０に接続されているコントローラの識別子を示し、「アドレス」は、各コントローラのネットワーク３０上のアドレスを示す。
【０１９５】
この情報は、ネットワーク接続されたコントローラのネットワーク３０上のアドレスを示し、サポートツール２０のメモリ空間２３のパラメータデータエリア２３−１に格納される。
【０１９６】
また、図２９は、プログラムブロックＰＢ１０のプログラムブロック本体の一部の具体例を示し、また、図３０は、プログラムブロックＰＢ１１のプログラムブロック本体の一部の具体例を示す。
【０１９７】
また、図３１は、図３に示したサポートツール２０の表示装置２８の表示画面の一例を示したものである。
図３１において、サポートツール２０の表示装置２８の表示画面は、画面全体を「コントローラ一覧」、「アプリケーションプログラム構造」、「プログラムブロック情報」の表示ウインドウに分割し、複数のフレーム化して表示するユーザインタフェースを構成する。
【０１９８】
また、図３２は、図３１に示した「コントローラ一覧」のサポートツール２０の具体的な表示例を示したものであり、図３３は、図３１に示した「アプリケーションプログラム構成」の具体的サポートツール２０の表示例を示したものであり、図３４は、図３１に示した「プログラムブロック情報」の具体的サポートツール２０の表示例を示したものであり、図３５は、図３１に示した「プログラムブロック情報」の具体的サポートツール２０の他の表示例を示したものである。
【０１９９】
さて、上記構成に基づくこの実施の形態のコントローラシステムの具体的動作例を以下に説明する。
（プログラムブロックの実行処理）
この実施の形態のコントローラシステムは、図１に示したように、３台のコントローラ、すなわちコントローラ（コントローラＡ）１０−１、コントローラ（コントローラＢ）１０−２、コントローラ（コントローラＣ）１０−３とサポートツール２０をネットワーク３０に接続して構成される。
【０２００】
それぞれのコントローラ、すなわちコントローラ（コントローラＡ）１０−１、コントローラ（コントローラＢ）１０−２、コントローラ（コントローラＣ）１０−３には、アプリケーションプログラムとして、図１８に示した物理的なアプリケーションプログラム構造のように分割されたプログラムブロックが格納されている。
【０２０１】
各プログラムブロックには、各コントローラにおいて「プログラム運転処理」起動により、毎サイクル起動されるものと、任意のプログラムブロックより起動されるものがあり、この実施の形態においては、コントローラ（コントローラＡ）１０−１のプログラムブロックＰＢ１０、ＰＢ１１，ＰＢ１２、コントローラ（コントローラＢ）１０−２のプログラムブロックＰＢ２０、ＰＢ２１、コントローラ（コントローラＣ）１０−３のプログラムブロックＰＢ３０は前者にあたり、コントローラ（コントローラＡ）１０−１のプログラムブロックＰＢ１３、ＰＢ１４、ＰＢ１５は後者にあたる。
【０２０２】
「プログラム運転処理」起動により、毎サイクル起動されるプログラムブロックは、プログラミングの際に作業者が設定しておき、図２５に示した「アプリケーションプログラムデータ」内のデータ情報領域に格納されている。
【０２０３】
この毎サイクル起動されるプログラムブロックは、図７に示した「プログラム運転処理フロー（コントローラ）」に示すように、毎サイクル起動されて、図８，図９に示す「プログラムブロック実行処理フロー」のように実行処理される。
【０２０４】
任意のプログラムブロックから起動されるプログラムブロックは、図２９に示したプログラムブロックＰＢ１０のプログラムブロック本体の一部若しくは図３０に示したプログラムブロックＰＢ１１のプログラムブロック本体の一部のようにプログラムブロックの本体のプログラムコードより起動される。これらの例に示される［ＰＢ１３］および［ＰＢ１５］は、プログラムブロックの起動を行う命令コードを表し、起動されるプログラムブロックのデータは、図２５に示す「アプリケーションプログラムデータ」のようにユーザプログラムメモリ１３上に格納される。
【０２０５】
なお、任意のプログラムブロックから起動されるプログラムブロックの処理内容は、図８，図９に示した「プログラムブロック実行処理フロー」となる。
【０２０６】
さて、コントローラ（コントローラＡ）１０−１のプログラムブロックＰＢ１０、ＰＢ１１、ＰＢ１５、コントローラＢのプログラムブロックＰＢ２０、ＰＢ２１、コントローラＣのプログラムブロックＰＢ３０は、ノーマルプログラムブロックであり、コントローラＡ，Ｂ，Ｃにて実行処理されるプログラムコードが格納されていて、起動時は図２０に示したような「ノーマルプログラムブロックの構造」に示される入力パラメータの値をもって、オペレータにより予めプログラミングされたプログラムブロック本体を実行し、その結果を出力パラメータに返す。
【０２０７】
コントローラＡのプログラムブロックＰＢ１２、ＰＢ１３、ＰＢ１４は入出力パラメータ送受信プログラムブロックで、起動時は図２１に示した「入出力パラメータ送受信プログラムブロックの構造」に示される入力パラメータの値を、プログラムブロック本体として格納された相手先プログラム位置情報と相手先入出力パラメータを用いて、相手先コントローラのプログラムブロックの入力パラメータに格納する。
【０２０８】
また、相手先コントローラの出力パラメータを読み込み、自プログラムブロックの出力パラメータに格納する。
【０２０９】
以下、コントローラＡのプログラムブロックＰＢ１３とコントローラＢのプログラムブロックＰＢ２０を例にとって、その詳細動作を説明する。
【０２１０】
コントローラＡのプログラムブロックＰＢ１３には、図２３に示した「ＰＢ１３のプログラムブロックデータ」のような情報が、アプリケーションプログラムの一部としてコントローラＡのユーザープログラムメモリ１３上に格納されている。
【０２１１】
ここで、入力パラメータ「ＤＭ２０００」および出力パラメータ「ＤＭ２００１」はコントローラＡのＩ／０メモリ１６上のアドレスである。また、相手先入出力パラメータ位置情報の「ＣＭ００００」および「ＣＭ０００１」も、コントローラＢのＩ／０メモリ１６上のアドレスである。
【０２１２】
コントローラＢのプログラムブロックＰＢ２０には、図２４に示した「ＰＢ２０のプログラムブロックデータ」のような情報がアプリケーションプログラムの一部としてコントローラＢのユーザープログラムメモリ１３上に格納されている。
【０２１３】
コントローラＡではユーザープログラム実行処理においてプログラムブロックＰＢ１３が起動されるとき、入力パラメータである「ＤＭ２０００」の値を、コントローラＢの「ＣＭ００００」に格納する。これはメッセージサービスの「データ送信」コマンドにより行われる。
【０２１４】
また、同じくコントローラＢの「ＣＭ０００１」のデータを読み出し、出力パラメータである「ＤＭ２００１」に格納する。これはメッセージサービスの「データ受信コマンド」により行われる。
【０２１５】
コントローラＢではユーザープログラム実行処理においてプログラムブロックＰＢ２０が起動されるとき、「ＣＭ００００」の値をパラメータとして、プログラムブロック本体のプログラムコードが実行処理され、その実行結果が出力パラメータである「ＣＭ０００１」に格納される。
【０２１６】
なお、入出力パラメータ送受信プログラムブロックの処理方法として，プログラムブロック本体内に、送受信のためのプログラムを格納し、ノーマルのプログラムブロックと同様に実行処理することで、上記構成と同じ効果を得る方式も考えられる。
【０２１７】
また、入出力パラメータ送受信プログラムブロックによるデータの送受信方式として上記実施の形態ではメッセージサービスによるものを用いたが、ネットワークを介して複数のコントローラ間で共有メモリを実現するデータリンク方式（またはコモンメモリ方式）を用いても同様に構成することができる。
（サポートツールによるプログラム表示I）
サポートツール２０は、表示装置２８への表示において、画面全体を分割し、複数のフレーム化し表示する図３１に示した「サポートツール表示構成」ようなユーザーインタフェースをもつ。なお、図３１の「サポートツール表示構成」はこの実施の形態における画面表示のイメージである。
【０２１８】
ここで、作業者はサポートツール２０により、「プログラム読出機能」を起動する。
【０２１９】
「プログラム読出機能」を起動すると、サポートツール２０はパラメータデータエリア２３−１に格納されている図２８に示した「コントローラ別ネットワークアドレス情報」よりネットワーク３０に接続しているコントローラＩＤを抽出し、図３２に示した「サポートツール表示例（コントローラ一覧）」のようなネットワークに接続しているコントローラを一覧として表示する。
【０２２０】
ここで、作業者はアプリケーションプログラムを読み出したいコントローラを選択する。なお、図３２の「サポートツール表示例（コントローラ一覧）」ではコントローラＡが選択された例を示している。
【０２２１】
サポートツール２０は、メッセージサービスにより、選択されたコントローラよりアプリケーションプログラムを読み出す。これはメッセージサービスの「プログラム読出コマンド」にて行われる。
【０２２２】
サポートツール２０では、コントローラより読出したアプリケーションプログラムを記憶したうえで、データを解析し、図３３の「サポートツール表示フレーム例（アプリケーションプログラム構成）」のようにプログラムブロックの構造を画面分割したフレームに表示する。
【０２２３】
ここで、図３３の「サポートツール表示フレーム例（アプリケーションプログラム構成）」はコントローラＡのアプリケーションプログラム構成をプログラムブロック単位で表示した例である。
【０２２４】
なお、アプリケーションプログラムのデータを解析する際に、プログラムブロックが入出力パラメータ送受信プログラムブロックである場合は、図３３の「サポートツール表示フレーム例（アプリケーションプログラム構成）」のプログラムブロックＰＢ１２、ＰＢ１３、ＰＢ１４の表示形式のような相手先のコントローラとプログラムブロックも併せて表示される。
【０２２５】
アプリケーションプログラムデータからその構成情報を抽出する手法と構成情報より表示イメージを作成する手法は、図１６に示した「プログラム構成情報抽出処理フロー」と図１７に示した「プログラム構造表示生成処理フロー」とに示される。
【０２２６】
作業者は表示されたプログラムブロックの中から情報を表示したいプログラムブロックを選択する。図３３の「サポートツール表示フレーム例（アプリケーションプログラム構造）」では、プログラムブロックＰＢ１０が選択されている例を示している。
【０２２７】
サポートツールは先に読み出したコントローラＡのアプリケーションプログラムより、選択された該当のプログラムブロックのデータを抽出解析し，その情報を画面分割したフレームに表示する。図３４の「サポートツール表示例（プログラムブロック情報ＰＢ１０）」はプログラムブロックＰＢ１０のプログラムブロックの情報を表示した例である。
【０２２８】
ここで、プログラムブロックＰＢ１０はノーマルプログラムブロックであるために、プログラムブロックのデータは図２２に示した「ＰＢ１０のプログラムブロックデータ」のようになり、フレームに表示される情報は、入力パラメータ、出力パラメータ、およびプログラムブロック本体であるプログラムコードリストとなる。
【０２２９】
作業者が図３３の「サポートツール表示フレーム例（アプリケーションプログラム構成）」においてプログラムブロックＰＢ１０と同様にプログラムブロックＰＢ１３を選択した場合は、以下のようになる。
【０２３０】
サポートツール２０は、プログラムブロックＰＢ１３のプログラムブロックのデータを抽出解析する。ここで、プログラムブロックＰＢ１３は、入出力パラメータ送受信プログラムブロックであるため、プログラムブロックのデータは図２３の「ＰＢ１３のプログラムブロックデータ」のようになる。
【０２３１】
サポートツール２０は、プログラムブロック本体に格納されている相手先プログラムブロック位置情報をもとに、コントローラＢよりプログラムブロックＰＢ２０のプログラムブロックデータを読み出す。これはメッセージサービスの「プログラムブロック読出コマンド」にて行われる。
【０２３２】
読み出したプログラムブロックデータは、図２４の「ＰＢ２０のプログラムブロックデータ」となり、プログラムブロックＰＢ２０はノーマルプログラムブロックであるため、これを解析しプログラムブロックＰＢ１３の情報と併せて図３５の「サポートツール表示例（プログラムブロック情報ＰＢ２０）」のようにプログラムブロックの情報をフレームに表示する。
【０２３３】
これにより作業者は、実際は、図１８の「物理的なアプリケーションプログラム構造」のように構成されたアプリケーションプログラム構成を、図１９の「論理的なアプリケーションプログラムの構造」として認識することができるようになる。
（サポートツールによるプログラム表示II）
サポートツール２０は、表示装置２８への表示において、画面全体を分割し、複数のフレーム化し表示する図３１に示した「サポートツール表示構成」ようなユーザーインタフェースをもつ。なお、図３１の「サポートツール表示構成」はこの実施の形態における画面表示のイメージである。
【０２３４】
ここで、作業者はサポートツール２０により、「プログラム読出機能」を起動する。
「プログラム読出機能」を起動すると、サポートツール２０はパラメータデータエリア２３−１に格納されている図２８に示した「コントローラ別ネットワークアドレス情報」よりネットワーク３０に接続しているコントローラＩＤを抽出し、図３２に示した「サポートツール表示例（コントローラ一覧）」のようなネットワークに接続しているコントローラを一覧として表示する。
【０２３５】
ここで、作業者はアプリケーションプログラムを読み出したいコントローラを選択する。なお、図３２の「サポートツール表示例（コントローラ一覧）」ではコントローラＡが選択された例を示している。
【０２３６】
サポートツール２０は、メッセージサービスにより、コントローラよりアプリケーションプログラムの構成を読み出す。これはメッセージサービスの「プログラム構成読出コマンド」にて行われる。
【０２３７】
サポートツール２０では、コントローラより読出したアプリケーションプログラムの構成情報を記憶した上で、データを解析し、図３３の「サポートツール表示フレーム例（アプリケーションプログラム構成）」のようにプログラムブロックの構造を画面分割したフレームに表示する。
【０２３８】
ここで、図３３の「サポートツール表示フレーム例（アプリケーションプログラム構成）」はコントローラＡのアプリケーションプログラム構成をプログラムブロック単位で表示した例である。
【０２３９】
アプリケーションプログラムの構成情報から表示イメージを作成する手法は、図１７の「プログラム構造表示生成処理フロー」に示す。
【０２４０】
作業者は表示されたプログラムブロックの中から情報を表示したいプログラムブロックを選択する。なお、図３３の「サポートツール表示フレーム例（アプリケーションプログラム構成）」では、プログラムブロックＰＢ１０が選択されている例を示している。
【０２４１】
サポートツール２０は、指定されたプログラムブロックの情報をコントローラより読み出す。これはメッセージサービスの「プログラムブロック読出コマンド」にて行われる。
【０２４２】
読み出したプログラムブロックのデータを抽出解析し、その情報を画面分割したフレームに表示する。図３４の「サポートツール表示例（プログラムブロック情報ＰＢ１０）」はプログラムブロックＰＢ１０のプログラムブロックの情報を表示した例である。
【０２４３】
プログラムブロックＰＢ１０はノーマルプログラムブロックであるため、コントローラＡより読み出したプログラムブロックのデータは図２２の「ＰＢ１０のプログラムブロックデータ」のようになり、フレームに表示される情報は、入力パラメータ、出力パラメータ、およびプログラムブロック本体であるプログラムコードリストとなる。
【０２４４】
作業者が図３３の「サポートツール表示フレーム例（アプリケーションプログラム構成）」においてプログラムブロックＰＢ１０と同様にプログラムブロックＰＢ１３を選択した場合は、以下のようになる。
【０２４５】
サポートツール２０は、プログラムブロックＰＢ１３のデータをコントローラＡより読み出して解析する。プログラムブロックＰＢ１３は入出力送受信プログラムブロックであるために、プログラムブロックのデータは図２３の「ＰＢ１３のプログラムブロックデータ」のようになる。
【０２４６】
サポートツール２０は、プログラムブロック本体に格納されている相手先プログラムブロック位置情報をもとに、コントローラＢよりプログラムブロックＰＢ２０のプログラムブロックデータを読み出す。これはメッセージサービスの「プログラムブロック読出コマンド」にて行われる。
【０２４７】
読み出したプログラムブロックデータは、図２４の「ＰＢ２０のプログラムブロックデータ」となり、プログラムブロックＰＢ２０はノーマルプログラムブロックであるため、これを解析しプログラムブロックＰＢ１３の情報と併せて図３５の「サポートツール表示例（プログラムブロック情報ＰＢ２０）」のようにプログラムブロックの情報をフレームに表示する。
【０２４８】
これにより作業者は、実際は、図１８の「物理的なアプリケーションプログラム構造」のように構成されたアプリケーションプログラム構成を、図１９の「論理的なアプリケーションプログラムの構造」として認識することができるようになる。
【０２４９】
【発明の効果】
以上説明したようにこの発明によれば、以下に示したような効果を奏する。
１）複数のコントローラに跨るアプリケーションプログラムの構造が論理的に認識できるため、作業者による認識が容易になり作業ミスがなくなる。
【０２５０】
２）複数のコントローラに格納されているアプリケーションプログラムの所定の部分が、論理的なプログラム構造に従って自動的に表示されるため、従来の１台のコントローラ毎にかつプログラムブロック毎に繰り返していた作業操作が単純化でき、設備のデバック／メンテナンス時等の作業効率が大幅に向上する。
【０２５１】
３）複数のコントローラに跨るアプリケーションプログラムを特別な構成情報なしに、コントローラに格納されているアプリケーションデータだけで論理的に表示できることで、構成情報の作成、保存、読み出しなどの管理に関して作業者への負担がなくなる。
【０２５２】
４）複数のコントローラアプリケーションプログラムを論理構造を持って表示するために、特別な構成情報が必要でなくなりサポートツール側のハード資源負担が軽くなり、より低コストなサポートツールが提供しやすくなる。
【０２５３】
５）ネットワークを介したデータの送受信が、プログラムブロックへのパラメータ定義だけで実現されるため、設計者の負担が軽くなるとともに、データの送受信部が特定のプログラムブロックに集約されるため構造的に分かりやすい設計が可能になる。
【図面の簡単な説明】
【図１】  この発明に係わるコントローラシステムの一実施の形態の全体構成を示すブロック図である。
【図２】  図１に示したコントローラシステムのコントローラの詳細構成を示したブロック図である。
【図３】  図１に示したコントローラシステムのサポートツールの詳細構成を示したブロック図である。
【図４】  プログラム構成読出に対する受信レスポンスのプログラム構成情報の一例を示す図である。
【図５】  図２に示したコントローラにおける全体処理フローを示すフローチャートである。
【図６】  図５に示したネットワーク処理の詳細を示すフローチャートである。
【図７】  図５に示したプログラム運転処理の詳細を示すフローチャートである。
【図８】  図７に示したプログラムブロック実行処理の詳細を示すフローチャート（その１）である。
【図９】  図７に示したプログラムブロック実行処理の詳細を示すフローチャート（その２）である。
【図１０】  図２に示したサポートツールにおける全体処理フローを示すフローチャートである。
【図１１】  図１０に示したプログラム読出機能処理の詳細を示すプログラム読出機能フローのフローチャート（その１）である。
【図１２】  図１０に示したプログラム読出機能処理の詳細を示すプログラム読出機能フローのフローチャート（その２）である。
【図１３】  図１０に示したステップ１００５のプログラム読出機能処理の詳細を示す他のプログラム読出機能フローのフローチャート（その１）である。
【図１４】  図１０に示したステップ１００５のプログラム読出機能処理の詳細を示す他のプログラム読出機能フローのフローチャート（その２）である。
【図１５】  図１０に示したステップ１００５のプログラム読出機能処理の詳細を示す他のプログラム読出機能フローのフローチャート（その３）である。
【図１６】  アプリケーションプログラムデータからその構成情報を抽出する手法を示すプログラム構成情報抽出処理フローのフローチャートである。
【図１７】  アプリケーションプログラムデータから抽出された構成情報より表示イメージを作成する手法を示すプログラム構成表示生成処理フローのフローチャートである。
【図１８】  図１に示した実施の形態のコントローラシステムにおける物理的なアプリケーションプログラムの構造の一例を示す図である。
【図１９】  図１８に示した物理的なアプリケーションプログラムの構造に対応する論理的なアプリケーションプログラムの構造を示す図である。
【図２０】  この実施の形態のコントローラシステムで採用するノーマルプログラムブロックの構造の具体例を示す図である。
【図２１】  この実施の形態のコントローラシステムで採用する入出力パラメータ送受信プログラムブロックの構造の具体例を示す図である。
【図２２】  図１８に示したプログラムブロックＰＢ１０のプログラムブロックデータの具体例を示す図である。
【図２３】  図１８に示したプログラムブロックＰＢ１３のプログラムブロックデータの具体例を示す図である。
【図２４】  図１８に示したプログラムブロックＰＢ２０のプログラムブロックデータの具体例を示す図である。
【図２５】  図１８に示したコントローラシステムで採用されるアプリケーションプログラムデータの具体例を示す図である。
【図２６】  図１８に示したコントローラシステムで採用されるアプリケーションプログラムデータテーブルの具体例を示す図である。
【図２７】  図１８に示したコントローラシステムで採用されるプログラムブロックステータス情報の具体例を示す図である。
【図２８】  図１８に示したコントローラシステムで採用されるコントローラ別ネットワークアドレス情報の具体例を示す図である。
【図２９】  図１８に示したプログラムブロックＰＢ１０のプログラムブロック本体の一部の具体例を示した図である。
【図３０】  図１８に示したプログラムブロックＰＢ１１のプログラムブロック本体の一部の具体例を示した図である。
【図３１】  図３に示したサポートツール２０の表示装置２８の表示画面の一例を示した図である。
【図３２】  図３１に示した「コントローラ一覧」の具体的サポートツールの表示例を示した図である。
【図３３】  図３１に示した「アプリケーションプログラム構造」の具体的サポートツールの表示例を示した図である。
【図３４】  図３１に示した「プログラムブロック情報」の具体的サポートツールの表示例を示した図である。
【図３５】  図３１に示した「プログラムブロック情報」の具体的サポートツールの他の表示例を示した図である。
【符号の説明】
１０−１    コントローラ（コントローラＡ）
１０−２    コントローラ（コントローラＢ）
１０−３    コントローラ（コントローラＣ）
１１    演算プロセッサ（ＣＰＵ）
１２    システムプログラムメモリ
１３    ユーザプログラムメモリ
１４    パラメータメモリ
１５    ワークメモリ
１６    入出力メモリ（Ｉ／Ｏメモリ）
１７    通信インタフェース（通信Ｉ／Ｆ）
１８    入出力インタフェース（Ｉ／Ｆ）
１９    入出力装置
２０    サポートツール
２１    演算装置
２２    中央処理装置
２３    メモリ空間
２３−１    パラメータデータエリア
２３−２    ユーザプログラムデータエリア
２３−３    サポートツールプログラムエリア
２４    表示装置用メモリ
２５    バス
２６    インタフェース（Ｉ／Ｆ）
２７    入力装置
２８    表示装置
３０    ネットワーク
【図１】
0004186383.tif 000002
【図２】
0004186383.tif 000003
【図３】
0004186383.tif 000004
【図４】
0004186383.tif 000005
【図５】
0004186383.tif 000006
【図６】
0004186383.tif 000007
【図７】
0004186383.tif 000008
【図８】
0004186383.tif 000009
【図９】
0004186383.tif 000010
【図１０】
0004186383.tif 000011
【図１１】
0004186383.tif 000012
【図１２】
0004186383.tif 000013
【図１３】
0004186383.tif 000014
【図１４】
0004186383.tif 000015
【図１５】
0004186383.tif 000016
【図１６】
0004186383.tif 000017
【図１７】
0004186383.tif 000018
【図１８】
0004186383.tif 000019
【図１９】
0004186383.tif 000020
【図２０】
0004186383.tif 000021
【図２１】
0004186383.tif 000022
【図２２】
0004186383.tif 000023
【図２３】
0004186383.tif 000024
【図２４】
0004186383.tif 000025
【図２５】
0004186383.tif 000026
【図２６】
0004186383.tif 000027
【図２７】
0004186383.tif 000028
【図２８】
0004186383.tif 000029
【図２９】
0004186383.tif 000030
【図３０】
0004186383.tif 000031
【図３１】
0004186383.tif 000032
【図３２】
0004186383.tif 000033
【図３３】
0004186383.tif 000034
【図３４】
0004186383.tif 000035
【図３５】
0004186383.tif 000036