JP2010113700A - フィールドデバイス - Google Patents

フィールドデバイス Download PDF

Info

Publication number
JP2010113700A
JP2010113700A JP2009058883A JP2009058883A JP2010113700A JP 2010113700 A JP2010113700 A JP 2010113700A JP 2009058883 A JP2009058883 A JP 2009058883A JP 2009058883 A JP2009058883 A JP 2009058883A JP 2010113700 A JP2010113700 A JP 2010113700A
Authority
JP
Japan
Prior art keywords
shared
variable
access
data
module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009058883A
Other languages
English (en)
Inventor
Shinichi Sunaga
慎一 須永
Hidehiko Wada
英彦 和田
Noriyuki Hosobuchi
憲行 細渕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yokogawa Electric Corp
Original Assignee
Yokogawa Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yokogawa Electric Corp filed Critical Yokogawa Electric Corp
Priority to JP2009058883A priority Critical patent/JP2010113700A/ja
Priority to US12/573,403 priority patent/US20100088471A1/en
Publication of JP2010113700A publication Critical patent/JP2010113700A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Programmable Controllers (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】モジュールのメンテナンス性及び開発効率を向上させること。
【解決手段】ユーザモジュール間で共有される共有データを記憶するRAM13又は不揮発性メモリ14と、共有データへアクセスするためのトリガ情報を取得し、当該取得されたトリガ情報に基づいて、共有データのアクセス内容及び共有データのアクセス依頼を含むアクセス情報を出力するデータアクセス共通インターフェース23と、データアクセス共通インターフェース23により出力されたアクセス情報に基づいて、RAM13又は不揮発性メモリ14に記憶された共有データへ共有変数管理モジュール22と、を備える。
【選択図】図1

Description

本発明は、フィールドデバイスに関する。
従来、流量計や温度計などのセンサ、アクチュエータ、コントローラを含むフィールドデバイスが知られている。
ここで、図20を参照して、従来のフィールドデバイス100の構成の一例について説明する。図20に示すように、フィールドデバイス100は、CPU(Central Processing Unit)111と、ROM(Read Only Memory)112と、RAM(Random Access Memory)113と、不揮発性メモリ114と、センサ115と、通信コントローラ116と、表示器117と、を備えて構成される。不揮発性メモリ114、センサ115、通信コントローラ116、表示器117は、接続インターフェース118経由でCPU111と接続される。なお、接続インターフェース118は、バスやシリアルインターフェースなどフィールドデバイス100毎によって異なるものとする。
CPU11は、センサ処理モジュール119と、通信モジュール120と、表示処理モジュール121と、の3つのソフトウェアモジュールから構成される。
センサ処理モジュール119は、センサ115から割り込みを受けて計測値を読み出し、各種補正演算等を行ってプロセス値等を計算するモジュールである。
通信モジュール120は、フィールド通信を行うモジュールである。通信モジュール120は、計測値や各種設定項目をフィールド通信で他のフィールドデバイスに送信したり、他のフィールドデバイスからの命令を受信し関連モジュールに伝達する処理を行う。また、通信モジュール120は、通信コントローラ116からの割込みで動作したり、自発的に動作し通信コントローラ116に指令を送ったりする。
表示処理モジュール121は、計測値や警告などを表示器117に表示する指令を出すモジュールである。
ROM112は情報の書き換え不可能な記録媒体であって、CPU111により実行されるプログラム等を記憶している。
RAM113は、揮発性のメモリであり、実行される各種プログラムやこれら各種プログラムに係るデータ(グローバル変数、ローカル変数等)を一時的に記憶するワークエリアを形成する。
不揮発性メモリ114は、センサの補正係数などの各種設定値や統計情報(以下、保存データと記す)など電源断時にも保存したいデータを記憶するメモリである。
センサ115は、フィールドデバイス100が計測する物理量を検出するハードウェアである。
通信コントローラ116は、フィールド通信(Foundation Fieldbus、Profibus-PA、HART通信など)を行う際に、信号の伝達等を受け持つハードウェアである。
表示器117は、測定値や警告などの情報を表示するLCD(Liquid Crystal Display)などのハードウェアである。
上述の構成を有するフィールドデバイス100における各モジュール(センサ処理モジュール119、通信モジュール120、表示処理モジュール121)は、独立して動作し、各モジュールが管理する変数(RAM113内のグローバル変数群113aやローカル変数群113bを指す)や不揮発性メモリ114内の保存データ114aをお互いに参照・更新しながら動作する。
なお、従来技術に関し、記載すべき先行技術文献情報を把握できなかったため、先行技術文献情報の記載は省略する。
しかしながら、フィールドデバイス100では、各モジュールが管理するグローバル変数群113aや不揮発性メモリ114上の保存データ114aを、各モジュールがお互いに参照・更新している。このため、モジュール毎に独立して開発作業(修正、削除、交換等)を行うことが難しい構造であった。
例えば、センサ処理モジュール119によりグローバル変数群113aに含まれるセンサ処理モジュールグローバル変数の修正(書き込み)が行われていた際、他のモジュール(通信モジュール等)は、修正の行われているセンサ処理モジュールグローバル変数を直接参照する(読み出す)ことができる。そうすると、他のモジュールが読み出したセンサ処理モジュールグローバル変数と、修正後のセンサ処理モジュールグローバル変数とはデータの不整合が生じてしまう。
また、例えば、センサ処理モジュール119によりセンサ処理モジュールグローバル変数が削除された場合、他のモジュール(通信モジュール等)は削除されたセンサ処理モジュールグローバル変数を参照できない。このとき、他のモジュールでセンサ処理モジュールグローバル変数が必要であった場合、他のモジュールでは処理ができないという不具合を生じる。
したがって、モジュール毎に独立して開発作業を行うと、他のモジュールに影響を及ぼしてしまい、モジュールのメンテナンス性の低下を招いていた。
また、例えば、モジュール単位で交換を行うと、他のモジュールに影響を及ぼしてしまうため、あるフィールドデバイスのモジュールを他のフィールドデバイスへ流用することは難しかった。この場合、同じ機能を有するモジュールをフィールドバスの種類ごとにカスタマイズする必要があり、モジュールの開発効率の低下を招いていた。
本発明の課題は、モジュールのメンテナンス性及び開発効率を向上させることである。
上記課題を解決するために、請求項1に記載の発明のフィールドデバイスは、
ユーザモジュール間で共有される共有データを記憶する記憶部と、
前記共有データへアクセスするためのトリガ情報を取得し、当該取得されたトリガ情報に基づいて、前記共有データのアクセス内容及び前記共有データのアクセス依頼を含むアクセス情報を出力するインターフェース部と、
前記インターフェース部により出力されたアクセス情報に基づいて、前記記憶部に記憶された前記共有データへアクセスする制御部と、
を備えることを特徴とする。
請求項2に記載の発明は、請求項1に記載のフィールドデバイスにおいて、
情報の通信を行う通信部を備え、
前記インターフェース部は、
前記通信部を介して前記トリガ情報を外部から取得、又は前記ユーザモジュールによる自発的なトリガ情報の出力により前記ユーザモジュールから前記トリガ情報を取得することを特徴とする。
請求項3に記載の発明は、請求項1又は2に記載のフィールドデバイスにおいて、
前記インターフェース部は、
前記トリガ情報に基づき前記共有データの排他制御依頼を出力し、
前記制御部は、
前記排他制御依頼に基づいて、前記共有データの排他制御を行う排他制御管理部と、
前記アクセス内容に基づいて、前記共有データへのアクセス権が記されているアクセスルールを参照し、前記共有データへのアクセスが可能か否かを判別するアクセス制御部と、
前記アクセス依頼に基づいて、前記共有データが記憶されている前記記憶部の記憶領域が記された保存先リストを参照し、当該保存先リストに記された記憶領域に記憶されている前記共有データへアクセスする共有データ管理部と、を備えることを特徴とする。
請求項4に記載の発明は、請求項3に記載のフィールドデバイスにおいて、
前記アクセスルール及び前記保存先リストは、
開発者により設定された共有データ名、アクセス方法を示した情報、及び揮発性情報に基づいて自動的に生成されることを特徴とする。
請求項5に記載の発明は、請求項1から4のいずれか一項に記載のフィールドデバイスにおいて、
前記制御部は、
前記共有データの識別子と前記共有データを参照するユーザモジュールの識別子とが対応付けられたモジュールリストに基づいて、前記共有データが更新された際、更新された共有データと対応付けられたユーザモジュールを特定し、当該特定されたユーザモジュールに対し、前記共有データが更新されたことを示す更新イベントを前記インターフェース部を介して通知することを特徴とする。
請求項6に記載の発明は、請求項5に記載のフィールドデバイスにおいて、
前記制御部は、
前記共有データが複数同時に更新される際、更新される全ての共有データが正しく更新されるか否かを確認し、複数の共有データのうち少なくとも1つの共有データの更新に失敗したことを確認した場合は、前記記憶部に記憶されている共有データを更新前の共有データに戻すことを特徴とする。
請求項7に記載の発明は、請求項5又は6に記載のフィールドデバイスにおいて、
前記インターフェース部は、
前記共有データのアクセスの際に取得された共有データを共有変数キャッシュにコピーし、次回以降に前記共有データへアクセスする際は、前記共有変数キャッシュにコピーされた共有データにアクセスすることを特徴とする。
請求項1の記載の発明によれば、アクセス情報に基づいて共有データへアクセスする。このため、モジュールのメンテナンス性及び開発効率を向上させることができる。
請求項2に記載の発明によれば、インターフェース部は、通信部を介してトリガ情報を外部から取得、又はユーザモジュールによるトリガ情報の自発的な出力によりユーザモジュールからトリガ情報を取得することができる。
請求項3に記載の発明によれば、共有データにアクセスする際、排他制御管理部で共有データの排他制御が自動的に行われるため、ユーザ(開発者)は共有データにアクセスするコードを書くだけで、安全に共有データにアクセスすることができる。また、アクセス制御部により、各ユーザモジュールからの共有データへのアクセスが制限され、不正なアクセスを検出することができる。
請求項4に記載の発明によれば、アクセスルール及び保存先リストは、開発者により設定された変数名、アクセス方法を示した情報、及び揮発性情報に基づいて自動的に生成されるので、人的ミスの排除、繰り返し作業に強くなり、開発工数を低減することができる。
請求項5に記載の発明によれば、ユーザモジュールによる定期的な更新確認が必要なくなるため、共有変数管理モジュールに共有変数へのアクセスが集中し、ボトルネックになる可能性を低減することができる。また、共有変数の更新から、その共有変数のデータ(更新データ)を別のユーザモジュールに伝達するまでのタイムラグを少なくすることができる。
また、ある共有変数が更新されたら、別のユーザモジュールでその更新された共有変数に連動する別のデータを再計算するといった、ユーザモジュール間の連係が容易になる。 また、定期的な共有変数の更新の確認を書くユーザモジュールで行う必要がなくなり、各ユーザモジュールの処理が簡素化され、各ユーザモジュールの処理のパフォーマンスを向上させることができる。
請求項6に記載の発明によれば、計測値とステータスのように、複数の共有変数がセットで意味をなす場合において、複数の共有変数の一部のみが更新されるようなケースがなくなり、共有変数の同時性が保証される。また、ユーザモジュールでエラーチェックや共有変数の書き戻しの処理を行う必要がなくなる。
請求項7に記載の発明によれば、インターフェース部の処理が簡素化され、インターフェース部の処理のパフォーマンスを向上させることができる。
本発明に係る第1の実施の形態のフィールドデバイスの内部構成を示す図である。 センサ演算処理の流れを示すフローチャートである。 センサ演算処理の流れを示すフローチャートである。 設定値書き込み処理の流れを示すフローチャートである。 初期化処理の流れを示すフローチャートである。 本発明に係る第1の実施の形態の変形例のフィールドデバイスの内部構成を示す図である。 本発明に係る第2の実施の形態のフィールドデバイスの内部構成を示す図である。 (A)は、変数−参照モジュールリストを示す図である。(B)は、参照変数リストを示す図である。 登録処理の流れを示すフローチャートである。 第1のイベント送受信処理の流れを示すフローチャートである。 第1のイベント送受信処理の流れを示すフローチャートである。 第2のイベント送受信処理の流れを示すフローチャートである。 第2のイベント送受信処理の流れを示すフローチャートである。 第3のイベント送受信処理の流れを示すフローチャートである。 第3のイベント送受信処理の流れを示すフローチャートである。 本発明に係る第2の実施の形態の変形例のフィールドデバイスの内部構成を示す図である。 書き込み処理の流れを示すフローチャートである。 第4のイベント送受信処理の流れを示すフローチャートである。 第4のイベント送受信処理の流れを示すフローチャートである。 従来のフィールドデバイスの内部構成を示す図である。
以下、添付図面を参照して本発明に係る実施の形態を詳細に説明する。ただし、発明の範囲は、図示例に限定されない。
(第1の実施の形態)
図1〜図5を参照して本発明に係る第1の実施の形態を説明する。本実施の形態のフィールドデバイス1は、CPU11と、ROM12と、記憶部としてのRAM13と、記憶部としての不揮発性メモリ14と、センサ15と、通信コントローラ16と、表示器17と、通信部としての接続インターフェース18と、を備えて構成される。CPU11、ROM12、RAM13、不揮発性メモリ14、センサ15、通信コントローラ16、表示器17、接続インターフェース18は、フィールドデバイス100のCPU111、ROM112、RAM113、不揮発性メモリ114、センサ115、通信コントローラ116、表示器117、接続インターフェース118とそれぞれ同様の構成である。以下、異なる部分を主として説明する。
CPU11は、センサ処理モジュール19と、通信モジュール20と、表示処理モジュール21と、制御部としての共有変数管理モジュール22と、インターフェース部としてのデータアクセス共通インターフェース23と、を有する。
具体的には、CPU11のデータアクセス共通インターフェース23は、後述するセンサ演算プログラム、設定値変更プログラム、及び初期化プログラムとの協働により、共有データ(共有変数群13bに格納されている共有変数、キャッシュ13cに格納されているキャッシュデータ、共有保存データ14a)へアクセスするためのトリガ情報を取得する。そして、CPU11のデータアクセス共通インターフェース23は、当該取得されたトリガ情報に基づいて、アクセス内容及びアクセス依頼を含むアクセス情報を共有変数管理モジュール22に出力する。そして、CPU11の共有変数管理モジュール22は、出力されたアクセス情報に基づいて、共有データへアクセスする。
なお、ユーザモジュールの自発的な動作(ユーザモジュールがトリガ情報を自発的にデータアクセス共通インターフェース23に出力する動作)により、当該出力されたトリガ情報がデータアクセス共通インターフェース23により取得されることとしてもよい。例えば、表示処理モジュール21が定期的に共有データ(プロセス値)へアクセスするためのトリガ情報を自発的にデータアクセス共通インターフェース23に出力することとしてもよい。この場合、データアクセス共通インターフェース23によりトリガ情報が取得され、当該取得されたトリガ情報に基づいて、アクセス情報が共有変数管理モジュール22に出力される。そして、共有変数管理モジュール22により、アクセス情報に基づいて、共有データへのアクセスが行われる。そして、アクセスされた共有データがデータアクセス共通インターフェース23経由で表示処理モジュール21により取得される。そして、表示処理モジュール21により共有データに基づく表示リクエストが表示器17に出力される。
センサ処理モジュール19、通信モジュール20、表示処理モジュール21は、フィールドデバイス100のセンサ処理モジュール119、通信モジュール120、表示処理モジュール121とそれぞれ同様の処理を行う。本実施の形態においては、各ユーザモジュール間(センサ処理モジュール19、通信モジュール20、表示処理モジュール21)で参照する共有データは、共有変数管理モジュール22の変数管理部22aが管理する共有変数群13bに格納されている共有変数、キャッシュ13cに格納されているキャッシュデータ、又は共有保存データ14aとなる。そのため、データアクセス共通インターフェース23経由で、共有変数管理モジュール22の管理する共有変数群13bに格納されている共有変数、キャッシュ13cに格納されているキャッシュデータ又は共有保存データ14aへアクセスする。また各モジュール内でしか使われないローカル変数群(センサ処理モジュールローカル変数、通信モジュールローカル変数、表示処理モジュールローカル変数)に関しては、フィールドデバイス100と同様に各モジュールから、RAM13内にあるローカル変数群13aに直接アクセスする。
共有変数管理モジュール22は、CPU11上で動作するソフトウェアであり、変数管理部22aと、アクセス制御部22bと、共有データ管理部としての排他制御管理部22cと、のサブモジュールから構成される。
変数管理部22aは、RAM13上の共有変数群13bに格納されている共有変数、キャッシュ13cに格納されているキャシュデータ又は不揮発性メモリ14上の共有保存データ14aを管理し、ユーザモジュール(センサ処理モジュール19、通信モジュール20、表示処理モジュール21)からのリクエストに応じてアクセスする。共有変数群13bには、電源断時に消えても支障の無い揮発性のデータが格納されている。キャッシュ13cには、共有保存データ14aと同じデータ(キャッシュデータ)が格納されている。
また、変数管理部22aは、ユーザモジュールからの要求があったときに、共有変数群13bに格納されている共有変数、キャッシュ13cに格納されているキャッシュデータ又は共有保存データ14aへアクセスする。このとき、変数管理部22aは、各共有データが記憶されている領域(保存場所)が記された保存先リスト222に基づいて、共有変数群13bに格納されている共有変数、キャッシュ13cに格納されているキャッシュデータ又は共有保存データ14aにアクセスする。ここで、変数管理部22aは、揮発性データを読み出しする場合、当該揮発性データを共有変数群13bから読み出し、不揮発性データを読み出しする場合、当該不揮発性データをキャッシュ13cから読み出す。また、変数管理部22aは揮発性データを書き込みする場合、当該揮発性データを共有変数群13bに書き込み、不揮発性データを書き込みする場合、当該不揮発性データをキャッシュ13cと共有保存データ14aとに書き込む。
また、変数管理部22aは、起動時においてキャッシュ13cに格納されているデータは空のため、共有変数管理モジュール22の初期化時に共有保存データ14aをキャッシュ13cへコピーする。
アクセス制御部22bは、ユーザモジュールから共有データへのアクセスリクエストがあったときに、正しいユーザモジュールから、正しいアクセス方法(読み出し、書き込み)でアクセスされているかをアクセスルール221に従ってチェックする。
アクセスルール221は、共有データへのアクセス権が記されている。具体的には、アクセスルール221は、共有データの識別子(識別情報)とユーザモジュール毎のアクセス権(読み出し可、書き込み可、アクセス不可等)が記されている。例えば、センサ処理モジュール19から変数aには読み出しのみの権限しかない状態で、センサ処理モジュール19から変数aに値を書き込もうとするとアクセスが中断される。この機能により不正な共有データへのアクセスを検知することが可能となる。アクセスのチェックは共有データへのアクセス時に毎回行われる。
排他制御管理部22cは、独立して動作する複数のユーザモジュールが同時に同じ共有データへアクセスする場合に、更新途中の共有データにアクセスしてしまわないように制御する機能を有する。
また、排他制御管理部22cは、複数の共有データに同時にアクセスしたい場合、同じタイミングで複数の共有データにアクセスする。例えば、計測値の値とそのステータスのように、同じ時間のデータのセットで意味を成す共有データへアクセスする場合に使う。
また、排他制御管理部22cは、変数管理部22aが管理する共有データへアクセスする場合は、自動的に排他制御を行う。
データアクセス共通インターフェース23は、センサ処理モジュール19、通信モジュール20、表示処理モジュール21など開発者が開発するモジュールが、各モジュール間で共有する共有変数群13bに格納された共有変数、キャッシュ13cに格納されたキャッシュデータ又は共有保存データ14aにアクセスするときに利用されるモジュールである。
具体的には、データアクセス共通インターフェース23は、接続インターフェース18を介して外部からトリガ情報を取得、又はユーザモジュールの自発的動作により出力されたトリガ情報を取得する。そして、データアクセス共通インターフェース23は、当該取得したトリガ情報に基づいて、共有データの排他制御依頼(例えば、プロセス値とステータス値とに対する排他制御依頼)、共有データのアクセス内容(例えば、アクセスする共有データが共有変数の場合、共有変数の情報とアクセス方法)及び共有データのアクセス依頼(例えば、プロセス値とステータス値とを共有変数群13bに書き込むリクエスト等)を出力する。
また、データアクセス共通インターフェース23の機能としては、「一つの共有データの値を読み出す」、「一つの共有データの値を書き込む」、「複数の共有データの値を読み出す」、「複数の共有データの値を書き込む」という4種類がある。例えば、一度に複数の共有データを読み出す場合、一度に複数の共有データを書き込む場合、ある時点の複数の共有データを読み出す場合、又は同時に複数の共有データを更新したい場合などに、データアクセス共通インターフェース23は、「複数の共有データの値を読み出す」、「複数の共有データの値を書き込む」機能を有する。
RAM13は、ローカル変数群13aと、共有変数群13bと、キャッシュ13cと、を記憶する。ローカル変数群13aには、各モジュール内でしか使われないローカル変数が格納されている。共有変数群13bには、各モジュールユーザモジュール間で共有される共有変数が格納されている。キャッシュ13cには、各ユーザモジュール間で共有される共有保存データのキャッシュデータが格納されている。
なお、共有変数群13b、共有保存データ14a、アクセスルール221及び保存先リスト222は、開発するフィールドデバイス1ごとに違うため、開発者が設計時にツールを用いて設定する。
具体的には、開発者は、開発するモジュール毎に、使用する共有データの一覧(共有変数群13bを構成する共有変数、ローカル変数群13aを構成するローカル変数、共有保存データ14aなど)が記述された設定ファイルを作成する。
このとき、一つの共有データ毎に、共有データ名、アクセス方法を示した情報及び揮発性情報が設定される。共有データ名は、共有データの名称である。例えば、共有データ名として、共有変数の変数名が設定される。アクセス方法を示した情報は、自モジュールからのアクセス権限を示したデータである。例えば、アクセス方法を示した情報として、読み出しのみ、書き込みのみ、又は、読み書き両方のいずれか等が設定される。揮発性情報は、共有データが揮発性データであるか否かを識別する情報である。例えば、揮発性情報として、電源断時に消えても良い、電源が切られても保持しておきたい旨等が設定される。
そして、設定された設定ファイルがツールにかけられる。このとき、ツールは共有変数群13b、共有保存データ14a等を抽出し、RAM13上の共有変数群13bのソースコード、不揮発性メモリ14上の共有保存データ14aのソースコード、RAM13上のキャッシュ13cのソースコード、保存先リスト222(ソースコード)、アクセスルール221(ソースコード)を生成する。この生成されたソースコードが変数管理部22a又はアクセス制御部22bに組み込まれる。
接続インターフェース18は、共有データへアクセスするためのトリガ情報(計測値がセンサ15に準備されたことを示す割り込み、設定値を書き込むための通信コントローラ16からの設定値変更リクエスト、初期化用変数を読み出すためのCPU11に供給する電力等)を受信する。
次に、図2〜図5を参照して、フィールドデバイス1の動作を説明する。先ず、図2及び図3を参照して、センサ演算処理について説明する。センサ演算処理は、センサ15で測定された値と、RAM13上の共有変数群13bで保持している揮発データである補正係数から、プロセス値とそのときのステータス値を算出し、RAM13上の共有変数群13bに書き込む処理である。
予め、プロセス値とステータス値はセンサ処理モジュール19からの読み書き(読み出し、書き込み)、補正係数はセンサ処理モジュール19からの読み出しが許可されているものとする。また、補正計数はRAM13上の共有変数群13bに保存(格納)されているものとする。
例えば、フィールドデバイス1において、センサ15からの割り込み(計測値がセンサ15に準備されたことを示す割り込み)が接続インターフェース18により受信され、当該受信された割り込みがセンサ処理モジュール19に入ったことをトリガとして、ROM12から読み出されて適宜RAM13に展開されたセンサ演算プログラムと、CPU11との協働によりセンサ演算処理が実行される。
先ず、センサ処理モジュール19により、センサ15から計測値が取得される(ステップS11)。そして、センサ処理モジュール19により、補正係数の読み出しリクエストがデータアクセス共通インターフェース23へ出される。ここで、センサ処理モジュール19の処理は結果が返ってくるまで停止される(ステップS12)。
ステップS12の実行後、補正係数にアクセスするため、データアクセス共通インターフェース23により排他制御管理部22cに排他制御依頼が出される。そして、排他制御管理部22cにより、補正係数が他のユーザモジュールからアクセスできないようにされる(ステップS13)。
そして、データアクセス共通インターフェース23により、アクセス制御部22bに、アクセスする共有データ(補正係数)の情報とアクセス方法(読み出し)が渡される。そして、アクセス制御部22bにより、アクセスルール221が参照され、アクセス権のチェックが行われる(ステップS14)。この例では、アクセス制御部22bからアクセスか可能である旨(アクセスOK)がデータアクセス共通インターフェース23に返される。
ステップS14の実行後、データアクセス共通インターフェース23により、変数管理部22aに補正係数の読み出しリクエストが出される(ステップS15)。そして、変数管理部22aにより、保存先リスト222が参照され、補正係数の保存先がRAM13上の共有変数群13bであることが判断され、共有変数群13bからデータが読み出される(ステップS16)。
ステップS16の実行後、データアクセス共通インターフェース23により、排他制御管理部22cに、補正係数の排他制御終了が通知される(ステップS17)。そして、ステップS12の実行の際に停止されていたセンサ処理モジュール19の処理が再開され、センサ処理モジュール19により補正係数が取得される。そして、センサ処理モジュール19によりローカル変数群13aのセンサ処理モジュールローカル変数にアクセスされると同時に、取得された補正係数で処理が行われ、プロセス値とセンサのステータス値が計算される(ステップS18)。
ステップS18の実行後、センサ処理モジュール19により、ステップS18で算出されたプロセス値とステータス値の書き込みリクエストがデータアクセス共通インターフェース23に出される。このとき、センサ処理モジュール19の処理は結果が返ってくるまで停止される(ステップS19)。そして、プロセス値とステータス値にアクセスするため、データアクセス共通インターフェース23により排他制御管理部22cに排他制御依頼が出される。そして、排他制御管理部22cによりプロセス値とステータス値とが、他のユーザモジュールからアクセスできないようにされる(ステップS20)。
ステップS20の実行後、データアクセス共通インターフェース23により、アクセス制御部22bに、アクセスする共有データ(プロセス値、ステータス値)の情報とアクセス方法(書き込み)が渡される。そして、アクセス制御部22bによりアクセスルール221が参照され、アクセス権のチェックが行われる(ステップS21)。この例ではアクセス制御部22bからデータアクセス共通インターフェース23にアクセス可能である旨(アスセスOK)が返される。
ステップS21の実行後、データアクセス共通インターフェース23により、変数管理部22aに、プロセス値・ステータス値の書き込みリクエストが出される(ステップS22)。そして、変数管理部22aにより、保存先リスト222が参照され、プロセス値・ステータス値の保存先がRAM13上の共有変数群13bであることが判断され、プロセス値・ステータス値が共有変数群13bに書き込まれる(ステップS23)。
ステップS23の実行後、データアクセス共通インターフェース23により、排他制御管理部22cに、プロセス値・ステータス値の排他制御終了が通知される(ステップS24)。そして、ステップS19において停止されていたセンサ処理モジュール19の処理が再開される(ステップS25)。ステップS25の実行後、センサ演算処理は終了される。
次に、図4を参照して、設定値変更処理について説明する。設定値変更処理は、通信コントローラ16から送られてきた設定値(以下、設定値Aとする)の変更リクエストに基づいて、設定値AをRAM13上のキャッシュ13c及び不揮発性メモリ14の共有保存データ14aに書き込む処理である。
予め、設定値Aは不揮発性メモリ14上の共有保存データ14aに保存(格納)されているものとする。また、設定値Aは、通信モジュール20からの読み書きが許可されているものとする。
例えば、フィールドデバイス1において、通信コントローラ16からの設定値Aの変更リクエストが接続インターフェース18により受信され、当該受信された設定値Aの変更リクエストが通信モジュール20に入ったことをトリガとして、ROM12から読み出されて適宜RAM13に展開された設定値変更プログラムと、CPU11との協働により設定値変更処理が実行される。
先ず、通信モジュール20によりローカル変数群13aの通信モジュールローカル変数へアクセスされる(ステップS31)。そして、通信モジュール20により、設定値Aの書き込みリクエストがデータアクセス共通インターフェース23へ出される。このとき、通信モジュール20の処理は結果が返ってくるまで停止される(ステップS32)。
ステップS32の実行後、設定値Aにアクセスするため、データアクセス共通インターフェース23により排他制御管理部22cに排他制御依頼が出される。そして、排他制御管理部22cにより他のユーザモジュールから設定値Aがアクセスできないようにされる(ステップS33)。そして、データアクセス共通インターフェース23により、アクセス制御部22bに、アクセスする共有データ(設定値A)の情報とアクセス方法(書き込み)が渡される。そして、アクセス制御部22bによりアクセスルール221が参照され、アクセス権のチェックが行われる(ステップS34)。この例では、アクセス制御部22bからデータアクセス共通インターフェース23にアクセス可能である旨(アクセスOK)が返される。
ステップS34の実行後、データアクセス共通インターフェース23により変数管理部22aに、設定値Aの書き込みリクエストが出される(ステップS35)。そして、変数管理部22aにより保存先リスト222が参照され、設定値Aの保存先が不揮発性メモリ14上の共有保存データ14aであることが判断され、RAM13上のキャッシュ13cに設定値Aが書き込まれる(ステップS36)。
ステップS36の実行後、変数管理部22aにより不揮発性メモリ14上の共有保存データ14aに接続インターフェース18経由で設定値Aが書き込まれる(ステップS37)。そして、データアクセス共通インターフェース23により、排他制御管理部22cに、設定値Aの排他制御終了が通知される(ステップS38)。そして、ステップS32で停止されていた通信モジュール20の処理が再開される(ステップS39)。ステップS39の実行後、設定値変更処理は終了される。
次に、図5を参照して、初期化処理について説明する。初期化処理は、センサ処理モジュール19の初期化用データをキャッシュ13c及び不揮発性メモリ14の共有保存データ14aに書き込む処理である。
予め、初期化用データは不揮発性メモリ14上の共有保存データ14aに保存(格納)されているものとする。また、設定値Aは、センサ処理モジュール19からの読み書きが許可されているものとする。
例えば、フィールドデバイス1において、電源部(図示省略)から供給される電力が接続インターフェース18により受信され、当該受信された電力がCPU11に入り、CPU11が通電された後にセンサ処理モジュール19が初期化を開始したことをトリガとして、ROM12から読み出されて適宜RAM13に展開された初期化プログラムと、CPU11との協働により初期化処理が実行される。
先ず、センサ処理モジュール19により初期化に必要な初期化用データ(初期化用変数)の読み出しリクエストが、データアクセス共通インターフェース23へ出される。センサ処理モジュール19の処理は、結果が返ってくるまで停止される(ステップS41)。そして、初期化用変数にアクセスするため、データアクセス共通インターフェース23により排他制御管理部22cに排他制御依頼が出される。そして、排他制御管理部22cにより初期化用変数が、他のユーザモジュールからアクセスできないようにされる(ステップS42)。
ステップS42の実行後、データアクセス共通インターフェース23によりアクセス制御部22bに、アクセスする共有データ(初期化用変数)の情報とアクセス方法(この例では読み出し)が渡される。そして、アクセス制御部22bによりアクセスルール221が参照され、アクセス権のチェックが行われる(ステップS43)。この例では、アクセス制御部22bからデータアクセス共通インターフェース23にアクセスは可能である事を示す旨(アクセスOK)が返される。
ステップS43の実行後、データアクセス共通インターフェース23により変数管理部22aに、初期化用変数の読み出しリクエストが出される(ステップS44)。そして、変数管理部22aにより保存先リスト222が参照され、初期化用変数の保存先が不揮発性メモリ14上の共有保存データ14aであることが判断され、RAM13上のキャッシュ13cから変数が読み出される(ステップS45)。
ステップS45の実行後、キャッシュ13cから読み出された変数が初期化されていないため、共有保存データ14aから当該データ(キャッシュ13cから読み出された変数と同じ変数)が読み出され、キャッシュ13cに書き込まれる(ステップS46)。このキャッシュ13cに書き込まれた変数が初期化変数に該当する。そして、データアクセス共通インターフェース23により排他制御管理部22cに、初期化用変数の排他制御終了が通知される(ステップS47)。そして、ステップS42において停止されていたセンサ処理モジュールの処理が再開される(ステップS48)。ステップS47の実行後、初期化処理は終了される。
以上、本実施の形態によれば、各ユーザモジュールは、データアスセス共通インターフェース23及び共有変数管理モジュール22を経由して共有データにアクセスするので、各ユーザモジュールがお互いに共有データを直接参照・更新することがない。このため、モジュール毎に修正、交換、追加等を容易に行うことができるので、モジュールのメンテナンス性を向上させることができる。
また、各ユーザモジュールがお互いに共有データを直接参照・更新することがないので、他のユーザモジュールへの影響を考慮することなく、ユーザモジュールの開発を行うことができる。このため、ユーザモジュールの開発を平行して行え、開発期間の短縮を図る(モジュールの開発効率を向上させる)ことができる。
具体的には、モジュール間の関係はデータの読み書きだけなので、適切な共有データ(例えば、通信モジュール20で使用する共有データ)が共有変数群13b又はキャッシュ13cにあれば、その共有データを利用するユーザモジュールの開発(例えば、通信モジュール20の動作確認等)を行うことができる。共有データを変化させる必要があれば、共有データを適切に変更し書き込むだけの簡易ユーザモジュールを作ることで対応できる。
また、データアクセス共有インターフェース23は、接続インターフェース18を介してトリガ情報を外部から取得、又はユーザモジュールによる自発的なトリガ情報の出力によりユーザモジュールからトリガ情報を取得することができる。
また、共有データにアクセスする際、排他制御管理部22cで共有データの排他制御が自動的に行われるため、開発者は共有データにアクセスするコードを書くだけで、安全に共有データにアクセスすることができる。また、アクセス制御部22bにより、各ユーザモジュールからの共有データへのアクセスが制限され、不正なアクセスを検出することができる。したがって、例えば、動作の安全性を確保するためのSIL認証取得時に有益である。
また、保存先リスト222と、アクセスルール221の設定にツールを用いることにより、人的ミスの排除、繰り返し作業に強くなり、開発工数を低減することができる。
(第1の実施の形態の変形例)
図6を参照して、本発明の第1の実施の形態の変形例を説明する。図6に本変形例のフィールドデバイス1Aの構成を示す。以下、図1に示すフィールドデバイス1と同様の部分には、同一の符号を付し、その詳細な説明を援用し、異なる部分を主として説明する。
フィールドデバイス1aは、センサボード30と、通信ボード31と、を備える。センサボード30は、センシングを担当するボードである。センサボード30は、センサ処理モジュール19と、データアクセス共通インターフェース23と、ボード間通信モジュール32Aと、を有する。ボード間通信モジュール32Aは、通信ボード31と通信を行うためのモジュールである。
通信ボード31は、通信・表示を担当するボードである。通信ボード31は、通信モジュール20と、表示処理モジュール21と、共有変数管理モジュール22と、データアクセス共通インターフェース23と、ボード間通信モジュール32Bと、を備えて構成される。ボード間通信モジュール32Bは、センサボード30と通信を行うためのモジュールである。
次に、図6に示すフィールドデバイス1aの動作を説明する。
先ず、センサボード30のセンサ処理モジュール19によりセンサの割込みが受けられる(図6−(1))。そして、センサ処理モジュール19からデータアクセス共通インターフェース23にデータの読み込み・書き込みリクエストが送信される(図6−(2))。そして、データアクセス共通インターフェース23からデータの読み込み・書き込みのリクエストがボード間通信モジュール32Aに依頼される(図6−(3))。そして、データの読み込み・書き込みリクエストがボード間通信方式に変換される。そして、変換された通信方式でデータの読み込み・書き込みリクエストがボード間通信モジュール32Aからボード間通信モジュール32Bに送信される(図6−(4))。そして、データの読み込み・書き込みリクエストがボード間通信方式の変換前の方式に変換される。そして、変換されたデータの読み込み・書き込みリクエストが共有変数管理モジュール22に依頼される(図6−(5))。
以上、本変形例によれば、ハードウェア間(センサボード30と通信ボード31との間)でデータアクセス共通インターフェース23を共有する。この構成により、開発者はハードウェアの境界を意識することなくデータの共有を行うことができる。したがって、マルチプロセッサなどを採用することが容易になりシステム設計の自由度を向上させることができる。また、各ボード(センサボード30、通信ボード31)内で動作する機能が減り設計の簡素化を図ることができる。
(第2の実施の形態)
上述の第1の実施の形態及び第1の実施の形態の変形例は、共有データ(例えば、共有変数)を複数のユーザモジュールで共有し、共有変数に対して共通のインターフェース(データアスセス共通インターフェース23)を利用して各ユーザモジュールから読み書き(アクセス)するものである。このとき、例えば、センサ処理モジュール19と表示処理モジュール21とで、ある共有変数を参照(共有)しているケースにおいて、センサ処理モジュール19が共有変数を更新しても、表示処理モジュール21は共有変数の更新を知ることができない。表示処理モジュール21が共有変数の更新を確認するためには、表示処理モジュール21自身が定期的に共有変数の内容を確認する必要がある。この場合、共有変数がセンサ処理モジュール19によって更新されてから、表示処理モジュール21で更新を認識(確認)するためにタイムラグが発生し、ユーザモジュール間の連係に支障をきたすという問題点がある。また、この場合において、表示処理モジュール21は、共有変数が更新されていなくても、定期的に更新確認を行う必要があり、ソフトウエア全体の処理の効率を下げるという問題点がある。
また、上述の第1の実施の形態及び第1の実施の形態の変形例では、複数の共有変数を一度に更新した場合において、1つの共有変数の更新でエラーが発生しても他の共有変数は更新されてしまう。このため、計測値とステータスのように、複数の共有変数がセットで意味をなす場合において、複数の共有変数に対して更新の同時性を保証できないという問題点がある。
上述の問題点を解決するため、本実施の形態では、共有データを参照している全ユーザモジュールへ、共有データが更新されたことを示す情報、更新された共有データを示す更新データ及び更新された共有データの識別子を示す変数識別子を通知する機能を有するフィールドデバイス2について説明する。以下、この3つの要素(共有データが更新されたことを示す情報、更新された共有データを示す更新データ、及び更新された共有データの識別子を示す変数識別子)をまとめて更新イベントと記す。また、更新される共有データは、共有変数であるものとして説明する。
先ず、図7を参照して、本実施の形態のフィールドデバイス2の構成を示す。以下、図1に示すフィールドデバイス1と同様の部分には、同一の符号を付し、その詳細な説明を援用し、異なる部分を主として説明する。
図7に示すように、フィールドデバイス2のCPU11は、センサ処理モジュール19と、通信モジュール20と、表示処理モジュール21と、制御部としての共有変数管理モジュール22と、インターフェース部としてのデータアクセスモジュール23a,23b,23cと、を有する。なお、図7中の矢印は、情報の流れの一例を示したものである。
共有変数管理モジュール22の変数管理部22aは、共有変数が更新されると、変数−参照モジュールリスト221aに従い、同じ共有変数を参照しているユーザモジュール用のデータアクセスモジュールに更新イベントを通知する。
ここで、図8(A)を参照して、変数−参照モジュールリスト221aの一例について説明する。変数−参照モジュールリスト221aは、RAM13に記憶されている。図8(A)に示すように、変数−参照モジュールリスト221aは、共有データの識別子としての変数識別子と、ユーザモジュールの識別子としての参照モジュール識別子と、を有し、変数識別子と参照モジュール識別子とが関連付けられて記憶されている。変数識別子は、更新された共有変数の識別子を示す。参照モジュール識別子は、更新された共有変数を参照するユーザモジュールの識別子を示す。例えば、1つの共有変数を複数のユーザモジュールが共有する場合は、変数−参照モジュールリスト221aに、1つの変数識別子に対し複数のモジュール識別子が対応付けられて記憶される。
また、変数−参照モジュールリスト221aにおける変数識別子及びモジュール識別子は、各データアクセスモジュール23a〜23cにより変数管理部22aへのアクセスがされたときに、変数管理部22aにより変数−参照モジュールリスト221aに登録される。
変数管理部22aは、共有変数が更新されると、変数−参照モジュールリスト221aをRAM13から読み出し、当該読み出された変数−参照モジュールリスト221aに基づいて、更新された共有変数と対応付けられたユーザモジュールを特定する。そして、変数管理部22aは、特定されたユーザモジュールに対し、更新イベントをデータアクセスモジュール(特定されたユーザモジュール用のデータアクセスモジュール)を介して通知する。また、変数管理部22aは、特定されたユーザモジュールが複数ある場合は、複数のユーザモジュールに対し更新イベントを通知する。このとき、変数管理部22aは、リクエスト元のユーザモジュールに対しては、更新イベントを通知しない。
また、変数管理部22aは、複数の共有変数を同時更新し、且つ、ロールバックフラグがONの場合において、共有変数群13bから更新するデータを読取り保持し、その後にリクエストされたデータを共有変数群13bに書き込み、全ての更新が成功した事を確認した後に更新イベントを通知する。ここで、ロールバックフラグとは、共有変数の更新失敗時に、共有変数群13bに記憶されている共有変数を更新前の共有変数に戻すか否かを示すフラグである。
また、変数管理部22aは、複数の共有変数を同時更新し、且つ、ロールバックフラグがONの場合において、複数の共有変数の少なくとも1つの共有変数の更新に失敗したことを確認した場合は、共有変数群13bに記憶されている共有変数を更新前の共有データに戻す。
データアクセスモジュール23a〜23cは、各ユーザモジュールと共有変数管理モジュールとを仲介するインターフェース機能を有する。データアクセスモジュール23aは、センサ処理モジュール用のデータアクセスモジュールである。データアクセスモジュール23bは、通信モジュール用のデータアクセスモジュールである。データアクセスモジュール23cは、表示処理モジュール用のデータアクセスモジュールである。
具体的には、データアクセスモジュール23a〜23cは、各ユーザモジュールが更新イベントを受け取りたい(参照したい)共有変数の変数識別子とその共有変数を格納する変数ポインタとを各ユーザモジュールから受信する。ここで、変数ポインタは、RAM13上のローカル変数群13a内のアドレスを示す。
また、データアクセスモジュール23a〜23cは、共有変数の更新時に、共有変数管理モジュール22の変数管理部22aから通知される更新イベントを受信し、当該受信された更新イベントを各ユーザモジュールに伝達する。
また、データアクセスモジュール23a〜23cは、更新イベントを受信すると、RAM13から参照変数リスト231〜233を読み出し、当該読み出された参照変数リスト231〜233に基づいて、更新された共有変数に対応付けられた変数ポインタへ更新された共有変数をコピーする。
ここで、図8(B)を参照して、参照変数リスト231〜233の一例について説明する。参照変数リスト231〜233は、RAM13に記憶されている。図8(B)に示すように、参照変数リスト231〜233は、変数識別子と、変数ポインタとを有し、変数識別子と変数ポインタとが関連付けられて記憶されている。参照変数リスト231〜233における変数識別子及び変数ポインタは、各ユーザモジュールから変数識別子及び変数ポインタがデータアクセスモジュール23a〜23cにより受信された際、データアクセスモジュール23a〜23cにより参照変数リスト231〜233に登録される。
次に、図9〜図15を参照して、フィールドデバイス2の動作を説明する。以下、センサ処理モジュール19が共有変数を更新した場合に、同じ共有変数を参照している通信モジュール20に更新イベントが通知される場合の動作について説明する。
先ず、図9を参照して、登録処理について説明する。登録処理は、通信モジュール20において、変数識別子及び変数ポインタを参照変数リスト232に登録する処理である。
例えば、フィールドデバイス2の通信モジュール20から更新イベントがほしい(更新イベントを受け取りたい)共有変数の変数識別子及びその共有変数の変数ポインタが通信モジュール用データアクセスモジュール23b(以下、データアクセスモジュール23b)に伝達されたことをトリガとして、ROM12から読み出されて適宜RAM13に展開された登録プログラムと、CPU11との協働により登録処理が実行される。
先ず、データアクセスモジュール23bにより、通信モジュール20から通知された変数識別子及び変数ポインタが参照変数リスト232に登録される(ステップS111)。例えば、通知された変数識別子が「VAR_ID_b」、ポインタが「p_b」である場合、データアクセスモジュール23bにより、参照変数リスト232に変数識別子「VAR_ID_b」及びポインタ「p_b」が登録される。
そして、データアクセスモジュール23bにより、通信モジュール20から通知された変数識別子及び通信モジュール20のモジュール識別子が変数管理部22aに通知される(ステップS112)。例えば、データアクセスモジュール23bにより、変数識別子「VAR_ID_b」及び通信モジュール20のモジュール識別子「MOD_ID_COM」が変数管理部22aに通知される。
ステップS112の実行後、変数管理部22aにより、データアクセスモジュール23bから通知された変数識別子及びモジュール識別子が変数−参照モジュールリスト221aに追加される(ステップS113)。ステップS113の実行後、登録処理は終了される。
次に、図10及び図11を参照して、第1のイベント送受信処理について説明する。第1のイベント送受信処理は、センサ処理モジュール19による共有変数Aの更新を、ロールバックフラグをOFFに設定して変数管理部22aにリクエストし、変数管理部22aによる共有変数Aの更新が成功した場合に、通信モジュール20に更新イベントを通知する処理である。
予め、共有変数AはRAM13上の共有変数群13bに保持(格納)されているものとする。また、共有変数Aはセンサ処理モジュール19からの読み書きが許可されているものとする。
また、共有変数Aを参照するモジュールとして、センサ処理モジュール19及び通信モジュール20が設定されているものとする。具体的には、例えば、変数−参照モジュールリスト221aに、共有変数Aの変数識別子「VAR_ID_b」と、モジュール識別子(センサ処理モジュール19のモジュール識別子「MOD_ID_SENSOR」及び通信モジュール20のモジュール識別子「MOD_ID_COM」)とが関連付けられて記憶されているものとする。
また、例えば、参照変数リスト232に共有変数Aの変数識別子「VAR_ID_b」とポインタ「p_b」とが関連付けられて記憶されているものとする。
また、ロールバックフラグはOFFに設定されているものとする。
例えば、フィールドデバイス2において、センサ15からの割り込み(計測値がセンサ15に準備されたことを示す割り込み)が接続インターフェース18により受信され、当該受信された割り込みがセンサ処理モジュール19に入ったことをトリガとして、ROM12から読み出されて適宜RAM13に展開された第1のイベント送受信プログラムと、CPU11との協働により第1のイベント送受信処理が実行される。
先ず、センサ処理モジュール19により、センサ15から計測値が取得され、取得された計測値から共有変数Aが算出される(ステップS121)。そして、センサ処理モジュール19により、更新命令と共に共有変数A、共有変数Aの変数識別子及びロールバックフラグがセンサ処理モジュール19用のデータアクセスモジュール23aに通知(出力)される。ここで、センサ処理モジュール19の処理は結果が返ってくるまで停止される(ステップS122)。
ステップS122の実行後、共有変数Aにアクセスするため、センサ処理モジュール用データアクセスモジュール23a(以下、データアクセスモジュール23a)により排他制御管理部22cに排他制御依頼が出される。そして、排他制御管理部22cにより、共有変数Aが他のユーザモジュールからアクセスできないようにされる(ステップS123)。
そして、データアクセスモジュール23aにより、アクセス制御部22bに、アクセスする共有データ(共有変数A)の情報とアクセス方法(書き込み)が渡される。そして、アクセス制御部22bにより、アクセスルール221が参照され、アクセス権のチェックが行われる(ステップS124)。この例では、アクセス制御部22bからアクセスが可能である旨(アクセスOK)がデータアクセスモジュール23aに返される。
ステップS124の実行後、データアクセスモジュール23aにより、共有変数A、共有変数Aの変数識別子、モジュール識別子及びロールバックフラグが変数管理部22aに通知される(ステップS125)。
ステップS125の実行後、変数管理部22aにより、ロールバックフラグが参照され、ロールバックフラグがOFFと判断される。すなわち、データ書き込みの失敗時にデータ(共有変数A)を元に戻さない(更新前の共有変数Aに戻さない)と判断される。そして、変数管理部22aにより、保存先リスト222が参照され、共有変数Aの保存先がRAM13上の共有変数群13bであることが判断され、共有変数群13bに共有変数Aが書き込まれる(ステップS126)。
ステップS126の実行後、共有変数群13bへの書き込みが成功すると、変数管理部22aにより、共有変数Aの変数識別子をキーとして変数−参照モジュールリスト221aが参照され、センサ処理モジュール19のモジュール識別子及び通信モジュール20のモジュール識別子が取得される(ステップS127)。具体的には、変数管理部22aにより、センサ処理モジュール19のモジュール識別子「MOD_ID_SENSOR」及び通信モジュール20のモジュール識別子「MOD_ID_COM」)が取得される。
ステップS127の実行後、変数管理部22aにより、書き込みリクエスト元(すなわち、センサ処理モジュール19のデータアクセスモジュール23a)でない通信モジュール20用のデータアクセスモジュール23bに対して更新イベントが通知される(ステップS128)。
ステップS128の実行後、データアクセスモジュール23bにより、更新イベントに基づいて、変数識別子(更新された共有変数Aの変数識別子「VAR_ID_b」)及び更新データ(更新された共有変数A)が取得される。そして、データアクセスモジュール23bにより、参照変数リスト232が参照され、取得された更新データの変数識別子に関連付けられた変数ポインタが取得される(ステップS129)。具体的には、データアクセスモジュール23bにより、更新された共有変数Aの変数識別子「VAR_ID_b」に関連付けられた変数ポインタ「p_b」が取得される。
ステップS129の実行後、データアクセスモジュール23bにより、取得された変数ポインタへ更新データ(共有変数A)がコピーされる(ステップS130)。
ステップ130の実行後、データアクセスモジュール23bにより、通信モジュール20へ更新イベントが伝達される。そして、通信モジュール20により、共有変数Aが更新されたことが認識される(ステップS131)。
ステップS131の実行後、データアクセスモジュール23aにより、排他制御管理部22cに共有変数Aの排他制御終了が通知される(ステップS132)。そして、ステップS122の実行の際に停止されていたセンサ処理モジュール19の処理が再開される(ステップS133)。ステップS133の実行後、第1のイベント送受信処理は終了される。
次に、図12及び図13を参照して、第2のイベント送受信処理について説明する。第2のイベント送受信処理は、センサ処理モジュール19による複数の共有データ(共有変数A,B,Cとする)の更新を、ロールバックフラグをONに設定して変数管理部22aにリクエスト(通知)し、変数管理部22aによる共有変数A,B,Cの更新が成功した場合に、通信モジュール20に更新イベントを通知する処理である。
予め、共有変数A,B,Cは、RAM13上の共有変数群13bに保持(格納)されているものとする。また、共有変数A,B,Cは、センサ処理モジュール19からの読み書きが許可されているものとする。
また、共有変数A、B、Cを参照するモジュールとして、センサ処理モジュール19及び通信モジュール20が設定されているものとする。
また、参照変数リスト232に共有変数A,B,Cの変数識別子と変数ポインタとがそれぞれ関連付けられて記憶されているものとする。
また、ロールバックフラグはONに設定されているものとする。
第2のイベント送受信処理のトリガは、第1のイベント送受信処理のトリガと同様である。
ステップS141〜145は、第1のイベント送受信処理のステップS121〜125と同様である。具体的には、第1のイベント送受信処理の共有変数Aが共有変数A,B,Cに置き換わってステップS141〜145が実行される。
ステップS145の実行後、変数管理部22aにより、ロールバックフラグが参照され、ロールバックフラグがONと判断される。すなわち、データ書き込みの失敗時にデータ(共有変数A,B,C)を元に戻す(更新前の共有変数A,B,Cに戻す)と判断される。そして、変数管理部22aにより保存先リスト222が参照され、共有変数A,B,Cの保存先がRAM13上の共有変数群13bにあることが判断され、データ書き込み失敗時に書き戻すデータ(共有変数A、B、C)が共有変数群13bから取得される(ステップS146)。このとき、取得された共有変数A,B,Cは、更新前のデータであり、共有変数Aの書きこみが失敗した場合、共有変数群13bに書き戻される。
ステップS146の実行後、変数管理部22aにより、共有変数群13bに共有変数A,B,Cが書き込まれる(ステップS147)。
ステップS148〜ステップS154は、第1のイベント送受信処理のステップS127〜133と同様である。具体的には、第1のイベント送受信処理の共有変数Aが共有変数A,B,Cに置き換わってステップS148〜ステップS154が実行される。ステップS154の実行後、第2のイベント送受信処理は終了される。
次に、図14及び図15を参照して、第3のイベント送受信処理について説明する。第3のイベント送受信処理は、センサ処理モジュール19による複数の共有データ(共有変数A,B,C)の更新を、ロールバックフラグをONに設定して変数管理部22aにリクエスト(通知)し、変数管理部22aによる共有変数A,B,Cの中の1つの更新が失敗した場合に、共有変数A,B,Cの更新を行わない処理である。
予め、共有変数A,B,Cは、RAM13上の共有変数群13bに保持(格納)されているものとする。また、共有変数A,B,Cは、センサ処理モジュール19からの読み書きが許可されているものとする。
また、共有変数A、B、Cを参照するモジュールとして、センサ処理モジュール19及び通信モジュール20が設定されているものとする。
また、参照変数リスト232に共有変数A,B,Cの変数識別子と変数ポインタとがそれぞれ関連付けられて記憶されているものとする。
また、ロールバックフラグはONに設定されているものとする。
第3のイベント送受信処理のトリガは、第1のイベント送受信処理のトリガと同様である。
ステップS161〜166は、第2のイベント送受信処理のステップS141〜146と同様である。
ステップS166の実行後、変数管理部22aにより、共有変数群13bに共有変数A,B,Cが書き込まれる。このとき、共有変数Bのアクセスが失敗(書き込みが失敗)される(ステップS167)。また、この場合、変数管理部22aにより、共有変数Cのアクセス(書き込み)は行われず、かつ、更新イベントの通知も行われない。
ステップS167の実行後、変数管理部22aにより、共有変数A,B,CのデータがRAM13上の共有変数群13bに書き戻される(ステップS168)。
ステップS168の実行後、データアクセスモジュール23aにより、排他制御管理部22cに共有変数A,B,Cの排他制御終了の通知がされる(ステップS169)。そして、データアクセスモジュール23aにより、センサ処理モジュール19にデータ書き込み失敗の通知がされる(ステップS170)。そして、センサ処理モジュール19の処理が再開される(ステップS171)。ステップS171の実行後、第3のイベント送受信処理は終了される。
以上、本実施の形態によれば、共有変数が更新された時に、共有変数を参照している全ユーザモジュールへ更新イベントを通知する。このため、ユーザモジュールによる定期的な更新確認が必要なくなるため、共有変数管理モジュール22に共有変数へのアクセスが集中し、ボトルネックになる可能性を低減することができる。また、共有変数の更新から、その共有変数のデータ(更新データ)を別のユーザモジュールに伝達するまでのタイムラグを少なくすることができる。
また、ある共有変数が更新されたら、別のユーザモジュールでその更新された共有変数に連動する別のデータを再計算するといった、ユーザモジュール間の連係が容易になる。また、定期的な共有変数の更新の確認を各ユーザモジュールで行う必要がなくなり、各ユーザモジュールの処理が簡素化され、各ユーザモジュールの処理のパフォーマンスを向上させることができる。
また、複数の共有変数の更新を行う際に、1つでも更新が失敗すると、そのリクエスト全体が無効になり更新前の共有変数に戻す。このため、計測値とステータスのように、複数の共有変数がセットで意味をなす場合において、複数の共有変数の一部のみが更新されるようなケースがなくなり、共有変数の同時性が保証される。また、ユーザモジュールでエラーチェックや共有変数の書き戻しの処理を行う必要がなくなる。
(第2の実施の形態の変形例)
図16を参照して、本発明の第2の実施の形態の変形例を説明する。図16に本変形例のフィールドデバイス2aの構成を示す。以下、図7に示すフィールドデバイス2と同様の部分には、同一の符号を付し、その詳細な説明を援用し、異なる部分を主として説明する。
データアクセスモジュール23a〜23cは、最初の共有変数の読み出しの際に取得された共有変数Aを共有変数キャッシュ241〜243にコピーする。そして、データアクセスモジュール23a〜23cは、次回以降の共有変数Aの読み出しの際、共有変数キャッシュ241〜243にコピーされた共有変数Aを読み出す。
次に、図17〜図19を参照して、フィールドデバイス2aの動作を説明する。先ず、図17を参照して、読み出し処理を説明する。読み出し処理は、共有変数Aを共有変数群13bから読み出し、読み出した共有変数Aを共有変数キャッシュ241にコピーする処理である。
予め、共有変数AはRAM13上の共有変数群13bに保持(格納)されているものとする。また、共有変数Aはセンサ処理モジュール19からの読み書きが許可されているものとする。
読み出し処理のトリガは、第1のイベント送受信処理のトリガと同様である。
先ず、センサ処理モジュール19により、センサ15から計測値が取得され、取得された計測値から共有変数Aが算出される(ステップS201)。そして、センサ処理モジュール19により、共有変数Aの取得(読み出し)リクエストがデータアクセスモジュール23aに通知(出力)される。ここで、センサ処理モジュール19の処理は結果が返ってくるまで停止される(ステップS202)。
ステップS202の実行後、共有変数Aにアクセスするため、データアクセスモジュール23aにより排他制御管理部22cに排他制御依頼が出される。そして、排他制御管理部22cにより、共有変数Aが他のユーザモジュールからアクセスできないようにされる(ステップS203)。
そして、データアクセスモジュール23aにより、アクセス制御部22bに、アクセスする共有データ(共有変数A)の情報とアクセス方法(読み出し)が渡される。そして、アクセス制御部22bにより、アクセスルール221が参照され、アクセス権のチェックが行われる(ステップS204)。この例では、アクセス制御部22bからアクセスが可能である旨(アクセスOK)がデータアクセスモジュール23aに返される。
ステップS204の実行後、データアクセスモジュール23aにより、共有変数A及び共有変数Aの変数識別子が変数管理部22aに通知される(ステップS205)。
ステップS205の実行後、変数管理部22aにより、変数識別子及び保存先リスト222が参照され、共有変数Aの保存先がRAM13上の共有変数群13bであることが判断され、共有変数群13bから共有変数Aが読み出される(ステップS206)。
ステップS206の実行後、データアクセスモジュール23aにより、排他制御管理部22cに共有変数Aの排他制御終了が通知される(ステップS207)。そして、変数管理部22aにより読み出された共有変数Aがデータアクセスモジュール23aに通知される。そして、データアクセスモジュール23aにより、ステップS205の返答として共有変数Aを取得され、取得された共有変数Aが共有変数キャッシュ241にコピーされる(ステップS208)。そして、センサ処理モジュール19により、停止された処理が再開される(ステップS209)。ステップS209の実行後、読み出し処理は終了される。
次に、図18及び図19を参照して、第4の更新イベント送受信処理について説明する。第4のイベント送受信処理は、センサ処理モジュール19による共有変数Aの更新を、ロールバックフラグをOFFに設定して変数管理部22aにリクエストし、変数管理部22aによる共有変数Aの更新が成功した場合に、通信モジュール20に更新イベントを通知し、通知された更新イベントに基づいて、更新された共有変数Aを共有変数キャッシュ242に書き込む処理である。
第4のイベント送受信処理における前提条件及び処理のトリガについては、第1のイベント送受信処理と同様である。
第4のイベント送受信処理において、ステップS221〜ステップS230は、第1のイベント送受信処理のステップS121〜ステップS130と同様である。
ステップS230の実行後、データアクセスモジュール23bにより、取得された更新データ(更新された共有変数A)が共有変数キャッシュ242に書き込まれる(ステップS231)。
ステップ232及びステップS233は、第1のイベント送受信処理のステップS131及びステップS132と同様である。
ステップS233の実行後、データアクセスモジュール23aにより、共有変数Aの内容が自身の共有変数キャッシュ241に書き込まれる(ステップS234)。そして、センサ処理モジュール19により、停止された処理が再開される(ステップS235)。ステップS235の実行後、第4のイベント送受信処理は終了される。
上述の読み出し処理又は第4のイベント処理の実行後、共有変数Aを再度読み出す場合(2回目以降の読み出しをする場合)は、データアクセスモジュール23a〜23cにより、共有変数キャッシュ241〜243に記憶されている共有変数Aが読み出される(アクセスされる)。
以上、本変形例によれば、データアクセスモジュール23a〜23cは、再度(2回目以降)共有変数Aを読み出す際、共有変数キャッシュにコピーされた共有変数Aへアクセスする。このため、データアクセスモジュール23a〜23cは、共有変数管理モジュール22にアクセスする必要がないため、データアクセスモジュール23a〜23cの処理が簡素化され、データアクセスモジュール23a〜23cの処理のパフォーマンスを向上させることができる。
なお、上記各実施の形態及び変形例における記述は、本発明に係るフィールドデバイスの一例であり、これに限定されるものではない。
例えば、第2の実施の形態及び第2の実施の形態の変形例において、共有変数群13bに格納されている共有変数が更新されるものとして説明したがこれに限定されるものではない。例えば、キャッシュ13cに格納されているキャッシュデータや共有保存データ14aが更新された場合において、同様の処理が行われるものとしてもよい。
その他、本実施の形態における、フィールドデバイス1,1a,2,2aの細部構造及び詳細動作に関しても、本発明の趣旨を逸脱しない範囲で適宜変更可能である。
1,1a,2,2a フィールドデバイス
11 CPU
12 ROM
13 RAM
13a ローカル変数群
13b 共有変数群
13c キャッシュ
14 不揮発性メモリ
14a 共有保存データ
15 センサ
16 通信コントローラ
17 表示器
18 接続インターフェース
19 センサ処理モジュール
20 通信モジュール
21 表示処理モジュール
22 共有変数管理モジュール
22a 変数管理部
22b アクセス制御部
22c 排他制御管理部
23 データアクセス共通インターフェース
23a〜23c データアクセスモジュール
30 センサボード
31 通信ボード
32A,32Bボード間通信モジュール
221a 参照モジュールリスト
231〜233 参照変数リスト
241〜243 共有変数キャッシュ

