JP2005159920A - メッセージ交換管理方法、ネットワークシステム、そのマスタノード、ノード、プログラム - Google Patents

メッセージ交換管理方法、ネットワークシステム、そのマスタノード、ノード、プログラム Download PDF

Info

Publication number
JP2005159920A
JP2005159920A JP2003398247A JP2003398247A JP2005159920A JP 2005159920 A JP2005159920 A JP 2005159920A JP 2003398247 A JP2003398247 A JP 2003398247A JP 2003398247 A JP2003398247 A JP 2003398247A JP 2005159920 A JP2005159920 A JP 2005159920A
Authority
JP
Japan
Prior art keywords
message
node
tid
transaction
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2003398247A
Other languages
English (en)
Other versions
JP4269911B2 (ja
Inventor
Fumihiko Anzai
文彦 安西
Yuugo Sunaga
祐悟 須長
Soichi Arai
聡一 新井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric FA Components and Systems Co Ltd
Original Assignee
Fuji Electric FA Components and Systems Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric FA Components and Systems Co Ltd filed Critical Fuji Electric FA Components and Systems Co Ltd
Priority to JP2003398247A priority Critical patent/JP4269911B2/ja
Publication of JP2005159920A publication Critical patent/JP2005159920A/ja
Application granted granted Critical
Publication of JP4269911B2 publication Critical patent/JP4269911B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Small-Scale Networks (AREA)

Abstract

【課題】 フレームの消失や多重受信の際にも矛盾が生じないようにしつつ管理テーブルを小さくすることができ、更に制御用データ交換の定周期性を保証することができる。
【解決手段】 要求メッセージ送信から応答メッセージ受信までを1トランザクションとし、マスタノード3は、一旦任意の送信側ノードにトークンを与えたら、このトランザクションが完了するまでは、複数サイクル続けてこの送信側ノードにトークンを与えつづける(他のノードにはトークンを与えない)。1トランザクションは、要求メッセージ送信、ポーリング、及び応答メッセージ受信から成るが、制御時間帯に影響しないようにする。例えば、1サイクル目では要求メッセージ送信のみとし応答は期待しない。その後、応答を得るまで繰り返しポーリングを行うが、制御時間帯に影響しそうな場合にはポーリングを中断し、次のサイクルのメッセージ時間帯でポーリングを再開する。
【選択図】図3

Description

本発明は、複数ノード間でデータ交換を行うシステムにおけるメッセージ交換に係わる情報管理や、この情報を用いた多重受信や異常の検出手法等に関する。
ノード間でデータ交換を行うための送信制御システムには様々なものがある。
送信権の制御には、各ノードが自ら送信のタイミングを判定してデータを送信するシステム(CSMA/CDやトークンリング等)、システムで唯一のマスタノードが他のノードにトークンを与えてデータ送信権を一時的に貸与するシステム、等々がある。また、データ交換の制御には、要求/応答データともに各ノードが送信権を獲得したときに送信するシステム、送信権を持ったノードが他のノードの応答データをポーリングで要求するシステム、等々がある。
さらに、交換されるデータにも、常時交換されるべきデータと、必要に応じて交換されるデータがある。
ここで、PLC(プログラマブルコントローラ)等の産業用途のシステムであって、例えばシリアルバスに複数のノード(CPUモジュール)とI/Oモジュールが接続されたネットワークシステムにおけるデータ交換では、上記常時交換されるべきデータとしてCPUモジュール−I/Oモジュール間で交換する制御用データを、上記必要に応じて交換されるデータとしてCPUモジュール間で交換する状態監視等の支援メッセージを割り当てることが多い。この様な産業用途ネットワークシステムとしては、例えば、非特許文献1、非特許文献2等で紹介されているSXバスシステム等がある。制御用データは、それをもとに機械を動かしているので、定周期性が強く求められる。データ交換のタイミングがまちまちでは、機械の動きが滑らかでなくなり、最悪の場合に異常な動作を起こしかねないからである。
このため、上記のように1本のネットワーク(シリアルバス等)に複数のノード(CPUモジュール)が接続された産業用途ネットワークシステムでデータ交換を行う場合は、通信サイクル内で制御用データ交換用の時間帯と支援メッセージ交換用の時間帯を明確に分けて、支援メッセージの多寡によって制御用データのタイミングが変わらないようにしている。そして、支援メッセージの処理時間が支援メッセージ交換用時間帯より長くなることを想定して、要求メッセージ送信と応答メッセージ送信を別々のトランザクションとして取り扱っている。つまり、1つのメッセージ交換処理を、“要求メッセージ送信とその確認応答”のトランザクション(送信側ノードAのトランザクション)と、“応答メッセージ送信とその確認応答”のトランザクション(受信側ノードBのトランザクション)とに分けて、各々送信権を獲得したノードが要求/応答メッセージを送信する。また、上記“要求メッセージ送信とその確認応答”のトランザクションにおいてもし確認応答が得られなかった場合には、次のサイクルにおいて送信権を得られた場合には再送メッセージを送信する。送信権を得られなかった場合には更にその次以降のサイクルにおいて、送信権が得られたら再送メッセージを送信する。
ここで、受信側ノードBでは、要求メッセージ受信毎に、それが新しいメッセージなのか、それともリトライによる再送メッセージを多重受信(多重受信とは、メッセージを正常受信したにも係わらず、確認応答の途中消失等の為に送信側ノードが再送メッセージを送った為、同じ内容のメッセージを2つ受信してしまうこと)したものなのかを判定する必要がある。尚、更に、1対1通信なのかブロードキャストなのかを判定する必要もある。そこで各々の要求メッセージにはその要求メッセージに対応するトランザクションを受信側ノードBで判別できるようにする為のトランザクションID(以下、TID)(例えばシリアル番号)を送信側ノードAが付けている。そして、ある要求メッセージ送信後にこの要求メッセージの再送メッセージを送信する場合には同じTIDを付ける。これによって、受信側ノードBではTIDが同じ場合には再送メッセージであると判定できる。
但し、従来では上記のように送信側ノードAが次のサイクルにおいて送信権が得られず再送メッセージを送信できない場合であって、このときに送信権を得た別のノードCが同じ受信側ノードBに要求メッセージを送るような状況になった場合、受信側で1つのTIDのみで管理する場合には問題が生じる。
また、要求メッセージと応答メッセージが別々のトランザクションとなっているので、例えば、上記送信側ノードAが上記あるメッセージ交換の為の“要求メッセージ送信とその確認応答”のトランザクション完了後に、続けて別のメッセージ交換(但し宛先は同じく上記受信側ノードB)の為の“要求メッセージ送信とその確認応答”のトランザクションを発生させ、新たな要求メッセージを送信する場合があるので、この場合にもその送信先が同じ受信側ノードBである場合、上記別のノードCの場合と同様、受信側で1つのTIDのみで管理する場合には問題が生じる。詳しくは後述する。
更に、TIDは後述するようにサイクリックに使用されるので、送信側で1つのTIDのみで管理する場合には問題が生じる。これも詳しくは後述する。
この為、従来では、TIDは、送信側ノードAにおいて各宛先ノード毎に管理され、受信側ノードBにおいても各送信元ノード毎に管理される。詳しくは、以下に説明する。
まず、送信側ノードAは、新たな要求メッセージを送信するときには、宛先ノード毎に管理されているTIDの中で当該メッセージの宛先ノードに対応するTIDを更新(+1インクリメント)して、更新後のTIDの値を要求メッセージに格納して送信する。一方、受信側ノードBは、受信したメッセージ内のTIDを、送信元毎に用意されたテーブル内の値と比較して、一致していたら再送メッセージと判定してそれを破棄し、不一致ならば新規メッセージと判定してそれを受け取ってTIDをテーブルに格納(更新)する。この仕組みでは、リトライによる再送メッセージではTIDが元の値のままなので、受信側のTID比較でテーブル内の値と一致するので、受信したメッセージは多重受信したものとして破棄される(もちろん初送メッセージが受信されていなければ受信側のTIDはその前のメッセージのTIDの値なので一致しないので、新規メッセージとして受け取られる)。
上記従来のTIDを用いたメッセージ管理手法について、図27〜図29に示す具体例を参照して、更に詳細に説明する。
ここでは、ノード数を64として、互いにメッセージ交換をするものとする。
各ノードは、上記TIDの管理の為に、図27(a)、(b)に示すTID管理テーブルを保持している。各ノードは、図27 (a)、(b)に示すTID管理テーブル101,102,103,104を保持しているが、送信側となる場合には図27(a)に示すTID管理テーブル101又は102、受信側となる場合には図27(b)に示すTID管理テーブル103又は104を用いて、メッセージ交換処理を実行する。
メッセージ交換処理には、1対1の場合とブロードキャストの場合とがある。
図27(a)の図上上側には、送信側で用いる1対1用のTID管理テーブル101の一例を示す。
1対1のメッセージ交換に関して、TIDを送信側で管理するには、TID管理テーブル101のように、宛先毎に管理していなければならない。なぜなら、例えばTIDの値はサイクリックに決定されるので(例えば;1〜255を使うとして、255までいったら再び1に戻る)、もし、あるノードAにおける送信側の処理として、あるノードB宛に要求メッセージを送信してメッセージ交換処理を行った後、このノードB以外の他のノードとのメッセージ交換(送信)を254回行ってから(TIDが丁度一周した場合)、再びこのノードB宛に要求メッセージを送信するような状況になった場合は、ノードBが受け取る要求メッセージのTIDは前回と同じとなる為、新規メッセージであるにも関わらず受信側のノードBによって破棄されてしまうからである。TID管理テーブル101のように宛先毎に管理すれば、途中で別のノードにメッセージを送信してもノードB宛のTIDは変化しないので、上記の問題は生じない。
一方、1対1のメッセージ交換に関して、受信側では、例えば図27(b)の図上上側に示すような1対1用のTID管理テーブル103を用いて管理する。このTID管理テーブル103の例のように、受信側でも送信元毎にTIDを管理する。
TIDを受信側で送信元毎に管理するのは、TIDがシステムで一意ではなく送信元毎に管理されているため、別々に管理する必要があるからである。すなわち、上述したように、あるノードBが、あるノードAから初送メッセージaを受信し、次に別のノードCから初送メッセージcを受信し(あるいはノードAから別のメッセージの初送メッセージbを受信し)、最後にまたノードAから上記初送メッセージaの再送メッセージを受信した場合、もしTIDを送信元毎に管理していないと(1つのTIDのみ記憶する管理テーブルを用いると)、この管理テーブルに別のノードC又はノードAからの初送メッセージc又はbのTIDを上書きしてしまう為、最後の再送メッセージが最初のメッセージaの再送を多重受信したものであることが判定できなくなるからである。
さらに、ブロードキャストメッセージは、通常、ACKや応答を期待しないので、最初から同じメッセージを複数(例えば3つ)送信することで、メッセージの途中消失等に対応しているが、受信側では(1つのみ残して他のメッセージが全て途中消失しない限り)複数の同じメッセージを受信することになるので、この多重受信を判定する必要がある。この多重判定をするためには、上記1対1用のTID管理テーブル101,103とは別のテーブルが必要である。ブロードキャストメッセージの場合は、宛先は自ノード以外の全部のノードということになるので、送信側で管理するTIDは1つで良い。つまり、図27(a)に示すブロードキャスト用TID管理テーブル102を用いればよい。
しかし、受信側では図27(b)に示すブロードキャスト用TID管理テーブル104のように、送信元毎のTIDを管理する管理テーブルが別途必要である。それは、送信元で宛先毎のTIDとブロードキャスト用のTIDが別管理なので、受信側での管理も別々にする必要があるからである。
メッセージ交換を行う際、送信側ノードでは、上記TID管理テーブル101又は102を用いて、新たなTIDを生成し、このTIDを用いて要求メッセ−ジを送信する。
図28は、送信側ノードのTID生成処理を示すフローチャート図である。
同図において、まず、1対1のメッセージ交換であるかブロードキャストであるかを判定する(ステップS401)。1対1のメッセージ交換である場合には(ステップS401,NO)、初送メッセージであるか、再送メッセージであるかを判定する(ステップS402)。初送メッセージである場合には(ステップS402,YES)、テーブル101において宛先ノードのノード番号(予め各ノードに割り当てられているユニークな番号;以下、宛先ノード番号と記す)に対応するTIDの値を+1インクリメントする(ステップS403)。再送メッセージである場合には(ステップS402,NO)、インクリメントはしない。
そして、テーブル101における宛先ノード番号に対応するTIDを、送信元ノード番号(送信元ノード番号)と共に、要求メッセージに格納して(ステップS404)、要求メッセージを送信する。
一方、ブロードキャスト通信を行なう場合には(ステップS401,YES)、初送メッセージであるか、再送メッセージであるかを判定し(ステップS405)、初送メッセージである場合には(ステップS405,YES)、テーブル102のTIDの値を+1インクリメントする(ステップS406)。再送メッセージである場合には(ステップS405,NO)、インクリメントはしない。
そして、テーブル102のTIDを、送信元ノード番号(送信元ノード番号)と共に、要求メッセージに格納して(ステップS407)、要求メッセージを送信する。尚、よく知られているように、ブロードキャストの場合、宛先アドレスが予め決められた特別のアドレスであるので、受信側では宛先アドレスを参照することでブロードキャストであるか否かを判定できる。
受信側ノードでは、上記要求メッセージを受信すると、まず、それが1対1なのかブロードキャストなのかを判定し、1対1用TID管理テーブル103またはブロードキャスト用TID管理テーブル104を用いて、それが新しいメッセージなのか、それともリトライによる再送メッセージなのかを判定する処理(多重検出処理と呼ぶ)を実行する。
図29は、受信側ノードにおける上記多重検出処理を示すフローチャート図である。
図29において、まず、受信した要求メッセージが1対1か、ブロードキャストかを判定する(ステップS411)。1対1である場合には(ステップS411、NO)、受信した要求メッセージから送信元ノード番号とTIDを取り出して(ステップS412)、テーブル103において同じ送信元ノード番号のTIDと比較する(ステップS413)。もし、両者(TID)が一致すれば(ステップS413,NO)、受信した要求メッセージは再送メッセージであり且つその初送メッセージは既に受信していることになるので、当該要求メッセージは破棄して(ステップS418)処理を終了する。もし、両者が不一致であれば(ステップS413,YES)、テーブル103における上記送信元ノード番号に対応するTIDの値を更新する。つまり、要求メッセージに格納されていたTIDの値にする(ステップS414)。そして、引き続き所定の要求メッセージ受信処理を実行する。
一方、受信した要求メッセージがブロードキャストによるものである場合には(ステップS411、YES)、受信した要求メッセージから送信元ノード番号とTIDを取り出して(ステップS415)、このTIDとテーブル104に格納されているTIDとを比較して(ステップS416)、もし両者が一致すれば(ステップS416,NO)、上記ステップS418を実行して(要求メッセージを破棄して)、処理を終了する。もし、両者が不一致であれば(ステップS416,YES)、テーブル104のTIDの値を、要求メッセージに格納されていたTIDの値へと更新する(ステップS417)。
上記図28、図29の処理について、図27に示す例を参照して具体例を説明する。
ここでは、ノード番号が‘0’のノード(以下、ノード0と記す)からノード番号が‘1’のノード(以下、ノード1と記す)に対して、1対1の要求メッセージを送る場合を例にする。この場合、ノード0はテーブル101を、ノード1はテーブル103を使用する。
ノード0はテーブル101において宛先ノード番号1のTIDをインクリメント(250→251)して、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信すると、そこからTID (251)と送信元ノード番号(0)を取り出す。そしてテーブル103における送信元ノード番号0のTID(250)と比較する。この場合、TIDが不一致となるので、受信した要求メッセージは新しい(初送)メッセージであると判定する。そして、受信したTID (251)をテーブル103に格納する。つまり、テーブル103のTIDの値を更新する。
その後にもしこの要求メッセージのリトライとしてノード0からノード1に対して1対1の要求メッセージを送る場合、ノード0はテーブル101の宛先ノード番号1のTIDをインクリメントすることなく(251のまま)、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そしてテーブル103の送信元ノード番号0のTID(251:先の要求メッセージで更新済み)と比較する。この場合、TIDが一致するのでこれが多重に同じメッセージを受信した物だと判定できる。そこで、この要求メッセージは破棄する。
ブロードキャストの場合でも、受信側のTID管理テーブルの使い方は1対1の場合と同様である。ここでは、ノード0がブロードキャストで要求メッセージを送るものとし、ノード0はテーブル102、ノード0以外はテーブル104を使用する。
ノード0は新たな要求メッセージを送信する場合には、テーブル102のTIDをインクリメント(100→101)して、このTID(101) と送信元ノード番号(0) を要求メッセージに格納してブロードキャスト送信する。ノード0以外の他のノードは、各々、この要求メッセージを受信するとそこからTID (101)と送信元ノード番号(0)を取り出す。そしてこのTID (101)をテーブル104の送信元ノード番号0のTID(100)と比較する。この場合TIDは不一致となるので新しいメッセージと判定する。そして、受信したTID (101)をテーブル104に格納する。
後にこの要求メッセージを多重化して番号0のノードからブロードキャストで要求メッセージを送る場合、ノード0はテーブル102のTIDをインクリメントすることなく(101のまま)、このTID(101) と送信元ノード番号(0) を要求メッセージに格納して送信する。ノード0以外の各ノードは、この要求メッセージを受信するとそこからTID (101)と送信元ノード番号(0)を取り出す。そしてテーブル104の送信元ノード番号0のTID(101:先の要求メッセージで更新済み)と比較する。この場合TIDが一致するのでこれが多重に同じメッセージを受信した物だと判定できる。そこで、この多重受信したメッセージを破棄する。
「拡大するSXバス接続機器」;富士時報 Vol.73 NO.2、2000、p130〜131 「統合コントローラ「MICREX−SXシリーズ」のスケーラブル・・・」;富士時報 Vol.71、NO.11 1998
上述の様にTIDの管理テーブルは、送信側で宛先毎、受信側で送信元毎に必要である。例えばノードが64台あり、互いにブロードキャストも含む支援メッセージを交換するシステムならば、送信側の宛先毎TID用が64、送信側のブロードキャストTID用が1、受信側の送信元毎TID用が64、受信側のブロードキャスト送信元毎TID用が64、必要となる。1TIDを1バイトにすると合計193バイト必要となり、ワンチップマイコンの様にRAMが数kバイトと小さい物に通信プロトコルを組み込む場合には、大きな負担になる。このように、組み込み用途の様な少ないリソースでも用いることができるように、管理テーブルを小さくすることが望まれる。
管理テーブルを小さくするするには、要求と応答を同じトランザクションにする必要があるが、支援メッセージの処理時間が支援メッセージ交換用時間帯の時間より長くなることも考慮する必要がある。もともとこれを避けるために、要求メッセージ送信と応答メッセージ送信を別々のトランザクションとして取り扱っている。よって、管理テーブルを小さくしても、支援メッセージの処理時間が支援メッセージ交換用時間帯の時間より長くても、支援メッセージ交換用時間帯を延ばすことなく、制御用データ交換の定周期性を維持できるようにすることが必要である。これには、当然、フレームの消失や多重受信の際にも矛盾が生じないような仕組みが必要である。
本発明の課題は、フレームの消失や多重受信の際にも矛盾が生じないようにしつつ管理テーブルを小さくすることができ、更に制御用データ交換の定周期性を保証することができるメッセージ交換管理方法、システム、プログラム等を提供することである。
本発明の請求項1記載のメッセージ交換管理方法は、複数のノードがネットワークを介して互いにデータ交換するシステムにおけるメッセージ交換管理方法であって、前記データ交換の為の通信サイクルを、前記制御データ交換の為の制御データ交換用時間帯とメッセージ交換の為のメッセージ交換用時間帯に分け、該メッセージ交換用時間帯におけるメッセージ交換処理は、要求から応答までを1トランザクションとし、システム全体の送信権管理をするマスタノードを備え、該マスタノードは、メッセージ送信の為の送信権要求を出したノードにトークンを与え、前記マスタノードからトークンを得たメッセージ送信側ノードは、複数サイクルに渡ってメッセージ交換用時間帯において任意のメッセージ受信側ノードに要求メッセージを送信すると共に該要求に対する応答を得るまでポーリングを繰り返し、前記マスタノードは前記メッセージ送信側ノードが応答を得るまで他のノードにトークンを与えないようにする。
上記のようにすることで、あるメッセージ交換の処理が完了するまでは、他のメッセージ交換のトランザクションが発生しないので、受信側のTID管理テーブルを小さくしても問題なくなる。
また、本発明の請求項2のメッセージ交換管理方法は、例えば上記請求項1のメッセージ交換管理方法において、更に、前記メッセージ送信側ノードは、最初のサイクルで前記要求メッセージの送信を行い、2番目以降のサイクルでポーリングを繰り返し行う際には、各サイクル毎に、そのメッセージ交換用時間帯内に応答が得られない場合にはポーリングを一時中断し、次のサイクルのメッセージ交換用時間帯に入ったらポーリングを再開することで、制御データ交換の定周期性を保証する。
この様にすることで、たとえ非常に時間が掛かるメッセージ交換処理であっても、制御データ交換用時間帯に影響を与えることなく処理を行えるので、制御データ交換の定周期性を保証することができる。
そして、上記請求項1のメッセージ交換管理方法によれば、例えば請求項3のように、前記メッセージ送信側ノードでは、トランザクション番号を宛先ノード毎に管理して、新規メッセージ送信毎にその宛先に対応するトランザクション番号を更新して、該更新後のトランザクション番号と送信元ノード番号を前記要求メッセージに格納して送信し、
前記メッセージ受信側ノードでは、前回受信した要求メッセージの送信元ノード番号とトランザクション番号を記憶しておき、受信した要求メッセージの送信元ノード番号とトランザクション番号の両方が前記記憶した番号と一致する場合にはメッセージの多重受信と判定することができる。
すなわち、あるメッセージ交換の処理が完了するまでは、他のメッセージ交換のトランザクションが発生しないことが保証されているので、受信側ノードにおいては送信元ノード毎にTIDを管理する必要はなくなり、前回受信した要求メッセージの送信元ノード番号とトランザクション番号を記憶しておけば済むようになり(勿論、問題なく多重受信を判定できる)、受信側のTID管理テーブルを小さくできる。但し、受信側のTID管理テーブルは、1対1用とブロードキャスト用の2つを用意する必要はある。
これに対して、請求項4では、以下に示す判別フラグを用いることで、受信側のTID管理テーブルは、1対1用とブロードキャスト用共用の1つのみを用意すれば済むようになる。
すなわち、請求項4では、前記メッセージ送信側ノードでは、トランザクション番号を宛先ノード毎に管理して、新規メッセージ送信毎にその宛先に対応するトランザクション番号を更新して、該更新後のトランザクション番号と送信元ノード番号を前記要求メッセージに格納して送信し、メッセージ受信側ノードでは、前記前回受信したメッセージの送信元ノード番号とトランザクション番号を記憶すると共に該メッセージがブロードキャストメッセージであるか1対1メッセージであるかを示す判別フラグを記憶しておき、今回受信したメッセージがブロードキャストメッセージであるか1対1メッセージであるかを判定し、該判定結果と該今回受信したメッセージの送信元ノード番号とトランザクション番号とを、前記記憶しておいた値とそれぞれ比較し、全て一致する場合にはメッセージの多重受信と判定する。
また、上記従来技術では、送信側ノードにおいても、宛先ノード毎にTIDを管理する必要があった。
これに対して、本発明の請求項5では、上記請求項1の方法に加え更に、前記メッセージ受信側ノードは、他ノード宛のメッセージを監視することで新たなトランザクションに移行したことを認識すると該トランザクション移行を示す情報を記憶する。
この様にすることで、たとえ送信側ノードで宛先ノード毎に区別することなくトランザクション番号を管理して、他ノード宛の要求メッセージを出し続け、TIDの更新が一周して、前回と同じ値のTIDを持つ要求メッセージが送られてきたとしても、前回とは異なるトランザクションの要求メッセージであることが判別できるので、これを多重受信と誤判定することはない。また、この場合、送信側・受信側とも、1対1通信とブロードキャスト共用で管理することができる。
これより、請求項6のように、前記メッセージ送信側ノードは、宛先ノード毎に区別することなく1対1通信とブロードキャスト共用でトランザクション番号を管理して、新規メッセージ送信毎に該トランザクション番号を更新して、該更新後のトランザクション番号と送信元ノード番号をメッセージに格納して送信し、メッセージ受信側ノードでは、前回受信したメッセージの送信元ノード番号とトランザクション番号を1対1通信とブロードキャスト共用で記憶しておき、受信したメッセージの送信元ノード番号とトランザクション番号の両方が前記記憶した番号と一致する場合にはメッセージの多重受信と判定することができる。
また、例えば請求項7のように、前記マスタノードは、前記トランザクション番号を一元管理して、新規トランザクションによる送信権要求に応じてトークンを与える場合には該トランザクション番号を更新して、該更新後のトランザクション番号をトークンに格納して送信し、前記メッセージ送信側ノードは、受信したトークンから前記トランザクション番号を取り出して、該トランザクション番号を前記要求メッセージに格納して送信し、前記メッセージ受信側ノードは、前回受信した要求メッセージに含まれていたトランザクション番号を1対1通信とブロードキャスト共用で記憶しておき、今回受信した要求メッセージに含まれるトランザクション番号を前記記憶しておいた値と比較し、一致する場合にはメッセージの多重受信と判定し、次のトランザクションへ移行したことを認識すると、トランザクション移行を示す情報を記憶するようにしてもよい。
上記請求項1〜6では、従来と同様に各送信側ノードで個別にTIDを更新・管理することを前提としていたので、例えば請求項6においても受信側では送信元ノード番号とトランザクション番号とを対応付けて記憶する必要があったが、請求項7では、TIDはシステム全体で一意のものとしてマスタノードで一元管理するので、トランザクション番号のみ記憶すれば済むようになる(トランザクション番号が同じであれば、それは必ず、同一トランザクションということになる。一方、請求項6等では、トランザクション番号が同じであっても、送信元ノードが異なれば、別トランザクションということになる)。
上記請求項1〜7は、受信側ノードは、1対1通信の要求メッセージを受信したらACKを返信するシステムを前提としている。このシステムでは、要求メッセージ受信したサイクル内で要求メッセージが正常かをチェックしてACKを返信する処理を行う為に掛かる時間分、メッセージ交換用時間帯を長くする必要がある。これに対して、ACK返信処理を行わないようにした場合、要求メッセージが受信側に届かないにも係わらずそのポーリングがくる可能性があり、これが前の要求メッセージのポーリングであると誤判定してしまうという問題がある。
これに対して、請求項11記載の発明では、前記メッセージ受信側ノードは、前記要求メッセージを受信してもACK返信処理は行わず、前記メッセージ送信側ノードは前記各ポーリング送信の際にも該ポーリングに前記トランザクション番号と送信元ノード番号を格納して送信し、前記メッセージ受信側ノードは、ポーリングを受信すると、該ポーリングに含まれるトランザクション番号と送信元ノード番号を前記記憶してある値と比較して、不一致である場合には新規要求メッセージの消失と判定して非応答を返信する。
上記のように、ポーリングにも要求メッセージと同様にトランザクション番号と送信元ノード番号を含めるので、上記誤判定が生じないようにできる。
フレームの消失や多重受信の際にも矛盾が生じないようにしつつ管理テーブルを小さくすることができ、更に制御用データ交換の定周期性を保証することができる。また、1対1通信でACKを返さないシステムにしても、フレームの消失に対応でき、間違った応答メッセージを返信しないようにできる。
以下、図面を参照して、本発明の実施の形態について説明する。
図1に、本例によるシステム全体の概略構成図を示す。
図示の例では、バス型ネットワーク4にマスタノード3と複数のノード0,1,2、・・・が接続されている。尚、ここでは、上記従来技術と同様、そのノード番号が0のノードをノード0、ノード番号が1のノードをノード1等と記すものとする。また、図ではノードの数は、マスタノードも含めて4つのみ示しているが、より多くのノードがバス型ネットワーク4に接続されていてもよい。また、バス4は、例えば上記SXバス等である。また、各ノードは例えばPLCのCPUモジュールであり、特に図示しない各I/Oモジュールとの間で制御時間帯において制御データ/センサデータ等を送受信する。
図2は、上記各ノードのハードウェア構成図である。
図2に示すノード10は、CPU11、プログラムメモリ部12、メモリ部13、タイマ14、伝送制御部15等を有する。メモリ部13は、データメモリ部13a、送信バッファ13b、受信バッファ13c等の記憶領域を有する。
CPU11は、プログラムメモリ部12に格納されているプログラム、データメモリ部13aに格納されている各種データ(後述する各種管理テーブル等)を用いて、後述するフローチャート(図4〜図8、図13〜図14、図16、図17、図19、図20、図22〜図24等のフローチャート)に示す処理を実行する。
すなわち、特に図示しないが、ノード10は、この様な処理実行により得られる各種機能部を有するものである。例えば、特に図示しないが、ノード10は、マスタノード3である場合には、メッセージ送信の為の送信権要求を出したノードにトークンを与え、一旦トークンを与えたノードが前記トランザクションを完了するまで他のノードにトークンを与えないようにする送信権管理部を有する。あるいは、特に図示しないが、ノード10が、マスタノード3からトークンを得たノードであるメッセージ送信側ノードとして動作するときには、複数サイクルに渡ってメッセージ交換用時間帯において任意のメッセージ受信側ノードに要求メッセージを送信すると共に該要求に対する応答を得るまでポーリングを繰り返し、最初のサイクルで前記要求メッセージの送信を行い、2番目以降のサイクルでポーリングを繰り返し行う際には、各サイクル毎に、そのメッセージ交換用時間帯内に応答が得られない場合にはポーリングを一時中断し、次のサイクルのメッセージ交換用時間帯に入ったらポーリングを再開することで制御データ交換の定周期性を保証するメッセージ送信制御部を有する。あるいは、特に図示しないが、ノード10は、メッセージ受信側ノードとして動作するときには、後述する各実施例の受信側TID管理テーブルを用いて多重受信を判定する多重受信判定部や、他ノード宛のメッセージを監視することで新たなトランザクションに移行したことを認識すると該トランザクション移行を示す情報を記憶するトランザクション移行監視部等を有する。
尚、送信するデータ(要求メッセージ等)は、一旦送信バッファ13bに格納された後、伝送制御部15によってバス4上に流される。また、伝送制御部15によって受信したデータ(応答メッセージ等)は、一旦受信バッファ13cに格納された後、CPU11によって処理される。
上記本例のシステムでは、まず、要求と応答を同じトランザクションにしている。これによって、ある1つのノードが複数のメッセージ送信を行いたくて、1つのメッセージの応答を待っている間に、次の要求メッセージの送信を行うこと(別のトランザクションが生じること)はない。そして、システムで唯一のマスタノード3が送信権の調停を行いトークン(送信権)の管理をする構成を前提として、更に、本例ではマスタノード3は、トークンを与えたノードのトランザクション終了するまでの間は、他のノードにはトークンを与えないようにすることを特徴としている。これによって、あるノードのトランザクションを処理中に別のノードのトランザクションが生じないようにできる。
すなわち、トークンは、ある時点においてシステム内の1ノードのみに送信権を与えるためのものだが、送信権を与えられたノードが要求メッセージを送信し、ポーリングによって応答メッセージを受信するまでトークンを別のノードに与えなければ、結果として別のトランザクションは発生しない。
以上のように、"要求から応答までを同じトランザクションとし"且つ"マスタノードは一旦送信権を与えた任意のノードのトランザクション終了するまでの間、他のノードには送信権を与えないようにする"ことで、あるトランザクションの処理中は、全てのノード(送信権を与えられたノードも含む)において新たなトランザクションが生じることはない。よって、後述するようにTID管理テーブルを小さくすることができる。
しかし、それだけではメッセージ交換の処理時間が掛かった場合に、メッセージ時間帯が延びて制御時間帯(制御用データ交換の時間帯)に影響して定周期性を乱してしまう。
そこで、1トランザクションを要求メッセージとポーリングと応答メッセージで組み立てる。要求メッセージは要求を受信側に送るのみで応答メッセージを期待しない。ポーリングは応答メッセージを期待する。送信権を要求してマスタノード3からトークンを与えられたノードは、要求メッセージを送信した後にポーリングを繰り返し、応答メッセージを受信するまでマスタノード3に対して送信権の要求を繰り返し行う。この間、他のノードからも送信権の要求があるかもしれないが、マスタノード3は上記の通り他のノードには送信権を与えないようにする。ただし、トークンを与えられたノードは、ポーリングの回数もしくは時間によってポーリングを一旦打ち切ってメッセージ時間帯内に抑え、制御用データ交換の時間帯を確保する。そして、次のメッセージ時間帯になるとマスタノード3は、上記トークンを与えられたノードに再びトークンを与え、そのノードは中断していたポーリングを再開する。そして応答メッセージを受信すると、次のサイクルでは送信権の要求は行わない。すると次のメッセージ時間帯になるとマスタノード3は別のノードにトークンを与えることができるので、別のトランザクションに移行することができる。
上述したように要求メッセージ送信から応答メッセージ受信までを1トランザクションにしつつ、その間に定周期の制御データを問題なく交換できるプロトコルの一例を図3に示す。
図3は、フレームの流れ(上下方向)を時間軸(右方向)で表した物で、上からマスタノード3、メッセージ(MSG)送信側ノード、メッセージ(MSG)受信側ノードの順に並んでいる。物理的な接続では1本のネットワーク4にマルチドロップでこれら3つのノードがぶら下がっているが、説明のためにこの図の様にした。尚、メッセージ送信側ノード、メッセージ受信側ノードは、何れも、図1のノード0,1,2、・・・の中の任意のノードである。
まず1サイクル目で、メッセージ送信側ノードは、制御データ交換用時間帯(制御時間帯)において制御データ交換を行うと共にマスタノード3に対してメッセージ送信権を要求する。マスタノード3は、メッセージ時間帯(MSG時間帯)に入るとメッセージ送信側ノードにトークンを与える。このトークンを得てメッセージ送信側ノードはメッセージ受信側ノードに要求メッセージ(要求MSG)を送信する。メッセージ受信側ノードは、要求メッセージを受けるとひとまず受信確認(Ack:Acknowledge)を送信する。メッセージ送信側ノードは時間に余裕があれば続いてポーリングをしても良いが、本実施例では要求メッセージ送信のみにする。
そして2サイクル目の制御時間帯では、メッセージ送信側ノードは再びメッセージ送信権をマスタノード3に要求する。次のメッセージ時間帯に入るとマスタノード3はメッセージ送信側ノードに再びトークンを与える(もし他のノードから要求があっても与えない)。このトークンを得てメッセージ送信側ノードはメッセージ受信側ノードにポーリングを行う。メッセージ受信側ノードは、ポーリングを受けると、応答メッセージ(応答MSG)が準備できていればそれを送信するが、図の例ではまだ準備できていなくて「処理中応答」を送信する。尚、メッセージ送信側ノードは時間に余裕があればもう一度ポーリングをしても良いが、図の例では1度のみにする。
そして3サイクル目の制御時間帯においても、メッセージ送信側ノードはマスタノード3にメッセージ送信権を要求する。次のメッセージ時間帯に入るとマスタノード3はメッセージ送信側ノードにトークンを与える。このトークンを得てメッセージ送信側ノードはメッセージ受信ノードにポーリングを行う。図示の例ではこのときメッセージ受信側ノードは応答データが準備できているので、ポーリングを受けると応答メッセージを送信する。
そして次の制御データ交換用時間帯では、メッセージ送信権の要求は行わない。これより、次のメッセージ時間帯に入るとマスタノード3はメッセージ送信側ノードのトランザクションが完了したものと見做し、別のノードが送信権の要求をしていればそちらにトークンを与える。つまり新たなトランザクションに移ることができる。
尚、図示の例ではメッセージ送信側ノードは各サイクル毎に逐一送信権要求を行ったが、この例に限らない。例えば、1サイクル目で送信権要求を行った後は、2サイクル目移行は送信権要求を行わなくてもトークンが与えられ続けるようにし、応答メッセージを受信したらマスタノード3に対して送信権の要求を取り下げるようにしてもよい。
以上のように、応答メッセージが準備できるまで、ポーリングとポーリングの間に制御用データの交換を行うことにより、制御用データ交換の定周期性を守りつつ、要求から応答までを1つのトランザクションで実行している。
尚、制御時間帯における通信は、単にデータをブロードキャストで流すだけであり、トランザクションは発生せず、TIDを管理する必要もないので、上記メッセージ交換のTID管理には何等影響を及ぼさない。
図4〜図6に、図3に示す各ノード、すなわちマスタノード3、メッセージ送信ノード、メッセージ受信ノードの動作の基本処理フローチャートを示す。
図4は、マスタノード3の基本処理フローチャート図である。
図4において、マスタノード3は、タイマ14による定周期タイマ割り込みが入る毎に(ステップS11,YES)、まず制御時間帯における処理を行う。すなわち、他の各ノード(0,1,2・・・等)からの制御データ受信処理を行うと共に、もし1または2以上のノードから上記送信権要求があった場合にはこれを受信して記録しておく(ステップS12)。続いて、メッセージ時間帯に入ったら(ステップS13,YES)、送信権要求したノードにトークンを与えるが(ステップS15)、もし複数のノードから送信権要求があった場合には、その前にどのノードにトークンを与えるかを判定する(ステップS14)。この判定は、上記の通り、前のサイクルでトークンを与えたノードから引き続き送信権要求があった場合には(あるいは要求が無くても、要求の取り下げが無い限り)、このノードに引き続きトークンを与える。
図5は、メッセージ送信ノードの基本処理フローチャート図であり、図5(a)は制御時間帯、図5(b)はメッセージ時間帯における処理を示す。
図5(a)において、メッセージ送信ノードは、制御時間帯に入ったら(ステップS21,YES)、まず、通常の制御データ送信処理を行う(ステップS22)。更に、他のノードに送信すべきメッセージがある場合には(ステップS23、YES)、マスタノード3に対して送信権要求を行う(ステップS24)。
ステップS24の送信権要求に対して、もしトークンが与えられた場合には、メッセージ時間帯に入る毎に、図5(b)に示す処理を実行する。
図5(b)において、メッセージ送信ノードは、まず、応答待ちフラグがONかOFFかを判定する(ステップS31)。応答待ちフラグは、既に要求メッセージを送信しておりメッセージ受信ノードからの応答待ちの状態である場合にはONになっている。
最初は、未だ要求メッセージは送信していないので、応答フラグはOFFであり、ステップS32〜S36の処理を行うことになる。まず、TID生成処理を行う(ステップS32)。このTID生成処理の詳細については後に実施例1,2,3で説明する。すなわち、実施例1では図7の処理、実施例2では図10の処理、実施例3では図13の処理を行う。
続いて、生成したTIDと自己のノード番号(送信元ノード番号)を要求メッセージに含めて送信する(ステップS33)。上記の通り、メッセージ受信ノードは、要求メッセージを受けると受信確認(ACK)を返信するので、これを待ち(ステップS35)、ACKを受信したら(ステップS35、YES)、応答待ちフラグをONにして(ステップS36)、処理を終了する。一方、ACKを受信しないままACK待ち時間オーバーとなった場合には(ステップS34,YES)そのまま当該処理は終了する。この場合、応答待ちフラグはOFFのままなので、次のサイクルで再びステップS32〜S36の処理を実行することになる。すなわち、次のサイクルで要求メッセージの再送処理を行うことになる。尚、特に図示しないが、ブロードキャストの場合はACKは来ない。その代わり、通常は、ブロードキャストの場合は要求メッセージを連続して複数回送信する。
一方、ACKを受信した場合には、応答待ちフラグはONになっているので、次のサイクルにおいて、ステップS37〜S41の処理を実行することになる。まず、ポーリング送信を行う(ステップS37)。そして、応答待ち時間内に応答メッセージを受信した場合には(ステップS39、YES)、当該メッセージ交換は完了となり、最後に応答待ちフラグをOFFにして(ステップS41)処理を終了する。
一方、処理中応答を受信した場合(ステップS40,YES)または応答が無いままACK待ち時間オーバーとなった場合には(ステップS38,YES)そのまま当該処理は終了する。この場合は、未だメッセージ交換は完了していないので、引き続き、次のサイクルにおいてステップS37〜S41の処理を実行することになる。勿論、この場合、送信権要求を行ってトークンを得ることは当然に行っている。
図6は、メッセージ受信ノードの基本処理フローチャート図であり、図6(a)は上記要求メッセージ受信時の処理、図6(b)は上記ポーリング受信時の処理である。
図6(a)において、要求メッセージを受け取ったメッセージ受信ノードは、まず、当該要求が1対1通信かブロードキャストかを判定する(ステップS51)。ブロードキャストである場合にはそのままステップS54の処理に移行し、1対1通信である場合、それが自ノード宛である場合には(ステップS52,YES)、まず、ACKを送信する(ステップS53)。勿論、自ノード宛ではない場合には(ステップS52,NO)受信処理は行わない。
続いて、多重検出処理を実行する(ステップS54)。多重検出処理は、受信した要求メッセージが上記多重受信した再送メッセージであるか否かを判定する処理である。この多重検出処理の詳細については後に各実施例で説明する。
その後は通常の要求メッセージ解析・実行を行って(ステップS55)、当該受信処理は終了する。
図6(b)において、ポーリング受信したメッセージ受信ノードは、応答メッセージの準備が完了していたら(ステップS61,YES)応答メッセージを送信し(ステップS62)、そうでなければ(ステップS61,NO)処理中応答を送信する(ステップS63)。
以上述べた本例の手法を用いれば、制御用データ交換の定周期性を維持しつつ且つフレームの消失や多重受信の際にも矛盾が生じないようにしつつ管理テーブルを小さくすることができる。これについて、以下、実施例1,2について説明する。
上記の通り、従来は、受信側ノードにおいて送信元ノード毎にTIDを記憶しておくTID管理テーブルが必要であった。
しかし、本例では上記の通り、要求から応答までを同じトランザクションとし且つその間は別のノードにトークンを与えないようにすることで、あるメッセージ交換処理中に別のトランザクションが発生しないことを保証できるので、受信したメッセージの送信元ノード番号とTIDの組が前に受信したメッセージの組と異なれば別のメッセージと判定しても問題なくなるので、受信側のTID管理テーブルはノード数分確保しておく必要は無くなる。すなわち、1対1用のTID管理テーブルにはノード番号とTIDを1つずつ記憶しておけば良くなる。
また、本例でも受信側においてブロードキャスト用TID管理テーブルを1対1用とは別に設けている。これは、1対1とブロードキャストで送信につかうTIDが別管理になっており、それを区別する必要があるからである。そこでブロードキャストに対応する為にノード番号とTIDをもうひと組記憶しておけば良い(つまり、1対1用で1組、ブロードキャスト用で1組、計2組)。
以上のことから、実施例1では、受信側のTID管理テーブルは後述する図9(b)に示すようになる(尚、送信側のTID管理テーブルは、図9(a)に示す通り、従来と同様である)。
あるいは、更に、後述する実施例2のようにしてもよい。すなわち、同じノードからのメッセージで1対1とブロードキャストのTIDがたまたま同じになっても、それを別のメッセージと判定できれば良いのであるから、後述する実施例2の図12(b)に示すように、1対1とブロードキャストとで記憶する「ノード番号とTID」を共用すると共に、「1対1とブロードキャストを識別するフラグ」を記憶すればよい。これによって、ノード番号とTIDの1組と判別フラグを記憶するだけで、例えば上記のように同じノードからのメッセージで1対1のTIDとブロードキャストのTIDがたまたま同じになったとしても、それを別のメッセージと判定できる(1対1同士、ブロードキャスト同士でTIDを比較できる)。
以下、まず、図7〜図9を参照して、実施例1について説明する。
実施例1では、図9(a)に示すように、送信側のTID管理テーブルは、管理テーブル21(1対1用)も管理テーブル22(ブロードキャスト用)も、従来の管理テーブル101,102と同様である。よって、図7に送信側ノードのTID生成処理(図5(b)のステップS32の処理)の詳細フローチャートを示すが、これは従来の図28に示すTID生成処理と同様である。すなわち、図7のステップS71〜S77の処理は、図28のステップS401〜S407と同様である。よって、ここでは特に説明しない。
一方、受信側のTID管理テーブルは、図9(b)に示す通り、1対1用、ブロードキャスト用とも、従来の図27(b)のように各送信元ノード毎に管理する必要はなくなっている(管理テーブルを小さくできる)。そして、受信側ノードでは、図6(a)のステップS54の多重検出処理は、図8に示す処理を行う。
図8は、実施例1における受信側ノードの多重検出処理の詳細フローチャート図である。
図8において、ステップS81、S82、S86の処理は、従来の図29のステップS411、S412、S415の処理と同様であるので、説明は省略する。
1対1通信である場合、ステップS82の処理後、ステップS83、S84の判定を行う。すなわち、受信した要求メッセージから取り出した送信元ノード番号、TIDと、図9(b)のTID管理テーブル23の送信元ノード番号、TIDとを比較して、もし、送信元ノード番号、TIDの両方ともが一致する場合には(ステップS83、S84の両方がNO)、受信した要求メッセージは、既に正常に受信済みの要求メッセージの再送メッセージであるので(多重受信であるので)、受信した要求メッセージは破棄して(ステップS90)当該処理は終了する。
一方、送信元ノード番号が一致で(ステップS83,NO)且つTIDが不一致である場合(ステップS84,YES)、あるいは送信元ノード番号が不一致である場合(ステップS83,YES)には、受信した要求メッセージは、新しいメッセージ(初送メッセージ若しくは過去に正常に受信できなかった要求メッセージの再送メッセージ)であるので、テーブル23を更新し(ステップS85)、所定の受信処理に移る。尚、テーブル23の更新とは、受信した要求メッセ−ジの送信元ノード番号及びTIDを、テーブル23に上書きすることである。
また、ブロードキャストである場合には、ステップS86の処理後、ステップS87〜S90の処理を行う。このステップS87〜S90の処理は、参照/更新する管理テーブルが、テーブル23ではなく、テーブル24である点を除けば、上記ステップS83〜S85、S90の処理と同様であるので、ここでの説明は省略する。
上述した実施例1のメッセージ交換処理について、以下、具体例を挙げて説明する。
ここでは、図9に示すノード番号0のノード(ノード0)が送信側、ノード番号1のノード(ノード1)が受信側である、1対1通信の場合について説明する。
ノード0からノード1に1対1の要求メッセージを送る場合、ノード0はテーブル21を、ノード1はテーブル23を使用する。ノード0はテーブル21の宛先ノード番号が1のTIDをインクリメント(250→251)して、このTID(251) と送信元ノード番号(0)を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そしてテーブル23の送信元ノード番号(0)、TID(250)とそれぞれ比較する(ステップS83,S84の判定を行う)。
この例では、送信元ノード番号は同じであるが(ステップS83,NO)、TIDが不一致なので(ステップS84,YES)、新しいメッセージと判定する。よって、受信したTID (251)と送信元ノード番号(0)をテーブル23に格納(上書き)すると共に、当該メッセージの受信処理(解析、その他)を行う。
もし、後に、この要求メッセージのリトライとしてノード0がノード1に1対1の要求メッセージを送った場合、ノード0はテーブル21の宛先ノード番号が1のTIDをインクリメントせずに(251のまま)、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そしてテーブル23の送信元ノード番号(0)とTID(251:先の要求メッセージで更新済み)をそれぞれ比較する。この場合は、送信元ノード番号もTIDも一致するのでステップS83、S84の両方がNO)、これが多重に同じメッセージを受信したものと判定できる。そこで、多重受信したメッセージを破棄する(ステップS90)。
次に、ノード0からブロードキャストする場合を例にして説明する。
ノード0からブロードキャストで要求メッセージを送る場合、ノード0はテーブル22を、ノード0以外はテーブル24を使用する。ノード0はテーブル22のTIDをインクリメント(100→101)して、このTID(101) と送信元ノード番号(0) を要求メッセージに格納して送信する。ノード0以外の各ノードはこの要求メッセージを受信するとそこからTID (101)と送信元ノード番号(0)を取り出す。そしてテーブル24の送信元ノード番号(0)、TID(100)とそれぞれ比較する(ステップS87,S88の処理を実行)。
この例では、送信元ノード番号は同じであるが(ステップS87,NO)、TIDが不一致なので(ステップS88,YES)、受信した要求メッセージは新しいメッセージであると判定する。よって、受信した要求メッセージのTID (101)と送信元ノード番号(0)をテーブル24に格納(上書き)すると共に、当該メッセージの受信処理(解析、その他)を行う。
その後、もし、この要求メッセージを多重化してノード0からブロードキャストで要求メッセージを送る場合、ノード0はテーブル22のTIDをインクリメントせずに(101のまま)、このTID(101) と送信元ノード番号(0) を要求メッセージに格納して送信する。ノード0以外の各ノードはこの要求メッセージを受信するとそこからTID (101)、送信元ノード番号(0)を取り出して、テーブル24の送信元ノード番号(0)、TID(101:先の要求メッセージで更新済み)とそれぞれ比較する。
この例では、送信元ノード番号もTIDも一致するので(ステップS87,S88の両方がNO)、これが多重に同じメッセージを受信したものだと判定できる。そこで、多重受信したメッセージを破棄する。
次に、以下、実施例2について説明する。
実施例2は、実施例1と比較すると、図12(b)に示すように、受信側のTID管理テーブルが、1対1とブロードキャストで共用するテーブルとなっている点が異なる。
実施例2においても、送信側は、実施例1と同様、図12(a)に示すように、送信側のTID管理テーブルは、管理テーブル31(1対1用)も管理テーブル32(ブロードキャスト用)も、従来の管理テーブル101,102と同様である。よって、図10に送信側のTID生成処理(図5(b)のステップS32の処理)の詳細フローチャートを示すが、これは従来の図28に示すTID生成処理と同様である。すなわち、図10のステップS101〜S107の処理は、図28のステップS401〜S407と同様である。よって、ここでは特に説明しない。
一方、受信側のTID管理テーブル33は、図12(b)に示す通り、実施例1と同様に従来の図27(b)のように各送信元ノード毎に管理する必要はなくなっており(管理テーブルを小さくできる)、更に1対1用とブロードキャスト用とが共用のテーブルとなっている。そして、受信側ノードでは、図6(a)のステップS54の多重検出処理は、図11に示す処理を行う。
図11は、実施例2における受信側ノードの多重検出処理の詳細フローチャート図である。
図11において、受信側ノードは、まず、受信した要求メッセージから送信元ノード番号とTIDを取り出すと共に(ステップS111)、このメッセージがブロードキャストか1対1かを判定し(ステップS112)、1対1である場合には(ステップS112,NO)図12(b)のTID管理テーブル33における判定フラグ33aとは別に用意されている不図示の判定フラグをON状態し(ステップS113)、ブロードキャストである場合には(ステップS112,YES)この不図示の判定フラグをOFF状態にする(ステップS114)。尚、ここでは、判定フラグがONの場合は“1対1”、OFFの場合は“ブロードキャスト”を意味するものであることが予め設定・登録されているものとする。
そして、上記受信した要求メッセージによる送信元ノード番号、TID、不図示の判定フラグと、TID管理テーブル33における送信元ノード番号、TID、判定フラグ33aとを、それぞれ比較して、一致/不一致を判定する(ステップS115,S116,S117)。そして、もし、全てが一致する場合には(ステップS115,S116,S117の全てがNO)、この要求メッセージは多重に同じメッセージを受信したものだと判定し、受信した要求メッセージを破棄する(ステップS119)。
一方、それ以外の場合、すなわち送信元ノード番号が不一致の場合(ステップS115,YES)、または送信元ノード番号は一致するが(ステップS115,NO)TIDが不一致である場合(ステップS116,YES)、あるいは送信元ノード番号もTIDも一致するが(ステップS115,S116の両方がNO)判定フラグが不一致である場合には(ステップS117,YES)、受信した要求メッセージは新しいメッセージであると判定する。よって、受信した要求メッセージの送信元ノード番号、TID、及び不図示の判定フラグによってテーブル33を更新し(ステップS118)、その後、当該メッセージの受信処理(解析、その他)を行う。
上記ステップS117の処理を行うことで、例えば仮に同一の送信元ノードから1対1の要求メッセージとブロードキャストの要求メッセージが連続して送られてきて、偶然、両者のTIDが同じであった場合にも、これらが別のメッセージであることが判別できる。
上述した実施例2のメッセージ交換処理について、以下、具体例を挙げて説明する。
ここでは、図12に示すノード番号0のノード(ノード0)が送信側、ノード番号1のノード(ノード1)が受信側である、1対1通信の場合について説明する。
ノード0からノード1に1対1の要求メッセージを送る場合、ノード0はテーブル31を、ノード1はテーブル33を使用する。ノード0はテーブル31の宛先ノード番号が1のTIDをインクリメント(250→251)して、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出すとともに、上記不図示の判別フラグをON状態(1対1を意味する)にする。これら各々を、テーブル33の送信元ノード番号(0)、TID(250)、判別フラグ(ON状態;1対1)とそれぞれ比較する(ステップS115〜S117の処理)。
この例では、送信元ノード番号と判別フラグは同じであるがTIDが不一致となるので、受信した要求メッセージは新しいメッセージであると判定する。そして、受信した要求メッセージのTID (251)と送信元ノード番号(0)、及び不図示の判別フラグ(ON状態)をテーブル33に格納(上書き)する。
もし、後に、この要求メッセージのリトライとしてノード0からノード1に1対1の要求メッセージを送る場合、ノード0はテーブル31の宛先ノード番号が1のTIDをインクリメントせずに(251のまま)、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出すとともに、上記不図示の判別フラグをON状態(1対1)にする。そしてこれら各々を、テーブル33の送信元ノード番号(0)、TID(251:先の要求メッセージで更新済み)、判別フラグ33a(1対1)とそれぞれ比較する(ステップS115〜S117の処理)。
この例では、送信元ノード番号、TID、判別フラグの全てが一致するので、これが多重に同じメッセージを受信したものだと判定できる。そこで、多重受信したメッセージを破棄する。
上記1対1のメッセージ交換の後に、続けて、ノード0からブロードキャストで要求メッセージを送信した場合について説明する。この場合、図12(a)に示すように、元々、テーブル31における宛先ノード番号0のTIDと、テーブル32のTIDは、両方とも250であった為、両方ともインクリメントすると251になるので、ノード1においては、もし上記判別フラグ33aがないと、両者を区別できない為、今回のブロードキャストでの要求メッセージが多重に同じメッセージを受信したものと判定してしまうが、判別フラグ33aを用いることで、このような誤判定は生じなくなる。
すなわち、上記状況においてノード0からブロードキャストで要求メッセージを送る場合、ノード0はテーブル32を、ノード0以外の各ノードはテーブル33を使用する。ノード0はテーブル32のTIDをインクリメント(250→251)して、このTID(251) と送信元ノード番号(0) を要求メッセージに格納して送信する。ノード0以外の各ノードはこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出すとともに、上記不図示の判別フラグをOFF状態(ブロードキャスト)にする。これら各々を、テーブル33の送信元ノード番号(0)、TID(251:先の1対1要求メッセージで更新済み)、判別フラグ33a(ON状態;1対1)と、それぞれ比較する(ステップS115〜S117の処理)。
このとき、他のノードはともかく、ノード1においては、送信元ノード番号とTIDの両方が同じとなってしまうが、判別フラグが不一致となるので、受信した要求メッセージは新しいメッセージであると判定できる。そして、受信した要求メッセージのTID (101)と送信元ノード番号(0)、及び不図示の判別フラグ(OFF状態)の値をテーブル33に格納(上書き)する。
その後、もし、この要求メッセージを多重化してノード0からブロードキャストで要求メッセージを送る場合、ノード0はテーブル32のTIDをインクリメントせずに(251のまま)、このTID(251) と送信元ノード番号(0) を要求メッセージに格納して送信する。ノード0以外の各ノードはこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出すとともに、上記不図示の判別フラグをOFF状態にする。そして、これら各々を、テーブル33の送信元ノード番号(0)とTID(251:先の要求メッセージで更新済み)と判別フラグ(OFF状態)と、それぞれ比較する(ステップS115〜S117の処理)。
この場合、送信元ノード番号、TID、判別フラグの全てが一致するので、これが多重に同じメッセージを受信したものだと判定できる。そこで、多重受信したメッセージを破棄する。
次に、以下、実施例3について説明する。
上記実施例1,2では、従来と比較して、受信側の管理テーブルを削減した(各ノード毎に管理しなくて済むようにした)が、実施例3では送信側の管理テーブルを削減する(各ノード毎に管理しなくて済む)。また、受信側においても1対1用とブロードキャスト用とを共用にすることができる。尚、実施例3においても、要求から応答までを1トランザクションとし、応答完了するまでの間はマスタノード3は他のノードには送信権を与えないようにしている。
まず、既に従来技術で説明したように、従来において送信側ノードで各宛先ノード毎にTIDを管理する必要があった理由は、もし1つのTIDで管理すると、例えばTIDは1〜255を使うとして(255までいったら再び1に戻る)、あるノード(受信側ノード)とメッセージ交換した後に、TIDの更新が丁度一周したときに、再びこのノードに要求メッセージを送ると、TIDの値は前回と同じになるので、これが多重に同じメッセージを受信したものだと誤判定されてしまうからである。
この誤判定は、受信側ノードにおいて、ある送信側ノードとのメッセージ交換した後に、この送信側ノードが次のトランザクションに移行している(他ノード宛メッセージを出している)ことを認識していない為に生じる。ここで、1対1通信に関して、通常、各ノードは、自ノード宛以外のメッセージも受信しているが、宛先が自ノードではない場合には直ちにこのメッセージを破棄している。
実施例3では、他ノード宛のメッセージを受信すると、直ちには破棄せずに、まず、このメッセージの送信元ノード番号を参照して、例えば図15(b)に示す自己のTID管理テーブル42において同じノード番号のTIDの値を初期化する(0にする)。ここで、0にする理由は、上記の例では、TIDは1〜255を使う為、0は使っていないからである。よって、0にする例に限らず、TIDとして使用しない値(この例では256以降等)とすればよい。あるいは次のトランザクションに移行したことを示す何らかの特定の情報、記号等にしてもよい(この場合は、TIDの比較処理自体を行わない。特殊な情報、記号等が格納されていることを以って次のトランザクションに移行したものと判定する)。但し、ここでの説明及び以下の実施例4以降の説明においては、TIDの値を0にする例を用いて説明する。
上記のように強制的に0にすることで、後に上記TIDの値を初期化したノード番号のノードから要求メッセージが来た場合には、必ずTIDは不一致となるので、上記誤判定は生じない。勿論、これが再送メッセージである可能性はない(上記の通り、送信側ノードが次のトランザクションに移行していることを以って、0にしているので)。
このようにすることで、送信側ノードでは、宛先毎にTIDを管理する必要が無くなる。また、そもそも従来では宛先毎にTIDを管理しているためにブロードキャストのTIDも別に管理していたが、宛先毎ではなくなるのでブロードキャストも区別して管理する必要が無くなる。これより、図15(a)に示すように、送信側のTID管理テーブル41は、1対1とブロードキャスト共用でTIDを1つ管理すれば済むようになる。
さらに、送信側で1対1とブロードキャストとを区別して管理しなくなるので、受信側でも、図15(b)に示すように1対1とブロードキャストとで管理テーブルを共用することができる(但し、各送信元ノード毎に管理する必要はある)。
図13、図14に、実施例3における送信側/受信側ノードの処理フローチャートを示す。
図13は、送信側ノードのTID生成処理のフローチャート図である。
図13において、まず、送信する要求メッセージが初送かリトライかを判定する(ステップS121)。初送である場合には(ステップS121、YES)テーブル41のTIDの値をインクリメントする(ステップS122)。リトライである場合には(ステップS121,NO)TIDの値はそのままとする。
そして、テーブル41のTIDの値と送信元ノード番号(送信元ノード番号)とを要求メッセージに格納して(ステップS123)、当該要求メッセージを送信する。
テーブル41のようにTIDを1つ管理すれば済むようになったので、図13に示すように、TID生成処理は、従来の図28の処理と比べ、簡略化される。
図14(a)は、受信側ノードの多重検出処理のフローチャート図である。
図14(a)において、まず、受信した要求メッセージから送信元ノード番号とTIDを取り出して(ステップS131)、テーブル42において同じ送信元ノード番号のTIDと比較する(ステップS132)。もし、TIDが一致すれば(ステップS132,NO)、受信した要求メッセージは多重に同じメッセージを受信したものだと判定し、当該要求メッセージは破棄して(ステップS134)処理を終了する。もし、TIDが不一致であれば(ステップS132,YES)、テーブル42における上記送信元ノード番号に対応するTIDの値を更新する。つまり、要求メッセージに格納されていたTIDの値を上書きする(ステップS133)。そして、引き続き所定の要求メッセージ受信処理を実行する。
実施例3では、図14(a)に示す通り、受信側ノードの多重検出処理も、従来の図29の処理と比べ、簡略化される。
但し、これだけでは、上記誤判定が生じる可能性がある。
それ故に、実施例3では、常時、他ノード宛のメッセージを監視しており、他ノード宛の要求メッセージを受信する毎に、図14(b)に示す処理を実行する。
図14(b)に示すように、他ノード宛の要求メッセージを受信すると、この要求メッセージから送信元ノード番号を取り出して(ステップS141)、テーブル42において同じ送信元ノード番号のTIDの値を初期化(0)する(ステップS142)。尚、この例に限らず、他ノード宛の要求メッセージ内のTIDによってテーブル42を更新するようにしてもよい。
これによって、既に説明してあるように、上記誤判定が生じることはなくなる。
上述した実施例3の処理について、以下、具体例を挙げて説明する。ここでは、TIDの値を初期化(0)する例を用いて説明する。
ここでは、まず、図15に示す例においてノード番号0のノード(ノード0)が送信側、ノード番号1のノード(ノード1)又はノード0以外の全ノードが受信側となる場合を例にして説明する。
ノード0からノード1に1対1の要求メッセージを送る場合、もしくはノード0からブロードキャストの要求メッセージを送る場合、ノード0はテーブル41を、ノード1はテーブル42を使用する。
ノード1に1対1の要求メッセージを送信する場合、ノード0はテーブル41のTIDをインクリメント(250→251)して、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そしてテーブル42の送信元ノード番号が0のTID(250)と比較する。この場合、TIDは不一致となるので、受信した要求メッセージは新しいメッセージであると判定する。そして、受信したTID (251)をテーブル42に格納(上書き)して、所定の受信処理(解析等)を実行する。
その後、この要求メッセージのリトライとしてノード0からノード1に要求メッセージを送る場合、ノード0はテーブル41のTIDはインクリメントせずに(251のまま)、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そしてテーブル42の送信元ノード番号0のTID(251:先の要求メッセージで更新済み)と比較する。この場合、TIDが一致するので、これが多重に同じメッセージを受信したものだと判定し、多重受信したメッセージを破棄する。
そして、その後、ノード0から例えばノード2に1対1の要求メッセージを送る場合、ノード0はテーブル41のTIDをインクリメント(251→252)して、このTID(252) と送信元ノード番号(0) を要求メッセージに格納してノード2に送信する。ノード1はこの要求メッセージは自分宛ではないがそれを受信すると、そこから送信元ノード番号(0)を取り出す。そしてテーブル42の送信元ノード番号0のTID(251:先の要求メッセージで更新済み)を初期化(0)する。
その後も、ノード0は、ノード1以外の他のノードに対して1対1の要求メッセージ送信処理を繰り返し、当然その都度テーブル41のTIDはインクリメントされ、TIDの値は255になった次は1に戻り、更にインクリメントし続けた結果、TIDの値が再び250になっていたものとする。
この状況でノード0がノード1に1対1の要求メッセージを出す場合、ノード0はテーブル41のTIDをインクリメント(250→251)して、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そしてテーブル42の送信元ノード番号が0のTID(0)と比較する。テーブル42のTIDの値‘0’は、上記の通り、通常のTIDの値としては有り得ないようにしているので、比較の結果は必ず不一致になる。よって、受信した要求メッセージは新しいメッセージであると、正しく判定できる。もし、上記初期化を行っていないと、上記の通り、テーブル42の送信元ノード番号が0のTIDの値は‘251’となっているので、比較の結果は一致となり、新しいメッセージであるにも係わらず多重に同じメッセージを受信したものだと誤判定してしまうことになるが、実施例3ではこのような誤判定を防ぐことができる。
以下、実施例4について説明する。
実施例4は、上記実施例3の延長線上の実施例であり、受信側のTID管理テーブルも上記実施例2等と同様に小さくしている例である(実施例3においても小さくすることは出来るが、実施例3はあえて送信側のみ小さくする例を示したに過ぎない)。
すなわち、送信側では、実施例3と同様、図18(a)に示すTID管理テーブル51のみで済むようになる。また、受信側のTID管理テーブルは、実施例1、2のように各送信元ノード毎に管理する必要が無くなるだけでなく、上記実施例3によってブロードキャストと1対1の区別をつける必要がなくなるので、図18(b)のTID管理テーブル52のように送信元ノード番号とTIDを1組記憶すれば良くなる。
さらに、受信側ノードにおいて他ノード宛メッセージでTIDの初期化をする判定を簡略化できる。前述の実施例3では、受信側TID管理テーブルが送信元毎にTIDを管理しているため、受信した他ノード宛てのメッセージ内の送信元ノード番号を見て該当するTIDを初期化(又は更新)する必要があった。しかし、実施例4では受信側でもTIDを1組記憶しているだけなので、他ノード宛のメッセージを受信したら、その宛先を見ることなく管理テーブルのTIDを初期化(または更新)することができる(上記の通り要求から応答までが同じトランザクションになっているので、他ノード宛のメッセージを受信するということは別のトランザクションに移ったことを示している)。
図16、図17に、実施例4における送信側/受信側ノードの処理フローチャートを示す。
図16は、送信側ノードのTID生成処理のフローチャート図である。
図16のステップS151〜S153の処理は、図13のステップS121〜S123の処理と同様であるので、ここでの説明は省略する。
図17(a)は、受信側ノードの多重検出処理のフローチャート図である。
図17(a)において、まず、受信した要求メッセージから送信元ノード番号とTIDを取り出して(ステップS161)、これら各々を、テーブル52に記憶されている送信元ノード番号、TIDとそれぞれ比較し、もし両方とも一致した場合(ステップS162,S163の両方でNO)、受信した要求メッセージは多重に同じメッセージを受信したものだと判定し、当該要求メッセージは破棄して(ステップS165)処理を終了する。それ以外の場合(少なくとも一方が不一致)には、テーブル52を更新する(ステップS164)。つまり、受信した要求メッセージの送信元ノード番号、TIDを上書きする。そして、引き続き所定の要求メッセージ受信処理を実行する。
また、実施例3と同様、常時、他ノード宛のメッセージを監視しており、他ノード宛の要求メッセージを受信する毎に、図17(b)に示す処理を実行する。
図17(b)に示すように(既に述べたように)、実施例4では、実施例3とは異なり、他ノード宛の要求メッセージを受信することを以って、テーブル52のTIDの値を初期化(0)する(ステップS171)。つまり、送信元ノード番号を参照する処理を省ける。尚、図では、初期化することのみ示しているが、他ノード宛の要求メッセージ内のTIDによってテーブル52を更新するようにしてもよい。
これによって、実施例3と同様、上記誤判定が生じることはなくなる。
上述した実施例4の処理について、以下、具体例を挙げて説明する。ここでは、他ノード宛の要求メッセージを受信することを以って、テーブル52のTIDの値を初期化(0)する例を用いて説明する。
ここでは、まず、図18に示す例においてノード番号0のノード(ノード0)が送信側、ノード番号1のノード(ノード1)又はノード0以外の全ノードが受信側となる場合を例にして説明する。
ノード0からノード1に1対1の要求メッセージを送る場合(初送メッセージ)、もしくはノード0からブロードキャストの要求メッセージを送る場合、ノード0はテーブル51を、ノード1はテーブル52を使用する。ノード0はテーブル51のTIDをインクリメント(250→251)して、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そしてこれらをテーブル52の送信元ノード番号(0) 、TID(250) とそれぞれ比較する。
この場合、送信元ノード番号は同じであるが、TIDが不一致なので、新しいメッセージと判定する。そして、受信したTID (251) と送信元ノード番号(0)をテーブル52に格納(上書き)する。
その後、もし、この要求メッセージのリトライとして番号0のノードから番号1のノードに要求メッセージ(再送メッセージ)を送る場合、ノード0はテーブル51のTIDをインクリメントせずに(251のまま)、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そして、これらを、テーブル52の送信元ノード番号(0)、TID(251:先の要求メッセージで更新済み)とそれぞれ比較する。その際、上記実施例1,2と同様、上記初送メッセージ受信から再送メッセージ受信までの間に他のノードから要求メッセージを受信することはないので(別のトランザクションは発生しない)、テーブル52は更新されていないので、上記の通り送信元ノード番号もTIDも一致する。よって、受信した要求メッセージが多重に同じメッセージを受信したものだと判定できる。そこで、多重受信したメッセージを破棄する。
そして、その後、ノード0からノード1以外のノード(例えばノード2)に1対1の要求メッセージを送る場合、ノード0はテーブル41のTIDをインクリメント(251→252)して、このTID(252) と送信元ノード番号(0) を要求メッセージに格納してノード2に送信する。ノード1はこの要求メッセージは自分宛ではないがそれを受信すると、そこから送信元ノード番号(0)を取り出す。そしてテーブル52の送信元ノード番号0のTID(251:先の要求メッセージで更新済み)を初期化(0)する。尚、初期化(0)する例に限らず、TIDとして使用しない値等にすればよいことは既に述べたが、本実施例では、TIDとして使用する値にしても構わない。すなわち、上記他のノード宛の要求メッセージに含まれるTID(252)によってテーブル52の送信元ノード番号0のTIDを更新(251→252)してもよい。これは実施例3においても同様である。要は、ノード0側でTIDの更新が一周して再び251になってTID(251)の要求メッセージを送ってきたときに、これが別のメッセージである(多重受信ではない)ことが判別できるようにしていれば、何でもよいのである。
その後も、ノード0は、ノード1以外の他のノードに対して1対1の要求メッセージを送る処理を繰り返し、当然その都度テーブル51のTIDはインクリメントされ、TIDの値は255になった次は1に戻り、更にインクリメントし続けた結果、TIDの値が再び250になっていたものとする。また、その間、ノード1は、一度も他のノードから要求メッセージ(ブロードキャストも含めて)を受け取ることは無かったものとする。
この状況でノード0がノード1に1対1の要求メッセージを出す場合、ノード0はテーブル51のTIDをインクリメント(250→251)して、このTID(251) と送信元ノード番号(0) を要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)と送信元ノード番号(0)を取り出す。そしてテーブル52の送信元ノード番号(0)、TID(0)と比較する。テーブル52のTIDの値‘0’は、上記の通り、通常のTIDの値としては有り得ない値であるので、比較の結果は必ず不一致になる。よって、受信した要求メッセージは新しいメッセージであると、正しく判定できる。もし、上記初期化を行っていないと、上記の通り、テーブル52には送信元ノード番号(0)、TID(251)が格納されているので、比較の結果は一致となり、新しいメッセージであるにも係わらず多重に同じメッセージを受信したものだと誤判定してしまうことになるが、実施例4においてもこのような誤判定を防ぐことができる。
以下、実施例5について説明する。
上記実施例1〜4では、各送信側ノード毎に個別にTIDを更新(インクリメント)・管理していたが、実施例5ではシステムでTIDを一元管理する。すなわち、TIDはマスタノードで例えば図21(a)に示すTID管理テーブル61によって一元管理する。よって、マスタノード以外の各ノードは、TID生成処理(インクリメント)は行わないし、送信側TID管理テーブルも保持する必要なく、図21(b)に示す受信側TID管理テーブル62のみを保持・管理するば済むようになる。尚、実施例5においても、要求から応答までを同じトランザクションとし、マスタノードは1つのトランザクションが完結するまで、他のノードにはトークンを与えないようにする点は、実施例1〜4と同じである。
マスタノードは、任意のノードから送信権要求があると、トークン(送信権)を要求元ノードに与えるが、実施例5ではその際、マスタノードは自己が管理するTID管理テーブル61によってTIDを更新(インクリメント)して、このTIDをトークンに含めて要求元ノードに与える。
送信権要求元ノードはトークンに含まれるTIDを取り出して要求メッセージに格納して送信すればよい。このようにマスタノードでTIDを一元管理すると、送信元のノード番号とTIDの関係は無くなり、実施例4では受信側で送信元ノード番号とTIDを記憶していたものに対し、実施例5ではTIDだけを記憶すれば良くなる。
また、実施例4では受信側ノードにおいて他ノード宛メッセージ受信を以ってTIDを更新または初期化していたが、実施例5では受信側ノードはマスタノードでTID更新が行われたことを認識することを以って、TIDの初期化もしくは更新を行う。この認識の方法は、以下の4つのうちの何れかを用いればよい。
・他ノード宛の要求メッセージを受信すると、このメッセージ内のTIDによってテーブル62を更新(上書き)する。
・他ノード宛の要求メッセージ受信を以って(トリガとして)、テーブル62のTIDを初期化。
・自分宛でも他ノード宛でも良く、宛先に関係なくトークンを受信した場合、このトークン内のTIDとテーブル62のTIDとを比較して、不一致ならテーブル62のTIDを初期化。
・他ノード宛のトークン受信を以って(トリガとして)、テーブル62のTIDを初期化。
上記いずれの方法でも、マスタノードでTIDの更新が行われたことを認識することができる。
図19、図20に、実施例5におけるマスタノード/送信側ノード/受信側ノードの処理フローチャートを示す。
図19(a)は、マスタノードのTID生成処理のフローチャート図である。
つまり、上記の通り、実施例5では、TIDはシステムで一意のものとしマスタノードで一元管理するので、TID生成処理はマスタノードで行う(送信側ノードでは行わない)。
図19(a)において、マスタノードは、任意のノードから送信権要求があると、それが前のサイクルで送信権を与えたノードから継続して要求されたもの(継続送信権要求)であるか否かを判定し(ステップS181)、継続送信権要求である場合には(ステップS181,YES)、テーブル61のTIDを更新することなく、このTIDをトークンに含めて(ステップS183)、要求元ノードにトークンを送信する。一方、継続送信権要求ではない場合には(ステップS181,NO)、テーブル61のTIDを更新し(+1インクリメントし)(ステップS182)、この更新後のTIDをトークンに含めて(ステップS183)、要求元ノードにトークンを送信する。
図19(b)は、送信側ノードにおける要求メッセージ送信処理の一部であるTID抽出処理を示すフローチャート図である。
特に図示していないが、要求メッセージ送信を行いたい送信側ノードは、まず、制御時間帯において、マスタノードに対して、送信権要求を行う。これに対して図19(a)の処理によってトークンが与えられた場合には、図19(b)に示すように、まずトークンからTIDを取り出す(ステップS191)。そして、取り出したTIDを要求メッセージに格納して(ステップS192)、当該要求メッセージを送信する。
図20(a)は、受信側ノードにおける多重検出処理のフローチャート図である。
図20(a)において、受信側ノードは、図19(b)の処理によって送られてくる要求メッセージを受信すると、この要求メッセージからTIDを取り出して(ステップS201)、これをテーブル62のTIDと比較する(ステップS202)。
もしTIDが一致すれば(ステップS202,NO)、多重に同じメッセージを受信したものとし、この要求メッセージは破棄する(ステップS204)。もし、TIDが不一致であれば(ステップS202,YES)、この要求メッセージは新しいメッセージであるとし、テーブル62を更新(要求メッセージのTIDを格納)すると共に(ステップS203)、所定の受信処理(メッセージ解析・実行等)を行う。
実施例5では、上述してあるように、TIDをシステムで一意のものとしマスタノードで一元管理するが、このようにしても、受信側ノードで認識できないままTIDが更新され続けて丁度一周したときに偶然、テーブル62のTIDと同じTIDを含む要求メッセージが送られてきた場合、これが新たなメッセージであることが認識できず、このメッセージを間違って破棄してしまう、という問題は生じる。
この問題に対して、実施例5では、図20(b)に示す4つのフローチャート(4つの方法)の何れかを実行することで、上記問題が生じないようにできる。
図20(b)に示す第1の方法では、他ノード宛の要求メッセージを受信すると、この要求メッセージからTIDを取り出して(ステップS211)、テーブル62を更新する(取り出したTIDをテーブル62に格納する)(ステップS212)。
図20(b)に示す第2の方法では、他ノード宛の要求メッセージを受信したことを以って(そのTIDを取り出すことなく)、テーブル62のTIDを初期化(0)する(ステップS221)。
図20(b)に示す第3の方法では、自分宛でも他ノード宛でも宛先に関係なくトークンを受信した場合、このトークンに含まれるTIDを取り出して(ステップS231)、取り出したTIDとテーブル62のTIDとを比較し、不一致の場合には(ステップS232,YES)、テーブル62を初期化(0)する(ステップS233)。一方、TIDが一致した場合は(ステップS232,NO)、そのまま処理を終了する。
図20(b)に示す第4の方法では、他ノード宛のトークンを受信したことを以って(そのTIDを取り出すことなく)、テーブル62のTIDを初期化(0)する(ステップS241)。
上述した実施例5の処理について、以下、具体例を挙げて説明する。
ここでは、ノード番号0のノード(ノード0)が送信側、ノード番号1のノード(ノード1)又はノード0以外の全ノードが受信側となる場合を例にして説明する。マスタノード、ノード1で管理するTIDは、図21に示す通り、両方とも250であったものとする。
ノード0からノード1に1対1の要求メッセージを送る場合、もしくはノード1がブロードキャストの要求メッセージを送る場合、まずノード0はマスタノードに対して送信権要求を出し、ノード0からの送信権要求を受けたマスタノードはテーブル61のTIDをインクリメント(250→251)して、このTID(251) をトークンに格納してノード0に送信する。このトークンを受け取ったノード0は、このトークンに含まれるTIDを要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)を取り出して、テーブル62のTID(250)と比較する。この場合、TIDは不一致となるので、受信した要求メッセージは新しいメッセージであると判定する。そして、受信したTID (251) をテーブル62に格納(上書き)する。そして、所定の受信処理(メッセージ解析・実行等)を開始する。
また、ノード1は、ノード0に対してACKを送信する。但し、ここでは、ノイズ等の影響でノード0はACKを受信できなかったとする。
そこで、ノード0は、この要求メッセージのリトライとしてノード1に再送メッセージを送るものとし、マスタノードに対して送信権要求を送る。マスタノードは同じノード(0)からの継続した送信権要求を受け取ることになるのでテーブル61のTIDをインクリメントせずに(251のまま)、このTID(251) をトークンに格納してノード0に送信する。このトークンを受け取ったノード0は、トークンに含まれるTIDを要求メッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (251)を取り出し、テーブル62のTID(251:先の要求メッセージで更新済み)と比較する。この場合、TIDが一致するのでこれが多重に同じメッセージを受信したものだと判定できる。そこで、多重受信したメッセージを破棄する。
その後、ノード1は、上記最初に受信した要求メッセージに対する応答メッセージを作成してノード0に送信し、当該メッセージ交換は終了したとする。
その後、ノード0が、ノード1以外の他のノード(例えばノード2)に1対1の要求メッセージを送る為、マスタノードに対して送信権要求を行ったとする。この場合、マスタノードは、テーブル61のTIDをインクリメント(251→252)して、このTID(252) をトークンに格納してノード0に送信する。このトークンを受け取ったノード0は、このトークンに含まれるTIDを要求メッセージに格納してノード2に送信する。
ここで、ノード1は、上記ノード0−ノード2間のメッセージ交換の為のトークンまたは要求メッセージを監視して、以下の4つの処理の何れか1つを実行する。
(1)ノード1は、上記要求メッセージは自分宛ではないがそれを受信すると、その中のTID(252)をテーブル62のTID(251:先の要求メッセージで更新済み)に上書きする。
(2)ノード1は、上記要求メッセージは自分宛ではないがそれを受信すると、テーブル62のTID(251:先の要求メッセージで更新済み)を初期化(0)する。
(3)ノード1は、受信したトークン(宛先はなんでも良い)の中のTID(252)とテーブル62のTID(251:先の要求メッセージで更新済み)を比較して、不一致なのでこれを初期化(0)する。
(4)ノード1は、自分宛ではないトークンを受信すると、テーブル62のTID(251:先の要求メッセージで更新済み)を初期化(0)する。
その後、上記ノード0−ノード2間のメッセージ交換は完了したものとする。
その後、再び、ノード0がノード1に1対1の要求メッセージを送る為もしくはノード0がブロードキャストの要求メッセージを送る為に、ノード0がマスタノードに送信権要求した場合、マスタノードはテーブル61のTIDをインクリメント(252→253)して、このTID(253) をトークンに格納してノード0に送信する。トークンを受け取ったノード0は、このトークンに含まれるTIDをメッセージに格納してノード1に送信する。ノード1はこの要求メッセージを受信するとそこからTID (253)を取り出して、テーブル62のTID(先に初期化もしくは252を上書きされた)と比較する。そうすると、TIDが不一致なので新しいメッセージと判定できる。そして、受信したTID (253)をテーブル62に格納する。
次に、以下、実施例6について説明する。実施例6は、上記実施例1〜5に追加する実施例である。すなわち、実施例1〜5では、多重受信の判定を行うことまでを説明し、新しいメッセージを受信したときの応答メッセージ作成・送信、要求側での応答メッセージの正常な受取完了までの処理については説明していなかった。
実施例6では、これについて説明する。但し、上記実施例1〜5は、図4〜図6の処理をベースにしていたが、実施例6ではこれとは多少異なり、1対1通信の場合でもACKを返さない処理をベースにするものとする。ACKを返さない理由は後に説明する。勿論、これは一例であり、実施例6は図4〜図6の処理をベースにしてもよい。但し、この場合、後述するNack返信するような事態は生じなくなるし、よってポーリングにTIDを格納する必要もなくなる。
実施例6において、まず、メッセージ交換処理に関しては、受信側ノードでは、上記受信側のTID管理テーブルだけでなく、応答保持情報、処理中フラグを用いて処理を行う。
既に実施例1〜5で説明してある通り、受信した要求メッセージが新たなメッセージであると判定した場合、そのメッセージを受け入れてTIDを更新するが、この要求メッセージ受け入れの際には、更に、上記応答保持情報(応答メッセージの準備が完了して保持していることを示す情報)をクリア(0)する。
その後、受け入れた要求メッセージによって要求された処理を終了し、応答メッセージを準備できたら、応答保持情報をセット(1)する。
上記の通り、送信側ノードでは、要求メッセージを送信後、1又は複数回、ポーリングを送信する。受信側ノードでは、このポーリングを受信する毎に、応答保持情報を参照して、それが立っていれば(1)応答メッセージを送信し、立っていなければ(0)予め用意しておいた“処理中を通知するためのフレーム”を送信する。
このようにすれば、要求メッセージに対する処理中にポーリングが来てもそれにたいして処理中を通知できる。また、応答メッセージが途中で消失した為に、リトライによるポーリングが来ても、保持されている応答メッセージによって何回でも同じ応答を返すことができる。
また、本例では、上記の通り、要求メッセージを受信してもACKを返さないので、送信側は要求メッセージが届いたか否かを認識できない。この為、要求メッセージが届いたか否かに関係なく、続けてポーリングを送信する。よって、受信側では、要求メッセージがノイズ等で受信側に届かないにも関わらず、続いてポーリングが届くことになる。この場合は、このポーリングを新しいトランザクションのものと判定して非応答(Not ACK:Nack)を返す必要がある。決して前のトランザクションのポーリングの続きと判定して前の応答メッセージを返してはならない。一方、上記の通り、応答メッセージがノイズ等で送信側ノードに届かない場合のリトライでポーリングが届く場合がある。この場合は、このポーリングを前のトランザクションの続きと判定して、前の応答メッセージを返す必要がある。
実施例6では、上記の状況に対応する為に、ポーリングにもTIDを格納してトランザクションの管理をする。
そして、受信側ノードは、上記要求メッセージを受信した場合だけでなく、自ノード宛のポーリングを受信した場合にも、このポーリングに格納されているTIDを受信側TID管理テーブルに記憶されているTID(要求メッセージで更新されている)と比較して、TID一致ならばトランザクションの継続と判定して、応答保持情報がセットされていれば応答メッセージを送信し、セットされていなければ処理中を送信する。
一方、TID不一致ならば要求メッセージ消失等のトランザクション異常と判定してNackを送信する。
以上の様に、実施例6によれば、ポーリングもTIDで管理する事により、要求メッセージ消失等のトランザクションの異常に対応できる。
上記実施例6を実施例5に適用した場合の処理フローチャートを、図22〜図24に示す。また、図22〜図24の処理について具体例を挙げて説明する為の図を図25、図26に示す。
図22は、上記の場合のマスタノードの処理フローチャート図である。
図22において、タイマ14による定周期タイマ割り込みが入る毎に(ステップS251,YES)、まず制御時間帯における処理を行う。すなわち、他の各ノード(0,1,2・・・等)からの制御データ受信処理を行うと共に、もし1または2以上のノードから上記送信権要求があった場合にはこれを受信して記録しておく(ステップS252)。続いて、メッセージ時間帯に入ったら(ステップS253,YES)、送信権要求したノードにトークンを与えるが(ステップS256)、もし複数のノードから送信権要求があった場合には、その前にどのノードにトークンを与えるかを判定する(ステップS254)。この判定は、既に述べている通り、前のサイクルでトークンを与えたノードから引き続き送信権要求があった場合には(あるいは要求が無くても、要求の取り下げが無い限り)、このノードに引き続きトークンを与える。
そして、図19(a)に示すTID生成処理を行って(ステップS255)、トークンを送信する(ステップS256)。
図23は、上記の場合の送信側ノードのトークン受信処理のフローチャート図である。
図23において、要求メッセージ送信側ノードは、まず、応答待ちフラグがONかOFFかを判定する(ステップS261)。応答待ちフラグは、既に要求メッセージを送信しておりメッセージ受信ノードからの応答待ちの状態である場合にはONになっている。
最初は、未だ要求メッセージは送信していないので、応答フラグはOFFであり、ステップS262以降の処理を行うことになる。まず、本例では上記の通り実施例5に適用した場合の例なので、送信側ノードではTID生成処理は行わない。TIDはマスタノードで生成されてトークンに含まれてくるので、受信したトークンからTIDを取り出す処理を行う(ステップS262)。
そして、トークンから取り出したTIDと自己のノード番号(送信元ノード番号)を要求メッセージに含めて送信する(ステップS263)。その後 応答待ちフラグをONにして(ステップS264)、処理を終了する。
ここで、本処理では、上記図5(b)の処理とは異なり、ACK受信は不要になっている。つまり、受信側ノードは、要求メッセージを受信してもACKを返さない。ACKを用いなくても、後に図26で説明するように、ポーリングに対してNackが返信されてくれば、要求メッセージが受信側に届いていないと判定できるので、図23には図示していないが、その場合には再送をするかどうかを上位処理で判定すれば良い。
この様にACKを用いないようにしている理由は、要求メッセージは通常数十〜百数十バイト程度である為、受信側ノードがサムチェックを行ってデータが壊れていないかどうかを判定するのに時間がかかるので、この判定は制御データ交換処理のバックグランド処理で行いたいからである。もし、ACKを返す場合、この判定を1サイクルのメッセージ時間帯内で行わなければならない為、その分、メッセージ時間帯を長くする必要が生じる。 一方、上記のようにこの判定を制御データ交換処理のバックグランド処理で行えば、次のサイクルでポーリングがくるまでに判定終了していればよいので、メッセージ時間帯を長くする必要はない。もし、要求メッセージが壊れていたら破棄して、ポーリングに対してNackを返信すればよい。尚、ポーリングは数バイト程度なのでサムチェックは短時間で済み、その応答も十数バイト程度なので、メッセージ時間帯を長くする必要はない。
また、これも特に図示しないが、上記図5(b)と同様、ブロードキャストの場合は通常ACKや応答メッセージは来ないので、要求メッセージを連続して複数回送信するだけであり、ポーリングも行うことなく、処理を終了する。
上述したように最初のサイクルでステップS262〜S264の処理を実行したら、次のサイクル以降においては、応答フラグはONになっているので、応答メッセージを正常に受信するまで、ステップS265〜S269の処理を繰り返し実行することになる。
まず、ポーリング送信を行う(ステップS265)。そして、応答待ち時間内に応答メッセージを受信した場合には(ステップS267、YES)、当該メッセージ交換は完了となり、最後に応答待ちフラグをOFFにして(ステップS269)処理を終了する。
一方、処理中応答を受信した場合(ステップS268,YES)または応答が無いまま応答待ち時間オーバーとなった場合には(ステップS266,YES)そのまま当該処理は終了する。この場合は、未だメッセージ交換は完了していないので、引き続き、次のサイクルにおいてステップS265〜S269の処理を実行することになる。勿論、この場合、送信権要求を行ってトークンを得ることは当然に行っている。
図24(a)は、上記の例における受信側ノードの要求メッセージ受信処理のフローチャート図である。
要求メッセージを受け取ったメッセージ受信ノードは、まず、当該要求が他ノード宛の1対1通信であるか、自ノード宛の1対1通信またはブロードキャストであるかを判定する(ステップS281、S282)。もし、要求メッセージが他ノード宛の1対1通信である場合には(ステップS282,NO)、そのまま当該処理を終了する。一方、自ノード宛の1対1通信またはブロードキャストである場合には、ステップS283の処理に移行する。
ステップS283では、上記処理中フラグがONであるか否かを判定し、ONである場合には(ステップS283,YES)、この要求は受けられないと見做して破棄し、当該受信処理は終了する。
ここで、処理中フラグを使うのは、受信側ノードで要求に対する処理中に、何らかの原因で送信側でトランザクションが中断された為、その後別のトランザクションに移り、新たな要求メッセージが来た場合を検出するためである(本手法では1トランザクション完了するまでは他のトランザクションは発生させないが、送信側で何らかの原因でトランザクションが中断されたならば、話は別である)。処理中フラグがオフならば新たな要求を受付可能だが、処理中フラグがオンならば本来は受付不可能であるので、上記の通り新しい要求メッセージを破棄するが、この例に限らず、処理中の要求を中断・破棄して新たな要求を受け付けるようにしても良い。
処理中フラグがOFFの場合には(ステップS283,NO)、続いて、多重検出処理を実行する(ステップS284)。この多重検出処理は、この例では実施例5の図20(a)の処理を行う。
その後は、処理中フラグをONすると共に応答保持情報をOFFしてから(ステップS285,S286)、所定の受信処理(要求メッセージの解析・実行)を行う(ステップS287)。
処理が終了したら、要求がブロードキャストの場合には(ステップS288,YES)応答メッセージは送信しないので、そのまま処理中フラグをOFFして(ステップS291)当該受信処理は終了する。一方、1対1通信の場合には(ステップS288,NO)、応答メッセージを生成・保持して(ステップS289)、応答保持情報はONしておく(ステップS290)。そして、処理中フラグをOFFして(ステップS291)当該受信処理は終了する。
送信側ノードは、1対1通信の場合、要求メッセージを送信後ポーリングを行うので、図24(a)の処理後だけでなく処理中にもポーリングが送られてくるので、受信側ノードではこのポーリングを受信する毎に図24(b)に示すポーリング受信処理を行う。
図24(b)において、受信側ノードは、まず、受信したポーリングに含まれるTIDを取り出す(ステップS301)。上記の通り、実施例6では、送信側ノードは、要求メッセージだけでなくポーリングにもTIDを格納して送信するからである。
そして、取り出したTIDをテーブル62のTIDと比較して、一致した場合には(ステップS302,YES)、これは先に受け付けた要求メッセージと同じトランザクションによるポーリングであるので、続いて、応答保持情報を参照し、これがONである場合には、既に応答メッセージが作成済みであり送信準備完了していることになるので(ステップS303,YES)、保持されている応答メッセージを送信する(ステップS304)。一方、応答保持情報がOFFの場合には未だ応答メッセージは作成完了されていないことになるので(ステップS303,NO)、「処理中」を返信する(ステップS305)。
一方、TIDが不一致の場合には(ステップS302,NO)、このポーリングは現在処理中または処理完了して応答メッセージを保持しているものに対応する要求メッセージに関するポーリングではないので、このポーリングに対して応答メッセージを返すわけには行かないので、非応答(Nack)を返す(ステップS306)。また、この場合は新たなトランザクションが発生していることになるので、前のトランザクションのポーリングが来ることはないので、応答保持情報をOFFする(ステップS307)。
図25、図26は、上記図22〜図24の処理について具体例を挙げて説明する為の図であり、図25は正常処理、図26はトランザクション異常時の処理を示す。
尚、図25、図26において図中のTKNはメッセージ時間帯でマスタノードから送信側ノードに与えられるトークン、MSGは要求メッセージ、POLはポーリング、Nackは非応答を意味するものであり、また図25、図26はこれらの各フレームとTIDに注目して記述してあり、その他の定周期で交換している制御用データや送信権要求等については省略してある。また、マスタノード、要求メッセージ送信側ノードの動作も省略してあるが、図22、図23に示す通りである。
図25、図26の処理は、一連の連続した処理を示し、最初はマスタノードで管理するTIDは250であったものとする。また、これまでの例と同様、要求メッセージ送信側ノードはノード0、要求メッセージ受信側ノードはノード1であるものとして説明する。
この状態でまず図25の左側に示すように、1対1のメッセージ交換が行われるものとする。この場合、まず、要求メッセージ送信側ノードであるノード0からの送信権要求を受けたマスタノードは、テーブル61のTIDをインクリメント(250→251)してこれをトークンに格納してノード0に送信する。このトークンを受け取ったノード0は、このトークンに含まれるTID(251)を要求メッセージに格納して要求メッセージ受信側ノードであるノード1に送信する。
ノード1は、この要求メッセージを受信するとそこからTID (251)を取り出してテーブル62のTID(250)と比較する。この場合、TIDが不一致なので新しいメッセージと判定しテーブル62のTIDを更新(251)する。尚、その前に、図示の例では処理中フラグがオフなので要求受付可能と判定し、要求メッセージを内部に取り込んでいる。そして、処理中フラグをオン、応答保持情報をオフして、上記新規メッセージの解析・実行を開始する。
ノード0は、要求メッセ−ジ送信後は、応答メッセージを受け取るまで繰り返しポーリングを送信する。このポーリングにはトークンから得たTID(251)が格納されており、ノード1はポーリングを受信する毎にそこからTID(251)を取り出してテーブル62のTID(251)と比較する。この場合、TIDが一致するので上記受け付けた要求メッセージと同じトランザクションのポーリングであると判定する。そして、ここでは、応答保持情報がオフなので、「処理中」をノード1に返す。
その後、ノード1は、上記受け付けた要求に対する処理が終了すると、応答メッセージを準備して応答保持情報をオンするとともに処理中フラグをオフする。
この状態で、再び、ノード0がTID(251)を格納したポーリングを送信すると、ノード1は受信したポーリングからTID(251)を取り出してテーブル62のTID(251)と比較する。この場合もTIDが一致するので上記と同様の判定を行う。そして、今回は上記の通り、応答保持情報がオンなので、保持しておいた応答メッセージをノード1に返す。尚、応答メッセージの送信に伴って応答保持情報はオフすることはしない。その理由は図26で説明する。
以上のように1対1メッセージの基本プロトコルは行われる。
続いて、図25の図上中央付近に示すように、ノード0からブロードキャストが行われたとする。ブロードキャストは確認応答(ACK)をとれないので、通常は複数回(図の例では3回)同じ要求メッセージを送信して信頼性を上げている。
ノード0からの送信権要求を受けたマスタノードは、テーブル61のTIDをインクリメント(251→252)してそれをトークンに格納してノード0に送信する。このトークンを受け取ったノード0はそのTID(252)を要求メッセージに格納してブロードキャスト送信する。受信側としてはここではノード1についてのみ説明する。ノード1は受信した要求メッセージからTID (252)を取り出してテーブル62のTID(251)と比較する。この場合、TIDが不一致なので新しいメッセージと判定する。尚、その前に、処理中フラグがオフなので要求受付可能と判定し、要求メッセージを内部に取り込む処理を行っている。そして、受信TIDを更新(252)すると共に、処理中フラグをON、応答保持情報をOFFしてから、要求メッセージの解析・実行処理を開始する。
ノード0はその後にTID(252)を格納した要求メッセージを再送信する(上記3回のうちの2回目)。ノード1はこの要求メッセージを受信するとそこからTID(252)を取り出して記憶していた受信TID(252)と比較する。この場合、TIDが一致するのでメッセージの再送信だと判定してそれを破棄する。
ノード0はその後にTID(252)を格納した要求メッセージを再々送信する(上記3回のうちの3回目)。ノード1はこの要求メッセ−ジを受信するとそこからTID(252)を取り出して記憶していた受信TID(252)と比較する。この場合もTIDが一致するので要求メッセージの再送信だと判定してそれを破棄する。その後、ノード1は、上記受け付けていた要求の処理が終了すると、処理中フラグをオフする。尚、ブロードキャストの場合は、応答メッセージは送信しないので、応答メッセージ作成や応答保持情報をONする処理は行わない。
以上のようにブロードキャストの三重送信の基本プロトコルは行われる。
続いて、図25の図上右側には、マスタノードが上記ノード0以外の別のノードから送信権要求を受けた場合を示す。
別のノードからの送信権要求を受けたマスタノードは、テーブル61のTIDをインクリメント(252→253)してそれをトークンに格納して要求元ノード送信する。ノード1はこのトークンを受信するとそこからTID (253)を取り出してテーブル62のTID(252)と比較する。この場合、TIDが不一致なので、テーブル62のTIDを初期化(0)する。尚、これは上記4つの方法の1つを例にしただけであり、4つの方法のうちのどれを用いても良い。
図26には、ノイズ等でフレームが消失してトランザクション異常が発生した場合の動作を示す。
図26の左側には、再びノード0がノード1に対して1対1要求メッセージを送信し、この要求に対する応答メッセージが途中で消失した場合の動作例を示す。
この例において最初の応答メッセージを送信するまでは、図25の1対1メッセージで説明した通りであり(ただし、テーブル62のTIDは初期化(0)されているので、多重判定処理は必ず不一致となる)、ここでの説明は省略する。
そして、応答メッセージがノイズ等何らかの原因で途中で消失した為、ノード0は、応答メッセージが来ないので、リトライとして再びTID(254)を格納したポーリングを送信する。ノード1はこのポーリングを受信するとそこからTID(254)を取り出してテーブル62のTID(254)と比較する。この場合TIDが一致するので、メッセージと同じトランザクションのポーリングだと判定する。そして応答保持情報がオンなので、応答メッセージをノード0に再送信する。
応答メッセージ送信に伴って応答保持情報をオフしていないのは、このようなポーリングのリトライに対応するためである。
図26の図上右側には、要求メッセージが消失して、ノード1にいきなりポーリングが来た例を示す。
この例において、ノード0からの送信権要求を受けたマスタノードは、テーブル61のTIDをインクリメント(254→255)してそれをトークンに格納してノード0に送信する。トークンを受け取ったノード0はそのTID(255)を要求メッセージに格納してノード1に送信する。しかしこの例では途中でこの要求メッセージは消失してノード1には届かなかった。要求メッセ−ジが届かないのでノード1のテーブル62のTIDは254のままである。
しかしながら、本例では上記の通りACKは返信されないので、ノード0は、要求メッセージが届いていなくても、続いてTID(255)を格納したポーリングを送信することになる。
この場合、ノード1はこのポーリングを受信するとそこからTID(255)を取り出してテーブル62のTID(254)と比較する。すると、TIDが不一致となるので、前の要求メッセージと違うトランザクションによるポーリングだと判定する。よって、このポーリングに前の要求メッセージに対する応答メッセージを返すわけには行かないので、非応答(Nack)を返す。また、応答保持情報をオフする。
以上説明したように、本発明によれば、小さいTID管理テーブルで問題なく多重受信を判別できる。すなわち、従来より、ノイズ等でACKが消失した為に多重にメッセージを送ったり、ブロードキャストで多重に送信しても、要求メッセージに格納されるTIDとTID管理テーブルとで整合性を取り多重受信を判別することで、同じ処理を多重に実行することがなくなるようにしていたが、本発明ではTID管理テーブルを非常に小さくすることができるようになる。
例えば、従来ではノード数の3倍も記憶しておかなくてはならなかったTID管理テーブルを、本例では最小の場合、送信側と受信側でTIDを1つずつ記憶すれば良くなるので、リソースが少ないワンチップマイコンが良く使われている機器組込み用途にも使える。もし別置のRAMが不要になれば安価なネットワークを構築することができる。例えば、ノード数が64の場合、193バイト記憶する必要があったのがわずか2バイトに減り、191バイトの削減になる。
また、受信側ノードでは要求メッセージを一時的にバッファに格納して処理を行っているが、従来では、受信した要求メッセージに関する処理を行っている最中に別の要求メッセージを受信する可能性がある為、1つのバッファしか用意していない場合、前の要求メッセージが未だ処理中に新しい要求メッセージをバッファに上書きしてしまう。これを避ける為に、従来では、このバッファを複数(例えば3個)用意していた。
一方、本発明では、要求と応答までの1トランザクションが完了するまで他のトランザクションは発生しないので、受信した要求メッセージ処理を行っている最中に別の要求メッセージを受信することは無くなるので(但し、送信側でトランザクションが中断される場合は除く)、上記バッファは1個で済むようになる。例えば、1要求メッセージが256バイトであり、従来ではバッファを3個用意していたが、本発明では1個だけでよくなり、512バイト削減できる。これは、RAMが数kバイトしかないワンチップマイコンから見ると大きな節約になるので、TID管理テーブルの削除だけでは別置RAMを削除できない場合でも、この512バイト削減で別置RAMを削除できる可能性が増える。
また、本発明によれば、上記特徴に加えて更に、データ交換の定周期性を守りながらメッセージの交換を行うことができる。これは、例えば機器間で定周期に行う制御データ交換の他に支援メッセージを交換する場合に、その要求メッセージに対する応答処理の処理時間に関係なく定周期性を守ることができ、例えば、EEPROM書き込みのような時間のかかる処理をメッセージで送信しても、要求メッセージとポーリングの間やポーリング同士の間に制御データの交換を行って定周期性が守られるので、定周期性が乱れたことを原因とする異常が発生しない。
例えば支援系からのプログラムダウンロードでEEPROMへの書き込みが100m秒かかるとしても、それを複数サイクルに渡って処理を行うことができるので、定周期データ交換を50m秒で行うことは可能である。1サイクル目の要求メッセージで受信側が処理を開始し、2サイクル目のポーリングに処理中応答が返り、3サイクル目のポーリングにも処理中応答が返り、4サイクル目のポーリングに応答メッセージが返る。このように、時間のかかる処理があっても、早いサイクルで制御データの交換を定周期性を守りながら行うことができる。
また、1対1通信の場合にもACKを返信しないようにした場合、新たなトランザクションに対応するポーリング(但し、その要求メッセージは途中消失した)に対して前のトランザクションの応答メッセージを誤って送ってしまったりする可能性があったが、ポーリングにもTIDを格納することでこの様な事態を回避できるし、更に要求メッセージが途中消失していることを認識してNackを返信することで送信側に知らせることもできる。
例えば、モータやスイッチの近くなどノイズ発生源の近くにネットワークを敷設してフレーム消失やリトライが多発しても、要求と応答メッセージの整合性がとれているので安全に通信をすることができる。
また、通常の環境でも、応答確認をとらないブロードキャストメッセージは受信側への到達を確認できないものである。しかし、本方式では初送と再送の区別ができて受信側で多重受信分を破棄できるので、送信側が多重に送信することにより到達確率の向上を安全に行うことができる。
本例によるシステム全体の概略構成図を示す。 図1に示す各ノードのハードウェア構成図である。 本例のシステムにおけるメッセージ交換のプロトコルの一例を示す図である。 マスタノードの基本処理フローチャート図である。 送信側ノードの基本処理フローチャート図であり、(a)は制御時間帯、(b)はメッセージ時間帯における処理を示す。 受信側ノードの基本処理フローチャート図であり、(a)は要求メッセージ受信時の処理、(b)はポーリング受信時の処理を示す。 送信側ノードのTID生成処理(実施例1)のフローチャート図である。 受信側ノードの多重検出処理(実施例1)のフローチャート図である。 (a)は送信側、(b)は受信側のTID管理テーブルである(実施例1)。 送信側ノードのTID生成処理(実施例2)のフローチャート図である。 受信側ノードの多重検出処理(実施例2)のフローチャート図である。 (a)は送信側、(b)は受信側のTID管理テーブルである(実施例2)。 送信側ノードのTID生成処理(実施例3)のフローチャート図である。 実施例3における受信側ノードの処理フローチャート図であって(a)は多重検出処理、(b)は他ノード宛メッセージ受信時の処理を示す。 (a)は送信側、(b)は受信側のTID管理テーブルである(実施例3)。 送信側ノードのTID生成処理(実施例4)のフローチャート図である。 実施例4における受信側ノードの処理フローチャート図であって(a)は多重検出処理、(b)は他ノード宛メッセージ受信時の処理を示す。 (a)は送信側、(b)は受信側のTID管理テーブルである(実施例4)。 実施例5における処理であって、(a)はマスタノードによるTID生成処理、(b)は送信側ノードによるTID抽出処理を示すフローチャート図である。 受信側ノードの処理フローチャート図(実施例5)であって、(a)は多重検出処理、(b)はTID強制変更処理を示す。 (a)は送信側、(b)は受信側のTID管理テーブルである(実施例5)。 実施例6におけるマスタノードの処理フローチャート図である。 実施例6における送信側ノードの処理フローチャート図である。 実施例6における受信側ノードの処理フローチャート図であって、(a)は要求メッセージ受信時の処理、(b)はポーリング受信時の処理を示す。 図22〜図24の処理について具体例(正常時)を示して説明する為の図である。 図22〜図24の処理について具体例(トランザクション異常時)を示して説明する為の図である。 (a)は送信側、(b)は受信側のTID管理テーブルである(従来例)。 送信側ノードのTID生成処理(従来例)のフローチャート図である。 受信側ノードの多重検出処理(従来例)のフローチャート図である。
符号の説明
0,1,2 ノード
3 マスタノード
4 バス型ネットワーク
10 ノード
11 CPU
12 プログラムメモリ部
13 メモリ部
13a データメモリ部
13b 送信バッファ
13c 受信バッファ
14 タイマ
15 伝送制御部
21 送信側TID管理テーブル(1対1用)(実施例1)
22 送信側TID管理テーブル(ブロードキャスト用)(実施例1)
23 受信側TID管理テーブル(1対1用)(実施例1)
24 受信側TID管理テーブル(ブロードキャスト用)(実施例1)
31 送信側TID管理テーブル(1対1用)(実施例2)
32 送信側TID管理テーブル(ブロードキャスト用)(実施例2)
33 受信側TID管理テーブル(1対1とブロードキャスト共用)(実施例2)
41 送信側TID管理テーブル(1対1とブロードキャスト共用)(実施例3)
42 受信側TID管理テーブル(1対1とブロードキャスト共用)(実施例3)
51 送信側TID管理テーブル(1対1とブロードキャスト共用)(実施例4)
52 受信側TID管理テーブル(1対1とブロードキャスト共用)(実施例4)
61 送信側TID管理テーブル(1対1とブロードキャスト共用)(実施例5)
62 受信側TID管理テーブル(1対1とブロードキャスト共用)(実施例5)

