以下図面について、本発明の一実施の形態を詳述する。
まず、本発明の実施の形態について説明する前に、従来の典型的な2台のコントローラ装置によって二重化システムを構成しようとするときに、コントローラ装置間の同期のために必要となる制御について説明する。
本明細書の背景技術でも述べたように、典型的なコントローラ装置では、制御アプリが定周期に実行されることによって、コントローラ装置に接続された制御対象装置に対して定周期制御を行っており、具体的には、毎周期、次の(i)〜(iii)の処理が順に実行される。
(i)IOモジュールやフィールドバスからの情報の入力(インプット)
(ii)制御アプリに記述された制御内容の実行
(iii)制御処理の実行結果のIOモジュールやフィールドバスへの出力(アウトプット)
このような2台のコントローラ装置を用いて二重化システムを構成する場合、2台のコントローラ装置の双方で、常に同じタイミングで同じインプットを用いて制御処理が行われることで、常に同じ演算結果を得ることが可能となる。具体的には、上記(i)と(ii)の処理の間に、両コントローラ装置におけるインプットが同一であることを確認し、上記(ii)と(iii)の処理の間に、互いに死活監視を行ってどちらが制御系としてアウトプットを実行するかを確認することができれば、二重化システムの同期化を実現することができる。
ここで、上記(i)のインプットに関して、IOモジュールやフィールドバスからの情報入力は、定期的な制御周期による制御処理と同期して実施されるのであれば、2台のコントローラ装置で同じ入力情報を取得することができれば、同期化通信等によって確認を行わなくても、インプットが常に同一と推定することができる。具体的には例えば、フィールドバスプロトコルの1つであるEtherCATを利用した場合、2台のコントローラ装置と制御対象装置(スレーブ機器)とをスイッチングハブを介して接続すると、制御対象装置からのインプットデータは、Ethernetのブロードキャスト宛(宛先MACアドレスが「FF:FF:FF:FF:FF:FF」)に送信されるため、2台のコントローラ装置で同一のインプットを同時に取得することができる。
しかし、上記(i)のインプットについては、制御処理の制御周期とは異なるタイミングで外部から入力されることが考えられる。具体的には例えば、上位システムからの制御対象装置への設定の変更を指示する計画情報(計画データ)の受信や、制御対象装置からのセンサ発報受信等である。このような制御周期と異なるタイミングの入力に対しては、制御系と待機系との切替え時でも制御対象装置に対する定周期制御を維持するためには、当該入力に基づくコントローラ装置への設定、並びに制御対象装置への適用について、二重化システム内で入力データを一致化させた状況で実施されることが必要となる。さらに、制御アプリの実行時間の増加を抑制することも求められることから、従来の典型的なコントローラ装置ではこれらの要求を満たす二重化システムを構築することは困難であった。
このような状況を踏まえて、本発明は、上記のように制御処理の制御周期とは異なるタイミングでの入力が行われたとしても、二重化システムを構成するコントローラ装置間でインプットを一致化させて定周期の制御処理に安全に反映させることができ、コントローラ装置の制御系と待機系とを切替える場合でも制御対象装置の定周期制御を維持することができる二重化システムを提案するものであり、以下にその一実施の形態を説明する。
(1)二重化システムの構成
(1−1)機能構成
図1は、本実施の形態に係るコントローラ装置によって構成される二重化システムの機能構成の一例を示す図である。
図1に示したように、二重化システム1は、2つのコントローラ装置10(個別にはコントローラ装置10A,10B)を備えて構成される。コントローラ装置10A,10Bは、機能構成及びハードウェア構成は同一であってよく、以下では、一方のコントローラ装置10Aについて詳細な構成を説明し、他方のコントローラ装置10Bについての構成の説明は省略する。また、本実施の形態では、特段の説明がない限り、二重化システム1において、主にコントローラ装置10Aが制御系として動作し、コントローラ装置10Bが待機系として動作するものとする。
まず、各コントローラ装置10A,10Bは、情報制御ネットワーク40(40A,40B)を介して計画サーバ20と通信可能に接続され、コントローラ装置10Aとコントローラ装置10Bとの間は、同期化通信路140によって通信可能に接続される。それぞれの接続ケーブルには、例えばEthernetケーブル等が利用される。計画サーバ20は、例えば上位システムであって、設定変更等の計画情報をコントローラ装置10(10A,10B)に送信する計画送信部210を備えている。なお、計画送信部210による計画情報(計画データ)の送信は、コントローラ装置10A,10Bにおける制御処理の制御周期とは関連せず、独自のタイミング(異なるタイミング)で行われるものとする。
また、各コントローラ装置10A,10Bは、フィールドバス50を介して、制御対象装置30(個別には制御対象装置30A,30B,30C,・・・)と通信可能に接続される。制御対象装置30は、具体的には例えばインバータやサーボモータ等であって、コントローラ装置10A,10Bに制御されて動作することから、スレーブ機器ともいえる。コントローラ装置10A,10Bは、所定の制御周期(例えば定周期)で制御対象装置30に対する制御処理を実行することができる。二重化システム1では、制御系のコントローラ装置10Aが、実際に制御対象装置30に対して制御処理を実行する。また、接続ケーブルにはEthernetケーブル等が利用される。詳細は図2を参照して後述するが、各制御対象装置30からコントローラ装置10A,10Bへのインプットデータは、Ethernet(登録商標)のブロードキャスト送信で行われ、コントローラ装置10A,10Bが、同時に同じ入力を取得することができる。
そして図1に示したように、コントローラ装置10Aは、計画受信部110、データ一致化情報120、及び制御実行部130を備える。
計画受信部110は、計画サーバ20の計画送信部210から送信された計画情報を受信し、該受信した計画情報をデータ一致化情報120に登録する。また、計画受信部110は、当該計画情報がコントローラ装置10Aにおける制御処理に反映されたかを確認し、計画サーバ20に通知する機能も有する。
データ一致化情報120は、コントローラ装置10A側で二重化システム1の二重化(コントローラ装置10Bとの同期化)を制御するために必要な情報であり、計画受信部110及び制御実行部130(より詳細には、後述するデータ一致化処理部133)の双方からアクセス可能なメモリ(共有メモリ)に記憶される。図3を参照して後述するように、データ一致化情報120は、例えば、動作状態管理テーブル121、フラグ管理テーブル122、及びデータ管理テーブル123から構成される。
制御実行部130は、コントローラ装置10における全般的な制御処理を実行する処理部であって、計画受信部110が外部から入力データ(例えば計画データ)を受信したときには、当該入力データに基づいた制御実行処理を行う。図1に示したように、制御実行部130は制御アプリ131と二重化処理部132とを有する。制御実行処理の具体的な内容については、図7等を参照しながら後述する。
制御アプリ131には、制御周期、制御内容(制御ロジック)、入出力データの情報、及び二重化処理部132による処理に必要なパラメータ等が設定され、制御実行部130によって実行される。
二重化処理部132は、制御実行部130による制御実行処理のうち、二重化動作(同期化)の制御に関する処理(二重化処理)を行う。二重化処理部132は、二重化処理における詳細な処理担当に基づいて、データ一致化処理部133、死活監視部134、状態管理部135、及び同期化通信部136に分類できる。具体的には、データ一致化処理部133は、二重化の相手先との間でデータを一致させる処理(データ一致化処理)を担当し、死活監視部134は、二重化の相手先との死活監視に関する処理を担当し、状態管理部135は、二重化の動作状態の管理に関する処理を担当する。また、同期化通信部136は、データ一致化処理のなかで、同期化通信路140を介して行う同期化データの送受信を担当する。
(1−2)ハードウェア構成
図2は、図1に示した二重化システムのハードウェア構成の一例を示す図である。
図2に示したように、コントローラ装置10(10A,10B)は、CPU(Central Processing Unit)11、主記憶装置12、補助記憶装置13、及びネットワークI/F14(14a,14b,14c)がバス15によって相互に接続されて構成される。コントローラ装置10は、例えばPLC(Programmable Logic Controller)の機能を備えた計算機である。
CPU11は、自コントローラ装置10(例えばコントローラ装置10A)の全体的な制御を司るプロセッサである。主記憶装置12は、CPU11が直接アクセス可能な記憶装置であって、具体的にはRAM(Random Access Memory)やROM(Read Only Memory)等である。補助記憶装置13は、二次的な記憶装置であって、具体的にはHDD(Hard Disk Drive)やフラッシュメモリ等である。CPU11は、補助記憶装置13に記憶されたオペレーティングシステム(OS)や各種プログラム及び各種ファイルを主記憶装置12に展開し、各種の演算等を実行する。ネットワークI/F14は、ネットワーク通信のためのインタフェースであって、Ethernetケーブル等を用いて所定の手順に従って他の機器と情報の送受信を行う。具体的には、ネットワークI/F14aは情報制御ネットワーク40(例えば情報制御ネットワーク40A)を介した計画サーバ20との通信を可能にし、ネットワークI/F14bは同期化通信路140を介した二重化対象のコントローラ装置10(例えばコントローラ装置10B)との通信を可能にし、ネットワークI/F14cはスイッチングハブ51を介した制御対象装置30(30A,30B,30C)との通信を可能にする。
このようなコントローラ装置10において、ハードウェア構成と機能構成(図1参照)との対応を例示すると、計画受信部110はCPU11等によって実行されるOSの機能で実現され、制御実行部130はCPU11等によって実行されるPLCの機能で実現される。また、データ一致化情報120は例えば主記憶装置12に記憶され、特に、OS及びPLC何れの機能においてもアクセス可能な記憶領域に記憶される。
また、計画サーバ20は、CPU21、主記憶装置22、補助記憶装置23、入力装置24、出力装置25、及びネットワークI/F26(26a,26b)がバス27によって相互に接続されて構成される。
計画サーバ20は、例えば上位システムの計算機であり、上記各構成は、一般的な計算機の構成要素と考えてよい。具体的には例えば、CPU21は、補助記憶装置23に記憶されたオペレーティングシステム(OS)や各種プログラム及び各種ファイルを主記憶装置22に展開し、各種の演算等を実行する。また、キーボードやマウス等による入力装置24は、ユーザからの入力操作に基づいて情報を受け付け、モニタやスピーカ等による出力装置25は、ユーザに情報を出力する。ネットワークI/F26は、ネットワーク通信のためのインタフェースであって、Ethernetケーブル等を用いて所定の手順に従って他の機器と情報の送受信を行う。具体的には、ネットワークI/F26aは情報制御ネットワーク40Aを介したコントローラ装置10Aとの通信を可能にし、ネットワークI/F26bは情報制御ネットワーク40Bを介したコントローラ装置10Bとの通信を可能にする。
また、コントローラ装置10A,10Bと制御対象装置30(30A,30B,30C)との間には、スイッチングハブ51が配置される。本実施の形態では、フィールドバス通信プロトコルとして例えばEtherCATを利用するとし、このとき、図2に示したように、コントローラ装置10A,10Bと制御対象装置30とをスイッチングハブ51を介してEthernetケーブルで接続することによって構成することができる。
(1−3)構成の補足
ここでは、上述したコントローラ装置10において保持されるデータ一致化情報の詳細について補足する。
図3は、データ一致化情報のテーブル構造の一例を説明するための図である。データ一致化情報120は、二重化(同期化)の制御に必要な複数の情報テーブルを保持している。具体的には図3の例示において、データ一致化情報120は、二重化の動作状態を管理する動作状態管理テーブル121、二重化(同期化)の処理で用いられる各種のフラグを管理するフラグ管理テーブル122、及び制御アプリ131が扱う変数の一部についての情報を管理するデータ管理テーブル123から構成されている。
図4は、動作状態管理テーブルの構成例を説明するための図である。図4の例示において、動作状態管理テーブル121は、動作状態1211の項目を有する。動作状態1211には、当該テーブルが保持されたコントローラ装置10(例えばコントローラ装置10A)における二重化の動作状態が記録される。具体的な動作状態としては、例えば、初期化中であることを意味する「Bootup」、単独動作中であることを意味する「Standalone」、制御系(主系)で動作中であることを意味する「Active」、待機系(従系)で動作中であることを意味する「Standby」等がある。動作状態管理テーブル121は、二重化処理(図8)において主に参照される。
図5は、フラグ管理テーブルの構成例を説明するための図である。図5の例示において、フラグ管理テーブル122は、フラグ名1221及び値1222の項目を有する。フラグ名1221には、データ一致化に関する各種フラグ(例えば、データ一致化フラグ、送信済みフラグ、受信済みフラグ)が予め登録されており、値1222には、各種フラグの値が記録される。
より具体的には、本例において、「データ一致化フラグ」は、データ一致化処理(同期化処理)の実施状態について、「true(データ一致化が必要/実施中)」または「false(データ一致化が不要/実施中でない)」の値で示し、計画サーバ20から計画情報を受信したときに、「true」に設定される。「送信済みフラグ」は、データ一致化コマンドを二重化対象に送信済みであるか否かについて、「true(送信済み)」または「false(未送信)」の値で示す。「受信済みフラグ」は、データ一致化コマンドを二重化対象から受信済みであるか否かについて、「true(受信済み)」または「false(未送信)」の値で示す。
そして、フラグ管理テーブル122において「データ一致化フラグ」、「送信済みフラグ」、及び「受信済みフラグ」のすべてのフラグ値が「true」となった場合には、二重化システム1におけるデータ一致化が完了したことを意味するので、コントローラ装置10が計画サーバ20から受信した計画情報に基づく制御(例えば設定変更等)をスレーブ機器である制御対象装置30に対して適用可能な状況となる。本例ではこのような場合に、フラグ管理テーブル122におけるすべてのフラグの値を「false」にリセットする処理を行う(図12のステップS510,図13のステップS609)。
したがって、フラグ管理テーブル122は、同期化データ送信処理(図12)、同期化データ受信処理(図13)、及び計画データ設定処理(図16)等において参照・書込される。
図6は、データ管理テーブルの構成例を説明するための図である。図6の例示において、データ管理テーブル123は、変数名1231、データ型1232、仮変数値1233、及び一致化対象フラグ1234の項目を有する。変数名1231には、制御アプリ131が扱う変数のうち、計画サーバ20から設定可能なものが記載される。データ型1232は、変数名1231に記載された変数のデータ型であり、具体的には例えば、PLC用標準規格であるIEC61131−3で定義されたプログラム言語のデータ型が記載される。仮変数値1233には、二重化システム1を構成するコントローラ装置10(10A,10B)の間で変数値が共有されるまでの期間、計画サーバ20から送信された計画データの設定値が保持される。一致化対象フラグ1234には、対応する変数がデータ一致化の対象であるか否かを指定するためのフラグ値が記載され、具体的には例えば「true(対象である)」または「false(対象ではない)」によって指定される。データ管理テーブル123は、同期化データ送信処理(図12)及び計画データ設定処理(図16)等において参照・書込される。
(2)制御実行処理
制御実行部130によって実行される制御実行処理について詳述する。前述したように、制御アプリ131には、制御周期、制御内容(制御ロジック)、入力データや出力データの情報、並びに、二重化処理部132による処理に必要なパラメータ等が予め設定されている。上記パラメータを参照しながら制御実行部130が制御アプリ131を実行することによって、制御実行処理が行われる。
図7は、制御実行処理の処理手順の一例を示すフローチャートである。制御実行部130による制御実行処理は定周期で実行され、図7には、その1周期分について処理内容の概要が例示されている。
図7に示したように、制御実行部130は、まず、制御アプリ131に設定される入力データ(計画データ)をデータ一致化情報120から読込み(ステップS101)、読込んだ計画データを用いて、制御アプリ131に記載された制御ロジックを実行する(ステップS102)。ステップS101,S102の処理によって、計画受信部110によって受信された計画情報(計画データ)が、コントローラ装置10A(より詳しくは制御アプリ131)に設定される。
次に、制御実行部130は、二重化処理部132を呼び出して二重化処理を実行する(ステップS103)。詳細は図8〜図14を参照して後述するが、二重化処理では、二重化システム1におけるコントローラ装置10の動作状態に応じて、異なる処理が実行される。例えば、二重化システム1を構成する2台のコントローラ装置10A,10Bにおける動作状態が「Active」と「Standby」であった場合には、両コントローラ装置10A,10Bの間でデータを同期化する二重化動作処理が行われる。
その後、ステップS104において、制御実行部130は、ステップS102における制御ロジックの実行結果等に基づいて、出力データの書込みを行う(ステップS104)。なお、出力データの書込みは、自コントローラ装置10(例えばコントローラ装置10A)が制御系である場合に行われ、待機系である場合には行われない。出力データの書込みの詳細は、図15を参照して後述する。
そして、ステップS104の処理が終了した後は、次周期の制御実行処理が行われるまでの間、処理を休止(スリープ)させる(ステップS105)。
(2−1)二重化処理
以下では、二重化処理(図7のステップS103)について詳しく説明する。図8は、二重化処理の処理手順の一例を示すフローチャートである。前述したように、二重化処理は、制御実行処理のなかで制御実行部130が二重化処理部132を呼び出して実行させる処理であり、制御実行処理のサブルーチンと考えてもよい。
まずステップS201において、二重化処理部132は、自コントローラ装置10(コントローラ装置10A)における二重化の動作状態を確認する。より具体的には、二重化処理部132は、データ一致化情報120の動作状態管理テーブル121を参照し、同テーブルに記録された動作状態1211の値を取得する。例えば図4の場合は「Active」の動作状態が確認される。
次いで、二重化処理部132は、ステップS201で確認された動作状態に応じて、ステップS202〜S204の何れかの処理を実行し、二重化処理を終了する。具体的には、動作状態が「Bootup」であった場合は、ステップS202において初期化用の所定の処理を実行する(初期化処理)。動作状態が「Standalone」であった場合は、ステップS203において単独動作用の所定の処理を実行する(単独動作処理)。動作状態が「Active」または「Standby」であった場合はステップS204において二重化動作用の所定の処理を実行する(二重化動作処理)。ステップS203の単独動作処理の詳細は、図10を参照しながら後述し、ステップS204の二重化動作処理の詳細は、図11〜図14を参照して後述する。
ここで、二重化システム1におけるコントローラ装置10の動作状態について補足する。図4でも前述したように、二重化システム1におけるコントローラ装置10の動作状態は、動作状態管理テーブル121の動作状態1211に記録されており、具体的には、「Bootup」、「Standalone」、「Active」、「Standby」の4つの動作状態の何れかが記録される。
図9は、二重化システムにおける動作状態の状態遷移を説明するための図である。図9に示した各動作状態(Bootup901、Standalone902、Active903、及びStandby904)は、上記の4つの動作状態に対応している。すなわち、Bootup901は、初期化中を意味する動作状態であり、Standalone902は、自コントローラ装置10が単独動作中(すなわち、二重化されていない)を意味する動作状態であり、Active903は、自コントローラ装置10が二重化システム1において制御系(主系)で動作中であることを意味する動作状態であり、Standby904は、自コントローラ装置10が二重化システム1において待機系(従系)で動作中であることを意味する動作状態である。
また、図9の遷移905〜910は、各動作状態間における状態遷移の関係が示されている。図9に示された状態遷移について具体的に説明する。
まず、第1のコントローラ装置10Aにおいて、制御実行部130による動作開始時にBootup901に遷移する(遷移905)。Bootup901では、二重化対象となる第2のコントローラ装置10(例えばコントローラ装置10B)を探索し、見つからずにタイムアウトすると、単独動作となるためStandalone902に遷移する(遷移906)。Standalone902では、単独動作処理を行いながら二重化対象となる第2のコントローラ装置10Bの起動を待ち受ける。第1のコントローラ装置10AがStandalone902である際に二重化対象となる第2のコントローラ装置10BがBootup901の動作状態になると、二重化システムを構成する初期化処理が実行され、二重化が構成されると第1のコントローラ装置10Aの動作状態はActive903となり(遷移907)、第2のコントローラ装置10Bの動作状態はStandby904となる(遷移909)。
そして、上記二重化が構成されているときに、第2のコントローラ装置10Bが異常の発生によって停止すると、二重化が維持できなくなるため、第1のコントローラ装置10Aの動作状態はStandalone902に遷移する(遷移908)。一方、上記二重化が構成されているときに、第1のコントローラ装置10Aが異常の発生によって停止すると、二重化が維持できなくなるため、第2のコントローラ装置10Bの動作状態がStandalone902に遷移する(遷移910)。なお、停止したコントローラ装置10は、動作状態「なし」となり、再起動時にBootup901に遷移する。
以上、図9に示したように、二重化システム1において、各コントローラ装置10の動作状態は、二重化の構成状況に応じて4つ(「なし」を含めれば5つ)の動作状態の何れかとなり、例えば、二重化の制御系であるActive903に遷移するためには必ずStandby904(二重化の待機系)を経由しなければならない等の特徴を有する。
(2−1−1)単独動作処理
単独動作処理(図8のステップS203)について、詳しく説明する。図10は、単独動作処理の処理手順の一例を示すフローチャートである。単独動作処理は、二重化処理部132(主にデータ一致化処理部133)によって実行される。
図10によれば、まず、二重化処理部132は、データ一致化処理が必要かどうかを判断するために、図5に例示したフラグ管理テーブル122を参照し、「データ一致化フラグ」の値1222を確認する(ステップS301)。ステップS301で確認したデータ一致化フラグが「false(データ一致化が不要)」であった場合は(ステップS301のfalse)、二重化処理部132は単独動作処理を終了する。
ステップS301で確認したデータ一致化フラグが「true(データ一致化が必要)」であった場合は(ステップS301のtrue)、二重化処理部132は、データ管理テーブル123に記録された仮変数値1233を対応する実際の変数にコピーし(ステップS302)、その後、フラグ管理テーブル122におけるデータ一致化フラグをリセットして(ステップS303)、単独動作処理を終了する。なお、ステップS302における仮変数値のコピーでは、データ管理テーブル123において一致化対象フラグ1234が「true」である変数のみを対象として行うことが想定できる。
(2−1−2)二重化動作処理
ここでは、二重化動作処理(図8のステップS204)について説明する。二重化動作処理は、二重化システム1を構成する2台のコントローラ装置10A,10Bとの間でデータ一致化(同期化)を実現するために行われる処理であって、二重化システム1を構成するコントローラ装置10A,10Bのそれぞれにおいて実行される。二重化動作処理は、データ一致化のための同期化データの送信に関する同期化データ送信処理と、同期化データの受信に関する同期化データ受信処理とに大別される。
図11は、二重化動作処理の処理手順の一例を示すフローチャートである。図11に示したように、二重化処理部132は、同期化データ送信処理を実行し(ステップS401)、次いで同期化データ受信処理を実行し(ステップS402)、その後、二重化動作処理を終了する。
まず、同期化データ送信処理について詳しく説明する。図12は、同期化データ送信処理の処理手順の一例を示すフローチャートである。
図12によれば、ステップS501において、二重化処理部132は、データ一致化処理が必要かどうかを判断するために、フラグ管理テーブル122の「データ一致化フラグ」の値1222を確認する。
ステップS501で確認したデータ一致化フラグが「false(データ一致化が不要)」であった場合(ステップS501のfalse)、二重化処理部132は、死活監視のためにハートビート(HB)のみを同期化データとして二重化対象のコントローラ装置10Bに送信し(ステップS511)、同期化データ送信処理を終了する。なお、同期化データの送信は、二重化処理部132の同期化通信部136によって行なわれ、コントローラ装置10Aから送信された同期化データは、同期化通信路140を介してコントローラ装置10Bで受信される。これは、ステップS511の同期化データ送信だけでなく、後述する他の同期化データ送信(ステップS504,S507)でも同様である。
一方、ステップS501で確認したデータ一致化フラグが「true(データ一致化が必要)」であった場合は(ステップS501のtrue)、ステップS502に進む。
ステップS502において、二重化処理部132は、データ一致化の進捗状況を確認するために、フラグ管理テーブル122を参照し、「送信済みフラグ」と「受信済フラグ」の値1222の組み合わせを確認する。ステップS502の確認結果は以下の3通りが想定され、それぞれの確認結果に応じた処理が行なわれる。
第1に、ステップS502の確認結果について、送信済みフラグが「true(データ一致化コマンド送信済み)」かつ受信済みフラグが「false(データ一致化コマンド未受信)」の組み合わせであった場合は、二重化対象のコントローラ装置10Bからの応答待ちの状況であることを意味する。そこで、二重化処理部132は、ステップS511において、死活状態を伝えるためのハートビート(HB)のみを同期化データとして二重化対象のコントローラ装置10Bに送信し、同期化データ送信処理を終了する。なお、ステップS511で送信する同期化データには、コントローラ装置10A,10B間で二重化を構成するために必要な主従のデータ等を含めてもよいが、後述する第2,第3の処理における同期化データ送信とは異なり、ステップS101,S102でコントローラ装置10A(より詳しくは制御アプリ131)に設定された計画データ(またはその内容を示す情報)は送信されない。
第2に、ステップS502の確認結果について、送信済みフラグが「false(データ一致化コマンド未送信)」かつ受信済みフラグが「false(データ一致化コマンド未受信)」の組み合わせであった場合は、二重化処理部132は、二重化対象のコントローラ装置10Bに送信するデータ一致化コマンドとして、Setコマンドを作成する(ステップS503)。Setコマンドは、データ管理テーブル123を参照し、一致化対象フラグ1234が「true(一致化対象)」である変数に関して、変数名1231及び仮変数値1233をまとめることによって作成される。
そして二重化処理部132は、ステップS503で作成したSetコマンドとハートビート(HB)を含む同期化データをコントローラ装置10Bに送信し(ステップS504)、送信済みフラグを「true」に変更し(ステップS505)、同期化データ送信処理を終了する。なお、ステップS504で送信する同期化データには、Setコマンド及びHBの他に、ステップS101,S102でコントローラ装置10A(より詳しくは制御アプリ131)に設定された計画データ(またはその内容を示す情報)が含まれる。
第3に、ステップS502の確認結果について、送信済みフラグが「false(データ一致化コマンド未送信)」かつ受信済みフラグが「true(データ一致化コマンド受信済み)」の組み合わせであった場合は、二重化処理部132は、二重化対象のコントローラ装置10Bに返信するためのデータ一致化コマンドとして、Ackコマンドを作成する(ステップS506)。
そして二重化処理部132は、ステップS506で作成したAckコマンドとハートビート(HB)とからなる同期化データをコントローラ装置10Bに送信し(ステップS507)、送信済みフラグを「true」に変更する(ステップS508)。なお、ステップS507で送信する同期化データには、Ackコマンド及びHBの他に、ステップS101,S102でコントローラ装置10A(より詳しくは制御アプリ131)に設定された計画データ(またはその内容を示す情報)が含まれる。
そして、ステップS508の処理が完了したとき、データ一致化フラグ、送信済みフラグ、及び受信済みフラグがすべて「true」となり、図5の説明でも前述したように、二重化対象とのデータ一致化が完了したことを意味する。このとき、二重化処理部132は、データ管理テーブル123に記録された仮変数値1233を対応する実際の変数にコピーする(ステップS509)。ステップS509において、計画データに基づいて設定された仮変数値1233が実際の変数にコピーされることによって、制御対象装置30に対する実際の制御処理に当該計画データが適用される。なお、図10のステップS302と同様に、ステップS509における仮変数値のコピーでは、一致化対象フラグ1234が「true」である変数のみを対象として行うことが想定できる。その後、二重化処理部132は、フラグ管理テーブル122におけるデータ一致化フラグ、送信済みフラグ、及び受信済みフラグのすべてを「false」にリセットし(ステップS510)、同期化データ送信処理を終了する。
次に、同期化データ受信処理について詳しく説明する。図13は、同期化データ受信処理の処理手順の一例を示すフローチャートである。
図13によれば、ステップS601において、二重化処理部132は同期化データ受信を行う。同期化データ受信の詳細は、図14を参照して後述する。
次いで、二重化処理部132は、同期化データ受信の結果がタイムアウトであったか否かを確認し(ステップS602)、タイムアウトであった場合は(ステップS602のYES)、動作状態管理テーブル121の動作状態1211をStandaloneに変更し(ステップS610)、同期化データ受信処理を終了する。なお、ステップS602におけるタイムアウトの確認は、ステップS601の同期化データ受信のなかで行われるタイムアウトの判定(図14のステップS701参照)に基づいて行われる。
同期化データ受信の結果がタイムアウトでなかった場合は(ステップS602のNO)、二重化処理部132はステップS601で受信した同期化データの種類を確認する(ステップS603)。
ステップS603の確認において、受信した同期化データがハートビートのみであった場合は(ステップS603のHB)、図12のステップS511で説明した同期化データ送信を二重化対象のコントローラ装置10Bから受信したことを意味する。このとき、二重化処理部132は、現状を維持するため、特段の処理を行わずに同期化データ受信処理を終了する。
また、ステップS603の確認において、受信した同期化データがSetコマンド及びハートビートであった場合は(ステップS603のSetコマンド+HB)、図12のステップS504に示した同期化データ送信を二重化対象のコントローラ装置10Bから受信したことを意味する。このとき、二重化処理部132は、Setコマンド情報をデータ管理テーブル123にコピーする(ステップS604)。さらに、二重化処理部132は、フラグ管理テーブル122においてデータ一致化フラグを「true(データ一致化実施中)」に設定し(ステップS605)、受信済みフラグを「true(データ一致化コマンド受信済み)」に設定し(ステップS606)、同期化データ受信処理を終了する。
また、ステップS603の確認において、受信した同期化データがAckコマンド及びハートビートであった場合は(ステップS603のAckコマンド+HB)、図12のステップS507に示した同期化データ送信を二重化対象のコントローラ装置10Bから受信したことを意味する。このとき、二重化処理部132は、フラグ管理テーブル122の受信済みフラグを「true(データ一致化コマンド受信済み)」に設定する(ステップS607)。
ステップS607の処理が完了したとき、データ一致化フラグ、送信済みフラグ、及び受信済みフラグがすべて「true」となる(二重化対象とのデータ一致化が完了したことを意味する)。そこで二重化処理部132は、データ管理テーブル123に記録された仮変数値1233を対応する実際の変数にコピーし(ステップS608)、フラグ管理テーブル122におけるデータ一致化フラグ、送信済みフラグ、及び受信済みフラグのすべてを「false」にリセットし(ステップS609)、同期化データ送信処理を終了する。ステップS608〜S609の処理は、同期化データ送信処理(図12)におけるステップS509〜S510の処理と同様である。特に、ステップS608において、計画データに基づいて設定された仮変数値1233が実際の変数にコピーされることによって、制御対象装置30に対する実際の制御処理に当該計画データが適用される。
ここで、図14を参照しながら、ステップS601における同期化データ受信の詳細を説明する。図14は、同期化データ受信における処理手順の一例を示すフローチャートである。
図14によれば、まず、二重化処理部132は、予め設定された所定のタイムアウト時間が経過したか否かを確認する(ステップS701)。ステップS701においてタイムアウトした場合は(ステップS701のYES)、同期化データの受信がなかったとして同期化データ受信を終了する。
ステップS701においてタイムアウトしていない場合は(ステップS701のNO)、同期化データの受信を実行し(ステップS702)、受信データの有無を確認する(ステップS703)。ステップS703において受信データがあった場合は(ステップS703のYES)、同期化データ受信を終了する。ステップS703において受信データがなかった場合は(ステップS703のNO)、一定時間スリープさせ(ステップS704)、その後再びステップS701の処理に戻る。
以上、図14に示した同期化データ受信によれば、タイムアウトまでに同期化データを受信するか、または、同期化データを受信せずにタイムアウトするまで、同期化データの受信が行われる。
以上、二重化システム1を構成するコントローラ装置10A,10Bのそれぞれにおいて図11〜図14に示した処理が行われることによって、コントローラ装置10Aは二重化対象のコントローラ装置10Bとの間でデータを同期化することができる。
(2−2)出力データ書込み
以下では、出力データ書込み(図7のステップS104)について詳しく説明する。図15は、出力データ書込みにおける処理手順の一例を示すフローチャートである。
図7のステップS104で述べたように、図7の説明で前述したように、出力データ書込みは、コントローラ装置10の制御実行部130が、制御ロジックの実行(ステップS102)に基づく結果等を出力する処理であって、二重化処理(図7のステップS103)の完了後に実行される。したがって、コントローラ装置10A,10Bによって二重化システム1が構成されている場合、二重化処理によって両コントローラ装置10A,10Bの間でデータ一致化が完了するまでは、制御系のコントローラ装置10Aの制御実行部130は、出力データの書込みを開始しない。
図15によれば、まず、制御実行部130は、動作状態管理テーブル121を参照して、自コントローラ装置10(例えばコントローラ装置10A)の動作状態1211を確認する(ステップS801)。
次に、ステップS801において動作状態1211が「Bootup」または「Standby」であった場合には、コントローラ装置10Aは出力データの書込みを行う必要または資格がなく、特段の処理を行わずに出力データ書込みを終了する。一方、ステップS801において動作状態1211が「Active」または「Standalone」であった場合には、コントローラ装置10Aは出力データの書込みを行う立場であるため、制御ロジックの実行に基づく結果等(出力データ)の書込みを実行し(ステップS802)、出力データ書込みを終了する。
(3)計画データ設定処理
前章までに説明してきたように、本実施の形態に係るコントローラ装置10Aでは、計画サーバ20から計画情報(計画データ)を受信した場合に、制御実行部130が制御実行処理を行うことによって、同じ計画データを受信したコントローラ装置10Bとの間でデータを一致化させ、データ一致化の完了後、計画データに基づく制御アプリ131の実行結果をスレーブ機器(制御対象装置30)に出力することで当該計画データが設定される。
さらに、本実施の形態に係るコントローラ装置10Aでは、上記の制御実行部130による制御実行処理とは別に、計画受信部110が、受信した計画データがコントローラ装置10A,10Bに設定された(当該計画データが制御実行部130による定周期の制御処理に適切に反映された)か否かを確認し、計画データの送信元に通知することができる(計画データ設定処理)。本章ではこの計画データ設定処理について詳しく説明する。
図16は、計画データ設定処理の処理手順の一例を示すフローチャートである。以下、コントローラ装置10Aの計画受信部110が実行するものとして図16の各処理を説明するが、実際には、コントローラ装置10Bでも同様に、計画受信部110が計画データ設定処理を行う。
図16に示したように、ステップS901において、計画受信部110は計画情報(計画データ)を受信する。次に、計画受信部110はフラグ管理テーブル122を参照し、「データ一致化フラグ」の値1222を確認する(ステップS902)。
ステップS902の確認においてデータ一致化フラグが「true(データ一致化実施中)」であった場合、計画受信部110は、自コントローラ装置10Aにおいてデータ一致化の処理中であることを示す信号(データ一致化処理中エラー)を計画サーバ20に送信し(ステップS910)、計画データ設定処理を終了する。
このような場合、計画サーバ20は、データ一致化処理中エラーを受信することによって、コントローラ装置10Aにおいて、送信した計画データに基づくデータ一致化の処理中であって、当該計画データの設定が完了していないことを認識できる。そこで計画サーバ20では、例えば次の計画データの送信が準備されていた場合に、次の計画データの送信を待機させる等の判断が可能となる。
一方、ステップS902の確認においてデータ一致化フラグが「false(データ一致化実施中でない)」であった場合、ステップS901の計画データの受信に基づいてデータ一致化を実行可能な状態であることから、計画受信部110は、受信した計画データをデータ管理テーブル123に設定し(ステップS903)、フラグ管理テーブル122のデータ一致化フラグを「true(データ一致化実施中)」に設定する(ステップS904)。
そして、計画受信部110は、予め設定された所定のタイムアウト時間が経過したか否かを確認する(ステップS905)。上記タイムアウト時間は、制御実行部130によるデータ一致化の全体処理に関するタイムアウトを規定した時間である。
ステップS905の確認においてタイムアウトであれば(ステップS905のYES)、計画受信部110は、タイムアウトエラーを計画サーバ20に送信し(ステップS909)、計画データ設定処理を終了する。
このような場合、計画サーバ20は、タイムアウトエラーを受信することによって、コントローラ装置10Aにおいて、送信した計画データに基づくデータ一致化処理が正常に完了せず、当該計画データがコントローラ装置10Aに適切に設定されなかったことを認識できる。そこで、計画サーバ20では、先の計画データを再送信するよう判断したり、または、コントローラ装置10A,10Bにおける故障や不具合の可能性を推測したりすることができる。
一方、ステップS905の確認においてタイムアウトでなければ(ステップS905のNO)、計画受信部110はフラグ管理テーブル122を参照し、「データ一致化フラグ」の値1222を確認する(ステップS906)。ステップS906の確認においてデータ一致化フラグが「true(データ一致化実施中)」であれば、一定時間のスリープを経て(ステップS908)、再度ステップS905に戻ってタイムアウトの確認を行う。また、ステップS906の確認においてデータ一致化フラグが「false(データ一致化実施中でない)」となっていた場合は、二重化システム1のコントローラ装置10A,10B間でデータ一致化が完了し、当該計画データが適切に反映された(設定された)ことを意味している。そこで計画受信部110は、計画データの設定が完了したことを示す設定OKコマンドを計画サーバ20に送信し(ステップS907)、計画データ設定処理を終了する。
このような場合、計画サーバ20は、設定OKコマンドを受信することによって、コントローラ装置10A,10Bにおいて、送信した計画データに基づくデータ一致化処理が正常に完了し、当該計画データがコントローラ装置10A,10Bに設定されたことを認識できる。そこで、計画サーバ20では、設定OKコマンドを受信済みであることを条件として、次回の計画データの送信を許可するといった制御が可能となる。コントローラ装置10A,10Bの双方から設定OKコマンドを受信済みであることを条件とすれば、さらに安定性を高めることができる。
以上のように、図16のステップS901〜S910の処理が行われることによって、計画受信部110は、制御実行部130による制御処理の制御周期とは異なるタイミングで外部(例えば計画サーバ20)から受信した計画データについて、当該計画データのコントローラ装置10A,10Bへの設定状況(制御処理に適切に反映されたか否か)を、当該計画データの送信元に通知することができる。かくして、二重化システム1における計画データの設定に関する確実性を高め、安定した二重化システム1の運用に貢献する。
(4)まとめ
本実施の形態に係るコントローラ装置10は、EtherCAT等のフィールドバス通信プロトコルを利用して、フィールドバス経由の入力データ(例えば計画データ)を制御系のコントローラ装置10A及び待機系のコントローラ装置10Bで常に一致させた場合、制御実行部130による制御実行処理において計画データを死活監視情報(ハートビート)と合わせて送信可能とすることによって、同期化情報を通信するために必要な同期化通信の回数は、1制御周期あたり1回(同期化データ送信のみ)となり、同期化通信の時間の増大に伴う制御アプリの実行時間の増加を抑制することができる。
さらに、本実施の形態によれば、定周期で制御アプリ131が実行される制御処理の1周期目において、二重化動作処理の同期化データ送信処理及び同期化データ受信処理によってコントローラ装置10A,10Bに設定された計画データのデータ一致化が完了し、2周期目の制御処理の開始時には、当該計画データの実際の制御処理への適用(仮変数値の実際の変数への適用:図12のステップS509,図13のステップS608)が可能になる。このように制御周期に合わせた制御が行われることにより、制御系・待機系双方のコントローラ装置10A,10Bにおいて制御実行タイミングがずれないため、制御系と待機系を切替えるとき等であっても、制御対象装置30に対する定周期制御を維持することができ、安定的に制御系と待機系を切替えることが可能となる。
また、本実施の形態に係るコントローラ装置10は、上述したように、制御実行部130(二重化処理部132)による二重化動作処理において、コントローラ装置10A,10Bでデータ一致化が完了した場合(データ一致化フラグ、送信済みフラグ、受信済みフラグが全て「true」になった場合)に初めて、データ管理テーブル123に記録された仮変数値1233を実際の変数にコピーする。すなわち、コントローラ装置10が、制御処理の制御周期とは異なるタイミングで外部から入力データ(例えば、計画サーバ20からの計画データ)を受信したとしても、二重化システム1における同期化が確定するまでは、制御対象装置30への実際の制御処理に当該入力データが反映されず、二重化システム1の二重化の信頼性や安定性を高めることができる。
また、本実施の形態に係る二重化システム1において、上述した制御実行処理は、制御処理の制御周期とは異なるタイミングで外部から入力される入力データ(例えば、計画サーバ20からの計画情報)を受信した場合に行うものとし、制御処理の制御周期と同じタイミングで入力される入力データを受信した場合には、一部の処理を行わないようにすることができる。
具体的には例えば、制御アプリ131に入力データを設定してから(図7のステップS101,S102)、二重化動作処理(同ステップS103)を行わずに、出力データ書込み(同ステップS104)を行うようにすることができる。これは、二重化システム1を構成する2台のコントローラ装置10A,10Bの双方で、常に同じタイミングで同じインプットを用いて制御処理が行われる場合には、常に同じ演算結果を得ることが可能となるためであり、制御処理の制御周期に合わせて上記入力が行われる場合には、二重化動作処理を省略することができる。このようにすることで、二重化システム1では、コントローラ装置10A,10B間の同期化通信の通信量を削減し、同期化処理に伴う制御処理時間の増大を抑制することができる。但し、この場合でも、ハートビートを用いた死活監視通信は行うようにしてもよい。
なお、本発明は、上記の実施の形態で説明した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記の実施の形態で説明した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。したがって実施例の構成の一部について、削除や他の構成の追加・置換をしてもよい。
また、上記の実施の形態において説明した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実施には殆ど全ての構成が相互に接続されていると考えてもよい。