(57)【要約】【課題】マルチドロップの配線形態をとっているフィールドバスシステムであっても、ノードの二重アドレスが発生していることをスレーブやマスタ側で認識できる二重アドレス検知方法を提供すること【解決手段】スレーブ２０に乱数を持たせ、マスタユニット１２からのステータスリード要求（▲１▼）に対してその乱数付きのレスポンスを返送する（▲２▼）。そのレスポンスを受信したマスタは、受信した乱数を付加したステータスライト要求を発行する（▲３▼）。スレーブは、ステータスライト要求に付加された乱数と自己の乱数を比較し、一致すれば加入スレーブとなり、不一致の場合には二重アドレスが発生していると認識し、待機状態にする。マスタは、待機状態になっているノードを検出することにより、二重アドレス発生を認識する。【選択図】        図８
2004274395.tif 000002
【特許請求の範囲】
【請求項１】
マスタと、スレーブが、フィールドバスに接続されて構成されるフィールドバスシステムにおける二重アドレス検知方法であって、
前記スレーブは、設定された乱数を記憶保持し、
前記マスタは、前記フィールドバスに接続されたスレーブに対し、ノードアドレスを指定してステータスリード要求を発行し、
前記指定されたノードアドレスを持つスレーブは、前記ステータスリード要求を受信すると、自己のノードアドレスとともに前記乱数を前記ステータスリード要求に対するレスポンスとして返送し、
前記マスタは、前記レスポンスを受信すると、受信したノードアドレスのスレーブに対し、前記乱数を含むステータスライトを発行し、
前記ステータスライトの送信アドレスを持つスレーブは、受信した前記ステータスライトとともに送られてきた乱数と、自己が記憶保持する乱数を比較し、一致しない場合には、同一のノードアドレスを持つ他のスレーブが存在する二重アドレス状態であることを検知し、自己は待機状態になることを特徴とするフィールドバスシステムにおける二重アドレス検知方法。
【請求項２】
前記マスタは、前記待機状態になっているスレーブのノードアドレスを取得することにより、二重アドレスが発生していることを認識することを特徴とする請求項１に記載のフィールドバスシステムにおける二重アドレス検知方法。
【請求項３】
前記スレーブが前記マスタに返すレスポンスの送信に確率を設定し、送信タイミングにきても所定の割合で前記レスポンスを送信しないように制御することを特徴とする請求項１または２に記載のフィールドバスシステムにおける二重アドレス検知方法。
【請求項４】
フィールドバスに接続可能なスレーブであって、
前記フィールドバスを介してマスタと通信する通信手段と、
設定された乱数を記憶する乱数記憶手段と、
前記マスタから送られてきた自己のノードアドレス宛のステータスリード要求を受信した際に、自己のノードアドレスとともに前記乱数記憶手段に記憶された乱数を前記ステータスリード要求に対するレスポンスとして返送する機能と、
前記マスタから送られてきた自己のノードアドレス宛の乱数を含むステータスライトを受信した際に、そのステータスライトとともに送られてきた乱数と、自己が記憶保持する乱数を比較し、一致しない場合には、同一のノードアドレスを持つ他のスレーブが存在する二重アドレス状態であることを検知し、自己のステータスを待機状態にする機能を備えたことを特徴とするスレーブ。
【請求項５】
前記マスタに返すレスポンスの送信に確率を設定し、送信タイミングにきても所定の割合で前記レスポンスを送信しないように制御する機能を備えたことを特徴とする請求項４に記載のスレーブ。
【請求項６】
フィールドバスに接続可能なマスタであって、
前記フィールドバスを介してスレーブと通信する通信手段と、
前記フィールドバスに接続されたスレーブに対し、ノードアドレスを指定してステータスリード要求を発行する機能と、
そのステータスリード要求に対するスレーブからの乱数付きのレスポンスを受信した際に、その受信したノードアドレスのスレーブに対し、受信した乱数を含むステータスライトを発行する機能を備えたことを特徴とするマスタ。
【請求項７】
前記ステータスライトに基づいて待機状態に設定されたスレーブのノードアドレスを取得することにより、二重アドレスが発生しているスレーブを認識する機能を備えたことを特徴とする請求項６に記載のマスタ。
【請求項８】
請求項６に記載のマスタと、請求項４に記載のスレーブが、フィールドバスに接続されて構成されるフィールドバスシステムであって、
前記マスタは、前記フィールドバスに接続されたスレーブに対し、ノードアドレスを指定してステータスリード要求を発行し、
前記指定されたノードアドレスを持つスレーブは、前記ステータスリード要求を受信すると、自己のノードアドレスとともに前記乱数を前記ステータスリード要求に対するレスポンスとして返送し、
前記マスタは、前記レスポンスを受信すると、受信したノードアドレスのスレーブに対し、前記乱数を含むステータスライトを発行し、
前記ステータスライトの送信アドレスを持つスレーブは、受信した前記ステータスライトとともに送られてきた乱数と、自己が記憶保持する乱数を比較し、一致しない場合には、同一のノードアドレスを持つ他のスレーブが存在する二重アドレス状態であることを検知し、自己は待機状態に設定されるようにしたことを特徴とするフィールドバスシステム。
【請求項９】
前記マスタが、前記待機状態に設定されたスレーブのノードアドレスを取得することにより、二重アドレスが発生しているスレーブを認識することができる請求項８に記載のフィールドバスシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、フィールドバスシステムにおける二重アドレス検知方法及びスレーブ並びにマスタ及びフィールドバスに関するもので、フィールドバスシステムで、マルチドロップの配線形態におけるノードの二重アドレス検知を行うものに関する。
【０００２】
【従来の技術】
ＦＡ（ファクトリーオートメーション）で用いられるＰＬＣ（プログラマブルコントローラ）は、スイッチやセンサなどの入力機器のＯＮ／ＯＦＦ情報を入力し、ラダー言語などで書かれたシーケンスプログラム（ユーザプログラム）に沿って論理演算を実行する。そして、ＰＬＣは、得られた演算結果にしたがって、リレー，バルブ，アクチュエータなどの出力機器に対し、ＯＮ／ＯＦＦ情報の信号を出力することで制御が実行される。
【０００３】
係るＰＬＣの一形態として、各機能ごとに生成されたユニットを複数用意し、電気，機械的に連結して構成するものがある。係るタイプを構成するためのユニットとしては、電源ユニット，ＣＰＵユニット，Ｉ／Ｏユニット，マスタユニット等各種のものがある。ＰＬＣを構成するＩ／Ｏユニットが有する接続端子には、ＰＬＣの近くの場所に存在する入力機器や出力機器の接続線をつなぐ。
【０００４】
そして、上記したマスタユニットのほうは、フィールドバス等の制御系ネットワークに接続され、その制御系ネットワークに接続された各種のスレーブと制御系ネットワークを介して通信可能となっている。このフィールドバスにおける配線は、マルチドロップ配線になっていて、ひとつのフィールドバスにマスタユニットと複数のスレーブとが接続できるようになっている。各スレーブは接続端子を有していて、その接続端子には、ＰＬＣから比較的に遠い場所に存在する入力機器や出力機器がつながれる。そしてマスタユニットは、各スレーブとの間でフィールドバス通信をしてフレームを送受信することにより、各スレーブにつながれている入力機器の入力信号（ＩＮデータ）を受け取るとともに、出力信号（ＯＵＴデータ）を各スレーブに対して送信する。通信の詳細を説明すると、マスタユニットから出力された送信フレームは、フィールドバスに接続された全てのスレーブ（ノード）に対して一度に到達する。そして、各スレーブには個々にノードアドレスが設定されており、送信フレームには宛先のノードアドレスを含む宛先データを付加しておく。これにより、各スレーブは、受信した送信フレームの宛先データを抽出し、自己宛の送信フレームか否かを判断し自己宛の場合にはその送信フレームを取り込み、自己宛でない場合には破棄するようになる。
【０００５】
なお、スレーブからマスタユニットへ向けて出力されるフレームも、同様に送信アドレスにマスタユニットのノードアドレスが付加されることにより、宛先のマスタユニットのみが受信することができる。そして、係るスレーブからマスタユニットに向けて出力されるフレームの送信タイミングであるが、各スレーブが一斉に送信すると、フィールドバス上で衝突が生じて通信不能となるので、予め指定された送信タイミングで、各スレーブが順次フレームを送信するような通信プロトコルをとっている。
【０００６】
そして、この種の通信プロトコルにおけるマスタとスレーブのデータの送受は、マスタユニットから一括送受信方式によりＯＵＴフレームを送信する。このＯＵＴフレーム中にはＯＵＴデータが含まれていて、所定のＯＵＴスレーブに受信される。なお、１つのＯＵＴフレーム中のＯＵＴデータ領域には、複数のＯＵＴスレーブ用のＯＵＴデータが格納されており、各ＯＵＴフレームは、ＯＵＴデータ領域中の自己用のＯＵＴデータの格納位置が予めわかっているため、当該格納位置のＯＵＴデータを取得する。
【０００７】
一方、各ＩＮスレーブは、マスタユニットからＯＵＴフレームを正常に受信すると、その受信完了をきっかけにして時間管理を始める。そして各ＩＮスレーブが出力するフレーム同士が重ならないような基本アイドルタイム毎に、各ＩＮスレーブは各々決められたタイミングで、ＩＮフレームＩＦ０〜ＩＦ２をマスタユニットに送信する。
【０００８】
マスタユニットでは、基本アイドルタイムに基づく各スレーブ毎のタイムスロット内でＩＮフレームＩＦ０〜ＩＦ２を受信し、各ＩＮフレームＩＦ０〜ＩＦ２のヘッダであるスタートビットに基づいてＩＮフレーム中のＩＮデータＩＮ０〜ＩＮ２を取込む。基本アイドルタイムを適切に設定することにより、各ＩＮスレーブからのＩＮフレームの重なりを防止して、確実にＩＮデータを送受することができる。
【０００９】
このマルチドロップ方式では、マスタユニットが出力する送信フレームの宛先データを全てのスレーブとすれば、一度に全てのスレーブに送信フレームを送ることができるメリットがある。この種のシステムは、例えば特許文献１などに開示されている。
【００１０】
また、各スレーブのノードアドレスの設定は、例えば、スレーブに設けられたディップスイッチ等のメカ的な設定スイッチをユーザが操作してアドレスを割り付ける。
【００１１】
【特許文献１】
特開平０９−１２８０１９
【００１２】
【発明が解決しようとする課題】
しかしながら、上記した従来のマルチドロップ方式のネットワークの場合、以下に示す問題がある。すなわち、ノードアドレスの設定が個々のスレーブに対してユーザがマニュアル操作で設定するため、誤って異なるスレーブに同一のノードアドレスを設定してしまうおそれがある。そして、そのように二重アドレスを設定してしまうと、マスタユニットからの送信フレームが一度に全ノードに到達するため、その二重アドレスに対して送信フレームを送ると、二重アドレスが割り付けられた複数のスレーブ（ノード）が同時に送信フレームを受信し、それぞれがレスポンスを返信する。すると、フィールドバス上では伝送フレームの衝突が発生し、不安定な通信回線となる。
【００１３】
さらに、上記したように、二重アドレスが発生している場合に、複数のスレーブからの送信フレームが衝突してマスタ側に到達しない場合には、そのノードアドレスのスレーブがフィールドバス上に存在していないと認識し、一方のスレーブからの送信フレームを受信した場合には、受信できたスレーブは存在していることが認識できるものの、ネットワークに加入できないスレーブの存在は認識することができない。従って、マスタユニット側では、二重アドレス状態が発生していることを認識することができなかった。
【００１４】
しかも、一方のスレーブからのレスポンスを正常に受信すると、マスタユニットはそのノードアドレスのスレーブが存在していると認識し、その後、レスポンスを正常に受信したスレーブと通信すべくマスタユニットがその二重アドレスが発生しているノードアドレスに向けて送信フレームを送った場合、前回のレスポンスが受信されなかったスレーブがその送信フレームを受信しレスポンスを返すおそれもある。
【００１５】
この発明は、マルチドロップの配線形態をとっているフィールドバスシステムであっても、ノードの二重アドレスが発生していることをスレーブやマスタ側で認識することができるフィールドバスシステムにおける二重アドレス検知方法及びスレーブ並びにマスタ及びフィールドバスを提供することを目的とする。
【００１６】
【課題を解決するための手段】
この発明によるフィールドバスシステムにおける二重アドレス検知方法は、マスタと、スレーブが、フィールドバスに接続されて構成されるフィールドバスシステムにおける二重アドレス検知方法である。そして、まず前記スレーブは、設定された乱数を記憶保持する。そして、前記マスタは、前記フィールドバスに接続されたスレーブに対し、ノードアドレスを指定してステータスリード要求を発行する。また、前記指定されたノードアドレスを持つスレーブは、前記ステータスリード要求を受信すると、自己のノードアドレスとともに前記乱数を前記ステータスリード要求に対するレスポンスとして返送する。前記マスタは、前記レスポンスを受信すると、受信したノードアドレスのスレーブに対し、前記乱数を含むステータスライトを発行する。そして、前記ステータスライトの送信アドレスを持つスレーブは、受信した前記ステータスライトとともに送られてきた乱数と、自己が記憶保持する乱数を比較し、一致しない場合には、同一のノードアドレスを持つ他のスレーブが存在する二重アドレス状態であることを検知し、自己は待機状態になるようにした。
【００１７】
ここで、乱数の設定は、実施の形態では、乱数設定手段を設け、スレーブ側にて所定のタイミングで乱数を設定するようにしたが、本発明はこれに限ることはなく、例えばツールその他の外部から乱数を与え、それを記憶保持するようにしてもよい。
【００１８】
また、上記した検知方法の発明を実施するために適した本発明に係るスレーブは、フィールドバスに接続可能なスレーブであって、前記フィールドバスを介してマスタと通信する通信手段と、設定された乱数を記憶する乱数記憶手段と、前記マスタから送られてきた自己のノードアドレス宛のステータスリード要求を受信した際に、自己のノードアドレスとともに前記乱数記憶手段に記憶された乱数を前記ステータスリード要求に対するレスポンスとして返送する機能と、前記マスタから送られてきた自己のノードアドレス宛の乱数を含むステータスライトを受信した際に、そのステータスライトとともに送られてきた乱数と、自己が記憶保持する乱数を比較し、一致しない場合には、同一のノードアドレスを持つ他のスレーブが存在する二重アドレス状態であることを検知し、自己のステータスを待機状態にする機能を備えるようにした。
【００１９】
また、上記した検知方法の発明を実施するために適した本発明に係るマスタは、フィールドバスに接続可能なマスタであって、前記フィールドバスを介してスレーブと通信する通信手段と、前記フィールドバスに接続されたスレーブに対し、ノードアドレスを指定してステータスリード要求を発行する機能と、そのステータスリード要求に対するスレーブからの乱数付きのレスポンスを受信した際に、その受信したノードアドレスのスレーブに対し、受信した乱数を含むステータスライトを発行する機能を備えるようにした。
【００２０】
さらに、上記した検知方法の発明を実施するために適した本発明に係るフィールドバスシステムとしては、上記した構成のマスタと、スレーブが、フィールドバスに接続されて構成される。そして、前記マスタは、前記フィールドバスに接続されたスレーブに対し、ノードアドレスを指定してステータスリード要求を発行し、前記指定されたノードアドレスを持つスレーブは、前記ステータスリード要求を受信すると、自己のノードアドレスとともに前記乱数を前記ステータスリード要求に対するレスポンスとして返送し、前記マスタは、前記レスポンスを受信すると、受信したノードアドレスのスレーブに対し、前記乱数を含むステータスライトを発行し、前記ステータスライトの送信アドレスを持つスレーブは、受信した前記ステータスライトとともに送られてきた乱数と、自己が記憶保持する乱数を比較し、一致しない場合には、同一のノードアドレスを持つ他のスレーブが存在する二重アドレス状態であることを検知し、自己は待機状態に設定されるようにした。
【００２１】
本発明が適用されるフィールドバスシステムは、例えばマルチドロップの配線形態と称されるもので、通常状態では、マスタからはＯＵＴデータを一括してスレーブへ転送し、スレーブ側では自局の決められた時間帯にＩＮデータを返送する通信プロトコルをとる。このシステムでは、各スレーブに設定されるノードアドレスは、そのフィールドバスシステムにおいてユニークである必要があるが、誤って同一のノードアドレスを複数のスレーブに設定し、二重アドレスを生じてしまうことがある。本発明は、係る二重アドレスが発生していることを検知するものである。
【００２２】
すなわち、本発明では、スレーブに乱数を持たせ、マスタからのステータスリード要求に対してその乱数付きのレスポンスを返送し、そのレスポンスを受信したマスタは、受信した乱数を付加したステータスライト要求を発行する。従って、スレーブは、自己のノードアドレス宛のステータスライト要求に付加された乱数と自己の乱数を比較することにより、二重アドレスが発生しているか否かを判断できる。つまり、自己のノードアドレス宛のステータスライト要求に付加された乱数と自己の乱数が一致した場合には、その前に返送したステータスリード要求に対する乱数付きレスポンスがマスタに受信されたとみなせるので、そのまま加入する。一方、一致しなかった場合には、同一のノードアドレスを持つ他のスレーブからのレスポンスがマスタに受信され自己が発したレスポンスは受信されなかったといえる。従って、同一のノードアドレスを持つスレーブが少なくともほかに１つ存在し、二重アドレスが発生していることを認識できる。さらに、自己はマスタに認識されなかったので、待機状態になる。これにより、二重アドレスとなった複数のスレーブが同時にフレームを送信することがなくなり、通信の安定化が図れる。
【００２３】
また、本発明に係る二重アドレス検知方法では、上記した発明を前提とし、前記マスタは、前記待機状態になっているスレーブのノードアドレスを取得することにより、二重アドレスが発生していることを認識するようにした。そして、この方法を実施するのに適した本発明にかかるマスタとしては、前記ステータスライトに基づいて待機状態に設定されたスレーブのノードアドレスを取得することにより、二重アドレスが発生しているスレーブを認識する機能を備えることである。これにより、本発明では、二重アドレスが発生していることをマスタも認識できる。
【００２４】
さらにまた本発明に係る二重アドレス検知方法では、前記スレーブが前記マスタに返すレスポンスの送信に確率を設定し、送信タイミングに来ても所定の割合で前記レスポンスを送信しないように制御するようにすることができる。そして、かかる方法を実施するのに適した本発明に係るスレーブでは、マスタに返すレスポンスの送信に確率を設定し、送信タイミングに来ても所定の割合で前記レスポンスを送信しないように制御する機能を備えることである。
【００２５】
すなわち、二重アドレスが発生している場合に、タイミングよくいずれか１つのスレーブから発せられたステータスリードに対するレスポンスがマスタに受信されると、上記したように二重アドレスを検知することができる。しかし、複数のレスポンスが衝突していずれもマスタに受信されないおそれもある。これに対し、本発明では、所定の割合でレスポンスが送信されないので、そのとき他のスレーブからレスポンスが送信されると、衝突することなくマスタユニットに到達する（二重アドレスを発生したスレーブが２つの場合）。また、３つ以上のスレーブが二重アドレスとなっていても、確実に衝突が回避されるとはいえないが、レスポンスを送信するスレーブの数が少ないほど、マスタに到達する可能性が高くなる。これにより、確率付きで複数回レスポンスを送信することにより、いずれかのスレーブからのレスポンスをマスタが認識し、認識されなかった他のスレーブは二重アドレスによる待機状態になる。
【００２６】
【発明の実施の形態】
図１は、本発明の好適な一実施の形態を実現するシステム全体を示している。図１に示すように、ＰＬＣ１０と各種のスレーブ２０が、フィールドバス３０を介して接続されネットワークシステムを構築している。ノードとなるスレーブ２０としては、リモートＩＯその他の機器がある。
【００２７】
ＰＬＣ１０は、ＣＰＵユニット１１やマスタユニット１２などの各機能ごとに生成されたユニットを連結することにより構成されている。その各ユニットはＰＬＣバス（内部バスとも言う。図示せず）につながれていて、ＰＬＣの各ユニット間でバス通信をしてデータ通信ができるようになっている。そして、このマスタユニット１２にはフィールドバス３０がに接続され、そのフィールドバス３０に複数台の各スレーブ２０がマルチドロップ接続によってつながれていて、マスタユニットと各スレーブとの間で通信が行われるようになっている。さらに、マスタユニット１２は、ＰＬＣ１０の内部バスを介してＣＰＵユニット１１内のＩＯメモリにアクセスし、ＩＯデータ等の読み書きを行うようになっている。もう少し説明すると、マスタユニット１２がスレーブ２０の接続端子につながれた入力機器からの入力信号（オン／オフ状態）をフィールドバス通信によって取り込んで、マスタユニット１２が取り込んだ入力信号（入力データ）を内部バス通信によってＣＰＵユニット１１に送信し、ＣＰＵユニット１１が入力信号を受け取る。ＣＰＵユニット１１は、その入力信号に基づいてユーザプログラムによって予め定められた論理演算をし、その演算結果を含んだ出力信号（出力データ）を内部バスを介してマスタユニット１２に送信する。マスタユニットはその出力信号をフィールドバス通信によってスレーブに送信する。各ユニットでは受信した出力信号を接続端子に接続された出力機器に対して出力する。なお、入力信号と出力信号をあわせてＩ／Ｏデータと呼ぶことがある。つまり、ＩＮデータは入力機器からスレーブへ、スレーブからマスタユニットへ、マスタユニットからＣＰＵユニットへと伝わる。また、ＯＵＴデータはＣＰＵユニットからマスタユニットへ、マスタユニットからスレーブへ、スレーブから出力機器へと伝わる。
【００２８】
マスタユニット１２は、図２に示すように、フィールドバスに接続され、実際にデータの送受を行う通信インタフェース１２ａと、その通信インタフェース１２ａを介してマスタ−スレーブ間通信をし、スレーブ２０との間でＩ／Ｏデータの送受を行ったり、所定のコマンドの送信並びにそれに基づくレスポンスの受信を行うマスタ用ＡＳＩＣ１２ｂと、各種の制御を行うＭＰＵ１２ｄと、各種の制御実行時にワークエリア等として使用されるＲＡＭ１２ｃと、上記制御を行うプログラムや、各種の設定データ等が格納されたＥＥＰＲＯＭ１２ｅと、ＣＰＵユニットなどと内部バス通信を行うためのインタフェース１２ｈと、動作状態（通信状態）や異常／正常などを示すＬＥＤ表示部１２ｆ並びにアドレスの設定などを行うための設定スイッチ１２ｇを備えている。
【００２９】
ＭＰＵ１２ｄが行う制御としては、ＣＰＵユニット１１その他のユニット等と通信したり、マスタ用ＡＳＩＣ１２ｂを動作させたりするようになっている。特に本発明との関係でいうと、フィールドバス３０に接続されたスレーブ２０と通信をし、二重アドレスが発生していないかをチェックするようになっている。具体的な処理機能は後述する。
【００３０】
スレーブ２０は、図３に示すように、フィールドバスに接続され、実際にマスタユニット１２との間でＩ／Ｏデータや各種メッセージ等の送受を行う通信インタフェース２０ａと、その通信インタフェース２０ａを介して取得したマスタ−スレーブ間通信をし、Ｉ／Ｏデータの送受を行ったり、マスタユニット１２からの所定のコマンドの受信並びにそれに基づくレスポンスの送信を行うスレーブ用ＡＳＩＣ２０ｂと、各種の制御を行うＭＰＵ２０ｄと、上記制御を行うプログラムや、各種の設定データ，ＩＯデータ等が格納されたＥＥＰＲＯＭ２０ｅと、端子台の構造となっていて入力機器または出力機器の配線を接続してＩ／Ｏデータの送受を行うＩ／Ｏ部２０ｊと、動作状態（通信状態）や異常／正常などを示すＬＥＤ表示部２０ｆ並びにノードアドレスの設定などを行うための設定スイッチ２０ｇを備えている。さらに、入力電圧（２４Ｖ）を５Ｖに降圧し、スレーブ２０内の各素子に電源供給する電源部２０ｉを備えている。なお、スレーブには３種類あって、それぞれ入力スレーブ、出力スレーブ、入出力スレーブがある。例えば入力スレーブは、入力機器を接続するのみであり、ＩＮデータを格納しＩＮデータを送信する構成となっている。
【００３１】
このスレーブ２０は、本発明との関係でいうと、ＭＰＵ２０ｄ内に乱数生成手段を備え、この乱数生成手段は、最初のフィールドバス上のキャリア検知のタイミングで値（乱数）を決定し、決定した乱数は、リセットされるまでその値をホールドする。この乱数の値をホールドするのは、ソフトウエア上のバッファに保持しても良いし、ＥＥＰＲＯＭ２０ｅに格納するようにしても良い。したがって、仮に異なるスレーブ２０に同一のノードアドレスを設定する二重アドレス状態が発生しても、その二重アドレスとなった複数のスレーブの乱数の値が一致する可能性はきわめて低くなる。
【００３２】
さらに、マスタユニット１２から送られてくる自己宛てのステータスリードを受け取ると、自己のノードアドレスとともに上記ホールドしている乱数を含むステータスリードレスポンスを発行し、マスタユニット１２に返送する機能を有する。
【００３３】
さらにまた、ステータスリードレスポンスを受信したマスタユニット１２は、後述するように、取得したステータスリードレスポンスに書き込まれた乱数を含むステータスライトを、ステータスリードレスポンスを発行したスレーブのノードアドレスに向けて出力するので、そのレスポンスの送信先ノードアドレスを持つスレーブは、係るステータスライトを受信し、それに含まれている乱数と自己が保有している乱数をチェックする。
【００３４】
そして、スレーブ２０は、受信した送信フレームの内容からフィールドバスに対する加入状態（加入ステータス）を判断し、その判断した加入ステータスを記憶保持する機能を有する。すなわち、ステータスリードレスポンスを送信にもかかわらず、自己宛のノードアドレスのステータスライトが受信できなかった場合には、マスタユニット１２がそのノードアドレスのスレーブを認識していないと判断できるので、加入ステータスは「未加入ノード」となる。なお、この加入ステータスの初期値は、「未加入ノード」である。
【００３５】
このように「未加入ノード」となった場合、単に通信エラーによりマスタユニット１２がスレーブを認識できない可能性もあるが、複数回ステータスリードレスポンスを発行しても「未加入ノード」の状態のままであると、複数のスレーブが同時にステータスリードレスポンスを発行したことによりマスタユニット１２がステータリードレスポンスを認識できない、つまり、二重アドレスが発生している可能性があるといえる。
【００３６】
また、自己宛のノードアドレスのステータスライトを受信し、それに含まれている乱数が自己が保有するものと一致する場合には、マスタユニット１２が自己を認識したと判断できるので、加入ステータスは「加入済みノード」となる。これにより、このスレーブは、フィールドバスに正式に加入でき、以降マスタユニット１２とＩ／Ｏデータの送受が可能となる。
【００３７】
そして、自己宛のノードアドレスのステータスライトを受信し、それに含まれている乱数が自己が保有するものと一致しなかった場合には、二重アドレスを生じているとともにマスタユニット１２が同一のノードアドレスを持つ他のスレーブを認識し、自己を認識しなかったと判断できるので、加入ステータスは「二重アドレスで待機中」となる。
【００３８】
このように、各スレーブ２０は、自己の加入ステータスを保持しているので、マスタユニット１２は、各スレーブ２０が持つ加入ステータスを認識することにより、二重アドレスの発生の有無並びにどのノードアドレスが二重アドレスを発生しているかを検出することができる。
【００３９】
次に、上記した処理を実行するためのマスタユニット１２並びにスレーブ２０の具体的な処理機能を説明する。まず、マスタユニット１２並びにスレーブ２０が発行するコマンドは、以下のようになっている。
【００４０】
図４に示すように、本プロトコルの通信サイクルの開始タイミングはマスタ局であるマスタユニット１２が管理する。そして、通信サイクルはＯＵＴ＿ｆｒａｍｅから始まり，複数のＣＮ＿ｆｒａｍｅ，ＥＶＥ＿ｆｒａｍｅ，ＩＮ＿ｆｒａｍｅとつづく。マスタユニットと各スレーブとの間の通信サイクルの開始タイミングは、ＯＵＴ＿ｆｒａｍｅの正常受信完了をもって合わせられる。つまり通信同期のタイミングをＯＵＴ＿ｆｒａｍｅの正常受信完了タイミングとしているわけである。そして、それにつづくＣＮ＿ｆｒａｍｅ，ＥＶＥ＿ｆｒａｍｅ，ＩＮ＿ｆｒａｍｅのそれぞれのフレーム内容（通信データサイズ、通信タイミング、通信サイクルなど）は常に固定になっているので、各フレームの送信タイミングは、ＯＵＴ＿ｆｒａｍｅの正常受信完了を開始タイミングとして予め定められた時間監視により行う。
【００４１】
ここで、ＯＵＴ＿ｆｒａｍｅは、マスタユニット１２からスレーブ２０へのＯＵＴデータ転送用フレームであって、このＯＵＴ＿ｆｒａｍｅに各スレーブに対して送信するＯＵＴデータが含まれている。また受信する側の各スレーブ２０にとっては、このＯＵＴ＿ｆｒａｍｅが通信サイクルの開始を表すフレームとなる。つまり、各スレーブ２０はこのＯＵＴ＿ｆｒａｍｅの受信完了時点から計時を開始すべく内部カウンタを起動（タイマ起動）し、予め設定したそれぞれの送信タイミングで所定のフレームをマスタユニット１２に対して送信する。
【００４２】
そして、ＯＵＴ＿ｆｒａｍｅのデータ構造は、図５に示すようになっている。すなわち、ＯＵＴ＿ｆｒａｍｅは、「フレームヘッダ」と、マスタユニット１２から所定のスレーブ（ＯＵＴスレーブ）２０へ送る出力データである「ＯＵＴデータ」と、フレームチェックシーケンスである「ＣＲＣ」からなる。さらに、フレームヘッダは、フレームの開始を示す「スタート」と、フレームの識別コード（プロトコル制御コード）を示す「コマンド」と、接続確認したいスレーブのノードアドレス（ＣＮ＿ｆｒａｍｅの要求）を登録する「ＣＮ＿ｆｒａｍｅ送信要求アドレス」と、イベントフレームを送信許可するノードアドレスを登録する「ＥＶＥＮＴ送信許可アドレス」と、各スレーブでのＯＵＴデータ位置とＩＮフレーム送出位置の登録バージョンを登録する「ドメインバージョン」と、ＯＵＴデータのデータ長を登録する「レングス」とを備えている。
【００４３】
さらに、「コマンド」には、本発明との関係で言うと、ＯＵＴデータのリフレッシュの許可／禁止を指示するコマンドがある。また、接続確認フレーム送信要求モードと、ステータスリード強制要求モードと、接続確認フレームの送信確率（スレーブ側レスポンスが７５％）と、ステータスリード強制要求のレスポンス送信確率（スレーブ側レスポンスが７５％）設定有効フラグがある。
【００４４】
接続確認フレーム送信要求モードは、加入ステータスに対応して「加入済みスレーブへの要求」，「未加入スレーブへの要求」，「二重アドレス検知スレーブへの要求」の３種類を識別するコードである。また、ステータス強制要求モードは、スレーブに対してＥＶＥ＿ｆｌａｍｅの発行を要求するもので、「加入済みスレーブへの要求」，「二重アドレス検知スレーブへの要求」の２種類を識別するコードである。さらに、接続確認フレームの送信確率（スレーブ側レスポンスが７５％）設定有効フラグ（１／０）と、ステータスリード強制要求のレスポンス送信確率（スレーブ側レスポンスが７５％）設定有効フラグ（１／０）がある。なお、この各送信確率の設定有効フラグは、スレーブがレスポンスを送信する確率を設定するもので、有効フラグが１の時は、７５％の確率でレスポンスを返し、有効フラグが０の時は、１００％の確率でレスポンスを返すようになる。
【００４５】
ＣＮ＿ｆｒａｍｅは、ネットワークに接続されているかどうかを確認するための接続確認用フレームである。すなわち、ＯＵＴ＿ｆｒａｍｅ中のＣＮ＿ｆｒａｍｅ送信要求アドレスで指定されたスレーブが、レスポンスして返送するフレームであり、図６に示すようなデータ構造をとっている。ここで、「スタート」はフレームの開始を示すもので、「コマンド」はフレーム識別コード，プロトコル制御コードであり、「送信元アドレス」はこのＣＮ＿ｆｒａｍｅを送信したスレーブに設定された送信元アドレスであり、「ＣＲＣ」はフレームチェックシーケンスである。そして、「コマンド」には、加入ステータスの３つの状態のどれかを特定する２ビットのコードが格納される。
【００４６】
ＥＶＥ＿ｆｒａｍｅは、通信サイクル中のメッセージデータ転送フレームである。いつどのノードが転送するかはマスタが決定し、ＯＵＴ＿ｆｒａｍｅ中のＥＶＥＮＴ送信許可アドレスに格納するノードアドレスで通知する。このフレームのデータ構造は、図７に示すようになっている。ここで、「スタート」はフレームの開始を示すもので、「コマンド」はフレーム識別コード，プロトコル制御コードであり、「宛先アドレス」はこのイベントデータを送信する宛先アドレスであり、「送信元アドレス」はこのイベントデータを送信したノードに設定された送信元アドレスであり、「レングス」は送信するイベントデータのデータ長であり、「イベントデータ」は送信する内容であるイベントデータであり、「ＣＲＣ」はフレームチェックシーケンスである。
【００４７】
さらに、「コマンド」には、本発明との関係で言うと、マスタユニットが使用する「ステータスライト要求」と、そのステータスライト要求に対する「ＡＣＫレスポンス」や「ＢＵＳＹ」（スレーブのみ使用）がある。また、「加入済スレーブへのステータスリード要求」と、「未加入スレーブへのステータスリード要求」と、「二重アドレス検知スレーブへのステータスリード要求」がある。これらのステータスリード要求は、いずれもマスタユニットのみが使用する。
【００４８】
さらに、「レスポンス確率設定有効での未加入スレーブへのステータスリード要求」と、「レスポンス確率設定有効での二重アドレス検知スレーブへのステータス情報読出し要求」がある。これらの読み出し要求は、いずれもマスタユニットのみが使用する。
【００４９】
さらにまた、上記以外のコマンドとして、スレーブのみが使用するものとしては、上記した各ステータスリードに対する「ＡＣＫレスポンス」な「ＢＵＳＹレスポンス」がある。
【００５０】
ＩＮ＿ｆｒａｍｅは、スレーブからマスタへのＩＮデータ転送用フレームである。どのスレーブがいつＩＮ＿ｆｒａｍｅを転送するかは、バスイニシャライズ時にマスタが設定する。なお、このＩＮ＿ｆｒａｍｅは、実際のＩＯデータの送受の際に利用するもので、従来と同様であるので、詳細な説明を省略する。
【００５１】
そして、本実施の形態では、マスタユニット１２とスレーブ２０の間で上記した各種のフレームを送受することにより、二重アドレス発生を検知する。すなわち、図８に示すように、マスタユニット１２は、ＥＶＥ＿ｆｒａｍｅにより、アドレスを順次変えながらステータスリード要求をする（▲１▼）。このとき、全ての加入ステータスに対して逐次ステータスリード要求を発行するようにしても良いし、未加入スレーブに対してのみステータスリード要求をするようにしても良い。
【００５２】
このステータスリード要求を受けた該当するノードアドレス（例えば＃０）のスレーブは、ステータスリードに対するレスポンスを返すが、このとき、自己のアドレスとともにスレーブ２０が持つ乱数を付加する（▲２▼）。すると、二重アドレスを生じている場合には、複数のレスポンスがネットワーク（フィールドバス）上を伝送されるため衝突を生じる。そのため、いずれか１つのレスポンスのみがマスタユニット１２に受信されるか、或いは全てのレスポンスが受信されない。
【００５３】
マスタユニット１２がレスポンスを受信すると、マスタユニット１２は、ＥＶＥ＿ｆｒａｍｅにより、受信したアドレスを送信先アドレスとし、ステータスライトのコマンドを発行する（▲３▼）。このとき、受信した乱数も付加する。このステータスライトは、送信先アドレスと一致するノードアドレスのスレーブ２０が受信する。図示の場合にはノードアドレス＃０を持つ２つのスレーブ２０がそれぞれ受信する。
【００５４】
そして、乱数が一致するスレーブ２０は、ＥＶＥ＿ｆｒａｍｅを用いてマスタユニット１２に対してステータスライトに対するレスポンスを返す（▲４▼）。このレスポンスも乱数付きである。そして、このレスポンスをマスタユニットが受信することにより、ノードアドレス＃０が存在し、ネットワークに加入していることが確認できる。また、スレーブ２０は、上記したレスポンスを返すとともに、ステータスライト要求に伴い初期値が未加入スレーブの加入ステータスを加入済みスレーブに変更する。
【００５５】
また、乱数が一致しないスレーブ２０は、二重アドレスが発生しているとともに、他のスレーブがマスタユニット１２に認識されたことが理解できる。よって、内部初期化をするとともに二重アドレス異常状態になる。つまり、初期値が未加入スレーブの加入ステータスを二重アドレスで待機中に変更する。また、ネットワークへは加入できず、ステータスライトレスポンスも返さない。また、異常状態であるので、ＬＥＤ表示部２０Ｆを点灯させ、二重アドレスにより待機中であることを周囲に知らせるようにする。
【００５６】
なお、加入ステータスが加入状態となったスレーブ２０は、実際には、そのスレーブ２０のステータス情報／ＩＮデータリフレッシュ許可をイネーブルにすることでＩＮリフレッシュが開始され、ＯＵＴ＿ｆｒａｍｅのコマンドによってＯＵＴデータのリフレッシュが開始される。これにより、通常のＩ／Ｏデータの送受が行われる。
【００５７】
一方、マスタユニット１２がステータスリードに対してレスポンスがない場合、そのステータスリードを発したノードアドレスのスレーブが存在していない場合と、二重アドレスが発生しており、しかも、複数のスレーブから発せられるレスポンスが衝突し、いずれのレスポンスもマスタユニット１２に受信できなかった場合の両方がある。二重アドレスが発生している場合には、以下に示す処理を行うことにより、未加入のスレーブからのレスポンスを受信することが可能となる。
【００５８】
すなわち、ＯＵＴ＿ｆｒａｍｅを使ったＣＮ＿ｆｒａｍｅ送信確率付きの接続確認要求を行うか、ＥＶＥ＿ｆｒａｍｅを使ったステータスリードでレスポンス確率付きとすることで、未加入のスレーブからのレスポンスが受信できる可能性がある。つまり、スレーブ側でのＣＮ＿ｆｒａｍｅ送信確率とＥＶＥ＿ｆｒａｍｅを使ったステータスリード要求でのスレーブ側でのレスポンス送信確率を７５％とすることができる。そこで、７５％の確率付きとすることで、２５％の確率でスレーブはフレームを送信しないので、数回のステータスリード要求再送を行うなかで１つのノードだけがレスポンスを返す確率が高くなり、検出確率を向上させることができる。
【００５９】
そして、二重アドレスを発生している複数のスレーブの中の１つのみがフレームを送信する状態が発生した場合には、確実にその送信したフレームがマスタユニット１２に受信される。すると、上記した図８中（ｂ）に示すように、受信されなかった他のスレーブ２０は、二重アドレスによる待機状態となる。
【００６０】
次に、マスタ側での二重アドレス異常検知スレーブの認識手順について説明する。図９に示すように、まず、マスタユニット１２は、ＯＵＴ＿ｆｒａｍｅの接続確認フレーム送信要求モード（二重アドレス検知スレーブに対する要求）を発行する（▲１▼）。すると、該当スレーブ、つまり加入ステータスが二重アドレスで待機中のスレーブがＣＮ＿ｆｒａｍｅにより応答を返す。このＣＮ＿ｆｒａｍｅを受信することにより、マスタユニット１２は、該当アドレスで二重アドレスが発生していることを認識できる。
【００６１】
また、別の認識手順としては、図１０に示すように、マスタユニット１２は、ＯＵＴ＿ｆｒａｍｅの二重アドレス検知スレーブに対するステータスリード強制要求有りコマンドを発行する（▲１▼）。これにより、該当スレーブのステータス情報を得ることもできる（▲２▼）。
【００６２】
上記した二重アドレスの検知処理は、例えば図１１に示すフローチャートを実行することにより実施される。まず、ネットワーク初期化処理開始に伴い、ネットワークに存在しうる全てのスレーブに対し、確率付き接続確認フレーム送信要求をかける（ＳＴ１）。このとき、コマンドオプションとして「未加入ノードアドレスのみ応答」を付加することもできる。
【００６３】
この確率付き接続確認フレーム送信要求に対して応答のなかったスレーブは、（１）確率付きのシーケンスで応答となったが、他にも同じアドレスのスレーブからの応答があったため、フレームが衝突しフレームエラー；
（２）確率付きのシーケンスで無応答となった；
（３）ネットワークに存在しない；
（４）ノイズでフレームエラー：
（５）確率付きのシーケンスで無応答となった；
の可能性がある。
【００６４】
そこで、リカバリ手順として、応答のなかったノード全てに確率付き接続確認フレーム送信要求をかける（ＳＴ２）。このとき、「コマンドオプションとして未加入ノードアドレスのみ応答」を付加するとよい。確率付きにすることにより、マスタユニット１２がレスポンスを受信する可能性が高くなる。そして、応答のなかったノードの全てが応答するまで、このステップ２を繰り返し実行する。
【００６５】
全てが応答したならば、応答のあったスレーブに確率付きステータス読み出しコマンドを発行する（ＳＴ３）。「コマンドオプションとして未加入ノードアドレスのみ応答」を付加するとよい。
【００６６】
このステップ３の処理で応答のなかったスレーブは、
（１）確率付きのシーケンスで応答となったが、他にも同じアドレスのスレーブからの応答があったため、フレームが衝突しフレームエラー；
（２）ノイズでフレームエラー；
の可能性がある。
【００６７】
そこで、リカバリ手順として、このステップ３で応答のなかったノード全てに確率付きステータス読み出しコマンドを発行する（ＳＴ４）。このとき「コマンドオプションとして未加入ノードアドレスのみ応答」を付加するとよい。そして、応答のなかったノードの全てが応答するまで、このステップ４を繰り返し実行する。
【００６８】
全てが応答したならば、ＳＴ３で応答のあったスレーブの属性（ｉｎ，ｏｕｔ，点数，スレーブ固有の乱数を記録）を記録する（ＳＴ５）。次いで、ステップ３で応答のあったノード全てにステータス書き込みコマンドを乱数付きで発行する（ＳＴ６）。
【００６９】
そして、ステップ３で応答のあったノード全てに確率付きステータス読み出しコマンドを発行する（ＳＴ７）。このとき、「コマンドオプションとして二重アドレス検知スレーブのみ」とする。
【００７０】
このステップ７で応答のなかったスレーブは、
（１）ノイズでフレームエラー；
（２）二重アドレスノードが２つ以上存在する；
（３）確率付きのシーケンスで無応答となった；
の可能性がある。
【００７１】
そこで、ステップ７で応答のなかったノード全てに確率付きステータス読み出しコマンドを発行する（ＳＴ８）。このとき、「コマンドオプションとして二重アドレス検知スレーブのみ」とする。そして、応答のなかったノードの全てが応答するまで、このステップ７を繰り返し実行する。
【００７２】
全てが応答したならば、ステップ３で応答のあったノード全てにステータス読み出しコマンド発行（「コマンドオプションとして二重アドレス検知スレーブのみ応答」を付加）する（ＳＴ９）。そして、このステップ８で応答のあったノードを二重アドレス異常のノードとして記録する（ＳＴ１０）。
【００７３】
このようにして、乱数折り返しを使ったステータスリード→ステータスライトを行うことで、スレーブ側での二重アドレス検知が可能である。二重アドレス異常状態に遷移したスレーブは、二重アドレス異常検知スレーブ向けのステータスリードとＣＮ＿ｆｒａｍｅのみにレスポンスを返すだけで、ＩＯリフレッシュや他のイベント通信等は一切行わない。これにより、二重アドレスが設定された複数のスレーブの１つのみが正規に加入するため、安定した通信が行える。
【００７４】
また、スレーブは、マスタユニット１２からのステータス情報の読み出し、書き込みが終了するまでＩＯリフレッシュを実行しない。具体的には、ＩＮデータについては、スレーブ２０のステータス情報／ＩＮデータリフレッシュ許可がアサートされた時点でリフレッシュを開始し、ＩＮ＿ｆｒａｍｅを送出することが出来るようになる。また、ＯＵＴデータについては、ＯＵＴ＿ｆｒａｍｅ中のＯＵＴデータのリフレッシュ許可フラグによって、スレーブでのＯＵＴデータのリフレッシュ開始が許可される。
【００７５】
また、このようにしてマスタユニット１２は、二重アドレスの有無を含めたネットワーク構成を認識することができる。そして、以後通常のＩＯ情報の送受等を行うが、適宜のタイミングで、ネットワークの状態（加入ステータスの変更の有無等）を監視することができる。すなわち、マスタユニット１２は、▲１▼加入済みのスレーブが接続し続けているか，▲２▼新たなスレーブが接続されていないか等を監視する。
【００７６】
▲１▼加入済みのノードが接続し続けているか
マスタユニット１２から加入済みスレーブに対してだけに、加入済みスレーブに対する要求モードによる定期的なポーリング（ＯＵＴ＿ｆｒａｍｅにて）をかける。ポーリングを受けた加入済みのスレーブはＣＮ＿ｆｒａｍｅ（加入済みステータスを付加）をマスタに向け返送する。これにより、加入済みのノードが接続し続けているかを判定する。
【００７７】
▲２▼新たなノードが接続されていないか
電源立ち後れなどで諸記事にネットワークに加入できなかったスレーブが後から加入することがある。従って、マスタユニット１２から全スレーブに向け、未加入スレーブに対する要求モードによる定期的なポーリング（ＯＵＴ＿ｆｒａｍｅにて）をかける。ポーリングを受けたスレーブ（加入ステータスが「未加入スレーブ」）は、ＣＮ＿ｆｒａｍｅ（未加入ステータスを付加）をマスタに向けて返送する。
【００７８】
新たなスレーブの接続を検知したマスタは、そのスレーブに対してＥＶＥ＿ｆｒａｍｅによる加入勧誘を行い、電源投入時の初期処理と同様に、スレーブとの間で所定のフレームの送受を行う。そして、新たなスレーブは、加入ステータスが加入済みとなり、マスタユニット側ではメモリ割付けを行い、以後、通常のＩＯ情報の送受等が行われる。
【００７９】
【発明の効果】
以上のように、この発明では、スレーブに乱数を持たせ、マスタからのステータスリード要求に対してその乱数付きのレスポンスを返送し、そのレスポンスを受信したマスタは、受信した乱数を付加したステータスライト要求を発行するようにしたため、スレーブは、ステータスライト要求に付加された乱数と自己の乱数を比較することにより、二重アドレスが発生しているか否かを判断できる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態を示す図である。
【図２】マスタユニットの内部構造を示すブロック図である。
【図３】スレーブの内部構造を示すブロック図である。
【図４】通信サイクルにおいて送受されるフレームを示すフレームを示す図である。
【図５】ＯＵＴ＿ｆｒａｍｅのデータ構造を示す図である。
【図６】ＣＮ＿ｆｒａｍｅのデータ構造を示す図である。
【図７】ＥＶＥ＿ｆｒａｍｅのデータ構造を示す図である。
【図８】二重アドレス検知方法の一例を説明する図である。
【図９】二重アドレス検知方法の一例を説明する図である。
【図１０】二重アドレス検知方法の一例を説明する図である。
【図１１】二重アドレス検知方法の一例を示すフローチャートである。
【符号の説明】
１０  ＰＬＣ
１１  ＣＰＵユニット
１２  マスタユニット
１２ａ  通信インタフェース
１２ｂ  マスタ用ＡＳＩＣ
１２ｃ  ＲＡＭ
１２ｄ  ＭＰＵ
１２ｅ  ＥＥＰＲＯＭ
１２ｆ  ＬＥＤ表示部
１２ｇ  設定スイッチ
１２ｈ  インタフェース
２０  スレーブ
２０ａ  通信インタフェース
２０ｂ  スレーブ用ＡＳＩＣ
２０ｄ  ＭＰＵ
２０ｅ  ＥＥＰＲＯＭ
２０ｆ  ＬＥＤ表示部
２０ｇ  設定スイッチ
２０ｉ  電源部
２０ｊ  Ｉ／Ｏ部
３０  フィールドバス
【図１】
2004274395.tif 000003
【図２】
2004274395.tif 000004
【図３】
2004274395.tif 000005
【図４】
2004274395.tif 000006
【図５】
2004274395.tif 000007
【図６】
2004274395.tif 000008
【図７】
2004274395.tif 000009
【図８】
2004274395.tif 000010
【図９】
2004274395.tif 000011
【図１０】
2004274395.tif 000012
【図１１】
2004274395.tif 000013