(57)【要約】【課題】冗長構成におけるノード間での同期処理を専用のハードウェアを用いずに実行する冗長システム及び同期方法を提供すること。【解決手段】主系ノードと副系ノードとにより冗長化された冗長システム。主系ノード及び副系ノードは、それぞれ、互いに情報を共有するための同期用データベースを備えている。主系ノードは、主系データベースに変更があったとき、主系データベースにおける変更部分の直前までのデータサイズであるオフセットを求め、求めたオフセットと共に変更部分の情報である変更データを副系ノードへ送信する。副系ノードは、主系ノードから送信されるオフセットを用いて、変更部分の先頭アドレスに対応する副系データベース内の対応先頭アドレスを求める。そして、副系ノードは、副系データベースにおける対応先頭アドレスを始点とした一定領域のデータを変更データに書き替える。【選択図】図２
2020135510.tif 000002
【特許請求の範囲】
【請求項１】
主系ノードと副系ノードとにより冗長化された冗長システムであって、
前記主系ノード及び前記副系ノードは、それぞれ、互いに情報を共有するための同期用データベースを備え、
前記主系ノードは、
前記主系ノードの同期用データベースに変更があったとき、当該同期用データベースにおける変更部分の直前までのデータサイズであるオフセットを求め、求めた前記オフセットと共に前記変更部分の情報である変更データを前記副系ノードへ送信するオフセット演算部を有し、
前記副系ノードは、
前記オフセット演算部から送信される前記オフセットを用いて、前記変更部分の先頭アドレスに対応する前記副系ノードの同期用データベース内の対応先頭アドレスを求める対応アドレス演算部と、
前記副系ノードの同期用データベースにおける前記対応先頭アドレスを始点とした一定領域のデータを前記変更データに書き替える変更処理部と、を有する、冗長システム。
【請求項２】
前記オフセット演算部は、
前記主系ノードの同期用データベースが連続的に構成されている場合、
前記変更部分の先頭アドレスから当該同期用データベースの先頭アドレスを減算して前記オフセットを求めるものである、請求項１に記載の冗長システム。
【請求項３】
前記オフセット演算部は、
前記主系ノードの同期用データベースが複数の分割領域に分かれて構成されている場合において、先頭アドレスの最も小さい分割領域に前記変更部分が含まれていれば、
前記変更部分の先頭アドレスから当該同期用データベースの先頭アドレスを減算して前記オフセットを求めるものである、請求項１又は２に記載の冗長システム。
【請求項４】
前記オフセット演算部は、
前記主系ノードの同期用データベースが複数の分割領域に分かれて構成されている場合において、先頭アドレスの最も小さい分割領域に前記変更部分が含まれていなければ、
前記変更部分を含む分割領域よりも前に位置する全ての分割領域のデータサイズの総和である第１オフセットを求めると共に、前記変更部分の先頭アドレスから前記変更部分を含む分割領域の先頭アドレスを減算して第２オフセットを求め、前記第１オフセットと前記第２オフセットとを加算して前記オフセットを求めるものである、請求項１〜３の何れか一項に記載の冗長システム。
【請求項５】
主系ノードと副系ノードとにより冗長化された冗長システムであって、
前記主系ノード及び前記副系ノードは、それぞれ、互いに情報を共有するための同期用データベースを備えると共に、前記主系ノードの同期用データベースは連続的に構成されており、
前記主系ノードは、
前記主系ノードの同期用データベースに変更があったとき、当該同期用データベースの先頭アドレスである主系先頭アドレスと、変更部分の先頭アドレスである変更先頭アドレスと、前記変更部分の情報である変更データとを前記副系ノードへ送信するデータ送信部を有し、
前記副系ノードは、
前記変更先頭アドレスから前記主系先頭アドレスを減算してオフセットを求めるオフセット演算部と、
オフセット演算部によって求められた前記オフセットを用いて、前記変更部分の先頭アドレスに対応する前記副系ノードの同期用データベース内の対応先頭アドレスを求める対応アドレス演算部と、
前記副系ノードの同期用データベースにおける前記対応先頭アドレスを始点とした一定領域のデータを前記変更データに書き替える変更処理部と、を有する、冗長システム。
【請求項６】
前記対応アドレス演算部は、
前記副系ノードの同期用データベースが連続的に構成されている場合、
当該同期用データベースの先頭アドレスに前記オフセットを加算して前記対応先頭アドレスを求めるものである、請求項１〜５の何れか一項に記載の冗長システム。
【請求項７】
前記対応アドレス演算部は、
前記副系ノードの同期用データベースが複数の分割領域に分かれて構成されている場合において、先頭アドレスの最も小さい分割領域のデータサイズが前記オフセットよりも大きければ、
当該同期用データベースの先頭アドレスに前記オフセットを加算して前記対応先頭アドレスを求めるものである、請求項１〜６の何れか一項に記載の冗長システム。
【請求項８】
前記対応アドレス演算部は、
前記副系ノードの同期用データベースが複数の分割領域に分かれて構成されている場合において、先頭アドレスの最も小さい分割領域のデータサイズが前記オフセット以下であれば、
データサイズの合計が前記オフセットよりも大きくなるまで、先頭アドレスの小さい順に分割領域のデータサイズを積算し、積算値が前記オフセットよりも大きくなる前までのデータサイズの合計である調整用オフセットを求め、
前記オフセットから前記調整用オフセットを減算して導出用オフセットを求め、求めた導出用オフセットを、前記積算値が前記オフセットを超えたときに加算対象となった分割領域の先頭アドレスに加算して前記対応先頭アドレスを求めるものである、請求項１〜７の何れか一項に記載の冗長システム。
【請求項９】
主系ノードと副系ノードとにより冗長化された冗長システムであって、
前記主系ノード及び前記副系ノードは、それぞれ、互いに情報を共有するための連続的に構成された同期用データベースを備え、
前記主系ノードは、
前記主系ノードの同期用データベースに変更があったとき、当該同期用データベースの先頭アドレスである主系先頭アドレスと、変更部分の先頭アドレスである変更先頭アドレスと、前記変更部分の情報である変更データとを前記副系ノードへ送信するデータ送信部を有し、
前記副系ノードは、
前記データ送信部から送信される前記主系先頭アドレス及び変更先頭アドレスを用いて、前記変更部分の先頭アドレスに対応する前記副系ノードの同期用データベース内の対応先頭アドレスを求める対応アドレス演算部と、
前記副系ノードの同期用データベースにおける前記対応先頭アドレスを始点とした一定領域のデータを前記変更データに書き替える変更処理部と、を有する、冗長システム。
【請求項１０】
前記対応アドレス演算部は、
前記副系ノードの同期用データベースの先頭アドレスから前記主系先頭アドレスを減算して主副間オフセットを求め、前記変更先頭アドレスに前記主副間オフセットを加算して前記対応先頭アドレスを求めるものである、請求項９に記載の冗長システム。
【請求項１１】
主系ノードの同期用データベースと副系ノードの同期用データベースとを同期させる同期方法であって、
前記主系ノードの同期用データベースに変更があったとき、当該同期用データベースにおける変更部分の直前までのデータサイズであるオフセットを求めるオフセット演算ステップと、
前記オフセットを用いて、前記変更部分の先頭アドレスに対応する前記副系ノードの同期用データベース内の対応先頭アドレスを求める対応アドレス演算ステップと、
前記副系ノードの同期用データベースのうち、前記対応先頭アドレスを始点とした一定領域のデータを、前記変更部分の情報である変更データに書き替える変更処理ステップと、を有する同期方法。
【請求項１２】
主系ノードの同期用データベースと副系ノードの同期用データベースとを同期させる同期方法であって、
前記主系ノードの同期用データベースに変更があったとき、
変更部分の先頭アドレスである変更先頭アドレスから、前記主系ノードの同期用データベースの先頭アドレスを減算してオフセットを求めるオフセット演算ステップと、
前記オフセットを用いて、前記変更部分の先頭アドレスに対応する前記副系ノードの同期用データベース内の対応先頭アドレスを求める対応アドレス演算ステップと、
前記副系ノードの同期用データベースにおける前記対応先頭アドレスを始点とした一定領域のデータを、前記変更部分の情報である変更データに書き替える変更処理ステップと、を有する、同期方法。
【請求項１３】
主系ノードの同期用データベースと副系ノードの同期用データベースとを同期させる同期方法であって、
前記主系ノードの同期用データベースに変更があったとき、
変更部分の先頭アドレス及び当該同期用データベースの先頭アドレスを用いて、前記変更部分の先頭アドレスに対応する前記副系ノードの同期用データベース内の対応先頭アドレスを求める対応アドレス演算ステップと、
前記副系ノードの同期用データベースにおける前記対応先頭アドレスを始点とした一定領域のデータを、前記変更部分の情報である変更データに書き替える変更処理ステップと、を有する、冗長システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノードによる冗長構成を採用した冗長システム及び同期方法に関する。
【背景技術】
【０００２】
従来から、分散制御システム（distributed control system）では、演算処理機能を備えたノードの冗長化が採り入れられている（例えば、特許文献１参照）。冗長構成を採用した冗長システムは、稼働系（プライマリ）として動作する主系ノードと、待機系（セカンダリ）として動作する副系ノードとを有している。これら２つのノードは、情報共有のための同期用データベースを備えており、同一バージョンのソフトウェアで動作して、常に固定されたメモリ領域に同期用データベースが配置される。
【０００３】
冗長システムは、主系ノードの同期用データベースに変更があった際に、副系ノードの同期用データベースを主系ノードの同期用データベースに同期させる同期機能を有している。ここで、同期とは、主系ノードの同期用データベースの内容と、副系ノードの同期用データベースの内容とを一致させることである。より具体的に、主系ノードは、自身の同期用データベースに変更があったとき、変更があった部分の情報を副系ノードへ送信する。すると、副系ノードは、主系ノードから送信された情報をもとに、自身の同期用データベースにおける該当箇所のデータを書き替える。この同期機能により、主系ノードでの同期用データベースの変更を、副系ノードの同期用データベースに即時に反映させることができる。
【０００４】
ところで、冗長システムでは、ノード間における同期用データベースの同期が、各ノードの制御周期よりも短時間で確実に実行される必要がある。例えば、各ノードが、高級演算制御モジュールのような高度で複雑な演算処理を行う制御モジュールであれば、１秒周期といった短い制御周期で演算処理を行うため、同期用データベースの同期の高速化が要求される。
【０００５】
ただし、一般に、制御モジュールは、２０年以上前に設計と開発が行われたレガシーシステムであり、当時のソフトウェア技術では、制御周期よりも短時間というスペックでの同期用データベースの同期機能を実現することができなかった。そのため、従来の制御モジュールは、同期用データベースの同期機能を、専用のハードウェアを用いて実現するようになっている。
【０００６】
こうした中、現在、分散制御システムの延命を計画するにあたり、ハードウェアの部品枯渇が深刻化している。そのため、専用のハードウェアで実現していた同期用データベースの同期機能を、現在の汎用ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を用い、ソフトウェアで代替えする必要がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１５−６４７３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、汎用ＯＳでは、冗長システムの主系ノード及び副系ノードにおいて、同期用データベースのために確保されるメモリ領域が固定されない。よって、冗長システムの２ノード間で、メモリ領域の同じアドレスに同期用データベースを配置することが困難なため、従来の同期機能をそのまま使用することができない。
【０００９】
本発明は、上記の課題を解決するためになされたものであり、専用のハードウェアを用いることなく、ノード間での同期処理を精度よく実行する冗長システム及び同期方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る冗長システムは、主系ノードと副系ノードとにより冗長化された冗長システムであって、主系ノード及び副系ノードは、それぞれ、互いに情報を共有するための同期用データベースを備え、主系ノードは、主系ノードの同期用データベースに変更があったとき、当該同期用データベースにおける変更部分の直前までのデータサイズであるオフセットを求め、求めたオフセットと共に変更部分の情報である変更データを副系ノードへ送信するオフセット演算部を有し、副系ノードは、オフセット演算部から送信されるオフセットを用いて、変更部分の先頭アドレスに対応する副系ノードの同期用データベース内の対応先頭アドレスを求める対応アドレス演算部と、副系ノードの同期用データベースにおける対応先頭アドレスを始点とした一定領域のデータを変更データに書き替える変更処理部と、を有するものである。
【００１１】
本発明に係る同期方法は、主系ノードの同期用データベースと副系ノードの同期用データベースとを同期させる同期方法であって、主系ノードの同期用データベースに変更があったとき、当該同期用データベースにおける変更部分の直前までのデータサイズであるオフセットを求めるオフセット演算ステップと、オフセットを用いて、変更部分の先頭アドレスに対応する副系ノードの同期用データベース内の対応先頭アドレスを求める先頭アドレス演算ステップと、副系ノードの同期用データベースのうち、対応先頭アドレスを始点とした一定領域のデータを、変更部分の情報である変更データに書き替える変更処理ステップと、を有している。
【発明の効果】
【００１２】
本発明によれば、同期用データベースに変更があったとき、主系ノードがオフセット及び変更データを副系ノードへ送信し、副系ノードが、オフセットを用いて対応先頭アドレスを求めると共に、対応先頭アドレスを始点とした一定領域のデータを変更データに書き替える。すなわち、変更部分の先頭アドレスに対応する対応先頭アドレスを正確に特定した上で、データの書き替えを実行することができる。そのため、冗長システムの各ノードにおいて、固定のメモリ領域に同期用データベースが配置されない場合でも、専用のハードウェアを用いることなく、ノード間での同期処理を精度よく実行することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態１に係る分散制御システムを例示した構成図である。
【図２】図１の主系ノード及び副系ノードの機能的構成を例示したブロック図である。
【図３】図２の主系データベース及び副系データベースが連続的に構成されている場合の同期処理を例示した説明図である。
【図４】図２の主系データベース及び副系データベースが非連続な構成である場合の同期処理を例示した説明図である。
【図５】図２の副系データベースが非連続な構成であり、かつ副系最先領域のデータサイズがオフセットよりも大きい場合の同期処理を例示した説明図である。
【図６】図２の主系データベース及び副系データベースのうちの何れか一方が連続的に構成され、他方が非連続な構成である場合の同期処理を例示した説明図である。
【図７】図２のプログラム領域に、同期処理に関するコードを実装する例を示す説明図である。
【図８】図２の記憶装置におけるプログラム領域とは異なる領域に、同期処理に関するコードを実装する例を示す説明図である。
【図９】図２の冗長システムの動作を例示したフローチャートである。
【図１０】本発明の実施の形態２に係る冗長システムの主系ノード及び副系ノードの機能的構成を例示したブロック図である。
【図１１】図１０の主系データベース及び副系データベースが連続的に構成されている場合の同期処理を例示した説明図である。
【図１２】図１０の冗長システムの動作を例示したフローチャートである。
【図１３】本発明の実施の形態３に係る冗長システムの主系ノード及び副系ノードの機能的構成を例示したブロック図である。
【図１４】図１３の冗長システムによる同期処理を例示した説明図である。
【図１５】図１３の冗長システムの動作を例示したフローチャートである。
【図１６】本発明の実施の形態４に係るデータ集約システムを例示した構成図である。
【図１７】図１６のデータ集約システムにおいて複数の冗長システムを１つの冗長システムに集約する様子を示す説明図である。
【発明を実施するための形態】
【００１４】
実施の形態１．
図１は、本発明の実施の形態１に係る分散制御システムを例示した構成図である。図１に示すように、分散制御システム１００は、主系ノード１０ａと副系ノード１０ｂとにより冗長化された冗長システム１０と、端末装置５０と、ゲートウェイ６０と、コントローラ７０と、を有している。
【００１５】
端末装置５０は、デスクトップＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）などのＨＭＩ（Ｈｕｍａｎ  Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ）により構成されている。ゲートウェイ６０は、ネットワーク間での中継処理を行う中継機器である。ゲートウェイ６０は、冗長システム１０及び端末装置５０が接続されている上位通信回線Ｌ１と、コントローラが接続されている下位通信回線Ｌ２との間に接続されている。
【００１６】
コントローラ７０は、複数のフィールド機器８０に接続されている。ここで、フィールド機器８０は、バルブなどのアクチュエータ、温度センサなどの測定手段、及び流量計などの計測機器などである。つまり、コントローラ７０は、フィールド機器８０としてのアクチュエータを制御する機能を有している。また、コントローラ７０は、フィールド機器８０としての温度センサ又は計測機器から取得したデータを、ゲートウェイ６０を介して主系ノード１０ａなどへ送信する機能を有している。
【００１７】
図２は、図１の主系ノード及び副系ノードの機能的構成を例示したブロック図である。主系ノード１０ａは、制御装置２０ａと記憶装置３０ａとを有している。制御装置２０ａは、変更処理部２１ａと、オフセット演算部２２ａと、対応アドレス演算部２３ａと、を有している。記憶装置３０ａには、制御装置２０ａの動作プログラムが格納されるプログラム領域３１ａと、各種のデータベースが格納されるデータベース領域３２ａと、が設けられている。
【００１８】
副系ノード１０ｂは、制御装置２０ｂと記憶装置３０ｂとを有している。制御装置２０ｂは、変更処理部２１ｂと、オフセット演算部２２ｂと、対応アドレス演算部２３ｂと、を有している。記憶装置３０ｂには、制御装置２０ｂの動作プログラムが格納されるプログラム領域３１ｂと、各種のデータベースが格納されるデータベース領域３２ｂと、が設けられている。
【００１９】
主系ノード１０ａ及び副系ノード１０ｂは、それぞれ、互いに情報を共有するための同期用データベースを備えている。以降では、図２にも示すように、主系ノード１０ａの同期用データベースを主系データベース４０ａとし、副系ノード１０ｂの同期用データベースを副系データベース４０ｂとする。
【００２０】
冗長システム１０は、主系ノード１０ａと副系ノード１０ｂとによる冗長構成を採っている。つまり、主系ノード１０ａは、通常時に稼働するように設定された稼働系のノードであり、副系ノード１０ｂは、通常時は使用されずに待機しておき、障害発生時などに稼動系に代わって処理を続行する待機系のノードである。したがって、主系ノード１０ａの構成部材と副系ノード１０ｂの構成部材とは等しく、役割の違いによって各構成部材が実施する処理が切り替わる。
【００２１】
（主系ノード１０ａ）
変更処理部２１ａは、外部からの指令などに応じて主系データベース４０ａの一部又は全部を変更し、主系データベース４０ａを変更した旨の変更信号をオフセット演算部２２ａへ出力する。
【００２２】
オフセット演算部２２ａは、主系データベース４０ａに変更があったとき、主系データベース４０ａにおける変更部分の直前までのデータサイズであるオフセットを求める。以降では、主系データベース４０ａにおける変更部分のことをデータ変更部分４２ｍともいう。本実施の形態１において、オフセット演算部２２ａは、変更処理部２１ａから出力される変更信号によって、主系データベース４０ａに変更があったことを検知する。そして、オフセット演算部２２ａは、求めたオフセットと共に、データ変更部分４２ｍの情報である変更データを副系ノード１０ｂへ送信する。
【００２３】
オフセット演算部２２ａは、主系データベース４０ａが連続的に構成されている場合、データ変更部分４２ｍの先頭アドレスから主系データベース４０ａの先頭アドレスを減算してオフセットを求める。主系ノード１０ａは、起動時において、主系データベース４０ａの先頭アドレスを検索し保持するようになっている。以降では、主系データベース４０ａの先頭アドレスのことを主系先頭アドレス４１ａともいい、データ変更部分４２ｍの先頭アドレスのことを変更先頭アドレス４２ａともいう。
【００２４】
オフセット演算部２２ａは、主系データベース４０ａが複数の分割領域に分かれて構成されている場合において、先頭アドレスの最も小さい分割領域にデータ変更部分４２ｍが含まれていれば、変更先頭アドレス４２ａから主系先頭アドレス４１ａを減算してオフセットを求める。以降では、主系データベース４０ａにおける先頭アドレスの最も小さい分割領域のことを主系最先領域Ｄ１１ともいう。
【００２５】
オフセット演算部２２ａは、主系データベース４０ａが複数の分割領域に分かれて構成されている場合において、主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていなければ、データ変更部分４２ｍを含む分割領域よりも前に位置する全ての分割領域のデータサイズの総和である第１オフセットを求める。
【００２６】
さらに、オフセット演算部２２ａは、変更先頭アドレス４２ａからデータ変更部分４２ｍを含む分割領域の先頭アドレスを減算して第２オフセットを求める。以降では、データ変更部分４２ｍを含む分割領域のことを変更分割領域ともいう。第２オフセットは、変更分割領域におけるデータ変更部分４２ｍの直前までのデータサイズである。そして、オフセット演算部２２ａは、第１オフセットと第２オフセットとを加算してオフセットを求める。
【００２７】
（副系ノード１０ｂ）
対応アドレス演算部２３ｂは、オフセット演算部２２ａから送信されるオフセットを用いて、変更先頭アドレス４２ａに対応する副系データベース４０ｂ内のアドレスである対応先頭アドレス４２ｂを求める。変更処理部２１ｂは、副系データベース４０ｂにおける対応先頭アドレス４２ｂを始点とした一定領域である変更領域４２ｎのデータを変更データに書き替える。なお、変更領域４２ｎのデータは、変更データと同サイズである。
【００２８】
対応アドレス演算部２３ｂは、副系データベース４０ｂが連続的に構成されている場合、副系データベース４０ｂの先頭アドレスにオフセットを加算して対応先頭アドレス４２ｂを求める。副系ノード１０ｂは、起動時において、副系データベース４０ｂの先頭アドレスを検索し保持するようになっている。以降では、副系データベース４０ｂの先頭アドレスのことを副系先頭アドレス４１ｂともいう。
【００２９】
対応アドレス演算部２３ｂは、副系データベース４０ｂが複数の分割領域に分かれて構成されている場合において、先頭アドレスの最も小さい分割領域のデータサイズがオフセットよりも大きければ、副系先頭アドレス４１ｂにオフセットを加算することで対応先頭アドレス４２ｂを求める。以降では、副系データベース４０ｂにおける先頭アドレスの最も小さい分割領域のことを副系最先領域Ｄ２１ともいう。
【００３０】
対応アドレス演算部２３ｂは、副系データベース４０ｂが複数の分割領域に分かれて構成されている場合において、副系最先領域Ｄ２１のデータサイズがオフセット以下であれば、データサイズの合計がオフセットよりも大きくなるまで、先頭アドレスの小さい順に分割領域のデータサイズを積算する。そして、対応アドレス演算部２３ｂは、積算値がオフセットよりも大きくなる前までのデータサイズの合計である調整用オフセットを求める。調整用オフセットは、１つの分割領域のデータサイズの場合もあれば、複数の分割領域のデータサイズの合計となる場合もある。
【００３１】
さらに、対応アドレス演算部２３ｂは、オフセットから調整用オフセットを減算して導出用オフセットを求める。そして、対応アドレス演算部２３ｂは、積算値がオフセットを超えたときに加算対象となった分割領域の先頭アドレスに導出用オフセットを加算することにより、対応先頭アドレス４２ｂを求める。ここで、積算値がオフセットを超えたときに加算対象となった分割領域の先頭アドレスのことを、分割先頭アドレス４２ｄともいう。分割先頭アドレス４２ｄは、変更領域４２ｎのうちの少なくとも一部を含んでいる。
【００３２】
ところで、主系ノード１０ａが待機系として機能する場合は、対応アドレス演算部２３ａが上記の対応アドレス演算部２３ｂと同様の処理を実行し、変更処理部２１ａが上記の変更処理部２１ｂと同様の処理を実行する。また、副系ノード１０ｂが稼働系として機能する場合は、変更処理部２１ｂが上記の変更処理部２１ａと同様の処理を実行し、オフセット演算部２２ｂが上記のオフセット演算部２２ａと同様の処理を実行する。  
【００３３】
もっとも、主系ノード１０ａは、稼働系に特化したものであってよく、この場合は対応アドレス演算部２３ａが不要となる。また、副系ノード１０ｂは、待機系に特化したものであってよく、この場合は、オフセット演算部２２ｂが不要となる。
【００３４】
図３は、図２の主系データベース及び副系データベースが連続的に構成されている場合の同期処理を例示した説明図である。図４は、図２の主系データベース及び副系データベースが非連続な構成である場合の同期処理を例示した説明図である。図５は、図２の副系データベースが非連続な構成であり、かつ副系最先領域のデータサイズがオフセットより大きい場合の同期処理を例示した説明図である。図６は、図２の主系データベース及び副系データベースのうちの何れか一方が連続的に構成され、他方が非連続な構成である場合の同期処理を例示した説明図である。図３〜図６では、主系ノード１０ａの内部構成として記憶装置３０ａ内の主系データベース４０ａだけを例示し、副系ノード１０ｂの内部構成として記憶装置３０ｂ内の副系データベース４０ｂだけを例示している。図３〜図６を参照して、冗長システム１０における主系ノードと副系ノードとの間の同期処理について具体的に説明する。
【００３５】
図３のように、主系データベース４０ａが連続的に構成されている場合、オフセット演算部２２ａは、変更先頭アドレス４２ａである「１２０１」から主系先頭アドレス４１ａである「３０１」を減算し、オフセットとして「９００」を求める。オフセット演算部２２ａは、オフセットとしての「９００」と変更データとを副系ノード１０ｂへ送信する。図３の例において、変更データは、データサイズの情報（５０バイト）と、データ内容を示す情報とにより構成されている。
【００３６】
ここで、オフセット演算部２２ａは、主系データベース４０ａが非連続な構成であっても、主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていれば、上記同様、変更先頭アドレス４２ａから主系先頭アドレス４１ａを減算してオフセットを求める。
【００３７】
また、図３のように、副系データベース４０ｂが連続的に構成されている場合、対応アドレス演算部２３ｂは、副系先頭アドレス４１ｂである「５０１」に、オフセットである「９００」を加算することにより、対応先頭アドレス４２ｂとして「１４０１」を求める。そして、変更処理部２１ｂは、アドレス「１４０１」からアドレス「１４５０」までの領域である変更領域４２ｎのデータを変更データに書き替える。
【００３８】
図４のように、主系データベース４０ａが非連続な構成であり、かつ主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていない場合、オフセット演算部２２ａは、変更分割領域よりも前に位置する全ての分割領域のデータサイズの総和である第１オフセットを求める。図４の例では、主系データベース４０ａが、主系最先領域Ｄ１１と、分割領域Ｄ１２と、分割領域Ｄ１３と、分割領域Ｄ１４とにより構成されている。そして、データ変更部分４２ｍは、分割領域Ｄ１３に含まれており、主系最先領域Ｄ１１及び分割領域Ｄ１２が分割領域Ｄ１３よりも前に位置している。したがって、オフセット演算部２２ａは、主系最先領域Ｄ１１のデータサイズである「２００」と、分割領域Ｄ１２のデータサイズである「５００」とを加算することにより、第１オフセットとして「７００」を求める。また、オフセット演算部２２ａは、変更先頭アドレス４２ａである「２２５１」から分割領域Ｄ１３の先頭アドレスである「２００１」を減算することにより、第２オフセットとして「２５０」を求める。そして、オフセット演算部２２ａは、第１オフセットと第２オフセットとを加算することで、オフセットとして「９５０」を求め、求めたオフセットと変更データとを副系ノード１０ｂへ送信する。
【００３９】
ここで、図４の例では、副系最先領域Ｄ２１のデータサイズである「７００」は、オフセットである「９５０」以下である。そのため、対応アドレス演算部２３ｂは、次に先頭アドレスの小さい分割領域Ｄ２２のデータサイズ「１０００」を、副系最先領域Ｄ２１のデータサイズ「７００」に加算することで、積算値として「１７００」を求める。すると、積算値「１７００」はオフセット「９５０」以上であるため、その加算の前までのデータサイズの合計である「７００」を調整用オフセットとする。
【００４０】
さらに、対応アドレス演算部２３ｂは、オフセットである「９５０」から調整用オフセットである「７００」を減算し、導出用オフセットとして「２５０」を求める。そして、対応アドレス演算部２３ｂは、分割先頭アドレス４２ｄに相当する分割領域Ｄ２２の先頭アドレスである「４００１」に、導出用オフセットである「２５０」を加算することにより、対応先頭アドレス４２ｂとして「４２５１」を求める。そして、変更処理部２１ｂは、アドレス「４２５１」からアドレス「４３００」までの領域である変更領域４２ｎのデータを変更データに書き替える。
【００４１】
図５の例でも、主系データベース４０ａは非連続な構成であり、かつ主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていない。ただし、図５の例では、変更分割領域である分割領域Ｄ１２より前には、主系最先領域Ｄ１１以外に存在しないため、第１オフセットは、主系最先領域Ｄ１１のデータサイズである「２００」となる。オフセット演算部２２ａは、変更先頭アドレス４２ａである「１１０１」から分割領域Ｄ１２の先頭アドレスである「１００１」を減算することにより、第２オフセットとして「１００」を求める。そして、オフセット演算部２２ａは、第１オフセットと第２オフセットとを加算することによりオフセットとして「３００」を求め、求めたオフセットと変更データとを副系ノード１０ｂへ送信する。
【００４２】
ここで、図５の例では、副系最先領域Ｄ２１のデータサイズである「７００」は、オフセットである「３００」よりも大きい。そのため、対応アドレス演算部２３ｂは、副系先頭アドレスである「１００１」にオフセットである「３００」を加算して、対応先頭アドレスである「１３０１」を求める。そして、変更処理部２１ｂは、アドレス「１３０１」からアドレス「１４００」までの領域である変更領域４２ｎのデータを変更データに書き替える。
【００４３】
図６の主系データベース４０ａの構成は、図３の例と同じであるため、オフセットとして「９００」を求めて送信する処理の説明は省略する。図６の例では、副系最先領域Ｄ２１のデータサイズである「３００」は、オフセットである「９００」以下である。そのため、対応アドレス演算部２３ｂは、次に先頭アドレスの小さい分割領域Ｄ２２のデータサイズ「４００」を、副系最先領域Ｄ２１のデータサイズ「３００」に加算することにより、積算値として「７００」を求める。
【００４４】
次に、対応アドレス演算部２３ｂは、積算値である「７００」とオフセットである「９００」とを比較する。対応アドレス演算部２３ｂは、積算値「７００」は、オフセット「９００」以下であるため、次に先頭アドレスの小さい分割領域Ｄ２３のデータサイズ「１０００」を、積算値「７００」に加算することにより、積算値を「１７００」に更新する。すると、更新後の積算値「１７００」は、オフセット「９００」より大きいため、その加算の前までのデータサイズの合計である「７００」を調整用オフセットとする。このように、対応アドレス演算部２３ｂは、積算値がオフセットよりも大きくなるまで、先頭アドレスの小さい分割領域から順にデータサイズを積算する。そして、対応アドレス演算部２３ｂは、積算値がオフセットよりも大きくなったとき、その加算の前までのデータサイズの合計を調整用オフセットとして求める。
【００４５】
さらに、対応アドレス演算部２３ｂは、オフセット「９００」から調整用オフセット「７００」を減算し、導出用オフセットとして「２００」を求める。そして、対応アドレス演算部２３ｂは、分割先頭アドレス４２ｄに相当する分割領域Ｄ２３の先頭アドレスである「２００１」に、導出用オフセットである「２００」を加算することにより、対応先頭アドレス４２ｂとして「２２０１」を求める。そして、変更処理部２１ｂは、アドレス「２２０１」からアドレス「２２５０」までの領域である変更領域４２ｎのデータを変更データに書き替える。
【００４６】
図７は、図２のプログラム領域に、同期処理に関するコードを実装する例を示す説明図である。図８は、図２の記憶装置におけるプログラム領域とは異なる領域に、同期処理に関するコードを実装する例を示す説明図である。図７及び図８を参照して、同期処理に関するコードをカスタムソフトウェアとして実装することの利点について説明する。
【００４７】
同期用データベースは、基本的には、予め決められたメモリ領域に格納されるようになっている。ただし、ソフトウェアのバグの修正などにより、ソフトウェアのバージョンが変更になる場合は、同期処理に関するコードがプログラム領域に追加される。図７では、プログラム領域３１ｂに５０バイトのコードが追加された場合を例示している。このようになると、データベース領域の先頭アドレスがずれることにより、副系先頭アドレス４１ｂもずれるため、冗長構成における同期処理が実行できなくなる。よって、ソフトウェアのバージョンが変更になる際は、冗長構成における同期処理を実行するために、冗長システム１０を一旦シャットダウンして再起動する必要がある。
【００４８】
この点、分散制御システム１００には、標準的な機能を拡張するために、オーバレイ方式のソフトウェアであるカスタムソフトウェアをコンフィギュレーションすることができる。カスタムソフトウェアは、主系ノード１０ａ及び副系ノード１０ｂのプログラム本体を変更しないため、ソフトウェアのバージョンが変更になる場合でも、副系先頭アドレス４１ｂが変更されない。図８では、５０バイトのコードが、カスタムソフトウェアとして拡張領域３５ｂに格納されているため、データベース領域の先頭アドレスも副系先頭アドレス４１ｂもずれることがない。
【００４９】
このように、同期処理に関するコードをカスタムソフトウェアとして実装すれば、専用のハードウェアを使用する既存の冗長構成でも、片方のノードを動作させた状態で、新しいデータベースの同期機能を実現することができる。すなわち、両方のノードを一度にシャットダウンする必要がなくなるため、制御の継続が可能となる。
【００５０】
制御装置２０ａ及び制御装置２０ｂは、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などの演算装置と、こうした演算装置と協働して上記の各種機能を実現させるソフトウェアとにより構成することができる。記憶装置３０ａ及び記憶装置３０ｂは、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）及びＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ等のＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、又はＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などにより構成することができる。
【００５１】
図９は、図２の冗長システムの動作を例示したフローチャートである。図９を参照して、冗長システム１０におけるノード間の同期方法について説明する。
【００５２】
［主系ノード１０ａ］
制御装置２０ａは、主系データベース４０ａを構成するデータの一部変更を指示する変更指令を受けるまで、現在の主系データベース４０ａを用いた演算処理を実行する（ステップＳ１０１／Ｎｏ）。制御装置２０ａは、外部から変更指令が送信されると（ステップＳ１０１／Ｙｅｓ）、変更指令に含まれるデータをもとに、主系データベース４０ａの一部に変更を加える（ステップＳ１０２）。
【００５３】
次いで、制御装置２０ａは、データ変更部分４２ｍの直前までのデータサイズであるオフセットを求める。制御装置２０ａは、図３及び図６のように、主系データベース４０ａが連続的に構成されている場合、変更先頭アドレス４２ａから主系先頭アドレス４１ａを減算してオフセットを求める。制御装置２０ａは、図４及び図５のように、主系データベース４０ａが非連続な構成の場合において、主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていれば、変更先頭アドレス４２ａから主系先頭アドレス４１ａを減算してオフセットを求める。制御装置２０ａは、主系データベース４０ａが非連続な構成の場合において、主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていなければ、第１オフセットと第２オフセットとを求めた上で、第１オフセットと第２オフセットとを加算してオフセットを求める（ステップＳ１０３）。
【００５４】
そして、制御装置２０ａは、データベースの同期を要求する同期信号を副系ノード１０ｂへ送信する。同期信号には、オフセットと変更データとが含まれる（ステップＳ１０４）。
【００５５】
［副系ノード１０ｂ］
制御装置２０ｂは、主系ノード１０ａの制御装置２０ａから同期信号が送信されると、副系データベース４０ｂが連続的に構成されているか否かを判定する（ステップＳ１０５）。制御装置２０ｂは、図３のように、副系データベース４０ｂが連続的に構成されていれば（ステップＳ１０５／Ｙｅｓ）、副系先頭アドレス４１ｂにオフセットを加算することで対応先頭アドレス４２ｂを求める（ステップＳ１０６）。
【００５６】
制御装置２０ｂは、図４〜図６のように、副系データベース４０ｂが非連続な構成であれば（ステップＳ１０５／Ｎｏ）、副系最先領域Ｄ２１のデータサイズがオフセットよりも大きいか否かを判定する（ステップＳ１０７）。制御装置２０ｂは、副系最先領域Ｄ２１のデータサイズがオフセットよりも大きければ（ステップＳ１０７／Ｙｅｓ）、副系先頭アドレス４１ｂにオフセットを加算することで対応先頭アドレス４２ｂを求める（ステップＳ１０６）。
【００５７】
一方、制御装置２０ｂは、副系最先領域Ｄ２１のデータサイズがオフセット以下であれば（ステップＳ１０７／Ｎｏ）、次の分割領域、つまり次に先頭アドレスの小さい分割領域のデータサイズを副系最先領域Ｄ２１のデータサイズに加算して積算値を求める（ステップＳ１０８）。そして、制御装置２０ｂは、積算値がオフセットよりも大きいか否かを判定する（ステップＳ１０９）。
【００５８】
制御装置２０ｂは、積算値がオフセット以下であれば（ステップＳ１０９／Ｎｏ）、次の分割領域のデータサイズを現在の積算値に加算して、積算値を更新する（ステップＳ１０８）。すなわち、制御装置２０ｂは、更新後の積算値がオフセットよりも大きくなるまで、ステップＳ１０８及びＳ１０９の処理を繰り返し実行する。
【００５９】
制御装置２０ｂは、積算値がオフセットよりも大きければ（ステップＳ１０９／Ｙｅｓ）、その加算の前までのデータサイズの合計である調整用オフセットを求める（ステップＳ１１０）。次いで、制御装置２０ｂは、オフセットから調整用オフセットを減算して導出用オフセットを求める（ステップＳ１１１）。次に、制御装置２０ｂは、分割先頭アドレス４２ｄに導出用オフセットを加算することにより、対応先頭アドレス４２ｂを求める（ステップＳ１１２）。
【００６０】
制御装置２０ｂは、ステップＳ１０６又はステップＳ１１２の処理で求めた対応先頭アドレス４２ｂを始点とした変更領域４２ｎのデータを変更データに書き替える。つまり、制御装置２０ｂは、変更領域４２ｎに変更データを上書きする（ステップＳ１１３）。
【００６１】
ここで、ステップＳ１０３は「オフセット演算ステップ」に相当し、ステップＳ１０５〜Ｓ１１２は「対応アドレス演算ステップ」に相当し、ステップＳ１１３は「変更処理ステップ」に相当する。
【００６２】
ところで、ステップＳ１０７において、副系最先領域Ｄ２１のデータサイズがオフセットと等しければ（Ｎｏ）、対応先頭アドレス４２ｂは、次に先頭アドレスの小さな分割領域の先頭アドレスとなる。そのため、制御装置２０ｂは、副系最先領域Ｄ２１のデータサイズがオフセットと等しい場合、次に先頭アドレスの小さな分割領域の先頭アドレスを対応先頭アドレス４２ｂとしてもよい。
【００６３】
また、ステップＳ１０９において、積算値がオフセットと等しい場合も（Ｎｏ）、対応先頭アドレス４２ｂは、次に先頭アドレスの小さな分割領域の先頭アドレスとなる。そのため、制御装置２０ｂは、積算値がオフセットと等しい場合、次に先頭アドレスの小さな分割領域の先頭アドレスを対応先頭アドレス４２ｂとしてもよい。
【００６４】
以上のように、本実施の形態１の冗長システム１０は、主系データベース４０ａに変更があったとき、主系ノード１０ａがオフセット及び変更データを副系ノード１０ｂへ送信する。そして、副系ノード１０ｂが、オフセットを用いて対応先頭アドレス４２ｂを求めると共に、対応先頭アドレス４２ｂを始点とした変更領域４２ｎのデータを変更データに書き替える。すなわち、冗長システム１０によれば、変更部分の先頭アドレスに対応する対応先頭アドレス４２ｂを正確に特定した上で、データの書き替えを実行することができる。そのため、冗長システム１０の主系ノード１０ａ及び副系ノード１０ｂにおいて、固定のメモリ領域に同期用データベースが配置されない場合でも、専用のハードウェアを用いることなく、ノード間での同期処理を精度よく実行することができる。
【００６５】
より具体的に、制御装置２０ａは、主系データベース４０ａが連続的に構成されている場合、データ変更部分４２ｍの先頭アドレスから主系データベース４０ａの先頭アドレスを減算してオフセットを求める。制御装置２０ａは、主系データベース４０ａが複数の分割領域に分かれて構成されている場合において、主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていれば、データ変更部分４２ｍの先頭アドレスから主系データベース４０ａの先頭アドレスを減算してオフセットを求める。制御装置２０ａは、主系データベース４０ａが複数の分割領域に分かれて構成されている場合において、主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていなければ、データ変更部分４２ｍを含む分割領域よりも前に位置する全ての分割領域のデータサイズの総和である第１オフセットを求める。さらに、制御装置２０ａは、データ変更部分４２ｍの先頭アドレスからデータ変更部分４２ｍを含む分割領域の先頭アドレスを減算して第２オフセットを求める。そして、制御装置２０ａは、第１オフセットと第２オフセットとを加算してオフセットを求める。このように、制御装置２０ａは、主系データベース４０ａが連続的であるか否かにかかわらず、正確にオフセットを求めることができる。
【００６６】
また、制御装置２０ｂは、副系データベース４０ｂが連続的に構成されている場合、副系データベース４０ｂの先頭アドレスにオフセットを加算して対応先頭アドレス４２ｂを求める。制御装置２０ｂは、副系データベース４０ｂが複数の分割領域に分かれて構成されている場合において、副系最先領域Ｄ２１のデータサイズがオフセットよりも大きければ、副系データベース４０ｂの先頭アドレスにオフセットを加算して対応先頭アドレス４２ｂを求める。制御装置２０ｂは、副系データベース４０ｂが複数の分割領域に分かれて構成されている場合において、副系最先領域Ｄ２１のデータサイズがオフセット以下であれば、データサイズの合計がオフセットよりも大きくなるまで、先頭アドレスの小さい順に分割領域のデータサイズを積算し、積算値がオフセットよりも大きくなる前までのデータサイズの合計である調整用オフセットを求める。さらに、制御装置２０ｂは、オフセットから調整用オフセットを減算して導出用オフセットを求める。そして、制御装置２０ｂは、導出用オフセットを分割先頭アドレス４２ｄに加算して対応先頭アドレス４２ｂを求める。このように、制御装置２０ｂは、副系データベース４０ｂが連続的であるか否かにかかわらず、正確に対応先頭アドレス４２ｂを求めることができる。
【００６７】
ところで、従来の冗長システムは、ソフトウェアを改造すると、プログラムのコード量が変化するため、同期用データベースに割り当てられるメモリ領域のアドレスも変わってしまう。そして、従来の構成では、固定されたアドレスのメモリ領域に同期用データベースを展開することができないため、バージョンの異なるソフトウェアを冗長構成のノードで動作させることができない。この点、本実施の形態１の冗長システム１０は、同期用データベースに割り当てられるメモリ領域が変化した場合でも、オフセットと副系先頭アドレス４１ｂとを用いて対応先頭アドレス４２ｂを求めるようになっている。そのため、冗長システム１０の各ノードにバージョンの異なるソフトウェアを搭載した場合でも、冗長構成を維持することができる。
【００６８】
実施の形態２．
図１０は、本発明の実施の形態２に係る冗長システムの主系ノード及び副系ノードの機能的構成を例示したブロック図である。図１１は、図１０の主系データベース及び副系データベースが連続的に構成されている場合の同期処理を例示した説明図である。前述した実施の形態１の冗長システム１０では、稼働系として機能する主系ノード１０ａ側でオフセットが求められるが、本実施の形態２の冗長システム１０では、待機系として機能する副系ノード１０ｂ側でオフセットが求められる。図１０及び図１１を参照して、本実施の形態２の冗長システム１０の特徴点について説明する。実施の形態１と同等の構成部材については同一の符号を用いて説明は省略する。
【００６９】
本実施の形態２では、主系データベース４０ａが連続的に構成されていることを前提とする。主系ノード１０ａの制御装置２０ａは、変更処理部２１ａと、オフセット演算部１２２ａと、対応アドレス演算部２３ａと、データ送信部１２４ａと、を有している。副系ノード１０ｂの制御装置２０ｂは、変更処理部２１ｂと、オフセット演算部１２２ｂと、対応アドレス演算部２３ｂと、データ送信部１２４ｂと、を有している。
【００７０】
主系ノード１０ａにおいて、データ送信部１２４ａは、主系データベース４０ａに変更があったとき、主系データベース４０ａの先頭アドレスである主系先頭アドレス４１ａと、データ変更部分４２ｍの先頭アドレスである変更先頭アドレス４２ａと、データ変更部分４２ｍの情報である変更データとを副系ノード１０ｂへ送信する。
【００７１】
図１１では、主系先頭アドレス４１ａが「３０１」であり、変更先頭アドレス４２ａが「１２０１」である場合を例示している。なお、図１１に例示する変更データは、データサイズの情報（５０バイト）と、データ内容を示す情報とにより構成されている。
【００７２】
副系ノード１０ｂにおいて、オフセット演算部１２２ｂは、データ送信部１２４ａから送信される主系先頭アドレス４１ａと変更先頭アドレス４２ａとを用いてオフセットを求める。つまり、オフセット演算部１２２ｂは、変更先頭アドレス４２ａから主系先頭アドレス４１ａを減算することによりオフセットを求める。図１１の場合、オフセット演算部１２２ｂは、変更先頭アドレス４２ａである「１２０１」から主系先頭アドレス４１ａである「３０１」を減算することにより、オフセットとして「９００」を求める。
【００７３】
そして、本実施の形態２の対応アドレス演算部２３ｂは、オフセット演算部１２２ｂが求めたオフセットを用いて対応先頭アドレス４２ｂを求めるようになっている。図１１の場合、対応アドレス演算部２３ｂは、副系先頭アドレスである「５０１」にオフセットである「９００」を加算することにより、対応先頭アドレス４２ｂとして「１４０１」を求める。
【００７４】
分散制御システム１００及び冗長システム１０の他の構成及び代替構成は、実施の形態１と同様である。例えば、対応アドレス演算部２３ｂは、副系データベース４０ｂが非連続な構成の場合でも、実施の形態１と同様に対応先頭アドレス４２ｂを求めることができる。
【００７５】
図１２は、図１０の冗長システムの動作を例示したフローチャートである。図１２を参照して、本実施の形態２の冗長システム１０におけるノード間の同期方法について説明する。図９に示す各ステップと同等の処理については同一の符号を付して説明は省略する。
【００７６】
［主系ノード１０ａ］
制御装置２０ａは、ステップＳ１０１の処理を図９の場合と同様に実行し、主系データベース４０ａの一部に変更を加える（ステップＳ１０２）、データベースの同期を要求する同期信号を副系ノード１０ｂへ送信する。同期信号には、主系先頭アドレス４１ａと変更先頭アドレス４２ａと変更データとが含まれる（ステップＳ２０１）。
【００７７】
［副系ノード１０ｂ］
制御装置２０ｂは、データ変更部分４２ｍの直前までのデータサイズであるオフセットを求める。図９のステップＳ１０３と同様に求める。すなわち、制御装置２０ｂは、主系データベース４０ａが連続的に構成されている場合、変更先頭アドレス４２ａから主系先頭アドレス４１ａを減算してオフセットを求める。制御装置２０ｂは、主系データベース４０ａが非連続な構成の場合において、主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていれば、変更先頭アドレス４２ａから主系先頭アドレス４１ａを減算してオフセットを求める。制御装置２０ｂは、主系データベース４０ａが非連続な構成の場合において、主系最先領域Ｄ１１にデータ変更部分４２ｍが含まれていなければ、第１オフセットと第２オフセットとを求めた上で、第１オフセットと第２オフセットとを加算してオフセットを求める（ステップＳ２０２）。
【００７８】
次いで、制御装置２０ｂは、副系データベース４０ｂが連続的に構成されているか否かを判定する（ステップＳ１０５）。すなわち、制御装置２０ｂは、ステップＳ１０５〜Ｓ１１３までの一連の処理を図９の場合と同様に実行する。ここで、ステップＳ２０２は「オフセット演算ステップ」に相当し、ステップＳ１０５〜Ｓ１１２は「対応アドレス演算ステップ」に相当する。
【００７９】
以上のように、本実施の形態２の冗長システム１０は、主系データベース４０ａに変更があったとき、主系ノード１０ａが主系先頭アドレス４１ａ、変更先頭アドレス４２ａ、及び変更データを副系ノード１０ｂへ送信する。すると、副系ノード１０ｂは、オフセットを求めると共に、求めたオフセットを用いて対応先頭アドレス４２ｂを求める。そして、副系ノード１０ｂは、対応先頭アドレス４２ｂを始点とした変更領域４２ｎのデータを変更データに書き替える。すなわち、本実施の形態２の冗長システム１０によっても、変更部分の先頭アドレスに対応する対応先頭アドレス４２ｂを正確に特定した上で、データの書き替えを実行することができる。そのため、冗長システム１０の主系ノード１０ａ及び副系ノード１０ｂにおいて、固定のメモリ領域に同期用データベースが配置されない場合でも、専用のハードウェアを用いることなく、ノード間での同期処理を精度よく実行することができる。他の効果については、実施の形態１の場合と同様である。
【００８０】
実施の形態３．
図１３は、本発明の実施の形態３に係る冗長システムの主系ノード及び副系ノードの機能的構成を例示したブロック図である。図１４は、図１３の冗長システムによる同期処理を例示した説明図である。本実施の形態３の冗長システム１０では、主系データベース４０ａと副系データベース４０ｂとが、何れも連続的に構成されていることを前提とする。実施の形態１及び２と同等の構成部材については同一の符号を用いて説明は省略する。
【００８１】
主系ノード１０ａの制御装置２０ａは、変更処理部２１ａと、対応アドレス演算部２２３ａと、データ送信部１２４ａと、を有している。副系ノード１０ｂの制御装置２０ｂは、変更処理部２１ｂと、対応アドレス演算部２２３ｂと、データ送信部１２４ｂと、を有している。
【００８２】
副系ノード１０ｂにおいて、対応アドレス演算部２２３ｂは、主系ノード１０ａのデータ送信部１２４ａから送信される主系先頭アドレス４１ａ及び変更先頭アドレス４２ａを用いて対応先頭アドレス４２ｂを求める。より具体的に、対応アドレス演算部２２３ｂは、副系データベース４０ｂの先頭アドレスである副系先頭アドレス４１ｂから主系先頭アドレス４１ａを減算して主副間オフセットを求める。そして、対応アドレス演算部２２３ｂは、変更先頭アドレス４２ａに主副間オフセットを加算して対応先頭アドレス４２ｂを求める。
【００８３】
図１４の場合、副系先頭アドレス４１ｂである「５０１」から主系先頭アドレス４１ａである「３０１」を減算することにより、主副間オフセットとして「２００」を求める。そして、対応アドレス演算部２３ｂは、変更先頭アドレス４２ａである「１２０１」に主副間オフセットである「２００」を加算することにより、対応先頭アドレス４２ｂとして「１４０１」を求める。分散制御システム１００及び冗長システム１０の他の構成及び代替構成は、実施の形態１及び２と同様である。
【００８４】
図１５は、図１３の冗長システムの動作を例示したフローチャートである。図１５を参照して、本実施の形態３の冗長システム１０におけるノード間の同期方法について説明する。図９及び図１２に示す各ステップと同等の処理については同一の符号を付して説明は省略する。
【００８５】
［主系ノード１０ａ］
制御装置２０ａは、ステップＳ１０１、Ｓ１０２、及びＳ２０１の処理を、図９又は図１２の場合と同様に実行する。
【００８６】
［副系ノード１０ｂ］
制御装置２０ｂは、副系先頭アドレス４１ｂから主系先頭アドレス４１ａを減算して主副間オフセットを求める（ステップＳ３０１）。次いで、制御装置２０ｂは、変更先頭アドレス４２ａに主副間オフセットを加算して対応先頭アドレス４２ｂを求め（ステップＳ３０２）、ステップＳ１１３の処理を実行する。ここで、ステップＳ３０１及びＳ３０２は「対応アドレス演算ステップ」に相当する。
【００８７】
以上のように、本実施の形態３の冗長システム１０は、主系データベース４０ａに変更があったとき、主系ノード１０ａが主系先頭アドレス４１ａ、変更先頭アドレス４２ａ、及び変更データを副系ノード１０ｂへ送信する。すると、副系ノード１０ｂは、オフセットを求めると共に、求めたオフセットを用いて対応先頭アドレス４２ｂを求める。そして、副系ノード１０ｂは、対応先頭アドレス４２ｂを始点とした変更領域４２ｎのデータを変更データに書き替える。すなわち、本実施の形態３の冗長システム１０によっても、変更部分の先頭アドレスに対応する対応先頭アドレス４２ｂを正確に特定した上で、データの書き替えを実行することができる。そのため、冗長システム１０の主系ノード１０ａ及び副系ノード１０ｂにおいて、固定のメモリ領域に同期用データベースが配置されない場合でも、専用のハードウェアを用いることなく、ノード間での同期処理を精度よく実行することができる。
【００８８】
また、本実施の形態３の冗長システム１０は、同期用データベースに割り当てられるメモリ領域が変化した場合でも、主系先頭アドレス４１ａと変更先頭アドレス４２ａと副系先頭アドレス４１ｂとを用いて対応先頭アドレス４２ｂを求めるようになっている。そのため、冗長システム１０の各ノードにバージョンの異なるソフトウェアを搭載した場合でも、冗長構成を維持することができる。他の効果については、実施の形態１及び２の場合と同様である。
【００８９】
実施の形態４．
図１６は、本発明の実施の形態４に係るデータ集約システムを例示した構成図である。本実施の形態４のデータ集約システム２００は、複数の冗長システムの機能を１つの冗長システムに集約するためのものである。
【００９０】
データ集約システム２００は、冗長システム１１０と、冗長システム２１０と、冗長システム３１０と、により構成されている。冗長システム１１０は、主系ノード１１０ａと副系ノード１１０ｂとにより冗長化されている。冗長システム２１０は、主系ノード２１０ａと副系ノード２１０ｂとにより冗長化されている。冗長システム３１０は、ノード３１０ａとノード３１０ｂとにより冗長化されている。冗長システム１１０、冗長システム２１０、及び冗長システム３１０は、上述した実施の形態１〜３の冗長システム１０と同様に構成されている。
【００９１】
データ集約システム２００は、冗長システム１１０のデータと冗長システム２１０のデータとを、冗長システム３１０に集約するために構成されたシステムである。冗長システム１１０は上位通信回線Ｌｘに接続されており、冗長システム２１０は上位通信回線Ｌｙに接続されており、冗長システム３１０は上位通信回線Ｌｚに接続されている。
【００９２】
主系ノード１１０ａのＬＡＮポートＰｘと、ノード３１０ａのＬＡＮポートＰ１とは、ＬＡＮケーブルＬａによって接続されている。主系ノード２１０ａのＬＡＮポートＰｙと、ノード３１０ａのＬＡＮポートＰ２とは、ＬＡＮケーブルＬｂによって接続されている。
【００９３】
図１７は、図１６のデータ集約システムにおいて複数の冗長システムを１つの冗長システムに集約する様子を示す説明図である。データ集約システム２００によれば、同期先頭アドレスの再配置処理により、冗長構成を生かしたままデータの移行を行うことができる。図１７では、主系ノード１１０ａ、副系ノード１１０ｂ、主系ノード２１０ａ、及び副系ノード２１０ｂの容量が２［Ｍ］であり、ノード３１０ａ及びノード３１０ｂの容量が８［Ｍ］であることを想定している。また、主系ノード１１０ａ、副系ノード１１０ｂ、主系ノード２１０ａ、及び副系ノード２１０ｂのソフトウェアバージョンは「Ｖｅｒ１」であり、ノード３１０ａ及びノード３１０ｂのソフトウェアバージョンは「Ｖｅｒ２」であるものとする。なお、同期先頭アドレスは、主系先頭アドレスと副系先頭アドレスの総称である。図１７を参照して、冗長システム間におけるデータ集約方法の流れを説明する。
【００９４】
（１）まず、副系ノード１１０ｂがシャットダウンすると、主系ノード１１０ａは、副系ノード１１０ｂとのコネクションを開放し、ノード３１０ａとのコネクションを確立する。
（２）次いで、副系ノード２１０ｂがシャットダウンすると、主系ノード２１０ａは、副系ノード２１０ｂとのコネクションを開放し、ノード３１０ａとのコネクションを確立する。
（３）次に、ノード３１０ａを待機系として立ち上げる。
（４）ノード３１０ａは、起動時に、自身の再配置先頭アドレスを参照する。初期状態において、再配置先頭アドレスはＮＵＬＬであるため、自身のソフトウェアバージョン「Ｖｅｒ２」をもとに、同期先頭アドレスとして「２００１」を取得する。そして、同期先頭アドレス「２００１」を始点とした一定領域に、ノード番号の若い主系ノード１１０ａの主系データベースの１０００ワードを配置し、再配置先頭アドレスに「３００１（２００１＋１０００）」をセットする。
（５）続いて、ノード３１０ａは、再配置先頭アドレスである「３００１」を参照し、そのアドレスを始点とした一定領域に、次にノード番号の若い主系ノード２１０ａの主系データベースの１０００ワードを配置し、再配置先頭アドレスに「４００１（３００１＋１０００）」をセットする。
（６）次いで、主系ノード１１０ａをシャットダウンする。
（７）ノード３１０ａは、ＬＡＮ接続されているノードが１つでも不在になったら、別のＬＡＮ接続されているノードをシャットダウンして、自身が稼働系に切り替わるようになっている。図１７の場合、ＬＡＮ接続されている主系ノード１１０ａが不在になったため、ノード３１０ａは、主系ノード２１０ａをシャットダウンして、自身が稼働系に切り替わる。
（８）稼働系となったノード３１０ａは、シャットダウンした主系ノード１１０ａ及び主系ノード２１０ａとのコネクションを開放する。
（９）ノード３１０ａは、ノード３１０ｂとのコネクションを確立する。
（１０）ノード３１０ｂを待機系として立ち上げる。
（１１）ノード３１０ｂは、起動時に、自身の再配置先頭アドレスを参照する。初期状態において、再配置先頭アドレスはＮＵＬＬであるため、自身のソフトウェアバージョン「Ｖｅｒ２」をもとに、同期先頭アドレスとして「２００１」を取得する。そのアドレスに稼働系のノード３１０ａのデータベースの合計２０００ワードを配置し、再配置先頭アドレスに「４００１（２００１＋２０００）」をセットする。
【００９５】
以上のように、汎用ＯＳを搭載した汎用ＰＣに上記各実施の形態の冗長システム１０を実装する際、同期先頭アドレスとソフトウェアのバージョンとを各ノードに保持させ、ノードの起動時に実行させる同期先頭アドレスの再配置処理を追加することで、複数台の冗長構成の制御モジュールをオンラインで集約することが可能となる。
【００９６】
上述した実施の形態は、冗長システム及び同期方法における好適な具体例であり、本発明の技術的範囲は、これらの態様に限定されるものではない。例えば、上記各実施の形態では、冗長システム１０の冗長構成として、１つの主系ノード１０ａと１つの副系ノード１０ｂとによる二重化を例示したが、これに限定されない。冗長システム１０は、１つの主系ノード１０ａと複数の副系ノード１０ｂとによって冗長化されてもよい。すなわち、冗長システム１０は、１つの主系ノード１０ａと少なくとも１つの副系ノード１０ｂとにより冗長化されたものであってもよい。
【符号の説明】
【００９７】
１０、１１０、２１０、３１０  冗長システム、１０ａ、１１０ａ、２１０ａ  主系ノード、１０ｂ、１１０ｂ、２１０ｂ  副系ノード、２０ａ、２０ｂ  制御装置、２１ａ、２１ｂ  変更処理部、２２ａ、２２ｂ、１２２ａ、１２２ｂ  オフセット演算部、２３ａ、２３ｂ、２２３ａ、２２３ｂ  対応アドレス演算部、３０ａ、３０ｂ  記憶装置、３１ａ、３１ｂ  プログラム領域、３２ａ、３２ｂ  データベース領域、３５ｂ  拡張領域、４０ａ  主系データベース、４０ｂ  副系データベース、４１ａ  主系先頭アドレス、４１ｂ  副系先頭アドレス、４２ａ  変更先頭アドレス、４２ｂ  対応先頭アドレス、４２ｄ  分割先頭アドレス、４２ｍ  データ変更部分、４２ｎ  変更領域、５０  端末装置、６０  ゲートウェイ、７０  コントローラ、８０  フィールド機器、１００  分散制御システム、１２４ａ、１２４ｂ  データ送信部、２００  データ集約システム、３１０ａ、３１０ｂ  ノード、Ｄ１１  主系最先領域（分割領域）、Ｄ１２、Ｄ１３、Ｄ１４、Ｄ２２、Ｄ２３  分割領域、Ｄ２１  副系最先領域（分割領域）、Ｌ１、Ｌｘ、Ｌｙ、Ｌｚ  上位通信回線、Ｌ２  下位通信回線、Ｌａ、Ｌｂ  ＬＡＮケーブル、Ｐ１、Ｐ２、Ｐｘ、Ｐｙ  ＬＡＮポート。
【図１】
2020135510.tif 000003
【図２】
2020135510.tif 000004
【図３】
2020135510.tif 000005
【図４】
2020135510.tif 000006
【図５】
2020135510.tif 000007
【図６】
2020135510.tif 000008
【図７】
2020135510.tif 000009
【図８】
2020135510.tif 000010
【図９】
2020135510.tif 000011
【図１０】
2020135510.tif 000012
【図１１】
2020135510.tif 000013
【図１２】
2020135510.tif 000014
【図１３】
2020135510.tif 000015
【図１４】
2020135510.tif 000016
【図１５】
2020135510.tif 000017
【図１６】
2020135510.tif 000018
【図１７】
2020135510.tif 000019