(57)【要約】【課題】稼動系／待機系が切換った場合に等値化データが最新であることを保証できるようにする。【解決手段】稼動系のＣＰＵモジュール１、待機系のＣＰＵモジュール２は、それぞれ、シリアル番号を記憶するシリアルＮＯ．保持メモリ１６，２６を備える。稼動系のマイクロプロセッサ１５は、各定周期プログラム実行毎に等値化処理を行うが、その際、シリアルＮＯ．保持メモリ１６のシリアル番号を更新したうえで、これをグローバル変数等の等値化データと共に待機側の受信バッファ用ＲＡＭ２４に格納させる。待機側のマイクロプロセッサ２５は「受信したシリアル番号＞シリアルＮＯ．保持メモリ２６のシリアル番号」ではない場合には、少なくとも受信したグローバル変数は、ユーザデータ領域２２ａに格納しない（破棄する）。【選択図】図１
2008234014.tif 000002
【特許請求の範囲】
【請求項１】
複数の定周期プログラムを実行する稼動系のコントローラと、待機系のコントローラを有する２重化コントローラシステムであって、
前記稼動系のコントローラは、
前記各定周期プログラムに対応する各ローカル変数と、全ての定周期プログラムが共有するグローバル変数を記憶する第１の変数記憶手段と、
シリアル番号を記憶する第１のシリアル番号記憶手段と、
前記各定周期プログラムの演算実行完了する毎に、前記第１のシリアル番号記憶手段に記憶されているシリアル番号を取得して、該シリアル番号を更新し、該更新したシリアル番号を前記第１のシリアル番号記憶手段に記憶すると共に等値化データフレームにセットし、該実行した定周期プログラムに対応する前記ローカル変数と前記グローバル変数を前記第１の変数記憶手段から収集して前記等値化データフレームに格納して、該等値化データフレームを前記待機系のコントローラに転送する稼動側等値化処理手段とを有し、
前記待機系のコントローラは、
前記各定周期プログラムに対応する各ローカル変数と、全ての定周期プログラムが共有するグローバル変数を記憶する第２の変数記憶手段と、
シリアル番号を記憶する第２のシリアル番号記憶手段と、
前記転送された等値化データフレーム内の前記シリアル番号と、前記第２のシリアル番号記憶手段に記憶されたシリアル番号とを比較することで、正常／異常を判定し、正常と判定された場合には、該等値化データフレーム内のシリアル番号を前記第２のシリアル番号記憶手段に記憶すると共に、該等値化データフレームに格納されている前記ローカル変数とグローバル変数を、前記第２の変数記憶手段に記憶する待機側等値化処理手段と、
を有することを特徴とする２重化コントローラシステム。
【請求項２】
前記待機側等値化処理手段は、異常と判定した場合には、前記第２のシリアル番号記憶手段に記憶しているシリアル番号の更新は行わず、少なくとも等値化データフレームに格納されている前記グローバル変数は、前記第２の変数記憶手段に記憶しないことを特徴とする請求項１記載の２重化コントローラシステム。
【請求項３】
前記第１のシリアル番号記憶手段に記憶されているシリアル番号を更新する処理は、該シリアル番号をインクリメントする処理であり、
前記待機側等値化処理手段は、前記等値化データフレーム内のシリアル番号が、前記第２のシリアル番号記憶手段に記憶されたシリアル番号よりも大きい場合に、正常と判定することを特徴とする請求項１又は２記載の２重化コントローラシステム。
【請求項４】
複数の定周期プログラムを実行する稼動系のコントローラと、待機系のコントローラを有する２重化コントローラシステムにおける前記稼動系のコントローラであって、
前記各定周期プログラムに対応する各ローカル変数と全ての定周期プログラムが共有するグローバル変数を記憶する第１の変数記憶手段と、
シリアル番号を記憶する第１のシリアル番号記憶手段と、
前記各定周期プログラムの演算実行完了する毎に、前記第１のシリアル番号記憶手段に記憶されているシリアル番号を取得して、該シリアル番号を更新し、該更新したシリアル番号を前記第１のシリアル番号記憶手段に記憶すると共に等値化データフレームにセットし、その後に、該実行した定周期プログラムに対応する前記ローカル変数と前記グローバル変数を前記第１の変数記憶手段から収集して前記等値化データフレームに格納して、該等値化データフレームを前記待機系のコントローラに転送する稼動側等値化処理手段と、
を有することを特徴とする稼動系コントローラ。
【請求項５】
複数の定周期プログラムを実行する稼動系のコントローラと、待機系のコントローラを
有する２重化コントローラシステムにおける前記待機系のコントローラであって、
前記各定周期プログラムに対応する各ローカル変数と全ての定周期プログラムが共有するグローバル変数を記憶する第２の変数記憶手段と、
シリアル番号を記憶する第２のシリアル番号記憶手段と、
前記稼動系のコントローラから転送された等値化データフレーム内のシリアル番号と、前記第２のシリアル番号記憶手段に記憶されたシリアル番号とを比較することで、正常／異常を判定し、正常と判定された場合には、該等値化データフレーム内のシリアル番号を前記第２のシリアル番号記憶手段に記憶すると共に、該等値化データフレームに格納されているローカル変数とグローバル変数を、前記第２の変数記憶手段に記憶する待機側等値化処理手段と、
を有することを特徴とする待機系コントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の定周期プログラムエンドでの等値化が可能な２重化コントローラ（プログラマブルコントローラ）における、ユーザデータ等値化方式に関する。
【背景技術】
【０００２】
プログラマブルコントローラ・システムでは、信頼性を向上させるために、ＣＰＵモジュール（プログラマブルコントローラ本体）を待機冗長の２重化構成にする場合がある。この様な２重化コントローラシステムは、例えば、２つのＣＰＵモジュールを１組とし、一方を稼動系、他方を待機系とし、稼動系ＣＰＵモジュールを待機系ＣＰＵモジュールが監視して、稼動系ＣＰＵモジュールに障害等の切替え要因が生じたならば待機系ＣＰＵモジュールが稼動系に切り替る構成である。
【０００３】
図５、図６に、上記従来の２重化コントローラシステムの構成例を示す。
尚、この様な２重化コントローラシステムに関しては、例えば特許文献１，２等に開示されている。
【０００４】
図５に、上記２重化コントローラシステム全体の概略構成を示す。
図示の２重化コントローラシステムは、ＣＰＵモジュール１０１−１、ＣＰＵモジュール１０１−２、及び各制御対象機器とのデータ入出力を行う複数のＩ／Ｏユニット１０２より成るＩ／Ｏ群から構成されている。尚、ここでは、ＣＰＵモジュール１０１−１が稼動系、ＣＰＵモジュール１０１−２がその待機系となっている場合を例にして説明する。
【０００５】
稼動系となっているＣＰＵモジュール１０１−１は、その内部に格納されたプログラム（通常、定周期に実行されるプログラム；定周期プログラム）を実行することで、各Ｉ／Ｏユニット１０２に対して制御データを出力して（又は各Ｉ／Ｏユニットからセンサ計測値等を読み出して）、各制御対象機器を制御する。
【０００６】
一方、待機系となっているＣＰＵモジュール１０１−２は、稼動系のＣＰＵモジュール１０１−１を監視しており、稼動系ＣＰＵモジュール１０１−１に故障等の何らかの切替え要因が生じると、稼動／待機切り替え処理を実行して、ＣＰＵモジュール１０１−２が稼動系となって、ＣＰＵモジュール１０１−１が行っていた処理を引き継ぐ。
【０００７】
ＣＰＵモジュール１０１−１、ＣＰＵモジュール１０１−２及び各Ｉ／Ｏユニット１０２は、システムバス１０３によって接続されており、稼動系ＣＰＵモジュール１０１−１はシステムバス１０３を介して各Ｉ／Ｏユニット１０２に対して出力データ（制御データ）を送信し、また各Ｉ／Ｏユニット１０２からは、当該ユニット１０２に接続されている不図示の制御対象機器からの計測値等のデータを受信している。
【０００８】
また２重化されているＣＰＵモジュール１０１−１とＣＰＵモジュール１０１−２との間には等値化バス１０４を備え、稼動系／待機系の切替えが生じたときに制御データ等のユーザデータの整合性を持たせる為、この等値化バス１０４を介して稼動系ＣＰＵモジュール１０１−１から待機系ＣＰＵモジュール１０１−２にユーザデータ（グローバル変数、ローカル変数等）を送信して等値化処理を行っている。
【０００９】
図６に、図５に示す２重化コントローラシステムにおけるＣＰＵモジュール１０１−１、ＣＰＵモジュール１０１−２の詳細な構成例を示す。
ＣＰＵモジュール１０１−１、１０１−２は、プログラマブルコントローラ本体である
が、ここでは等値化処理に係わる構成のみを示し、他の構成は省略して示す。
【００１０】
図６において、ＣＰＵモジュール１０１−１は、プログラムＲＡＭ１１１、データＲＡＭ１１２、等値化バス制御部１１３、受信バッファ用ＲＡＭ１１４、及びマイクロプロセッサ１１５等を有する。
【００１１】
プログラムＲＡＭ１１１には、ユーザプログラム１１１ａが格納される。ユーザプログラム１１１ａとは、例えば上記定周期プログラムである。更に、等値化処理を実現させる為のアプリケーションプログラムも格納されている。
【００１２】
データＲＡＭ１１２は、ユーザデータ領域１１２ａ、等値化データ転送情報１１２ｂを、格納する。
ユーザデータ領域１１２ａには、特許文献２等で説明されているように、各定周期プログラム毎に対応する各ローカル変数と、グローバル変数とが混在して格納されている。
【００１３】
等値化データ転送情報１１２ｂは、各ローカル変数とグローバル変数のユーザデータ領域１１２ａにおける格納位置を示す情報（特許文献２におけるマッピング情報）である。
等値化バス制御部１１３は、主に等値化バス１０４を介して等値化を行う為のデータ転送処理専用の構成であり、マイクロプロセッサ１１５から等値化すべきデータ（ローカル変数、グローバル変数等）を渡されると、待機側の等値化バス制御部１２３と連動して、この等値化データを待機側の受信バッファ用ＲＡＭ１２４に格納させる機能を有する。尚、等値化バス制御部１１３は、例えば特許文献２で説明されている“ＳＧＭ(Sameness data Gather Memory control)”に相当する。
【００１４】
マイクロプロセッサ１１５は、ＣＰＵモジュール１０１−１全体を制御する中央処理装置（ＣＰＵチップ等）であり、例えば、各定周期プログラムを実行する毎に等値化処理を実行する。等値化処理は、稼動側の等値化処理と待機側の等値化処理から成り、ここでは稼動側の等値化処理の一部を実行する。すなわち、等値化データ（実行した定周期プログラムに対応するローカル変数とグローバル変数）を、ユーザデータ領域１１２ａから収集して、これをプログラム番号等と共に等値化バス制御部１１３に渡す。等値化バス制御部１１３は、上記の通り、この等値化データをＣＰＵモジュール１０１−２側に転送して格納させる。
【００１５】
また、待機系のＣＰＵモジュール１０１−２は、プログラムＲＡＭ１２１、データＲＡＭ１２２、等値化バス制御部１２３、受信バッファ用ＲＡＭ１２４、及びマイクロプロセッサ１２５等を有する。この構成自体は、稼動系のＣＰＵモジュール１０１−１と同じである。そして、上記待機側の等値化処理を行う。すなわち、上記の様に受信バッファ用ＲＡＭ１２４に等値化データが格納された後は、マイクロプロセッサ１２５が等値化データ転送情報（マッピング情報）に従って、受信バッファ用ＲＡＭ１２４に格納された等値化データをデータＲＡＭ１２２のユーザデータ領域１２２ａへ分配・格納する。
【００１６】
図７に、従来の等値化処理に伴う等値化データの転送、格納の様子を示す。換言すれば、上記等値化バス１０４を介して転送する等値化データのデータ構成、受信バッファ用ＲＡＭ１２４のデータ格納例、及びユーザデータ領域１２２ａのデータ格納例を示す。
【００１７】
まず、図上左側に示す等値化データフレームは、ヘッダ部とデータ部とから成る。等値化データは、各定周期プログラム実行完了毎に送信され、ヘッダ部には実行された定周期プログラムの番号等が格納され、データ部には、実行された定周期プログラムに係わるローカル変数とグローバル変数が格納される。
【００１８】
受信バッファ用ＲＡＭ１２４には、図示の通り、各定周期プログラム毎に等値化データの格納領域が設けられており、等値化バス制御部１２３は、上記実行された定周期プログラム番号に基づいて、上記データ部のデータを該当する格納領域に格納する。
【００１９】
ユーザデータ領域１２２ａには、上記ユーザデータ領域１１２ａと同様、グローバル変数と各ローカル変数が格納され、ユーザデータ領域１１２ａと同じデータが格納されているようにする為に等値化処理が行われる。
【００２０】
ここで、上記の通りマイクロプロセッサ１２５が、受信バッファ用ＲＡＭ１２４に格納された等値化データを、ユーザデータ領域１２２ａの該当領域に格納するが、その際ユーザデータ領域１２２ａにおいて、各ローカル変数は該当する定周期プログラムが実行されたときのみ更新されるのに対して、グローバル変数は全ての定周期プログラムで共有されるのでその都度更新（上書き）されることになる。この為、以下に図８、図９を参照して説明する問題が生じる場合がある。
【００２１】
図８、図９には、定周期プログラムが実行される場合のスケジュール例を示す。定周期プログラムは複数あるが、ここでは簡単の為、定周期プログラムＡ，Ｂの２つのみであるものとする。
【００２２】
図８に示す例では、定周期プログラムＢの演算中に定周期プログラムＡの起動要求が発生し、定周期プログラムＢが中断され定周期プログラムＡが実行される。そして、定周期プログラムＡのプログラムエンドにて等値化データ収集・転送（上記稼動側の等値化処理）が実行・完了され、更に待機系は転送された等値化データの分配処理（上記待機側の等値化処理）を実行・完了している。その後、定周期プログラムＢのプログラムエンドにて等値化データ収集・転送が実行・完了され、更に待機系は転送された等値化データの分配を実行・完了する。
【００２３】
尚、上記等値化データ収集・転送の実行・完了により等値化データが待機側の受信バッファ用ＲＡＭ１２４に格納された状態になり、この受信バッファ用ＲＡＭ１２４に格納された等値化データが、上記分配処理により、データＲＡＭ１２２のユーザデータ領域１２２ａに格納されることになる。その際、図７に示す通り、グローバル変数、ローカル変数は、各々、ユーザデータ領域１２２ａ内の所定の記憶領域に格納されることになる。
【００２４】
図８に示す例のように演算中に中断された場合には問題はないが、図９に示す例のように等値化処理中に中断された場合には問題が生じる場合がある。これは、特に、等値化データ収集後であって上記分配処理実行前に中断された場合に問題が生じる。
【００２５】
図９に、図８と比べて、定周期プログラム実行要求のタイミングが異なる場合に定周期プログラムＡ，Ｂが実行される場合のスケシュール例を示す。
この例では、定周期プログラムＢのエンドにて等値化処理中に（上記の通り等値化データ収集後であって上記分配処理実行前に）定周期プログラムＡの起動要求が発生し割込み、定周期プログラムＢが中断され定周期プログラムＡが実行される。そして、定周期プログラムＡのエンドにて等値化データ収集・転送が実行・完了し、更に待機系は転送された等値化データの分配を実行・完了している。その後、中断していた定周期プログラムＢの等値化処理を再開してこれが実行・完了され、更に待機系は転送された等値化データの分配を実行・完了する。
【００２６】
ここで、例えば、グローバル変数が、全ての定周期プログラムのトータルの実行回数を意味するものであったとする。そして、仮に、図８又は図９の処理実行前に全定周期プログラム合わせて１２３３回実行されていたものとする。この場合、当然、グローバル変数
＝１２３３が記憶されていることになる。この場合、図８又は図９の処理によって定周期プログラムが２回実行されるのであるから、当然、図８又は図９の処理終了時点ではグローバル変数＝１２３５になっており、待機系のユーザデータ領域１２２ａに格納されているグローバル変数の値も１２３５になっていなければならない。
【００２７】
例えば、演算処理の最後にグローバル変数の更新が行われるとした場合、図８の例では、まず、定周期プログラムＢの演算実行されるが、グローバル変数の更新前に中断され、定周期プログラムＡの演算実行の際に、グローバル変数＝１２３３が読み出されて＋１インクリメントされることで、グローバル変数＝１２３４に変更される。
【００２８】
そして、等値化処理によって、待機系のユーザデータ領域１２２ａに格納されているグローバル変数の値も１２３４になる。その後に中断していた定周期プログラムＢの演算実行によりグローバル変数＝１２３５に変更され、等値化処理によって、待機系のユーザデータ領域１２２ａに格納されているグローバル変数の値も１２３５になる。従って、この場合には問題は生じない。
【００２９】
尚、これは、例えば演算処理の最初にグローバル変数の更新が行われるとした場合でも、同様に問題は生じない。すなわち、この場合には、まず、定周期プログラムＢの演算実行によりグローバル変数＝１２３４に変更され、その後に演算中断により等値化処理が行われることなく定周期プログラムＡの演算実行によりグローバル変数＝１２３５に変更されて、等値化処理により待機系のユーザデータ領域１２２ａに格納されているグローバル変数の値も１２３５になる。その後、定周期プログラムＢの処理が再開されて等値化処理を実行する際には、所定の記憶領域に記憶されているグローバル変数の値を読み出して待機系側に転送することになるが、グローバル変数＝１２３５となっているので、結局、等値化処理により待機系のユーザデータ領域１２２ａに格納されているグローバル変数が更新されても、その値は１２３５のままとなる。
【００３０】
一方、図９に示すタイミングの処理が行われた場合、まず、定周期プログラムＢの演算実行によりグローバル変数＝１２３４に変更され、更に等値化処理実行により等値化データを収集して（ローカル変数、グローバル変数の値等をユーザデータ領域１１２ａ内の所定の記憶領域から読み出して）待機系側に転送することになるが、この等値化データを読み出して一時的に保持した後であって上記分配処理実行前（例えば等値化データを待機系側に転送する前、あるいは転送完了しているが分配処理は未だ実行されていないとき等）中断された場合に、問題が生じることになる。すなわち、この場合、定周期プログラムＢがグローバル変数の値‘１２３４’を既に収集した状態で定周期プログラムＡの処理に移行し、定周期プログラムＡの演算及び等値化処理によって、待機系のユーザデータ領域１２２ａに格納されているグローバル変数の値が‘１２３５’に更新される。その後、定周期プログラムＢが再開されると、上記グローバル変数の値‘１２３４’を待機系側に転送する為、ユーザデータ領域１２２ａに格納されているグローバル変数の値が１２３４に更新されてしまうという問題が生じる（古いデータが格納されてしまう）。
【００３１】
よって、この後に稼動系／待機系が切換った場合に、ユーザプログラムは最新ではないユーザデータにより演算することになりコントローラシステム動作に影響を与えてしまうという問題点がある。
【００３２】
尚、上記説明では、分かり易くする為に、グローバル変数がトータルの実行回数を意味するものとして説明した為、待機側でグローバル変数の値を比較すれば、‘１２３４’ ＜‘１２３５’であるので、‘１２３５’の方が新しい値であることが分かるが、グローバル変数がこの様な意味であるとは限らないので、グローバル変数の値を比較しても、必ずしも新旧の判断が出来るものではない。
【特許文献１】特開２００３−２９６１３３号公報
【特許文献２】特開２００５−９２５２０号公報
【発明の開示】
【発明が解決しようとする課題】
【００３３】
上記従来の構成、すなわち稼動系ＣＰＵモジュールが複数の定周期プログラムを実行し、各定周期プログラムエンドにて等値化を行い、ユーザデータ等値化の実行中に上位レベル定周期プログラムの割込みが発生する可能性がある構成において、稼動系／待機系が切換った場合に各定周期プログラムエンドでの等値化データが最新であることを保証する必要がある。
【００３４】
本発明の課題は、稼動、待機のＣＰＵモジュールより成り複数の定周期プログラムを実行する２重化コントローラシステムにおいて、定周期プログラムのデータ等値化処理の際に、等値化データのうち特にグローバル変数に関して、旧い値が待機側に格納されてしまうことを防止し、稼動系／待機系が切換った場合に等値化データが最新であることを保証できる２重化コントローラシステムを提供することである。
【課題を解決するための手段】
【００３５】
本発明の２重化コントローラシステムは、複数の定周期プログラムを実行する稼動系のコントローラと、待機系のコントローラを有する２重化コントローラシステムであって、前記稼動系のコントローラは、前記各定周期プログラムに対応する各ローカル変数と、全ての定周期プログラムが共有するグローバル変数を記憶する第１の変数記憶手段と、シリアル番号を記憶する第１のシリアル番号記憶手段と、前記各定周期プログラムの演算実行完了する毎に、前記第１のシリアル番号記憶手段に記憶されているシリアル番号を取得して、該シリアル番号を更新し、該更新したシリアル番号を前記第１のシリアル番号記憶手段に記憶すると共に等値化データフレームにセットし、該実行した定周期プログラムに対応する前記ローカル変数と前記グローバル変数を前記第１の変数記憶手段から収集して前記等値化データフレームに格納して、該等値化データフレームを前記待機系のコントローラに転送する稼動側等値化処理手段とを有し、前記待機系のコントローラは、前記各定周期プログラムに対応する各ローカル変数と、全ての定周期プログラムが共有するグローバル変数を記憶する第２の変数記憶手段と、シリアル番号を記憶する第２のシリアル番号記憶手段と、前記転送された等値化データフレーム内の前記シリアル番号と、前記第２のシリアル番号記憶手段に記憶されたシリアル番号とを比較することで、正常／異常を判定し、正常と判定された場合には、該等値化データフレーム内のシリアル番号を前記第２のシリアル番号記憶手段に記憶すると共に、該等値化データフレームに格納されている前記ローカル変数とグローバル変数を、前記第２の変数記憶手段に記憶する待機側等値化処理手段とを有する。
【００３６】
そして、例えば、前記待機側等値化処理手段は、異常と判定した場合には、前記第２のシリアル番号記憶手段に記憶しているシリアル番号の更新は行わず、少なくとも等値化データフレームに格納されている前記グローバル変数は、前記第２の変数記憶手段に記憶しないようにする。
【００３７】
前記稼動系のコントローラ側では、上記演算実行により上記第１の変数記憶手段のローカル変数、グローバル変数が更新され、その後の等値化処理においてこれらローカル変数、グローバル変数を収集するが、その際に、シリアル番号を更新して、該更新したシリアル番号を等値化データフレームにセットする。そして、該等値化データフレームを前記待機系のコントローラに転送するが、例えばその前に、割り込みにより中断されて他の定周期プログラムが実行された場合、その演算実行により上記第１の変数記憶手段のローカル変数、グローバル変数が更に更新され、その等値化処理が行われるが、シリアル番号も更
に更新されたうえで待機側に通知されて第２のシリアル番号記憶手段に記憶される。従ってその後に上記中断された等値化処理が再開されて上記等値化データフレームが待機側に転送されると、待機側ではシリアル番号によって異常である（グローバル変数が古い）か否かを判定できるので、異常である場合には前記第２の変数記憶手段のグローバル変数は更新しない。これによって上記課題を解決できる。
【００３８】
また、例えば、前記第１のシリアル番号記憶手段に記憶されているシリアル番号を更新する処理は、該シリアル番号をインクリメントする処理であり、前記待機側等値化処理手段は、前記等値化データフレーム内のシリアル番号が、前記第２のシリアル番号記憶手段に記憶されたシリアル番号よりも大きい場合に、正常と判定する。
【発明の効果】
【００３９】
本発明の２重化コントローラシステムによれば、稼動、待機のＣＰＵモジュールより成り複数の定周期プログラムを実行する２重化コントローラシステムにおいて、定周期プログラムのデータ等値化処理の際に、等値化データのうち特にグローバル変数に関して、古い値が待機側に格納されてしまうことを防止し、稼動系／待機系が切換った場合に等値化データが最新であることを保証できる。
【発明を実施するための最良の形態】
【００４０】
以下、図面を参照して、本発明の実施の形態について説明する。
図１に、本例の２重化コントローラシステムにおけるＣＰＵモジュール１、ＣＰＵモジュール２の構成例を示す。尚、本例の２重化コントローラシステム全体構成は、上記図５に示すものと同様であってよい。
【００４１】
ＣＰＵモジュール１、２は、プログラマブルコントローラ本体であるが、ここでは等値化処理に係わる構成のみを示し、他の構成は省略して示す。また、ここでは、ＣＰＵモジュール１が稼動系、ＣＰＵモジュール２が待機系であるものとする。
【００４２】
図１において、ＣＰＵモジュール１は、プログラムＲＡＭ１１、データＲＡＭ１２、等値化バス制御部１３、受信バッファ用ＲＡＭ１４、マイクロプロセッサ１５、及びシリアルＮＯ．保持メモリ１６等を有する。
【００４３】
プログラムＲＡＭ１１には、ユーザプログラム１１ａが格納される。ユーザプログラム１１ａとは、例えば上記各定周期プログラムである。尚、本例のシステムにおいては、プログラムＲＡＭ１１には、更に、後述する図３（ａ）に示す処理等を含む稼動側等値化処理をマイクロプロセッサ１５によって実現させるアプリケーションプログラムも格納されている。
【００４４】
データＲＡＭ１２は、ユーザデータ領域１２ａを有し、等値化データ転送情報１２ｂを記憶している。
ユーザデータ領域１２ａには、上記特許文献２等で説明されているように、各定周期プログラム毎に対応する各ローカル変数と、全ての定周期プログラムに共通のグローバル変数とが混在で格納されている。
【００４５】
等値化データ転送情報１２ｂは、上記特許文献２におけるマッピング情報に相当するものであり、上記各ローカル変数とグローバル変数のユーザデータ領域１２ａにおける格納位置を示す情報である。
【００４６】
等値化バス制御部１３は、主に等値化バス３を介して等値化を行う為のデータ転送処理専用の構成であり、マイクロプロセッサ１５から等値化すべきデータ等（後述する等値化
データフレーム）が渡されると、待機側の等値化バス制御部２３と連動して、この等値化データを待機側の受信バッファ用ＲＡＭ２４に格納させる機能を有する。尚、等値化バス制御部１３は、例えば上記“ＳＧＭ(Sameness data Gather Memory control)”に相当する。
【００４７】
マイクロプロセッサ１５は、ＣＰＵモジュール１全体を制御する中央処理装置（ＣＰＵチップ等）であり、上記プログラムＲＡＭ１１に格納されているユーザプログラム１１ａや上記アプリケーションプログラムを用いて、基本的には上記特許文献２等のような従来より行われている演算処理や稼動側等値化処理を実行するが、更に稼動側等値化処理の際に図３（ａ）に示す処理を実行する。その際に、シリアルＮＯ．保持メモリ１６に記憶されているシリアルＮＯ．を用いる。詳しくは後述する。
【００４８】
また、待機系のＣＰＵモジュール２は、プログラムＲＡＭ２１、データＲＡＭ２２、等値化バス制御部２３、受信バッファ用ＲＡＭ２４、マイクロプロセッサ２５、及びシリアルＮＯ．保持メモリ２６等を有する。この構成自体は、稼動系のＣＰＵモジュール１と同じであるので、特に説明しないが、マイクロプロセッサ２５は、プログラムＲＡＭ２１に格納されているアプリケーションプログラムを用いて、基本的には上記特許文献２等のような従来より行われている待機側等値化処理を実行するが、更に待機側等値化処理の際に図３（ｂ）に示す処理を実行する。その際に、シリアルＮＯ．保持メモリ２６に記憶されているシリアルＮＯ．を用いる。詳しくは後述する。
【００４９】
図２に、等値化処理に伴う等値化データの転送、格納の様子を示す。尚、図２において上記図７と略同様のものについては説明を省略する。図２が図７と異なる点は、等値化データフレームのヘッダ部に送信シリアルＮＯ．も格納され、この送信シリアルＮＯ．が等値化データと共に待機側の受信バッファ用ＲＡＭ２４に格納され、マイクロプロセッサ２５がこの送信シリアルＮＯ．等を参照してユーザデータ領域１２ａへの等値化データ格納処理を行う点である。
【００５０】
更に詳しくは、まず、図１に示す通り、ＣＰＵモジュール１内には、シリアルＮＯ．保持メモリ１６が新たに備えられる。また、図２に示す通り、等値化データフレームのヘッダ部内に送信シリアル番号フィールドを定義してある。また、受信バッファ用ＲＡＭ２４においても各定周期プログラム毎の等値化データ格納領域に送信シリアルＮＯ．も格納されるように定義してある。
【００５１】
そして、まず、図３（ａ）に示すように、稼動系ＣＰＵモジュール１の等値化データ送信処理では、マイクロプロセッサ１５は、シリアルＮＯ．保持メモリ１６に格納された送信シリアル番号を、ワーク変数であるＴＭＰ１に取得し（ステップＳ１１）、ＴＭＰ１の値を更新（例えばインクリメント（例えば＋１等））して（ステップＳ１２）等値化データフレームのヘッダ部内にセットすると共に（ステップＳ１３）、更新したＴＭＰ１の値をシリアルＮＯ．保持メモリ１６に格納する（シリアルＮＯ．保持メモリ１６の送信シリアルＮＯ．を更新する）（ステップＳ１４）。尚、上記インクリメント処理は、上記＋１に限らず、＋２、＋３等であってもよい。すなわち、所定値をプラスすればよい。あるいは、インクリメントに限らず、−１、−２、−３等のデクリメントであってもよい（但し、この場合には、後述するステップＳ２３の処理は「ＴＭＰ１＜ＴＭＰ２？」となる）。
【００５２】
また、図示しないが、等値化データフレームのヘッダ部には等値化実行定周期プログラム番号もセットされるし、等値化データ（実行した定周期プログラムに対応するローカル変数、及びグローバル変数等）を、等値化データ転送情報１２ｂ（マッピング情報）を参照してユーザデータ領域１２ａから取り出して、等値化データフレームのデータ部にセットする処理も行われる。そして、等値化データフレームを待機系のＣＰＵモジュール側へ
転送する。尚、上記等値化実行定周期プログラム番号とは、この等値化処理に係わる定周期プログラムの定周期プログラム番号である。
【００５３】
この転送処理は、上記の通り等値化バス３を介して、等値化バス制御部１３と等値化バス制御部２３とが連動して、等値化データフレームを待機側の受信バッファ用ＲＡＭ２４に格納するものである。ここで、本例では、受信バッファ用ＲＡＭ２４には各定周期プログラム毎の格納領域が設けられており、この転送処理の際には、図２に示す通り、等値化データフレームの上記等値化実行定周期プログラム番号に基づいて、等値化データフレームを該当する格納領域に格納する（振り分ける）。例えば、定周期プログラムＡに係わる等値化処理であれば、等値化実行定周期プログラム番号＝Ａとなっているので、この等値化データフレームは受信バッファ用ＲＡＭ２４内の定周期プログラムＡ用の格納領域に格納する。
【００５４】
一方、待機系ＣＰＵモジュール２では、上記の通り等値化データフレームを受信バッファ用ＲＡＭ２４に格納する処理が完了すると、マイクロプロセッサ２５は、まず、受信バッファ用ＲＡＭ２４に格納された送信シリアルＮＯ．を、ワーク変数であるＴＭＰ１に取得し（ステップＳ２１）、更にシリアルＮＯ．保持メモリ２６に格納されているシリアルＮＯ．を、ワーク変数であるＴＭＰ２に取得する（ステップＳ２２）。
【００５５】
そして、ＴＭＰ１の値とＴＭＰ２の値とを比較して、もしＴＭＰ１＞ＴＭＰ２である場合は（ステップＳ２３，ＹＥＳ）、最新の等値化データであると判断し（つまり正常であると判定し）、ＴＭＰ１の値をシリアルＮＯ．保持メモリ２６にセットすると共に（ステップＳ２４）、等値化データ分配処理（受信バッファ用ＲＡＭ２４に格納された等値化データを、ユーザデータ領域２２ａ内の該当領域へ格納する処理）を実行する（ステップＳ２５）。この等値化データ分配処理自体は、上記特許文献２と同様に、等値化データ転送情報２２ｂ（マッピング情報）を参照して、ローカル変数、グローバル変数をそれぞれ、ユーザデータ領域２２ａ内の該当領域へ格納する。
【００５６】
一方、ＴＭＰ１＞ＴＭＰ２ではない場合は（ステップＳ２３，ＮＯ）、最新でない等値化データであると判断し（つまり、異常と判定し）、上記シリアルＮＯ．保持メモリ２６の更新や等値化データ分配処理を実行せずに（但し、図には示していないが、分配処理を行わないのはグローバル変数のみであり、ローカル変数等は分配処理を行う）、本処理を終了する。
【００５７】
図４に、図９に示すスケジュール例で定周期プログラムが実行された場合のシリアルＮＯ．とグローバル変数の更新状態を示す。
図９で説明した通り、稼動系ＣＰＵモジュール側では、まず、定周期プログラムＢが実行されて演算処理によってグローバル変数＝１２３４となり、演算処理完了後に等値化処理が起動され、まず、シリアルＮＯ．保持メモリ１６に格納されているシリアルＮＯ．＝“ｎ”を読み出して、上記ステップＳ１２〜Ｓ１４の処理により“ｎ＋１”を等値化データフレームにセットすると共にシリアルＮＯ．メモリ１６に格納（上書き）する。また、従来と同様に等値化データ収集等も行って、等値化データフレームの転送処理を行う。そして、少なくともグローバル変数＝１２３４を収集・保持した後であって上記待機側の等値化処理が実行される前に、割り込みにより上位レベルである定周期プログラムＡが起動されたとする。
【００５８】
この場合、定周期プログラムＡの演算処理によりグローバル変数＝１２３５となり、演算処理完了後に等値化処理が起動され、まず、シリアルＮＯ．保持メモリ１６に格納されている“ｎ＋１”を読み出して、上記ステップＳ１２〜Ｓ１４の処理により“ｎ＋２”を等値化データフレームにセットすると共にシリアルＮＯ．メモリ１６に格納する。また、
従来と同様に等値化データ収集（グローバル変数＝１２３５等を取得）を行い、収集データを等値化データフレームにセットして（保持して）待機側に転送し、更に待機側の等値化処理が実行・完了されることで、最新のグローバル変数の値（＝１２３５）がユーザデータ領域２２ａにおけるグローバル変数格納領域に格納された状態となる。
【００５９】
すなわち、この場合の待機側の等値化処理、すなわち定周期プログラムＡの等値化データの分配処理では、図３（ｂ）の処理によって、ＲＡＭ２４に格納されたシリアルＮＯ．＝“ｎ＋２”とシリアルＮＯ．保持メモリ２６に格納されている“ｎ”との比較チェックの結果、ステップＳ２３の判定はＹＥＳとなるので、上記ステップＳ２４、Ｓ２５の処理が実行されることになる。つまり、ユーザデータ領域２２ａのグローバル変数の更新（当然、ローカル変数も更新）、シリアルＮＯ．保持メモリ２６のシリアルＮＯ．の更新が行われる。従って、ユーザデータ領域２２ａのグローバル変数＝１２３５、シリアルＮＯ．保持メモリ２６のシリアルＮＯ．＝“ｎ＋２”となる。
【００６０】
その後、定周期プログラムＢの等値化処理が再開され、待機側の等値化処理を実行する際には、ＲＡＭ２４における定周期プログラムＢの等値化データ格納領域には、送信シリアルＮＯ．＝“ｎ＋１”、グローバル変数＝１２３４等が格納されていることになる。
【００６１】
従って、この場合の待機側の等値化処理（定周期プログラムＢの等値化データの分配処理）では、ＲＡＭ２４に格納されたシリアルＮＯ．＝“ｎ＋１”とシリアルＮＯ．保持メモリ２６のシリアルＮＯ．＝“ｎ＋２”とが比較チェックされることになるので、ステップＳ２３の判定はＮＯとなり、上記ステップＳ２４、Ｓ２５の処理は実行されない（但し、上記の通り、ユーザデータ領域２２ａのローカル変数は更新される）。従って、ユーザデータ領域２２ａのグローバル変数＝１２３５、シリアルＮＯ．保持メモリ２６のシリアルＮＯ．＝“ｎ＋２”のままとなり、待機系ＣＰＵモジュール側に格納されるグローバル変数は、最新のデータとなるので（つまり、稼動と待機とで同じ値となる）、その後に稼動系／待機系が切換った場合にも問題は生じないことになる。尚、シリアルＮＯ．保持メモリ１６、２６に格納されるシリアルＮＯ．も両方とも“ｎ＋２”となる（稼動、待機で同じ値となる）。
【００６２】
このように、稼動系ＣＰＵモジュールから送信される各等値化フレーム内にシリアル番号を格納し、待機系ＣＰＵモジュールにてシリアル番号のチェックを行い、異常が無い場合のみ（最新の等値化データならば）グローバル変数の分配処理も行うことにより、稼動系／待機系が切換った場合に、最新のユーザデータによりプログラムが実行されることを保証できる。
【００６３】
以上説明したように、本例の２重化コントローラシステムによれば、複数の定周期プログラムを実行可能とし、各定周期プログラムエンドにて等値化をおこなう場合に、ユーザデータ等値化の実行中に上位レベル定周期プログラムの割込みが発生する場合においても、稼動系／待機系が切換った場合に、最新のユーザデータによりプログラムを実行することができる。
【図面の簡単な説明】
【００６４】
【図１】本例の２重化コントローラシステムにおけるＣＰＵモジュールの構成例である。
【図２】等値化処理に伴う等値化データの転送、格納の様子を示す図である。
【図３】（ａ）は等値化データ送信処理、（ｂ）は等値化データ受信処理を示すフローチャート図である。
【図４】図９に示すスケジュール例で定周期プログラムが実行された場合のグローバル変数等の更新状態を示す図である。
【図５】２重化コントローラシステム全体の概略構成を示す図である。
【図６】図５に示す２重化コントローラシステムにおける各ＣＰＵモジュールの構成例である。
【図７】従来の等値化処理に伴う等値化データの転送、格納の様子を示す図である。
【図８】定周期プログラムが実行される場合のスケジュール例（その１）である。
【図９】定周期プログラムが実行される場合のスケジュール例（その２）である。
【符号の説明】
【００６５】
１      ＣＰＵモジュール（稼動系）
２      ＣＰＵモジュール（待機系）
１１      プログラムＲＡＭ
１１ａ      ユーザプログラム
１２      データＲＡＭ
１２ａ      ユーザデータ領域
１２ｂ      等値化データ転送情報
１３      等値化バス制御部
１４      受信バッファ用ＲＡＭ
１５      マイクロプロセッサ
１６      シリアルＮＯ．保持メモリ
２１      プログラムＲＡＭ
２１ａ      ユーザプログラム
２２      データＲＡＭ
２２ａ      ユーザデータ領域
２２ｂ      等値化データ転送情報
２３      等値化バス制御部
２４      受信バッファ用ＲＡＭ
２５      マイクロプロセッサ
２６      シリアルＮＯ．保持メモリ
【図１】
2008234014.tif 000003
【図２】
2008234014.tif 000004
【図３】
2008234014.tif 000005
【図４】
2008234014.tif 000006
【図５】
2008234014.tif 000007
【図６】
2008234014.tif 000008
【図７】
2008234014.tif 000009
【図８】
2008234014.tif 000010
【図９】
2008234014.tif 000011