入出力二重化装置
【課題】二重化制御のために専用の装置を用いることなく、CPUモジュールの負荷を軽減して、安価で信頼性の高い入出力二重化装置を提供すること。
【解決手段】バスを通してCPUモジュールと繋がる入出力モジュールに対して、相手系と接続され動作モードを送受信する通信手段と、通信手段によって受信された相手系の動作モードと自系の自己診断結果に基づいて、自系の動作モードを決定し、決定した動作モードをCPUモジュールへ通知する動作モード調整手段と、決定された動作モードに基づいて、自系が稼動側の場合は、CPUモジュールから設定パラメータを入力し、該設定パラメータを用いて入出力処理を実行させる一方、相手系へ該設定パラメータを送信し、自系が待機側の場合は、相手系から送信されてくる設定パラメータを受信し、受信した設定パラメータを用いて入力処理または出力処理を実行させるコマンド送受信手段とを設ける。
【解決手段】バスを通してCPUモジュールと繋がる入出力モジュールに対して、相手系と接続され動作モードを送受信する通信手段と、通信手段によって受信された相手系の動作モードと自系の自己診断結果に基づいて、自系の動作モードを決定し、決定した動作モードをCPUモジュールへ通知する動作モード調整手段と、決定された動作モードに基づいて、自系が稼動側の場合は、CPUモジュールから設定パラメータを入力し、該設定パラメータを用いて入出力処理を実行させる一方、相手系へ該設定パラメータを送信し、自系が待機側の場合は、相手系から送信されてくる設定パラメータを受信し、受信した設定パラメータを用いて入力処理または出力処理を実行させるコマンド送受信手段とを設ける。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、主にプログラマブルコントローラやネットワーク端末などに用いられる入出力モジュールの二重化技術に関し、同じユニット内でCPUモジュールとバスを共有する入出力モジュールが二重化されたシステム構成における入出力二重化装置に関する。
【背景技術】
【0002】
従来の入出力二重化装置は、図19に示すように、アプリケーションを含む装置全体の演算処理を実行するCPUモジュールと、同じ装置内のベースボードのバスを介してCPUモジュールとデータの受け渡しを行い、入力処理や出力処理を実行する入出力モジュールが実装されている。装置の信頼性や稼働率を上げるためにこの入出力モジュールが二重化された構成が採用されている。なお、入出力モジュールとしては、アナログ入力モジュールやデジタル入力モジュールなどのように入力機能のみの場合、アナログ出力モジュールやデジタル出力モジュールなどのように出力機能のみ場合、あるいは両方の機能が実装されている場合がある。
【0003】
図20は、従来の二重化構成による入出力二重化装置のブロック図である。この図において、従来の入出力二重化装置100は、CPUモジュール2と二以上の入出力モジュール99で構成されている。図20は、アナログ入力モジュールを用いた例であるが、入出力モジュールの機能によって外部I/F部の回路や外部機器との接続方法が異なる。
【0004】
CPUモジュール2と入出力モジュール99は、複数の信号線からなるバス3で接続されている。なお、図示していないが、入出力二重化装置100は、電源モジュールも有しており、電源線またはベースボード上の電源パターンを通して各モジュールに電力を供給している。また、バス3はベースボードを使わず直接コネクタでモジュール間を接続する場合もある。
【0005】
各入出力モジュール99は、共有メモリを有しバス3を介してCPUモジュール2との間でデータの受け渡しを行うバスインタフェース(以下、BUSI/F)回路15、入力処理や出力処理などの種々の演算処理を実行するCPU回路11、入力信号や出力信号の変換処理を行う外部I/F部97を備えている。
【0006】
CPUモジュール2は、バス3と各入出力モジュール10に設けられているBUSI/F回路15を介して、データの受け渡しを行う。このBUSI/F回路15は、図21に示すように、主にデコード回路81と共有メモリ82で構成され、デコード回路81によってCPUモジュール2から出力されるアドレスバスの上位アドレスをデコードし、共有メモリ82の選択信号を生成する。また、アドレスバスの下位側の所定数のアドレス信号、読み出し信号、書き込み信号は、共有メモリ82に接続されている。図21では省略しているが、入出力モジュールのCPU回路11側も同様の信号が共有メモリ82に接続されている。
【0007】
入出力二重化装置100は、上記の構成を有する入出力モジュール99を複数有し、各入出力モジュール99はCPUモジュール2からの指令によって種々のパラメータの設定が行われる。また、稼動側入出力モジュール(以下、「稼動側モジュール」または単に「稼動側」という。)と待機側入出力モジュール(以下、「待機側モジュール」または単に「待機側」という。)は、外部機器9との間で二重化のための配線が施され、運用時はCPUモジュール2からの指令によって稼動/待機の動作モードの設定が行われる。なお、二重化のための配線のしかたは入力機能や出力機能によって異なる。図20は、入力機能の場合の例であるが、出力機能の場合は、出力端にリレー接点を設け、動作モードが稼動の場合は「閉」、動作モードが待機の場合は「開」にするのが一般的である。なお、入力機能の場合でも、必要により入力端に切替スイッチを設けて稼動側モジュールのみに外部機器9からの信号が入力されるように構成することもある。
【0008】
上記の構成を有する入出力モジュール99に対して、CPUモジュール2は、各入出力モジュール99の自己診断結果や、入出力モジュール99との間の診断などによって異常を検知すると、CPUモジュール2から各入出力モジュール99へ稼動/待機切替指令を出力して、稼動側モジュールを切り替えている。
【0009】
このように従来は、CPUモジュール2が入出力モジュール99の二重化制御を行っていたため、その処理負荷が高くなるという問題があった。このため、たとえば特許文献1では、CPUモジュールの負荷を軽減するために、CPUモジュールと入出力モジュールとの間に監視モジュール(データ二重化装置)を設け、この監視モジュールに二重化された入出力モジュールの制御を実行させるシステム及び方法が提案されている。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2005−196490号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、特許文献1の技術によれば、CPUモジュールの負荷は軽減されるものの監視モジュールを必要とするため、コストアップの要因になる。
【0012】
本発明は上述のかかる事情に鑑みてなされたものであり、二重化制御のために専用の装置を用いることなく、CPUモジュールの負荷を軽減して、安価で信頼性の高い入出力二重化装置を提供することを目的とする。
【課題を解決するための手段】
【0013】
上記の目的を達成するため、本発明に係る入出力二重化装置は、同一ユニット内に実装され、演算処理を実行するCPUモジュールと共有メモリを介してデータの受け渡しを行い、夫々動作モードとして稼動側または待機側として機能する少なくとも一対の入出力モジュールを備えた入出力二重化装置であって、夫々の前記入出力モジュールは、相手側の入出力モジュール(以下、「相手系」という)と接続され、動作モードを送受信する通信手段と、前記通信手段によって受信される相手系の動作モードと、自己側の入出力モジュール(以下、「自系」という)の自己診断結果に基づいて、自系の動作モードを決定し、当該決定した動作モードを前記CPUモジュールへ通知する動作モード調整手段と、前記動作モード調整手段によって決定された動作モードに基づいて、自系が稼動側の場合は、前記CPUモジュールから設定パラメータを入力し、該設定パラメータを用いて入力処理または出力処理を実行させる一方、相手系へ該設定パラメータを送信し、自系が待機側の場合は、相手系から送信されてくる設定パラメータを受信し、当該受信した設定パラメータを用いて入力処理または出力処理を実行させるコマンド送受信手段と、を備え、前記CPUモジュールは、稼動側の入出力モジュールのみに前記設定パラメータを出力することを特徴とする。
【0014】
ここで、「設定パラメータ」とは、入出力モジュールを所定の仕様で動作させるためのパラメータであり、例えばアナログ入出力ではスケール変換値、デジタル出力ではパルス幅、デジタル入力ではフィルタ時間などがある。
【0015】
本発明では、各入出力モジュールの備える動作モード調整手段によって、稼動側、待機側を決定し、稼動側/待機側の動作モード情報をCPUモジュールへ通知する。CPUモジュールは、稼動側の入出力モジュールに対してのみ設定パラメータを送信する。これにより、CPUモジュールの負荷を軽減させることができる。
【0016】
また、本発明に係る入出力二重化装置の動作モード調整手段は、自系の自己診断結果が正常のときの自系の動作モードの決定において、受信された前記相手系の動作モードが待機側の場合、自系の動作モードを稼動側に仮設定すると共に相手系へ自系が稼動側であることを通知し、この通知に対する相手系からの応答を受信し、この応答に含まれる相手系の動作モードも待機側のとき、前記仮設定を本設定にして自系の動作モードを稼動側に決定し、前記応答に含まれる相手系の動作モードが稼動側のとき、前記仮設定を解除し、自系の動作モードを待機側に決定することを特徴とする。
【0017】
本発明では、動作モードの決定の際に、相手系の動作モードが待機側の場合に直ちに自系が稼動側であると決定するのではなく、まず稼動側として仮設定をする。この仮設定状態のときは、相手系に自系が稼動側であることは通知するが、CPUモジュールへは自系が稼動側であることは通知しない。自系が稼動側として仮設定されている状態のときに、仮設定状態であることの相手側への通知に対する応答として受信した相手形の動作モードが尚も待機側である場合は、仮設定を本設定にして、このときCPUモジュールへ自系が稼動側であると決定したことを通知するのである。
【0018】
これにより、特にシステム立ち上がり時の各入出力モジュールの動作モードの決定処理において、相手系と自系の動作モードが競合しても、CPUモジュールへ通知する動作モードが不安定になることはなく、安定したシステム動作を実現することができる。
【0019】
特に動作モード調整手段は、自系と相手系が互いに稼動側として動作モードが競合したときに、一旦自系を待機側に移すと共に、動作モードの送信タイミングをずらすことによって、動作モードの調整を迅速かつ確実に実行することができる。
【0020】
また、本発明に係る入出力二重化装置では、稼動側および待機側の入出力モジュールが夫々備える共有メモリのCPUモジュール側は同一のアドレス空間が割り付けられており、夫々の前記入出力モジュールは、稼動側のときにのみ前記CPUモジュールの当該共有メモリへのアクセスを許可することを特徴とする。
【0021】
これにより、CPUモジュールのメモリ空間を節約することができ、ユニットへ実装可能な入出力モジュール数を増やしたり、安価なCPUの採用を可能にするなど、コストパフォーマンスの高い入出力二重化装置を実現することができる。
【0022】
なお、CPUモジュールは、稼動側を待機側に切り替えるための稼動/待機切替信号を稼動側の入出力モジュールへ送信し、稼動側の入出力モジュールは、前記稼動/待機切替信号を受信して、自系を待機側へ切り替えることにより、相手系を稼動側へ移行させることにより、動作モードの切替を行う。これにより、CPUモジュールは、二重化処理の負担を軽減することができる。
【0023】
さらに、本発明に係る入出力二重化装置は、入出力モジュールとしてアナログ入力モジュールを用いる入出力二重化装置であって、稼動側アナログ入力モジュールは、入力されるアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値を登録する稼動側基本情報登録手段と、該稼動側アナログ入力モジュールのA/D変換誤差を修正するための稼動側校正値および外部機器から出力されるアナログ信号のA/D変換値をそれぞれ入力する稼動側計測値入力手段と、前記外部機器の特性に合わせるための機器調整値を保持する稼動側記憶手段と、前記機器調整値と前記理論調整スケール値と前記稼動側校正値とを用いて待機側アナログ入力モジュールのA/D変換値の修正に使用する補正値を演算し、この補正値を周期的に前記待機側アナログ入力モジュールへ送信する補正値送信手段と、前記稼動側計測値入力手段によって入力されたアナログ信号のA/D変換値を前記稼動側記憶手段に保持されている機器調整値によって修正したA/D変換値を出力する出力値算出手段と、を備え、前記待機側アナログ入力モジュールは、入力されるアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値を登録する待機側基本情報登録手段と、該待機側アナログ入力モジュールのA/D変換誤差を修正するための待機側校正値および前記外部機器から出力されるアナログ信号のA/D変換値をそれぞれ入力する待機側計測値入力手段と、前記補正値送信手段によって送信された補正値を受信し、この補正値と前記理論調整スケール値と前記待機側校正値とを用いて待機側の機器調整値を演算して待機側記憶手段に保存する演算保存手段と、を備え、前記待機側アナログ入力モジュールは、所定の期間、前記補正値送信手段から補正値を受信しないことにより、稼動側アナログ入力モジュールとして動作することを特徴とする。
【0024】
ここで、「所定の期間」とは、補正値の送信周期をもとに予め設定される値であり、プログラマブルコントローラの制御周期(データリフレッシュ周期)に影響を与えない程度の期間をいう。例えば、制御周期を10mSとしたプログラマブルコントローラシステムに適用する場合は、所定の期間は10mS以下の値に設定し、送信周期はこの設定値の数分の1程度にするのが好ましい。
【0025】
本発明では、稼動側アナログ入力モジュールは、現地で機器調整値を入力して自モジュールの記憶部に保存する一方で、この機器調整値を用いて補正値を演算し、当該補正値を待機側アナログ入力モジュールへ送信する。待機側アナログ入力モジュールでは、受信した補正値を用いて、当該アナログ入力モジュールとしての機器調整値を算出して自モジュールの記憶部に保存しておく。そして、所定の期間補正値が受信されないことにより稼動側入力モジュールの異常を検知して、自モジュールが稼動側アナログ入力モジュールとして動作する。このとき、自モジュールの記憶部に保存されている機器調整値を用いて、入力したA/D変換値の修正を行うので、待機側アナログ入力モジュールとしては外部機器の特性に合わせるための機器調整値の入力は不要になる。また、故障したアナログ入力モジュールの交換時には、交換され待機側として立ち上がったアナログ入力モジュールは新たに稼動側になったアナログ入力モジュールから自動的に補正値を受信することになるので、交換するアナログ入力モジュールについても外部機器の特性に合わせるための機器調整が不要になる。このため稼働率が向上する。
【0026】
また、本発明に係る入出力二重化方法は、稼動側と待機側からなりアナログ値をデジタル値に変換して入力するアナログ入力モジュールを二重化して用いる方法であって、入力するアナログ値の範囲とデジタル値の範囲の対応関係(63)を稼動側と待機側の両方に共通の設定値として設定し、稼動側と待機側のそれぞれでA/D変換誤差を修正するための校正値(64)を入力し、該校正値と前記対応関係(63)から調整用スケール変換データを計算し、稼動側において、外部機器(9)の特性に合わせるための機器調整値(65)を入力し、入力した機器調整値(65)と校正値(64)との差を稼動側の調整用スケール変換データによってスケール変換して下限値および上限値による補正値(68)を算出すると共に該補正値を待機側へ送信し、待機側において、受信した補正値と待機側の調整用スケール変換データを用いて、待機側の機器調整値(65)を計算し、稼動側と待機側の少なくともいずれか一方において、入力した計測値を夫々が保持する機器調整値(65)を用いて修正することを特徴とする。
【0027】
本発明によれば、稼動側において、現地調整により機器調整値を求め、これを用いて補正値を算出し、この補正値を待機側へ送信し、待機側モジュールではこの補正値を用いて自モジュール用の機器調整値を計算するようにしたので、システム立ち上げ時は、稼動側モジュールのみ現地調整を行えば良く、また、片方のアナログ入力モジュールが故障した場合には、他方のアナログ入力モジュールが稼動側となり、待機側として実装される交換品に対して、当該補正値を転送するので、交換作業時の現地調整は不要となる。
【0028】
また、本発明に係るアナログ入力モジュール(10)は、稼動側か或いは待機側かの動作モードが設定可能なアナログ入力モジュールであって、動作モードの初期値(61)、入力するアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値(63)を登録する基本情報登録手段(42)と、A/D変換誤差を修正するための校正値(64)および外部機器(9)から出力されるアナログ信号のA/D変換値(66)を入力する計測値入力手段(43)と、動作モードが稼動側のときに、外部機器(9)の特性に合わせるための機器調整値(65)を入力し、当該入力した機器調整値(65)と理論調整スケール値(63)と校正値(64)とを用いて補正値(68)を演算し、当該演算した補正値を送信する手段(調整値変換手段44,補正値算出手段45,補正値送信手段47)と、動作モードが待機側のときに、稼動側から送られてくる補正値(68)を受信し、当該受信した補正値(68)と理論調整スケール値(63)と校正値(64)とを用いて機器調整値を演算する手段(補正値受信手段48,機器補正値変換手段50,機器調整値算出手段51)と、計測値入力手段(43)によって入力されたA/D変換値(66)を機器調整値(65)によって修正する出力値算出手段(46)と、を備えたことを特徴とする。
【0029】
本発明では、動作モードが稼動側のときは、入力した機器調整値と理論調整スケール値と校正値とを用いて補正値を算出して送信し、動作モードが待機側のときは、稼動側から送られてくる補正値を受信し、当該受信した補正値を用いて機器調整値を演算する。そして、計測値入力手段によって入力されたA/D変換値を機器調整値によって修正する。
【0030】
好ましくは、出力値算出手段(46)は、入力するアナログ値の範囲とデジタル値の範囲のアプリケーションプログラムへ渡すデジタル値の範囲の対応関係を示すユーザ要求スケール値によって、前記修正したA/D変換値をさらにスケール変換するようにすると良い。
【0031】
本発明に係るアナログ入力モジュール(10)は、さらに、動作モードが稼動側のときは、補正値(68)を周期的に待機側へ送信する一方、待機側からの該補正値の送信に対する応答の有無によって待機側の異常の有無を判定し、動作モードが待機側のときは、補正値の受信に対して応答する一方、補正値が周期的に送られてくるか否かによって稼動側の異常の有無の判定を行う稼動/待機判定手段(52)を備えたことを特徴とする。
【0032】
本発明では、補正値を周期的に送信することにより、アナログ入力モジュールを活線状態で差替えても自動的に待機側へ補正値が転送されるので、システム停止やリセットの必要がなく稼働率が向上する。
【発明の効果】
【0033】
本発明によれば、二重化を構成する入出力モジュール間で稼動/待機の動作モードの調整を実行し、アプリケーション層を介さずに補正値などの設定パラメータの転送を実行するので、CPUモジュールは二重化制御や待機側に対する処理をする必要がなくなりCPU負荷を軽減することができる。
【0034】
さらに、入出力モジュールの動作モードの判定結果により、稼動側の入出力モジュールのみがCPUモジュールからのアクセスを可能にすることによって、CPUモジュールのメモリ空間を節約することができる。
【図面の簡単な説明】
【0035】
【図1】本発明の第1の実施の形態による入出力二重化装置1の機能ブロック図である。
【図2】本発明の実施の形態による入出力二重化装置1のモジュール実装図である。
【図3】図1のCPU回路11の機能ブロック図である。
【図4】本発明の第1の実施の形態によるCPUモジュール2のメモリマップの説明図である。
【図5】図3の動作モード調整手段72の処理手順を示すフローチャートである。
【図6】図3の動作モード管理テーブル73のデータ構成例である。
【図7】図1のCPUモジュール2の入出力処理手順を示すフローチャートである。
【図8】本発明の第2の実施の形態によるCPUモジュール2のメモリマップの説明図である。
【図9】本発明の第2の実施の形態による入出力モジュール10の機能ブロック図である。
【図10】図9の動作モード判定部30とBUSI/F回路15の構成図である。
【図11】本発明の第2の実施の形態による動作モード調整手段72の処理手順をに示すフローチャートである。
【図12】本発明の第2の実施の形態によるCPUモジュール2の処理手順をに示すフローチャートである。
【図13】本発明の実施の形態による入出力二重化装置1のブロック図である。
【図14】図13のアナログ入力モジュール10の機能ブロック図である。
【図15】図14に示すアナログ入力モジュール10を稼動側と待機側の二重化構成で用いた場合の処理概要を説明するためのブロック図である。
【図16】図13の入出力二重化装置1の現地での動作概要の処理手順を示すフローチャートである。
【図17】外部A/D変換値(理論調整値scale)と、内部A/D変換値(校正値および機器調整値)との関係を示す説明図であり、図17(a)は稼動側モジュールの説明図、図17(2)は待機側モジュールの説明図である。
【図18】現地調整時の外部機器の特性への合わせこみの説明図である。
【図19】従来技術による入出力二重化装置のユニット実装図である。
【図20】従来技術による二重化構成による入出力二重化装置のブロック図である。
【図21】図20の従来のBUSI/F回路15の構成図である。
【発明を実施するための形態】
【0036】
以下、図面を参照しながら本発明の実施の形態を説明する。なお、同じ構成には同一符号を付している。
【0037】
図1は、本発明の第1の実施の形態による入出力二重化装置1の機能ブロック図である。図20に示した従来のハードウェア構成との主な違いは、二重化構成による稼動側と待機側の入出力モジュール間のシリアル通信を行う通信部96を設け、通信ケーブル5で稼動側と待機側を接続したことである。この通信部96は、データを送信回路21、データを受信する受信回路22、および、信号を絶縁する絶縁回路23から構成されている。
【0038】
この入出力二重化装置1において、各入出力モジュール10は、二重化されたモジュール間で一定のデータを受け渡すことによって、自系が稼動側になるべきか、待機側になるべきかの判定を行うものである。
【0039】
図2は、本実施の形態による入出力二重化装置1のモジュール実装図である。
この図において、入出力二重化装置1は、CPUモジュール2と、稼動系または待機系として動作する一対(ペア)の入出力モジュール10が複数ペア実装されている。
【0040】
CPUモジュール2および各入出力モジュール10は、ユニットに実装され、各モジュールのコネクタを介してベースボードのバス3と接続する。このバス3は、アドレスバス、データバスの他、読み出し信号、書き込み信号などのコントロールバスで構成されている。
【0041】
図3は、本実施の形態による入出力モジュール10のCPU回路11の機能ブロック図である。この図において、CPU回路11は、プログラムのストール監視やメモリチェックなどを行う自己診断手段71、CPUモジュール2との間でデータの受け渡し処理を行うCPUI/F手段41、相手系との間で稼動/待機の動作モードを調整する動作モード調整手段72、二重化構成において相手系の健全性確認その他の設定パラメータの受け渡しを行い相手系が正常か異常かの判定結果を出力するコマンド送受信手段49を有している。
【0042】
自己診断手段71は、電源投入時やシステムリセット時、その後周期的に診断処理を実行し、その診断結果を動作モード調整手段72に渡す。
【0043】
コマンド送受信手段49のいわゆる相手系診断処理は、通信部96を介して定期的に診断チェック用データが送信されてくるか否かを判定し、一定時間データが送られてこない場合は相手系異常として判定し、その判定結果を動作モード調整手段72に渡す。なお、診断チェック用データとして設定パラメータを兼用してもよい。
【0044】
<CPUモジュールのメモリマップ>
CPUモジュール2のメモリマップを図4に示す。
各入出モジュール10の共有メモリ82には、CPUモジュール2のメモリ空間が割り付けられ、入出力モジュールの実装されるスロットごとに異なるアドレス範囲が割り当てられている。なお、入出力モジュールにアドレス範囲を設定するスイッチを設けて、入出力モジュールごとにメモリ空間の割付を行うようにしてもよいが、本実施の形態ではスロットごとに異なるアドレス範囲が割り付けられる場合について説明する。
【0045】
CPUモジュール2の動作の概要は、入出力モジュール10から入力される正常か異常かのステータス情報、稼動か待機かの動作モード情報を取り込み、設定パラメータと稼動/待機切替指令を入出力モジュールに出力する。入出力データの内容は、入出力モジュールの種類によって異なる。たとえば、アナログ入力モジュールならば、同モジュールから渡されるA/D変換値を入力することとなり、アナログ出力モジュールならば、同モジュールへ渡す出力指令値を出力することになる。
【0046】
入出力モジュール10のステータス情報や動作モードは、入出力モジュール10のCPU回路11によって共有メモリ82に書き込まれる。そして、CPUモジュールが共有メモリ82からそのデータを読み出す。設定パラメータや稼動/待機切替指令は、CPUモジュール2から共有メモリ82に書き込まれ、入出力モジュール10のCPU回路11がそのデータを読み取って、所定の動作を実行する。
【0047】
また、共有メモリ82を介して、CPUモジュール2と入出力モジュール10のCPU回路11との間で入出力データの受け渡しが行われる。
【0048】
図4は、一つのペアの入出力モジュールに対するメモリ空間を示しているが、複数ペアの入出力モジュールが実装される場合は、夫々の入出力モジュール10に対して異なるメモリ空間が割り付けられる。
次に、本実施の形態による入出力二重化装置1の動作を説明する。
【0049】
<装置の初期化処理>
電源ON時に、CPUモジュール2は、各入出力モジュール10について、共有メモリ82の全領域を初期化する。たとえば、領域内の動作モード(稼動/待機情報)については、稼動でも待機でもないデータを初期値として設定する。また、ステータス領域についても、正常、異常時のコードとは異なる初期値を設定する。これにより、CPUモジュール2は、起動後一定時間、初期値が変化しなかった場合は、入出力モジュール10が正常に動作をしていないことを検知することができる。
【0050】
CPUモジュール2は、この初期化処理後に各入出力モジュール10のCPU回路11に対して割込み信号等によって共有メモリ82の書き込み許可の通知をする。
【0051】
<動作モード調整処理>
次に、図5を用いて入出力モジュール10の動作モード調整手段72の処理手順を説明する。動作モード調整手段72は、電源ONやシステムリセットにより起動されると、自己診断手段71の診断結果から異常の有無を判定し(S201,S202)、異常がある場合は(S202で「NO」)、共有メモリ上のステータス情報格納領域に異常内容に対応するエラーコードを書き込む(S203)。その後、動作モード調整手段72は、自系の動作モードを待機モードに設定する(S204)。具体的には、共有メモリ上の動作モード格納領域に「待機」を書き込む。そして、通信部96を介して、自系が待機モードであることを相手系に通知する(S205)。その後、動作モード管理テーブル73の仮設定フラグをリセットして、ステップS201に戻って以降の処理を繰り返す(S206)。
【0052】
ここで、図6に動作モード管理テーブル73の例を示す。稼動モードの本設定(以下、単に「本設定」という。)、稼動モードの仮設定(以下、単に「仮設定」という。)、および待機モードの各項目ごとにフラグが設定可能になっている。後述する処理により、それぞれ動作モードに対応するフラグが設定される。
【0053】
図5に戻り、動作モード調整手段72は、ステップS202でNOの場合は、共有メモリ82のステータス情報格納領域に「正常」を書き込む(S207)。次に、コマンド送受信手段49を介して受け取った相手系の動作モードから、相手系が稼動モードの場合は(S208で「YES」)、さらに、コマンド送受信手段49の出力結果から相手系が正常かどうかを判定し(S209)、正常の場合は、自系の動作モードを待機モードに設定する(S210)。なお、ステップS208の判定処理で用いる相手系の動作モードは、相手系から周期的に送られてくる動作モードのうち最新の動作モードを用いるものとする。
【0054】
ステップS210の後、コマンド送受信手段49を介して自系が待機モードであることを相手系に通知して(S211)、動作モード管理テーブル73の仮設定フラグをリセットする(S212)。その後、乱数を発生させ、乱数で定まる一定時間スリープした後(S213)、ステップS201に戻って以降の処理を繰り返す。なお、乱数の例としては、0〜9までの数字をランダムに選択し、その数字に所定時間(たとえば1mS)を掛け合わせた時間分だけスリープさせるものである。この所定時間は、動作モード調整手段72の一回の処理時間と同程度であるのが好ましい。
【0055】
ステップS208で「NO」、即ち相手系が待機モードか、或いは動作モードの通知がない場合、およびステップS209で相手系が正常でない場合は、次に自系が稼動モードか否かを判定する(S214)。なお、動作モード管理テーブル73の本設定フラグがセットされている場合に、稼動モードであると判定する。この判定の結果、自系が稼動モードである場合は(S214で「YES」)、共有メモリ82の稼動/待機切替指令格納領域のデータを読み込み(S215)、CPUモジュール2によって切替指令が設定されている場合は(S216で「YES」)、自系の動作モードを待機側に設定する(S217)。具体的には、動作モード管理テーブル73の待機フラグをセットすると共に、共有メモリ82の動作モード格納領域に「待機」を書き込む。そして、コマンド送受信手段49を介して自系が待機モードであることを相手系に通知する(S218)。その後、共有メモリ82の稼動/待機切替指令と動作モード管理テーブル73の仮設定フラグをリセットする(S219、S220)。
【0056】
一方、ステップS214で、稼動モードの本設定が行われていない場合は、次に、動作モード管理テーブル73の仮設定フラグがセットされているか否かを判定し(S221)、仮設定フラグがセットされている場合は、動作モード管理テーブル73の本設定フラグをセットして、自系の動作モードを稼動側に設定すると共に、共有メモリ82の動作モードとして、「稼動」を書き込む(S222)。その後、仮設定フラグをリセットして(S223)、コマンド送受信手段49を介して自系が稼動モードであることを相手系に通知して(S225)、ステップS201へ戻って以降の処理を繰り返す。
【0057】
一方、ステップS221で、仮設定フラグがセットされていない場合は、仮設定フラグをセットして(S224)、ステップS225へ移行する。
動作モード調整手段72は、以上の手順によって相手系との稼動/待機の調停を行う。
【0058】
なお、上記の説明では、コマンド送受信手段49を介して周期的に自系の動作モードを相手系に送信することとしたが、さらに、コマンド送受信手段49が相手系の動作モードを受信したときは、その応答として自系の動作モードを返信するようにしておき、上記の処理においてステップS221の判定の結果、仮設定フラグがセットされている場合は、前回起動時のステップS225の送信処理に対する相手系の応答に含まれている動作モードが待機側の場合にステップS222の本設定処理を行うようにすると良い。これにより、自系が稼動側であることを確実に相手系に伝えた後の相手系の動作モードに基づいて自系稼動側の決定を行うことができる。
【0059】
<動作モード調整後のCPUモジュール側の動作>
次に、図7を用いて、CPUモジュール2側の入出力処理手順について説明する。
CPUモジュール2は、電源が投入されると、例えばCPUモジュール2に接続された保守ツール(図示せず)など外部から動作モードの切替要求があるか否かを判定し(S301)、切替要求が有る場合は、対象となる稼動側入出力モジュールの出力領域に稼動/待機切替指令を書き込む(S302)。これにより、入出力モジュール10の図5ステップS216〜S220の処理によって、稼動側が待機側へ切り替わり、その結果、待機側が稼動側へ切り替わる。
【0060】
ステップS302の後、予め定められた起動遅延の設定時間を経過したか否かを判定し、経過していない場合は、ステップS301へ戻り、経過している場合は、次に入出力モジュール1(10)に対応する入力領域である入力領域1にアクセスして、共有メモリ82に設定されている稼動/待機情報を取得する(S304)。なお、ステップS303における起動遅延の設定時間とは、外部から切替指令を入力し、かつ、入出力モジュール10が動作モードを決定するのに十分な時間である。
【0061】
取得した稼動/待機情報が「稼動」の場合は、共有メモリ82の出力領域1に設定パラメータを書き込むことにより、入出力モジュール1(10)のCPU回路11に設定パラメータを転送する(S306)。なお、この設定パラメータは、入出力モジュール1(10)のコマンド送受信手段49によって相手系に送られる。
【0062】
次に、CPUモジュール2は、入力領域1から稼動/待機情報を取得し(S307)、入出力モジュール1(10)が稼動モードか否かを判定する(S308)。判定の結果、稼動モードの場合は、入出力領域1にアクセスして、入出力モジュール1(10)からのデータの読み出し、または入出力モジュール1(10)へのデータの書き込みを行い(S309)、ステップS307へ戻って以降の処理を繰り返す。ステップS308の判定の結果、稼動モードでない場合は、外部に入出力モジュール1(10)の交換指示を出力して(S310)、後述するステップS315へ移行する。
【0063】
一方、ステップS305で入出力モジュール1(10)が稼動モードでない場合は、CPUモジュール2は、次に入力領域2の稼動/待機情報を読み込んで(S311)、入出力モジュール2(10)の動作モードを判定する。その結果、入出力モジュール2(10)が稼動モードでない場合は(S312で「NO」)、外部にエラー通知を行って終了する(S313)。入出力モジュール2(10)が稼動モードの場合(S312で「YES」)は、入出力モジュール2(10)に設定パラメータを転送する(S314)。この設定パラメータは、入出力モジュール2(10)のコマンド送受信手段49によって相手系に送られる。
【0064】
次に、CPUモジュール2は、入力領域2から稼動/待機情報を取得し(S315)、入出力モジュール2(10)が稼動モードか否かを判定する(S316)。判定の結果、稼動モードの場合は、入出力領域2にアクセスして、入出力モジュール2(10)からのデータの読み出し、または入出力モジュール2(10)へのデータの書き込みを行い(S317)、ステップS315へ戻って以降の処理を繰り返す。ステップS316の判定の結果、稼動モードでない場合は、外部に入出力モジュール2(10)の交換指示を出力して(S318)、ステップS307へ移行する。
CPUモジュール2の入出力処理は、以上の手順で行われる。
【0065】
なお、上記は一組の入出力モジュールについての処理手順であるが、複数のペアが存在する場合は、夫々のペアごとに上記の処理を実行する。
【0066】
(他の実施例1)
図5の動作モード調整手段72のステップS213では、乱数を発生させて、それに応じた遅延時間を待たせることにより、二重化を構成する入出力モジュール間の処理タイミングをずらして、稼動、待機の判定結果が処理のたびに反転することを防止しているが、入出力モジュール10が実装されるスロットの識別情報(スロットID)を読み込み、読み込んだスロットIDに応じた時間分遅延させるようにしても良い。これにより、一旦タイミングが重なって、競合状態(両系とも相手系が稼動モードと認識した状態)となっても、両系とも一旦待機モードになり、次の周期では、スロットIDで定まるスリープ時間の短い入出力モジュール10のみが確実に稼動モードになることができる。
【0067】
また、本実施の形態による動作モード調整手段72の処理では、稼動モードの判定になったときに、直ちに「稼動」設定をするのではなく、まず仮設定フラグをセットし、これにより、相手系には、稼動側であることを通知する一方で、共有メモリを介してCPUモジュール2に渡す情報は、この時点では「稼動」にはしない。すなわち、この時点ではCPUモジュール2は、待機モードあるいは未設定状態として動作モードを取得することになる。
【0068】
そして、動作モード調整手段72は、次の周期で再び稼動判定になったときに、自系の動作モードを「稼動」として本設定し、CPUモジュール2へ渡す情報も「稼動」にする。これにより、二重化を構成する入出力モジュール間で動作モード調整処理のタイミングが重なったときに、両方が稼動モードになることを防止することができる。
【0069】
(他の実施例2)
上記は、入出力モジュール10の動作モード調整手段72の処理によって、稼動/待機のモードを決定するものであるが、簡便な方法としては、各入出力モジュール10に予め動作モード設定スイッチあるいは動作モードを格納する不揮発性メモリを設け、工場出荷時等に稼動、待機の設定をするようにしても良い。
【0070】
次に本発明の第2の実施の形態を説明する。
本実施の形態は、第1の実施の形態の入出力二重化装置1に対して、さらにCPUモジュール2のメモリ空間を削減するものである。
【0071】
<CPUモジュールのメモリ空間>
本実施の形態によるメモリ空間を図8に示す。
メモリ空間は、入出力モジュールのステータス情報を読み込み、制御信号を出力するためのメモリ空間、すなわちモジュールを管理するための空間(I/O管理空間という)と、入出力モジュールとの間で入出力データを受け渡すための空間(I/Oデータ空間という)に分けられている。
【0072】
そして、I/O管理空間は、各入出力モジュールごとに割り付けられ、I/Oデータ空間は、入出力モジュールのペアごとに割り付けられている。
【0073】
I/Oデータ空間に対しては、以下に説明するようにCPUモジュール2は稼動側モジュールのみとデータの受け渡しを行う。
【0074】
図9は、第2の実施の形態による入出力モジュール10の機能ブロック図である。図1に対して、さらに動作モード判定部30が加わっている。また、本実施の形態による入出力モジュール10の動作モード判定部30とBUSI/F回路15の構成を図10に示す。
【0075】
図10に示すBUSI/F回路15は、図8のメモリ空間、特に二重化を構成する入出力モジュール間で同一のI/Oデータ空間を割り付けるための回路構成の一例を示している。
【0076】
BUSI/F回路15は、共有メモリ82と、ステータス情報等をバス3に出力するゲート回路83を有している。また、BUSI/F回路15は、I/Oデータ空間を選択するための上位アドレスのデコード回路81、I/Oデータ空間の中でペアとなるスロットに実装された入出力モジュールの共有メモリ82を選択するための一致回路84、デコード回路81、一致回路84、および後述する自系動作モード信号を入力して共有メモリ82の選択信号を生成するAND回路85、さらに、I/O管理空間を選択するためのデコード回路86、スロットごとに選択信号を生成するための一致回路87、回路86,87の出力からゲート回路83の選択信号を生成するAND回路88で構成されている。
【0077】
ゲート回路83には、CPU回路11から出力されるステータス情報と自系動作モードの信号が入力されている。
【0078】
本実施の形態では、スロットIDは、S3(MSB)〜S0(LSB)の4ビットで識別され、スロットごとに連番となっている。図10の例では、S2とS0が抵抗R69を通してプルアップされ、S3とS1が0Vに接続されているので、スロットID"5"を表している。
【0079】
一致回路84には、スロットIDのLSBを除くS3〜S1が入力され、アドレスバスのうちペアごとの共有メモリ空間を選択するための中位アドレスと比較され、完全に一致した場合に論理"1"が出力される。
【0080】
一方、一致回路87には、スロットIDの全ての信号S3〜S0が入力され、アドレスバスのうちスロットごと(即ち入出力モジュールごと)のI/O管理空間を選択するためのアドレス(例えば下位4ビット)と比較され、完全に一致した場合に"1"が出力される。
【0081】
動作モード判定部30は、CPU回路11のモード設定信号を保持(ラッチ)する保持回路31、保持回路31の出力を入力するNAND回路32a、NAND回路32aの出力と繋がり、その出力を増幅あるいは信号変換して自系稼動信号として相手系へ送信する送信回路34、NAND回路32aと共にRSフリップフロップを構成するNAND回路32b、相手系から送られてくる稼動信号を入力する受信回路35、受信回路35の入力を反転して、NAND回路32bの入力とするNOT回路33aを有している。また、NAND回路32aの出力は、NOT回路33bを介してCPU回路11に入力され、自系動作モード信号として読み込み可能になっている。また、バス3の書き込み信号と、I/O管理空間のデコード信号がAND回路36を介してD型フリップフロップ(以下、「DF/F」という)37のクロック入力に接続され、バス3のデータ信号がDF/F37のD入力端子に接続されている。DF/F37の出力Qの反転端子はNAND回路32aの入力に接続されている。さらに、送信回路34の出力は相手系の受信回路35と接続され、相手系の送信回路34は自系の受信回路35と接続される。
この動作モード判定部30は、通信部96とは別個に設けられている。
【0082】
次に上記の構成を有する入出力二重化装置1の動作を説明する。
<入出力モジュールの動作モード調整処理>
本実施の形態による入出力モジュールの動作モード調整手段72の処理手順を図11に示す。図5に示した第1の実施の形態の手順との違いとして、ステップS222で自系の動作モードを稼動モードに設定する処理を、保持回路31に"1"を出力する処理(S222a)に代え、また、ステップS204、S210、S217で自系の動作モードを「待機」に設定する処理を、保持回路31に"0"を出力する処理(S204a、S210a、S217a)に代えている。さらに、ステップS207でステータス情報として「正常」設定をした後に、自系動作モードの値(即ちNOT回路33bの出力値)を読み込み、その値が"0"のときはステップS208へ移行し、入力値が"1"のときはステップS201へ戻る処理(S207a)を追加している。
【0083】
なお、本実施の形態では、動作モードは、共有メモリ82を介してCPUモジュール2へ通知するのではなく、CPUモジュールがI/O管理空間にアクセスして、ゲート回路83を介して自系動作モードの値を読み込むことにより、稼動/待機情報を取得する。
【0084】
<動作モード判定部30の作用>
動作モード判定部30の作用を簡単に説明する。入出力モジュール10は、電源ON又はシステムリセットにより、CPU回路11からリセット信号が出力され、そのリセット信号は保持回路31に入力される。保持回路31は、リセット信号を入力することによって、"0"を出力する。これによりNAND回路32aの出力および送信回路34の出力は"1"となる。送信回路34から出力される自系稼動信号は、自系が稼動モードであることを相手系に通知する信号であり、"0"ならば稼動モード、"1"ならば待機モードであることを意味する。電源ON又はシステムリセット直後の初期状態においては、"1"すなわち待機モードであるが、図11のステップS222aで、保持回路31に"1"が出力されるタイミングでは、相手系は待機モードであるため、NAND回路32bの出力は"1"、また、DF/F37の反転出力も"1"なので、NAND回路32aの出力は"0"になる。この信号は、相手系の入出力モジュールに対しては、相手系稼動信号として受信回路35で受信される。相手系はこの時点では待機モードであるため、相手系のNAND回路32bの入力は全て"1"となり、NAND回路32bの出力は"0"となる。このため、相手系では、保持回路31の出力値によらず、常にNAND回路32aの出力は"1"、つまり待機モードが維持されることになる。
【0085】
すなわち、動作モード判定部30から出力される自系稼動信号は、相手系の動作モードの変化をロックする機能を有することになる。
【0086】
一方、稼動モードである自系では、CPU回路11が異常を検知して、待機モードへ移行したり、リセット信号を発生したり、あるいは、CPUモジュール2から稼動/待機切替指令が出力された場合は、NAND回路32aの入力が"0"になるため、自系稼動信号は"1"になる。これにより、相手系に対するロックが解除され、相手系が稼動モードへの移行が可能になる。
【0087】
このように、本実施の形態では、ソフトウェアとハードウェアを組み合わせて動作モードの管理をするので、頻繁なモード変化を防止すると共に、両方の入出力モジュールが同時に稼動モードになるような事態が発生する可能性を低くすることができる。
【0088】
<BUSI/F回路15の作用>
本実施の形態の一致回路84では、連番のスロットIDの最下位ビット(LSB)をマスクしてアドレスと比較しているため、最下位ビットのみが異なるスロットは同じアドレス範囲が割り付けられることになる。したがって、スロットIDが、0と1、2と3、4と5・・・というように隣同士にペアとなる入出力モジュールを実装しておけば、同じメモリ空間で、自系動作モード信号により稼動側の入出力モジュールのみがアクセス可能になる。すなわち、自系動作モード信号がAND回路85の入力になっているので、CPUモジュール2からのアクセスにより、稼動側の共有メモリ選択信号(AND回路85の出力)はイネーブルになり、共有メモリからのデータの読み出し/共有メモリへのデータの書き込みが行われる。一方、待機側の自系動作モード信号は"0"なので、CPUモジュール2からのアクセスの有無にかかわらず、共有メモリ選択信号はイネーブルにならない。これにより、CPUモジュール2のI/Oデータ空間を節約することができる。
【0089】
<CPUモジュールからのデータ読み出し/書き込み処理>
図12に本実施の形態によるCPUモジュール2の入出力処理の手順を示す。
CPUモジュール2は起動すると、まずI/O管理空間にアクセスして、入力領域1と入力領域2のステータス情報を取得する(S401)。この時点で、いずれか一方でも異常があれば(S402で「NO」)、外部にエラー通知を行う(S403)。
【0090】
次に、外部からの切替要求の有無を判定し、切替要求が有る場合は、稼動/待機切替指令を出力する(S405)。その後、起動遅延の設定時間経過したか否かを判定し(S406)、経過していない場合は、ステップS404へ戻る。経過している場合は、次にI/Oデータ空間にアクセスして共有メモリに設定パラメータを書き込む(S407)。
【0091】
続いて、入力領域1と入力領域2のステータス情報を取得して(S408)、待機側が異常の場合は(S409で「NO」)、外部に待機側モジュールの交換指示を出力する(S410)。稼動側が異常の場合は(S411で「NO」)、稼動/待機指令を出力して(S413)、一定時間遅延後(S414)、ステップS408に戻って以降の処理を繰り返す。一定時間遅延させるのは、入出力モジュール間での動作モード切替処理の完了を待つためである。
【0092】
ステップS411で稼動側が正常の場合は、入出力領域に対してデータの読み出し、またはデータの書き込みの処理を行い(S412)、その後ステップS408へ戻って以降の処理を繰り返す。
【0093】
<CPUモジュールから切替指令>
CPUモジュール2はI/O管理空間にアクセスして、入出力モジュールごとに、異常の有無等のステータス情報や動作モード等のデータを取得する。CPUモジュール2は取得したデータによって稼動側の異常を検知したときは、I/O管理空間に対して稼動/待機切替指令を出力する。この切替指令は、稼動側モジュールについては、稼動モードから待機モードへ強制的に切り替えるものであり、これにより待機側モジュールは、動作モード調整手段72によって稼動側に移行する。
【0094】
これにより、CPUモジュール2は新たに稼動側になった入出力モジュールとデータの受け渡しを行うことができる。また、強制的に待機モードへ切り替えられた入出力モジュールの共有メモリ選択信号はハードウェアでロックされるので、ソフトウェアの暴走等によりイネーブルになることはない。
【0095】
本実施の形態によれば、入出力モジュール間で稼動/待機の動作モードの調整処理(二重化制御)を行い、CPUモジュールは、二重化制御をする必要がないので、CPUモジュールの処理負荷を軽減することができる。また、CPUモジュール側のアドレス空間を節約することができるので、安価な入出力二重化装置を実現することができる。
【0096】
次に、第3の実施の形態を説明する。
一般に、アナログ入力モジュールは、現地でシステム立ち上げ時に、現地の外部機器(センサ、アクチュエータ等)の特性に合わせて調整する必要がある。
【0097】
これは、図18に示すように、アナログ入力値(横軸)とA/D変換値(縦軸)の対応関係をユーザが変更したり、入出力二重化装置の設置環境、たとえば、外部機器9のアナログ出力回路の特性、接続ケーブル92のインピーダンス、各装置の接地状態などによって、アナログ出力値のA/D変換値が所望の値からずれる場合があり、このずれを補正する必要があるからである。
【0098】
このため、従来はシステム立ち上げ時には、稼動側モジュール、待機側モジュールの両方とも現地調整を行い取得した機器調整値によってA/D変換値を補正していた。また、もし、一方が故障して別のアナログ入力モジュールと交換するような場合は、その交換品に対しても現地調整を行う必要があり、システムの停止を余儀無くされることも度々あった。
【0099】
本実施の形態は、アナログ入力モジュールについて、特に現地調整によってA/D変換値を補正するが、この補正処理を稼動側についてのみ行い、その補正値を待機側に対して送信するというものである。
【0100】
なお、上述した動作モード調整処理やCPUモジュールとの受け渡しにおいては、第1の実施の形態と同様であるので、説明を割愛する。また、以下の説明においては、稼動/待機の動作モードの初期値は予めアナログ入力モジュールの不揮発性メモリに格納しておくか、モジュールに搭載されているスイッチの設定を読み込むこととしているが、第1または第2の実施の形態で説明したように動作モード調整手段72によって、稼動,待機を決定するようにしても良い。
【0101】
以下、入出力モジュールとして、アナログ入力モジュールを例にして本実施の形態による入出力二重化装置について説明する。
【0102】
図13は、入出力モジュールとしてアナログ入力モジュールを用いたときの入出力二重化装置のブロック図である。アナログ入力モジュール10の外部I/F部97は、外部機器9から出力されるアナログ信号を入力し、入力したアナログ信号の大きさに基づいて所定の大きさの電気信号を出力する複数の入力回路98、各入力回路98から出力される電気信号のうち一つを選択するマルチプレクサ回路(以下、MPX)14、MPX14の出力信号を一定時間保持するサンプルホールド回路(SH)19、アナログ信号をデジタル信号に変換してCPU回路11に渡すA/D変換器(以下、ADC)12で構成されている。
【0103】
なお、ADC12を絶縁型にするなど、必要により外部I/F部97側とCPU回路11側は絶縁されている。
【0104】
図14は、図13のアナログ入力モジュール10の機能ブロック図である。図14において、アナログ入力モジュール10は、BUSI/F回路15を介して、CPUモジュール2との間でデータの受け渡し処理を行うCPUI/F手段41、CPUモジュール2から送られてくる基本情報(稼動/待機の初期値61,ユーザ要求値scale62,理論調整値scale63)をCPU回路11の内部の図示しない記憶部40に保存する基本情報登録手段42、外部機器9などから出力されるアナログ信号を外部I/F部97を介して入力し、入力された計測値をCPUモジュール2からの指令によって、校正値64、機器調整値65、計測値66のそれぞれの記憶領域へ保存する計測値入力手段43、稼動モードのときに理論調整値scale63,校正値64,機器調整値65を用いて理論調整値67を演算する調整値変換手段44、この理論調整値67と理論調整値scale63を用いて稼動側から待機側へ送るための補正値を演算する補正値算出手段45、機器調整値65,計測値66,ユーザ要求値scale62を用いてCPUモジュール2のアプリケーションプログラムへ渡すための修正後計測値(以下、これを出力値という。)を演算する出力値算出手段46、補正値算出手段45によって算出された補正値を待機側へ送信する補正値送信手段47、待機モードのときに稼動側から送られてくる補正値を受信する補正値受信手段48、二重化構成において相手側の健全性確認その他のパラメータの受け渡しを行い相手側が正常か異常かの判定結果を出力するコマンド送受信手段49、補正値受信手段48によって補正値が受信されたときに、この補正値と理論調整値scale63,校正値64を用いて機器補正値69を演算する機器補正値変換手段50、この機器補正値69と校正値64を用いて機器調整値65を演算する機器調整値算出手段51、稼動/待機の初期値61とコマンド送受信手段49から出力される判定結果から自系が稼動モードで動作すべきか待機モードで動作すべきかを決定する稼動/待機判定手段52を備えている。ここで、各手段41〜52はCPU回路11の演算部によって動作するプログラムによって実現可能な機能であり、各データ61〜70は、CPU回路11の記憶部に保存されるデータである。なお、記憶部として、電源断時にもデータ保持可能な不揮発メモリを用いるのが好ましい。
【0105】
次に上記の構成を有する入出力二重化装置1の動作を図14と図15を用いて説明する。ここで、図15は、図14に示すアナログ入力モジュール10を稼動側と待機側の二重化構成で用いた場合の処理概要の説明図である。
【0106】
[稼動側の動作]
<基本情報登録処理>
基本情報登録手段42は、CPUI/F手段41を介してCPUモジュール2から渡された基本情報を記憶部40の基本情報保存領域に格納する。
【0107】
上記において、CPUモジュール2から渡される基本情報には、アプリケーションプログラムに渡すアナログ入力値のデータレンジを示すユーザ要求スケール値(ユーザ要求値scale)62、入力するアナログ値の範囲とデジタル値の範囲との対応関係を指定する稼動側と待機側共通のスケール値(理論調整値scale)63がある。なお、ユーザ要求値scale62と理論値scale63は共通にすることもできるが、ユーザ要求値scale62はアプリケーションプログラムと密接に関連するものであり、OSや下位層のいわゆる基本プログラムで管理するのが好ましい理論調整値scale63とは別々に設定できるようにしておくのが良い。
【0108】
なお、基本情報のうち稼動/待機の初期値61は、アナログ入力モジュール10に不揮発性メモリあるいはスイッチ等の入力手段を設けて、この設定状態を初期値として読み込む。また、運用状態においてアナログ入力モジュールの故障によって差替えられた新たなアナログ入力モジュールは、初期値として待機の設定がなされるものとする。
【0109】
スケール値などの範囲を指定するデータは、下限(Low側)と上限(High側)で指定するので、以降の説明においてLow側のデータを[Lo]、High側のデータを[Hi]で表す。
【0110】
<計測値入力処理>
計測値入力手段43は、外部I/F部97を介して外部機器9から出力されたアナログ信号を入力する。
なお、入力信号は、外部I/F部97のA/D変換器12によってデジタルデータとして入力され、当該外部機器のIDと関連付けられてCPU回路11の記憶部に保存される。
【0111】
<校正値登録処理>
アナログ入力モジュール10は、出荷に際して校正が必要になるが、入力信号として校正用の基準となるアナログ信号が入力される。この信号は、計測値入力手段43によって入力処理されるが、このときCPUモジュール2を経由して同モジュールに接続されたユーザインタフェース(タッチパネルやメンテナンスツール)から入力信号が校正値であることを示す指令を送信するようにし、この指令から当該アナログ入力モジュール10の計測値入力手段43は、入力信号が校正値であることを認識して、記憶部40の該当する校正値保存領域に保存する。この校正処理は、稼動側、待機側を問わず全てのアナログ入力モジュールについて実施する。
【0112】
<機器調整値登録処理>
現地では、運用前に外部機器9の特性に合わせるための調整処理が行われる。調整処理としては、上記校正値登録処理と同様にCPUモジュール2から入力信号が機器調整値であることを示す指令をアナログ入力モジュール10へ送り、外部機器9から調整用の信号を入力する。アナログ入力モジュール10の計測値入力手段43は、この指令から入力信号が機器調整値であることを認識して、記憶部40の該当する機器調整値保存領域に保存する。この調整処理は、二重化されたアナログ入力モジュール10のうち、稼動側のモジュールに対してのみ実施する。なお、読み込んだ校正値、機器調整値の記憶部40への書き込み処理もCPUモジュール2からの指令によって行われる。
【0113】
<調整値変換処理>
次に、調整値変換手段44は、記憶部に保存されている理論調整値scaleと校正値と機器調整値を抽出し、次の式(1L),式(1H)により理論調整値を計算する。計算結果は、記憶部の理論調整値保存領域に格納される。
【0114】
理論調整値[Lo] = 理論調整値Scale[Lo] + (機器調整値[Lo] - 校正値[Lo])×(理論調整値Scale[Hi] - 理論調整値Scale[Lo])/(校正値[Hi]−校正値[Lo])
・・・(1L)
理論調整値[Hi] = 理論調整値Scale[Lo] + (機器調整値[Hi] - 校正値[Lo])×(理論調整値Scale[Hi] - 理論調整値Scale[Lo])/(校正値[Hi]−校正値[Lo])
・・・(1H)
【0115】
なお、上記の式(1L),式(1H)のうち、(理論調整値Scale[Hi] - 理論調整値Scale[Lo])/(校正値[Hi]−校正値[Lo])を調整用スケール変換データという。
【0116】
具体例として、設定された理論調整値Scale[Lo]=0,理論調整値Scale[Hi]=30000、ユーザ要求値Scale[Lo] = 0,ユーザ要求値Scale[Hi]=16000、収集された校正値[Lo]=0,校正値[Hi]=32000、機器調整値[Lo]=3200,機器調整値[Hi]=32000,稼動側計測値=32000の場合について以下に各手段の計算結果を示す。
【0117】
この具体例の場合、調整値変換手段44の出力は、式(1L),式(1H)より、理論調整値[Lo]=3000,理論調整値[Hi]=30000となる。
【0118】
理論調整値を求める理由は、稼動側モジュールが何V調整したかを待機側モジュールに伝えるためには0-10V/0-30000のように電圧とスケールを一致させておく必要があるからである。
【0119】
<補正値算出処理>
次に、補正値算出手段45は、記憶部に格納されている理論調整値67と理論調整値scale63を抽出し、式(2L),(2H)により補正値を計算する。計算結果は、記憶部の補正値保存領域に格納される。
【0120】
補正値[Lo]=理論調整値[Lo]−理論調整値Scale[Lo] ・・・(2L)
補正値[Hi]=理論調整値[Hi]−理論調整値Scale[Hi] ・・・(2H)
【0121】
上記具体例では、理論調整値Scale[Lo]=0,理論調整値Scale[Hi] =30000、調整値変換手段44で算出した理論調整値[Lo]=3000,理論調整値[Hi]=30000であるから式(2L),式(1H)より、補正値[Lo]=3000,補正値[Hi]=0となる。
【0122】
<補正値送信処理>
次に、補正値送信手段47は、算出した補正値を待機側モジュールへ向けて送信する。
【0123】
<出力値算出処理>
その後、運用状態において、入力処理を実行する。計測値入力手段43は、外部機器9からの入力信号を記憶部40の計測値保存領域に格納する。
【0124】
出力値算出手段46は、この計測値保存領域に保存されている計測値66と、同じく記憶部40に保存されている機器調整値65とユーザ要求値scale62を用いて、式(5)によりCPUモジュール2へ出力するためのデータ(稼動側出力値)を計算する。
【0125】
稼動側出力値 = ユーザ要求値Scale[Lo]+(稼動側計測値−機器調整値[Lo])×(ユーザ要求値Scale[Hi]−ユーザ要求値Scale[Lo])/(機器調整値[Hi]−機器調整値[Lo])
・・・ (5)
【0126】
上記具体例では、ユーザ要求値Scale[Lo] = 0,ユーザ要求値Scale[Hi] = 16000、機器調整値[Lo] = 3200,機器調整値[Hi] = 32000、稼動側計測値=32000であるから、式(5)より、CPUモジュール2へ渡す計測データとして、稼動側出力値=16000となる。
【0127】
[待機側の動作]
待機側モジュールの処理として、上記の基本情報登録処理、計測値入力処理、校正値登録処理、および出力値算出処理は稼動側モジュールと同様の処理内容を実行するが、このとき機器調整値については、計測値入力手段43によって入力するのではなく次の処理によって受信した補正値から演算する。
【0128】
<補正値受信処理>
待機側モジュールの補正値受信手段48は、稼動側から送られてきた補正値68を受信すると、記憶部40の補正値保存領域に格納する。
【0129】
<機器補正値変換処理>
次に、機器補正値変換手段50によって、記憶部40に保存されている補正値68と理論調整値scale63と校正値64とを用いて、次の式(3L),式(3H)によって、機器補正値69を計算する。計算結果は、記憶部40の機器補正値保存領域に格納される。
【0130】
機器補正値[Lo] = (補正値[Lo]−理論調整値Scale[Lo])×(校正値[Hi]−校正値[Lo])/(理論調整値Scale[Hi]−理論調整値Scale[Lo]) ・・・(3L)
機器補正値[Hi] = (補正値[Hi]−理論調整値Scale[Lo])×(校正値[Hi]−校正値[Lo])/(理論調整値Scale[Hi]−理論調整値Scale[Lo]) ・・・(3H)
【0131】
なお、上記の式(3L),式(3H)のうち、(校正値[Hi]−校正値[Lo])/(理論調整値Scale[Hi]−理論調整値Scale[Lo])の項は、調整用スケール変換データに該当している。
【0132】
具体例として、CPUモジュール2から設定される理論調整値は稼動側と同じ値であり、理論調整値Scale[Lo] = 0,理論調整値Scale[Hi] = 30000である。また、校正値としては校正値[Hi] = 28000,校正値[Lo] =0とする。このとき、稼動側から送られてくる補正値は、補正値[Lo] = 3000,補正値[Hi] = 0なので、上記の式(3L),(3H)より、機器補正値[Lo] =2800 ,機器補正値[Hi] =0となる。
【0133】
<機器調整値算出処理>
次に、機器調整値算出手段51は、記憶部40に格納されている機器補正値69と校正値64を抽出して、次の式(4L),(4H)により、機器調整値65を計算する。計算結果は、記憶部40の機器調整値保存領域に格納される。
【0134】
機器調整値[Lo]=校正値[Lo]+機器補正値[Lo] ・・・(4L)
機器調整値[Hi]=校正値[Hi]+機器補正値[Hi] ・・・(4H)
【0135】
上記具体例では、校正値[Lo]=0,校正値[Hi]=28000、機器補正値[Lo]=2800,機器補正値[Hi]=0なので、式(4L),式(4H)より、機器調整値[Lo]=2800,機器調整値[Hi]=28000になる。この機器調整値算出手段51によって算出された機器調整値で計測値を修正することにより、アナログ入力モジュールの個体差が吸収される。
【0136】
<出力値算出処理>
待機側モジュールでアナログ入力処理を行う場合は、記憶部40に保存されている計測値66、ユーザ要求値scale62、および機器調整値65を抽出し、上記の式(5)により、待機側入力値を計算する。そして、稼動/待機判定手段52によって、稼動側モジュールが故障したと判定した場合は、待機側が新たな稼動側となり、ユーザ要求値scale62によってスケール変換された計測値をCPUモジュール2に送る。なお、具体例として、待機側計測値=28000の場合には、式(5)より、待機側出力値=16000となる。すなわち、本実施の形態の演算処理によれば、CPUモジュール2へ出力するデータ値は、稼動側と待機側で同じになる。
【0137】
なお、故障したモジュールは、新たなアナログ入力モジュールと交換されるが、このとき、この新たなアナログ入力モジュールは待機側に設定され、出荷時に校正処理が行われ、校正値64が記憶部40に保存されているものとする。このモジュールが現地の入出力二重化装置1に実装されると、稼動側モジュールは、保存されている補正値を補正値送信手段47によって、当該交換された待機側モジュールへ送り、待機側モジュールは、上述した待機側モジュールの処理を実行する。
【0138】
以上、入出力二重化装置1の各手段の処理内容について説明した。次に入出力二重化装置1の現地での動作、特に補正値の送信処理、他系の異常検出処理、および稼動/待機の切替処理について図16のフローチャートを用いて説明する。
【0139】
まず、アナログ入力モジュール10は、電源ONによってCPU回路11の記憶部40から「調整値」、「二重化設定」のフラグ、「稼動/待機」の別、「補正値」を各データの保存エリアから読み出し(S101)、二重化設定でない場合は、単独運転処理を実行する(S102)。この場合は、補正値送信手段47、補正値受信手段48、コマンド送受信手段49は機能させない。
【0140】
稼動/待機判定手段52は、稼動/待機の初期状態61から、自モジュールが稼動設定されている場合は(S104で「YES」)、計測値入力手段43はCPUモジュール2からの指令により自モジュールは調整中か否かを判定する(S105)。
【0141】
自モジュールが調整中の場合は(S105で「YES」)、調整用の入力値(機器調整値)を取得して、調整値変換手段44により理論調整値を算出する(106)。
【0142】
次に、補正値算出手段45を起動して、理論調整値を元に補正値を算出する(S107)。そして、記憶部40への書き込み要求が有る場合は、機器調整値と補正値を記憶部40へ書き込む(S109)。
【0143】
続いて、補正値送信手段47により通信ケーブル5を経由して、算出した補正値を待機側モジュールへ転送する(S110)。なお、この転送により待機側モジュールは稼動側モジュールの健全性を検知する。
【0144】
その後、コマンド送受信手段49は待機側モジュールから補正値の受信完了のレスポンスがあったか否かを判定し(S111)、レスポンスがあった場合は、その後周期的に待機側モジュールへ生存確認等の所定のコマンドを送信する(S113)。なお、互いに相手方の正常性を確認する手法としては、いわゆるハローコールなど予め定められた手順によって所定のデータ(補正値でも良い)を受け渡すことによって実現することができる。
【0145】
一方、レスポンスが無い場合は、再度、補正値を待機側モジュールに転送すると共に(S112)、入力処理を実行し(S114)、出力値算出手段46により機器調整値等をもとに入力値を補正する(S115)。
【0146】
そして、待機側モジュールが正常か否かをステップS113のコマンド送信のレスポンスによって確認し(S116)、一定時間または一定回数レスポンスが無い場合は、CPUモジュール2に待機側モジュールが異常であることを通知して(S117)、ステップS105へ戻り以降の処理を繰り返す。
【0147】
一方、ステップS104で、自モジュールが待機側設定の場合は、補正値受信手段48により補正値の受信があったか否かを判定し(S118)、補正値の受信があった場合は、受信した補正値を記憶部40に書き込む(S119)。
【0148】
そして、機器補正値変換手段50および機器調整値算出手段51により補正値を機器調整値に変換する(S120)。また、稼動側モジュールに補正値の受信完了レスポンスを送信する(S121)。
【0149】
その後は、稼動側モジュールへ生存確認等のコマンド送受信処理を行い(S122)、稼動側モジュールが正常か否かの確認を行う(S123)。
【0150】
そして、稼動側モジュールが正常の場合は、入力処理を実行して、ステップS118へ戻り以降の処理を繰り返す。一方、ステップS123で、稼動側モジュールが正常でないと判定した場合は、稼動/待機判定手段52によりCPUモジュール2へ稼動側が異常であることを通知して、記憶部40の稼動/待機の設定を稼動に書き換えて、自モジュールが稼動側に切り替わり(S126)、ステップS105へ移行して、以降の処理を実行する。
【0151】
なお、このとき、オンライン状態で新たに稼動側へ切り替わったアナログ入力モジュールは、ステップS105では、自モジュールは調整中ではないため、ステップS111へジャンプする。このとき、異常と判定された相手側モジュールは、待機側扱いとなるが、この待機側モジュールからは、補正値受信完了レスポンスはないため、S112へ移行し、自モジュールの記憶部40に保存されている機器調整値を用いて入力値を補正し、CPUモジュール2へ渡す。
【0152】
その後、待機側モジュールが交換された場合は、ステップS112の処理によって、新たに稼動側となったモジュールの記憶部40に保存されている補正値が待機側モジュールへ転送されることになる。一方、交換された待機側モジュールは、ステップS104で「NO」となり、ステップS118へ移行し、補正値を受信し自モジュールの記憶部40へ保存し、以後はこの補正値を用いて機器調整値を算出し、これにより入力値を補正することになる。
【0153】
[理論調整値scaleと校正値・機器調整値との関係]
図17は、理論調整値scale(外部A/D変換値)と、校正値および機器調整値との関係を示す説明図である。ここで、理論調整値scaleは、CPUモジュール2から指定されるA/D変換の範囲を示す値(スケール値)であるため、外部A/D変換値と言い、校正値および調整値は、入力されたアナログ値(この例では電圧値)に対応するアナログ入力モジュール内のADC12のA/D変換値であるため内部A/D変換値と言う。
【0154】
この表において、電圧の単位を[v]、デジタル値の単位を[d]で表している。
まず、CPUモジュール2からは、基準となるスケール値として0[v]−10[v]の入力範囲に対して、電圧0[v]に対しては、0[d](理論調整値scale[Lo])、電圧10[v]に対しては、30000[d](理論調整値scale[Hi])の対応関係が設定される。
【0155】
次に、校正段階において、電圧0[v]の印加に対する内部A/D変換値(校正値[Lo])が0[d]、電圧10[v]の印加に対する内部A/D変換値(校正値[Hi])が32000[d]であったとすると、図17(a)の直線Aのようになる。なお、この例では、説明の便宜上、原点(0[d])を合わせるように、入力値をシフト、すなわち[Lo]側の差分だけ [Hi]側も差し引くように補正することを前提としているが、計測値をそのまま用いるようにしても良い。
【0156】
次に、現地での調整段階において、電圧0[v]の印加に対する内部A/D変換値(機器調整値[Lo])が3200[d]、電圧10[v]の印加に対する内部A/D変換値(機器調整値[Hi])が32000[d]であったとすると、図17(a)の直線Bのようになる。なお、この例では、機器調整値[Hi]を校正値[Hi]に合わせるようにシフトしているが、計測値をそのまま用いるようにしても良い。
【0157】
このとき、式(1L),式(1H)から理論調整値[Lo]=3000、理論調整値[Hi]=30000となるが、これは、機器調整値[Lo]、機器調整値 [Hi]をそれぞれ、校正値のスケール(すなわち内部A/D変換値のスケール)から理論調整値のスケール(外部A/D変換値のスケール)に変換することを意味している。すなわち、この補正値は外部A/D変換値のスケール上での補正値を意味する。
【0158】
このように、稼動側では、CPUモジュール2から指定された入力範囲のデジタル値(理論調整値scale)と校正値から調整用スケール変換データ(直線A)を求め、入力した機器調整値をこの調整用スケール変換データによってスケール変換して、補正値を求め、該補正値を待機側へ送信しているのである。
【0159】
そして、待機側では、この補正値から式(3L),式(3H)により、機器補正値[Lo]、機器補正値[Hi]を計算する。この式(3L),式(3H)は、補正値を外部A/D変換値のスケールから内部変換A/D変換値のスケールへ変換する処理であり、機器補正値は、内部変換A/D変換値のスケール上での値を意味している。
【0160】
そして、待機側の出荷時の校正値に対してこの機器補正値を加算することによって、機器調整値をそれぞれ[Lo]側、[Hi]側について求める(式(4L),式(4H))。このときの校正値と機器調整値は、それぞれ直線C、直線Dのようになる。
【0161】
この機器調整値を用いて、式(5)により計測値を修正して、CPUモジュール2へ出力するのである。
【0162】
すなわち、待機側では受信した補正値をもとに調整用スケール変換データ(直線C)によって、待機用の補正値である機器補正値を算出し、該機器補正値を用いて、待機側の機器調整値を求めて、計測値を修正し出力値を算出しているのである。
【0163】
以上、本実施の形態によれば、入力範囲のデジタル値(理論調整値scale)と校正値から調整用スケール変換データを求め、入力した機器調整値をこの調整用スケール変換データによってスケール変換して補正値を求め、該補正値を待機側へ送信し、待機側では受信した補正値をもとに待機側の調整用スケール変換データによって、待機側の補正値である機器補正値を算出し、該機器補正値を用いて待機側の機器調整値を求めて、計測値を修正しCPUモジュールへの出力値を算出する。
【0164】
これにより、現地の外部機器との接続に伴う調整は、最初に稼動側モジュールに対してのみ行えば良く、待機側モジュール、およびその後の交換したアナログ入力モジュールについては、最初の稼動側モジュールで計算した補正値を用いることによって、外部機器の特性に合わせる調整を自動的に行うことができるので、現地調整の手間が省け、作業効率が向上する。
【0165】
本発明は、上述した実施の形態に限定されること無く、その要旨を逸脱しない範囲で種々変形して実施をすることができる。
たとえば、稼動側から待機側へ補正値に送信の都度インクリメントされる連番を付して周期的に送るようにし、待機側はこの補正値の受信によって応答を返すようにしても良い。これにより、運用中に待機側が故障したときに活線状態で交換されたときでも稼動側から待機側へ補正値が送られ、稼動側においてその応答によって待機側の健全性を確認することができる。
【0166】
また、上述したように補正値送信手段47は、理論調整値と理論調整スケール値(理論調整値scale)との差分を補正値として送信しても良いが、調整値変換手段44で算出する理論調整値または基本情報を用いてこのデータに変換可能なデータを補正値として送信するようにしても良い。
【符号の説明】
【0167】
1 入出力二重化装置
2 CPUモジュール
3 バス
5 通信ケーブル
9 外部機器
10 入出力モジュール (アナログ入力モジュール含む)
11 CPU回路
12 ADC(A/D変換器)
14 MPX(マルチプレクサ)
15 BUSI/F回路
19 サンプルホールド回路(SH)
21 送信回路
22 受信回路
23 絶縁回路
30 動作モード判定部
31 保持回路
32a,32b NAND回路
33a,33b NOT回路
34 送信回路
35 受信回路
36,85,88 AND回路
37 DF/F
40 記憶部
41 CPUI/F手段
42 基本情報登録手段
43 計測値入力手段
44 調整値変換手段
45 補正値算出手段
46 出力値算出手段
47 補正値送信手段
48 補正値受信手段
49 コマンド送受信手段
50 機器補正値変換手段
51 機器調整値算出手段
52 稼動/待機判定手段
71 自己診断手段
72 動作モード調整手段
73 動作モード管理テーブル
81,86 デコード回路
82 共有メモリ
83 ゲート回路
84,87 一致回路
92 接続ケーブル
96 通信部
97 外部I/F部
98 入力回路
99 従来のアナログ入力モジュール
100 従来の入出力二重化装置
【技術分野】
【0001】
本発明は、主にプログラマブルコントローラやネットワーク端末などに用いられる入出力モジュールの二重化技術に関し、同じユニット内でCPUモジュールとバスを共有する入出力モジュールが二重化されたシステム構成における入出力二重化装置に関する。
【背景技術】
【0002】
従来の入出力二重化装置は、図19に示すように、アプリケーションを含む装置全体の演算処理を実行するCPUモジュールと、同じ装置内のベースボードのバスを介してCPUモジュールとデータの受け渡しを行い、入力処理や出力処理を実行する入出力モジュールが実装されている。装置の信頼性や稼働率を上げるためにこの入出力モジュールが二重化された構成が採用されている。なお、入出力モジュールとしては、アナログ入力モジュールやデジタル入力モジュールなどのように入力機能のみの場合、アナログ出力モジュールやデジタル出力モジュールなどのように出力機能のみ場合、あるいは両方の機能が実装されている場合がある。
【0003】
図20は、従来の二重化構成による入出力二重化装置のブロック図である。この図において、従来の入出力二重化装置100は、CPUモジュール2と二以上の入出力モジュール99で構成されている。図20は、アナログ入力モジュールを用いた例であるが、入出力モジュールの機能によって外部I/F部の回路や外部機器との接続方法が異なる。
【0004】
CPUモジュール2と入出力モジュール99は、複数の信号線からなるバス3で接続されている。なお、図示していないが、入出力二重化装置100は、電源モジュールも有しており、電源線またはベースボード上の電源パターンを通して各モジュールに電力を供給している。また、バス3はベースボードを使わず直接コネクタでモジュール間を接続する場合もある。
【0005】
各入出力モジュール99は、共有メモリを有しバス3を介してCPUモジュール2との間でデータの受け渡しを行うバスインタフェース(以下、BUSI/F)回路15、入力処理や出力処理などの種々の演算処理を実行するCPU回路11、入力信号や出力信号の変換処理を行う外部I/F部97を備えている。
【0006】
CPUモジュール2は、バス3と各入出力モジュール10に設けられているBUSI/F回路15を介して、データの受け渡しを行う。このBUSI/F回路15は、図21に示すように、主にデコード回路81と共有メモリ82で構成され、デコード回路81によってCPUモジュール2から出力されるアドレスバスの上位アドレスをデコードし、共有メモリ82の選択信号を生成する。また、アドレスバスの下位側の所定数のアドレス信号、読み出し信号、書き込み信号は、共有メモリ82に接続されている。図21では省略しているが、入出力モジュールのCPU回路11側も同様の信号が共有メモリ82に接続されている。
【0007】
入出力二重化装置100は、上記の構成を有する入出力モジュール99を複数有し、各入出力モジュール99はCPUモジュール2からの指令によって種々のパラメータの設定が行われる。また、稼動側入出力モジュール(以下、「稼動側モジュール」または単に「稼動側」という。)と待機側入出力モジュール(以下、「待機側モジュール」または単に「待機側」という。)は、外部機器9との間で二重化のための配線が施され、運用時はCPUモジュール2からの指令によって稼動/待機の動作モードの設定が行われる。なお、二重化のための配線のしかたは入力機能や出力機能によって異なる。図20は、入力機能の場合の例であるが、出力機能の場合は、出力端にリレー接点を設け、動作モードが稼動の場合は「閉」、動作モードが待機の場合は「開」にするのが一般的である。なお、入力機能の場合でも、必要により入力端に切替スイッチを設けて稼動側モジュールのみに外部機器9からの信号が入力されるように構成することもある。
【0008】
上記の構成を有する入出力モジュール99に対して、CPUモジュール2は、各入出力モジュール99の自己診断結果や、入出力モジュール99との間の診断などによって異常を検知すると、CPUモジュール2から各入出力モジュール99へ稼動/待機切替指令を出力して、稼動側モジュールを切り替えている。
【0009】
このように従来は、CPUモジュール2が入出力モジュール99の二重化制御を行っていたため、その処理負荷が高くなるという問題があった。このため、たとえば特許文献1では、CPUモジュールの負荷を軽減するために、CPUモジュールと入出力モジュールとの間に監視モジュール(データ二重化装置)を設け、この監視モジュールに二重化された入出力モジュールの制御を実行させるシステム及び方法が提案されている。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2005−196490号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、特許文献1の技術によれば、CPUモジュールの負荷は軽減されるものの監視モジュールを必要とするため、コストアップの要因になる。
【0012】
本発明は上述のかかる事情に鑑みてなされたものであり、二重化制御のために専用の装置を用いることなく、CPUモジュールの負荷を軽減して、安価で信頼性の高い入出力二重化装置を提供することを目的とする。
【課題を解決するための手段】
【0013】
上記の目的を達成するため、本発明に係る入出力二重化装置は、同一ユニット内に実装され、演算処理を実行するCPUモジュールと共有メモリを介してデータの受け渡しを行い、夫々動作モードとして稼動側または待機側として機能する少なくとも一対の入出力モジュールを備えた入出力二重化装置であって、夫々の前記入出力モジュールは、相手側の入出力モジュール(以下、「相手系」という)と接続され、動作モードを送受信する通信手段と、前記通信手段によって受信される相手系の動作モードと、自己側の入出力モジュール(以下、「自系」という)の自己診断結果に基づいて、自系の動作モードを決定し、当該決定した動作モードを前記CPUモジュールへ通知する動作モード調整手段と、前記動作モード調整手段によって決定された動作モードに基づいて、自系が稼動側の場合は、前記CPUモジュールから設定パラメータを入力し、該設定パラメータを用いて入力処理または出力処理を実行させる一方、相手系へ該設定パラメータを送信し、自系が待機側の場合は、相手系から送信されてくる設定パラメータを受信し、当該受信した設定パラメータを用いて入力処理または出力処理を実行させるコマンド送受信手段と、を備え、前記CPUモジュールは、稼動側の入出力モジュールのみに前記設定パラメータを出力することを特徴とする。
【0014】
ここで、「設定パラメータ」とは、入出力モジュールを所定の仕様で動作させるためのパラメータであり、例えばアナログ入出力ではスケール変換値、デジタル出力ではパルス幅、デジタル入力ではフィルタ時間などがある。
【0015】
本発明では、各入出力モジュールの備える動作モード調整手段によって、稼動側、待機側を決定し、稼動側/待機側の動作モード情報をCPUモジュールへ通知する。CPUモジュールは、稼動側の入出力モジュールに対してのみ設定パラメータを送信する。これにより、CPUモジュールの負荷を軽減させることができる。
【0016】
また、本発明に係る入出力二重化装置の動作モード調整手段は、自系の自己診断結果が正常のときの自系の動作モードの決定において、受信された前記相手系の動作モードが待機側の場合、自系の動作モードを稼動側に仮設定すると共に相手系へ自系が稼動側であることを通知し、この通知に対する相手系からの応答を受信し、この応答に含まれる相手系の動作モードも待機側のとき、前記仮設定を本設定にして自系の動作モードを稼動側に決定し、前記応答に含まれる相手系の動作モードが稼動側のとき、前記仮設定を解除し、自系の動作モードを待機側に決定することを特徴とする。
【0017】
本発明では、動作モードの決定の際に、相手系の動作モードが待機側の場合に直ちに自系が稼動側であると決定するのではなく、まず稼動側として仮設定をする。この仮設定状態のときは、相手系に自系が稼動側であることは通知するが、CPUモジュールへは自系が稼動側であることは通知しない。自系が稼動側として仮設定されている状態のときに、仮設定状態であることの相手側への通知に対する応答として受信した相手形の動作モードが尚も待機側である場合は、仮設定を本設定にして、このときCPUモジュールへ自系が稼動側であると決定したことを通知するのである。
【0018】
これにより、特にシステム立ち上がり時の各入出力モジュールの動作モードの決定処理において、相手系と自系の動作モードが競合しても、CPUモジュールへ通知する動作モードが不安定になることはなく、安定したシステム動作を実現することができる。
【0019】
特に動作モード調整手段は、自系と相手系が互いに稼動側として動作モードが競合したときに、一旦自系を待機側に移すと共に、動作モードの送信タイミングをずらすことによって、動作モードの調整を迅速かつ確実に実行することができる。
【0020】
また、本発明に係る入出力二重化装置では、稼動側および待機側の入出力モジュールが夫々備える共有メモリのCPUモジュール側は同一のアドレス空間が割り付けられており、夫々の前記入出力モジュールは、稼動側のときにのみ前記CPUモジュールの当該共有メモリへのアクセスを許可することを特徴とする。
【0021】
これにより、CPUモジュールのメモリ空間を節約することができ、ユニットへ実装可能な入出力モジュール数を増やしたり、安価なCPUの採用を可能にするなど、コストパフォーマンスの高い入出力二重化装置を実現することができる。
【0022】
なお、CPUモジュールは、稼動側を待機側に切り替えるための稼動/待機切替信号を稼動側の入出力モジュールへ送信し、稼動側の入出力モジュールは、前記稼動/待機切替信号を受信して、自系を待機側へ切り替えることにより、相手系を稼動側へ移行させることにより、動作モードの切替を行う。これにより、CPUモジュールは、二重化処理の負担を軽減することができる。
【0023】
さらに、本発明に係る入出力二重化装置は、入出力モジュールとしてアナログ入力モジュールを用いる入出力二重化装置であって、稼動側アナログ入力モジュールは、入力されるアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値を登録する稼動側基本情報登録手段と、該稼動側アナログ入力モジュールのA/D変換誤差を修正するための稼動側校正値および外部機器から出力されるアナログ信号のA/D変換値をそれぞれ入力する稼動側計測値入力手段と、前記外部機器の特性に合わせるための機器調整値を保持する稼動側記憶手段と、前記機器調整値と前記理論調整スケール値と前記稼動側校正値とを用いて待機側アナログ入力モジュールのA/D変換値の修正に使用する補正値を演算し、この補正値を周期的に前記待機側アナログ入力モジュールへ送信する補正値送信手段と、前記稼動側計測値入力手段によって入力されたアナログ信号のA/D変換値を前記稼動側記憶手段に保持されている機器調整値によって修正したA/D変換値を出力する出力値算出手段と、を備え、前記待機側アナログ入力モジュールは、入力されるアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値を登録する待機側基本情報登録手段と、該待機側アナログ入力モジュールのA/D変換誤差を修正するための待機側校正値および前記外部機器から出力されるアナログ信号のA/D変換値をそれぞれ入力する待機側計測値入力手段と、前記補正値送信手段によって送信された補正値を受信し、この補正値と前記理論調整スケール値と前記待機側校正値とを用いて待機側の機器調整値を演算して待機側記憶手段に保存する演算保存手段と、を備え、前記待機側アナログ入力モジュールは、所定の期間、前記補正値送信手段から補正値を受信しないことにより、稼動側アナログ入力モジュールとして動作することを特徴とする。
【0024】
ここで、「所定の期間」とは、補正値の送信周期をもとに予め設定される値であり、プログラマブルコントローラの制御周期(データリフレッシュ周期)に影響を与えない程度の期間をいう。例えば、制御周期を10mSとしたプログラマブルコントローラシステムに適用する場合は、所定の期間は10mS以下の値に設定し、送信周期はこの設定値の数分の1程度にするのが好ましい。
【0025】
本発明では、稼動側アナログ入力モジュールは、現地で機器調整値を入力して自モジュールの記憶部に保存する一方で、この機器調整値を用いて補正値を演算し、当該補正値を待機側アナログ入力モジュールへ送信する。待機側アナログ入力モジュールでは、受信した補正値を用いて、当該アナログ入力モジュールとしての機器調整値を算出して自モジュールの記憶部に保存しておく。そして、所定の期間補正値が受信されないことにより稼動側入力モジュールの異常を検知して、自モジュールが稼動側アナログ入力モジュールとして動作する。このとき、自モジュールの記憶部に保存されている機器調整値を用いて、入力したA/D変換値の修正を行うので、待機側アナログ入力モジュールとしては外部機器の特性に合わせるための機器調整値の入力は不要になる。また、故障したアナログ入力モジュールの交換時には、交換され待機側として立ち上がったアナログ入力モジュールは新たに稼動側になったアナログ入力モジュールから自動的に補正値を受信することになるので、交換するアナログ入力モジュールについても外部機器の特性に合わせるための機器調整が不要になる。このため稼働率が向上する。
【0026】
また、本発明に係る入出力二重化方法は、稼動側と待機側からなりアナログ値をデジタル値に変換して入力するアナログ入力モジュールを二重化して用いる方法であって、入力するアナログ値の範囲とデジタル値の範囲の対応関係(63)を稼動側と待機側の両方に共通の設定値として設定し、稼動側と待機側のそれぞれでA/D変換誤差を修正するための校正値(64)を入力し、該校正値と前記対応関係(63)から調整用スケール変換データを計算し、稼動側において、外部機器(9)の特性に合わせるための機器調整値(65)を入力し、入力した機器調整値(65)と校正値(64)との差を稼動側の調整用スケール変換データによってスケール変換して下限値および上限値による補正値(68)を算出すると共に該補正値を待機側へ送信し、待機側において、受信した補正値と待機側の調整用スケール変換データを用いて、待機側の機器調整値(65)を計算し、稼動側と待機側の少なくともいずれか一方において、入力した計測値を夫々が保持する機器調整値(65)を用いて修正することを特徴とする。
【0027】
本発明によれば、稼動側において、現地調整により機器調整値を求め、これを用いて補正値を算出し、この補正値を待機側へ送信し、待機側モジュールではこの補正値を用いて自モジュール用の機器調整値を計算するようにしたので、システム立ち上げ時は、稼動側モジュールのみ現地調整を行えば良く、また、片方のアナログ入力モジュールが故障した場合には、他方のアナログ入力モジュールが稼動側となり、待機側として実装される交換品に対して、当該補正値を転送するので、交換作業時の現地調整は不要となる。
【0028】
また、本発明に係るアナログ入力モジュール(10)は、稼動側か或いは待機側かの動作モードが設定可能なアナログ入力モジュールであって、動作モードの初期値(61)、入力するアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値(63)を登録する基本情報登録手段(42)と、A/D変換誤差を修正するための校正値(64)および外部機器(9)から出力されるアナログ信号のA/D変換値(66)を入力する計測値入力手段(43)と、動作モードが稼動側のときに、外部機器(9)の特性に合わせるための機器調整値(65)を入力し、当該入力した機器調整値(65)と理論調整スケール値(63)と校正値(64)とを用いて補正値(68)を演算し、当該演算した補正値を送信する手段(調整値変換手段44,補正値算出手段45,補正値送信手段47)と、動作モードが待機側のときに、稼動側から送られてくる補正値(68)を受信し、当該受信した補正値(68)と理論調整スケール値(63)と校正値(64)とを用いて機器調整値を演算する手段(補正値受信手段48,機器補正値変換手段50,機器調整値算出手段51)と、計測値入力手段(43)によって入力されたA/D変換値(66)を機器調整値(65)によって修正する出力値算出手段(46)と、を備えたことを特徴とする。
【0029】
本発明では、動作モードが稼動側のときは、入力した機器調整値と理論調整スケール値と校正値とを用いて補正値を算出して送信し、動作モードが待機側のときは、稼動側から送られてくる補正値を受信し、当該受信した補正値を用いて機器調整値を演算する。そして、計測値入力手段によって入力されたA/D変換値を機器調整値によって修正する。
【0030】
好ましくは、出力値算出手段(46)は、入力するアナログ値の範囲とデジタル値の範囲のアプリケーションプログラムへ渡すデジタル値の範囲の対応関係を示すユーザ要求スケール値によって、前記修正したA/D変換値をさらにスケール変換するようにすると良い。
【0031】
本発明に係るアナログ入力モジュール(10)は、さらに、動作モードが稼動側のときは、補正値(68)を周期的に待機側へ送信する一方、待機側からの該補正値の送信に対する応答の有無によって待機側の異常の有無を判定し、動作モードが待機側のときは、補正値の受信に対して応答する一方、補正値が周期的に送られてくるか否かによって稼動側の異常の有無の判定を行う稼動/待機判定手段(52)を備えたことを特徴とする。
【0032】
本発明では、補正値を周期的に送信することにより、アナログ入力モジュールを活線状態で差替えても自動的に待機側へ補正値が転送されるので、システム停止やリセットの必要がなく稼働率が向上する。
【発明の効果】
【0033】
本発明によれば、二重化を構成する入出力モジュール間で稼動/待機の動作モードの調整を実行し、アプリケーション層を介さずに補正値などの設定パラメータの転送を実行するので、CPUモジュールは二重化制御や待機側に対する処理をする必要がなくなりCPU負荷を軽減することができる。
【0034】
さらに、入出力モジュールの動作モードの判定結果により、稼動側の入出力モジュールのみがCPUモジュールからのアクセスを可能にすることによって、CPUモジュールのメモリ空間を節約することができる。
【図面の簡単な説明】
【0035】
【図1】本発明の第1の実施の形態による入出力二重化装置1の機能ブロック図である。
【図2】本発明の実施の形態による入出力二重化装置1のモジュール実装図である。
【図3】図1のCPU回路11の機能ブロック図である。
【図4】本発明の第1の実施の形態によるCPUモジュール2のメモリマップの説明図である。
【図5】図3の動作モード調整手段72の処理手順を示すフローチャートである。
【図6】図3の動作モード管理テーブル73のデータ構成例である。
【図7】図1のCPUモジュール2の入出力処理手順を示すフローチャートである。
【図8】本発明の第2の実施の形態によるCPUモジュール2のメモリマップの説明図である。
【図9】本発明の第2の実施の形態による入出力モジュール10の機能ブロック図である。
【図10】図9の動作モード判定部30とBUSI/F回路15の構成図である。
【図11】本発明の第2の実施の形態による動作モード調整手段72の処理手順をに示すフローチャートである。
【図12】本発明の第2の実施の形態によるCPUモジュール2の処理手順をに示すフローチャートである。
【図13】本発明の実施の形態による入出力二重化装置1のブロック図である。
【図14】図13のアナログ入力モジュール10の機能ブロック図である。
【図15】図14に示すアナログ入力モジュール10を稼動側と待機側の二重化構成で用いた場合の処理概要を説明するためのブロック図である。
【図16】図13の入出力二重化装置1の現地での動作概要の処理手順を示すフローチャートである。
【図17】外部A/D変換値(理論調整値scale)と、内部A/D変換値(校正値および機器調整値)との関係を示す説明図であり、図17(a)は稼動側モジュールの説明図、図17(2)は待機側モジュールの説明図である。
【図18】現地調整時の外部機器の特性への合わせこみの説明図である。
【図19】従来技術による入出力二重化装置のユニット実装図である。
【図20】従来技術による二重化構成による入出力二重化装置のブロック図である。
【図21】図20の従来のBUSI/F回路15の構成図である。
【発明を実施するための形態】
【0036】
以下、図面を参照しながら本発明の実施の形態を説明する。なお、同じ構成には同一符号を付している。
【0037】
図1は、本発明の第1の実施の形態による入出力二重化装置1の機能ブロック図である。図20に示した従来のハードウェア構成との主な違いは、二重化構成による稼動側と待機側の入出力モジュール間のシリアル通信を行う通信部96を設け、通信ケーブル5で稼動側と待機側を接続したことである。この通信部96は、データを送信回路21、データを受信する受信回路22、および、信号を絶縁する絶縁回路23から構成されている。
【0038】
この入出力二重化装置1において、各入出力モジュール10は、二重化されたモジュール間で一定のデータを受け渡すことによって、自系が稼動側になるべきか、待機側になるべきかの判定を行うものである。
【0039】
図2は、本実施の形態による入出力二重化装置1のモジュール実装図である。
この図において、入出力二重化装置1は、CPUモジュール2と、稼動系または待機系として動作する一対(ペア)の入出力モジュール10が複数ペア実装されている。
【0040】
CPUモジュール2および各入出力モジュール10は、ユニットに実装され、各モジュールのコネクタを介してベースボードのバス3と接続する。このバス3は、アドレスバス、データバスの他、読み出し信号、書き込み信号などのコントロールバスで構成されている。
【0041】
図3は、本実施の形態による入出力モジュール10のCPU回路11の機能ブロック図である。この図において、CPU回路11は、プログラムのストール監視やメモリチェックなどを行う自己診断手段71、CPUモジュール2との間でデータの受け渡し処理を行うCPUI/F手段41、相手系との間で稼動/待機の動作モードを調整する動作モード調整手段72、二重化構成において相手系の健全性確認その他の設定パラメータの受け渡しを行い相手系が正常か異常かの判定結果を出力するコマンド送受信手段49を有している。
【0042】
自己診断手段71は、電源投入時やシステムリセット時、その後周期的に診断処理を実行し、その診断結果を動作モード調整手段72に渡す。
【0043】
コマンド送受信手段49のいわゆる相手系診断処理は、通信部96を介して定期的に診断チェック用データが送信されてくるか否かを判定し、一定時間データが送られてこない場合は相手系異常として判定し、その判定結果を動作モード調整手段72に渡す。なお、診断チェック用データとして設定パラメータを兼用してもよい。
【0044】
<CPUモジュールのメモリマップ>
CPUモジュール2のメモリマップを図4に示す。
各入出モジュール10の共有メモリ82には、CPUモジュール2のメモリ空間が割り付けられ、入出力モジュールの実装されるスロットごとに異なるアドレス範囲が割り当てられている。なお、入出力モジュールにアドレス範囲を設定するスイッチを設けて、入出力モジュールごとにメモリ空間の割付を行うようにしてもよいが、本実施の形態ではスロットごとに異なるアドレス範囲が割り付けられる場合について説明する。
【0045】
CPUモジュール2の動作の概要は、入出力モジュール10から入力される正常か異常かのステータス情報、稼動か待機かの動作モード情報を取り込み、設定パラメータと稼動/待機切替指令を入出力モジュールに出力する。入出力データの内容は、入出力モジュールの種類によって異なる。たとえば、アナログ入力モジュールならば、同モジュールから渡されるA/D変換値を入力することとなり、アナログ出力モジュールならば、同モジュールへ渡す出力指令値を出力することになる。
【0046】
入出力モジュール10のステータス情報や動作モードは、入出力モジュール10のCPU回路11によって共有メモリ82に書き込まれる。そして、CPUモジュールが共有メモリ82からそのデータを読み出す。設定パラメータや稼動/待機切替指令は、CPUモジュール2から共有メモリ82に書き込まれ、入出力モジュール10のCPU回路11がそのデータを読み取って、所定の動作を実行する。
【0047】
また、共有メモリ82を介して、CPUモジュール2と入出力モジュール10のCPU回路11との間で入出力データの受け渡しが行われる。
【0048】
図4は、一つのペアの入出力モジュールに対するメモリ空間を示しているが、複数ペアの入出力モジュールが実装される場合は、夫々の入出力モジュール10に対して異なるメモリ空間が割り付けられる。
次に、本実施の形態による入出力二重化装置1の動作を説明する。
【0049】
<装置の初期化処理>
電源ON時に、CPUモジュール2は、各入出力モジュール10について、共有メモリ82の全領域を初期化する。たとえば、領域内の動作モード(稼動/待機情報)については、稼動でも待機でもないデータを初期値として設定する。また、ステータス領域についても、正常、異常時のコードとは異なる初期値を設定する。これにより、CPUモジュール2は、起動後一定時間、初期値が変化しなかった場合は、入出力モジュール10が正常に動作をしていないことを検知することができる。
【0050】
CPUモジュール2は、この初期化処理後に各入出力モジュール10のCPU回路11に対して割込み信号等によって共有メモリ82の書き込み許可の通知をする。
【0051】
<動作モード調整処理>
次に、図5を用いて入出力モジュール10の動作モード調整手段72の処理手順を説明する。動作モード調整手段72は、電源ONやシステムリセットにより起動されると、自己診断手段71の診断結果から異常の有無を判定し(S201,S202)、異常がある場合は(S202で「NO」)、共有メモリ上のステータス情報格納領域に異常内容に対応するエラーコードを書き込む(S203)。その後、動作モード調整手段72は、自系の動作モードを待機モードに設定する(S204)。具体的には、共有メモリ上の動作モード格納領域に「待機」を書き込む。そして、通信部96を介して、自系が待機モードであることを相手系に通知する(S205)。その後、動作モード管理テーブル73の仮設定フラグをリセットして、ステップS201に戻って以降の処理を繰り返す(S206)。
【0052】
ここで、図6に動作モード管理テーブル73の例を示す。稼動モードの本設定(以下、単に「本設定」という。)、稼動モードの仮設定(以下、単に「仮設定」という。)、および待機モードの各項目ごとにフラグが設定可能になっている。後述する処理により、それぞれ動作モードに対応するフラグが設定される。
【0053】
図5に戻り、動作モード調整手段72は、ステップS202でNOの場合は、共有メモリ82のステータス情報格納領域に「正常」を書き込む(S207)。次に、コマンド送受信手段49を介して受け取った相手系の動作モードから、相手系が稼動モードの場合は(S208で「YES」)、さらに、コマンド送受信手段49の出力結果から相手系が正常かどうかを判定し(S209)、正常の場合は、自系の動作モードを待機モードに設定する(S210)。なお、ステップS208の判定処理で用いる相手系の動作モードは、相手系から周期的に送られてくる動作モードのうち最新の動作モードを用いるものとする。
【0054】
ステップS210の後、コマンド送受信手段49を介して自系が待機モードであることを相手系に通知して(S211)、動作モード管理テーブル73の仮設定フラグをリセットする(S212)。その後、乱数を発生させ、乱数で定まる一定時間スリープした後(S213)、ステップS201に戻って以降の処理を繰り返す。なお、乱数の例としては、0〜9までの数字をランダムに選択し、その数字に所定時間(たとえば1mS)を掛け合わせた時間分だけスリープさせるものである。この所定時間は、動作モード調整手段72の一回の処理時間と同程度であるのが好ましい。
【0055】
ステップS208で「NO」、即ち相手系が待機モードか、或いは動作モードの通知がない場合、およびステップS209で相手系が正常でない場合は、次に自系が稼動モードか否かを判定する(S214)。なお、動作モード管理テーブル73の本設定フラグがセットされている場合に、稼動モードであると判定する。この判定の結果、自系が稼動モードである場合は(S214で「YES」)、共有メモリ82の稼動/待機切替指令格納領域のデータを読み込み(S215)、CPUモジュール2によって切替指令が設定されている場合は(S216で「YES」)、自系の動作モードを待機側に設定する(S217)。具体的には、動作モード管理テーブル73の待機フラグをセットすると共に、共有メモリ82の動作モード格納領域に「待機」を書き込む。そして、コマンド送受信手段49を介して自系が待機モードであることを相手系に通知する(S218)。その後、共有メモリ82の稼動/待機切替指令と動作モード管理テーブル73の仮設定フラグをリセットする(S219、S220)。
【0056】
一方、ステップS214で、稼動モードの本設定が行われていない場合は、次に、動作モード管理テーブル73の仮設定フラグがセットされているか否かを判定し(S221)、仮設定フラグがセットされている場合は、動作モード管理テーブル73の本設定フラグをセットして、自系の動作モードを稼動側に設定すると共に、共有メモリ82の動作モードとして、「稼動」を書き込む(S222)。その後、仮設定フラグをリセットして(S223)、コマンド送受信手段49を介して自系が稼動モードであることを相手系に通知して(S225)、ステップS201へ戻って以降の処理を繰り返す。
【0057】
一方、ステップS221で、仮設定フラグがセットされていない場合は、仮設定フラグをセットして(S224)、ステップS225へ移行する。
動作モード調整手段72は、以上の手順によって相手系との稼動/待機の調停を行う。
【0058】
なお、上記の説明では、コマンド送受信手段49を介して周期的に自系の動作モードを相手系に送信することとしたが、さらに、コマンド送受信手段49が相手系の動作モードを受信したときは、その応答として自系の動作モードを返信するようにしておき、上記の処理においてステップS221の判定の結果、仮設定フラグがセットされている場合は、前回起動時のステップS225の送信処理に対する相手系の応答に含まれている動作モードが待機側の場合にステップS222の本設定処理を行うようにすると良い。これにより、自系が稼動側であることを確実に相手系に伝えた後の相手系の動作モードに基づいて自系稼動側の決定を行うことができる。
【0059】
<動作モード調整後のCPUモジュール側の動作>
次に、図7を用いて、CPUモジュール2側の入出力処理手順について説明する。
CPUモジュール2は、電源が投入されると、例えばCPUモジュール2に接続された保守ツール(図示せず)など外部から動作モードの切替要求があるか否かを判定し(S301)、切替要求が有る場合は、対象となる稼動側入出力モジュールの出力領域に稼動/待機切替指令を書き込む(S302)。これにより、入出力モジュール10の図5ステップS216〜S220の処理によって、稼動側が待機側へ切り替わり、その結果、待機側が稼動側へ切り替わる。
【0060】
ステップS302の後、予め定められた起動遅延の設定時間を経過したか否かを判定し、経過していない場合は、ステップS301へ戻り、経過している場合は、次に入出力モジュール1(10)に対応する入力領域である入力領域1にアクセスして、共有メモリ82に設定されている稼動/待機情報を取得する(S304)。なお、ステップS303における起動遅延の設定時間とは、外部から切替指令を入力し、かつ、入出力モジュール10が動作モードを決定するのに十分な時間である。
【0061】
取得した稼動/待機情報が「稼動」の場合は、共有メモリ82の出力領域1に設定パラメータを書き込むことにより、入出力モジュール1(10)のCPU回路11に設定パラメータを転送する(S306)。なお、この設定パラメータは、入出力モジュール1(10)のコマンド送受信手段49によって相手系に送られる。
【0062】
次に、CPUモジュール2は、入力領域1から稼動/待機情報を取得し(S307)、入出力モジュール1(10)が稼動モードか否かを判定する(S308)。判定の結果、稼動モードの場合は、入出力領域1にアクセスして、入出力モジュール1(10)からのデータの読み出し、または入出力モジュール1(10)へのデータの書き込みを行い(S309)、ステップS307へ戻って以降の処理を繰り返す。ステップS308の判定の結果、稼動モードでない場合は、外部に入出力モジュール1(10)の交換指示を出力して(S310)、後述するステップS315へ移行する。
【0063】
一方、ステップS305で入出力モジュール1(10)が稼動モードでない場合は、CPUモジュール2は、次に入力領域2の稼動/待機情報を読み込んで(S311)、入出力モジュール2(10)の動作モードを判定する。その結果、入出力モジュール2(10)が稼動モードでない場合は(S312で「NO」)、外部にエラー通知を行って終了する(S313)。入出力モジュール2(10)が稼動モードの場合(S312で「YES」)は、入出力モジュール2(10)に設定パラメータを転送する(S314)。この設定パラメータは、入出力モジュール2(10)のコマンド送受信手段49によって相手系に送られる。
【0064】
次に、CPUモジュール2は、入力領域2から稼動/待機情報を取得し(S315)、入出力モジュール2(10)が稼動モードか否かを判定する(S316)。判定の結果、稼動モードの場合は、入出力領域2にアクセスして、入出力モジュール2(10)からのデータの読み出し、または入出力モジュール2(10)へのデータの書き込みを行い(S317)、ステップS315へ戻って以降の処理を繰り返す。ステップS316の判定の結果、稼動モードでない場合は、外部に入出力モジュール2(10)の交換指示を出力して(S318)、ステップS307へ移行する。
CPUモジュール2の入出力処理は、以上の手順で行われる。
【0065】
なお、上記は一組の入出力モジュールについての処理手順であるが、複数のペアが存在する場合は、夫々のペアごとに上記の処理を実行する。
【0066】
(他の実施例1)
図5の動作モード調整手段72のステップS213では、乱数を発生させて、それに応じた遅延時間を待たせることにより、二重化を構成する入出力モジュール間の処理タイミングをずらして、稼動、待機の判定結果が処理のたびに反転することを防止しているが、入出力モジュール10が実装されるスロットの識別情報(スロットID)を読み込み、読み込んだスロットIDに応じた時間分遅延させるようにしても良い。これにより、一旦タイミングが重なって、競合状態(両系とも相手系が稼動モードと認識した状態)となっても、両系とも一旦待機モードになり、次の周期では、スロットIDで定まるスリープ時間の短い入出力モジュール10のみが確実に稼動モードになることができる。
【0067】
また、本実施の形態による動作モード調整手段72の処理では、稼動モードの判定になったときに、直ちに「稼動」設定をするのではなく、まず仮設定フラグをセットし、これにより、相手系には、稼動側であることを通知する一方で、共有メモリを介してCPUモジュール2に渡す情報は、この時点では「稼動」にはしない。すなわち、この時点ではCPUモジュール2は、待機モードあるいは未設定状態として動作モードを取得することになる。
【0068】
そして、動作モード調整手段72は、次の周期で再び稼動判定になったときに、自系の動作モードを「稼動」として本設定し、CPUモジュール2へ渡す情報も「稼動」にする。これにより、二重化を構成する入出力モジュール間で動作モード調整処理のタイミングが重なったときに、両方が稼動モードになることを防止することができる。
【0069】
(他の実施例2)
上記は、入出力モジュール10の動作モード調整手段72の処理によって、稼動/待機のモードを決定するものであるが、簡便な方法としては、各入出力モジュール10に予め動作モード設定スイッチあるいは動作モードを格納する不揮発性メモリを設け、工場出荷時等に稼動、待機の設定をするようにしても良い。
【0070】
次に本発明の第2の実施の形態を説明する。
本実施の形態は、第1の実施の形態の入出力二重化装置1に対して、さらにCPUモジュール2のメモリ空間を削減するものである。
【0071】
<CPUモジュールのメモリ空間>
本実施の形態によるメモリ空間を図8に示す。
メモリ空間は、入出力モジュールのステータス情報を読み込み、制御信号を出力するためのメモリ空間、すなわちモジュールを管理するための空間(I/O管理空間という)と、入出力モジュールとの間で入出力データを受け渡すための空間(I/Oデータ空間という)に分けられている。
【0072】
そして、I/O管理空間は、各入出力モジュールごとに割り付けられ、I/Oデータ空間は、入出力モジュールのペアごとに割り付けられている。
【0073】
I/Oデータ空間に対しては、以下に説明するようにCPUモジュール2は稼動側モジュールのみとデータの受け渡しを行う。
【0074】
図9は、第2の実施の形態による入出力モジュール10の機能ブロック図である。図1に対して、さらに動作モード判定部30が加わっている。また、本実施の形態による入出力モジュール10の動作モード判定部30とBUSI/F回路15の構成を図10に示す。
【0075】
図10に示すBUSI/F回路15は、図8のメモリ空間、特に二重化を構成する入出力モジュール間で同一のI/Oデータ空間を割り付けるための回路構成の一例を示している。
【0076】
BUSI/F回路15は、共有メモリ82と、ステータス情報等をバス3に出力するゲート回路83を有している。また、BUSI/F回路15は、I/Oデータ空間を選択するための上位アドレスのデコード回路81、I/Oデータ空間の中でペアとなるスロットに実装された入出力モジュールの共有メモリ82を選択するための一致回路84、デコード回路81、一致回路84、および後述する自系動作モード信号を入力して共有メモリ82の選択信号を生成するAND回路85、さらに、I/O管理空間を選択するためのデコード回路86、スロットごとに選択信号を生成するための一致回路87、回路86,87の出力からゲート回路83の選択信号を生成するAND回路88で構成されている。
【0077】
ゲート回路83には、CPU回路11から出力されるステータス情報と自系動作モードの信号が入力されている。
【0078】
本実施の形態では、スロットIDは、S3(MSB)〜S0(LSB)の4ビットで識別され、スロットごとに連番となっている。図10の例では、S2とS0が抵抗R69を通してプルアップされ、S3とS1が0Vに接続されているので、スロットID"5"を表している。
【0079】
一致回路84には、スロットIDのLSBを除くS3〜S1が入力され、アドレスバスのうちペアごとの共有メモリ空間を選択するための中位アドレスと比較され、完全に一致した場合に論理"1"が出力される。
【0080】
一方、一致回路87には、スロットIDの全ての信号S3〜S0が入力され、アドレスバスのうちスロットごと(即ち入出力モジュールごと)のI/O管理空間を選択するためのアドレス(例えば下位4ビット)と比較され、完全に一致した場合に"1"が出力される。
【0081】
動作モード判定部30は、CPU回路11のモード設定信号を保持(ラッチ)する保持回路31、保持回路31の出力を入力するNAND回路32a、NAND回路32aの出力と繋がり、その出力を増幅あるいは信号変換して自系稼動信号として相手系へ送信する送信回路34、NAND回路32aと共にRSフリップフロップを構成するNAND回路32b、相手系から送られてくる稼動信号を入力する受信回路35、受信回路35の入力を反転して、NAND回路32bの入力とするNOT回路33aを有している。また、NAND回路32aの出力は、NOT回路33bを介してCPU回路11に入力され、自系動作モード信号として読み込み可能になっている。また、バス3の書き込み信号と、I/O管理空間のデコード信号がAND回路36を介してD型フリップフロップ(以下、「DF/F」という)37のクロック入力に接続され、バス3のデータ信号がDF/F37のD入力端子に接続されている。DF/F37の出力Qの反転端子はNAND回路32aの入力に接続されている。さらに、送信回路34の出力は相手系の受信回路35と接続され、相手系の送信回路34は自系の受信回路35と接続される。
この動作モード判定部30は、通信部96とは別個に設けられている。
【0082】
次に上記の構成を有する入出力二重化装置1の動作を説明する。
<入出力モジュールの動作モード調整処理>
本実施の形態による入出力モジュールの動作モード調整手段72の処理手順を図11に示す。図5に示した第1の実施の形態の手順との違いとして、ステップS222で自系の動作モードを稼動モードに設定する処理を、保持回路31に"1"を出力する処理(S222a)に代え、また、ステップS204、S210、S217で自系の動作モードを「待機」に設定する処理を、保持回路31に"0"を出力する処理(S204a、S210a、S217a)に代えている。さらに、ステップS207でステータス情報として「正常」設定をした後に、自系動作モードの値(即ちNOT回路33bの出力値)を読み込み、その値が"0"のときはステップS208へ移行し、入力値が"1"のときはステップS201へ戻る処理(S207a)を追加している。
【0083】
なお、本実施の形態では、動作モードは、共有メモリ82を介してCPUモジュール2へ通知するのではなく、CPUモジュールがI/O管理空間にアクセスして、ゲート回路83を介して自系動作モードの値を読み込むことにより、稼動/待機情報を取得する。
【0084】
<動作モード判定部30の作用>
動作モード判定部30の作用を簡単に説明する。入出力モジュール10は、電源ON又はシステムリセットにより、CPU回路11からリセット信号が出力され、そのリセット信号は保持回路31に入力される。保持回路31は、リセット信号を入力することによって、"0"を出力する。これによりNAND回路32aの出力および送信回路34の出力は"1"となる。送信回路34から出力される自系稼動信号は、自系が稼動モードであることを相手系に通知する信号であり、"0"ならば稼動モード、"1"ならば待機モードであることを意味する。電源ON又はシステムリセット直後の初期状態においては、"1"すなわち待機モードであるが、図11のステップS222aで、保持回路31に"1"が出力されるタイミングでは、相手系は待機モードであるため、NAND回路32bの出力は"1"、また、DF/F37の反転出力も"1"なので、NAND回路32aの出力は"0"になる。この信号は、相手系の入出力モジュールに対しては、相手系稼動信号として受信回路35で受信される。相手系はこの時点では待機モードであるため、相手系のNAND回路32bの入力は全て"1"となり、NAND回路32bの出力は"0"となる。このため、相手系では、保持回路31の出力値によらず、常にNAND回路32aの出力は"1"、つまり待機モードが維持されることになる。
【0085】
すなわち、動作モード判定部30から出力される自系稼動信号は、相手系の動作モードの変化をロックする機能を有することになる。
【0086】
一方、稼動モードである自系では、CPU回路11が異常を検知して、待機モードへ移行したり、リセット信号を発生したり、あるいは、CPUモジュール2から稼動/待機切替指令が出力された場合は、NAND回路32aの入力が"0"になるため、自系稼動信号は"1"になる。これにより、相手系に対するロックが解除され、相手系が稼動モードへの移行が可能になる。
【0087】
このように、本実施の形態では、ソフトウェアとハードウェアを組み合わせて動作モードの管理をするので、頻繁なモード変化を防止すると共に、両方の入出力モジュールが同時に稼動モードになるような事態が発生する可能性を低くすることができる。
【0088】
<BUSI/F回路15の作用>
本実施の形態の一致回路84では、連番のスロットIDの最下位ビット(LSB)をマスクしてアドレスと比較しているため、最下位ビットのみが異なるスロットは同じアドレス範囲が割り付けられることになる。したがって、スロットIDが、0と1、2と3、4と5・・・というように隣同士にペアとなる入出力モジュールを実装しておけば、同じメモリ空間で、自系動作モード信号により稼動側の入出力モジュールのみがアクセス可能になる。すなわち、自系動作モード信号がAND回路85の入力になっているので、CPUモジュール2からのアクセスにより、稼動側の共有メモリ選択信号(AND回路85の出力)はイネーブルになり、共有メモリからのデータの読み出し/共有メモリへのデータの書き込みが行われる。一方、待機側の自系動作モード信号は"0"なので、CPUモジュール2からのアクセスの有無にかかわらず、共有メモリ選択信号はイネーブルにならない。これにより、CPUモジュール2のI/Oデータ空間を節約することができる。
【0089】
<CPUモジュールからのデータ読み出し/書き込み処理>
図12に本実施の形態によるCPUモジュール2の入出力処理の手順を示す。
CPUモジュール2は起動すると、まずI/O管理空間にアクセスして、入力領域1と入力領域2のステータス情報を取得する(S401)。この時点で、いずれか一方でも異常があれば(S402で「NO」)、外部にエラー通知を行う(S403)。
【0090】
次に、外部からの切替要求の有無を判定し、切替要求が有る場合は、稼動/待機切替指令を出力する(S405)。その後、起動遅延の設定時間経過したか否かを判定し(S406)、経過していない場合は、ステップS404へ戻る。経過している場合は、次にI/Oデータ空間にアクセスして共有メモリに設定パラメータを書き込む(S407)。
【0091】
続いて、入力領域1と入力領域2のステータス情報を取得して(S408)、待機側が異常の場合は(S409で「NO」)、外部に待機側モジュールの交換指示を出力する(S410)。稼動側が異常の場合は(S411で「NO」)、稼動/待機指令を出力して(S413)、一定時間遅延後(S414)、ステップS408に戻って以降の処理を繰り返す。一定時間遅延させるのは、入出力モジュール間での動作モード切替処理の完了を待つためである。
【0092】
ステップS411で稼動側が正常の場合は、入出力領域に対してデータの読み出し、またはデータの書き込みの処理を行い(S412)、その後ステップS408へ戻って以降の処理を繰り返す。
【0093】
<CPUモジュールから切替指令>
CPUモジュール2はI/O管理空間にアクセスして、入出力モジュールごとに、異常の有無等のステータス情報や動作モード等のデータを取得する。CPUモジュール2は取得したデータによって稼動側の異常を検知したときは、I/O管理空間に対して稼動/待機切替指令を出力する。この切替指令は、稼動側モジュールについては、稼動モードから待機モードへ強制的に切り替えるものであり、これにより待機側モジュールは、動作モード調整手段72によって稼動側に移行する。
【0094】
これにより、CPUモジュール2は新たに稼動側になった入出力モジュールとデータの受け渡しを行うことができる。また、強制的に待機モードへ切り替えられた入出力モジュールの共有メモリ選択信号はハードウェアでロックされるので、ソフトウェアの暴走等によりイネーブルになることはない。
【0095】
本実施の形態によれば、入出力モジュール間で稼動/待機の動作モードの調整処理(二重化制御)を行い、CPUモジュールは、二重化制御をする必要がないので、CPUモジュールの処理負荷を軽減することができる。また、CPUモジュール側のアドレス空間を節約することができるので、安価な入出力二重化装置を実現することができる。
【0096】
次に、第3の実施の形態を説明する。
一般に、アナログ入力モジュールは、現地でシステム立ち上げ時に、現地の外部機器(センサ、アクチュエータ等)の特性に合わせて調整する必要がある。
【0097】
これは、図18に示すように、アナログ入力値(横軸)とA/D変換値(縦軸)の対応関係をユーザが変更したり、入出力二重化装置の設置環境、たとえば、外部機器9のアナログ出力回路の特性、接続ケーブル92のインピーダンス、各装置の接地状態などによって、アナログ出力値のA/D変換値が所望の値からずれる場合があり、このずれを補正する必要があるからである。
【0098】
このため、従来はシステム立ち上げ時には、稼動側モジュール、待機側モジュールの両方とも現地調整を行い取得した機器調整値によってA/D変換値を補正していた。また、もし、一方が故障して別のアナログ入力モジュールと交換するような場合は、その交換品に対しても現地調整を行う必要があり、システムの停止を余儀無くされることも度々あった。
【0099】
本実施の形態は、アナログ入力モジュールについて、特に現地調整によってA/D変換値を補正するが、この補正処理を稼動側についてのみ行い、その補正値を待機側に対して送信するというものである。
【0100】
なお、上述した動作モード調整処理やCPUモジュールとの受け渡しにおいては、第1の実施の形態と同様であるので、説明を割愛する。また、以下の説明においては、稼動/待機の動作モードの初期値は予めアナログ入力モジュールの不揮発性メモリに格納しておくか、モジュールに搭載されているスイッチの設定を読み込むこととしているが、第1または第2の実施の形態で説明したように動作モード調整手段72によって、稼動,待機を決定するようにしても良い。
【0101】
以下、入出力モジュールとして、アナログ入力モジュールを例にして本実施の形態による入出力二重化装置について説明する。
【0102】
図13は、入出力モジュールとしてアナログ入力モジュールを用いたときの入出力二重化装置のブロック図である。アナログ入力モジュール10の外部I/F部97は、外部機器9から出力されるアナログ信号を入力し、入力したアナログ信号の大きさに基づいて所定の大きさの電気信号を出力する複数の入力回路98、各入力回路98から出力される電気信号のうち一つを選択するマルチプレクサ回路(以下、MPX)14、MPX14の出力信号を一定時間保持するサンプルホールド回路(SH)19、アナログ信号をデジタル信号に変換してCPU回路11に渡すA/D変換器(以下、ADC)12で構成されている。
【0103】
なお、ADC12を絶縁型にするなど、必要により外部I/F部97側とCPU回路11側は絶縁されている。
【0104】
図14は、図13のアナログ入力モジュール10の機能ブロック図である。図14において、アナログ入力モジュール10は、BUSI/F回路15を介して、CPUモジュール2との間でデータの受け渡し処理を行うCPUI/F手段41、CPUモジュール2から送られてくる基本情報(稼動/待機の初期値61,ユーザ要求値scale62,理論調整値scale63)をCPU回路11の内部の図示しない記憶部40に保存する基本情報登録手段42、外部機器9などから出力されるアナログ信号を外部I/F部97を介して入力し、入力された計測値をCPUモジュール2からの指令によって、校正値64、機器調整値65、計測値66のそれぞれの記憶領域へ保存する計測値入力手段43、稼動モードのときに理論調整値scale63,校正値64,機器調整値65を用いて理論調整値67を演算する調整値変換手段44、この理論調整値67と理論調整値scale63を用いて稼動側から待機側へ送るための補正値を演算する補正値算出手段45、機器調整値65,計測値66,ユーザ要求値scale62を用いてCPUモジュール2のアプリケーションプログラムへ渡すための修正後計測値(以下、これを出力値という。)を演算する出力値算出手段46、補正値算出手段45によって算出された補正値を待機側へ送信する補正値送信手段47、待機モードのときに稼動側から送られてくる補正値を受信する補正値受信手段48、二重化構成において相手側の健全性確認その他のパラメータの受け渡しを行い相手側が正常か異常かの判定結果を出力するコマンド送受信手段49、補正値受信手段48によって補正値が受信されたときに、この補正値と理論調整値scale63,校正値64を用いて機器補正値69を演算する機器補正値変換手段50、この機器補正値69と校正値64を用いて機器調整値65を演算する機器調整値算出手段51、稼動/待機の初期値61とコマンド送受信手段49から出力される判定結果から自系が稼動モードで動作すべきか待機モードで動作すべきかを決定する稼動/待機判定手段52を備えている。ここで、各手段41〜52はCPU回路11の演算部によって動作するプログラムによって実現可能な機能であり、各データ61〜70は、CPU回路11の記憶部に保存されるデータである。なお、記憶部として、電源断時にもデータ保持可能な不揮発メモリを用いるのが好ましい。
【0105】
次に上記の構成を有する入出力二重化装置1の動作を図14と図15を用いて説明する。ここで、図15は、図14に示すアナログ入力モジュール10を稼動側と待機側の二重化構成で用いた場合の処理概要の説明図である。
【0106】
[稼動側の動作]
<基本情報登録処理>
基本情報登録手段42は、CPUI/F手段41を介してCPUモジュール2から渡された基本情報を記憶部40の基本情報保存領域に格納する。
【0107】
上記において、CPUモジュール2から渡される基本情報には、アプリケーションプログラムに渡すアナログ入力値のデータレンジを示すユーザ要求スケール値(ユーザ要求値scale)62、入力するアナログ値の範囲とデジタル値の範囲との対応関係を指定する稼動側と待機側共通のスケール値(理論調整値scale)63がある。なお、ユーザ要求値scale62と理論値scale63は共通にすることもできるが、ユーザ要求値scale62はアプリケーションプログラムと密接に関連するものであり、OSや下位層のいわゆる基本プログラムで管理するのが好ましい理論調整値scale63とは別々に設定できるようにしておくのが良い。
【0108】
なお、基本情報のうち稼動/待機の初期値61は、アナログ入力モジュール10に不揮発性メモリあるいはスイッチ等の入力手段を設けて、この設定状態を初期値として読み込む。また、運用状態においてアナログ入力モジュールの故障によって差替えられた新たなアナログ入力モジュールは、初期値として待機の設定がなされるものとする。
【0109】
スケール値などの範囲を指定するデータは、下限(Low側)と上限(High側)で指定するので、以降の説明においてLow側のデータを[Lo]、High側のデータを[Hi]で表す。
【0110】
<計測値入力処理>
計測値入力手段43は、外部I/F部97を介して外部機器9から出力されたアナログ信号を入力する。
なお、入力信号は、外部I/F部97のA/D変換器12によってデジタルデータとして入力され、当該外部機器のIDと関連付けられてCPU回路11の記憶部に保存される。
【0111】
<校正値登録処理>
アナログ入力モジュール10は、出荷に際して校正が必要になるが、入力信号として校正用の基準となるアナログ信号が入力される。この信号は、計測値入力手段43によって入力処理されるが、このときCPUモジュール2を経由して同モジュールに接続されたユーザインタフェース(タッチパネルやメンテナンスツール)から入力信号が校正値であることを示す指令を送信するようにし、この指令から当該アナログ入力モジュール10の計測値入力手段43は、入力信号が校正値であることを認識して、記憶部40の該当する校正値保存領域に保存する。この校正処理は、稼動側、待機側を問わず全てのアナログ入力モジュールについて実施する。
【0112】
<機器調整値登録処理>
現地では、運用前に外部機器9の特性に合わせるための調整処理が行われる。調整処理としては、上記校正値登録処理と同様にCPUモジュール2から入力信号が機器調整値であることを示す指令をアナログ入力モジュール10へ送り、外部機器9から調整用の信号を入力する。アナログ入力モジュール10の計測値入力手段43は、この指令から入力信号が機器調整値であることを認識して、記憶部40の該当する機器調整値保存領域に保存する。この調整処理は、二重化されたアナログ入力モジュール10のうち、稼動側のモジュールに対してのみ実施する。なお、読み込んだ校正値、機器調整値の記憶部40への書き込み処理もCPUモジュール2からの指令によって行われる。
【0113】
<調整値変換処理>
次に、調整値変換手段44は、記憶部に保存されている理論調整値scaleと校正値と機器調整値を抽出し、次の式(1L),式(1H)により理論調整値を計算する。計算結果は、記憶部の理論調整値保存領域に格納される。
【0114】
理論調整値[Lo] = 理論調整値Scale[Lo] + (機器調整値[Lo] - 校正値[Lo])×(理論調整値Scale[Hi] - 理論調整値Scale[Lo])/(校正値[Hi]−校正値[Lo])
・・・(1L)
理論調整値[Hi] = 理論調整値Scale[Lo] + (機器調整値[Hi] - 校正値[Lo])×(理論調整値Scale[Hi] - 理論調整値Scale[Lo])/(校正値[Hi]−校正値[Lo])
・・・(1H)
【0115】
なお、上記の式(1L),式(1H)のうち、(理論調整値Scale[Hi] - 理論調整値Scale[Lo])/(校正値[Hi]−校正値[Lo])を調整用スケール変換データという。
【0116】
具体例として、設定された理論調整値Scale[Lo]=0,理論調整値Scale[Hi]=30000、ユーザ要求値Scale[Lo] = 0,ユーザ要求値Scale[Hi]=16000、収集された校正値[Lo]=0,校正値[Hi]=32000、機器調整値[Lo]=3200,機器調整値[Hi]=32000,稼動側計測値=32000の場合について以下に各手段の計算結果を示す。
【0117】
この具体例の場合、調整値変換手段44の出力は、式(1L),式(1H)より、理論調整値[Lo]=3000,理論調整値[Hi]=30000となる。
【0118】
理論調整値を求める理由は、稼動側モジュールが何V調整したかを待機側モジュールに伝えるためには0-10V/0-30000のように電圧とスケールを一致させておく必要があるからである。
【0119】
<補正値算出処理>
次に、補正値算出手段45は、記憶部に格納されている理論調整値67と理論調整値scale63を抽出し、式(2L),(2H)により補正値を計算する。計算結果は、記憶部の補正値保存領域に格納される。
【0120】
補正値[Lo]=理論調整値[Lo]−理論調整値Scale[Lo] ・・・(2L)
補正値[Hi]=理論調整値[Hi]−理論調整値Scale[Hi] ・・・(2H)
【0121】
上記具体例では、理論調整値Scale[Lo]=0,理論調整値Scale[Hi] =30000、調整値変換手段44で算出した理論調整値[Lo]=3000,理論調整値[Hi]=30000であるから式(2L),式(1H)より、補正値[Lo]=3000,補正値[Hi]=0となる。
【0122】
<補正値送信処理>
次に、補正値送信手段47は、算出した補正値を待機側モジュールへ向けて送信する。
【0123】
<出力値算出処理>
その後、運用状態において、入力処理を実行する。計測値入力手段43は、外部機器9からの入力信号を記憶部40の計測値保存領域に格納する。
【0124】
出力値算出手段46は、この計測値保存領域に保存されている計測値66と、同じく記憶部40に保存されている機器調整値65とユーザ要求値scale62を用いて、式(5)によりCPUモジュール2へ出力するためのデータ(稼動側出力値)を計算する。
【0125】
稼動側出力値 = ユーザ要求値Scale[Lo]+(稼動側計測値−機器調整値[Lo])×(ユーザ要求値Scale[Hi]−ユーザ要求値Scale[Lo])/(機器調整値[Hi]−機器調整値[Lo])
・・・ (5)
【0126】
上記具体例では、ユーザ要求値Scale[Lo] = 0,ユーザ要求値Scale[Hi] = 16000、機器調整値[Lo] = 3200,機器調整値[Hi] = 32000、稼動側計測値=32000であるから、式(5)より、CPUモジュール2へ渡す計測データとして、稼動側出力値=16000となる。
【0127】
[待機側の動作]
待機側モジュールの処理として、上記の基本情報登録処理、計測値入力処理、校正値登録処理、および出力値算出処理は稼動側モジュールと同様の処理内容を実行するが、このとき機器調整値については、計測値入力手段43によって入力するのではなく次の処理によって受信した補正値から演算する。
【0128】
<補正値受信処理>
待機側モジュールの補正値受信手段48は、稼動側から送られてきた補正値68を受信すると、記憶部40の補正値保存領域に格納する。
【0129】
<機器補正値変換処理>
次に、機器補正値変換手段50によって、記憶部40に保存されている補正値68と理論調整値scale63と校正値64とを用いて、次の式(3L),式(3H)によって、機器補正値69を計算する。計算結果は、記憶部40の機器補正値保存領域に格納される。
【0130】
機器補正値[Lo] = (補正値[Lo]−理論調整値Scale[Lo])×(校正値[Hi]−校正値[Lo])/(理論調整値Scale[Hi]−理論調整値Scale[Lo]) ・・・(3L)
機器補正値[Hi] = (補正値[Hi]−理論調整値Scale[Lo])×(校正値[Hi]−校正値[Lo])/(理論調整値Scale[Hi]−理論調整値Scale[Lo]) ・・・(3H)
【0131】
なお、上記の式(3L),式(3H)のうち、(校正値[Hi]−校正値[Lo])/(理論調整値Scale[Hi]−理論調整値Scale[Lo])の項は、調整用スケール変換データに該当している。
【0132】
具体例として、CPUモジュール2から設定される理論調整値は稼動側と同じ値であり、理論調整値Scale[Lo] = 0,理論調整値Scale[Hi] = 30000である。また、校正値としては校正値[Hi] = 28000,校正値[Lo] =0とする。このとき、稼動側から送られてくる補正値は、補正値[Lo] = 3000,補正値[Hi] = 0なので、上記の式(3L),(3H)より、機器補正値[Lo] =2800 ,機器補正値[Hi] =0となる。
【0133】
<機器調整値算出処理>
次に、機器調整値算出手段51は、記憶部40に格納されている機器補正値69と校正値64を抽出して、次の式(4L),(4H)により、機器調整値65を計算する。計算結果は、記憶部40の機器調整値保存領域に格納される。
【0134】
機器調整値[Lo]=校正値[Lo]+機器補正値[Lo] ・・・(4L)
機器調整値[Hi]=校正値[Hi]+機器補正値[Hi] ・・・(4H)
【0135】
上記具体例では、校正値[Lo]=0,校正値[Hi]=28000、機器補正値[Lo]=2800,機器補正値[Hi]=0なので、式(4L),式(4H)より、機器調整値[Lo]=2800,機器調整値[Hi]=28000になる。この機器調整値算出手段51によって算出された機器調整値で計測値を修正することにより、アナログ入力モジュールの個体差が吸収される。
【0136】
<出力値算出処理>
待機側モジュールでアナログ入力処理を行う場合は、記憶部40に保存されている計測値66、ユーザ要求値scale62、および機器調整値65を抽出し、上記の式(5)により、待機側入力値を計算する。そして、稼動/待機判定手段52によって、稼動側モジュールが故障したと判定した場合は、待機側が新たな稼動側となり、ユーザ要求値scale62によってスケール変換された計測値をCPUモジュール2に送る。なお、具体例として、待機側計測値=28000の場合には、式(5)より、待機側出力値=16000となる。すなわち、本実施の形態の演算処理によれば、CPUモジュール2へ出力するデータ値は、稼動側と待機側で同じになる。
【0137】
なお、故障したモジュールは、新たなアナログ入力モジュールと交換されるが、このとき、この新たなアナログ入力モジュールは待機側に設定され、出荷時に校正処理が行われ、校正値64が記憶部40に保存されているものとする。このモジュールが現地の入出力二重化装置1に実装されると、稼動側モジュールは、保存されている補正値を補正値送信手段47によって、当該交換された待機側モジュールへ送り、待機側モジュールは、上述した待機側モジュールの処理を実行する。
【0138】
以上、入出力二重化装置1の各手段の処理内容について説明した。次に入出力二重化装置1の現地での動作、特に補正値の送信処理、他系の異常検出処理、および稼動/待機の切替処理について図16のフローチャートを用いて説明する。
【0139】
まず、アナログ入力モジュール10は、電源ONによってCPU回路11の記憶部40から「調整値」、「二重化設定」のフラグ、「稼動/待機」の別、「補正値」を各データの保存エリアから読み出し(S101)、二重化設定でない場合は、単独運転処理を実行する(S102)。この場合は、補正値送信手段47、補正値受信手段48、コマンド送受信手段49は機能させない。
【0140】
稼動/待機判定手段52は、稼動/待機の初期状態61から、自モジュールが稼動設定されている場合は(S104で「YES」)、計測値入力手段43はCPUモジュール2からの指令により自モジュールは調整中か否かを判定する(S105)。
【0141】
自モジュールが調整中の場合は(S105で「YES」)、調整用の入力値(機器調整値)を取得して、調整値変換手段44により理論調整値を算出する(106)。
【0142】
次に、補正値算出手段45を起動して、理論調整値を元に補正値を算出する(S107)。そして、記憶部40への書き込み要求が有る場合は、機器調整値と補正値を記憶部40へ書き込む(S109)。
【0143】
続いて、補正値送信手段47により通信ケーブル5を経由して、算出した補正値を待機側モジュールへ転送する(S110)。なお、この転送により待機側モジュールは稼動側モジュールの健全性を検知する。
【0144】
その後、コマンド送受信手段49は待機側モジュールから補正値の受信完了のレスポンスがあったか否かを判定し(S111)、レスポンスがあった場合は、その後周期的に待機側モジュールへ生存確認等の所定のコマンドを送信する(S113)。なお、互いに相手方の正常性を確認する手法としては、いわゆるハローコールなど予め定められた手順によって所定のデータ(補正値でも良い)を受け渡すことによって実現することができる。
【0145】
一方、レスポンスが無い場合は、再度、補正値を待機側モジュールに転送すると共に(S112)、入力処理を実行し(S114)、出力値算出手段46により機器調整値等をもとに入力値を補正する(S115)。
【0146】
そして、待機側モジュールが正常か否かをステップS113のコマンド送信のレスポンスによって確認し(S116)、一定時間または一定回数レスポンスが無い場合は、CPUモジュール2に待機側モジュールが異常であることを通知して(S117)、ステップS105へ戻り以降の処理を繰り返す。
【0147】
一方、ステップS104で、自モジュールが待機側設定の場合は、補正値受信手段48により補正値の受信があったか否かを判定し(S118)、補正値の受信があった場合は、受信した補正値を記憶部40に書き込む(S119)。
【0148】
そして、機器補正値変換手段50および機器調整値算出手段51により補正値を機器調整値に変換する(S120)。また、稼動側モジュールに補正値の受信完了レスポンスを送信する(S121)。
【0149】
その後は、稼動側モジュールへ生存確認等のコマンド送受信処理を行い(S122)、稼動側モジュールが正常か否かの確認を行う(S123)。
【0150】
そして、稼動側モジュールが正常の場合は、入力処理を実行して、ステップS118へ戻り以降の処理を繰り返す。一方、ステップS123で、稼動側モジュールが正常でないと判定した場合は、稼動/待機判定手段52によりCPUモジュール2へ稼動側が異常であることを通知して、記憶部40の稼動/待機の設定を稼動に書き換えて、自モジュールが稼動側に切り替わり(S126)、ステップS105へ移行して、以降の処理を実行する。
【0151】
なお、このとき、オンライン状態で新たに稼動側へ切り替わったアナログ入力モジュールは、ステップS105では、自モジュールは調整中ではないため、ステップS111へジャンプする。このとき、異常と判定された相手側モジュールは、待機側扱いとなるが、この待機側モジュールからは、補正値受信完了レスポンスはないため、S112へ移行し、自モジュールの記憶部40に保存されている機器調整値を用いて入力値を補正し、CPUモジュール2へ渡す。
【0152】
その後、待機側モジュールが交換された場合は、ステップS112の処理によって、新たに稼動側となったモジュールの記憶部40に保存されている補正値が待機側モジュールへ転送されることになる。一方、交換された待機側モジュールは、ステップS104で「NO」となり、ステップS118へ移行し、補正値を受信し自モジュールの記憶部40へ保存し、以後はこの補正値を用いて機器調整値を算出し、これにより入力値を補正することになる。
【0153】
[理論調整値scaleと校正値・機器調整値との関係]
図17は、理論調整値scale(外部A/D変換値)と、校正値および機器調整値との関係を示す説明図である。ここで、理論調整値scaleは、CPUモジュール2から指定されるA/D変換の範囲を示す値(スケール値)であるため、外部A/D変換値と言い、校正値および調整値は、入力されたアナログ値(この例では電圧値)に対応するアナログ入力モジュール内のADC12のA/D変換値であるため内部A/D変換値と言う。
【0154】
この表において、電圧の単位を[v]、デジタル値の単位を[d]で表している。
まず、CPUモジュール2からは、基準となるスケール値として0[v]−10[v]の入力範囲に対して、電圧0[v]に対しては、0[d](理論調整値scale[Lo])、電圧10[v]に対しては、30000[d](理論調整値scale[Hi])の対応関係が設定される。
【0155】
次に、校正段階において、電圧0[v]の印加に対する内部A/D変換値(校正値[Lo])が0[d]、電圧10[v]の印加に対する内部A/D変換値(校正値[Hi])が32000[d]であったとすると、図17(a)の直線Aのようになる。なお、この例では、説明の便宜上、原点(0[d])を合わせるように、入力値をシフト、すなわち[Lo]側の差分だけ [Hi]側も差し引くように補正することを前提としているが、計測値をそのまま用いるようにしても良い。
【0156】
次に、現地での調整段階において、電圧0[v]の印加に対する内部A/D変換値(機器調整値[Lo])が3200[d]、電圧10[v]の印加に対する内部A/D変換値(機器調整値[Hi])が32000[d]であったとすると、図17(a)の直線Bのようになる。なお、この例では、機器調整値[Hi]を校正値[Hi]に合わせるようにシフトしているが、計測値をそのまま用いるようにしても良い。
【0157】
このとき、式(1L),式(1H)から理論調整値[Lo]=3000、理論調整値[Hi]=30000となるが、これは、機器調整値[Lo]、機器調整値 [Hi]をそれぞれ、校正値のスケール(すなわち内部A/D変換値のスケール)から理論調整値のスケール(外部A/D変換値のスケール)に変換することを意味している。すなわち、この補正値は外部A/D変換値のスケール上での補正値を意味する。
【0158】
このように、稼動側では、CPUモジュール2から指定された入力範囲のデジタル値(理論調整値scale)と校正値から調整用スケール変換データ(直線A)を求め、入力した機器調整値をこの調整用スケール変換データによってスケール変換して、補正値を求め、該補正値を待機側へ送信しているのである。
【0159】
そして、待機側では、この補正値から式(3L),式(3H)により、機器補正値[Lo]、機器補正値[Hi]を計算する。この式(3L),式(3H)は、補正値を外部A/D変換値のスケールから内部変換A/D変換値のスケールへ変換する処理であり、機器補正値は、内部変換A/D変換値のスケール上での値を意味している。
【0160】
そして、待機側の出荷時の校正値に対してこの機器補正値を加算することによって、機器調整値をそれぞれ[Lo]側、[Hi]側について求める(式(4L),式(4H))。このときの校正値と機器調整値は、それぞれ直線C、直線Dのようになる。
【0161】
この機器調整値を用いて、式(5)により計測値を修正して、CPUモジュール2へ出力するのである。
【0162】
すなわち、待機側では受信した補正値をもとに調整用スケール変換データ(直線C)によって、待機用の補正値である機器補正値を算出し、該機器補正値を用いて、待機側の機器調整値を求めて、計測値を修正し出力値を算出しているのである。
【0163】
以上、本実施の形態によれば、入力範囲のデジタル値(理論調整値scale)と校正値から調整用スケール変換データを求め、入力した機器調整値をこの調整用スケール変換データによってスケール変換して補正値を求め、該補正値を待機側へ送信し、待機側では受信した補正値をもとに待機側の調整用スケール変換データによって、待機側の補正値である機器補正値を算出し、該機器補正値を用いて待機側の機器調整値を求めて、計測値を修正しCPUモジュールへの出力値を算出する。
【0164】
これにより、現地の外部機器との接続に伴う調整は、最初に稼動側モジュールに対してのみ行えば良く、待機側モジュール、およびその後の交換したアナログ入力モジュールについては、最初の稼動側モジュールで計算した補正値を用いることによって、外部機器の特性に合わせる調整を自動的に行うことができるので、現地調整の手間が省け、作業効率が向上する。
【0165】
本発明は、上述した実施の形態に限定されること無く、その要旨を逸脱しない範囲で種々変形して実施をすることができる。
たとえば、稼動側から待機側へ補正値に送信の都度インクリメントされる連番を付して周期的に送るようにし、待機側はこの補正値の受信によって応答を返すようにしても良い。これにより、運用中に待機側が故障したときに活線状態で交換されたときでも稼動側から待機側へ補正値が送られ、稼動側においてその応答によって待機側の健全性を確認することができる。
【0166】
また、上述したように補正値送信手段47は、理論調整値と理論調整スケール値(理論調整値scale)との差分を補正値として送信しても良いが、調整値変換手段44で算出する理論調整値または基本情報を用いてこのデータに変換可能なデータを補正値として送信するようにしても良い。
【符号の説明】
【0167】
1 入出力二重化装置
2 CPUモジュール
3 バス
5 通信ケーブル
9 外部機器
10 入出力モジュール (アナログ入力モジュール含む)
11 CPU回路
12 ADC(A/D変換器)
14 MPX(マルチプレクサ)
15 BUSI/F回路
19 サンプルホールド回路(SH)
21 送信回路
22 受信回路
23 絶縁回路
30 動作モード判定部
31 保持回路
32a,32b NAND回路
33a,33b NOT回路
34 送信回路
35 受信回路
36,85,88 AND回路
37 DF/F
40 記憶部
41 CPUI/F手段
42 基本情報登録手段
43 計測値入力手段
44 調整値変換手段
45 補正値算出手段
46 出力値算出手段
47 補正値送信手段
48 補正値受信手段
49 コマンド送受信手段
50 機器補正値変換手段
51 機器調整値算出手段
52 稼動/待機判定手段
71 自己診断手段
72 動作モード調整手段
73 動作モード管理テーブル
81,86 デコード回路
82 共有メモリ
83 ゲート回路
84,87 一致回路
92 接続ケーブル
96 通信部
97 外部I/F部
98 入力回路
99 従来のアナログ入力モジュール
100 従来の入出力二重化装置
【特許請求の範囲】
【請求項1】
同一ユニット内に実装され、演算処理を実行するCPUモジュールと共有メモリを介してデータの受け渡しを行い、夫々動作モードとして稼動側または待機側として機能する少なくとも一対の入出力モジュールを備えた入出力二重化装置であって、
夫々の前記入出力モジュールは、
相手系と接続され、動作モードを送受信する通信手段と、
前記通信手段によって受信される相手系の動作モードと、自系の自己診断結果に基づいて、自系の動作モードを決定し、当該決定した動作モードを前記CPUモジュールへ通知する動作モード調整手段と、
前記動作モード調整手段によって決定された動作モードに基づいて、自系が稼動側の場合は、前記CPUモジュールから設定パラメータを入力し、該設定パラメータを用いて入力処理または出力処理を実行させる一方、相手系へ該設定パラメータを送信し、自系が待機側の場合は、相手系から送信されてくる設定パラメータを受信し、当該受信した設定パラメータを用いて入力処理または出力処理を実行させるコマンド送受信手段と、を備え、
前記CPUモジュールは、稼動側の入出力モジュールのみに前記設定パラメータを出力することを特徴とする入出力二重化装置。
【請求項2】
前記動作モード調整手段は、自系の自己診断結果が正常のときの自系の動作モードの決定において、
受信された前記相手系の動作モードが待機側の場合、自系の動作モードを稼動側に仮設定すると共に相手系へ自系が稼動側であることを通知し、この通知に対する相手系からの応答を受信し、この応答に含まれる相手系の動作モードも待機側のとき、前記仮設定を本設定にして自系の動作モードを稼動側に決定し、前記応答に含まれる相手系の動作モードが稼動側のとき、前記仮設定を解除し、自系の動作モードを待機側に決定することを特徴とする請求項1に記載の入出力二重化装置。
【請求項3】
前記動作モード調整手段は、自系と相手系が互いに稼動側として動作モードが競合したときに、待機系に移すと共に、動作モードの送信タイミングをずらすことを特徴とする請求項1または2に記載の入出力二重化装置。
【請求項4】
稼動側および待機側の入出力モジュールが夫々備える共有メモリのCPUモジュール側からアクセスするアドレス空間は同一のアドレス空間が割り付けられており、
夫々の前記入出力モジュールは、稼動側のときにのみ前記CPUモジュールの当該共有メモリへのアクセスを許可することを特徴とする請求項1乃至3の何れか一項に記載の入出力二重化装置。
【請求項5】
前記CPUモジュールは、稼動側を待機側に切り替えるための稼動/待機切替信号を稼動側の入出力モジュールへ送信し、
前記稼動側の入出力モジュールは、前記稼動/待機切替信号を受信して、自系を待機側へ切り替えることにより、相手系を稼動側へ移行させることを特徴とする請求項1乃至4の何れか一項に記載の入出力二重化装置。
【請求項6】
前記入出力モジュールは、アナログ入力モジュールであって、
稼動側アナログ入力モジュールは、
入力されるアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値を登録する稼動側基本情報登録手段と、
該稼動側アナログ入力モジュールのA/D変換誤差を修正するための稼動側校正値および外部機器から出力されるアナログ信号のA/D変換値をそれぞれ入力する稼動側計測値入力手段と、
前記外部機器の特性に合わせるための機器調整値を保持する稼動側記憶手段と、
前記機器調整値と前記理論調整スケール値と前記稼動側校正値とを用いて待機側アナログ入力モジュールのA/D変換値の修正に使用する補正値を演算し、この補正値を周期的に前記待機側アナログ入力モジュールへ送信する補正値送信手段と、
前記稼動側計測値入力手段によって入力されたアナログ信号のA/D変換値を前記稼動側記憶手段に保持されている機器調整値によって修正したA/D変換値を出力する出力値算出手段と、を備え、
前記待機側アナログ入力モジュールは、
入力されるアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値を登録する待機側基本情報登録手段と、
該待機側アナログ入力モジュールのA/D変換誤差を修正するための待機側校正値および前記外部機器から出力されるアナログ信号のA/D変換値をそれぞれ入力する待機側計測値入力手段と、
前記補正値送信手段によって送信された補正値を受信し、この補正値と前記理論調整スケール値と前記待機側校正値とを用いて待機側の機器調整値を演算して待機側記憶手段に保存する演算保存手段と、を備え、
前記待機側アナログ入力モジュールは、所定の期間、前記補正値送信手段から補正値を受信しないことにより、稼動側アナログ入力モジュールとして動作することを特徴とする請求項1乃至5の何れか一項に記載の入出力二重化装置。
【請求項7】
前記出力値算出手段は、前記修正したA/D変換値をユーザが要求するスケール範囲にさらにスケール変換することを特徴とする請求項6に記載の入出力二重化装置。
【請求項1】
同一ユニット内に実装され、演算処理を実行するCPUモジュールと共有メモリを介してデータの受け渡しを行い、夫々動作モードとして稼動側または待機側として機能する少なくとも一対の入出力モジュールを備えた入出力二重化装置であって、
夫々の前記入出力モジュールは、
相手系と接続され、動作モードを送受信する通信手段と、
前記通信手段によって受信される相手系の動作モードと、自系の自己診断結果に基づいて、自系の動作モードを決定し、当該決定した動作モードを前記CPUモジュールへ通知する動作モード調整手段と、
前記動作モード調整手段によって決定された動作モードに基づいて、自系が稼動側の場合は、前記CPUモジュールから設定パラメータを入力し、該設定パラメータを用いて入力処理または出力処理を実行させる一方、相手系へ該設定パラメータを送信し、自系が待機側の場合は、相手系から送信されてくる設定パラメータを受信し、当該受信した設定パラメータを用いて入力処理または出力処理を実行させるコマンド送受信手段と、を備え、
前記CPUモジュールは、稼動側の入出力モジュールのみに前記設定パラメータを出力することを特徴とする入出力二重化装置。
【請求項2】
前記動作モード調整手段は、自系の自己診断結果が正常のときの自系の動作モードの決定において、
受信された前記相手系の動作モードが待機側の場合、自系の動作モードを稼動側に仮設定すると共に相手系へ自系が稼動側であることを通知し、この通知に対する相手系からの応答を受信し、この応答に含まれる相手系の動作モードも待機側のとき、前記仮設定を本設定にして自系の動作モードを稼動側に決定し、前記応答に含まれる相手系の動作モードが稼動側のとき、前記仮設定を解除し、自系の動作モードを待機側に決定することを特徴とする請求項1に記載の入出力二重化装置。
【請求項3】
前記動作モード調整手段は、自系と相手系が互いに稼動側として動作モードが競合したときに、待機系に移すと共に、動作モードの送信タイミングをずらすことを特徴とする請求項1または2に記載の入出力二重化装置。
【請求項4】
稼動側および待機側の入出力モジュールが夫々備える共有メモリのCPUモジュール側からアクセスするアドレス空間は同一のアドレス空間が割り付けられており、
夫々の前記入出力モジュールは、稼動側のときにのみ前記CPUモジュールの当該共有メモリへのアクセスを許可することを特徴とする請求項1乃至3の何れか一項に記載の入出力二重化装置。
【請求項5】
前記CPUモジュールは、稼動側を待機側に切り替えるための稼動/待機切替信号を稼動側の入出力モジュールへ送信し、
前記稼動側の入出力モジュールは、前記稼動/待機切替信号を受信して、自系を待機側へ切り替えることにより、相手系を稼動側へ移行させることを特徴とする請求項1乃至4の何れか一項に記載の入出力二重化装置。
【請求項6】
前記入出力モジュールは、アナログ入力モジュールであって、
稼動側アナログ入力モジュールは、
入力されるアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値を登録する稼動側基本情報登録手段と、
該稼動側アナログ入力モジュールのA/D変換誤差を修正するための稼動側校正値および外部機器から出力されるアナログ信号のA/D変換値をそれぞれ入力する稼動側計測値入力手段と、
前記外部機器の特性に合わせるための機器調整値を保持する稼動側記憶手段と、
前記機器調整値と前記理論調整スケール値と前記稼動側校正値とを用いて待機側アナログ入力モジュールのA/D変換値の修正に使用する補正値を演算し、この補正値を周期的に前記待機側アナログ入力モジュールへ送信する補正値送信手段と、
前記稼動側計測値入力手段によって入力されたアナログ信号のA/D変換値を前記稼動側記憶手段に保持されている機器調整値によって修正したA/D変換値を出力する出力値算出手段と、を備え、
前記待機側アナログ入力モジュールは、
入力されるアナログ値の範囲とデジタル値の範囲の対応関係を示す理論調整スケール値を登録する待機側基本情報登録手段と、
該待機側アナログ入力モジュールのA/D変換誤差を修正するための待機側校正値および前記外部機器から出力されるアナログ信号のA/D変換値をそれぞれ入力する待機側計測値入力手段と、
前記補正値送信手段によって送信された補正値を受信し、この補正値と前記理論調整スケール値と前記待機側校正値とを用いて待機側の機器調整値を演算して待機側記憶手段に保存する演算保存手段と、を備え、
前記待機側アナログ入力モジュールは、所定の期間、前記補正値送信手段から補正値を受信しないことにより、稼動側アナログ入力モジュールとして動作することを特徴とする請求項1乃至5の何れか一項に記載の入出力二重化装置。
【請求項7】
前記出力値算出手段は、前記修正したA/D変換値をユーザが要求するスケール範囲にさらにスケール変換することを特徴とする請求項6に記載の入出力二重化装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図18】
【図19】
【図20】
【図21】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図18】
【図19】
【図20】
【図21】
【図17】
【公開番号】特開2012−128695(P2012−128695A)
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願番号】特願2010−279937(P2010−279937)
【出願日】平成22年12月15日(2010.12.15)
【出願人】(000005234)富士電機株式会社 (3,146)
【Fターム(参考)】
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願日】平成22年12月15日(2010.12.15)
【出願人】(000005234)富士電機株式会社 (3,146)
【Fターム(参考)】
[ Back to top ]