本発明の実施の形態について、図面に基づいて以下に説明する。
<実施の形態1>
まず、本発明の実施の形態1による二重化システムの構成について説明する。
図1は、本実施の形態1による二重化システム100の構成の一例を示すブロック図である。
図1に示すように、二重化システム100は、制御系システム101aと待機系システム101bとを備えている。制御系システム101aは、制御対象を制御するためのプログラムを実行する。待機系システム101bは、制御系システム101aに異常が発生した場合において、制御系システム101aに代わって制御対象を制御するためのプログラムを実行する。
制御系システム101aは、CPUユニット102aと、ネットワークユニット103aと、ユニット間接続バス104aとを備えている。待機系システム101bは、CPUユニット102bと、ネットワークユニット103bと、ユニット間接続バス104bとを備えている。なお、制御系システム101aと待機系システム101bとは同じ構成であるため、以下では代表して制御系システム101aの構成について説明する。
CPUユニット102aは、CPU110aと、メモリ111aと、バス用DMAC112aとを備えている。CPU110a、メモリ111a、およびバス用DMAC112aは、バス113aで互いに通信可能に接続されている。
ネットワークユニット103aは、CPU120aと、メモリ121aと、バス用DMAC122aと、送信制御部123aと、受信制御部124aとを備えている。
メモリ121aは、データ領域とヘッダ領域とを有している。図2に示すように、ヘッダ領域には、宛先番号130、シーケンス番号131、確認応答番号132、フレーム種別133、データ量134、およびチェックサム135を各々設定するための領域が設けられている。また、メモリ121aは、2ポート設けられており、バス用DMAC122aおよびCPU120aの各々から同時にアクセスが可能である。
送信制御部123aは、送信DMAC125aと送信FIFO(First in, First out)126aとを備えている。
送信DMAC125aは、送信FIFO126aの空き数を確認する機能と、メモリ121aから送信FIFO126aにデータおよびそのヘッダ情報(ヘッダ領域に設定された情報)を転送する機能と、当該転送する機能が動作中または停止中であるかを示す機能とを有している。
送信FIFO126aは、本領域にデータおよびそのヘッダ情報が書き込まれると、当該データおよびそのヘッダ情報を送信先のネットワークユニット103bの受信FIFO128bに送信する機能を有している。
受信制御部124aは、受信DMAC127aと受信FIFO128aとを備えている。受信DMAC127aは、図3に示すように、フレーム種別宛先アドレス140および割込み番号141をフレーム種別ごとに有している。CPU120aは、フレーム種別アドレス140に対応するレジスタに任意の値を書き込む(設定する)ことが可能である。受信DMAC127aは、ネットワークユニット103bからデータを受信した時に、受信FIFO128aのヘッダ情報に含まれるフレーム種別133に応じて、フレーム種別宛先アドレス140が示すメモリ121aのデータ領域にデータを送信する機能を有している。
制御系システム101aのCPUユニット102aにおけるバス用DMAC112aの機能は、処理回路により実現される。すなわち、制御系システム101aのCPUユニット102aは、メモリ111aに格納されたデータをメモリ121aに転送するための処理回路を備える。処理回路は、メモリ111aに格納されるプログラムを実行する図示しないCPU(中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、DSP(Digital Signal Processor)ともいう)である。
制御系システム101aのCPUユニット102aにおけるバス用DMAC112aの機能は、ソフトウェア、ファームウェア、またはソフトウェアとファームウェアとの組み合わせにより実現される。ソフトウェアまたはファームウェアは、プログラムとして記述され、メモリ111aに格納される。処理回路は、メモリ111aに記憶されたプログラムを読み出して実行することにより、バス用DMAC112aの機能を実現する。すなわち、制御系システム101aのCPUユニット102aは、メモリ111aに格納されたデータをメモリ121aに転送するステップが結果的に実行されることになるプログラムを格納するためのメモリ111aを備える。また、これらのプログラムは、バス用DMAC112aの手順または方法をコンピュータに実行させるものであるともいえる。ここで、メモリとは、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリー、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electrically Erasable Programmable Read Only Memory)等の不揮発性または揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD(Digital Versatile Disk)等が該当する。
制御系システム101aのネットワークユニット103aにおけるバス用DMAC122a、送信制御部123a、受信制御部124a、送信DMAC125a、送信FIFO126a、受信DMAC127a、および受信FIFO128aの各機能は、処理回路により実現される。すなわち、制御系システム101aのネットワークユニット103aは、メモリ121aに格納されたデータをメモリ111aに転送し、待機系システム101bのネットワークユニット103bへのデータの送信を制御し、待機系システム101bのネットワークユニット103bからのデータの受信を制御し、メモリ121aに格納されたデータを送信FIFO126aに転送し、メモリ121aから転送されたデータを待機系システム101bのネットワークユニット103bに送信し、受信FIFO128aが受信したデータをメモリ121aに転送し、待機系システム101bのネットワークユニット103bからのデータを受信するための処理回路を備える。処理回路は、メモリ121aに格納されるプログラムを実行する図示しないCPU(中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、DSPともいう)である。
制御系システム101aのネットワークユニット103aにおけるバス用DMAC122a、送信制御部123a、受信制御部124a、送信DMAC125a、送信FIFO126a、受信DMAC127a、および受信FIFO128aの各機能は、ソフトウェア、ファームウェア、またはソフトウェアとファームウェアとの組み合わせにより実現される。ソフトウェアまたはファームウェアは、プログラムとして記述され、メモリ121aに格納される。処理回路は、メモリ121aに記憶されたプログラムを読み出して実行することにより、各機能を実現する。すなわち、制御系システム101aのネットワークユニット103aは、メモリ121aに格納されたデータをメモリ111aに転送するステップ、待機系システム101bのネットワークユニット103bへのデータの送信を制御するステップ、待機系システム101bのネットワークユニット103bからのデータの受信を制御するステップ、メモリ121aに格納されたデータを送信FIFO126aに転送するステップ、メモリ121aから転送されたデータを待機系システム101bのネットワークユニット103bに送信するステップ、受信FIFO128aが受信したデータをメモリ121aに転送するステップ、待機系システム101bのネットワークユニット103bからのデータを受信するステップが結果的に実行されることになるプログラムを格納するためのメモリ121aを備える。また、これらのプログラムは、バス用DMAC122a、送信制御部123a、受信制御部124a、送信DMAC125a、送信FIFO126a、受信DMAC127a、および受信FIFO128aの手順または方法をコンピュータに実行させるものであるともいえる。ここで、メモリとは、例えば、RAM、ROM、フラッシュメモリー、EPROM、EEPROM等の不揮発性または揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等が該当する。
次に、二重化システム100の動作について説明する。
図4,5は、二重化システム100の動作の一例を示すシーケンス図であり、制御系システム101aのCPUユニット102aから待機系システム101bのCPUユニット102bに対して大量のデータを複数回に分けて送信するときの動作を示している。なお、図4と図5との境界はBL1で示されている。
図4,5において、ステップS101〜ステップS104は制御系システム101aにおけるCPUユニット102aのバス用DMAC112aの動作を示し、ステップS111〜ステップS116は制御系システム101aにおけるネットワークユニット103aのCPU120aの動作を示し、ステップS121〜ステップS123は制御系システム101aにおけるネットワークユニット103aの送信DMAC125aの動作を示し、ステップS131〜ステップS133は待機系システム101bにおけるネットワークユニット103bの受信DMAC127bの動作を示し、ステップS141およびステップS142は待機系システム101bにおけるネットワークユニット103bの送信DMAC125bの動作を示し、ステップS151〜ステップS154は待機系システム101bにおけるネットワークユニット103bのCPU120bの動作を示し、ステップS161およびステップS162は待機系システム101bにおけるネットワークユニット103bのバス用DMAC122bの動作を示し、ステップS171は待機系システム101bにおけるCPUユニット102bのCPU110bの動作を示している。
図6は、メモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの初期状態を示す図である。
まず、DATA1の送信について説明する。
DATA1の送信は、ステップS101、ステップS111、ステップS113、ステップS121、ステップS131、ステップS141、ステップS151、ステップS152、ステップS161、およびステップS171の処理を実行することによって実現される。
ステップS101において、CPUユニット102aは、制御系システム101aと待機系システム101bとを同期するためのDATA1を、ネットワークユニット103aに転送する。具体的には、CPUユニット102aのバス用DMAC112aは、メモリ111aに格納されているDATA1を、ユニット間接続バス104aを介してネットワークユニット103aのメモリ121aに転送する。このとき、DATA1は、メモリ121aの送信DMAC125aがアクセス可能なデータ領域に格納される。そして、バス用DMAC112aは、メモリ121aにDATA1を転送した後に、ネットワークユニット103aのCPU120aに対してバス通信した旨を割込みにより通知する。
図7は、CPUユニット102aからネットワークユニット103aにDATA1を転送した時のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示す図である。図7に示すように、メモリ121aにはDATA1が格納されている。
ステップS111において、ネットワークユニット103aのCPU120aは、CPUユニット102aのバス用DMAC112aからバス通信した旨の割込みの通知を受けると、送信FIFO126aの空き数が1以上であり、かつ送信DMAC125aの動作が停止中であることを確認する。具体的には、CPU120aは、送信FIFO126aの空き数の情報、および送信DMAC125aの動作が動作中または停止中であるかの情報を送信DMAC125aから取得し、取得した情報に基づいて上記の確認を行う。
上記の確認後、CPU120aは、メモリ121aのヘッダ領域(ステップS101でメモリ121aに格納されたDATA1に対応するヘッダ領域)において、宛先番号130として「待機系システム101bのネットワークユニット103bのID」を設定し(書き込み)、シーケンス番号131として「1」を設定し、確認応答番号132として「無し」を設定し、フレーム種別133として「トラッキングデータフレーム1」を設定し、データ量134として「DATA1のデータ量」を設定する。その後、CPU120aは、送信FIFO126aの空き数を−1とし(空き数を5から4に変更し)、送信DMAC125aを起動する。
ステップS121において、送信DMAC125aは、メモリ121aのヘッダ領域(ステップS101でメモリ121aに格納されたDATA1に対応するヘッダ領域)において、チェックサム135を生成する。そして、送信DMAC125aは、メモリ121aに格納されているDATA1およびそのヘッダ情報を、送信FIFO126aに転送する。図8は、送信FIFO126aにDATA1を転送した時のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示す図である。
送信FIFO126aは、メモリ121aから転送されたDATA1およびそのヘッダ情報を、ネットワークユニット103bの受信FIFO128bに送信する。転送終了後、送信DMAC125aは、転送終了の旨をCPU120aに割込みにより通知し、動作を停止する。
ステップS131において、ネットワークユニット103bの受信DMAC127bは、受信FIFO128bがDATA1およびそのヘッダ情報を受信したことを確認するとともに、ヘッダ情報に含まれるチェックサム135を参照して正常なデータを受信したことを確認する。その後、受信DMAC127bは、ヘッダ情報に含まれるフレーム種別133を参照し、フレーム種別133に対応するメモリ121b内のフレーム種別宛先アドレス140にDATA1を転送する。なお、フレーム種別宛先アドレス140は、後にバス用DMAC122bを起動したときに、メモリ121bに格納されたデータをCPUユニット102bに転送可能なアドレスに予め設定されているものとする。これにより、後のステップS152の処理を短時間で行うことが可能となる。受信DMAC127bは、DATA1をメモリ121bに転送した後、当該転送が完了した旨をCPU120bに割込みにより通知し、フレーム種別宛先アドレス140を更新する(他のアドレスを設定する)。
ステップS151において、CPU120bは、メモリ121bに格納されたDATA1のヘッダ情報に含まれるシーケンス番号131が「1」であることを確認することにより、DATA1を正常に受信したことを認識する。その後、CPU120bは、DATA1を正常に受信した旨をネットワークユニット103aに応答すべく応答データを生成する。このとき、CPU120bは、応答データのヘッダ情報において、宛先番号130として「制御系システム101aのネットワークユニット103aのID」を設定し、シーケンス番号131として「無し」を設定し、確認応答番号132として「1」を設定し、フレーム種別133として「応答フレーム」を設定し、データ量134として「受信した回数」を設定する。その後、CPU120bは、送信DMAC125bを起動する。
ステップS152において、CPU120bは、メモリ121bに格納されたDATA1をメモリ111bに転送するために、バス用DMAC122bを起動する。
ステップS161において、バス用DMAC122bは、メモリ121bに格納されたDATA1をメモリ111bに転送する。
ステップS171において、CPUユニット102bは、ネットワークユニット103bから転送されメモリ111bに格納されたDATA1の内容を確認し、DATA1に係る全ての情報を受信した後、制御系システム101aのCPUユニット102aと同じ状態となるように(CPUユニット102aとCPUユニット102bとの同期をとるために)、データ情報(ここでは、DATA1の情報)を展開する。
上記の動作を行うことにより、制御系システム101aから待機系システム101bにDATA1が送信される。次に、当該DATA1の送信に関連して実行する動作について説明する。
ステップS141において(ステップS152とほぼ同じタイミングで)、送信DMAC125bは、ステップS151でCPU120bが生成した応答データを、ネットワークユニット103aの受信FIFO128aに送信する。
その後、ネットワークユニット103aの受信DMAC127aは、受信した応答データのヘッダ情報に含まれるフレーム種別133が「応答フレーム」であることを確認して、応答データを受信した旨をCPU120aに割込みにより通知する。
ステップS113において、CPU120aは、応答データを受信した旨が割込みにより通知されると、ヘッダ情報に含まれる確認応答番号132が「1」であることを確認することにより、応答データを正常に受信したことを認識する。その後、CPU120aは、送信FIFO126aの空き数を+1とする(空き数を3から4に変更する)。図9は、応答データを受信する前のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示している。また、図10は、応答データを受信した後のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示している。図9,10に示すように、本実施の形態1では、送信FIFO126aの空き数を増加させることにより、送信FIFO126aの空きが常にあるため、制御系システム101aから待機系システム101bへのデータの送信動作が中断されることはない。
上記では、DATA1の送信に関する動作について説明した。次に、DATA2の送信に関する動作について説明する。
DATA2の送信は、ステップS102、ステップS112、ステップS115、ステップS121、ステップS132、ステップS142、ステップS153、ステップS154、およびステップS161の処理を実行することによって実現される。以下では、DATA1の送信に関する動作と異なる動作について説明し、DATA1の送信に関する動作と同様の動作については説明を省略する。
ステップS112において、CPU120aは、メモリ121aのヘッダ領域(ステップS102でメモリ121aに格納されたDATA2に対応するヘッダ領域)において、シーケンス番号131として「2」を設定する。
ステップS153において、CPU120bは、DATA2を正常に受信した旨をネットワークユニット103aに応答すべく応答データを生成する。このとき、CPU120bは、応答データのヘッダ情報において、確認応答番号132として「2」を設定する。
上記の動作を行うことにより、制御系システム101aから待機系システム101bにDATA2が送信される。また、図4に示すように、ステップS102はステップS121と並列して動作し、ステップS122はステップS113、ステップS141、ステップS152と並列して動作している。これにより、二重化システム100全体のオーバーヘッドを少なくすることが可能となる。
以上のことから、本実施の形態1によれば、制御系システム101aにおけるCPU110a、CPU120a、および送信DMAC125aと、待機系システム101bにおける受信DMAC127b、送信DMAC125b、CPU120b、およびバス用DMAC122bとを並列に動作させることにより、送信の動作に要する時間を短縮することができる。従って、制御系システム101aから待機系システム101bにデータを高速に送信することができ、データの送信に係る効率を向上させることが可能となる。
<実施の形態2>
本発明の実施の形態2では、CPUユニット102aとネットワークユニット103a
(CPUユニット102bとネットワークユニット103b)との間におけるデータの転送速度(バス転送速度)が、ネットワークユニット103aとネットワークユニット103bとの間におけるデータの転送速度(ネットワーク転送速度)よりも速い場合について説明する。
図11,12は、本実施の形態2による二重化システムの動作の一例を示すシーケンス図である。なお、図11と図12との境界はBL2で示されている。
図11,12において、ステップS181〜ステップS189は、CPU120aの動作を示している。その他の構成および動作については、実施の形態1と同様であるため、ここでは説明を省略する。
ステップS181において、CPU120aは、バス用DMAC112aからバス通信した旨の割込みの通知を受けると、送信FIFO126aの空き数が1以上であり、かつ送信DMAC125aの動作が動作中であることを確認する。また、CPU120aは、メモリ121aのヘッダ領域(ステップS102でメモリ121aに格納されたDATA2に対応するヘッダ領域)において、宛先番号130として「待機系システム101bのネットワークユニット103bのID」を設定し、シーケンス番号131として「2」を設定し、確認応答番号132として「無し」を設定し、フレーム種別133として「トラッキングデータフレーム1」を設定し、データ量134として「DATA2のデータ量」を設定する。
このとき、CPU120aは、送信DMAC125aを起動しない。すなわち、送信DMAC125aは、メモリ121aに格納されているDATA2およびそのヘッダ情報を、送信FIFO126aに転送しない。
ステップS182において、CPU120aは、送信DMAC125aから転送終了の旨の割込みの通知を受けると、送信FIFO126aの空き数が1以上であり、かつ送信DMAC125aの動作が停止中であることを確認する。その後、CPU120aは、送信FIFO126aの空き数を−1とし、送信DMAC125aを起動する。
ステップS183において、CPU120aは、バス用DMAC112aからバス通信した旨の割込みの通知を受けると、送信FIFO126aの空き数が1以上であり、かつ送信DMAC125aの動作が動作中であることを確認する。また、CPU120aは、メモリ121aのヘッダ領域(ステップS103でメモリ121aに格納されたDATA3に対応するヘッダ領域)において、宛先番号130として「待機系システム101bのネットワークユニット103bのID」を設定し、シーケンス番号131として「3」を設定し、確認応答番号132として「無し」を設定し、フレーム種別133として「トラッキングデータフレーム1」を設定し、データ量134として「DATA3のデータ量」を設定する。
このとき、CPU120aは、送信DMAC125aを起動しない。すなわち、送信DMAC125aは、メモリ121aに格納されているDATA3およびそのヘッダ情報を、送信FIFO126aに転送しない。
ステップS184において、CPU120aは、バス用DMAC112aからバス通信した旨の割込みの通知を受けると、送信FIFO126aの空き数が3であり、かつ送信DMAC125aの動作が動作中であることを確認する。また、CPU120aは、メモリ121aのヘッダ領域(ステップS104でメモリ121aに格納されたDATA4に対応するヘッダ領域)において、宛先番号130として「待機系システム101bのネットワークユニット103bのID」を設定し、シーケンス番号131として「4」を設定し、確認応答番号132として「無し」を設定し、フレーム種別133として「トラッキングデータフレーム1」を設定し、データ量134として「DATA4のデータ量」を設定する。
このとき、CPU120aは、送信DMAC125aを起動しない。すなわち、送信DMAC125aは、メモリ121aに格納されているDATA4およびそのヘッダ情報を、送信FIFO126aに転送しない。
また、CPU120aは、送信DMAC125aの動作中にCPUユニット102aから連続してデータ(DATA3およびDATA4)が転送されてきたため、次に送信DMAC125aを起動する際には、DATA3およびDATA4の2つのデータをメモリ121aから送信FIFO126aに転送できるように設定する。設定後、CPU120aは、送信FIFO126aの空き数が転送するデータ数よりも大きい値であることを確認する。なお、CPU120aは、送信FIFO126aの空き数よりも転送するデータ数の方が大きい値である場合は、送信FIFO126aの空き数分のデータだけ転送できるようにする。
ステップS185において、CPU120aは、応答データを受信した旨が割込みにより通知されると、ヘッダ情報に含まれる確認応答番号132が「1」であることを確認することにより、応答データを正常に受信したことを認識する。その後、CPU120aは、送信FIFO126aの空き数を+1とする。
ステップS186において、CPU120aは、送信DMAC125aから転送終了の旨の割込みの通知を受けると、送信FIFO126aの空き数が4であって、当該空き数が転送するデータ数よりも大きい値であり、かつ送信DMAC125aの動作が停止中であることを確認する(図13参照)。その後、CPU120aは、送信FIFO126aの空き数を−2とし、送信DMAC125aを起動する(図14参照)。図13は、ステップS186の動作前のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示している。また、図14は、ステップS186の動作後のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示している。図13,14において、送信FIFO126aでは、DATA1は送信済みであるため空きとみなされる。本実施の形態2では、バス転送速度とネットワーク転送速度との差によって送信FIFO126aの空き数が少なくなるため、送信FIFO126aの空き数を参照することによりデータが上書きされることを防いでいる。
以上のことから、本実施の形態2によれば、複数のデータを連結して転送することによって、二重化システム100全体のオーバーヘッドを少なくすることが可能となる。また、制御系システム101aから待機系システム101bにデータを高速に送信することができ、データの送信に係る効率を向上させることが可能となる。
<実施の形態3>
本発明の実施の形態3では、制御系システム101aから待機系システム101bにデータを送信することができなかった場合に、送信できなかったデータを再送信する場合について説明する。
図15〜17は、本実施の形態3による二重化システムの動作の一例を示すシーケンス図である。なお、図15と図16との境界はBL3で示され、図16と図17との境界はBL4で示されている。
図15〜17において、ステップS191〜ステップS207はCPU120aの動作を示し、ステップS211〜ステップS216は送信DMAC125bの動作を示し、ステップS221〜ステップS229はCPU120bの動作を示している。その他の構成および動作については、実施の形態1と同様であるため、ここでは説明を省略する。
ステップS122において、送信DMAC125aは、メモリ121aに格納されているDATA2およびそのヘッダ情報を、送信FIFO126aに転送する。転送終了後、送信DMAC125aは、転送終了の旨をCPU120aに割込みにより通知し、動作を停止する。
ここで、送信FIFO126aは、メモリ121aから転送されたDATA2およびそのヘッダ情報を、ネットワークユニット103bの受信FIFO128bに送信するが、ノイズの影響によって受信FIFO128bにはDATA2およびそのヘッダ情報が届いていないものとする。このように、データがネットワークユニット103bに届かない場合は、図4のステップS132、ステップS153、ステップS154、およびステップS142の動作を行うことができない。
ステップS191において、CPU120aは、応答データを受信した旨が割込みにより通知されると、ヘッダ情報に含まれる確認応答番号132が「1」であることを確認することにより、応答データを正常に受信したことを認識する。その後、CPU120aは、送信FIFO126aの空き数を+1とする。
なお、ステップS191の処理中に、CPU120aは、バス用DMAC112aからバス通信した旨の割込みの通知を受ける場合がある。このような場合において、PU120aは、応答データを受信した旨の割込みによる通知よりも、バス通信した旨の割込みによる通知の方が、優先度が高くなるように予め設定しておくことによって、応答データを受信した旨の割込みによる通知を受けたときの処理(ステップS191の処理)を中断し、バス通信した旨の割込みによる通知を受けたときの処理(ステップS192の処理)に移行する。
ステップS192において、CPU120aは、送信FIFO126aの空き数が1以上であり、かつ送信DMAC125aの動作が停止中であることを確認する。また、CPU120aは、メモリ121aのヘッダ領域(ステップS103でメモリ121aに格納されたDATA3に対応するヘッダ領域)において、宛先番号130として「待機系システム101bのネットワークユニット103bのID」を設定し、シーケンス番号131として「3」を設定し、確認応答番号132として「無し」を設定し、フレーム種別133として「トラッキングデータフレーム1」を設定し、データ量134として「DATA3のデータ量」を設定する。その後、CPU120aは、送信FIFO126aの空き数を−1とし、送信DMAC125aを起動する。
ステップS193において、CPU120aは、送信DMAC125aを起動した後、中断したステップS191の処理を再開する。
上記より、割込みの優先度を変更することによって、二重化システム100全体のオーバーヘッドを少なくすることが可能となる。
次に、DATA2の送信の失敗後、DATA2を再送信するまでの動作について説明する。
ステップS221において、CPU120bは、メモリ121bに格納されたDATA3のヘッダ情報に含まれるシーケンス番号131が「3」であることを確認する。このとき、CPU120bは、シーケンス番号131が「1」のデータ(DATA1)を受信した後に、シーケンス番号131が「2」のデータではなく、シーケンス番号131が「3」のデータ(DATA3)を受信したことから、データの受信が異常であると判断する。
そして、CPU120bは、データの受信が異常である旨をネットワークユニット103aに応答すべく応答データを生成する。このとき、CPU120bは、応答データのヘッダ情報において、宛先番号130として「制御系システム101aのネットワークユニット103aのID」を設定し、シーケンス番号131として「無し」を設定し、確認応答番号132として「1」を設定し、フレーム種別133として「応答フレーム」を設定し、データ量134として「受信した回数」を設定する。その後、CPU120bは、送信DMAC125を起動する。なお、ステップS222およびステップS223についても同様の処理を行う。
ステップS211において、送信DMAC125bは、ステップS221でCPU120bが生成した応答データを、ネットワークユニット103aの受信FIFO128aに送信する。なお、ステップS212およびステップS213についても同様の処理を行う。
ステップS196において、CPU120aは、応答データを受信した旨が割込みにより通知されると、ヘッダ情報に含まれる確認応答番号132が「1」であることを確認する。このとき、ステップS191で確認応答番号132が「1」である応答データを受信しているため、今回(ステップS196)は2度目の確認応答番号132が「1」である応答データを受信したことになる。同じ確認応答番号132を受信した場合は、次の番号以降のシーケンス番号131のデータの送信、すなわちシーケンス番号131が「2」以降のデータの送信は失敗であると判断する。ここでは、DATA2およびDATA3の送信が失敗であると判断する。
上記の判断の後、CPU120aは、送信FIFO126aの空き数を−2とする。図18は、ステップS196の動作前(5回目のデータの転送を開始した後)のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示している。また、図19は、ステップS196の動作後(2回目の応答後)のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示している。図18において、送信FIFO126aでは、DATA1は送信済みであるため空きとみなされる。また、図19において、送信FIFO126aでは、DATA1は送信済みであるため空きとみなされ、DATA2およびDATA3が送信済みであると認識されて空きとみなされる。図19に示すように、送信FIFO126aの空き数が3となり、CPUユニット102aから4つのデータが送られている状態となっている。従って、CPU120aは、次に送信DMAC125aを起動する際には、DATA2、DATA3、およびDATA4の3つのデータをメモリ121aから送信FIFO126aに転送できるように設定する。
ステップS197において、CPU120aは、転送終了の旨が割込みにより通知されると、再び送信DMAC125aを起動する。その後、送信DMAC125aは、メモリ121aに格納されているDATA2〜4およびそれらのヘッダ情報を、送信FIFO126aに転送する(ステップS126〜ステップS128)。送信FIFO126aは、メモリ121aから転送されたDATA2〜4およびそれらのヘッダ情報を、ネットワークユニット103bの受信FIFO128bに送信する。その後、CPU120aは、送信FIFO126aの空き数を−3とし、空き数を0とする。図20は、ステップS197の動作後(6回目のデータの転送を開始した後)のメモリ111a、メモリ121a、送信FIFO126a、および受信FIFO128bの状態を示している。図20において、送信FIFO126aでは、DATA4,5は送信中であり、DATA2〜4は送信を開始したため、空きは0となる。
ステップS198において、CPU120aは、応答データを受信した旨が割込みにより通知されると、ヘッダ情報に含まれる確認応答番号132が「1」であることを確認する。今回(ステップS198)は、ステップS191およびステップS196に続いて、確認応答番号132が「1」のデータを受信したことになる(3度目)。CPU120aは、送信FIFO126aの空き数を+1とする。
以上のことから、本実施の形態3によれば、送信に失敗したデータの再送信を行うことが可能となる。
<実施の形態4>
本発明の実施の形態4では、制御系システム101aから待機系システム101bに系を切替える場合について説明する。
図21,22は、本実施の形態4による二重化システムの動作の一例を示すシーケンス図である。なお、図21と図22との境界はBL5で示されている。
図21,22において、ステップS231はバス用DMAC112aの動作を示し、ステップS241〜ステップS244はCPU120aの動作を示し、ステップS251およびステップS252は送信DMAC125aの動作を示し、ステップS261は受信DMAC127bの動作を示し、ステップS271は送信DMAC125bの動作を示し、ステップS282およびステップS283はCPU120bの動作を示し、ステップS291はバス用DMAC122bの動作を示し、ステップS301はCPU110bの動作を示している。その他の構成および動作については、実施の形態2と同様であるため、ここでは説明を省略する。なお、以下では、CPUユニット102aにおいて、DATA5の転送後(ステップS105の後)に何らかの異常が発生したため、制御系システム101aから待機系システム101bに系を切替える場合について説明する。
ステップS231において、バス用DMAC112aは、系の切替え要求をCPU120aに送信する。
ステップS241において、CPU120aは、送信DMAC125aが動作中であるか否かを確認し、動作中であれば送信DMAC125aに対して停止要求を行う。このとき、DATA4の送信は中断されるため、CPU120aは、送信FIFO126aの空き数を+1とする。
ステップS251において、送信DMAC125aは、CPU120aからの停止要求を受けて、DATA3を転送した後に動作を停止する。
ステップS242において、CPU120aは、送信DMAC125aから転送終了の旨の割込みの通知を受けると、メモリ121aのヘッダ領域において、宛先番号130として「待機系システム101bのネットワークユニット103bのID」を設定し、シーケンス番号131として「4」を設定し、確認応答番号132として「無し」を設定し、フレーム種別133として「系切替えフレーム」を設定し、データ量134として「系切替え情報のデータ量」を設定する。その後、CPU120aは、送信FIFO126aの空き数を−1とし(空き数を5から4に変更し)、送信DMAC125aを起動する。
ステップS252において、送信DMAC125aは、メモリ121aのヘッダ領域(系切替え情報に対応するヘッダ領域)において、チェックサム135を生成する。そして、送信DMAC125aは、メモリ121aに格納されている系切替え情報およびそのヘッダ情報を、送信FIFO126aに転送する。
送信FIFO126aは、メモリ121aから転送された系切替え情報およびそのヘッダ情報を、ネットワークユニット103bの受信FIFO128bに送信する。転送終了後、送信DMAC125aは、転送終了の旨をCPU120aに割込みにより通知し、動作を停止する。
ステップS261において、受信DMAC127bは、受信FIFO128bが系切替え情報およびそのヘッダ情報を受信したことを確認するとともに、ヘッダ情報に含まれるチェックサム135を参照して正常なデータを受信したことを確認する。その後、受信DMAC127bは、ヘッダ情報に含まれるフレーム種別133を参照し、フレーム種別133に対応するメモリ121b内のフレーム種別宛先アドレス140に系切替え情報を転送する。なお、フレーム種別宛先アドレス140は、後にバス用DMAC122bを起動したときに、メモリ121bに格納された系切替え情報をCPUユニット102bに転送可能なアドレスに予め設定されているものとする。これにより、後のステップS282の処理を短時間で行うことが可能となる。受信DMAC127bは、系切替え情報をメモリ121bに転送した後、当該転送が完了した旨をCPU120bに割込みにより通知し、フレーム種別宛先アドレス140を更新する(他のアドレスを設定する)。
ステップS282において、CPU120bは、メモリ121bに格納された系切替え情報のヘッダ情報に含まれるシーケンス番号131が「4」であることを確認することにより、系切替え情報を正常に受信したことを認識する。その後、CPU120bは、系切替え情報をCPUユニット102bのメモリ111bに転送すべく、バス用DMAC122bを起動する。
なお、ステップS282において、データを受信した旨の割込みによる通知よりも、系を切替える旨の割込みによる通知の方が、優先度が高くなるように予め設定しておくことによって、ステップS283におけるDATA3の転送処理を中断し、系の切替えの通知を早く行うことが可能となる。
ステップS291において、バス用DMAC122bは、メモリ121bに格納された系切替え情報をメモリ111bに転送する。
ステップS301において、CPUユニット102bは、ネットワークユニット103bから転送されメモリ111bに格納された系切替え情報の内容を確認し、最後に制御系システム101aと同期がとれた状態を最新の状態として、制御系システム101aから待機系システム101bに系を切替える。
系を切替えた後の待機系システム101bは、ステップS283において、CPU120bは、系の切替えが正常に行われた旨をネットワークユニット103aに応答すべく応答データを生成する。このとき、CPU120bは、応答データのヘッダ情報において、宛先番号130として「制御系システム101aのネットワークユニット103aのID」を設定し、シーケンス番号131として「無し」を設定し、確認応答番号132として「1」を設定し、フレーム種別133として「系切替え応答フレーム」を設定し、データ量134として「系切替え応答データ」を設定する。その後、CPU120bは、送信DMAC125bを起動する。
以上のことから、本実施の形態4によれば、ステップS282において系の切替えに関する処理の優先度を高めることによって、系の切替えを高速に行うことが可能となる。
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。