Claims (22)

  1. 複数のノードがネットワークを介して互いにデータ交換するシステムにおけるメッセージ交換管理方法であって、
    前記データ交換の為の通信サイクルを、前記制御データ交換の為の制御データ交換用時間帯とメッセージ交換の為のメッセージ交換用時間帯に分け、
    該メッセージ交換用時間帯におけるメッセージ交換処理は、要求から応答までを1トランザクションとし、
    システム全体の送信権管理をするマスタノードを備え、
    該マスタノードは、メッセージ送信の為の送信権要求を出したノードにトークンを与え、
    前記マスタノードからトークンを得たメッセージ送信側ノードは、複数サイクルに渡ってメッセージ交換用時間帯において任意のメッセージ受信側ノードに要求メッセージを送信すると共に該要求に対する応答を得るまでポーリングを繰り返し、
    前記マスタノードは前記メッセージ送信側ノードが応答を得るまで他のノードにトークンを与えないようにすることを特徴とするメッセージ交換管理方法。
  2. 前記メッセージ送信側ノードは、最初のサイクルで前記要求メッセージの送信を行い、2番目以降のサイクルでポーリングを繰り返し行う際には、各サイクル毎に、そのメッセージ交換用時間帯内に応答が得られない場合にはポーリングを一時中断し、次のサイクルのメッセージ交換用時間帯に入ったらポーリングを再開することで、制御データ交換の定周期性を保証することを特徴とする請求項1記載のメッセージ交換管理方法。
  3. 前記メッセージ送信側ノードでは、トランザクション番号を宛先ノード毎に管理して、新規メッセージ送信毎にその宛先に対応するトランザクション番号を更新して、該更新後のトランザクション番号と送信元ノード番号を前記要求メッセージに格納して送信し、
    前記メッセージ受信側ノードでは、前回受信した要求メッセージの送信元ノード番号とトランザクション番号を記憶しておき、受信した要求メッセージの送信元ノード番号とトランザクション番号の両方が前記記憶した番号と一致する場合にはメッセージの多重受信と判定することを特徴とする請求項1又は2記載のメッセージ交換管理方法。
  4. 前記メッセージ送信側ノードでは、トランザクション番号を宛先ノード毎に管理して、新規メッセージ送信毎にその宛先に対応するトランザクション番号を更新して、該更新後のトランザクション番号と送信元ノード番号を前記要求メッセージに格納して送信し、
    メッセージ受信側ノードでは、前記前回受信したメッセージの送信元ノード番号とトランザクション番号を記憶すると共に該メッセージがブロードキャストメッセージであるか1対1メッセージであるかを示す判別フラグを記憶しておき、
    今回受信したメッセージがブロードキャストメッセージであるか1対1メッセージであるかを判定し、該判定結果と該今回受信したメッセージの送信元ノード番号とトランザクション番号とを、前記記憶しておいた値とそれぞれ比較し、全て一致する場合にはメッセージの多重受信と判定することを特徴とする請求項1又は2記載のメッセージ交換管理方法。
  5. 前記メッセージ受信側ノードは、
    他ノード宛のメッセージを監視することで新たなトランザクションに移行したことを認識すると該トランザクション移行を示す情報を記憶することを特徴とする請求項1又は2記載のメッセージ交換管理方法。
  6. 前記メッセージ送信側ノードは、宛先ノード毎に区別することなく1対1通信とブロードキャスト共用でトランザクション番号を管理して、新規メッセージ送信毎に該トランザクション番号を更新して、該更新後のトランザクション番号と送信元ノード番号をメッセージに格納して送信し、
    メッセージ受信側ノードでは、前回受信したメッセージの送信元ノード番号とトランザクション番号を1対1通信とブロードキャスト共用で記憶しておき、受信したメッセージの送信元ノード番号とトランザクション番号の両方が前記記憶した番号と一致する場合にはメッセージの多重受信と判定することを特徴とする請求項5記載のメッセージ交換管理方法。
  7. 前記マスタノードは、前記トランザクション番号を一元管理して、新規トランザクションによる送信権要求に応じてトークンを与える場合には該トランザクション番号を更新して、該更新後のトランザクション番号をトークンに格納して送信し、
    前記メッセージ送信側ノードは、受信したトークンから前記トランザクション番号を取り出して、該トランザクション番号を前記要求メッセージに格納して送信し、
    前記メッセージ受信側ノードは、前回受信した要求メッセージに含まれていたトランザクション番号を1対1通信とブロードキャスト共用で記憶しておき、今回受信した要求メッセージに含まれるトランザクション番号を前記記憶しておいた値と比較し、一致する場合にはメッセージの多重受信と判定し、次のトランザクションへ移行したことを認識すると、トランザクション移行を示す情報を記憶することを特徴とする請求項1又は2記載のメッセージ交換管理方法。
  8. 前記次のトランザクションへ移行したことを認識するとトランザクション移行を示す情報を記憶するステップは、
    (1)他ノード宛のメッセージを検出すると、その中のトランザクション番号を取り出して、記憶しておいたトランザクション番号に上書きする
    (2)他ノード宛のメッセージを検出すると、記憶しておいたトランザクション番号を初期化する
    (3)トークンを検出すると、その中のトランザクション番号を取り出して、記憶しておいたトランザクション番号と比較して、不一致ならば記憶しておいたトランザクション番号を初期化する
    (4)他ノード宛のトークンを検出すると、記憶しておいたトランザクション番号を初期化する
    の何れかを用いるものであることを特徴とする請求項7記載のメッセージ交換管理方法。
  9. 前記メッセージ受信側ノードは、
    応答保持情報を保持しており、
    前記多重受信か否かの判定において、多重受信ではないと判定した場合には、前記受信した要求メッセージを受け入れて該要求に応じた処理を開始すると共に前記応答保持情報をクリアし、
    前記要求に応じた処理が完了して応答メッセージの準備ができた場合には前記応答保持情報をセットし、
    前記各ポーリング受信毎に前記応答保持情報を参照し、応答保持情報がリセットされている場合には「処理中」応答を返し、応答保持情報がセットされている場合には前記応答メッセージを返すことを特徴とする請求項3〜8の何れかに記載のメッセージ交換管理方法。
  10. 前記メッセージ受信側ノードは、
    処理中フラグを有し、
    前記多重受信ではないと判定した場合において前記要求に応じた処理を開始するときに前記処理中フラグをオンし、該処理が完了したときに該処理中フラグをオフし、
    要求メッセージを受信したときに前記処理中フラグがオン状態である場合には、該処理中の処理を要求したトラザクションが中断したと見なすことを特徴とする請求項3〜9の何れかに記載のメッセージ交換管理方法。
  11. 前記メッセージ受信側ノードは、前記要求メッセージを受信してもACK返信処理は行わず、
    前記メッセージ送信側ノードは前記各ポーリング送信の際にも該ポーリングに前記トランザクション番号と送信元ノード番号を格納して送信し、
    前記メッセージ受信側ノードは、ポーリングを受信すると、該ポーリングに含まれるトランザクション番号と送信元ノード番号を前記記憶してある値と比較して、不一致である場合には新規要求メッセージの消失と判定して非応答を返信することを特徴とする請求項3〜10の何れかに記載のメッセージ交換管理方法。
  12. 複数のノードがネットワークを介して互いにデータ交換するネットワークシステムにおいて、
    前記データ交換の為の通信サイクルを、前記制御データ交換の為の制御データ交換用時間帯とメッセージ交換の為のメッセージ交換用時間帯に分け、該メッセージ交換用時間帯におけるメッセージ交換処理は、要求から応答までを1トランザクションとし、
    システム全体の送信権管理をするマスタノードを備え、
    該マスタノードは、メッセージ送信の為の送信権要求を出したノードにトークンを与え、一旦トークンを与えたノードが前記トランザクションを完了するまで他のノードにトークンを与えないようにする送信権管理手段を有することを特徴とするネットワークシステム。
  13. 前記マスタノードからトークンを得たノードであるメッセージ送信側ノードは、
    複数サイクルに渡ってメッセージ交換用時間帯において任意のメッセージ受信側ノードに要求メッセージを送信すると共に該要求に対する応答を得るまでポーリングを繰り返し、最初のサイクルで前記要求メッセージの送信を行い、2番目以降のサイクルでポーリングを繰り返し行う際には、各サイクル毎に、そのメッセージ交換用時間帯内に応答が得られない場合にはポーリングを一時中断し、次のサイクルのメッセージ交換用時間帯に入ったらポーリングを再開することで制御データ交換の定周期性を保証するメッセージ送信制御手段を有することを特徴とする請求項12記載のネットワークシステム。
  14. 前記メッセージ受信側ノードは、
    1対1通信、ブロードキャスト各々に対応して、前回受信した要求メッセージの送信元ノード番号とトランザクション番号を記憶する第1の受信側TID管理テーブルを有し、
    該第1の受信側TID管理テーブルを用いて多重受信を判定する第1の多重受信判定手段を有することを特徴とする請求項13記載のネットワークシステム。
  15. 前記メッセージ受信側ノードは、
    前回受信した要求メッセージの送信元ノード番号とトランザクション番号を記憶すると共に該要求メッセージがブロードキャストメッセージであるか1対1メッセージであるかを示す判別フラグを記憶する第2の受信側TID管理テーブルを有し、、
    該第2の受信側TID管理テーブルを用いて多重受信を判定する第2の多重受信判定手段を有することを特徴とする請求項13記載のネットワークシステム。
  16. 前記メッセージ受信側ノードは、
    他ノード宛のメッセージを監視することで新たなトランザクションに移行したことを認識すると該トランザクション移行を示す情報を記憶するトランザクション移行監視手段を有することを特徴とする請求項13記載のネットワークシステム。
  17. 前記メッセージ送信側ノードは、宛先ノード毎に区別することなく1対1通信とブロードキャスト共用でトランザクション番号を管理する第1の送信側TID管理テーブルを有し、
    前記メッセージ受信側ノードは、1対1通信とブロードキャスト共用で前回受信した要求メッセージの送信元ノード番号とトランザクション番号を記憶する第3の受信側TID管理テーブルと、該第3の受信側TID管理テーブルを用いて多重受信を判定する第3の多重受信判定手段を有することを特徴とする請求項16記載のネットワークシステム。
  18. 前記マスタノードは、前記トランザクション番号を一元管理して、新規トランザクションによる送信権要求に応じてトークンを与える場合には該トランザクション番号を更新して、該更新後のトランザクション番号をトークンに格納するトランザクション番号管理手段を更に有し、
    前記メッセージ送信側ノードのメッセージ送信制御手段は、受信したトークンから前記トランザクション番号を取り出して、該トランザクション番号を前記要求メッセージに格納して送信し、
    前記メッセージ受信側ノードは、1対1通信とブロードキャスト共用で前回受信した要求メッセージのトランザクション番号を記憶する第4の受信側TID管理テーブルと、該第4の受信側TID管理テーブルを用いて多重受信を判定する第4の多重受信判定手段を有することを特徴とする請求項13記載のネットワークシステム。
  19. 複数のノードがネットワークを介して互いにデータ交換するネットワークシステムにおけるシステム全体の送信権管理をするマスタノードにおいて、
    メッセージ送信の為の送信権要求を出したノードにトークンを与え、一旦トークンを与えたノードが前記トランザクションを完了するまで他のノードにトークンを与えないようにする送信権管理手段を有し、
    前記データ交換の為の通信サイクルを、前記制御データ交換の為の制御データ交換用時間帯とメッセージ交換の為のメッセージ交換用時間帯に分け、該メッセージ交換用時間帯におけるメッセージ交換処理は、要求から応答までを1トランザクションとすることを特徴とするマスタノード。
  20. 複数のノードがネットワークを介して互いにデータ交換するネットワークシステムにおける前記各ノードにおいて、
    前記データ交換の為の通信サイクルを、前記制御データ交換の為の制御データ交換用時間帯とメッセージ交換の為のメッセージ交換用時間帯に分け、該メッセージ交換用時間帯におけるメッセージ交換処理は、要求から応答までを1トランザクションとし、複数サイクルに渡ってメッセージ交換用時間帯において任意のメッセージ受信側ノードに要求メッセージを送信すると共に該要求に対する応答を得るまで各サイクル毎にそのメッセージ交換用時間帯内でポーリングを繰り返すメッセージ送信制御手段を有することを特徴とするノード。
  21. 複数のノードがネットワークを介して互いにデータ交換するネットワークシステムにおけるシステム全体の送信権管理をするマスタノードのコンピュータに、
    メッセージ送信の為の送信権要求を出したノードにトークンを与え、一旦トークンを与えたノードが前記トランザクションを完了するまで他のノードにトークンを与えないようにする機能
    を実現させる為のプログラム。
  22. 複数のノードがネットワークを介して互いにデータ交換するネットワークシステムにおける前記各ノードのコンピュータに、
    前記データ交換の為の通信サイクルを、前記制御データ交換の為の制御データ交換用時間帯とメッセージ交換の為のメッセージ交換用時間帯に分け、該メッセージ交換用時間帯におけるメッセージ交換処理は、要求から応答までを1トランザクションとし、複数サイクルに渡ってメッセージ交換用時間帯において任意のメッセージ受信側ノードに要求メッセージを送信すると共に該要求に対する応答を得るまで各サイクル毎にそのメッセージ交換用時間帯内でポーリングを繰り返す機能
    を実現させる為のプログラム。

