(57)【特許請求の範囲】
【請求項１】
同一の内容のユーザプログラムを備えた２つのＣＰＵユニットを備え、前記２つのＣＰＵユニットは、相手の状態を確認可能とし、一方がアクティブとなるとともに他方がスタンバイとなり、前記アクティブのＣＰＵユニットがダウンした場合には、前記スタンバイのＣＰＵユニットがアクティブに切り替わって運転を継続するプログラマブルコントローラにおいて、
前記２つのＣＰＵユニットは、前記アクティブのＣＰＵユニットが前記同一のユーザプログラムを実行するとともに、その実行結果が制御に反映され、前記スタンバイのＣＰＵユニットが、前記アクティブのユーザプログラムと同一の内容のユーザプログラムを実行するものの、実行結果を出力しないようにした、ホットスタンバイ方式で動作するように構成され、
前記２つのＣＰＵユニットは、それぞれ着脱可能に装着され、同一の演算処理を実行する特殊機能モジュールを備えるとともに、それら各特殊機能モジュールは、前記アクティブのＣＰＵユニットに実装されたものがアクティブの特殊機能モジュールとなり、前記スタンバイのＣＰＵユニットに実装されたものがスタンバイの特殊機能モジュールとなるように構成され、
前記アクティブの特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記アクティブのＣＰＵユニットに渡し、前記アクティブのＣＰＵユニットともに制御を司り、
前記スタンバイ側の特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記スタンバイのＣＰＵユニットに渡すようにしたことを特徴とするプログラマブルコントローラ。
【請求項２】
前記２つのＣＰＵユニットと、それぞれに実装された前記特殊機能モジュールとの間のデータ交換は、共有メモリを介して行い、
前記２つの特殊機能モジュールは、前記２つのＣＰＵユニットと非同期で演算実行するとともに、その演算実行中に得られたＩ／Ｏデータをその演算実行中は前記共有メモリに書き込みを行わず、
前記演算実行中に得られたＩ／Ｏデータは、実装されたＣＰＵユニットとの同期処理中に前記共有メモリに書き込むことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項３】
前記ＣＰＵユニットに実装された前記特殊機能モジュールは、自己の演算実行結果と、相手のＣＰＵユニットに実装された前記特殊機能モジュールの演算実行結果を取得するとともに、それら取得した２つの演算実行結果を比較し、不一致の場合には、演算処理の遅れている特殊機能モジュールは演算を進める補正処理を実行し、２つの特殊機能モジュールの進行を等しくするようにしたことを特徴とする請求項１または２に記載のプログラマブルコントローラ。
【請求項４】
前記アクティブの特殊機能モジュールは、外部からの命令により、前記アクティブの特殊機能モジュールのメモリに格納されている変数データまたは，パラメータデータが変更された場合に、前記アクティブのＣＰＵユニットに対して二重化イニシャル処理を要求する機能を備え、
前記アクティブのＣＰＵユニットは、前記二重化イニシャル処理を要求された場合、前記メモリの少なくとも変更された内容を取得するとともに、前記スタンバイの特殊機能モジュールに向けて出力し、前記アクティブの特殊機能モジュールのメモリ内容と、前記スタンバイの特殊機能モジュールのメモリ内容とを一致させる機能を備えたことを特徴とする請求項１から３の何れか１項に記載のプログラマブルコントローラ。
【請求項５】
演算処理を実行する特殊機能モジュールを装着可能なホットスタンバイ方式での二重化対応のＣＰＵユニットであって、
ユーザプログラムに基づく制御を実行するアクティブと、前記ユーザプログラムを実行するが、その実行結果に基づいて前記制御を実行しないスタンバイの２つのモードを取り、前記スタンバイの時に相手のＣＰＵユニットがダウンしたことを検知すると、アクティブに切り替わって運転を継続するＣＰＵユニットにおいて、
自己に実装された前記特殊機能モジュールとの間のデータ交換は、共有メモリを介して行い、
前記２つのモードのいずれの場合も、前記ユーザプログラムの演算実行を含むサイクリックな処理を実行後、前記特殊機能モジュールとの間で同期をとってデータの送受を行うインナーサービス処理機能を備え、
そのインナーサービス処理機能は、自己に実装された前記特殊機能モジュールの演算実行により得られたＩ／Ｏデータを前記共有メモリに格納させるものであることを特徴とするＣＰＵユニット。
【請求項６】
前記Ｉ／Ｏデータの前記共有メモリへの格納は、
自己に実装された特殊機能モジュールと相手のＣＰＵユニットに実装された特殊機能モジュールの演算実行結果を一致させたことを条件に行うようにしたことを特徴とする請求項５に記載のＣＰＵユニット。
【請求項７】
ユーザプログラムに基づく制御を実行するアクティブのＣＰＵユニットとして動作するモードと、前記ユーザプログラムを実行するが、その実行結果に基づいて前記制御を実行しないスタンバイのＣＰＵユニットとして動作するモードのいずれかのモードで動作するホットスタンバイ方式での二重化対応のＣＰＵユニットに着脱可能に実装される特殊機能モジュールであって、
前記特殊機能モジュールは、自己が装着された前記二重化対応のＣＰＵユニットがアクティブのＣＰＵユニットとして動作するモードの場合はアクティブの特殊機能モジュールとして動作する機能を持ち、自己が装着された前記二重化対応のＣＰＵユニットがスタンバイのＣＰＵユニットとして動作するモードの場合はスタンバイの特殊機能モジュールとして動作する機能を持つとともに、アクティブとスタンバイのいずれの場合も同一の演算処理を演算実行し、その演算処理の結果をそれぞれが接続されたＣＰＵユニットに渡すようにし、
前記特殊機能モジュールと前記ＣＰＵユニットとの間のデータ交換は、共有メモリを介して行い、
前記特殊機能モジュールは、実装されるＣＰＵユニットと非同期で前記演算実行するとともに、その演算実行中に得られたＩ／Ｏデータをその演算実行中は前記共有メモリに書き込みを行わず、
前記演算実行中に得られたＩ／Ｏデータは、実装されたＣＰＵユニットとの同期処理中に前記共有メモリに書き込むことを特徴とする特殊機能モジュール。
【請求項８】
演算実行する特殊機能モジュールを備えたＣＰＵユニットを２台備えるとともに、その２台のＣＰＵユニットがホットスタンバイ方式で動作する二重化システムを構成するプログラマブルコントローラにおける二重化処理方法であって、
前記２台のＣＰＵユニットは、ユーザプログラムに基づく制御を実行するアクティブのＣＰＵユニットとして動作するモードと、前記ユーザプログラムを実行するが、その実行結果に基づいて前記制御を実行しないスタンバイのＣＰＵユニットとして動作するモードのいずれかのモードで動作するようにし、
前記２つの特殊機能モジュールは、前記アクティブのＣＰＵユニットに実装されたものがアクティブの特殊機能モジュールとなり、前記スタンバイのＣＰＵユニットに実装されたものがスタンバイの特殊機能モジュールとなるようにし、
前記アクティブの特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記アクティブのＣＰＵユニットに渡し、前記アクティブのＣＰＵユニットともに制御を司り、
前記スタンバイ側の特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記スタンバイのＣＰＵユニットに渡すようにし、
前記アクティブ側のＣＰＵユニットまたはそれに実装される前記特殊機能モジュールに異常が生じた場合に、前記スタンバイのＣＰＵユニット並びに特殊機能モジュールがアクティブに切り替わるように制御することを特徴とする二重化処理方法。
【請求項９】
演算実行する特殊機能モジュールを備えたＣＰＵユニットを２台備えるとともに、その２台のＣＰＵユニットがホットスタンバイ方式で動作する二重化システムを構成するプログラマブルコントローラにおける二重化処理方法であって、
前記２台のＣＰＵユニットは、ユーザプログラムに基づく制御を実行するアクティブのＣＰＵユニットとして動作するモードと、前記ユーザプログラムを実行するが、その実行結果に基づいて前記制御を実行しないスタンバイのＣＰＵユニットとして動作するモードのいずれかのモードで動作するようにし、
前記２つの特殊機能モジュールは、前記アクティブのＣＰＵユニットに実装されたものがアクティブの特殊機能モジュールとなり、前記スタンバイのＣＰＵユニットに実装されたものがスタンバイの特殊機能モジュールとなり、
前記アクティブの特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記アクティブのＣＰＵユニットに渡し、前記アクティブのＣＰＵユニットともに制御を司り、
前記スタンバイ側の特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記スタンバイのＣＰＵユニットに渡すようにし、
前記２つのＣＰＵユニットと、それぞれに実装された前記特殊機能モジュールとの間のデータ交換は、共有メモリを介して行い、
前記２つの特殊機能モジュールは、前記２つのＣＰＵユニットと非同期で演算実行し、
演算実行中に得られたＩ／Ｏデータをその演算実行中は前記共有メモリに書き込みを行わず、
前記演算実行中に得られたＩ／Ｏデータは、実装されたＣＰＵユニットとの同期処理中に前記共有メモリに書き込むことを特徴とする二重化処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プログラマブルコントローラ及びＣＰＵユニット並びに特殊機能モジュール及び二重化処理方法に関するものである。
【０００２】
【発明の背景】
ファクトリーオートメーション（ＦＡ）の制御装置として、プログラマブルコントローラ（ＰＬＣ）が用いられている。このＰＬＣは、複数のユニットから構成される。すなわち、電源供給源の電源ユニット，ＰＬＣ全体の制御を統率するＣＰＵユニット，ＦＡの生産装置や設備装置の適所に取り付けたスイッチやセンサの信号を入力する入力ユニット，アクチュエータなどに制御出力を出す出力ユニット，通信ネットワークに接続するための通信ユニットなどの各種のユニットを適宜組み合わせて構成される。
【０００３】
ＰＬＣのＣＰＵユニットにおける制御は、入力ユニットで入力した信号をＣＰＵユニットのＩＯメモリに取り込み（ＩＮリフレッシュ）、予め登録されたユーザプログラム記述言語（例えばラダー言語）で組まれたユーザプログラムに基づき論理演算をし（演算実行）、その演算実行結果をＩＯメモリに書き込んで出力ユニットに送り出し（ＯＵＴリフレッシュ）、その後、通信ユニットを介して通信ネットワーク上の他のＰＬＣとデータ送受信を行ったりＣＰＵユニットに備えられた通信ポートを介して外部の機器とデータ送受信などを行ったりする（周辺処理）ことをサイクリックに繰り返し処理するようになる。なお、ＩＮリフレッシュとＯＵＴリフレッシュを一括して行う（Ｉ／Ｏリフレッシュ）場合もある。
【０００４】
ところで、ＣＰＵユニットは、通常、上記したユーザプログラムを格納するＲＡＭやシステムプログラムを格納するＲＯＭや、上記した演算処理等を実行するＭＰＵや、演算実行する際に使用するＲＡＭ（共有メモリ，ＩＯメモリ，ワークメモリ）等を備えて構成される。これに対し、ＣＰＵユニット内に、インテリジェントな高機能ボードである特殊機能モジュール（ＩＮＮＥＲボード，インナーボード，サブボードと称されることもあり、以下「インナーボード」と称する）を着脱可能に実装したタイプのものもある。このインナーボードは、例えば外部機器と通信するための専用の処理を実行するように作成されたプログラムを実行する機能を持ち、インナーボードが上記した演算処理等の一部を実施することにより、制御の高速化・高度化を図ることができるようになっている。
【０００５】
また、システムの安全性，信頼性を向上するため、ＰＬＣを構成する各ユニットを二重化することが行われる。例えば、本発明が対象とするＣＰＵユニットを二重化する場合、ＣＰＵユニットを２個設けるとともに、それら２つのＣＰＵユニットをＣＰＵ間バスにより接続する。そして、それら２個のＣＰＵユニットは、基本的に同一の機能を持ったものであり、それぞれのＣＰＵユニットに格納された同じ内容のユーザプログラムを実行する。
【０００６】
そして、２台のＣＰＵユニットのうち、一方がアクティブのＣＰＵユニットとなって、実際にサイクリックな処理を行い、メモリに対して読み書きを行ったり、外部のＩ／Ｏ機器等との間で制御データ（Ｉ／Ｏデータ）の送受を行い、ＦＡネットワークシステムの制御を司る。また、他方のＣＰＵユニットはスタンバイのＣＰＵユニットとなり、待機中は、アクティブのユーザプログラムと同一の内容のユーザプログラムを実行するものの、演算実行結果をＩＯメモリへ反映することはない。そして、アクティブのＣＰＵユニットから処理結果等を受信し、スタンバイのＣＰＵユニットのメモリの更新を行う。これにより、スタンバイのＣＰＵユニットとアクティブのＣＰＵユニットのメモリの同一性が確保される。
【０００７】
そして、アクティブのＣＰＵユニットが故障した場合には、スタンバイのＣＰＵユニットがアクティブのＣＰＵユニットに切り替わって実際の制御等の動作を行う。従って、ＣＰＵユニットに故障が発生しても、すぐにシステムが停止することなく、継続して運転できるので信頼性が向上する。
【０００８】
上記した二重化システムでは、ＣＰＵユニットのＩＯメモリなどは、２つのＣＰＵユニット間で同一性が確保されて二重化システムが保証される。しかしながら、上記したインナーボードを実装したタイプのＣＰＵユニットの場合、ＣＰＵユニットの本体側で持つメモリの同一性は維持されるものの、インナーボードまで二重化することができていなかった。
【０００９】
この発明は、特殊機能モジュールを実装したＣＰＵユニットを２台備えたプログラマブルコントローラにおいて、特殊機能モジュールも含めて二重化システムを構築することのできるプログラマブルコントローラ及びＣＰＵユニット並びに特殊機能モジュール及び二重化処理方法を提供することを目的とする。
【００１０】
【課題を解決するための手段】
この発明によるプログラマブルコントローラは、同一の内容のユーザプログラムを備えた２つのＣＰＵユニットを備え、前記２つのＣＰＵユニットは、相手の状態を確認可能とし、一方がアクティブとなるとともに他方がスタンバイとなり、前記アクティブのＣＰＵユニットがダウンした場合には、前記スタンバイのＣＰＵユニットがアクティブに切り替わって運転を継続するプログラマブルコントローラにおいて、前記２つのＣＰＵユニットは、前記アクティブのＣＰＵユニットが前記同一のユーザプログラムを実行するとともに、その実行結果が制御に反映され、前記スタンバイのＣＰＵユニットが、前記アクティブのユーザプログラムと同一の内容のユーザプログラムを実行するものの、実行結果を出力しないようにした、ホットスタンバイ方式で動作するように構成され、前記２つのＣＰＵユニットは、それぞれ着脱可能に装着され、同一の演算処理を実行する特殊機能モジュールを備えるとともに、それら各特殊機能モジュールは、前記アクティブのＣＰＵユニットに実装されたものがアクティブの特殊機能モジュールとなり、前記スタンバイのＣＰＵユニットに実装されたものがスタンバイの特殊機能モジュールとなるように構成され、前記アクティブの特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記アクティブのＣＰＵユニットに渡し、前記アクティブのＣＰＵユニットともに制御を司り、前記スタンバイ側の特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記アクティブのＣＰＵユニットに渡すようにした。これにより、特殊機能モジュールも含めて二重化対応ができ、より安全で高機能・高信頼性のプログラマブルコントローラとなる。
【００１１】
そして、好ましくは、上記構成を前提とし、さらに、前記２つのＣＰＵユニットと、それぞれに実装された前記特殊機能モジュールとの間のデータ交換は、共有メモリを介して行い、前記２つの特殊機能モジュールは、前記２つのＣＰＵユニットと非同期で演算実行するとともに、その演算実行中は前記共有メモリに格納されるＩ／Ｏデータの書き込みを行わず、前記演算実行により得られた前記Ｉ／Ｏデータは、実装されたＣＰＵユニットとの同期処理中に前記ＣＰＵユニットに転送するように構成することである。
【００１２】
係るプログラマブルコントローラを構築するための本発明に係るＣＰＵユニットとしては、例えば、演算処理を実行する特殊機能モジュールを装着可能なホットスタンバイ方式での二重化対応のＣＰＵユニットであって、ユーザプログラムに基づく制御を実行するアクティブと、前記ユーザプログラムを実行するが、その実行結果に基づいて前記制御を実行しないスタンバイの２つのモードを取り、前記スタンバイの時に相手のＣＰＵユニットがダウンしたことを検知すると、アクティブに切り替わって運転を継続するＣＰＵユニットにおいて、自己に実装された前記特殊機能モジュールとの間のデータ交換は、共有メモリを介して行い、前記２つのモードのいずれの場合も、前記ユーザプログラムの演算実行を含むサイクリックな処理を実行後、前記特殊機能モジュールとの間で同期をとってデータの送受を行うインナーサービス処理機能を備え、そのインナーサービス処理機能は、自己に実装された前記特殊機能モジュールの演算実行により得られたＩ／Ｏデータを前記共有メモリに格納させるようにした。
【００１３】
さらに、上記したプログラマブルコントローラを構築するための本発明に係る特殊機能モジュールは、ユーザプログラムに基づく制御を実行するアクティブのＣＰＵユニットとして動作するモードと、前記ユーザプログラムを実行するが、その実行結果に基づいて前記制御を実行しないスタンバイのＣＰＵユニットとして動作するモードのいずれかのモードで動作するホットスタンバイ方式での二重化対応のＣＰＵユニットに着脱可能に実装される特殊機能モジュールであって、前記特殊機能モジュールは、自己が装着された前記二重化対応のＣＰＵユニットがアクティブのＣＰＵユニットとして動作するモードの場合はアクティブの特殊機能モジュールとして動作する機能を持ち、自己が装着された前記二重化対応のＣＰＵユニットがスタンバイのＣＰＵユニットとして動作するモードの場合はスタンバイの特殊機能モジュールとして動作する機能を持つとともに、アクティブとスタンバイのいずれの場合も同一の演算処理を演算実行するようにし、前記特殊機能モジュールと前記ＣＰＵユニットとの間のデータ交換は、共有メモリを介して行い、前記特殊機能モジュールは、実装されるＣＰＵユニットと非同期で前記演算実行するとともに、その演算実行中に得られたＩ／Ｏデータをその演算実行中は前記共有メモリに書き込みを行わず、前記演算実行中に得られたＩ／Ｏデータは、実装されたＣＰＵユニットとの同期処理中に前記共有メモリに書き込むように構成した。
【００１４】
さらに本発明に係る二重化処理方法では、演算実行する特殊機能モジュールを備えたＣＰＵユニットを２台備えるとともに、その２台のＣＰＵユニットがホットスタンバイ方式で動作する二重化システムを構成するプログラマブルコントローラにおける二重化処理方法であって、前記２台のＣＰＵユニットは、ユーザプログラムに基づく制御を実行するアクティブのＣＰＵユニットとして動作するモードと、前記ユーザプログラムを実行するが、その実行結果に基づいて前記制御を実行しないスタンバイのＣＰＵユニットとして動作するモードのいずれかのモードで動作するようにし、前記２つの特殊機能モジュールは、前記アクティブのＣＰＵユニットに実装されたものがアクティブの特殊機能モジュールとなり、前記スタンバイのＣＰＵユニットに実装されたものがスタンバイの特殊機能モジュールとなるようにし、前記アクティブの特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記アクティブのＣＰＵユニットに渡し、前記アクティブのＣＰＵユニットともに制御を司り、前記スタンバイ側の特殊機能モジュールは、前記同一の演算処理を実行するとともに、その演算処理の結果を前記スタンバイのＣＰＵユニットに渡すようにし、前記アクティブ側のＣＰＵユニットまたはそれに実装される前記特殊機能モジュールに異常が生じた場合に、前記スタンバイのＣＰＵユニット並びに特殊機能モジュールがアクティブに切り替わるように制御することである。
【００１５】
そして、係る構成を前提とし、さらに前記２つのＣＰＵユニットと、それぞれに実装された前記特殊機能モジュールとの間のデータ交換は、共有メモリを介して行い、前記２つの特殊機能モジュールは、前記２つのＣＰＵユニットと非同期で演算実行し、その演算実行中は前記共有メモリに格納されるＩ／Ｏデータの書き込みを行わず、前記演算実行により得られた前記Ｉ／Ｏデータは、実装されたＣＰＵユニットとの同期処理中に前記ＣＰＵユニットに転送するようにすると良い。
【００１６】
ここで、演算実行結果の前記メモリへの書き込みは、ＣＰＵユニットが行っても良いし、ＣＰＵユニットからの命令に従って特殊機能モジュールに行わせるようにしてもよい。
【００１７】
この発明によれば、２つの特殊機能モジュールは、それぞれ非同期で同一内容のプログラムを演算実行する。また、二重化システムが構築され、処理対象のデータも等しいので、最終的な演算結果も一致する。
【００１８】
そして、好ましくは、前記ＣＰＵユニットに実装された前記特殊機能モジュールは、自己の演算実行結果と、相手のＣＰＵユニットに実装された前記特殊機能モジュールの演算実行結果を取得するとともに、それら取得した２つの演算実行結果を比較し、不一致の場合には、演算処理の遅れている特殊機能モジュールは演算を進める補正処理を実行し、２つの特殊機能モジュールの進行を等しくするように構成することである。
【００１９】
また、係るプログラマブルコントローラを構築するためのＣＰＵユニットとしては、前記Ｉ／Ｏデータの前記共有メモリへの格納は、自己に実装された特殊機能モジュールと相手のＣＰＵユニットに実装された特殊機能モジュールの演算実行結果を一致させたことを条件に行うようにすることである。
【００２０】
このように、補正処理を行わせることにより、補正処理を行う都度２つの特殊機能モジュールにおける演算処理の進行状態が一致するので、書き込まれる演算結果のデータも等しくなる。
【００２１】
さらに、本発明に係るプログラマブルコントローラでは、前記アクティブの特殊機能モジュールは、外部からの命令により、前記アクティブの特殊機能モジュールのメモリに格納されている変数データまたは，パラメータデータが変更された場合に、前記アクティブのＣＰＵユニットに対して二重化イニシャル処理を要求する機能を備え、前記アクティブのＣＰＵユニットは、前記メモリの少なくとも変更された内容を取得するとともに、前記スタンバイの特殊機能モジュールに向けて出力し、前記アクティブの特殊機能モジュールのメモリ内容と、前記スタンバイの特殊機能モジュールのメモリ内容とを一致させる機能を備えることである。なお、特殊機能モジュールのメモリに格納されている変数データとは、例えば、演算実行などによりサイクリックに書き換えられるデータのことである。また、特殊機能モジュールのメモリに格納されているパラメータデータとは、演算実行などによってサイクリックに書き換わらずに、ツールなどにより外部から書き換えられるデータのことであり、例えば、特殊機能モジュールのシステム設定に関するデータや特殊機能モジュール用のユーザプログラムなどが該当する。
【００２２】
アクティブ側の特殊機能モジュールは、演算処理中にツールなどを用いて外部からメモリの記憶内容が変更されることがある。係る場合でも、二重化イニシャル処理を行うことにより、その変更内容をスタンバイ側の特殊機能モジュール側に伝達することができ、同一性が確保できる。なお、「前記スタンバイの特殊機能モジュールに向けて出力し」とは、実施の形態ではスタンバイのＣＰＵユニットを経由でスタンバイの特殊機能モジュールに伝送するようにしているが、直接特殊機能モジュールに伝達する仕組みを構築し、それにより伝送するようにしてももちろん良い。
【００２３】
【発明の実施の形態】
図１は、本発明に係るプログラマブルコントローラ（ＰＬＣ）の一実施の形態を示している。本発明に係るＰＬＣ１０は、複数のユニットから構成され、各ユニットが二重化されている。すなわち、ＰＬＣ１０を構成する各ユニットに対して電源供給をする２台の電源ユニット１１や、ユーザプログラムを演算実行したり、Ｉ／Ｏリフレッシュや周辺処理をサイクリックに実行する機能を持つ第１，第２ＣＰＵユニット１２，１３や、それら第１，第２ＣＰＵ１２，１３の動作を制御するデュプレックスユニット１６や、入出力機器を接続するＩ／Ｏユニット１７等を備えている。
【００２４】
そして、これらのユニットは、システムバス１９を介して接続される（図２参照）。もちろん、このＰＬＣ１０において上記したユニットの他にも実装可能なユニットは存在し、必要に応じて連結するユニットを増減する。
【００２５】
このＰＬＣ１０では、電源ユニット１１と、第１，第２ＣＰＵユニット１２，１３が二重化されている。すなわち、２台の電源ユニット１１は、並列接続によってＰＬＣ１０の各ユニットへ電源供給を行っている。このため、その一方の電源ユニット１１が故障・異常等して電源供給ができなくなると、他方の電源ユニット１１が各ユニットに対して電源供給を継続して行うようになる。
【００２６】
また、第１，第２ＣＰＵユニット１２，１３は、同一内容のユーザプログラムを実行するもので、実際のシステム稼動時には、何れか一方が制御系（アクティブ）となり、他方がスタンバイとなる。そして、制御系となったＣＰＵユニットが行ったユーザプログラムの演算結果が、制御に反映（Ｉ／Ｏユニットを介して外部機器へ出力）される。また、スタンバイのＣＰＵユニット側でも同一内容のユーザプログラムは実行されるが、その結果が出力されない。さらに、スタンバイのＣＰＵユニットは、制御系のＣＰＵユニットから演算実行結果を受け取り、自己のメモリの更新などの所定の処理を実行する。これにより、スタンバイのＣＰＵユニットは、制御系のＣＰＵユニットと同じ状態を維持する。従って、制御系のＣＰＵユニットが異常によりダウンした場合には、直ぐにスタンバイであったＣＰＵユニットが制御系に切り替わり、制御動作を実行することができ、ホットスタンバイ方式での二重化システムが実現される。
【００２７】
そして、第１，第２ＣＰＵユニット１２，１３の切替は、二重化コントロールユニットたるデュプレックスユニット１６により行われる。つまり、デュプレックスユニット１６は、図２に示すように、二重化制御回路１６ａを備え、この二重化制御回路１６ａにより、バス切替器１８を操作してバスの切替えを行ったり、第１，第２ＣＰＵユニット１２，１３間での同期制御を行ったりする。さらに、このデュプレックスユニット１６を介して、第１，第２ＣＰＵユニット１２，１３間でデータ交換が行われる。
【００２８】
また、本実施の形態では、第１，第２ＣＰＵユニット１２，１３には、第１，第２インナーボード１４，１５がそれぞれ内装される。具体的には、各ＣＰＵユニットに用意されたスロットに装着することにより、機械的に組み込まれるとともに、バスを介してＣＰＵユニットとデータ交換ができるようになる。そして、この第１，第２インナーボード１４，１５も、アクティブとスタンバイの何れかを択一的に取る。つまり、実装されたＣＰＵユニットがアクティブの場合には、インナーボードもアクティブとなり、実装されたＣＰＵユニットがスタンバイの場合には、インナーボードもスタンバイとなる。
【００２９】
以下の説明では、便宜上第１ＣＰＵユニット１２，第１インナーボード１４がアクティブとなり、第２ＣＰＵユニット１３，第２インナーボード１５がスタンバイとなっているものとして説明する。第１，第２ＣＰＵユニット１２，１３と同様に、第１インナボード１４と第２インナーボード１５も同じ機能を持ち、同一の処理を実行する。そして、当然のことながら、第１，第２ＣＰＵユニット１２，１３のハードウェア構成は、同一の構成を採り、第１，第２インナーボード１４，１５のハードウェア構成も同一の構成を採る。
【００３０】
具体的には、図２に示すように、第１，第２ＣＰＵユニット１２，１３は、ユーザプログラムを格納するユーザメモリ１２ａ，１３ａと、そのユーザメモリ１２ａ，１３ａに格納されたユーザプログラムを演算実行したり、Ｉ／Ｏリフレッシュや周辺処理をサイクリックに実行するＭＰＵ１２ｂ，１３ｂと、その演算実行時にワークエリアとして使用するＲＡＭ１２ｃ，１３ｃと、ＩＯメモリ１２ｄ，１３ｄ並びにＩ／Ｆ−ＡＳＩＣ１２ｅ，１３ｅを備えている。
【００３１】
また、第１，第２インナーボード１４，１５は、インナーボード用のシステムプログラム等が格納されたＲＯＭ１４ａ，１５ａと、対応するＣＰＵユニットと通信を行うとともに、そのＲＯＭ１４ａ，１５ａに格納されたシステムプログラムを実行するＭＰＵ１４ｂ，１５ｂと、インナーボード上で実行されるインナーボード用のユーザプログラムが格納されるとともに、そのシステムプログラムの実行中にワークエリア等として使用されるＲＡＭ１４ｃ，１５ｃを有している。
【００３２】
そして、上記したＲＯＭ１４ａ，１５ａ，ＭＰＵ１４ｂ，１５ｂ並びにＲＡＭ１４ｃ，１５ｃは、バス１４ｄ，１５ｄを介して接続されている。さらに、このバス１４ｄ，１５ｄを介して第１，第２インナーボード１４，１５と、第１，第２ＣＰＵユニット１２，１３のＩ／Ｆ−ＡＳＩＣ１２ｅ，１３ｅとが接続されている。さらに、第１，第２インナーボード１４，１５のＭＰＵ１４ｂ，１５ｂと、Ｉ／Ｆ−ＡＳＩＣ１２ｅ，１３ｅとの間は、割り込み信号ライン１４ｅ，１５ｅが設けられている。
【００３３】
また、ＩＯメモリ１２ｄ，１３ｄは、通常の制御データであるＩ／Ｏデータを記憶するＩＯメモリとしての機能に加え、第１，第２ＣＰＵユニット１２，１３と、それに実装される第１，第２インナーボード１４，１５との間での共有メモリとして機能する。そして、第１，第２ＣＰＵユニット１２，１３のＩ／Ｆ−ＡＳＩＣ１２ｅ，１３ｅは、それぞれ第１，第２ＣＰＵユニット１２，１３内のＭＰＵ１２ｂ，１３ｂと、第１，第２インナーボード１４，１５内のＭＰＵ１４ｂ，１５ｂが、対応する第１，第２ＣＰＵユニット１２，１３内のＩＯメモリ１２ｄ，１３ｄにアクセスする際の調停を行う機能を有する。これにより、ＩＯメモリ１２ｄ，１３ｄを介して、対応するインナーボードとＣＰＵユニット間でデータの交換が行える。
【００３４】
また、上記したように第１，第２ＣＰＵユニット１２，１３並びに第１，第２インナーボード１４，１５は、一方がアクティブとなり、他方がスタンバイとなる。
【００３５】
すなわち、アクティブ側の第１ＣＰＵユニット１２における処理は、ＣＰＵ間同期処理、つまり、第２ＣＰＵユニット１３と同期を取って、互いに各種の処理を実行する。そして、係る各種の処理としては、ユーザプログラムを演算実行する処理や、Ｉ／Ｏリフレッシュ処理や、周辺サービス処理や、インナーボードサービス処理等があり、係る処理をサイクリックに実行する。
【００３６】
また、スタンバイ側の第２ＣＰＵユニット１３における処理は、基本的には第１ＣＰＵユニット１２と同様で、ユーザプログラム等を実行するとともに、演算実行した結果をＩＯメモリ１３ｄに格納する。具体的には、ＣＰＵ間同期処理、つまり、第１ＣＰＵユニット１２と同期を取って、互いに各種の処理を実行する。そして、係る各種の処理としては、ユーザプログラムを演算実行する処理や、周辺サービス処理や、インナーボードサービス処理等があり、係る処理をサイクリックに実行する。このように、アクティブ側の第１ＣＰＵユニット１２と比較すると、Ｉ／Ｏリフレッシュ処理が実行されない。そして、ＩＯメモリ１３ｄのデータは、アクティブ側の第１ＣＰＵユニット１２のＩＯメモリ１３ｄの内容が反映され、両者の記憶内容は一致する。
【００３７】
アクティブ側の第１インナーボード１４は、第１ＣＰＵユニット１２との間で同期処理が行われ、上記した第１ＣＰＵユニット１２におけるインナーボードサービス処理の際に、所定の処理を実行し、実行結果を返す。つまり、ＩＯメモリ１２ｄの共有メモリエリアを使用してデータ交換を行う。
【００３８】
スタンバイ側の第２インナーボード１５は、第２ＣＰＵユニット１３と同期処理が行われ、ＩＯメモリ１３ｄの共有メモリエリアのデータ（第１ＣＰＵユニット１２側の演算結果等が反映されている）を読み出して、所定の処理を実行する。また、第２インナーボード１５は自己の演算処理をした結果をＩＯメモリ１３ｄの共有メモリエリアに格納する。
【００３９】
第２ＣＰＵユニット１３側でのデータ交換の流れは、図２にも示すように、一方通行的に行われる。つまり、第１ＣＰＵユニット１２側から、第１ＣＰＵユニット１２のＩＯメモリ１２ｄの記憶内容（ＣＰＵユニット用データ及びインナーボード用データ）が、第２ＣＰＵユニット１３のＩＯメモリ１３ｄの所定の記憶エリアに転送され、格納される。そして、インナーボード用データは、Ｉ／Ｆ−ＡＳＩＣ１３ｅを介して第２インナーボード１５に渡される。そして、その渡されたインナーボード用データに基づいて、第２インナーボード１５は演算実行等をする。
【００４０】
これにより、ＩＯメモリ１３ｄは、ＩＯメモリ１２ｄと同一性が保証されるため、第２ＣＰＵユニット１３並びに第２インナーボード１５も、第１ＣＰＵユニット１２，第１インナーボード１４と同一の処理が実行され、基本的に演算結果も同じになる。従って、アクティブ側の第１ＣＰＵユニット１２及びまたは第１インナーボード１４側で故障等が生じた場合には、その時点で第２ＣＰＵユニット１３及び第２インナーボード１５がアクティブに切り替わる。そして、このように第２ＣＰＵユニット１３，第２インナーボード１５がアクティブとなると、それらが上記したアクティブの処理を実行する。これより、そのままスムーズに運転・制御を継続して実行できる。
【００４１】
そして、各ＣＰＵユニット並びにインナーボードにおける処理は、図３に示すフローチャートのようになる。まず、アクティブの第１ＣＰＵユニット１２は、電源ＯＮ時処理を実行する（ＳＴ１）。この電源ＯＮ時処理は、例えば、ＲＡＭ１２ｃの初期化を行ない、Ｉ／Ｏユニットの接続状態を認識し、ＩＯメモリ１２ｄのクリアなどを行う。
【００４２】
そして、正常に起動したならば、ラダー実行処理を行う（ＳＴ２）。つまり、ユーザメモリ１２ａに格納されたユーザプログラムを順次演算実行する。次いで、Ｉ／Ｏリフレッシュ処理を行う（ＳＴ３）。つまり、ＩＯメモリ１２ｄにおける予め割り付けられた入力ユニット用のデータエリアのデータを入力ユニットから受信したデータで更新したり、出力ユニット用のデータエリアのデータを出力ユニットへ送出したりする。これにより、センサその他の入力機器からの入力データを取得したり、ラダー実行処理をして得られた演算結果（出力データ等）を制御対象機器に与えることができる。また、このＩ／Ｏリフレッシュの結果、つまり、更新されたＩＯメモリ１２ｄの内容は、Ｉ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイ側の第２ＣＰＵユニット１３のＩＯメモリ１３ｄにも書き込まれる。
【００４３】
次いで、第２ＣＰＵユニット１３との間で同期を取るとともに、アクティブの第１インナーボード１４との間で同期処理を開始し（ＳＴ４）、ＩＮＮＥＲサービス処理を実行する（ＳＴ５）。このＩＮＮＥＲサービス処理は、後述する第１インナーボード１４が演算して得られた演算結果を取得したり、イベント処理の要求を出力たりする。そして、一連の処理が終了すると、同期処理を終了後（ＳＴ６）、周辺サービス処理を実行する（ＳＴ７）。この周辺サービスとしては、通信ユニットなど特殊な機能を司るユニットに対するデータ交換処理などがある。以後、上記したステップ２から７を１つのサイクルとして、サイクリックに繰り返し実行する。
【００４４】
一方、アクティブの第１インナーボード１４は、電源ＯＮ時処理を実行する（ＳＴ１１）。この電源ＯＮ時処理は、例えば、ＲＡＭ１４ｃの初期化等を行う。
【００４５】
次いで、演算処理を実行する（ＳＴ１２）。すなわち、ＲＡＭ１４ｃに格納されたそのインナーボード用のユーザプログラムを実行する。この演算処理は、第１ＣＰＵユニット１２のラダー実行などと非同期に行われる。そして、第１ＣＰＵユニット１２からの同期命令信号を受けると、同期を開始し（ＳＴ１３）、演算結果の転送処理（ＳＴ１４），サイクリック処理（ＳＴ１５）並びにイベント処理（ＳＴ１６）を実行する。この各処理は、第１ＣＰＵユニット１２のＩＮＮＥＲサービス期間（ＳＴ５）に実行される。そして、同期処理が終了する（ＳＴ１７）とステップ１２に戻り、演算処理を開始する。また、ステップ１２の演算実行している間は、第１インナーボード１４側からのＩＯメモリ１２ｄ上の制御データであるＩ／Ｏデータへの書き込みを禁止している。なお、ステップ１２の演算実行中に第１ＣＰＵユニット１２から同期命令信号を受けなかった場合は、演算実行終了状態で同期命令信号の受信待ちとなる。
【００４６】
なお、上記した第１インナーボード１４と第１ＣＰＵユニット１２との間の同期運転は、共有メモリを用いたデータ転送により実行され、第１インナーボード１４における同期運転中の各処理の詳細については、後述する。
【００４７】
一方、スタンバイ側の第２ＣＰＵユニット１３は、基本的には第１ＣＰＵユニット１２と同様で、まず、電源ＯＮ時処理を行った後（ＳＴ２１）、ラダー実行処理を行う（ＳＴ２２）。次いで、Ｉ／Ｏリフレッシュを行うことなく、第１ＣＰＵユニット１２との間で同期を取るとともに、スタンバイの第２インナーボード１５との間で同期処理を開始し（ＳＴ２３）、ＩＮＮＥＲサービス処理を実行する（ＳＴ２４）。このＩＮＮＥＲサービス処理は、後述する第１インナーボード１４が演算して得られた演算結果を取得したり、イベント処理の要求を出力たりする。そして、一連の処理が終了すると、同期処理を終了後（ＳＴ２５）、周辺サービス処理を実行する（ＳＴ２６）。
【００４８】
また、スタンバイの第２インナーボード１５は、電源ＯＮ時処理を実行する（ＳＴ３１）。この電源ＯＮ時処理は、例えば、ＲＡＭ１５ｃの初期化等を行う。
【００４９】
次いで、演算処理を実行する（ＳＴ３２）。すなわち、ＲＡＭ１５ｃに格納されたそのインナーボード用のユーザプログラムを実行する。この演算処理は、第２ＣＰＵユニット１３のラダー実行などと非同期に行われるもので、演算内容は、第１インナーボード１４と同様である。なお、ステップ３２の演算実行中に第２ＣＰＵユニット１３から同期命令信号を受けなかった場合は、演算実行終了状態で同期命令信号の受信待ちとなる。
【００５０】
そして、第２ＣＰＵユニット１３からの同期命令信号を受けると、同期を開始し（ＳＴ３３）、演算結果の転送処理（ＳＴ３４），サイクリック処理（ＳＴ３５）並びにイベント処理（ＳＴ３６）を実行する。この各処理は、第２ＣＰＵユニット１３のＩＮＮＥＲサービス期間（ＳＴ２４）に実行される。そして、同期処理が終了する（ＳＴ３７）とステップ３２に戻り、演算処理を開始する。
【００５１】
インナーボード１４，１５の演算実行時のＩＯメモリ１２ｄ，１３ｄ上の制御データであるＩ／Ｏデータへの書き込みを許容すると、両者でデータの同一性を損なうおそれがある。そこで、演算実行時のＩＯメモリ１２ｄ，１３ｄ上の制御データであるＩ／Ｏデータへの書き込みを禁止し、一定のタイミング（サイクリック処理（ＳＴ１５）またはイベント処理（ＳＴ１６））で演算した結果、ＩＯメモリ１２ｄ，１３ｄ上の制御データであるＩ／Ｏデータを共有メモリを用いてＣＰＵユニットへ転送する。ＣＰＵユニットは、その転送されたデータに基づいて、ＩＯメモリ１２ｄ，１３ｄ上の制御データであるＩ／Ｏデータを書き込むようにしている。
【００５２】
次に、各処理ステップの具体的な処理手順を説明する。まず、本実施の形態では、同期処理は、共通メモリ（ＩＯメモリ１２ｄ，１３ｄ）を利用したコマンドレスポンスにより、相手方との間でデータの転送を行うことにより、実行する。ここで、上記した同期処理に使用するＩＯメモリ１２ｄ，１３ｄの所定エリアに割り付けられたＣＰＵユニット−インナーボードＩ／Ｆエリアについて説明する。このエリアは、ＣＰＵユニットとインナーボードのステータス並びにＣＰＵユニット−インナーボード間のコマンドレスポンスに使用するもので、図４に示すようなメモリ割り付け構造となっている。ＣＰＵユニットとインナーボードは、自己に付いてのエリアに対してはリード／ライト（Ｒ／Ｗ）することができ、相手のエリアに対してはリード（Ｒ）のみができるようになっている。
【００５３】
そして、ＣＰＵステータスエリアは、ＣＰＵユニットが書き込み（ライト）するエリアで、インナーボードは、このＣＰＵステータスエリアの所定のフラグにより演算やタスクの起動・停止が行われる。具体的には、図５に示すような構造となっている。ここで、「ＩＮＮＥＲボード運転可／不可フラグ」は、インナーボードが運転する（０）か運転不可（１）かを特定するフラグである。つまり、インナーボードは、各サイクル（「演算実行／演算結果転送／イベント／サイクリック」）の最初に上記フラグをチェックし、「１」ならば演算を行わない。なお、このフラグが「１」になるのは、例えば、ＣＰＵが待機中であったり、他機運転待ち中であったり、後述する二重化イニシャル中（スタンバイ側）等のように、アクティブ側とスタンバイ側でデータの同一性が保証できない状態のときである。
【００５４】
また、このＣＰＵステータスエリアには、相手に転送するデータの格納エリアの先頭アドレスと、データサイズが書き込まれる。これにより、ここで指定される先頭アドレスとデータサイズから、転送すべきデータエリアを特定し、転送処理を行う。
【００５５】
また、ＩＮＮＥＲステータスエリアは、インナーボードが書き込み（ライト）するエリアで、ＣＰＵユニットは、このＩＮＮＥＲステータスエリアの所定のフラグにより後述する二重化イニシャル起動・二重化照合を行う。具体的には、図６に示すような構造となっている。ここで、「二重化イニシャル要求フラグ」は、インナーボードが動的に二重化イニシャルを起動したい時に使用するフラグであり、アクティブ側のインナーボード（第１インナーボード１４）の変数データやパラメータデータの内容をスタンバイ側のインナーボード（第２インナーボード１５）に転送したい場合に１にする。なお、スタンバイ側のインナーボードからの二重化イニシャル要求は無視される。また、二重化の運転開始時は、無条件で二重化イニシャルが行われるので、実際には、二重化運転中に２重化イニシャルを行いたい場合に「１」を設定すれば良い。
【００５６】
照合データエリアは、第１，第２インナーボード１４，１５が同期運転するために、各種内部状態が一致しているかを照合するために使用するエリアである。予め、この照合データエリアに格納する内容を定義しておき、各インナーボード（ＭＰＵ１４ｂ，１５ｂ）は、その定義された内容を書き込む。これにより、第１，第２ＣＰＵユニット１２，１３は、照合データエリアに格納されたデータ同士を比較し、一致していない（照合エラー）の場合には、２重化照合異常となり、二重化運転ができなくなる。なお、この照合データの比較タイミングは、電源ＯＮ時のインナーボード認識時や、二重化イニシャル時である。
【００５７】
さらにまた、ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアは、ＣＰＵユニット―インナーボード間のコマンド／レスポンスに使用するエリアであり、図７に示すようなメモリエリアの割り付けとなっている。そして、ここで使用するコマンド／レスポンスとしては、図８に示すようなものがある。そして、係るエリア並びにコマンド／レスポンスを使用して、以下に示す具体的な処理手順のもと、同期処理を行う。
【００５８】
すなわち、同期処理開始ステップ（ＳＴ４，ＳＴ２３）は、まず、第１，第２ＣＰＵユニット１２，１３が、それぞれ第１，第２インナーボード１４，１５に対して、割り込み信号ライン１４ｅ，１５ｅを使用して同期開始の割り込み通知を発する。次いで、同期開始コマンドを発行する。つまり、ＩＯメモリ１２ｄ，１３ｄ上に割り当てられた共有メモリのＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアの該当エリアに、所定のコマンド（０００１）を書き込むことにより行う（図９参照）。なお、同期開始コマンドには、インナーボード用フリーランニングカウンタを付加し、このカウンタによりインナーボードの時計合わせを行う。
【００５９】
上記した同期開始の割り込み通知を受けた第１，第２インナーボード１４，１５は、同期開始処理（ＳＴ１３，ＳＴ３３）を実行する。つまり、対応するＩＯメモリ１２ｄ，１３ｄをアクセスし、コマンドを取得後、同期開始コマンドのレスポンスを返す。このとき返すレスポンスとしては、
▲１▼演算結果転送・イベント・サイクリックを行う場合（８００１）
▲２▼演算結果転送・イベント・サイクリックを行わない場合（４００１）
の２種類がある。なお、上記▲２▼のレスポンスは、インナーボードの演算実行の進行が、前回のサイクルから変化が無い場合、つまり、転送する必要の無い場合に返す。そして、この▲２▼のレスポンスを取得したＣＰＵユニットは、それ以後の演算結果転送・イベント・サイクリックに関する各処理ステップに関する処理をスキップする。なお、通常であれば、アクティブ側とスタンバイ側は、同一の処理をしているため、ここで返すレスポンスの内容は同じになるが、仮に両者が一致しない場合には、アクティブ側のインナーボードからのレスポンスの内容が正しいとして処理をする。
【００６０】
上記した同期開始処理を実行（▲１▼のレスポンスを返送）後は、演算結果転送処理を実行する。本実施の形態では、ホットスタンバイ方式で二重化を実現しているため、インナーボード１４，１５の演算実行時のＩＯメモリ１２ｄ，１３ｄへの書き込みを許容すると、両者でデータの同一性を損なうおそれがある。そこで、演算実行時のＩＯメモリ１２ｄ，１３ｄへの書き込みを禁止し、一定のタイミングで演算結果の転送を行い、所定の条件のもとで、ＩＯメモリ１２ｄ，１３ｄへ書き込む。
【００６１】
このとき、第１ＣＰＵユニット１２と、第２ＣＰＵユニット１３は同期をとっており、第１ＣＰＵユニット１２側では、スタンバイの第２ＣＰＵユニット１３並びに第２インナーボード１５の状態（メモリ内容，第１インナーボードのステップ１４の実行による現在の演算結果）を取得することができる。また、第２ＣＰＵユニット１３側では、第１ＣＰＵユニット１２からの転送処理により、アクティブの第１ＣＰＵユニット１２並びに第１インナーボード１４の状態（メモリ内容，第１インナーボードのステップ１４の実行による現在の演算結果）を取得することができる。
【００６２】
従って、第１インナーボード１４の演算結果と第２インナーボード１５の演算結果を比較すると、両インナーボード１４，１５の演算の進行度合いの一致・不一致を比較できる。すなわち、第１，第２インナーボード１４，１５は共に同じ演算処理を実行する。従って、互いのプログラムの処理速度が等しく、同一命令を処理すると、その演算結果は等しくなる。そこで、演算結果の一致／不一致を確認し、不一致の場合には、一致させるべく処理速度を調整する補正処理を行うことにより、その補正処理後は、第１，第２インナーボード１４，１５が同一ステップの命令まで処理する状態（演算の進行を一致させた状態）になる。このように補正処理を適宜行うことにより、第１，第２インナーボード１４，１５の処理の進行状態を毎サイクル単位で合わせることができ、第２インナーボード１５がアクティブに切り替わったとしても、演算結果に伴い出力する制御量などが第１インナーボード１４の時から急に変わることなく、スムーズな切替が行える。
【００６３】
そして、この演算の進行を一致させる演算結果補正処理は、図１０に示すようになっている。つまり、以下に示す（１）から（８）までの処理を実行する。ここで、括弧書きの数字は、図１０に示す各処理ステップに対応する。
【００６４】
（１）アクティブの第１ＣＰＵユニット１２は、アクティブ及びスタンバイＩの第１，第２インナーボード１４，１５に対して演算結果転送開始コマンドを発行する。具体的には、図１１に示すように、共有メモリの所定エリアにコマンド「０００２」を書き込む処理を実行する。この共有メモリの所定エリアに書き込まれたコマンド「０００２」は、Ｉ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイ側の第２ＣＰＵユニット１３の共有メモリの所定エリアにも書き込まれる。このような処理によって、アクティブの第１ＣＰＵユニット１２は、第１、第２インナボードに対して、演算結果転送開始コマンドを発行することができる。
【００６５】
（２）アクティブおよびスタンバイの第１，第２インナーボード１４，１５は、演算結果転送開始レスポンスを発行する。この開始レスポンスと同時に、データエリアに演算結果情報を設定する。この演算結果情報は、演算実行状況を示す情報（具体的には、インナーボード用のユーザプログラムの実行処理がどこまで進んでいるかを示す情報のことで、例えば、ユーザプログラムのステップ番号などが相当する）で、インナーボードを設計する際に定義する。つまり、図１１に示すように、コマンド「８００２」を書き込むとともに、演算情報を登録する。
【００６６】
（３）アクティブの第１ＣＰＵユニット１２は、アクティブおよびスタンバイの第１，第２インナーボード１４，１５の演算結果転送開始レスポンスを受け取ると、スタンバイ側の演算結果情報を自機の演算結果情報にコピーし、さらにアクティブ側の演算結果情報をスタンバイ側に転送する。
【００６７】
（４）そして、アクティブの第１ＣＰＵユニット１２は、第１，第２インナーボードに対して、演算結果補正開始コマンドを発行する。具体的には、図１２に示すように、アクティブの第１ＣＰＵユニット２は、共有メモリの所定エリアにコマンド「０００３」を書き込むことにより行う。この共有メモリの所定エリアに書き込まれたコマンド「０００３」は、Ｉ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイ側の第２ＣＰＵユニット１３の共有メモリの所定エリアにも書き込まれる。このような処理によって、アクティブの第１ＣＰＵユニット１２は、第１、第２インナボードに対して、演算結果補正開始コマンドを発行することができる。
【００６８】
（５）アクティブおよびスタンバイの第１，第２インナーボード１４，１５は、演算結果補正開始コマンドを受け取ると、自機および他機の演算結果をもとに演算の進行を補正する。つまり、進行の遅いインナーボードが、進行の早いインナーボードに進行を合わせるベく、所定の演算を実行する。例えば、演算結果情報が、ユーザプログラムのステップ番号の場合で説明すると次のようになる。第１インナーボード１４のユーザプログラムがステップＮ１まで実行され、第２インナーボード１５のユーザプログラムがステップＮ２（Ｎ２はＮ１より小さい数とする）まで実行された状態で演算の進行を補正する場合は、進行の遅い第２インナーボード１５は、ステップＮ１までユーザプログラムを実行することで第１インナボード１４の進行に合わせる。
【００６９】
（６）アクティブおよびスタンバイの第１、第２インナボード１４，１５は、演算結果補正開始レスポンスを発行する（図１２参照）。演算結果補正開始レスポンスを発行するとは、具体的には、演算が進んでいたインナーボードは、自機コマンドエリアにレスポンス「８００３」を書き込み、遅れていた側のインナーボードは、補正演算の完了後、自機コマンドエリアにレスポンス「８００３」を書き込むことである。
【００７０】
（７）アクティブの第１ＣＰＵユニット１２は、アクティブおよびスタンバイ側の演算結果補正レスポンスを受け取ると、アクティブおよびスタンバイの第１，第２インナーボードに演算結果反映許可コマンドを発行する。具体的には、アクティブの第１ＣＰＵユニット２は、共有メモリの所定エリアに演算結果反映許可コマンドを書き込むことにより行う。この共有メモリの所定エリアに書き込まれた演算結果反映許可コマンドは、Ｉ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイ側の第２ＣＰＵユニット１３の共有メモリの所定エリアにも書き込まれる。このような処理によって、アクティブの第１ＣＰＵユニット１２は、第１、第２インナボードに対して、演算結果反映許可コマンドを発行することができる。
【００７１】
（８）アクティブおよびスタンバイの第１，第２インナーボード１４，１５は、演算結果反映許可コマンドを受け取ると演算結果を反映する。そして処理完了で、演算結果反映許可レスポンスを返す。
【００７２】
つまり、第１，第２インナーボードから演算結果補正処理が発行されると、演算結果補正が完了し、両者の進行状態が一致することになるので、その状態でインナーボードの演算結果をＩＯメモリに格納する。そして、係る（１）から（８）の演算結果転送開始から演算結果反映許可のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアのデータの変化の手順の一例を示すと、図１３から図１９に示すようになる。なお、各図において、ＡＣＴがアクティブ側でＳＴＢがスタンバイ側である。そして、その処理においてデータの変化があるエリアは網掛けで示し、アクティブ側からの転送によって書き込まれたデータは下線で示す。
【００７３】
各処理を簡単に説明すると、演算結果転送開始処理（図１３）では、アクティブの第１ＣＰＵユニット１２が、ＩＯメモリ１２ｄに用意されたＳＴＢ用（スタンバイ側用）のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋８０）と、ＡＣＴ用（アクティブ側用）のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋３３６）に、演算結果転送開始を意味するコマンド（０００２）を書き込む。すると、＋８０に書き込まれたコマンドは、Ｉ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイの第２ＣＰＵユニット１３のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋８０）に、同じコマンド（０００２）が書き込まれる。
【００７４】
このコマンド（０００２）を取得したインナーボードは、ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアにレスポンス（８００２）を返すとともに、それぞれ自己の演算結果情報を格納する（図１４）。具体的には、アクティブの第１インナーボードは、ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋３３６）にレスポンス（８００２）を書き込むとともに、続くエリアに自己の演算結果情報を格納する。一方、スタンバイの第２インナーボードは、ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋８０）にレスポンス（８００２）を書き込むとともに、続くエリアに自己の演算結果情報を格納する。
【００７５】
次いで、他機の演算結果情報をコピーする（図１５）。つまり、第１ＣＰＵユニット１２は、ＳＴＢ用ＩＮＮＥＲ、つまりスタンバイの第２インナーボードの演算結果を取得し、自己のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアの所定エリアに格納するとともに、ＡＣＴ用ＩＮＮＥＲ、つまりアクティブの第１インナーボードの演算結果を第２ＣＰＵユニットのＩＯメモリ１３ｄのＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアの所定エリアに転送する。
【００７６】
次に、演算結果補正開始処理（図１６）では、アクティブの第１ＣＰＵユニット１２が、ＩＯメモリ１２ｄに用意されたＳＴＢ用（スタンバイ側用）のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋８０）と、ＡＣＴ用（アクティブ側用）のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋３３６）に、演算結果補正開始を意味するコマンド（０００３）を書き込む。すると、＋８０に書き込まれたコマンドは、Ｉ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイの第２ＣＰＵユニット１３のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋８０）に、同じコマンド（０００３）が書き込まれる。
【００７７】
すると、各インナーボードは、ＣＰＵユニットからの演算結果補正開始コマンドを受け取ると、自己の演算結果情報と相手側インナーボードの演算結果情報をもとに演算結果補正を開始し、終了後にレスポンス（８００３）を返す（図１７）。
【００７８】
このレスポンス（８００３）を受けて、アクティブの第１ＣＰＵユニット１２が、ＩＯメモリ１２ｄに用意されたＳＴＢ用（スタンバイ側用）のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋８０）と、ＡＣＴ用（アクティブ側用）のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋３３６）に、演算結果反映許可を意味するコマンド（０００４）を書き込む。すると、＋８０に書き込まれたコマンドは、Ｉ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイの第２ＣＰＵユニット１３のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリア（＋８０）に、同じコマンド（０００４）が書き込まれる（図１８）。
【００７９】
この許可を受けて、第１，第２インナーボード１４，１５は、許可レスポンス（８００４）を返すとともに、演算結果を共有メモリであるＩＯメモリの所定エリアに書き込む（図１９）。
【００８０】
次に、サイクリック処理を説明する。ステップ１５，３５のインナーボードのサイクリック処理は、処理開始を同期によって合わせるが、実際の処理は、アクティブ側とスタンバイ側でそれぞれが実行し、両者間でサイクリックデータのやり取りは行わない。具体的には、図２０に示すように、ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアに、サイクリック実効開始を通知するコマンド（０００５）を書き込むことにより開始される。なお、当該コマンド（０００５）は、Ｉ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイ側の第２ＣＰＵユニット１３のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアに書き込まれる。このサイクリック処理を実行することでＣＰＵユニットとインナーボードとの間で周期的なデータ交換が可能となる。
【００８１】
次に、イベント処理を説明する。ステップ１６，３６のイベント処理は、以下の手順により行われる。すなわち、ＣＰＵユニット→インナーボード宛てイベントは、アクティブ側ＣＰＵユニットがアクティブ側ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアにイベント実行開始コマンドを書き込むことにより、スタンバイ側のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアにもイベント実行開始コマンドが転送されることで、第１，第２インナーボード１４，１５でともに実行する。なお、スタンバイ側からのレスポンスはＣＰＵユニットで破棄する。このイベント処理を実行することでＣＰＵユニットとインナーボードとの間で非周期的なデータ交換が可能となる。
【００８２】
一方、インナーボード→ＣＰＵユニット宛てイベントは、そのイベント処理がタイムスライスで数サイクルにまたがって処理される可能性がある。つまり、１回のサイクルで完結しないことがある。そのため、イベント実行終了もコマンドで通知する。
【００８３】
具体的には、図２１に示すように、ＣＰＵユニットがイベント実行開始を通知するコマンド（０００６）を書き込み、それを受けたインナーボードがレスポンス（８００６）を返すことにより開始される。そして、図２２に示すように、ＣＰＵユニットがイベント実行終了を通知するコマンド（０００７）を書き込み、それを受けたインナーボードがレスポンス（８００７）を返すことにより終了する。なお、何れのコマンドもＩ／Ｆ−ＡＳＩＣ１２ｅによりスタンバイ側の第２ＣＰＵユニット１３のＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアに書き込まれる。
【００８４】
さらに、図２３に示すように、ＣＰＵユニットが同期終了を通知するコマンド（０００８）を書き込み（ＳＴ６，ＳＴ２５）、それを受けたインナーボードがレスポンス（８００８）を返すこと（ＳＴ１７，ＳＴ３７）により終了する。
【００８５】
次に、二重化イニシャル処理について説明する。上記したように、通常の運転状態においては、同期運転により第１インナーボード１４と第２インナーボード１５のデータの同一性が確保される。ところで、ツールなどを用いてアクティブ側の第１インナーボード１４のＲＡＭ１４ｃ上に格納されている変数データやパラメータデータが外部から変更されたり、アクティブの第１ＣＰＵユニット１２のユーザプログラムやＩＯメモリ１２ｄ上のデータ（Ｉ／Ｏリフレッシュの対象となるデータやＣＰＵユニットのシステム設定に関するデータ）が外部から変更されることがある。すると、スタンバイ側の第２ＣＰＵユニット１３や第２インナーボード１５では、係るツールによる変更は無いので、第１，第２インナーボード１４，１５間及び第１，第２ＣＰＵユニット１２，１３間でのデータの同一性が保てなくなる。
【００８６】
そこで、二重化イニシャル処理を行い、第１インナーボード１４の変数メモリ及びパラメータデータ等を第２インナーボード１５側に転送するとともに第１ＣＰＵユニット１２のユーザプログラム等を第２ＣＰＵユニット１３に転送し、両者の同一性を確保する。このイニシャル処理は、図２４に示すように、通常の同期運転によるＩＮＮＥＲサービス処理（ＳＴ５，ＳＴ２４），イベント（ＳＴ１６，ＳＴ３６）の実行後に行う（ＳＴ８，ＳＴ１８，ＳＴ２７，ＳＴ３８）。
【００８７】
そして，係るＩＮＮＥＲサービス処理のさらに詳細な手順としては，図２５に示すようになる。すなわち、イベント処理が終了すると、（１０）アクティブの第１ＣＰＵユニット１２は、ユーザプログラムやＩＯメモリ１２ｄ上のデータが外部から変更されたか否かをチェックし、第１インナーボード１４は、変数データやパラメータデータが外部から変更されたか否かをチェックする。
【００８８】
（１１）第１インナーボード１４が、外部から変更ありと判断すると、第１ＣＰＵユニット１２に対して二重化イニシャル要求を通知する。この通知は、二重化イニシャル要求フラグ（図６参照）を立てることにより行う。（１２）第１ＣＰＵユニット１２は、第１インナーボード１４からの係る要求の有無を監視する（実際にはフラグをチェック）。
【００８９】
そして、（１３）この二重化イニシャル要求の通知を受けた場合には、二重化イニシャルを開始する。なお、第１ＣＰＵユニット１２が、自己のユーザプログラムやＩＯメモリ１２ｄ上のデータが外部から変更された場合も二重化処理を開始する。そして、係る第１ＣＰＵユニット１２，第１インナーボード１４のいずれでも変更が無い場合には、二重化イニシャル処理をせずに終了する。
【００９０】
（１４）二重化イニシャルが開始されると、第１ＣＰＵユニット１２はデータ転送に使用するエリア（二重化イニシャル転送データ格納エリア）をアクティブの第１インナーボード１４に通知する。この二重化イニシャル転送データ格納エリアは、二重化イニシャル時に伝送データを格納するエリアである。なお、この二重化イニシャル転送データ格納エリアは、第１ＣＰＵユニット１２，第１インナーボード１４の両方から読み書きが可能となっている。そして、係る通知を行ったならば、第１インナーボード１４からの応答を待つ。
【００９１】
（１５）第１インナーボード１４は、第１ＣＰＵユニット１２に対して、書き込み開始アドレスとデータサイズを通知するとともに、当該アドレス位置にデータを書き込む。そして、データの書き込みが終了すると、第１ＣＰＵユニット１２に書き込み終了通知をする。
【００９２】
（１６）この通知を受けた第１ＣＰＵユニット１２は、スタンバイの第２インナーボード１５に対して取得した書き込み開始アドレスとデータサイズを通知し、第２インナーボード１５からの読み出し終了コマンドを待つ。
【００９３】
（１７）スタンバイの第２インナーボードは、第１ＣＰＵユニット１２からの通知に基づき、第１インナーボード１４側で変更されたデータを読み出す。そして、データを全て読み出したらならば、データ読み出し終了をアクティブの第１ＣＰＵユニット１２へ通知する。
（１８）第１ＣＰＵユニット１２は、第２インナーボード１５からの読み出し終了通知を確認したならば、二重化イニシャルを終了する。
【００９４】
以上の図２５を用いたＩＮＮＥＲサービス処理の説明は、二重化イニシャル処理におけるアクティブ側インナーボードからスタンバイ側インナーボードへの変数データ及びパラメータデータの転送についてのみである。二重化イニシャル処理におけるアクティブＣＰＵからスタンバイＣＰＵへのデータ転送は、アクティブＣＰＵが自己のユーザメモリ上のユーザプログラムをスタンバイＣＰＵのユーザメモリに書き込むことで実現できる。
【００９５】
ところで、上記した（１７）における第２インナーボード１５のデータ読み出しは、実際にはデータの転送を行うことにより実行する。そして、本実施の形態では、分割データ転送と一括データ転送の２種類の転送方法を用意している。何れを使用するかは、インナーボードを設計する際に定義する。
【００９６】
一括データ転送は、二重化システムで運転するとアクティブ側とスタンバイ側の演算実行が同じように動作するために、１サイクルで転送を完了させる必要があるときに行う転送方法である。インナーボードでは、変数データが、一括データ転送で転送されるべきデータである。
【００９７】
分割データ転送は、アクティブ側とスタンバイ側の第１，第２インナーボード１４，１５における演算実行に影響が無く複数サイクルで転送しても問題ないときの転送方法である。インナーボードでは、パラメータデータが、分割データ転送で転送されるべきデータである。
【００９８】
上記した分割／一括転送は、ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアを介して行い、通常サイクル動作の後に実行することは既に述べたとおりであり、具体的な共有メモリにおけるコマンド−レスポンスによるデータ転送処理は、図２６以降に示すようになる。
【００９９】
一括データ転送は、図２６から図３２に示すような処理手順で行う。つまり、まずＣＰＵユニットが、コマンドレスポンスエリアの所定エリアに、一括データ転送を指示するコマンド（０１００）を書き込むとともに、使用する一括転送データ格納エリアを指定する（図２６（ａ））。この一括転送データ格納エリアは、本実施の形態では１番と２番の２箇所を用意しており、このエリア指定ではいずれかのエリア（１ｏｒ２）を指定する。これが、図２５における処理（１４）に対応する。
【０１００】
これを受けて、インナーボードは、開始アドレス（絶対アドレス／相対アドレスの何れでも可）と、共有メモリにデータサイズ（ｂｙｔｅ単位／ｗｏｒｄ単位等）を格納するとともに、現在の状態（転送未完：４１００，転送完了：８１００）をレスポンスとして返す（図２６（ｂ），（ｃ））。これが、図２５における処理（１５）に対応する。
【０１０１】
次いで、転送完了のコマンド（８１００）を受け取ると、アクティブの第１ＣＰＵユニット１２は、受け取った第１インナーボードのデータ（パラメータデータ，変数データなど）をスタンバイの第２ＣＰＵユニット１３を経由してスタンバイの第２インナーボード１５に渡す処理を行う。このとき、転送するデータに付いて第１ＣＰＵユニット１２はチェックなどは行わず、そのまま転送する。
【０１０２】
つまり、図２７（ａ）に示すように、アクティブの第１ＣＰＵユニット１２は、転送するデータが格納された転送元エリア（１ｏｒ２）を指定するとともに、開始アドレスとサイズを書き込む。すると、相手側からレスポンス（８１０１）を受ける。
【０１０３】
そして、一括転送の具体的なデータの変更履歴としては、図２８以降のようになる。各図において、データを変更した部分（書き込んだ部分）を網掛けで示し、各図のタイトル中の括弧内は、係る網掛け部分のデータの変更者を示している。まず、図２８に示すように、アクティブの第１ＣＰＵユニットが、転送エリア１（０００１）を用いて一括転送データを行うコマンド（０１００）を入力する。
【０１０４】
これを受けて、図２９に示すように、アクティブの第１インナーボード１４が、レスポンス（８１００）を書き込むとともに、開始アドレス並びにサイズを格納する。このレスポンスの格納と同時に、転送すべきデータは所定エリアに格納される。
【０１０５】
次に、アクティブの第１ＣＰＵユニット１２は、図３０に示すように、取得した開始アドレス・サイズを所定エリアにコピーする。これが図２５の処理（１６）に対応する。
【０１０６】
すると、Ｉ／Ｆ−ＡＳＩＣ１２ｅにより、スタンバイ側の共有メモリの所定エリアに、コマンド（０１０１）と、使用エリア（０００１）並びに開始アドレスとサイズが書き込まれる。このとき、実際のデータも転送される。これが、図２５の処理（１７）に対応する。
【０１０７】
また、上記図３０に示すコピーの完了と同時に、第１ＣＰＵユニット１２は、次の転送のためのコマンド（０１００）を入力するとともに、転送エリア（０００２）を指定する（図３１参照）。このとき指定するエリアは、前回と異なるエリアとする。このように、一括転送データ格納エリアを使い分けることで、データが上書きされたり、消去されたりするのを避けることができる。
【０１０８】
このコマンド入力に伴い、スタンバイの第２インナーボード１５は、ＣＰＵユニット→インナーボード一括データ転送レスポンス（８１０１）を返し、アクティブの第１インナーボード１４は、インナーボード→ＣＰＵユニット一括データ転送レスポンス（８１００）を返すことになる（図３２参照）。
【０１０９】
一方、分割データ転送は、アクティブのインナーボードのパラメータデータの内容をＣＰＵユニットを経由してスタンバイのインナーボードに渡すことで実現する。この処理は、コマンドレスポンスを用いて実行する。
【０１１０】
なお、二重化イニシャル処理は、上記したように、ツールなどによる外部からの変更を受けた場合はもちろんであるが、例えば、電源ＯＮ時などにも実行される。
【０１１１】
【発明の効果】
以上のように、この発明では、特殊機能モジュールを実装したＣＰＵユニットを２台備えたプログラマブルコントローラにおいて、特殊機能モジュールも含めて二重化システムを構築することができる。
【図面の簡単な説明】
【図１】本発明の一実施の形態を示す図である。
【図２】本発明の一実施の形態の要部を示す図である。
【図３】ＣＰＵユニット並びにインナーボードの機能を示すフローチャートである。
【図４】ＣＰＵユニット−ＩＮＮＥＲボードＩ／Ｆエリアのデータ構造の一例を示す図である。
【図５】ＣＰＵステータスエリアのデータ構造の一例を示す図である。
【図６】ＩＮＮＥＲボードステータスエリアのデータ構造の一例を示す図である。
【図７】ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアのデータ構造の一例を示す図である。
【図８】ＣＰＵ−ＩＮＮＥＲコマンドレスポンスエリアで使用するコマンド／レスポンスの一例を示す図である。
【図９】同期開始処理における具体的な処理例を示す図である。
【図１０】演算結果補正処理の処理手順の一例を示す図である。
【図１１】演算結果転送開始処理における具体的な処理例を示す図である。
【図１２】演算結果補正開始処理における具体的な処理例を示す図である。
【図１３】演算結果転送処理における具体的な処理例を示す図である。
【図１４】演算結果転送処理における具体的な処理例を示す図である。
【図１５】演算結果転送処理における具体的な処理例を示す図である。
【図１６】演算結果転送処理における具体的な処理例を示す図である。
【図１７】演算結果転送処理における具体的な処理例を示す図である。
【図１８】演算結果転送処理における具体的な処理例を示す図である。
【図１９】演算結果転送処理における具体的な処理例を示す図である。
【図２０】サイクリック処理における具体的な処理例を示す図である。
【図２１】イベント実行処理における具体的な処理例を示す図である。
【図２２】イベント実行処理における具体的な処理例を示す図である。
【図２３】同期終了処理における具体的な処理例を示す図である。
【図２４】ＣＰＵユニット並びにインナーボードの機能（二重化イニシャル処理）を示すフローチャートである。
【図２５】ＣＰＵユニット並びにインナーボードの二重化イニシャル処理を示すフローチャートである。
【図２６】一括データ転送処理における具体的な処理例を示す図である。
【図２７】一括データ転送処理における具体的な処理例を示す図である。
【図２８】一括データ転送処理における具体的な処理例を示す図である。
【図２９】一括データ転送処理における具体的な処理例を示す図である。
【図３０】一括データ転送処理における具体的な処理例を示す図である。
【図３１】一括データ転送処理における具体的な処理例を示す図である。
【図３２】一括データ転送処理における具体的な処理例を示す図である。
【符号の説明】
１０  ＰＬＣ
１１  電源ユニット
１２  第１ＣＰＵユニット
１２ａ  ユーザメモリ
１２ｂ  ＭＰＵ
１２ｃ  ＲＡＭ
１２ｄ  ＩＯメモリ
１２ｅ  Ｉ／Ｆ−ＡＳＩＣ
１３  第２ＣＰＵユニット
１３ａ  ユーザメモリ
１３ｂ  ＭＰＵ
１３ｃ  ＲＡＭ
１３ｄ  ＩＯメモリ
１３ｅ  Ｉ／Ｆ−ＡＳＩＣ
１４  第１インナーボード
１４ａ  ＲＯＭ
１４ｂ  ＭＰＵ
１４ｃ  ＲＡＭ
１４ｄ  バス
１４ｅ  割り込み信号ライン
１５  第２インナーボード
１５ａ  ＲＯＭ
１５ｂ  ＭＰＵ
１５ｃ  ＲＡＭ
１５ｄ  バス
１５ｅ  割り込み信号ライン
１６  デュプレックスユニット
１６ａ二重化制御回路
１７  Ｉ／Ｏユニット
１８  バス切替器
１９  システムバス
【図１】
0003606281.tif 000002
【図２】
0003606281.tif 000003
【図３】
0003606281.tif 000004
【図４】
0003606281.tif 000005
【図５】
0003606281.tif 000006
【図６】
0003606281.tif 000007
【図７】
0003606281.tif 000008
【図８】
0003606281.tif 000009
【図９】
0003606281.tif 000010
【図１０】
0003606281.tif 000011
【図１１】
0003606281.tif 000012
【図１２】
0003606281.tif 000013
【図１３】
0003606281.tif 000014
【図１４】
0003606281.tif 000015
【図１５】
0003606281.tif 000016
【図１６】
0003606281.tif 000017
【図１７】
0003606281.tif 000018
【図１８】
0003606281.tif 000019
【図１９】
0003606281.tif 000020
【図２０】
0003606281.tif 000021
【図２１】
0003606281.tif 000022
【図２２】
0003606281.tif 000023
【図２３】
0003606281.tif 000024
【図２４】
0003606281.tif 000025
【図２５】
0003606281.tif 000026
【図２６】
0003606281.tif 000027
【図２７】
0003606281.tif 000028
【図２８】
0003606281.tif 000029
【図２９】
0003606281.tif 000030
【図３０】
0003606281.tif 000031
【図３１】
0003606281.tif 000032
【図３２】
0003606281.tif 000033