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


Ignore:
Timestamp:
09/10/18 13:55:13 (6 years ago)
Author:
michkawa
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