(57)【特許請求の範囲】
【請求項１】
制御システムを構成する複数の制御装置間のデータ伝送方法であって、
前記制御装置間で伝送される各データと、当該各データを一意に特定する識別キーとを対応付けるステップと、
前記制御装置のそれぞれについて、当該制御装置間で伝送される前記各データに対応付けられた前記識別キーを所定の規則にしたがって配列することによって、前記識別キーの送信配列順序及び受信配列順序を決定するステップと、
データ送信時において、前記複数の制御装置の１つが、前記送信配列順序にしたがって、送信フレーム領域内に送信データを格納するステップと、
データ受信時において、前記複数の制御装置の他の１つが、送信元となる前記複数の制御装置の１つがもつ前記送信配列順序と受信先となる前記複数の制御装置の他の１つがもつ前記受信配列順序とを前記識別キーに基づいて照合することにより前記送信フレーム領域内の受信データの格納位置を特定し、当該受信データを読み込むステップと
を含むことを特徴とするデータ伝送方法。
【請求項２】
請求項１に記載のデータ伝送方法において、
前記複数の制御装置の１つが、前記送信フレーム領域内に前記送信データを格納するときに、前記送信配列順序に係る更新情報を当該送信フレーム領域内に格納するステップと、
前記複数の制御装置の他の１つが、前記受信データを読み込むのに先立って前記送信フレーム領域から前記更新情報を読み込み、前記送信配列順序が更新されている場合は、当該送信フレーム領域に対応する前記送信元の制御装置から更新後の前記送信配列順序を取得するステップと
をさらに含むことを特徴とするデータ伝送方法。
【請求項３】
請求項２に記載のデータ伝送方法において、
前記制御装置のそれぞれが行う制御動作は、前記送信データを表す送信素子と前記受信データを表す受信素子とが対応付けられた制御ブロック図によって記述されており、
前記制御ブロック図から前記各制御装置の実行プログラムを生成するコンパイラが、前記制御ブロック図から前記送信素子を抽出して、当該送信素子に該当するデータに前記識別キーを割り当てるとともに、所定の規則によって前記識別キーの送信配列順序を決定する送信素子抽出処理を実行し、
前記コンパイラが前記送信素子抽出処理を実行した時刻である配列更新時刻、または、前記コンパイラが所定の規則によって付与する配列順序のバージョン情報、または、配列順序の更新の有無を表すフラグデータを、前記送信配列順序に係る更新情報として用いる
ことを特徴とするデータ伝送方法。
【請求項４】
請求項１から請求項３のいずれか一項に記載のデータ伝送方法において、
前記送信フレーム領域は、前記制御装置のそれぞれからアクセス可能な共有メモリ上に配置される
ことを特徴とするデータ伝送方法。
【請求項５】
請求項１から請求項３のいずれか一項に記載のデータ伝送方法において、
前記送信フレーム領域に格納される前記送信データは、ネットワークを介して前記送信元となる各制御装置から他の制御装置に同報送信される
ことを特徴とするデータ伝送方法。
【請求項６】
請求項１に記載のデータ伝送方法において、
前記複数の制御装置間で伝送されるデータは、数値データであるアナログデータと、２値データであるデジタルデータとを含む２種類以上のデータであり、
前記制御装置のそれぞれは、
前記送信フレーム領域内に送信する前記データを格納するときに、前記送信フレーム領域内の開始位置から始まるヘッダ情報内の所定の位置に、送信する前記データの種類毎のデータ数とそれらの総和のデータ数とを格納し、
前記送信フレーム領域内から前記データを受信するときに、前記データの種類毎のデータ数とそれらの総和のデータ数との整合性をチェックすることによって、前記送信フレーム領域内に格納された前記データの異常の有無を判定する
ことを特徴とするデータ伝送方法。
【請求項７】
複数の制御装置を備え、
前記複数の制御装置の１つは、請求項１から請求項６のいずれか一項に記載のデータ伝送方法を用いて前記複数の制御装置の他の１つとの間のデータ伝送を行う
ことを特徴とする制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、産業用プラントの監視制御などに用いられる制御システムにおける制御装置間でのデータ伝送の技術に関する。
【背景技術】
【０００２】
発電プラントなどの大規模な産業用プラントでは、制御対象となる多数の機器をいくつかのグループに分割し、グループ単位に制御装置を設けて制御を行う形態の制御システムが用いられ、各制御装置を連携して動作させるために、制御装置間でのデータ伝送が必要となる。そのため、従来は、例えば各制御装置の制御動作が記述された制御ブロック図などから制御装置間での伝送が必要なすべてのデータを抽出し、それぞれの制御装置間で授受される伝送データの形式をすべて決定したのちに、各制御装置毎に制御用の実行プログラムを生成していた。以下、このように伝送データの形式を決定して実行プログラムを生成する処理のことを「伝送コンパイル」と呼ぶこととする。
【０００３】
伝送コンパイルに関する従来技術として、特許文献１には、各制御装置の制御ブロック図に記載されている送信素子から抽出した送信データを、所定の規則にしたがって自動的に配列することによって送信フレームのデータ形式を決定し、決定したデータ形式に基づいて各制御装置の制御ブロック図に記載されている受信素子に受信データを取り込む伝送コンパイルの方法が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−６５６１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の伝送コンパイルの方法では、すべての送信データが規定されて送信フレームのデータ形式が決定されなければ伝送コンパイルを実行できず、また、伝送コンパイルを実行したのちに送信フレームのデータ形式が変更されると、関連するすべての制御装置について伝送コンパイルを再実行しなければならないという問題点があった。
【０００６】
本発明は、前記の問題点を解決するためになされたものであり、具体的な伝送データの形式が決定されていなくても各制御装置の単位で独立して伝送コンパイルを実行できるとともに、伝送データの形式が変更されても伝送コンパイルの再実行が不要であり、以って制御プログラムの開発期間を短縮することができるデータ伝送方法および制御システムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
前記の目的を達成するために、本発明のデータ伝送方法は、制御システムを構成する複数の制御装置が他の制御装置との間でデータ伝送を行うためのデータ伝送方法であって、前記制御装置間で伝送される各データと、当該データを一意に特定する識別キーとを対応付けるステップと、前記制御装置のそれぞれについて、当該制御装置が送信する前記各データに対応付けられた前記識別キーを所定の規則にしたがって配列することによって、前記識別キーの配列順序を決定するステップと、前記制御装置のそれぞれが、自身の記憶部に記憶した自身が送信する前記各データに係る前記配列順序にしたがって、自身の送信フレーム領域内に自身が送信する前記各データを格納するステップと、前記制御装置のそれぞれが、自身の記憶部に記憶した自身が受信する前記各データの送信元となる各制御装置が送信する前記各データに係る前記配列順序に基づいて、前記送信元となる各制御装置の前記送信フレーム領域内における自身が受信する前記各データの格納位置を特定して、当該格納位置から自身が受信する前記各データを読み込むステップとを含むことを特徴とする。
【０００８】
また、本発明の制御システムは、複数の制御装置を備え、それらの制御装置が前記のデータ伝送方法を用いて他の制御装置との間のデータ伝送を行うことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、具体的な伝送データの形式が決定されていなくても各制御装置の単位で独立して伝送コンパイルを実行できるとともに、伝送データの形式が変更されても伝送コンパイルの再実行が不要であり、以って制御プログラムの開発期間を短縮することができるデータ伝送方法および制御システムを提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施対象となるプラント監視制御システムの構成例を示すブロック図である。
【図２】本発明を実施するときのプラント監視制御システムの機能構成および動作についての説明図である。
【図３】送信素子抽出処理についての説明図である。
【図４】受信素子抽出処理についての説明図である。
【図５】共有メモリの領域構成についての説明図である。
【図６】共有メモリに送信データを格納する動作についての説明図である。
【図７】共有メモリから受信データを読み込む動作についての説明図である。
【図８】送信元別受信管理テーブルの構成およびデータ例である。
【図９】プラント監視制御システムの全体的な動作を示したフローチャートである。
【図１０】送信素子抽出処理のフローチャートである。
【図１１】受信素子抽出処理のフローチャートである。
【図１２】データ送信処理のフローチャートである。
【図１３】データ受信処理のフローチャートである。
【図１４】送信配列リスト送信処理のフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態につき図面を参照して説明する。
図１は、本発明の実施対象となるプラント監視制御システムの構成例を示すブロック図である。図１に例示するように、プラント監視制御システム１は、制御対象機器群９を制御する複数の制御装置２と、保守員が制御装置２の各種設定や制御プログラムの保守などを行うための保守端末３とが、ネットワーク４を介して相互に通信可能に接続されて構成される。
【００１２】
それぞれの制御装置２は、制御演算部２１とプロセス入出力部２２とを備える。制御演算部２１は、所定の周期で（例えば、１ミリ秒毎に）プロセス入出力部２２からセンサなどの入力信号を入力し、制御ブロック図などによって規定される所定の制御演算を実行することによって出力信号の値を決定し、決定した出力信号をプロセス入出力部２２を介してバルブなどの制御対象機器に出力する。
【００１３】
このとき、それぞれの制御装置２は、他の制御装置２との連携動作が必要な場合には、共有メモリ５を介して前記所定の周期でデータの送受信を行う。本構成例では、制御装置２間のデータ送受信は共有メモリ５を介して行うこととしているが、共有メモリ５を備えずネットワーク４を用いて所定の周期で同報送信を行うような構成であってもよい。
【００１４】
パソコンなどのコンピュータによって構成される保守端末３には、それぞれの制御装置２の制御動作を規定する制御ブロック図を作成し、それを実行可能な制御プログラム（以下、「実行プログラム」ともいう。）に変換（コンパイル）して各制御装置２にダウンロードして実行させたり、各制御装置２の各種設定や動作監視などを行ったりするためのソフトウェアである保守ツール３１が実装される。
【００１５】
制御装置２は、不図示のＣＰＵ（Central Processing Unit）を備え、不図示の記憶装置から所定のプログラムを主メモリにロードして実行することによって、保守端末３から実行可能な制御プログラムをダウンロードしたのち、その制御プログラムを実行することによって、前記の制御演算部２１とプロセス入出力部２２との機能を具現化する。
【００１６】
図２は、本発明を実施するときのプラント監視制御システムの機能構成および動作についての説明図である。なお、図２において、制御装置２ａ（ＣＰＵ＃：ａ）についてはデータの送信元としての機能構成を、制御装置２ｂ（ＣＰＵ＃：ｂ）についてはデータの受信先としての機能構成を示しているが、プラント監視制御システム１Ａは、制御装置２ａと制御装置２ｂとの両方の機能構成を有する他の複数の制御装置２（不図示）を含んで構成される。
【００１７】
それぞれの制御装置２が実行する制御動作は、図２に示すように、保守ツール３１を用いて記述される制御ブロック図６によって規定される。保守ツール３１が備える不図示のコンパイラは、これらの制御ブロック図６をコンパイルすることによって、それぞれの制御装置２が制御動作を実行するための実行プログラム７１と、それらの実行プログラム７１がデータの送受信を行うときに参照する送信配列テーブル４２や受信配列テーブル４３のもととなる伝送素子テーブル群７２〜７５（詳細は図３、図４を用いて後記する。）とを生成し、実行モジュール記憶部７に登録する。
【００１８】
実行モジュール記憶部７に登録された実行プログラム７１（７１ａ，７１ｂなど）は、保守ツール３１からネットワーク４を介してそれぞれの制御装置２（２ａ，２ｂなど）にダウンロードされ、それぞれの記憶部４０内に実行プログラム４１ａ，４１ｂなどとして登録される。
【００１９】
これと並行して、保守ツール３１は、伝送素子テーブル群７２〜７５から、データ送信元の制御装置２ａとしての実行プログラム４１ａが参照する送信配列テーブル４２（詳細は図６を用いて後記する。）と、データ受信先の制御装置２ｂとしての実行プログラム４１ｂが参照する受信配列テーブル４３（詳細は図７を用いて後記する。）とを生成するためのデータを抽出して、制御装置２ａ，２ｂにダウンロードする。これにより、制御装置２ａ，２ｂの記憶部４０内に、それぞれ送信配列テーブル４２と受信配列テーブル４３とが生成されて登録される。送信元別送信配列リスト４４、選択受信テーブル４５、送信元別受信管理テーブル４６については後記にて説明する。
【００２０】
これらのダウンロードおよび登録処理が完了したのち、保守ツール３１からの指示にしたがって、制御部２０ａ，２０ｂなどによる実行プログラム４１ａ，４１ｂの実行が開始され、それにより制御ブロック図６ａ，６ｂなどに記述された制御動作が、制御装置２ａ，２ｂなどによって実行される。
【００２１】
図９は、プラント監視制御システム１Ａの全体的な動作を示したフローチャートである。以下、図９のフローチャートに沿って、プラント監視制御システム１Ａの動作の概略を説明する。
【００２２】
まず始めに、保守ツール３１を使ってプラント監視制御システム１Ａを構成するそれぞれの制御装置２の制御動作を規定する制御ブロック図６を作成し（ステップＳ１）、作成した制御ブロック図６のコンパイルを実行して実行プログラム７１および伝送素子テーブル群７２〜７５を生成する（ステップＳ２）。次に、コンパイルの実行結果を実行プログラム４１ａ，４１ｂや送信配列テーブル４２、受信配列テーブル４３として各制御装置２の記憶部４０に登録するダウンロードを実行し（ステップＳ３）、保守ツール３１から各制御装置２に制御開始を指示する（ステップＳ４）。これにより、各制御装置２の制御動作（ステップＳ５〜ステップＳ９）が開始される。
【００２３】
制御動作が開始されると、各制御装置２の制御演算部２１は、互いに同期して制御動作を実行するために所定の同期制御信号を受信するのを待ったのち（ステップＳ５）、プロセス入出力部２２からの信号入力と他の制御装置２からのデータ受信を行い（ステップＳ６）、所定の制御演算を実行して出力する信号と送信するデータとを算出して（ステップＳ７）、プロセス入出力部２２への信号出力と他の制御装置２へのデータ送信を行う（ステップＳ８）。各制御装置２は、保守ツール３１から停止指示を受信するまで前記の動作を繰り返し（ステップＳ９で「Ｎｏ」）、停止指示を受信したら（ステップＳ９で「Ｙｅｓ」）制御動作を停止する（ステップＳ１０）。
【００２４】
以上説明したように、それぞれの制御装置２が他の制御装置２との間で行うデータ送受信のタイミングは、同期制御信号によって制御され、すべての制御装置２が所定の周期で並列にデータの送受信を行う。
【００２５】
それぞれの制御装置２が他の制御装置２との間で送受信するデータは、図２に例示するように、データの送信元となる制御装置２ａの制御ブロック図６ａに記載される送信素子６１と、当該データの受信先となる制御装置２ｂの制御ブロック図６ｂに記載される受信素子６２との対によって表される。送信素子６１には、それが記載されている同一シート内での送信素子６１の一連番号である送信素子＃（送信素子６１を表す「□」記号のなかの数字。本例では「１」）と、当該データの受信先となる受信素子６２が記載されているシートを示す受信先シート＃６４（本例では「ｂ−００３」）とが付与される。他方、受信素子６２には、それと対となる送信素子６１の送信素子＃と同じ値の受信素子＃（受信素子６２を表す「□」記号のなかの数字。本例では「１」）と、その送信素子６１が記載されているシートを示す送信元シート＃６５（本例では「ａ−００１」）とが付与される。
【００２６】
続いて、保守ツール３１が制御ブロック図６のコンパイル時に実行する送信素子抽出処理の動作について図３を用いて説明する。ここでは、制御装置２ａの制御動作を規定する制御ブロック図６ａ（図２）は複数のシートに記述されており、そのうちの１枚目のシート６ａ１には、図３に例示した制御ブロック図が記述されているものとする。
【００２７】
なお、説明を簡略化するために、以降の制御ブロック図においては、伝送データは温度や圧力などの数値を表す３２ビットのアナログデータと、１ビットでＯＮ／ＯＦＦなどの２状態のいずれかを表すデジタルデータとの２種類から構成されるものとし、アナログデータの送信素子６１Ａおよび受信素子６２Ａ（図４）を「□」記号で、デジタルデータの送信素子６１Ｄおよび受信素子６２Ｄ（図４）を「△」記号で表すことにする。また、各記号のなかに記した数字は、それぞれ送信素子＃または受信素子＃を表すものとする。
【００２８】
図３に例示したシート６ａ１の制御ブロック図には、制御対象機器群９ａから「α」と「β」との２つのアナログデータを入力し、「５．０×α＋関数Ａ（β）」なる計算式で求められる「○○温度」の値を、送信素子＃が「１」である送信素子６１Ａから、受信先シート＃６４の値（「ｂ−００３」）で示されるシートの受信素子に出力することが規定されている。同様に、制御対象機器群９ａからデジタルデータ「γ」を入力し、「ＮＯＴ（γ）」で求められる「△△状態」の値を、送信素子＃が「２」である送信素子６１Ｄから、受信先シート＃６４の値（「ｂ−００１」）で示されるシートの受信素子に出力することが規定されている。
【００２９】
保守ツール３１が実行する送信素子抽出処理では、それぞれの制御装置２の単位で、その制御動作を規定する一連の制御ブロック図６のなかから、すべての送信素子６１Ａ，６１Ｄを抽出し、所定の規則にしたがって送信素子テーブル７２および送信素子抽出結果テーブル７３を生成する。
【００３０】
送信素子テーブル７２には、抽出したそれぞれの送信素子に対応するレコードが登録される。これら各レコードは、送信元ＣＰＵ＃、送信元シート＃、送信素子＃、受信先シート＃、データ種別、データ名、ローカル変数名、および識別キーを属性にもつ。
【００３１】
送信元ＣＰＵ＃とは、当該送信素子に該当するデータの送信元となる制御装置２の識別名（以下、「ＣＰＵ＃」という。）（例えば、制御装置２ａであれば「ａ」）である。送信元シート＃とは、当該送信素子が記載されていたシートのシート＃６３（シート６ａ１の例であれば「ａ−００１」）である。送信素子＃とは、当該送信素子を表す記号のなかに記した数字であり、各シートの単位でそれぞれの送信素子を特定するために自動または手動で付与される一連番号（シート６ａ１の例であれば「１」または「２」）である。
【００３２】
受信先シート＃とは、当該送信素子に付与されている受信先シート＃６４（シート６ａ１の例であれば「ｂ−００３」または「ｂ−００１」）である。データ種別とは、当該送信素子に該当するデータがアナログデータかデジタルデータかの区別を表すものである。データ名とは、当該送信素子に該当するデータに付されたデータ名６６である。
【００３３】
ローカル変数名とは、データ送信元の制御装置２（例えば、制御装置２ａ）の記憶部４０内での当該送信素子に該当するデータの格納位置を特定するために、コンパイラによって自動で付与される識別名である。ここでは、便宜的に、このローカル変数名を、アナログデータ（Analog）かデジタルデータ（Digital）かを示す文字である「Ａ」または「Ｄ」と、変数（Variable）を意味する「Ｖ」と、データ送信元の制御装置２のＣＰＵ＃を表す「ａ」や「ｂ」などと、変数の一連番号を表す数字とを連結して、例えば、「ＡＶａ１」のように表記する。なお、このようなローカル変数名を用いる代わりに、記憶部４０内での当該データの格納位置を直接指定するようにしてもよい。
【００３４】
また、識別キーとは、保守ツール３１によって当該送信素子に該当するデータを特定するために一意に割り当てられる識別情報である。ここでは、前記の送信元シート＃と送信素子＃とデータ種別を表す１文字（Ａ：アナログデータ、Ｄ：デジタルデータ）とを連結することにより、「ａ−００１−１Ａ」、「ａ−００１−２Ｄ」のような値が生成されて割り当てられるものとするが、他の割り当て方法であってもよい。
【００３５】
送信素子抽出結果テーブル７３には、プラント監視制御システム１Ａを構成する各制御装置２に対応するレコードが登録される。これら各レコードは、送信元ＣＰＵ＃、送信素子抽出時刻、アナログデータ数、デジタルデータ数を属性にもつ。
【００３６】
送信元ＣＰＵ＃とは、送信素子を抽出した制御装置２のＣＰＵ＃（例えば、制御装置２ａであれば「ａ」）である。送信素子抽出時刻とは、送信素子抽出処理によって当該制御装置２の制御ブロック図６から最後に送信素子を抽出した時刻である。当該制御装置２の制御ブロック図６が新規に作成された場合や制御ブロック図６の更新が行われた場合に送信素子抽出処理が実行され、その処理終了時刻が送信素子抽出時刻として格納される。また、アナログデータ数およびデジタルデータ数とは、当該制御装置２の制御ブロック図６から抽出されたアナログデータの送信素子の数およびデジタルデータの送信素子の数である。
【００３７】
図１０は、送信素子抽出処理のフローチャートである。以下、図３を参照しつつ図１０のフローチャートに沿って、保守ツール３１が制御ブロック図６をコンパイルするときに実行する送信素子抽出処理の詳細を説明する。
【００３８】
ある制御装置２の動作を規定する一連の制御ブロック図６の新規作成または更新が終了したのち、保守ツール３１は、まずステップＳ２１にて、それらの制御ブロック図６からシート＃順、送信素子＃順に送信素子６１Ａまたは送信素子６１Ｄを抽出する。次に、ステップＳ２２では、すべての送信素子の抽出が終了したか否かを判定し、まだ抽出が終了していない場合はステップＳ２３（ステップＳ２２の「Ｎｏ」側）に処理を進め、抽出が終了した場合はステップＳ２５（ステップＳ２２の「Ｙｅｓ」側）に処理を進める。
【００３９】
ステップＳ２３では、抽出した送信素子に一意の識別キーを付与し、次のステップＳ２４にて、送信素子テーブル７２に当該送信素子のレコードを追加登録したのち、ステップＳ２１に処理を戻して、すべての送信素子の抽出が終了するまで前記の処理を繰り返す。
【００４０】
また、ステップＳ２５では、抽出が終了したすべての送信素子に対応するレコードを、送信元ＣＰＵ＃単位でデータ種別毎に分類して並べ替える。これにより、送信元ＣＰＵ＃単位に、アナログデータとデジタルデータとの送信素子に対応するレコードがそれぞれ連続して並ぶことになる。続いて、ステップＳ２６にて、それぞれのレコード数をカウントしてアナログデータ数とデジタルデータ数とを求め、送信素子抽出結果テーブル７３の送信素子抽出時刻に現在時刻を格納するとともに、求めたアナログデータ数とデジタルデータ数とを送信素子抽出結果テーブル７３に格納して処理を終了する。
【００４１】
図３に示した送信素子テーブル７２のデータ例は、以上のような送信素子抽出処理によって、シート６ａ１に記述された制御ブロック図から抽出された２つの送信素子６１Ａ，６１Ｄに該当する２つのレコードが登録された様子を示している。また、送信素子抽出結果テーブル７３のデータ例は、制御装置２ａと制御装置２ｂとについて異なる時刻に実行された送信素子抽出処理によって該当する２つのレコードが登録された様子を示している。
【００４２】
続いて、保守ツール３１が制御ブロック図６のコンパイル時に実行する受信素子抽出処理の動作について図４を用いて説明する。ここでは、制御装置２ｂの制御動作を規定する制御ブロック図６ｂ（図２）は複数のシートに記述されており、そのうちの３枚目のシート６ｂ３には、図４に例示した制御ブロック図が記述されているものとする。
【００４３】
図４に例示したシート６ｂ３の制御ブロック図には、受信素子＃が「１」である受信素子６２Ａから、「○○温度」のアナログデータを受信し、その値を積分した結果を制御対象機器群９ｂに出力すること、および、受信素子＃が「３」である受信素子６２Ｄから、「××接点」のデジタルデータを受信し、その値を一定時間だけ遅延させた結果を制御対象機器群９ｂに出力することが規定されている。
【００４４】
保守ツール３１が実行する受信素子抽出処理では、それぞれの制御装置２の単位で、その制御動作を規定する一連の制御ブロック図６のなかから、すべての受信素子６２Ａ，６２Ｄを抽出し、所定の規則にしたがって受信素子テーブル７４および受信素子抽出結果テーブル７５を生成する。
【００４５】
受信素子テーブル７４には、抽出したそれぞれの受信素子に対応するレコードが登録される。これら各レコードは、受信先ＣＰＵ＃、受信先シート＃、受信素子＃、送信元シート＃、データ種別、データ名、ローカル変数名、および識別キーを属性にもつ。
【００４６】
受信先ＣＰＵ＃とは、当該受信素子に該当するデータの受信先となる制御装置２のＣＰＵ＃（例えば、制御装置２ｂであれば「ｂ」）である。受信先シート＃とは、当該受信素子が記載されていたシートのシート＃６３（シート６ｂ３の例であれば「ｂ−００３」）である。受信素子＃とは、当該受信素子を表す記号のなかに記した数字であり、この受信素子＃にはそれと対となっている送信素子の送信素子＃（図３参照）と同じ値が格納される。
【００４７】
送信元シート＃とは、当該受信素子に付与されている送信元シート＃６５（シート６ｂ３の例であれば「ａ−００１」または「ａ−００２」）である。データ種別とは、当該受信素子に該当するデータがアナログデータかデジタルデータかの区別を表すものである。データ名とは、当該受信素子に該当するデータに付されたデータ名６６である。
【００４８】
ローカル変数名とは、データ受信先の制御装置２（例えば、制御装置２ｂ）の記憶部４０内での当該受信素子に該当するデータの格納位置を特定するために、コンパイラによって自動で付与される識別名であり、前記したものと同様な便宜的な表記を行っている。なお、このようなローカル変数名を用いる代わりに、記憶部４０内での当該データの格納位置を直接指定するようにしてもよい。
【００４９】
また、識別キーとは、当該受信素子に該当するデータを特定するための識別情報であり、この識別キーには、保守ツール３１によって当該受信素子と対となっている送信素子に割り当てられた識別キーと同じ値が格納される。例えば、シート６ｂ３内の受信素子６２Ａに対応する１行目のレコードの識別キーには、それと対となっている図３のシート６ａ１内の送信素子６１Ａの識別キーと同じく「ａ−００１−１Ａ」が格納される（送信素子テーブル７２の１行目のレコードを参照）。
【００５０】
受信素子抽出結果テーブル７５には、プラント監視制御システム１Ａを構成する各制御装置２に対応するレコードが登録される。これら各レコードは、受信先ＣＰＵ＃、受信素子抽出時刻、アナログデータ数、デジタルデータ数を属性にもつ。
【００５１】
受信先ＣＰＵ＃とは、受信素子を抽出した制御装置２のＣＰＵ＃（例えば、制御装置２ｂであれば「ｂ」）である。受信素子抽出時刻とは、受信素子抽出処理によって当該制御装置２の制御ブロック図６から最後に受信素子を抽出した時刻である。当該制御装置２の制御ブロック図６が新規に作成された場合や制御ブロック図６の更新が行われた場合に受信素子抽出処理が実行され、その処理終了時刻が受信素子抽出時刻として格納される。また、アナログデータ数およびデジタルデータ数とは、当該制御装置２の制御ブロック図６から抽出されたアナログデータの受信素子の数およびデジタルデータの受信素子の数である。
【００５２】
図１１は、受信素子抽出処理のフローチャートである。以下、図４を参照しつつ図１１のフローチャートに沿って、保守ツール３１が制御ブロック図６をコンパイルするときに実行する受信素子抽出処理の詳細を説明する。
【００５３】
ある制御装置２の動作を規定する一連の制御ブロック図６の新規作成または更新が終了したのち、保守ツール３１は、まずステップＳ３１にて、それらの制御ブロック図６からシート＃順、受信素子＃順に受信素子６２Ａまたは受信素子６２Ｄを抽出する。次に、ステップＳ３２では、すべての受信素子の抽出が終了したか否かを判定し、まだ抽出が終了していない場合はステップＳ３３（ステップＳ３２の「Ｎｏ」側）に処理を進め、抽出が終了した場合はステップＳ３５（ステップＳ３２の「Ｙｅｓ」側）に処理を進める。
【００５４】
ステップＳ３３では、抽出した受信素子の送信元シート＃６５と受信素子＃とから、その受信素子に対応する送信素子を特定し、その送信素子に割り当てられた識別キーを送信素子テーブル７２（図３）から取得して、それと同じ値をその受信素子に付与する。次に、ステップＳ３４にて、受信素子テーブル７４に当該受信素子のレコードを追加登録したのち、ステップＳ３１に処理を戻して、すべての受信素子の抽出が終了するまで前記の処理を繰り返す。
【００５５】
また、ステップＳ３５では、抽出が終了したすべての受信素子に対応するレコードを、受信先ＣＰＵ＃単位でデータ種別毎に分類して並べ替える。これにより、受信先ＣＰＵ＃単位に、アナログデータとデジタルデータとの受信素子に対応するレコードがそれぞれ連続して並ぶことになる。続いて、ステップＳ３６にて、それぞれのレコード数をカウントしてアナログデータ数とデジタルデータ数とを求め、受信素子抽出結果テーブル７５の受信素子抽出時刻に現在時刻を格納するとともに、求めたアナログデータ数とデジタルデータ数とを受信素子抽出結果テーブル７５に格納して処理を終了する。
【００５６】
図４に示した受信素子テーブル７４のデータ例は、以上のような受信素子抽出処理によって、シート６ｂ３に記述された制御ブロック図から抽出された２つの受信素子６２Ａ，６２Ｄに該当する２つのレコードが登録された様子を示している。また、受信素子抽出結果テーブル７５のデータ例は、制御装置２ａと制御装置２ｂとについて異なる時刻に実行された受信素子抽出処理によって該当する２つのレコードが登録された様子を示している。
【００５７】
続いて、以上のようにして抽出された各送信素子および受信素子に対応するデータを共有メモリ５を用いて制御装置２間で送受信する方法を説明する。
【００５８】
図５は、制御装置２間でのデータ送受信に利用する共有メモリ５の領域構成についての説明図である。図５に示すように、共有メモリ５の記憶領域は、管理情報を記憶する管理情報領域５１と、それぞれの制御装置２からのデータ送信用に順番に割り当てられる複数の送信データ領域５２（ＣＰＵ＃ａ用、ＣＰＵ＃ｂ用、・・・）とを備えて構成される。
【００５９】
管理情報領域５１には、それぞれの送信データ領域５２の開始位置を示すポインタ値（「ａｄｄｒ１」、「ａｄｄｒ２」など）が格納され、各制御装置２は、これらのポインタ値を参照することによって、他の制御装置２から送信される送信フレームの先頭位置を取得する。
【００６０】
それぞれの送信データ領域５２のサイズは、すべてが同一であっても各々異なるサイズであってもよいが、すべて同一サイズとする場合には、図５に例示するように、それぞれの送信データ領域５２を、送信フレーム領域５２１と予備領域５２２とに分割しておき、ある制御装置２が送信するデータの追加などによって送信フレームのサイズが大きくなった場合には、予備領域５２２から送信フレーム領域５２１に領域を割り当てるようにすることにより、他の制御装置２の送信データ領域５２の開始位置が変わらないようにすることが好ましい。
【００６１】
図５に示すように、例えば、送信フレーム領域５２１に格納される送信フレームは、配列更新時刻、アナログデータ数、デジタルデータ数、ＳＵＭ、およびカウンタから成るヘッダ情報と、それぞれの制御装置２から送信されるアナログデータ群（アナログデータ１〜アナログデータｍ）とデジタルデータ列群（デジタルデータ列１〜デジタルデータ列ｋ）とから構成される。なお、デジタルデータ列とは、例えば、それぞれが１ビットで表される３２個のデジタルデータをビット結合して１つの３２ビットデータに変換したものである。
【００６２】
この配列更新時刻、アナログデータ数、およびデジタルデータ数には、データ送信元の制御装置２（例えば、制御装置２ａ）がこの送信フレーム領域５２１にデータを配列するために参照した送信管理テーブル４２１（詳細は図６を用いて後記する。）に格納されている配列更新時刻、アナログデータ数、およびデジタルデータ数が転記されて格納される。
【００６３】
ＳＵＭには、アナログデータ数とデジタルデータ数とを足した値、つまり送信データの総数が格納される。このＳＵＭは、データ受信先の制御装置２（例えば、制御装置２ｂ）がデータ受信時にこれら３つの値の整合性をチェックすることで、送信フレーム領域５２１のデータが誤って上書きされてしまうエラーを検出するために用いられる。ここでは、アナログデータとデジタルデータとの２種類のデータが送信されるものとしたが、送信するデータの種類はもっと多くてもよく、その場合はそれぞれの種類の送信データ数と、それらを総和した数であるＳＵＭとをデータ送信元の制御装置２が格納し、データ受信先の制御装置２がそれらの値の整合性をチェックするようにすればよい。
【００６４】
また、カウンタには、データ送信元の制御装置２（例えば、制御装置２ａ）がこの送信フレーム領域５２１に一連のデータを格納する毎に値が１ずつ増える送信カウンタ値が格納される。データ受信先の制御装置２（例えば、制御装置２ｂ）は、この送信カウンタ値が更新されないことでデータ送信元の制御装置２の異常を検知することができ、また、この送信カウンタ値が不連続に増えた場合は送信データの受信漏れが発生したものと判断することができる。
【００６５】
この送信フレーム領域５２１へのそれぞれのアナログデータおよびデジタルデータの格納順序は、保守ツール３１からダウンロードされるデータに基づいて、それぞれの制御装置２の記憶部４０に生成される送信配列テーブル４２によって規定される（図２参照）。
【００６６】
図６に示すように、送信配列テーブル４２は、送信管理テーブル４２１と送信インデックステーブル４２２とから構成される。送信管理テーブル４２１には、送信フレーム領域５２１に格納するヘッダ情報のもととなる配列更新時刻、アナログデータ数、デジタルデータ数と、当該制御装置２に割り当てられた送信フレーム領域５２１の先頭アドレス（図５参照）とが格納される。
【００６７】
この配列更新時刻には、最新の送信素子抽出処理によって送信素子抽出結果テーブル７３（図３）に格納された当該制御装置２のレコードの送信素子抽出時刻（例えば、送信元ＣＰＵ＃が「ａ」である制御装置２ａであれば「20XX.XX.XX 15:01.23」（ただし、図６では「ｔ１」と表記））が格納される。また、アナログデータ数およびデジタルデータ数には、送信素子抽出結果テーブル７３の前記レコードに格納されたアナログデータ数（例えば、「４」）およびデジタルデータ数（例えば、「３」）が格納される。
【００６８】
送信インデックステーブル４２２には、送信素子テーブル７２（図３）に登録された当該制御装置２の各送信素子のレコードから識別キーとローカル変数名との２つを抽出したレコードが、送信素子テーブル７２と同じ順番で登録される。データ送信元の制御装置２（例えば、制御装置２ａ）は、送信インデックステーブル４２２へのレコードの登録順序にしたがって当該ローカル変数名から送信データを読み込み、それを自身の送信フレーム領域５２１に順次格納していく。
【００６９】
図１２は、データ送信処理のフローチャートである。以下、図６を参照しつつ図１２のフローチャートに沿って、制御装置２が実行するデータ送信処理の詳細を説明する。
【００７０】
まず始めに、制御装置２（例えば、制御装置２ａ）は、ステップＳ４１にて、送信管理テーブル４２１から配列更新時刻（例えば「ｔ１」）、アナログデータ数（例えば「４」）、デジタルデータ数（例えば「３」）を読み込み、ステップＳ４２にて、これらを自身の送信フレーム領域５２１内のヘッダ情報に格納する。次に、ステップＳ４３にて、記憶部４０に記憶している不図示の送信カウンタ値を１だけ増やす更新を行い、ステップＳ４４にて、アナログデータ数とデジタルデータ数とを足したＳＵＭ値（例えば「７」）と、更新した送信カウンタ値（例えば「Ｃ１」）とを、それぞれヘッダ情報のＳＵＭとカウンタとに格納する。
【００７１】
次に、ステップＳ４５にて、送信インデックステーブル４２２から識別キーとローカル変数名との組から成る各レコードを読み込み、ステップＳ４６〜ステップＳ４９にて、各レコードに該当する送信データを自身の送信フレーム領域５２１に順次格納する。
【００７２】
ステップＳ４６では、データ未送信の変数があるか否かを判定し、データ未送信の変数があればステップＳ４７（ステップＳ４６の「Ｙｅｓ」側）に処理を進め、データ未送信の変数がなければ処理を終了する（ステップＳ４６の「Ｎｏ」側）。
【００７３】
ステップＳ４７では、データ未送信の変数を示す先頭のレコードを選択して、そのローカル変数名から送信データを読み込む。次に、ステップＳ４８にて、送信インデックステーブル４２２を参照して、当該レコードの配列位置に対応する送信フレーム領域５２１内での格納位置を算出し、ステップＳ４９にて、算出した格納位置に当該送信データを格納する。なお、図６に示すように、デジタルデータについては、例えば、３２個単位で送信データを読み込み、それらをビット結合した結果を１つのデジタルデータ列として送信フレーム領域５２１に格納する。送信するデジタルデータの数が３２に満たない場合は、例えば、デジタルデータ列の上位ビットに送信データを前詰めして配置する。
【００７４】
図６に示したデータ例は、制御装置２ａ（ＣＰＵ＃：ａ）について時刻「ｔ１」に実行された送信素子抽出処理によって抽出された４個のアナログデータと３個のデジタルデータとの送信素子に対応する送信配列テーブル４２が生成され、前記のデータ送信処理によって当該制御装置２ａの送信フレーム領域５２１にデータが格納されていく様子を示したものである。
【００７５】
このように、データ送信元の制御装置２（例えば、制御装置２ａ）は、送信インデックステーブル４２２によって規定される識別キーの配列順序にしたがって自身の送信フレーム領域５２１にデータを順次格納していく。したがって、この識別キーの配列順序を送信配列リスト８（図２参照）としてデータ受信先となるそれぞれの制御装置２（例えば、制御装置２ｂ）に通知することによって、各データ受信先の制御装置２は当該送信フレーム領域５２１から正しくデータを受信することが可能となる。
【００７６】
図７は、制御装置２（例えば、制御装置２ｂ）が、制御装置２ａ（ＣＰＵ＃：ａ）から通知される送信配列リスト８を用いて、制御装置２ａの送信フレーム領域５２１から受信データを読み込む動作についての説明図である。
【００７７】
制御装置２（例えば、制御装置２ｂ）が受信するデータは、保守ツール３１からダウンロードされるデータに基づいて、それぞれの制御装置２の記憶部４０に生成される受信配列テーブル４３によって規定される。
【００７８】
図７に示すように、受信配列テーブル４３は、受信管理テーブル４３１と受信インデックステーブル４３２とから構成される。受信管理テーブル４３１には、受信素子抽出結果テーブル７５（図４）に格納された当該制御装置２のレコードのアナログデータ数およびデジタルデータ数と同じ値（例えば、受信先ＣＰＵ＃が「ｂ」である制御装置２ｂであれば「２」および「３」）がそれぞれ格納される。
【００７９】
受信インデックステーブル４３２には、受信素子テーブル７４（図４）に登録された当該制御装置２の各受信素子のレコードから識別キーとローカル変数名との２つを抽出したレコードが、受信素子テーブル７４と同じ順番で登録される。
【００８０】
データ送信元の制御装置２（例えば、制御装置２ａ）から通知される送信配列リスト８には、当該制御装置２の送信管理テーブル４２１（図６）に格納されている配列更新時刻（例えば「ｔ１」）、アナログデータ数（例えば「４」）、デジタルデータ数（例えば「３」）に続いて、送信インデックステーブル４２２（図６）から抽出された識別キーのリストが格納され、データ受信先の制御装置２（例えば、制御装置２ｂ）は、その内容を送信元別送信配列リスト４４（図２）に登録して記憶部４０に保存する。
【００８１】
さらに、データ受信先の制御装置２（例えば、制御装置２ｂ）は、送信配列リスト８に含まれるそれぞれの識別キーと受信インデックステーブル４３２に格納されている識別キーとを照合することによって各送信データを受信するか否かを判定し、選択受信テーブル４５を生成する。この選択受信テーブル４５には、送信配列リスト８によって規定される送信データの配列順序に対応して、それぞれのデータを受信する場合には受信先のローカル変数名が格納される。以後、データ受信先の制御装置２（例えば、制御装置２ｂ）は、この選択受信テーブル４５を参照することによって各データの送信元となる制御装置２（例えば、制御装置２ａ）の送信フレーム領域５２１から必要なデータを読み込んで自身のローカル変数に格納する。
【００８２】
図７に示したデータ例は、制御装置２ａ（ＣＰＵ＃：ａ）について時刻「ｔ１」に実行された送信素子抽出処理によって抽出された４個のアナログデータと３個のデジタルデータとの送信素子に対応する送信データが制御装置２ａの送信フレーム領域５２１に格納され、それらのデータの一部を受信する制御装置２ｂのローカル変数に受信データが格納されていく様子を示したものである。
【００８３】
図８は、制御装置２の記憶部４０内に備えられる送信元別受信管理テーブル４６（図２）の構成およびデータ例である。図８には制御装置２ｂ（ＣＰＵ＃：ｂ）についてのデータ例を示しており、送信元別受信管理テーブル４６には、他の制御装置２に対応するレコードが登録される。これら各レコードは、送信元ＣＰＵ＃、最終受信カウンタ値、最終受信時刻を属性にもつ。
【００８４】
送信元ＣＰＵ＃とは、データの送信元となる他の制御装置２のＣＰＵ＃である。最終受信カウンタ値とは、当該制御装置２から最後に受信を完了した送信フレームのカウンタ（図５参照）に格納されていた送信カウンタ値であり、送信データの受信漏れの検出などに用いられる。また、最終受信時刻とは、その送信フレームを受信した時刻である。
【００８５】
図１３は、データ受信処理のフローチャートである。以下、図７および図８を参照しつつ図１３のフローチャートに沿って、制御装置２が、データの送信元となるそれぞれの制御装置２の送信フレーム領域５２１からデータを受信するために実行するデータ受信処理の詳細を説明する。
【００８６】
制御装置２（例えば、制御装置２ｂ）は、まずステップＳ５１にて、データ受信の対象とする制御装置２（例えば、制御装置２ａ）の送信フレーム領域５２１に該当する選択受信テーブル４５（図７）を読み込む。次に、ステップＳ５２にて、読み込んだ選択受信テーブル４５に変数名が格納されているか否かを判定し、変数名が格納されている場合はステップＳ５３（ステップＳ５２の「Ｙｅｓ」側）に処理を進め、変数名が格納されていなければ処理を終了する（ステップＳ５２の「Ｎｏ」側）。
【００８７】
ステップＳ５３では、送信元別送信配列リスト４４に保持している当該データ送信元の制御装置２の送信配列リスト８が最新か否かを判定し、当該リストが最新である場合はステップＳ５７（ステップＳ５３の「Ｙｅｓ」側）に処理を進め、そうでなければステップＳ５４（ステップＳ５３の「Ｎｏ」側）に処理を進める。このとき、当該リストが最新であるか否かは、当該送信フレーム領域５２１のヘッダ情報から読み込んだ配列更新時刻と、自身が保持している送信配列リスト８内の配列更新時刻とが一致しているか否かによって判定する。
【００８８】
両者の時刻が不一致であった場合、ステップＳ５４にて、ネットワーク４を介して当該データ送信元の制御装置２に送信配列リスト８を送信するよう要求し、次のステップＳ５５にて、当該データ送信元の制御装置２からネットワーク４を介して送信される最新の送信配列リスト８を受信して、その内容を送信元別送信配列リスト４４に登録して保存する。
【００８９】
さらに、次のステップＳ５６にて、受信した最新の送信配列リスト８に基づいて選択受信テーブル４５の登録内容を更新する。これによって、最新の送信配列リスト８に基づいたデータの受信が可能となる。
【００９０】
ステップＳ５７では、データの受信に先立って、送信フレーム領域５２１に格納されているヘッダ情報を読み込み、ＳＵＭ値と送信カウンタ値とをチェックすることで、送信データの異常の有無を判定する。ここでは、送信データには異常がなかったものとして説明を続ける。
【００９１】
次に、ステップＳ５８にて、選択受信テーブル４５を参照することによって、そこに格納されている変数名の配列位置から、送信フレーム領域５２１内での受信データの格納位置を特定し、特定した当該格納位置から受信データを読み込み、読み込んだ受信データを当該変数名によって示されるローカル変数に格納して処理を終了する。
【００９２】
図１４は、送信配列リスト８を送信するよう要求された制御装置２が実行する送信配列リスト送信処理についてのフローチャートである。
【００９３】
当該制御装置２（例えば、制御装置２ａ）は、まずステップＳ６１にて、自身の送信管理テーブル４２１（図６）から配列更新時刻（例えば「ｔ１」）とアナログデータ数（例えば「４」）とデジタルデータ数（例えば「３」）とを読み込む。次に、ステップＳ６２にて、読み込んだそれらの値と送信インデックステーブル４２２から抽出した識別キーのリストとから送信配列リスト８を生成する。最後に、ステップＳ６３にて、生成した送信配列リスト８を要求元の制御装置２に送信して処理を終了する。
【００９４】
なお、以上説明したデータ受信処理においては、受信元の制御装置２がデータを受信するときに、自身が保持している送信配列リスト８が最新であるか否かを判定して、データ送信元の制御装置２に最新のリストを要求するものとしたが、例えば、保守ツール３１にて制御ブロック図６をコンパイルしたときにそれぞれの制御装置２の送信配列リスト８を更新して、それをデータ受信先となる各制御装置２に配信するようにしてもよい。また、配列更新時刻の代わりに、保守ツール３１が備えるコンパイラが所定の規則によって付与する送信配列リスト８のバージョン情報を用いるものとしてもよいし、送信配列リスト８のもととなる送信インデックステーブル４２２を更新したそれぞれの制御装置２が、配列更新時刻に代わって当該リストが更新されたことを通知するフラグデータを前記のヘッダ情報に格納するようにしてもよい。
【００９５】
以上説明したように、本実施形態によれば、プラント監視制御システム１を構成する複数の制御装置２間の具体的な伝送データの形式が決定されていなくても、それぞれの制御装置２の制御動作を実行する制御プログラムを独立して作成することができる。また、一部の制御装置２から送信される伝送データの形式が変更された場合であっても、データの配列順序の変更だけであれば受信側のプログラムを再コンパイルする必要がない。
【００９６】
以上にて本発明を実施する形態の説明を終えるが、本発明の実施の態様はこれに限られるものではなく、本発明の趣旨を逸脱しない範囲内で各種の変更が可能である。
【符号の説明】
【００９７】
１，１Ａ  プラント監視制御システム（制御システム）
２，２ａ，２ｂ  制御装置
２０ａ，２０ｂ  制御部
２１  制御演算部
２２  プロセス入出力部
３    保守端末
３１  保守ツール（コンパイラ）
４    ネットワーク
４０  記憶部
４１ａ，４１ｂ  実行プログラム
４２  送信配列テーブル
４２１  送信管理テーブル
４２２  送信インデックステーブル（識別キーの配列順序）
４３  受信配列テーブル
４３１  受信管理テーブル
４３２  受信インデックステーブル
４４  送信元別送信配列リスト（識別キーの配列順序）
４５  選択受信テーブル（識別キーの配列順序）
４６  送信元別受信管理テーブル
５    共有メモリ
５１  管理情報領域
５２  送信データ領域
５２１  送信フレーム領域
５２２  予備領域
６，６ａ，６ｂ  制御ブロック図
６ａ１，６ｂ３  シート
６１，６１Ａ，６１Ｄ  送信素子
６２，６２Ａ，６２Ｄ  受信素子
６３  シート＃
６４  受信先シート＃
６５  送信元シート＃
６６  データ名
７    実行モジュール記憶部
７１，７１ａ，７１ｂ  実行プログラム
７２  送信素子テーブル（識別キーの配列順序）
７３  送信素子抽出結果テーブル
７４  受信素子テーブル
７５  受信素子抽出結果テーブル
８    送信配列リスト（更新後の識別キーの配列順序）
９，９ａ，９ｂ  制御対象機器群
【図１】
0005588820.tif 000002
【図２】
0005588820.tif 000003
【図３】
0005588820.tif 000004
【図４】
0005588820.tif 000005
【図５】
0005588820.tif 000006
【図６】
0005588820.tif 000007
【図７】
0005588820.tif 000008
【図８】
0005588820.tif 000009
【図９】
0005588820.tif 000010
【図１０】
0005588820.tif 000011
【図１１】
0005588820.tif 000012
【図１２】
0005588820.tif 000013
【図１３】
0005588820.tif 000014
【図１４】
0005588820.tif 000015