(57)【要約】【課題】  データ転送時間オーバヘッドを軽減する。【解決手段】  ＣＰＵ支援ツール５から稼動系のＣＰＵモジュール１、待機系のＣＰＵモジュール２各々に、各定周期プログラム毎のローカル変数のマッピング情報、及びグローバル変数のマッピング情報をダウンロードしておく。稼動系のＣＰＵモジュール１は、任意の定周期プログラム実行毎に行う等値化処理において、マッピング情報に基づいて、実行した定周期プログラムに係わるローカル変数のみと、グローバル変数とを、待機系のＣＰＵモジュール２側に転送する。【選択図】      図１
2005092520.tif 000002
【特許請求の範囲】
【請求項１】
稼動系と待機系のコントローラを有し、複数の定周期プログラムを実行する２重化コントローラシステムにおいて、
前記稼動系のコントローラは、
前記各定周期プログラムに対応する各ローカル変数を記憶する第１の記憶手段と、
前記各ローカル変数の前記第１の記憶手段における格納位置を示すマッピング情報を記憶する第２の記憶手段と、
前記各定周期プログラムを実行する毎に等値化処理を実行し、該各等値化処理において、前記マッピング情報を参照して、実行した定周期プログラムに対応するローカル変数の格納位置を取得することで、該実行した定周期プログラムに対応するローカル変数を前記第１の記憶手段から取得して前記待機系のコントローラに転送する第１の制御手段と、
を有することを特徴とする２重化コントローラシステム。
【請求項２】
前記待機系のコントローラは、
前記各定周期プログラムに対応する各ローカル変数を記憶する第３の記憶手段と、
前記各ローカル変数の前記第３の記憶手段における格納位置を示すマッピング情報を記憶する第４の記憶手段と、
前記第１の制御手段によって転送されてくる前記実行した定周期プログラムに対応するローカル変数を、前記第４の記憶手段のマッピング情報に基づいて、前記第３の記憶手段の所定位置に格納する第２の制御手段と、
を有することを特徴とする請求項１記載の２重化コントローラシステム。
【請求項３】
前記マッピング情報は、前記各ローカル変数を構成する変数群の中で等値化すべき変数の格納位置を示す情報であり、
前記第１の制御手段は、前記実行した定周期プログラムに対応するローカル変数を構成する変数群の中から等値化すべき変数を、前記第１の記憶手段から取得して前記待機系のコントローラに転送することを特徴とする請求項１記載の２重化コントローラシステム。
【請求項４】
前記稼動系と待機系の各コントローラに接続し、前記定周期プログラムを該各コントローラにダウンロードさせると共に前記マッピング情報をダウンロードさせる支援装置を更に有することを特徴とする請求項１〜３の何れかに記載の２重化コントローラシステム。
【請求項５】
稼動系と待機系のコントローラを有し、複数の定周期プログラムを実行する２重化コントローラシステムにおける等値化方法であって、
各定周期プログラムを実行する毎に等値化処理を実行し、該各等値化処理において、前記各定周期プログラムに対応する各ローカル変数の格納位置を示すマッピング情報を用いて、実行した定周期プログラムに対応するローカル変数のみを等値化することを特徴とする２重化コントローラシステムにおける等値化方法。
【請求項６】
稼動系と待機系のコントローラを有し、複数の定周期プログラムを実行する２重化コントローラシステムのコンピュータにおいて、
各定周期プログラムを実行する毎に等値化処理を実行し、該各等値化処理において、前記各定周期プログラムに対応する各ローカル変数の格納位置を示すマッピング情報を用いて、実行した定周期プログラムに対応するローカル変数のみを等値化する機能を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、待機冗長２重化コントローラ（プログラマブルコントローラ）における等値化方法等に関する。
【背景技術】
【０００２】
現在、プラント、工場などでは、工作機械や計測装置等の機器のシーケンス制御に多くのプログラマブルコントローラ等のコントローラを用い、ＦＡ（ファクトリーオートメーション）化を実現している。
【０００３】
このようなプログラマブルコントローラ・システムでは、信頼性を向上させるためにＣＰＵモジュール（プログラマブルコントローラ本体）を待機冗長の２重化構成にする場合がある。待機冗長の冗長２重化構成は、２つのＣＰＵモジュールを１組とし、一方を稼動系、他方を待機系とし、稼動系ＣＰＵモジュールを待機系ＣＰＵモジュールが監視して、稼動系ＣＰＵモジュールに障害等の切替え要因が生じたならば待機系ＣＰＵモジュールが稼動系に切り替る構成である。
【０００４】
図８に２重化して冗長性を持たせたコントローラの一般的なシステム構成を示す。
図示の２重化コントローラシステムは、ＣＰＵモジュール１０１−１、ＣＰＵモジュール１０１−２、及び各制御対象機器とのデータ入出力を行う複数のＩ／Ｏユニット１０２−１〜１０２−ｎより成るＩ／Ｏ群１０２から構成されている。尚、ここでは、ＣＰＵモジュール１０１−１が稼動系、ＣＰＵモジュール１０１−２がその待機系となっている場合を例にして説明する。
【０００５】
稼動系となっているＣＰＵモジュール１０１−１は、その内部に格納されたプログラム（通常、定周期に実行されるプログラム；定周期プログラム）を実行することで、各Ｉ／Ｏユニット１０２−１〜１０２−ｎに対して制御データを出力して（又は各Ｉ／Ｏユニットからセンサ計測値等を読み出して）、各制御対象機器を制御する。
【０００６】
一方、待機系となっているＣＰＵモジュール１０１−２は、稼動系のＣＰＵモジュール１０１−１を監視しており、稼動系ＣＰＵモジュール１０１−１に故障等の何らかの切替え要因が生じると、稼動／待機切り替え処理を実行して、ＣＰＵモジュール１０１−２が稼動系となって、ＣＰＵモジュール１０１-１が行っていた処理を引き継ぐ。
【０００７】
ＣＰＵモジュール１０１−１及びＣＰＵモジュール１０１−２には、上記一定周期で起動されて実行される複数の定周期プログラム（ここでは、仮にＡ、Ｂ、Ｃ、Ｄ、Ｅの５つの定周期プログラム）が格納されており、稼動系となっているＣＰＵモジュール１０１−１のみがこれらの定周期プログラムを実行してＩ／Ｏ機器の制御処理を行い、待機系となっているＣＰＵモジュール１０１−２ではこれらの定周期プログラムは実行されない。これらの定周期プログラムには、優先レベルがあり（優先レベル：Ａ＞Ｂ＞Ｃ＞Ｄ＞Ｅ）、優先レベルが高い定周期プログラムの起動周期になると、優先レベルの低い実行中の定周期プログラムは割り込みがかかって中断され、優先レベルの高い定周期プログラムが優先的に実行される。
【０００８】
ＣＰＵモジュール１０１−１、ＣＰＵモジュール１０１−２及びＩ／Ｏ群１０２は、システムバス１０３によって接続されており、稼動系ＣＰＵモジュール１０１−１はシステムバス１０３を介して各Ｉ／Ｏユニット１０２−１〜１０２−ｎに対して出力データ（制御データ）を送信し、またＩ／Ｏユニット１０２−１〜１０２−ｎからは接続されている制御対象機器からの計測値等の入力データを受信している。
【０００９】
また２重化されているＣＰＵモジュール１０１−１とＣＰＵモジュール１０１−２との間には等値化バス１０４を備え、稼動系／待機系の切替えが生じたときに制御データの整合性を持たせる為、この等値化バス１０４を介して稼動系ＣＰＵモジュール１０１−１から待機系ＣＰＵモジュール１０１−２に制御データを送信して等値化処理を行っている。
【００１０】
図９に示すように、従来の２重化コントローラでは、稼動系ＣＰＵモジュール１０１−１にて定周期プログラムＡ、Ｂ、Ｃ、Ｄ、Ｅが実行された場合、他の定周期プログラムによる処理が完了して固定で優先レベルが最も低い定周期プログラムＥに処理が戻り、その定周期プログラムＥによる演算処理が終了後に、定周期プログラムＡ、Ｂ、Ｃ、Ｄ、Ｅで使用される全ての制御データに対する等値化を行う。よって定周期プログラムＡ、Ｂ、Ｃ、Ｄ内で行われる各処理の実行順序は、入力処理→プログラム演算→出力処理となり、また最も優先レベルが低い定周期プログラムＥは等値化処理が入るのでその処理実行順序は、入力処理→プログラム演算→制御データ等値化→出力処理となる。尚、図上に示す“入”が入力処理、“演”がプログラム演算、“等”が制御データ等値化、“出”が出力処理を意味する。
【００１１】
図１０は、定周期プログラム実行中に稼動系／待機系ＣＰＵの切替えが発生した時のプログラムの実行状態を示す図である。
稼動系ＣＰＵモジュール１０１−１の各定周期プログラムの演算中に、稼動系／待機系切替え要因が発生した場合、稼動／待機の切替えを行って新たに稼動系となったＣＰＵモジュール１０１−２は、制御データの整合性を保証するため、最後に制御データが等値化された図１０に示すｔ１の時点の状態から処理を引き継いだ形で定周期プログラムを実行する。
【００１２】
例えば、図１０に示すｔ２の時点で稼動／待機切替え要因が発生した場合、新たに稼動系となるＣＰＵモジュール１０１−２はｔ１の時点の状態から定周期プログラムを実行する。しかし、この場合、定周期プログラムＡ、Ｂ、Ｃは、ｔ２の時点で既にＩ／Ｏユニットに出力データの送信を行っている為、制御データとＩ／Ｏユニットからの出力の状態が不整合となる場合がある。また、最後に制御データが等値化された状態まで戻して処理を引き継ぐので戻り時間が大きくなってしまう（稼動／待機切り替え時のオーバーヘッドが大きくなる）ことがある。
【００１３】
また従来のコントローラでは、稼動系／待機系ＣＰＵの切替えが生じると切替え後の処理において、定周期プログラムの実行周期時間や各定周期プログラムの実行順番を維持できないという問題が生じる。
【００１４】
以上説明した従来技術に関しては、例えば特許文献１、非特許文献１等に記載されている。
【特許文献１】特開２００２−１４９２１２号公報
【非特許文献１】「統合化制御システムＭＩＣＲＥＸ−ＩＸのコントロールステーションの制御機能」  富士時報  Ｖｏｌ．６７  ＮＯ．６，１９９４、３４５−３４８頁
【発明の開示】
【発明が解決しようとする課題】
【００１５】
上述した従来技術に対して、本出願の出願人は、既に、特願２００２−１０４３８０号の発明（以下、先出願と呼ぶ）を提案している。
図１１に示すように、先出願の二重化コントローラでは、稼動系ＣＰＵモジュールにて定周期プログラムＡ、Ｂ、Ｃ、Ｄ、Ｅ（優先レベル：Ａ＞Ｂ＞Ｃ＞Ｄ＞Ｅ）が実行される場合、各定周期プログラムの処理実行順番は、入力処理→プログラム演算→制御データ等値化→出力処理である。すなわち、各定周期プログラムＡ、Ｂ、Ｃ、Ｄ、Ｅを実行する毎に、制御データの等値化処理を行う。
【００１６】
これによって、稼動／待機切り替えが生じたときに、等値化データとＩ／Ｏユニットへの出力データとの整合性が確保できると共に、稼動／待機切り替え時のオーバーヘッドを縮小できるという効果が得られる。
【００１７】
ここで、ユーザデータ（制御データ）としては、各定周期プログラムＡ，Ｂ，Ｃ，Ｄ，Ｅに対応する各ローカル変数と、グローバル変数とがあるが、図１２に示すように、これらの変数は全てメモリ上のユーザデータ領域に混在してマッピングされている。従来より、ＣＰＵモジュールは、ローカル変数、グローバル変数のマッピング情報を認識していない為、図１１に示した各定周期プログラムの制御データ等値化処理では、ユーザデータ領域に格納されている変数データ全てを、稼動系ＣＰＵモジュールから待機系ＣＰＵモジュールへ転送している。すなわち、従来より、通常、まず、不図示のＣＰＵ支援装置が、作成されたユーザプログラムをコンパイルして上記定周期プログラム（マシン語プログラム）を生成し、これをＣＰＵモジュールにダウンロードさせる。このコンパイルの際に、各変数をマッピングして（格納位置を割り当てて）、この格納位置をマシン語プログラム中に埋め込んでおり、ＣＰＵモジュール側では単にプログラムを実行するだけでよく、各変数の格納位置を認識している必要はなかった。また、各変数の格納位置は、コンパイルする毎に変動していた。この為、上記の通り、従来ではユーザデータ領域に格納されている変数データ全てを転送していた。また、従来では、図９に示す例のように、全ての定周期プログラムＡ〜Ｅ実行後にまとめて等値化処理を行っていた為、全変数データを転送することに問題はなかった。
【００１８】
しかしながら、先出願の手法では、各定周期プログラム実行毎に等値化処理を行うので、各等値化処理において等値化すべき変数は、実行した定周期プログラムが使用するローカル変数と、全ての定周期プログラムが共通して使用するグローバル変数だけでよいにも係わらず、他の定周期プログラムが使用するローカル変数についても等値化していることになる。
【００１９】
また、グローバル変数や各ローカル変数は、通常は、それぞれ１つの変数のみ存在するのではなく、複数の変数より成っているが（よって、以後、グローバル変数群、ローカル変数群と記す場合もある）、例えば定周期プログラムＡのローカル変数群の各変数の中には、等値化すべき変数もあれば、等値化する必要がない変数も存在する。しかしながら、上記のように全て等値化するので、等値化する必要がない変数も一緒にデータ転送していた。
【００２０】
このように等値化する必要のない制御データ（変数）も一緒に転送をおこなう為、定周期プログラムの本数増大、各定周期プログラムのローカル変数の増大により、データ転送時間オーバヘッドが増大してしまう。
【００２１】
本発明の課題は、定周期プログラムの制御データ等値化処理の際に、各定周期プログラム実行毎に制御データ等値化処理を行う場合に、各等値化処理において等値化する必要のないローカル変数を等値化することを無くし、データ転送時間のオーバヘッドを軽減する２重化コントローラシステム、そのプログラム単位等値化方法を提供することである。
【課題を解決するための手段】
【００２２】
本発明の２重化コントローラシステムは、稼動系と待機系のコントローラを有し、複数の定周期プログラムを実行する２重化コントローラシステムにおいて、前記稼動系のコントローラは、前記各定周期プログラムに対応する各ローカル変数を記憶する第１の記憶手段と、前記各ローカル変数の前記第１の記憶手段における格納位置を示すマッピング情報を記憶する第２の記憶手段と、前記各定周期プログラムを実行する毎に等値化処理を実行し、該各等値化処理において、前記マッピング情報を参照して、実行した定周期プログラムに対応するローカル変数の格納位置を取得することで、該実行した定周期プログラムに対応するローカル変数を前記第１の記憶手段から取得して前記待機系のコントローラに転送する第１の制御手段とを有するように構成する。
【００２３】
また、前記待機系のコントローラは、前記各定周期プログラムに対応する各ローカル変数を記憶する第３の記憶手段と、前記各ローカル変数の前記第３の記憶手段における格納位置を示すマッピング情報を記憶する第４の記憶手段と、前記第１の制御手段によって転送されてくる前記実行した定周期プログラムに対応するローカル変数を、前記第４の記憶手段のマッピング情報に基づいて、前記第３の記憶手段の所定位置に格納する第２の制御手段とを有するように構成する。
【００２４】
上述した構成の二重化コントローラシステムでは、各定周期プログラム実行毎に制御データ等値化処理を行っているので、等値化データとＩ／Ｏユニットへの出力データとの整合性が確保できると共に稼動／待機切り替え時のオーバーヘッドを縮小できる。
【００２５】
しかしながら、この場合は、各等値化処理において等値化すべき変数は、実行した定周期プログラムが使用するローカル変数のみでよい（当然、グローバル変数は等値化するが）にも係わらず、他の定周期プログラムが使用するローカル変数まで含めて全て等値化せざるを得なかった。これに対して、上記マッピング情報を参照することで、実行した定周期プログラムが使用するローカル変数のみを等値化できるので、データ転送時間のオーバヘッドを軽減することができる。
【００２６】
また、例えば、前記マッピング情報は、前記各ローカル変数を構成する変数群の中で等値化すべき変数の格納位置を示す情報であり、前記第１の制御手段は、前記実行した定周期プログラムに対応するローカル変数を構成する変数群の中から等値化すべき変数を、前記第１の記憶手段から取得して前記待機系のコントローラに転送するようにしてもよい。
【００２７】
上記各ローカル変数は、通常、複数の変数より成っており、この複数の変数の中には、等値化すべき変数と、そうではない変数が存在する。これより、上記マッピング情報を用いることで、実行した定周期プログラムが使用するローカル変数群の中で更に等値化すべき変数のみを転送するので、データ転送時間のオーバヘッドを更に軽減することができる。
【００２８】
また、例えば、前記稼動系と待機系の各コントローラに接続し、前記定周期プログラムを該各コントローラにダウンロードさせると共に前記マッピング情報をダウンロードさせる支援装置を更に有するように構成する。
【００２９】
通常、支援装置が、アプリケーションプログラムをコンパイルして前記定周期プログラムを生成する際に各変数をマッピングしている（格納位置を割り当てて）。つまり、支援装置側ではマッピング情報を保持しているので、これをコントローラ側に渡す。但し、例えばアプリケーションプログラムの変更に伴って再コンパイルする毎に各変数の割り当て位置は変動するので、プログラム変更等に伴う定周期プログラムのダウンロードの際に新たなマッピング情報もダウンロードする。
【発明の効果】
【００３０】
本発明の２重化コントローラシステム、そのプログラム単位等値化方法によれば、定周期プログラムの等値化処理において、各定周期プログラム実行毎に制御データ等値化処理を行うことで、上記先出願の効果、すなわち等値化データとＩ／Ｏユニットへの出力データとの整合性が確保できると共に稼動／待機切り替え時のオーバーヘッドを縮小できるという効果が得られると共に、更に、各等値化処理において等値化する必要のないローカル変数を等値化することを無くし、各定周期プログラム毎に自定周期プログラムの使用可能な必要最低限のデータ転送のみを行うので、データ転送時間オーバヘッドを軽減することができる。
【発明を実施するための最良の形態】
【００３１】
以下、図面を参照して、本発明の実施の形態について説明する。
図１は、本実施の形態による２重化システムの概略的な構成図である。
図１に示す２重化システムは、ＣＰＵモジュール１、ＣＰＵモジュール２、及び各制御対象機器とデータの入出力を行う複数のＩ／Ｏユニットを備えたＩ／Ｏ群３、及びＣＰＵ支援ツール５から構成されている。尚、ここでは、ＣＰＵモジュール１が稼動系となっており、ＣＰＵモジュール２がその待機系となっている場合を例にして説明する。稼動系のＣＰＵモジュール１、待機系のＣＰＵモジュール２、及びＩ／Ｏ群３は、システムバス４を介して接続されている。また、ＣＰＵモジュール１とＣＰＵモジュール２との間には等値化バス６が設けられている。また、ＣＰＵ支援ツール５とＣＰＵモジュール１／ＣＰＵモジュール２とは、不図示の専用線等によって接続されている。
【００３２】
ＣＰＵ支援ツール５自体は、特に新規の構成ではなく、従来より、ＣＰＵモジュール１、ＣＰＵモジュール２は、ＣＰＵ支援ツール５から、新たなプログラム（改造後の定周期プログラム等）をダウンロードする等の支援を受けている。但し、本例のシステムでは、更に、新たなプログラムをダウンロードする際に、新たなマッピング情報も一緒にダウンロードして、内部のデータＲＡＭ等に保持する。
【００３３】
上述してあるように、従来では、ＣＰＵモジュールはマッピング情報を持っていなかったが、ＣＰＵ支援ツール５側ではマッピング情報を持っていた。本手法では、このマッピング情報をＣＰＵモジュール側にダウンロードすることで、ＣＰＵモジュール側で各ローカル変数、及びグローバル変数の格納位置を認識できるようにしている。
【００３４】
図２に、図１に示す２重化システムの中でＣＰＵモジュール１、ＣＰＵモジュール２の詳細な構成例を示す。
ＣＰＵモジュール１、２は、プログラマブルコントローラ本体であるが、ここでは等値化処理に係わる構成のみを示し、他の構成は省略して示す。
【００３５】
図２において、ＣＰＵモジュール１は、プログラムＲＡＭ１１、データＲＡＭ１２、等値化バス制御部１３、受信バッファ用ＲＡＭ１４、及び制御部１５等を有する。
プログラムＲＡＭ１１には、ユーザプログラム１１ａが格納される。ユーザプログラム１１ａとは、例えば上記各定周期プログラムである。尚、本例のシステムにおいては、プログラムＲＡＭ１１には、更に、後述する図５に示す処理を制御部１５によって実現させるアプリケーションプログラムも格納されている。
【００３６】
データＲＡＭ１２は、ユーザデータ領域１２ａ、マッピング情報領域１２ｂを有する。
ユーザデータ領域１２ａには、既に上記図１２で説明したように、各定周期プログラム毎に対応する各ローカル変数と、グローバル変数とが混在で格納されている。
マッピング情報領域１２ｂには、上記ＣＰＵ支援ツール５からダウンロードした各ローカル変数とグローバル変数のマッピング情報（ユーザデータ領域１２ａにおける各変数の格納位置）が格納される。
【００３７】
等値化バス制御部１３は、主に等値化バス６を介して等値化を行う為のデータ転送処理専用の構成であり、制御部１５から等値化すべきデータを渡されると、待機側の等値化バス制御部２３と連動して、この等値化データを待機側の受信バッファ用ＲＡＭ２４に格納させる機能を有する。尚、等値化バス制御部１３は、例えば上記非特許文献１記載の“ＳＧＭ(Sameness data Gather Memory control)”に相当する。
【００３８】
制御部１５は、ＣＰＵモジュール１全体を制御する中央処理装置（ＣＰＵチップ等）であり、上記プログラムＲＡＭ１１に格納されているアプリケーションプログラムを用いて、図５に示す処理を実行する。つまり、制御部１５は、各定周期プログラムを実行する毎に等値化処理を実行し、この各等値化処理において、上記マッピング情報を参照して、実行した定周期プログラムに対応するローカル変数の格納位置を取得することで、当該実行した定周期プログラムに対応するローカル変数のみをユーザデータ領域１２ａから取得して、これを等値化バス制御部１３により待機系のＣＰＵモジュール２に転送させる処理を実行する。また、上記マッピング情報を参照してグローバル変数の格納位置も取得して、グローバル変数も等値化バス制御部１３により待機系のＣＰＵモジュール２に転送させる。このように、全てのローカル変数を等値化するのではなく、実行した定周期プログラムに対応するローカル変数のみを等値化することで、データ転送時間オーバヘッドを軽減することができる。
【００３９】
更に、上記マッピング情報を、各ローカル変数、又はグローバル変数を構成する変数群の中で、等値化すべき変数のみ、その格納位置を示す情報とした場合には、データ転送時間オーバヘッドを更に軽減することができる。詳しくは後述する。
【００４０】
また、待機系のＣＰＵモジュール２は、プログラムＲＡＭ２１、データＲＡＭ２２、等値化バス制御部２３、受信バッファ用ＲＡＭ２４、及び制御部２５等を有する。この構成自体は、稼動系のＣＰＵモジュール１と同じであるので、特に説明しないが、制御部２５は、プログラムＲＡＭ２１に格納されているアプリケーションプログラムを用いて、後述する図７に示す処理を実行する。尚、当然、プログラムＲＡＭ２１には、後述する図５に示す処理を実行させるアプリケーションプログラムも格納されており、ＣＰＵモジュール２が稼動系であるときには、図５の処理を実行する。この場合には、待機系となっているＣＰＵモジュール１が図７の処理を実行することになる。
【００４１】
図３に、マッピング情報領域１２ｂに格納されるマッピング情報の一例を示す。
図３において、マッピング情報領域１２ｂには、各定周期プログラムに各々対応する各ローカル変数のマッピング情報、及びグローバル変数のマッピング情報が格納されている。各マッピング情報の詳細は、図３では定周期プログラムＡに関するものを例にして示す通り、当該マッピング情報のブロック長と、その定周期プログラムが使用するローカル変数群の各変数の格納位置を示す情報（ここでは先頭アドレスとサイズ情報）である。尚、ここで変数群と言っているのは、通常、各ローカル変数は、それぞれ、複数の変数より成るからである。これはグローバル変数も同様である。
【００４２】
ここで、更に、上記各ローカル変数群またはグローバル変数群を構成する各変数には、等値化すべき変数と、そうでない変数とが存在する。これは、例えば予めＣＰＵ支援ツール５側においてシステム管理者等が、等値化すべき変数を指定・入力して、ＣＰＵ支援ツール５側で保持・管理する。これより、ＣＰＵ支援ツール５は、自己が保持するマッピング情報の中から、等値化すべき変数の情報のみを抽出して、これをＣＰＵモジュール側にダウンロードさせるようにしてもよい。これより、マッピング情報領域１２ｂに格納されるマッピング情報は、等値化すべき変数の格納位置を示す情報となるので、例えば仮に定周期プログラムＡに関するローカル変数群を等値化する場合、当該ローカル変数群を構成する全ての変数を転送するのではなく、等値化すべき変数のみを転送することができるので、データ転送時間のオーバヘッドを更に軽減することができる。
【００４３】
図４に、本実施形態の二重化コントローラシステムにおける稼動系ＣＰＵモジュールでのプログラム実行状態を示す。
図４に示すように、本例のシステムでは、稼動系ＣＰＵは、先出願と同様に、各定周期プログラムＡ〜Ｅの演算完了毎に、制御データの等値化処理を行っている。これによって、先出願と同様に、稼働系／待機系切替え時に、稼働系から待機系へ等値化される制御データと、稼働系からＩ／Ｏユニットへ送信される出力データの整合性が確保でき、また、切替え時に生じるオーバヘッドを縮小することが出来る。更に、本例のシステムにおける等値化処理では、上記マッピング情報を用いて、以下に説明するように、必要最低限のデータ転送のみを行うことができ、データ転送時間のオーバヘッドを軽減することができる。
【００４４】
すなわち、図４に示すように、稼動系のＣＰＵモジュール１において定周期プログラムＡ，Ｂ，Ｃ，Ｄ，Ｅが実行される場合、各定周期プログラムエンド（プログラム演算処理完了後）における制御データの等値化処理では、ＣＰＵモジュール１は、図３に示すマッピング情報を参照し、まず、図示の“等１”（制御データ等値化１）のタイミングで、実行した定周期プログラムが使用するローカル変数の格納位置情報を取得し、これに基づいてユーザデータ領域１２ａから該当するローカル変数のみを読み出して転送する。
【００４５】
例えば、定周期プログラムＡを実行した場合、制御データ等値化１のタイミングでは、マッピング情報より、定周期プログラムＡのローカル変数のユーザデータ領域１２ａにおける格納位置情報を取得して、これに基づいてユーザデータ領域１２ａから定周期プログラムＡが使用するローカル変数のみを読み出して（上記の通り、当該ローカル変数群の中で更に等値化すべき変数のみを読み出すようにしてもよい）、これを等値化バス６を介して待機系のＣＰＵモジュール２に転送する。つまり、他の定周期プログラムＢ，Ｃ，Ｄ，Ｅのローカル変数は、データ転送されない。よって、定周期プログラムＢ，Ｃ，Ｄ，Ｅのローカル変数に係わる分だけ、等値化処理負担を軽減することができる。
【００４６】
更に、グローバル変数は、全定周期プログラム共有の変数であり、全ての定周期プログラムにて使用される可能性がある為、各定周期プログラムの“等２”（制御データ等値化２）のタイミングで、図３に示すマッピング情報を参照し、グローバル変数の格納位置情報を取得し、これに基づいてユーザデータ領域１２ａからグローバル変数のみを読み出して（上記の通り、当該グローバル変数群の中で更に等値化すべき変数のみを読み出すようにしてもよい）、これを等値化バス６を介して待機系のＣＰＵモジュール２に転送する。
【００４７】
以上説明したように、ＣＰＵ支援ツール５から、各ローカル変数とグローバル変数のマッピング情報をダウンロードして、これをマッピング情報領域１２ｂに格納しておくことで、各定周期プログラムＡ〜Ｅ実行毎に、そのプログラム演算処理完了後に実行する等値化処理において、上記マッピング情報を参照して、全てのローカル変数ではなく、そのとき実行した定周期プログラムに係わるローカル変数のみをデータ転送することができ（グローバル変数は常に転送する）、データ転送オーバヘッドを軽減することができる。
【００４８】
以上説明した本例の等値化処理について、以下、図５、図７に示すフローチャートを参照して、更に具体的に説明する。
図５は、稼動系のＣＰＵモジュール１側の等値化処理フローチャート図である。
図７は、待機系のＣＰＵモジュール２側の等値化処理フローチャート図である。
【００４９】
図５、図７に示す処理は、ほとんどが制御部１５、制御部２５によって実行される。
まず、図５の処理について説明する。前提として、各定周期プログラムＡ〜Ｅには、各々固有のプログラム番号が割り当てられているものとする。
【００５０】
図５において、稼動系のＣＰＵモジュール１の制御部１５は、任意の定周期プログラムエンドにおいて、等値化処理を開始すると、まず、当該実行した定周期プログラムのプログラム番号を取得する（ステップＳ１１）。
【００５１】
次に、上記プログラム番号から、当該実行した定周期プログラム用のローカル変数マッピング情報のマッピング情報領域１２ｂにおける格納位置（先頭アドレス）を取得する（ステップＳ１２）。尚、この先頭アドレスは、例えば予め各プログラム番号に対応付けて任意の記憶領域（不図示）に登録されている。あるいは、例えば予めマッピング情報の格納領域の先頭位置（図３に示すＰ１）とオフセット値を記憶しており、Ｐ１＋オフセット値により上記先頭アドレスを生成してもよい。
【００５２】
ステップＳ１２で取得した先頭アドレスからは、図３に示すブロック数を取得でき（ステップＳ１３）、このブロック数分、各ブロック毎に、ステップＳ１４〜ステップＳ１７の処理を実行する。すなわち、各ブロックには、図３に示す通り、ユーザデータ領域１２ａにおいてそのローカル変数群を構成する各変数の格納位置を示す情報（先頭アドレス及びサイズ）が格納されており、この先頭アドレスとサイズを取得する（ステップＳ１４，Ｓ１５）。そして、取得した先頭アドレスとサイズ情報によって、ユーザデータ領域１２ａからローカル変数を読み出して、これを上記プログラム番号と共に等値化バス制御部１３に渡す。これより、上述してある等値化バス制御部１３，２３の機能によって、当該ローカル変数及びプログラム番号は、待機系のＣＰＵモジュール２側の受信バッファ用ＲＡＭ２４に格納される（ステップＳ１６，１７）。尚、図示していないが、続いてブロック数＝ブロック数−１の処理を行ってからステップＳ１８の処理、すなわちブロック数が０になったか否かを判定する処理を行う。これは後述するステップＳ３８についても同様である。また、上記のように、マッピング情報を等値化すべき変数の格納位置のみを示す情報とした場合には、受信バッファ用ＲＡＭ２４には、実行した定周期プログラム用のローカル変数群の中で等値化すべき変数のみが格納されることになる。これは、以下のグローバル変数の転送についても同様である。
【００５３】
全てのブロックについて上記ステップＳ１４〜Ｓ１７の処理を実行することで当該実行した定周期プログラム用のローカル変数の転送完了したら（ステップＳ１８，ＹＥＳ）、続いてグローバル変数の転送処理を行う。これは、上記ステップＳ１２と同様、今度はグローバル変数用マッピング情報の格納アドレスを取得（又は生成）して（ステップＳ２０）、これについて上記ステップＳ１３〜Ｓ１８の処理を実行することで、グローバル変数が待機系のＣＰＵモジュール２の受信バッファ用ＲＡＭ２４に転送される。尚、図５の例では、ステップＳ１３〜Ｓ１８の処理がローカル変数／グローバル変数のどちらに対する処理であったのかを示す等値化２終了フラグ（グローバル変数である場合にはフラグＯＮ）を用い、ステップＳ２０の処理後に等値化２終了フラグをＯＮし（ステップＳ２１）、ステップＳ１８の判定がＹＥＳとなったら等値化２終了フラグを参照して、ＯＮであった場合には（ステップＳ１９，ＹＥＳ）、当該処理を終了するものとしたが（最後にステップＳ２２で等値化２終了フラグをＯＦＦに戻す）、この例に限るわけではない。
以上の図５の処理により、待機系のＣＰＵモジュール２の受信バッファ用ＲＡＭ２４には、例えば図６に示す等値化データが格納される。
【００５４】
図６に示すように、受信バッファ用ＲＡＭ２４には、等値化処理直前に実行された定周期プログラムのプログラム番号が格納され、更に等値化１データまたは等値化２データが格納される。等値化１データとは、上記“等１”（制御データ等値化１）のタイミングで転送されたローカル変数であり、等値化２データとは、上記“等２”（制御データ等値化２）のタイミングで転送されたグローバル変数である。
【００５５】
次に、図７の処理について説明する。図７の処理の殆どは、制御部２５が実行する。
待機系のＣＰＵモジュール２の制御部２５は、上記図５の処理によって自己の受信バッファ用ＲＡＭ２４に図６に示す等値化データが格納されると、まず、その定周期プログラム番号より、稼動系のＣＰＵモジュール１側で実行された定周期プログラムが何であるかを認識する（ステップＳ３１）。そして、まず、上記ステップＳ１２の場合と同様、当該認識した定周期プログラムに対応するローカル変数マッピング情報のマッピング情報領域２２ｂにおける格納位置（先頭アドレス）を取得（又は生成）する（ステップＳ３２）。
【００５６】
ステップＳ３２で取得した先頭アドレスからは、図３に示すブロック数を取得でき（ステップＳ３３）、このブロック数分、各ブロック毎に、ステップＳ３４〜ステップＳ３７の処理を実行する。すなわち、各ブロックには、図３に示す通り、ユーザデータ領域２２ａにおけるそのローカル変数群を構成する各変数の格納位置を示す情報（先頭アドレス及びサイズ）が格納されており、この先頭アドレスとサイズを取得する（ステップＳ３４，Ｓ３５）。そして、この取得した先頭アドレスとサイズ情報によって示される、ユーザデータ領域１２ａにおける当該ローカル変数の格納領域に対して、上記ステップＳ１６の処理によって受信バッファ用ＲＡＭ２４に一時的に格納されていた等値化データを１ブロック分、転送・上書きする（ステップＳ３６，３７）。上記の通り、マッピング情報は、ＣＰＵ支援ツール５から、ＣＰＵモジュール１，２の両方に同じ情報がダウンロードされるので、ユーザデータ領域２２ａにおいて、ユーザデータ領域１２ａにおける変数格納位置と同じ格納位置に、変数が転送・上書きされることになる。
【００５７】
全てのブロックについて上記ステップＳ３４〜Ｓ３７の処理を実行することでＣＰＵモジュール１側で実行された定周期プログラムに対応するローカル変数の等値化処理が完了したら（ステップＳ３８，ＹＥＳ）、続いてグローバル変数についても同様にして等値化を行う。すなわち、グローバル変数用マッピング情報の格納アドレスを取得（生成）して（ステップＳ４０）、これについて上記ステップＳ３３〜Ｓ３８の処理を実行することで、受信バッファ用ＲＡＭ２４に格納されたグローバル変数を、ユーザデータ領域２２ａにおけるグローバル変数格納領域に転送・上書きする。
尚、ステップＳ３９、Ｓ４１、Ｓ４２の処理の意味は、上記ステップＳ１９、Ｓ２１、Ｓ２２と同じである。
【図面の簡単な説明】
【００５８】
【図１】本実施の形態による２重化システムの概略的な構成図である。
【図２】図１に示す２重化システムの中でＣＰＵモジュール１、ＣＰＵモジュール２の詳細な構成例を示す図である。
【図３】マッピング情報領域に格納されているマッピング情報の一例を示す図である。
【図４】稼動系ＣＰＵで稼動しているプログラムの実行状態を示す図である。
【図５】稼動系のＣＰＵ側の等値化処理フローチャート図である。
【図６】等値化データフレームの構成図である。
【図７】待機系のＣＰＵ側の等値化処理フローチャート図である。
【図８】２重化して冗長性を持たせたコントローラの一般的なシステム構成を示す。
【図９】従来システムにおける稼動系ＣＰＵで稼動している定周期プログラムの実行状態を示す図である。
【図１０】定周期プログラム実行中に稼動系／待機系ＣＰＵの切替えが発生した時のプログラムの実行状態を示す図である。
【図１１】先出願における定周期プログラムの実行状態を示す図である。
【図１２】ローカル変数とグローバル変数の格納状態を示す図である。
【符号の説明】
【００５９】
１  ＣＰＵモジュール（稼動系）
２  ＣＰＵモジュール（待機系）
３  Ｉ／Ｏ群
４  システムバス
５  ＣＰＵ支援ツール
６  等値化バス
１１  プログラムＲＡＭ
１１ａ  ユーザプログラム
１２  データＲＡＭ
１２ａ  ユーザデータ領域
１２ｂ  マッピング情報領域
１３  等値化バス制御部
１４  受信バッファ用ＲＡＭ
２１  プログラムＲＡＭ
２１ａ  ユーザプログラム
２２  データＲＡＭ
２２ａ  ユーザデータ領域
２２ｂ  マッピング情報領域
２３  等値化バス制御部
２４  受信バッファ用ＲＡＭ
【図１】
2005092520.tif 000003
【図２】
2005092520.tif 000004
【図３】
2005092520.tif 000005
【図４】
2005092520.tif 000006
【図５】
2005092520.tif 000007
【図６】
2005092520.tif 000008
【図７】
2005092520.tif 000009
【図８】
2005092520.tif 000010
【図９】
2005092520.tif 000011
【図１０】
2005092520.tif 000012
【図１１】
2005092520.tif 000013
【図１２】
2005092520.tif 000014