| 1 | [[PageOutline]] |
| 2 | |
| 3 | = EPICS record monitor = |
| 4 | |
| 5 | EPICS 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 | |
| 26 | from epicsRecordMonitorItem import * |
| 27 | |
| 28 | # |
| 29 | # |
| 30 | # |
| 31 | class 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 | |