説明

二重化制御装置

【課題】 構成が複雑になることを回避し、安価な二重化制御装置を提供する。
【解決手段】 第1コントローラ10と、第2コントローラ11と、外部機器14、15と接続可能なI/Oモジュール12、13と、第1コントローラ10が実装される第1スロット1−1、第2コントローラ11が実装される第2スロット1−2、および、I/Oモジュール12、13が実装される複数のスロット1−3〜1−N、を備えた入出力バス1と、を備え、第1コントローラ10および第2コントローラ11のそれぞれは、制御部102、112と、入出力バス1へデータを出力するおよび入出力バス1からデータが入力されるインタフェース部101、111と、制御部102、112およびインタフェース部101、111からアクセス可能なメモリ100、110と、を備え、入出力バス1はパラレルバス、シリアルバス、LANケーブルのいずれかであることを特徴とする二重化制御装置。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、二重化制御装置に関する。
【背景技術】
【0002】
工場や公共施設等の各種プラントの動作を制御するコントローラには、このコントローラに何等かの異常が発生して、制御対象のプラントが停止すると重大な事故に至る恐れがある。
【0003】
一般に、このような制御対象に対しては、同一構成の2つのコントローラを接続して、いずれか一方を稼動系、他方を待機系として、通常は稼動系のみで制御対象を制御し、稼動系に異常が生じたときに、待機系を稼動系用に切り替え、制御を続行するように構成される待機冗長型の二重化制御装置がある。
【0004】
このような二重化制御装置においては、2つのコントローラのうち、一方が稼動状態で、かつ他方がバックアップに備えて待機状態となり、コントローラ間で互いに相手の運転状態を監視し、稼動系がダウンしたら待機系がそれを検知し、待機系を稼動系に切替えて制御を継続して実行している。
【0005】
そのため、従来の二重化制御装置は、互いに相手のコントローラの状態を検知及び通知するためのステータス伝送路(バス)とそれをインタフェースするステータス伝送路(バス)入出力ポートと、コントローラがバックアップ時に制御を継続して実行するためのデータとなる実行結果情報を相手のコントローラに転送するためのデータ伝送路(バス)とそれをインタフェースするデータ伝送路(バス)インタフェースと、実行結果情報を受信及び送信するためのバッファとを備えるようにしている。
【0006】
このような構成によれば、システムダウンの確率が軽減され、信頼度の高い二重化制御装置を構成することができる。
【0007】
従来の二重化機能を備えたコントローラは、その重要性から専用の二重化制御部を備え、その二重化制御部を使用して二重化情報を専用にやりとりしながら二重化方式を実現していた。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2008−146239号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
従来の二重化機能を備えたコントローラは、専用の二重化制御部により高速で大量の二重化情報のやりとりを可能とするため、二重化制御部の構成が複雑になり且つ比較的高価になる。そのため小規模なプラントや製造ライン等の産業分野で使用されるコントローラでは、高価な仕組みを採用することが困難であった。
【0010】
本発明は、上記事情を鑑みて成されたものであって、構成が複雑になることを回避し、安価な二重化制御装置を提供することを目的とする。
【課題を解決するための手段】
【0011】
実施形態による二重化制御装置は、第1コントローラと、第2コントローラと、外部機器と接続可能なI/Oモジュールと、前記第1コントローラが実装される第1スロット、前記第2コントローラが実装される第2スロット、および、前記I/Oモジュールが実装される複数のスロット、を備えた入出力バスと、を備え、前記第1コントローラおよび前記第2コントローラのそれぞれは、制御部と、前記入出力バスへデータを出力するおよび前記入出力バスからデータが入力されるインタフェース部と、前記制御部および前記インタフェース部からアクセス可能なメモリと、を備え、前記入出力バスはパラレルバスである。
【図面の簡単な説明】
【0012】
【図1】実施形態の二重化制御装置の一構成例を説明するための図である。
【図2】図1に示す二重化制御装置のデータの流れの一例を説明するための図である。
【図3】図1に示す二重化制御装置のデータの流れの一例を説明するための図である。
【図4】図1に示す入出力バスのスロットおよびI/O空間の割り付けの一例を示す図である。
【図5】図1に示す二重化制御装置の初期化処理の一例を説明するためのフローチャートである。
【図6】図1に示す二重化制御装置の稼動系処理の一例を説明するためのフローチャートである。
【図7】図1に示す二重化制御装置の待機系処理の一例を説明するためのフローチャートである。
【図8】図1に示す二重化制御装置の稼動系処理および待機系処理の一例を説明するためのタイミングチャートである。
【図9】図1に示す二重化制御装置の切り替わり動作の一例を説明するためのタイミングチャートである。
【発明を実施するための形態】
【0013】
以下、実施形態について、図面を参照して説明する。
図1に、本実施形態の二重化制御装置の一構成例を示す。本実施形態に係る二重化制御装置は、プライマリ側コントローラ10と、セカンダリ側コントローラ11と、I/O出力モジュール12と、I/O入力モジュール13と、入出力バス1と、を備えている。プライマリ側コントローラ10、セカンダリ側コントローラ11と、I/O出力モジュール12と、I/O入力モジュール13とは、それぞれが入出力バス1に設けたスロットに実装され、入出力バス1により互いに信号を送受信することが可能に構成されている。
【0014】
プライマリ側コントローラ10は、入出力バス1への信号の送信および入出力バス1からの信号の受信を行うためのインタフェース部101と、メモリMEMP100と、インタフェース部101およびメモリMEMP100を制御するCPU部102と、を備えている。
【0015】
メモリMEMP100は、インタフェース部101と接続されている。したがって、プライマリ側コントローラ10は、セカンダリ側コントローラ11、I/O出力モジュール12、および、I/O入力モジュール13から受信されるデータの書き込み、および、データの読み出しが可能である。またCPU部102からメモリMEMP100へのデータの書き込みおよびメモリMEMS110からCPU部102へのデータの読み出しも可能である。
【0016】
インタフェース部101とCPU部102とは、内部バス103で接続されている。CPU部102は、内部バス103、インタフェース部101および入出力バス1を介して、他のモジュール11、12、13のメモリMEMS110、MEMO120、MEMI130を直接読み書きすることができる。
【0017】
CPU部102は、入出力バス1に実装されたスロット位置で、プライマリ側であるかセカンダリ側であるかを判断する手段(図示せず)と、相手の運転モード等から自身が稼動系であるか待機系であるかを判断する手段(図示せず)と、を備えている。
【0018】
プライマリ側コントローラ10、すなわち、CPU部102が、稼動系コントローラに搭載される場合には、さらに、I/O入力モジュール12、13にデータを入出力する手段(図示せず)と、ユーザ制御プログラムを実行する手段(図示せず)と、待機系コントローラと実行結果データを等値化するために待機系コントローラのメモリに実行結果データを書き込む手段(図示せず)と、自身の運転モードを待機系コントローラのメモリに書き込み、且つ、相手の運転モードを待機系コントローラのメモリから読み出す手段(図示せず)と、を備える。
【0019】
CPU部102が、待機系コントローラに搭載される場合には、さらに、自分の運転モードを自分のメモリに書き込み、相手から自分のメモリに書き込まれた相手の運転モードを読み出し次の運転モードを判定する手段(図示せず)と、自分を稼動系として運転する手段(図示せず)とを備える。
【0020】
セカンダリ側コントローラ11は、プライマリ側コントローラ10と同様の構成である。すなわち、セカンダリ側コントローラ11は、入出力バス1への信号の送信および入出力バス1からの信号の受信を行うためのインタフェース部111と、メモリMEMS110と、インタフェース部111およびメモリMEMS110を制御するCPU部112と、を備えている。
【0021】
メモリMEMS110は、インタフェース部111と接続されている。したがって、セカンダリ側コントローラ11は、プライマリ側コントローラ10、I/O出力モジュール12、および、I/O入力モジュール13から受信されるデータの書き込み、および、データの読み出しが可能である。またCPU部112からメモリMEMS110へのデータの書き込みおよびメモリMEMS110からCPU部112へのデータの読み出しも可能である。
【0022】
インタフェース部111とCPU部112とは、内部バス113で接続されている。CPU部112は、内部バス113、インタフェース部111および入出力バス1を介して、他のモジュール10、12、13のメモリMEMP100、MEMO120、MEMI130を直接読み書きすることができる。
【0023】
CPU部112は、入出力バス1に実装されたスロット位置で、プライマリ側であるかセカンダリ側であるかを判断する手段(図示せず)と、相手の運転モード等から自身が稼動系であるか待機系であるかを判断する手段(図示せず)と、を備えている。ここでの判断方法については初期化処理として後に説明する。
【0024】
セカンダリ側コントローラ10、すなわち、CPU部112が、稼動系コントローラに搭載される場合には、さらに、I/O入力モジュール12、13にデータを入出力する手段(図示せず)と、ユーザ制御プログラムを実行する手段(図示せず)と、待機系コントローラと実行結果データを等値化するために待機系コントローラのメモリに実行結果データを書き込む手段(図示せず)と、自身の運転モードを待機系コントローラのメモリに書き込み、且つ、相手の運転モードを待機系コントローラのメモリから読み出す手段(図示せず)と、を備える。
【0025】
CPU部112が、待機系コントローラに搭載される場合には、さらに、自分の運転モードを自分のメモリに書き込み、相手から自分のメモリに書き込まれた相手の運転モードを読み出し次の運転モードを判定する手段(図示せず)と、自分を稼動系として運転する手段(図示せず)とを備える。
【0026】
上記プライマリ側コントローラ10およびセカンダリ側コントローラ11は、入出力バス1のプライマリ側用スロットとセカンダリ側用スロットに実装し、その他のスロットにはI/Oモジュールを実装する。
【0027】
入出力バス1は、コントローラやI/O入力モジュール、I/O出力モジュールを実装するための複数のスロット1−1〜1−Nを備えている。スロット1−1は、プライマリ側コントローラ10を実装し、スロット1−2は、セカンダリ側コントローラ11を実装する。スロット1−3以降のスロットには、I/O出力モジュール12やI/O入力モジュール13を実装可能としている。入出力バス1は、例えば、PCI(Peripheral Component Interconnect)バスやISA(Industry Standard Architecture)バス等のパラレルバスである。なお、入出力バス1は、シリアルバスであってもよく、イーサネット(登録商標)ケーブル等のローカルエリアネットワーク(LAN)ケーブルであってもよい。
【0028】
I/O出力モジュール12には、入出力バス1とインタフェースを行うためのインタフェース部121と、外部出力機器14へデータを出力する出力インタフェース部122と、インタフェース部121を介してプライマリ側コントローラ10およびセカンダリ側コントローラ11からデータの読み書きが可能で、且つ、出力インタフェース部122からもデータの読み書きが可能なメモリMEMO120と、を備えている。メモリMEMO120は、インタフェース部121と、出力インタフェース部122とに接続されている。出力インタフェース部122は、常時、メモリMEMO120に書き込まれた出力データを外部出力機器14へ出力する。
【0029】
I/O入力モジュール13には、入出力バス1とインタフェースを行うためのインタフェース部131と、外部入力機器15からのデータが入力される入力インタフェース部132と、インタフェース部131を介してプライマリ側コントローラ10およびセカンダリ側コントローラ11からデータの読み書きが可能で、且つ、入力インタフェース部132からもデータの読み書きが可能なメモリMEMI130と、を備えている。メモリMEMI130は、インタフェース部131と入力インタフェース部132とに接続されている。及び、入力インタフェース部132は、常時、外部入力機器15から入力された入力データをメモリMEMI130に書き込む。
【0030】
図4に、入出力バス1のI/O空間40とスロット1−1〜1−Nの割り付けの一例を示す。スロット1−1〜1−Nそれぞれに、一定のI/O空間が割り当てられ、該当スロットの空間内に該当スロットのインタフェース部に接続されたメモリMEMP100、MEMS110、MEMO120、MEMI130が割り付けられている。
【0031】
スロット1−1のメモリ空間には、プライマリ側コントローラ10のメモリMEMP100が割り付けられ、スロット1−2のメモリ空間には、セカンダリ側コントローラ11のメモリMEMS110が割り付けられている。スロット1−3以降には、実装されているI/O出力モジュール12のメモリMEMO120、I/O入力モジュール13のメモリMEMI130が各々割り付けられている。
【0032】
スロット1−1とスロット1−2のI/O空間に割り付けられているメモリ空間は、二重化情報部46、47として、稼動系コントローラと待機系コントローラとで二重化情報のやりとりを行うためのメモリとして使用する。
【0033】
I/O空間の二重化情報部46、47は、自身の運転モードを明示するメモリ410と、相手の運転モードを明示するメモリ411と、実行結果を等値化するために相手から実行結果データ書き込まれるメモリ412と、を含む。
【0034】
これら二重化情報部46、47は、稼動系コントローラと待機系コントローラとの間で相手のコントローラから互いに読み書きができ、自信のコントローラ内でも読み書きができる。
【0035】
スロット1−3以降のスロットに割り付けられたI/O空間に割り付けられているメモリMEMO120、MEMI130は、I/O出力モジュール12のメモリMEMO120であれば、出力レジスタ部48で構成され、各出力レジスタ0〜Mに稼動系コントローラから出力データが書き込まれ、この出力レジスタの出力データは、出力インタフェース部122により外部出力機器14に出力される。
【0036】
I/O入力モジュール13のメモリMRMI130であれば、入力レジスタ部49で構成され、各入力レジスタ0〜Nには、入力インタフェース部132により外部入力機器15から入力した入力データが書き込まれ、稼動系コントローラから入力データとして読み出される。
【0037】
上記のように、プライマリ側コントローラ10およびセカンダリ側コントローラ11は、I/O空間にアクセスすることで、プライマリ側コントローラ10、セカンダリ側コントローラ11、I/O出力モジュール12、および、I/O入力モジュール13に具備されたインタフェース部101、111、121、131に接続されたメモリMEMP100、MEMS110、MEMO120、MEMI130に自由にアクセスできる。
【0038】
図2は、プライマリ側コントローラ10が稼動系コントローラで、セカンダリ側コントローラ11が待機系コンロトーラである場合の、データの流れの一例を示している。稼動系コントローラ10から、I/O出力モジュール12へ出力データを出力する時のデータの流れ2−1は、先ず、CPU部102からデータが、内部バス103を介してインタフェース部101へ出力される。インタフェース部101へ出力されたデータは、更に、入出力バス1を通って、I/O出力モジュール12のインタフェース部121に出力される。次に、インタフェース部121を介して、メモリMEMO120の出力レジスタ部48の各出力レジスタ413、414、415、416に書き込まれる。
【0039】
更に、常時、出力インタフェース部122により、出力レジスタ部48の各出力レジスタ413、414、415、416に書き込まれた出力データを、外部出力機器14に出力する(2−2)。
【0040】
次に、稼動系コントローラ10により、I/O入力モジュール13の入力データを入力する時のデータの流れ2−3について説明する。先ず、CPU部102から、入力するレジスタの読み出しを要求すると、読み出し要求が、内部バス103を介して、インタフェース部101へ出力され、更に、入出力バス1を通って、I/O入力モジュール13のインタフェース部131に出力される。インタフェース部131が読み出し要求に従って、メモリMEMI130の入力レジスタ部49の各入力レジスタ417、418、419、420から読み出した入力データを、今度は、入出力バス1を介して、稼動系コントローラ10のインタフェース部101へ入力し、インタフェース部101から、内部バス103を介して、CPU部102へ入力データが入力される。
【0041】
更に、常時、入力インタフェース部132により、外部入力機器15から入力した入力データを、入力レジスタ部49の各出力レジスタ417、418、419、420に書き込む(2−4)。
【0042】
次に、稼動系コントローラ10から、待機系コントローラ11のメモリMEMS110にデータを書き込む時のデータの流れ2−5の一例を説明する。先ず、CPU部102から、出力データが、内部バス103を介して、インタフェース部101へ出力され、更に、入出力バス1を通って、待機系コントローラ11のインタフェース部111に出力される。次に、インタフェース部111を介して、メモリMEMS110に書き込まれる。更に、メモリMEMS110に書き込まれたデータはCPU部112により読み出し可能である(2−6)。
【0043】
次に、稼動系コントローラ10から、待機系コントローラ11のデータを読み出す時のデータの流れ2−7の一例を説明する。先ず、CPU部102からメモリの読み出しを要求すると、読み出し要求が、内部バス103を介して、インタフェース部101へ出力され、更に、入出力バス1を通って、待機系コントローラ11のインタフェース部111に出力される。次に、インタフェース部111が読み出し要求に従って、メモリMEMS110から読み出したデータを、今度は、入出力バス1を介して、コントローラ10のインタフェース部101へ入力し、インタフェース部101から、内部バス103を介して、CPU部102へデータが読み込まれる。なお、CPU部112から自身のメモリMEMS110へデータの書き込むことも可能である(2−8)。
【0044】
図3は、セカンダリ側コントローラ11が稼動系コントローラで、プライマリ側コントローラ10が待機系コントローラである場合のデータの流れの一例を示している。稼動系コントローラ11から、I/O出力モジュール12へ出力データを出力する時のデータの流れ3−1の一例について説明する。先ず、CPU部112から、出力データが、内部バス113を介して、インタフェース部111へ出力され、更に、入出力バス1を通って、I/O出力モジュール12のインタフェース部121に出力される。次に、インタフェース部121を介して、メモリMEMO120の出力レジスタ部48の各出力レジスタ413、414、415、416に書き込まれる。更に、常時、出力インタフェース部122により、出力レジスタ部48の各出力レジスタ413、414、415、416に書き込まれた出力データを、外部出力機器14に出力する(3−2)。
【0045】
次に、稼動系コントローラ11から、I/O入力モジュール13の入力データを入力する時のデータの流れ3−3の一例について説明する。先ず、CPU部112から、入力するレジスタの読み出しを要求すると、読み出し要求が、内部バス113を介して、インタフェース部111へ出力され、更に、入出力バス1を通って、I/O入力モジュール13のインタフェース部131に出力される。次に、インタフェース部131が読み出し要求に従って、メモリMEMI130の入力レジスタ部49の各入力レジスタ417、418、419、420から読み出した入力データを、今度は、入出力バス1を介して、コントローラ11のインタフェース部111へ入力し、インタフェース部111から、内部バス113を介して、CPU部112へ入力データが入力される。更に、常時、入力インタフェース部132により、外部入力機器15から入力した入力データを、入力レジスタ部49の各出力レジスタ417、418、419、420に書き込む(3−4)。
【0046】
次に、稼動系コントローラ11から、待機系コントローラ10のメモリMEMP100にデータを書き込む時のデータの流れ3−5の一例について説明する。先ず、CPU部112から、出力データが、内部バス113を介して、インタフェース部111へ出力され、更に、入出力バス1を通って、待機系コントローラ10のインタフェース部101に出力される。次に、インタフェース部101を介して、メモリMEMP100に書き込まれる。更に、メモリMEMP100に書き込まれたデータはCPU部102で読み出し可能である(3−6)。
【0047】
次に、稼動系コントローラ11から、待機系コントローラ10のデータを読み出す時のデータの流れ3−7の一例について説明する。先ず、CPU部112からメモリの読み出しを要求すると、読み出し要求が、内部バス113を介して、インタフェース部111へ出力され、更に、入出力バス1を通って、待機系コントローラ10のインタフェース部101に出力される。次に、インタフェース部101が読み出し要求に従って、メモリMEMP100から読み出したデータを、今度は、入出力バス1を介して、稼動系コントローラ11のインタフェース部111へ入力し、インタフェース部111から、内部バス113を介して、CPU部112へデータが読み込まれる。
【0048】
図5は、プライマリ側コントローラ10およびセカンダリ側コントローラ11のCPU部102、112において、稼動系と待機系との選択する初期化処理(ステップ5−1)の一例を示すフローチャートである。プライマリ側コントローラ10およびセカンダリ側コントローラ11のCPU部102、112は、最初に自分がプライマリ側であるかセカンダリ側であるかを判断し、相手の運転モードにより自分を稼動系に立ち上げるか、待機系に立ち上げるかを以下のように判断する。
【0049】
先ず、相手監視時間をクリアする(ステップ5−2)。次に相手のメモリの二重化情報部46、47から相手の運転モードを読み出す(ステップ5−3)。次に、相手の運転モードが稼動系の運転であれば(既に稼動系で運転中であれば)、待機系処理(ステップ7−1)へ移行する(ステップ5−4)。
【0050】
次に、自分がプライマリ側であれば稼動系処理(ステップ6−1)へ移行する(ステップ5−5)。次に、相手監視時間を更新する(ステップ5−6)。相手監視時間が所定の時間をオーバーしていなければ、再度、相手のメモリの二重化情報部46、47から相手の運転モードを読み出し、同じ動作を繰り返す。相手監視時間が所定の時間をオーバーしていれば、稼動系処理(ステップ6−1)へ移行する(ステップ5−7)。
【0051】
図6は、プライマリ側コントローラ10およびセカンダリ側コントローラ11のCPU部102、112に実装されている稼動系処理(ステップ6−1)と二重化トラッキング処理(ステップ6−7)と停止処理(ステップ6−12)との一例を示すフローチャートである。稼動系処理(ステップ6−1)と二重化トラッキング処理(ステップ6−7)とはスキャン周期に従って定期的に実行される。
【0052】
稼動系処理(ステップ6−1)では、先ず、自分の運転モード(稼動系を示す運転モード)を相手(待機系側)のメモリの二重化情報部46、47の相手の運転モードメモリ411に書き込む(ステップ6−2)。
【0053】
次に、I/O入力モジュール13のメモリMRMI(メモリ49)から入力データを読み出す(ステップ6−3)。次に、読み出した入力データを元にユーザ制御プログラムを実行する(ステップ6−4)。次に、ユーザ制御プログラムの実行で得られた出力データをI/O出力モジュール12のメモリMEMO120(メモリ48)へ書き込む(ステップ6−5)。
【0054】
以上の処理の中で異常が発生していなければ、二重化トラッキング処理(ステップ6−7)へ移行し、異常が発生していれば、停止処理(ステップ6−12)へ移行する(ステップ6−6)。
【0055】
二重化トラッキング処理(ステップ6−7)では、先ず、相手(待機系側)のメモリの二重化情報部46、47の自分の運転モードメモリ410から運転モードを読み出し、相手が待機系の運転モードであれば(ステップ6−9)、稼動系処理(ステップ6−1)でユーザ制御プログラムを実行した時の実行結果データを、相手(待機系側)のメモリの二重化情報部46、47の等値化用の実行結果データメモリ412へ書き込み、稼動系と待機系との実行状態を等値化する(ステップ6−10)。
【0056】
次に、次のスキャン周期に達するまで実行を待ち、次のスキャン周期に達したら、繰り返し稼動系処理を実行する(ステップ6−11)。
【0057】
停止処理(ステップ6−12)では、自分の停止モードを相手のメモリの二重化情報部46、47の相手の運転モードメモリ411へ書き込む(ステップ6−13)。次に、再スタートの要求がなければ停止処理を最初から実行し、再スタート要求があれば、図5で示した初期化処理(ステップ5−1)から実行を開始する(ステップ6−14)。
【0058】
図7は、プライマリ側コントローラ10およびセカンダリ側コントローラ11のCPU部102、112での待機系処理(ステップ7−1)の一例を示すフローチャートである。待機系処理(ステップ7−1)では、先ず、自分のメモリの二重化情報部46、47の自分の運転モードメモリ410に自分の運転モード(待機系を示す運転モード)を書き込む、(ステップ7−2)。この運転モードは、稼動系コントローラの稼動系処理(ステップ6−1)の中で読み出される(ステップ6−8)。
【0059】
次に、自分メモリの二重化情報部46,47の相手の運転モードメモリ411から、相手の運転モードを読み出す(ステップ7−3)。相手が、稼動系を示す運転モードであれば、待機系処理を繰り返し実行する(ステップ7−4)。相手が、停止を示す運転モードであれば、自分のメモリの二重化情報46、47の等値化用の実行結果データメモリ412から等値化のための実行結果データを読み出し自分の実行データに取り込む(ステップ7−5)。次に稼動系処理(ステップ6−1)へ移行し、稼動系としてコントローラを実行する。
【0060】
図8は、上記二重化制御装置における通常の二重化運転の一例を説明するタイミングチャートを示す。稼動系側コントローラ810は、スキャン周期89に従って定周期で稼動系処理(ステップ6−1)を実行する。
【0061】
稼動系処理(ステップ6−1)では、先ず、タイミング81において、自分の運転モードを待機系側コントローラ811の二重化情報部813の相手の運転モードメモリ411に書き込む820。次に、タイミング82において、稼動系側コントローラ810はI/O入力モジュール13から入力データを読み出す(ステップ6−3)。次に、タイミング83において、入力データを入力情報としてユーザ制御プログラムを実行する(ステップ6−4)。次に、タイミング84において、ユーザ制御プログラムで生成した出力データを、I/O出力モジュール12へ書き込む(ステップ6−5)。次に、タイミング85において、待機系側コントローラ811の二重化情報部813の自分の運転モードメモリ410から、待機系側コントローラ811の運転モードを読み出す823(ステップ6−8)。待機系側コントローラ811の運転モードが、待機系を示す運転モードであれば、次に、タイミング86において、ユーザ制御プログラムの実行結果データを等値化するために、待機系側811の二重化情報部813の等値化用の実行結果データメモリ412へ書き込む824(ステップ6−10)。
【0062】
待機系側コントローラ811は、少なくとも、スキャン周期89よりも短い周期で、待機系処理(ステップ7−1)を一定周期で実行する。待機系処理(ステップ7−1)では、先ず、タイミング87において、自分の二重化情報部813の自分の運転モードメモリ410に、待機モードを示す運転モードを書き込む821(ステップ7−2)。次に、タイミング88において、自分の二重化情報部813の相手の運転モードメモリ411から、相手の運転モードを読み出す822(ステップ7−3)。相手の運転モードが稼動系を示す運転モードであれば、次の周期でも上記の待機系処理(ステップ7−1)を繰り返し実行する。
【0063】
以上のように、稼動系側810は、一定周期で、I/Oデータの入出力(タイミング82、84)とユーザ制御プログラムを実行し(タイミング83)、制御対象を制御しながら、二重化情報である自分の運転モードと等値化用の実行結果データとを待機系側コントローラ811に書き込む(タイミング81、86)ことで、二重化の稼動系の運転を維持している。
【0064】
一方、待機系側コントローラ811は、常時、待機系側コントローラ810から書き込まれる運転モードを監視し(タイミング88)、及び、同時に稼動系側コントローラ810から書き込まれる等値化用の実行結果データ412を保持し、いつでも稼動系側コントローラ810に切り替われるように二重化の待機系の運転を維持している。
【0065】
なお、二重化運転中においても、稼動系側コントローラ810から待機系側811のメモリをアクセスするのみで、待機系側コントローラ811は、稼動系側コントローラ810のメモリをアクセスしないため、メモリアクセスの経路である入出力バス1とインタフェース部101、111、121、131との負荷を低減することが可能となり、それを構成する回路を簡素化することが可能である。
【0066】
図9は、稼動系側コントローラ811での異常発生による二重化の切り替わりのタイミングチャートを示す。稼動系側コントローラ810は、あるスキャン周期91の稼動系処理(ステップ6−1)において、タイミング82、84でのI/Oデータの入出力(ステップ6−3、6−5)やタイミング83でのユーザ制御プログラムの実行(ステップ6−4)で、異常を検出すると(タイミング92)、直ちに停止処理(ステップ6−12)95へ移行する。
【0067】
停止処理(ステップ6−12)では、先ず、タイミング93において停止モードを示す運転モードを、相手(待機系側コントローラ)の二重化情報部813の相手の運転モードメモリ411に書き込む(ステップ6−13)。稼動系側コントローラ810は、次に、新たな再スタート要求がなければ、この停止モードを維持する。
【0068】
一方、待機系側コントローラ811は、待機系処理(ステップ7−1)の中で、タイミング96において、自分の二重化情報部813の相手の運転モードメモリ411から、相手の運転モードを読み出し(ステップ7−3)、相手が停止モードを示していれば、タイミング98において自分の二重化情報部813の実行結果データメモリ412から、相手が等値化用に書き込んだユーザ制御プログラムの実行結果データを読み出し、自分の実行データに取り込み(ステップ7−5)、タイミング910より直ちに、稼動系処理(ステップ6−1)へ移行し稼動系側911として運転を継続実行する。
【0069】
以上のように、図1で示したハード構成と、図4で示したスロットとI/O空間との割り付けとを備え、図5で示した初期化処理の手段と、図6で示した稼動系処理と二重化トラッキング処理と停止処理の手段と、図7で示した待機系処理の手段を備え、それらを組み合わせることで、専用の二重化制御部を必要としない、簡易で安価な二重化制御装置を実現することが可能になった。すなわち、本実施形態によれば、構成が複雑になることを回避し、安価な二重化制御装置を提供することができる。
【0070】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0071】
100、110、120、130…メモリ、1…入出力バス、10…プライマリ側コントローラ、11…セカンダリ側コントローラ、12…I/O出力モジュール、12…O入力モジュール、13…I/O入力モジュール、14…外部出力機器、15…外部入力機器、40…I/O空間、46、47…二重化情報部、410…自分の運転モードメモリ、411…相手の運転モードメモリ、48…出力レジスタ部、413、414、415、416…出力レジスタ、49…入力レジスタ部、413、414、415、416…入力レジスタ、89、91、910…スキャン周期、101、111、121、131…インタフェース部、102、112…CPU部(制御部)、103、113、123、133…内部バス、122…出力インタフェース部、132…入力インタフェース部、89、91、910…スキャン周期、810…稼動系、811,911…待機系、812…稼動系側の二重化情報部、813…待機系側の二重化情報部、95…停止。

