(57)【要約】【課題】二重化されたＩＯモジュールから出力されるデータの同期化を簡易な構成で実現できるＩＯモジュール二重化制御装置及び方法を提供する。【解決手段】二重化された、２つの系のＩＯモジュールの演算装置（５１）のそれぞれは、制御装置から入力された制御データのうち最新上位データに識別情報を付与し、記憶部に記憶させる上位データ処理部（７１）と、自らの系の最新上位データに付与されたシリアル番号、及び、他の系のＩＯモジュールにおいて他の系の最新上位データに付与されたシリアル番号を取得する取得部（７５）と、自らの系と他の系のシリアル番号を比較し、両者が一致するときは、自らの系の最新上位データで、記憶部に記憶された、自らのＩＯモジュールから被制御装置へ出力させるための出力用データを更新し、両者が一致しないときは、出力用データを更新せずにそのまま保持させるデータ更新処理部（７７）と、を具備する。【選択図】図４
2020123309.tif 000002
【特許請求の範囲】
【請求項１】
上位の制御装置から入力された複数のデータを下位の被制御装置へ出力するＩＯモジュールを２つの系で二重化した二重化制御装置であって、
二重化された、前記２つの系のＩＯモジュールのそれぞれは、
前記制御装置から入力された前記複数のデータのうち最新のものに識別情報を付与し、記憶部に自らの系の最新上位データとして記憶させる上位データ処理部と、
前記自らの系の最新上位データに付与された自らの系の識別情報、及び、他の系のＩＯモジュールにおいて他の系の最新上位データに付与された他の系の識別情報を取得する取得部と、
前記自らの系の識別情報と前記他の系の識別情報とを比較し、両者が一致するときは、前記自らの系の最新上位データで、前記記憶部に記憶された、自らのＩＯモジュールから前記被制御装置へ出力させるための出力用データを更新し、両者が一致しないときは、前記出力用データを更新せずにそのまま保持させるデータ更新処理部と、
を具備することを特徴とするＩＯモジュール二重化制御装置。
【請求項２】
前記２つの系のＩＯモジュールのいずれか一方を稼動状態に切り替える二重化切替処理部をさらに備えることを特徴とする請求項１に記載のＩＯモジュール二重化制御装置。
【請求項３】
前記２つの系のＩＯモジュールはチャネル数が２以上であり、前記２つの系のＩＯモジュールの稼動状態をチャネル毎に切り替える二重化切替処理部をさらに備えることを特徴とする請求項１に記載のＩＯモジュール二重化制御装置。
【請求項４】
前記データ更新処理部は、前記二重化切替処理部により前記自らの系のＩＯモジュールが待機状態から稼動状態に切り替えられたときは、前記自らの系の識別情報と前記他の系の識別情報との比較結果に関わらずに、前記記憶部が記憶する前記出力用データを前記最新上位データで更新することを特徴とする請求項２又は請求項３に記載のＩＯモジュール二重化制御装置。
【請求項５】
前記２つの系のＩＯモジュールのそれぞれは、基準発振器を備え、基準発信器が発振する動作クロックに従って動作することを特徴とする請求項１から請求項４のいずれかに記載のＩＯモジュール二重化制御装置。
【請求項６】
前記上位データ処理部は、前記制御装置から入力された前記複数のデータに、自らのＩＯモジュール識別情報をさらに付与し、
前記取得部は、自らの系の最新上位データに付与された自らのモジュール識別情報、及び、他の系のＩＯモジュールにおいて他の系の最新上位データに付与された他のモジュール識別情報を取得し、
前記自らのモジュール識別情報と前記他のモジュール識別情報とを比較し、両者が一致しないときは、自らのモジュール及び他のモジュールが正しく接続されていないと判定する接続判定部をさらに備えることを特徴とする請求項１から請求項５のいずれかに記載のＩＯモジュール二重化制御装置。
【請求項７】
上位の制御装置から入力された複数のデータを下位の被制御装置へ出力するＩＯモジュールを２つの系で二重化した二重化制御方法であって、
二重化された、前記２つの系のＩＯモジュールの演算装置のそれぞれに、
前記制御装置から入力された前記複数のデータのうち最新のものに識別情報を付与し、記憶部に自らの系の最新上位データとして記憶させる上位データ処理工程と、
前記自らの系の最新上位データに付与された自らの系の識別情報、及び、他の系のＩＯモジュールにおいて他の系の最新上位データに付与された他の系の識別情報を取得する取得工程と、
前記自らの系の識別情報と前記他の系の識別情報とを比較し、両者が一致するときは、前記自らの系の最新上位データで、前記記憶部に記憶された、自らのＩＯモジュールから前記被制御装置へ出力させるための出力用データを更新し、両者が一致しないときは、前記出力用データを更新せずにそのまま保持させるデータ更新処理工程と、
を実施させることを特徴とするＩＯモジュール二重化制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＯモジュール二重化制御装置及び方法に関する。
【背景技術】
【０００２】
従来、プラントなどの監視制御システムにおいて、コントロールステーションなどの制御装置（コントローラともいう）と、モータ、ポンプなどの被制御装置（フィールド機器ともいう）との間での信号の送受信を制御するためのＩＯモジュールユニットが設けられている。
【０００３】
このような監視制御システムの冗長性を高めるため、制御装置でのプロセッサの二重化、及び、ＩＯモジュールユニットでのＩＯモジュールの二重化を行うことが知られている（特許文献１など参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２０４９９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、制御装置のプロセッサの動作周期と、ＩＯモジュールユニットにおけるＩＯモジュールの動作周期とは異なっている。また、二重化されたＩＯモジュールのそれぞれは、異なる基準発振器の基準周波数に従って動作するため、非同期で動作している。
【０００６】
すなわち、ＩＯモジュールにおいて、制御装置から入力され、被制御装置へ出力される入出力信号（以下、ＩＯデータと記載する）は、プロセッサの動作周期とかかわりなく、ＩＯモジュールのそれぞれの動作周期に従って、新たに制御装置から入力されたＩＯデータに更新される。この結果、二重化されたＩＯモジュールにおけるＩＯデータの更新タイミングにずれが生じる可能性がある。このような状態を、ＩＯデータの更新が非同期であるという。
【０００７】
制御装置からＩＯモジュールへＩＯデータが入力されるタイミングと、それがＩＯモジュールから被制御装置へのＩＯデータへ反映されるタイミングとが異なり、且つ、ＩＯモジュール間でもＩＯデータへの反映のタイミングが異なっているので、故障などにより、一方のＩＯモジュールで稼動から待機への切り替えが行われたとき、被制御装置へ出力されるＩＯデータの値ｘが、一つ前に被制御装置からＩＯモジュールへ入力されたＩＯデータの値に戻ってしまうことがあり得る。この結果、制御処理の誤作動が発生する可能性があるという問題がある。
【０００８】
本発明はかかる点に鑑みてなされたものであり、二重化されたＩＯモジュールから出力されるデータの同期化を簡易な構成で実現できるＩＯモジュール二重化制御装置及び方法を提供することを目的の１つとする。
【課題を解決するための手段】
【０００９】
本発明に係るＩＯモジュール二重化制御装置の一態様は、上位の制御装置から入力された複数のデータを下位の被制御装置へ出力するＩＯモジュールを２つの系で二重化した二重化制御装置であって、二重化された、前記２つの系のＩＯモジュールのそれぞれは、前記制御装置から入力された前記複数のデータのうち最新のものに識別情報を付与し、記憶部に自らの系の最新上位データとして記憶させる上位データ処理部と、前記自らの系の最新上位データに付与された自らの系の識別情報、及び、他の系のＩＯモジュールにおいて他の系の最新上位データに付与された他の系の識別情報を取得する取得部と、前記自らの系の識別情報と前記他の系の識別情報とを比較し、両者が一致するときは、前記自らの系の最新上位データで、前記記憶部に記憶された、自らのＩＯモジュールから前記被制御装置へ出力させるための出力用データを更新し、両者が一致しないときは、前記出力用データを更新せずにそのまま保持させるデータ更新処理部と、を具備することを特徴とする。
【００１０】
本発明に係るＩＯモジュール二重化制御方法の一態様は、上位の制御装置から入力された複数のデータを下位の被制御装置へ出力するＩＯモジュールを２つの系で二重化した二重化制御方法であって、二重化された、前記２つの系のＩＯモジュールの演算装置のそれぞれに、前記制御装置から入力された前記複数のデータのうち最新のものに識別情報を付与し、記憶部に自らの系の最新上位データとして記憶させる上位データ処理工程と、前記自らの系の最新上位データに付与された自らの系の識別情報、及び、他の系のＩＯモジュールにおいて他の系の最新上位データに付与された他の系の識別情報を取得する取得工程と、前記自らの系の識別情報と前記他の系の識別情報とを比較し、両者が一致するときは、前記自らの系の最新上位データで、前記記憶部に記憶された、自らのＩＯモジュールから前記被制御装置へ出力させるための出力用データを更新し、両者が一致しないときは、前記出力用データを更新せずにそのまま保持させるデータ更新処理工程と、を実施させることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、二重化されたＩＯモジュールから出力されるデータの同期化を簡易な構成で実現できるＩＯモジュール二重化制御装置及び方法を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係るＩＯモジュール二重化装置が適用された制御システムを示す概略図である。
【図２】従来の二重化されたＩＯモジュールにおけるデータ更新のタイミングと稼動及び待機の切り替えのタイミングとの関係を示す模式図である。
【図３】第１の実施の形態に係るＩＯモジュール二重化制御装置が適用された制御システムの要部を示す模式図である。
【図４】図３に示すＦＰＧＡが実現する機能を示す機能ブロック図である。
【図５】第１の実施の形態に係るＩＯモジュール二重化制御装置における二重化切替処理を示すフローチャートである。
【図６】第１の実施の形態に係るＩＯモジュール二重化制御装置における同期データ更新処理を示すフローチャートである。
【図７】第１の実施の形態に係るＩＯモジュール二重化制御装置における非同期データ更新処理を示すフローチャートである。
【図８】第１の実施の形態に係るＩＯモジュール二重化制御装置が適用された制御システムにおけるデータ更新のタイミングと稼動及び待機の切り替えのタイミングとの関係を示す模式図である。
【図９】第１の実施の形態に係るＩＯモジュール二重化制御装置が適用された制御システムにおけるデータ更新のタイミングと稼動及び待機の切り替えのタイミングとの関係を示す模式図である。
【図１０】第３の実施の形態に係るＩＯモジュール二重化制御装置における二重化制御信号の構成を示す模式図である。
【図１１】第３の実施の形態に係るＩＯモジュール二重化制御装置における接続判定処理の各工程を示すフローチャートである。
【発明を実施するための形態】
【００１３】
図１〜図９を参照して、本実施の形態に係るＩＯモジュール二重化制御装置及び方法について詳細に説明する。
【００１４】
＜第１の実施の形態＞
図１は、第１の実施の形態に係るＩＯモジュール二重化装置が適用された制御システムを示す概略図である。図１に示すように、第１の実施の形態に係る制御システム１は、本発明の制御装置の一例であるコントローラ３と、コントローラ３から出力された制御データが入力されるＩＯモジュールユニット５と、ＩＯモジュールユニット５に接続され、コントローラ３から制御を受ける、本発明の被制御装置の一例である、複数の外部機器７ａ、７ｂ、７ｃと、で構成されている。
【００１５】
コントローラ３は、二重化された構成をとり、Ａ系のプロセッサ３ａと、Ｂ系のプロセッサ３ｂと、を備えている。プロセッサ３ａ、３ｂは、外部機器７ａ、７ｂ、７ｃを制御するための制御データを生成し、出力するように構成されている。制御データは、本発明の複数のデータの一例であり、プロセッサ３ａ、３ｂの動作周期に従って一定の周期で順次出力される。プロセッサ３ａ、３ｂは、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であるが、特に限定されない。
【００１６】
また、ＩＯモジュールユニット５は、Ａ系５ａ及びＢ系５ｂで、二重化された構成をとる。まず、Ａ系５ａを構成する要素について説明する。Ａ系５ａにおいて、コントローラ３のＡ系及びＢ系のプロセッサ３ａ、３ｂに通信可能に接続されたＡ系のＩ／Ｆモジュール９、１１が備えられている。プロセッサ３ａ、３ｂと、Ｉ／Ｆモジュール９、１１との間の通信は、例えば、Ｅｔｈｅｒｎｅｔ（登録商標）のような上位ネットワーク１３を経由して行われるが、特に限定されない。
【００１７】
Ｉ／Ｆモジュール９、１１は、プロセッサ３ａ、３ｂから入力された制御データのうち最新のものを一時的に記憶するバッファメモリ４７（図３参照）を備えている。
【００１８】
また、Ａ系５ａにおいて、複数のＩＯモジュール１５、１７、１９が、Ｉ／Ｆモジュール９、１１に、内部バス２１を介して通信可能に接続されている。ここでは、便宜上３つのＩＯモジュール１５、１７、１９を例示しているが、一つの系に属するＩＯモジュールの数は特に限定されず少なくとも１つあればよい。
【００１９】
複数のＩＯモジュール１５、１７、１９には、複数の外部機器７ａ、７ｂ、７ｃが、下位ネットワーク２３におり、通信可能に接続されている。
【００２０】
Ｂ系５ｂも、上述のようなＡ系５ａと同様の構成になっている。すなわち、Ｂ系において、２つのＩ／Ｆモジュール２５、２７に、複数のＩＯモジュール２９、３１、３３が内部バス３５を介して通信可能に接続されている。
【００２１】
また、Ｂ系５ｂの２つＩ／Ｆモジュール２５、２７は、通信線３７、３９により、Ａ系５ａのＩ／Ｆモジュール９、１１と通信可能にそれぞれ接続されている。これにより、コントローラ３のＡ系及びＢ系のプロセッサ３ａ、３ｂから、Ａ系５ａのＩ／Ｆモジュール９、１１に入力された制御データが、Ｂ系５ｂの２つのＩ／Ｆモジュール２５、２７に受け渡される。
【００２２】
複数のＩＯモジュール２９、３１、３３には、複数の外部機器７ａ、７ｂ、７ｃが、下位ネットワーク２３を介して、通信可能に接続されている。外部機器７ａ、７ｂ、７ｃの数は、第１の実施の形態では３つであるが、特に限定されない。
【００２３】
上述のような構成により、ＩＯモジュールユニット５は、Ａ系５ａ及びＢ系５ｂに二重化される。このようなＩＯモジュールユニット５に対し、コントローラ３から制御データが入力され、外部機器７ａ、７ｂ、７ｃのいずれか一つに出力されるまでの処理の流れを、図２を参照して説明する。以下の説明では、制御データが、図１に示すコントローラ３のＡ系のプロセッサ３ａからＩＯモジュールユニット５に入力され、外部機器７ａに出力される経路が、Ａ系５ａのＩＯモジュール１５及びＢ系５ｂのＩＯモジュール２９によって二重化されている場合を例に挙げて説明する。
【００２４】
図２Ａ及び図２Ｂは、従来の二重化されたＩＯモジュールにおけるデータ更新のタイミングと稼動及び待機の切り替えのタイミングとの関係を示す模式図である。図２Ａ及び図２Ｂは、二重化されたＩＯモジュール１５、２９が常に非同期で動作している場合を示している。図２Ａは、Ｂ系５ｂのＩＯモジュール２９で遅延が発生している場合を示し、図２Ｂは、Ａ系５ａのＩＯモジュール１５で遅延が発生している場合を示す。
【００２５】
図２Ａ及び図２Ｂにおいて、最上段は、Ａ系のプロセッサ３ａから入力され、Ｉ／Ｆモジュール９、２５のバッファメモリ４７（図３参照）に記憶された制御データの値（以下、上位バスデータ値と記載する）を示している。
【００２６】
２段目は、Ａ系５ａのＩＯモジュール１５が、外部機器７ａに出力するためにメモリ５７（図３参照）に記憶しているデータの値(以下、ＩＯデータ値と記載する)を示している。３段目は、Ｂ系５ｂのＩＯモジュール２９が、外部機器７ａに出力するためにメモリ５７（図３参照）に記憶しているＩＯデータ値を示している。
【００２７】
４段目は、稼動中のＩＯモジュールが、Ａ系５ａのＩＯモジュール１５又はＢ系５ｂのＩＯモジュール２９のいずれであるかを示している。なお、第１の明細書において、ＩＯモジュールが稼動中であるとは、外部機器７ａに対して制御データを出力している状態であることをいい、待機中とは、外部機器７ａに対して制御データを出力していない状態であることをいう。
【００２８】
最下段は、ＩＯモジュールユニット５から外部機器７ａに出力されるデータの値（以下、下位出力データ値と記載する）を示す。
【００２９】
また、図２Ａ及び図２Ｂ中、太い下向きの矢印は、Ａ系５ａ又はＢ系５ｂのＩＯデータ値のいずれが、下位出力データ値に反映されているかを示しているが、反映のタイミングを正確に示すものではない。
【００３０】
まず、図２Ａを参照し、Ｂ系５ｂのＩＯモジュール２９で遅延が発生している場合について説明する。
【００３１】
図２Ａに示すように、上位バスデータ値は、プロセッサ３ａの動作周期（例えば、１０ｍｓ）で更新されている。
【００３２】
Ａ系５ａ及びＢ系５ｂにおいて、ＩＯモジュール１５、２９は、後述するようにＡ系５ａのＩＯモジュール１５及びＢ系５ｂのＩＯモジュール２９は、それぞれ基準発振器５９を備え、それが発振する動作クロックに従って動作する。
【００３３】
このため、ＩＯモジュール１５、２９が、上位バスデータ値をバッファメモリ４７から読み取って、メモリ５７（図３参照）に記憶したＩＯデータ値を書き換える処理（以下、データ更新処理と記載する）は、一定の動作周期(例えば、１０ｍｓ)で行われるが、プロセッサ３ａの動作周期とは同期していない。また、Ａ系５ａのＩＯモジュール１５とＢ系５ｂのＩＯモジュール２９との間でも同期していない。
【００３４】
さらに、ここでは、Ｂ系５ｂのＩＯモジュール２９は、Ａ系５ａのＩＯモジュール１５よりも遅れたタイミングでＩＯデータ更新処理を行っている。このため、図２Ａに示すように、Ｂ系５ｂのＩＯデータ値は、Ａ系５ａのＩＯデータ値よりも遅れて更新されている。
【００３５】
図２Ａに示すように、Ａ系５ａのＩＯモジュール１５が稼動中で、Ａ系５ａのＩＯデータ値が、下位出力データ値に反映されている状態で、Ａ系５ａで異常が発生すると、Ａ系５ａのＩＯモジュール１５が待機中に、Ｂ系５ｂのＩＯモジュール２９が待機中から稼動中に切り替わる。
【００３６】
このようにＢ系５ｂが遅延しているときに、Ａ系→Ｂ系の切り替えが行われると、そのタイミングで、Ｂ系５ｂのＩＯデータ値が下位出力データ値に反映されるため、下位出力データ値が現在の値「ＢＤ」から一つ前の値「８１」に戻ってしまっている。このような下位出力データ値の後戻りが発生すると、外部機器７ａの誤制御が発生するおそれがある。
【００３７】
なお、その後、Ａ系５ａのＩＯモジュール１５が復帰したときは、そのまま、Ｂ系５ｂのＩＯモジュール２９が稼動を続ける。Ｂ系５ｂのＩＯモジュール２９に異常が発生すると、Ｂ系→Ａ系の切り替えが発生する。しかし、この場合には、Ｂ系５ｂでの遅延による影響はない。
【００３８】
次に、図２Ｂを参照し、Ａ系５ａのＩＯモジュール１５で遅延が発生している場合について説明する。図２Ａと同様な処理等については説明を省略している。
【００３９】
図２Ｂに示すように、Ａ系５ａのＩＯモジュール１５は、Ｂ系５ｂのＩＯモジュール２９よりも遅れたタイミングでデータ更新処理を行っている。このため、Ａ系５ａのＩＯデータ値は、Ｂ系５ｂのＩＯデータ値よりも遅れて更新されている。
【００４０】
図２Ｂに示すように、Ａ系５ａのＩＯモジュール１５が稼動中で、Ａ系５ａのＩＯデータ値が、下位出力データ値に反映されている状態で、Ａ系５ａで異常が発生すると、Ａ系５ａのＩＯモジュール１５が待機中に、Ｂ系５ｂのＩＯモジュール２９が待機中から稼動中に切り替わる。しかし、このとき、Ａ系５ａでの遅延による影響はない。
【００４１】
その後、Ａ系５ａのＩＯモジュール１５が復帰したときは、そのまま、Ｂ系５ｂのＩＯモジュール２９が稼動を続けるが、Ｂ系５ｂのＩＯモジュール２９に異常が発生すると、Ｂ系→Ａ系の切り替えが発生する。
【００４２】
上述のようにＡ系５ａが遅延しているときに、Ｂ系→Ａ系の切り替えが行われると、そのタイミングで、Ａ系５ａのＩＯデータ値が下位出力データ値に反映されるため、下位出力データ値が現在の値「１０」から一つ前の値「ＥＣ」に戻ってしまっている。このような下位出力データ値の後戻りが発生すると、外部機器７ａの誤制御が発生するおそれがある。
【００４３】
本発明者は、上述のように、Ａ系５ａとＢ系５ｂとの切り替わり時に下位出力データ値に後戻りが発生し、外部機器７ａの誤作動が発生することを防ぐため、鋭意検討した結果、Ａ系５ａのＩＯモジュール１５、１７、１９と、Ｂ系５ｂのＩＯモジュール２９、３１、３３とのそれぞれにおいて、メモリ５７に記憶されたＩＯデータ値に識別情報を付与し、且つ、図１に示すように、Ａ系５ａのＩＯモジュール１５、１７、１９と、Ｂ系５ｂのＩＯモジュール２９、３１、３３との間を、二重化制御信号線４１、４３、４５で接続して互いに通信可能とし、互いがメモリ５７に記憶しているＩＯデータ値に付与された識別情報を知らせ合い、両者が一致しているか否かに応じて、ＩＯデータ値を、コントローラ３から新たに入力された最新の制御データの値で更新するか否かを判定することにより、Ａ系５ａ及びＢ系５ｂにおける制御データの更新を同期させることができることを見出し、本発明を完成した。
【００４４】
すなわち、第１の実施の形態に係るＩＯモジュール二重化制御装置は、上位の制御装置から入力された複数のデータを下位の被制御装置へ出力するＩＯモジュールを２つの系で二重化した二重化制御装置であって、二重化された、前記２つの系のＩＯモジュールのそれぞれは、前記制御装置から入力された前記複数のデータのうち最新のものに識別情報を付与し、記憶部に自らの系の最新上位データとして記憶させる上位データ処理部と、前記自らの系の最新上位データに付与された自らの系の識別情報、及び、他の系のＩＯモジュールにおいて他の系の最新上位データに付与された他の系の識別情報を取得する取得部と、前記自らの系の識別情報と前記他の系の識別情報とを比較し、両者が一致するときは、前記自らの系の最新上位データで、前記記憶部に記憶された、自らのＩＯモジュールから前記被制御装置へ出力させるための出力用データを更新し、両者が一致しないときは、前記出力用データを更新せずにそのまま保持させるデータ更新処理部と、を具備することを特徴とする。
【００４５】
第１の実施の形態に係るＩＯモジュール二重化制御装置において、前記２つの系のＩＯモジュールのいずれか一方を稼動状態に切り替える二重化切替処理部をさらに備えることが好ましい。
【００４６】
この場合において、前記データ更新処理部は、前記二重化切替処理部により前記自らの系のＩＯモジュールが待機状態から稼動状態に切り替えられたときは、前記自らの系の識別情報と前記他の系の識別情報との比較結果に関わらずに、前記記憶部が記憶する前記出力用データを前記最新上位データで更新することが好ましい。
【００４７】
また、第１の実施の形態に係るＩＯモジュール二重化制御装置において、前記２つの系のＩＯモジュールのそれぞれは、基準発振器を備え、基準発信器が発振する動作クロックに従って動作している場合、本発明の効果はより顕著になるので、好ましい。
【００４８】
また、第１の実施の形態に係るＩＯモジュール二重化制御方法は、上位の制御装置から入力された複数のデータを下位の被制御装置へ出力するＩＯモジュールを２つの系で二重化した二重化制御方法であって、二重化された、前記２つの系のＩＯモジュールの演算装置のそれぞれに、前記制御装置から入力された前記複数のデータのうち最新のものに識別情報を付与し、記憶部に自らの系の最新上位データとして記憶させる上位データ処理工程と、前記自らの系の最新上位データに付与された自らの系の識別情報、及び、他の系のＩＯモジュールにおいて他の系の最新上位データに付与された他の系の識別情報を取得する取得工程と、前記自らの系の識別情報と前記他の系の識別情報とを比較し、両者が一致するときは、前記自らの系の最新上位データで、前記記憶部に記憶された、自らのＩＯモジュールから前記被制御装置へ出力させるための出力用データを更新し、両者が一致しないときは、前記出力用データを更新せずにそのまま保持させるデータ更新処理工程と、を実施させることを特徴とする。
【００４９】
以下、図３を参照して、第１の実施の形態に係るＩＯモジュール二重化制御装置について詳細に説明する。図３は、第１の実施の形態に係るＩＯモジュール二重化制御装置が適用された制御システム１の要部を示す模式図である。
【００５０】
図３に示すＡ系５ａのＩＯモジュール１５と、Ｂ系５ｂのＩＯモジュール２９とは、同じ構成をしている。以下、Ａ系５ａを例に挙げて説明する。Ａ系５ａのＩＯモジュール１５は、本発明の演算装置の一例であるＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）５１を備えている。ＦＰＧＡは、他の演算装置としては、ソフトウエアで処理を行うマイコン、ＣＰＵを例示できるが、特に限定されない。
【００５１】
ＦＰＧＡ５１は、ハードウエアで処理を行うが、回路構成を変更可能なデバイスであり、以降で説明する各種機能を回路構成を適宜設定することで実現可能である。
【００５２】
ＦＰＧＡ５１の上位側には、内部バス５３を介して、バスＩ／Ｆ制御部５５、メモリ５７及び基準発振器５９が接続されている。
【００５３】
バスＩ／Ｆ制御部５５は、Ｉ／Ｆモジュール９との間の制御データの入出力を制御する。なお、Ｉ／Ｆモジュール９には、プロセッサ３ａ、３ｂから入力された制御データのうち最新のものを記憶するためのバッファメモリ４７が設けられている。
【００５４】
また、メモリ５７には、プロセッサ３ａ、３ｂから入力されたデータを記憶するためのメモリ空間が用意されている。
【００５５】
メモリ５７は、本発明の記憶部の一例であり、コンピュータ読み取り可能な記録媒体であり、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  ＥＰＲＯＭ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、その他の適切な記憶媒体の少なくとも１つで構成されてもよい。メモリ５７は、レジスタ、キャッシュ、メインメモリ（主記憶装置）などと呼ばれてもよい。
【００５６】
基準発振器５９は、ＦＰＧＡ５１が動作の基準とする動作クロックを発振するデバイスであり、例えば、水晶発振器である。第１の実施の形態では、演算装置の一例であるＦＰＧＡ５１の外に設けられているが、演算装置の一部であってもよい。
【００５７】
ＦＰＧＡ５１の下位側には、ＩＯデータを外部機器７ａへ出力を制御するための入出力回路６１が電気的に接続されている。入出力回路６１は、外部機器７ａへ入力されるデータの制御も行うことができる。
【００５８】
入出力回路６１と外部機器７ａとの間には、ＩＯモジュール１５の稼動及び待機を切り替えるための切替スイッチ６３が設けられている。
【００５９】
また、ＦＰＧＡ５１には、Ｂ系５ｂのＩＯモジュール２９との間で、二重化制御信号線４１を介して二重化のためのデータ（後述のシリアル番号及び異常レベルデータを含む）のやり取りを行う二重化通信部６５が設けられている。
【００６０】
Ｂ系５ｂのＩＯモジュール２９については、Ａ系５ａのＩＯモジュール２９と同様の構成について同一の番号を付与し、説明を省略する。
【００６１】
図４は、図３に示すＦＰＧＡ５１が実現する機能を示す機能ブロック図である。ＦＰＧＡ５１は、上位データ処理部７１、下位データ処理部７３、取得部７５、データ更新処理部７７、二重化切替処理部７９及び異常レベル検出部８１を実現するような回路構成になっている。
【００６２】
上位データ処理部７１は、プロセッサ３ａ、３ｂから入力された制御データのうち最新のもの（以下、最新上位データと記載する）に、本発明の自ら系の識別情報の一例であるシリアル番号を付与し、メモリ５７内に記憶する処理を行う。より具体的には、上位データ処理部７１は、Ｉ／Ｆモジュール９のバッファメモリ４７に記憶された最新上位データを読み出し、これにシリアル番号を付与し、メモリ５７内に書き込む。
【００６３】
下位データ処理部７３は、ＩＯモジュール１５から外部機器７ａへ出力させるためにメモリ５７に記憶された最新上位データ（以下、出力用データと記載する）を、入出力回路６１に出力する処理を行う。下位データ処理部７３は、ＩＯモジュール１５が稼動状態であるとき、出力用データを出力する。
【００６４】
取得部７５は、メモリ５７内に記憶された最新上位データに付与されたシリアル番号と、Ｂ系５ｂのＩＯモジュール２９のメモリ５７に記憶された最新上位データに付与されたシリアル番号を取得する処理を行う。
【００６５】
データ更新処理部７７は、Ａ系５ａの最新上位データに付与されたシリアル番号と、Ｂ系５ｂの最新上位データに付与されたシリアル番号とを比較し、両者が一致するときはメモリ５７に記憶された出力用データを、プロセッサ３ａから新たに入力された最新上位データで更新し、両者が一致しないときはメモリ５７に記憶された出力用データを、最新データで更新せずに前回値のままで保持する処理（以下、同期データ更新処理と記載する）を行う。
【００６６】
また、データ更新処理部７７は、シリアル番号を比較せず、メモリ５７に記憶された最新上位データを、プロセッサ３ａから新たに入力された最新上位データで更新する処理（以下、非同期データ更新処理と記載する）も行う。つまり、データ更新処理部７７は、同期データ更新処理、及び、非同期データ更新処理の２つのデータ更新処理を行うことができる。
【００６７】
二重化切替処理部７９は、Ａ系５ａのＩＯモジュール１５、及び、Ｂ系５ｂのＩＯモジュール２９のいずれか一方を稼動状態に切り替え、他方を待機状態に切り替える処理を行う。
【００６８】
異常レベル検出部８１は、Ａ系５ａのＩＯモジュール１５における異常を検出し、異常レベルを決定する処理を行う。また、異常レベル検出部８１は、二重化通信部６５を介して、Ｂ系５ｂのＩＯモジュール２９の二重化切替処理部７９に異常レベルを示すデータ（以下、異常レベルデータと記載する）を送信する。第１の実施の形態では、異常レベルデータは２ビットであり、低レベルから「００」、「０１」、「１０」及び「１１」の４段階で異常レベルを表現しているが、特に４段階に限定されない。例えば、異常レベルデータは１ビットであり、異常レベルは、異常なしを示す「ＬＯＷ（０）」と、異常ありを示す「Ｈｉｇｈ（１）」の２段階であってもよい。
【００６９】
次に、図５〜図７のフローチャートを参照して、ＦＰＧＡ５１の各機能が行う処理について説明する。以下の説明では、Ａ系５ａのＩＯモジュール１５における処理を例に挙げて説明するが、Ｂ系５ｂのＩＯモジュール２９も同じ処理を行う。図５は、第１の実施の形態に係るＩＯモジュール二重化制御装置における二重化切替処理を示すフローチャートである。
【００７０】
図５に示すように、まず、二重化切替処理部７９は、二重化通信部６５により、Ｂ系５ｂのＩＯモジュール２９の異常レベル検出部８１から、異常レベルデータを受信し、Ｂ系５ｂのＩＯモジュール（他モジュール）２９の異常レベルを取得する（Ｓ１０１）。
【００７１】
次に、二重化切替処理部７９は、自らの異常レベル検出部８１から、異常レベルデータを受け取り、Ａ系５ａのＩＯモジュール（自モジュール）１５の異常レベルを取得する（Ｓ１０２）。Ｓ１０１とＳ１０２の順番は逆になってもよい。
【００７２】
次に、二重化切替処理部７９は、Ａ系５ａのＩＯモジュール（自モジュール）１５が稼動中か否かを判定する（Ｓ１０３）。二重化切替処理部７９は、例えば、メモリ５７に稼動状態及び待機状態のいずれであるかを示すデータ（以下、状態データと記載する）を記憶している。状態データは、例えば１ビットであり、稼動状態を「Ｈｉｇｈ（１）」と、待機状態を「Ｌｏｗ（０）」と、それぞれ表現するが、特に限定されない。
【００７３】
二重化切替処理部７９は、Ｓ１０３で判定がＹｅｓである場合、異常レベルは、Ａ系５ａのＩＯモジュール１５が、Ｂ系５ｂのＩＯモジュール２９よりも高いか否か判定する（Ｓ１０４）。
【００７４】
二重化切替処理部７９は、Ｓ１０４で判定がＹｅｓである場合、切替スイッチ６３（図３参照）をＯＮのままで維持する（Ｓ１０５）。
【００７５】
一方、二重化切替処理部７９は、Ｓ１０４で判定がＮｏである場合、切替スイッチ６３をＯＦＦに切り替える（Ｓ１０６）。二重化切替処理部７９は、この切り替えに伴い、状態データを、稼動状態から待機状態に変更する。
【００７６】
また、二重化切替処理部７９は、Ｓ１０３で判定がＮｏである場合、異常レベルは、Ｂ系５ｂのＩＯモジュール２９が、Ａ系５ａのＩＯモジュール１５よりも高いか否か判定する（Ｓ１０７）。
【００７７】
二重化切替処理部７９は、Ｓ１０７で判定がＹｅｓである場合、切替スイッチ６３をＯＦＦに切り替える（Ｓ１０８）。二重化切替処理部７９は、この切り替えに伴い、状態データを、稼動状態から待機状態に変更する。
【００７８】
一方、二重化切替処理部７９は、Ｓ１０７で判定がＮｏである場合、切替スイッチ６３（図３参照）をＯＮのままで維持する（Ｓ１０９）。
【００７９】
二重化切替処理部７９は、上述のＳ１０１〜Ｓ１０９の処理を、例えば、定期的に行い、ＩＯモジュール１５、２９での異常発生に応じて稼動又は待機の切り替えを行う。そして、稼動状態から待機状態へ、及び、待機状態から稼動状態への切り替えがなかった場合（Ｓ１０５、Ｓ１０７）、データ更新処理部７７に、同期データ更新処理を実行させる。一方、稼動状態から待機状態へ、及び、待機状態から稼動状態への切り替えがあった場合（Ｓ１０６、Ｓ１０８）、データ更新処理部７７に、非同期データ更新処理を実行させる。
【００８０】
まず、同期データ更新処理について説明する。図６は、第１の実施の形態に係るＩＯモジュール二重化制御装置における同期データ更新処理を示すフローチャートである。
【００８１】
データ更新処理部７７は、Ｉ／Ｆモジュール９のバッファメモリ４７に記憶された最新上位データを読み出し、これにシリアル番号を付与し、メモリ５７内に書き込む（Ｓ２０１）。
【００８２】
次に、取得部７５は、二重化通信部６５により、Ｂ系５ｂのＩＯモジュール２９の上位データ処理部７１から、メモリ５７内に書き込まれた最新上位データに付与されたシリアル番号を受信し、Ｂ系５ｂのＩＯモジュール（他モジュール）２９のシリアル番号を取得する（Ｓ２０２）。
【００８３】
次に、取得部７５は、Ａ系５ａのＩＯモジュール１５の上位データ処理部７１から、メモリ５７内に書き込まれた最新上位データに付与されたシリアル番号を受信することにより、Ａ系５ａのＩＯモジュール（自モジュール）１５のシリアル番号を取得する（Ｓ２０３）。Ｓ２０２とＳ２０３の順番は逆になってもよい。
【００８４】
データ更新処理部７７は、Ｓ２０３で取得したＡ系５ａの最新上位データに付与されたシリアル番号と、Ｓ２０２で取得したＢ系５ｂの最新上位データに付与されたシリアル番号とを比較し、一致しているか否か判定する（Ｓ２０４）。
【００８５】
Ｓ２０４で判定がＹｅｓである場合、データ更新処理部７７は、メモリ５７に記憶された出力用データを、プロセッサ３ａから新たに入力された最新上位データで更新する（Ｓ２０５）。
【００８６】
Ｓ２０４で判定がＮｏである場合は、データ更新処理部７７は、メモリ５７に記憶された出力用データを、最新データで更新せずに前回値のままで保持する（Ｓ２０６）。
【００８７】
Ｓ２０５又はＳ２０６が完了した後、下位データ処理部７３（図３参照）は、メモリ５７に記憶された出力用データを入出力回路６１へ出力する（Ｓ２０７）。ただし、下位データ処理部７３は、Ａ系５ａのＩＯモジュール（自モジュール）１５が稼動状態であるときに出力用データを出力する。
【００８８】
次に、非同期データ更新処理について説明する。図７は、第１の実施の形態に係るＩＯモジュール二重化制御装置における非同期データ更新処理を示すフローチャートである。
【００８９】
まず、データ更新処理部７７は、Ｉ／Ｆモジュール９のバッファメモリ４７に記憶された最新上位データを読み出し、これにシリアル番号を付与し、メモリ５７内に書き込む（Ｓ３０１）。ここで、シリアル番号の付与は必須ではない。
【００９０】
次に、データ更新処理部７７は、メモリ５７に記憶された出力用データを、プロセッサ３ａから新たに入力された最新上位データで更新する（Ｓ３０２）。
【００９１】
Ｓ３０２が完了した後、下位データ処理部７３（図３参照）は、メモリ５７に記憶された出力用データを入出力回路６１へ出力する（Ｓ３０３）。ただし、下位データ処理部７３は、Ａ系５ａのＩＯモジュール（自モジュール）１５が稼動状態であるときに出力用データを出力する。
【００９２】
次に、第１の実施の形態に係るＩＯモジュール二重化制御装置が適用された制御システム１（図１参照）におけるコントローラ３から制御データが入力され、外部機器７ａ、７ｂ、７ｃのいずれか一つに出力されるまでの処理の流れを、図８及び図９を参照して説明する。
【００９３】
図８及び図９は、第１の実施の形態に係るＩＯモジュール二重化制御装置が適用された制御システム１におけるデータ更新のタイミングと稼動及び待機の切り替えのタイミングとの関係を示す模式図である。図８は、Ｂ系５ｂのＩＯモジュール２９で遅延が発生している場合を示し、図９は、Ａ系５ａのＩＯモジュール１５で遅延が発生している場合を示す。
【００９４】
図８及び図９において、最上段は、Ａ系のプロセッサ３ａから入力され、Ｉ／Ｆモジュール９、２５のバッファメモリ４７（図３参照）に記憶された上位バスデータ値を示している。
【００９５】
２段目は、Ａ系５ａのＩＯモジュール１５（図３参照）が取り扱うデータを示している。２段目のうち、第１行は、最上位データに付与されたシリアル番号を、第２行は、メモリ５７に記憶された最上位データの値（以下、最新上位データ値と記載する）を、第３行は、最新上位データの一つ前のデータの値（以下、前回値と記載する）を、第４行は、メモリ５７に記憶された出力用データの値（以下、出力用データ値と記載する）を、それぞれ示している。
【００９６】
３段目は、Ｂ系５ｂのＩＯモジュール２９（図３参照）が取り扱うデータを示している。３段目のうち、第１行は、最上位データに付与されたシリアル番号を、第３行は、メモリ５７に記憶された最新上位データ値を、第３行は、最新上位データの一つ前の前回値を、第４行は、メモリ５７に記憶された出力用データ値を、それぞれ示している。
【００９７】
４段目は、稼動中のＩＯモジュールが、Ａ系５ａのＩＯモジュール１５か、Ｂ系５ｂのＩＯモジュール２９のいずれであるかを示している。
【００９８】
５段目は、図６を参照して説明した同期データ更新処理のＳ２０４で行ったシリアル番号が一致したか否かの判定の結果を示している。また、非同期データ更新処理が行われているときは、Ａ系５ａの出力用データが出力されているか、又は、Ｂ系５ｂの出力用データが出力されているか、のいずれであるかを示している。
【００９９】
６段目は、データ更新処理部７７（図４参照）が、同期データ更新処理又は非同期データ更新処理のいずれを行っているかを示している。
【０１００】
最下段においては、第１行は、下位出力データに付与されたシリアル番号を、第２行は、ＩＯモジュールユニット５から外部機器７ａに出力される下位出力データ値を、それぞれ示す。なお、ここで付与されているシリアル番号は必須ではない。
【０１０１】
また、図８及び図９中、太い下向きの矢印は、Ａ系５ａ又はＢ系５ｂの出力用データ値のいずれが、下位出力データ値に反映されているかを示しているが、反映のタイミングを正確に示すものではない。
【０１０２】
まず、図８を参照し、Ｂ系５ｂのＩＯモジュール２９で遅延が発生している場合について説明する。
【０１０３】
図８に示すように、上位バスデータ値は、プロセッサ３ａの動作周期（例えば、１０ｍｓ周期）で更新されている。
【０１０４】
Ａ系５ａ及びＢ系５ｂにおいて、ＩＯモジュール１５、２９が、上位バスデータ値をバッファメモリ４７から読み取って、最新上位データ値としてメモリ５７（図３参照）に記憶する。この最新上位データ値の更新タイミングは、プロセッサ３ａの動作周期とは同期していない。
【０１０５】
また、Ａ系５ａ及びＢ系５ｂとの間でも、最新上位データ値の更新タイミングは同期しておらず、Ｂ系５ｂが遅延している。
【０１０６】
しかしながら、Ａ系５ａのＩＯモジュール１５とＢ系５ｂのＩＯモジュール２９において、出力用データ値の更新タイミングは同期している。このような出力用データ値の更新タイミングの同期は、データ更新処理部７７が、Ａ系５ａの最新上位データに付与されたシリアル番号と、Ｂ系５ｂの最新上位データに付与されたシリアル番号とを比較し、両者が一致するときはメモリ５７に記憶された出力用データを、プロセッサ３ａから新たに入力された最新上位データで更新し、両者が一致しないときはメモリ５７に記憶された出力用データを、最新データで更新せずに前回値のままで保持していることにより、達成されている。
【０１０７】
図８に示すように、Ａ系５ａのＩＯモジュール１５が稼動中で、Ａ系５ａのＩＯデータ値が、下位出力データ値に反映されている状態で、Ａ系５ａで異常が発生すると、Ａ系５ａのＩＯモジュール１５が待機中に、Ｂ系５ｂのＩＯモジュール２９が待機中から稼動中に切り替わる。
【０１０８】
上述のようにＢ系５ｂが遅延しているときに、Ａ系→Ｂ系の切り替えが行われても、出力用データは同期しているので、下位出力データ値が現在の値から一つ前の値に戻ってしまうような下位出力データ値の後戻りが発生するのが防がれる。この結果、外部機器７ａの誤制御が発生するおそれがない。
【０１０９】
Ａ系→Ｂ系の切り替えの後、Ａ系５ａのＩＯモジュール１５が復帰するまでは、Ｂ系５ｂのＩＯモジュール２９において、データ更新処理部７７（図４参照）は、図７を参照して説明した非同期データ更新処理を行う。
【０１１０】
引き続きいて、Ａ系５ａのＩＯモジュール１５が復帰するまで、Ｂ系５ｂのＩＯモジュール２９が稼動を続ける。そして、Ｂ系５ｂのＩＯモジュール２９に異常が発生すると、Ｂ系→Ａ系の切り替えが発生する。この場合にも、上述のようなＢ系での遅延による影響はない。
【０１１１】
Ｂ系→Ａ系の切り替えの後、Ａ系５ａのＩＯモジュール１５において、データ更新処理部７７（図４参照）は、図７を参照して説明した非同期データ更新処理を行う。
【０１１２】
次に、図９を参照し、Ａ系５ａのＩＯモジュール１５で遅延が発生している場合について説明する。図８と同様な処理等については説明を省略している。
【０１１３】
図９に示すように、Ａ系５ａ及びＢ系５ｂとで行わる最新上位データ値の更新タイミングは、上位バスデータ値の更新タイミングと同期しておらず、Ａ系５ａ及びＢ系５ｂとの間でも同期しておらず、Ａ系５ａが遅延している。
【０１１４】
しかしながら、Ａ系５ａのＩＯモジュール１５とＢ系５ｂのＩＯモジュール２９において、図８を参照して説明したように、出力用データ値の更新は同期している。
【０１１５】
図９に示すように、Ａ系５ａのＩＯモジュール１５が稼動中で、Ａ系５ａのＩＯデータ値が、下位出力データ値に反映されている状態で、Ａ系５ａで異常が発生すると、Ａ系５ａのＩＯモジュール１５が待機中に、Ｂ系５ｂのＩＯモジュール２９が待機中から稼動中に切り替わる。
【０１１６】
上述のようにＡ系５ａが遅延しているときに、Ａ系→Ｂ系の切り替えが行われても、Ａ系５ａ及びＢ系５ｂにおいて出力用データの更新タイミングは同期しているので、下位出力データ値が現在の値から一つ前の値に戻ってしまうような下位出力データ値の後戻りが発生するのが防がれる。この結果、外部機器７ａの誤制御が発生するおそれがない。
【０１１７】
Ａ系→Ｂ系の切り替えの後、Ａ系５ａのＩＯモジュール１５が復帰するまでは、Ｂ系５ｂのＩＯモジュール２９において、データ更新処理部７７（図４参照）は、図７を参照して説明した非同期データ更新処理を行う。
【０１１８】
引き続きいて、Ａ系５ａのＩＯモジュール１５が復帰するまで、Ｂ系５ｂのＩＯモジュール２９が稼動を続ける。そして、Ｂ系５ｂのＩＯモジュール２９に異常が発生すると、Ｂ系→Ａ系の切り替えが発生する。この場合にも、上述のようなＡ系５ａでの遅延による影響はない。
【０１１９】
Ｂ系→Ａ系の切り替えの後、Ａ系５ａのＩＯモジュール１５において、データ更新処理部７７（図４参照）は、図７を参照して説明した非同期データ更新処理を行う。
【０１２０】
以上説明したように、上記実施の形態に係るＩＯモジュール二重化制御装置を適用した制御システム１では、Ａ系５ａ及びＢ系５ｂのＩＯモジュール１５、２９の、データ更新処理部７７（図３、４参照）は、Ａ系５ａのＩＯモジュール１５における最新上位データに付与されたシリアル番号と、Ｂ系５ｂのＩＯモジュール２９における最新上位データに付与されたシリアル番号とを比較し、両者が一致するときは、自らの系の最新上位データで、メモリ５７部に記憶された、自らのＩＯモジュールから外部機器７ａへ出力させるための出力用データを更新し、両者が一致しないときは、出力用データを更新せずに前回値を保持させる。これにより、Ａ系５ａ及びＢ系５ｂのＩＯモジュール１５、２９の間で、出力用データの更新タイミングを同期させることができるため、Ａ系５ａ及びＢ系５ｂのＩＯモジュール１５、２９の動作周期が異なり、いずれかの系において最新上位データの更新タイミングに遅延が生じていても、下位出力データ値の後戻りが発生するのが防がれる。この結果、外部機器７ａの誤制御が発生するおそれがないという効果を発揮する。
【０１２１】
＜第２の実施の形態＞
第１の実施の形態では、例えば、図１に示すように、Ａ系５ａ及びＢ系５ｂのＩＯモジュール１５、２９が一つの外部機器７ａを制御する場合、すなわちＩＯモジュール１５、２９が１チャンネルである場合を例に挙げて説明した。しかし、ＩＯモジュール１５、２９のチャネル数は２以上であってもよい。
【０１２２】
この場合、第１の実施の形態では、モジュール単位で二重化切替制御を行っているため、例えば、Ａ系５ａのＩＯモジュール１５のいずれかのチャネルで異常が発生したとき、Ｂ系５ｂのＩＯモジュール２９に切り替えられる。その後、Ｂ系５ｂのＩＯモジュール２９のチャネルの１つで異常が発生した場合、Ａ系５ａのＩＯモジュール１５の当該チャネルが正常であっても、モジュール毎に稼動状態を切り替えているので、Ａ系５ａのＩＯモジュール１５が復帰していなければ、処理を戻すことができない。このため、外部機器７ａの制御ができなくなるという事態の発生が懸念される。
【０１２３】
そこで、第２の実施の形態に係るＩＯモジュール二重化制御装置では、第１の実施の形態において、モジュール毎に行っていた二重化切替制御を、チャネル毎に行うことを提案する。
【０１２４】
第２の実施の形態に係るＩＯモジュール二重化制御装置の構成及びＩＯモジュール二重化制御方法の各工程は、第１の実施の形態の説明及び図面を、「モジュール」を「モジュールのチャネル」に読み替えれば、当業者であればその詳細を容易に理解できるので、説明及び図面を省略する。
【０１２５】
このような構成により、チャネル毎に切り替えができ、正常なチャネルを使用した動作の継続が可能となるので、外部機器の制御ができなくなるという事態の発生を抑えることができるという効果を発揮する。
【０１２６】
また、第１の実施の形態では、図５に示すフローチャートのＳ１０４、Ｓ１０７において、二重化切替処理部７９（図４参照）が、モジュール毎に、異常レベルが自モジュールが高いか否か、及び、他モジュールが高いか否かの判定を行っている。第２の実施の形態では、二重化切替処理部７９は、チャネル毎の異常レベルデータを取得しているので、次のようにチャネル毎の異常レベル判定結果を考慮したモジュール毎の二重化切替処理を行わせることが可能である。
【０１２７】
例えば、まず、二重化切替処理部７９が、チャネル毎に、自ら又は他のいずれが異常レベルが高いかを比較し、その結果をメモリ５７に記憶しておく。すべてのチャネルについて異常レベルの比較が終わったならば、二重化切替処理部７９は、比較結果に基づいて、自モジュール又は他モジュールのいずれが、異常レベルが高いチャネルが少ないかを判定する。そして、二重化切替処理部７９は、自モジュールにおける異常レベルが高いチャネルが少なければ、切り替えを行わず稼動を続行する。また、二重化切替処理部７９は、他モジュールにおける異常レベルが高いチャネルが少なければ、切り替えを行う。
【０１２８】
このような構成で、チャネル毎の異常レベルの比較結果を考慮して、モジュール毎の切り替えを行うことにより、正常なチャネルを使用して動作の継続が可能となるので、外部機器の制御ができなくなるという事態の発生の頻度を抑えることができるという効果を発揮する。
【０１２９】
＜第３の実施の形態＞
上記第１の実施の形態及び第２の実施の形態において、図１に示すように、Ａ系５ａのＩＯモジュール１５、１７、１９と、Ｂ系５ｂのＩＯモジュール２９、３１、３３とを、二重化制御信号線４１、４３、４５で接続して互いに通信可能としている。これらの二重化制御信号線４１、４３、４５は、作業者が手作業で接続し、それらの接続先が正しいか否かで目視で行うことが想定される。このため、誤接続が発生することを完全に防ぐことは難しいことが懸念される。
【０１３０】
そこで、第３の実施の形態に係るＩＯモジュール二重化制御装置では、第１の実施の形態における、シリアル番号及び異常レベルを含む二重化のためのデータ（以下、「二重化制御信号」と記載する）に、ＩＯモジュールを識別するためのＩＯモジュール識別情報の一例として局番情報をさらに付与することを提案する。以下、特に記載する場合を除き、第３の実施の形態を、第１の実施の形態に適用した場合を例に挙げて説明する。
【０１３１】
図１０は、第３の実施の形態に係るＩＯモジュール二重化制御装置における二重化制御信号の構成を示す模式図である。図１０に示すように、二重化制御信号１００は、ＩＯモジュールを識別するための局番情報１０１と、第１の実施の形態で説明したシリアル番号１０２と、モジュール毎の異常レベルを示す異常レベルデータ１０３と、を含んでいる。第３の実施の形態を第２の実施の形態に適用する場合には、二重化制御信号１００は、さらに、チャネル毎の異常レベルを示す異常レベルデータ１０４を含む。
【０１３２】
局番情報１０１は、ＩＯモジュールユニット５の中でＩＯモジュールを識別できるように固有な情報であればよい。また、局番情報１０１の形式は、特に限定されないが、例えば、Ａ系５ａを「１」、Ｂ系５ｂを「２」で示すような上位の階層を示す番号と、１つめのＩＯモジュールの接続ペアを示す「１」、２つめのＩＯモジュールの接続ペアを示す「２」のような下位の階層を示す情報とを、「‐（ハイフン）」でつないだものが考えられる。
【０１３３】
例えば、図１に示すＩＯモジュール１５、１７、１９、２９、３１、３３の局番情報は、以下の通りである。
Ａ系
ＩＯモジュール１５：  １−１
ＩＯモジュール１７：  １−２
ＩＯモジュール１９：  １−３
Ｂ系
ＩＯモジュール２９：  ２−１
ＩＯモジュール３１：  ２−２
ＩＯモジュール３３：  ２−３
【０１３４】
第３の実施の形態では、二重化切替処理部７９が、自モジュールの局番情報をメモリ５７に記憶している。そして、二重化切替処理部７９は、メモリ５７から局番情報を読み出し、他モジュールに送信にする二重化制御信号に格納している。
【０１３５】
図１１は、第３の実施の形態に係るＩＯモジュール二重化制御装置における接続判定処理の各工程を示すフローチャートである。接続判定処理は、図５を参照して説明した二重化切替処理に先だって、本発明の接続判定部の一例である二重化切替処理部７９（図４参照）により行われる。
【０１３６】
まず、図１１に示すように、二重化切替処理部７９は、接続ペアの局番情報をプロセッサ３ａ又はプロセッサ３ｂ（図１参照）から取得する（Ｓ４０１）。次に、他モジュールから受信した二重化制御信号から他モジュールの局番情報を取得する（Ｓ４０２）。
【０１３７】
そして、接続ペアの局番情報（例えば、１−１；２−１）と、自モジュールの局番情報（メモリ５７に格納）及び他モジュールの局番情報との対比を行い、一致しているか否かを判定する（Ｓ４０３）。
【０１３８】
Ｓ４０３で判定がＹｅｓであれば、二重化切替処理（図５）に進む（Ｓ４０４）。一方、Ｓ４０３で判定がＮｏであれば、二重化制御信号線４１、４３、４５の接続の不整合がある旨のエラーを作業者に通知し（Ｓ４０５）、二重化切替処理に進まずに、処理を終了する。
【０１３９】
エラーの通知方法は、ＩＯモジュール１５、１７、１９、２７、２９、３１に設けたＬＥＤの点灯であるが、特に限定されない。
【０１４０】
このような構成により、第３の実施の形態に係るＩＯモジュール二重化制御装置及び二重化制御方法は、自らのモジュールの局番情報と他のモジュール局番情報に基づいて、二重化制御信号線４１、４３、４５の接続先が正しいか否かを判定し、誤接続を検知し、エラーを通知して適切な対応を作業者に求めること、及び／又は、二重化切替処理を行わないようにすることができるようになるという効果を発揮する。
【０１４１】
なお、図１１に示した接続判定処理は、特に限定されないが、二重化制御信号線４１、４３、４５の接続作業後の、少なくともＩＯモジュールユニット５（図１参照）の稼動開始時に行えば足りる。
【０１４２】
なお、本発明は上記実施の形態に限定されず、種々変更して実施することが可能である。上記実施の形態において、添付図面に図示されている構成要素の大きさや形状、機能などについては、これに限定されず、本発明の効果を発揮する範囲内で適宜変更することが可能である。その他、本発明の目的の範囲を逸脱しない限りにおいて適宜変更して実施することが可能である。
【０１４３】
例えば、上記実施の形態では、図３及び図４に示すように、Ａ系５ａのＩＯモジュール１５及びＢ系５ｂのＩＯモジュール２９のそれぞれに、二重化切替処理部７９を設け、互いに協働することにより二重化切替処理を行っているが、Ａ系５ａのＩＯモジュール１５及びＢ系５ｂのＩＯモジュール２９の外部に共通の二重化切替処理部を設けてもよい。
【０１４４】
また、上記実施の形態では、最新上位データに付与される識別情報にシリアル番号を用いているが、これに限定されるものではない。例えば、最新上位データに、「ＬＯＷ（０）」及び「Ｈｉｇｈ（１）」の値を繰り返して付与してもよい。この場合、遅延が、Ａ系５ａのＩＯモジュール１５及びＢ系５ｂのＩＯモジュール２９の動作周期の１周期内であれば、シリアル番号を付与したときと同様に同期データ更新処理を行うことができる。
【産業上の利用可能性】
【０１４５】
本発明は、二重化されたＩＯモジュールから出力されるデータの同期化を簡易な構成で実現できるＩＯモジュール二重化制御装置及び方法を提供するという効果を奏し、例えば、プラントの制御システムに適用して好適である。
【符号の説明】
【０１４６】
１  制御システム
３  コントローラ（制御装置）
３ａ、３ａ  プロセッサ
５  ＩＯモジュールユニット
５ａ  Ａ系
５ｂ  Ｂ系
７ａ〜７ｃ  外部機器（被制御装置）
９、１１、２５、２７、２９、３１、３３  Ｉ／Ｆモジュール
１３  上位ネットワーク
１５、１７、１９  ＩＯモジュール
２３  下位ネットワーク
４１、４３、４５  二重化制御信号線
４７  バッファメモリ
５１  ＦＰＧＡ（演算装置）
５５  バスＩ／Ｆ制御部
５７  メモリ（記憶部）
５９  基準発振器
６１  入出力回路
６３  切替スイッチ
６５  二重化通信部
７１  上位データ処理部
７３  下位データ処理部
７５  取得部
７７  データ更新処理部
７９  二重化切替処理部
８１  異常レベル検出部
１００  二重化制御信号
１０１  局番情報（ＩＯモジュール識別情報）
１０２  シリアル番号（識別情報）
１０３、１０４  異常レベルデータ
【図１】
2020123309.tif 000003
【図２】
2020123309.tif 000004
【図３】
2020123309.tif 000005
【図４】
2020123309.tif 000006
【図５】
2020123309.tif 000007
【図６】
2020123309.tif 000008
【図７】
2020123309.tif 000009
【図８】
2020123309.tif 000010
【図９】
2020123309.tif 000011
【図１０】
2020123309.tif 000012
【図１１】
2020123309.tif 000013