次に、図1ないし図16により、本発明のいくつかの実施形態について説明するが、本発明はこれに限定されるものではない。
まず、図1に示すように、この実施形態に係る無線通信システムは、基本的に、1台のマスター機器10と、複数台のスレーブ機器20(20A,20B,…,20N)とにより構築される。
この実施形態において、スレーブ機器20は、所定の物理量を検出するデータロガー等と呼ばれる測定ユニット(子機)であり、マスター機器10は、各スレーブ機器20にて測定された測定データ(物理量)を収集して所定に処理する測定器本体(親機)である。
マスター機器10および各スレーブ機器20はともに無線通信モジュールを有し、双方向通信可能である。例えば、店舗やオフィス等として提供される室内の空調設計を行う場合、各スレーブ機器20は、温度測定用ユニットとして室内の天井,壁面および床面等に配置されるため、マスター機器10との通信はたかだか数メートル〜数百メートルの短距離無線でよい。
このような短距離無線通信には、2.4GHz帯の電波を利用した短距離無線通信手段として、例えばブルートゥース(Bluetooth:登録商標)とジグビー(Zigbee:登録商標)とがあるが、この実施形態ではブルートゥースを採用している。なお、ブルートゥースの場合、マスター機器10に対して同時に接続できるスレーブ機器20の台数に制約があり最大7台である。
マスター機器10は制御部として、各種の処理を行うメインの制御系CPU11と、無線通信モジュールを制御するモジュール内CPU12の2つのCPU(Central Processing Unit)を備え、両CPU11,12は双方向接続で、相互にデータ等の遣り取りが行われる。
また、マスタ機器10は、実時間を計時する内部時計111,外部インタフェース112,無線通信送受信部121およびネットワーククロックカウンタ122を備え、このうち、内部時計111と外部インタフェース112は制御系CPU11に属し、無線通信送受信部121とネットワーククロックカウンタ122はモジュール内CPU12に属している。
また、制御系CPU11は、スレーブ機器20から取得する測定データのデータ番号を計数するデータ番号カウンタ11aと、スレーブ機器20から取得する測定データ数を計数するデータ受信カウンタ11bとを備えている。
外部インタフェース112は、マスター機器10と、GPSの基準時刻系もしくは標準電波時計系等の絶対時刻発生手段である外部クロック校正手段30とを接続するインタフェースで、その接続は無線,有線の別を問わないが、その接続タイミング等は制御系CPU11により制御される。
各スレーブ機器20は同一構成で、マスター機器10と同じく制御部として、制御系CPU21と、無線通信モジュール制御用のモジュール内CPU22の2つのCPUを備えており、両CPU21,22は双方向接続で、相互にデータ等の遣り取りが行われる。
各スレーブ機器20は、測定系として、図示しないセンサからの測定データが入力される入力チャネルCH1〜CHnを択一的に選択するマルチプレクサ(切替スイッチ)211と、マルチプレクサ211にて選択された入力チャネルの測定データを所定に増幅する増幅器212と、増幅された測定データをデジタル値に変換するA/D変換器213とを備え、A/D変換された測定データが制御系CPU21に与えられる。測定データは、制御系CPU21のメモリに一時的に保存される。
また、制御系CPU21には、測定データのアドレスを計数するアドレスカウンタ21aと、制御系CPU21の基準クロックパルスを計数する計数カウンタ21bとが含まれている。
なお、上記センサには、測定対象に応じて電流センサ,電圧センサ,温度センサ等が適宜用いられる。また、センサは一つであってもよく、その場合、マルチプレクサ211は不要である。
また、各スレーブ機器20は、マスター機器10と同じく、無線通信送受信部221およびネットワーククロックカウンタ222を備え、これらはモジュール内CPU22に属している。
制御系CPU21のメモリに保存された測定データは、制御系CPU21からモジュール内CPU22を介して無線通信送受信部221に送られ、無線通信送受信部221よりマスタ機器10に向けて送信される。
図1に示すように、本発明においては、マスター機器10にのみ内部時計111が搭載され、各スレーブ20には内部時計が搭載されないが、無線ネットワークのネットワーククロックを同期ソースとして、マスタ機器10と各スレーブ機器20の同期をとるようにしている。
この実施形態では、上記したようにブルートゥースを採用していることから、同期ソースとして用いられるブルートゥースでのネットワーククロックについて、図2のタイミングチャートを参照して説明する。
ブルートゥースでは、2402〜2480MHzの周波数帯を1MHzずつ79の周波数帯に区分けし、図2に示すように、使用する周波数帯を625μsごとに疑似的にランダムに変化させながら通信を行う。これを周波数ホッピングと呼び、通信周波数f(k)は次式により表される。
通信周波数f(k)=2402+k(MHz)、但しk=0,1,2…78
ブルートゥースの規格によれば、1台のマスター機器10に接続できるスレーブ機器20の台数が最大7台として制限されており、ブルートゥースによる無線ネットワークは「ピコネット」と呼ばれている。
マスター機器10は、ピコネット内において同じ時間内に同じ周波数帯で通信できるようにピコネットを制御し、各スレーブ機器20は、マスター機器10の制御のもとで、マスター機器10に同期して通信する。
また、ブルートゥースでは、スロットと呼ばれる時間単位で通信が行われる。スロットとは、同じ周波数帯で通信する時間であり、その時間間隔は625μsである。一つのスロットの通信が終了すれば、スロット番号が逐次加算され、次の周波数帯にホッピングすることになる。
このスロット番号は、ブルートゥースクロックと呼ばれ、28ビットの値をとり、同一のピコネット内で共有される。ブルートゥースクロックが偶数のとき、マスター機器10からスレーブ機器20に対して通信が行われ、マスター機器10は、スレーブ機器20を指定して通信を開始する。
マスター機器10は、通信開始時に同期信号を送り、スレーブ機器20は、その同期信号に基づいてマスター機器10との同期をとる。マスター機器10は、同期信号の後にデータの内容を送信する。ブルートゥースクロックが奇数のとき、スレーブ機器20からマスター機器10に対して通信が行われ、スロットで指定されたスレーブ機器20がマスター機器10に対して通信する。
次に、ピコネット内同期について説明する。同一のピコネット内に存在するスレーブ機器20は、マスター機器10の周波数ホッピングパターンとブルートゥースクロックを共有することにより通信が可能になる。
周波数ホッピングパターンは、マスター機器10のブルートゥースデバイスアドレスとブルートゥースクロックとから一意に算出され、ピコネット構築の際に、マスター機器10から接続相手のスレーブ機器20にブルートゥースデバイスアドレスとブルートゥースクロックを与える。なお、ブルートゥースデバイスアドレスとは、スレーブ機器20を識別するために一意に与えられる48ビットのアドレスである。
スレーブ機器20では、与えられたアドレスとクロック値に基づいてホッピングパターンを算出し、そのホッピングパターンにてマスター機器10と通信可能となった時点でピコネットが形成される。このように、ピコネット内でマスター機器10を基準として周波数ホッピングパターンとブルートゥースクロックが共有されている状態をピコネット内同期という。
本発明において、マスター機器10と各スレーブ機器20は、概略次のような手順で交信が行われる。前提として、マスター機器10が各スレーブ機器20に対する動作実行時刻(この実施形態では測定開始時刻)を集中制御する。
マスター機器10は、無線ネットワーク(この実施形態ではブルートゥース)を介して複数台のスレーブ機器20と通信を行うにあたって、まず最初に、通信可能なスレーブ機器20を検索する。
検索が完了したら、所望のスレーブ機器20と通信の確立をはかる。そして、通信が確立すると、マスター機器10のネットワーククロック(ブルートゥースの場合、ピコネットクロック)のカウント値を各スレーブ機器20に与える。
以後、定期的(ブルートゥースの場合、625μsごと)に通信が行われ、その都度、マスター機器10から各スレーブ機器20に対してネットワーククロックのカウント値が送信され、マスター機器10と各スレーブ機器20との同期がとられる。
そして、各スレーブ機器20に同一時刻で一斉に測定を開始させる場合、マスター機器10は、その同期させたいタイミングのネットワーククロックのカウント値Xを各スレーブ機器20に対して送信するとともに、上記カウント値Xと内部時計111による実時間との相関を記憶する。
なお、各スレーブ機器20に対してブルートゥースの場合には625μsの時間間隔をもって順次送信されることから、上記カウント値Xは、その各スレーブ機器20に対する送信が一巡されるまでの時間を考慮して決められる。
各スレーブ機器20においては、常に自機のネットワーククロックのカウント値を監視し、自機のネットワーククロックのカウント値が上記カウント値Xに一致した時点で、指定された動作、すなわち図示しない被測定物の物理量の測定を開始する。
各スレーブ機器20は、上記被測定物の物理量の測定を完了したら、マスター機器10に測定完了を通知し、マスター機器10に測定データを送信する。
その際、通信トラフィックが重ならないように、各スレーブ機器20からマスター機器10への測定データの送信は、好ましくはマスター機器10からあらかじめ指定されたタイムスロットにしたがって行われる。
〔第1実施形態〕
次に、図3〜図7を参照して、本発明の第1実施形態の動作について説明する。まず、マスタ機器10の具体的な動作例を図3のフローチャートに沿って説明する。なお、マスタ機器10と各スレーブ機器20は、すでにブルートゥースにより通信が確立しているものとする。
初期のステップST100として、各スレーブ機器20に測定を開始させるかどうかの判断ステップがあり、測定を開始させると判断された場合、まず、次のステップST101で、内部時計111より実時間(M_Time)を読み出すとともに、ステップST102で、ネットワーククロックカウンタ122からそのクロックカウンタ値(M_NetCk)を取得する。
そして、ステップST103で、実時間(M_Time)とネットワーククロックカウンタ値(M_NetCk)との関連付けを行う。すなわち、ネットワーククロックカウンタ値(M_NetCk)から実時間(M_Time)が分かるように関連付ける。
その後、ステップST104で、測定開始時刻(M_TimeStt)に対応したネットワーククロック値(NetCkStt)を決める。測定開始時刻(M_TimeStt)は、スレーブ機器20で測定データの取り込みを開始させる時刻で、各スレーブ機器20に対して共通に割り当てられる。なお、測定開始時刻(M_TimeStt)は、各スレーブ機器20に測定開始の指示が行き渡った後の時刻とする。
また、ステップST105で、データ取得時刻(DtStgTime)に対応したネットワーククロック値(NetCkDtStg)を決める。このデータ取得時刻(DtStgTime)は、スレーブ機器20からマスタ機器10へ測定データを転送する時刻、すなわちマスタ機器10がスレーブ機器20から測定データを取得する時刻である。
そして、ステップST106で、まず測定開始時刻(M_TimeStt)を各スレーブ機器20に送信し、続いてデータ取得時刻(DtStgTime)を各スレーブ機器20に送信したのちに、ステップST107で、通信待機状態(スレーブ機器20からの送信(返信)待ち状態)に入る。
ステップST107の通信待機状態で、スレーブ機器20からの送信を受信すると、ステップST108で、その受信内容からスレーブ機器20側で送信準備ができているかどうかを判断し、送信準備OKであれば、ステップST109で、スレーブ機器20から送信される測定データを受信する。
なお、スレーブ機器20に対するデータ取得時刻(DtStgTime)は、通信トラフィックが重ならないように、データ送信時刻を各スレーブ機器20ごとに異ならせることが好ましい。
そして、ステップST110で、データ受信完了かどうかを判断し、受信完了であれば、ステップST111で、スレーブ機器20に測定を終了させるかどうかを判断し、測定を終了させない場合には、ステップST107に戻る。
測定を終了させる場合には、スレーブ機器20に測定停止のコマンド(Stop)を送信して、スレーブ機器20との通信を終了し、制御系CPU11は、各スレーブ機器20から収集された測定データを所定に処理し、その結果を図示しない表示器に表示したり、マスタ機器10に接続されている外部のパソコン等に送信する。
先に説明したように、マスタ機器10は、外部インタフェース112を介して外部クロック校正手段30と接続されており、内部時計111が外部クロック校正手段30からの基準パルスにより定期的もしくは不定期的に校正される。
すなわち、図4のフローチャートに示すように、制御系CPU11は、まずステップST301で、内部時計111を校正するかどうかを判断する。外部クロック校正手段30から例えば1秒間隔で基準パルスが送信されるとすると、制御系CPU11は、それに合わせて1秒間隔でステップST301を実行することが好ましいが、例えば2秒間隔等もしくは不定期的としてもよい。
内部時計111を校正する場合には、ステップST302で、外部クロック校正手段30から校正値としての基準パルス(Ext_Ck)を取得し、ステップST303で、その基準パルス(Ext_Ck)に基づいて内部時計111の実時間(M_Time)を校正する。
次に、マスタ機器10の別の動作例を図5のフローチャートに沿って説明する。この別の動作例では、外部クロック校正手段30からの基準パルスを受信した時点のネットワーククロック値により、データ取得時刻(DtStgTime)に対応したネットワーククロック値(NetCkDtStg)を決めるようにしている点で、先に説明した図3のフローチャートと異なっている。
図5のフローチャートにおいて、ステップST100〜ST104までは図3のフローチャートと同じであるが、この別の動作例では、ステップST104に続くステップST105aで、ステップST104で決定した測定開始時刻(M_TimeStt)に対応したネットワーククロック値(NetCkStt)を先にスレーブ機器20に送信する。
次にステップST105bで、外部クロック校正手段30からの基準パルスを受信したかどうかを判断し、基準パルスを受信すると、ステップST105cで、再度ネットワーククロックカウンタ122からそのクロックカウンタ値(M_NetCk)を取得する。
そして、このネットワーククロックカウンタ値(M_NetCk)をもとに、ステップST105dで、データ取得時刻(DtStgTime)に対応したネットワーククロック値(NetCkDtStg)を決め、ステップST106aで、データ取得時刻(DtStgTime)をスレーブ機器20に送信する。以後は、図3のフローチャートと同じく、ステップST107〜ST111を実行する。
この別の動作例によれば、基準パルスを受信した時点のネットワーククロックカウンタ値(M_NetCk)をもとにデータ取得時刻(DtStgTime)に対応したネットワーククロック値(NetCkDtStg)を決めるようにしたことにより、基準パルスにより校正された内部時計111の時間とデータ取得時刻とを一致させることができる。
次に、スレーブ機器20の動作例について、図6のフローチャートを参照しながら説明する。なお、マスタ機器10と各スレーブ機器20は、すでにブルートゥースにより通信が確立しているものとする。
まず、ステップST200の通信待機状態において、マスタ機器10からの送信を受信すると、ステップST201で、マスタ機器10からの送信が測定開始であるかどうかを判断し、測定開始でなければ当該ルーチンを終了する。
測定開始であれば、ステップST202で、マスタ機器10側のステップST104で決められた測定開始時刻(M_TimeStt)に対応したネットワーククロック値(NetCkStt)を自機の例えばモジュール内CPU22に設定したのち、ステップST203で、自機のネットワーククロックカウンタ222からネットワーククロックカウンタ値(S_NetCk)を取得する。
そして、ステップST204で、S_NetCk=NetCkSttであるかどうかを判断する。すなわち、マスタ機器10より指定された測定開始時刻(M_TimeStt)になったかどうかを判断する。
ステップST204での判断がYESで、マスタ機器10より指定された測定開始時刻(M_TimeStt)になると、ステップST205で、モジュール内CPU22から制御系CPU21に測定開始の指示が出され、制御系CPU21は、図示しないセンサにて測定された被測定対象の測定データの取り込みを開始しメモリに保存する。
次に、ステップST206で、マスタ機器10側のステップST105(もしくはステップST105d)で決められたデータ取得時刻(DtStgTime)に対応したネットワーククロック値(NetCkDtStg)を自機の例えばモジュール内CPU22に設定したのち、ステップST207で、自機のネットワーククロックカウンタ222から再度ネットワーククロックカウンタ値(S_NetCk)を取得する。
そして、ステップST208で、S_NetCk=NetCkDtStgであるかどうかを判断する。すなわち、マスタ機器10より指定されたデータ取得時刻(DtStgTime)になったかどうかを判断する。
ステップST208での判断がYESで、マスタ機器10より指定されたデータ取得時刻(DtStgTime)になると、ステップ209で測定データを取得し、マスタ機器10に対する測定データの送信を用意する。
続くステップST210で、送信データの用意が完了したかどうかを判断する。送信データの用意が完了していなければ、その用意が完了するまで待つが、送信データの用意が完了していれば、ステップST211で、測定データをマスタ機器10に送信する。
そして、ステップST212で、マスタ機器10へのデータ送信が完了したかどうかを判断し、データ送信が完了したならば、ステップST213で、測定終了かどうかを判断し、YESであれば当該ルーチンを終了し、NOであればステップST206に戻る。
次に、スレーブ機器20の別の動作例について、図7のフローチャートを参照しながら説明する。この別の動作例では、測定開始時刻と現在時刻との時間差を算出し、その時間差が経過した時点で、測定を開始するようにしている点で、先に説明した図6のフローチャートと異なっている。
図7のフローチャートにおいて、ステップST200〜ST203までは、図6のフローチャートと同じであるが、この別の動作例によると、ステップST203で、自機のネットワーククロックカウンタ222からネットワーククロックカウンタ値(S_NetCk)を取得したのちのステップST204aにおいて、次の動作を実行する。
すなわち、ステップST204aでは、ステップST202で設定された測定開始時刻(M_TimeStt)に対応したネットワーククロック値(NetCkStt)と、ステップST203で取得したネットワーククロックカウンタ値(S_NetCk)との時間差(Diff Time)を算出する。すなわち、Diff TimeをNetCkStt−S_NetCkにより算出する。
このようにして、時間差(Diff Time)を算出したのち、ステップST204bにおいて、時間差(Diff Time)を制御系CPU21が備えている内部クロック計数手段のカウント値(Int Cnt)に変換する。
そして、次段のステップST204cで、制御系CPU21の計数手段のカウントを開始し、続くステップST204dで、そのカウント値(Int Cnt)=時間差(Diff Time)となったかどうかを判断する。すなわち、測定開始時刻(M_TimeStt)になったかどうかを判断する。
その結果がYESで、測定開始時刻(M_TimeStt)になると、先に説明した図6のフローチャートと同じく、ステップST205〜ST213までが実行され、スレーブ機器20にて測定された測定データがマスタ機器10に向けて送信される。
〔第2実施形態〕
次に、図8〜図16を参照して、本発明の第2実施形態の動作について説明する。この第2実施形態においても、図1に示したマスタ機器10およびスレーブ機器20が用いられるが、この第2実施形態では、上記第1実施形態に対してマスタ機器10から各スレーブ機器20に対してサンプリングクロックの補正をかける点が加味され、また、マスタ機器10およびスレーブ機器20の動作についても改良が加えられている。
サンプリングクロックの補正の必要性について説明すると、測定を開始させるにあたって、マスタ機器10から各スレーブ機器20にネットワーククロックを基準としたサンプリング間隔が指定されるが、各スレーブ機器20側では、制御系CPU21とネットワーククロックカウンタ222との間でネットワーククロックを遣り取りするのに時間がかかる。
そこで、各スレーブ機器20側では、サンプリング間隔を制御系CPU21の内部クロック基準に換算して、その内部クロックのカウント値でサンプリングを行うようにしているが、経時的にマスタ機器10から指定されたサンプリング間隔とずれが生じ、また、スレーブ機器20の相互間でも、それらの内部クロックにずれがあるため、同一時刻で測定データをサンプリングするように、適宜サンプリングクロックを補正する必要がある。
まず、第2実施形態におけるマスタ機器10の具体的な動作例を図8のフローチャートに沿って説明する。なお、マスタ機器10と各スレーブ機器20は、すでにブルートゥースにより通信が確立しているものとする。
マスタ機器10から各スレーブ機器20に測定開始の指示を与えるあたって、まず、ステップST301で、内部時計111より実時間(M_Time)を読み出したのち、ステップST302で、ネットワーククロックカウンタ122から、現在のネットワーククロックカウンタ値(M_NetCk)を取得する。
そして、ステップST303で、実時間(M_Time)とネットワーククロックカウンタ値(M_NetCk)との関連付けを行う。すなわち、ネットワーククロックカウンタ値(M_NetCk)から実時間(M_Time)が分かるように関連付ける。
そして、次のステップST304で、測定開始時刻に対応したネットワーククロック値(Tstt)と、サンプリング間隔に対応したネットワーククロック基準の値(Tsamp)と、測定開始データ番号(SNstt)とを決定する。
測定開始時刻(Tstt)は、ネットワーククロックカウンタ122から現在のネットワーククロック値(Tnow)を取得し、各種処理時間や通信時間等を考慮した余裕時間(Tadd1)を算出して、(Tstt)=(Tnow+Tadd1)として決められる。
サンプリング間隔に対応したネットワーククロック基準の値(Tsamp)は、サンプリング間隔がネットワーククロック値の何カウント分に相当するかの値であり、以下の説明において、サンプリング間隔を(Tsamp)と言うことがある。
また、測定開始データ番号(SNstt)は、通常は「0」であるが、例えばマスタ機器10とスレーブ機器20との間の通信が一時的に途絶え、再開されたときに、改めて測定開始データ番号が指定されること等を考慮して、拡張性を持たせるために自由度の高い選択肢を持たせている。
そして、次のステップST305で、データ番号カウンタ11aのデータ番号(SNdt)に測定開始データ番号(SNstt)をセット(SNdt=SNstt)したのち、ステップST306で、各スレーブ機器20に対して測定開始コマンド(Start)が送信される。この測定開始コマンド(Start)には、測定開始時刻(Tstt)と測定開始データ番号(SNstt)とサンプリング間隔(Tsamp)とが含まれる。
続くステップST307で、サンプリング間隔(Tsamp)を補正するかどうかの判定がなされる。その結果がYESで補正する必要がある場合には、ステップST308aに移行し、まず、そのときのネットワーククロックカウンタ値(M_NetCk)を取得する。
そして、次段のステップST308bで、サンプリングクロックの補正をかけるネットワーククロック値(Tsync)および補正をかけるデータ番号(SNsync)を決定する。
そして、ステップST308cで、ネットワーククロック値(Tsync)とデータ番号(SNsync)とを含む同期コマンド(Sync)を各スレーブ機器20に送信したのち、ステップST307に戻る。
このステップST308bで、補正をかける時刻(ネットワーククロック値(Tsync))を決めるには、ネットワーククロックカウンタ122から現在のネットワーククロック値(Tnow)を取得するとともに、各種処理時間を考慮したN秒分のネットワーククロック値(Tadd2)を算出し、補正時刻に相当するネットワーククロック値(Tsync)を、(Tsync)=(Tnow)+(Tadd2)より得る。
また、補正をかけるデータ番号(SNsync)を決めるには、データ番号カウンタ11aから現在の最新データ番号(SNnow)を取得し、補正をかける時刻で算出したN秒分のネットワーククロック値(Tadd2)をサンプリング間隔(Tsamp)で除算し、その値を最新データ番号(SNnow)に加算して、N秒後に補正をかけるデータ番号(SNsync)を得る。
上記ステップST307での結果がNOで、サンプリング間隔(Tsamp)を補正しない場合には、ステップST309で、スレーブ機器20に対して測定データの受信を要求するかどうかの判断が行われる。
その結果が、NOで測定データの受信を要求しない場合には、ステップST307に戻るが、要求するYESの場合には、ステップST310で、データ受信カウンタ11bをクリア(DTnum=0)したうえで、次段のステップST311で、データ取得コマンド(GetData)をスレーブ機器20に送信する。
このデータ取得コマンド(GetData)には、取得する先頭データ番号(SNtrsst)と最終データ番号(SNtrstop)とが含まれ、取得する測定データが1つだけの場合は(SNtrsst)=(SNtrstop)になる。
データ取得コマンド(GetData)の送信後にスレーブ機器20からマスタ機器10に測定データが送信されるが、ステップST312で、測定データの受信が完了したかが判断され、受信中であれば、ステップST312aで、受信した測定データの数に応じてデータ受信カウンタ11bをカウントアップ(DTnum=DTnum+1)する。
測定データの受信が完了すると、ステップST313で、データ番号カウンタ11aのデータ番号(SNdt)を更新(SNdt=SNdt+DTnum)したのち、ステップST314で、測定終了かが判断される。その結果がNOで測定を終了しない場合には、ステップST307に戻り、YESで測定を終了する場合には、ステップST315で、スレーブ機器20に測定停止コマンド(Stop)を送信する。
次に、この第2実施形態におけるマスタ機器10の別の動作例を図9のフローチャートに沿って説明する。この別の動作例は、上記第1実施形態で説明した図5の動作例(外部基準パルスによるサンプリングの同期)に対応している。
このマスタ機器10の別の動作例では、まず第1ステップST300で、外部クロック校正手段30からの基準パルスを受信したかどうか判断され、基準パルスを受信すると、その基準パルスの受信時点ごとに、スレーブ機器20に対して測定開始の指示が出されることから、サンプリング間隔(サンプリングクロック(Tsamp))の補正は不要である。
したがって、このマスタ機器10の別の動作例に係る図9のフローチャートでは、先に説明した図8のフローチャートから、サンプリングクロックを補正するかどうかのステップST307と、YES(補正する)の場合に実行されるステップST308a〜ST308cまでが削除されている。
すなわち、このマスタ機器10の別の動作例では、図9のフローチャートに示すように、まず最初の第1ステップST300で、外部クロック校正手段30からの基準パルスが受信されると、ステップST301(内部時計111より実時間(M_Time)の読み出し)〜ステップST306(測定開始コマンド(Start)の送信)までが実行され、その後において、ステップST309(測定データの受信要求)〜ステップST315(測定停止コマンド(Stop)の送信)までが実行される。
なお、このマスタ機器10の別の動作例の場合、ステップST304では、測定開始時刻に対応したネットワーククロック値(Tstt)と、測定開始データ番号(SNstt)とが決定されればよく、サンプリング間隔に対応したネットワーククロック基準の値(Tsamp)については決定する必要がない。
次に、図10〜16により、第2実施形態におけるスレーブ機器20の動作について説明する。
まず、図10を参照して、スレーブ機器20の基本的な動作であるコマンド処理フローについて説明する。ステップST401でのマスタ機器10との通信待機状態で、受信有りの場合には、ステップST402で、その受信内に、測定開始コマンド(図8,図9のステップST306より送信される測定開始時刻(Tstt),測定開始データ番号(SNstt),サンプリング間隔(Tsamp)を含むコマンド)があるかどうかが判断され、YESで測定開始コマンドがある場合には、ステップST402aで「測定開始フラグ」をセットしたのち、ステップST401に戻る。
なお、この実施形態において、フラグがセットされていない場合、フラグ領域には「0」が書き込まれるが、フラグがセットされると、フラグ領域は「1」となる。
ステップST402での判断がNOで、測定開始コマンドがない場合には、次段のステップST403に進み、受信内にサンプリング同期補正コマンド(図8のステップST308cより送信される補正をかけるネットワーククロック値(Tsync)とデータ番号(SNsync)を含むコマンド)があるかどうかが判断され、YESでサンプリング同期補正コマンドがある場合には、ステップST403aで「サンプリング同期フラグ」をセットしたのち、ステップST401に戻る。
ステップST403での判断がNOで、サンプリング同期補正コマンドがない場合には、次のステップST404に進み、受信内にデータ送信要求コマンド(図8,図9のステップST311より送信される取得する先頭データ番号(SNtrsst)と最終データ番号(SNtrstop)含むコマンド)があるかどうかが判断され、YESでデータ送信要求コマンドがある場合には、ステップST404aで「データ送信開始フラグ」をセットしたのち、ステップST401に戻る。
ステップST404での判断がNOで、データ送信要求コマンドがない場合には、次のステップST405に進み、受信内に測定停止コマンド(図8,図9のステップST315より送信される測定停止コマンド(Stop))があるかどうかが判断され、YESで測定停止コマンドがある場合には、ステップST405aで「測定終了フラグ」をセットしたのち、ステップST401に戻る。
上記各ステップST402〜ST405で、その判断がいずれもNOである場合には、ステップST406に移行し、他のコマンド処理があれば、その処理を行ってステップST401に戻る。
なお、上記各ステップST402a〜ST405aでフラグをセットしたのち、ステップST401に戻しているのは、マスタ機器10から上記各コマンドが一辺に続けて送信されることがないためである。
次に、図11と図12を参照して、この第2実施形態におけるスレーブ機器20の測定開始処理フローの2例について説明する。
図11は、制御系CPU21でネットワーククロックカウンタ222のカウント値(S_NetCk)を定期的に読み出し、そのカウント値(S_NetCk)がマスタ機器10から送信された測定開始時刻(Tstt)と一致した場合に、測定を開始させる処理フローである。
まず、ステップST410で、「測定開始フラグ」が「1」にセットされたことを検知すると、次のステップST411で、次の測定開始処理に備えて「測定開始フラグ」をクリア「0」としたうえで、ステップST412で、ネットワーククロックカウンタ222から現在のネットワーククロックのカウント値(S_NetCk)を取得する。
そして、ステップST413で、ネットワーククロックのカウント値(S_NetCk)が、マスタ機器10から送信された測定開始時刻(Tstt)と一致(S_NetCk=Tstt)したかどうかを判断し、一致していない場合には、ステップST412を繰り返し実行して、ネットワーククロックのカウント値(S_NetCk)を取得する。
ネットワーククロックのカウント値(S_NetCk)と測定開始時刻(Tstt)とが一致すると、ステップST414で、「データサンプリング開始フラグ」を1にセットして、この測定開始処理を終了する。
図12は、測定開始時刻(Tstt)とネットワーククロックのカウント値(S_NetCk)との差分(Tsttdiff)を算出し、この差分(Tsttdiff)を制御系CPU21の内部クロック基準で計時して、測定を開始させる処理フローである。
図11のステップST410〜ST412と同じく、ステップST420で、「測定開始フラグ」が「1」にセットされたことを検知すると、次のステップST421で、次の測定開始処理に備えて「測定開始フラグ」をクリア「0」としたうえで、ステップST422で、ネットワーククロックカウンタ222から現在のネットワーククロックのカウント値(S_NetCk)を取得する。
そして、ステップST423で、測定開始時刻(Tstt)とネットワーククロックのカウント値(S_NetCk)との差分(Tsttdiff)を算出し、この差分(Tsttdiff)から制御系CPU21の内部クロック基準の時間差(CNTsttdiff)を計算する。この時間差(CNTsttdiff)は、差分(Tsttdiff)に相当する制御系CPU21の内部クロックの計数値である。
続くステップST424で、計数カウンタ21bにて制御系CPU21の内部クロックのカウントを開始させる。なお、ここで用いる内部クロックは、制御系CPU21のシステムクロックを所定の分周したクロックであってもよい。
そのカウント値の変数を(IntCnt)として、ステップST425で、カウント値(IntCnt)が差分(Tsttdiff)になるまで待ち、(IntCnt)=(Tsttdiff)になった時点、すなわち測定開始時刻(Tstt)になった時点で、ステップST426で、「データサンプリング開始フラグ」を1にセットし、計数カウンタ21bのカウント値(IntCnt)をクリア(IntCnt=0)して、この測定開始処理を終了する。
次に、図13を参照して、この第2実施形態におけるスレーブ機器20のデータサンプリング処理フローについて説明する。このデータサンプリング処理は、図11もしくは図12の測定開始処理後に実行される。
まず、ステップST501で、「データサンプリング開始フラグ」が「1」にセットされたことを検知すると、次のステップST502で、次のデータサンプリング処理に備えて「データサンプリング開始フラグ」をクリア「0」としたうえで、ステップST503で、アドレスカウンタ21aに書き込まれる測定データのアドレス番号(ADRcnt)に、マスタ機器10から送信された測定開始データ番号(SNstt)をセットして、(ADRcnt)=(SNstt)とする。通常は、(SNstt)=0であるから、(ADRcnt)にも「0」が書き込まれる。
そして、ステップST504で、計数カウンタ21bのカウント値(IntCnt)をクリア(IntCnt=0)したのち、ステップST505で、「サンプリング同期フラグ」が「1」にセットされているかどうかの判断が行われる。
まず、ステップST505での判断がNOで、「サンプリング同期フラグ」がセットされていない場合について説明する。この場合には、ステップST506aで、サンプリング間隔(Tsamp)を、制御系CPU21の内部クロック基準の時間差(CNTsampintv)として計算する。換言すれば、サンプリング間隔(Tsamp)が、制御系CPU21の内部クロックのカウント値で何カウントに相当するかを計算する。
そして、ステップST506bで、時間差(CNTsampintv)をカウント変数値(CNTintdiff)に置き換えて、ステップST508に移行して、計数カウンタ21bで内部クロックのカウントを開始させる。
カウント開始に伴い、ステップST509で、第1回目の測定データをサンプリングし、ステップST510で、その測定データを書込アドレスADRwr=ADRcntとして制御系CPU21の内部メモリに書き込み、ステップST511で、アドレスカウンタ21aのアドレス番号(ADRcnt)をカウントアップ(ADRcnt=ADRcnt+1)する。
そして、ステップST512で、先のステップST508でカウントを開始させた計数カウンタ21bのカウント値(IntCnt)が、時間差(CNTsampintv)に相当するカウント変数値(CNTintdiff)になるまで待ち、(IntCnt)=(CNTintdiff)になった時点で、ステップST513で、「測定終了フラグ」が「1」にセットされているかどうかを判断する。
その結果がNOで「測定終了フラグ」が「1」にセットされていなければ、データサンプリング続行として、ステップST504に戻り、ステップST505を経てステップST506に至り、「サンプリング同期フラグ」がセットされていなければ、上記と同様に、ステップST506a→ST506b→ST508〜ST512の手順を実行し、ステップST509で第2回目の測定データをサンプリングする。これを「測定終了フラグ」が「1」にセットされるまで繰り返す。
これに対して、ステップST505での判断がYESで、「サンプリング同期フラグ」がセットされている場合には、ステップST507aに移行し、ネットワーククロックカウンタ222から現在のネットワーククロックのカウント値(S_NetCk)を取得する。
そして、次段のステップST507bで、マスタ機器10から送信された補正をかける時刻(ネットワーククロック値(Tsync))と、現在のネットワーククロックのカウント値(S_NetCk)との差分(Tsyncdiff)を算出し、この差分(Tsyncdiff)から制御系CPU21の内部クロック基準の時間差(CNTsyncdiff)を求める。すなわち、現在時点から何秒後に、サンプリング補正としての同期をかけるかの時間を算出する。
次に、ステップST507cで、時間差(CNTsyncdiff)を、上記ステップST506bと同じく、カウント変数値(CNTintdiff)に置き換えたのち、上記ステップST508以降を実行する。
その過程の中で、ステップST509で、測定データをサンプリングし、ステップST512で、(IntCnt)=(CNTintdiff)になった時点(Tsync時点)で、次のデータサンプリングを行うため、ステップST513経て、ステップST504に戻り(IntCnt=0)としたうえで、ステップST508で、(IntCnt)のカウントが開始される。このようにして、サンプリング同期補正が行われる。
なお、ステップST513で、「測定終了フラグ」が「1」にセットされたと判断すると、ステップST514で、次のデータサンプリング処理に備えて、測定終了フラグをクリア「0」にして、当該データサンプリング処理を終了する。
ここで、スレーブ機器20A,20Bの2台を例にして、サンプリング同期を行わない場合と、サンプリング同期を行う場合とについて、図15,図16のタイミングチャートにより説明する。なお、スレーブ機器20Aの制御系CPU21の内部クロックをC1,スレーブ機器20Bの制御系CPU21の内部クロックをC2とする。
図15は、上記ステップST504で、「サンプリング同期フラグ」がセットされてなく、ステップST506a,ST506bを辿る場合のタイミングチャートである。
スレーブ機器20Aでは、上記ステップST506aで説明したように、サンプリング間隔(Tsamp)と内部クロックC1の時間差(CNTsampintv)として、サンプリング間隔(Tsamp)を内部クロックC1基準のカウント値(CNTintdiff)に変換する。
同様に、スレーブ機器20Bにおいても、サンプリング間隔(Tsamp)と内部クロックC2の時間差(CNTsampintv)として、サンプリング間隔(Tsamp)を内部クロックC2基準のカウント値(CNTintdiff)に変換する。
そして、スレーブ機器20A,20Bともに、内部クロックC1,C2をカウントし、そのカウント値(IntCnt)が、サンプリング間隔(Tsamp)相当時間であるカウント値(CNTintdiff)に達したときに、測定データのサンプリングを行う。
しかしながら、内部クロックC1,C2相互間のずれにより、この例では、スレーブ機器20A側では、マスタ機器10より指定されたサンプリング間隔(Tsamp)よりも長い間隔で(遅れて)測定データをサンプリングし、これに対して、スレーブ機器20B側では、サンプリング間隔(Tsamp)よりも短い間隔で(速く)測定データをサンプリングしている。
最初のサンプリング開始は同時に行われるが、2回目のサンプリング時におけるスレーブ機器20A側の誤差を(+tdiff1),スレーブ機器20B側の誤差を(−tdiff2)とすると、スレーブ機器20A,20Bの相対誤差は(tdiff1+tdiff2)で、この誤差はサンプリング回数が回を重ねるに連れて累積的に増加する。
そこで、マスタ機器10から、相対誤差(tdiff1+tdiff2)が無視し得なくなる前に、スレーブ機器20A,20Bに対して、同期コマンド(Sync)を送信する。これにより、スレーブ機器20A,20B側に「サンプリング同期フラグ」がセットされ、上記ステップST507a〜ST507cまでが実行される。
図16は、このときのタイミングチャートであり、この例では、スレーブ機器20A,20Bは、ともにn回目のサンプリングを行っており、次のn+1回目のサンプリング時点で同期させることを意図して、マスタ機器10は、n+1回目のサンプリング時点の時刻を補正をかける時刻(Tsync)として、スレーブ機器20A,20Bに送信する。
すると、スレーブ機器20A,20Bは、それぞれ、ネットワーククロックカウンタ222から現在のネットワーククロックのカウント値(S_NetCk)を取得する。
そして、スレーブ機器20A,20Bは、(Tsync)と(S_NetCk)の差分(Tsyncdiff)を算出し、その差分(Tsyncdiff)をスレーブ機器20Aでは内部クロックC1でカウントし、スレーブ機器20Bでは内部クロックC2でカウントする。
スレーブ機器20Aで取得する現在のネットワーククロックのカウント値(S_NetCk)と、スレーブ機器20Bで取得する現在のネットワーククロックのカウント値(S_NetCk)は異なるため、(Tsync)に至るまでの時間もそれぞれ異なり、この例では、(Tsync)に到達する時間がスレーブ機器20Bの方がスレーブ機器20Aよりも長いが、その分、スレーブ機器20Bの方が時間的に早く内部クロックのカウントを開始する。
したがって、スレーブ機器20A,20Bの各カウント値(IntCnt)は、ほぼ同時に差分(Tsyncdiff)に達することから、(Tsync)で指定されたn+1回目のサンプリングをほぼ同時に行うことになる。このようにして、スレーブ機器20A,20Bのサンプリング同期がとられる。
次に、図14を参照して、この第2実施形態でのデータ送信処理フローについて説明する。
まず、ステップST601で、「データ送信開始フラグ」が「1」にセットされていることを検知すると、ステップST602で、次のデータ送信処理に備えて「データ送信開始フラグ」をクリア「0」にしたうえで、ステップST603で、アドレスカウンタ21aに読み出しアドレスを設定する。
すなわち、マスタ機器10からデータ取得コマンド(Getdata)として、取得する先頭データ番号(SNtrstt)と最終データ番号(SNtrstop)とが送信されてくるが、ステップST603では、アドレスカウンタ21aのアドレス番号(ADRcnt)に、取得する先頭データ番号(SNtrstt)をセットして、(ADRcnt)=(SNtrstt)とする。
そして、次段のステップST604で、制御系CPUの内部メモリに保存されている測定データを、アドレス番号(ADRcnt)にしたがって順次読み出し、ステップST605で、マスタ機器10に送信し、その都度、ステップST606で、(ADRcnt)=(SNtrstop)かどうかが判断される。
その結果がNOで最終データに至っていなければ、ステップST606aで、アドレスをカウントアップ(ADRcnt=ADRcnt+1)したうえで、ステップST604→ST605→ST606→ST606a→ステップST604を繰り返し実行する。
そして、ステップST606で、(ADRcnt)=(SNtrstop)になったと判断すると、当該データ送信処理を終了する。
以上説明したように、本発明によれば、1台のマスタ機器10と複数台のスレーブ機器20とを無線ネットワークで接続してなる無線通信システムにおいて、マスタ機器10にのみ内部時計を備える安価な構成でありながら、マスタ機器10と各スレーブ機器20との同期、また、各スレーブ機器20相互間の同期を確実にとることができる。