(57)【要約】【課題】ＩＥＥＥ１３９４のインターフェースを使ってデータ通信を行う場合に、ノードユニークＩＤを用いて見通しの良いプログラムが作成できると共に、システムの破綻が起こらないようにする。【解決手段】バスリセットが発生する毎に、バスジェネレーションの値を更新すると共に、新たなノードＩＤとノードユニークＩＤとの関係を調べ、世代毎のノードＩＤとノードユニークＩＤとの対応表を更新する。アシクロノスパケットの送受信時に、ノードＩＤとバスジェネレーションとから、世代別ノードＩＤを構成し、世代別ノードＩＤを使って、ノードＩＤからノードユニークＩＤへの変換処理を行う。世代別ノードＩＤを使えば、バスリセットが発生しても、システムの破綻が生じない。アプリケーションソフトウェア側では、ノードユニークＩＤを用いて見通しの良いプログラムが作成できる。【選択図】        図２
2004336188.tif 000002
【特許請求の範囲】
【請求項１】
ノード固有のノードユニークＩＤと、バスリセットが発生する毎に更新されるノードＩＤとを使ってデータ通信が行えるバスのデータ通信装置であって、
上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表を有する変換手段と、
バスリセットが発生する毎にその値が更新され、バスのジェネレーションを示す値を発生するバスジェネレーション発生手段と
パケットを受信する際に、上記受信したパケットのノードＩＤに、上記バスジェネレーション発生手段からのバスジェネレーション値を組み合わせて世代別ノードＩＤを形成し、上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表により、上記世代別ノードＩＤに対応するノードユニークＩＤを求める手段と、
パケットを送信する際に、上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表により、上記送信するパケットのノードユニークＩＤを、上記バスジェネレーションと組み合わせた世代別ノードＩＤに変換し、上記バスジェネレーション発生手段により示されるそのときのバスジェネレーションとの比較を行い、バスジェネレーションが合致する場合のみ送信を許可するようにする手段と、
バスリセットの発生を検出し、上記バスリセットが発生する毎に、上記バスジェネレーション発生手段の値を更新すると共に、新たなノードＩＤとノードユニークＩＤとの関係を調べ、上記新たなノードＩＤとノードユニークＩＤとの関係に基づいて、新たなバスジェネレーションのノードＩＤとノードユニークＩＤとの対応表を更新する手段と
を備えるようにしたデータ通信装置。
【請求項２】
上記ノード固有のノードユニークＩＤと、バスリセットが発生する毎に更新されるノードＩＤとを使ってデータ通信が行えるバスは、ＩＥＥＥ１３９４のアシンクロノス通信を行うバスである請求項１に記載のデータ通信装置。
【請求項３】
上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表には、この表が使用中かどうかを示す情報を含むようにした請求項１に記載のデータ通信装置。
【請求項４】
上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表には、ノードの合計を示す情報を含むようにした請求項１に記載のデータ通信装置。
【請求項５】
上記バスジェネレーション発生手段は、バスリセットが発生する毎にその値がインクリメントされるカウンタからなる請求項１に記載のデータ通信装置。
【請求項６】
上記新たなノードＩＤとノードユニークＩＤとの関係は、自分自身のノードユニークＩＤを送り返すようなリクエストパケットを各ノードＩＤに送って調べるようにした請求項１に記載のデータ通信装置。
【請求項７】
ノード固有のノードユニークＩＤと、バスリセットが発生する毎に更新されるノードＩＤとを使ってデータ通信が行えるバスのデータ通信方法であって、
上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表を作成しておき、
バスリセットが発生する毎に、バスのジェネレーションを示す値を発生し、
パケットを受信する際に、上記受信したパケットのノードＩＤに、上記バスジェネレーション値を組み合わせて世代別ノードＩＤを形成し、上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表により、上記世代別ノードＩＤに対応するノードユニークＩＤを求め、
パケットを送信する際に、上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表により、上記送信するパケットのノードユニークＩＤを、上記バスジェネレーションと組み合わせた世代別ノードＩＤに変換し、そのときの上記バスジェネレーションとの比較を行い、バスジェネレーションが合致する場合のみ送信を許可するようにし、
バスリセットの発生を検出し、上記バスリセットが発生する毎に、上記バスジェネレーションの値を更新すると共に、新たなノードＩＤとノードユニークＩＤとの関係を調べ、上記新たなノードＩＤとノードユニークＩＤとの関係に基づいて、新たなバスジェネレーションのノードＩＤとノードユニークＩＤとの対応表を更新する
ようにしたデータ通信方法。
【請求項８】
上記ノード固有のノードユニークＩＤと、バスリセットが発生する毎に更新されるノードＩＤとを使ってデータ通信が行えるバスは、ＩＥＥＥ１３９４のアシンクロノス通信を行うバスである請求項７に記載のデータ通信方法。
【請求項９】
上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表には、この表が使用中かどうかを示す情報を含むようにした請求項７に記載のデータ通信方法。
【請求項１０】
上記ノードＩＤと上記ノードユニークＩＤとの関係をジェネレーション毎に示す対応表には、ノードの合計を示す情報を含むようにした請求項７に記載のデータ通信方法。
【請求項１１】
上記バスジェネレーションは、バスリセットが発生する毎にその値がインクリメントされる請求項７に記載のデータ通信方法。
【請求項１２】
上記新たなノードＩＤとノードユニークＩＤとの関係は、自分自身のノードユニークＩＤを送り返すようなリクエストパケットを各ノードＩＤに送って調べるようにした請求項７に記載のデータ通信方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、例えばＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ）１３９４を使ってデータ通信を行うためのデータ通信装置及びデータ通信方法に関するもので、特に、アプリケーション側ではノードユニークＩＤに統一して処理が行えるようにすると共に、バスリセットが発生しても、システムに破綻が生じないようにしたものに係わる。
【０００２】
【従来の技術】
マルチメディア化に対応してパーソナルコンピュータと各種民生機器間を繋ぐインターフェースとしてＩＥＥＥ１３９４と称されるシリアルインターフェースが使われている。ＩＥＥＥ１３９４は、アイソクロノス（等時）転送と、アシンクロノス（非同期）転送とがサポートされている。アイソクロノス転送は、ＡＶ（Ａｕｄｉｏ  Ｖｉｓｕａｌ）データ等をリアルタイムで転送するのに用いられる。アシンクロノス転送は、コマンド等を転送するのに用いられる。
【０００３】
ＩＥＥＥ１３９４ノード（以下ノード）は２種類のＩＤを持つ。一つはノードユニークＩＤである。ノードユニークＩＤは、すべてのノードの中から一意にあるノードを識別することができるＩＤであり、別の言い方をすると時間的、空間的に一意なＩＤである。
【０００４】
もう一つはノードＩＤである。これは一つのＩＥＥＥ１３９４ネットワーク内で一意でバスリセットが起こるたびに変化する可能性があるＩＤである。バスリセットが発生すると、各ノードに、ノードＩＤが割り振られる。ノードＩＤは、時間的にはあるバスリセットから次のバスリセットの間で一意、空間的にはＩＥＥＥ１３９４ネットワークで一意といえる。
【０００５】
すなわち、図５Ａに示すように、機器１０１と、機器１０２と、機器１０３と、機器１０４とがＩＥＥＥ１３９４のネットワーク中にあるとする。この例では、機器１０１のノードユニークＩＤは（ＮＵＩＤ＝Ａ）であり、機器１０２のノードユニークＩＤは（ＮＵＩＤ＝Ｂ）であり、機器１０３のノードユニークＩＤは（ＮＵＩＤ＝Ｃ）であり、機器１０４のノードユニークＩＤは（ＮＵＩＤ＝Ｄ）である。そして、各ノードには、「０」から「６３」までのノードＩＤが割り振られる。この例では、機器１０１のノードＩＤは（ＮＩＤ＝０）に割り振られ、機器１０２のノードＩＤは（ＮＵＩＤ＝１）に割り振られ、機器１０３のノードＩＤは（ＮＵＩＤ＝２）に割り振られ、機器１０４のノードＩＤは（ＮＵＩＤ＝３）に割り振られている。
【０００６】
バスリセットが発生すると、ノードＩＤが新たに割り振られる。バスリセットが発生すると、例えば、図５Ｂに示すように、機器１０１のノードＩＤが（ＮＩＤ＝２）に付け替えられ、機器１０２のノードＩＤが（ＮＵＩＤ＝３）に付け替えられ、機器１０３のノードＩＤが（ＮＵＩＤ＝０）に付け替えられ、機器１０４のノードＩＤは（ＮＵＩＤ＝１）に付け替えられる。なお、この例は一例であり、ノードＩＤがどのように割り振られるかは、不定である。このように、バスリセットが発生すると、ノードＩＤが新たに割り振られる。これに対して、ノードユニークＩＤは不変であり、機器１０１のノードユニークＩＤは（ＮＵＩＤ＝Ａ）、機器１０２のノードユニークＩＤは（ＮＵＩＤ＝Ｂ）、機器１０３のノードユニークＩＤは（ＮＵＩＤ＝Ｃ）、機器１０４のノードユニークＩＤは（ＮＵＩＤ＝Ｄ）のまま維持される。
【０００７】
なお、ノードＩＤがバスリセットにより更新される問題を解決する従来例としては、特許文献１及び特許文献２に示されているものが知られている。
【０００８】
【特許文献１】
特開２００１−７７９６号公報
【０００９】
【特許文献２】
特開２０００−３５４０５２号公報
【００１０】
【発明が解決しようとする課題】
このようにＩＥＥＥ１３９４では２つのＩＤが存在するが、ＩＥＥＥ１３９４上でソフトウェアを作成する際にはどちらか一つに統一した方が都合が良い。ノードＩＤで統一した場合、一般にバスリセットが起こるたびにノードＩＤを使用するソフトウェアモジュールは、ノードとノードＩＤの対応関係をそれぞれ更新する必要がある。これは同様の処理が複数存在してしまうという問題と、ＩＥＥＥ１３９４特有のイベントであるバスリセットを隠蔽できないという問題があり、あまり望ましくない。
【００１１】
一方、ノードユニークＩＤで統一した場合は、あるノードとそのノードユニークＩＤは決して変化しないという前提でソフトウェアの作成が行えるため、非常に単純で見通しの良いソフトウェアの設計が行える。
【００１２】
しかしながら、あるノードユニークＩＤを持ったノードにあるデータを送信したい場合、ＩＥＥＥ１３９４ではそのためにアシンクロノス通信を用いるが、アシンクロノス通信では、パケットの宛先として、ノードユニークＩＤではなく、ノードＩＤを最終的に指定する必要がある。そのため、送信時にはノードユニークＩＤからノードＩＤへの変換が、受信時にはノードＩＤからノードユニークＩＤへの変換がそれぞれ必要となる。ただし、ノードユニークＩＤで統一すると、ノードＩＤで統一する方式に比べて、ノードアドレスを扱う部分を局所化できる。
【００１３】
また、それとは別に、ノードＩＤを扱う際に生じる本質的な問題がある。それは、ノードＩＤが時間的に一意なＩＤではないという特性である。すなわち、ソフトウェアのシステムが大規模になり、マルチタスク処理が可能になってきている。マルチタスクでは、各モジュールはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上のプロセスやスレッドとして分割され、それぞれが非同期に動作する。そこで、ノードＩＤを扱うモジュールが複数ある場合、バスリセットが起こるたびにそれらにそのバスリセット通知する必要があるが、非同期で各モジュールが動作している場合には、そのバスリセット通知から直ちにノードＩＤとノードユニークＩＤとの対応を更新を行うことができない。つまり、単純に、ノードユニークＩＤからノードＩＤへの変換、又はノードＩＤからノードユニークＩＤへの変換を行うと、バスリセットが起こったにも関わらず、それを知る前に以前のノードＩＤで処理を行いパケットを送信してしまう可能性がある。
【００１４】
なお、上記特許文献１（特開２００１−７７９６号）には、ノードユニークＩＤに統一することが記載されている。しかしながら、この例では、単純な同期システムで、バスリセットが起こった時点で、すべての通信処理をキャンセルし、ＮＵＩＤ−ＮＩＤテーブルの更新に入る。また、同期システムなので、その間、他の通信処理が入ることができない。
【００１５】
オーディオシステムのような受動的なシステムでは、問題は少ないですが、ビデオシステムのような機器では、ある一つの処理にシステムが専念され、他の処理が行えなくなると、無駄にエラーパケットによるトラフィックの増大が発生し、他の機器の負担を増大させる結果となる。それを回避するためには、非同期システムを導入することが望まれる。
【００１６】
したがって、この発明の目的は、ＩＥＥＥ１３９４のインターフェースを使ってデータ通信を行う場合に、アプリケーションソフトウェア側では、ノードユニークＩＤを用いて見通しの良いプログラムが作成できると共に、システムの破綻が起こらないようにしたデータ処理装置及びデータ処理方法を提供することにある。
【００１７】
【課題を解決するための手段】
この発明は、ノード固有のノードユニークＩＤと、バスリセットが発生する毎に更新されるノードＩＤとを使ってデータ通信が行えるバスのデータ通信装置であって、
ノードＩＤとノードユニークＩＤとの関係をジェネレーション毎に示す対応表を有する変換手段と、
バスリセットが発生する毎にその値が更新され、バスのジェネレーションを示す値を発生するバスジェネレーション発生手段と
パケットを受信する際に、受信したパケットのノードＩＤに、バスジェネレーション発生手段からのバスジェネレーション値を組み合わせて世代別ノードＩＤを形成し、ノードＩＤとノードユニークＩＤとの関係をジェネレーション毎に示す対応表により、世代別ノードＩＤに対応するノードユニークＩＤを求める手段と、
パケットを送信する際に、ノードＩＤとノードユニークＩＤとの関係をジェネレーション毎に示す対応表により、送信するパケットのノードユニークＩＤを、バスジェネレーションと組み合わせた世代別ノードＩＤに変換し、バスジェネレーション発生手段により示されるそのときのバスジェネレーションとの比較を行い、バスジェネレーションが合致する場合のみ送信を許可するようにする手段と、
バスリセットの発生を検出し、バスリセットが発生する毎に、バスジェネレーション発生手段の値を更新すると共に、新たなノードＩＤとノードユニークＩＤとの関係を調べ、新たなノードＩＤとノードユニークＩＤとの関係に基づいて、新たなバスジェネレーションのノードＩＤとノードユニークＩＤとの対応表を更新する手段と
を備えるようにしたデータ通信装置である。
【００１８】
この発明は、ノード固有のノードユニークＩＤと、バスリセットが発生する毎に更新されるノードＩＤとを使ってデータ通信が行えるバスのデータ通信方法であって、
ノードＩＤとノードユニークＩＤとの関係をジェネレーション毎に示す対応表を作成しておき、
バスリセットが発生する毎に、バスのジェネレーションを示す値を発生し、
パケットを受信する際に、受信したパケットのノードＩＤに、バスジェネレーション値を組み合わせて世代別ノードＩＤを形成し、ノードＩＤとノードユニークＩＤとの関係をジェネレーション毎に示す対応表により、世代別ノードＩＤに対応するノードユニークＩＤを求め、
パケットを送信する際に、ノードＩＤとノードユニークＩＤとの関係をジェネレーション毎に示す対応表により、送信するパケットのノードユニークＩＤを、バスジェネレーションと組み合わせた世代別ノードＩＤに変換し、そのときのバスジェネレーションとの比較を行い、バスジェネレーションが合致する場合のみ送信を許可するようにし、
バスリセットの発生を検出し、バスリセットが発生する毎に、バスジェネレーションの値を更新すると共に、新たなノードＩＤとノードユニークＩＤとの関係を調べ、新たなノードＩＤとノードユニークＩＤとの関係に基づいて、新たなバスジェネレーションのノードＩＤとノードユニークＩＤとの対応表を更新する
ようにしたデータ通信方法である。
【００１９】
他のノードからのアシンクロノスパケットを受信すると、ノードＩＤとバスジェネレーションとから、世代別ノードＩＤが構成され、ＮＩＤ−ＮＵＩＤ変換モジュールで、この世代別ノードＩＤを使って、ノードＩＤからノードユニークＩＤへの変換処理が行われる。変換されたノードユニークアドレスがアプリケーションソフトウェアに送られる。
【００２０】
アシンクロノスパケットを送信する場合には、アプリケーションソフトウェアでは、ノードユニークＩＤが使われる。ＮＩＤ−ＮＵＩＤ変換モジュールで、ノードユニークＩＤからノードＩＤへの変換処理が行われる。このとき、ＮＩＤ−ＮＵＩＤ変換モジュールの使用中の対応表に基づいて、バスジェネレーションが組み合わされ、世代別ノードＩＤが構成される。送信キューからアシンクロノスパケットを送信する際に、世代別ノードＩＤのバスジェネレーションと、そのときのバスジェネレーションとが比較され、バスジェネレーションが一致する場合のみ、パケットの送信が行われる。
【００２１】
このように、この発明では、バスジェネレーションとノードＩＤとから世代別ノードＩＤを構成し、この世代別ノードＩＤを使って処理を行うようにしている。世代別ＩＤは、バスリセットを越えて、ＩＥＥＥ１３９４ノードを特定できるＩＤとみなせることから、このような世代別ノードＩＤを使えば、バスリセットが発生しても、システムの破綻が生じることはない。アプリケーションソフトウェア側では、ノードユニークＩＤを用いて見通しの良いプログラムが作成できる。
【００２２】
【発明の実施の形態】
以下、この発明に実施の形態について図面を参照しながら説明する。図１は、ＩＥＥＥ１３９４のチップのレイヤ構造を示すものである。図１に示すように、ＩＥＥＥ１３９４のチップのレイヤ構造は、トランザクションレイヤ５１と、リンクレイヤ５２と、物理レイヤ５３とからなる。トランザクションレイヤ５１は、コンフィグレーション及び管理用のレジスタ（ＣＳＲ）で要求されるリード、ライト、ロックの動作を実行する。リンクレイヤ５２は、トランザクションレイヤ５１とのデータのやり取りを提供すると共に、アドレスの割り当て、データチェック、データのフレーム分けを提供する。
【００２３】
ＩＥＥＥ１３９４のアーキテクチャには、制御管理機能として、シリアルバス管理５４が設けられる。シリアルバス管理５４は、ノードを識別するためのコンフィグレーション及び管理用のレジスタ（ＣＳＲ）を持っている。シリアルバス管理５４の中には、バスマネージャ、アイソクロノスリソースマネージャ、ノードコントローラなどが必要に応じて配置される。バスマネージャは、バスの電力管理、スピードマップの維持、トポロジの維持、トポロジの情報を基にしたバスの最適化のサービスを提供する。アイソクロノスリソースマネージャは、アイソクロノス帯域の割り当て、チャンネル番号の割り当て、サイクルマスタの指定等を行っている。物理レイヤは、電気的、機械的なインターフェースを提供する。
【００２４】
この発明は、このようなＩＥＥＥ１３９４のチップと、アプリケーションレイヤ５５との間にあるデバイスドライバあるいはミドルウェアとして実現される。実施の形態としては、図２に示すようなソフトウェアシステムをもとに説明を行う。ただし、この図はあくまで一般的なＩＥＥＥ１３９４用のドライバ、ミドルウェアのアーキテクチャであり、本発明はこの構成に特別に依存はしない。
【００２５】
図２において、ＩＥＥＥ１３９４ドライバ１は、図１に示したようなＩＥＥＥ１３９４チップ用のデバイスドライバである。ＩＥＥＥ１３９４ドライバ１中には、バスリセット割り込みハンドラ１１と、バスリセットカウンタ１２と、アシンクロノスパケット受信ハンドラ１３と、パケット送出ドライバ１４と、アシンクロノスパケット送信キュー１５が設けられる。
【００２６】
バスリセット割り込みハンドラ１１は、バスリセットが起こった場合に、ＩＥＥＥ１３９４チップから割り込みがかかり駆動されるハンドラである。バスリセットが発生すると、バスリセット割り込みハンドラ１１により、ＮＩＤ−ＮＵＩＤ変換モジュール２に、バスリセットが起こったことが通知される。
【００２７】
バスリセットカウンタ１２は、バスリセットが起こる毎に値が更新されるもので、このバスリセットカウンタ１２の値は、バスジェネレーションとして用いられる。バスジェネレーションについては、後に説明する。バスリセット割り込みハンドラ１１によりバスリセットが発生したことが知らされると、バスリセットカウンタ１２が更新される。バスリセットカウンタ１２のバスリセットが生じる毎の更新アルゴリズムは、単純なインクリメントで良い。ただし、更新アルゴリズムは単純なインクリメントである必要はなく、十分周期性の長く、かつ、その１周期に同じ値が現れないようなものであれば、任意のもので良い。バスリセットカウンタ１２のビット幅としては、８ビットか１６ビット程度あれば良い。
【００２８】
アシンクロノスパケット受信ハンドラ１３は、ＩＥＥＥ１３９４チップがバスよりこのノード宛てのアシンクロノスパケットを受信した場合に駆動されるハンドラである。アシンクロノスパケット受信ハンドラ１３は、アシンクロノスパケットを受信すると、アシンクロノスパケット受信モジュール３に、アシンクロノスパケットの受信を通知する。
【００２９】
パケット送出ドライバ１４は、アシンクロノスパケット送信キュー１５に入っているアシンクロノスパケットを、実際にバス上に流すためのドライバである。
【００３０】
アシンクロノスパケット送信キュー１５は、任意のモジュールが送信したいアシンクロノスパケットを一時的に蓄積するためのキューである。アシンクロノスパケット送信キュー１５に蓄積されたパケットは、パケット送出ドライバ１４によって、やがて順番に送信される。
【００３１】
ＮＩＤ−ＮＵＩＤ変換モジュール２は、ノードＩＤとノードユニークＩＤとの対応関係を保持するモジュールである。ＮＩＤ−ＮＵＩＤ変換モジュール２は、ノードＩＤとノードユニークＩＤとの対応表２１のセットと、最新表番号レジスタ２２とを有する。ノードＩＤとノードユニークＩＤとの対応表２１は各ジェネレーション毎のノードＩＤとノードユニークＩＤとの対応関係を示すものである。このジェネレーション毎のノードＩＤとノードユニークＩＤとの対応関係を示す対応表２１が複数個保持されている。ＮＩＤ−ＮＵＩＤ変換モジュール２は、バスリセットの通知を受けて、その更新処理を開始する。また、任意のモジュールに対して、ノードＩＤとノードユニークＩＤとの相互変換のサービスを提供する。
【００３２】
アシンクロノスパケット受信モジュール３は、アシンクロノスパケット受信ハンドラ１３から受け取ったアシンクロノスパケットのノードＩＤを、世代別ノードＩＤを使って、ノードユニークＩＤに変換して、あらかじめ登録されたモジュールに通知するサービスを提供する。この例ではそれらのあらかじめ登録されたモジュールについては省かれている。
【００３３】
アシンクロノスパケット送信モジュール４は、任意のモジュールがノードユニークＩＤで送信先を指定して、アシンクロノスパケットを送信できるようにするサービスを提供するモジュールである。
【００３４】
図３は、ＮＩＤ−ＮＵＩＤ変換モジュール２のノードＩＤとノードユニークＩＤとの対応表２１の一例である。ＮＩＤ−ＮＵＩＤ変換モジュール２には、図３に示すような、ノードＩＤとノードユニークＩＤとの対応表２１が各ジェネレーション毎に用意される。なお、対応表２１の個数は、システムが許す限り多くてかまわないが、実用上は２、３個程度で十分である。
【００３５】
図３に示すように、ノードＩＤとノードユニークＩＤとの対応表２１は、表番号Ｃ１と、使用中フラグＣ２と、バスジェネレーション値Ｃ３と、ノードの合計の値Ｃ４と、ノードＩＤの値Ｃ５と、対応テーブルＣ６とからなる。
【００３６】
表番号Ｃ１は、各表を区別するための内部的な識別番号である。表番号Ｃ１は、実際には、Ｃ言語におけるポインタや配列の添え字などで間接的に表現される。
【００３７】
使用中フラグＣ２は、この表が現在使用中かどうかを示すフラグであり、現在使用中なら例えば「１」に設定され、未使用なら例えば「０」に設定される。初期時には、ＮＩＤ−ＮＵＩＤ変換モジュール２の各対応表における使用中フラグＣ２は、未使用を表す「０」に設定されている。
【００３８】
バスジェネレーションの値Ｃ３は、システムに繋がれているノードの数の総数を示すものである。バスジェネレーションは、バスリセットが生じる毎に更新される値で、具体的には、バスリセットカウンタ１２の値である。
【００３９】
ノードの合計の値Ｃ４は、そのジェネレーションのときにシステムに繋られているノードの総数である。
【００４０】
ノードＩＤの値Ｃ５は、そのジェネレーションのときに自分のノードに割り振られたノードＩＤの値である。
【００４１】
対応テーブルＣ６は、そのジェネレーションのときに割り振られた「０」から「６３」までのノードＩＤと、その機器のノードユニークＩＤとの対応関係を示すテーブルである。
【００４２】
このＮＩＤ−ＮＵＩＤ変換モジュール２のノードＩＤとノードユニークＩＤとの対応表２１は、バスリセットが発生すると、更新される。
【００４３】
すなわち、バスリセットが発生すると、各ノードに新たにノードＩＤが割り振られる。このとき、新たに割り振られた各ノードのノードＩＤに対応するように、新たなジェネレーションでのノードＩＤとノードユニークＩＤとの対応表２１が作成される。このノードＩＤとノードユニークＩＤとの対応表２１の更新処理について説明する。
【００４４】
図２において、ＩＥＥＥ１３９４チップが動作し始めたり、ノードの出現、消失、あるいはソフトウェア的な原因でバスリセットが起こる。このバスリセットにより、ＩＥＥＥ１３９４チップに割り込みがかかり、バスリセット割り込みハンドラ１１が駆動する。
【００４５】
バスリセット割り込みハンドラ１１は、バスリセットカウンタ１２の値を更新する。バスリセットカウンタ１２は、前述したように、通常はインクリメントとなる。すなわち、バスリセットカウンタ１２の値は、バスリセットが起こるたびに、０、１、２、…のように、インクリメントされていく。
【００４６】
そして、バスリセット割り込みハンドラ１１は、ＮＩＤ−ＮＵＩＤ変換モジュール２に対して、少なくとも、現在ローカルバス上に存在するノードの合計の値と、自分自身のノードＩＤの値と、バスリセットカウンタ１２の値を通知する。
【００４７】
また、ＮＩＤ−ＮＵＩＤ変換モジュール２は、バスリセット割り込みハンドラ１１からのバスリセットの通知を受けて、ノードＩＤとノードユニークＩＤの対応表２１の更新を開始する。
【００４８】
すなわち、上述のように、ＩＥＥＥ１３９４ドライバ１のバスリセット割り込みハンドラ１１からは、ＮＩＤ−ＮＵＩＤ変換モジュール２に対して、少なくとも、現在ローカルバス上に存在するノードの合計の値と、自分自身のノードＩＤの値と、バスリセットカウンタの値が通知されてくる。
【００４９】
ノードＩＤとノードユニークＩＤの対応表２１の更新処理では、まず、ＮＩＤ−ＮＵＩＤ変換モジュール２にあるノードＩＤとノードユニークＩＤとの対応表２１のセットの中から、表使用中フラグの値Ｃ１が使用中となっており、かつ、そのバスジェネレーションの値Ｃ３が、ＩＥＥＥ１３９４ドライバ１のバスリセット割り込みハンドラ１１から通知されたバスジェネレーションと一致するものがあるかどうかが調べられる。一致するものがあれば、その表の使用中フラグＣ２が一旦未使用に設定され、その表が今回の更新用の表とされる。
【００５０】
一致するものがなかった場合は、適当に未使用の表、あるいは未使用の表がない場合には、適当に最も昔とみなせるバスジェネレーションを持った表が選ばれ、更新用の表とされる。
【００５１】
更新用の表が選択されたら、その表のバスジェネレーションの値Ｃ３、ノードの合計の値Ｃ４、自身のノードＩＤの値Ｃ５に、ＩＥＥＥ１３９４ドライバ１のバスリセット割り込みハンドラ１１から送られてきた、バスリセットカウンタの値、現在ローカルバス上に存在するノードの合計の値、自分自身のノードＩＤの値がそれぞれ記載される。
【００５２】
例えば、更新用の表として、図４Ａに示すような表が使われたとする。そして、バスリセットの発生と共に、ＩＥＥＥ１３９４ドライバ１のバスリセット割り込みハンドラ１１から、例えば以下のような値が送られてきたとする。
【００５３】
・バスリセットカウンタの値・・・８
．現在ローカルバス上に存在するノードの合計の値・・・６
・自分自身のノードＩＤの値・・・・５
【００５４】
この場合には、更新用のバスジェネレーションの値Ｃ３、ノードの合計の値Ｃ４、自身のノードＩＤの値Ｃ５は、ＩＥＥＥ１３９４ドライバ１のバスリセット割り込みハンドラ１１から送られてきた値に基づいて、図４Ｂに示すように書き換えられる。
【００５５】
次に、新たな対応表の対応テーブルＣ６の作成処理が行われる。対応テーブルの作成処理では、「０」から更新用の表のノードの合計の値Ｃ４の値より一つ小さい値までが有効なノードＩＤとなる。
【００５６】
また、ノードを識別するためのコンフィグレーション及び管理用のレジスタ（ＣＳＲ）などをから、ノードユニークＩＤを取得できる適切なアシンクロノスのリクエストパケットが作成され、このリクエストパケットが、アシンクロノスパケット送信キュー１５にキューイングされる。このリクエストパケットは、各ノードに送られる。
【００５７】
やがて、ＮＩＤ−ＮＵＩＤ変換モジュール２は、このリクエストの応答して送られてくる応答パケットをアシンクロノスパケット受信ハンドラ１３より受信し、ノードＩＤに対応するノードユニークＩＤを取得する。これにより、各ノードＩＤに対応するノードユニークＩＤを取得することができる。
【００５８】
例えば、ノードＩＤの値を「０」として、ノードユニークＩＤを取得するためのリクエストパケットがアシンクロノスパケット送信キュー１５にキューイングされる。やがて、このリクエストパケットは、ノードユニークＩＤが「０」の機器に届けられる。ノードＩＤが「０」の機器は、リクエストに応答して、その機器のノードユニークＩＤを返す。このノードユニークＩＤがアシンクロノスパケット受信ハンドラ１３より受信される。これにより、ノードＩＤが「０」の機器に対応するノードユニークＩＤが知らされる。
【００５９】
同様に、ノードＩＤの値を「１」、「２」、「３」、…として、ノードユニークＩＤを取得するためのリクエストパケットがアシンクロノスパケット送信キュー１５にキューイングされると、このリクエストパケットは、ノードユニークＩＤが「１」、「２」、「３」、…の各機器に届けられ、ノードＩＤが「１」、「２」、「３」、…の各機器は、リクエストに対応して、各機器のノードユニークＩＤを返し、このノードユニークＩＤがアシンクロノスパケット受信ハンドラ１３より受信される。これにより、ノードＩＤが「１」、「２」、「３」、…の各機器に対応するノードユニークＩＤが知らされる。
【００６０】
このようにして得られたノードＩＤに対するノードユニークＩＤに基づいて、図４Ｂに示す更新用の表のうちの対応表の各ノードＩＤに対するノードユニークＩＤのテーブルＣ６に設定される。
【００６１】
すべての有効なノードＩＤに対してノードユニークＩＤが取得できたら、図４Ｃに示すように、更新用された対応表の表番号の使用中フラグＣ２が使用中を示す「１」に設定される。
【００６２】
以上のようにして、新たな対応表への更新が行われたら、図２におけるＮＩＤ−ＮＵＩＤ変換モジュール２中の最新表番号のレジスタ２２の値が、更新された対応表の表番号Ｃ１の番号に設定される。
【００６３】
なお、以上の処理フローの中で、もし何らかのエラーが起これば、そこで作業は中断してよい。
【００６４】
なお、ここまでの処理は同期的に行われる必要がある。この実施の形態では、上述のように、バスリセットカウンタ１２の値を、バスジェネレーションとして使用している。また、バスジェネレーションとノードＩＤを合わせたものを、以後、「世代別ノードＩＤ」と以後呼ぶことにする。そして、このバスジェネレーションとノードＩＤを常にペアで扱い、世代別ノードＩＤという一つの値とみるようにしている。
【００６５】
世代別ノードＩＤは、近似的にではあるが、バスリセットを越えて、ＩＥＥＥ１３９４ノードを特定できるＩＤとみなせる。つまり、バスリセットカウンタ１２の値を使ってバスジェネレーションを形成すると、バスリセットカウンタ１２は周期性を持つため、いずれは重複した世代別ノードＩＤが現れることになる。しかしながら、実用上では、バスジェネレーションの周期が十分長ければ、問題なく、ノードを特定するＩＤとして利用できる。
【００６６】
次に、アシンクロナスパケットの送信時及び受信時の処理について説明する。アプリケーションソフトウェア５側では、アドレスをノードユニークＩＤで統一すると、あるノードとそのノードユニークＩＤは決して変化しないという前提でソフトウェアの作成が行え、単純で見通しの良いソフトウェアの設計が行える。
【００６７】
そこで、この発明の実施の形態では、アプリケーションソフトウェア５側では、ノードを示すアドレスとして、ノードユニークＩＤに統一して、処理を行うようにしている。
【００６８】
なお、本来は、バススピードを始めアシンクロノスパケットのヘッダで定義されている任意のフィールドの値を指定できるが、この発明では、それらは特に関係がないため、省いて説明を行う。
【００６９】
図２において、アシンクロノスパケットを受信すると、アシンクロノスパケット受信ハンドラ１３が駆動される。アシンクロノスパケット受信ハンドラ１３は、受信したアシンクロノスパケットのノードＩＤの代わりに、そのノードＩＤとバスリセットカウンタ１２を組み合わせた世代別ノードＩＤを構成し、アシンクロノスパケット受信モジュール３に通知する。
【００７０】
アシンクロノスパケット受信モジュール３は、任意のミドルウェア、アプリケーションに対して、ノードユニークＩＤ指定のアシンクロノスパケットの受信が行えるインターフェースを提供する。よって、アシンクロノスパケット受信モジュール３は、受信したパケットのノードＩＤをノードユニークＩＤに変換したのち、受信を要求するモジュールに通知する必要がある。
【００７１】
まず、アシンクロノスパケット受信モジュール３は、アシンクロノスパケット受信ハンドラ１３より、世代別ノードＩＤ指定のアシンクロノスパケットを受け取る。次に、その世代別ノードＩＤをＮＩＤ−ＮＵＩＤ変換モジュール２に渡し、ノードユニークＩＤへの変換を要求する。
【００７２】
ＮＩＤ−ＮＵＩＤ変換モジュール２は、ＮＩＤ−ＮＵＩＤ変換モジュール２の中から渡されてきた世代別ノードＩＤのバスジェネレーションと一致するバスジェネレーション（バスジェネレーション値Ｃ３の値）を持ち、かつ、使用中フラグ（使用中フラグＣ２の値）が使用中となっている対応表２１を探す。
【００７３】
もしなければ、エラーを、この場合には、アシンクロノスパケット受信モジュール３に報告する。
【００７４】
次に、このバスジェネレーションが一致する対応表２１から、渡されてきた世代別ノードＩＤのノードＩＤに一致し、かつ、そのノードＩＤがノードの合計（ノードの合計の値Ｃ４）より小さいものに対応する各世代時のノードユニークＩＤを、アシンクロノスパケット受信モジュール３に返す。
【００７５】
このようにして、ノードＩＤで送られてきたパケットは、ノードユニークＩＤに変換される。
【００７６】
次に、ノードＩＤを指定してアシンクロノスパケットを送信する場合について説明する。
【００７７】
アシンクロノスパケット送信モジュール４は、任意のミドルウェア、アプリケーションに対してノードユニークＩＤによってアシンクロノスパケットの送信が行えるインターフェースを提供する。よってアシンクロノスパケット送信モジュール４は、送信要求のあったパケットにおいてノードユニークＩＤをノードＩＤに変換する必要がある。
【００７８】
まず、アシンクロノスパケット送信モジュール４は、ＮＩＤ−ＮＵＩＤ変換モジュール２に対して、ノードユニークＩＤからノードＩＤへの変換要求を出す。このとき、ノードユニークＩＤ、バスジェネレーションの２つをパラメータとしてＮＩＤ−ＮＵＩＤ変換モジュール２に指定する。
【００７９】
ただし、バスジェネレーションについては一般に最新の値が必要となることが多く、省略可能とする。
【００８０】
ＮＩＤ−ＮＵＩＤ変換モジュール２は、ＮＩＤ−ＮＵＩＤ変換モジュール２の各表から、バスジェネレーションが渡されてきたバスジェネレーションと一致する対応表２１を探す。一致するものがなければエラーをアシンクロノスパケット送信モジュール４に返す。
【００８１】
バスジェネレーションが省略されていた場合は、最新のバスジェネレーションが指定されたとみなし、最新表番号レジスタ２２で保持されている表番号Ｃ１の対応表２１を選ぶ。ただし、その場合、その対応表２１の使用中フラグ値Ｃ２が未使用であれば、エラーをアシンクロノスパケット送信モジュール４に返す。
【００８２】
該当する対応表２１が選ばれれば、その対応表２１から渡されてきたノードユニークＩＤと一致するノードＩＤを探す。見つからなかったり、一致するノードＩＤがあったとしても、その対応表２１のノードの合計とそのときの実際のノードの合計が異なっていれば、エラーを、この場合には、アシンクロノスパケット送信モジュール４に報告する。
【００８３】
該当する対応表２１が見つかった場合は、該当するノードＩＤにバスジェネレーションバスジェネレーションを加えて世代別ノードＩＤとして、アシンクロノスパケット送信モジュール４に返す。
【００８４】
世代別ノードＩＤが付加された送信パケットは、アシンクロノスパケット送信キュー１５に蓄積される。アシンクロノスパケット送信キュー１５に蓄積されたパケットは、パケット送出ドライバ１４によって、やがて順番に送信される。
【００８５】
アシンクロノスパケット送信キュー１５からアシンクロノスパケットを送信する際に、世代別ノードＩＤのバスジェネレーションと、そのときのバスジェネレーション（バスリセットカウンタ１２の値）とが比較され、バスジェネレーションが一致する場合のみ、パケットの送信が行われる。
【００８６】
この仕組みによって以前のノードＩＤであるのに、それを誤って現在のノードＩＤとみなしてしまいそのままパケットを送信してしまうことを防ぐことができる。
【００８７】
このように、この発明では、バスジェネレーションとノードＩＤとから世代別ノードＩＤを構成し、この世代別ノードＩＤを使って処理を行うようにしている。世代別ＩＤは、バスリセットを越えて、ＩＥＥＥ１３９４ノードを特定できるＩＤとみなせることから、このような世代別ノードＩＤを使えば、バスリセットが発生しても、システムの破綻が生じることはない。アプリケーションソフトウェア側では、ノードユニークＩＤを用いて見通しの良いプログラムが作成できる
【００８８】
また、この発明の実施の形態では、非同期システムによって、送信、受信、バスリセット処理などがそれぞれ独立して動作させることができ、非常に柔軟なシステムを構築することができる。
【００８９】
なお、非同期システムにしてしまうことにより、各サブシステム間であるイベントに対して同期して処理を行うことが困難となる。具体的には、バスリセットが起こった場合、ＩＥＥＥ１３９４に関係するサブシステムの殆どは、何らかのキャンセル処理を行うことが必要であるが、非同期ゆえに、その処理が同時に行うことができない場合がある。
【００９０】
例えば、ＩＥＥＥ１３９４のドライバは、バスリセットにより真っ先にキャンセル処理を行えるが、ＮＵＩＤ−ＮＩＤ変換サブシステムには、まだそのイベントが伝わっていない場合がある。その場合に、ノードユニークＩＤ指定によるアシンクロノス送信をサポートするサブシステムが送信処理を行うと、まず、ＮＵＩＤ−ＮＩＤ変換サブシステムを使って、ノードユニークＩＤをノードＩＤに変換するが、そこで、過去のノードＩＤに変換されてしまう可能性がある。
【００９１】
この発明が適用されたシステムでは、必ず、ノードＩＤとバスジェネレーションをセットで扱うようにすることで、最終的に、ＩＥＥＥ１３９４ドライバにて、正しい現在のノードＩＤかどうかを判断することが可能となり、誤ったノードＩＤを送信してしまうことを防ぐことができる。
【００９２】
この発明は、上述した実施形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
【００９３】
【発明の効果】
この発明によれば、他のノードからのアシンクロノスパケットを受信すると、ノードＩＤとバスジェネレーションとから、世代別ノードＩＤが構成され、ＮＩＤ−ＮＵＩＤ変換モジュールで、この世代別ノードＩＤを使って、ノードＩＤからノードユニークＩＤへの変換処理が行われる。変換されたノードユニークアドレスがアプリケーションソフトウェアに送られる。
【００９４】
アシンクロノスパケットを送信する場合には、アプリケーションソフトウェアでは、ノードユニークＩＤが使われる。ＮＩＤ−ＮＵＩＤ変換モジュールで、ノードユニークＩＤからノードＩＤへの変換処理が行われる。このとき、ＮＩＤ−ＮＵＩＤ変換モジュールの使用中の対応表に基づいて、バスジェネレーションが組み合わされ、世代別ノードＩＤが構成される。送信キューからアシンクロノスパケットを送信する際に、世代別ノードＩＤのバスジェネレーションと、そのときのバスジェネレーションとが比較され、バスジェネレーションが一致する場合のみ、パケットの送信が行われる。
【００９５】
このように、この発明では、バスジェネレーションとノードＩＤとから世代別ノードＩＤを構成し、この世代別ノードＩＤを使って処理を行うようにしている。世代別ＩＤは、バスリセットを越えて、ＩＥＥＥ１３９４ノードを特定できるＩＤとみなせることから、このような世代別ノードＩＤを使えば、バスリセットが発生しても、システムの破綻が生じることはない。アプリケーションソフトウェア側では、ノードユニークＩＤを用いて見通しの良いプログラムが作成できる。
【図面の簡単な説明】
【図１】ＩＥＥＥ１３９４の構造を示すブロック図である。
【図２】この発明が適用されたソフトウェアアーキテクチャの構成を示すブロック図である。
【図３】ノードＩＤとノードユニークＩＤとの対応表を示す略線図である。
【図４】ノードＩＤとノードユニークＩＤとの対応表の更新の説明に用いる略線図である。
【図５】ＩＥＥＥ１３９４の説明に用いる略線図である。
【符号の説明】
１・・・ＩＥＥＥ１３９４ドライバ、２・・・ＮＩＤ−ＮＵＩＤ変換モジュール、３・・・アシンクロノスパケット受信モジュール、４・・・アシンクロノスパケット送信モジュール、５・・・アプリケーションソフトウェア、１１・・・バスリセット割り込みハンドラ、１２・・・バスリセットカウンタ、１３・・・アシンクロノスパケット受信ハンドラ、１４・・・パケット送出ドライバ、１５・・・アシンクロノスパケット送信キュー、２１・・・ノードＩＤとノードユニークＩＤとの対応表、２２・・・最新表番号レジスタ
【図１】
2004336188.tif 000003
【図２】
2004336188.tif 000004
【図３】
2004336188.tif 000005
【図４】
2004336188.tif 000006
【図５】
2004336188.tif 000007