Claims (7)

  1. ユーザモジュール間で共有される共有データを記憶する記憶部と、
    前記共有データへアクセスするためのトリガ情報を取得し、当該取得されたトリガ情報に基づいて、前記共有データのアクセス内容及び前記共有データのアクセス依頼を含むアクセス情報を出力するインターフェース部と、
    前記インターフェース部により出力されたアクセス情報に基づいて、前記記憶部に記憶された前記共有データへアクセスする制御部と、
    を備えることを特徴とするフィールドデバイス。
  2. 情報の通信を行う通信部を備え、
    前記インターフェース部は、
    前記通信部を介して前記トリガ情報を外部から取得、又は前記ユーザモジュールによる自発的なトリガ情報の出力により前記ユーザモジュールから前記トリガ情報を取得することを特徴とする請求項1に記載のフィールドデバイス。
  3. 前記インターフェース部は、
    前記トリガ情報に基づき前記共有データの排他制御依頼を出力し、
    前記制御部は、
    前記排他制御依頼に基づいて、前記共有データの排他制御を行う排他制御管理部と、
    前記アクセス内容に基づいて、前記共有データへのアクセス権が記されているアクセスルールを参照し、前記共有データへのアクセスが可能か否かを判別するアクセス制御部と、
    前記アクセス依頼に基づいて、前記共有データが記憶されている前記記憶部の記憶領域が記された保存先リストを参照し、当該保存先リストに記された記憶領域に記憶されている前記共有データへアクセスする共有データ管理部と、を備えることを特徴とする請求項1又は2に記載のフィールドデバイス。
  4. 前記アクセスルール及び前記保存先リストは、
    開発者により設定された共有データ名、アクセス方法を示した情報、及び揮発性情報に基づいて自動的に生成されることを特徴とする請求項3に記載のフィールドデバイス。
  5. 前記制御部は、
    前記共有データの識別子と前記共有データを参照するユーザモジュールの識別子とが対応付けられたモジュールリストに基づいて、前記共有データが更新された際、更新された共有データと対応付けられたユーザモジュールを特定し、当該特定されたユーザモジュールに対し、前記共有データが更新されたことを示す更新イベントを前記インターフェース部を介して通知することを特徴とする請求項1から4のいずれか一項に記載のフィールドデバイス。
  6. 前記制御部は、
    前記共有データが複数同時に更新される際、更新される全ての共有データが正しく更新されるか否かを確認し、複数の共有データのうち少なくとも1つの共有データの更新に失敗したことを確認した場合は、前記記憶部に記憶されている共有データを更新前の共有データに戻すことを特徴とする請求項5に記載のフィールドデバイス。
  7. 前記インターフェース部は、
    前記共有データのアクセスの際に取得された共有データを共有変数キャッシュにコピーし、次回以降に前記共有データへアクセスする際は、前記共有変数キャッシュにコピーされた共有データにアクセスすることを特徴とする請求項5又は6に記載のフィールドデバイス。
