(57)【要約】  分散したセンサノードを含むセンサネットワークにおける分散処理で、例えば１万台程度の大規模なセンサネットワークであっても迅速なデータ処理を実現する。変数セット１０１は、ＫｅｙとＶａｌｕｅまたはＫｅｙに対応する同期先を紐づけた変数のデータベースを記憶する。ＳＦＥ１０２は、一つの状態において、自装置の変数セット１０１内の変数の参照または更新を要求する処理を含む処理を実行するとともに、変数を参照しながら条件を評価して他の状態に遷移する。変数同期１０３部は、要求が示すＫｅｙに対応する変数に対して同期先が指定されていれば、同期先との間で要求が示すＫｅｙを通信しながら、自装置の要求Ｋｅｙに対応する変数のＶａｌｕｅと同期先の要求Ｋｅｙに対応する変数のＶａｌｕｅとを同期させる。
2013145254.tif 000002
【特許請求の範囲】
【請求項１】
センサネットワークにおいて分散処理を実行するコンピュータに、
キーと値と前記キーに対応する同期先を紐づけた変数のデータベースを変数セットとして記憶する機能と、
一つの状態において、自装置の前記変数セット内の変数の参照または更新を要求する処理を実行するとともに、前記自装置の前記変数セット内の変数を参照しながら条件を評価して他の状態に遷移させるステートフローエンジン機能と、
前記自装置の前記変数セット内の変数の参照または更新を要求する処理が実行された場合に、前記要求が示すキーに対応する変数に対して、前記同期先との間で前記要求が示すキーを通信し、前記自装置の前記変数セット内の前記要求が示すキーに対応する変数の値と前記同期先の前記変数セット内の前記要求が示すキーに対応する変数の値とを同期させる変数同期機能と、
を実行させるためのプログラム。
【請求項２】
前記変数同期機能は、
前記自装置の前記変数セット内の変数の参照または更新を要求する処理が実行された場合に、前記変数セットにおいて、前記要求が示すキーに対応する変数の値を参照または更新する機能と、
前記要求が示すキーに対応する変数に対して前記同期先が指定されていれば、前記同期先が示す前記変数セットの更新を要求する要求メッセージを前記同期先に送信する機能と、
同期元装置から前記要求メッセージを受信した場合に、前記要求メッセージが示す前記自装置の前記変数セットにおいて、前記要求メッセージが示すキーに対応する変数の値を更新する機能と、
を含むことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記ステートフローエンジン機能は、
条件を記述した条件部または実行する処理を記述した処理部を含むコンテキストボックスを組み合わせて状態遷移マシンを記述するファイルであるコンテキストシートに記述されている前記コンテキストボックスを順次読み込む機能と、
前記読み込んだコンテキストボックスの前記処理部を解釈して前記自装置の前記変数セット内の変数の参照または更新を要求する処理を含む処理を実行する機能と、
前記自装置の前記変数セット内の変数を参照しながら前記読み込んだコンテキストボックスの前記条件部を評価し、前記評価の結果に応じて前記条件部をさらに評価しまたは他の前記コンテキストボックスの読込みに遷移する機能と、
を含むことを特徴とする請求項１または２のいずれかに記載のプログラム。
【請求項４】
前記変数同期機能は、前記同期先との間で前記要求が示すキーをユニキャストで通信する、
ことを特徴とする請求項１ないし３のいずれかに記載のプログラム。
【請求項５】
センサネットワークにおいて分散処理を実行する装置であって、
キーと値と前記キーに対応する同期先を紐づけた変数のデータベースを変数セットとして記憶する変数セット記憶部と、
一つの状態において、自装置の前記変数セット内の変数の参照または更新を要求する処理を実行するとともに、前記自装置の前記変数セット内の変数を参照しながら条件を評価して他の状態に遷移させるステートフローエンジン部と、
前記自装置の前記変数セット内の変数の更新を要求する処理が実行された場合に、前記要求が示すキーに対応する変数に対して、前記同期先との間で前記要求が示すキーを通信し、前記自装置の前記変数セット内の前記要求が示すキーに対応する変数の値と前記同期先の前記変数セット内の前記要求が示すキーに対応する変数の値とを同期させる変数同期部と、
を備えることを特徴とする分散処理装置。
【請求項６】
前記変数同期部は、
前記自装置の前記変数セット内の変数の更新を要求する処理が実行された場合に、前記変数セットにおいて、前記要求が示すキーに対応する変数の値を更新する機能と、
前記要求が示すキーに対応する変数に対して前記同期先が指定されていれば、前記同期先が示す前記変数セットの更新を要求する要求メッセージを前記同期先に送信する機能と、
同期元装置から前記要求メッセージを受信した場合に、前記要求メッセージが示す前記自装置の前記変数セットにおいて、前記要求メッセージが示すキーに対応する変数の値を更新し、前記参照の結果を含む前記応答メッセージを前記同期元装置に返信する機能と、
を備えることを特徴とする請求項５に記載の分散処理装置。
【請求項７】
前記ステートフローエンジン部は、
条件を記述した条件部または実行する処理を記述した処理部を含むコンテキストボックスを組み合わせて状態遷移マシンを記述するファイルであるコンテキストシートに記述されている前記コンテキストボックスを順次読み込む機能と、
前記読み込んだコンテキストボックスの前記処理部を解釈して前記自装置の前記変数セット内の変数の参照または更新を要求する処理を含む処理を実行する機能と、
前記自装置の前記変数セット内の変数を参照しながら前記読み込んだコンテキストボックスの前記条件部を評価し、前記評価の結果に応じて前記条件部をさらに評価しまたは他の前記コンテキストボックスの読込みに遷移する機能と、
を備えることを特徴とする請求項５または６のいずれかに記載のプログラム。
【請求項８】
前記変数同期部は、前記同期先との間で前記要求が示すキーをユニキャストで通信する、
ことを特徴とする請求項５ないし７のいずれかに記載の分散処理装置。
【請求項９】
センサネットワークにおいて分散処理を実行する方法であって、
キーと値と前記キーに対応する同期先を紐づけた変数のデータベースを変数セットとして記憶し、
一つの状態において、自装置の前記変数セット内の変数の参照または更新を要求する処理を実行するとともに、前記自装置の前記変数セット内の変数を参照しながら条件を評価して他の状態に遷移させるステートフローを実行し、
前記自装置の前記変数セット内の変数の更新を要求する処理が実行された場合に、前記要求が示すキーに対応する変数に対して、前記同期先との間で前記要求が示すキーを通信し、前記自装置の前記変数セット内の前記要求が示すキーに対応する変数の値と前記同期先の前記変数セット内の前記要求が示すキーに対応する変数の値とを同期させる変数同期を実行する、
ことを備えることを特徴とする分散処理方法。
【請求項１０】
前記変数同期の実行において、
前記自装置の前記変数セット内の変数の更新を要求する処理が実行された場合に、前記変数セットにおいて、前記要求が示すキーに対応する変数の値を更新し、
前記要求が示すキーに対応する変数に対して前記同期先が指定されていれば、前記同期先が示す前記変数セットの更新を要求する要求メッセージを前記同期先に送信し、
同期元装置から前記要求メッセージを受信した場合に、前記要求メッセージが示す前記自装置の前記変数セットにおいて、前記要求メッセージが示すキーに対応する変数の値を更新し、前記参照の結果を含む前記応答メッセージを前記同期元装置に返信する、
ことを備えることを特徴とする請求項９に記載の分散処理方法。
【請求項１１】
前記ステートフローの実行において、
条件を記述した条件部または実行する処理を記述した処理部を含むコンテキストボックスを組み合わせて状態遷移マシンを記述するファイルであるコンテキストシートに記述されている前記コンテキストボックスを順次読み込み、
前記読み込んだコンテキストボックスの前記処理部を解釈して前記自装置の前記変数セット内の変数の参照または更新を要求する処理を含む処理を実行し、
前記自装置の前記変数セット内の変数を参照しながら前記読み込んだコンテキストボックスの前記条件部を評価し、前記評価の結果に応じて前記条件部をさらに評価しまたは他の前記コンテキストボックスの読込みに遷移する、
ことを備えることを特徴とする請求項９または１０のいずれかに記載の分散処理方法。
【請求項１２】
前記変数同期に実行において、前記同期先との間で前記要求が示すキーをユニキャストで通信する、
ことを備えることを特徴とする請求項９ないし１１のいずれかに記載の分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
分散したセンサノードを含むセンサネットワークにおいて分散処理を行なうプログラム、装置、および方法に関する。
【背景技術】
【０００２】
アドホックネットワークをはじめとするセンサネットワークは、複数のセンサ付無線端末であるノードを空間に散在させ、それらが協調して通信を行い、環境や物理的状況を採取する、例えば無線によるマルチホップネットワークである。【０００３】
ノードの仕様は、高性能のサーバ系のハードウェアに対して、限定された性能の組込装置である。ＣＰＵは例えば、センタサーバの６４ビット／３．０ギガヘルツクロック処理に対して、ノードの８ビット／８メガヘルツクロック処理である。ＲＡＭ（ランダムアクセスメモリ）は例えば、センタサーバの数十ギガバイト記憶容量に対して、ノードの数十キロバイト記憶容量である。ＲＯＭ（リードオンリーメモリ）は例えば、センタサーバは持たないのに対して、ノードは数十キロバイト記憶容量のものを持つ。そして、通信仕様は例えば、センタサーバの有線による１ギガビット／秒に対して、ノードの無線による数十から数百キロビット／秒である。【０００４】
代表的なトラフィックモデルは、多数（１万台規模）のノードが取得した数バイトのセンサデータをサーバへ送信する、マルチポイント対ポイント（Ｍｕｌｔｉｐｏｉｎｔ  ｔｏ  Ｐｏｉｎｔ：Ｍ２Ｐ）通信である。センサネットワーク上の各ノードと外部ネットワーク（インターネット等）上のサーバとの通信は、センサネットワーク上に配置されるゲートウェイによって中継する。従って、各ノードとゲートウェイの間の通信も、Ｍ２Ｐ通信になる。ノード対ゲートウェイ間のＭ２Ｐトラフィックと比較して、ノード間のポイント対ポイント（Ｐｏｉｎｔ  ｔｏ  Ｐｏｉｎｔ：Ｐ２Ｐ）のトラフィックは少ない。【０００５】
このようなセンサネットワークにおけるデータ処理モデルとしては、ノードからゲートウェイを介してサーバにデータを一括収集し、解析して得られた結果を制御装置へＰ２Ｐで返す方式が一般的である。定期的に一斉にデータがゲートウェイ、サーバに向かって集められ、サーバは情報を解析して結果をもとに特定のセンサノードに、Ｐ２Ｐで指示を出す。【０００６】
しかし、ノードの数が１万台等の大規模なセンサネットワークとなると、多量のデータによる処理時間の長時間化や、ネットワークの輻輳が生じてしまう。このため、分散処理を行なうことが望まれている。【０００７】
センサネットワークで分散処理を行なおうとする場合、処理能力が低いセンサノードや、通信コストの低いノード間通信を考慮する必要がある。【０００８】
また、無線によるセンサネットワークは、ノードの移動や無線の電波状況によって、構成が動的に変化する。大量のデータをデータセンタで一括収集する場合、トラフィックの集中箇所は予想困難である。従って、最終的に輻輳がゲートウェイ周辺で発生していた。【０００９】
このような問題に対して、アドホックネットワークとセンタサーバの境界に複数のＧＷを配置する従来技術が知られている。センタサーバがノードへフレームを送信する際に効率の良いＧＷを記憶し、該当のＧＷを経由するようフレーム送信することで、ノードへのトラフィックを分散させて輻輳を回避するものである。【００１０】
しかし、この従来技術では、ＧＷ周辺の輻輳回避は効果が期待できるが、サーバに到着するフレーム数は変化せず、センタ集中型の処理モデルである。【００１１】
また、種々のイベントを非同期に発生する複数の被管理コンピュータと、複数の被管理コンピュータのスケジュールおよび前記イベントを管理する管理コンピュータとを備えた従来技術が知られている。管理コンピュータは、イベントを一元的に管理する一元的管理手段を備え、一元的管理手段の管理結果に応じて次の処理に進むようにするものである。【００１２】
しかし、この従来技術も、管理コンピュータがイベントとワークフローを一元管理するため、センタ集中型の処理モデルである。【００１３】
上述のように、従来はセンタ集中型の処理モデルが通常であり、データ処理に時間を要し、迅速に応答することができないという問題点を有していた。例えば、１、０００万件のデータを収集して処理する場合、１データの処理時間を１００ｍｓ（ミリ秒）と仮定すると、１００ｍｓ×１０００万件=１００万秒（≒１２日）が必要となる。ビル管理システムの警報装置のように、センサによって侵入者の検知と同時に異常処理する用途にセンサネットワークを適用する場合、従来は、数百ノードの小規模ネットワークに適用が限定されてしまっていた。【００１４】
このように、センサネットワークのデータ処理で、センタ集中型モデルはノードからサーバにデータを収集・解析し、ノードへ応答する。しかし、大規模なセンサネットワークを構築した場合、トラフィックの輻輳とデータ解析時間の増大で迅速応答が困難であるという問題点を有していた。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２０１１-１９９６２５号公報
【特許文献２】特開２００１−３３１４６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
本発明は、大規模なセンサネットワークであっても迅速なデータ処理を実現することを目的とする。
【課題を解決するための手段】
【００１７】
態様の一例では、センサを搭載したノード装置を構成要素として含むセンサネットワークにおいて分散処理を実行するコンピュータに、キーと値とキーに対応する同期先を紐づけた変数のデータベースを変数セットとして記憶する機能と、一つの状態において、自装置の変数セット内の変数の参照または更新を要求する処理を実行するとともに、自装置の変数セット内の変数を参照しながら条件を評価して他の状態に遷移させるステートフローエンジン機能と、自装置の変数セット内の変数が更新を要求する処理が実行された場合に、要求が示すキーに対応する変数に対して同期先が指定されていれば、同期先との間で要求が示すキーを通信し、自装置の変数セット内の要求が示すキーに対応する変数の値と同期先の変数セット内の要求が示すキーに対応する変数の値とを同期させる変数同期機能とを実行させるためのプログラムとして実現される。
【発明の効果】
【００１８】
ノードの処理能力に応じて、フレキシブルに実行単位を変更し、処理を分散させることが可能となる。ノードでデータ処理することで、センタで大量のデータを解析する必要が無く迅速な応答が可能となる。分散した処理の同期は、集中管理方式でなく、Ｐ２Ｐによる変数同期で実現するのでネットワーク負荷が小さくて済む。これらにより、例えば１万台程度の大規模なセンサネットワークであっても迅速なデータ処理が可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態によるノードの構成例を示す図である。
【図２】変数セットのデータ構造およびデータ構成例を示す図である。
【図３】ＣＢ（コンテキストボックス）のデータ構造を示す図である。
【図４】ＳＦＥによるＣＳ内の各ＣＢの実行による状態遷移処理と、変数同期によるノード間の各変数セット内の各変数の同期処理との関係を示す動作説明図である。
【図５】本実施形態をホームセキュリティシステムに適用した例の説明図である。
【図６】従来技術の説明図である。
【図７】本実施形態をホームセキュリティシステムにおいて適用した例におけるホームサーバでのＣＢの状態遷移例と変数セットの更新例を示した図である。
【図８】本実施形態をホームセキュリティシステムにおいて適用した例において、センサノード、ホームサーバ、およびセンタで分散処理を行う場合のＣＢの状態遷移例と変数セットの更新例を示した図である。
【図９】ＳＦＥの制御動作を示すフローチャートである。
【図１０】変数同期の制御動作における変数更新処理（その１）を示すフローチャートである。
【図１１】変数同期の制御動作における変数更新処理（その２）を示すフローチャートである。
【図１２】変数同期の制御動作における変数参照処理を示すフローチャートである。
【図１３】本実施形態のシステムを実現可能なハードウェアシステムの構成図である。
【発明を実施するための形態】
【００２０】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。
図１は、本発明の実施形態によるノード１００の構成例を示す図である。本実施形態は、センサを搭載したノード１００を構成要素として含むセンサネットワークにおいて分散処理を実行する分散処理装置として実現することができる。分散処理装置は例えば、ノードであり、またはゲートウェイであり、あるいはサーバである。図１の構成はノードの構成例を示しているが、ゲートウェイやサーバにおいても、同様の機能を実装することが可能である。ノード、ゲートウェイ、サーバ間の連携については、詳しく後述する。
【００２１】
図１において、変数セット（Ｖａｒｉａｂｌｅ  Ｓｅｔ：ＶＳ）（変数セット記憶部）１０１は、キー（以下「Ｋｅｙ」と呼ぶ）と値（以下「Ｖａｌｕｅ」と呼ぶ）またはＫｅｙに対応する同期先を紐づけた変数のデータベースとして記憶するものである。
【００２２】
ステートフローエンジン（Ｓｔａｔｅ  Ｆｌｏｗ  Ｅｎｇｉｎｅ。以下「ＳＦＥ」と呼ぶ）（ステートフローエンジン部）１０２は、一つの状態で、自ノード１００の変数セット１０１内の変数の参照または更新を要求する処理を含む処理を実行する。また、ＳＦＥ１０２は、自ノード１００内の変数セット１０１内の変数を参照しながら条件を評価して他の状態に遷移する。ＳＦＥ１０２の具体的な状態遷移処理は、コンテキストシート１０４を使って行われる。
【００２３】
コンテキストシート（Ｃｏｎｔｅｘｔ  Ｓｈｅｅｔ。以下「ＣＳ」と呼ぶ）１０４は、条件を記述した条件部または実行する処理を記述した処理部を含むコンテキストボックス（Ｃｏｎｔｅｘｔ  Ｂｏｘ。以下「ＣＢ」と呼ぶ）１０５を組み合わせて状態遷移マシンを記述するファイルである。ＳＦＥ１０２は、ＣＳ１０４に記述されているＣＢ１０５を順次読み込む。また、ＳＦＥ１０２は、読み込んだＣＢ１０５の処理部を解釈して自ノード１００の変数セット１０１内の変数の参照または更新を要求する処理を実行する機能を備える。そして、ＳＦＥ１０２は、自ノード１００の変数セット１０１内の変数を参照しながら読み込んだＣＢ１０５の条件部を評価し、その評価の結果に応じて条件部をさらに評価しまたは他のＣＢ１０５の読込みに遷移する。
なお、図１に示されるＡ〜ｎの内部プロセス１０６は、ＳＦＥ１０２が各ＣＢ１０５を状態遷移させるときに実行されるプログラムの実行イメージである。
【００２４】
変数同期（変数同期部）１０３は、ＳＦＥ１０２によって自ノード１００の変数セット１０１内の変数の参照または更新を要求する処理が実行された場合に、次の処理を実行する。変数同期１０３は通常は、要求が示すＫｅｙに対応する変数を変数セット１０１上で検索し、検索されたＫｅｙに対応するＶａｌｕｅを参照または更新する。
【００２５】
このとき、変数同期１０３は、更新要求が示すＫｅｙに対応して変数セット１０１上で検索された変数に対して同期先が指定されていれば、その同期先との間で要求が示すＫｅｙを通信する。そして、変数同期１０３は、自ノード１００の変数セット１０１内の要求が示すＫｅｙに対応する変数のＶａｌｕｅと、同期先の変数セット１０１内の要求が示すＫｅｙに対応する変数のＶａｌｕｅとを同期させる。より具体的には、変数同期１０３は、自ノード１００の変数セット１０１内のＫｅｙに対する変数のＶａｌｕｅを更新し、さらに同期先が示す変数セット１０１の更新を要求する要求メッセージを同期先に送信する。また、変数同期１０３は、同期先から更新要求メッセージを受信した場合は、自ノード１００の変数セット１０１内のＫｅｙに対する変数のＶａｌｕｅを更新する。ここで、同期元と同期先のノード１００の各変数同期１０３は、要求メッセージ（要求が示すＫｅｙ）および応答メッセージを、例えばユニキャストで通信してよい。
【００２６】
ＣＳＶＳ（Ｃｏｎｔｅｘｔ  Ｓｈｅｅｔ  Ｖａｒｉａｂｌｅ  Ｓｅｔ）サーバ１０７は、通信装置１０９を介して、ＳＦＥ１０２から読み取り可能なパスにＣＳ１０４を配置するプログラムである。
【００２７】
ＯＳ（オペレーティングシステム）１０８は、ノード１００のＳＦＥ１０２、変数同期１０３、ＣＳＶＳサーバ１０７等のプログラム機能をＣＰＵ１１０上で実行するための基本機能を提供する。ＣＰＵ１１０は、ノード１００を動作させる中央演算処理装置のハードウェアである。通信装置１０９は、他のノード１００との間の無線通信機能を実現するハードウェアである。
【００２８】
図２は、図１の変数セット１０１のデータ構造およびデータ構成例を示す図である。図２（ａ）のデータ構造に示されるように、変数セット１０１は、Ｋｅｙ１、Ｋｅｙ２等のＫｅｙ（キー）ごとに、Ｖａｌｕｅ１、Ｖａｌｕｅ２等のＶａｌｕｅ（値）を記憶することができる。また、Ｋｅｙごとに、同期先を記憶することができる。同期先は例えば、同期先の「ノード名／変数セット名／Ｋｅｙ」をＵＲＩの形式で表記してよい。一つのＫｅｙに対しては、Ｖａｌｕｅまたは同期先のいずれか一方または両方が登録される。ＫｅｙとＶａｌｕｅまたは同期先の一組が、一つの変数を表す。
【００２９】
図２（ｂ）は、変数セット１０１のデータ構成例を示している。Ｋｅｙ＝Ｋ１の変数に対して、Ｖａｌｕｅ＝Ｖ０、同期先＝ノード１００＝ノードＢ／変数セット１０１＝ＶＳ１／Ｋｅｙ＝Ｋ１が登録されている。また、Ｋｅｙ＝Ｋ２の変数に対しては、Ｖａｌｕｅ＝Ｖ１が登録されており、同期先は指定されていない。このような変数セット１０１のデータ構造に対して図１の変数同期１０３がアクセスする。この結果例えば、Ｋｅｙ＝Ｋ１の変数に対してＶａｌｕｅ＝Ｖ０が更新されると、同期先であるノードＢ、変数セットＶＳ１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅも同じ値に更新される。
【００３０】
図３は、図１のＣＳ１０４内の一つのＣＢ１０５のデータ構造を示す図である。ＣＢ１０５は、条件部と処理部とから構成される。条件部は複数の条件１、２、・・・、ｎを含むことができ、処理部も複数の処理ａ、ｂ、・・・、ｎを含むことができる。図１のＳＦＥ１０２は、ＣＢ１０５を読み込んだときに、処理部内の各処理を実行するとともに、条件部内の各条件を順次評価する。各ＣＢ１０５は、条件部と処理部の両方を備えてもよいし、どちらか片方のみを備えてもよい。
【００３１】
図４は、ＳＦＥ１０２によるＣＳ１０４内の各ＣＢ１０５の実行による状態遷移処理と、変数同期１０３によるノード１００間の各変数セット１０１内の各変数の同期処理との関係を示す動作説明図である。
【００３２】
例えばノード１００（＃Ａ）のＳＦＥ１０２は、自ノード内のＣＳ１０４を読み込み、最初のＣＢ１０５（＃１）の処理部（処理１、２）を実行するとともに、条件部（条件１、２）を順次評価する。この結果、例えば条件１の条件式が真になると、２番目のＣＢ１０５（＃２）への状態遷移が発生する。ノード１００（＃Ｂ）のＳＦＥ１０２も同様に、自ノード内のＣＳ１０４を読み込み、最初のＣＢ１０５（＃１）の処理部（処理１、２）を実行するとともに、条件部（条件１）を評価する。この結果、例えば条件１の条件式が真になると、２番目のＣＢ１０５（＃２）への状態遷移が発生する。なお、ノード１００（＃Ｂ）のＣＢ１０５（＃１）やＣＢ１０５（＃２）は、ノード１００（＃Ａ）のＣＢ１０５（＃１）やＣＢ１０５（＃２）とは異なってよい。ＳＦＥ１０２は、終了を示すＣＢ１０５に遷移した場合、評価を終了する。ＳＦＥ１０２は、条件部のみ設定されたＣＢ１０５については、状態遷移をするのみで、処理は実行しない。また、ＳＦＥ１０２は、処理部のみ設定された条件部の設定が無いＣＢ１０５については、状態遷移後に処理部で記述された処理を実行し、ＣＳ１０４の動作を終了する（終了を示すＣＢ１０５などがこれに該当する）。
【００３３】
ここで、ノード１００（＃Ａ）のＳＦＥ１０２が、ＣＢ１０５（＃２）の処理部内の処理１を実行した結果、例えば矢印４０１で示されるように、ノード１００（＃Ａ）の変数セット１０１内のＫｅｙ＝Ｋ１の変数に対する更新要求が発生する。
【００３４】
ノード１００（＃Ａ）の変数同期１０３は、ＳＦＥ１０２によって上記更新要求の処理が実行された場合に、ノード１００（＃Ａ）の変数セット１０１内のＫｅｙ＝Ｋ１の変数に対するＶａｌｕｅを、Ｖ０からＶ１に更新する。
【００３５】
ノード１００（＃Ａ）の変数同期１０３は、矢印４０２で示されるように、上記要求が示すＫｅｙ＝Ｋ１に対応する変数に対して、同期先＝ノードＢ／ＶＳ１／Ｋ１（図２（ｂ）参照）が指定されていることを認識する。
【００３６】
ノード１００（＃Ａ）の変数同期１０３は、その同期先が示す、ノード１００（＃Ｂ）の変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅのＶ１への更新を要求する要求メッセージを、図１の通信装置１０９から送信する。この要求メッセージのパケットには、宛先としてノード１００（＃Ｂ）のアドレス、送信元としてノード１００（＃Ａ）のアドレスが指定され、データ部には、同期先「ＶＳ１／Ｋ１」と更新データ「Ｖ１」が格納される。
【００３７】
この要求メッセージは、矢印４０３で示されるように、ノード１００（＃Ｂ）の通信装置１０９によって受信され、ノード１００（＃Ｂ）の変数同期１０３に渡される。
【００３８】
ノード１００（＃Ｂ）の変数同期１０３は、受信した要求メッセージを読むことにより、矢印４０４で示されるように、自ノードの変数セット１０１＝ＶＳ１内のＫｅｙ＝Ｋ１に対応する変数を検索し、その変数のＶａｌｕｅをＶ１に更新する。
【００３９】
ここで、ノード１００（＃Ｂ）のＳＦＥ１０２は、自ノード内のＣＳ１０４を読むことにより、例えばＣＢ１０５（＃１）の条件１の条件式を評価する。このとき例えば、自ノードの変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数への参照要求が発生する。ノード１００（＃Ｂ）の変数同期１０３は、上記参照要求が発生すると、自ノードの変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅを取得して、ＳＦＥ１０２に返す。このようにして、ノード１００（＃Ｂ）のＳＦＥ１０２は、例えばＣＢ１０５（＃１）の条件１の条件式を評価することによって、自ノードの変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅがＶ０からＶ１に変更されたか否かを監視している。ノード１００（＃Ｂ）のＳＦＥ１０２は、例えばＣＢ１０５（＃１）の条件１の条件式の評価結果が偽である場合には、同じ条件１の条件式の評価を繰り返し実行する。ノード１００（＃Ｂ）のＳＦＥ１０２は、自ノードの変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅがＶ１に変更され、ＣＢ１０５（＃１）の条件１の条件式の評価結果が真になると、ＣＢ１０５（＃２）への状態遷移を発生させる。この結果、ノード１００（＃Ｂ）のＳＦＥ１０２は、新たなＣＢ１０５（＃２）の処理１、２を実行する。
【００４０】
以上説明した図４に示されるようなノード１００（＃Ａ）、ノード１００（＃Ｂ）間の変数同期の適用例としては、次のようなものが考えられる。ノード１００（＃Ａ）は例えば一般家庭に設置されるガス漏れ警報センサである。ノード１００（＃Ｂ）は例えば、警備会社に設置されるガス漏れ通報装置である。ノード１００（＃Ｂ）は、図１による機能を実現できる限り、ゲートウェイやサーバに置き換えられてもよい。例えばノード１００（＃Ａ）において、ＣＢ１０５（＃１）の条件１が、ガスセンサの値を監視している。ガスセンサが異常値を示すと、ＣＢ１０５（＃２）への状態遷移が発生する。ノード１００（＃Ａ）のＣＢ１０５（＃２）では、処理２によってガス漏れ警報ブザーが鳴動させられる。これとともに、処理１によって、ノード１００（＃Ａ）の変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅが、ガスが漏れていないことを示す値Ｖ０からガスが漏れていることを示す値Ｖ１に更新される。この更新に応答して、ノード１００（＃Ａ）とノード１００（＃Ｂ）間の変数同期によって、警備会社にあるノード１００（＃Ｂ）の変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅが、ガスが漏れていることを示す値Ｖ１に同期して更新される。ノード１００（＃Ｂ）のガス漏れ通報装置では、ＣＢ１０５（＃１）の条件１が、ノード１００（＃Ａ）におけるガス漏れ発生を監視している。ノード１００（＃Ａ）でのガス漏れ発生により、ノード１００（＃Ｂ）の変数セット１０１内のＫｅｙ＝Ｋ１に対応するＶａｌｕｅがＶ１に更新されたことが、ＣＢ１０５（＃１）の条件１の評価＝真により検出される。この結果、ノード１００（＃Ｂ）において、ＣＢ１０５（＃２）への状態遷移が発生する。ノード１００（＃Ｂ）のＣＢ１０５（＃２）では、処理１または２によってガス漏れの発生が警備会社の警報システムに表示され、ガス漏れに対して必要な処置が講じられる。
【００４１】
以上の処理例において、ノード１００（＃Ａ）においてガス漏れが発生していない状態においては、ノード１００（＃Ａ）からノード１００（＃Ｂ）に対して通信トラフィックが発生することはない。ガス漏れが発生した場合のみ、変数同期に基づくＰ２Ｐの通信トラフィックが発生する。
【００４２】
本実施形態により、ノード１００側でＣＳ１０４に基づくフレキシブルな実行単位で配置可能な分散処理が実現されることにより、処理（状態遷移）を分散させることが可能となる。これにより、ノード１００のみでデータ処理することが可能となり、サーバ側で大量のデータを解析する必要がなくなり、サーバ側の処理を軽減して迅速な応答を行うことが可能となる。
【００４３】
また、本実施形態では、不特定多数のノード１００、ゲートウェイ、またはサーバが、変数セット１０１の各Ｋｅｙに対応する同期先の情報によってそのＫｅｙに対応する変数のＶａｌｕｅを共有し、自律的に同期をとることができる。従来は、特定のサーバ等が各ノード１００の状態を集中的に管理していたのとは異なる。この変数同期１０３の仕組みにより、通知することが必要な変数の情報のみを必要なタイミングで、ノード１００から他のノード１００またはゲートウェイ、サーバ等に、ユニキャスト（Ｐ２Ｐ）の通信で自律分散的に通知することが可能となる。この結果、１万台を超える規模が想定されるような大規模なセンサネットワークにおいても、トラフィックが分散されて輻輳の発生を回避することが可能となる。
【００４４】
さらに、自律分散処理によって、一つのノード１００の機能が停止しても、サーバ側の全体処理への影響を無くすことが可能となる。ＣＢ１０５と変数セット１０１のアップデートにより、ノード１００での処理の変更や追加を容易に行うことも可能となる。
【００４５】
図５は、本実施形態をホームセキュリティシステムに適用した適用例の説明図である。
各家庭には、人感センサ５０１とドアセンサ５０２、照度センサ５０３が設置されている。
【００４６】
従来は、図５（ａ）の家Ａとして示されるように、全てのセンサ５０１、５０２、５０３のデータが警備会社等のセンタ５０５に収集されて（センサデータの収集）、解析が行われていた（センサデータの解析II）。そして、分析結果が家Ａに通知されていた（分析結果の通知III ）。そのため、図６（ａ）に示されるように、ノード６０２の数が多くなると、図５（ａ）のセンサデータの収集において、ＧＷやセンタ６０１に近いところで輻輳が発生しやすかった。また、図５（ａ）のセンサデータの解析IIのデータ処理の時間も、数日単位で必要であった。なお、図５（ａ）の分析結果の通知III におけるＧＷやセンタ６０１から各ノード６０２への通知は、Ｐ２Ｐ通信で行われる。
【００４７】
これに対して、本実施形態では、図５（ｂ）の家Ｂとして示されるように、基本的に、センサネット側のホームサーバ５０４において、分散処理が実行される。具体的には、人感センサ５０１、ドアセンサ５０２、照度センサ５０３をそれぞれ構成する各ノードと、ホームサーバ５０４は、図１に示される本実施形態の構成を備えている。各センサ５０１、５０２、５０３からの各センサデータは、本実施形態による変数同期１０３（図５（ｂ）の変数同期）によって、ホームサーバ５０４内の変数セット１０１の対応する各変数との間で同期がとられる。そして、ホームサーバ５０４内のＳＦＥ１０２が、自装置のＣＳ１０４の各ＣＢ１０５（図１）による状態遷移処理を実行する（図５（ｂ）の状態遷移処理II）。この結果、警備会社等のセンタ５０５へ通知する必要が生じた場合に、ホームサーバ５０４のＳＦＥ１０２が、所定のＣＢ１０５の処理を実行することにより、自装置の変数セット１０１の該当する変数のＶａｌｕｅを更新する。この変数には、センタ５０５内の変数セット１０１の変数が同期先として指定されており、これによってホームサーバ５０４とセンタ５０５とで各センサ５０１、５０２、５０３の状態に関する同期がとられる。
【００４８】
このような構成により、例えば警報機作動等の緊急処理は、センタ５０５を介することなく、ホームサーバ５０４側のＳＦＥ１０２によって迅速に分散処理することが可能となる。同時に、各センサ５０１、５０２，５０３とホームサーバ５０４との間の変数同期１０３、およびホームサーバ５０４とセンタ５０５との間の変数同期１０３によって、センタ５０５への通知も例えば異常時のみ効率的に行うことが可能となり、ネットワークの輻輳を回避することができ、スケーラビリティが向上する。
【００４９】
図７は、図５（ｂ）のホームセキュリティの適用例におけるホームサーバ５０４でのＣＢ１０５の状態遷移例と変数セット１０１の更新例を示した図である。
【００５０】
変数セット１０１内の各Ｋｅｙ「ＨｕｍａｎＳｅｎｓｏｒ」「ＤｏｏｒＳｅｎｓｏｒ」「ＬｉｇｈｔＳｅｎｓｏｒ」に対応する各Ｖａｌｕｅは、変数同期１０３によって、図５（ｂ）の各センサ５０１、５０２、５０３のノードから自動更新される。各Ｖａｌｕｅは、「ｆａｌｓｅ」または「ｔｒｕｅ」の値をとり得る。Ｋｅｙ「ＨｕｍａｎＳｅｎｓｏｒ」のＶａｌｕｅが「ｔｒｕｅ」になると、人感センサ５０１のＯＮが検知される。Ｋｅｙ「ＤｏｏｒＳｅｎｓｏｒ」のＶａｌｕｅが「ｔｒｕｅ」になると、ドアセンサ５０２のＯＮが検知される。Ｋｅｙ「ＬｉｇｈｔＳｅｎｓｏｒ」のＶａｌｕｅが「ｔｒｕｅ」になると、照度センサ５０３のＯＮが検知される。
【００５１】
図７に示されるように、各センサ５０１、５０２、５０３の検知（ＯＮ）をトリガとして、順次状態遷移が発生する。異常が無い場合の状態遷移をドア開閉センサ５０２がＯＮ→照度センサ５０３がＯＮ→人感センサ５０１がＯＮの順として、セキュリティシステムを解除し、これ以外を異常と判断し警報機を作動させる。
【００５２】
開始ＣＢ１０５「ＯｗｎｅｒＧｏＯｕｔ」から順次状態遷移し、終了ＣＢ１０５である「ＯｗｅｎｒＧｅｔＨｏｍｅ」または「ＴｈｅｉｆＥｎｔｅｒeｄ」まで状態遷移する。
【００５３】
ＣＳ１０４を読み込んだ直後の状態は図７の初期状態であり、「ＯｗｎｅｒＧｏＯｕｔ」のＣＢ１０５へ状態遷移する。「ＯｗｎｅｒＧｏＯｕｔ」は処理が指定されていない。従って、処理部は実行されない。次に、「ＯｗｎｅｒＧｏＯｕｔ」の条件部の評価を条件１から開始する。
【００５４】
条件１が「ｔｒｕｅ」（Ｋｅｙ「ＨｕｍａｎＳｅｎｓｏｒ」のＶａｌｕｅが「ｔｒｕｅ」）の場合、ＣＢ１０５「ＴｈｉｅｆＥｎｔｅｒｅｄ」へ遷移する（図７のII）。「ＴｈｉｅｆＥｎｔｅｒｅｄ」のＣＢ１０５は、処理として警報機を作動させる。「ＴｈｉｅｆＥｎｔｅｒｅｄ」のＣＢ１０５は条件が設定されていない。従って、このＣＢ１０５で実行を終了する。
【００５５】
初期状態で、条件１が「ｆａｌｓｅ」（Ｋｅｙ「ＨｕｍａｎＳｅｎｓｏｒ」のＶａｌｕｅが「ｆａｌｓｅ」）の場合、条件２を評価する。条件２が「ｔｒｕｅ」（Ｋｅｙ「ＤｏｏｒＳｅｎｓｏｒ」のＶａｌｕｅが「ｔｒｕｅ」）なら、「ＤｏｏｒＯｐｅｎ」のＣＢ１０５へ遷移する（図７のIII ）。条件２が「ｆａｌｓｅ」（Ｋｅｙ「ＤｏｏｒＳｅｎｓｏｒ」のＶａｌｕｅが「ｆａｌｓｅ」）なら、条件３を評価する。
【００５６】
以下同様にして、終了を示すＣＢ１０５まで順次状態遷移し、処理部を実行する。
図８は、図１の構成のホームセキュリティシステムへの適用例で、センサノード５０１、５０２、５０３、ホームサーバ５０４、およびセンタ５０５で分散処理を行う場合のＣＢ１０５の状態遷移例と変数セット１０１の更新例を示した図である。
【００５７】
人感センサ５０１のノード１００のＳＦＥ１０２は、「ＨｕｍａｎＳｅｎｓｏｒＯｎ」のＣＢ１０５が登録されたＣＳ１０４を実行する。これにより、上記ＳＦＥ１０２は、人感センサ５０１の出力（ＯＮまたはＯＦＦ）をチェックし、その結果を人感センサ５０１のノードの変数セット１０１内のＫｅｙ「ＨｕｍａｎＳｅｎｓｏｒ」に対応するＶａｌｕｅに書き込む。この時、Ｋｅｙ「ＨｕｍａｎＳｅｎｓｏｒ」には、同期先としてホームサーバ５０４＝ホームサーバＢの変数セット１０１「ＶＳ１」内のＫｅｙ「ＨｕｍａｎＳｅｎｓｏｒ」（「ホームサーバＢ/ＶＳ１/ＨｕｍａｎＳｅｎｓｏｒ」）が指定されている。従って、人感センサ５０１が「ＨｕｍａｎＳｅｎｓｏｒ」にＶａｌｕｅを書き込んだ直後、人感センサ５０１内の変数同期１０３がホームサーバ５０４（ホームサーバＢ）内の変数同期１０３と通信を行う。そして、ホームサーバ５０４内の変数同期１０３が、ホームサーバ５０４の変数セット１０１「ＶＳ１」内のＫｅｙ「ＨｕｍａｎＳｅｎｓｏｒ」のＶａｌｕｅを更新する。
【００５８】
同様に、ドアセンサ５０２と照度センサ５０３は各々のセンサ出力を確認し、それぞれ自ノードのＫｅｙ「ＤｏｏｒＳｅｎｓｏｒ」及び「ＬｉｇｈｔＳｎｅｓｏｒ」の各Ｖａｌｕｅを更新する。そして、各センサ５０２、５０３内の各ノードの変数同期１０３は、同期先のホームサーバ５０４（ホームサーバＢ）の変数同期１０３と通信を実行する。これにより、ホームサーバ５０４の変数セット１０１「ＶＳ１」内の各Ｋｅｙ「ＤｏｏｒＳｅｎｓｏｒ」及び「ＬｉｇｈｔＳｎｅｓｏｒ」の各Ｖａｌｕｅを更新する。
【００５９】
ホームサーバ５０４（ホームサーバＢ）は、人感センサ５０１、ドアセンサ５０２、照度センサ５０３のそれぞれに対応する各Ｋｅｙの各Ｖａｌｕｅにより、ＣＢ１０５を状態遷移させ実行している。図７中のII、IV、Ｖのいずれかの状態遷移に合致した場合、ホームサーバ５０４のＳＦＥ１０２は、「ＴｈｅｉｆＥｎｔｅｒｅｄ」のＣＢ１０５へ遷移する。この時、ホームサーバ５０４（ホームサーバＢ）のＳＦＥ１０２は、警報機を作動させる処理を実行するとともに、センタ通報の処理を実行する。ホームサーバ５０４のＳＦＥ１０２および変数同期１０３は、センタ通報の処理を実行することにより、自装置内の変数セット１０１のＫｅｙ「Ａｌｅｒｔ」のＶａｌｕｅを「ｔｒｕｅ」に更新する。そして、同期先のセンタ５０５（警備会社）の変数セット１０１のＫｅｙ「Ａｌｅｒｔ＿ＨｏｍｅＢ」のＶａｌｕｅを「ｔｒｕｅ」に更新して、警報が行われる。
【００６０】
図９は、図１のＳＦＥ１０２の制御動作を示すフローチャートである。この制御動作は、図１のＣＰＵ１１０およびＯＳ１０８が、特には図示しないメモリに記憶された制御プログラムを実行する処理として実現される。
【００６１】
ＳＦＥ１０２が処理を開始すると、まず自装置内のＣＳ１０４（図１）を読み込む（ステップＳ９０１）。
【００６２】
次に、ＳＦＥ１０２は、ＣＳ１０４に登録されている開始ＣＢ１０５を、アクティブなＣＢ１０５に設定する（ステップＳ９０２）。これにより、開始ＣＢ１０５に対応する内部プロセス１０６が生成される。
【００６３】
ＳＦＥ１０２は、生成された内部プロセス１０６上で、アクティブにされたＣＢ１０５（最初は開始ＣＢ１０５）の処理部（図３参照）の実行を開始する（ステップＳ９０３）。処理部の実行においては、自装置の変数セット１０１内のＫｅｙの変数に対する更新要求または参照要求を、自装置の変数同期１０３に対して発行することができる。例えば、図４で、ノード１００（＃Ａ）のＳＦＥ１０２が、ＣＢ１０５（＃２）の処理部内の処理１を実行する場合である。この場合には、前述したように、例えば矢印４０１で示されるように、ノード１００（＃Ａ）の変数セット１０１内のＫｅｙ＝Ｋ１の変数に対する更新要求が発生する。あるいは例えば、図８で、ホームサーバ５０４のＳＦＥ１０２が、「ＴｈｉｅｆＥｎｔｅｒｅｄ」のＣＢ１０５の処理部内の処理「センタ通報」を実行することにより、自サーバの変数セット１０１内のＫｅｙ「Ａｌｅｒｔ」のＶａｌｕｅを「ｆａｌｓｅ」から「ｔｒｕｅ」に更新するような場合である。なお、ＳＦＥ１０２は、処理部の実行において、変数更新以外に、例えばセンサのハードウェアの出力確認を行うような処理も実行することができる。例えば、図８で、人感センサ５０１のノードのＳＦＥ１０２が、「ＨｕｍａｎＳｅｎｓｏｒＯｎ」のＣＢ１０５の処理部内の処理「人感センサの出力確認」を実行するような場合である。
【００６４】
ＳＦＥ１０２は、処理部を実行した後、現在のアクティブなＣＢ１０５が終了を示しているか否かを判定する（ステップＳ９０４）。終了を示すＣＢ１０５であるか否かは、そのＣＢ１０５に条件部（図３参照）が設定されているか否かで判定できる。
【００６５】
条件部が設定されていなければ、ステップＳ９０３でそのＣＢ１０５の処理部が実行された後、他のＣＢ１０５に状態遷移することはないので、ＳＦＥ１０２は、そのままＣＳ１０４の処理を終了する（ステップＳ９０４の判定がＹＥＳ）。
【００６６】
現在のアクティブなＣＢ１０５が終了を示してなくステップＳ９０４の判定がＮＯならば、ＳＦＥ１０２は、アクティブなＣＢ１０５の条件部を取得する（ステップＳ９０５）。
【００６７】
ＣＢ１０５の条件部には、図３で説明したように、複数の条件（条件文）１〜ｎを登録することができる。そこで、条件部内の各条件を条件ポインタによって指し示す。ＳＦＥ１０２はまず、条件ポインタを、条件部内の最上位の条件文にセットする（ステップＳ９０６）。
【００６８】
ＳＦＥ１０２は、条件文を評価する（ステップＳ９０７）。条件文に変数が含まれていれば、ＳＦＥ１０２は、自装置内の変数セット１０１（図１参照）内のその変数に対応するＫｅｙのＶａｌｕｅの参照要求を、自装置内の変数同期１０３（図１参照）に対して発行する。この結果、変数同期１０３から返されるＶａｌｕｅを用いて、その変数を含む条件文を評価する。例えば、図４で、ノード１００（＃Ｂ）のＳＦＥ１０２が、例えばＣＢ１０５（＃１）の条件１の条件式を評価することによって、自ノードの変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅを評価するような場合である。なお、ＳＦＥ１０２は、条件文の評価において、変数参照以外に、例えばセンサのハードウェア出力を評価することによって、センサがＯＮになっているか否かを確認するような評価を行ってもよい。例えば、図８で、人感センサ５０１のノードのＳＦＥ１０２が「ＨｕｍａｎＳｅｎｓｏｒＯｎ」のＣＢ１０５の条件部の条件「人感センサはＯＮ？」を評価するような場合である。
【００６９】
ＳＦＥ１０２は、条件文を評価した後、その条件文が真であるか否かを判定する（ステップＳ９０８）。
【００７０】
条件文が真ではなく（偽であって）、ステップＳ９０８の判定がＮＯならば、ＳＦＥ１０２は、条件ポインタを次へ移動する（ステップ９０９）。
【００７１】
ＳＦＥ１０２は、次には条件部には条件文がそれ以上なく条件ポインタが空であるか否かを判定する（ステップＳ９１０）。
【００７２】
条件ポインタが空でなくステップＳ９１０の判定がＮＯならば、ステップＳ９０７の処理に移動して、条件ポインタが新たに指し示す次の条件文の評価を繰り返し実行する。例えば、図７において、「ＯｗｎｅｒＧｏＯｕｔ」のＣＢ１０５の条件部が評価されるときに、条件１が偽である場合には条件２が評価され、さらに条件２も偽である場合には条件３が評価されるような場合である。
【００７３】
条件部に条件文がそれ以上なく条件ポインタが空になってステップＳ９１０の判定がＹＥＳになると、次の処理が実行される。ＳＦＥ１０２は、変数同期１０３から自装置の変数セット１０１内のいずれかの変数が他装置（ノード、サーバ、ゲートウェイ等）によって更新された旨を通知されることを例えば一定時間待ち合わせる（ステップＳ９１１）。例えば、図８で、センタ５０５のＳＦＥ１０２が「ＭｏｎｉｔｏｒｉｎｇＳｅｃｕｒｉｔｙ」のＣＢ１０５の各条件「ホームサーバＡ通報？」および「ホームサーバＢ通報？」の評価を終了した後に待合せを行う処理である。ここでは例えば、自サーバの変数セット１０１内のＫｅｙ「Ａｌｅｒｔ＿ＨｏｍｅＡ」の変数またはＫｅｙ「Ａｌｅｒｔ＿ＨｏｍｅＢ」の変数が、ホームサーバ５０４等からの変数同期によって更新されることが、待ち合わせられる。あるいは、ＳＦＥ１０２は、センサの出力が変化することを一定時間待ち合わせるような処理を実行してもよい。例えば、図８で、人感センサ５０１のＳＦＥ１０２が「ＨｏｍｅＳｅｎｓｏｒＯｎ」のＣＢ１０５の条件「人感センサはＯｎ？」の評価を終了した後に待合せを行う処理である。ここでは例えば、人感センサ５０１のハードウェア出力が変化することが一定時間待ち合わせる。
【００７４】
その後、ＳＦＥ１０２は、ステップＳ９０６の処理に戻って、条件ポインタを再び現在のアクティブなＣＢ１０５の条件部の最上位の条件文にセットし、上述したステップＳ９０７からＳ９１０で示される各条件文の評価処理を繰り返し実行する。
【００７５】
ステップＳ９０８の判定で条件文が真であると判定された場合、ＳＦＥ１０２は、現在のアクティブなＣＢ１０５の処理を終了し、そのＣＢ１０５が示す次のＣＢ１０５にジャンプ（状態遷移）する（ステップＳ９０８の判定がＹＥＳ→ステップＳ９１２）。例えば、図４で、ノード１００（＃Ｂ）のＳＦＥ１０２が、自ノードの変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅがＶ１に変更されてＣＢ１０５（＃１）の条件１の条件式の評価結果が真になったことを判定したような場合である。この場合、ＳＦＥ１０２は、ＣＢ１０５（＃２）への状態遷移を発生させる。あるいは、図７において、「ＯｗｎｅｒＧｏＯｕｔ」のＣＢ１０５の条件１の評価が真となって、「ＴｈｉｅｆＥｎｔｅｒｅｄ」のＣＢ１０５に状態遷移するような場合である。
【００７６】
以上のようにして、ＳＦＥ１０２は、状態遷移を行いながら、ＣＳ１０４内の各ＣＢ１０５の処理部の実行または条件部の評価を行い、自装置（ノード、ゲートウェイ、サーバ等）における分散処理を実行することが可能となる。
【００７７】
図１０は、図１の変数同期１０３における変数更新処理（その１）の制御動作を示すフローチャートである。この制御動作は、変数同期１０３が、自装置内のＳＦＥ１０２からの変数の更新要求を受け付けて処理するものである。この制御動作は、図１のＣＰＵ１１０およびＯＳ１０８が、特には図示しないメモリに記憶された制御プログラムを実行する処理として実現される。
【００７８】
変数同期１０３はまず、ＳＦＥ１０２からの変数の更新要求を待ち合わせる（ステップＳ１００１。要求があったか否かを判定し（ステップＳ１００２）、なければ待合せを繰り返す（ステップＳ１００２の判定がＮＯ→Ｓ１００１の繰り返し）。
【００７９】
ＳＦＥ１０２からの変数の更新要求が発生しステップＳ１００２の判定がＹＥＳになると、変数同期１０３は、以下の一連の処理を実行する。例えば、図４で、ノード１００（＃Ａ）のＳＦＥ１０２が、ＣＢ１０５（＃２）の処理部内の処理１を実行した結果、矢印４０１で示されるように、ノード１００（＃Ａ）の変数セット１０１内のＫｅｙ＝Ｋ１の変数に対する更新要求が発生したような場合である。
【００８０】
まず、変数同期１０３は、更新要求に含まれるＫｅｙにより、自装置内の変数セット１０１（図２参照）を検索する（ステップＳ１００３）。
【００８１】
変数同期１０３は、Ｋｅｙに対する変数が見つかったか否かを判定する（ステップＳ１００４）。
【００８２】
Ｋｅｙに対する変数が見つかってステップＳ１００４の判定がＹＥＳになると、変数同期１０３は、変数セット１０１上で、更新要求に含まれるＫｅｙに対応する変数のＶａｌｕｅを、更新要求に含まれるＶａｌｕｅによって更新する（ステップＳ１００５）。例えば、図４で、ノード１００（＃Ａ）の変数同期１０３が、ＳＦＥ１０２によって更新要求の処理が実行された場合に、ノード１００（＃Ａ）の変数セット１０１内のＫｅｙ＝Ｋ１の変数に対するＶａｌｕｅを、Ｖ０からＶ１に更新するような場合である。
【００８３】
続いて、変数同期１０３は、更新要求に含まれるＫｅｙに対応する変数に同期先（図２参照）が含まれているか否かを判定する（ステップＳ１００６）。
【００８４】
同期先が含まれておらずステップＳ１００６の判定がＮＯならば、変数同期１０３は、ステップＳ１００１およびＳ１００２の待合せ処理に戻る。
【００８５】
同期先が含まれておりステップＳ１００６の判定がＹＥＳになると、変数同期１０３は、その同期先に、更新要求メッセージを、図１の通信装置１０９から送信する（ステップＳ１００７）。このとき、特には図示しないが、更新要求メッセージのヘッダには、そのメッセージの種類が更新要求であることを示す情報が付加される。その後、変数同期１０３は、ステップＳ１００１およびＳ１００２の待合せ処理に戻る。例えば、図４で、ノード１００（＃Ａ）の変数同期１０３が、矢印４０２で示されるように、上記要求が示すＫｅｙ＝Ｋ１に対応する変数に対して、同期先＝ノードＢ／ＶＳ１／Ｋ１が指定されていることを認識する。そして、ノード１００（＃Ａ）の変数同期１０３が、その同期先が示す、ノード１００（＃Ｂ）の変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数のＶａｌｕｅのＶ１への更新を要求する要求メッセージを送信する。なお、更新要求メッセージの送信後に、更新結果を同期先から受信するような処理が含まれてもよい（後述する図１１のＳ１１１２の通知に対応する）。
【００８６】
更新要求に含まれるＫｅｙにより変数セット１０１を検索した結果、Ｋｅｙに対する変数が見つからずステップＳ１００４の判定がＮＯならば、変数同期１０３は次の処理を実行する。変数同期１０３は、更新要求に含まれるＫｅｙとＶａｌｕｅまたは同期先を、自装置の変数セット１０１に、例えば図２（ａ）に示されるデータ形式で新たに登録する（ステップＳ１００８）。その後、変数同期１０３は、ステップＳ１００１およびＳ１００２の待合せ処理に戻る。
【００８７】
図１１は、図１の変数同期１０３における変数更新処理（その２）の制御動作を示すフローチャートである。この制御動作は、図１０のステップＳ１００７または後述する図１２のステップＳ１２０８によって他装置内の変数同期１０３から自装置に対して送信された更新要求メッセージを、自装置の変数同期１０３が受信して処理するものである。この制御動作は、図１のＣＰＵ１１０およびＯＳ１０８が、特には図示しないメモリに記憶された制御プログラムを実行する処理として実現される。
【００８８】
変数同期１０３はまず、他ノード（ゲートウェイやサーバであってもよい）からの変数の更新要求メッセージを待ち合わせる（ステップＳ１１０１）。図１の通信装置１０９によって、メッセージが受信されたか否かを判定し（ステップＳ１１０２）、受信がなければ待合せを繰り返す（ステップＳ１１０２の判定がＮＯ→Ｓ１１０１の繰り返し）。
【００８９】
更新要求メッセージの受信が発生しステップＳ１１０２の判定がＹＥＳになると、変数同期１０３は、以下の一連の処理を実行する。例えば、図４で、ノード１００（＃Ａ）から送信された要求メッセージが、矢印４０３で示されるように、ノード１００（＃Ｂ）で受信され、ノード１００（＃Ｂ）の変数同期１０３に渡されたような場合である。
【００９０】
更新要求メッセージを受信し、ステップＳ１１０２の判定がＹＥＳならば、変数同期１０３は、更新要求メッセージに含まれるＫｅｙにより、自装置内の変数セット１０１（図２参照）を検索する（ステップＳ１１１０）。
【００９１】
変数同期１０３は、Ｋｅｙに対する変数が見つかったか否かを判定する（ステップＳ１１１１）。
【００９２】
Ｋｅｙに対する変数が見つかってステップＳ１１１１の判定がＹＥＳになると、変数同期１０３は、変数セット１０１上で、見つかったＫｅｙに対応する変数のＶａｌｕｅを、更新要求メッセージに含まれるＶａｌｕｅによって更新する。そして、変数同期１０３は、更新結果を更新要求メッセージの送信元に通知する（以上、ステップＳ１１１２）。その後、変数同期１０３は、ステップＳ１１０１およびＳ１１０２の待合せ処理に戻る。例えば、図４で、ノード１００（＃Ｂ）の変数同期１０３が、矢印４０４で示されるように、自ノードの変数セット１０１＝ＶＳ１内のＫｅｙ＝Ｋ１に対応する変数を検索し、その変数のＶａｌｕｅをＶ１に更新するような場合である。
【００９３】
Ｋｅｙに対する変数が見つからずステップＳ１１１１の判定がＮＯならば、変数同期１０３は次の処理を実行する。変数同期１０３は、更新要求に含まれるＫｅｙとＶａｌｕｅを自装置の変数セット１０１に、例えば図２（ａ）に示されるデータ形式で新たに登録する（ステップＳ１１１３）。その後、変数同期１０３は、ステップＳ１１０１およびＳ１１０２の待合せ処理に戻る。
【００９４】
図１２は、図１の変数同期１０３における変数参照処理の制御動作を示すフローチャートである。この制御動作は、変数同期１０３が、自装置内のＳＦＥ１０２からの変数の参照要求を受け付けて処理するものである。この制御動作は、図１のＣＰＵ１１０およびＯＳ１０８が、特には図示しないメモリに記憶された制御プログラムを実行する処理として実現される。
【００９５】
変数同期１０３はまず、ＳＦＥ１０２からの変数の参照要求を待ち合わせる（ステップＳ１２０１。要求があったか否かを判定し（ステップＳ１２０２）、なければ待合せを繰り返す（ステップＳ１２０２の判定がＮＯ→Ｓ１２０１の繰り返し）。
【００９６】
ＳＦＥ１０２からの変数の参照要求が発生しステップＳ１２０２の判定がＹＥＳになると、変数同期１０３は、以下の一連の処理を実行する。例えば、図４で、ノード１００（＃Ｂ）のＳＦＥ１０２が、例えばＣＢ１０５（＃１）の条件１の条件式を評価するときに、自ノードの変数セット１０１内のＫｅｙ＝Ｋ１に対応する変数への参照要求が発生するような場合である。
【００９７】
まず、変数同期１０３は、参照要求で指定されたＫｅｙで、自装置内の変数セット１０１（図２参照）を検索する（ステップＳ１２０３）。
【００９８】
変数同期１０３は、Ｋｅｙに対する変数が存在するか否かを判定する（ステップＳ１２０４）。
【００９９】
Ｋｅｙに対する変数が存在しステップＳ１２０４の判定がＹＥＳになると、変数同期１０３は、変数セット１０１上で、参照要求に含まれるＫｅｙに対応する変数のＶａｌｕｅの同期先（図２参照）を調べる（ステップＳ１２０５）。
【０１００】
変数同期１０３はさらに、自ノード（ゲートウェイまたはサーバであってもよい）の変数セット１０１上で、参照要求に含まれるＫｅｙに対応する変数のＶａｌｕｅが存在するか否かを判定する（ステップＳ１２０６）。
【０１０１】
Ｖａｌｕｅが存在してステップＳ１２０６の判定がＹＥＳならば、変数同期１０３は、自ノード等上のそのＶａｌｕｅを、参照結果としてＳＦＥ１０２に通知する（ステップＳ１２０７）。その後、変数同期１０３は、ステップＳ１２０１およびＳ１２０２の待合せ処理に戻る。
【０１０２】
Ｖａｌｕｅが存在せずステップＳ１２０６の判定がＮＯならば、変数同期１０３は、参照要求に含まれるＫｅｙに対応する変数の同期先により指定された参照先へ、参照要求メッセージを、通信装置１０９（図１）を介して送信する（ステップＳ１２０８）。
【０１０３】
変数同期１０３は、参照先からの上記参照要求メッセージに対応する応答メッセージを待ち合わせる（ステップＳ１２０９）。図１の通信装置１０９によって、応答メッセージが正常に受信されたか否かを判定し（ステップＳ１２１０）、受信がなければ待合せを繰り返す（ステップＳ１２１０の判定がＮＯ→Ｓ１２０９の繰り返し）。
【０１０４】
応答メッセージが正常に受信されステップＳ１２１０の判定がＹＥＳになると、変数同期１０３は、応答メッセージから参照結果を抽出し、ＳＦＥ１０２に通知する（ステップＳ１２１１）。その後、変数同期１０３は、ステップＳ１２０１およびＳ１２０２の待合せ処理に戻る。
【０１０５】
図１３は、上記システムをソフトウェア処理として実現できるコンピュータのハードウェア構成の一例を示す図である。
【０１０６】
図１３に示されるコンピュータは、ＣＰＵ１３０１、メモリ１３０２、入力装置１３０３、出力装置１３０４、外部記憶装置１３０５、可搬記録媒体１３０９が挿入される可搬記録媒体駆動装置１３０６、及び通信インタフェース１３０７を有し、これらがバス１３０８によって相互に接続された構成を有する。同図に示される構成は上記システムを実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
【０１０７】
ＣＰＵ１３０１は、当該コンピュータ全体の制御を行う。メモリ１３０２は、プログラムの実行、データ更新等の際に、外部記憶装置１３０５（或いは可搬記録媒体１３０９）に記憶されているプログラム又はデータを一時的に格納するＲＡＭ等のメモリである。ＣＵＰ１３０１は、プログラムをメモリ１３０２に読み出して実行することにより、全体の制御を行う。
【０１０８】
入出力装置１３０３は、ユーザによるキーボードやマウス等による入力操作を検出し、その検出結果をＣＰＵ１３０１に通知し、ＣＰＵ１３０１の制御によって送られてくるデータを表示装置や印刷装置に出力する。
【０１０９】
外部記憶装置１３０５は、例えばハードディスク記憶装置である。主に各種データやプログラムの保存に用いられる。
【０１１０】
可搬記録媒体駆動装置１３０６は、光ディスクやＳＤＲＡＭ、コンパクトフラッシュ（登録商標）等の可搬記録媒体１３０９を収容するもので、外部記憶装置１３０５の補助の役割を有する。
【０１１１】
通信インタフェース１３０７は、例えばＬＡＮ（ローカルエリアネットワーク）又はＷＡＮ（ワイドエリアネットワーク）の通信回線を接続するための装置である。
【０１１２】
本実施形態によるシステムは、図９から図１２のフローチャート等で実現される機能を搭載したプログラムをＣＰＵ１３０１が実行することで実現される。そのプログラムは、例えば外部記憶装置１３０５や可搬記録媒体１３０９に記録して配布してもよく、或いはネットワーク接続装置１３０７によりネットワークから取得できるようにしてもよい。
【０１１３】
以上説明しようにして、本実施形態により、センサネットワークを構成するノード、ゲートウェイ、サーバで分散処理を実現することが可能となる。
【０１１４】
本実施形態では、ノード１００の処理能力に応じて、フレキシブルに実行単位（ＣＢ１０５）を変更し、処理を分散させることが可能となる。
【０１１５】
本実施形態では、ノード１００でデータ処理することで、センタで大量のデータを解析する必要が無く迅速な応答が可能となる。
【０１１６】
本実施形態では、分散した処理の同期は、集中管理方式でなく、Ｐ２Ｐによる変数同期で実現するので、ネットワーク負荷を小さくすることが可能となる。
【０１１７】
本実施形態では、一つのノード１００を止めても全体処理に影響しないようにすることが可能となる。
【０１１８】
そして、本実施形態では、ノード１００等における処理の変更・追加を、ＣＢ１０５の単位で容易に行うことが可能となる。
【図１】
2013145254.tif 000003
【図２】
2013145254.tif 000004
【図３】
2013145254.tif 000005
【図４】
2013145254.tif 000006
【図５】
2013145254.tif 000007
【図６】
2013145254.tif 000008
【図７】
2013145254.tif 000009
【図８】
2013145254.tif 000010
【図９】
2013145254.tif 000011
【図１０】
2013145254.tif 000012
【図１１】
2013145254.tif 000013
【図１２】
2013145254.tif 000014
【図１３】
2013145254.tif 000015
【手続補正書】
【提出日】平成26年9月19日(2014.9.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
センサネットワークにおいて分散処理を実行するコンピュータに、
キーと値と前記キーに対応する同期先を紐づけた変数のデータベースを変数セットとして記憶する機能と、
一つの状態において、自装置の前記変数セット内の変数の参照または更新を要求する処理を実行するとともに、前記自装置の前記変数セット内の変数を参照しながら条件を評価して他の状態に遷移させるステートフローエンジン機能と、
前記自装置の前記変数セット内の変数の参照または更新を要求する処理が実行された場合に、前記要求が示すキーに対応する変数に対して、前記同期先との間で前記要求が示すキーを通信し、前記自装置の前記変数セット内の前記要求が示すキーに対応する変数の値と前記同期先の前記変数セット内の前記要求が示すキーに対応する変数の値とを同期させる変数同期機能と、
を実行させるためのプログラム。
【請求項２】
前記変数同期機能は、
前記自装置の前記変数セット内の変数の参照または更新を要求する処理が実行された場合に、前記変数セットにおいて、前記要求が示すキーに対応する変数の値を参照または更新する機能と、
前記要求が示すキーに対応する変数に対して前記同期先が指定されていれば、前記同期先が示す前記変数セットの更新を要求する要求メッセージを前記同期先に送信する機能と、
同期元装置から前記要求メッセージを受信した場合に、前記要求メッセージが示す前記自装置の前記変数セットにおいて、前記要求メッセージが示すキーに対応する変数の値を更新する機能と、
を含むことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記ステートフローエンジン機能は、
条件を記述した条件部または実行する処理を記述した処理部を含むコンテキストボックスを組み合わせて状態遷移マシンを記述するファイルであるコンテキストシートに記述されている前記コンテキストボックスを順次読み込む機能と、
前記読み込んだコンテキストボックスの前記処理部を解釈して前記自装置の前記変数セット内の変数の参照または更新を要求する処理を含む処理を実行する機能と、
前記自装置の前記変数セット内の変数を参照しながら前記読み込んだコンテキストボックスの前記条件部を評価し、前記評価の結果に応じて前記条件部をさらに評価しまたは他の前記コンテキストボックスの読込みに遷移する機能と、
を含むことを特徴とする請求項１または２のいずれかに記載のプログラム。
【請求項４】
前記変数同期機能は、前記同期先との間で前記要求が示すキーをユニキャストで通信する、
ことを特徴とする請求項１ないし３のいずれかに記載のプログラム。
【請求項５】
センサネットワークにおいて分散処理を実行する装置であって、
キーと値と前記キーに対応する同期先を紐づけた変数のデータベースを変数セットとして記憶する変数セット記憶部と、
一つの状態において、自装置の前記変数セット内の変数の参照または更新を要求する処理を実行するとともに、前記自装置の前記変数セット内の変数を参照しながら条件を評価して他の状態に遷移させるステートフローエンジン部と、
前記自装置の前記変数セット内の変数の更新を要求する処理が実行された場合に、前記要求が示すキーに対応する変数に対して、前記同期先との間で前記要求が示すキーを通信し、前記自装置の前記変数セット内の前記要求が示すキーに対応する変数の値と前記同期先の前記変数セット内の前記要求が示すキーに対応する変数の値とを同期させる変数同期部と、
を備えることを特徴とする分散処理装置。
【請求項６】
前記変数同期部は、
前記自装置の前記変数セット内の変数の更新を要求する処理が実行された場合に、前記変数セットにおいて、前記要求が示すキーに対応する変数の値を更新する機能と、
前記要求が示すキーに対応する変数に対して前記同期先が指定されていれば、前記同期先が示す前記変数セットの更新を要求する要求メッセージを前記同期先に送信する機能と、
同期元装置から前記要求メッセージを受信した場合に、前記要求メッセージが示す前記自装置の前記変数セットにおいて、前記要求メッセージが示すキーに対応する変数の値を更新し、前記参照の結果を含む応答メッセージを前記同期元装置に返信する機能と、
を備えることを特徴とする請求項５に記載の分散処理装置。
【請求項７】
前記ステートフローエンジン部は、
条件を記述した条件部または実行する処理を記述した処理部を含むコンテキストボックスを組み合わせて状態遷移マシンを記述するファイルであるコンテキストシートに記述されている前記コンテキストボックスを順次読み込む機能と、
前記読み込んだコンテキストボックスの前記処理部を解釈して前記自装置の前記変数セット内の変数の参照または更新を要求する処理を含む処理を実行する機能と、
前記自装置の前記変数セット内の変数を参照しながら前記読み込んだコンテキストボックスの前記条件部を評価し、前記評価の結果に応じて前記条件部をさらに評価しまたは他の前記コンテキストボックスの読込みに遷移する機能と、
を備えることを特徴とする請求項５または６のいずれかに記載の分散処理装置。
【請求項８】
センサネットワークにおいて分散処理を実行する方法であって、
キーと値と前記キーに対応する同期先を紐づけた変数のデータベースを変数セットとして記憶し、
一つの状態において、自装置の前記変数セット内の変数の参照または更新を要求する処理を実行するとともに、前記自装置の前記変数セット内の変数を参照しながら条件を評価して他の状態に遷移させるステートフローを実行し、
前記自装置の前記変数セット内の変数の更新を要求する処理が実行された場合に、前記要求が示すキーに対応する変数に対して、前記同期先との間で前記要求が示すキーを通信し、前記自装置の前記変数セット内の前記要求が示すキーに対応する変数の値と前記同期先の前記変数セット内の前記要求が示すキーに対応する変数の値とを同期させる変数同期を実行する、
ことを備えることを特徴とする分散処理方法。
【請求項９】
前記変数同期の実行において、
前記自装置の前記変数セット内の変数の更新を要求する処理が実行された場合に、前記変数セットにおいて、前記要求が示すキーに対応する変数の値を更新し、
前記要求が示すキーに対応する変数に対して前記同期先が指定されていれば、前記同期先が示す前記変数セットの更新を要求する要求メッセージを前記同期先に送信し、
同期元装置から前記要求メッセージを受信した場合に、前記要求メッセージが示す前記自装置の前記変数セットにおいて、前記要求メッセージが示すキーに対応する変数の値を更新し、前記参照の結果を含む応答メッセージを前記同期元装置に返信する、
ことを備えることを特徴とする請求項８に記載の分散処理方法。
【請求項１０】
前記ステートフローの実行において、
条件を記述した条件部または実行する処理を記述した処理部を含むコンテキストボックスを組み合わせて状態遷移マシンを記述するファイルであるコンテキストシートに記述されている前記コンテキストボックスを順次読み込み、
前記読み込んだコンテキストボックスの前記処理部を解釈して前記自装置の前記変数セット内の変数の参照または更新を要求する処理を含む処理を実行し、
前記自装置の前記変数セット内の変数を参照しながら前記読み込んだコンテキストボックスの前記条件部を評価し、前記評価の結果に応じて前記条件部をさらに評価しまたは他の前記コンテキストボックスの読込みに遷移する、
ことを備えることを特徴とする請求項８または９のいずれかに記載の分散処理方法。
【国際調査報告】
2013145254.tif 000016
2013145254.tif 000017
2013145254.tif 000018
2013145254.tif 000019