(57)【要約】【課題】多重化されるＣＰＵモジュール間で効率的に必要なデータを共有することができる技術を実現する。【解決手段】制御系ＣＰＵモジュール（１００Ａ）は、ユーザプログラムに基づく演算処理を行う第１演算部（１１１Ａ）と、演算結果が書き込まれる第１メモリ（１３０Ａ）と、を備え、待機系ＣＰＵモジュール（１００Ｂ）は、制御系ＣＰＵモジュール（１００Ａ）に異常が生じたときにユーザプログラムに基づく演算処理を行う第２演算部（１１１Ｂ）と、第２メモリ（１３０Ｂ）と、を備え、制御系ＣＰＵモジュール（１００Ａ）は、さらに、演算結果の書き込み指示を、第１メモリ（１３０Ａ）に出力するとともに、待機系ＣＰＵモジュール（１００Ｂ）の第２メモリ（１３０Ｂ）に転送する第１メモリ処理部（１２１）を備えている。【選択図】図１
2020087179.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵモジュールが多重化されたコントローラであって、
制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールと、を備え、
前記制御系ＣＰＵモジュールは、
ユーザプログラムに基づく演算処理を行う第１演算部と、
前記第１演算部による演算結果が書き込まれる第１メモリと、を備え、
前記待機系ＣＰＵモジュールは、
前記制御系ＣＰＵモジュールに異常が生じたときにユーザプログラムに基づく演算処理を行う第２演算部と、
第２メモリと、を備え、
前記制御系ＣＰＵモジュールは、さらに、前記第１演算部から受け取った前記演算結果の書き込み指示を、前記第１メモリに出力するとともに、前記待機系ＣＰＵモジュールの前記第２メモリに転送する第１メモリ処理部を備えている、コントローラ。
【請求項２】
前記制御系ＣＰＵモジュールの前記第１メモリ処理部は、
前記制御系ＣＰＵモジュールが外部のＩ／Ｏユニットから受信した入力データの書き込み指示を、前記第１メモリに出力するとともに、前記待機系ＣＰＵモジュールの前記第２メモリに転送する請求項１に記載のコントローラ。
【請求項３】
前記制御系ＣＰＵモジュールは、メモリアクセスコントローラを備え、
前記メモリアクセスコントローラは、前記第１メモリ処理部を含む請求項１又は２に記載のコントローラ。
【請求項４】
前記第１演算部と前記第１メモリ処理部とは、１つの集積回路の中に形成されている請求項１又は２に記載のコントローラ。
【請求項５】
前記待機系ＣＰＵモジュールは、第２メモリ処理部を備え、
前記第２メモリ処理部は、前記演算結果の前記書き込み指示を前記制御系ＣＰＵモジュールから受信し、当該書き込み指示を前記第２メモリに出力する請求項１から４のいずれか１項に記載のコントローラ。
【請求項６】
前記第２メモリ処理部は、前記制御系ＣＰＵモジュールに異常が生じたときに、前記第２演算部から受け取った演算結果の書き込み指示を、前記第２メモリに出力する請求項５に記載のコントローラ。
【請求項７】
前記制御系ＣＰＵモジュールは、
前記第１演算部と、第１レジスタとを含む第１演算処理部を備え、
前記待機系ＣＰＵモジュールは、
前記第２演算部と、第２レジスタとを含む第２演算処理部を備え、
前記第１メモリ処理部は、
前記第１演算処理部の前記第１レジスタへの書き込み指示を、前記待機系ＣＰＵモジュールの前記第２演算処理部の前記第２レジスタに転送する請求項１から６の何れか１項に記載のコントローラ。
【請求項８】
外部の前記Ｉ／Ｏユニットからの前記入力データを伝送するケーブルとは別に、前記制御系ＣＰＵモジュールと前記待機系ＣＰＵモジュールとを互いに接続するケーブルであって、前記演算結果の書き込み指示を伝送するケーブルを備えている請求項２に記載のコントローラ。
【請求項９】
制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとが多重化されたコントローラの制御方法であって、
前記制御系ＣＰＵモジュールにおいてユーザプログラムに基づく演算処理を行う演算ステップと、
前記演算処理の演算結果の書き込み指示を、前記制御系ＣＰＵモジュールの第１メモリに出力するとともに、前記待機系ＣＰＵモジュールの第２メモリに転送するメモリ処理ステップと、
を含んでいる制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多重化されるＣＰＵモジュールを備えているコントローラ、およびコントローラの制御方法に関する。
【背景技術】
【０００２】
従来、ＰＬＣ（プログラマブル・ロジック・コントローラ、Programmable Logic Controller）について、システムの安全性、信頼性を向上すること等を目的として、ＣＰＵモジュールを多重化する構成が知られている。これらの多重化ＣＰＵモジュールでは、何れか１つのＣＰＵモジュールが演算処理を実行する制御系ＣＰＵモジュールとして動作し、他のＣＰＵモジュールが待機系ＣＰＵモジュールとして動作する。
【０００３】
制御系ＣＰＵモジュールに異常が生じた場合には、待機系ＣＰＵモジュールが、異常が生じた制御系ＣＰＵモジュールに替わって演算処理を実行し、ＰＬＣによる制御動作を継続する。制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとは、制御系ＣＰＵモジュールに異常が発生した場合にシステムを継続動作することができるように、制御系ＣＰＵモジュールにおいて用いる一部のデータを待機系ＣＰＵモジュールに転送して共有化している。
【０００４】
一般的に、制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとの間でどのデータを共有するかは、ユーザが判断し、ユーザが手動で選択する。使用している変数の多いプログラムなどでは、共有する変数の設定ミスにより、制御動作を行うＣＰＵモジュールの切り替え時に誤動作が生じる場合もある。
【０００５】
そこで、共有変数の設定ミスによる動作モジュールの切り替え時の動作異常の抑制と、共有変数設定のユーザの負担軽減のために、制御系ＣＰＵモジュールから待機系ＣＰＵモジュールに転送するデータを自動選択する技術が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−２３５３１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述のような従来技術では、コンパイラは、入出力データを参照して、各メモリがプログラムにおいてどのような用途で使用されているかを確認し、トラッキング要と判定されたメモリのデータを初期値データと入出力データとから抽出して、制御系ＣＰＵモジュールから待機系ＣＰＵモジュールに転送している。このように、プログラムの実行後に、各メモリをスキャンしてデータを抽出し、抽出したデータを制御系ＣＰＵモジュールから待機系ＣＰＵモジュールに転送する構成では、メモリスキャンの時間が長くなる。そのため、プログラムの実行が遅れる（実行周期が長くなる）という問題がある。
【０００８】
本発明の一態様は、上述した事情に鑑みてなされたものであり、多重化されるＣＰＵモジュール間で適切かつ効率的にデータを共有することができる技術を実現することを目的とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決するために、本発明の一態様に係るコントローラは、ＣＰＵモジュールが多重化されたコントローラであって、制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールと、を備え、前記制御系ＣＰＵモジュールは、ユーザプログラムに基づく演算処理を行う第１演算部と、前記第１演算部による演算結果が書き込まれる第１メモリと、を備え、前記待機系ＣＰＵモジュールは、前記制御系ＣＰＵモジュールに異常が生じたときにユーザプログラムに基づく演算処理を行う第２演算部と、第２メモリと、を備え、前記制御系ＣＰＵモジュールは、さらに、前記第１演算部から受け取った前記演算結果の書き込み指示を、前記第１メモリに出力するとともに、前記待機系ＣＰＵモジュールの前記第２メモリに転送する第１メモリ処理部を備えている。
【００１０】
ＣＰＵモジュールが多重化されたコントローラにおいて、制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとの間で、共有変数をユーザが設定する必要がなく、ユーザの手間を低減し、設定ミスが生じるのを防ぐことができる。また、変数を共有するタイミング毎に、データをスキャンして共有する変数を抽出し転送する必要がないため、メモリスキャンに必要な時間を抑えることができる。
【００１１】
したがって、多重化されるＣＰＵモジュール間で効率的に必要なデータを共有することができる。また、ＣＰＵモジュールの切り替えを行う際に、必要なデータが共有されていないという事がなく、ＣＰＵモジュールの切り替えによる誤作動を抑制し、効率良くＣＰＵモジュールの切り替えを行うことができる。
【００１２】
本発明の一態様に係るコントローラにおいて、前記制御系ＣＰＵモジュールの前記第１メモリ処理部は、前記制御系ＣＰＵモジュールが外部のＩ／Ｏユニットから受信した入力データの書き込み指示を、前記第１メモリに出力するとともに、前記待機系ＣＰＵモジュールの前記第２メモリに転送してもよい。
【００１３】
前記の構成によれば、前記制御系ＣＰＵモジュールが、外部のＩ／Ｏユニットから受信した入力データを、制御系ＣＰＵモジュールの第１メモリに書き込むのと同じタイミングで、待機系ＣＰＵモジュールと共有することができる。制御系ＣＰＵモジュールは、入力データを共有するために、改めて第１メモリをスキャンする必要がない。したがって、多重化されるＣＰＵモジュール間で効率的に必要なデータを共有することができる。
【００１４】
本発明の一態様に係るコントローラにおいて、前記制御系ＣＰＵモジュールは、メモリアクセスコントローラを備え、前記メモリアクセスコントローラは、前記第１メモリ処理部を含んでもよい。
【００１５】
前記の構成によれば、メモリアクセスコントローラが、第１メモリへの出力と、待機系ＣＰＵモジュールへの転送とを分配してくれるので、第１演算部は書き込み処理を待たずに次の演算処理を実行することができる。
【００１６】
本発明の一態様に係るコントローラにおいて、前記第１演算部と前記第１メモリ処理部とは、１つの集積回路の中に形成されていてもよい。
【００１７】
前記の構成によれば、第１メモリ処理部が、第１メモリへの出力と、待機系ＣＰＵモジュールへの転送とを分配してくれるので、第１演算部は書き込み処理を待たずに次の演算処理を実行することができる。
【００１８】
本発明の一態様に係るコントローラにおいて、前記待機系ＣＰＵモジュールは、第２メモリ処理部を備え、前記第２メモリ処理部は、前記演算結果の前記書き込み指示を前記制御系ＣＰＵモジュールから受信し、当該書き込み指示を前記第２メモリに出力してもよい。
【００１９】
前記の構成によれば、第２メモリ処理部が第２メモリへの書き込みを実行するため、第１メモリ処理部は、第２メモリ処理部に書き込み指示を受け渡すだけで良く、第２メモリへの書き込み処理を待たなくてよい。したがって、多重化されるＣＰＵモジュール間で効率的に必要なデータを共有することができる。
【００２０】
本発明の一態様に係るコントローラにおいて、前記第２メモリ処理部は、前記制御系ＣＰＵモジュールに異常が生じたときに、前記第２演算部から受け取った演算結果の書き込み指示を、前記第２メモリに出力してもよい。
【００２１】
前記の構成によれば、制御系ＣＰＵモジュールに異常が生じたときには、待機系ＣＰＵモジュール内で処理を完了することができ、コントローラの運転を効率良く継続することができる。
【００２２】
本発明の一態様に係るコントローラにおいて、前記制御系ＣＰＵモジュールは、前記第１演算部と、第１レジスタとを含む第１演算処理部を備え、前記待機系ＣＰＵモジュールは、前記第２演算部と、第２レジスタとを含む第２演算処理部を備え、前記第１メモリ処理部は、前記第１演算処理部の前記第１レジスタへの書き込み指示を、前記待機系ＣＰＵモジュールの前記第２演算処理部の前記第２レジスタに転送してもよい。
【００２３】
前記の構成によれば、制御系ＣＰＵモジュールの第１レジスタに書き込まれる情報が、待機系ＣＰＵモジュールの第２レジスタに共有される。これにより、ユーザプログラムに基づく演算処理に必要なレジスタに保存される中間データを、待機系ＣＰＵモジュールと共有することができる。待機系ＣＰＵモジュールは、制御系ＣＰＵモジュールによって実行が完了した処理を適切に知ることができる。したがって、制御系ＣＰＵモジュールに異常が生じ、待機系ＣＰＵモジュールに動作が切り替わったときには、待機系ＣＰＵモジュールは、ユーザプログラムにおける適切な位置から次の処理を実行することができる。
【００２４】
本発明の一態様に係るコントローラは、外部の前記Ｉ／Ｏユニットからの前記入力データを伝送するケーブルとは別に、前記制御系ＣＰＵモジュールと前記待機系ＣＰＵモジュールとを互いに接続するケーブルであって、前記演算結果の書き込み指示を伝送するケーブルを備えていてもよい。
【００２５】
前記の構成によれば、入力データを伝送するケーブルとは別のケーブルを介して書き込み指示を伝送することができ、データの伝送（すなわち共有）に遅延が生じることを抑制することができる。
【００２６】
上記の課題を解決するために、本発明の一態様に係る制御方法は、制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとが多重化されたコントローラの制御方法であって、前記制御系ＣＰＵモジュールにおいてユーザプログラムに基づく演算処理を行う演算ステップと、前記演算処理の演算結果の書き込み指示を、前記制御系ＣＰＵモジュールの第１メモリに出力するとともに、前記待機系ＣＰＵモジュールの第２メモリに転送するメモリ処理ステップと、を含んでいる。
【００２７】
ＣＰＵモジュールが多重化されたコントローラにおいて、制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとの間で、共有変数をユーザが設定する必要がなく、ユーザの手間を低減し、設定ミスが生じるのを防ぐことができる。また、変数を共有するタイミング毎に、データをスキャンして共有する変数を抽出し転送する必要がないため、メモリスキャンに必要な時間を抑えることができる。
【００２８】
したがって、多重化されるＣＰＵモジュール間で効率的に必要なデータを共有することができる。また、ＣＰＵモジュールの切り替えを行う際に、必要なデータが共有されていないという事がなく、ＣＰＵモジュールの切り替えによる誤作動を抑制し、効率良くＣＰＵモジュールの切り替えを行うことができる。
【発明の効果】
【００２９】
本発明の一態様によれば、多重化されるＣＰＵモジュール間で適切かつ効率的にデータを共有することができるとの効果を奏する。
【図面の簡単な説明】
【００３０】
【図１】本発明の実施形態１に係るＰＬＣの要部構成を示すブロック図である。
【図２】図１に示すメモリアクセスコントローラの要部構成を示すブロック図である。
【図３】図１に示す２つのＣＰＵモジュール間におけるデータ転送処理の流れの具体例を説明する図である。
【図４】図１に示す２つのＣＰＵモジュール間における動作切替処理の流れの具体例を説明する図である。
【図５】実施形態２に係るＰＬＣの要部構成を示すブロック図である。
【発明を実施するための形態】
【００３１】
以下、本発明の一側面に係る実施形態（以下、「本実施形態」とも表記する）を、図面に基づいて説明する。
【００３２】
§１  適用例
図１を用いて、本発明が適用される場面の一例について説明する。図１は、本実施形態に係るＰＬＣ（コントローラ）１０の要部構成を示すブロック図である。ＰＬＣ１０は、多重化される複数のＣＰＵモジュール１００Ａ，１００Ｂを備えて構成されている。ＰＬＣ１０は、複数の上位装置、および制御対象である複数のＩ／Ｏユニット（入力／出力ユニット）に接続されている。Ｉ／Ｏユニットは、例えば、工作機械、およびベルトコンベアのサーボモータ等の駆動装置の制御ユニット、または、駆動装置の稼働状態に係るセンサデータ等を収集し、稼働状態を示すデータを生成するセンサユニットである。上位装置は、例えば、ユーザプログラムの編集等を行うユーザＰＣ（パーソナルコンピュータ）またはサーバである。
【００３３】
ＰＬＣ１０は、複数のＣＰＵモジュール１００Ａ，１００Ｂの何れか１つが制御系ＣＰＵモジュールとして機能する。ＰＬＣ１０は、制御系ＣＰＵモジュールにおいて、Ｉ／Ｏユニットからの入力データに基づいて、制御対象のＩ／Ｏユニットに応じたユーザプログラムを実行することにより、駆動装置に対する動作制御指示を生成する。
【００３４】
複数のＣＰＵモジュール１００Ａ，１００Ｂのそれぞれには、複数の駆動装置のそれぞれを制御するための複数のプログラムが、プログラムメモリ１４０Ａ，１４０Ｂに予め書きこまれている。また、これらのプログラムで使用される初期設定データは、内部のメモリ１３０Ａ，１３０Ｂに予め書きこまれている。
【００３５】
ＰＬＣ１０は、正常状態においては、制御系ＣＰＵモジュールがユーザプログラムに基づいて演算処理を行い、演算結果に従って駆動装置の動作を制御する。正常状態においては、待機系ＣＰＵモジュールは、ユーザプログラムに基づいた演算処理を行わない。
【００３６】
ＰＬＣ１０において、制御系ＣＰＵモジュールに異常が生じた場合、多重化される他のＣＰＵモジュールである待機系ＣＰＵモジュールが制御系ＣＰＵモジュールに替わって、駆動装置の動作制御を行うことで、ＰＬＣ１０は、制御動作を継続する。制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとの間では、制御系ＣＰＵモジュールに異常が発生した場合には、制御動作を行うＣＰＵモジュールの切り替えを効率的に行うことができるように、データが共有されている。
【００３７】
制御系ＣＰＵモジュールは、Ｉ／Ｏユニットからの入力データをＩ／Ｏメモリ（単にメモリとも称する）に書き込む指示を自モジュールのＩ／Ｏメモリに出力するとともに、待機系ＣＰＵモジュールに転送する。また、制御系ＣＰＵモジュールは、演算処理を行った演算結果をＩ／Ｏメモリに書き込む指示を自モジュールのメモリに出力するとともに、待機系ＣＰＵモジュールに転送する。
【００３８】
このように、制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとでは、演算結果（および入力データ）が同時にそれぞれのメモリに書き込まれる。これにより、転送するデータを抽出する為にメモリをスキャンする必要がなく、効率的に必要なデータを共有することができる。また、制御系ＣＰＵモジュールと、待機系ＣＰＵモジュールとの間で演算結果を常に共有することができ、ＣＰＵモジュールの切り替えを効率的に行うことができるため、ＰＬＣ１０は、遅延なく制御動作を継続することができる。
【００３９】
§２  構成例
〔実施形態１〕
図１及び図２に基づいて、本発明の実施形態１に係るＰＬＣ１０の構成について、詳細に説明する。図１は、ＰＬＣ１０の要部構成を示すブロック図である。
【００４０】
図１に示すように、ＰＬＣ１０は、第１ＣＰＵモジュール１００Ａおよび第２ＣＰＵモジュール１００Ｂを含んでいる。第１ＣＰＵモジュール１００Ａと第２ＣＰＵモジュール１００Ｂとは、ＰＬＣ１０において多重化されている。なお、図１では、ＰＬＣ１０が二重化される第１ＣＰＵモジュール１００Ａと第２ＣＰＵモジュール１００Ｂとを含む例を示しているが、これに限らず、３つ以上の複数の多重化されるＣＰＵを備えている構成であってもよい。第１ＣＰＵモジュール１００Ａおよび第２ＣＰＵモジュール１００Ｂの各々は、ＰＬＣ１０全体を統括的に制御可能に構成されている。
【００４１】
第１ＣＰＵモジュール１００Ａは、正常状態においてＩ／Ｏユニットからの入力データを取得して、ユーザプログラムに基づく演算処理を実行する制御系モジュールとして機能する。第１ＣＰＵモジュール１００Ａを制御系ＣＰＵモジュールとも称する。第２ＣＰＵモジュール１００Ｂは、第１ＣＰＵモジュール１００Ａに異常が生じた場合に、第１ＣＰＵモジュール１００Ａに替わって制御動作を実行する待機系モジュールとして機能する。第２ＣＰＵモジュール１００Ｂを待機系ＣＰＵモジュールとも称する。第１ＣＰＵモジュール１００Ａが正常に動作している間は、第２ＣＰＵモジュール１００Ｂは、制御動作に必要なユーザプログラムに基づく演算処理を実行しない。
【００４２】
第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとは、互いに同一の構成を有し、それぞれ、演算処理部１１０、メモリアクセスコントローラ１２０、Ｉ／Ｏメモリ１３０を備えている。また、第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとは、プログラムメモリ１４０、およびＭＰＵ（Micro Processor Unit）１５０を備えている。
【００４３】
演算処理部１１０は、１つの集積回路（例えばＡＳＩＣ（Application Specific Integrated Circuit）、またはＦＰＧＡ（Field-Programmable Gate Array））で形成されているプロセッサである。メモリアクセスコントローラ１２０は、１つの集積回路で形成されている。なお、演算処理部１１０およびメモリアクセスコントローラ１２０は、それぞれ複数の集積回路を含んでもよい。
【００４４】
第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとは、それぞれ、EtherNet（登録商標）ケーブル等の、外部のＩ／Ｏユニットからの入力データを伝送するケーブルに接続されている。また、第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとは、外部のＩ／Ｏユニットからの入力データを伝送するケーブルとは別に、互いに伝送ケーブル５０で接続されている。第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとは、伝送ケーブル５０を介して、外部のＩ／Ｏユニットからの入力データ、および演算処理部１１０による演算結果を共有する。
【００４５】
ＭＰＵ１５０は、上位装置との通信を制御する。ＭＰＵ１５０は、例えばサーバからユーザプログラムを取得し、ユーザプログラムをプログラムメモリ１４０に保存する。
【００４６】
プログラムメモリ１４０には、制御対象の駆動装置を制御するための制御プログラムであるユーザプログラムが格納されている。ユーザプログラムは、例えば、ラダー言語等で記述された制御プログラム等である。
【００４７】
第１ＣＰＵモジュール１００Ａの演算処理部を第１演算処理部１１０Ａ、第２ＣＰＵモジュール１１０Ｂの演算処理部を第２演算処理部１１０Ｂとそれぞれ称する。また、第１ＣＰＵモジュール１００Ａのメモリアクセスコントローラを第１メモリアクセスコントローラ１２０Ａ、第２ＣＰＵモジュール１１０Ｂのメモリアクセスコントローラを第２メモリアクセスコントローラ１２０Ｂとそれぞれ称する。また、第１ＣＰＵモジュール１００ＡのＩ／Ｏメモリを第１メモリ１３０Ａ、第２ＣＰＵモジュール１１０ＢのＩ／Ｏメモリを第２メモリ１３０Ｂとそれぞれ称する。また、第１ＣＰＵモジュール１００Ａのプログラムメモリを第１プログラムメモリ１４０Ａ、第２ＣＰＵモジュール１１０Ｂのプログラムメモリを第２プログラムメモリ１４０Ｂとそれぞれ称する。また、第１ＣＰＵモジュール１００ＡのＭＰＵを第１ＭＰＵ１５０Ａ、第２ＣＰＵモジュール１１０ＢのＭＰＵを第２ＭＰＵ１５０Ｂとそれぞれ称する。
【００４８】
第１ＣＰＵモジュール１００Ａは、Ｉ／Ｏユニットから、周期的に入力データを受信する。入力データは、例えば、駆動装置の駆動状態を示すデータ、および、センサが計測した計測値を示すデータを含む。第１ＣＰＵモジュール１００Ａは、Ｉ／Ｏユニットからの入力データを、第１演算処理部１１０Ａを通じて、第１メモリ１３０Ａにそのまま保存する。具体的には、第１ＣＰＵモジュール１００Ａは、Ｉ／Ｏユニットからの入力データを、第１演算処理部１１０Ａに渡す。第１演算処理部１１０Ａは、受信した入力データを第１メモリ１３０Ａに書き込むため、入力データの書き込み指示を、第１メモリアクセスコントローラ１２０Ａに出力する。第１メモリアクセスコントローラ１２０Ａは、第１演算処理部１１０Ａが出力した入力データの書き込み指示を第１メモリ１３０Ａに出力する。
【００４９】
また、第１ＣＰＵモジュール１００Ａは、第１演算処理部１１０Ａによる演算結果も、第１メモリ１３０Ａに保存する。具体的には、第１ＣＰＵモジュール１００Ａは、第１演算処理部１１０Ａの第１演算部１１１Ａの演算結果を第１メモリ１３０Ａに書き込むため、演算結果の書き込み指示を、第１メモリアクセスコントローラ１２０Ａに出力する。第１メモリアクセスコントローラ１２０Ａは、第１演算処理部１１０Ａが出力した演算結果の書き込み指示を第１メモリ１３０Ａに出力する。
【００５０】
また、第１ＣＰＵモジュール１００Ａは、Ｉ／Ｏユニットからの入力データと、第１演算処理部１１０Ａによる演算結果と、をそれぞれ第１メモリ１３０Ａに書き込むタイミングで、第２ＣＰＵモジュール１００Ｂに転送する。
【００５１】
第１演算処理部１１０Ａは、第１演算部１１１Ａと、第１レジスタ１１２Ａとを備えている。同様に、第２演算処理部１１０Ｂは、第２演算部１１１Ｂと、第２レジスタ１１２Ｂとを備えている。
【００５２】
第１演算部１１１Ａは、第１プログラムメモリ１４０Ａに格納されているユーザプログラムと、第１メモリ１３０Ａに保存されているＩ／Ｏユニットからの入力データと、を読み込んで、当該ユーザプログラムに基づく演算処理を行う。第１レジスタ１１２Ａには、第１演算処理部１１０Ａによって実行された処理の内容（ユーザプログラムの内部で使用される変数）が書きこまれる。
【００５３】
第２演算部１１１Ｂは、第１ＣＰＵモジュール１００Ａに異常が生じたときに、第２プログラムメモリ１４０Ｂに格納されているユーザプログラムと、第２メモリ１３０Ｂに保存されているＩ／Ｏユニットからの入力データと、を読み込んで、当該ユーザプログラムに基づく演算処理を行う。第２レジスタ１１２Ｂには、第２演算処理部１１０Ｂによって実行された処理の内容（ユーザプログラムの内部で使用される変数）が書きこまれる。
【００５４】
図２は、図１におけるメモリアクセスコントローラ１２０Ａ，１２０Ｂの要部構成を示すブロック図である。メモリアクセスコントローラ１２０Ａ，１２０Ｂは、それぞれ、分配回路部１２１、データバッファ１２２、およびデータトランシーバアンドレシーバＩＣ１２３を含んでいる。第１メモリアクセスコントローラ１２０Ａの分配回路部１２１は、第１メモリ処理部１２１Ａとも称される。第２メモリアクセスコントローラ１２０Ｂの分配回路部１２１は、第２メモリ処理部１２１Ｂとも称される。
【００５５】
第１メモリアクセスコントローラ１２０Ａは、第１演算部１１１Ａから演算結果を第１メモリに書き込む書き込み指示を取得する。該演算結果の書き込み指示は、演算結果と、該演算結果を格納すべきアドレス（論理アドレス又は物理アドレス）の情報とを含む。第１メモリアクセスコントローラ１２０Ａの分配回路部１２１は、第１演算部１１１Ａから受信した演算結果の書き込み指示を、第１メモリ１３０Ａに出力する。また、第１メモリアクセスコントローラ１２０Ａの分配回路部１２１は、受信した演算結果の書き込み指示を、データバッファ１２２、およびデータトランシーバアンドレシーバＩＣ１２３を介して、第２ＣＰＵモジュール１００Ｂの第２メモリ１３０Ｂに転送する。このように、分配回路部１２１は、１つの書き込み指示を、第１メモリ１３０Ａと第２メモリ１３０Ｂとに分配する。
【００５６】
具体的には、第１メモリアクセスコントローラ１２０Ａの分配回路部１２１は、第１演算部１１１Ａからの演算結果の書き込み指示を、第１メモリアクセスコントローラ１２０Ａのデータバッファ１２２に出力する。データトランシーバアンドレシーバＩＣ１２３は、ＣＰＵモジュール１００Ａ，１００Ｂ間の通信を制御する。第１メモリアクセスコントローラ１２０ＡのデータトランシーバアンドレシーバＩＣ１２３は、データバッファ１２２に蓄えられた演算結果の書き込み指示を、伝送ケーブル５０を介して、第２ＣＰＵモジュール１１０Ｂの第２メモリアクセスコントローラ１２０Ｂに伝送する。
【００５７】
また、第１メモリアクセスコントローラ１２０Ａの分配回路部１２１は、外部のＩ／Ｏユニットから受信した入力データを第１メモリ１３０Ａに書き込む第１演算処理部１１０Ａからの書き込み指示を、第１メモリ１３０Ａに出力するとともに、第２ＣＰＵモジュール１１０Ｂの第２メモリ１３０Ｂに転送する。該入力データの書き込み指示は、入力データと、該入力データを格納すべきアドレスの情報とを含む。第１メモリアクセスコントローラ１２０Ａの分配回路部１２１は、第１演算部１１１Ａから受信した入力データの書き込み指示を、データバッファ１２２、データトランシーバアンドレシーバＩＣ１２３、および伝送ケーブル５０を介して、第２ＣＰＵモジュール１００Ｂの第２メモリ１３０Ｂに転送する。なお、Ｉ／Ｏユニットからの入力データ自体は、伝送ケーブル５０とは別の、Ｉ／Ｏユニットからの入力データが伝送されるケーブルを介して、第１ＣＰＵモジュール１００Ａから、第２ＣＰＵモジュール１００Ｂに転送されてもよい。または、Ｉ／Ｏユニットからの入力データは、Ｉ／Ｏユニットから第２ＣＰＵモジュール１００Ｂに入力されてもよい。
【００５８】
また、第１メモリアクセスコントローラ１２０Ａの分配回路部１２１は、第１演算処理部１１０Ａのレジスタ１１２Ａへの書き込み指示を、第１演算処理部１１０Ａから取得し、当該書き込み指示を第２ＣＰＵモジュール１００Ｂの第２演算処理部１１０Ｂのレジスタ１１２Ｂに転送する。該レジスタへの書き込み指示は、第１演算処理部１１０Ａによって実行された処理の内容（ユーザプログラムの内部で使用される変数）と、該データを格納すべきレジスタ上のアドレスの情報とを含む。第１メモリアクセスコントローラ１２０Ａの分配回路部１２１は、第１演算処理部１１０Ａから受信したレジスタへの書き込み指示を、データバッファ１２２、データトランシーバアンドレシーバＩＣ１２３、および伝送ケーブル５０を介して、第２ＣＰＵモジュール１００Ｂのレジスタ１１２Ｂに転送する。
【００５９】
第２ＣＰＵモジュール１１０Ｂは、伝送ケーブル５０を介して伝送された、入力データの書き込み指示、演算結果の書き込み指示、及び、レジスタへの書き込み指示を第２メモリアクセスコントローラ１２０Ｂによって受信する。
【００６０】
第２メモリアクセスコントローラ１２０Ｂは、第２メモリアクセスコントローラ１２０ＢのデータトランシーバアンドレシーバＩＣ１２３を介して、第１ＣＰＵモジュール１００Ｂから書き込み指示を受信する。第２メモリアクセスコントローラ１２０ＢのデータトランシーバアンドレシーバＩＣ１２３は、第２メモリアクセスコントローラ１２０Ｂのデータバッファ１２２に受信した書き込み指示を出力する。第２メモリアクセスコントローラ１２０Ｂの分配回路（第２メモリ処理部）１２１は、データバッファ１２２に蓄えられた書き込み指示が、入力データの書き込み指示、又は演算結果の書き込み指示であれば、当該書き込み指示を、第２メモリ１３０Ｂに出力する。第２メモリアクセスコントローラ１２０Ｂの分配回路部１２１は、データバッファ１２２に蓄えられた書き込み指示が、レジスタへの書き込み指示であれば、当該書き込み指示を、第２演算処理部１１０Ｂのレジスタ１１２Ｂに出力する。
【００６１】
第２ＣＰＵモジュール１００Ｂは、第２メモリアクセスコントローラ１２０Ｂを介して、第１ＣＰＵモジュール１００Ａから、第１ＣＰＵモジュール１００Ａに異常が生じたことを示す情報を受信する。第２ＣＰＵモジュール１００Ｂは、第１ＣＰＵモジュール１００Ａに異常が生じたことを示す情報を受信すると、第２演算処理部１１０Ｂにおいて、ユーザプログラムに基づく演算処理の実行を開始する。第２演算処理部１１０Ｂは、第２演算部１１１Ｂの機能により、ユーザプログラムに基づく演算処理を行って、第２演算部１１１Ｂによる演算結果をメモリに書き込む指示を第２メモリアクセスコントローラ１２０Ｂに出力する。第２メモリアクセスコントローラ１２０Ｂは、第２演算部１１１Ｂによる演算結果をメモリに書き込む指示を受け取ると、第２メモリアクセスコントローラ１２０Ｂの分配回路部１２１の機能により、第２演算処理部１１０Ｂから受け取った演算結果の書き込み指示を、第２メモリ１３０Ｂに出力する。
【００６２】
第２メモリアクセスコントローラ１２０Ｂの分配回路部１２１は、第１ＣＰＵモジュール１００Ａに異常が生じたときには、第２演算処理部１１０Ｂから受け取った演算結果の書き込み指示を、第２メモリ１３０Ｂに出力する。
【００６３】
〔ＣＰＵモジュール間におけるデータ転送処理の流れについて〕
図３は、第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとの間のデータ転送処理の流れを示すフローチャートである。
【００６４】
第１ＣＰＵモジュール１００Ａ、および第２ＣＰＵモジュール１００Ｂは、ＰＬＣ１０の電源ＯＮの後、Ｉ／Ｏメモリ１３０Ａ，１３０Ｂの初期設定をそれぞれ行う（ステップＳ１、Ｓ１１）。初期設定において、Ｉ／Ｏメモリ１３０Ａ，１３０Ｂには、各ユーザプログラムで使用されるパラメータの初期値が登録される。
【００６５】
〔第１ＣＰＵモジュール１００Ａの処理サイクル〕
続いて、第１ＣＰＵモジュール１００Ａは、状態チェック処理、プログラム実行処理、メモリリフレッシュ、およびイベント処理を、この順でセットで、繰り返し実行する。この、状態チェック処理、プログラム実行処理、メモリリフレッシュ、およびイベント処理のセットを「１サイクル」と称する。
【００６６】
第１ＣＰＵモジュール１００Ａは、状態チェック処理において、自モジュールが備える各ハードウェア、およびソフトウェアが正常に動作するか否かを確認する（ステップＳ２）。
【００６７】
続いて、第１ＣＰＵモジュール１００Ａは、プログラム実行処理において、第１演算処理部１１０Ａの第１演算部１１１Ａの機能により、所定のユーザプログラムと、第１メモリ１３０Ａに記憶されている、当該ユーザプログラムの内部で使用されるパラメータとを読み込んで、ユーザプログラムに基づく演算処理を行う。第１演算部１１１Ａは、演算結果をＩ／Ｏメモリに書き込む書き込み指示を、第１メモリアクセスコントローラ１２０Ａに出力する。第１メモリアクセスコントローラ１２０Ａは、分配回路部１２１の機能により、第１演算部１１１Ａから受け取った演算結果の書き込み指示を、第１メモリ１３０Ａに出力し、演算結果を第１メモリ１３０Ａに書き込む。
【００６８】
また、分配回路部１２１は、第１演算部１１１Ａから受け取った演算結果（Ｏデータ）の書き込み指示を、第１メモリ１３０Ａに出力するとともに、当該書き込み指示（Ｏデータを含む）を、データバッファ１２２、およびデータトランシーバアンドレシーバＩＣ１２３を介して、第２ＣＰＵモジュール１１０Ａの第２メモリアクセスコントローラ１２０Ｂに転送する（ステップＳ３）。
【００６９】
続いて、第１ＣＰＵモジュール１００Ａは、第１メモリ１３０Ａに記憶されているパラメータを、外部のＩ／Ｏユニットから受信した入力データ（Ｉデータ）を用いてリフレッシュする。第１ＣＰＵモジュール１００Ａの分配回路部１２１は、外部のＩ／Ｏユニットから受信した入力データを第１メモリ１３０Ａに書き込む書き込み指示を、第１メモリ１３０Ａに出力するとともに、当該書き込み指示（Ｉデータを含む）を、データバッファ１２２、およびデータトランシーバアンドレシーバＩＣ１２３を介して、第２ＣＰＵモジュール１１０Ａの第２メモリアクセスコントローラ１２０Ｂに転送する（ステップＳ４）。
【００７０】
第１ＣＰＵモジュール１００Ａは、上位装置との通信を行うイベント処理を行う（ステップＳ５）。例えば、外部のＩ／Ｏユニットから受信した入力データの記録又は解析のために、上位装置であるサーバに、特定の入力データを送信する。第１ＣＰＵモジュール１００Ａは、ステップＳ２〜ステップＳ５の１サイクルの処理を終了すると、次のサイクルを開始する。また、図示はしていないが、第１演算処理部１１０Ａは、例えばユーザプログラムの実行処理時に、当該処理の内容を第１レジスタ１１２Ａに出力するとともに、第２メモリアクセスコントローラ１２０Ｂを介して、第２ＣＰＵモジュール１００Ｂの第２レジスタ１１２Ｂに転送する。
【００７１】
〔第２ＣＰＵモジュール１００Ｂの処理〕
続いて、第１ＣＰＵモジュール１００Ａにおける１サイクルの処理中の、第２ＣＰＵモジュール１００Ｂの処理について説明する。
【００７２】
初期設定の後、第２ＣＰＵモジュール１００Ｂは、状態チェック処理を行い、第２ＣＰＵモジュール１００Ｂが備える各ハードウェア、およびソフトウェアが正常に動作するか否かを確認する（ステップＳ１２）。
【００７３】
第２ＣＰＵモジュール１００Ｂは、第１ＣＰＵモジュール１００Ａから転送されるデータを受信するまで待機する。第１ＣＰＵモジュール１００Ａが正常に動作している間、第２演算部１１１Ｂはユーザプログラムを実行せずに待機する。第２ＣＰＵモジュール１００Ｂは、第２メモリアクセスコントローラ１２０Ｂの機能により、第１ＣＰＵモジュール１００Ａから演算結果をメモリに書き込む書き込み指示を受信する。第２メモリアクセスコントローラ１２０Ｂは、分配回路部１２１の機能により、第１ＣＰＵモジュール１００Ａの第１演算部１１１Ａによる演算結果の書き込み指示を、第２メモリ１３０Ｂに出力し、第２メモリ１３０Ｂに演算結果を書き込む（ステップＳ１３）。第２メモリアクセスコントローラ１２０Ｂの分配回路部１２１は、レジスタへの書き込み指示を受信した場合、レジスタへの書き込み指示を第２演算処理部１１０Ｂの第２レジスタ１１２Ｂに転送する。これにより、第１レジスタ１１２Ａに書き込まれたデータが、第２レジスタ１１２Ｂにも書き込まれる。
【００７４】
さらに、第２ＣＰＵモジュール１００Ｂは、第１ＣＰＵモジュール１００Ａから転送されるデータを受信するまで待機する。第２ＣＰＵモジュール１００Ｂは、第２メモリアクセスコントローラ１２０Ｂの機能により、第１ＣＰＵモジュール１００Ａから、第１ＣＰＵモジュール１００Ａが外部のＩ／Ｏユニットから受信した入力データをメモリに書き込む書き込み指示を受信する。第２メモリアクセスコントローラ１２０Ｂは、分配回路部１２１の機能により、外部のＩ／Ｏユニットからの入力データの書き込み指示を、第２メモリ１３０Ｂに出力し、第２メモリ１３０Ｂに入力データを書き込む（ステップＳ１４）。
【００７５】
第２ＣＰＵモジュール１００Ｂは、ステップＳ１２〜ステップＳ１４の処理のセットを１サイクルの処理として実行し、当該１サイクルを終了すると、次のサイクルを開始する。
【００７６】
このように、ＰＬＣ１０において、第１ＣＰＵモジュール１００Ａが正常に稼働している正常状態では、多重化される第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとの間で、演算結果、および外部のＩ／Ｏユニットから受信した入力データを、同じタイミングでそれぞれのメモリ１３０Ａ，１３０Ｂに書き込むことができる。第１ＣＰＵモジュール１００Ａの分配回路部１２１は、第１メモリ１３０Ａへの書き込み指示を、第１メモリ１３０Ａに加えて、そのまま第２ＣＰＵモジュール１００Ｂの第２メモリ１３０Ｂにも転送する。それゆえ、第１ＣＰＵモジュール１００Ａの第１メモリ１３０Ａのデータを第２ＣＰＵモジュール１００Ｂの第２メモリ１３０Ｂが共有するために、第１メモリ１３０Ａをスキャンする必要がない。よって、多重化されるＣＰＵモジュール間で適切かつ効率的にデータを共有することができる。これにより、制御系ＣＰＵモジュールに異常が生じた場合には、待機系ＣＰＵモジュールに制御機能を効率良く切り替えて、運転を継続させることができる。
【００７７】
〔第１ＣＰＵモジュール１００Ａに異常が生じた場合の処理の流れ〕
図４は、第１ＣＰＵモジュール１００Ａに異常が生じた場合の第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとの処理の流れを示すフローチャートである。
【００７８】
第１ＣＰＵモジュール１００Ａは、初期設定処理（ステップＳ１）を行った後、状態チェック処理（ステップＳ２）を行う。第１ＣＰＵモジュール１００Ａは、状態チェック処理の結果、異常を検知すると（ステップＳ２３）、異常が生じた旨の通知を、第２ＣＰＵモジュール１００Ｂに送信する（ステップＳ２４）。第１ＣＰＵモジュール１００Ａは、プログラム実行処理を行うことなく、状態チェックの処理に戻る。
【００７９】
第２ＣＰＵモジュール１００Ｂは、第２メモリアクセスコントローラ１２０Ｂを介して第１ＣＰＵモジュール１００Ａに異常が生じている旨の通知を受信し（ステップＳ３１）、第１ＣＰＵモジュール１００Ａに替わって、プログラム実行処理を行い、第２演算部１１１Ｂの機能により、ユーザプログラムに基づく演算処理を行う。
【００８０】
プログラム実行処理において、第２ＣＰＵモジュール１００Ｂは、第２演算処理部１１０Ｂの第２演算部１１１Ｂの機能により、所定のユーザプログラムと、第２メモリ１３０Ｂに記憶されている所定のパラメータとを読み込んで、ユーザプログラムに基づく演算処理を行う。第２演算部１１１Ｂは、演算結果をメモリに書き込む書き込み指示を第２メモリアクセスコントローラ１２０Ｂに出力する。第２メモリアクセスコントローラ１２０Ｂは、分配回路部１２１の機能により、第２演算部１１１Ｂから受け取った演算結果の書き込み指示を、第２メモリ１３０Ｂに出力し、演算結果を第２メモリ１３０Ｂに書き込む（ステップＳ３２）。
【００８１】
続いて、第２ＣＰＵモジュール１００Ｂは、第２メモリ１３０Ｂに記憶されているパラメータを、外部のＩ／Ｏユニットから受信した入力データを用いてリフレッシュする。第２ＣＰＵモジュール１００Ｂの分配回路部１２１は、外部のＩ／Ｏユニットから受信した入力データを第２メモリ１３０Ｂに書き込む書き込み指示を、第２メモリ１３０Ｂに出力（ステップＳ３３）。
【００８２】
第２ＣＰＵモジュール１００Ｂは、第２演算部１１１Ｂによるユーザプログラムに基づく演算処理の結果に応じて制御対象の駆動装置を制御するイベント処理を行う（ステップＳ３４）。第２ＣＰＵモジュール１００Ｂは、ステップＳ１２、およびステップＳ３３〜ステップＳ３４の１サイクルの処理を終了すると、次のサイクルである、ステップＳ１２、およびステップＳ３３〜ステップＳ３４の処理を繰り返し実行する。
【００８３】
なお、第１ＣＰＵモジュール１００Ａに替わって、第２ＣＰＵモジュール１００Ｂが制御動作を行っているときに、第１ＣＰＵモジュール１００Ａが異常状態から復旧した場合には、引き続き、第２ＣＰＵモジュール１００Ｂが制御動作を継続してもよい。
【００８４】
また、第１ＣＰＵモジュール１００Ａに替わって、第２ＣＰＵモジュール１００Ｂが制御動作を行っているときに、第１ＣＰＵモジュール１００Ａが異常状態から復旧した場合には、第２ＣＰＵモジュール１００Ｂは、データ（演算結果および入力データ等）の第１ＣＰＵモジュール１００Ａへの転送を開始してもよい。第１ＣＰＵモジュール１００Ａと、第２ＣＰＵモジュール１００Ｂとは、該データの共有が終了した後、第１ＣＰＵモジュール１００Ａに制御動作を切り替えて、第１ＣＰＵモジュール１００Ａから、第２ＣＰＵモジュール１００Ｂへのデータの転送を開始してもよい。
【００８５】
上述したように、正常状態において駆動装置の動作制御を行う制御系ＣＰＵモジュールである、第１ＣＰＵモジュール１００Ａの第１演算処理部１１０Ａによる演算結果、第１ＣＰＵモジュール１００Ａが外部のＩ／Ｏユニットから受信した入力データ、および、第１演算処理部１１０Ａの第１レジスタ１１２Ａに書きこまれる情報は、全て、第１ＣＰＵモジュール１００Ａにおいて記憶されるのと同じタイミングで、待機系ＣＰＵモジュールである第２ＣＰＵモジュール１００Ｂとの間で共有される。これにより、第１ＣＰＵモジュール１００Ａに異常が生じた場合には、速やかに、且つ誤作動なく、第２ＣＰＵモジュール１００Ｂに制御動作を切り替えて、ＰＬＣ１０の運転を継続させることができる。
【００８６】
〔実施形態２〕
本発明の実施形態２について、以下に説明する。なお、説明の便宜上、上記実施形態１にて説明した部材と同じ機能を有する部材については、同じ符号を付記し、その説明を繰り返さない。
【００８７】
実施形態１では、第１ＣＰＵモジュール１００Ａ、および第２ＣＰＵモジュール１００Ｂは、演算処理部１１０Ａ，１１０Ｂとは、別に、分配回路部１２１を備えたメモリアクセスコントローラ１２０Ａ，１２０Ｂを備えていた。分配回路部１２１は、これに限らず、演算処理部の回路中に形成されていてもよい。
【００８８】
図５は、実施形態２に係るＰＬＣ１０の要部構成を示す図である。ＰＬＣ１０は、第１ＣＰＵモジュール２００Ａと、第２ＣＰＵモジュール２００Ｂとを備えている。第１ＣＰＵモジュール２００Ａは、ＰＬＣ１０においてメインで制御対象の駆動装置の制御を行うモジュールであり、実施形態１と同様に、制御系ＣＰＵモジュールと称する。第２ＣＰＵモジュール２００Ｂは、第１ＣＰＵモジュール２００Ａに異常が生じたときに、第１ＣＰＵモジュール２００Ａに替わって制御対象の駆動装置の制御を行うモジュールであり、実施形態１と同様に待機系ＣＰＵモジュールと称する。
【００８９】
第１ＣＰＵモジュール２００Ａは、第１演算処理部２１０Ａを備えている。第２ＣＰＵモジュール２００Ｂは、第２演算処理部２１０Ｂを備えている。第１演算処理部２１０Ａ、および第２演算処理部２１０Ｂは、それぞれ、ＰＬＣ１０全体を統括的に制御可能に構成されている。
【００９０】
第１演算処理部２１０Ａは、第１演算部２１１Ａ、第１分配回路部（第１メモリ処理部）２１２Ａ、第１データバッファ２１３Ａを含んでいる。第２演算処理部２１０Ｂは、第２演算部２１１Ｂ、第２分配回路部（第２メモリ処理部）２１２Ｂ、第２データバッファ２１３Ｂを含んでいる。第１演算部２１１Ａと、第１分配回路部２１２Ａと、第１データバッファ２１３Ａとは、１つの集積回路の中に形成されている。同様に、第２演算部２１１Ｂと、第２分配回路部２１２Ｂと、第２データバッファ２１３Ｂとは、１つの集積回路の中に形成されている。
【００９１】
なお、図示は省略するが、第１演算処理部２１０Ａ、および第２演算処理部２１０Ｂは、それぞれ、実行した処理の内容と、当該処理が完了した旨の情報とが書きこまれるレジスタを備えている。
【００９２】
第１分配回路部２１２Ａ、および第２分配回路部２１２Ｂは、それぞれ、実施形態１において説明した分配回路部２１２と同様の機能を有する。また、第１データバッファ２１３Ａ、および第２データバッファ２１３Ｂは、それぞれ、実施形態１において説明したデータバッファ２１３と同様の機能を有する。
【００９３】
また、第１ＣＰＵモジュール２００Ａは、伝送ケーブル５０と、第１演算処理部２１０Ａとを接続する第１ドライバＩＣ２２５Ａを備えている。第２ＣＰＵモジュール２００Ｂは、伝送ケーブル５０と第２演算処理部２１０Ｂとを接続する第２ドライバＩＣ２２５Ｂを備えている。第１及び第２ドライバＩＣ２２５Ａ，２２５Ｂは、第１及び第２演算処理部２１０Ａ，２１０Ｂから出力されるパラレル信号を、シリアル信号に変換して伝送ケーブルを通して他方のＣＰＵモジュールに転送するとともに、伝送ケーブル５０を介して受信したシリアル信号を、パラレル信号に変換してＣＰＵモジュールに提供する。
【００９４】
第１演算部２１１Ａは、ユーザプログラムに基づく演算処理を行う。第１演算部２１１Ａによる演算結果と、当該演算結果を第１メモリ１３０Ａに書き込む書き込み指示は、第１分配回路部２１２Ａに渡される。第１分配回路部２１２Ａは、第１演算部２１１Ａから受け取った演算結果の書き込み指示を、第１メモリ１３０Ａに出力するとともに、第２ＣＰＵモジュール２００Ｂの第２メモリ１３０Ｂに転送する。また、第１分配回路部２１２Ａは、外部のＩ／Ｏユニットから受信した入力データのメモリへの書き込み指示を、第１メモリ１３０Ａに出力するとともに、第２ＣＰＵモジュール２００Ｂの第２メモリ１３０Ｂに転送する。また、第１分配回路部２１２Ａは、第１演算処理部２１０Ａのレジスタへの書き込み指示を、第２ＣＰＵモジュール２００Ｂの第２演算処理部２１０Ｂのレジスタに転送する。
【００９５】
第２分配回路部２１２Ｂは、第１ＣＰＵモジュール１００Ａから受け取った演算結果の書き込み指示を、第２メモリ１３０Ｂに出力する。また、第２分配回路部２１２Ｂは、第１ＣＰＵモジュール１００Ａから受け取った入力データの書き込み指示を、第２メモリ１３０Ｂに出力する。また、第２分配回路部２１２Ｂは、第１ＣＰＵモジュール１００Ａから受け取ったレジスタへの書き込み指示を、第２演算処理部２１０Ｂのレジスタに出力する。
【００９６】
〔ソフトウェアによる実現例〕
第１ＣＰＵモジュール１００Ａ、第２ＣＰＵモジュール１００Ｂの各々の制御ブロック（特に、演算処理部１１０Ａ，１１０Ｂ）、および第１ＣＰＵモジュール２００Ａ、および、第２ＣＰＵモジュール２００Ｂの各々の制御ブロック（特に、演算処理部２１０Ａ，２１０Ｂ）は、集積回路（ＩＣチップ）等に形成された論理回路（ハードウェア）によって実現してもよいし、ＣＰＵ（Central Processing Unit）を用いてソフトウェアによって実現してもよい。
【００９７】
後者の場合、第１ＣＰＵモジュール１００Ａ、第２ＣＰＵモジュール１００Ｂ、第１ＣＰＵモジュール２００Ａ、および、第２ＣＰＵモジュール２００Ｂの各々は、各機能を実現するソフトウェアであるプログラムの命令を実行するＣＰＵ、上記プログラムおよび各種データがコンピュータ（またはＣＰＵ）で読み取り可能に記録されたＲＯＭ（Read Only Memory）または記憶装置（これらを「記録媒体」と称する）、上記プログラムを展開するＲＡＭ（Random Access Memory）等を備えている。そして、コンピュータ（またはＣＰＵ）が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体（通信ネットワークや放送波等）を介して上記コンピュータに供給されてもよい。なお、本発明は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【００９８】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【００９９】
１０  ＰＬＣ（コントローラ）
５０  伝送ケーブル
１００Ａ、２００Ａ  第１ＣＰＵモジュール（ＣＰＵモジュール、制御系ＣＰＵモジュール）
１００Ｂ、２００Ｂ  第２ＣＰＵモジュール（ＣＰＵモジュール、待機系ＣＰＵモジュール）
１１１Ａ、２１１Ａ  第１演算部
１１１Ｂ、２１１Ｂ  第２演算部
１１２Ａ  第１レジスタ
１１２Ｂ  第２レジスタ
１２０Ａ  第１メモリアクセスコントローラ
１２０Ｂ  第２メモリアクセスコントローラ
１３０Ａ  第１メモリ
１３０Ｂ  第２メモリ
１２１  分配回路部（第１メモリ処理部、第２メモリ処理部）
２１２Ａ  第１分配回路部（第１メモリ処理部）
２１２Ｂ  第２分配回路部（第２メモリ処理部）
【図１】
2020087179.tif 000003
【図２】
2020087179.tif 000004
【図３】
2020087179.tif 000005
【図４】
2020087179.tif 000006
【図５】
2020087179.tif 000007