【特許請求の範囲】
【請求項1】
第1コントローラと、
第2コントローラと、
外部機器と接続可能なI/Oモジュールと、
前記第1コントローラが実装される第1スロット、前記第2コントローラが実装される第2スロット、および、前記I/Oモジュールが実装される複数のスロット、を備えた入出力バスと、を備え、
前記第1コントローラおよび前記第2コントローラのそれぞれは、制御部と、前記入出力バスへデータを出力するおよび前記入出力バスからデータが入力されるインタフェース部と、前記制御部および前記インタフェース部からアクセス可能なメモリと、を備え、
前記入出力バスはパラレルバス、シリアルバス、および、LANケーブルのいずれかである
ことを特徴とする二重化制御装置。
【請求項2】
前記I/Oモジュールは、外部機器とインタフェースする外部機器インタフェース部と、前記入出力バスとインタフェースするためのインタフェース部と、前記インタフェース部を介してデータの読み書きが可能で、且つ、自分自身でも読み書きが可能なメモリと、
を備えたことを特徴とする請求項1記載の二重化制御装置。
【請求項3】
前記第1コントローラおよび前記第2コントローラの制御部は、
前記入出力バスに実装されたスロット位置でプライマリ側とセカンダリ側とを判断する手段と、
相手の運転モード等から自分が稼動系か待機系かを判断する手段と、
稼動系であれば、前記I/Oモジュールにデータを入出力する手段と、ユーザ制御プログラムを実行する手段と、待機系と実行結果データを等値化するために待機系のメモリに実行結果データを書き込む手段と、自分の運転モードを待機系のメモリに書き込み、且つ、相手の運転モードを待機系のメモリから読み出す手段と、
待機系であれば、相手から書き込まれた運転モードをメモリから読み出し次の運転モードを判定する手段と、自分を稼動系として運転継続する手段と、
を備えることを特徴とした請求項1又は請求項2記載の二重化制御装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2012−168635(P2012−168635A)
【公開日】平成24年9月6日(2012.9.6)
【国際特許分類】
【出願番号】特願2011−27511(P2011−27511)
【出願日】平成23年2月10日(2011.2.10)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】