JP2003398247A 2003-11-27 2003-11-27 メッセージ交換管理方法、ネットワークシステム、そのマスタノード、ノード、プログラム Expired - Lifetime JP4269911B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003398247A JP4269911B2 (ja) 2003-11-27 2003-11-27 メッセージ交換管理方法、ネットワークシステム、そのマスタノード、ノード、プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003398247A JP4269911B2 (ja) 2003-11-27 2003-11-27 メッセージ交換管理方法、ネットワークシステム、そのマスタノード、ノード、プログラム

Publications (2)

Publication Number Publication Date
JP2005159920A true JP2005159920A (ja) 2005-06-16
JP4269911B2 JP4269911B2 (ja) 2009-05-27

Family

ID=34723147

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003398247A Expired - Lifetime JP4269911B2 (ja) 2003-11-27 2003-11-27 メッセージ交換管理方法、ネットワークシステム、そのマスタノード、ノード、プログラム

Country Status (1)

Country Link
JP (1) JP4269911B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010073352A1 (ja) * 2008-12-25 2010-07-01 三菱電機株式会社 データ通信システムおよびデータ通信装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010073352A1 (ja) * 2008-12-25 2010-07-01 三菱電機株式会社 データ通信システムおよびデータ通信装置
US8725827B2 (en) 2008-12-25 2014-05-13 Mitsubishi Electric Corporation Data communication system and data communication apparatus in a token passing system with improved recovery