JP2009058883A 2008-10-07 2009-03-12 フィールドデバイス Pending JP2010113700A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009058883A JP2010113700A (ja) 2008-10-07 2009-03-12 フィールドデバイス
US12/573,403 US20100088471A1 (en) 2008-10-07 2009-10-05 Field device

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2008260636 2008-10-07
JP2009058883A JP2010113700A (ja) 2008-10-07 2009-03-12 フィールドデバイス

Publications (1)

Publication Number Publication Date
JP2010113700A true JP2010113700A (ja) 2010-05-20

Family

ID=42076710

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009058883A Pending JP2010113700A (ja) 2008-10-07 2009-03-12 フィールドデバイス

Country Status (2)

Country Link
US (1) US20100088471A1 (ja)
JP (1) JP2010113700A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018010575A (ja) * 2016-07-15 2018-01-18 横河電機株式会社 フィールド機器、フィールドシステム、汎用モジュールおよびパラメータ管理方法
JP7497395B2 (ja) 2021-09-29 2024-06-10 シーメンス アクチエンゲゼルシヤフト 産業用オートメーション装置用の更新されたアプリケーションをコミッショニングする方法および装置

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104956274B (zh) * 2013-01-30 2016-11-09 三菱电机株式会社 数控装置
US10120350B2 (en) * 2013-03-11 2018-11-06 Fisher-Rosemount Systems, Inc. Background collection of diagnostic data from field instrumentation devices
EP3056953A1 (de) * 2015-02-11 2016-08-17 Siemens Aktiengesellschaft Autarkes Feldgerät der Automatisierungstechnik zur Fernüberwachung

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018010575A (ja) * 2016-07-15 2018-01-18 横河電機株式会社 フィールド機器、フィールドシステム、汎用モジュールおよびパラメータ管理方法
JP7497395B2 (ja) 2021-09-29 2024-06-10 シーメンス アクチエンゲゼルシヤフト 産業用オートメーション装置用の更新されたアプリケーションをコミッショニングする方法および装置

