Changes between Initial Version and Version 1 of misc/botlog_pas/epicsrecordmonitor


Ignore:
Timestamp:
09/10/18 13:55:13 (7 years ago)
Author:
Tetsuya Michikawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • misc/botlog_pas/epicsrecordmonitor

    v1 v1  
     1[[PageOutline]]
     2
     3= EPICS record monitor =
     4
     5EPICS record monitor は、botlog用Web APIを使用した外部プログラムで、登録されているEPICSレコードに変化があった場合、botlogに自動的にメッセージを登録する。[[br]]
     6監視するレコードとメッセージの関連付けは、pythonで記述し、1メッセージにつき、1ファイルを作成する必要がある。[[br]]
     7
     8プログラム本体は、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor}}}の{{{epicsRecordMonitor.py}}}で、各設定は{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modules}}}に設定する。
     9
     10== 設定ファイル ==
     11
     12設定ファイルは、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.py}}}をひな型にして作成し、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modules}}}に保存すれば、{{{epicsRecordMonitor.py}}}を起動した際に読み込まれ、実行される。
     13
     14{{{
     15# -*- coding: utf-8 -*-
     16#
     17
     18"""
     19このプログラムを EPICS Record Monitor 定義のひな型として使用すること
     20
     21各設定に使用する場合に変更する箇所は、pvs変数とexecFunc関数
     22クラス名は変更しないこと
     23
     24"""
     25
     26from epicsRecordMonitorItem import *
     27
     28#
     29#
     30#
     31class ermi(epicsRecordMonitorItemIF):
     32    #
     33    # クラスコンストラクタ
     34    # ここで使用するレコード名を設定
     35    #
     36    def __init__(self):
     37        pvs = ['jane', 'fred']    # ここに使用するレコード名をリスト形式で設定
     38        self.setPvs(pvs)
     39
     40    #
     41    # メッセージ出力条件を記述
     42    # 関数の引き数 pvs に関数実行時のデータが渡される
     43    # データの形式は辞書型を含んだリストで、構造は以下のようになっている
     44    #
     45    # [
     46    #   {
     47    #     'name'   : record name,
     48    #     'prevVal': previos value,
     49    #     'val'    : current value,
     50    #     'time'   : record process time
     51    #   },
     52    #     :
     53    # ]
     54    #
     55    # リストの順番はコンストラクタで設定した順番
     56    #
     57    # 戻り値はメッセージのみを返すようにして、メッセージがない場合には None を返すこと
     58    #
     59    def execFunc(self, pvs):
     60        janePv = pvs[0]
     61        fredPv = pvs[1]
     62
     63        rtn = None
     64        if janePv['val'] < fredPv['val'] and fredPv['prevVal'] != fredPv['val']:
     65            rtn = "fred is over jane!!!"
     66
     67        return rtn
     68
     69}}}
     70
     71設定ファイルのチェック機能はまだ作成していないので、動作チェックは実際に動かしてみるしか方法が無い。[[br]]
     72
     73== 動作確認 ==
     74
     75動作テストは、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.py}}}を{{{Modules}}}にコピーして、プログラムを実行することで行う。
     76
     77{{{
     78[user@localhost ~]$ source /opt/OperationLog/etc/env.sh
     79[user@localhost ~]$ cd /opt/OperationLog/botlog/tools/epicsRecordMonitor
     80[user@localhost epicsRecordMonitor]$ cp test_ermi.py Modules
     81[user@localhost epicsRecordMonitor]$ python2.7 epicsRecordMonitor.py
     82}}}
     83
     84プログラムを実行すると、botlogに{{{Initial Disconnect Pvs:jane, fred}}}というメッセージが表示される。[[br]]
     85一旦プログラムを終了し、{{{excas}}}を別画面で起動する。[[br]]
     86再度プログラムを起動し、{{{test_ermi.py}}}に設定してある条件が満たされると、{{{fred is over jane!!!}}}というメッセージが追加される。[[br]]
     87
     88後は、{{{Modules/test_ermi.py}}}を削除してから、設定ファイルを作成後にプログラムを実行すれば、メッセージが自動的にbotlogに追加される。[[br]]
     89このプログラム用の起動スクリプトは作成していないので、ユーザーが作成すること。
     90
     91