| 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 | | |