(57)【要約】【課題】転写メモリを用いたコントローラ間の通信方法において、データの送受信を確認しながら通信を行うハンドシェイク通信を実現することを目的とする。【解決手段】伝送路に接続されるコントローラと、他の複数のコントローラから前記伝送路を介して周期的に行われるデータ送信によって、受信エリア上のデータが逐次更新される転写メモリと、前記転写メモリの送信エリア上のデータを周期的に前記他の複数のコントローラへ送信する通信プロセッサと、送信元と受信先を設定した送信データを、前記転写メモリ上の前記送信エリアへ書き込むＣＰＵとを有し、前記ＣＰＵまたは前記通信プロセッサは、前記転写メモリの前記受信エリアのデータ更新を検出し、前記ＣＰＵは、更新データが自コントローラ宛であったときは当該更新データの送信元に対しての応答を前記転写メモリに書き込むことを特徴とするコントローラ通信装置。【選択図】  図１
2010198520.tif 000002
【特許請求の範囲】
【請求項１】
伝送路に接続される複数のコントローラのそれぞれに備えられた通信プロセッサは、各コントローラが有する転写メモリの自コントローラに割り当てられた送信領域上のデータを、他の複数のコントローラの転写メモリの受信領域へ同報送信し、各コントローラの転写メモリ上のデータを逐次更新するように各々のコントローラが所定の周期で順々に前記同報送信し、
一のコントローラに備えられるＣＰＵは、送信元アドレス，受信先アドレス，処理順序を示すシーケンス番号を付した要求ブロックを作成し、前記転写メモリの自コントローラに割り当てられた送信領域上の要求ブロックに前記作成した要求ブロックを上書きし、
前記一のコントローラの通信プロセッサは、前記周期的な同報送信によって複数のコントローラの転写メモリ上の前記要求ブロックを更新し、
他のコントローラに備えられるＣＰＵは、自転写メモリの受信領域上の要求ブロックの前記シーケンス番号が更新され、前記受信先アドレスが自コントローラであったとき、前記要求ブロックを前記受信領域から読み出し、送信元アドレス，受信先アドレスとして前記一のコントローラのアドレス，シーケンス番号を付した応答ブロックを作成し、前記転写メモリの自コントローラに割り当てられた送信領域上の応答ブロックに前記作成した応答ブロックを上書きし、
前記他のコントローラの通信プロセッサは、前記周期的な同報送信によって複数のコントローラの転写メモリ上の前記応答ブロックを更新し、
前記一のコントローラに備えられるＣＰＵは、自転写メモリの受信領域上の応答ブロックの前記シーケンス番号が更新され、前記受信先アドレスが自コントローラであったとき、前記応答ブロックを前記受信領域から読み出し、前記一の要求ブロックが受けられたことを確認することを特徴とするコントローラ通信方法。
【請求項２】
請求項１において、
前記送信領域は、前記要求ブロックを書き込むエリアと前記応答ブロックを書き込むエリアとからなり、それぞれのエリアは受信先のコントローラごとに領域分けされ、
前記受信領域は、前記要求ブロックが書き込まれるエリアと前記応答ブロックが書き込まれるエリアとからなり、それぞれのエリアは送信元のコントローラごとに領域分けされることを特徴とするコントローラ通信方法。
【請求項３】
請求項１において、
前記要求ブロックおよび前記応答ブロックには、前記要求ブロックまたは前記応答ブロックから算出されるデータチェックコードが付されることを特徴とするコントローラ通信方法。
【請求項４】
請求項３において、
前記データチェックコードは３２ビットのＣＲＣであり、
前記要求ブロックまたは前記応答ブロックからデータチェックコードを除いたデータ長が２７４ビット以下で、８ビットまでのエラーを検出することができることを特徴とするコントローラ通信方法。
【請求項５】
請求項３において、
前記コントローラにチェックコード算出部をハードウェアとして備え、
前記チェックコード算出部は、指定メモリへの書き込みおよび指定メモリからの読み出しに基づき、書き込んだブロックおよび読み出したブロックから前記データチェックコードを算出することを特徴とするコントローラ通信方法。
【請求項６】
請求項１において、
前記要求ブロックの受信先アドレスを複数のコントローラを示すアドレスに設定し、
当該要求ブロックを読み出した前記複数のコントローラ各々は、前記送信元アドレスに自コントローラを設定し、前記受信先アドレスに当該要求ブロックを作成した前記コントローラを設定した前記応答ブロックを作成することを特徴とするコントローラ通信方法。
【請求項７】
請求項１において、
前記通信プロセッサは、前記シーケンス番号の更新を検出し、前記シーケンス番号が更新された前記要求ブロックまたは前記応答ブロックの前記受信先アドレスが当該通信プロセッサに接続される前記コントローラであるとき、当該コントローラのＣＰＵに割り込みを通知することを特徴とするコントローラ通信方法。
【請求項８】
請求項１において、
前記コントローラのＣＰＵは、所定の周期で前記要求ブロックを前記転写メモリへ上書きし、前記転写メモリへ上書きを行う周期より早い周期で前記受信領域のシーケンス番号が更新されたかどうかポーリングを行い、前記シーケンス番号が更新され、前記受信先アドレスが自コントローラであったとき、前記要求ブロックまたは前記応答ブロックを読み出すことを特徴とするコントローラ通信方法。
【請求項９】
請求項１において、
複数の前記要求ブロックの送信元アドレスが同一のコントローラであり、同周期で前記複数の要求ブロックの前記シーケンス番号が更新されたとき、
前記複数の要求ブロックを読み出した前記コントローラは、前記複数の要求ブロックに対し一つの前記応答ブロックを作成することを特徴とするコントローラ通信方法。
【請求項１０】
伝送路に接続されるコントローラと、
他の複数のコントローラから前記伝送路を介して周期的に行われるデータ送信によって、受信エリア上のデータが逐次更新される転写メモリと、
前記転写メモリの送信エリア上のデータを周期的に前記他の複数のコントローラへ送信する通信プロセッサと、
送信元と受信先を設定した送信データを、前記転写メモリ上の前記送信エリアへ書き込むＣＰＵとを有し、
前記ＣＰＵまたは前記通信プロセッサは、前記転写メモリの前記受信エリアのデータ更新を検出し、
前記ＣＰＵは、更新データが自コントローラ宛であったときは当該更新データの送信元に対しての応答を前記転写メモリに書き込むことを特徴とするコントローラ通信装置。
【請求項１１】
請求項１０において、
前記転写メモリ上の前記送信エリアは、受信先のコントローラごとに領域分けされ、
前記転写メモリ上の前記受信エリアは、送信元のコントローラごとに領域分けされることを特徴とするコントローラ通信装置。
【請求項１２】
請求項１０において、
前記送信エリアに書き込まれる送信データには、前記送信データから算出されるデータチェックコードが付されることを特徴とするコントローラ通信装置。
【請求項１３】
請求項１２において、
前記データチェックコードは３２ビットのＣＲＣであり、
前記送信データは２７４ビット以下で、８ビットまでのエラーを検出することができることを特徴とするコントローラ通信装置。
【請求項１４】
プラント内の運用装置の駆動制御を行う複数のコントローラを伝送路に接続し、
送信側コントローラは、自身が制御する制御対象の駆動情報、または駆動情報に基づき演算された制御情報を要求情報として送信側コントローラに備えられる転写メモリの自コントローラに割り当てられた送信領域に書き込み、
各コントローラが、それぞれに備えられる前記転写メモリの自コントローラに割り当てられた送信領域のデータを、複数のコントローラへ所定の周期で順々に同報送信し、
前記要求情報は、前記同報送信によって受信側コントローラの転写メモリに送信され、  前記受信側コントローラは、前記要求情報を自身の転写メモリから読み出し、前記要求情報に対する応答情報を自身の転写メモリの自コントローラに割り当てられた送信領域に書き込み、
前記応答情報は、前記同報送信によって送信側コントローラの転写メモリに送信され、  前記送信側コントローラは、前記応答情報を自身の転写メモリから読み出すことを特徴とするコントローラ通信方法。
【請求項１５】
少なくとも３のコントローラが通信回線を介して接続されるものであって、
前記３のコントローラの各々は演算部と通信部を有し、
前記各々の通信部は転写メモリを有し、
前記各々の転写メモリは送信ブロックと受信ブロックを有し、
前記各々の受信ブロックは、前記３のコントローラのうちの他の２のコントローラの一方のコントローラに係る第１の受信領域と、他方のコントローラに係る第２の受信領域を有し、
前記各々の送信ブロックは、前記一方のコントローラに係る第１の送信領域と、前記他方のコントローラに係る第２の送信領域を有し、
前記各々の演算部は、自コントローラに係る前記送信ブロックに情報を書き込むと共に、前記受信ブロックから情報を読み出し、
前記各々の通信部は互いに衝突しないように所定のタイミングで送信を行い、
前記送信においては、前記通信部のうちの所定のものが自コントローラの前記第１の送信領域と第２の送信領域に格納される情報を通信回線介して同報的に送信するに際して、他の通信部は、前記通信回線を介して送信された情報を対応する前記第１の受信領域あるいは第２の受信領域に格納し、
前記各々の通信部において、前記第１の送信領域に前記一方のコントローラからの情報に対する応答が、前記第２の送信領域に前記他方のコントローラからの情報に対する応答が格納されることを特徴とするコントローラ通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、転写メモリを用いたコントローラ通信方法およびコントローラ通信装置に関する。
【背景技術】
【０００２】
複数のコントローラが接続されたネットワークシステムにおいて、各コントローラ間でデータを共有するための手法として、特許文献１に記載のような転写メモリを用いたサイクリックメモリ転写方法がある。
【０００３】
例えば特許文献１記載の通信方法では、複数のコントローラの各々に転写メモリが設けられ、コントローラ間の通信を制御するローカルプロセッサによってコントローラ間の通信を行う。各ローカルプロセッサは、転写メモリ上の自コントローラに割り当てられたデータを他の計算機に向けて周期的にブロードキャストすることにより、転写メモリ領域のデータの一致化を図っている。
【０００４】
このように、転写メモリを用いたサイクリックメモリ転写方法では、一定周期で転写メモリのデータが更新されるため、各コントローラのＣＰＵは転写メモリへの読み出しと書き込みで複数のコントローラ間でデータを共有することができる。これにより、コントローラの通信負荷を軽減しコントローラの運用への影響が少ないため、一定周期での運用が求められるプラントシステム、例えば発電プラント制御システムのコントローラ間通信などに適用されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−２１９９０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
一方、プラントシステムのリスク軽減のため、コントローラ間の通信システムには機能安全が求められている。機能安全とは、故障が発生してもシステムや機器の安全性を確保できるように機能を実装しておくという考え方であり、機能安全の通信は１対１の要求−応答パケット通信を想定している。しかし、上記のような従来のサイクリックメモリ転写方法では、ブロードキャスト通信によって実現されていたため、１対１でのデータ授受や、要求−応答パケット通信のような送受信を確認しながらのハンドシェイク通信は実現できず機能安全の要件を満たせない。
【０００７】
本発明は上記課題に鑑み、転写メモリを用いた複数のコントローラ間の通信方法において、データの送受信を確認しながら通信を行うハンドシェイク通信を実現することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、伝送路に接続されるコントローラと、他の複数のコントローラから前記伝送路を介して周期的に行われるデータ送信によって、受信エリア上のデータが逐次更新される転写メモリと、前記転写メモリの送信エリア上のデータを周期的に前記他の複数のコントローラへ送信する通信プロセッサと、送信元と受信先を設定した送信データを、前記転写メモリ上の前記送信エリアへ書き込むＣＰＵとを有し、前記ＣＰＵまたは前記通信プロセッサは、前記転写メモリの前記受信エリアのデータ更新を検出し、前記ＣＰＵは、更新データが自コントローラ宛であったときは当該更新データの送信元に対しての応答を前記転写メモリに書き込むことを特徴とするコントローラ通信装置によって解決される。
【発明の効果】
【０００９】
本発明によれば、転写メモリを介して行うコントローラ通信において、各コントローラがデータの送受信を確認しながら通信を行うため、異常や故障が発生した際の検出精度を向上できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施例であるコントローラシステムの全体構成図である。
【図２】転写メモリ１０４，転写メモリ２０４および転写メモリ３０４のデータ構成図およびブロック使用例である。
【図３】要求ブロックと応答ブロックの構成図である。
【図４】ＣＰＵ１０２の構成図である。
【図５】本発明によりハンドシェイク通信を行うデータ送信側コントローラとデータ受信側コントローラの処理の流れを示すフロー図である。
【図６】第２の実施例の転写メモリのブロック使用例を示した図である。
【図７】第３の実施例のデータ送信側コントローラと受信側コントローラの処理フロー図である。
【図８】時間経過に伴うＣＰＵとＮＣＰの処理動作を表わした図である。
【図９】図８の時刻ｔ１〜ｔ８の各時点における転写メモリ上のデータ構成図である。
【図１０】第３の実施例における要求ブロックと応答ブロックの構成図である。
【発明を実施するための形態】
【００１１】
以下、図面を用いて本発明の実施例について説明する。
【実施例１】
【００１２】
図１は本発明を適用した第１の実施例であるコントローラシステムの全体構成図を示したブロック図である。本発明によるコントローラシステムは、図示しない制御対象の演算・制御を行うコントローラ１０１と、制御対象を作動するアクチュエータ１０９と、制御対象の動作状態を検出するセンサ１０７と、センサ１０７から検出信号を受信しコントローラ１０１へ送る入力装置１０６と、コントローラ１０１からの制御信号をアクチュエータ１０９へ送信する出力装置２０８と、複数のコントローラを接続する伝送路９０１とによって構成されている。また、制御対象を制御するコントローラは、コントローラの情報処理を行う中央処理装置（ＣＰＵ）１０２と、コントローラ間の通信処理を行いＣＰＵ１０２から直接読み書きされる転写メモリ１０４を具備する通信プロセッサ（ＮＣＰ）１０３と、ＣＰＵ１０２とＮＣＰ１０３をつなぐシステムバス１０５によって構成されている。本実施例のコントローラシステムは、コントローラ１０１，コントローラ２０１，コントローラ３０１，コントローラ４０１，コントローラ５０１，コントローラ６０１，コントローラ７０１，コントローラ８０１の８台（コントローラ２０１，コントローラ３０１，コントローラ４０１，コントローラ５０１，コントローラ６０１，コントローラ７０１については図示せず）が伝送路９０１を介して接続される。
【００１３】
次に、本実施例のコントローラシステムにおけるコントローラ間の通信方法について説明する。ここでは、ＣＰＵ１０２からデータを送信する例を挙げる。
【００１４】
ＣＰＵ１０２はセンサ１０７から受信した検出信号や、受信した検出信号に基づき演算を行い、伝送路に接続される複数のコントローラ間で共有が必要なデータ、もしくは伝送路に接続される特定のコントローラへのデータを要求ブロックとして作成し、転写メモリ１０４のコントローラ１０１に割り当てられた送信ブロックに書き込む。
【００１５】
一方ＮＣＰ１０３は、ＣＰＵ１０２のタスクとは独立に、一定周期で伝送路に接続される全てのコントローラの転写メモリへ、転写メモリ１０４上のコントローラ１０１に割り当てられた送信ブロックのデータを同報送信する。ＣＰＵ１０２によって転写メモリに書き込まれた要求ブロックは、上記のＮＣＰ１０３の周期的な転写によってコントローラ２０１〜コントローラ８０１の転写メモリ２０４〜転写メモリ８０４に転写される。
【００１６】
ＣＰＵ１０２〜ＣＰＵ８０２は各々の転写メモリに転写された要求ブロックが、自分宛のものであるか判断し、自分宛であった場合に転写メモリから該当ブロックの読み出しを行う。要求ブロックを読み出したＣＰＵ２０２〜ＣＰＵ８０２はＣＰＵ１０２に対して要求ブロックが正確に受信されたことを示す応答ブロックを作成し、転写メモリ２０４，転写メモリ３０４の各々に割り当てられた送信領域に書き込む。
【００１７】
ここでＮＣＰ２０３〜ＮＣＰ８０３は、ＮＣＰ１０３と同様に一定周期で順々に伝送路に接続される全てのＮＣＰの転写メモリへデータの転写を行っている。ＣＰＵ２０２〜ＣＰＵ８０２によって書き込まれた応答ブロックは、ＮＣＰ２０３〜ＮＣＰ８０３によって他のＮＣＰの転写メモリへ転写される。
【００１８】
ＣＰＵ１０２は転写メモリ１０４に書き込まれた応答ブロックが自分宛であるか判断し、自分宛であった場合に転写メモリ１０４から応答ブロックを読み出す。ＣＰＵ１０２は読み出した応答ブロックが、自身が書き込んだ要求ブロックに対するものか判断し、受信先がエラー無く要求ブロックを受信したことを確認する。
【００１９】
このように、ＮＣＰ１０３〜ＮＣＰ８０３が各々の転写メモリを一定周期で他の転写メモリへ転写していくことで、データの授受を確認しながら複数のコントローラ間で通信すること、つまりハンドシェイク通信が可能になる。ここで、ＮＣＰの転写周期は任意に定めることができ、例えばＮＣＰ１０３，ＮＣＰ２０３，ＮＣＰ３０３，ＮＣＰ４０３，ＮＣＰ５０３，ＮＣＰ６０３，ＮＣＰ７０３，ＮＣＰ８０３の順に一定周期で自身の転写メモリの転写を行うよう定める。
【００２０】
図２に、転写メモリ１０４，転写メモリ２０４および転写メモリ３０４のデータ構成図およびブロック使用例を示す。転写メモリ１０４，転写メモリ２０４，転写メモリ３０４は、それぞれ自コントローラのＣＰＵによって書き込まれる送信ブロック（転写メモリ１０４，転写メモリ２０４，転写メモリ３０４の斜線部）と、自コントローラのＣＰＵによって読み出される受信ブロック（転写メモリ１０４，転写メモリ２０４，転写メモリ３０４の無地部）とにブロック分けされている。
【００２１】
転写メモリ１０４の送信ブロックは要求ブロックを書き込むエリア（ＣＰＵ１−２〜ＣＰＵ１−８）と応答ブロックを書き込むエリア（ＣＰＵ１−Ａ１〜ＣＰＵ１−Ａ８）に分けられ、さらに受信先のＣＰＵごとにブロック分けされている。受信ブロックも同様に、要求ブロックが転写されるエリア（ＣＰＵ２−１〜ＣＰＵ２−８，ＣＰＵ３−１〜ＣＰＵ３−８）と応答ブロックが転写されるエリア（ＣＰＵ２−Ａ１〜ＣＰＵ２−Ａ８，ＣＰＵ３−Ａ１〜ＣＰＵ３−Ａ８）に分けられ、さらに送信元のＣＰＵごとにブロック分けされている。
【００２２】
転写メモリ２０４の送信ブロックは要求ブロックを書き込むエリア（ＣＰＵ２−１〜ＣＰＵ２−８）と応答ブロックを書き込むエリア（ＣＰＵ２−Ａ１〜ＣＰＵ２−Ａ８）に分けられ、さらに受信先のＣＰＵごとにブロック分けされている。受信ブロックも同様に、要求ブロックが転写されるエリア（ＣＰＵ１−２〜ＣＰＵ１−８，ＣＰＵ３−１〜ＣＰＵ３−８）と応答ブロックが転写されるエリア（ＣＰＵ１−Ａ１〜ＣＰＵ１−Ａ８，ＣＰＵ３−Ａ１〜ＣＰＵ３−Ａ８）に分けられ、さらに送信元のＣＰＵごとにブロック分けされている。
【００２３】
転写メモリ３０４の送信ブロックは要求ブロックを書き込むエリア（ＣＰＵ３−１〜ＣＰＵ３−８）と応答ブロックを書き込むエリア（ＣＰＵ３−Ａ１〜ＣＰ３−Ａ８）に分けられ、さらに受信先のＣＰＵごとにブロック分けされている。受信ブロックも同様に、要求ブロックが転写されるエリア（ＣＰＵ１−２〜ＣＰＵ１−８，ＣＰＵ２−１〜ＣＰＵ２−８）と応答ブロックが転写されるエリア（ＣＰＵ１−Ａ１〜ＣＰＵ１−Ａ８，ＣＰＵ２−Ａ１〜ＣＰＵ２−Ａ８）に分けられ、さらに送信元のＣＰＵごとにブロック分けされている。
【００２４】
例えば、ＣＰＵ１−２はＣＰＵ１０２によってＣＰＵ２０２への要求ブロックが書き込まれるブロックであり、ＣＰＵ１−Ａ２はＣＰＵ１０２によってＣＰＵ２０２への応答ブロックが書き込まれるブロックである。
【００２５】
次に転写メモリの各ブロックの使用例について説明する。図２の［１］はＣＰＵ１０２からＣＰＵ２０２へのデータを他のＣＰＵの転写メモリに同報送信し、ＣＰＵ２０２からＣＰＵ１０２へ応答を返す際のブロック使用例である。
【００２６】
ＣＰＵ１０２は転写メモリ１０４のＣＰＵ１−２の領域にＣＰＵ２０２への要求ブロックを書き込む。書き込まれた要求ブロックは、他の転写メモリのＣＰＵ１−２に転写される。ＣＰＵ２０２は、転写メモリ２０４のＣＰＵ１−２の領域から要求ブロックを読み出し、応答として転写メモリ２０４のＣＰＵ２−Ａ１の領域に応答ブロックを書き込む。書き込まれた応答ブロックは、他の転写メモリのＣＰＵ２−Ａ１に転写される。応答ブロックが転写されたことを検出したＣＰＵ１０２は、転写メモリ１０４のＣＰＵ２−Ａ１の領域から応答ブロックを読み出す。
【００２７】
［２］では、ＣＰＵ１０２からＣＰＵ３０２へのデータを他のＣＰＵの転写メモリに同報送信し、ＣＰＵ３０２からＣＰＵ１０２へ応答を返す際のブロック使用例である。ＣＰＵ１０２は転写メモリ１０４のＣＰＵ１−３の領域にＣＰＵ３０２への要求ブロックを書き込む。書き込まれた要求ブロックは、他の転写メモリのＣＰＵ１−３に転写される。ＣＰＵ３０２は、転写メモリ３０４のＣＰＵ１−３の領域から要求ブロックを読み出し、応答として転写メモリ３０４のＣＰＵ３−Ａ１の領域に応答ブロックを書き込む。書き込まれた応答ブロックは、他の転写メモリのＣＰＵ３−Ａ１に転写される。ＣＰＵ１０２は、転写メモリ１０４のＣＰＵ３−Ａ１の領域から応答ブロックを読み出す。
【００２８】
同様に［３］に示すＣＰＵ２０２からＣＰＵ１０２へデータを送信する際は、ＣＰＵ２−１およびＣＰＵ１−Ａ２を使用し、［４］に示すＣＰＵ２０２からＣＰＵ３０２へデータを送信する際は、ＣＰＵ２−３およびＣＰＵ３−Ａ２を使用し、［５］に示すＣＰＵ３０２からＣＰＵ１０２へデータを送信する際は、ＣＰＵ３−１およびＣＰＵ１−Ａ３を使用し、［６］に示すＣＰＵ３０２からＣＰＵ２０２へデータを送信する際は、ＣＰＵ３−２およびＣＰＵ２−Ａ３を使用する。
【００２９】
転写メモリ１０４，転写メモリ２０４および転写メモリ３０４上の送信ブロックのデータは各々の転写を制御するＮＣＰ１０３，ＮＣＰ２０３およびＮＣＰ３０３によって一定周期で全ての転写メモリの受信ブロックへ転写される。そのため、転写メモリ１０４，転写メモリ２０４および転写メモリ３０４のデータは一致化され、一定周期で行われるメモリ転写によって逐次最新のデータに更新されていく。ここで、上記のようにＣＰＵごとに送信ブロック，受信ブロックに分け、さらに要求ブロックと応答ブロック、受信先のＣＰＵと送信元のＣＰＵごとにブロック分けすることで、使用するデータエリアが重なることがない。そのため、処理前のデータが上書きされることや、他のＣＰＵ間のデータ通信によって自ＣＰＵが通信待ちになることがなく定周期のタスクを保ったままコントローラ間の通信を行うことができる。
【００３０】
図３は、図２に示す要求ブロックと応答ブロックの構成例を示した図である。図３に示す要求ブロックおよび応答ブロックは、ヘッダーとして受信先アドレスを示すＤＡ、送信元アドレスを示すＳＡ、転写メモリのブロック位置を示すＢＬＫ＃、シーケンス番号を示すＳＥＱ＃を持ち、テーラーとしては、データチェックコードであるＣＲＣ３２を持つ。
また、要求ブロックには他のＣＰＵへの送信データであるボディを持つ。応答ブロックは、ＤＡに要求ブロックの送信元アドレス設定し、ＳＡに自身のアドレスを設定し、ＳＥＱ＃に受信した要求ブロックのＳＥＱ＃を設定し、ＢＬＫ＃に転写メモリのブロック位置を設定して送信元へ返すことで最小の応答となるためボディは必要ないが、付加情報としてボディを加えることも可能である。
【００３１】
ここでＣＲＣ３２は、ＣＲＣ（Cyclic Redundancy Check：巡回冗長検査）の一種であり、データ長が２７４ビット以下であれば最高８ビットまでのエラー検出が可能である。
本ブロック構成例では、ＣＲＣ３２によるエラー検出を確実に行うため、ヘッダーを３２ビット、ボディを１９２ビットに設定してあり、ヘッダーとボディを合わせたデータ長は２２４ビットとなっている。これにより、データ転送やＣＰＵによる書き込み，読み出しよってデータ化け等が発生した場合においても８ビットまでのエラーであれば確実に検出できる。
【００３２】
本ブロック構成例では、伝送路に接続されるコントローラの台数が８台であるため、ＤＡおよびＳＡは８ビットに設定され、ボディは１９２ビット＝２４バイトに定められている。本ブロック構成例では、固定長のブロックの例を示したが、データが可変長である場合はヘッダーまたはボディにデータ長情報を加えることもできる。
【００３３】
次に、本実施例のコントローラ間通信におけるＣＰＵとＮＣＰの時間経過に伴う動作について、図８，図９を用いて説明する。図８は、時間経過に伴うＣＰＵとＮＣＰの処理動作を表わした図であり、図９は図８の時刻ｔ１〜ｔ８の各時点における転写メモリ上のデータ構成図である。ここでは、簡易的にコントローラ１０１，コントローラ１０２，コントローラ１０３の三台のコントローラが伝送路を介して接続されるとし、ＣＰＵ１０２からＣＰＵ２０２とＣＰＵ３０２へ異なるデータを送信する例を用いる。
【００３４】
それぞれのＣＰＵは所定の周期で、転写メモリからの読み書きを行っている。ここで、ＣＰＵ１０２はＣＰＵ２０２への送信データをボディとした要求ブロックＲｅｑ１−２を作成し、ＣＰＵ１−２の領域に書き込む（図８のＳ１）。同様にＣＰＵ３０２への送信データをボディとした要求ブロックＲｅｑ１−３を作成し、ＣＰＵ１−３の領域に書き込む（図８のＳ１）。ここでＲｅｑ１−２およびＲｅｑ１−３のＳＥＱ＃は、ＣＰＵ１−２およびＣＰＵ１−３の領域上のＳＥＱ＃を更新するように定める。これにより各ＣＰＵはＳＥＱ＃の更新を確認することで、新たにデータが書き込まれたことを検出できる。このとき時刻ｔ１では、図９の（ｔ１）に示すように転写メモリ１０４のＣＰＵ１−２およびＣＰＵ１−３の領域に当該要求ブロックが書き込まれた状態になる。
【００３５】
一方、ＮＣＰ１０３，ＮＣＰ２０３，ＮＣＰ３０３はＣＰＵのタスクとは独立に、それぞれの転写メモリの送信ブロックを他の２つの転写メモリへ所定の周期で順々に同報送信している。ＮＣＰ１０３は、自分の同報送信のタイミングになると転写メモリ１０４の送信ブロックを他の２つの転写メモリへ同報送信する（図８のＳ２）。ここで時刻ｔ２では、図９の（ｔ２）に示すように転写メモリ１０４の送信ブロックが、転写メモリ２０４，転写メモリ３０４の受信ブロックに転写され、データが共有化される。
【００３６】
ＣＰＵ２０２は、自身のタスクのタイミングで転写メモリ２０４の受信ブロックのＳＥＱ＃の更新をチェックする。ＣＰＵ２０２は、自分宛のブロックであるＣＰＵ１−２のＳＥＱ＃の更新を検出し、Ｒｅｑ１−２を読み出す（図８のＳ３）。ＣＰＵ３０２も同様に、自身のタスクのタイミングで転写メモリ３０４の受信ブロックのＳＥＱ＃の更新をチェックする。ＣＰＵ３０２は、自分宛のブロックであるＣＰＵ１−３のＳＥＱ＃の更新を検出し、Ｒｅｑ１−３を読み出す（図８のＳ４）。
【００３７】
ＣＰＵ２０２は、Ｒｅｑ１−２を正確に受信したことをＣＰＵ１０２に知らせるため、ＣＰＵ１０２に対して応答ブロックＡｃｋ２−１を作成し、転写メモリ２０４のＣＰＵ２−Ａ１の領域に書き込む（図８のＳ５）。このとき、時刻ｔ３では図９の（ｔ３）に示すように転写メモリ２０４のＣＰＵ２−Ａ１の領域に当該応答ブロックが書き込まれた状態になる。
【００３８】
同様に、ＣＰＵ３０２は、Ｒｅｑ１−３を正確に受信したことをＣＰＵ１０２に知らせるため、ＣＰＵ１０２に対して応答ブロックＡｃｋ３−１を作成し、転写メモリ３０４のＣＰＵ３−Ａ１の領域に書き込む（図８のＳ６）。このとき、時刻ｔ４では図９の（ｔ４）に示すように転写メモリ３０４のＣＰＵ３−Ａ１の領域に当該応答ブロックが書き込まれた状態になる。
【００３９】
ＮＣＰ２０３は、自分の同報送信のタイミングになると転写メモリ２０４の送信ブロックを他の２つの転写メモリへ同報送信する（図８のＳ７）。ここで時刻ｔ５では、図９の（ｔ５）に示すように、転写メモリ２０４の送信ブロックが、転写メモリ１０４，転写メモリ３０４の受信ブロックに転写され、データが共有化される。
【００４０】
ＣＰＵ１０２は、図８のＳ１で転写メモリ１０４に書き込みを行った次のタスク周期になると、転写メモリ１０４の受信ブロックをチェックし、ＣＰＵ２−Ａ１のＳＥＱ＃の更新を検出し、Ａｃｋ２−１を読み出す（図８のＳ８）。これにより、Ｒｅｑ１−２がＣＰＵ２０２に正しく受信されたことを確認する。
【００４１】
一方、ＮＣＰ３０３は、自分の同報送信のタイミングになると転写メモリ３０４の送信ブロックを他の２つの転写メモリへ同報送信する（図８のＳ９）。ここで時刻ｔ６では、図９の（ｔ６）に示すように、転写メモリ３０４の送信ブロックが、転写メモリ１０４，転写メモリ２０４の受信ブロックに転写され、データが共有化される。
【００４２】
ＣＰＵ１０２は、自身のタスクのタイミングで転写メモリ１０４の受信ブロックをチェックし、ＣＰＵ３−Ａ１のＳＥＱ＃の更新を検出し、Ａｃｋ３−１を読み出す（図８のＳ１０）。これにより、Ｒｅｑ１−３がＣＰＵ３０２に正しく受信されたことを確認する。
【００４３】
データが正しく受信されたことを確認したＣＰＵ１０２は、次の送信データを転写メモリ１０４の送信ブロックに書き込み（図８のＳ１１）、ＮＣＰ１０３は自分の同報送信のタイミングで転写メモリ１０４の送信ブロックを他の２つの転写メモリへ同報送信する（図８のＳ１２）。
【００４４】
このように、各ＣＰＵは自身の処理周期で転写メモリへの読み書きを行うだけで、各々のコントローラと通信を行うことができる。転写メモリ上のデータは各ＮＣＰの周期的な同報送信によって逐次更新されるため、ＣＰＵが転写メモリに書き込みを行った次のタスクのタイミングで他のＣＰＵからの応答を受信できる。これにより、ＣＰＵの通信待ちを発生させないハンドシェイク通信が可能になり、定周期でのコントローラの運用が可能になる。
【００４５】
また、要求ブロックと応答ブロック、受信先のＣＰＵと送信元のＣＰＵごとにブロック分けすることで、使用するデータエリアが重なることがない。そのため、読み出し前のデータが上書きされることや、他のＣＰＵ間のデータ通信による通信待ちを防ぐ事ができる。
【００４６】
ここで、一定周期経過後も応答がない場合にエラーとするタイムアウトを設定すれば、通信途中に生じた異常を検出することも可能である。
【００４７】
図８，図９で示した例では、ＣＰＵが一定周期で転写メモリへのポーリングを行うよう設定しているが、ＮＣＰが転写メモリ上のＳＥＱ＃の更新を検出し、ＣＰＵへ通知するようにしてもよい。これによれば、ＣＰＵが適宜応答を返すことができるので、ハンドシェイク通信にかかる時間を短縮することができる。
【００４８】
図４はＣＰＵ１０２の構成図である。ＣＰＵ１０２は、ＭＰＵ１１１と主メモリ１１２と補助メモリ１１３とＣＲＣ作成部１１４とによって構成される。またＣＰＵ２０２〜ＣＰＵ８０２も同様に、ＭＰＵ２１１〜ＭＰＵ８１１と主メモリ２１２〜主メモリ８１２と補助メモリ２１３〜補助メモリ８１３とＣＲＣ作成部２１４〜ＣＲＣ作成部８１４とによって構成されるが、図では省略する。主メモリ１１２には、コントローラ１０１の制御対象の制御情報や、駆動情報，演算結果、他のコントローラからの通信データ等が格納されている。ＣＰＵ１０２は、主メモリ１１２から他のＣＰＵへ送信が必要なデータを読み出し、ＤＡ，ＳＡ，ＢＬＫ＃，ＳＥＱ＃を設定した要求ブロックを作成する。
【００４９】
ＭＰＵ１１１は、作成した要求ブロックを補助メモリ１１３上の転写メモリ１０４のブロック位置に対応したメモリ位置へ書き込む。ここで、補助メモリ１１３は、転写メモリ１０４と同様に要求ブロックを書き込むエリアと応答ブロックを書き込むエリアに分けられ、さらに送信元のＣＰＵおよび受信先のＣＰＵごとにブロック分けされている。
【００５０】
ＣＰＵ中にハードウェアとして実装されるＣＲＣ作成部１１４は、補助メモリ１１３への書き込みを検出し、書き込まれた要求ブロックに対してＣＲＣ３２を算出し、ＣＲＣ作成部１１４内のレジスタ１１５に格納する。ＭＰＵ１１１は、レジスタ１１５からＣＲＣ３２を読み出し、補助メモリ１１３に書き込まれた要求ブロックにＣＲＣ３２を付し、最終的に転写メモリに書き込みを行う要求ブロックを形成する。形成された要求ブロックは、ＭＰＵによってＮＣＰ１０３内の転写メモリ１０４の送信ブロックに書き込まれる。
【００５１】
またＭＰＵ１１１は、転写メモリ１０４の受信ブロックから、他のコントローラからの要求ブロックまたは応答ブロックを読み出し、補助メモリ１１３上の転写メモリ１０４のブロック位置に対応したメモリ位置へ書き込む。ＣＲＣ作成部１１４は、補助メモリ１１３への書き込みを検出し、書き込まれた要求ブロックまたは応答ブロックのヘッダーとボディに対してＣＲＣ３２を算出しレジスタ１１５に格納する。ＭＰＵ１１１は、ＣＲＣ作成部１１４によって算出されたＣＲＣ３２と、読み出した要求ブロックまたは応答ブロックに付されたＣＲＣ３２を照合し、データが正しく受信されたものか確認する。
【００５２】
読み出したブロックが要求ブロックであったとき、ＭＰＵ１１１は要求ブロックの送信元ＣＰＵへデータが正しく受信されたことを通知するため、送信元のＣＰＵに対して応答ブロックを作成し、補助メモリ１１３に書き込む。ＣＲＣ作成部１１４は補助メモリ１１３への書き込みを検出し、書き込まれた応答ブロックに対してＣＲＣ３２を算出し、ＣＲＣ作成部１１４内のレジスタ１１５に格納する。ＭＰＵ１１１は、レジスタ１１５からＣＲＣ３２を読み出し、補助メモリ１１３に書き込まれた応答ブロックにＣＲＣ３２を付し、最終的に転写メモリ１０４に書き込みを行う応答ブロックを形成する。
【００５３】
また、読み出したブロックが応答ブロックであったときは、応答ブロックのヘッダーから自身が送信した要求ブロックが受信先ＣＰＵに正しく受信されたことを確認することができる。また、ＣＲＣ作成部１１４によって算出されたＣＲＣ３２と、読み出した応答ブロックに付されたＣＲＣ３２を照合することで、応答ブロック自体のデータ化けを検出できる。
【００５４】
また、本実施例のＣＲＣ作成部１１４はハードウェアとして実装され、ＭＰＵ１１１による補助メモリ１１３への書き込みを検出し、自動的に書き込まれたデータに対してＣＲＣ３２を算出し、レジスタ１１５に格納する。これによりＣＲＣ３２の照合にかかるＭＰＵ１１１の負荷を軽減することができる。
【００５５】
図５は、本発明によりハンドシェイク通信を行うデータ送信側コントローラとデータ受信側コントローラの処理の流れを示すフロー図である。ここでは、コントローラ１０１が送信側コントローラ、コントローラ２０１が受信側コントローラとし、ＮＣＰ１０３およびＮＣＰ２０３がＳＥＱ＃の更新を検出し、ＣＰＵ１０２およびＣＰＵ２０２へ通知する例を用いて説明する。
【００５６】
送信側コントローラ１０１のＣＰＵ１０２は、送信データをボディとし、ヘッダーとしてＤＡ，ＳＡ，ＢＬＫ＃，ＳＥＱ＃を設定した要求ブロックを作成し補助メモリ１１３へ格納する（Ｓ１）。
【００５７】
ＣＰＵ１０２は、ヘッダーとボディに対してＣＲＣ３２を作成する（Ｓ２）。次にＣＰＵ１０２は、テーラーとしてＣＲＣ３２を付したボディを転写メモリ１０４の送信ブロックに書き込む（Ｓ３）。その後ヘッダーを転写メモリ１０４へ書き込み（Ｓ４）、送信側コントローラのＮＣＰ１０３は、転写メモリ１０４に書き込まれた要求ブロックを受信側コントローラ２０２の転写メモリ２０４へ送信する（Ｓ５）。
【００５８】
データを受信した受信側コントローラ１０２のＮＣＰ２０３は、要求ブロックのＳＥＱ＃の更新を検出し、ＤＡが自コントローラであるか判断し、ＤＡが自コントローラであったとき受信側コントローラのＣＰＵ２０２へ通知する（Ｓ６）。
【００５９】
通知を受けたＣＰＵ２０２は要求ブロックを補助メモリ２１３へ読み出す（Ｓ７）。ＣＰＵ２０２は、読み出した要求ブロックのＢＬＫ＃と補助メモリ２１３上の位置の一致を確認する（Ｓ８）。位置が一致しなった場合は（Ｓ７）から１回リトライする。再度不一致だった場合は、エラーを検出する（Ｓ９）。
【００６０】
ＢＬＫ＃と補助メモリ２１３上の位置が一致したら、要求ブロックのヘッダーとボディに対してＣＲＣ３２を作成し、要求ブロックに付されたＣＲＣ３２と照合する（Ｓ１０）。ＣＲＣ３２が不一致な場合、（Ｓ７）から１回リトライする。再度不一致だった場合は、エラーを検出する（Ｓ１１）。
【００６１】
ＣＲＣ３２が一致した場合、要求ブロックのボディを主メモリ２１２に格納し、要求ブロックに対する応答ブロックを作成し、補助メモリ２１３へ格納する（Ｓ１２）。このとき応答ブロックのヘッダーには、ＤＡへ要求ブロックのＳＡを複写し、ＳＡへ自コントローラ２０１のアドレスを設定し、ＢＬＫ＃へ要求ブロックのＢＬＫ＃を複写し、ＳＥＱ＃へ要求ブロックのＳＥＱ＃を複写する。次に、受信側コントローラ２０１のＣＰＵ２０２は作成した応答ブロックに対しＣＲＣ３２を作成し、ＣＲＣ３２を付したボディを転写メモリ２０４の送信ブロックに書き込む（Ｓ１４）。その後ヘッダーを転写メモリ２０４へ書き込み、受信側コントローラ２０１のＮＣＰ２０３は、転写メモリ２０４に書き込まれた応答ブロックを送信側コントローラ１０１の転写メモリ１０４へ送信する（Ｓ１５）。
【００６２】
送信側コントローラ１０４のＮＣＰ１０３は、受信した転写メモリ１０４上の応答ブロックのＳＥＱ＃更新をチェックし、一定時間内に自身が送信した要求ブロックのＢＬＫ＃とＳＥＱ＃が一致するか確認する（Ｓ１６）。一定時間内に一致しなかった場合は、タイムアウトとなる。
【００６３】
ＳＥＱ＃の更新を検出し、ＤＡが自コントローラで、自身が送信した要求ブロックのＢＬＫ＃とＳＥＱ＃が一致した場合はＣＰＵ１０２へ通知する（Ｓ１７）。通知を受けたＣＰＵ１０２は応答ブロックを読み出し（Ｓ１８）、応答ブロックのヘッダーに対してＣＲＣ３２を作成し、応答ブロックに付されたＣＲＣ３２と照合する（Ｓ１９）。
【００６４】
ＣＲＣ３２が不一致な場合は、（Ｓ１８）から１回リトライする。再度不一致だった場合は、エラーを検出する（Ｓ２０）。ＣＲＣ３２が一致した場合に、ハンドシェイク通信完了となる（Ｓ２１）。
【００６５】
（Ｓ１）〜（Ｓ２１）までの処理で、上記エラーを検出した場合、ＣＰＵ１０２およびＣＰＵ２０２はエラーが検出されたデータを主メモリ１１２および主メモリ２１２へは格納せず、当該データなしでコントローラの運用が可能か判断する。運用が可能であると判断されたときは、続けてコントローラの運用を維持する。運用が不可能であると判断されたときは、安全にコントローラを停止させる。
【００６６】
ここで、ＮＣＰは転写メモリのＳＥＱ＃の更新を検出し、ＣＰＵへ通知を行っているが、ＣＰＵが一定周期で転写メモリ上のＳＥＱ＃の更新をポーリングしてもよい。このとき、ＣＰＵが転写メモリへ書き込みを行う周期よりも、ＳＥＱ＃の更新をポーリングする周期を短く設定することで、書き込み周期の間で必ずＳＥＱ＃の更新チェックがされるため、応答待ちを軽減できる。
【００６７】
次に、本発明によるエラー検出について具体例を挙げて説明する。発電プラントの制御システムとして、図１のように伝送路に８台のコントローラが接続され、コントローラ１０１がボイラの駆動制御を行っているとする。
【００６８】
以下、コントローラ１０１が制御を行うボイラの駆動情報を、コントローラ２０１に送信する例について図５を用いて説明する。図５において、送信側コントローラはコントローラ１０１、受信側コントローラはコントローラ２０１である。コントローラ１０１はセンサ１０７から得られたボイラの駆動情報や、駆動情報から演算された制御情報などを主メモリに格納する。コントローラ１０１のＣＰＵ１０２は、主メモリからボイラの駆動情報を読み出し、駆動情報をボディとして、ヘッダーを設定した要求ブロックを補助メモリへ格納する（Ｓ１）。このとき、ＤＡはＣＰＵ２０２、ＳＡはＣＰＵ１０２に設定される。
【００６９】
ＣＰＵ１０２は、格納されたヘッダーとボディに対してＣＲＣ３２を作成する（Ｓ２）。次にＣＰＵ１０２は、テーラーとしてＣＲＣ３２を付したボディを転写メモリ１０４の送信ブロックに書き込む（Ｓ３）。その後ヘッダーを転写メモリへ書き込み（Ｓ４）、コントローラ１０１のＮＣＰ１０３は、転写メモリに書き込まれた要求ブロックをコントローラ２０１の転写メモリ２０４へ送信する（Ｓ５）。
【００７０】
ここで、コントローラ１０１からコントローラ２０１へのデータ送信で異常が発生し、ボディである駆動情報のデータがデータ化けを起こしたとする。データを受信したコントローラ２０１のＮＣＰ２０３は、要求ブロックのＳＥＱ＃の更新を検出し、ＤＡが自コントローラであるか判断し、ＤＡが自コントローラであったときコントローラ２０１のＣＰＵ２０２へ通知する（Ｓ６）。通知を受けたＣＰＵ２０２は要求ブロックを補助メモリへ読み出す（Ｓ７）。ＣＰＵ２０２は、読み出した要求ブロックのＢＬＫ＃と補助メモリ上の位置の一致を確認する（Ｓ８）。位置の確認後、要求ブロックのヘッダーとボディに対してＣＲＣ３２を作成し、要求ブロックに付されたＣＲＣ３２と照合する（Ｓ１０）。
【００７１】
このとき、ボディである駆動情報はデータ化けを起こしているため、作成したＣＲＣ３２と要求ブロックに付されたＣＲＣ３２は不一致となり（Ｓ７）から１回リトライする。
再度転写メモリから読み出した要求ブロックに対してＣＲＣ３２を作成，照合し、不一致によりエラーを検出する。
【００７２】
このように、データの送受信の間で起こるエラーをＣＲＣ３２の照合により検出することができる。また各ＣＰＵは、転写メモリの読み出し、書き込み毎にＣＲＣ３２を作成し照合・付与を行うので、ＣＰＵから転写メモリへのデータ書き込み、転写メモリからＣＰＵへのデータ読み出し、ＮＣＰ間の通信、いずれの処理で異常が起こってもエラーを検出できるだけでなく、転写メモリ内の時間経過などによるデータ化けに対してもエラーを検出できる。
【００７３】
加えて、本実施例ではシーケンス番号を示すＳＥＱ＃の更新を確認しながらデータの送受信を行うため、同じ処理の反復，データの消失，別処理の挿入，処理の誤順等のエラーを検出可能である。同様に、ハンドシェイク通信によって逐次データの送受信を確認しながら処理を行うため、データの消失，処理の遅延，誤データによる成り済まし等のエラーを検出できる。また、上記ハンドシェイク通信のタイムアウトによっても、データの消失、処理の遅延を検出可能である。
【００７４】
以上本実施例では、転写メモリを介して行うコントローラ通信において各ＣＰＵが、データが正しく送受信されたか確認しながら通信を行うため、通信上の異常や故障が起きた場合でも、速やかに検出できる。
【００７５】
また、ＣＰＵは各転写メモリの特定のブロックへの書き込み、特定のブロックからの読み出しという少ない負荷で、複数のコントローラの中から任意のコントローラと通信できる。ここで、転写メモリは送受信を行うＣＰＵごとにブロックわけされるため、一度の同報送信で、複数のコントローラと１対１の通信を実現できる。同時に要求ブロック，応答ブロックごとに書き込みエリアが分けられるため、一度の同報送信で複数のコントローラとの応答・要求の両方を含むデータ通信が実現できる。さらに、使用するデータエリアが重なることがないため、処理前のデータが上書きされることや、特定のＣＰＵとのデータ通信によって他のＣＰＵとの通信が遅れることがない。
【００７６】
また、通常ＮＣＰによる転写周期はＣＰＵの処理周期に比べ速く設定されており、逐次新しいデータに更新されていく。そのため、ＣＰＵは通信待ちを軽減でき、定周期のタスクを保ったままコントローラを運用できる。
【実施例２】
【００７７】
本発明の第２の実施例を図面を用いて説明する。本実施例では、同一のデータを複数のＣＰＵへ送信するのに、１つの要求ブロックで送信を行う。例えば、ＣＰＵ１０２からＣＰＵ２０２とＣＰＵ３０２へと同じデータを渡すには、ＣＰＵ１０２から１つの要求ブロックでＣＰＵ２０２，ＣＰＵ３０２へ送信する。これには、要求ブロックの受信先アドレスを示すＤＡを複数のＣＰＵを示すグループアドレスに設定し、受信側はグループアドレスが自ＣＰＵを含むものか判定する。８台のコントローラが伝送路に接続され、受信先アドレスを示すＤＡが８ビットであるとき、各ビットがそれぞれのコントローラを表わし、ＣＰＵ２０２とＣＰＵ３０２のビットをＯＮとすることで、ＣＰＵ２０２とＣＰＵ３０２への送信データを示すことができる。応答ブロックは、ＣＰＵ２０２からＣＰＵ１０２へと、ＣＰＵ３０２からＣＰＵ１０２へと１対１で返す。
【００７８】
図６は、本実施例による転写メモリの各ブロックの使用例を示した図である。尚、この他の構成については実施例１と同様である。［１］はＣＰＵ１０２からＣＰＵ２０２とＣＰＵ３０２へデータを送信する際のブロック使用例である。
【００７９】
ＣＰＵ１０２はヘッダーのＤＡにＣＰＵ２０２とＣＰＵ３０２を示すグループアドレスを設定し、転写メモリ１０４のＣＰＵ１−２の領域に要求ブロックを書き込む。書き込まれた要求ブロックは、転写メモリ２０４および転写メモリ３０４のＣＰＵ１−２の領域に転写される。ＣＰＵ２０２は、転写メモリ２０４のＣＰＵ１−２の領域から要求ブロックを読み出し、応答として転写メモリ２０４のＣＰＵ２−Ａ１の領域に応答ブロックを書き込む。同様にＣＰＵ３０２は、転写メモリ３０４のＣＰＵ１−２の領域から要求ブロックを読み出し、応答として転写メモリ３０４のＣＰＵ３−Ａ１の領域に応答ブロックを書き込む。書き込まれた応答ブロックは、転写メモリ１０４のＣＰＵ２−Ａ１およびＣＰＵ３−Ａ１の領域に転写される。ＣＰＵ１０２は、転写メモリ１０４のＣＰＵ２−Ａ１およびＣＰＵ３−Ａ１の領域から応答ブロックを読み出す。
【００８０】
同様に［２］に示すＣＰＵ２からＣＰＵ１０２とＣＰＵ３０２へデータを送信する際は、ＣＰＵ２−１，ＣＰＵ１−Ａ２およびＣＰＵ３−Ａ２を使用し、［３］に示すＣＰＵ３０２からＣＰＵ１０２とＣＰＵ２０２へデータを送信する際は、ＣＰＵ３−１，ＣＰＵ１−Ａ３およびＣＰＵ２−Ａ３を使用する。
【００８１】
このように、要求ブロックの受信先アドレスを示すＤＡを複数のＣＰＵを示すグループアドレスに設定することで、効率よく複数のＣＰＵへの通信を行うことができる。また、ＤＡの全ビットをＯＮとすると、全ＣＰＵへの送信データを示すことができる。
【実施例３】
【００８２】
本発明の第３の実施例を図面を用いて説明する。図１０は、本実施例における要求ブロックと応答ブロックの構成図である。本実施例では、送信データ量が多く１つの要求ブロックに収まらない場合に、図１０に示すように１つのハンドシェイク通信に要求ブロックを２つ使用しデータの送信を行う。このとき、２つの要求ブロックに対して１つ応答ブロックを返し、ハンドシェイク通信とする。このとき応答ブロックのヘッダーには１つ目の要求ブロックのヘッダー情報を代表して設定する。
【００８３】
図７は、本発明の第３の実施例であるデータ送信側コントローラと受信側コントローラの処理フロー図である。ただし、コントローラ１０１が送信側コントローラ、コントローラ２０１が受信側コントローラとする。送信側コントローラ１０１のＣＰＵ１０２は、１つのブロックに収まらない送信データに対し、送信データを２つにボディに分割して、２つのブロックのＤＡ，ＳＡ，ＢＬＫ＃，ＳＥＱ＃を設定し２つの要求ブロックを補助メモリ１１３へ格納する（Ｓ１）。ＣＰＵ１０２は、１つ目の要求ブロックのヘッダーとボディに対してＣＲＣ３２を作成する（Ｓ２）。次に、作成したＣＲＣ３２を付した１つ目のボディを転写メモリ１０４の送信ブロックに書き込む（Ｓ３）。次にＣＰＵ１０２は、分割した２つ目の要求ブロックのヘッダーとボディに対してＣＲＣ３２を作成する（Ｓ４）。次にＣＰＵは、作成したＣＲＣ３２を付した２つ目の要求ブロックを転写メモリ１０４の送信ブロックに書き込む（Ｓ５）。その後２つの要求ブロックに設定したヘッダーを転写メモリ１０４へ書き込み（Ｓ６）、送信側コントローラ１０１のＮＣＰ１０３は、転写メモリ１０４に書き込まれた要求ブロックを受信側コントローラ２０１の転写メモリ２０４へ送信する（Ｓ７）。
【００８４】
データを受信した受信側コントローラ２０１のＮＣＰ２０３は、２つの要求ブロックのＳＥＱ＃の更新を検出し、ＤＡが自コントローラであるか判断し、ＤＡが自コントローラであったとき受信側コントローラ２０１のＣＰＵ２０２へ通知する（Ｓ８）。通知を受けたＣＰＵ２０２は２つの要求ブロックを補助メモリ２１３へ読み出す（Ｓ９）。ＣＰＵ２０２は、読み出した要求ブロックのＢＬＫ＃と補助メモリ２１３上の位置の一致を確認する（Ｓ１０）。位置が一致しなった場合は（Ｓ９）から１回リトライする。再度不一致だった場合は、エラーを検出する（Ｓ１１）。ＢＬＫ＃と補助メモリ上の位置が一致したら、１つ目の要求ブロックのヘッダーとボディに対してＣＲＣ３２を作成し、１つ目の要求ブロックに付されたＣＲＣ３２と照合する（Ｓ１２）。ＣＲＣ３２が不一致な場合、（Ｓ９）から１回リトライする。再度不一致だった場合は、エラーを検出する（Ｓ１３）。
【００８５】
ＣＲＣ３２が一致した場合、２つ目の要求ブロックのヘッダーとボディに対してＣＲＣ３２を作成し、２つ目の要求ブロックに付されたＣＲＣ３２と照合する（Ｓ１４）。ＣＲＣ３２が不一致な場合、（Ｓ１５）から１回リトライする。再度不一致だった場合は、エラーを検出する。
【００８６】
ＣＲＣ３２が一致した場合、２つの要求ブロックのボディを主メモリ２１２に格納し、２つの要求ブロックに対して１つの応答ブロックを作成し、補助メモリ２１３へ格納する（Ｓ１６）。
このとき応答ブロックのヘッダーには、ＤＡへ１つ目の要求ブロックのＳＡを複写し、ＳＡへ自コントローラ２０１を設定し、ＢＬＫ＃へ１つ目の要求ブロックのＢＬＫ＃を複写し、ＳＥＱ＃へ１つ目の要求ブロックのＳＥＱ＃を複写する。次に、受信側コントローラ２０１のＣＰＵ２０２は作成した応答ブロックに対しＣＲＣ３２を作成し、ＣＲＣ３２を付した応答ブロックを転写メモリ２０４の送信ブロックに書き込む（Ｓ１７）。受信側コントローラ２０１のＮＣＰ２０３は、転写メモリ２０４に書き込まれた応答ブロックを送信側コントローラ１０１の転写メモリ１０４へ送信する（Ｓ１８）。
【００８７】
その後送信側コントローラ１０１は、受信側コントローラ２０１からデータを受信し、図５のＳ１６以降と同様の処理を行う。ハンドシェイク通信過程で、上記エラーを検出した場合、ＣＰＵ１０２およびＣＰＵ２０２はエラーが検出されたデータを主メモリ１１２および主メモリ２１２へは格納せず、当該データなしでコントローラの運用が可能か判断する。運用が可能であると判断されたときは、続けてコントローラの運用を維持する。運用が不可能であると判断されたときは、安全にコントローラを停止させる。
【００８８】
本実施例では、送信データが大きくなった場合においても要求ブロックを２つ使用することでＣＲＣ３２によるデータチェック機能を保ったままハンドシェイク通信を行うことができる。また、本実施例では２つの要求ブロックを使用したが、複数個の要求ブロックを使用するよう設定してもよい。
【００８９】
以上本発明によれば、転写メモリを介して行うコントローラ通信において各ＣＰＵが、データが正しく送受信されたか確認しながら通信を行うため、通信上の異常や故障が起きた場合でも、速やかに検出できる。ここで、機能安全規格ＩＥＣ６１５０８で求められる機能安全の１つ要件として以下の故障に対策することが挙げられる。
【００９０】
１．データ化け  （Corrupted Date）
２．反復  （Repetition）
３．消失  （Loss）
４．挿入  （Insertion）
５．誤順  （Incorrect Sequence)
６．遅延  （Delay）
７．成り済まし  （Masquerade）
これらの対策手段として、本発明では以下の手段を転写メモリの通信に用いて機能安全の要件を満たすコントローラ通信方法を実現できる。
【００９１】
１．ＣＲＣによるデータ化け検出
２．シーケンス番号による反復，消失，挿入，誤順の検出
３．タイムアウトによる、消失，遅延の検出
４．受信先，送信元のハンドシェイク通信による消失，遅延，成り済ましの検出
【００９２】
上記のように、転写メモリを用いた複数のコントローラ間の通信方法において、データの送受信を確認しながらのハンドシェイク通信により、機能安全の要件を満たすコントローラ間通信方法を実現可能である。また、ＣＰＵは各転写メモリの特定のブロックへの書き込み、特定のブロックからの読み出しという少ない負荷で、任意のコントローラと通信できる。
【符号の説明】
【００９３】
１０１〜８０１  コントローラ
１０２〜８０２  ＣＰＵ
１０３〜８０３  ＮＣＰ
１０４〜８０４  転写メモリ
１０５〜８０５  システムバス
１０６〜８０６  入力装置
１０７〜８０７  センサ
１０８〜８０８  出力装置
１０９〜８０９  アクチュエータ
１１１〜８１１  ＭＰＵ
１１２〜８１２  主メモリ
１１３〜８１３  補助メモリ
１１４〜８１４  ＣＲＣ作成部
１１５〜８１５  レジスタ
９０１  伝送路
【図１】
2010198520.tif 000003
【図２】
2010198520.tif 000004
【図３】
2010198520.tif 000005
【図４】
2010198520.tif 000006
【図５】
2010198520.tif 000007
【図６】
2010198520.tif 000008
【図７】
2010198520.tif 000009
【図８】
2010198520.tif 000010
【図９】
2010198520.tif 000011
【図１０】
2010198520.tif 000012