Also Published As

Publication number Publication date
JP4269911B2 (ja) 2009-05-27

Similar Documents

Publication Publication Date Title
US5357525A (en) Multiplex transmission system
US6681139B1 (en) Distributed control system and filtering method used in the distributed control system
US8780772B2 (en) Communication protocol for wireless enhanced controller area networks
JP2010258990A (ja) 制御システム及び制御プログラム更新方法
JP2010272971A (ja) 制御システム及び制御プログラム書換方法
CN110447020B (zh) 通信装置、通信方法、程序和通信系统
CN110945491B (zh) 通信设备、通信方法、程序和通信系统
CN110945490B (zh) 通信设备、通信方法、程序和通信系统
JPH0654911B2 (ja) マスターシップを転送する方法および装置
JP4269911B2 (ja) メッセージ交換管理方法、ネットワークシステム、そのマスタノード、ノード、プログラム
CN113965494A (zh) 用于冗余进程网络中的故障检测和角色选择的方法
JP6527647B1 (ja) 不正検知方法、不正検知装置及びプログラム
JP2007195040A (ja) ノードの異常判定方法
CN113722770B (zh) 基于分级的数据完整性的端到端的保护方法及系统
JP2020506482A (ja) コヒーレント相互接続システムにおける読み取りトランザクショントラッカーのライフタイム
WO2006030697A1 (ja) 通信装置、通信制御方法、通信制御プログラム及び通信制御プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2013106097A (ja) 応答確認装置、応答確認方法、およびプログラム
JP7172217B2 (ja) セキュアエレメント、通信方法、通信プログラム及び通信システム
JPH1117713A (ja) マルチキャスト通信処理方式
CN113791804A (zh) 多路仪器并行升级的方法、装置、计算机设备及存储介质
JPS63246055A (ja) パケツト送受信装置
CN112286657A (zh) 电子设备和中断处理方法
JP2681273B2 (ja) 再送表示設定制御装置
JPS6076840A (ja) 状態変化情報伝送方式
JPS63267039A (ja) ネツトワ−クシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060810

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20080919

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20080919

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080919

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20081023

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081229

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090203

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090216

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120306

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4269911

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120306

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120306

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120306

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130306

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130306

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140306

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term