wiki:misc/botlog_pas/epicsrecordmonitor

Version 2 (modified by michkawa, 6 years ago) (diff)

--

EPICS record monitor

EPICS record monitor は、botlog用Web APIを使用した外部プログラムで、登録されているEPICSレコードに変化があった場合、botlogに自動的にメッセージを登録する。
監視するレコードとメッセージの関連付けは、pythonで記述し、1メッセージにつき、1ファイルを作成する必要がある。

設定を間違えると、大量のメッセージが登録されることになるので、注意すること。

プログラム本体は、/opt/OperationLog/botlog/tools/epicsRecordMonitorepicsRecordMonitor.pyで、各設定は/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modulesに設定する。

設定ファイル

設定ファイルは、/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.pyをひな型にして作成し、/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modulesに保存すれば、epicsRecordMonitor.pyを起動した際に読み込まれ、実行される。

# -*- coding: utf-8 -*-
#

"""
このプログラムを EPICS Record Monitor 定義のひな型として使用すること

各設定に使用する場合に変更する箇所は、pvs変数とexecFunc関数
クラス名は変更しないこと

"""

from epicsRecordMonitorItem import *

#
#
#
class ermi(epicsRecordMonitorItemIF):
    #
    # クラスコンストラクタ
    # ここで使用するレコード名を設定
    #
    def __init__(self):
        pvs = ['jane', 'fred']    # ここに使用するレコード名をリスト形式で設定
        self.setPvs(pvs)

    #
    # メッセージ出力条件を記述
    # 関数の引き数 pvs に関数実行時のデータが渡される
    # データの形式は辞書型を含んだリストで、構造は以下のようになっている
    #
    # [
    #   {
    #     'name'   : record name,
    #     'prevVal': previos value,
    #     'val'    : current value,
    #     'time'   : record process time
    #   },
    #     :
    # ]
    #
    # リストの順番はコンストラクタで設定した順番
    #
    # 戻り値はメッセージのみを返すようにして、メッセージがない場合には None を返すこと
    #
    def execFunc(self, pvs):
        janePv = pvs[0]
        fredPv = pvs[1]

        rtn = None
        if janePv['val'] < fredPv['val'] and fredPv['prevVal'] != fredPv['val']:
            rtn = "fred is over jane!!!"

        return rtn

設定ファイルのチェック機能はまだ作成していないので、動作チェックは実際に動かしてみるしか方法が無い。

動作確認

動作テストは、/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.pyModulesにコピーして、プログラムを実行することで行う。

[user@localhost ~]$ source /opt/OperationLog/etc/env.sh
[user@localhost ~]$ cd /opt/OperationLog/botlog/tools/epicsRecordMonitor
[user@localhost epicsRecordMonitor]$ cp test_ermi.py Modules
[user@localhost epicsRecordMonitor]$ python2.7 epicsRecordMonitor.py

プログラムを実行すると、botlogにInitial Disconnect Pvs:jane, fredというメッセージが表示される。
一旦プログラムを終了し、excasを別画面で起動する。
再度プログラムを起動し、test_ermi.pyに設定してある条件が満たされると、fred is over jane!!!というメッセージが追加される。

後は、Modules/test_ermi.pyを削除してから、設定ファイルを作成後にプログラムを実行すれば、メッセージが自動的にbotlogに追加される。
このプログラム用の起動スクリプトは作成していないので、ユーザーが作成すること。