(57)【要約】【課題】モジュールのメンテナンス性及び開発効率を向上させること。【解決手段】ユーザモジュール間で共有される共有データを記憶するＲＡＭ１３又は不揮発性メモリ１４と、共有データへアクセスするためのトリガ情報を取得し、当該取得されたトリガ情報に基づいて、共有データのアクセス内容及び共有データのアクセス依頼を含むアクセス情報を出力するデータアクセス共通インターフェース２３と、データアクセス共通インターフェース２３により出力されたアクセス情報に基づいて、ＲＡＭ１３又は不揮発性メモリ１４に記憶された共有データへ共有変数管理モジュール２２と、を備える。【選択図】図１
2010113700.tif 000002
【特許請求の範囲】
【請求項１】
ユーザモジュール間で共有される共有データを記憶する記憶部と、
前記共有データへアクセスするためのトリガ情報を取得し、当該取得されたトリガ情報に基づいて、前記共有データのアクセス内容及び前記共有データのアクセス依頼を含むアクセス情報を出力するインターフェース部と、
前記インターフェース部により出力されたアクセス情報に基づいて、前記記憶部に記憶された前記共有データへアクセスする制御部と、
を備えることを特徴とするフィールドデバイス。
【請求項２】
情報の通信を行う通信部を備え、
前記インターフェース部は、
前記通信部を介して前記トリガ情報を外部から取得、又は前記ユーザモジュールによる自発的なトリガ情報の出力により前記ユーザモジュールから前記トリガ情報を取得することを特徴とする請求項１に記載のフィールドデバイス。
【請求項３】
前記インターフェース部は、
前記トリガ情報に基づき前記共有データの排他制御依頼を出力し、
前記制御部は、
前記排他制御依頼に基づいて、前記共有データの排他制御を行う排他制御管理部と、
前記アクセス内容に基づいて、前記共有データへのアクセス権が記されているアクセスルールを参照し、前記共有データへのアクセスが可能か否かを判別するアクセス制御部と、
前記アクセス依頼に基づいて、前記共有データが記憶されている前記記憶部の記憶領域が記された保存先リストを参照し、当該保存先リストに記された記憶領域に記憶されている前記共有データへアクセスする共有データ管理部と、を備えることを特徴とする請求項１又は２に記載のフィールドデバイス。
【請求項４】
前記アクセスルール及び前記保存先リストは、
開発者により設定された共有データ名、アクセス方法を示した情報、及び揮発性情報に基づいて自動的に生成されることを特徴とする請求項３に記載のフィールドデバイス。
【請求項５】
前記制御部は、
前記共有データの識別子と前記共有データを参照するユーザモジュールの識別子とが対応付けられたモジュールリストに基づいて、前記共有データが更新された際、更新された共有データと対応付けられたユーザモジュールを特定し、当該特定されたユーザモジュールに対し、前記共有データが更新されたことを示す更新イベントを前記インターフェース部を介して通知することを特徴とする請求項１から４のいずれか一項に記載のフィールドデバイス。
【請求項６】
前記制御部は、
前記共有データが複数同時に更新される際、更新される全ての共有データが正しく更新されるか否かを確認し、複数の共有データのうち少なくとも１つの共有データの更新に失敗したことを確認した場合は、前記記憶部に記憶されている共有データを更新前の共有データに戻すことを特徴とする請求項５に記載のフィールドデバイス。
【請求項７】
前記インターフェース部は、
前記共有データのアクセスの際に取得された共有データを共有変数キャッシュにコピーし、次回以降に前記共有データへアクセスする際は、前記共有変数キャッシュにコピーされた共有データにアクセスすることを特徴とする請求項５又は６に記載のフィールドデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フィールドデバイスに関する。
【背景技術】
【０００２】
従来、流量計や温度計などのセンサ、アクチュエータ、コントローラを含むフィールドデバイスが知られている。
【０００３】
ここで、図２０を参照して、従来のフィールドデバイス１００の構成の一例について説明する。図２０に示すように、フィールドデバイス１００は、ＣＰＵ（Central Processing Unit）１１１と、ＲＯＭ（Read Only Memory）１１２と、ＲＡＭ（Random Access Memory）１１３と、不揮発性メモリ１１４と、センサ１１５と、通信コントローラ１１６と、表示器１１７と、を備えて構成される。不揮発性メモリ１１４、センサ１１５、通信コントローラ１１６、表示器１１７は、接続インターフェース１１８経由でＣＰＵ１１１と接続される。なお、接続インターフェース１１８は、バスやシリアルインターフェースなどフィールドデバイス１００毎によって異なるものとする。
【０００４】
ＣＰＵ１１は、センサ処理モジュール１１９と、通信モジュール１２０と、表示処理モジュール１２１と、の３つのソフトウェアモジュールから構成される。
【０００５】
センサ処理モジュール１１９は、センサ１１５から割り込みを受けて計測値を読み出し、各種補正演算等を行ってプロセス値等を計算するモジュールである。
【０００６】
通信モジュール１２０は、フィールド通信を行うモジュールである。通信モジュール１２０は、計測値や各種設定項目をフィールド通信で他のフィールドデバイスに送信したり、他のフィールドデバイスからの命令を受信し関連モジュールに伝達する処理を行う。また、通信モジュール１２０は、通信コントローラ１１６からの割込みで動作したり、自発的に動作し通信コントローラ１１６に指令を送ったりする。
【０００７】
表示処理モジュール１２１は、計測値や警告などを表示器１１７に表示する指令を出すモジュールである。  
【０００８】
ＲＯＭ１１２は情報の書き換え不可能な記録媒体であって、ＣＰＵ１１１により実行されるプログラム等を記憶している。
【０００９】
ＲＡＭ１１３は、揮発性のメモリであり、実行される各種プログラムやこれら各種プログラムに係るデータ（グローバル変数、ローカル変数等）を一時的に記憶するワークエリアを形成する。
【００１０】
不揮発性メモリ１１４は、センサの補正係数などの各種設定値や統計情報（以下、保存データと記す）など電源断時にも保存したいデータを記憶するメモリである。
【００１１】
センサ１１５は、フィールドデバイス１００が計測する物理量を検出するハードウェアである。
【００１２】
通信コントローラ１１６は、フィールド通信（Foundation Fieldbus、Profibus-PA、HART通信など）を行う際に、信号の伝達等を受け持つハードウェアである。
【００１３】
表示器１１７は、測定値や警告などの情報を表示するＬＣＤ（Liquid Crystal Display）などのハードウェアである。
【００１４】
上述の構成を有するフィールドデバイス１００における各モジュール（センサ処理モジュール１１９、通信モジュール１２０、表示処理モジュール１２１）は、独立して動作し、各モジュールが管理する変数（ＲＡＭ１１３内のグローバル変数群１１３ａやローカル変数群１１３ｂを指す）や不揮発性メモリ１１４内の保存データ１１４ａをお互いに参照・更新しながら動作する。
なお、従来技術に関し、記載すべき先行技術文献情報を把握できなかったため、先行技術文献情報の記載は省略する。
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかしながら、フィールドデバイス１００では、各モジュールが管理するグローバル変数群１１３ａや不揮発性メモリ１１４上の保存データ１１４ａを、各モジュールがお互いに参照・更新している。このため、モジュール毎に独立して開発作業（修正、削除、交換等）を行うことが難しい構造であった。
【００１６】
例えば、センサ処理モジュール１１９によりグローバル変数群１１３ａに含まれるセンサ処理モジュールグローバル変数の修正（書き込み）が行われていた際、他のモジュール（通信モジュール等）は、修正の行われているセンサ処理モジュールグローバル変数を直接参照する（読み出す）ことができる。そうすると、他のモジュールが読み出したセンサ処理モジュールグローバル変数と、修正後のセンサ処理モジュールグローバル変数とはデータの不整合が生じてしまう。
また、例えば、センサ処理モジュール１１９によりセンサ処理モジュールグローバル変数が削除された場合、他のモジュール（通信モジュール等）は削除されたセンサ処理モジュールグローバル変数を参照できない。このとき、他のモジュールでセンサ処理モジュールグローバル変数が必要であった場合、他のモジュールでは処理ができないという不具合を生じる。
したがって、モジュール毎に独立して開発作業を行うと、他のモジュールに影響を及ぼしてしまい、モジュールのメンテナンス性の低下を招いていた。
【００１７】
また、例えば、モジュール単位で交換を行うと、他のモジュールに影響を及ぼしてしまうため、あるフィールドデバイスのモジュールを他のフィールドデバイスへ流用することは難しかった。この場合、同じ機能を有するモジュールをフィールドバスの種類ごとにカスタマイズする必要があり、モジュールの開発効率の低下を招いていた。
【００１８】
本発明の課題は、モジュールのメンテナンス性及び開発効率を向上させることである。
【課題を解決するための手段】
【００１９】
上記課題を解決するために、請求項１に記載の発明のフィールドデバイスは、
ユーザモジュール間で共有される共有データを記憶する記憶部と、
前記共有データへアクセスするためのトリガ情報を取得し、当該取得されたトリガ情報に基づいて、前記共有データのアクセス内容及び前記共有データのアクセス依頼を含むアクセス情報を出力するインターフェース部と、
前記インターフェース部により出力されたアクセス情報に基づいて、前記記憶部に記憶された前記共有データへアクセスする制御部と、
を備えることを特徴とする。
【００２０】
請求項２に記載の発明は、請求項１に記載のフィールドデバイスにおいて、
情報の通信を行う通信部を備え、
前記インターフェース部は、
前記通信部を介して前記トリガ情報を外部から取得、又は前記ユーザモジュールによる自発的なトリガ情報の出力により前記ユーザモジュールから前記トリガ情報を取得することを特徴とする。
【００２１】
請求項３に記載の発明は、請求項１又は２に記載のフィールドデバイスにおいて、
前記インターフェース部は、
前記トリガ情報に基づき前記共有データの排他制御依頼を出力し、
前記制御部は、
前記排他制御依頼に基づいて、前記共有データの排他制御を行う排他制御管理部と、
前記アクセス内容に基づいて、前記共有データへのアクセス権が記されているアクセスルールを参照し、前記共有データへのアクセスが可能か否かを判別するアクセス制御部と、
前記アクセス依頼に基づいて、前記共有データが記憶されている前記記憶部の記憶領域が記された保存先リストを参照し、当該保存先リストに記された記憶領域に記憶されている前記共有データへアクセスする共有データ管理部と、を備えることを特徴とする。
【００２２】
請求項４に記載の発明は、請求項３に記載のフィールドデバイスにおいて、
前記アクセスルール及び前記保存先リストは、
開発者により設定された共有データ名、アクセス方法を示した情報、及び揮発性情報に基づいて自動的に生成されることを特徴とする。
【００２３】
請求項５に記載の発明は、請求項１から４のいずれか一項に記載のフィールドデバイスにおいて、
前記制御部は、
前記共有データの識別子と前記共有データを参照するユーザモジュールの識別子とが対応付けられたモジュールリストに基づいて、前記共有データが更新された際、更新された共有データと対応付けられたユーザモジュールを特定し、当該特定されたユーザモジュールに対し、前記共有データが更新されたことを示す更新イベントを前記インターフェース部を介して通知することを特徴とする。
【００２４】
請求項６に記載の発明は、請求項５に記載のフィールドデバイスにおいて、
前記制御部は、
前記共有データが複数同時に更新される際、更新される全ての共有データが正しく更新されるか否かを確認し、複数の共有データのうち少なくとも１つの共有データの更新に失敗したことを確認した場合は、前記記憶部に記憶されている共有データを更新前の共有データに戻すことを特徴とする。
【００２５】
請求項７に記載の発明は、請求項５又は６に記載のフィールドデバイスにおいて、
前記インターフェース部は、
前記共有データのアクセスの際に取得された共有データを共有変数キャッシュにコピーし、次回以降に前記共有データへアクセスする際は、前記共有変数キャッシュにコピーされた共有データにアクセスすることを特徴とする。  
【発明の効果】
【００２６】
請求項１の記載の発明によれば、アクセス情報に基づいて共有データへアクセスする。このため、モジュールのメンテナンス性及び開発効率を向上させることができる。
【００２７】
請求項２に記載の発明によれば、インターフェース部は、通信部を介してトリガ情報を外部から取得、又はユーザモジュールによるトリガ情報の自発的な出力によりユーザモジュールからトリガ情報を取得することができる。
【００２８】
請求項３に記載の発明によれば、共有データにアクセスする際、排他制御管理部で共有データの排他制御が自動的に行われるため、ユーザ（開発者）は共有データにアクセスするコードを書くだけで、安全に共有データにアクセスすることができる。また、アクセス制御部により、各ユーザモジュールからの共有データへのアクセスが制限され、不正なアクセスを検出することができる。
【００２９】
請求項４に記載の発明によれば、アクセスルール及び保存先リストは、開発者により設定された変数名、アクセス方法を示した情報、及び揮発性情報に基づいて自動的に生成されるので、人的ミスの排除、繰り返し作業に強くなり、開発工数を低減することができる。
【００３０】
請求項５に記載の発明によれば、ユーザモジュールによる定期的な更新確認が必要なくなるため、共有変数管理モジュールに共有変数へのアクセスが集中し、ボトルネックになる可能性を低減することができる。また、共有変数の更新から、その共有変数のデータ（更新データ）を別のユーザモジュールに伝達するまでのタイムラグを少なくすることができる。
また、ある共有変数が更新されたら、別のユーザモジュールでその更新された共有変数に連動する別のデータを再計算するといった、ユーザモジュール間の連係が容易になる。  また、定期的な共有変数の更新の確認を書くユーザモジュールで行う必要がなくなり、各ユーザモジュールの処理が簡素化され、各ユーザモジュールの処理のパフォーマンスを向上させることができる。
【００３１】
請求項６に記載の発明によれば、計測値とステータスのように、複数の共有変数がセットで意味をなす場合において、複数の共有変数の一部のみが更新されるようなケースがなくなり、共有変数の同時性が保証される。また、ユーザモジュールでエラーチェックや共有変数の書き戻しの処理を行う必要がなくなる。
【００３２】
請求項７に記載の発明によれば、インターフェース部の処理が簡素化され、インターフェース部の処理のパフォーマンスを向上させることができる。
【図面の簡単な説明】
【００３３】
【図１】本発明に係る第１の実施の形態のフィールドデバイスの内部構成を示す図である。
【図２】センサ演算処理の流れを示すフローチャートである。
【図３】センサ演算処理の流れを示すフローチャートである。
【図４】設定値書き込み処理の流れを示すフローチャートである。
【図５】初期化処理の流れを示すフローチャートである。
【図６】本発明に係る第１の実施の形態の変形例のフィールドデバイスの内部構成を示す図である。
【図７】本発明に係る第２の実施の形態のフィールドデバイスの内部構成を示す図である。
【図８】（Ａ）は、変数−参照モジュールリストを示す図である。（Ｂ）は、参照変数リストを示す図である。
【図９】登録処理の流れを示すフローチャートである。
【図１０】第１のイベント送受信処理の流れを示すフローチャートである。
【図１１】第１のイベント送受信処理の流れを示すフローチャートである。
【図１２】第２のイベント送受信処理の流れを示すフローチャートである。
【図１３】第２のイベント送受信処理の流れを示すフローチャートである。
【図１４】第３のイベント送受信処理の流れを示すフローチャートである。
【図１５】第３のイベント送受信処理の流れを示すフローチャートである。
【図１６】本発明に係る第２の実施の形態の変形例のフィールドデバイスの内部構成を示す図である。
【図１７】書き込み処理の流れを示すフローチャートである。
【図１８】第４のイベント送受信処理の流れを示すフローチャートである。
【図１９】第４のイベント送受信処理の流れを示すフローチャートである。
【図２０】従来のフィールドデバイスの内部構成を示す図である。
【発明を実施するための形態】
【００３４】
以下、添付図面を参照して本発明に係る実施の形態を詳細に説明する。ただし、発明の範囲は、図示例に限定されない。
【００３５】
（第１の実施の形態）
図１〜図５を参照して本発明に係る第１の実施の形態を説明する。本実施の形態のフィールドデバイス１は、ＣＰＵ１１と、ＲＯＭ１２と、記憶部としてのＲＡＭ１３と、記憶部としての不揮発性メモリ１４と、センサ１５と、通信コントローラ１６と、表示器１７と、通信部としての接続インターフェース１８と、を備えて構成される。ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、不揮発性メモリ１４、センサ１５、通信コントローラ１６、表示器１７、接続インターフェース１８は、フィールドデバイス１００のＣＰＵ１１１、ＲＯＭ１１２、ＲＡＭ１１３、不揮発性メモリ１１４、センサ１１５、通信コントローラ１１６、表示器１１７、接続インターフェース１１８とそれぞれ同様の構成である。以下、異なる部分を主として説明する。
【００３６】
ＣＰＵ１１は、センサ処理モジュール１９と、通信モジュール２０と、表示処理モジュール２１と、制御部としての共有変数管理モジュール２２と、インターフェース部としてのデータアクセス共通インターフェース２３と、を有する。
【００３７】
具体的には、ＣＰＵ１１のデータアクセス共通インターフェース２３は、後述するセンサ演算プログラム、設定値変更プログラム、及び初期化プログラムとの協働により、共有データ（共有変数群１３ｂに格納されている共有変数、キャッシュ１３ｃに格納されているキャッシュデータ、共有保存データ１４ａ）へアクセスするためのトリガ情報を取得する。そして、ＣＰＵ１１のデータアクセス共通インターフェース２３は、当該取得されたトリガ情報に基づいて、アクセス内容及びアクセス依頼を含むアクセス情報を共有変数管理モジュール２２に出力する。そして、ＣＰＵ１１の共有変数管理モジュール２２は、出力されたアクセス情報に基づいて、共有データへアクセスする。
なお、ユーザモジュールの自発的な動作（ユーザモジュールがトリガ情報を自発的にデータアクセス共通インターフェース２３に出力する動作）により、当該出力されたトリガ情報がデータアクセス共通インターフェース２３により取得されることとしてもよい。例えば、表示処理モジュール２１が定期的に共有データ（プロセス値）へアクセスするためのトリガ情報を自発的にデータアクセス共通インターフェース２３に出力することとしてもよい。この場合、データアクセス共通インターフェース２３によりトリガ情報が取得され、当該取得されたトリガ情報に基づいて、アクセス情報が共有変数管理モジュール２２に出力される。そして、共有変数管理モジュール２２により、アクセス情報に基づいて、共有データへのアクセスが行われる。そして、アクセスされた共有データがデータアクセス共通インターフェース２３経由で表示処理モジュール２１により取得される。そして、表示処理モジュール２１により共有データに基づく表示リクエストが表示器１７に出力される。
【００３８】
センサ処理モジュール１９、通信モジュール２０、表示処理モジュール２１は、フィールドデバイス１００のセンサ処理モジュール１１９、通信モジュール１２０、表示処理モジュール１２１とそれぞれ同様の処理を行う。本実施の形態においては、各ユーザモジュール間（センサ処理モジュール１９、通信モジュール２０、表示処理モジュール２１）で参照する共有データは、共有変数管理モジュール２２の変数管理部２２ａが管理する共有変数群１３ｂに格納されている共有変数、キャッシュ１３ｃに格納されているキャッシュデータ、又は共有保存データ１４ａとなる。そのため、データアクセス共通インターフェース２３経由で、共有変数管理モジュール２２の管理する共有変数群１３ｂに格納されている共有変数、キャッシュ１３ｃに格納されているキャッシュデータ又は共有保存データ１４ａへアクセスする。また各モジュール内でしか使われないローカル変数群（センサ処理モジュールローカル変数、通信モジュールローカル変数、表示処理モジュールローカル変数）に関しては、フィールドデバイス１００と同様に各モジュールから、ＲＡＭ１３内にあるローカル変数群１３ａに直接アクセスする。
【００３９】
共有変数管理モジュール２２は、ＣＰＵ１１上で動作するソフトウェアであり、変数管理部２２ａと、アクセス制御部２２ｂと、共有データ管理部としての排他制御管理部２２ｃと、のサブモジュールから構成される。
【００４０】
変数管理部２２ａは、ＲＡＭ１３上の共有変数群１３ｂに格納されている共有変数、キャッシュ１３ｃに格納されているキャシュデータ又は不揮発性メモリ１４上の共有保存データ１４ａを管理し、ユーザモジュール（センサ処理モジュール１９、通信モジュール２０、表示処理モジュール２１）からのリクエストに応じてアクセスする。共有変数群１３ｂには、電源断時に消えても支障の無い揮発性のデータが格納されている。キャッシュ１３ｃには、共有保存データ１４ａと同じデータ（キャッシュデータ）が格納されている。
【００４１】
また、変数管理部２２ａは、ユーザモジュールからの要求があったときに、共有変数群１３ｂに格納されている共有変数、キャッシュ１３ｃに格納されているキャッシュデータ又は共有保存データ１４ａへアクセスする。このとき、変数管理部２２ａは、各共有データが記憶されている領域（保存場所）が記された保存先リスト２２２に基づいて、共有変数群１３ｂに格納されている共有変数、キャッシュ１３ｃに格納されているキャッシュデータ又は共有保存データ１４ａにアクセスする。ここで、変数管理部２２ａは、揮発性データを読み出しする場合、当該揮発性データを共有変数群１３ｂから読み出し、不揮発性データを読み出しする場合、当該不揮発性データをキャッシュ１３ｃから読み出す。また、変数管理部２２ａは揮発性データを書き込みする場合、当該揮発性データを共有変数群１３ｂに書き込み、不揮発性データを書き込みする場合、当該不揮発性データをキャッシュ１３ｃと共有保存データ１４ａとに書き込む。
【００４２】
また、変数管理部２２ａは、起動時においてキャッシュ１３ｃに格納されているデータは空のため、共有変数管理モジュール２２の初期化時に共有保存データ１４ａをキャッシュ１３ｃへコピーする。
【００４３】
アクセス制御部２２ｂは、ユーザモジュールから共有データへのアクセスリクエストがあったときに、正しいユーザモジュールから、正しいアクセス方法（読み出し、書き込み）でアクセスされているかをアクセスルール２２１に従ってチェックする。
【００４４】
アクセスルール２２１は、共有データへのアクセス権が記されている。具体的には、アクセスルール２２１は、共有データの識別子（識別情報）とユーザモジュール毎のアクセス権（読み出し可、書き込み可、アクセス不可等）が記されている。例えば、センサ処理モジュール１９から変数aには読み出しのみの権限しかない状態で、センサ処理モジュール１９から変数ａに値を書き込もうとするとアクセスが中断される。この機能により不正な共有データへのアクセスを検知することが可能となる。アクセスのチェックは共有データへのアクセス時に毎回行われる。
【００４５】
排他制御管理部２２ｃは、独立して動作する複数のユーザモジュールが同時に同じ共有データへアクセスする場合に、更新途中の共有データにアクセスしてしまわないように制御する機能を有する。
【００４６】
また、排他制御管理部２２ｃは、複数の共有データに同時にアクセスしたい場合、同じタイミングで複数の共有データにアクセスする。例えば、計測値の値とそのステータスのように、同じ時間のデータのセットで意味を成す共有データへアクセスする場合に使う。
【００４７】
また、排他制御管理部２２ｃは、変数管理部２２ａが管理する共有データへアクセスする場合は、自動的に排他制御を行う。
【００４８】
データアクセス共通インターフェース２３は、センサ処理モジュール１９、通信モジュール２０、表示処理モジュール２１など開発者が開発するモジュールが、各モジュール間で共有する共有変数群１３ｂに格納された共有変数、キャッシュ１３ｃに格納されたキャッシュデータ又は共有保存データ１４ａにアクセスするときに利用されるモジュールである。
【００４９】
具体的には、データアクセス共通インターフェース２３は、接続インターフェース１８を介して外部からトリガ情報を取得、又はユーザモジュールの自発的動作により出力されたトリガ情報を取得する。そして、データアクセス共通インターフェース２３は、当該取得したトリガ情報に基づいて、共有データの排他制御依頼（例えば、プロセス値とステータス値とに対する排他制御依頼）、共有データのアクセス内容（例えば、アクセスする共有データが共有変数の場合、共有変数の情報とアクセス方法）及び共有データのアクセス依頼（例えば、プロセス値とステータス値とを共有変数群１３ｂに書き込むリクエスト等）を出力する。
【００５０】
また、データアクセス共通インターフェース２３の機能としては、「一つの共有データの値を読み出す」、「一つの共有データの値を書き込む」、「複数の共有データの値を読み出す」、「複数の共有データの値を書き込む」という４種類がある。例えば、一度に複数の共有データを読み出す場合、一度に複数の共有データを書き込む場合、ある時点の複数の共有データを読み出す場合、又は同時に複数の共有データを更新したい場合などに、データアクセス共通インターフェース２３は、「複数の共有データの値を読み出す」、「複数の共有データの値を書き込む」機能を有する。
【００５１】
ＲＡＭ１３は、ローカル変数群１３ａと、共有変数群１３ｂと、キャッシュ１３ｃと、を記憶する。ローカル変数群１３ａには、各モジュール内でしか使われないローカル変数が格納されている。共有変数群１３ｂには、各モジュールユーザモジュール間で共有される共有変数が格納されている。キャッシュ１３ｃには、各ユーザモジュール間で共有される共有保存データのキャッシュデータが格納されている。
【００５２】
なお、共有変数群１３ｂ、共有保存データ１４ａ、アクセスルール２２１及び保存先リスト２２２は、開発するフィールドデバイス１ごとに違うため、開発者が設計時にツールを用いて設定する。
【００５３】
具体的には、開発者は、開発するモジュール毎に、使用する共有データの一覧（共有変数群１３ｂを構成する共有変数、ローカル変数群１３ａを構成するローカル変数、共有保存データ１４ａなど）が記述された設定ファイルを作成する。
【００５４】
このとき、一つの共有データ毎に、共有データ名、アクセス方法を示した情報及び揮発性情報が設定される。共有データ名は、共有データの名称である。例えば、共有データ名として、共有変数の変数名が設定される。アクセス方法を示した情報は、自モジュールからのアクセス権限を示したデータである。例えば、アクセス方法を示した情報として、読み出しのみ、書き込みのみ、又は、読み書き両方のいずれか等が設定される。揮発性情報は、共有データが揮発性データであるか否かを識別する情報である。例えば、揮発性情報として、電源断時に消えても良い、電源が切られても保持しておきたい旨等が設定される。
【００５５】
そして、設定された設定ファイルがツールにかけられる。このとき、ツールは共有変数群１３ｂ、共有保存データ１４ａ等を抽出し、ＲＡＭ１３上の共有変数群１３ｂのソースコード、不揮発性メモリ１４上の共有保存データ１４ａのソースコード、ＲＡＭ１３上のキャッシュ１３ｃのソースコード、保存先リスト２２２（ソースコード）、アクセスルール２２１（ソースコード）を生成する。この生成されたソースコードが変数管理部２２ａ又はアクセス制御部２２ｂに組み込まれる。
【００５６】
接続インターフェース１８は、共有データへアクセスするためのトリガ情報（計測値がセンサ１５に準備されたことを示す割り込み、設定値を書き込むための通信コントローラ１６からの設定値変更リクエスト、初期化用変数を読み出すためのＣＰＵ１１に供給する電力等）を受信する。
【００５７】
次に、図２〜図５を参照して、フィールドデバイス１の動作を説明する。先ず、図２及び図３を参照して、センサ演算処理について説明する。センサ演算処理は、センサ１５で測定された値と、ＲＡＭ１３上の共有変数群１３ｂで保持している揮発データである補正係数から、プロセス値とそのときのステータス値を算出し、ＲＡＭ１３上の共有変数群１３ｂに書き込む処理である。
【００５８】
予め、プロセス値とステータス値はセンサ処理モジュール１９からの読み書き（読み出し、書き込み）、補正係数はセンサ処理モジュール１９からの読み出しが許可されているものとする。また、補正計数はＲＡＭ１３上の共有変数群１３ｂに保存（格納）されているものとする。
【００５９】
例えば、フィールドデバイス１において、センサ１５からの割り込み（計測値がセンサ１５に準備されたことを示す割り込み）が接続インターフェース１８により受信され、当該受信された割り込みがセンサ処理モジュール１９に入ったことをトリガとして、ＲＯＭ１２から読み出されて適宜ＲＡＭ１３に展開されたセンサ演算プログラムと、ＣＰＵ１１との協働によりセンサ演算処理が実行される。
【００６０】
先ず、センサ処理モジュール１９により、センサ１５から計測値が取得される（ステップＳ１１）。そして、センサ処理モジュール１９により、補正係数の読み出しリクエストがデータアクセス共通インターフェース２３へ出される。ここで、センサ処理モジュール１９の処理は結果が返ってくるまで停止される（ステップＳ１２）。
【００６１】
ステップＳ１２の実行後、補正係数にアクセスするため、データアクセス共通インターフェース２３により排他制御管理部２２ｃに排他制御依頼が出される。そして、排他制御管理部２２ｃにより、補正係数が他のユーザモジュールからアクセスできないようにされる（ステップＳ１３）。
【００６２】
そして、データアクセス共通インターフェース２３により、アクセス制御部２２ｂに、アクセスする共有データ（補正係数）の情報とアクセス方法（読み出し）が渡される。そして、アクセス制御部２２ｂにより、アクセスルール２２１が参照され、アクセス権のチェックが行われる（ステップＳ１４）。この例では、アクセス制御部２２ｂからアクセスか可能である旨（アクセスＯＫ）がデータアクセス共通インターフェース２３に返される。
【００６３】
ステップＳ１４の実行後、データアクセス共通インターフェース２３により、変数管理部２２ａに補正係数の読み出しリクエストが出される（ステップＳ１５）。そして、変数管理部２２ａにより、保存先リスト２２２が参照され、補正係数の保存先がＲＡＭ１３上の共有変数群１３ｂであることが判断され、共有変数群１３ｂからデータが読み出される（ステップＳ１６）。
【００６４】
ステップＳ１６の実行後、データアクセス共通インターフェース２３により、排他制御管理部２２ｃに、補正係数の排他制御終了が通知される（ステップＳ１７）。そして、ステップＳ１２の実行の際に停止されていたセンサ処理モジュール１９の処理が再開され、センサ処理モジュール１９により補正係数が取得される。そして、センサ処理モジュール１９によりローカル変数群１３ａのセンサ処理モジュールローカル変数にアクセスされると同時に、取得された補正係数で処理が行われ、プロセス値とセンサのステータス値が計算される（ステップＳ１８）。
【００６５】
ステップＳ１８の実行後、センサ処理モジュール１９により、ステップＳ１８で算出されたプロセス値とステータス値の書き込みリクエストがデータアクセス共通インターフェース２３に出される。このとき、センサ処理モジュール１９の処理は結果が返ってくるまで停止される（ステップＳ１９）。そして、プロセス値とステータス値にアクセスするため、データアクセス共通インターフェース２３により排他制御管理部２２ｃに排他制御依頼が出される。そして、排他制御管理部２２ｃによりプロセス値とステータス値とが、他のユーザモジュールからアクセスできないようにされる（ステップＳ２０）。
【００６６】
ステップＳ２０の実行後、データアクセス共通インターフェース２３により、アクセス制御部２２ｂに、アクセスする共有データ（プロセス値、ステータス値）の情報とアクセス方法（書き込み）が渡される。そして、アクセス制御部２２ｂによりアクセスルール２２１が参照され、アクセス権のチェックが行われる（ステップＳ２１）。この例ではアクセス制御部２２ｂからデータアクセス共通インターフェース２３にアクセス可能である旨（アスセスＯＫ）が返される。
【００６７】
ステップＳ２１の実行後、データアクセス共通インターフェース２３により、変数管理部２２ａに、プロセス値・ステータス値の書き込みリクエストが出される（ステップＳ２２）。そして、変数管理部２２ａにより、保存先リスト２２２が参照され、プロセス値・ステータス値の保存先がＲＡＭ１３上の共有変数群１３ｂであることが判断され、プロセス値・ステータス値が共有変数群１３ｂに書き込まれる（ステップＳ２３）。
【００６８】
ステップＳ２３の実行後、データアクセス共通インターフェース２３により、排他制御管理部２２ｃに、プロセス値・ステータス値の排他制御終了が通知される（ステップＳ２４）。そして、ステップＳ１９において停止されていたセンサ処理モジュール１９の処理が再開される（ステップＳ２５）。ステップＳ２５の実行後、センサ演算処理は終了される。
【００６９】
次に、図４を参照して、設定値変更処理について説明する。設定値変更処理は、通信コントローラ１６から送られてきた設定値（以下、設定値Ａとする）の変更リクエストに基づいて、設定値ＡをＲＡＭ１３上のキャッシュ１３ｃ及び不揮発性メモリ１４の共有保存データ１４ａに書き込む処理である。
【００７０】
予め、設定値Ａは不揮発性メモリ１４上の共有保存データ１４ａに保存（格納）されているものとする。また、設定値Ａは、通信モジュール２０からの読み書きが許可されているものとする。
【００７１】
例えば、フィールドデバイス１において、通信コントローラ１６からの設定値Ａの変更リクエストが接続インターフェース１８により受信され、当該受信された設定値Ａの変更リクエストが通信モジュール２０に入ったことをトリガとして、ＲＯＭ１２から読み出されて適宜ＲＡＭ１３に展開された設定値変更プログラムと、ＣＰＵ１１との協働により設定値変更処理が実行される。
【００７２】
先ず、通信モジュール２０によりローカル変数群１３ａの通信モジュールローカル変数へアクセスされる（ステップＳ３１）。そして、通信モジュール２０により、設定値Ａの書き込みリクエストがデータアクセス共通インターフェース２３へ出される。このとき、通信モジュール２０の処理は結果が返ってくるまで停止される（ステップＳ３２）。
【００７３】
ステップＳ３２の実行後、設定値Ａにアクセスするため、データアクセス共通インターフェース２３により排他制御管理部２２ｃに排他制御依頼が出される。そして、排他制御管理部２２ｃにより他のユーザモジュールから設定値Ａがアクセスできないようにされる（ステップＳ３３）。そして、データアクセス共通インターフェース２３により、アクセス制御部２２ｂに、アクセスする共有データ（設定値Ａ）の情報とアクセス方法（書き込み）が渡される。そして、アクセス制御部２２ｂによりアクセスルール２２１が参照され、アクセス権のチェックが行われる（ステップＳ３４）。この例では、アクセス制御部２２ｂからデータアクセス共通インターフェース２３にアクセス可能である旨（アクセスＯＫ）が返される。
【００７４】
ステップＳ３４の実行後、データアクセス共通インターフェース２３により変数管理部２２ａに、設定値Ａの書き込みリクエストが出される（ステップＳ３５）。そして、変数管理部２２ａにより保存先リスト２２２が参照され、設定値Ａの保存先が不揮発性メモリ１４上の共有保存データ１４ａであることが判断され、ＲＡＭ１３上のキャッシュ１３ｃに設定値Ａが書き込まれる（ステップＳ３６）。
【００７５】
ステップＳ３６の実行後、変数管理部２２ａにより不揮発性メモリ１４上の共有保存データ１４ａに接続インターフェース１８経由で設定値Ａが書き込まれる（ステップＳ３７）。そして、データアクセス共通インターフェース２３により、排他制御管理部２２ｃに、設定値Ａの排他制御終了が通知される（ステップＳ３８）。そして、ステップＳ３２で停止されていた通信モジュール２０の処理が再開される（ステップＳ３９）。ステップＳ３９の実行後、設定値変更処理は終了される。
【００７６】
次に、図５を参照して、初期化処理について説明する。初期化処理は、センサ処理モジュール１９の初期化用データをキャッシュ１３ｃ及び不揮発性メモリ１４の共有保存データ１４ａに書き込む処理である。
【００７７】
予め、初期化用データは不揮発性メモリ１４上の共有保存データ１４ａに保存（格納）されているものとする。また、設定値Ａは、センサ処理モジュール１９からの読み書きが許可されているものとする。
【００７８】
例えば、フィールドデバイス１において、電源部（図示省略）から供給される電力が接続インターフェース１８により受信され、当該受信された電力がＣＰＵ１１に入り、ＣＰＵ１１が通電された後にセンサ処理モジュール１９が初期化を開始したことをトリガとして、ＲＯＭ１２から読み出されて適宜ＲＡＭ１３に展開された初期化プログラムと、ＣＰＵ１１との協働により初期化処理が実行される。
【００７９】
先ず、センサ処理モジュール１９により初期化に必要な初期化用データ（初期化用変数）の読み出しリクエストが、データアクセス共通インターフェース２３へ出される。センサ処理モジュール１９の処理は、結果が返ってくるまで停止される（ステップＳ４１）。そして、初期化用変数にアクセスするため、データアクセス共通インターフェース２３により排他制御管理部２２ｃに排他制御依頼が出される。そして、排他制御管理部２２ｃにより初期化用変数が、他のユーザモジュールからアクセスできないようにされる（ステップＳ４２）。
【００８０】
ステップＳ４２の実行後、データアクセス共通インターフェース２３によりアクセス制御部２２ｂに、アクセスする共有データ（初期化用変数）の情報とアクセス方法（この例では読み出し）が渡される。そして、アクセス制御部２２ｂによりアクセスルール２２１が参照され、アクセス権のチェックが行われる（ステップＳ４３）。この例では、アクセス制御部２２ｂからデータアクセス共通インターフェース２３にアクセスは可能である事を示す旨（アクセスＯＫ）が返される。
【００８１】
ステップＳ４３の実行後、データアクセス共通インターフェース２３により変数管理部２２ａに、初期化用変数の読み出しリクエストが出される（ステップＳ４４）。そして、変数管理部２２ａにより保存先リスト２２２が参照され、初期化用変数の保存先が不揮発性メモリ１４上の共有保存データ１４ａであることが判断され、ＲＡＭ１３上のキャッシュ１３ｃから変数が読み出される（ステップＳ４５）。
【００８２】
ステップＳ４５の実行後、キャッシュ１３ｃから読み出された変数が初期化されていないため、共有保存データ１４ａから当該データ（キャッシュ１３ｃから読み出された変数と同じ変数）が読み出され、キャッシュ１３ｃに書き込まれる（ステップＳ４６）。このキャッシュ１３ｃに書き込まれた変数が初期化変数に該当する。そして、データアクセス共通インターフェース２３により排他制御管理部２２ｃに、初期化用変数の排他制御終了が通知される（ステップＳ４７）。そして、ステップＳ４２において停止されていたセンサ処理モジュールの処理が再開される（ステップＳ４８）。ステップＳ４７の実行後、初期化処理は終了される。
【００８３】
以上、本実施の形態によれば、各ユーザモジュールは、データアスセス共通インターフェース２３及び共有変数管理モジュール２２を経由して共有データにアクセスするので、各ユーザモジュールがお互いに共有データを直接参照・更新することがない。このため、モジュール毎に修正、交換、追加等を容易に行うことができるので、モジュールのメンテナンス性を向上させることができる。
また、各ユーザモジュールがお互いに共有データを直接参照・更新することがないので、他のユーザモジュールへの影響を考慮することなく、ユーザモジュールの開発を行うことができる。このため、ユーザモジュールの開発を平行して行え、開発期間の短縮を図る（モジュールの開発効率を向上させる）ことができる。
具体的には、モジュール間の関係はデータの読み書きだけなので、適切な共有データ（例えば、通信モジュール２０で使用する共有データ）が共有変数群１３ｂ又はキャッシュ１３ｃにあれば、その共有データを利用するユーザモジュールの開発（例えば、通信モジュール２０の動作確認等）を行うことができる。共有データを変化させる必要があれば、共有データを適切に変更し書き込むだけの簡易ユーザモジュールを作ることで対応できる。
【００８４】
また、データアクセス共有インターフェース２３は、接続インターフェース１８を介してトリガ情報を外部から取得、又はユーザモジュールによる自発的なトリガ情報の出力によりユーザモジュールからトリガ情報を取得することができる。  
【００８５】
また、共有データにアクセスする際、排他制御管理部２２ｃで共有データの排他制御が自動的に行われるため、開発者は共有データにアクセスするコードを書くだけで、安全に共有データにアクセスすることができる。また、アクセス制御部２２ｂにより、各ユーザモジュールからの共有データへのアクセスが制限され、不正なアクセスを検出することができる。したがって、例えば、動作の安全性を確保するためのＳＩＬ認証取得時に有益である。
【００８６】
また、保存先リスト２２２と、アクセスルール２２１の設定にツールを用いることにより、人的ミスの排除、繰り返し作業に強くなり、開発工数を低減することができる。
【００８７】
（第１の実施の形態の変形例）
図６を参照して、本発明の第１の実施の形態の変形例を説明する。図６に本変形例のフィールドデバイス１Ａの構成を示す。以下、図１に示すフィールドデバイス１と同様の部分には、同一の符号を付し、その詳細な説明を援用し、異なる部分を主として説明する。
【００８８】
フィールドデバイス１ａは、センサボード３０と、通信ボード３１と、を備える。センサボード３０は、センシングを担当するボードである。センサボード３０は、センサ処理モジュール１９と、データアクセス共通インターフェース２３と、ボード間通信モジュール３２Ａと、を有する。ボード間通信モジュール３２Ａは、通信ボード３１と通信を行うためのモジュールである。
【００８９】
通信ボード３１は、通信・表示を担当するボードである。通信ボード３１は、通信モジュール２０と、表示処理モジュール２１と、共有変数管理モジュール２２と、データアクセス共通インターフェース２３と、ボード間通信モジュール３２Ｂと、を備えて構成される。ボード間通信モジュール３２Ｂは、センサボード３０と通信を行うためのモジュールである。
【００９０】
次に、図６に示すフィールドデバイス１ａの動作を説明する。
先ず、センサボード３０のセンサ処理モジュール１９によりセンサの割込みが受けられる（図６−（１））。そして、センサ処理モジュール１９からデータアクセス共通インターフェース２３にデータの読み込み・書き込みリクエストが送信される（図６−（２））。そして、データアクセス共通インターフェース２３からデータの読み込み・書き込みのリクエストがボード間通信モジュール３２Ａに依頼される（図６−（３））。そして、データの読み込み・書き込みリクエストがボード間通信方式に変換される。そして、変換された通信方式でデータの読み込み・書き込みリクエストがボード間通信モジュール３２Ａからボード間通信モジュール３２Ｂに送信される（図６−（４））。そして、データの読み込み・書き込みリクエストがボード間通信方式の変換前の方式に変換される。そして、変換されたデータの読み込み・書き込みリクエストが共有変数管理モジュール２２に依頼される（図６−（５））。
【００９１】
以上、本変形例によれば、ハードウェア間（センサボード３０と通信ボード３１との間）でデータアクセス共通インターフェース２３を共有する。この構成により、開発者はハードウェアの境界を意識することなくデータの共有を行うことができる。したがって、マルチプロセッサなどを採用することが容易になりシステム設計の自由度を向上させることができる。また、各ボード（センサボード３０、通信ボード３１）内で動作する機能が減り設計の簡素化を図ることができる。
【００９２】
（第２の実施の形態）
上述の第１の実施の形態及び第１の実施の形態の変形例は、共有データ（例えば、共有変数）を複数のユーザモジュールで共有し、共有変数に対して共通のインターフェース（データアスセス共通インターフェース２３）を利用して各ユーザモジュールから読み書き（アクセス）するものである。このとき、例えば、センサ処理モジュール１９と表示処理モジュール２１とで、ある共有変数を参照（共有）しているケースにおいて、センサ処理モジュール１９が共有変数を更新しても、表示処理モジュール２１は共有変数の更新を知ることができない。表示処理モジュール２１が共有変数の更新を確認するためには、表示処理モジュール２１自身が定期的に共有変数の内容を確認する必要がある。この場合、共有変数がセンサ処理モジュール１９によって更新されてから、表示処理モジュール２１で更新を認識（確認）するためにタイムラグが発生し、ユーザモジュール間の連係に支障をきたすという問題点がある。また、この場合において、表示処理モジュール２１は、共有変数が更新されていなくても、定期的に更新確認を行う必要があり、ソフトウエア全体の処理の効率を下げるという問題点がある。  
また、上述の第１の実施の形態及び第１の実施の形態の変形例では、複数の共有変数を一度に更新した場合において、１つの共有変数の更新でエラーが発生しても他の共有変数は更新されてしまう。このため、計測値とステータスのように、複数の共有変数がセットで意味をなす場合において、複数の共有変数に対して更新の同時性を保証できないという問題点がある。
【００９３】
上述の問題点を解決するため、本実施の形態では、共有データを参照している全ユーザモジュールへ、共有データが更新されたことを示す情報、更新された共有データを示す更新データ及び更新された共有データの識別子を示す変数識別子を通知する機能を有するフィールドデバイス２について説明する。以下、この３つの要素（共有データが更新されたことを示す情報、更新された共有データを示す更新データ、及び更新された共有データの識別子を示す変数識別子）をまとめて更新イベントと記す。また、更新される共有データは、共有変数であるものとして説明する。
【００９４】
先ず、図７を参照して、本実施の形態のフィールドデバイス２の構成を示す。以下、図１に示すフィールドデバイス１と同様の部分には、同一の符号を付し、その詳細な説明を援用し、異なる部分を主として説明する。
【００９５】
図７に示すように、フィールドデバイス２のＣＰＵ１１は、センサ処理モジュール１９と、通信モジュール２０と、表示処理モジュール２１と、制御部としての共有変数管理モジュール２２と、インターフェース部としてのデータアクセスモジュール２３ａ，２３ｂ，２３ｃと、を有する。なお、図７中の矢印は、情報の流れの一例を示したものである。
【００９６】
共有変数管理モジュール２２の変数管理部２２ａは、共有変数が更新されると、変数−参照モジュールリスト２２１ａに従い、同じ共有変数を参照しているユーザモジュール用のデータアクセスモジュールに更新イベントを通知する。
【００９７】
ここで、図８（Ａ）を参照して、変数−参照モジュールリスト２２１ａの一例について説明する。変数−参照モジュールリスト２２１ａは、ＲＡＭ１３に記憶されている。図８（Ａ）に示すように、変数−参照モジュールリスト２２１ａは、共有データの識別子としての変数識別子と、ユーザモジュールの識別子としての参照モジュール識別子と、を有し、変数識別子と参照モジュール識別子とが関連付けられて記憶されている。変数識別子は、更新された共有変数の識別子を示す。参照モジュール識別子は、更新された共有変数を参照するユーザモジュールの識別子を示す。例えば、１つの共有変数を複数のユーザモジュールが共有する場合は、変数−参照モジュールリスト２２１ａに、１つの変数識別子に対し複数のモジュール識別子が対応付けられて記憶される。
また、変数−参照モジュールリスト２２１ａにおける変数識別子及びモジュール識別子は、各データアクセスモジュール２３ａ〜２３ｃにより変数管理部２２ａへのアクセスがされたときに、変数管理部２２ａにより変数−参照モジュールリスト２２１ａに登録される。
【００９８】
変数管理部２２ａは、共有変数が更新されると、変数−参照モジュールリスト２２１ａをＲＡＭ１３から読み出し、当該読み出された変数−参照モジュールリスト２２１ａに基づいて、更新された共有変数と対応付けられたユーザモジュールを特定する。そして、変数管理部２２ａは、特定されたユーザモジュールに対し、更新イベントをデータアクセスモジュール（特定されたユーザモジュール用のデータアクセスモジュール）を介して通知する。また、変数管理部２２ａは、特定されたユーザモジュールが複数ある場合は、複数のユーザモジュールに対し更新イベントを通知する。このとき、変数管理部２２ａは、リクエスト元のユーザモジュールに対しては、更新イベントを通知しない。
【００９９】
また、変数管理部２２ａは、複数の共有変数を同時更新し、且つ、ロールバックフラグがＯＮの場合において、共有変数群１３ｂから更新するデータを読取り保持し、その後にリクエストされたデータを共有変数群１３ｂに書き込み、全ての更新が成功した事を確認した後に更新イベントを通知する。ここで、ロールバックフラグとは、共有変数の更新失敗時に、共有変数群１３ｂに記憶されている共有変数を更新前の共有変数に戻すか否かを示すフラグである。
また、変数管理部２２ａは、複数の共有変数を同時更新し、且つ、ロールバックフラグがＯＮの場合において、複数の共有変数の少なくとも１つの共有変数の更新に失敗したことを確認した場合は、共有変数群１３ｂに記憶されている共有変数を更新前の共有データに戻す。
【０１００】
データアクセスモジュール２３ａ〜２３ｃは、各ユーザモジュールと共有変数管理モジュールとを仲介するインターフェース機能を有する。データアクセスモジュール２３ａは、センサ処理モジュール用のデータアクセスモジュールである。データアクセスモジュール２３ｂは、通信モジュール用のデータアクセスモジュールである。データアクセスモジュール２３ｃは、表示処理モジュール用のデータアクセスモジュールである。
具体的には、データアクセスモジュール２３ａ〜２３ｃは、各ユーザモジュールが更新イベントを受け取りたい（参照したい）共有変数の変数識別子とその共有変数を格納する変数ポインタとを各ユーザモジュールから受信する。ここで、変数ポインタは、ＲＡＭ１３上のローカル変数群１３ａ内のアドレスを示す。
【０１０１】
また、データアクセスモジュール２３ａ〜２３ｃは、共有変数の更新時に、共有変数管理モジュール２２の変数管理部２２ａから通知される更新イベントを受信し、当該受信された更新イベントを各ユーザモジュールに伝達する。
【０１０２】
また、データアクセスモジュール２３ａ〜２３ｃは、更新イベントを受信すると、ＲＡＭ１３から参照変数リスト２３１〜２３３を読み出し、当該読み出された参照変数リスト２３１〜２３３に基づいて、更新された共有変数に対応付けられた変数ポインタへ更新された共有変数をコピーする。
【０１０３】
ここで、図８（Ｂ）を参照して、参照変数リスト２３１〜２３３の一例について説明する。参照変数リスト２３１〜２３３は、ＲＡＭ１３に記憶されている。図８（Ｂ）に示すように、参照変数リスト２３１〜２３３は、変数識別子と、変数ポインタとを有し、変数識別子と変数ポインタとが関連付けられて記憶されている。参照変数リスト２３１〜２３３における変数識別子及び変数ポインタは、各ユーザモジュールから変数識別子及び変数ポインタがデータアクセスモジュール２３ａ〜２３ｃにより受信された際、データアクセスモジュール２３ａ〜２３ｃにより参照変数リスト２３１〜２３３に登録される。
【０１０４】
次に、図９〜図１５を参照して、フィールドデバイス２の動作を説明する。以下、センサ処理モジュール１９が共有変数を更新した場合に、同じ共有変数を参照している通信モジュール２０に更新イベントが通知される場合の動作について説明する。
【０１０５】
先ず、図９を参照して、登録処理について説明する。登録処理は、通信モジュール２０において、変数識別子及び変数ポインタを参照変数リスト２３２に登録する処理である。
【０１０６】
例えば、フィールドデバイス２の通信モジュール２０から更新イベントがほしい（更新イベントを受け取りたい）共有変数の変数識別子及びその共有変数の変数ポインタが通信モジュール用データアクセスモジュール２３ｂ（以下、データアクセスモジュール２３ｂ）に伝達されたことをトリガとして、ＲＯＭ１２から読み出されて適宜ＲＡＭ１３に展開された登録プログラムと、ＣＰＵ１１との協働により登録処理が実行される。
【０１０７】
先ず、データアクセスモジュール２３ｂにより、通信モジュール２０から通知された変数識別子及び変数ポインタが参照変数リスト２３２に登録される（ステップＳ１１１）。例えば、通知された変数識別子が「ＶＡＲ＿ＩＤ＿ｂ」、ポインタが「ｐ＿ｂ」である場合、データアクセスモジュール２３ｂにより、参照変数リスト２３２に変数識別子「ＶＡＲ＿ＩＤ＿ｂ」及びポインタ「ｐ＿ｂ」が登録される。
【０１０８】
そして、データアクセスモジュール２３ｂにより、通信モジュール２０から通知された変数識別子及び通信モジュール２０のモジュール識別子が変数管理部２２ａに通知される（ステップＳ１１２）。例えば、データアクセスモジュール２３ｂにより、変数識別子「ＶＡＲ＿ＩＤ＿ｂ」及び通信モジュール２０のモジュール識別子「ＭＯＤ＿ＩＤ＿ＣＯＭ」が変数管理部２２ａに通知される。
【０１０９】
ステップＳ１１２の実行後、変数管理部２２ａにより、データアクセスモジュール２３ｂから通知された変数識別子及びモジュール識別子が変数−参照モジュールリスト２２１ａに追加される（ステップＳ１１３）。ステップＳ１１３の実行後、登録処理は終了される。
【０１１０】
次に、図１０及び図１１を参照して、第１のイベント送受信処理について説明する。第１のイベント送受信処理は、センサ処理モジュール１９による共有変数Ａの更新を、ロールバックフラグをＯＦＦに設定して変数管理部２２ａにリクエストし、変数管理部２２ａによる共有変数Ａの更新が成功した場合に、通信モジュール２０に更新イベントを通知する処理である。
【０１１１】
予め、共有変数ＡはＲＡＭ１３上の共有変数群１３ｂに保持（格納）されているものとする。また、共有変数Ａはセンサ処理モジュール１９からの読み書きが許可されているものとする。
また、共有変数Ａを参照するモジュールとして、センサ処理モジュール１９及び通信モジュール２０が設定されているものとする。具体的には、例えば、変数−参照モジュールリスト２２１ａに、共有変数Ａの変数識別子「ＶＡＲ＿ＩＤ＿ｂ」と、モジュール識別子（センサ処理モジュール１９のモジュール識別子「ＭＯＤ＿ＩＤ＿ＳＥＮＳＯＲ」及び通信モジュール２０のモジュール識別子「ＭＯＤ＿ＩＤ＿ＣＯＭ」）とが関連付けられて記憶されているものとする。
また、例えば、参照変数リスト２３２に共有変数Ａの変数識別子「ＶＡＲ＿ＩＤ＿ｂ」とポインタ「ｐ＿ｂ」とが関連付けられて記憶されているものとする。
また、ロールバックフラグはＯＦＦに設定されているものとする。
【０１１２】
例えば、フィールドデバイス２において、センサ１５からの割り込み（計測値がセンサ１５に準備されたことを示す割り込み）が接続インターフェース１８により受信され、当該受信された割り込みがセンサ処理モジュール１９に入ったことをトリガとして、ＲＯＭ１２から読み出されて適宜ＲＡＭ１３に展開された第１のイベント送受信プログラムと、ＣＰＵ１１との協働により第１のイベント送受信処理が実行される。
【０１１３】
先ず、センサ処理モジュール１９により、センサ１５から計測値が取得され、取得された計測値から共有変数Ａが算出される（ステップＳ１２１）。そして、センサ処理モジュール１９により、更新命令と共に共有変数Ａ、共有変数Ａの変数識別子及びロールバックフラグがセンサ処理モジュール１９用のデータアクセスモジュール２３ａに通知（出力）される。ここで、センサ処理モジュール１９の処理は結果が返ってくるまで停止される（ステップＳ１２２）。
【０１１４】
ステップＳ１２２の実行後、共有変数Ａにアクセスするため、センサ処理モジュール用データアクセスモジュール２３ａ（以下、データアクセスモジュール２３ａ）により排他制御管理部２２ｃに排他制御依頼が出される。そして、排他制御管理部２２ｃにより、共有変数Ａが他のユーザモジュールからアクセスできないようにされる（ステップＳ１２３）。
【０１１５】
そして、データアクセスモジュール２３ａにより、アクセス制御部２２ｂに、アクセスする共有データ（共有変数Ａ）の情報とアクセス方法（書き込み）が渡される。そして、アクセス制御部２２ｂにより、アクセスルール２２１が参照され、アクセス権のチェックが行われる（ステップＳ１２４）。この例では、アクセス制御部２２ｂからアクセスが可能である旨（アクセスＯＫ）がデータアクセスモジュール２３ａに返される。
【０１１６】
ステップＳ１２４の実行後、データアクセスモジュール２３ａにより、共有変数Ａ、共有変数Ａの変数識別子、モジュール識別子及びロールバックフラグが変数管理部２２ａに通知される（ステップＳ１２５）。
【０１１７】
ステップＳ１２５の実行後、変数管理部２２ａにより、ロールバックフラグが参照され、ロールバックフラグがＯＦＦと判断される。すなわち、データ書き込みの失敗時にデータ（共有変数Ａ）を元に戻さない（更新前の共有変数Ａに戻さない）と判断される。そして、変数管理部２２ａにより、保存先リスト２２２が参照され、共有変数Ａの保存先がＲＡＭ１３上の共有変数群１３ｂであることが判断され、共有変数群１３ｂに共有変数Ａが書き込まれる（ステップＳ１２６）。
【０１１８】
ステップＳ１２６の実行後、共有変数群１３ｂへの書き込みが成功すると、変数管理部２２ａにより、共有変数Ａの変数識別子をキーとして変数−参照モジュールリスト２２１ａが参照され、センサ処理モジュール１９のモジュール識別子及び通信モジュール２０のモジュール識別子が取得される（ステップＳ１２７）。具体的には、変数管理部２２ａにより、センサ処理モジュール１９のモジュール識別子「ＭＯＤ＿ＩＤ＿ＳＥＮＳＯＲ」及び通信モジュール２０のモジュール識別子「ＭＯＤ＿ＩＤ＿ＣＯＭ」）が取得される。
【０１１９】
ステップＳ１２７の実行後、変数管理部２２ａにより、書き込みリクエスト元（すなわち、センサ処理モジュール１９のデータアクセスモジュール２３ａ）でない通信モジュール２０用のデータアクセスモジュール２３ｂに対して更新イベントが通知される（ステップＳ１２８）。
【０１２０】
ステップＳ１２８の実行後、データアクセスモジュール２３ｂにより、更新イベントに基づいて、変数識別子（更新された共有変数Ａの変数識別子「ＶＡＲ＿ＩＤ＿ｂ」）及び更新データ（更新された共有変数Ａ）が取得される。そして、データアクセスモジュール２３ｂにより、参照変数リスト２３２が参照され、取得された更新データの変数識別子に関連付けられた変数ポインタが取得される（ステップＳ１２９）。具体的には、データアクセスモジュール２３ｂにより、更新された共有変数Ａの変数識別子「ＶＡＲ＿ＩＤ＿ｂ」に関連付けられた変数ポインタ「ｐ＿ｂ」が取得される。
【０１２１】
ステップＳ１２９の実行後、データアクセスモジュール２３ｂにより、取得された変数ポインタへ更新データ（共有変数Ａ）がコピーされる（ステップＳ１３０）。
【０１２２】
ステップ１３０の実行後、データアクセスモジュール２３ｂにより、通信モジュール２０へ更新イベントが伝達される。そして、通信モジュール２０により、共有変数Ａが更新されたことが認識される（ステップＳ１３１）。
【０１２３】
ステップＳ１３１の実行後、データアクセスモジュール２３ａにより、排他制御管理部２２ｃに共有変数Ａの排他制御終了が通知される（ステップＳ１３２）。そして、ステップＳ１２２の実行の際に停止されていたセンサ処理モジュール１９の処理が再開される（ステップＳ１３３）。ステップＳ１３３の実行後、第１のイベント送受信処理は終了される。
【０１２４】
次に、図１２及び図１３を参照して、第２のイベント送受信処理について説明する。第２のイベント送受信処理は、センサ処理モジュール１９による複数の共有データ（共有変数Ａ，Ｂ，Ｃとする）の更新を、ロールバックフラグをＯＮに設定して変数管理部２２ａにリクエスト（通知）し、変数管理部２２ａによる共有変数Ａ，Ｂ，Ｃの更新が成功した場合に、通信モジュール２０に更新イベントを通知する処理である。
【０１２５】
予め、共有変数Ａ，Ｂ，Ｃは、ＲＡＭ１３上の共有変数群１３ｂに保持（格納）されているものとする。また、共有変数Ａ，Ｂ，Ｃは、センサ処理モジュール１９からの読み書きが許可されているものとする。
また、共有変数Ａ、Ｂ、Ｃを参照するモジュールとして、センサ処理モジュール１９及び通信モジュール２０が設定されているものとする。
また、参照変数リスト２３２に共有変数Ａ，Ｂ，Ｃの変数識別子と変数ポインタとがそれぞれ関連付けられて記憶されているものとする。
また、ロールバックフラグはＯＮに設定されているものとする。
【０１２６】
第２のイベント送受信処理のトリガは、第１のイベント送受信処理のトリガと同様である。
【０１２７】
ステップＳ１４１〜１４５は、第１のイベント送受信処理のステップＳ１２１〜１２５と同様である。具体的には、第１のイベント送受信処理の共有変数Ａが共有変数Ａ，Ｂ，Ｃに置き換わってステップＳ１４１〜１４５が実行される。
【０１２８】
ステップＳ１４５の実行後、変数管理部２２ａにより、ロールバックフラグが参照され、ロールバックフラグがＯＮと判断される。すなわち、データ書き込みの失敗時にデータ（共有変数Ａ，Ｂ，Ｃ）を元に戻す（更新前の共有変数Ａ，Ｂ，Ｃに戻す）と判断される。そして、変数管理部２２ａにより保存先リスト２２２が参照され、共有変数Ａ，Ｂ，Ｃの保存先がＲＡＭ１３上の共有変数群１３ｂにあることが判断され、データ書き込み失敗時に書き戻すデータ（共有変数Ａ、Ｂ、Ｃ）が共有変数群１３ｂから取得される（ステップＳ１４６）。このとき、取得された共有変数Ａ，Ｂ，Ｃは、更新前のデータであり、共有変数Ａの書きこみが失敗した場合、共有変数群１３ｂに書き戻される。
【０１２９】
ステップＳ１４６の実行後、変数管理部２２ａにより、共有変数群１３ｂに共有変数Ａ，Ｂ，Ｃが書き込まれる（ステップＳ１４７）。
【０１３０】
ステップＳ１４８〜ステップＳ１５４は、第１のイベント送受信処理のステップＳ１２７〜１３３と同様である。具体的には、第１のイベント送受信処理の共有変数Ａが共有変数Ａ，Ｂ，Ｃに置き換わってステップＳ１４８〜ステップＳ１５４が実行される。ステップＳ１５４の実行後、第２のイベント送受信処理は終了される。
【０１３１】
次に、図１４及び図１５を参照して、第３のイベント送受信処理について説明する。第３のイベント送受信処理は、センサ処理モジュール１９による複数の共有データ（共有変数Ａ，Ｂ，Ｃ）の更新を、ロールバックフラグをＯＮに設定して変数管理部２２ａにリクエスト（通知）し、変数管理部２２ａによる共有変数Ａ，Ｂ，Ｃの中の１つの更新が失敗した場合に、共有変数Ａ，Ｂ，Ｃの更新を行わない処理である。
【０１３２】
予め、共有変数Ａ，Ｂ，Ｃは、ＲＡＭ１３上の共有変数群１３ｂに保持（格納）されているものとする。また、共有変数Ａ，Ｂ，Ｃは、センサ処理モジュール１９からの読み書きが許可されているものとする。
また、共有変数Ａ、Ｂ、Ｃを参照するモジュールとして、センサ処理モジュール１９及び通信モジュール２０が設定されているものとする。
また、参照変数リスト２３２に共有変数Ａ，Ｂ，Ｃの変数識別子と変数ポインタとがそれぞれ関連付けられて記憶されているものとする。
また、ロールバックフラグはＯＮに設定されているものとする。
【０１３３】
第３のイベント送受信処理のトリガは、第１のイベント送受信処理のトリガと同様である。
【０１３４】
ステップＳ１６１〜１６６は、第２のイベント送受信処理のステップＳ１４１〜１４６と同様である。
【０１３５】
ステップＳ１６６の実行後、変数管理部２２ａにより、共有変数群１３ｂに共有変数Ａ，Ｂ，Ｃが書き込まれる。このとき、共有変数Ｂのアクセスが失敗（書き込みが失敗）される（ステップＳ１６７）。また、この場合、変数管理部２２ａにより、共有変数Ｃのアクセス（書き込み）は行われず、かつ、更新イベントの通知も行われない。
【０１３６】
ステップＳ１６７の実行後、変数管理部２２ａにより、共有変数Ａ，Ｂ，ＣのデータがＲＡＭ１３上の共有変数群１３ｂに書き戻される（ステップＳ１６８）。
【０１３７】
ステップＳ１６８の実行後、データアクセスモジュール２３ａにより、排他制御管理部２２ｃに共有変数Ａ，Ｂ，Ｃの排他制御終了の通知がされる（ステップＳ１６９）。そして、データアクセスモジュール２３ａにより、センサ処理モジュール１９にデータ書き込み失敗の通知がされる（ステップＳ１７０）。そして、センサ処理モジュール１９の処理が再開される（ステップＳ１７１）。ステップＳ１７１の実行後、第３のイベント送受信処理は終了される。
【０１３８】
以上、本実施の形態によれば、共有変数が更新された時に、共有変数を参照している全ユーザモジュールへ更新イベントを通知する。このため、ユーザモジュールによる定期的な更新確認が必要なくなるため、共有変数管理モジュール２２に共有変数へのアクセスが集中し、ボトルネックになる可能性を低減することができる。また、共有変数の更新から、その共有変数のデータ（更新データ）を別のユーザモジュールに伝達するまでのタイムラグを少なくすることができる。
【０１３９】
また、ある共有変数が更新されたら、別のユーザモジュールでその更新された共有変数に連動する別のデータを再計算するといった、ユーザモジュール間の連係が容易になる。また、定期的な共有変数の更新の確認を各ユーザモジュールで行う必要がなくなり、各ユーザモジュールの処理が簡素化され、各ユーザモジュールの処理のパフォーマンスを向上させることができる。
【０１４０】
また、複数の共有変数の更新を行う際に、１つでも更新が失敗すると、そのリクエスト全体が無効になり更新前の共有変数に戻す。このため、計測値とステータスのように、複数の共有変数がセットで意味をなす場合において、複数の共有変数の一部のみが更新されるようなケースがなくなり、共有変数の同時性が保証される。また、ユーザモジュールでエラーチェックや共有変数の書き戻しの処理を行う必要がなくなる。
【０１４１】
（第２の実施の形態の変形例）
図１６を参照して、本発明の第２の実施の形態の変形例を説明する。図１６に本変形例のフィールドデバイス２ａの構成を示す。以下、図７に示すフィールドデバイス２と同様の部分には、同一の符号を付し、その詳細な説明を援用し、異なる部分を主として説明する。
【０１４２】
データアクセスモジュール２３ａ〜２３ｃは、最初の共有変数の読み出しの際に取得された共有変数Ａを共有変数キャッシュ２４１〜２４３にコピーする。そして、データアクセスモジュール２３ａ〜２３ｃは、次回以降の共有変数Ａの読み出しの際、共有変数キャッシュ２４１〜２４３にコピーされた共有変数Ａを読み出す。
【０１４３】
次に、図１７〜図１９を参照して、フィールドデバイス２ａの動作を説明する。先ず、図１７を参照して、読み出し処理を説明する。読み出し処理は、共有変数Ａを共有変数群１３ｂから読み出し、読み出した共有変数Ａを共有変数キャッシュ２４１にコピーする処理である。
【０１４４】
予め、共有変数ＡはＲＡＭ１３上の共有変数群１３ｂに保持（格納）されているものとする。また、共有変数Ａはセンサ処理モジュール１９からの読み書きが許可されているものとする。
【０１４５】
読み出し処理のトリガは、第１のイベント送受信処理のトリガと同様である。
【０１４６】
先ず、センサ処理モジュール１９により、センサ１５から計測値が取得され、取得された計測値から共有変数Ａが算出される（ステップＳ２０１）。そして、センサ処理モジュール１９により、共有変数Ａの取得（読み出し）リクエストがデータアクセスモジュール２３ａに通知（出力）される。ここで、センサ処理モジュール１９の処理は結果が返ってくるまで停止される（ステップＳ２０２）。
【０１４７】
ステップＳ２０２の実行後、共有変数Ａにアクセスするため、データアクセスモジュール２３ａにより排他制御管理部２２ｃに排他制御依頼が出される。そして、排他制御管理部２２ｃにより、共有変数Ａが他のユーザモジュールからアクセスできないようにされる（ステップＳ２０３）。
【０１４８】
そして、データアクセスモジュール２３ａにより、アクセス制御部２２ｂに、アクセスする共有データ（共有変数Ａ）の情報とアクセス方法（読み出し）が渡される。そして、アクセス制御部２２ｂにより、アクセスルール２２１が参照され、アクセス権のチェックが行われる（ステップＳ２０４）。この例では、アクセス制御部２２ｂからアクセスが可能である旨（アクセスＯＫ）がデータアクセスモジュール２３ａに返される。
【０１４９】
ステップＳ２０４の実行後、データアクセスモジュール２３ａにより、共有変数Ａ及び共有変数Ａの変数識別子が変数管理部２２ａに通知される（ステップＳ２０５）。
【０１５０】
ステップＳ２０５の実行後、変数管理部２２ａにより、変数識別子及び保存先リスト２２２が参照され、共有変数Ａの保存先がＲＡＭ１３上の共有変数群１３ｂであることが判断され、共有変数群１３ｂから共有変数Ａが読み出される（ステップＳ２０６）。
【０１５１】
ステップＳ２０６の実行後、データアクセスモジュール２３ａにより、排他制御管理部２２ｃに共有変数Ａの排他制御終了が通知される（ステップＳ２０７）。そして、変数管理部２２ａにより読み出された共有変数Ａがデータアクセスモジュール２３ａに通知される。そして、データアクセスモジュール２３ａにより、ステップＳ２０５の返答として共有変数Ａを取得され、取得された共有変数Ａが共有変数キャッシュ２４１にコピーされる（ステップＳ２０８）。そして、センサ処理モジュール１９により、停止された処理が再開される（ステップＳ２０９）。ステップＳ２０９の実行後、読み出し処理は終了される。
【０１５２】
次に、図１８及び図１９を参照して、第４の更新イベント送受信処理について説明する。第４のイベント送受信処理は、センサ処理モジュール１９による共有変数Ａの更新を、ロールバックフラグをＯＦＦに設定して変数管理部２２ａにリクエストし、変数管理部２２ａによる共有変数Ａの更新が成功した場合に、通信モジュール２０に更新イベントを通知し、通知された更新イベントに基づいて、更新された共有変数Ａを共有変数キャッシュ２４２に書き込む処理である。
【０１５３】
第４のイベント送受信処理における前提条件及び処理のトリガについては、第１のイベント送受信処理と同様である。
【０１５４】
第４のイベント送受信処理において、ステップＳ２２１〜ステップＳ２３０は、第１のイベント送受信処理のステップＳ１２１〜ステップＳ１３０と同様である。
【０１５５】
ステップＳ２３０の実行後、データアクセスモジュール２３ｂにより、取得された更新データ（更新された共有変数Ａ）が共有変数キャッシュ２４２に書き込まれる（ステップＳ２３１）。
【０１５６】
ステップ２３２及びステップＳ２３３は、第１のイベント送受信処理のステップＳ１３１及びステップＳ１３２と同様である。
【０１５７】
ステップＳ２３３の実行後、データアクセスモジュール２３ａにより、共有変数Ａの内容が自身の共有変数キャッシュ２４１に書き込まれる（ステップＳ２３４）。そして、センサ処理モジュール１９により、停止された処理が再開される（ステップＳ２３５）。ステップＳ２３５の実行後、第４のイベント送受信処理は終了される。
【０１５８】
上述の読み出し処理又は第４のイベント処理の実行後、共有変数Ａを再度読み出す場合（２回目以降の読み出しをする場合）は、データアクセスモジュール２３ａ〜２３ｃにより、共有変数キャッシュ２４１〜２４３に記憶されている共有変数Ａが読み出される（アクセスされる）。
【０１５９】
以上、本変形例によれば、データアクセスモジュール２３ａ〜２３ｃは、再度（２回目以降）共有変数Ａを読み出す際、共有変数キャッシュにコピーされた共有変数Ａへアクセスする。このため、データアクセスモジュール２３ａ〜２３ｃは、共有変数管理モジュール２２にアクセスする必要がないため、データアクセスモジュール２３ａ〜２３ｃの処理が簡素化され、データアクセスモジュール２３ａ〜２３ｃの処理のパフォーマンスを向上させることができる。
【０１６０】
なお、上記各実施の形態及び変形例における記述は、本発明に係るフィールドデバイスの一例であり、これに限定されるものではない。
【０１６１】
例えば、第２の実施の形態及び第２の実施の形態の変形例において、共有変数群１３ｂに格納されている共有変数が更新されるものとして説明したがこれに限定されるものではない。例えば、キャッシュ１３ｃに格納されているキャッシュデータや共有保存データ１４ａが更新された場合において、同様の処理が行われるものとしてもよい。
【０１６２】
その他、本実施の形態における、フィールドデバイス１，１ａ，２，２ａの細部構造及び詳細動作に関しても、本発明の趣旨を逸脱しない範囲で適宜変更可能である。
【符号の説明】
【０１６３】
１，１ａ，２，２ａ  フィールドデバイス
１１    ＣＰＵ
１２    ＲＯＭ
１３    ＲＡＭ
１３ａ ローカル変数群
１３ｂ 共有変数群
１３ｃ キャッシュ
１４   不揮発性メモリ
１４ａ 共有保存データ
１５   センサ
１６   通信コントローラ
１７   表示器
１８   接続インターフェース
１９   センサ処理モジュール
２０   通信モジュール
２１   表示処理モジュール
２２   共有変数管理モジュール
２２ａ 変数管理部
２２ｂ アクセス制御部
２２ｃ 排他制御管理部
２３   データアクセス共通インターフェース
２３ａ〜２３ｃ  データアクセスモジュール
３０   センサボード
３１   通信ボード
３２Ａ，３２Ｂボード間通信モジュール
２２１ａ      参照モジュールリスト
２３１〜２３３  参照変数リスト
２４１〜２４３  共有変数キャッシュ
【図１】
2010113700.tif 000003
【図２】
2010113700.tif 000004
【図３】
2010113700.tif 000005
【図４】
2010113700.tif 000006
【図５】
2010113700.tif 000007
【図６】
2010113700.tif 000008
【図７】
2010113700.tif 000009
【図８】
2010113700.tif 000010
【図９】
2010113700.tif 000011
【図１０】
2010113700.tif 000012
【図１１】
2010113700.tif 000013
【図１２】
2010113700.tif 000014
【図１３】
2010113700.tif 000015
【図１４】
2010113700.tif 000016
【図１５】
2010113700.tif 000017
【図１６】
2010113700.tif 000018
【図１７】
2010113700.tif 000019
【図１８】
2010113700.tif 000020
【図１９】
2010113700.tif 000021
【図２０】
2010113700.tif 000022