(57)【要約】【課題】汎用性の高い通信環境を実現できる冗長用モジュール、冗長コントローラ、およびプログラムを提供する。【解決手段】一方がアクティブ状態とされる場合に他方が非アクティブ状態とされる冗長構成を編成可能な冗長用モジュールは、自らのモジュールがアクティブ状態である場合は、受信したプロセスデータを含むコマンドで、自らのモジュールに記録されているプロセスデータを更新し、プロセスデータが更新されたことを示す識別情報を送信し、自らのモジュールが非アクティブ状態である場合は、プロセスデータを含むコマンドを自らのモジュールと対をなす他方のモジュールへ転送し、他方のモジュールから転送されてきた識別情報をさらに送信する。【選択図】図２
2017021588.tif 000002
【特許請求の範囲】
【請求項１】
一方がアクティブ状態とされる場合に他方が非アクティブ状態とされる冗長構成を編成可能な冗長用モジュールであって、
１）自らのモジュールがアクティブ状態である場合は、
１−１）受信したプロセスデータを含むコマンドで、前記自らのモジュールに記録されているプロセスデータを更新し、
１−２）前記プロセスデータが更新されたことを示す識別情報を送信し、
２）前記自らのモジュールが非アクティブ状態である場合は、
２−１）前記プロセスデータを含む前記コマンドを前記自らのモジュールと対をなす他方のモジュールへ転送し、
２−２）前記他方のモジュールから転送されてきた前記識別情報をさらに送信する、
冗長用モジュール。
【請求項２】
前記モジュールの各々は、
前記自らのモジュールが非アクティブ状態である場合は、
前記識別情報に基づいて、前記自らのモジュールに記録されているプロセスデータを更新する、
請求項１に記載の冗長用モジュール。
【請求項３】
請求項１または２に記載の冗長用モジュールの前記冗長構成を備え、
前記冗長構成の一方がアクティブ状態とされる場合に前記冗長構成の他方が非アクティブ状態とされる、
冗長コントローラ。
【請求項４】
一方がアクティブ状態とされる場合に他方が非アクティブ状態とされ冗長用モジュールにおいて実行されるプログラムであって、
前記冗長モジュールが備えるコンピュータに、
１）自らのモジュールがアクティブ状態である場合は、
１−１）受信したプロセスデータを含むコマンドで、前記自らのモジュールに記録されているプロセスデータを更新する機能と、
１−２）前記プロセスデータが更新されたことを示す識別情報を送信する機能と、
２）前記自らのモジュールが非アクティブ状態である場合は、
２−１）前記プロセスデータを含む前記コマンドを前記自らのモジュールと対をなす他方のモジュールへ転送する機能と、
２−２）前記他方のモジュールから転送されてきた前記識別情報をさらに送信する機能と、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一方がアクティブ状態とされている場合に他方が非アクティブ状態とされる冗長構成を編成可能な冗長用モジュール、冗長コントローラ、およびプログラムに関する。
【背景技術】
【０００２】
従来、化学製造プラント、石油精製プラント、その他製造プラントなどの処理プラント内において使用されるプロセス制御コントローラが知られている。
【０００３】
具体的に、プロセス制御コントローラとして、例えば、特開２０１２−２０８７０６号公報には、プロセス内の複数の装置を制御するために使用される冗長コントローラであって、第１ノード（１００Ｐ）と第２ノード（１００Ｓ）とを備えた二重化された冗長コントローラ（１０）であって、第１ノードおよび第２ノードのうち、いずれか一方をアクティブ状態とし、他方を非アクティブ状態とする手段と、アクティブ状態となっているノードにおいてプロセスデータを収集し、収集したプロセスデータを非アクティブ状態となっているノードに転送する手段と、非アクティブ状態となっているノードにおいて、プロセスデータの収集を禁止し、アクティブ状態となっているノードから転送されたプロセスデータを更新する手段と、アクティブ状態となっているノードにおいて所定の条件に達した場合には、アクティブ状態となっているノードを非アクティブ状態に切り換え、非アクティブ状態となっているノードをアクティブ状態に切り換える手段と、を備える冗長コントローラが開示されている(特許文献１)。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−２０８７０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、当分野において、異なるベンダーから提供される機器間でプロセスデータを送受信可能とするために、共通の通信プロトコルを採用することが好ましい。例えば、ＭｏｄｂｕｓＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）プロトコルなどの標準的な通信プロトコルに従うことが妥当である。しかしながら、ＭｏｄｂｕｓＴＣＰプロトコルには、外部機器が、特許文献１に記載されているような二重化されたノード（モジュール）を備えた冗長コントローラと通信する手順までは定義されていない。したがって、外部機器が冗長コントローラと通信するためには、まず二重化されたモジュールのどちらがアクティブ状態であるかを判定し、その後アクティブ状態となっていると判定されたモジュールと通信を開始するように制御する必要があった。
【０００６】
しかしながら、アクティブ状態であるか非アクティブ状態であるかを判定するための手順は冗長コントローラごとに異なる。外部機器が多数のベンダーから提供される冗長コントローラごとに異なる手順を全て把握することは現実的ではない。また外部機器は、自らが判定手順を把握している冗長コントローラのみとの間でしか通信できなくなるため、汎用性を失うことにもなる。
【０００７】
そこで、本発明は、このような問題に鑑みて、汎用性の高い冗長用モジュール、冗長コントローラ、およびプログラムを提供することを課題の一つとしている。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の冗長用モジュールは、一方がアクティブ状態とされる場合に他方が非アクティブ状態とされる冗長構成を編成可能な冗長用モジュールであって、１）自らのモジュールがアクティブ状態である場合は、１−１）受信したプロセスデータを含むコマンドで、前記自らのモジュールに記録されているプロセスデータを更新し、１−２）前記プロセスデータが更新されたことを示す識別情報を送信し、２）前記自らのモジュールが非アクティブ状態である場合は、２−１）前記プロセスデータを含む前記コマンドを前記自らのモジュールと対をなす他方のモジュールへ転送し、２−２）前記他方のモジュールから転送されてきた前記識別情報をさらに送信する。
【０００９】
上記課題を解決するために、本発明の冗長コントローラは、前記冗長用モジュールの前記冗長構成を備え、前記冗長構成の一方がアクティブ状態とされる場合に前記冗長構成の他方が非アクティブ状態とされる。
【発明の効果】
【００１０】
本発明によれば、当該冗長用モジュールと通信している機器が、通信相手のモジュールがアクティブ状態であるか非アクティブ状態であるかを判定する必要がなくなり、汎用性の高い通信環境を実現できる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態に係るプロセス制御システムの概略図である。
【図２】本発明の実施形態に係る冗長コントローラのブロック図である。
【図３】本発明の実施形態に係る冗長コントローラにおける、プロセスデータの書き込み処理シーケンス図の一例である。
【図４】本発明の実施形態に係る冗長コントローラにおける、プロセスデータの書き込み処理シーケンス図の一例である。
【図５】本発明の実施形態に係る冗長コントローラにおける、プロセスデータの読み込み処理シーケンス図の一例である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。即ち、本発明は、その趣旨を逸脱しない範囲で種々変形（各実施例を組み合わせるなど）して実施することができる。また、以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付して表している。
【００１３】
＜定義＞
「プロセスデータ」：プロセス制御システムにおける装置・機器から送信される測定値または当該装置・機器に対する設定値、制御値などのデータをいう。
【００１４】
図１に、本実施形態に係るプロセス管理システムの構成図を示す。図１に示すように、本実施形態のプロセス管理システムは、例示的に、クライアント装置２０と、冗長コントローラ１０と、フィールド機器４３，４４，４５と、を備えて構成されている。ユニバーサルバス１は、汎用のコンピュータネットワーク規格、例えばイーサネット（登録商標）(Ｅｔｈｅｒｎｅｔ)により装置間を相互に接続するバスである。また、ローカルバス２は、汎用のコンピュータネットワーク規格、例えばイーサネット（登録商標）により装置間を相互に接続するバスである。ローカルバス２は、例えば工場内のコンピュータ機器を相互に接続する工場ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に相当する。
【００１５】
冗長コントローラ１０は、一方がアクティブ状態とされる場合に他方が非アクティブ状態とされる冗長構成を編成可能な冗長用モジュールを一対備える。ここで、アクティブ状態とされている冗長用モジュールをプライマリモジュール１００Ｐといい、非アクティブ状態とされている冗長用モジュールをセカンダリモジュール１００Ｓという。プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとは、両者はアクティブ状態とされているか非アクティブ状態とされているかの動作ステータス上の相違があるのみで、同じ構成を備えている。以下、アクティブ状態であるか非アクティブ状態であるかの動作状態に異存しない構成・機能の説明の際には、単に「モジュール」というように称する。冗長コントローラ１０の詳細な構成については、図２を参照して後述する。特に本実施形態では、冗長コントローラ１０は、ユニバーサルバス１の系統とローカルバス２の系統との間で情報を受け渡すためのゲートウェイとして機能する。
【００１６】
クライアント装置２０は、冗長コントローラ１０の各モジュール１００Ｐ，１００Ｓのいずれか一方とのみ通信する機器、例えば、ＭｏｄｂｕｓＴＣＰクライアントである。クライアント装置２０は、ユニバーサルバス１に接続する各種コントローラが管理するフィールド機器４３，４４，４５などから供給される測定信号などを参照し、プロセス管理システム全体の運転状態を監視し、各外部機器に対する制御信号を送信する管理装置である。クライアント装置２０は、ユニバーサルバス１に接続される冗長コントローラ１０、ローカルバス２に接続されるフィールド機器４３，４４，４５の運転内容をモニタに表示可能に構成されている。運用者は、表示内容を見ることにより、プロセス管理システム全体の運転内容を把握することが可能である。クライアント装置２０は、フィールド機器４３，４４，４５などのプロセスデータを冗長コントローラ１０に書き込み可能に、そして冗長コントローラ１０から読み込み可能に構成されている。
【００１７】
フィールド機器４３，４４，４５は、流量、圧力、温度などの所定の物理量を測定する測定ポイント又は制御する制御ポイントとして機能可能に構成されている。フィールド機器４３、４４、４５は、例えば、流量センサや圧力センサ、温度センサなどの各種センサ、温度調節器や圧力・流量・開閉制御弁などの各種弁装置、ポンプやブロア、ファンなどのモータ、アクチュエータ機器類である。
【００１８】
図２に、本実施形態における冗長コントローラ１０のブロック図を示す。図２に示すように、冗長コントローラ１０の各モジュールは、ユニバーサルバス１とローカルバス２との間でプロセスデータの送受信を中継するゲートウェイとして機能する。モジュール１００は、フィールド機器４３，４４，４５などを統合して制御するコントローラとして機能することが可能となっている。直接的には、アクティブ状態となっているプライマリモジュール１００Ｐが、フィールド機器４３，４４，４５を制御する。
【００１９】
冗長コントローラ１０は、自己のモジュールをアクティブ状態としたり非アクティブ状態としたりする切り換え処理を実行可能に構成されている。具体的には、モジュール１００は、各々がコンピュータ装置を備えており、グローバルなメモリエリアにアクティブ状態／非アクティブ状態を示すフラグを設定可能になっている。そして、アクティブ状態となるモジュール１００では、内部のメモリエリアにアクティブ状態を示すフラグを設定し、プライマリモジュール１００Ｐとして機能する。また非アクティブ状態となるモジュール１００では、内部のメモリエリアに非アクティブ状態を示すフラグを設定し、セカンダリモジュール１００Ｓとして機能する。各モジュール１００は、自らのメモリエリアに設定されたフラグを参照して自らがアクティブ状態であるか非アクティブ状態であるかを判定し、アクティブ状態／非アクティブ状態の別に応じた処理を実行するように構成されている。
フラグの書き換えは、プライマリモジュール１００Ｐの動作を契機としてもセカンダリモジュール１００Ｓの動作を契機としてもよい。例えば、プライマリモジュール１００Ｐにおいて自らの動作不全が発生した場合、自らのフラグを非アクティブ状態に変更し、それまでアクティブ状態であった自らをセカンダリモジュール１００Ｓに変更する。それまで非アクティブ状態であったセカンダリモジュール１００Ｓは、プライマリモジュール１００Ｐがセカンダリモジュール１００Ｓに変更されたことに対応して自らのフラグをアクティブ状態に変更し、自らをプライマリモジュール１００Ｐに変更する。
また例えば、セカンダリモジュール１００Ｓが、プライマリモジュール１００Ｐとの通信ができないなど、プライマリモジュール１００Ｐにおける動作不全を発見した場合、セカンダリモジュール１００Ｓは自らのフラグをアクティブ状態に変更し、それまで非アクティブ状態であった自らをプライマリモジュール１００Ｐに変更する。またそれまでアクティブ状態であったプライマリモジュール１００Ｐのフラグを強制的に非アクティブ状態に書き換えてプライマリモジュール１００Ｐに変更する。
以下、プライマリモジュール１００Ｐに含まれる構成については符号Ｐを追記し、セカンダリモジュール１００Ｓに含まれる構成については符号Ｓを追記する。またいずれのモジュールにおいても共通して構成を説明する際には、符号Ｐ/Ｓを追記することなく構成の符号を記述する。
【００２０】
各モジュール１００は、プロセッサ、メモリ、インターフェース回路などを備えるコンピュータ装置としての構成を備え、データベース１７０などの記憶領域に格納されているソフトウェアプログラムをプロセッサが実行することにより、例示的に、冗長処理部１１０、通信部１２０、収集部１３０、入出力演算部１４０、収集部１５０、および通信部１６０として機能するようになっている。
【００２１】
冗長処理部１１０は、本発明に特徴的な機能ブロックであり、モジュール間で、それぞれが記憶するプロセスデータの同期をとり（プロセスデータの内容を同一にすること）、相手側のモジュールの動作状況を診断したり、自己のモジュールの動作状況を診断したりする機能ブロックである。冗長処理部１００は、例示的に、モジュール診断部１１２と、データベース同期部１１４とを備えている。
【００２２】
モジュール診断部１１２は、例えば、自己のモジュールの動作状態を診断する機能ブロックである。モジュール診断部１１２は、例えば、前述したようにモジュールの動作状態を示すフラグに基づいて自己のモジュールが、アクティブ状態であるか、又は、非アクティブ状態であるかを検出する。なお、モジュール診断部１１２は、自己のモジュールの動作状態だけではなく、他のモジュールの動作状態を診断するように構成されてもよい。
【００２３】
なお、自己のモジュールのモジュール診断部１１２と相手側のモジュールの相手モジュール診断部１１２との通信は、モジュール間を直接接続するバスを介して送受信するように構成されている。また、モジュール診断部１１２は自己のモジュールがアクティブ状態であるか非アクティブ状態であるかに拘わらず動作するように構成されている。
【００２４】
データベース同期部１１４は、モジュール間で、それぞれが同一のプロセスデータを記憶可能にプロセスデータの同期処理、プロセスデータや各種識別情報の送受信を行う機能ブロックである。
【００２５】
また、データベース同期部１１４は、各モジュールにおいてアクティブ状態と非アクティブ状態とを切り換える場合に、必要に応じて、それまでアクティブ状態であったモジュール側のデータベース同期部１１４がそれまで非アクティブ状態であったモジュール側のデータベース同期部１１４に対し、全てのプロセスデータを一括送信する。例えば起動開始から時間が経過していないため、それまで非アクティブ状態であったモジュールにおいてプロセスデータが更新されていない場合や、何からの事情でプロセスデータが喪失したりプロセスデータに欠陥が生じていたりする可能性がある場合である。全てのプロセスデータの転送は、いずれか一方のモジュールから他方のモジュールに対して全プロセスデータ転送を要求することによって実行されるように構成することが好ましい。
データベース同期部１１４は、例示的に、転送部１１４１と、更新部１１４３と、比較部１１４５と、算出部１１４７と、識別情報生成部１１４９とを備えている。
【００２６】
転送部１１４１は、プロセスデータの書き込みコマンドまたは読み込みコマンドを転送する機能ブロックである。ここで、書き込みコマンドとは、例えば、クライアント装置２０が冗長コントローラ１０にプロセスデータを書き込むことを要求するためのコマンドであり、読み込みコマンドとは、例えば、クライアント装置２０が冗長コントローラ１０に記録されているプロセスデータを読み込むことを要求するためのコマンドである。例えば、モジュール診断部１１２が自己のモジュールは非アクティブ状態であることを検出した（自己のモジュールがセカンダリモジュール１００Ｓであると検出した）場合に、転送部１１４１Ｓは、プロセスデータを含む書き込みコマンドをプライマリモジュール１００Ｐへ転送する。また、例えば、モジュール診断部１１２が自己のモジュールはアクティブ状態であることを検出した（自己のモジュールがプライマリモジュール１００Ｐであると検出した）場合に、転送部１１４１Ｐは、後述する更新識別情報を、書き込みコマンドの送信元であるセカンダリモジュール１００Ｓへ転送する。
【００２７】
転送部１１４１は、収集されたプロセスデータ又は更新されたプロセスデータの少なくとも一部を転送する機能ブロックである。モジュール診断部１１２が自己のモジュールはアクティブ状態であることを検出した（自己のモジュールがプライマリモジュール１００Ｐであると検出した）場合に、転送部１１４１Ｐは、プライマリモジュール１００Ｐにおいて更新されたプロセスデータの少なくとも一部をセカンダリモジュール１００Ｓに所定のタイミングで転送する。
【００２８】
更新部１１４３は、モジュール間でプロセスデータを同期するために、データベース１７０に記録されている過去のプロセスデータを更新する機能ブロックである。例えば、モジュール診断部１１２が自己のモジュールがセカンダリモジュール１００Ｓであると検出した場合に、更新部１１４３Ｐは、転送部１１４１Ｓにより転送された書き込みコマンドに含まれるプロセスデータを用いて、データベース１７０Ｐに記録されているプロセスデータ（過去のプロセスデータ）を更新する。また、モジュール診断部１１２が自己のモジュールがプライマリモジュール１００Ｐであると検出した場合に、更新部１１４３Ｐは、クライアント装置２０から送信された書き込みコマンドまたは転送部１１４１Ｓにより転送された書き込みコマンドに含まれるプロセスデータを用いて、過去のプロセスデータを更新する。なお、過去のプロセスデータとは、収集部１３０，１５０が現に収集し、又は、過去に収集したプロセスデータであって、データベース１７０に記録されているプロセスデータである。収集されたプロセスデータは、一時的に又は長期的にデータベース１７０に格納されてもよい。
【００２９】
比較部１１４５は、更新されたプロセスデータと過去のプロセスデータとを比較する機能ブロックである。算出部１１４７は、更新されたプロセスデータと過去のプロセスデータとの差分を算出する機能ブロックである。ここで、転送部１１４１により転送される更新されたプロセスデータの少なくとも一部のプロセスデータとは、更新されたプロセスデータと過去のプロセスデータとの差分に対応するプロセスデータを含む。
【００３０】
例えば、セカンダリモジュール１００Ｓのデータベース同期部１１４Ｓが、更新されたプロセスデータと過去のプロセスデータとの差分に基づいて過去のプロセスデータを更新する場合、プライマリモジュール１００Ｐのデータベース同期部１１４Ｐは、データベース同期部１１４Ｐにおいて更新されたプロセスデータと過去のプロセスデータとの差分に対応するプロセスデータや、当該差分に対応するプロセスデータが、プロセスデータ更新処理の際に新たに追加されたデータであるのか／削除されたデータであるのかを示すプロセスデータ識別情報を、セカンダリモジュール１００Ｓのデータベース同期部１１４Ｓに送信する。そして、セカンダリモジュール１００Ｓのデータベース同期部１１４Ｓは、当該差分に対応するプロセスデータおよびプロセスデータ識別情報に基づいて過去のプロセスデータを更新する。なお、データベース同期部１１４Ｐにおいて更新されたプロセスデータと過去のプロセスデータとの差分に対応するプロセスデータと、当該差分に対応するプロセスデータが、プロセスデータ更新処理の際に新たに追加されたデータであるのか／削除されたデータであるのかを示すプロセスデータ識別情報とは、後述する更新識別情報（識別情報）に含まれる。
【００３１】
プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとの間において、一方のモジュールにおいて更新されたプロセスデータの全てを相手方のモジュールに転送することなく、更新されたプロセスデータと過去のプロセスデータとの差分に対応するプロセスデータおよび／または所定のプロセスデータ識別情報のみ送信することにより、プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとの間でプロセスデータを同期することが可能となるので、データ送信量の削減が可能となる。
【００３２】
なお、アクティブ状態であるプライマリモジュール１００Ｐのデータベース同期部１１４Ｐは、過去のプロセスデータに対して更新されたプロセスデータの全てを非アクティブ状態であるセカンダリモジュール１００Ｓのデータベース同期部１１４Ｓに送信するように構成されてもよい。プライマリモジュール１００Ｐのデータベース同期部１１４Ｐは、更新されたプロセスデータを任意のタイミングでデータベース１７０Ｐに記録する。セカンダリモジュール１００Ｓのデータベース同期部１１４Ｓは、プライマリモジュール１００Ｐのデータベース同期部１１４Ｐから更新されたプロセスデータの全てを受信すると、当該プロセスデータを過去のプロセスデータに上書きすることで当該過去のプロセスデータを更新する。データベース同期部１１４Ｓは、任意のタイミングで更新されたプロセスデータをデータベース１７０Ｓに記録する。データベース同期部１１４は、上記処理を実行することにより、プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとの間で、それぞれが同一のプロセスデータを記憶・保持することを可能にする。
【００３３】
なお、二つのモジュールのデータベース同期部１１４間のプロセスデータは、データ量が相対的に多い場合に備えて、高速バスであるユニバーサルバス１を経由して転送される。ただし、更新されるプロセスデータのようにデータ量が相対的に少ない場合には、プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとを直接接続する所定バスを介して送受信するように構成してもよい。
【００３４】
識別情報生成部１１４９は、書き込みコマンドに含まれるプロセスデータを用いてデータベース１７０に記録されているプロセスデータ（過去のプロセスデータ）を更新したことを示す更新識別情報（識別情報）を生成する機能ブロックである。更新識別情報とは、例示的に、単にプロセスデータが更新されたことを示す情報、データベース同期部１１４において更新されたプロセスデータと過去のプロセスデータとの差分に対応するプロセスデータが、プロセスデータ更新処理の際に新たに追加されたデータであるのか／削除されたデータであるのかを示すプロセスデータ識別情報を含む情報である。例えば、モジュール診断部１１２が自己のモジュールはセカンダリモジュール１００Ｓであると検出した場合に、識別情報生成部１１４９Ｐは、プライマリモジュール１００Ｐがセカンダリモジュール１００Ｓから転送された書き込みコマンドに含まれるプロセスデータを用いてデータベース１７０Ｐに記録されているプロセスデータを更新したことを示す識別情報を生成する。また、例えば、モジュール診断部１１２が自己のモジュールはプライマリモジュール１００Ｐであると検出した場合に、識別情報生成部１１４９Ｐは、プライマリモジュール１００Ｐがクライアント装置２０から送信された書き込みコマンド、又は、セカンダリモジュール１００Ｓから転送された書き込みコマンドに含まれるプロセスデータを用いてデータベース１７０Ｐに記録されているプロセスデータを更新したことを示す識別情報を生成する。ここで、例えば、クライアント装置２０から書き込みコマンドが冗長コントローラ１０に対して送信された場合に、冗長コントローラ１０は、プロセスデータの書き込み処理（更新処理）が完了した後、当該更新処理が完了したことを示す更新識別情報をクライアント装置２０に送信することにより、クライアント装置２０は、当該更新識別情報に基づいて書き込み処理が完了したことを確認する。
【００３５】
通信部１２０は、ユニバーサルバス１を介してクライアント装置２０やプロセスコントローラ１１などのシステム上位機器類と相互通信するためのブロックである。通信部１２０は、ユニバーサルバス１のコンピュータネットワーク規格に準拠した物理的な通信条件に合致させて所定の通信プロトコルでデータ入出力を行う。通信部１２０は、例えば、ユニバーサルバス１を介してクライアント装置２０から書き込みコマンドまたは読み込みコマンドを受信する。また、通信部１２０は、例えば、ユニバーサルバス１を介してクライアント装置２０に対して、更新されたプロセスデータや更新識別情報を送信する。
【００３６】
収集部１３０は、ローカルバス１を介してシステム上位機器類から供給された測定値に関するプロセスデータを収集する機能ブロックである。収集部１３０は、例えば、クライアント装置２０からローカルバス１を介して書き込まれたプロセスデータを収集し、冗長処理部１１０に出力する。また、収集部１３０は、冗長処理部１１０から更新されたプロセスデータや各種識別情報などを収集する。
【００３７】
収集部１５０は、測定値に関するプロセスデータを収集する機能ブロックである。収集するプロセスデータとしては、フィールド機器類から直流信号で直接供給されたアナログ測定値や、ローカルバス２に接続されるモジュールから供給されたデジタル測定値である。収集部１５０は、自己のモジュールがアクティブ状態である場合にのみ動作し、非アクティブ状態である場合には動作を停止するように構成されている。なお、収集部１５０は、例えば、制御値に関するプロセスデータを出力し、フィールド機器などの外部機器に所望の制御値を設定するように構成されてもよい。設定するプロセスデータとしては、例えば、温度調節器や圧力・流量・開閉制御弁などの各種弁装置に対して出力するアナログ設定値やデジタル設定値、ポンプやブロア、ファンなどのモータ、アクチュエータ機器類に対するロジック値などである。
【００３８】
通信部１６０は、ローカルバス２を介してフィールド機器類から供給された測定値であるプロセスデータを受信し、フィールド機器類に対する設定値であるプロセスデータを出力するブロックである。通信部１６０は、ローカルバス２のコンピュータネットワーク規格に準拠した物理的な通信条件に合致させて所定の通信プロトコルでデータ入出力を行う。
【００３９】
入出力演算部１４０は、各種コマンド、プロセスデータ、および各種識別情報の入出力を制御し、必要な演算処理を実施して情報・データを加工し、加工した情報・データを出力する機能ブロックである。非限定の例示として、入出力演算部１４０は、以下のような処理を実行する。
【００４０】
入出力演算部１４０は、収集部１５０が収集したプロセスデータをクライアント装置２０の要求に応じて転送する。入出力演算部１４０は、収集したプロセスデータに補正、抽出、加算・積算・平均・時間軸移動処理などの演算を施して出力する。入出力演算部１４０は、収集したプロセスデータに応じて所定の制御値または制御データを生成して出力する。入出力演算部１４０は、自己のモジュールがアクティブ状態である場合に動作し、非アクティブ状態である場合には動作を停止する。
【００４１】
＜動作の説明＞
以下、図３乃至５の処理シーケンス図を参照しながら、冗長コントローラ１０の動作を説明する。
（前提）
本実施形態において、クライアント装置２０は、冗長コントローラ１０との通信のために一つのＩＰアドレスのみを把握しているものとする。具体的には、図２における左側のモジュールの通信部１２０（１２０Ｐ）と接続するためのＩＰアドレスのみを把握している。したがって、クライアント装置２０は、単一のＩＰアドレスを有する冗長コントローラ１０と通信するという前提である。具体的には、クライアント装置２０は、書き込みコマンドを送信して、それに対応して冗長コントローラ１０から送信されてくる書き込みが完了したことを示す識別情報を受信する。また、読み込みコマンドを送信して、それに対応して冗長コントローラ１０から送信されてくるプロセスデータを受信する。すなわち、クライアント装置２０は、冗長コントローラ１０が二重化されたモジュール１００の冗長構成を有していることや、冗長構成のうちいずれか一方のアクティブ状態のモジュールと通信すべきことに配慮することなく、冗長コントローラ１０を単一の装置として通信することが可能となっている。
以下、図３および図４を参照しながら書き込みコマンドに対する冗長コントローラ１０の処理シーケンスを説明し、図５を参照しながら読み込みコマンドに対する処理シーケンスを説明する。
【００４２】
（書き込み処理）
＜クライアント装置２０と通信するモジュールがアクティブ状態のプライマリモジュール１００Ｐである場合＞
図３は、図２における左側のモジュールがプライマリモジュール１００Ｐ、右側のモジュールがセカンダリモジュール１００Ｓとして動作している場合の処理シーケンス図を示している。
前提として、図２に示す収集部１５０は、外部機器（フィールド機器など）からプロセスデータを収集している。入出力演算処理部１４０は、収集したプロセスデータに対して、必要な演算処理を施し、クライアント装置２０の要求に応じて転送している。そして、クライアント装置２０は、冗長コントローラ１０のモジュールに、プロセスデータの書き込みを要求するための書き込みコマンドを送信する。
【００４３】
まず、図３のステップＳＰ１において、通信部１２０Ｐは、クライアント装置２０からのコマンドを受信する。
【００４４】
ステップＳＰ２において、モジュール診断部１１２Ｐは、自らのモジュールの動作状態を診断する。モジュール診断部１１２Ｐが自らのモジュールはアクティブ状態であること（プライマリモジュール１００Ｐであること）を検出する。
【００４５】
ステップＳＰ３において、冗長処理部１１０Ｐは、コマンドを解析し、当該コマンドが書き込みコマンドであることを確認する。
【００４６】
ステップＳＰ４において、更新部１１４３Ｐにおいて、書き込みコマンドに含まれるプロセスデータを用いてデータベース１７０Ｐに記録されているプロセスデータ（過去のプロセスデータ）を更新する。例えば、過去のプロセスデータがＡ＋Ｂであり、書き込みコマンドに含まれるプロセスデータがＡ＋Ｂ＋Ｃである場合、更新部１１４３Ｐは、プロセスデータＡ＋Ｂ＋Ｃを過去のプロセスデータＡ＋Ｂに上書きすることで過去のプロセスデータを更新する。
【００４７】
ステップＳＰ５において、識別情報生成部１１４９Ｐは、プロセスデータが更新されたことを示す更新識別情報を生成する。ここで、更新識別情報は、例えば、更新部１１４３Ｐがプロセスデータを更新したことを示す識別情報を含む。なお、例えば、識別情報生成部１１４９Ｐは、更新されたプロセスデータＡ＋Ｂ＋Ｃと過去のプロセスデータＡ＋Ｂとの差分に対応するプロセスデータ（Ｃ）と、プロセスデータ（Ｃ）が更新の際に新たに追加されたプロセスデータであることを示す識別情報と、を含む更新識別情報を生成してもよい。
【００４８】
ステップＳＰ６において、通信部１２０Ｐは、ユニバーサルバス１を介して書き込みコマンドの送信元であるクライアント装置２０に対して、更新識別情報を送信する。
【００４９】
なお、データベース同期部１１４Ｐは、過去のプロセスデータに対して更新されたプロセスデータの全てを非アクティブ状態であるセカンダリモジュール１００Ｓのデータベース同期部１１４Ｓに送信するように構成されてもよい。データベース同期部１１４Ｐは、更新されたプロセスデータを任意のタイミングでセカンダリモジュール１００Ｓのデータベース同期部１１４Ｓに送信する。セカンダリモジュール１００Ｓのデータベース同期部１１４Ｓは、データベース同期部１１４Ｐから更新されたプロセスデータの全てを受信すると、当該プロセスデータを過去のプロセスデータに上書きすることで当該過去のプロセスデータを更新する。データベース同期部１１４Ｓは、任意のタイミングで更新されたプロセスデータをデータベース１７０Ｓに記録する。このように、双方のデータベース同期部１１４は、上記処理を実行することにより、プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとの間で、それぞれが同一のプロセスデータを記憶・保持することを可能にする。
【００５０】
＜クライアント装置２０と通信するモジュールが非アクティブ状態のセカンダリモジュール１００Ｓである場合＞
図４は、図２における左側のモジュールがセカンダリモジュール１００Ｓ、右側のモジュールがプライマリモジュール１００Ｐとして動作している場合の処理シーケンス図を示している。
前提として、収集部１５０は、外部機器（フィールド機器など）からプロセスデータを収集している。入出力演算処理部１４０は、収集したプロセスデータに対して、必要な演算処理を施し、クライアント装置２０の要求に応じて転送している。そして、クライアント装置２０は、冗長コントローラ１０のモジュールに、プロセスデータの書き込みを要求するための書き込みコマンドを送信する。
【００５１】
まず、図４のステップＳＳ１において、通信部１２０Ｓは、クライアント装置２０からのコマンドを受信する。
【００５２】
ステップＳＳ２において、モジュール診断部１１２Ｓは、自らのモジュールの動作状態を診断する。モジュール診断部１１２Ｓが自らのモジュールは非アクティブ状態であること（セカンダリモジュール１００Ｓであること）を検出する。
【００５３】
ステップＳＳ３において、冗長処理部１１０Ｓは、コマンドを解析し、当該コマンドが書き込みコマンドであることを確認する。
【００５４】
ステップＳＳ４において、転送部１１４１Ｓは、書き込みコマンドを相手側のモジュール（プライマリモジュール１００Ｐ）に転送する。なお、セカンダリモジュール１００Ｓにおいて、プロセスデータの更新処理を自らは実行せずに、書き込みコマンドをプライマリモジュール１００Ｐに転送するようにプログラムされている。
【００５５】
次に、ステップＳＰ１１において、プライマリモジュール通信部１２０Ｐは、セカンダリモジュール１００Ｓから転送されてきたコマンドを受信する。
【００５６】
ステップＳＰ１２において、冗長処理部１１０Ｐは、コマンドを解析し、当該コマンドが書き込みコマンドであることを確認する。
【００５７】
ステップＳＰ１３において、図３のステップＳＰ４と同様に、更新部１１４３Ｐにおいて、書き込みコマンドに含まれるプロセスデータを用いてデータベース１７０Ｐに記録されているプロセスデータ（過去のプロセスデータ）を更新する。
【００５８】
ステップＳＰ１４において、図３のステップＳＰ５と同様に、識別情報生成部１１４９Ｐは、プロセスデータが更新されたことを示す更新識別情報を生成する。
【００５９】
ステップＳＰ１５において、通信部１２０Ｐは、書き込みコマンドの送信元であるセカンダリモジュール１００Ｓに対して、更新識別情報を送信する。
【００６０】
一方、ステップＳＳ５において、セカンダリモジュール１００Ｓのデータベース同期部１１４Ｓは、プライマリモジュール１００Ｐの識別情報生成部１１４９Ｐが生成する更新識別情報を受信するように待機している。
【００６１】
ステップＳＳ６において、データベース同期部１１４Ｓから更新識別情報を受信するまで待って（ステップＳＳ６において「ＮＯ」の場合）は、データベース同期部１１４Ｓは、引き続き、プライマリモジュール１００Ｐの識別情報生成部１１４９Ｐが生成する更新識別情報を受信するように待機する（ステップＳＳ５）。
【００６２】
ステップＳＳ６において、データベース同期部１１４Ｓが更新識別情報を受信した場合（ステップＳＳ６において「ＹＥＳ」の場合）は、転送部１１４１Ｓは、更新識別情報を、書き込みコマンドの送信元であるクライアント装置２０に転送する（ステップＳＳ７）。
【００６３】
なお、セカンダリモジュール１００Ｓは、更新識別情報を受信すると、プロセスデータを更新し、更新されたプロセスデータをデータベース１７０Ｓに記録する。例えば、セカンダリモジュール１００Ｓは、プロセスデータ（Ｃ）と、プロセスデータ（Ｃ）が更新の際に新たに追加されたプロセスデータであることを示すプロセスデータ識別情報とを受信し、プロセスデータ識別情報を参照することで、セカンダリモジュール１００Ｓに記録されている過去のプロセスデータ（Ａ＋Ｂ）にプライマリモジュール１００Ｐからのプロセスデータ（Ｃ）を追加する。したがって、セカンダリモジュール１００Ｓに記録されている過去のプロセスデータが更新され、更新されたプロセスデータＡ＋Ｂ＋Ｃをデータベース１７０Ｓに格納する。
【００６４】
（読み込み処理）
図５は、読み込みコマンドの処理シーケンス図を示している。
前提として、データベース１７０Ｐおよび１７０Ｓには、同一のプロセスデータが記録されている。そして、クライアント装置２０は、冗長コントローラ１０のモジュールに、プロセスデータの読み込みを要求するための読み込みコマンドを送信する。
図５においても、クライアント装置２０は、図２における左側のモジュールの通信部１２０（１２０Ｐ）と接続するためのＩＰアドレスのみを把握しており、この通信部１２０に対して読み込みコマンドが送信されてくるものとする。
ここで、上記前提のように、データベース１７０Ｐおよび１７０Ｓには、同一のプロセスデータが記録されている。このため、モジュール１００は、自らがアクティブ状態でありプライマリモジュール１００Ｐであるか、自らが非アクティブ状態でありセカンダリモジュール１００Ｓであるかとは無関係に、自らのデータベース１７０からプロセスデータを読み出してクライアント装置２０に返信すればよい。この点、書き込みコマンドの処理シーケンスと異なる。よって、以下の説明では、読み込みコマンドを直接受信した通信部１２０を含むモジュール１００がプライマリモジュール１００Ｐであるかセカンダリモジュール１００Ｓであるかによらず、同じ動作をすればよいため、以下、プライマリ（Ｐ）、セカンダリ（Ｓ）の区別をせずに説明してある。
【００６５】
まず、図５のステップＳＰ２１において、通信部１２０は、クライアント装置２０からのコマンドを受信する。
【００６６】
ステップＳＰ２３において、冗長処理部１１０は、コマンドを解析し、当該コマンドが読み込みコマンドであることを確認する。
【００６７】
ステップＳＰ２５において、データベース１７０に記録されている最新のプロセスデータが読み出される。例えば、プロセスデータＡ＋Ｂ＋Ｃである。
【００６８】
ステップＳＰ２７において、通信部１２０は、ユニバーサルバス１を介して書き込みコマンドの送信元であるクライアント装置２０に対して、読み出したプロセスデータを送信する。よって、クライアント装置２０は、データベース１７０に記録されている最新のプロセスデータＡ＋Ｂ＋Ｃを受信して、最新のプロセスデータを把握することができる。
【００６９】
（効果）
（１）以上のとおり、本実施形態のモジュール１００によれば、書き込みコマンドを受信した場合、互いに同等の機能を有するモジュールの各々は、自らのモジュールがアクティブ状態である場合（プライマリモジュール１００Ｐの場合）は、データベース１７０Ｐに記録されているプロセスデータが更新されたことを示す更新識別情報をクライアント装置２０に送信する。また、自らのモジュールが非アクティブ状態である場合（セカンダリモジュール１００Ｓの場合）は、プロセスデータを含む書き込みコマンドを自らのモジュールと対をなすプライマリモジュール１００Ｐへ転送し、プライマリモジュール１００Ｐから転送されてきた更新識別情報をさらにクライアント装置２０に送信する。したがって、クライアント装置２０は、冗長コントローラ１０が二重化されたモジュール１００の冗長構成を有していることや、冗長構成のうちいずれか一方のアクティブ状態のモジュールと通信すべきことに配慮することなく、冗長コントローラ１０を単一の装置として書き込み処理をすることができるという汎用性の高い通信を実現できる。
（２）以上のとおり、本実施形態のモジュール１００によれば、読み込みコマンドを受信した場合、自らのモジュールが非アクティブ状態であるかアクティブ状態であるかに関わらず、自らのデータベース１７０に保持されたプロセスデータをクライアント装置２０に送信する。本実施形態によれば、二重化された冗長構成のそれぞれのデータベース１７０Ｐおよび１７０Ｓで同一のプロセスデータが更新保持されてこのプロセスデータが読み出されて送信されるので、クライアント装置２０は、最新のプロセスデータを直接把握することができる。したがって、クライアント装置２０は、冗長コントローラ１０が二重化されたモジュール１００の冗長構成を有していることや、冗長構成のうちいずれか一方のアクティブ状態のモジュールと通信すべきことに配慮することなく、冗長コントローラ１０を単一の装置として読み込み処理をすることができるという、汎用性の高い通信を実現できる。
【００７０】
（その他の実施形態）
本発明は上記各実施形態に限定されることなく種々に変更して利用することができる。例えば、プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとの間において、一方のモジュールにおいて更新されたプロセスデータの全てを相手方のモジュールに転送することなく、更新されたプロセスデータと過去のプロセスデータとの差分に対応するプロセスデータおよび／または所定のプロセスデータ識別情報のみ送信する。したがって、プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとの間でプロセスデータを同期することが可能となるので、データ送信量の削減が可能となる。
【００７１】
なお、二つのモジュールのデータベース同期部１１４間のプロセスデータは、データ量が相対的に多い場合に備えて、高速バスであるユニバーサルバス１を経由して転送される。ただし、更新されるプロセスデータのようにデータ量が相対的に少ない場合には、プライマリモジュール１００Ｐとセカンダリモジュール１００Ｓとを直接接続する所定バスを介して送受信するように構成してもよい。
【符号の説明】
【００７２】
１…ユニバーサルバス
２…ローカルバス
１０…冗長コントローラ
２０…クライアント装置
３３…シリアル通信ユニット
４３−４５…フィールド機器
１００Ｐ…プライマリモジュール
１００Ｓ…セカンダリモジュール
１１０Ｐ、１１０Ｓ…冗長処理部
１１２Ｐ、１１２Ｓ…モジュール診断部
１１４Ｐ、１１４Ｓ…データベース同期部
１２０Ｐ、１２０Ｓ…通信部
１３０Ｐ、１３０Ｓ…収集部
１４０Ｐ、１４０Ｓ…入出力演算処理部
１５０Ｐ、１５０Ｓ…収集部
１６０Ｐ、１６０Ｓ…通信部
１７０Ｐ、１７０Ｓ…データベース
１１４１Ｐ、１１４１Ｓ…転送部
１１４３Ｐ、１１４３Ｓ…更新部
１１４５Ｐ、１１４５Ｓ…比較部
１１４７Ｐ、１１４７Ｓ…算出部
１１４９Ｐ、１１４９Ｓ…識別情報生成部
【図１】
2017021588.tif 000003
【図２】
2017021588.tif 000004
【図３】
2017021588.tif 000005
【図４】
2017021588.tif 000006
【図５】
2017021588.tif 000007