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


Ignore:
Timestamp:
09/04/14 14:01:43 (5 years ago)
Author:
michkawa
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