例えば、特許文献1に記載の従来技術が知られている。
特許文献1には、他局からファイル作成日時を受信すると(S20)、該当する自局ファイルの作成日時と比較して(S22)、他局の方が新しい場合には、転送要求を送って(S23)、ファイル内容を送信させ(S12)、該当する共有ファイルの内容を、送信されたファイルに置き換える(S24)こと等が開示されている。
複数の装置でタイムスタンプ付きデータを生成・格納・管理するシステムとしては、例えば一例としてはプラント監視制御システム等がある。プラント監視制御システムでは、時系列的に変化し得る様々なデータ(リアルタイムデータ;各種測定値や何等かのカウント値など)を、複数の装置で各々取得/生成等している。この様なリアルタイムデータは、例えば相互に時系列的な前後関係(相対的に新しい/古いなど)が分かるようにする必要があり、各装置で各々自装置内の時計の時刻に基づいてタイムスタンプを生成してリアルタイムデータに付与している。
この様なタイムスタンプ付きリアルタイムデータの扱い方は、様々であり、例えばそのままタイムスタンプ付きデータを累積記憶して時系列データとして、後に何等かの処理や解析などに利用する場合や、タイムスタンプに基づいて例えば記憶データが常に最新データとなるようにデータ更新する場合等ある。
例えば、取得/生成したデータが既存データより新しい場合のみ、取得/生成データによってデータ更新する。あるいは、例えば、蓄積したデータ群を、それらに付加されているタイムスタンプに基づいて、例えば古いものから順に整列させる。あるいは、タイムスタンプに基づいて、複数のデータ群を合成した合成データを作成する。
一般的に、例えばプラント監視制御システム等におけるリアルタイムデータには、データの連続性が要求される。つまり、例えば古いデータから順に連続する時系列データを得ること等が要求される。また、データ時刻の整合性が要求される。データ時刻の整合性は、特に、複数の装置でそれぞれの時計に基づいてタイムスタンプが付与された複数の時系列データに関して、時系列データ相互の時間的な前後関係(相対的な新旧や同一タイミングであること等)が、タイムスタンプに基づいて正しく判定できることを意味する。
タイムスタンプの利用方法は、他にも様々な方法があってよいが、何れにしても、タイムスタンプが正しいものであれば、何等問題はない。
しかしながら、後述するように、タイムスタンプ生成元となる装置内の時計の時刻は、たとえ定期的に時刻補正を行っても多少は狂っているものである。それでも、1つの装置(その1つの時計)だけである場合には、各タイムスタンプは同じように狂っていることになるので、上記のように相対的な新旧を判定するうえでは、特に問題はないことになる。
しかしながら、複数の装置でそれぞれ自己の時計の現在時刻をタイムスタンプ時刻とする場合には、例えば上記新旧の判定結果が正しいとは限らないことになる。
例えば、プラント監視制御システムにおいて、複数の装置が伝送路を介して接続され、各装置が更新した共有ローカルデータ領域内のリアルタイムデータを相互に伝送路を介して等値化・共有するシステムがある。図8に、このようなプラント監視制御システムの一例を示す。
図8に示すシステムは、複数の装置200(200A、200B、・・・、200M)が、伝送路に接続されており、相互にデータ送受信可能な構成となっている。
各装置200は、コンピュータ等であり、例えばPLC等であり、特に図示しないがCPU、メモリ等を有しており、メモリに記憶されたプログラムをCPUが実行することで、図示のアプリケーション処理、送信処理、受信処理等の各種処理機能を実現する。
また、各装置200は、そのメモリ内に共通データローカル領域201を有している。また、各装置200は、内部時計202を有している。
共通データローカル領域201には、基本的に全ての装置200で共有するデータが格納される。この為、(多少のタイムラグはあるが)基本的に全ての装置200の共通データローカル領域201の格納データが、同一となるように制御されている。これは、換言すれば、全ての装置200の共通データローカル領域201の図示のデータ情報1、データ情報2、・・・データ情報nが、全て、(多少のタイムラグはあるが)最新の情報となるようにしている。
例えば、装置200Aが、例えばそのアプリケーション処理に伴って自己の共通データローカル領域201の図示のデータ情報1を、最新データ(データ情報1aと記すものとする)に更新した場合、他の全ての装置200においてもデータ情報1を最新データ1aに更新させる為に、上記送信処理によって、データ情報1の最新データ1aを他の全ての装置200B、200Cに送信する。
しかしながら、このとき、例えば、装置200Bにおいても、自己の共通データローカル領域201のデータ情報1を、最新データ(データ情報1bと記すものとする)に更新したとする。この場合、最新データ1aと最新データ1bのどちらがより新しいデータであるのかを判断して、より新しいデータによって「データ情報1」の更新を行うことになる。その為に、従来では、データ情報1a、1bにタイムスタンプを付与し、タイムスタンプに基づいて、より新しいデータはどちらであるのかを判定していた。このタイムスタンプは、各装置200が自己の内部時計202の時刻に基づいて生成して付与する。
ここでは、上記データの受信側でタイムスタンプを付与する方式(従来方式1)と、データ送信側でタイムスタンプを付与する方式(従来方式2)について説明する。
まず、従来方式1について、図9、図10(a)、(b)を参照して説明する。
従来方式1では、図9に示すように、各装置200は、自己のアプリケーション処理実行に伴って自己の共通データローカル領域201内の任意のデータを更新した場合、当該更新データを他の全ての装置200へ伝送路を介して送信する。この送信データは、例えば「データ識別子+リアルタイムデータ値」により構成される。データ識別子は、更新対象のデータの種別等を示すものであり、例えば上記「データ情報1」を示す識別ID等である。リアルタイムデータ値は、各データ種別に係わるデータ値そのものであり、上記データ1aやデータ1b等である。これによって、この送信データを受信した各装置200では、データ識別子を参照することで、そのリアルタイムデータ値が例えば上記「データ情報1」に係わるデータ値であると認識できる。
尚、上記データ種別とは、例えば何等かのカウンタ値J、カウンタ値K、あるいは測定点pの電流値、測定点qの電流値、測定点pの電圧値、測定点qの電圧値等である。そして、例えばカウンタ値Jに関してアプリケーション処理によってその値が更新される毎に、当該更新後の値が上記共通データローカル領域201内の該当領域に上書き格納されることになる。この該当領域には、カウンタ値Jに関してそれまでの最新の値が既存データ値として格納されていることになる。アプリケーション処理では、この既存データ値を読み出して例えば+インクリメントした値を上記更新後の値(更新データ)として、共通データローカル領域201の該当領域に上書き記憶することになる。勿論、これは単なる具体例に過ぎない。
ここで、上記送信データを受信した他の装置200は、当該受信データに対してタイムスタンプを生成・付与する。これは、自己の内部時計202の現在時刻を当該受信データの受信時刻として、この受信時刻に基づいてタイムスタンプを生成して上記受信データに付与する。
尚、上記アプリケーション処理等に伴うデータ更新の際にも、そのときの時刻に基づいてタイムスタンプを生成して、これを当該自己が生成した更新データに付与する。
共通データローカル領域201に格納される各データは、基本的に全て上記のようにタイムスタンプが付与されたデータである。これより、上記受信データ又は自己が生成した更新データのタイムスランプと、例えば上記「データ情報1」に係わる既存データのタイムスタンプとを比較して、より新しい方が共通データローカル領域201に格納されるようにする。つまり、既存データの方が新しい場合には、現状のままとする(受信データ/更新データは例えば破棄する)。一方、受信データ/更新データの方が新しい場合には、受信データ/更新データを既存データに上書きする。勿論、逐一述べないが、これら受信データ/更新データは、上記タイムスタンプが付与された状態のまま共通データローカル領域201に格納する。
図10(a)には、上記データ種別「データ情報1」に関して、まず装置200Aにおいて上記更新データとして上記データ情報1aが生成され、その後、例えばある程度の時間後に、装置200Bにおいて上記更新データとして上記データ情報1bが生成された場合の、各装置の各共通データローカル領域201の更新動作例を示す。
また、図10(b)には、上記装置200Aのデータ情報1aの生成と上記装置200Bのデータ情報1bの生成とが、同時に行われた場合の、共通データローカル領域201の更新動作例を示す。
尚、ここでは更新データはアプリケーション処理等で生成される場合を想定して説明するが、この例に限らず、更新データは例えば何等かの計測データを取得したもの等である場合もある。
また、尚、何れの例の場合も、不図示の既存データは、データ情報1a、1bよりも古いデータであるものとする。また、図では、簡単の為、装置200A、200B、200Cの3台の装置があるものとする。
まず、図10(a)を参照して説明する。
この例の場合、まず装置200Aにおいて上記自己のアプリケーション処理に伴う更新データであるデータ情報1aが、共通データローカル領域201に格納される。尚、以下の説明では逐一述べないが、更新データには例えば共通データローカル領域201に格納する際の時刻に応じたタイムスタンプが生成・付与される。そして、装置200Aは、このデータ情報1aを他の全ての装置200B,200Cへ送信する。
各装置200B、200Cでは、それぞれ自己の内部時計202より、このデータ情報1aの受信時刻に応じたタイムスタンプを生成する。そして、このタイムスタンプに基づいて受信したデータ情報1aを自己の共通データローカル領域201に格納するか否かを判定する。上記のことからここでは格納することになるので、装置200B、200Cにおいて、その共通データローカル領域201の「データ情報1」は、上記データ情報1aに更新されることになる。
その後、今度は、装置200Bにおいて、上記自己のアプリケーション処理に伴う更新データであるデータ情報1bが生成され、この時刻に応じたタイムスタンプが生成・付与される。そして、共通データローカル領域201の「データ情報1」に係わる既存データ(このときは、上記データ情報1aになっている)のタイムスタンプと比較することで、より新しい方が共通データローカル領域201に格納されるようにする。これより、共通データローカル領域201に「データ情報1」に係わる新たな最新データとしてデータ情報1bが格納されることになる。
また、装置200Bは、上記データ情報1bを他の全ての装置200A、200Cへ送信する。これより、各装置200A、200Cでは、上記と同様、受信時刻に応じたタイムスタンプを生成して当該受信したデータ情報1bに付与して、既存データのタイムスタンプと比較することで、データ情報1bが既存データよりも新しいと判定することになるので、その共通データローカル領域201の「データ情報1」は、上記データ情報1bに更新されることになる。
この様にして、この例の場合、全ての装置200において、その共通データローカル領域201の「データ情報1」の最新データとしてデータ情報1bが格納された状態となり、これは正常な状態と言える。
一方、図10(b)に示す例の場合、上記の通りデータ更新自体はデータ情報1aとデータ情報1bとで同じタイミングであるが、受信データに係わるタイムスタンプは受信時刻を基準にして生成されるものである為、上記正常な状態とはならない。
すなわち、装置200Aは、上記のように自己のアプリケーション処理に伴う更新データであるデータ情報1aを、その共通データローカル領域201に格納した後、上記データ情報1bを受信する。これより、データ情報1bのタイムスタンプは、データ情報1aのタイムスタンプよりも新しいことになり、データ情報1bが上書き格納されることになる。
一方、装置200Bは、上記のように自己のアプリケーション処理に伴う更新データであるデータ情報1bを、その共通データローカル領域201に格納した後、上記データ情報1aを受信する。これより、データ情報1aのタイムスタンプは、データ情報1bのタイムスタンプよりも新しいことになり、データ情報1aが上書き格納されることになる。
この様に、装置200Aと、装置200Bとで、共通データローカル領域201の格納データが異なる状態と成り得る。
尚、ここでは装置200Cに関しては特に言及しないものとする。すなわち、装置200Cでの場合、装置200Aからのデータ情報1a、装置200Bからのデータ情報1bのどちらが最新データとなるかは不明である。より後に受信した情報が最新データとして扱われることになるが、伝送遅延によりどちらが後に受信されることになるのか不明だからである。
上記問題が生じる原因は、他の装置へ送信するデータに係わるタイムスタンプの生成を、受信側で受信時刻に基づいて行う為である。これより、以下に説明する従来方式2のように、タイムスタンプの生成を、送信側で送信時刻等に基づいて行う方法も提案されている。
以下、図11、図12を参照して、従来方式2について説明する。
図11に示すように、従来方式2の場合、各装置200は、自己のアプリケーション処理等に伴う任意の更新データがある場合、自己の内部時計202から得られた現在時刻等に基づいてタイムスタンプを生成して、これを当該更新データに付加する。このタイムスタンプ付きの更新データは、上記送信処理によって他の全ての装置200へ通知される。これより、送信データは、上記「データ識別子+リアルタイムデータ値」に、タイムスタンプが加わったものとする。すなわち、送信データ=「データ識別子+タイムスタンプ+リアルタイムデータ値」となる。
また、上記生成されたタイムスタンプ付き更新データは、自己の共通データローカル領域201の既存データより新しければ、既存データに上書き格納される。勿論、この新旧判定は、タイムスタンプによって行うことになる。
また、上記送信データを受信した各装置200は、受信したイムスタンプ付き更新データが、自己の共通データローカル領域201の既存データより新しければ、既存データに上書き格納される。勿論、この新旧判定は、タイムスタンプによって行うことになる。
上記処理は、図11に示す例では、例えば装置200Aは、自装置において生成したタイムスタンプ付きデータ情報1aを、自己の共通データローカル領域201に格納すると共に、他の全ての装置200B、200Cへ送信する。
また、装置200Bも、自装置において生成したタイムスタンプ付きデータ情報1bを、自己の共通データローカル領域201に格納すると共に、他の全ての装置200C、200Cへ送信する。
これより、装置200Aは、上記タイムスタンプ付きデータ情報1bを受信すると、そのタイムスタンプと、自己の共通データローカル領域201に格納している上記データ情報1aのタイムスタンプとに基づいて、どちらがより新しいか(最新データであるか)を判定する。図11では、データ情報1bの方が新しいと判定し、データ情報1bを共通データローカル領域201に上書き格納する。
一方、装置200Bは、上記タイムスタンプ付きデータ情報1aを受信すると、そのタイムスタンプと、自己の共通データローカル領域201に格納している上記データ情報1bのタイムスタンプとに基づいて、どちらがより新しいか(最新データであるか)を判定する。図11では、データ情報1bの方が新しいと判定し、現状のままとする。尚、これより、受信したデータ情報1aは、例えば破棄する。
また、装置200Cは、上記データ情報1bとデータ情報1aとを受信し、これらのタイムスタンプに基づいて結果的により新しい方が自己の共通データローカル領域201に格納された状態となる。
ここで、例えば図12(a)に示すように、まず装置200Aが上記データ情報1aを他の装置200B,200Cへ送信し、ある程度時間が経ってから装置200Bが上記データ情報1bを他の装置200A,200Cへ送信する場合を考える。
この例では、明らかに、データ情報1aに付加されるタイムスタンプは、データ情報1bに付加されるタイムスタンプよりも古いことになるので、最終的には全ての装置200A,200B,200Cにおいて、自己の共通データローカル領域201にはデータ情報1bが格納された状態となる。
一方、例えば図12(b)に示す例では、上記データ情報1a、1bが同一タイミングで生成され、以って同一タイミングでタイムスタンプが生成された場合を示す。この場合、理屈ではこれら2つのタイムスタンプ時刻は同一となるはずである。しかしながら、後に図14等で説明するように、全ての装置200においてその内部時計202は、たとえ定期的に時刻補正を行ったとしても、多少は狂っていることになる。これより、ここでは仮に、データ情報1aのタイムスタンプが、データ情報1bのタイムスタンプよりも古いものとして説明する。勿論、これは、上記時計の狂いに応じた僅かな時間分(例えば数百ミリ秒程度など)、古いものとなっているものである。
この例の場合、図12(b)に示すように、まず装置200Aでは、自己の共通データローカル領域201に上記タイムスタンプ付きデータ情報1aを格納している状態で上記タイムスタンプ付きデータ情報1bを受信することになる。そして、両者のタイムスタンプ時刻を比較することで、データ情報1bの方が新しいと判定し、データ情報1bをデータ情報1aに上書きする。つまり、データ情報1bが「データ情報1」の最新データとして共通データローカル領域201に格納されている状態となる。
一方、装置200Bでは、自己の共通データローカル領域201に上記タイムスタンプ付きデータ情報1bを格納している状態で上記タイムスタンプ付きデータ情報1aを受信することになる。そして、両者のタイムスタンプ時刻を比較することで、データ情報1bの方が新しいと判定する。これより、現状のままとする。つまり、データ情報1bが「データ情報1」の最新データとして共通データローカル領域201に格納されている状態のままとする。尚、受信したデータ情報1aは例えば破棄する。
また、装置200Cでは、この例ではまず上記タイムスタンプ付きデータ情報1bを受信するものとし、これを自己の共通データローカル領域201に格納する。この状態で後に上記タイムスタンプ付きデータ情報1aを受信することになり、よって上記装置200Bと同様の判定・動作となる。
この様に、全ての装置200において、最終的には、自己の共通データローカル領域201にデータ情報1bが格納された状態となる。つまり、上記図10(b)のような問題は解消されることになる。つまり、少なくとも全ての装置200において同じデータが格納された状態にすることはできる。しかしながら、上記の通り、本来は、上記データ情報1a、1bは同一タイミングで生成されたものである。
ここで、上述したように、内部時計202の時刻の装置間の差異(時差)により、全く同一タイミングで更新された「データ情報」であっても異なるタイムスタンプが付与されることになる。これは、内部時計202が他装置より進んでいる装置200が送信する「データ情報」が、共通データローカル領域201に残る結果となる。つまり、上記の例では装置200Bの内部時計202が、装置200Aの内部時計202よりも進んでいることになり、装置200Aと装置200Bとで同時にデータ更新があった場合には、常に、装置200Bの更新データが、全ての装置200の共通データローカル領域201に残る結果となる。
しかしながら、現実には、例えばシステム設計者の立場から考えて、例えば装置200Aと装置200Bとで同時にデータ更新があった場合には、装置200Aの更新データの方を残したい、等という要望がある場合が起こり得る。
以下、図面を参照して、本発明の実施の形態について説明する。
ここで、本手法は、複数の装置で各々自装置内の時計の時刻に基づいてタイムスタンプ付きデータを生成等するシステムに関する。この様なシステムを、上記のようにタイムスタンプ付データ管理システムと呼ぶものとする。そして、上記のように、この様なシステムの一例として上記プラント監視制御システムがあるが、この例に限らない。但し、ここでは、上記図8に示した例のような構成のプラント監視制御システムを例にして説明する。また、この例は、上記の通り、タイムスタンプ付きデータは、時系列的に変化し得る様々なデータ(リアルタイムデータ;各種測定値や何等かのカウント値など)に対して、タイムスタンプを付与したものであるが、この例に限らない。また、この例では、上記の通り、メモリの所定の記憶領域には、各データ種別毎に最新データのみが格納されるようにし、その為に各データの相対的な時系列関係(時間的な前後関係;相対的な新旧関係)を判定するものであるが、この例に限らない。但し、以下の説明では、基本的に、この様な一例に応じて説明するものとする。
図1は、本例のプラント監視制御システムの構成例である。
尚、図1は、一例として、各装置毎に共有ローカルデータ領域を保有する複数の装置間で、その共有ローカルデータ領域に格納される時系列に変化するリアルタイムデータを相互に更新、参照、共有するシステムを示すが、この例に限らない。例えば、共有ローカルデータ領域は、必ずしも必要ないものである。本手法は、タイムスタンプによって時系列データを管理するシステムに関するものと言える。
図1に示す構成例では、複数の装置10が伝送路1に接続しており、伝送路1を介して相互にデータ送受信できる構成となっている。各装置10は、例えばコンピュータ装置であり、不図示のCPU、メモリ等を備えている。そして、メモリには予め所定のアプリケーションプログラムが記憶されている。CPUが、アプリケーションプログラムを実行することで、以下に説明する装置10の各種処理機能が実現される。例えば、以下に説明するタイムスタンプ精度算定処理部13、タイムスタンプ正規化処理部14、データ情報送受信処理部15、アプリケーション処理部16、定刻通知処理部21、定刻通知受信処理部22、精度算定処理部23等の各種処理機能が実現される。あるいは、後述するデータ合成部等も、CPUが、アプリケーションプログラムを実行することで実現される。
各装置10は、例えば上記メモリ内に共通データローカル領域11を有している。この共通データローカル領域11自体は、上記従来の共通データローカル領域201と同じであってもよく、複数の装置10間で共有するリアルタイムデータを格納する記憶領域である。共通データローカル領域11内は、特に図示しないが、上記「データ情報1」、「データ情報2」等の各データ種別毎のデータ格納領域が、予め決められている。
また、各装置10は、アプリケーション処理部16、内部時計12を有しており、これらは上記従来の機能・構成と見做しても構わない。そして、各装置10は、更に図示のタイムスタンプ精度算定処理部13、タイムスタンプ正規化処理部14、データ情報送受信処理部15等を有している。これらについては後に説明する。
尚、上記データ種別とは、例えば従来で説明したように例えば何等かの回数/カウント値や、あるいは電圧値、電流値、温度、湿度、回転数等の各種計測データ等であり、更に測定場所等が加わる場合もある。但し、これらの例に限らない。基本的には、アプリケーション処理に伴って生成されるデータや、アプリケーション処理で用いるデータ等であるが、この例に限らない。
また、本例では、上記各データ種別毎の各データ格納領域(共通データローカル領域11)には、そのデータ種別に係わる最新データが格納されるように制御されるものとするが、この例に限らない。すなわち、上記の通り、本手法に係わる各種データの格納領域は上記「共通データローカル領域11」のような共通データ(共有データ)の格納領域に限るものではなく、例えば各種データ種別毎の時系列データ等が格納される記憶領域等であっても構わない。つまり、各データ種別毎に常に最新データと見做されるデータのみが格納される(既存データに上書きされる)例に限るものではなく、各データ種別毎にデータが蓄積される例であっても構わない。
但し、何れの場合でも、各データにはタイムスタンプが付加される。そして、タイムスタンプに基づいて、各データの相対的な時系列関係(時間的前後関係)を判定し、それによって最新データであるか否かを判定したり、時系列データとしての整合性を確保する(時間的に正しい順序に整列させる等)。時系列データに関しては、上記図13〜図15で説明したように、例えば、同一タイミングで発生したデータには、同一時刻のタイムスタンプが付与されるようにしないと、正しい合成データが得られないことになる。
ここで、タイムスタンプは、各装置10毎に、その内部時計12の現在時刻に基づいて生成される。尚、内部時計12自体は、上記従来の内部時計202と同じであってよい。
上述したように、各内部時計12の時刻は、たとえ定期的に時刻補正を行ったとしても、殆ど常に多少は狂っているものと見做してよい。この為、内部時計12の時刻をそのままタイムスタンプ時刻とすると、複数の装置10で同一タイミングで発生したデータには、相互に異なる時刻のタイムスタンプが付与される可能性が高いことになる。
本手法では、複数の装置10で上記タイムスタンプ付きデータが生成されるシステムにおいて、各装置10の各内部時計12の時刻が上記のように相互に異なっていても、各データの相対的な時系列関係をタイムスタンプに基づいて正しく判定できるようにする。その為に、上述したタイムスタンプ精度を、自動的に適切なものに設定できるようにする。これによって、例えば、各装置10で正しく最新データを共有できるようになる。あるいは例えば、同一タイミングで発生したデータには、同一のタイムスタンプ時刻が付与されるようにでき、以って例えば上記正しい合成データが得られるようになる。
この様な適切なタイムスタンプ精度を自動的に決定する処理は、図示のタイムスタンプ精度算定処理部13が実行する。
タイムスタンプ精度算定処理部13は、自装置の内部時計12と各他の装置10の内部時計12と差異(時差)に基づいて、タイムスタンプ精度を決定する。これは、そのときの状況に応じた適切なタイムスタンプ精度を決定できるものと言える。
タイムスタンプ精度算定処理部13は、例えば、上記自装置の内部時計12と各他の装置10の内部時計12と差異(時差)に基づいて、システム全体としての最大の時差を求める。そして、この最大時差に基づいて、タイムスタンプ精度を決定する。これは、例えば、この最大時差と、予め設定されているタイムスタンプ精度の候補群とに基づいて、タイムスタンプ精度を決定する。これは、例えば、各候補のなかで最大時差に最も近い候補を、タイムスタンプ精度に決定するが、更に、最大時差よりも大きいことを条件に加えてもよい。詳しくは後述する。
また、タイムスタンプ精度算定処理部13は、上記決定したタイムスタンプ精度を、他の各装置10に通知するようにしてもよい。これによって、システム上の全ての装置10において同じタイムスタンプ精度を用いてタイムスタンプ生成が行われることになる。但し、この通知は必ずしも必要ないものと考えてもよい。つまり、本手法によれば、各装置10で各々のタイムスタンプ精度算定処理部13がそれぞれタイムスタンプ精度の決定処理を行っても、理屈上は、全ての装置10で同じタイムスタンプ精度に決定されるはずであるからである。これは、「システム上の最大時差」は、どの装置で求めても同じとなるはずであるからである。但し、実際には、通信状況によっては、通信時間に多少の違いが生じる可能性はあり、これより各装置10で決定したタイムスタンプ精度が、相互に異なるものとなる可能性はある。これより、例えば、予め決められた装置10のみが、そのタイムスタンプ精度算定処理部13によってタイムスタンプ精度を決定して、これを他の装置10へ通知して使用させるようにしてもよい。
タイムスタンプ正規化処理部14は、例えば任意のデータ種別に係わる任意の新データが生成/取得される毎に(更新データが得られる毎に)、そのときの内部時計12の現在時刻に基づいてタイムスタンプを生成する。但し、内部時計12の現在時刻をそのままタイムスタンプ時刻とするのではなく、上記タイムスタンプ精度算定処理部13によって決定されたタイムスタンプ精度に応じて、内部時計12の現在時刻に対する正規化処理を行うことで、タイムスタンプ時刻を求めることで、タイムスタンプを生成する。
例えば、タイムスタンプ精度が100ミリ秒である場合には、内部時計12の現在時刻は正規化処理によって100ミリ秒単位の時刻に変換されて、これがタイムスタンプ時刻となる。例えば、内部時計12の現在時刻が“01時02分34秒214ミリ秒”であった場合には、正規化処理によってタイムスタンプ時刻=“01時02分34秒200ミリ秒”(“01時02分34.2秒)等となる。詳しくは後述する。
タイムスタンプ正規化処理部14は、例えば、任意のデータに係わるタイムスタンプを生成する際に、そのときの自装置の内部時計12の時刻から、上記タイムスタンプ精度算定処理部13によって決定されたタイムスタンプ精度に応じたタイムスタンプを生成する。そして、このデータに、生成したタイムスタンプを付与する。尚、これより、タイムスタンプ正規化処理部14は、タイムスタンプ生成・付与部と呼んでもよいものとする。
アプリケーション処理部16は、基本的には上記従来と略同様であってよい。すなわち、アプリケーション処理部16は、上記従来のアプリケーション処理を実行するものであってよく、任意の処理を実行し、それに伴って共通データローカル領域11の任意のデータ種別に係わる更新データの生成等を行って、これを基本的には共通データローカル領域11に上書き格納する。但し、その際、上記タイムスタンプ正規化処理部14が、例えば上記のようにタイムスタンプを生成して、これを更新データに付加する。
また、データ情報送受信処理部15は、その基本的な動作は、上記従来の送信処理/受信処理と略同様の処理を実行するものと見做してよい。なお、送信周期は、後述する本手法により適宜自動的に決定されたものであってもよい。また、受信処理の際に後述する優先制御判定処理を行う形態もあってよい。
データ情報送受信処理部15は、例えば上記共通データローカル領域11の任意のデータ種別のデータ更新がある毎に、この更新データ(タイムスタンプ付き)を他の全ての装置10へ送信する。尚、送信周期は、後述する本手法により適宜自動的に決定されたものであってもよい。
また、データ情報送受信処理部15は、任意の他の装置10からその更新データ(タイムスタンプ付き)が送信されてきた場合、これを受信して、共通データローカル領域11に上書き格納するか否かを判定する。この判定には、タイムスタンプを用いる。あるいは、場合によっては更に後述する優先度情報を用いる。そして、上書き格納すると判定した場合には、この受信データを共通データローカル領域11に上書き格納する。
上記データ情報送受信処理部15についても、詳しくは後述する。
以下、上記各種処理機能部について、更に詳細に説明する。
図2は、タイムスタンプ精度算定処理部13の詳細構成図である。
図3は、タイムスタンプ精度算定処理部13の処理シーケンスを、装置10Aを主体として、具体的にその動作を示した図である。
以下、図2、図3を参照してタイムスタンプ精度算定処理部13について説明する。
タイムスタンプ精度算定処理部13は、例えば以下に説明するタイムスタンプ精度の決定処理を、例えば定期的に行う。これによって、そのときの状況に応じた適切なタイムスタンプ精度を動的に決定することができる。
タイムスタンプ精度算定処理部13は、例えば図2に示す定刻通知処理部21、定刻通知受信処理部22、精度算定処理部23、タイムスタンプ精度テーブル記憶部24等を有する。これら各種処理機能部について、以下、まず、概略的に説明する。
定刻通知処理部21は、自装置の内部時計12の時刻が予め登録された定刻になると、所定の定刻通知をシステム内の各他の装置10に通知する。その後、この定刻通知に対する他の装置10からの応答(定刻通知応答)を受信することで、定刻通知の送信から応答受信までの時間差により、自装置と他の各装置10との間の伝送遅延時間を算出する。定刻通知のフォーマットは、何でも良いが、例えば自装置の識別IDと上記定刻等の情報が含まれる。
尚、上記定刻は、上記定刻通知の送信時刻の一例と見做しても良い。換言すれば、上記定刻通知に限らず、その送信時刻を含むパケットを通知するものであればよいと見做すこともできる。
定刻通知受信処理部22は、上記伝送遅延時間を既に算出済みの状態で任意の他の装置からの上記定刻通知を受信すると、この受信時刻と、上記送信側の定刻と、上記伝送遅延時間とに基づいて、この定刻通知の送信元の装置10の内部時計12と自装置の内部時計12との時差を算出する。これは、受信時刻と定刻との差を求め、この差から伝送遅延時間を差し引くことで、上記内部時計の時差を算出する。つまり、
時差=(受信時刻−定刻)−伝送遅延時間
である。
仮に両装置の内部時計12が完全に正確であるならば、受信時刻=定刻+伝送遅延時間となるはずであるので、上記時差は‘0’となるはずである。
尚、定刻通知受信処理部22は、上記任意の他の装置10からの上記定刻通知を受信したら、直ちに上記定刻通知応答を送信元へ返信する処理も行う。
定刻通知受信処理部22は、システム上の他の全ての装置10に関して、上記自装置との時差の算出を行ったら、これら時差に基づいて「システム上の最大時差」を算出する。これは、上記各時差の中で最大の時差と最小の時差とを抽出して、これらの差分(最大の時差−最小の時差)を上記「システム上の最大時差」とする。例えば、システム全体で装置10が5台あるものとし、自装置と各他の装置10との時差が、+50、+80、−100、−200であったならば、+80−(−200)=280が、上記「システム上の最大時差」となる。
尚、上記「システム上の最大時差を」を算出する処理は、精度算定処理部23が行うものとしてもよい。
尚、上記の例に限らず、例えばシステム上で自装置と同一のグループに属する他の全ての装置10に関して、上記自装置との時差の算出を行って、これらに基づいて同グループ内での上記最大時差を求めるようにしてもよい。但し、この様なグループ内での最大時差も、上記「システム上の最大時差」の一例と扱うものとする。尚、例えば、グループ分けは予め開発者等が任意に行っており、各グループ毎にそのグループに属する装置10の識別用ID等が、登録されているものとしてもよいが、この例に限らない。
タイムスタンプ精度テーブル記憶部24には、タイムスタンプ精度テーブル30が記憶されている。タイムスタンプ精度テーブル30には、予め、タイムスタンプ精度の候補が複数登録されている(図示のタイムスタンプ精度31)。図示の例では、10msec、50msec、100msec、500msecの4つの候補が、登録されている。
精度算定処理部23は、上記複数の候補のなかから上記「システム上の最大時差」に応じたタイムスタンプ精度(システム・タイムスタンプ精度)を選択・決定する。例えば、上記各候補のなかで上記「システム上の最大時差」以上の候補を全て抽出し、抽出された候補のなかで最小の候補を、タイムスタンプ精度に決定する。また、上記の通り、精度算定処理部23は、更に、上記「システム上の最大時差を」を算出する処理を行うものであってもよい。
尚、上記のことから、例えば、「定刻通知処理部21+定刻通知受信処理部22」は、例えば任意の他の装置10との通信に基づいて自装置と該他の装置10との伝送遅延時間を求め、該他の装置10から送信される所定の通知の該他の装置10における送信時刻と、自装置における該通知の受信時刻と、上記伝送遅延時間とに基づいて、自装置の内部時計12と該他の装置10の内部時計12との時差を算出する時差算出機能を有するものと言うこともできる。
また、精度算定処理部23は、例えば、上記時差算出機能によって各他の装置10との各時差を算出したら、これら各時差から「システム上の最大時差」を求め、この最大時差に基づいて上記複数の候補のなかからタイムスタンプ精度を決定するものと言うこともできる。
あるいは、上記タイムスタンプ精度テーブル30には、更に、上記各候補に対応するデータ更新周期32も登録されており、上記タイムスタンプ精度に決定された候補に対応するデータ更新周期32を、装置内の何等かのアプリケーション処理のデータ更新周期(データ参照処理周期)に設定するようにしてもよい。図示の例では、データ更新周期32は、対応するタイムスタンプ精度31の半分の値となっているが、これは一例に過ぎない。基本的に、データ更新周期32は、対応するタイムスタンプ精度31の値以下となっていれば、何でも良い。
あるいは、上記タイムスタンプ精度に決定された候補に対応するデータ更新周期32を、リアルタイムデータの他装置への送信処理の周期(送信周期)に設定するようにしてもよい。これについては後述する。
また、上記図1に示す各種処理機能部は、例えば下記の機能を有するものと言うこともできる。
まず、上記タイムスタンプ正規化処理部14は、アプリケーション処理から自装置内のローカルデータバッファ内のリアルタイムデータを更新する際に、自装置の内部時計12から得た現在時刻(データ更新時刻)を、上記決定されたタイムスタンプ精度(時刻の粒度)に丸めて(タイムスタンプの正規化処理)、当該リアルタイムデータのタイムスタンプとしローカルデータバッファに格納する。ローカルデータバッファの一例が、上記共通データローカル領域11である。
また、上記データ情報送受信処理部15の送信処理は、例えば一例としては、上記決定されたタイムスタンプ精度に対応するデータ更新周期32を、送信周期に自動設定して、この送信周期で、ローカルデータバッファに格納されたリアルタイムデータとタイムスタンプを、各他の装置10へ送信する。但し、リアルタイムデータが更新されている場合のみ、送信を行う。
また、上記データ情報送受信処理部15の受信処理は、任意の他の装置10から送信される上記リアルタイムデータとタイムスタンプを受信すると、このタイムスタンプが自装置のローカルデータバッファに格納されたタイムスタンプと比較して新しい場合には、受信したリアルタイムデータとタイムスタンプをローカルデータバッファに格納する(上書きする)。
また、上記データ情報送受信処理部15の受信処理は、上記タイムスタンプの比較の結果、同一である場合には、予め設定されている優先順位に従って、上記受信データをローカルデータバッファに格納する(上書きする)か否かを判定するようにしてもよい。つまり、ローカルデータバッファの格納データを更新するか否かを判定する。優先順位は、例えばシステム内の全ての装置10間の優先順位を示す情報であり、本例では「装置10A>装置10B>装置10C」等する。つまり、装置10Aが最も優先順位が高いものとする。また、この例の場合、リアルタイムデータには、タイムスタンプだけでなく、後述する優先度情報等も付与される。優先度情報とは、そのリアルタイムデータの生成元装置を示す識別ID等である。そして、例えば、上記受信データの優先度情報が“装置B”であり、ローカルデータバッファの既存データの優先度情報が“装置C”であった場合には、受信データの方が優先順位が高いことになるので、受信データをローカルデータバッファに格納する(上書きする)ものと判定することになる。一方、既存データの方が優先される場合には、受信データは破棄する等して更新は行わないようにする。
以下、上記図2の各種処理機能部について更に詳細に説明する。
まず、定刻通知処理部21は、自装置の内部時計12の現在時刻が、予め決められた定刻(ここでは装置10Aに関しては01時00分00秒000ミリ秒とする)となる毎に、定刻通知を他の全ての装置10(ここでは装置10Bと装置10C)へ送信する。尚、定刻通知は、例えば、ヘッダ部にパケット種別=定刻通知があり、データ部に上記定刻(01時00分00秒000ミリ秒)が格納されたパケットであるが、この例に限らない。
尚、上記定刻は開発者等が任意に決めてよいが、全ての装置10において、自装置の定刻が予め登録されているものとする。尚、更に、他の装置10の定刻も予め登録されている構成としてもよい。定刻は、後述する時計差異(時差)を求める際に用いられる。尚、全ての装置10で相互に異なる定刻が設定されていてもよいし、全ての装置10で同一の定刻が設定されていてもよいが、これらの例に限らない。
各装置10の定刻通知受信処理部22は、上記定刻通知を受信する毎に、直ちにその送信元へ定刻通知応答を返信する。図示の例では、例えば、装置10Aからの定刻通知Na-bを受信した装置10Bは、直ちに定刻通知応答Ra-bを装置10Aに返信する。同様に、装置10Aからの定刻通知Na-cを受信した装置10Cは、直ちに定刻通知応答Ra-cを装置10Aに返信する。
定刻通知処理部21は、上記各定刻通知応答の受信時刻を記録する。これは、定刻通知応答受信時の自装置の内部時計12の時刻である。上記の例では、上記定刻通知応答Ra-bの受信時刻と、上記定刻通知応答Ra-cの受信時刻を、それぞれ記録する。そして、自装置の上記定刻と、各受信時刻とに基づいて、自装置と他の各装置10との伝送遅延時間を算出する。
ここでは、仮に図3の図上上側に示すように、装置10Aは内部時計12の時刻“01時00分00秒010ミリ秒”に定刻通知応答Ra-bを受信し、内部時計12の時刻“01時00分00秒020ミリ秒”に定刻通知応答Ra-cを受信したものとする。
この例では、まず、装置10A−装置10B間での定刻通知送信から応答受信までに10ミリ秒(10msec)掛かったことになり、この10ミリ秒は装置10A−装置10B間の往復のパケット伝送時間と見做せる。よって、装置10A−装置10B間の(片道)のパケット伝送時間(伝送遅延時間)は、半分の5ミリ秒と見做せる。
同様にして、上記の例では、装置10A−装置10C間での定刻通知送信から応答受信までに20ミリ秒掛かったことになり、この20ミリ秒は装置10A−装置10B間の往復のパケット伝送時間と見做せる。よって、装置10A−装置10B間の(片道)のパケット伝送時間(伝送遅延時間)は、半分の10ミリ秒と見做せる。
尚、既に述べたことから、装置10A〜10Cは、何れも、内部時計12の時刻は、正しい時刻ではない(多少は狂っている)可能性が高い。しかし、同じ内部時計12の時刻を用いた送信時刻と受信時刻との差分によって上記伝送遅延時間を算出しているので、正しい伝送時間が求められることになる。
上記のように、自装置と各他の装置10との間の伝送遅延時間を求めて記憶しておき、その後、上記定刻通知受信処理部22は、他の装置10からの上記定刻通知を受信すると、伝送遅延時間等を用いて、当該他の装置10(定刻通知の送信元装置)の内部時計12と自装置の内部時計12との時刻のズレ(時計差異;時差)を求める。
すなわち、上記定刻通知の送信元装置の定刻と、送信元装置に係わる上記伝送遅延時間と、上記定刻通知の受信時刻とに基づいて、送信元装置の内部時計12と自装置の内部時計12との時刻のズレ(時計差異;時差)を求める。
すなわち、以下の式によって時計差異(時差)を求める。
時計差異(時差)=定刻通知の受信時刻−定刻−伝送遅延時間
上記時計差異の算出処理について、図3の図上下側に示す一例を用いて説明する。
尚、図3の例では、伝送遅延時間は、既に述べた通りとなるものとする。
この例では、装置10Aの定刻通知受信処理部22が、時計差異を求める場合を示す。また、この例では、装置10B、装置10Cの上記“定刻”は、両方とも“02時00分00秒000ミリ秒”であるものとする。この定刻は、例えば定刻通知に含まれていても良いが、この例に限らない。
図示の例では、装置10Aは、まず、装置10Bからの定刻通知Nb-a(02時00分00秒000ミリ秒)を、装置10Aの内部時計12の時刻“01時59分59秒090ミリ秒”に受信している。つまり、この場合、明らかに、装置10Bの内部時計12は装置10Aの内部時計12よりも進んでいることになる。
この場合、上記のように伝送遅延時間は5ミリ秒であるので、上記時計差異の算出式により、時計差異(時差)=
“01時59分59秒090ミリ秒”−“02時00分00秒000ミリ秒”−5ミリ秒
=−10ミリ秒−5ミリ秒
=−15ミリ秒となる。
同様にして、装置10Cからの定刻通知Nc-aは、装置10Aの内部時計12の時刻“02時00分00秒040ミリ秒”に受信しており、装置10Cとの伝送遅延時間は上記の通り10ミリ秒であることから、上記時計差異の算出式により、時計差異(時差)=30ミリ秒が算出されることになる。
以上のことから、装置10Aの内部時計12を基準にすると、相対的に、装置10Bの内部時計12は15ミリ秒進み、装置10Cの内部時計12は30ミリ秒遅れていることが分かる。そして、これより、この例の場合、「システム全体としての最大の時計差異」(上記「システム上の最大時差」)として、結果的に、装置10B−装置10C間の時計差異(=30−(−15)=45ミリ秒)が求められることになる。勿論、これは一例に過ぎない。
精度算定処理部23は、上記定刻通知受信処理部22によって求められた上記「システム全体としての最大の時計差異」と、上記タイムスタンプ精度テーブル記憶部24に予め記憶されているタイムスタンプ精度テーブル30とに基づいて、上記タイムスタンプ正規化処理部14で用いるタイムスタンプ精度を決定する。
この決定方法は、例えば、タイムスタンプ精度テーブル30に登録されている各タイムスタンプ精度31(各候補)の中で、上記「システム全体としての最大の時計差異」より大きく、且つ、そのなかで最小の候補を、上記タイムスタンプ正規化処理部14で用いるタイムスタンプ精度に決定する。
図示の例では、タイムスタンプ精度テーブル30に登録されている各タイムスタンプ精度31(候補)は、10msec、50msec、100msec、500msecの4種類であり、これらの候補のなかで上記最大の時計差異=45ミリ秒より大きいのは50msec、100msec、500msecの3つである。これらの中で最小のものは50msecであるので、上記タイムスタンプ正規化処理部14で用いるタイムスタンプ精度は、50msecに決定されることになる。
また、更に、タイムスタンプ精度テーブル30に基づいてデータ送信周期も決定するようにしてもよい。すなわち、このテーブル30には図示のように上記各タイムスタンプ精度31に対応付けてデータ更新周期32が登録されている。この中で上記決定したタイムスタンプ精度に対応するデータ更新周期32を、上記データ送信周期(システム・データ更新周期)に決定する。上記の例では、データ送信周期=25msecに決定されることになる。上記データ情報送受信処理部15は、このデータ送信周期に従って上記データ送信処理を行うものであり、一例について後に説明するものとする。
図4に、上記のように決定されたタイムスタンプ精度(=50msec)とデータ送信周期(=25msec)に応じた動作イメージを示す。
但し、図4では優先度情報も用いて優先制御判定も行う例を示すが、この処理は必須ではない。この優先度に係わる処理は、複数の装置10による同一データ種別に係わる更新データに、同一タイムスタンプが付与されていた場合に、何れの更新データによって更新を行うのかを判定する処理である。本例においては、上記の通り、装置10A→装置10B→装置10Cの順に優先順位が高いものとする(装置10Aが最優先)。
図4において、装置10Aにおいては、例えば、そのアプリケーション処理部16による任意の処理に伴って、共通データローカル領域11内のデータ種別「データ情報D1」のデータ更新が行われるものとする。その際、上記タイムスタンプ正規化処理部14によって、上記決定されたタイムスタンプ精度に応じたタイムスタンプが生成されて、このタイムスタンプが更新データに付与される。また、その際に「優先度情報」も付与するようにしてもよい。優先度情報は、例えば自装置(端末10A)の識別ID等である。換言すれば、上記更新データの生成元の装置10の識別ID等である。
そして、この様なタイムスタンプ付き(更に優先度情報付き)の更新データ(リアルタイムデータ値など)が、タイムスタンプ正規化処理部14によって共通データローカル領域11に格納されると共に、データ情報送受信処理部15によって他の全ての装置10B、10Cへ送信される。但し、本例では、上記更新データの共通データローカル領域11への格納に関しては、優先制御判定を行って、場合によっては格納しないようにする。この優先制御判定は、後述するデータ受信時の優先制御判定と略同様であってよく、ここでは説明しないものとする。
尚、ここでは、データ情報送受信処理部15は、送信処理に係わる図示のデータ情報送信処理部15aと、受信処理に係わる図示のデータ情報受信処理部15bとから成るものとする。
上記データ情報送信処理部15aは、上記決定されたデータ送信周期で、共通データローカル領域11の格納データの更新の有無を判定して、更新有りの場合にはこのデータを他の全ての装置10B、10Cへ送信する。この送信データは、例えば上記のように、「更新データ(リアルタイムデータ値)+タイムスタンプ+優先度情報」等となるが、この例に限らない。尚、特に図示・説明しないが、上記従来のデータ識別子も含まれていてよい。
上記各装置10B、10Cは、そのデータ情報受信処理部15bによって上記送信データを受信すると、そのタイムスタンプや優先度情報に基づいて、この受信データを共通データローカル領域11に上書き格納すべきか否か等を判定するが、これについてはここでは説明せず、受信側の処理については装置10Aについて以下に説明するものとする。
ここで、図4に示す例では、装置10Aに対して、その共通データローカル領域11の図示のデータ種別「データ情報D2」に係わる更新データが、装置10Bと装置10Cからそれぞれ送信されてきたものとする。つまり、装置10Aは、装置10Bから送信される更新データD2bと、装置10Cから送信される更新データD2cとを受信するものとする。これら2つのデータD2b、D2cを受信する順番に係わらず、基本的にはそのタイムスタンプに基づいて、最終的にはより新しいデータが共通データローカル領域11に格納された状態となるように制御される。
但し、更新データD2bとD2cとでタイムスタンプが同一であった場合には、その上記優先度情報に基づいて判定する。すなわち、この例では、更新データD2bの優先度情報は“装置B”、更新データD2cの優先度情報は“装置C”であり、ここでは上記の通り優先順位は「装置10A>装置10B>装置10C」と設定されていることから、更新データD2bの方が優先すると判定され、更新データD2bが共通データローカル領域11に格納される。
尚、ここでは、更新データD2bとD2cは、何れも、共通データローカル領域11の図示のデータ種別「データ情報D2」に係わる既存データよりも新しいものとして説明している。もし、既存データの方が新しい場合には、当然、上記更新データD2bを共通データローカル領域11に格納する処理は行われず、既存データが格納された状態のままとなる。
この様にして、タイムスタンプが同一の場合には、例えばシステム開発者が望む優先順位が高い装置10のデータが、共通データローカル領域11に格納されることになる。
図5に、上記のように決定されたタイムスタンプ精度(=50msec)に応じた上記タイムスタンプ正規化処理部14の処理例、上記のように決定されたデータ送信周期(=25msec)に応じたデータ情報送受信処理部15の送信処理例を示す。尚、本説明では上記優先度情報は省略するものとする。
また、図5の例では、共通データローカル領域11内のデータ種別「データ情報D1」に関して、アプリケーション処理によってタイミングt1,t2,t3,t4,t5でそれぞれ更新データが生成されたものとする。これら更新データは図示のD1(t1)、D1(t2)、D1(t3)、D1(t4)、D1(t5)である。
上記の通り、ここではタイムスタンプ精度は50ミリ秒であるので、「タイムスタンプ正規化処理」において、50ミリ秒単位にタイムスタンプを集約するために、本例では、000ミリ秒および050ミリ秒の時刻(正規化時刻)の±25ミリ秒(50ミリ秒÷2)の範囲を、集約する範囲(正規化範囲)と定めている。勿論、これは一例に過ぎない。
例えば、図示のデータ情報D1(t1)は、時刻“01時59分59秒012ミリ秒”における更新データであるが、「タイムスタンプ正規化処理」において、この時刻“01時59分59秒012ミリ秒”は、正規化範囲「“01時59分58秒975ミリ秒”<t≦“01時59分59秒025ミリ秒”」に含まれるため、正規化時刻(タイムスタンプ時刻)は“01時59分59秒000ミリ秒”となる。
上記優先制御判定を行う場合には、このタイムスタンプ(01:59:59.000)が、共通データローカル領域11内の上記「データ情報D1」の既存データのタイムスタンプよりも新しい場合に、上記更新データD1(t1)に上記タイムスタンプ(01:59:59.000)を付加して上記「データ情報D1」の格納領域に上書き格納する。尚、その際、更に「優先度情報」(装置A)も付与して格納するようにしてもよい。
尚、上記の例では既存の格納データのタイムスタンプは示されないが、上記更新データD1(t1)が図示のように格納されたものとし、次の更新データD1(t2)のタイムスタンプは図示のように(01:59:59.050)となることから、これは、この時点の既存の格納データである上記更新データD1(t1)のタイムスタンプ(01:59:59.000)よりも新しいことになる。よって、図示の通り、更新データD1(t2)がそのタイムスタンプ(01:59:59.050)と共に「データ情報D1」の格納領域に上書き格納されることになる。
また、例えば更新データD1(t3)の生成時の内部時計12の時刻が、図示のように“01時59分59秒114ミリ秒”であったものとする。ここではタイムスタンプ精度は50msecであるので、正規化範囲を50msecとして正規化処理を行うことで、上記時刻“01時59分59秒114ミリ秒”からタイムスタンプ(01:59:59.100)が生成されることになる。そして、上記更新データD1(t3)にタイムスタンプ(01:59:59.100)を付加して共通データローカル領域11に格納することになる。更に、データ情報送受信処理部15が、このタイムスタンプ付き更新データD1(t3)を、他の各装置10B,10Cへ送信する。
上記正規化処理は、どの様な方法で行ってよいが、上記の例ではタイムスタンプ精度は50msecであるので、例えば、タイムスタンプのミリ秒の下2桁が‘00’または‘50’となるようにする。つまり、050ミリ秒、100ミリ秒、150ミリ秒、200ミリ秒、250ミリ秒、・・・等となるようにする。そして、上記時刻のミリ秒の下2桁が例えば‘26’〜‘75’の範囲内である場合にはタイムスタンプのミリ秒の下2桁を‘50’に決定する。上記時刻のミリ秒の下2桁が例えば‘76’〜‘25’の範囲内である場合にはタイムスタンプのミリ秒の下2桁を‘00’にすると共に3桁目を+1インクリメントする。例えば、時刻が‘286’ミリ秒であった場合にはタイムスタンプは‘300’ミリ秒となる。
また、上記図5の処理は、装置10Aで行われるものとすると、装置10Aの共通データローカル領域11には、装置10Aで生成された更新データだけが格納されるのではなく、他の装置10B、10Cで生成された更新データが格納される場合もある。特にこの様な場合において、更新データと既存の格納データとでタイムスタンプが同一となる場合が起こり得る。タイムスタンプが同一である場合、優先順位に応じた判定を行う。つまり、更新データの方が既存の格納データよりも優先順位が高ければ更新データを上書き格納し、低ければ格納しない。ここでは上記の通り優先順位は「装置10A>装置10B>装置10C」と設定されている。尚、この処理については受信処理の際にも行うものであり、後に図6に示す例を用いて詳しく説明するものとする。
何れにしても、上記のようにタイムスタンプを生成することで、例えば複数の装置10で同じタイミングで発生したデータには、同一のタイムスタンプが付加される可能性が高くなる。つまり、例えば装置10Aと装置10Bで同時に発生したが、装置10Aでは時刻“01時59分59秒236ミリ秒”、装置10Bでは時刻“01時59分59秒271ミリ秒”に発生したと見做されるデータであっても、タイムスタンプは両方とも「01:59:59.250」となる。よって、タイムスタンプに基づく判定では、両データが同一タイミングで発生したものと見做されることになる。
また、例えば、予めタイムスタンプ精度を固定的に設定する場合、時計差異(時差)が大きい場合も考慮してマージンを採って例えばタイムスタンプ精度を500msecや1秒等に設定することが考えられる。タイムスタンプ精度が仮に1秒とした場合、上記の例では両データともタイムスタンプは「01:59:59」となる。しかしながら、この場合、タイムスタンプの時刻と実際の時刻(あるいは内部時計の時刻)との差が大きくなり、上述した信頼性が損なわれることになる。
これに対して、上記本手法では、上記のように「システム上の最大時差」に基づいてタイムスタンプ精度を決定するので、状況に応じた適切なタイムスタンプ精度を決定することができる。すなわち、上記本手法により決定されるタイムスタンプ精度は、「システム上の最大時差」よりも大きいので、例えば複数の装置10で同じタイミングに発生したデータには、同一のタイムスタンプが付加される可能性が高くなる。この条件に加えて更に出来るだけ小さい値となるようにタイムスタンプ精度を決定することで、タイムスタンプと実際の時刻との差は比較的小さくて済み、上述した信頼性が損なわれることはない。
また、データ情報送受信処理部15は、ここでは上記のように決定されたデータ送信周期(=25msec)に従って共通データローカル領域11の格納データを、他の各装置10B,10Cへ送信する。但し、図5に示すように、データの更新が全く無い場合には、送信処理を行わない。データ更新の有無は、例えばデータ更新有無を示す不図示のフラグを設けておき、タイムスタンプ正規化処理部14はデータ格納を行う毎にフラグONし、データ情報送受信処理部15はフラグONである場合のみデータ送信を行うとともにフラグOFFする。勿論、これは一例であり、この例に限らない。
また、上記の通り必須ではないが優先制御判定処理も行うようにしてもよい。
すなわち、まず、予め各装置10の優先順序が設定されている。これは、ユーザ等が任意に決めて設定しておく。ここでは、仮に「装置10A>装置10B>装置10C」であるものとする。つまり、装置10Aが最も優先順位が高いものとする。また、共通データローカル領域11に任意のデータを格納する際には、上記タイムスタンプだけでなく、そのデータを生成した装置を示す識別用ID等も一緒に格納する。
そして、新たな更新データに対して上記のようにタイムスタンプを生成・付与した後にこれを共通データローカル領域11に格納する際に、既存の格納データのタイムスタンプと比較することで、既存データよりも新しい場合には新規更新データを上書き格納するが、既存データよりも古い場合には新規更新データは格納せずに例えば破棄する。そして、新規更新データと既存データのタイムスタンプ時刻が同一の場合には、上記優先順位に従って新規更新データを上書き格納するか否かを判定する。すなわち、新規更新データの生成元装置が、既存データの生成元装置よりも優先順位が高い場合には、新規更新データを上書き格納する。
また、図6には、受信側の処理動作例を示す。
ここでは装置10Aの動作を示すものとし、図4で説明したように、データ種別「データ情報D2」に係わる更新データとして、装置10Bから送信される更新データD2bと、装置10Cから送信される更新データD2cとを受信するものとする。これら各更新データには上記優先度情報が付与されており、これよりD2bが装置10Bの更新データであり、D2cが装置10Cの更新データであると認識できるものとする。勿論、これらがデータ種別「データ情報D2」に係わる更新データであることも認識できる。
上記各更新データD2b、D2cは、更新の都度、そのときの内部時計12の時刻に基づいて生成されたタイムスタンプが、図示のように付与されて送信されてくる。データ情報受信処理部15bは、受信した更新データのタイムスタンプが、共通データローカル領域11内の「データ情報D2」の格納領域の既存データのタイムスタンプよりも新しい場合に、この受信データを「データ情報D2」の格納領域に上書き格納する。一方、タイムスタンプが同一の場合には、優先順位に基づいて、既存データよりも優先順位が高い場合に、この受信データを「データ情報D2」の格納領域に上書き格納する。
図示の例では、まず、装置10Bからの送信データD2b(01:59:59.000)を受信したとき、ここではこれは不図示の既存の格納データより新しいものとし、この受信データを自装置(装置10A)内の共通データローカル領域11内の「データ情報D2」の格納領域に格納する。
次に、装置10Cからの送信データD2c(01:59:59.050)を受信すると、これは現在の「データ情報D2」の格納領域の格納データ(D2b(01:59:59.000))と比較してタイムスタンプが新しいので、「データ情報D2」の格納領域に、受信データD2c(01:59:59.050)に上書き格納する。つまり、「データ情報D2」の格納データを更新する。
次に、装置10Cからの送信データD2c(01:59:59.100)を受信すると、これは現在の「データ情報D2」の格納領域の格納データ(D2c(01:59:59.050))と比較してタイムスタンプが新しいので、「データ情報D2」の格納領域にD2c(01:59:59.100)を上書き格納する。つまり、「データ情報D2」の格納データを更新する。
次に、装置10Bからの送信データD2b(01:59:59.100)を受信すると、これは現在の「データ情報D2」の格納領域の格納データ(D2c(01:59:59.100))と比較してタイムスタンプが同じであるので、「優先制御判定」を行う。上記設定例では、装置Bは装置Cよりも優先されるので、更新を行うものと判定し、「データ情報D2」の格納領域にD2b(01:59:59.100)を上書き格納する。つまり、「データ情報D2」の格納データを更新する。
次に、装置10Bからの送信データD2b(01:59:59.150)を受信すると、これは現在の「データ情報D2」の格納領域の格納データ(D2b(01:59:59.100))と比較してタイムスタンプが新しいので、「データ情報D2」の格納領域にD2b(01:59:59.150)を上書き格納する。つまり、「データ情報D2」の格納データを更新する。
次に、装置10Cからの送信データD2c(01:59:59.150)を受信すると、これは現在の「データ情報D2」の格納領域の格納データ(D2b(01:59:59.150))と比較してタイムスタンプが同じであるので、「優先制御判定」を行う。上記設定例では、装置Bは装置Cよりも優先されるので、更新は行わないものと判定する。よって、「データ情報D2」の格納領域の格納データは、D2b(01:59:59.150)のままとなる。
尚、アプリケーション処理部16は、任意のタイミングで共通データローカル領域11内の「データ情報D2」の格納領域にアクセスして、「データ情報D2」に係わるその時点の最新データを取得する。
尚、既に述べたように、上記図1〜図6に示す例は、本手法を適用してシステムの一例に過ぎず、この様な例に限るものではなく、本手法は、複数の装置で各々自装置内の時計の時刻に基づいてタイムスタンプ付きデータを生成等するシステムに、適用されるものである。例えば上記図13〜図15で説明した様なデータを収集・蓄積して時系列データとするシステムに対しても、本手法は適用されるものである。
すなわち、上記図13〜図15で説明したようなシステムを構成する複数の装置の場合、各装置が備える不図示の記憶部は、例えば随時生成されるタイムスタンプ付きデータを蓄積記憶するものである。つまり、この例では、記憶部は、最新データのみを格納するようなものではなく、従って、新たに生成した(あるいは他の装置から送信された)タイムスタンプ付きデータを、記憶部に上書き格納するか否かを判定するようなことは行わない。この例では、上記のようにタイムスタンプ付きデータを蓄積記憶することで、上記記憶部には、例えば各データ種別毎の時系列データが記憶されることになる。
そして、上記図13〜図15で説明したように、例えば複数の時系列データを、それらのタイムスタンプの時刻に従って合成する合成処理を行うことで、合成データを生成する構成等があってよい。これに関して、特に、自装置の記憶部の時系列データと、他の装置の記憶部の時系列データとを合成する場合に、既に述べたように、適切な合成データが得られない可能性があった。
尚、各装置に、この様な合成処理を行う不図示のデータ合成部があってもよいし、各装置の時系列データを収集する不図示のサーバ装置等に、データ合成部が備えられる構成であっても構わない。
既に説明したように、複数の装置の内部時計は、相互に時刻のズレがある場合が多く、例えば内部時計の時刻をそのままタイムスタンプとして使用する場合には、例えば、複数の装置で同一タイミングで得られたデータであっても、異なる時刻のタイムスタンプが付与されることになり、合成データを正しく生成できないことになる。この様に複数の装置の内部時計同士に時差があっても、上記のように本手法では上記「システム上の最大時差」よりも大きい(荒い)タイムスタンプ精度に従ってタイムスタンプを生成するので、例えば複数の装置で同一タイミングで得られたデータには同一のタイムスタンプが付与される可能性が高くなる。よって、例えば正しい合成データが生成できる可能性が高くなる。
尚、言うまでもないが、上記タイムスタンプ精度の複数の候補は、何れも、少なくとも内部時計12の時刻精度よりも“荒い”(悪い)ものとなるように設定する。上記の例では、内部時計12の時刻精度は、千分の1秒(1ミリ秒)単位であるのに対して、上記候補は最低でも百分の1秒(10ミリ秒)単位であり、内部時計12の時刻精度よりも“荒い”(悪い)ものとなっている。この様な候補のなかからタイムスタンプ精度を決定するのであるから、決定されるタイムスタンプ精度も、当然、内部時計12の時刻精度よりも“荒い”(悪い)ものとなる。
上述したように、本手法では、システム上での送受信処理に伴う実測データに基づいて上記「システム上の最大時差」を求めて、これに基づいてタイムスタンプ精度を動的に決定している。つまり、その時の装置構成等の実際の状況に応じた適切なタイムスタンプ精度を自動的に動的に決定できる。また、装置構成等の変化があった場合にも、この変化に対応した適切なタイムスタンプ精度を自動的に動的に決定できる。あるいは、各装置10毎に、その内部時計の時刻精度(本当の時刻との差)は時間の経過と共に変化するものであり、以って上記「システム上の最大時差」も変化するものであるが、この様な変化にも対応した適切なタイムスタンプ精度を自動的に動的に決定できる。
また、「データ情報送信処理」に係わるデータ配信周期を動的に決定することが可能になり、受信側装置においては配信されるデータ情報の配信頻度に合わせて処理負荷が変動するため、システム構成全体に動的に最適化されたデータ情報の配信が可能となる。
以上説明したように本手法によれば、複数の装置で各々自装置内の時計の時刻に基づいてタイムスタンプ付きデータを生成等するシステムにおいて、タイムスタンプの精度を、そのときの状況に応じて適宜適切な値に設定することができ、以って各データの相対的な時系列関係を正しく判定できる。
あるいは、上述した本手法によれば、複数の装置で構成されリアルタイムデータを取得・記憶するシステムであって、各リアルタイムデータにタイムスタンプを付与するシステムにおいて、システムとして有意義な精度のタイムスタンプを有したリアルタイムデータを、得ることができる。尚、システムとして有意義な精度のタイムスタンプとは、背景技術で説明したデータの連続性と整合性が、満たされるようにするタイムスタンプ精度を意味する。
また、過度なリアルタイムデータの更新を抑制することが可能になり各装置の処理負荷を適正化することが可能になる。例えば、上記のように、共有データとしてのリアルタイムデータに関して、新たな更新データと、共有メモリ等に記憶されている既存データとの時系列的関係(新旧関係)を、タイムスタンプに基づいて正しく判定でき、以ってほぼ確実に最新データが共有メモリ等に記憶された状態となると共に、ほぼ確実に全ての装置おいて同じデータが最新データとして共有メモリ等に記憶された状態となる。尚、共有メモリの一例が上記共通データローカル領域11である。
本手法では、複数の装置で各々自装置内の時計の時刻に基づいてタイムスタンプ付きデータを生成等するシステムにおいて、装置間で定刻に相互に時刻情報の通信を行い、この通信結果に基づいて各装置間の伝送遅延と自装置と他の装置との時計差異(時差)を求める。そして、システム全体としての時計差異の最大値(システム上も最大時差)を求め、これに基づいて自動的にタイムスタンプ精度を決定する。決定したタイムスタンプ精度に基づいて各リアルタイムデータのタイムスタンプを生成(タイムスタンプ正規化)する。
上記のことから、システムとして有意義な精度のタイムスタンプを有したリアルタイムデータを得ることができる。すなわち、例えば、各装置の内部時計の狂いによって、複数の装置で同時に生成/更新されたデータであっても、その生成/更新時刻は異なるものとなっても、タイムスタンプは同一となる可能性が高くなるようにできる。これによって、タイムスタンプに基づく判定によって、これらのデータは同一タイミングで生成/更新されたものと見做されるようにできる。これより、例えばこれら複数のデータの合成データを生成する必要がある場合でも、正しい合成データを生成可能となる。
また、タイムスタンプ精度より短い更新周期によりリアルタイムデータの配信・等値化を行うことで、過度なリアルタイムデータの更新を抑制することが可能になり、各装置の処理負荷を適正化することが可能になる。
ここで、図1のタイムスタンプ精度算定処理部13の構成は、図2の例に限らない。以下、他の例について説明する。
図7に、図1のタイムスタンプ精度算定処理部13の詳細構成図(他の例)を示す。
尚、図7において、図2に示す構成と略同一のものについては、同一符号を付してあり、その説明は省略または簡略化するものとする。
これより、まず、図7の例においても、タイムスタンプ精度算定処理部13は、上記図2の例と同様に上記定刻通知処理部21、定刻通知受信処理部22を有しており、これらについては説明を省略する。
一方で、図7の例では、タイムスタンプ精度算定処理部13は、上記タイムスタンプ精度テーブル記憶部24(タイムスタンプ精度テーブル30)は有していない。その代わりに、タイムスタンプ精度算出条件データ記憶部25を有している。
タイムスタンプ精度算出条件データ記憶部25には、予め、図示のタイムスタンプ精度算出条件データ40が記憶されている。タイムスタンプ精度算出条件データ40は、図示のタイムスタンプ精度間隔41、データ更新周期係数42等を有する。
また、図7の例では、タイムスタンプ精度算定処理部13は、更に、精度算定処理部50を有する。精度算定処理部50は、上記精度算定処理部23と同様に、例えば、上記時差算出機能によって各他の装置10との各時差を算出したら、これら各時差から「システム上の最大時差」を求める処理機能を有する。精度算定処理部50は、この「システム上の最大時差」と、上記タイムスタンプ精度算出条件データ40に基づいて、上記タイムスタンプ精度(システム・タイムスタンプ精度)を算出する。この算出処理の一例を、以下、説明する。
算出方法としては、例えば、
n = (“システム上の最大時差÷タイムスタンプ精度間隔”の商) + 1
タイムスタンプ精度(システム・タイムスタンプ精度)
= タイムスタンプ精度間隔 × n
等とするが、この例に限らない。
尚、上記算出式におけるタイムスタンプ精度間隔は、タイムスタンプ精度算出条件データ40のタイムスタンプ精度間隔41の値を用いる。図7に示す例では、タイムスタンプ精度間隔41=‘50’(msec)であるので、算出式は下記のようになる。
n = (“システム上の最大時差÷50”の商) + 1
タイムスタンプ精度 = 50 × n
上記算出方法によれば、タイムスタンプ精度と成り得る値は、タイムスタンプ精度間隔のn倍(つまり、整数倍)となる。よって、図7に示す例の場合、タイムスタンプ精度と成り得る値は、50、100、150、200、250、・・・等となる。これは、基本的には、タイムスタンプ精度の候補が、50、100、150、200、250、・・・であることと同義と見做してよいものである。
そして、上記算出式によれば、これらの候補の中で、「システム上の最大時差」より大きく、且つ、そのなかで最小のものが、タイムスタンプ精度に決定されることになる。換言すれば、「システム上の最大時差」より候補の中で最も「システム上の最大時差」に近いものが、タイムスタンプ精度に決定される。
仮に、「システム上の最大時差」=‘135’であったならば、135÷50の商は‘2’であるので、n=3となる。よって、タイムスタンプ精度=50×3=150となる。
また、図7の例において、タイムスタンプ精度算定処理部13は、更に、上記算出したタイムスタンプ精度と、上記タイムスタンプ精度算出条件データ40のデータ更新周期係数42とを用いて、以下の算出式により上記システム・データ更新周期を算出するようにしてもよい。
システム・データ更新周期=タイムスタンプ精度×データ更新周期係数
データ更新周期係数42は、タイムスタンプ精度に対する任意の係数であり、上記のように、システム・データ更新周期は、タイムスタンプ精度にデータ更新周期係数を掛け算した値になる。
上述したように、図2の方式ではシステム・タイムスタンプ精度、システム・データ更新周期と成り得る値(複数の候補)を予め登録しておき選択するのに対して、図7の方式ではこれらを算出する為の算出式や所定値、係数などを予め登録しておき算出する方法を採っている。但し、「システム上の最大時差」に応じたシステム・タイムスタンプ精度、システム・データ更新周期を求める点では、図2と図7は同じである。
上記図7に係わる方式では、図2の方式に比べて、予め保持するデータ量が少なくて済む。また、上記図7に係わる方式では、図2の方式でのタイムスタンプ精度テーブル30内に定義されたデータより大きい「システム上の最大時差」が発生した場合でも対応できる。つまり、図2の例では、「システム上の最大時差」が500(ms)以上である場合には、対応出来ないことになる。また、上記図7に係わる方式では、システム全体の稼働状況に応じてタイムスタンプ精度の間隔を延ばしたりすることができ、より柔軟な対応が可能となる。