(57)【特許請求の範囲】
【請求項１】
制御側コントローラ及び待機側コントローラよりなる冗長化コントローラにおいて、
前記制御側コントローラ及び待機側コントローラ夫々に設けられ、汎用ＯＳを利用する制御ソフトウェアを実行エンジンとして所定のスキャン周期で動作する同一構成の制御タスクと、
これら制御タスクの夫々に入力するデータ及び制御演算を実行したデータを保持する、前記制御側コントローラ及び待機側コントローラ夫々に設けられたＩ／Ｏバッファと、
前記制御側コントローラ側で作動し、プロセスとの入出力を実行するＩ／Ｏデバイスと通信するＩ／Ｏドライバと、
前記制御タスクが前記Ｉ／Ｏデバイスに対する入出力を要求した時に前記制御側コントローラ及び待機側コントローラでコールされるＩ／Ｏハンドラと、
前記制御側コントローラでコールされたＩ／Ｏハンドラと前記待機側コントローラでコールされたＩ／Ｏハンドラ間の通信を中継する等値化ライブラリと、
を備え、
前記スキャン周期毎に、前記制御側コントローラのＩ／Ｏハンドラは、
データのリードの際、前記Ｉ／Ｏドライバからの入力データを、前記制御側コントローラのＩ／Ｏバッファに書き込むと共に、前記等値化ライブラリを介して前記待機側コントローラのＩ／Ｏハンドラと待ち合わせによる同期をとり、前記待機側コントローラのＩ／Ｏバッファに前記入力データのコピーを実行し、
データのライトの際、前記制御側コントローラのＩ／Ｏバッファの出力データを、前記等値化ライブラリを介して前記待機側コントローラのＩ／Ｏハンドラと待ち合わせにより同期をとり、前記制御側コントローラのＩ／Ｏドライバへ書き込む、
ことを特徴とする冗長化コントローラ。
【請求項２】
前記制御側コントローラ及び待機側コントローラは、外部装置と通信するソケットタスクを備え、前記制御側コントローラのソケットタスクは、前記外部装置からのリクエストを受信して自己側のリクエスト処理を指令すると共に、前記等値化ライブラリを介して前記待機側コントローラのソケットタスクに前記外部装置からのリクエストを通知することを特徴とする請求項１に記載の冗長化コントローラ。
【請求項３】
前記制御ソフトウェアがソフトＰＬＣで実現されたことを特徴とする請求項１または２に記載の冗長化コントローラ。
【請求項４】
前記ソフトＰＬＣがIEC61131-3規格に準拠したプログラム言語で記述されたことを特徴とする請求項３に記載の冗長化コントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセス制御システムにおいて、その制御を実行するコントローラの冗長化に関するものであり、特に実行エンジンとして機能する制御ソフトウェアがソフトＰＬＣ(Programmable Logic Controller)で実現されたコントローラの冗長化に関するものである。
【０００２】
【従来の技術】
出願人は、プロセス制御において同様な目的を達成する冗長化コントローラを、特開平７−３６７２０「二重化コンピュータ装置」で提案している。図４によりその構成と作用を説明する。
【０００３】
１及び２は、単体で実行可能な２つのコントローラ（制御側コントローラ及び待機側コントローラ）をシステムバス１０で結合した冗長化コントローラである。各コントローラにおいて、１１はオペレーティングシステム（ＯＳ）を格納したＯＳ実行メモリ手段、１２はＯＳの機能を使用（システムコール）しながら動作するアプリケーションプログラムを格納したプログラム実行メモリ手段である。
【０００４】
１３は、前記各メモリに格納されているプログラムに従って動作するＣＰＵ装置、１４は制御対象プロセスとの入出力を行うＩ／Ｏ装置であり、実際に制御に関与しているＩ／Ｏ装置をどちらがアクセスするかにより、１及び２は制御側コントローラと待機側コントローラとに分けられる。１５は、自身のＣＰＵ装置が受けた割り込みを相手側コントローラ内のＣＰＵ装置に伝えるプロセス装置間割り込み発生手段である。
【０００５】
１６はステップカウント手段であり、このＣＰＵ装置が実行するプログラムの起動によりスタートし、当該プログラムの実行ステップ数をカウントすると共にＣＰＵ装置への割り込みによりそれまで実行したステップ数を記憶する。
【０００６】
１７は同期ずれ調整手段であり、前記割り込みにより中断したプログラムの再起動時に、自身のステップカウント手段が記憶する実行ステップ数と相手コントローラ内のステップカウント手段が記憶する実行ステップ数とを比較し、その差が所定の値より大きい場合実行ステップ数が少ないコントローラ側のＣＰＵ装置に対して前記差のステップ数だけ先に動作を開始させ、双方のコントローラのＣＰＵ装置が同期して動作するように制御する。
【０００７】
このように、実際に制御に関与しているＩ／Ｏ装置をどちらがアクセスするかにより制御側と待機側とに分けられる２つのコントローラで構成される冗長化コントローラにおいて、各コントローラに、アプリケーションソフトウェアの実行ステップ数をカウントする手段と、同期ずれ調整手段とを設け、割り込み処理の機会を捕らえて自動的に同期がとられるように構成した点を特徴としている。
【０００８】
従って、制御側コントローラと待機側コントローラとは、同様の処理を同期して常に実行することとなり、大がかりなシステムを構築しなくとも、制御側がダウンしたような場合における待機側コントローラへの制御動作の切替えを、継続性を維持しながら即座に行うことができる。
【０００９】
また、２つのコントローラが同期をとる動作をシステムコールに基づいて行う場合であって、システムコールが長時間行われないような場合でも、同期動作のずれを本質的に回避することができる。従って、アプリケーションプログラムは、その設計時において冗長化処理（同期化のための処理）を意識しなくともよく、アプリケーションプログラムの作成を容易に行うことができる。
【００１０】
【発明が解決しようとする課題】
このような冗長化コントローラは、冗長化を実現するために高度にカスタマイズされた専用ハードウェアおよびＯＳを用いており、そのプラットフォーム上で動作するアプリケーションソフトウェアが一切、冗長化を意識する必要がないという意味で完璧な冗長化システムと言える。
【００１１】
しかしながら、昨今のコンピュータシステムの技術革新は著しく速く、ハードウェアおよびＯＳの進化に対し、従来の冗長化方式を適用するには全てを自社開発する必要があり、膨大なコストおよび時間を要することになる。
【００１２】
近年、システムの実行エンジンを、ソフトウェアで機能が定義されたソフトＰＬＣ（Programmable Logic Controller）で構築する場合が多い。更にこのソフトＰＬＣとして、IEC6113-3規格に準拠したプログラム言語で記述されたものを使用することにより、システムのオープン化、標準化を推進する趨勢にある。
この場合、ＰＣのＯＳ及びソフトＰＬＣ用ＯＳは、市販の汎用システムを利用し、汎用のＰＣ上で作動するマルチベンダ環境を構築する。
【００１３】
一方、従来技術では、前記のように専用のハードウェアが必要となり、ＰＣをはじめとする汎用のコンピュータシステムに適用することができない。つまり、移植性がない。
更に、ＯＳ及びデバイスドライバに高度な冗長化制御の仕組みを入れる必要があり、市販のＯＳに対し、これらの機能を組み込むことは事実上困難である。
【００１４】
本発明は、特殊なハードウェア及び冗長化制御の仕組みを入れた特殊なＯＳを必要とせず、汎用のハードウェア及びＯＳで実現可能な冗長化コントローラの提供を目的とする。
【００１５】
【課題を解決するための手段】
このような課題を達成するために、本発明のうち請求項１記載発明の特徴は、制御側コントローラ及び待機側コントローラよりなる冗長化コントローラにおいて、
前記制御側コントローラ及び待機側コントローラ夫々に設けられ、汎用ＯＳを利用する制御ソフトウェアを実行エンジンとして所定のスキャン周期で動作する同一構成の制御タスクと、
これら制御タスクの夫々に入力するデータ及び制御演算を実行したデータを保持する、前記制御側コントローラ及び待機側コントローラ夫々に設けられたＩ／Ｏバッファと、
前記制御側コントローラ側で作動し、プロセスとの入出力を実行するＩ／Ｏデバイスと通信するＩ／Ｏドライバと、
前記制御タスクが前記Ｉ／Ｏデバイスに対する入出力を要求した時に前記制御側コントローラ及び待機側コントローラでコールされるＩ／Ｏハンドラと、
前記制御側コントローラでコールされたＩ／Ｏハンドラと前記待機側コントローラでコールされたＩ／Ｏハンドラ間の通信を中継する等値化ライブラリと、
を備え、
前記スキャン周期毎に、前記制御側コントローラのＩ／Ｏハンドラは、
データのリードの際、前記Ｉ／Ｏドライバからの入力データを、前記制御側コントローラのＩ／Ｏバッファに書き込むと共に、前記等値化ライブラリを介して前記待機側コントローラのＩ／Ｏハンドラと待ち合わせによる同期をとり、前記待機側コントローラのＩ／Ｏバッファに前記入力データのコピーを実行し、
データのライトの際、前記制御側コントローラのＩ／Ｏバッファの出力データを、前記等値化ライブラリを介して前記待機側コントローラのＩ／Ｏハンドラと待ち合わせにより同期をとり、前記制御側コントローラのＩ／Ｏドライバへ書き込む、点にある。
【００１６】
請求項２記載発明の特徴は、前記制御側コントローラ及び待機側コントローラは、外部装置と通信するソケットタスクを備え、前記制御側コントローラのソケットタスクは、前記外部装置からのリクエストを受信して自己側のリクエスト処理を指令すると共に、前記等値化ライブラリを介して前記待機側コントローラのソケットタスクに前記外部装置からのリクエストを通知する点にある。
【００１７】
請求項３記載発明の特徴は、前記制御ソフトウェアがソフトＰＬＣで実現された点にある。
【００１８】
請求項４記載発明の特徴は、前記ソフトＰＬＣがIEC61131-3規格に準拠したプログラム言語で記述された点にある。
【００２０】
【発明の実施の形態】
以下、本発明実施態様を、図面を用いて説明する。図１は本発明を適用した冗長化コントローラの概念を説明する機能ブロック図である。
本発明冗長化コントローラは、ハードウェアの構成としては、単体で動作するコンポーネント（ＣＰＵカード、Ｉ／Ｏカード等）を制御側コントローラ１と待機側コントローラ２のペア構成とし、両者をシステムバス（図示せず）で結合する。ソフトウェアは、まったく同一のプログラム（ＯＳおよびアプリケーション）をそれぞれのコントローラで実行させ、両者が互いに同期をとることで並列実行する。
【００２１】
冗長化された各コントローラは、実制御を行うもの(制御側)と実制御には関与せず待機しているもの（待機側）とに別れるが、制御側・待機側とも基本的にはまったく同一の処理を行っている。制御側・待機側の区別は、実際にＩ／Ｏを行っているかどうかにより区別される。
Ｉ／Ｏの出力は制御側のみが行い。入力は制御側が読込みを行い、待機側に入力データを受け渡す。制御側がダウンした場合は、すみやかに制御権が待機側に移行する。
【００２２】
各コントローラ１及び２において、３は実行エンジンとして機能する制御ソフトウェアであり、ソフトＰＬＣによる１個又は複数個のユーザ定義のタスク（タスクＡ、タスクＢ）と、これらタスクに対するデータの入出力を行うＩ／Ｏバッファを有する。
【００２３】
３１は制御ソフトウェアを実行エンジンとする、ソフトＰＬＣによる制御タスクであり、ユーザがIEC61131-3規格に準拠したプログラム言語により自由に構築することができる。４は制御ソフトウェア３とは非同期で実行される各種のアプリケーションソフトウェアである。アプリケーションソフトウェア４は、例えば文書作成、表計算等を行うソフトウェアである。５はＩ／Ｏドライバであり、制御側コントローラ１のみがプロセスとの入出力を実行するＩ／Ｏデバイス６と通信する。
【００２４】
制御ソフトウェア上では、ユーザ定義の制御タスクがスキャン周期ごとに定周期で動作し、Ｉ／Ｏバッファにアクセスし、データの入出力を行う。制御タスクは、基本的にスキャンの先頭でＩ／Ｏバッファを介してデータの入力を行い、各制御プログラム(ファンクションブロック・シーケンシャルファンクションブロック等の演算処理)を実行後、最後にＩ／Ｏバッファへの出力を行う。
【００２５】
Ｉ／Ｏデバイス６への入出力は、制御側コントローラのＩ／Ｏドライバ５をコールすることで行われる。この際、制御・待機間で同期(待ち合わせ)およびＩ／Ｏデータの等値化処理を行うことで、制御・待機間の制御タスクは同一の処理を同期して実行する。
【００２６】
図２により、制御タスクの同期動作を説明する。本発明では、制御側・待機側間でＩ／Ｏ入出力の待ち合わせを行うことで、制御タスクの同期実行を実現する。
制御タスク３１は、スキャンの先頭でＩ／Ｏの入力を行う。Ｉ／Ｏ入力処理で制御側と待機側の同期(待ち合わせ)を行い、制御側が読込んだＩ／Ｏデータを待機側にコピー（等値化）する。
【００２７】
IEC61131-3規格に準拠したプログラム言語で記述された各制御プログラムが実行される。この際、Ｉ／Ｏの出力が行われるが、出力はＩ／Ｏバッファ５に対して行われ、実際のＩ／Ｏデバイス６への出力は行われない。このため、制御側・待機側間で出力の同期をとる必要はない。
【００２８】
制御側コントローラにおける制御タスク３１は、最後にＩ／Ｏバッファ５のデータを実際のＩ／Ｏデバイス６に出力する。
Ｉ／Ｏの出力処理において、Ｉ／Ｏを即時出力(Ｉ／Ｏバッファ手段への出力と同時に実際のＩ／Ｏデバイス６への書込みも行う)するようにコンフィグレーションすることも可能である。
この場合も、Ｉ／Ｏ出力処理で制御側・待機側の同期をとるため、制御・待機間の処理の連続性は保証される。
【００２９】
つまり、制御・待機間でタスクの動作タイミングが異なってもＩ／Ｏの入出力のタイミングで同期がとられ、同期実行することにより、制御側の異常が発生した場合、すみやかに制御を待機側に切替えることが可能となり、制御タスクの処理は途切れることなく継続して制御を行うことができる。
【００３０】
ただし、同一タスク同士の同期はとられるが、タスクのスケジューリング(動作順序)は制御・待機間で異なる可能性がある。例えば、制御側ではタスクA、タスクBの順に起動されるが、待機ではタスクB、タスクAの順に起動される場合がある。
【００３１】
制御ソフトウェア３に関係のない一般的なアプリケーション４は、制御側・待機側間で非同期に実行される。つまり、制御側と待機側の同一のアプリケーション間でも実行中の処理は異なっている可能性があり、制御権切替え時、処理の連続性は保証されない。
【００３２】
図3により、制御ソフトウェア１及びその周辺関連機能の具体的構成例を説明する。
【００３３】
バスドライバ２７は、コントローラのバックプレーンバスであるシステムバスの制御を行うドライバである。このシステムバスには各種Ｉ／Ｏデバイスが接続され、Ｉ／Ｏドライバ２８のＩ／Ｏカードアクセスを行う。
更にこのバスドライバ２７は、制御側・待機側間の同期およびＩ／Ｏを始めとするデータの等値化を行うための等値化ライブラリ２９との通信バスとして使用される。等値化通信に使用する通信バスは、汎用のバスも使用可能である。
【００３４】
２８はシステムバスのＩ／Ｏドライバ、２１０は各種Ｉ／Ｏのカード制御を行うＩ／Ｏドライバである。これらＩ／Ｏドライバは、制御側コントローラでのみ動作し、待機側はなにも処理を行わない。相手側コントローラＣＰＵとの同期・等値化はＩ／Ｏハンドラで行うため、基本的に冗長化は意識しない。
【００３５】
２３２は制御ソフトウェア内のＩ／Ｏハンドラであり、制御タスクがＩ／Ｏの入出力を行う際にコールされ、データのリード・ライトを実行する。データのリード時は、Ｉ／Ｏドライバ２８、２１０から読込んだデータをＩ／Ｏバッファ手段に書込み、等値化ライブラリ２９を通して待機側Ｉ／Ｏハンドラとの同期および入力データのコピーを行う。ライト時は、等値化ライブラリ２９を通して待機側Ｉ／Ｏハンドラと同期をとり、Ｉ／Ｏバッファ手段の出力データをＩ／Ｏドライバ手段へ書込む。
【００３６】
２３４はＴＣＰ／ＩＰソケットタスクであり、制御バスドライバ２１１を介して制御ソフトウェアのコンフィグレータ、ヒューマン・マシンインターフェイス、他コントローラ等のステーション（図示せず）と通信する。このソケットタスクは、イーサネット（登録商標）、ＴＣＰ／ＩＰを通信媒体としたコミュニケーションインターフェイスである。
制御ソフトウェアでは、制御バスドライバ２１１を介した通信をコミュニケーションインターフェイス通信というプロトコルで定義しており、様々な通信媒体（ＲＳ２３２Ｃやベンダ固有のバス）に適応可能な構成となっている。
【００３７】
このソケットタスクは、前記コンフィグレータ等のクライアントリクエストを受信すると、サーバータスク２３５にリクエスト処理を依頼するとともに、等値化ライブラリ２９を通して待機側のＴＣＰ／ＩＰソケットタスク（図示せず）にリクエストを通知することで、コントローラに対する外部からのアクセスに対し、制御側・待機側間の内部状態の等値化を行う。
【００３８】
２１２は、制御権監視タスクであり、制御側・待機側の状態を監視して、制御権の切替えを実行する。本タスクの機能(コントローラの異常検出と通知)をハードウェアで実現することで、切替え時間の短縮（１秒以内）を行うことが可能となる。
【００３９】
【発明の効果】
以上説明したことから明らかなように、本発明によれば、特殊なハードウェア及び冗長化制御の仕組みを入れた特殊なＯＳを必要とせず、汎用のハードウェア及びＯＳにより、冗長化コントローラを容易に実現することが可能となる。更に本発明は、ＯＳへの依存度が低いので、市販ＯＳへのポーティングが容易である。
【００４０】
特に、冗長化システムの実行エンジンがソフトＰＬＣで実現され、更にこのソフトＰＬＣが、IEC6113-3規格に準拠したプログラム言語で記述されたものに適用した場合は、システムのオープン化、標準化利用環境の構築に貢献することができる。
【図面の簡単な説明】
【図１】本発明を適用した冗長化コントローラの概念を説明する機能ブロック図である。
【図２】本発明における制御側及び待機側の制御タスクの同期動作を説明するタイムチャート図である。
【図３】本発明における制御ソフトウェアの具体的な構成例を示す機能ブロック図である。
【図４】従来の冗長化コントローラの例を説明するシステム構成図である。
【符号の説明】
１    制御側コントローラ
２    待機側コントローラ
３    制御ソフトウェア
３１  制御タスク
３２  Ｉ／Ｏバッファ
４    アプリケーション
５    Ｉ／Ｏドライバ
６    Ｉ／Ｏデバイス
【図１】
0004099816.tif 000002
【図２】
0004099816.tif 000003
【図３】
0004099816.tif 000004
【図４】
0004099816.tif 000005