Also Published As

Publication number Publication date
US20100088471A1 (en) 2010-04-08

Similar Documents

Publication Publication Date Title
KR100641988B1 (ko) 비대칭형 단일 칩 이종 멀티프로세서 컴퓨터 시스템, 공유 메모리의 직접 메모리 액세스를 아토믹 업데이트하는 방법, 및 아토믹 업데이트 장치
US6912621B2 (en) Method and apparatus for updating data in mass storage subsystem using emulated shared memory
CN103294616B (zh) 信息处理设备和控制方法
JP4277873B2 (ja) トランザクション処理装置、トランザクション処理方法
JP2010113700A (ja) フィールドデバイス
TWI625672B (zh) 可更新積體電路無線電
WO2019245884A1 (en) Memory-efficient upgrade staging
WO2019061352A1 (zh) 数据加载方法及装置
JP2010102479A (ja) 計算機システム、ストレージ装置及びデータ更新方法
US9811404B2 (en) Information processing system and method
TW484069B (en) Method and apparatus for tolerating unrecoverable errors in a multi-processor data processing system
US11210173B2 (en) Fault tolerant device upgrade
JP3765201B2 (ja) 計算機システム
JP4920567B2 (ja) 設備機器ネットワークシステムおよびデータアクセス制御方法
JP5170169B2 (ja) ディスクアレイ装置間のリモートコピー処理システム、処理方法、及び処理用プログラム
JP4476108B2 (ja) ストレージシステム、コンピュータシステム及びストレージの情報取得方法
JP3129224B2 (ja) キャッシュメモリ装置
JP5929420B2 (ja) 演算処理装置、演算処理装置の制御方法及び情報処理装置
EP2979192B1 (en) Implementing coherency with reflective memory
JP6726136B2 (ja) データアクセス装置及びアクセスエラーの通知方法
JP2005032171A (ja) データ共有のための機能モジュール間通信制御システム,機能モジュール間通信制御方法,機能モジュール間通信制御プログラムおよびその記録媒体
JP5951123B2 (ja) 制御装置
KR102476438B1 (ko) 데이터 액세스의 원자 세트를 제공하는 장치 및 방법
JP2009157880A (ja) サーバ装置及びファイルシステム
JP2009098808A (ja) データ更新履歴格納装置及びデータ更新履歴格納方法