Changes between Version 5 and Version 6 of epics/streamdevice/tips_and_tricks


Ignore:
Timestamp:
09/04/14 14:01:43 (11 years ago)
Author:
Tetsuya Michikawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/streamdevice/tips_and_tricks

    v5 v6  
    240240 }}}
    241241
     242=== メッセージと値を分離して取得 ===
     243
     244 1つのメッセージを文字列と数値に分離して所得。
     245
     246 * db file
     247 {{{
     248record (ai, "$(DEVICE):A") {
     249  field (DTYP, "stream")
     250  field (INP, "@$(DEVICETYPE).proto read_A $(BUS)")
     251  field (SCAN, "1 second")
     252}
     253record (ai, "$(DEVICE):B") {
     254  field (DTYP, "stream")
     255  field (INP, "@$(DEVICETYPE).proto read_B $(BUS)")
     256  field (SCAN, "I/O Intr")
     257}
     258 }}}
     259
     260 * protocol file
     261 {{{
     262read_A {
     263    out "GET A,B";
     264    in "A=%f, B=%*f";
     265}
     266read_B {
     267    in "A=%*f, B=%f";
     268}
     269 }}}
     270
     271 まず、{{{レコード $(DEVICE):A}}}がデータを受信し、'''{{{read_A}}}の{{{A=%f}}}'''の部分のみをフィルタリングして処理する。 '''{{{B=%*f}}}の{{{*}}}'''はデータを無視するためのフラグでこのレコードでは{{{B}}}をレコード値としては扱わないが、構文チェックは普通に行われるので、適当な文字列を設定するとエラーになるので注意。[[br]]
     272 次に、{{{レコード $(DEVICE):B}}}が{{{I/O Intr}}}でイベントを取得し、{{{B=%f}}}の部分を処理する。[[br]]
     273 この処理で重要なのは、'''{{{レコード $(DEVICE):B}}}の{{{SCANがI/O Intr}}}'''であることと、'''{{{read_B}}}が{{{read_A}}}の{{{in}}}と同じフォーマットで{{{*}}}でフィルタリング'''を行っていること。
     274