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


Ignore:
Timestamp:
09/10/18 13:54:38 (7 years ago)
Author:
Tetsuya Michikawa
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