(57)【要約】      （修正有）【課題】コントローラ装置の二重化システムにおいて、制御アプリの実行時間の増加を抑制するとともに、制御系と待機系とを切替える場合でも制御対象装置の定周期制御を維持することができるコントローラ装置、及び二重化システムの同期化方法を提供する。【解決手段】コントローラ装置１０Ａは別のコントローラ装置１０Ｂとともに二重化システム１を構成する。コントローラ装置１０Ａは、所定の制御周期で制御対象装置３０に対する制御処理を実行する制御実行部１３０と、上記制御周期とは異なるタイミングで外部（例えば計画サーバ２０）から送信される入力データを受信する計画受信部１１０とを備える。計画受信部１１０が入力データを受信した場合、制御実行部１３０は、当該入力データをコントローラ装置１０Ａに設定し、コントローラ装置１０Ａ，１０Ｂの双方で当該入力データが設定されたことを確認した後に、当該入力データを実際の制御処理に適用する。【選択図】図１
2019016170.tif 000002
【特許請求の範囲】
【請求項１】
制御対象装置を制御し、二重化対象とする別のコントローラ装置とともに二重化システムを構成可能なコントローラ装置であって、
外部からの入力データを受信する計画受信部と、
所定の制御周期で前記制御対象装置に対する制御処理を実行する制御実行部と、
を備え、
前記計画受信部が前記制御周期とは異なるタイミングで入力された入力データを受信した場合に、
前記制御実行部は、
前記計画受信部が受信した前記入力データを自コントローラ装置に設定し、
前記自コントローラ装置と前記別のコントローラ装置との双方において当該入力データが設定されたことを確認するための二重化動作処理を行い、
前記二重化動作処理での確認が得られた場合に、前記制御処理に当該入力データを適用する
ことを特徴とするコントローラ装置。
【請求項２】
前記計画受信部が前記制御周期とは異なるタイミングで入力された前記入力データを受信してから、前記制御実行部が前記制御処理に当該入力データを適用するまでの処理は、複数の前記制御周期を跨いで行われる
ことを特徴とする請求項１に記載のコントローラ装置。
【請求項３】
前記二重化動作処理は、
前記自コントローラ装置に設定した前記入力データを前記別のコントローラ装置に送信する同期化データ送信と、
前記別のコントローラ装置で設定された前記入力データを当該別のコントローラ装置から受信する同期化データ受信と、
を含み、
前記同期化データ送信及び前記同期化データ受信と同時に、前記二重化システムの死活監視通信が行われる
ことを特徴とする請求項１に記載のコントローラ装置。
【請求項４】
前記外部から前記制御周期と同じタイミングで入力される入力データが、前記自コントローラ装置と前記別のコントローラ装置とで常に一致するとき、
前記計画受信部が前記制御周期と同じタイミングで入力された入力データを受信した場合に、
前記制御実行部は、
前記計画受信部が受信した前記入力データを前記自コントローラ装置に設定し、
前記二重化動作処理を行うことなく、前記制御処理に当該入力データを適用する
ことを特徴とする請求項１に記載のコントローラ装置。
【請求項５】
前記計画受信部が前記制御周期とは異なるタイミングで入力された入力データを受信した場合に、
前記計画受信部は、前記制御実行部によって前記制御処理に当該入力データが適用されたか否かを、当該入力データの送信元に通知する
ことを特徴とする請求項１に記載のコントローラ装置。
【請求項６】
前記二重化動作処理に用いられるフラグを管理するための一致化情報を保持し、
前記一致化情報は、前記計画受信部及び前記制御実行部からアクセス可能とされる
ことを特徴とする請求項１に記載のコントローラ装置。
【請求項７】
スイッチングハブを介して１以上の前記制御対象装置と通信可能に接続される
ことを特徴とする請求項１に記載のコントローラ装置。
【請求項８】
制御対象装置を制御し、二重化対象とする別のコントローラ装置とともに二重化システムを構成可能なコントローラ装置による二重化システムの同期化方法であって、
前記コントローラ装置は、外部からの入力データを受信する計画受信部と、所定の制御周期で前記制御対象装置に対する制御処理を実行する制御実行部と、を有し、
前記外部から前記制御周期とは異なるタイミングで前記入力データが入力された場合に、
前記計画受信部が前記入力データを受信するデータ受信ステップと、
前記制御実行部が、前記計画受信部が受信した前記入力データを自コントローラ装置に設定するデータ設定ステップと、
前記制御実行部が、前記自コントローラ装置と前記別のコントローラ装置との双方において当該入力データが設定されたことを確認する二重化動作処理ステップと、
前記制御実行部が、前記二重化動作処理ステップでの確認が得られた場合に、前記制御処理に当該入力データを適用するデータ適用ステップと、
を備えることを特徴とする二重化システムの同期化方法。
【請求項９】
前記外部から前記制御周期とは異なるタイミングで前記入力データが入力された場合に、
前記データ受信ステップから前記データ適用ステップまでの処理は、複数の前記制御周期を跨いで行われる
ことを特徴とする請求項８に記載の二重化システムの同期化方法。
【請求項１０】
前記二重化動作処理ステップは、
前記データ設定ステップにおいて前記自コントローラ装置に設定した前記入力データを前記別のコントローラ装置に送信する同期化データ送信ステップと、
前記別のコントローラ装置で設定された前記入力データを当該別のコントローラ装置から受信する同期化データ受信ステップと、
を含み、
前記同期化データ送信ステップ及び前記同期化データ受信ステップでは、前記二重化システムの死活監視通信が同時に行われる
ことを特徴とする請求項８に記載の二重化システムの同期化方法。
【請求項１１】
前記外部から前記制御周期と同じタイミングで入力される入力データが、前記自コントローラ装置と前記別のコントローラ装置とで常に一致するとき、
前記外部から前記制御周期と同じタイミングで前記入力データが入力された場合に、
前記計画受信部は、前記データ受信ステップにおいて前記入力データを受信し、
前記制御実行部は、前記データ設定ステップの後に、前記二重化動作処理ステップを行うことなく、前記データ適用ステップにおいて前記制御処理に当該入力データを適用する
ことを特徴とする請求項８に記載の二重化システムの同期化方法。
【請求項１２】
前記外部から前記制御周期とは異なるタイミングで前記入力データが入力された場合に、
前記計画受信部が、前記データ適用ステップによって前記制御処理に当該入力データが適用されたか否かを、当該入力データの送信元に通知する適用通知ステップを、さらに備える
ことを特徴とする請求項８に記載の二重化システムの同期化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コントローラ装置、及び二重化システムの同期化方法に関し、特に、制御対象装置を制御する制御システムなどにおいて異常発生時等に系を切り替えるコントローラ装置、及び二重化システムの同期化方法に適用して好適なものである。
【背景技術】
【０００２】
従来、コントローラ装置は、シーケンス制御装置、モーション制御装置、プログラマブル・ロジック・コントローラ（ＰＬＣ：Programmable Logic Controller）若しくはＰＣベースコントローラとも呼ばれ、ラダー・ロジック（ＬＤ言語）、シーケンシャル・ファンクション・チャート（ＳＦＣ言語）、ファンクション・ブロック（ＦＢＤ言語）、ストラクチャード・テキスト（ＳＴ言語）、インストラクション・リスト（ＩＬ言語）のような制御装置特有のプログラミング言語や、汎用ＰＣでも使われるＣ言語等によって制御内容が記述される。そして、このような制御内容を実行するアプリケーションプログラムは制御アプリと呼ばれる。
【０００３】
また、このようなコントローラ装置は、高度の信頼性を要求されるシステム等において、２系統のＣＰＵモジュールのうち、第１のＣＰＵモジュールを制御系、第２のＣＰＵモジュールを待機系とし、制御系である第１のＣＰＵモジュールに異常が発生した場合には、待機系である第２のＣＰＵモジュールを制御系に切り替えてシステムダウンを防止する二重化システムを構成することがある。このような二重化システムにおいては、第１のＣＰＵモジュールと第２のＣＰＵモジュールとが互いに同一プログラムを同一内容で実行することを保証する「同期化」を行う必要がある。
【０００４】
ここで、典型的なコントローラ装置では、制御アプリが定周期で実行されることにより、コントローラ装置に接続された制御対象装置に対して定周期制御を行っている。具体的には、各周期において、ＩＯモジュール等からの入力（インプット）、制御アプリに記述される制御内容の実行、及び制御内容の実行結果のＩＯモジュール等への出力（アウトプット）が実施される。そしてこの典型的なコントローラ装置によって二重化システムを構成する場合、上記インプットと制御内容の実行との間に、第１のＣＰＵモジュールと第２のＣＰＵモジュールとでインプットが同一であることを確認し、さらに、上記制御の実行とアウトプットとの間に互いに死活監視を行ってどちらが制御系として出力処理を実行するかを確認することによって、同期化を実現することができる。
【０００５】
また、特許文献１には、上記の典型的なコントローラ装置による二重化システムの同期化方法よりも制御アプリの実行時間の増加を抑制することに期待できる二重化プログラマブルコントローラが開示されている。
【０００６】
具体的には、特許文献１には、第１のＣＰＵモジュール（ＣＰＵユニット）において、制御アプリにおける割込み命令などの実行内容を第１のプログラムカウンタ値を対応付けて同期化情報として格納し、第１のＣＰＵモジュールから第２のＣＰＵモジュールへ送信し、第２のＣＰＵモジュールにおいて、この同期化情報に基づいて制御アプリを実行することが開示されている。このようにすることで、第２のＣＰＵモジュールが第１のＣＰＵモジュールと同一内容の制御アプリを追随して実行できるようにしており、特許文献１に開示された二重化プログラマブルコントローラによれば、同期化情報を通信するための時間の増大による制御アプリの実行時間の増加を抑制することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１４−１３７７９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、特許文献１の二重化プログラマブルコントローラは、同期化情報を通信するための時間の増大による制御アプリの実行時間の増加を抑制することはできるものの、第１のＣＰＵモジュールにおける制御アプリの実行によって作成された同期化情報をもとに第２のＣＰＵモジュールが追随して制御アプリを実行するため、第１のＣＰＵモジュールと第２のＣＰＵモジュールとでは制御アプリの実行時間（実行タイミング）にずれが生じてしまう。そのため、障害発生時に制御系と待機系とを切替える場合等において、制御対象装置に対する定周期制御が崩れてしまう可能性があるという問題があった。
【０００９】
本発明は以上の点を考慮してなされたもので、制御対象装置を定周期制御するコントローラ装置による二重化システムにおいて、制御アプリの実行時間の増加を抑制するとともに、制御系と待機系との切替え時などにおいても制御対象装置の定周期制御を維持することが可能なコントローラ装置、及び二重化システムの同期化方法を提案しようとするものである。
【課題を解決するための手段】
【００１０】
かかる課題を解決するため本発明においては、制御対象装置を制御し、二重化対象とする別のコントローラ装置とともに二重化システムを構成可能なコントローラ装置であって、外部からの入力データを受信する計画受信部と、所定の制御周期で前記制御対象装置に対する制御処理を実行する制御実行部と、を備え、前記計画受信部が前記制御周期とは異なるタイミングで入力された入力データを受信した場合に、前記制御実行部は、前記計画受信部が受信した前記入力データを自コントローラ装置に設定し、前記自コントローラ装置と前記別のコントローラ装置との双方において当該入力データが設定されたことを確認するための二重化動作処理を行い、前記二重化動作処理での確認が得られた場合に、前記制御処理に当該入力データを適用することを特徴とするコントローラ装置が提供される。
【００１１】
また、かかる課題を解決するため本発明においては、制御対象装置を制御し、二重化対象とする別のコントローラ装置とともに二重化システムを構成可能なコントローラ装置による二重化システムの同期化方法であって、前記コントローラ装置は、外部からの入力データを受信する計画受信部と、所定の制御周期で前記制御対象装置に対する制御処理を実行する制御実行部と、を有し、前記外部から前記制御周期とは異なるタイミングで前記入力データが入力された場合に、前記計画受信部が前記入力データを受信するデータ受信ステップと、前記制御実行部が、前記計画受信部が受信した前記入力データを自コントローラ装置に設定するデータ設定ステップと、前記制御実行部が、前記自コントローラ装置と前記別のコントローラ装置との双方において当該入力データが設定されたことを確認する二重化動作処理ステップと、前記制御実行部が、前記二重化動作処理ステップでの確認が得られた場合に、前記制御処理に当該入力データを適用するデータ適用ステップと、を備えることを特徴とする二重化システムの同期化方法が提供される。
【発明の効果】
【００１２】
本発明によれば、コントローラ装置の二重化システムにおいて、制御アプリの実行時間の増加を抑制するとともに、コントローラ装置の制御系と待機系を切替える場合でも制御対象装置の定周期制御を維持することができる。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態に係るコントローラ装置によって構成される二重化システムの機能構成の一例を示す図である。
【図２】図１に示した二重化システムのハードウェア構成の一例を示す図である。
【図３】データ一致化情報のテーブル構造の一例を説明するための図である。
【図４】動作状態管理テーブルの構成例を説明するための図である。
【図５】フラグ管理テーブルの構成例を説明するための図である。
【図６】データ管理テーブルの構成例を説明するための図である。
【図７】制御実行処理の処理手順の一例を示すフローチャートである。
【図８】二重化処理の処理手順の一例を示すフローチャートである。
【図９】二重化システムにおける動作状態の状態遷移を説明するための図である。
【図１０】単独動作処理の処理手順の一例を示すフローチャートである。
【図１１】二重化動作処理の処理手順の一例を示すフローチャートである。
【図１２】同期化データ送信処理の処理手順の一例を示すフローチャートである。
【図１３】同期化データ受信処理の処理手順の一例を示すフローチャートである。
【図１４】同期化データ受信における処理手順の一例を示すフローチャートである。
【図１５】出力データ書込みにおける処理手順の一例を示すフローチャートである。
【図１６】計画データ設定処理の処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下図面について、本発明の一実施の形態を詳述する。
【００１５】
まず、本発明の実施の形態について説明する前に、従来の典型的な２台のコントローラ装置によって二重化システムを構成しようとするときに、コントローラ装置間の同期のために必要となる制御について説明する。
【００１６】
本明細書の背景技術でも述べたように、典型的なコントローラ装置では、制御アプリが定周期に実行されることによって、コントローラ装置に接続された制御対象装置に対して定周期制御を行っており、具体的には、毎周期、次の（ｉ）〜（iii）の処理が順に実行される。
（ｉ）ＩＯモジュールやフィールドバスからの情報の入力（インプット）
（ii）制御アプリに記述された制御内容の実行
（iii）制御処理の実行結果のＩＯモジュールやフィールドバスへの出力（アウトプット）
【００１７】
このような２台のコントローラ装置を用いて二重化システムを構成する場合、２台のコントローラ装置の双方で、常に同じタイミングで同じインプットを用いて制御処理が行われることで、常に同じ演算結果を得ることが可能となる。具体的には、上記（ｉ）と（ii）の処理の間に、両コントローラ装置におけるインプットが同一であることを確認し、上記（ii）と（iii）の処理の間に、互いに死活監視を行ってどちらが制御系としてアウトプットを実行するかを確認することができれば、二重化システムの同期化を実現することができる。
【００１８】
ここで、上記（ｉ）のインプットに関して、ＩＯモジュールやフィールドバスからの情報入力は、定期的な制御周期による制御処理と同期して実施されるのであれば、２台のコントローラ装置で同じ入力情報を取得することができれば、同期化通信等によって確認を行わなくても、インプットが常に同一と推定することができる。具体的には例えば、フィールドバスプロトコルの１つであるＥｔｈｅｒＣＡＴを利用した場合、２台のコントローラ装置と制御対象装置（スレーブ機器）とをスイッチングハブを介して接続すると、制御対象装置からのインプットデータは、Ｅｔｈｅｒｎｅｔのブロードキャスト宛（宛先ＭＡＣアドレスが「ＦＦ：ＦＦ：ＦＦ：ＦＦ：ＦＦ：ＦＦ」）に送信されるため、２台のコントローラ装置で同一のインプットを同時に取得することができる。
【００１９】
しかし、上記（ｉ）のインプットについては、制御処理の制御周期とは異なるタイミングで外部から入力されることが考えられる。具体的には例えば、上位システムからの制御対象装置への設定の変更を指示する計画情報（計画データ）の受信や、制御対象装置からのセンサ発報受信等である。このような制御周期と異なるタイミングの入力に対しては、制御系と待機系との切替え時でも制御対象装置に対する定周期制御を維持するためには、当該入力に基づくコントローラ装置への設定、並びに制御対象装置への適用について、二重化システム内で入力データを一致化させた状況で実施されることが必要となる。さらに、制御アプリの実行時間の増加を抑制することも求められることから、従来の典型的なコントローラ装置ではこれらの要求を満たす二重化システムを構築することは困難であった。
【００２０】
このような状況を踏まえて、本発明は、上記のように制御処理の制御周期とは異なるタイミングでの入力が行われたとしても、二重化システムを構成するコントローラ装置間でインプットを一致化させて定周期の制御処理に安全に反映させることができ、コントローラ装置の制御系と待機系とを切替える場合でも制御対象装置の定周期制御を維持することができる二重化システムを提案するものであり、以下にその一実施の形態を説明する。
【００２１】
（１）二重化システムの構成
（１−１）機能構成
図１は、本実施の形態に係るコントローラ装置によって構成される二重化システムの機能構成の一例を示す図である。
【００２２】
図１に示したように、二重化システム１は、２つのコントローラ装置１０（個別にはコントローラ装置１０Ａ，１０Ｂ）を備えて構成される。コントローラ装置１０Ａ，１０Ｂは、機能構成及びハードウェア構成は同一であってよく、以下では、一方のコントローラ装置１０Ａについて詳細な構成を説明し、他方のコントローラ装置１０Ｂについての構成の説明は省略する。また、本実施の形態では、特段の説明がない限り、二重化システム１において、主にコントローラ装置１０Ａが制御系として動作し、コントローラ装置１０Ｂが待機系として動作するものとする。
【００２３】
まず、各コントローラ装置１０Ａ，１０Ｂは、情報制御ネットワーク４０（４０Ａ，４０Ｂ）を介して計画サーバ２０と通信可能に接続され、コントローラ装置１０Ａとコントローラ装置１０Ｂとの間は、同期化通信路１４０によって通信可能に接続される。それぞれの接続ケーブルには、例えばＥｔｈｅｒｎｅｔケーブル等が利用される。計画サーバ２０は、例えば上位システムであって、設定変更等の計画情報をコントローラ装置１０（１０Ａ，１０Ｂ）に送信する計画送信部２１０を備えている。なお、計画送信部２１０による計画情報（計画データ）の送信は、コントローラ装置１０Ａ，１０Ｂにおける制御処理の制御周期とは関連せず、独自のタイミング（異なるタイミング）で行われるものとする。
【００２４】
また、各コントローラ装置１０Ａ，１０Ｂは、フィールドバス５０を介して、制御対象装置３０（個別には制御対象装置３０Ａ，３０Ｂ，３０Ｃ，・・・）と通信可能に接続される。制御対象装置３０は、具体的には例えばインバータやサーボモータ等であって、コントローラ装置１０Ａ，１０Ｂに制御されて動作することから、スレーブ機器ともいえる。コントローラ装置１０Ａ，１０Ｂは、所定の制御周期（例えば定周期）で制御対象装置３０に対する制御処理を実行することができる。二重化システム１では、制御系のコントローラ装置１０Ａが、実際に制御対象装置３０に対して制御処理を実行する。また、接続ケーブルにはＥｔｈｅｒｎｅｔケーブル等が利用される。詳細は図２を参照して後述するが、各制御対象装置３０からコントローラ装置１０Ａ，１０Ｂへのインプットデータは、Ｅｔｈｅｒｎｅｔ（登録商標）のブロードキャスト送信で行われ、コントローラ装置１０Ａ，１０Ｂが、同時に同じ入力を取得することができる。
【００２５】
そして図１に示したように、コントローラ装置１０Ａは、計画受信部１１０、データ一致化情報１２０、及び制御実行部１３０を備える。
【００２６】
計画受信部１１０は、計画サーバ２０の計画送信部２１０から送信された計画情報を受信し、該受信した計画情報をデータ一致化情報１２０に登録する。また、計画受信部１１０は、当該計画情報がコントローラ装置１０Ａにおける制御処理に反映されたかを確認し、計画サーバ２０に通知する機能も有する。
【００２７】
データ一致化情報１２０は、コントローラ装置１０Ａ側で二重化システム１の二重化（コントローラ装置１０Ｂとの同期化）を制御するために必要な情報であり、計画受信部１１０及び制御実行部１３０（より詳細には、後述するデータ一致化処理部１３３）の双方からアクセス可能なメモリ（共有メモリ）に記憶される。図３を参照して後述するように、データ一致化情報１２０は、例えば、動作状態管理テーブル１２１、フラグ管理テーブル１２２、及びデータ管理テーブル１２３から構成される。
【００２８】
制御実行部１３０は、コントローラ装置１０における全般的な制御処理を実行する処理部であって、計画受信部１１０が外部から入力データ（例えば計画データ）を受信したときには、当該入力データに基づいた制御実行処理を行う。図１に示したように、制御実行部１３０は制御アプリ１３１と二重化処理部１３２とを有する。制御実行処理の具体的な内容については、図７等を参照しながら後述する。
【００２９】
制御アプリ１３１には、制御周期、制御内容（制御ロジック）、入出力データの情報、及び二重化処理部１３２による処理に必要なパラメータ等が設定され、制御実行部１３０によって実行される。
【００３０】
二重化処理部１３２は、制御実行部１３０による制御実行処理のうち、二重化動作（同期化）の制御に関する処理（二重化処理）を行う。二重化処理部１３２は、二重化処理における詳細な処理担当に基づいて、データ一致化処理部１３３、死活監視部１３４、状態管理部１３５、及び同期化通信部１３６に分類できる。具体的には、データ一致化処理部１３３は、二重化の相手先との間でデータを一致させる処理（データ一致化処理）を担当し、死活監視部１３４は、二重化の相手先との死活監視に関する処理を担当し、状態管理部１３５は、二重化の動作状態の管理に関する処理を担当する。また、同期化通信部１３６は、データ一致化処理のなかで、同期化通信路１４０を介して行う同期化データの送受信を担当する。
【００３１】
（１−２）ハードウェア構成
図２は、図１に示した二重化システムのハードウェア構成の一例を示す図である。
【００３２】
図２に示したように、コントローラ装置１０（１０Ａ，１０Ｂ）は、ＣＰＵ（Central Processing Unit）１１、主記憶装置１２、補助記憶装置１３、及びネットワークＩ／Ｆ１４（１４ａ，１４ｂ，１４ｃ）がバス１５によって相互に接続されて構成される。コントローラ装置１０は、例えばＰＬＣ（Programmable Logic Controller）の機能を備えた計算機である。
【００３３】
ＣＰＵ１１は、自コントローラ装置１０（例えばコントローラ装置１０Ａ）の全体的な制御を司るプロセッサである。主記憶装置１２は、ＣＰＵ１１が直接アクセス可能な記憶装置であって、具体的にはＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）等である。補助記憶装置１３は、二次的な記憶装置であって、具体的にはＨＤＤ（Hard Disk Drive）やフラッシュメモリ等である。ＣＰＵ１１は、補助記憶装置１３に記憶されたオペレーティングシステム（ＯＳ）や各種プログラム及び各種ファイルを主記憶装置１２に展開し、各種の演算等を実行する。ネットワークＩ／Ｆ１４は、ネットワーク通信のためのインタフェースであって、Ｅｔｈｅｒｎｅｔケーブル等を用いて所定の手順に従って他の機器と情報の送受信を行う。具体的には、ネットワークＩ／Ｆ１４ａは情報制御ネットワーク４０（例えば情報制御ネットワーク４０Ａ）を介した計画サーバ２０との通信を可能にし、ネットワークＩ／Ｆ１４ｂは同期化通信路１４０を介した二重化対象のコントローラ装置１０（例えばコントローラ装置１０Ｂ）との通信を可能にし、ネットワークＩ／Ｆ１４ｃはスイッチングハブ５１を介した制御対象装置３０（３０Ａ，３０Ｂ，３０Ｃ）との通信を可能にする。
【００３４】
このようなコントローラ装置１０において、ハードウェア構成と機能構成（図１参照）との対応を例示すると、計画受信部１１０はＣＰＵ１１等によって実行されるＯＳの機能で実現され、制御実行部１３０はＣＰＵ１１等によって実行されるＰＬＣの機能で実現される。また、データ一致化情報１２０は例えば主記憶装置１２に記憶され、特に、ＯＳ及びＰＬＣ何れの機能においてもアクセス可能な記憶領域に記憶される。
【００３５】
また、計画サーバ２０は、ＣＰＵ２１、主記憶装置２２、補助記憶装置２３、入力装置２４、出力装置２５、及びネットワークＩ／Ｆ２６（２６ａ，２６ｂ）がバス２７によって相互に接続されて構成される。
【００３６】
計画サーバ２０は、例えば上位システムの計算機であり、上記各構成は、一般的な計算機の構成要素と考えてよい。具体的には例えば、ＣＰＵ２１は、補助記憶装置２３に記憶されたオペレーティングシステム（ＯＳ）や各種プログラム及び各種ファイルを主記憶装置２２に展開し、各種の演算等を実行する。また、キーボードやマウス等による入力装置２４は、ユーザからの入力操作に基づいて情報を受け付け、モニタやスピーカ等による出力装置２５は、ユーザに情報を出力する。ネットワークＩ／Ｆ２６は、ネットワーク通信のためのインタフェースであって、Ｅｔｈｅｒｎｅｔケーブル等を用いて所定の手順に従って他の機器と情報の送受信を行う。具体的には、ネットワークＩ／Ｆ２６ａは情報制御ネットワーク４０Ａを介したコントローラ装置１０Ａとの通信を可能にし、ネットワークＩ／Ｆ２６ｂは情報制御ネットワーク４０Ｂを介したコントローラ装置１０Ｂとの通信を可能にする。
【００３７】
また、コントローラ装置１０Ａ，１０Ｂと制御対象装置３０（３０Ａ，３０Ｂ，３０Ｃ）との間には、スイッチングハブ５１が配置される。本実施の形態では、フィールドバス通信プロトコルとして例えばＥｔｈｅｒＣＡＴを利用するとし、このとき、図２に示したように、コントローラ装置１０Ａ，１０Ｂと制御対象装置３０とをスイッチングハブ５１を介してＥｔｈｅｒｎｅｔケーブルで接続することによって構成することができる。
【００３８】
（１−３）構成の補足
ここでは、上述したコントローラ装置１０において保持されるデータ一致化情報の詳細について補足する。
【００３９】
図３は、データ一致化情報のテーブル構造の一例を説明するための図である。データ一致化情報１２０は、二重化（同期化）の制御に必要な複数の情報テーブルを保持している。具体的には図３の例示において、データ一致化情報１２０は、二重化の動作状態を管理する動作状態管理テーブル１２１、二重化（同期化）の処理で用いられる各種のフラグを管理するフラグ管理テーブル１２２、及び制御アプリ１３１が扱う変数の一部についての情報を管理するデータ管理テーブル１２３から構成されている。
【００４０】
図４は、動作状態管理テーブルの構成例を説明するための図である。図４の例示において、動作状態管理テーブル１２１は、動作状態１２１１の項目を有する。動作状態１２１１には、当該テーブルが保持されたコントローラ装置１０（例えばコントローラ装置１０Ａ）における二重化の動作状態が記録される。具体的な動作状態としては、例えば、初期化中であることを意味する「Bootup」、単独動作中であることを意味する「Standalone」、制御系（主系）で動作中であることを意味する「Active」、待機系（従系）で動作中であることを意味する「Standby」等がある。動作状態管理テーブル１２１は、二重化処理（図８）において主に参照される。
【００４１】
図５は、フラグ管理テーブルの構成例を説明するための図である。図５の例示において、フラグ管理テーブル１２２は、フラグ名１２２１及び値１２２２の項目を有する。フラグ名１２２１には、データ一致化に関する各種フラグ（例えば、データ一致化フラグ、送信済みフラグ、受信済みフラグ）が予め登録されており、値１２２２には、各種フラグの値が記録される。
【００４２】
より具体的には、本例において、「データ一致化フラグ」は、データ一致化処理（同期化処理）の実施状態について、「true（データ一致化が必要／実施中）」または「false（データ一致化が不要／実施中でない）」の値で示し、計画サーバ２０から計画情報を受信したときに、「true」に設定される。「送信済みフラグ」は、データ一致化コマンドを二重化対象に送信済みであるか否かについて、「true（送信済み）」または「false（未送信）」の値で示す。「受信済みフラグ」は、データ一致化コマンドを二重化対象から受信済みであるか否かについて、「true（受信済み）」または「false（未送信）」の値で示す。
【００４３】
そして、フラグ管理テーブル１２２において「データ一致化フラグ」、「送信済みフラグ」、及び「受信済みフラグ」のすべてのフラグ値が「true」となった場合には、二重化システム１におけるデータ一致化が完了したことを意味するので、コントローラ装置１０が計画サーバ２０から受信した計画情報に基づく制御（例えば設定変更等）をスレーブ機器である制御対象装置３０に対して適用可能な状況となる。本例ではこのような場合に、フラグ管理テーブル１２２におけるすべてのフラグの値を「false」にリセットする処理を行う（図１２のステップＳ５１０，図１３のステップＳ６０９）。
【００４４】
したがって、フラグ管理テーブル１２２は、同期化データ送信処理（図１２）、同期化データ受信処理（図１３）、及び計画データ設定処理（図１６）等において参照・書込される。
【００４５】
図６は、データ管理テーブルの構成例を説明するための図である。図６の例示において、データ管理テーブル１２３は、変数名１２３１、データ型１２３２、仮変数値１２３３、及び一致化対象フラグ１２３４の項目を有する。変数名１２３１には、制御アプリ１３１が扱う変数のうち、計画サーバ２０から設定可能なものが記載される。データ型１２３２は、変数名１２３１に記載された変数のデータ型であり、具体的には例えば、ＰＬＣ用標準規格であるＩＥＣ６１１３１−３で定義されたプログラム言語のデータ型が記載される。仮変数値１２３３には、二重化システム１を構成するコントローラ装置１０（１０Ａ，１０Ｂ）の間で変数値が共有されるまでの期間、計画サーバ２０から送信された計画データの設定値が保持される。一致化対象フラグ１２３４には、対応する変数がデータ一致化の対象であるか否かを指定するためのフラグ値が記載され、具体的には例えば「true（対象である）」または「false（対象ではない）」によって指定される。データ管理テーブル１２３は、同期化データ送信処理（図１２）及び計画データ設定処理（図１６）等において参照・書込される。
【００４６】
（２）制御実行処理
制御実行部１３０によって実行される制御実行処理について詳述する。前述したように、制御アプリ１３１には、制御周期、制御内容（制御ロジック）、入力データや出力データの情報、並びに、二重化処理部１３２による処理に必要なパラメータ等が予め設定されている。上記パラメータを参照しながら制御実行部１３０が制御アプリ１３１を実行することによって、制御実行処理が行われる。
【００４７】
図７は、制御実行処理の処理手順の一例を示すフローチャートである。制御実行部１３０による制御実行処理は定周期で実行され、図７には、その１周期分について処理内容の概要が例示されている。
【００４８】
図７に示したように、制御実行部１３０は、まず、制御アプリ１３１に設定される入力データ（計画データ）をデータ一致化情報１２０から読込み（ステップＳ１０１）、読込んだ計画データを用いて、制御アプリ１３１に記載された制御ロジックを実行する（ステップＳ１０２）。ステップＳ１０１，Ｓ１０２の処理によって、計画受信部１１０によって受信された計画情報（計画データ）が、コントローラ装置１０Ａ（より詳しくは制御アプリ１３１）に設定される。
【００４９】
次に、制御実行部１３０は、二重化処理部１３２を呼び出して二重化処理を実行する（ステップＳ１０３）。詳細は図８〜図１４を参照して後述するが、二重化処理では、二重化システム１におけるコントローラ装置１０の動作状態に応じて、異なる処理が実行される。例えば、二重化システム１を構成する２台のコントローラ装置１０Ａ，１０Ｂにおける動作状態が「Active」と「Standby」であった場合には、両コントローラ装置１０Ａ，１０Ｂの間でデータを同期化する二重化動作処理が行われる。
【００５０】
その後、ステップＳ１０４において、制御実行部１３０は、ステップＳ１０２における制御ロジックの実行結果等に基づいて、出力データの書込みを行う（ステップＳ１０４）。なお、出力データの書込みは、自コントローラ装置１０（例えばコントローラ装置１０Ａ）が制御系である場合に行われ、待機系である場合には行われない。出力データの書込みの詳細は、図１５を参照して後述する。
【００５１】
そして、ステップＳ１０４の処理が終了した後は、次周期の制御実行処理が行われるまでの間、処理を休止（スリープ）させる（ステップＳ１０５）。
【００５２】
（２−１）二重化処理
以下では、二重化処理（図７のステップＳ１０３）について詳しく説明する。図８は、二重化処理の処理手順の一例を示すフローチャートである。前述したように、二重化処理は、制御実行処理のなかで制御実行部１３０が二重化処理部１３２を呼び出して実行させる処理であり、制御実行処理のサブルーチンと考えてもよい。
【００５３】
まずステップＳ２０１において、二重化処理部１３２は、自コントローラ装置１０（コントローラ装置１０Ａ）における二重化の動作状態を確認する。より具体的には、二重化処理部１３２は、データ一致化情報１２０の動作状態管理テーブル１２１を参照し、同テーブルに記録された動作状態１２１１の値を取得する。例えば図４の場合は「Active」の動作状態が確認される。
【００５４】
次いで、二重化処理部１３２は、ステップＳ２０１で確認された動作状態に応じて、ステップＳ２０２〜Ｓ２０４の何れかの処理を実行し、二重化処理を終了する。具体的には、動作状態が「Bootup」であった場合は、ステップＳ２０２において初期化用の所定の処理を実行する（初期化処理）。動作状態が「Standalone」であった場合は、ステップＳ２０３において単独動作用の所定の処理を実行する（単独動作処理）。動作状態が「Active」または「Standby」であった場合はステップＳ２０４において二重化動作用の所定の処理を実行する（二重化動作処理）。ステップＳ２０３の単独動作処理の詳細は、図１０を参照しながら後述し、ステップＳ２０４の二重化動作処理の詳細は、図１１〜図１４を参照して後述する。
【００５５】
ここで、二重化システム１におけるコントローラ装置１０の動作状態について補足する。図４でも前述したように、二重化システム１におけるコントローラ装置１０の動作状態は、動作状態管理テーブル１２１の動作状態１２１１に記録されており、具体的には、「Bootup」、「Standalone」、「Active」、「Standby」の４つの動作状態の何れかが記録される。
【００５６】
図９は、二重化システムにおける動作状態の状態遷移を説明するための図である。図９に示した各動作状態（Bootup９０１、Standalone９０２、Active９０３、及びStandby９０４）は、上記の４つの動作状態に対応している。すなわち、Bootup９０１は、初期化中を意味する動作状態であり、Standalone９０２は、自コントローラ装置１０が単独動作中（すなわち、二重化されていない）を意味する動作状態であり、Active９０３は、自コントローラ装置１０が二重化システム１において制御系（主系）で動作中であることを意味する動作状態であり、Standby９０４は、自コントローラ装置１０が二重化システム１において待機系（従系）で動作中であることを意味する動作状態である。
【００５７】
また、図９の遷移９０５〜９１０は、各動作状態間における状態遷移の関係が示されている。図９に示された状態遷移について具体的に説明する。
【００５８】
まず、第１のコントローラ装置１０Ａにおいて、制御実行部１３０による動作開始時にBootup９０１に遷移する（遷移９０５）。Bootup９０１では、二重化対象となる第２のコントローラ装置１０（例えばコントローラ装置１０Ｂ）を探索し、見つからずにタイムアウトすると、単独動作となるためStandalone９０２に遷移する（遷移９０６）。Standalone９０２では、単独動作処理を行いながら二重化対象となる第２のコントローラ装置１０Ｂの起動を待ち受ける。第１のコントローラ装置１０ＡがStandalone９０２である際に二重化対象となる第２のコントローラ装置１０ＢがBootup９０１の動作状態になると、二重化システムを構成する初期化処理が実行され、二重化が構成されると第１のコントローラ装置１０Ａの動作状態はActive９０３となり（遷移９０７）、第２のコントローラ装置１０Ｂの動作状態はStandby９０４となる（遷移９０９）。
【００５９】
そして、上記二重化が構成されているときに、第２のコントローラ装置１０Ｂが異常の発生によって停止すると、二重化が維持できなくなるため、第１のコントローラ装置１０Ａの動作状態はStandalone９０２に遷移する（遷移９０８）。一方、上記二重化が構成されているときに、第１のコントローラ装置１０Ａが異常の発生によって停止すると、二重化が維持できなくなるため、第２のコントローラ装置１０Ｂの動作状態がStandalone９０２に遷移する（遷移９１０）。なお、停止したコントローラ装置１０は、動作状態「なし」となり、再起動時にBootup９０１に遷移する。
【００６０】
以上、図９に示したように、二重化システム１において、各コントローラ装置１０の動作状態は、二重化の構成状況に応じて４つ（「なし」を含めれば５つ）の動作状態の何れかとなり、例えば、二重化の制御系であるActive９０３に遷移するためには必ずStandby９０４（二重化の待機系）を経由しなければならない等の特徴を有する。
【００６１】
（２−１−１）単独動作処理
単独動作処理（図８のステップＳ２０３）について、詳しく説明する。図１０は、単独動作処理の処理手順の一例を示すフローチャートである。単独動作処理は、二重化処理部１３２（主にデータ一致化処理部１３３）によって実行される。
【００６２】
図１０によれば、まず、二重化処理部１３２は、データ一致化処理が必要かどうかを判断するために、図５に例示したフラグ管理テーブル１２２を参照し、「データ一致化フラグ」の値１２２２を確認する（ステップＳ３０１）。ステップＳ３０１で確認したデータ一致化フラグが「false（データ一致化が不要）」であった場合は（ステップＳ３０１のfalse）、二重化処理部１３２は単独動作処理を終了する。
【００６３】
ステップＳ３０１で確認したデータ一致化フラグが「true（データ一致化が必要）」であった場合は（ステップＳ３０１のtrue）、二重化処理部１３２は、データ管理テーブル１２３に記録された仮変数値１２３３を対応する実際の変数にコピーし（ステップＳ３０２）、その後、フラグ管理テーブル１２２におけるデータ一致化フラグをリセットして（ステップＳ３０３）、単独動作処理を終了する。なお、ステップＳ３０２における仮変数値のコピーでは、データ管理テーブル１２３において一致化対象フラグ１２３４が「true」である変数のみを対象として行うことが想定できる。
【００６４】
（２−１−２）二重化動作処理
ここでは、二重化動作処理（図８のステップＳ２０４）について説明する。二重化動作処理は、二重化システム１を構成する２台のコントローラ装置１０Ａ，１０Ｂとの間でデータ一致化（同期化）を実現するために行われる処理であって、二重化システム１を構成するコントローラ装置１０Ａ，１０Ｂのそれぞれにおいて実行される。二重化動作処理は、データ一致化のための同期化データの送信に関する同期化データ送信処理と、同期化データの受信に関する同期化データ受信処理とに大別される。
【００６５】
図１１は、二重化動作処理の処理手順の一例を示すフローチャートである。図１１に示したように、二重化処理部１３２は、同期化データ送信処理を実行し（ステップＳ４０１）、次いで同期化データ受信処理を実行し（ステップＳ４０２）、その後、二重化動作処理を終了する。
【００６６】
まず、同期化データ送信処理について詳しく説明する。図１２は、同期化データ送信処理の処理手順の一例を示すフローチャートである。
【００６７】
図１２によれば、ステップＳ５０１において、二重化処理部１３２は、データ一致化処理が必要かどうかを判断するために、フラグ管理テーブル１２２の「データ一致化フラグ」の値１２２２を確認する。
【００６８】
ステップＳ５０１で確認したデータ一致化フラグが「false（データ一致化が不要）」であった場合（ステップＳ５０１のfalse）、二重化処理部１３２は、死活監視のためにハートビート（ＨＢ）のみを同期化データとして二重化対象のコントローラ装置１０Ｂに送信し（ステップＳ５１１）、同期化データ送信処理を終了する。なお、同期化データの送信は、二重化処理部１３２の同期化通信部１３６によって行なわれ、コントローラ装置１０Ａから送信された同期化データは、同期化通信路１４０を介してコントローラ装置１０Ｂで受信される。これは、ステップＳ５１１の同期化データ送信だけでなく、後述する他の同期化データ送信（ステップＳ５０４，Ｓ５０７）でも同様である。
【００６９】
一方、ステップＳ５０１で確認したデータ一致化フラグが「true（データ一致化が必要）」であった場合は（ステップＳ５０１のtrue）、ステップＳ５０２に進む。
【００７０】
ステップＳ５０２において、二重化処理部１３２は、データ一致化の進捗状況を確認するために、フラグ管理テーブル１２２を参照し、「送信済みフラグ」と「受信済フラグ」の値１２２２の組み合わせを確認する。ステップＳ５０２の確認結果は以下の３通りが想定され、それぞれの確認結果に応じた処理が行なわれる。
【００７１】
第１に、ステップＳ５０２の確認結果について、送信済みフラグが「true（データ一致化コマンド送信済み）」かつ受信済みフラグが「false（データ一致化コマンド未受信）」の組み合わせであった場合は、二重化対象のコントローラ装置１０Ｂからの応答待ちの状況であることを意味する。そこで、二重化処理部１３２は、ステップＳ５１１において、死活状態を伝えるためのハートビート（ＨＢ）のみを同期化データとして二重化対象のコントローラ装置１０Ｂに送信し、同期化データ送信処理を終了する。なお、ステップＳ５１１で送信する同期化データには、コントローラ装置１０Ａ，１０Ｂ間で二重化を構成するために必要な主従のデータ等を含めてもよいが、後述する第２，第３の処理における同期化データ送信とは異なり、ステップＳ１０１，Ｓ１０２でコントローラ装置１０Ａ（より詳しくは制御アプリ１３１）に設定された計画データ（またはその内容を示す情報）は送信されない。
【００７２】
第２に、ステップＳ５０２の確認結果について、送信済みフラグが「false（データ一致化コマンド未送信）」かつ受信済みフラグが「false（データ一致化コマンド未受信）」の組み合わせであった場合は、二重化処理部１３２は、二重化対象のコントローラ装置１０Ｂに送信するデータ一致化コマンドとして、Setコマンドを作成する（ステップＳ５０３）。Setコマンドは、データ管理テーブル１２３を参照し、一致化対象フラグ１２３４が「true（一致化対象）」である変数に関して、変数名１２３１及び仮変数値１２３３をまとめることによって作成される。
【００７３】
そして二重化処理部１３２は、ステップＳ５０３で作成したSetコマンドとハートビート（ＨＢ）を含む同期化データをコントローラ装置１０Ｂに送信し（ステップＳ５０４）、送信済みフラグを「true」に変更し（ステップＳ５０５）、同期化データ送信処理を終了する。なお、ステップＳ５０４で送信する同期化データには、Setコマンド及びＨＢの他に、ステップＳ１０１，Ｓ１０２でコントローラ装置１０Ａ（より詳しくは制御アプリ１３１）に設定された計画データ（またはその内容を示す情報）が含まれる。
【００７４】
第３に、ステップＳ５０２の確認結果について、送信済みフラグが「false（データ一致化コマンド未送信）」かつ受信済みフラグが「true（データ一致化コマンド受信済み）」の組み合わせであった場合は、二重化処理部１３２は、二重化対象のコントローラ装置１０Ｂに返信するためのデータ一致化コマンドとして、Ackコマンドを作成する（ステップＳ５０６）。
【００７５】
そして二重化処理部１３２は、ステップＳ５０６で作成したAckコマンドとハートビート（ＨＢ）とからなる同期化データをコントローラ装置１０Ｂに送信し（ステップＳ５０７）、送信済みフラグを「true」に変更する（ステップＳ５０８）。なお、ステップＳ５０７で送信する同期化データには、Ackコマンド及びＨＢの他に、ステップＳ１０１，Ｓ１０２でコントローラ装置１０Ａ（より詳しくは制御アプリ１３１）に設定された計画データ（またはその内容を示す情報）が含まれる。
【００７６】
そして、ステップＳ５０８の処理が完了したとき、データ一致化フラグ、送信済みフラグ、及び受信済みフラグがすべて「true」となり、図５の説明でも前述したように、二重化対象とのデータ一致化が完了したことを意味する。このとき、二重化処理部１３２は、データ管理テーブル１２３に記録された仮変数値１２３３を対応する実際の変数にコピーする（ステップＳ５０９）。ステップＳ５０９において、計画データに基づいて設定された仮変数値１２３３が実際の変数にコピーされることによって、制御対象装置３０に対する実際の制御処理に当該計画データが適用される。なお、図１０のステップＳ３０２と同様に、ステップＳ５０９における仮変数値のコピーでは、一致化対象フラグ１２３４が「true」である変数のみを対象として行うことが想定できる。その後、二重化処理部１３２は、フラグ管理テーブル１２２におけるデータ一致化フラグ、送信済みフラグ、及び受信済みフラグのすべてを「false」にリセットし（ステップＳ５１０）、同期化データ送信処理を終了する。
【００７７】
次に、同期化データ受信処理について詳しく説明する。図１３は、同期化データ受信処理の処理手順の一例を示すフローチャートである。
【００７８】
図１３によれば、ステップＳ６０１において、二重化処理部１３２は同期化データ受信を行う。同期化データ受信の詳細は、図１４を参照して後述する。
【００７９】
次いで、二重化処理部１３２は、同期化データ受信の結果がタイムアウトであったか否かを確認し（ステップＳ６０２）、タイムアウトであった場合は（ステップＳ６０２のＹＥＳ）、動作状態管理テーブル１２１の動作状態１２１１をStandaloneに変更し（ステップＳ６１０）、同期化データ受信処理を終了する。なお、ステップＳ６０２におけるタイムアウトの確認は、ステップＳ６０１の同期化データ受信のなかで行われるタイムアウトの判定（図１４のステップＳ７０１参照）に基づいて行われる。
【００８０】
同期化データ受信の結果がタイムアウトでなかった場合は（ステップＳ６０２のＮＯ）、二重化処理部１３２はステップＳ６０１で受信した同期化データの種類を確認する（ステップＳ６０３）。
【００８１】
ステップＳ６０３の確認において、受信した同期化データがハートビートのみであった場合は（ステップＳ６０３のＨＢ）、図１２のステップＳ５１１で説明した同期化データ送信を二重化対象のコントローラ装置１０Ｂから受信したことを意味する。このとき、二重化処理部１３２は、現状を維持するため、特段の処理を行わずに同期化データ受信処理を終了する。
【００８２】
また、ステップＳ６０３の確認において、受信した同期化データがSetコマンド及びハートビートであった場合は（ステップＳ６０３のSetコマンド＋ＨＢ）、図１２のステップＳ５０４に示した同期化データ送信を二重化対象のコントローラ装置１０Ｂから受信したことを意味する。このとき、二重化処理部１３２は、Setコマンド情報をデータ管理テーブル１２３にコピーする（ステップＳ６０４）。さらに、二重化処理部１３２は、フラグ管理テーブル１２２においてデータ一致化フラグを「true（データ一致化実施中）」に設定し（ステップＳ６０５）、受信済みフラグを「true（データ一致化コマンド受信済み）」に設定し（ステップＳ６０６）、同期化データ受信処理を終了する。
【００８３】
また、ステップＳ６０３の確認において、受信した同期化データがAckコマンド及びハートビートであった場合は（ステップＳ６０３のAckコマンド＋ＨＢ）、図１２のステップＳ５０７に示した同期化データ送信を二重化対象のコントローラ装置１０Ｂから受信したことを意味する。このとき、二重化処理部１３２は、フラグ管理テーブル１２２の受信済みフラグを「true（データ一致化コマンド受信済み）」に設定する（ステップＳ６０７）。
【００８４】
ステップＳ６０７の処理が完了したとき、データ一致化フラグ、送信済みフラグ、及び受信済みフラグがすべて「true」となる（二重化対象とのデータ一致化が完了したことを意味する）。そこで二重化処理部１３２は、データ管理テーブル１２３に記録された仮変数値１２３３を対応する実際の変数にコピーし（ステップＳ６０８）、フラグ管理テーブル１２２におけるデータ一致化フラグ、送信済みフラグ、及び受信済みフラグのすべてを「false」にリセットし（ステップＳ６０９）、同期化データ送信処理を終了する。ステップＳ６０８〜Ｓ６０９の処理は、同期化データ送信処理（図１２）におけるステップＳ５０９〜Ｓ５１０の処理と同様である。特に、ステップＳ６０８において、計画データに基づいて設定された仮変数値１２３３が実際の変数にコピーされることによって、制御対象装置３０に対する実際の制御処理に当該計画データが適用される。
【００８５】
ここで、図１４を参照しながら、ステップＳ６０１における同期化データ受信の詳細を説明する。図１４は、同期化データ受信における処理手順の一例を示すフローチャートである。
【００８６】
図１４によれば、まず、二重化処理部１３２は、予め設定された所定のタイムアウト時間が経過したか否かを確認する（ステップＳ７０１）。ステップＳ７０１においてタイムアウトした場合は（ステップＳ７０１のＹＥＳ）、同期化データの受信がなかったとして同期化データ受信を終了する。
【００８７】
ステップＳ７０１においてタイムアウトしていない場合は（ステップＳ７０１のＮＯ）、同期化データの受信を実行し（ステップＳ７０２）、受信データの有無を確認する（ステップＳ７０３）。ステップＳ７０３において受信データがあった場合は（ステップＳ７０３のＹＥＳ）、同期化データ受信を終了する。ステップＳ７０３において受信データがなかった場合は（ステップＳ７０３のＮＯ）、一定時間スリープさせ（ステップＳ７０４）、その後再びステップＳ７０１の処理に戻る。
【００８８】
以上、図１４に示した同期化データ受信によれば、タイムアウトまでに同期化データを受信するか、または、同期化データを受信せずにタイムアウトするまで、同期化データの受信が行われる。
【００８９】
以上、二重化システム１を構成するコントローラ装置１０Ａ，１０Ｂのそれぞれにおいて図１１〜図１４に示した処理が行われることによって、コントローラ装置１０Ａは二重化対象のコントローラ装置１０Ｂとの間でデータを同期化することができる。
【００９０】
（２−２）出力データ書込み
以下では、出力データ書込み（図７のステップＳ１０４）について詳しく説明する。図１５は、出力データ書込みにおける処理手順の一例を示すフローチャートである。
【００９１】
図７のステップＳ１０４で述べたように、図７の説明で前述したように、出力データ書込みは、コントローラ装置１０の制御実行部１３０が、制御ロジックの実行（ステップＳ１０２）に基づく結果等を出力する処理であって、二重化処理（図７のステップＳ１０３）の完了後に実行される。したがって、コントローラ装置１０Ａ，１０Ｂによって二重化システム１が構成されている場合、二重化処理によって両コントローラ装置１０Ａ，１０Ｂの間でデータ一致化が完了するまでは、制御系のコントローラ装置１０Ａの制御実行部１３０は、出力データの書込みを開始しない。
【００９２】
図１５によれば、まず、制御実行部１３０は、動作状態管理テーブル１２１を参照して、自コントローラ装置１０（例えばコントローラ装置１０Ａ）の動作状態１２１１を確認する（ステップＳ８０１）。
【００９３】
次に、ステップＳ８０１において動作状態１２１１が「Bootup」または「Standby」であった場合には、コントローラ装置１０Ａは出力データの書込みを行う必要または資格がなく、特段の処理を行わずに出力データ書込みを終了する。一方、ステップＳ８０１において動作状態１２１１が「Active」または「Standalone」であった場合には、コントローラ装置１０Ａは出力データの書込みを行う立場であるため、制御ロジックの実行に基づく結果等（出力データ）の書込みを実行し（ステップＳ８０２）、出力データ書込みを終了する。
【００９４】
（３）計画データ設定処理
前章までに説明してきたように、本実施の形態に係るコントローラ装置１０Ａでは、計画サーバ２０から計画情報（計画データ）を受信した場合に、制御実行部１３０が制御実行処理を行うことによって、同じ計画データを受信したコントローラ装置１０Ｂとの間でデータを一致化させ、データ一致化の完了後、計画データに基づく制御アプリ１３１の実行結果をスレーブ機器（制御対象装置３０）に出力することで当該計画データが設定される。
【００９５】
さらに、本実施の形態に係るコントローラ装置１０Ａでは、上記の制御実行部１３０による制御実行処理とは別に、計画受信部１１０が、受信した計画データがコントローラ装置１０Ａ，１０Ｂに設定された（当該計画データが制御実行部１３０による定周期の制御処理に適切に反映された）か否かを確認し、計画データの送信元に通知することができる（計画データ設定処理）。本章ではこの計画データ設定処理について詳しく説明する。
【００９６】
図１６は、計画データ設定処理の処理手順の一例を示すフローチャートである。以下、コントローラ装置１０Ａの計画受信部１１０が実行するものとして図１６の各処理を説明するが、実際には、コントローラ装置１０Ｂでも同様に、計画受信部１１０が計画データ設定処理を行う。
【００９７】
図１６に示したように、ステップＳ９０１において、計画受信部１１０は計画情報（計画データ）を受信する。次に、計画受信部１１０はフラグ管理テーブル１２２を参照し、「データ一致化フラグ」の値１２２２を確認する（ステップＳ９０２）。
【００９８】
ステップＳ９０２の確認においてデータ一致化フラグが「true（データ一致化実施中）」であった場合、計画受信部１１０は、自コントローラ装置１０Ａにおいてデータ一致化の処理中であることを示す信号（データ一致化処理中エラー）を計画サーバ２０に送信し（ステップＳ９１０）、計画データ設定処理を終了する。
【００９９】
このような場合、計画サーバ２０は、データ一致化処理中エラーを受信することによって、コントローラ装置１０Ａにおいて、送信した計画データに基づくデータ一致化の処理中であって、当該計画データの設定が完了していないことを認識できる。そこで計画サーバ２０では、例えば次の計画データの送信が準備されていた場合に、次の計画データの送信を待機させる等の判断が可能となる。
【０１００】
一方、ステップＳ９０２の確認においてデータ一致化フラグが「false（データ一致化実施中でない）」であった場合、ステップＳ９０１の計画データの受信に基づいてデータ一致化を実行可能な状態であることから、計画受信部１１０は、受信した計画データをデータ管理テーブル１２３に設定し（ステップＳ９０３）、フラグ管理テーブル１２２のデータ一致化フラグを「true（データ一致化実施中）」に設定する（ステップＳ９０４）。
【０１０１】
そして、計画受信部１１０は、予め設定された所定のタイムアウト時間が経過したか否かを確認する（ステップＳ９０５）。上記タイムアウト時間は、制御実行部１３０によるデータ一致化の全体処理に関するタイムアウトを規定した時間である。
【０１０２】
ステップＳ９０５の確認においてタイムアウトであれば（ステップＳ９０５のＹＥＳ）、計画受信部１１０は、タイムアウトエラーを計画サーバ２０に送信し（ステップＳ９０９）、計画データ設定処理を終了する。
【０１０３】
このような場合、計画サーバ２０は、タイムアウトエラーを受信することによって、コントローラ装置１０Ａにおいて、送信した計画データに基づくデータ一致化処理が正常に完了せず、当該計画データがコントローラ装置１０Ａに適切に設定されなかったことを認識できる。そこで、計画サーバ２０では、先の計画データを再送信するよう判断したり、または、コントローラ装置１０Ａ，１０Ｂにおける故障や不具合の可能性を推測したりすることができる。
【０１０４】
一方、ステップＳ９０５の確認においてタイムアウトでなければ（ステップＳ９０５のＮＯ）、計画受信部１１０はフラグ管理テーブル１２２を参照し、「データ一致化フラグ」の値１２２２を確認する（ステップＳ９０６）。ステップＳ９０６の確認においてデータ一致化フラグが「true（データ一致化実施中）」であれば、一定時間のスリープを経て（ステップＳ９０８）、再度ステップＳ９０５に戻ってタイムアウトの確認を行う。また、ステップＳ９０６の確認においてデータ一致化フラグが「false（データ一致化実施中でない）」となっていた場合は、二重化システム１のコントローラ装置１０Ａ，１０Ｂ間でデータ一致化が完了し、当該計画データが適切に反映された（設定された）ことを意味している。そこで計画受信部１１０は、計画データの設定が完了したことを示す設定ＯＫコマンドを計画サーバ２０に送信し（ステップＳ９０７）、計画データ設定処理を終了する。
【０１０５】
このような場合、計画サーバ２０は、設定ＯＫコマンドを受信することによって、コントローラ装置１０Ａ，１０Ｂにおいて、送信した計画データに基づくデータ一致化処理が正常に完了し、当該計画データがコントローラ装置１０Ａ，１０Ｂに設定されたことを認識できる。そこで、計画サーバ２０では、設定ＯＫコマンドを受信済みであることを条件として、次回の計画データの送信を許可するといった制御が可能となる。コントローラ装置１０Ａ，１０Ｂの双方から設定ＯＫコマンドを受信済みであることを条件とすれば、さらに安定性を高めることができる。
【０１０６】
以上のように、図１６のステップＳ９０１〜Ｓ９１０の処理が行われることによって、計画受信部１１０は、制御実行部１３０による制御処理の制御周期とは異なるタイミングで外部（例えば計画サーバ２０）から受信した計画データについて、当該計画データのコントローラ装置１０Ａ，１０Ｂへの設定状況（制御処理に適切に反映されたか否か）を、当該計画データの送信元に通知することができる。かくして、二重化システム１における計画データの設定に関する確実性を高め、安定した二重化システム１の運用に貢献する。
【０１０７】
（４）まとめ
本実施の形態に係るコントローラ装置１０は、ＥｔｈｅｒＣＡＴ等のフィールドバス通信プロトコルを利用して、フィールドバス経由の入力データ（例えば計画データ）を制御系のコントローラ装置１０Ａ及び待機系のコントローラ装置１０Ｂで常に一致させた場合、制御実行部１３０による制御実行処理において計画データを死活監視情報（ハートビート）と合わせて送信可能とすることによって、同期化情報を通信するために必要な同期化通信の回数は、１制御周期あたり１回（同期化データ送信のみ）となり、同期化通信の時間の増大に伴う制御アプリの実行時間の増加を抑制することができる。
【０１０８】
さらに、本実施の形態によれば、定周期で制御アプリ１３１が実行される制御処理の１周期目において、二重化動作処理の同期化データ送信処理及び同期化データ受信処理によってコントローラ装置１０Ａ，１０Ｂに設定された計画データのデータ一致化が完了し、２周期目の制御処理の開始時には、当該計画データの実際の制御処理への適用（仮変数値の実際の変数への適用：図１２のステップＳ５０９，図１３のステップＳ６０８）が可能になる。このように制御周期に合わせた制御が行われることにより、制御系・待機系双方のコントローラ装置１０Ａ，１０Ｂにおいて制御実行タイミングがずれないため、制御系と待機系を切替えるとき等であっても、制御対象装置３０に対する定周期制御を維持することができ、安定的に制御系と待機系を切替えることが可能となる。
【０１０９】
また、本実施の形態に係るコントローラ装置１０は、上述したように、制御実行部１３０（二重化処理部１３２）による二重化動作処理において、コントローラ装置１０Ａ，１０Ｂでデータ一致化が完了した場合（データ一致化フラグ、送信済みフラグ、受信済みフラグが全て「true」になった場合）に初めて、データ管理テーブル１２３に記録された仮変数値１２３３を実際の変数にコピーする。すなわち、コントローラ装置１０が、制御処理の制御周期とは異なるタイミングで外部から入力データ（例えば、計画サーバ２０からの計画データ）を受信したとしても、二重化システム１における同期化が確定するまでは、制御対象装置３０への実際の制御処理に当該入力データが反映されず、二重化システム１の二重化の信頼性や安定性を高めることができる。
【０１１０】
また、本実施の形態に係る二重化システム１において、上述した制御実行処理は、制御処理の制御周期とは異なるタイミングで外部から入力される入力データ（例えば、計画サーバ２０からの計画情報）を受信した場合に行うものとし、制御処理の制御周期と同じタイミングで入力される入力データを受信した場合には、一部の処理を行わないようにすることができる。
【０１１１】
具体的には例えば、制御アプリ１３１に入力データを設定してから（図７のステップＳ１０１，Ｓ１０２）、二重化動作処理（同ステップＳ１０３）を行わずに、出力データ書込み（同ステップＳ１０４）を行うようにすることができる。これは、二重化システム１を構成する２台のコントローラ装置１０Ａ，１０Ｂの双方で、常に同じタイミングで同じインプットを用いて制御処理が行われる場合には、常に同じ演算結果を得ることが可能となるためであり、制御処理の制御周期に合わせて上記入力が行われる場合には、二重化動作処理を省略することができる。このようにすることで、二重化システム１では、コントローラ装置１０Ａ，１０Ｂ間の同期化通信の通信量を削減し、同期化処理に伴う制御処理時間の増大を抑制することができる。但し、この場合でも、ハートビートを用いた死活監視通信は行うようにしてもよい。
【０１１２】
なお、本発明は、上記の実施の形態で説明した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記の実施の形態で説明した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。したがって実施例の構成の一部について、削除や他の構成の追加・置換をしてもよい。
【０１１３】
また、上記の実施の形態において説明した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１１４】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実施には殆ど全ての構成が相互に接続されていると考えてもよい。
【産業上の利用可能性】
【０１１５】
本発明は、コントローラによって構成される二重化システムにおいて、同期化通信回数の削減と、制御系及び待機系における制御タイミングの一致化とを同時に満たすことができ、制御システムや社会インフラシステムにおける制御の高信頼化に有用な技術である。
【符号の説明】
【０１１６】
１        二重化システム
１０（１０Ａ，１０Ｂ）  コントローラ
１１      ＣＰＵ
１２      主記憶装置
１３      補助記憶装置
１４（１４ａ，１４ｂ，１４ｃ）  ネットワークＩ／Ｆ
１５      バス
２０      計画サーバ
２１      ＣＰＵ
２２      主記憶装置
２３      補助記憶装置
２４      入力装置
２５      出力装置
２６（２６ａ，２６ｂ）  ネットワークＩ／Ｆ
２７      バス
３０（３０Ａ，３０Ｂ，３０Ｃ）  制御対象装置
４０（４０Ａ，４０Ｂ）  情報制御ネットワーク
５０      フィールドバス
５１      スイッチングハブ
１１０    計画受信部
１２０    データ一致化情報
１２１    動作状態管理テーブル
１２２    フラグ管理テーブル
１２３    データ管理テーブル
１３０    制御実行部
１３１    制御アプリ
１３２    二重化処理部
１３３    データ一致化処理部
１３４    死活監視部
１３５    状態管理部
１３６    同期化通信部
１４０    同期化通信路
２１０    計画送信部
１２１１  動作状態
１２２１  フラグ名
１２２２  値
１２３１  変数名
１２３２  データ型
１２３３  仮変数値
１２３４  一致化対象フラグ
【図１】
2019016170.tif 000003
【図２】
2019016170.tif 000004
【図３】
2019016170.tif 000005
【図４】
2019016170.tif 000006
【図５】
2019016170.tif 000007
【図６】
2019016170.tif 000008
【図７】
2019016170.tif 000009
【図８】
2019016170.tif 000010
【図９】
2019016170.tif 000011
【図１０】
2019016170.tif 000012
【図１１】
2019016170.tif 000013
【図１２】
2019016170.tif 000014
【図１３】
2019016170.tif 000015
【図１４】
2019016170.tif 000016
【図１５】
2019016170.tif 000017
【図１６】
2019016170.tif 000018