Version 4 (modified by michkawa, 4 weeks ago) (diff) |
---|
channel filter
EPICS 3.15.1以降に正式実装された機能で、JSON フィールド修飾子を使用してフィルターとパラメーターを選択して、各レコードに分割することができる機能です。
中でも特に有用だと思われるのがArray filterです。
今までwaveformやaaiのようなレコードから一部のデータを切り出して別レコード化するには、SNCsequencerやasubレコード等で分割するのが常でしたが、array filterを使うことで同様の処理が簡単にできるようになり、処理内容も見やすくなります。
使い方は、Channel Filtersの例題を見ればすぐにわかると思いますので、活用してみてください。
(注意) 但し、recordのINP fieldでDB Linkされるのは、EPICS base R7.0.5以降です。それ以前のEPICS baseでは caget では機能しますが、INP fieldでは "CP"を付けないと正常に動作しません。
EPICS Base の違いによる動作
テスト用database fileをsoftIOCで実行。
record(waveform, "TEST:wf") { field(FTVL, "DOUBLE") field(NELM, "10") field(FLNK, "TEST:d1") } record(ai, "TEST:d1") { field(INP, "TEST:wf.[0:0]") field(FLNK, "TEST:d2") } record(ai, "TEST:d2") { field(INP, "TEST:wf.[5:5]") field(FLNK, "TEST:d3") } record(aai, "TEST:d3") { field(INP, "TEST:wf.[1:4]") field(FTVL, "DOUBLE") field(NELM, "4") field(FLNK, "TEST:d4") } record(aai, "TEST:d4") { field(INP, "TEST:wf.[1:2:10]") field(FTVL, "DOUBLE") field(NELM, "4") }
EPICS Base R7.0.5以降
R7.0.7でテスト
$ caput -a TEST:wf 10 1 2 3 4 5 6 7 8 9 10 Old : TEST:wf 10 0 0 0 0 0 0 0 0 0 0 New : TEST:wf 10 1 2 3 4 5 6 7 8 9 10 $ caget TEST:d1 TEST:d1 1 $ caget TEST:d2 TEST:d2 6 $ caget TEST:d3 TEST:d3 4 2 3 4 5 $ caget TEST:d4 TEST:d4 4 2 4 6 8
EPICS Base R7.0.5より前
R7.0.3でテスト
$ caput -a TEST:wf 10 1 2 3 4 5 6 7 8 9 10 Old : TEST:wf 10 2.50321e-308 0 0 0 0 0 0 0 0 0 New : TEST:wf 10 1 2 3 4 5 6 7 8 9 10 $ caget TEST:d1 TEST:d1 1 $ caget TEST:d2 TEST:d2 1 $ caget TEST:d3 TEST:d3 4 1 2 3 4 $ caget TEST:d4 TEST:d4 4 1 2 3 4