Changes between Version 1 and Version 2 of misc/botlog_pas/modify


Ignore:
Timestamp:
09/10/18 13:54:38 (6 years ago)
Author:
michkawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • misc/botlog_pas/modify

    v1 v2  
    8484 
    8585 
    86 == EPICS record monitor == 
    87  
    88 EPICS record monitor は、botlog用Web APIを使用した外部プログラムで、登録されているEPICSレコードに変化があった場合、botlogに自動的にメッセージを登録する。[[br]] 
    89 監視するレコードとメッセージの関連付けは、pythonで記述し、1メッセージにつき、1ファイルを作成する必要がある。[[br]] 
    90  
    91 プログラム本体は、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor}}}の{{{epicsRecordMonitor.py}}}で、各設定は{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modules}}}に設定する。 
    92  
    93 === 設定ファイル === 
    94  
    95 設定ファイルは、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.py}}}をひな型にして作成し、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modules}}}に保存すれば、{{{epicsRecordMonitor.py}}}を起動した際に読み込まれ、実行される。 
    96  
    97 {{{ 
    98 # -*- coding: utf-8 -*- 
    99 # 
    100  
    101 """ 
    102 このプログラムを EPICS Record Monitor 定義のひな型として使用すること 
    103  
    104 各設定に使用する場合に変更する箇所は、pvs変数とexecFunc関数 
    105 クラス名は変更しないこと 
    106  
    107 """ 
    108  
    109 from epicsRecordMonitorItem import * 
    110  
    111 # 
    112 # 
    113 # 
    114 class ermi(epicsRecordMonitorItemIF): 
    115     # 
    116     # クラスコンストラクタ 
    117     # ここで使用するレコード名を設定 
    118     # 
    119     def __init__(self): 
    120         pvs = ['jane', 'fred']    # ここに使用するレコード名をリスト形式で設定 
    121         self.setPvs(pvs) 
    122  
    123     # 
    124     # メッセージ出力条件を記述 
    125     # 関数の引き数 pvs に関数実行時のデータが渡される 
    126     # データの形式は辞書型を含んだリストで、構造は以下のようになっている 
    127     # 
    128     # [ 
    129     #   { 
    130     #     'name'   : record name, 
    131     #     'prevVal': previos value, 
    132     #     'val'    : current value, 
    133     #     'time'   : record process time 
    134     #   }, 
    135     #     : 
    136     # ] 
    137     # 
    138     # リストの順番はコンストラクタで設定した順番 
    139     # 
    140     # 戻り値はメッセージのみを返すようにして、メッセージがない場合には None を返すこと 
    141     # 
    142     def execFunc(self, pvs): 
    143         janePv = pvs[0] 
    144         fredPv = pvs[1] 
    145  
    146         rtn = None 
    147         if janePv['val'] < fredPv['val'] and fredPv['prevVal'] != fredPv['val']: 
    148             rtn = "fred is over jane!!!" 
    149  
    150         return rtn 
    151  
    152 }}} 
    153  
    154 設定ファイルのチェック機能はまだ作成していないので、動作チェックは実際に動かしてみるしか方法が無い。[[br]] 
    155  
    156 === 動作確認 === 
    157  
    158 動作テストは、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.py}}}を{{{Modules}}}にコピーして、プログラムを実行することで行う。 
    159  
    160 {{{ 
    161 [user@localhost ~]$ source /opt/OperationLog/etc/env.sh 
    162 [user@localhost ~]$ cd /opt/OperationLog/botlog/tools/epicsRecordMonitor 
    163 [user@localhost epicsRecordMonitor]$ cp test_ermi.py Modules 
    164 [user@localhost epicsRecordMonitor]$ python2.7 epicsRecordMonitor.py 
    165 }}} 
    166  
    167 プログラムを実行すると、botlogに{{{Initial Disconnect Pvs:jane, fred}}}というメッセージが表示される。[[br]] 
    168 一旦プログラムを終了し、{{{excas}}}を別画面で起動する。[[br]] 
    169 再度プログラムを起動し、{{{test_ermi.py}}}に設定してある条件が満たされると、{{{fred is over jane!!!}}}というメッセージが追加される。[[br]] 
    170  
    171 後は、{{{Modules/test_ermi.py}}}を削除してから、設定ファイルを作成後にプログラムを実行すれば、メッセージが自動的にbotlogに追加される。[[br]] 
    172 このプログラム用の起動スクリプトは作成していないので、ユーザーが作成すること。 
    173  
    174