(57)【要約】【課題】同期化時間の増大によるプログラム実行時間の増加を抑制した、二重化プログラムコントローラ及びその同期化方法を提供する。【解決手段】第１のＣＰＵと第１のプログラムカウンタ１６ａと第１の送受信バッファ１３ａとが設けられた制御系の第１のＣＰＵユニット１１ａと、第２のＣＰＵと第２のプログラムカウンタ１６ｂと第２の送受信バッファ１３ｂと比較部１７ｂとが設けられた待機系の第２のＣＰＵユニット１１ｂと、第１の送受信バッファ１３ａから第２の送受信バッファ１３ｂに同期化情報を送信する双方向通信路２０とを備え、第２のＣＰＵユニット１１ｂは、第２の送受信バッファ１３ｂに格納された同期化情報と第２のプログラムカウンタ１６ｂの値との比較部１７ｂによる比較結果に基づいて同期化プログラムを実行することを特徴とする。【選択図】      図１
2014137795.tif 000002
【特許請求の範囲】
【請求項１】
第１のプログラムカウンタと、前記第１のプログラムカウンタの値に基づいて制御プログラムを実行する第１のＣＰＵと、前記制御プログラムの実行内容を前記第１のプログラムカウンタの値と対応付けて同期化情報として格納する第１の送受信バッファと、が設けられた第１のＣＰＵユニットと、
第２のプログラムカウンタと、前記第２のプログラムカウンタの値に基づいて同期化プログラムを実行する第２のＣＰＵと、前記第１の送受信バッファから送信された前記同期化情報を格納する第２の送受信バッファと、前記第２のプログラムカウンタの値と前記第２の送受信バッファに格納された前記同期化情報とを比較する比較部と、が設けられた第２のＣＰＵユニットと、
前記第１の送受信バッファから前記第２の送受信バッファに前記同期化情報を送信する通信路と、
を備え、
前記第２のＣＰＵユニットは、前記第２の比較部による比較結果に基づいた前記同期化プログラムを実行すること、
を特徴とする二重化プログラマブルコントローラ。
【請求項２】
前記第１のＣＰＵユニットは、外部からの割込み命令に対する割込み処理の内容と前記割込み処理を実行した前記第１のプログラムカウンタの値とを同期化情報として前記第１の送受信バッファに格納すること、
を特徴とする請求項１に記載の二重化プログラマブルコントローラ。
【請求項３】
前記第２のＣＰＵユニットは、前記比較部による前記同期化情報に含まれる前記第１のプログラムカウンタの値と前記第２のプログラムカウンタの値との比較に基づいた前記同期化プログラムを実行すること、
を特徴とする請求項２に記載の二重化プログラマブルコントローラ。
【請求項４】
前記第２のＣＰＵユニットは、前記第１のＣＰＵユニットが実行した前記割込み処理の内容を反映させた前記制御プログラムである前記同期化プログラムを実行すること
を特徴とする請求項２または３に記載の二重化プログラマブルコントローラ。
【請求項５】
前記第２のＣＰＵユニットが、前記第２の送受信バッファに前記同期化情報を格納したときに前記第１のＣＰＵユニットに応答信号を前記通信路を介して送信し、前記第１のＣＰＵユニットが前記応答信号を前記第１の送受信バッファに格納すること
を特徴とする請求項１乃至４のいずれか１項に記載の二重化プログラマブルコントローラ。
【請求項６】
前記第１のＣＰＵユニットが制御系で、前記第２のＣＰＵユニットが待機系であり、前記第１のＣＰＵユニットから前記第２のＣＰＵユニットに故障通知があったとき、前記第２のＣＰＵユニットが制御系に切り替わること
を特徴とする請求項１乃至５のいずれか１項に記載の二重化プログラマブルコントローラ。
【請求項７】
前記第１のＣＰＵユニットが制御系で、前記第２のＣＰＵユニットが待機系であり、前記第１のＣＰＵユニットが切替通知を行い、前記第２のＣＰＵユニットが前記切替通知を受けたとき、前記第２のＣＰＵユニットが制御系に切り替わること
を特徴とする請求項１乃至５のいずれか１項に記載の二重化プログラマブルコントローラ。
【請求項８】
前記通信路は、トラッキングケーブルであること
を特徴とする請求項１乃至７のいずれか１項に記載の二重化プログラマブルコントローラ。
【請求項９】
前記通信路は、バスであること
を特徴とする請求項１乃至７のいずれか１項に記載の二重化プログラマブルコントローラ。
【請求項１０】
第１のＣＰＵユニットが同期割込みタイマ設定時間ごとに実行中のプログラムを中断する工程と、
前記プログラム中断後に、前記第１のＣＰＵユニットが、前記同期割込みタイマ設定時間内の実行内容である同期化情報を通信路に送信する第１の送信命令を実行する工程と、
前記第１のＣＰＵユニットが、前記第１の送信命令を実行する工程の後に前記プログラムを再開する工程と、
第２のＣＰＵユニットが、前記通信路に送信された前記同期化情報を受信する工程と、
前記第２のＣＰＵユニットが前記同期化情報を受信したことを応答する応答信号を前記通信路に送信する第２の送信命令を実行する工程と、
前記第１のＣＰＵニットが、前記プログラムを再開した後に、前記応答信号を受信する工程と、
前記第２のＣＰＵユニットが、送信された前記同期化情報に基づいた同期化プログラムを実行する工程と、
を備えた二重化プログラマブルコントローラの同期化方法。
【請求項１１】
前記同期化情報に、外部からの割込み命令に対する割込み処理を前記第１のＣＰＵユニットが実行した第１のプログラムカウンタの値と前記割込み処理の内容とが含まれていること、
を特徴とする請求項１０に記載の二重化プログラマブルコントローラの同期化方法。
【請求項１２】
前記第２のＣＰＵユニットが、前記同期化情報に含まれる前記第１のプログラムカウンタの値と第２のプログラムカウンタの値との比較結果に基づいた前記同期化プログラムを実行すること、
を特徴とする請求項１１に記載の二重化プログラマブルコントローラの同期化方法。
【請求項１３】
前記第１のＣＰＵユニットが制御系で、前記第２のＣＰＵユニットが待機系であり、前記第１のＣＰＵユニットから前記第２のＣＰＵユニットに故障通知があったとき、前記第２のＣＰＵユニットを制御系に切り替える工程を備えた請求項１０乃至１２のいずれか１項に記載の二重化プログラマブルコントローラの同期化方法。
【請求項１４】
前記第１のＣＰＵユニットが制御系で、前記第２のＣＰＵユニットが待機系であり、前記第１のＣＰＵユニットが切替通知を行い、前記第２のＣＰＵユニットが前記切替通知を受けたとき、前記第２のＣＰＵユニットを制御系に切り替える工程を備えた請求項１０乃至１２のいずれか１項に記載の二重化プログラマブルコントローラの同期化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、監視制御システムなどにおいて、ＣＰＵユニットの異常発生時等に系の切替を行う二重化プログラマブルコントローラに関するものである。
【背景技術】
【０００２】
二重化プログラマブルコントローラは、互いに並列に動作可能な２系統のＣＰＵユニット（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有するもので、システムダウンにより甚大な損害を生ずるような高度の信頼性を要求されるプロセス制御等の用途に広く使用されている。
【０００３】
二重化プログラマブルコントローラは２系統のＣＰＵユニットのうち、第１のＣＰＵユニットが制御系に、第２のＣＰＵユニットが待機系に設定され、制御系の第１のＣＰＵユニットに異常が発生した場合には、待機系の第２のＣＰＵユニットが制御系に自動的に切り替えられてシステムダウンを防止し、自動的にシステムを継続する機能を備えている。
【０００４】
二重化プログラマブルコントローラでは、第１のＣＰＵユニットと第２のＣＰＵユニットとが互いに同一プログラムを同一内容で実行することを保証する同期化を行う必要がある。プログラムを実行している途中に、外部からの割込みイベントを実行する割込み命令があった場合、制御系と待機系で割込みイベント結果を反映した同一プログラムを実行するためには、制御系と待機系がそれぞれ外部にアクセスするタイミングのずれが発生していないことを確認する必要がある。つまり、実行中のプログラムのプログラムカウンタが異なる時点で割込みイベントを実行し、制御系と待機系で異なるプログラム結果が得られてしまうことを防ぐために、割込みイベントを実行するタイミングとなるプログラムカウンタを確認し、制御系と待機系を同一のプログラムカウンタに合わせて外部からの割込み命令を実行する必要がある。
【０００５】
そのため、従来の二重化プログラマブルコントローラでは、外部から割込み命令があった際に、第１のＣＰＵユニットと第２のＣＰＵユニットに対して、割込み命令が同じプログラムカウンタで発生したかを確認し、同じでない場合にはプログラムカウンタを同一にしてから、それぞれ外部から割込み命令に対応した割込みイベントを実行している（例えば、特許文献１参照）。
【０００６】
つまり、外部からの割込み命令が発生する度に実行中のプログラムを中断し、第１のＣＰＵユニットと第２のＣＰＵユニットで同じ割込みイベントが同じタイミングで実行されることを確認してから割込みイベントを実行した後、プログラムを再開する。このようにすることによって、従来の二重化プログラマブルコントローラでは、第１のＣＰＵユニットと第２のＣＰＵユニットを同一内容でプログラムを実行することを保証する同期化を行っている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２００６−５１２６３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来の二重化プログラマブルコントローラでは、外部からの割込み命令が発生するたびに第１のＣＰＵユニットと第２のＣＰＵユニットの両方がプログラムを中断して同期化を行う。つまり、第１のＣＰＵユニットと第２のＣＰＵユニットで同じ割込みイベントが同じプログラムカウンタで実行されることを確認する間、第１のＣＰＵユニットと第２のＣＰＵユニットの両方がプログラムを中断する時間が発生する。ＣＰＵユニット処理能力向上によるコントローラの大容量化に伴い、プログラムの処理時間は大幅に短縮できるにも関わらず、第１のＣＰＵユニットから第２のＣＰＵユニットにネットワークを介して同期化処理に必要な同期化情報を通信するための時間が増加している。そのため、第１のＣＰＵユニットと第２のＣＰＵユニットの両方がプログラムを中断する時間が増加し、プログラム実行時間が長くなるという問題があった。
【０００９】
この発明は、上記のような問題点を解決するためになされたものであり、同期化情報を通信するための時間の増大によるプログラム実行時間の増加を抑制した、二重化プログラムコントローラ及びその同期化方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
この発明に係る二重化プログラマブルコントローラは、第１のプログラムカウンタと、第１のプログラムカウンタの値に基づいて制御プログラムを実行する第１のＣＰＵと、制御プログラムの実行内容を第１のプログラムカウンタの値と対応付けて同期化情報として格納する第１の送受信バッファと、が設けられた第１のＣＰＵユニットと、第２のプログラムカウンタと、第２のプログラムカウンタの値に基づいて同期化プログラムを実行する第２のＣＰＵと、第１の送受信バッファから送信された同期化情報を格納する第２の送受信バッファと、第２のプログラムカウンタの値と第２の送受信バッファに格納された同期化情報とを比較する比較部と、が設けられた第２のＣＰＵユニットと、第１の送受信バッファから第２の送受信バッファに同期化情報を送信する通信路と、を備える。さらに、第２のＣＰＵは、第２の比較部による比較結果に基づいた同期化プログラムを実行することを特徴とする。
【発明の効果】
【００１１】
この発明によれば、制御系の第１のＣＰＵユニットが実行した内容を同期化情報として第１の送受信バッファから待機系の第２のＣＰＵユニットに設けられた第２の送受信バッファに送信し、第２のＣＰＵユニットは同期化情報に基づいた同期化プログラムを実行するので、第２のＣＰＵユニットは第１のＣＰＵユニットと同一内容のプログラムを追随して実行でき、同期化が行える。つまり、第２のＣＰＵユニットは、第１のＣＰＵユニットが実行した内容であり、外部割込み命令を反映した同期化情報に基づいた同期化プログラムを実行できるので、外部割込み命令が発生するたびに同期化のための通信時間を必要とせず、プログラム実行時間を短縮することができるという効果が得られる。
【図面の簡単な説明】
【００１２】
【図１】この発明の実施の形態１に係る二重化プログラマブルコントローラの構成を示すブロック図である。
【図２】この発明の実施の形態１に係る二重化プログラマブルコントローラにおいて、プログラムを実行する際の動作を示すタイムチャートである。
【図３】この発明の実施の形態１に係る二重化プログラマブルコントローラにおいて、制御系の第１のＣＰＵユニットが同期対象命令を実行する際に同期化情報を第１の送受信バッファに格納した時の例を説明するためのブロック図である。
【図４】この発明の実施の形態１に係る二重化プログラマブルコントローラにおいて、制御系の第１のＣＰＵユニットが外部割込み命令を実行する際に同期化情報を第１の送受信バッファに格納した時の例を説明するためのブロック図である。
【図５】この発明の実施の形態１に係る二重化プログラマブルコントローラにおいて、制御系の第１のＣＰＵユニットが同期タイマ割込みを実行する際に同期化情報を第１の送受信バッファに格納した時の例を説明するためのブロック図である。
【図６】この発明の実施の形態１に係る二重化プログラマブルコントローラにおいて、待機系の第２のＣＰＵユニットが同期化情報に基づいて行う待機系処理を説明するためのブロック図を示す。
【図７】この発明の実施の形態１に係る二重化プログラマブルコントローラにおいて、制御系ＣＰＵユニットの故障による系切替方法を説明するタイムチャートである。
【図８】この発明の実施の形態２に係る二重化プログラマブルコントローラにおいて、系切替命令による系切替方法を説明するタイムチャートである。
【発明を実施するための形態】
【００１３】
実施の形態１．
図１は、この発明の実施の形態１における二重化プログラマブルコントローラの構成を示すブロック図である。本実施の形態の二重化プログラマブルコントローラは、同一の制御プログラムであるプログラム５０（図１には図示せず図２で示す）を実行するための、制御系である第１のコントローラ１０ａと待機系である第２のコントローラ１０ｂとを備える。つまり、本実施の形態の図１では、第１のコントローラ１０ａが制御系として、第２のコントローラ１０ｂが待機系としてそれぞれ機能している状態を示している。第１のコントローラ１０ａは、第１のＣＰＵユニット１１ａと第１の通信ユニット１２ａとからなり、第２のコントローラ１０ｂは、第２のＣＰＵユニット１１ｂと第２の通信ユニット１２ｂとからなる。
【００１４】
図１に示すように、本実施の形態の二重化プログラマブルコントローラでは、制御系の第１のＣＰＵユニット１１ａ内に第１の送受信バッファ１３ａが、第２のＣＰＵユニット１１ｂ内に第２の送受信バッファ１３ｂが、それぞれ専用領域として設けられている。これらの専用領域は、制御系と待機系間で行う同期化転送用に設けられたＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成されている。
【００１５】
また、第１のＣＰＵユニット１１ａは、第１のＣＰＵ（図示せず）と、第１のプログラムカウンタ（ＰＣ：Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）１６ａと、第１の比較部１７ａと、第１の分岐回数カウンタ１５ａとを備える。第１の比較部１７ａは、第１の送受信バッファ１３ａに内蔵されたデータである後述する同期化情報と当該データと対応する第１のプログラムカウンタ１６ａの値（さらに、必要に応じて第１の分岐回数カウンタ１５ａの値）とをそれぞれ比較する機能を備える。
【００１６】
さらに、第２のＣＰＵユニット１１ｂは、第２のＣＰＵ（図示せず）と、第２のプログラムカウンタ（ＰＣ：Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）１６ｂと、第２の比較部１７ｂと、第２の分岐回数カウンタ１５ｂとを備える。第２の比較部１７ｂは、第２の送受信バッファ１３ｂに内蔵されたデータと第２のプログラムカウンタ１６ｂの値（さらに、必要に応じて第２の分岐回数カウンタ１５ｂの値）とを比較する機能を備える。
【００１７】
第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂとは、第１のコネクタ１４ａと第２のコネクタ１４ｂとにより通信路で接続されている。つまり、本実施の形態の二重化プログラマブルコントローラでは、通信路を通じて第１のコントローラ１０ａと第２のコントローラ１０ｂとの間で同期化用のデータ転送が可能な構成を有している。本実施の形態の図１では、通信路としてトラッキングケーブル２０を用いているが、同一バス上に制御系と待機系の２つのＣＰＵユニットを接続し、バス経由で同期化用のデータ転送を行う構成にしても良い。
【００１８】
第１のコントローラ１０ａの第１の通信ユニット１２ａ及び第２のコントローラ１０ｂの第２の通信ユニット１２ｂは通信ネットワーク２１に接続されている。例えば図１では、外部コントローラ３０の外部ＣＰＵユニット３１から出される割込みイベント実行などの割込み命令が、外部通信ユニット３２を介して通信ネットワーク２１から二重化プログラマブルコントローラに出される。
【００１９】
図２は、本実施の形態の二重化プログラマブルコントローラにおいて、プログラム５０を実行する際の動作を示すタイムチャートである。図２では、上から下に向かって時間が進んでいる。なお、以下では、制御系処理４０のプログラム５０を前から順に区分して、プログラム５０の処理ＡをステップＳ１００、プログラム５０の処理ＢをステップＳ１０２、プログラム５０の処理ＣをステップＳ１０５というように順に呼んでいる。また、ステップＳ１０１及びステップＳ１０４の同期化情報送信命令は、制御系処理４０の割込み処理プログラムに相当する。このような呼び方は、待機系４１でも同様である。ステップＳ１２０、ステップＳ１２１及びステップＳ１２４は、待機系処理４１の割込み処理プログラムに相当する。
【００２０】
また、第１の送受信バッファ１３ａと第２の送受信バッファ１３ｂとの間で、通信路を介して通信系処理４２が行われる。この通信系処理４２では、ステップＳ１１０及びステップＳ１１２は制御系から待機系への情報の転送の処理を意味し、ステップＳ１１１及びステップＳ１１３は待機系から制御系への情報の転送を意味する。ここでの転送される情報としては、同期化情報及び応答信号が含まれる。
【００２１】
図２において、さらに詳細に説明すると、ステップＳ１００からステップＳ１０６は制御系処理４０として、第１のコントローラ１０ａが行う動作を示している。ステップＳ１２０からステップＳ１２５は待機系処理４１として、第２のコントローラ１０ｂが行う動作を示している。さらに、トラッキングケーブル２０が、第１のコントローラ１０ａの第１のＣＰＵユニット１１ａと、第２のコントローラ１０ｂの第２のＣＰＵユニット１１ｂとの間でデータ転送する処理を、通信系処理４２としてステップＳ１１０からステップ１１３に示している。
【００２２】
図３、図４及び図５は、本実施の形態の二重化プログラマブルコントローラにおいて、制御系の第１のＣＰＵユニット１１ｂが同期化が必要な同期化命令を実行する際に必要なデータ（同期化情報）を送受信バッファ１３ａに格納するときの例を説明するためのブロック図である。
【００２３】
図２から図５を用いて、本実施の形態における二重化プログラマブルコントローラの動作フローを説明する。
【００２４】
図２のステップＳ１００において、制御系の第１のＣＰＵユニット１１ａは、プログラム５０を実行している。ステップＳ１００において、プログラム５０の内容に外部コントローラ３０にデータをリードしに行くという、外部機器に対するアクセス命令（図３中の同期対象命令５１）がある場合、第１のＣＰＵユニット１１ａは外部コントローラ３０へのリード命令を実行して通信ネットワーク２１を介してリードデータＲ１を取得する。その後、図３に示すように、第１の送受信バッファ１３ａに、同期対象命令５１を実行したプログラムカウンタ値Ｘ１とリードデータＲ１とリードデータＲ１のデータ量Ｄ１とを同期化情報として格納する。
【００２５】
さらに、図２のステップＳ１００において、図４に示すように外部コントローラ３０から割込み命令５２を受けた場合、制御系の第１のＣＰＵユニット１１ａは、外部からの割込み命令５２を受け、割込みイベント（割込み処理Ｚ１）を実行するときのプログラムカウンタ値Ｘ２と、分岐回数Ｙ２とを、第１のプログラムカウンタ１６ａと第１の分岐回数カウンタ１５ａとから読み込んで、第１の送受信バッファ１３ａへ格納する。また、割込み処理Ｚ２の内容も、図４のように第１の送受信バッファ１３ａへ格納する。つまり、外部コントローラ３０から割込み命令５２が発生したとき、第１のプログラムカウンタ１６ａの値と、第１の分岐回数カウンタ１５ａの値と、割込み処理Ｚ２の内容とを同期化情報として第１の送受信バッファ１３ａに格納する。
【００２６】
外部コントローラ３０からの割込みイベントを実行した後は、割込み命令５２を実行した結果を反映させて、中断したプログラムを再開する。
【００２７】
ステップＳ１００において、同期割込みタイマ設定時間４３が経過して同期タイマ割込み５３があったとき、制御系の第１のＣＰＵユニットユニット１１ａは同期タイマ割込み５３によりプログラム５０を中断して、図５に示すようにプログラムカウンタ１６ａの値であるプログラムカウンタ値Ｘ３と分岐回数カウンタ１５ａの値である分岐回数Ｙ３と同期タイマ割込み５３による割込み処理Ｚ３の内容とを同期化情報として第１の送受信バッファ１３ａに格納する。
【００２８】
次に、図２のステップＳ１０１において、同期化情報送信命令を実行することによって第１のＣＰＵユニット１１ａは、第１の送受信バッファ１３ａに内蔵されたデータを同期化情報としてトラッキングケーブル２０に送信する送信命令を実行する。同期化情報の送信命令実行後、第２のＣＰＵユニット１１ｂから同期化したことの応答受信（ステップＳ１０３）を待たずにプログラム５０の実行を再開し、ステップＳ１０２に移行する。
【００２９】
ステップＳ１０２において、第１のＣＰＵユニット１１ａは、ステップＳ１００と同様にプログラム５０を継続して実行する。
【００３０】
ステップＳ１０３において、第１のＣＰＵユニット１１ａは、待機系の第２のＣＰＵユニット１１ｂから送信された同期化の応答信号を受信する。ここで、ステップＳ１０３で行う応答信号の受信は、具体的には、第２のＣＰＵユニット１１ｂから送信された同期化の応答信号が第１の送受信バッファ１３ａに格納されたことをいう。通信路であるトラッキングケーブル２０の通信系処理４２が主体的に応答信号を転送するので、第１のＣＰＵユニット１１ａがプログラム５０の実行中であっても応答信号を第１の送受信バッファ１３ａに格納することができる。つまり、ステップＳ１０２と並列に、ステップＳ１０３の同期化の応答信号を受信することができる。
【００３１】
ステップＳ１０２で同期割込みタイマ設定時間４３が経過すると、制御系の第１のＣＰＵユニット１１ａは同期タイマ割込み５３によりプログラム５０を中断し、ステップＳ１０４において、ステップＳ１０３における待機系の第２のＣＰＵユニット１１ｂからの同期化の応答信号を認識する。そこで、待機系の第２のＣＰＵユニット１１ｂの処理が第１のＣＰＵユニット１１ａの処理に追随していることを確認し、ステップＳ１０１と同様に同期化情報を送信する送信命令を実行する。
【００３２】
なお、ステップＳ１０３で同期化応答信号を受信しなかった場合、第１のＣＰＵユニット１１ａは、プログラム５０を停止した状態で、同期化応答受信待ちとなる。つまり、第１のＣＰＵユニット１１ａはステップＳ１０２で同期タイマ割込み５３が発生してステップＳ１０４に移行するまでにステップＳ１０３が発生しなかった場合、ステップＳ１０４に進まずにステップＳ１０３が発生するまで待つ。
【００３３】
但し、同期割込みタイマ設定時間４３を、後述するステップＳ１１０に要する時間とステップＳ１１１に要する時間の合計より長い時間に設定すれば、ステップＳ１０２と並列にステップＳ１０３が行われることになるので、ステップＳ１０３を待つ時間は発生しない。
【００３４】
以上の様にして第１のＣＰＵユニット１１ａは制御系処理４０のステップを継続する。
【００３５】
次に、待機系の第２のＣＰＵユニット１１ｂが行う待機系処理４１と、第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂ間のデータ転送を行う通信系処理４２について説明する。待機系の第２のＣＰＵユニット１１ｂは、第１のＣＰＵユニット１１ａから送信された同期化情報に基づいて、同期化プログラムを実行する。
【００３６】
図２のステップＳ１０１で第１のＣＰＵユニット１１ａが送信命令を実行して送信された同期化情報が、トラッキングケーブル２０を介して第１の送受信バッファ１３ａから第２の送受信バッファ１３ｂに転送される。この転送処理であるステップＳ１１０はトラッキングケーブル２０を用いた通信系が主体となって行う。
【００３７】
ステップＳ１２０において、待機系の第２のＣＰＵユニット１１ｂは、制御系の第１のＣＰＵユニット１１ａからの同期化情報を受信する。ここで、ステップＳ１２０の同期化情報受信とは、第１の送受信バッファ１３ａに格納されていたデータがトレッキングケーブル２０を介して転送され、第２の送受信バッファ１３ｂへの格納が完了することを言う。
【００３８】
通信系が主体となって行う通信系処理４２に要する時間が、ＣＰＵユニット処理能力向上によるコントローラの大容量化に伴い長くなっている。本実施の形態では、第１のＣＰＵユニット１１ａは、通信系処理４２と並列にプログラム５０を処理できるので、プログラム５０が開始してから終了するまでのプログラム実行時間に、通信系処理が行うステップＳ１１０やステップＳ１１２などにかかる通信時間が加算されない。そのため、プログラム実行時間を短縮することができる。
【００３９】
次に、ステップＳ１２１において、第２のＣＰＵユニット１１ｂは、同期化の応答信号を送信する送信命令を実行する。ここで、応答信号とは同期化情報を確認したという内容であればよく、例えば、同期化情報の受信を完了したことと、第２のＣＰＵユニット１１Ｂが中断しているプログラム５０の第２のプログラムカウンタの値とすればよい。
【００４０】
ステップＳ１２１において応答送信命令が出されると、通信系処理４２において、ステップＳ１１１でトラッキングケーブル２０を介して第２の送受信バッファ１３ｂから第１の送受信バッファ１３ａに応答信号が転送される。この転送処理であるステップＳ１１１はトラッキングケーブル２０を用いた通信系が主体となって行う。
【００４１】
次に、第２のＣＰＵユニット１１ｂはステップＳ１２２に移行し、プログラム５０を実行する。ここで、第１のＣＰＵユニット１１ａが実行するプログラム５０と第２のＣＰＵユニット１１ｂが実行するプログラム５０は同一である。
【００４２】
ステップＳ１２２において、待機系の第２のＣＰＵユニット１１ｂは、プログラム５０を実行し、図３の第１のＣＰＵユニット１１ａの同期対象命令５１と同じ、プログラム５０の内容に外部コントローラ３０からデータをリードする外部機器命令があると、第２のＣＰＵユニット１１ｂ自身が待機系であることを認識し、制御系の第１のＣＰＵユニット１１ａとは異なって外部コントローラ３０へのアクセスを行わず、第２の送受信バッファ１３ｂに格納されているリードデータＲ１を読み込み、ステップＳ１００で制御系の第１のＣＰＵユニット１１ａが同期対象命令５１を実行した時に獲得したリードデータＲ１を取得する。
【００４３】
第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂにおいて、プログラム５０の進行度が異なり、外部コントローラ３０のデータをリードするというプログラムカウンタ値Ｘ１を実行する時の時間が異なる場合がある。外部コントローラ３０のデータが時間ごとに変動していてる場合、外部コントローラ３０にアクセスする時間が異なると、異なるデータを読み込んでしまう場合が生じる。
【００４４】
本実施の形態では、第１のＣＰＵユニット１１ａがプログラムカウンタ値Ｘ１で読み込んだリードデータＲ１を第２のＣＰＵユニット１１ｂの第２の送受信バッファ１３ｂへ同期化情報として転送し、第２のＣＰＵユニット１１ｂがプログラムカウンタ値Ｘ１を実行するときに、第２の送受信バッファ１３ｂのリードデータＲ１を読み込むので、第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂともに外部コントローラ３０の同じリードデータＲ１をプログラム５０に反映させることができる。
【００４５】
また、ステップＳ１２２において、待機系の第２のＣＰＵユニット１１ｂは、同期対象命令５１が、外部コントローラ３０への外部ライト命令であったとしても、待機系ＣＰＵユニット１１ｂは、第２のＣＰＵユニット１１ｂ自身が待機系であることを認識し、制御系の第１のＣＰＵユニット１１ａと異なり、外部コントローラ３０へのアクセスを行わない。これは既に制御系がステップＳ１００において外部ライト命令である同期対象命令５１を実行しているためである。
【００４６】
さらに、ステップＳ１２２において、プログラム５０を実行中、第１の送受信バッファ１３ａから転送されて第２の送受信バッファ１３ｂに格納されている、図５で第１のＣＰＵユニット１１ａに外部からの割込み命令５２が発生した時のプログラムカウンタ値Ｘ２と分岐回数Ｙ２とが、それぞれ第２のＣＰＵユニット１１ｂ内蔵の第２のプログラムカウンタ１６ｂの値と第２の分岐回数カウンタ１５ｂの値と一致するかを第２の比較部１７ｂで常に比較する。
【００４７】
図６に第２のＣＰＵユニット１１ｂが同期化情報に基づいて、ステップＳ１２２で行う待機系処理４１を説明するためのブロック図を示す。第２のＣＰＵユニット１１ｂはプログラム５０を実行し、プログラムカウンタ値Ｘ１においてプログラム５０の内容に外部リード命令である同期対象命令５１があった場合、上述したように第２のＣＰＵユニット１１ｂ自身が待機系であることを認識すると、外部コントローラ３０にはアクセスせず、第２の送受信バッファ１３ｂに格納されているプログラムカウンタ値Ｘ１のリードデータＲ１を読み出す。つまり、第１のＣＰＵユニット１１ａがプログラムカウンタ値Ｘ１でリードし、同期化情報として送信していたリードデータＲ１を読み出す。
【００４８】
その後、第２のＣＰＵユニット１１ｂはプログラム５０を続行するが、第２のプログラムカウンタ１６ｂの値及び第２の分岐回数カウンタ１５ｂの値と、第２の送受信バッファ１３ｂに格納された同期化情報におけるプログラムカウンタ値Ｘｎ及び分岐回数Ｙｎとを比較部で常に比較している。
【００４９】
たとえば図６で、第２の比較部１７ｂにより、第２のプログラムカウンタ１６ｂの値がプログラムカウンタ値Ｘ２に一致し、第２の分岐回数カウンタ１５ｂの値が分岐回数Ｙ２に一致したことを確認すると、第２のＣＰＵユニット１１ｂはプログラム５０を中断し、割込み処理Ｚ２を実行する。図６の割込み命令５２は、図５で第１のＣＰＵユニット１１ａが割込み命令５２が発生した際に行った割込みイベントの内容と同じである。つまり、第１のＣＰＵユニット１１ａが割込み命令５２が発生した際に行った割込み処理Ｚ２を、第１のＣＰＵユニット１１ａが実行した同じプログラムカウンタ値Ｘ２及び分岐回数Ｙ２で、第２のＣＰＵユニット１１ｂが追随して行う。
【００５０】
本実施の形態では、外部から割込み命令が発生した際に、第１のＣＰＵユニット１１ａが割込みイベントを実行するプログラムカウンタの値と分岐回数と割込み処理内容とを第２のＣＰＵユニット１１ｂに同期化情報として送信し、第２のＣＰＵユニット１１ｂが同期化情報に基づいてプログラム５０及び外部からの割込み命令に対応する割込みイベントを実行する。そのため、外部から割込み命令が発生した際に、第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂが同じプログラムカウンタの値まで進んだことを確認し、それぞれが個々に外部にアクセスして外部からの割込み命令を実行する必要がない。
【００５１】
したがって、外部からの割込み命令が発生するたびに第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂが同じプログラムカウンタの値に進むまで一方がプログラムを中断して他方が同じプログラムカウンタの値に進むまで待ち、さらに同じプログラムカウンタの値であることを互いに確認し合う通信時間が不要なので、プログラムの中断時間を短縮でき、プログラム実行時間の短縮につながる。
【００５２】
次に、図６では、図５で第１のＣＰＵユニット１１ａに同期タイマ割込み５３が発生したプログラムカウンタ値Ｘ３及び分岐回数Ｙ３と第２のプログラムカウンタ１６ｂの値及び第２の分岐回数カウンタ１５ｂの値がそれぞれ一致したことを第２の比較部１７により確認すると、第２ＣＰＵユニット１１ｂに同期タイマ割込み５３を実行する。つまり、図２において第２のＣＰＵユニット１１ｂがステップＳ１２４に進む。
【００５３】
以上のステップで、第２のＣＰＵユニット１１ｂではステップＳ１２２において、第１のＣＰＵユニット１１ａがステップＳ１００で実行したのと同じ制御プログラム内容を実行したことになる。つまり、第２のＣＰＵユニット１１ｂは第１のＣＰＵユニット１１ａから送信された同期化情報に基づいて、同期化プログラムを実行する。
【００５４】
図６において、第２のＣＰＵユニット１１ｂが実行する同期化プログラムは、プログラム５０と同期対象命令５１と割込み命令５２と同期タイマ割込み５３である。つまり、第２のＣＰＵユニット１１ｂが同期化プログラムを実行することによって、第１のＣＰＵユニット１１ａが制御プログラムを実行したのと同一内容の結果が得られる。そのため、ステップＳ１００直後の制御系の第１のＣＰＵユニット１１ａとステップＳ１２２直後の待機系の第２のＣＰＵユニット１１ｂは、同一の状態となる。本実施の形態では、このようにして第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂの同期化を行っている。
【００５５】
図６に示すように、第２の比較部１７は第２の送受信バッファ１３ｂに格納された同期化情報のプログラムカウンタの値及び分岐回数と第２のプログラムカウンタ１６ｂの値及び第２の分岐回数カウンタ１５ｂの値との比較を行い、一致する度に、第２のＣＰＵユニット１１ｂはプログラムを中断し、第２の送受信バッファ１３ｂに格納された割込み処理を実施し、その割込み処理の終了後にプログラム５０を再開する。
【００５６】
第１のＣＰＵユニット１１ａがステップ１０２で実行した処理内容は、ステップＳ１０４で同期化情報の送信命令が実行され、通信系処理４２によりトラッキングケーブル２０を介した同期化情報の転送であるステップＳ１１２が実行される。図２では、ステップＳ１２３が、この同期化情報の第２の送受信バッファへの格納が完了したときを示す。
【００５７】
ステップＳ１２３がステップＳ１２２終了時に完了していれば、第２のＣＰＵユニット１１ｂはステップＳ１２４に進む。ステップＳ１２２終了時にステップＳ１２３が完了していなければ、第２のＣＰＵユニット１１ｂはステップＳ１２３が完了するまで待ち状態となる。
【００５８】
第２のＣＰＵユニット１１ｂがステップＳ１２４に進むと、ステップＳ１２１と同様に同期化情報を受信したことを知らせる同期化処理の応答信号を送信する。
【００５９】
その後、ステップＳ１２５へ進み、ステップＳ１２２と同様に、第１のＣＰＵユニット１１ａがステップＳ１０２で実行した内容を送信してきた同期化情報に基づいて、同期化プログラムの実行を継続する。
【００６０】
以上の様にして、待機系の第２のＣＰＵユニット１１ｂは待機系処理４１を継続し、制御系処理４０に追随して同期化プログラムを実行する。
【００６１】
制御系の第１のＣＰＵユニット１１ａは、プログラム５０終了後、実行したプログラム５０の演算結果を、監視システムなどの制御に反映（通信ユニット１２ａ、通信ネットワーク２１を介して外部機器へ送信）すると共に、待機系の第２のＣＰＵユニット１１ｂへプログラム５０が終了したことを送信する。その後、待機系の第２のＣＰＵユニット１１ｂも同期化プログラムを終了するが、第２のＣＰＵユニット１１ｂは同期化プログラムの実行結果を送信しない。
【００６２】
また、制御系の第１のＣＰＵユニット１１ａは、プログラム５０を終了後、通信ユニット１２ａ、通信ネットワーク２１を介して外部機器から入力データを受け取り、待機系の第２のＣＰＵユニット１１ｂへ入力データを送信すると共に自身のメモリの更新などの所定の処理を実行する。
【００６３】
待機系の第２のＣＰＵユニット１１ｂは、制御系の第１のＣＰＵユニット１１ａから入力データを受信し、自身のメモリの更新などの所定の処理を実行する。これにより、次のサイクルで別途プログラムを実行する時も、待機系の第２のＣＰＵユニット１１ｂは、制御系の第１のＣＰＵユニット１１ａと同じ状態を維持してプログラムを開始することが可能となる。
【００６４】
次に、この発明の実施の形態１に係る二重化プログラマブルコントローラの制御系の第１のＣＰＵユニット１１ａが故障した際の系切替方式について説明する。
【００６５】
図７は、実施の形態１に係る二重化プログラマブルコントローラにおいて、故障による系切替方法を説明するタイムチャートである。図７において、二重化プログラマブルコントローラは、制御系の故障が発生するまでは、図２と同様のシーケンスを行う。ステップＳ１００、Ｓ１０１、Ｓ１０２、Ｓ１０７は制御系の動作に対応し、ステップＳ１３０からステップＳ１３５は待機系の動作に対応する。
【００６６】
ステップＳ１０２においてプログラム５０の実行中に制御系の第１のＣＰＵユニット１１ａが故障したとする。第１のＣＰＵユニット１１ａは自身のハードウエアの故障を検知するとステップＳ１０７において実行中のプログラム５０を停止する。制御系の第１のＣＰＵユニット１１ａはトラッキングケーブル２０を通じて、待機系に制御系が故障した旨の故障通知を転送すると同時に、待機系を制御系に切り替える系切替指令を通知する。
【００６７】
ステップＳ１３０、Ｓ１３１、Ｓ１３２において、待機系の第２のＣＰＵユニット１１ｂは図２のステップＳ１２０、１２１、Ｓ１２２と同様に処理をする。ステップＳ１３２において同期化プログラムの実行と並列に、ステップＳ１３３の制御系の第１のＣＰＵユニット１１ａからの故障通知を受信する。
【００６８】
ステップＳ１３２で第１のＣＰＵユニット１１ａが実行したステップＳ１００と同じ内容の同期化プログラムを実行した後、ステップＳ１３４において、待機系の第２のＣＰＵユニット１１ｂはステップＳ１３３からの故障通知があったことを条件に、待機系から制御系に切り替わる処理を実行し、ステップＳ１３５に移行する。
【００６９】
ステップＳ１３５において、待機系であった第２のＣＰＵユニット１１ｂは制御系としてプログラム５０を実行する。この時、二重化プログラマブルコントローラは、制御系として第２のＣＰＵユニット１１ｂのみが動作するモードとなり、制御系、待機系の両系でのプログラム実行はせず、制御系（旧待機系）のみでプログラムが継続して実行できるようになる。なお、第２のＣＰＵユニット１１ｂは、第１のＣＰＵユニット１１ａと同じ構成であるため、制御系としてプログラム５０を実行することが可能である。
【００７０】
以上の動作により、制御系であった第１のＣＰＵユニット１１ａが故障した場合には、待機系であった第２のＣＰＵユニット１１ｂが制御系に切り替わって実際の制御等の動作を行うため、システムが停止することなく継続して運転でき、信頼性が向上する。
【００７１】
本実施の形態によれば、制御系の第１のＣＰＵユニット１１ａが同期割込みタイマ設定時間毎に制御プログラムを中断して、割込みイベント内容など第２のＣＰＵユニット１１ｂが追随して実行するために必要な情報を第２のＣＰＵユニット１１ｂに同期化情報として送信し、制御プログラムを再開してから第２のＣＰＵユニット１１ｂからの応答信号を受信する。つまり、外部からの割込み命令が発生するたびに第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂとで割込みイベントが同じ結果が得られることの確認を行うために実行中のプログラムを中断する必要がなく、同期化に要する時間を短縮でき、プログラム実行時間を短縮することができる。
【００７２】
また、本実施の形態では通信系処理４１がトラッキングケーブル２０などの通信路を介してデータ転送を行っている間に、第１のＣＰＵユニット１１ａはプログラム５０を再開する。つまり、データ転送を行うのと並列に第１のＣＰＵユニット１１ａはプログラム５０を再開するので、データ転送するための通信時間を待つ必要がなく、プログラム実行時間を短縮することができる。
【００７３】
ＣＰＵユニット処理能力向上によるコントローラの大容量化に伴い、プログラムの処理時間は大幅に短縮できるにも関わらず、外部からの割込み命令発生時の同期化のための通信に係る時間が増加してプログラム実行開始から終了までのプログラム実行時間において大きな割合を占め、プログラム実行時間が長くなるという問題があったが、本実施の形態を用いれば、上記のようにプログラム実行時間を短縮することが可能になる。
【００７４】
特に、プログラム処理時間に対し、データ転送の通信時間が長いという問題があった。従来の方法では、制御系と待機系が同じプログラムカウンタであるかどうか等のデータを互いにやり取りして確認するため、データ転送の間はプログラムを停止している必要があった。しかし、本実施の形態を用いればデータ転送の間もプログラムを実行できるので、プログラム実行時間を大幅に短縮することができる。
【００７５】
また、本実施の形態では、第２のＣＰＵユニット１１ｂは第１のＣＰＵユニット１１ａから送信された同期化情報に基づいて同期化プログラムを実行することで、第２のＣＰＵユニット１１ｂと第１のＣＰＵユニット１１ａとが同じ内容のプログラムを行うことの保証である同期化が行われている。そのため、第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂのそれぞれが外部にアクセスすることがなく、第１のＣＰＵユニット１１ａと第２のＣＰＵユニット１１ｂのそれぞれが外部にアクセスする場合に、外部アクセスを行った結果が同一であるかどうかを確認する動作も省略できる。
【００７６】
以上のように、本実施の形態を用いれば、同期化に要する時間を省略でき、プログラム実行時間を短縮するという効果が得られる。
【００７７】
実施の形態２．
図８に、本発明の実施の形態２に係る二重化プログラマブルコントローラにおいて、系切替命令実行による系切替方法を説明するためのタイムチャートを示す。本実施の形態は、制御系の第１のＣＰＵユニット１１ａに故障が発生しなくても、系切替命令を実行すれば、待機系の第２のＣＰＵユニット１１ｂを制御系に切り得られることを特徴とする。それ以外については、実施の形態１と同様である。本実施の形態によれば、第１のＣＰＵユニット１１ａの寿命が近付いてきたとき等に、故障が発生しなくても切替命令を実行することで、自由に系切替が可能になる。
【００７８】
図８において、二重化プログラマブルコントローラは、制御系の系切替命令が発生するまでは、図２と同様のシーケンスを行う。ステップＳ１４０からステップＳ１４４は制御系処理４０として第１のＣＰＵユニット１１ａの動作に対応し、ステップＳ１５０からステップＳ１５５は待機系の動作に対応する。それ以外は実施の形態１と同様である。
【００７９】
図８のステップＳ１４０において、制御系の第１のＣＰＵユニット１１ａに系切替命令が発生すると、第１のＣＰＵユニット１１ａは実行中のプログラム５０を停止し、停止前までのプログラム５０の実行内容であるデータと系切替命令が発生したことを第１の送受信バッファ１３ａに格納する。さらに、第１のＣＰＵユニット１１ａは第１の送受信バッファ１３ａに格納された同期化情報及び系切替命令を送信する送信命令を実行する。また、第１のＣＰＵユニット１１ａは自身を待機系に切り替える。
【００８０】
ステップＳ１４０の送信命令に従って、通信系処理４２は、トラッキングケーブル２０を介して第２の送受信バッファ１３ｂ宛に同期化情報と系切替命令を転送しする。
【００８１】
待機系であった第２のＣＰＵユニット１１ｂは、ステップＳ１５０において、系切替情報を同期化情報と同時に受信する。
【００８２】
ステップＳ１５１において、第２のＣＰＵユニット１１ｂは系切替情報と同期化情報を受信したことを新待機系となった第１のＣＰＵユニット１１ａへ通知し、ステップＳ１５２に移行する。
【００８３】
ステップＳ１５２において、第２のＣＰＵユニット１１ｂはＳ１２０と同様に待機系として、第１のＣＰＵユニット１１ａが実行したプログラム内容と同一内容を実行し終わるまで同期化プログラムを実行した後、ステップＳ１５３に移行する。
【００８４】
ステップＳ１５３において、待機系であった第２のＣＰＵユニット１１ｂは制御系へ系を切り替えて、ステップＳ１５４に移行する。このとき、二重化プログラマブルコントローラは、両系の系切替が終了し、第２のＣＰＵユニット１１ｂが新しく制御系になり、第１のＣＰＵユニット１１ａが新しく待機系となってプログラム実行を再開する。
【００８５】
以上の操作により、系切替命令実行後、制御系と待機系が継続してプログラム５０を実行することが可能となり、系切替命令を実行すれば、いずれかのＣＰＵユニットに故障が発生しなくても制御系と待機系を切り替えることができる。
【００８６】
本実施の形態は、デバッグ等の用途にも用いることができ、系切替に要する時間などを計測することが可能となる。
【００８７】
尚、本発明の実施の形態２では本発明の実施の形態１と相違する部分について説明し、同一または対応する部分についての説明は省略した。
【符号の説明】
【００８８】
１０ａ  第１のコントローラ、１０ｂ  第２のコントローラ、１１ａ  第１のＣＰＵユニット、１１ｂ  第２のＣＰＵユニット、１２ａ  第１の通信ユニット、１２ｂ  第２の通信ユニット、１３ａ  第１の送受信バッファ、１３ｂ  第２の送受信バッファ、１４ａ  第１のコネクタ、１４ｂ  第２のコネクタ、１５ａ  第１の分岐回数カウンタ、１５ｂ  第２の分岐回数カウンタ、１６ａ  第１のプログラムカウンタ、１６ｂ  第２のプログラムカウンタ、１７ａ  第１の比較部、１７ｂ  第２の比較部、２０  トラッキングケーブル、２１  通信ネットワーク、３０  外部コントローラ、３１  外部ＣＰＵユニット、３２  外部通信ユニット、４０  制御系処理、４１  待機系処理、４２  通信系処理、４３  同期割込みタイマ設定時間、５０  プログラム、５１  同期対象命令、５２  割込み命令、５３  同期タイマ割込み。
【図１】
2014137795.tif 000003
【図２】
2014137795.tif 000004
【図３】
2014137795.tif 000005
【図４】
2014137795.tif 000006
【図５】
2014137795.tif 000007
【図６】
2014137795.tif 000008
【図７】
2014137795.tif 000009
【図８】
2014137795.tif 000010