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