Changes between Version 2 and Version 3 of epics/streamdevice/tips_and_tricks


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

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/streamdevice/tips_and_tricks

    v2 v3  
    5858
    5959 この例では、引数 '''{{{0x84}}}''' が '''{{{$1}}}''' に設定されるので、
    60 
    6160 {{{
    6261readpressure {
     
    118117 }}}
    119118
    120 == 一つのメッセージで複数のデータを扱う必要がある ==
     119== 一つのメッセージで複数のデータを出力する必要がある ==
    121120
    122121 この問題には色々なアプローチで、複数の解決策がある。
     
    147146 }}}
    148147
    149 
    150 
     148=== 最大12個のデータを出力 ===
     149
     150 calcout のINPA,INPB,...に直接設定。[[br]]
     151 CALC fieldには計算をしなくても何かしらの設定は必須。
     152
     153 * db file
     154 {{{
     155record (calcout, "$(RECORD):ex06") {
     156  field (INPA, "$(A_RECORD)")
     157  field (INPB, "$(B_RECORD)")
     158  field (INPC, "$(C_RECORD)")
     159  field (CALC, "0")
     160  field (DTYP, "stream")
     161  field (OUT, "@$(DEVICETYPE).proto write_ABC $(BUS)")
     162}
     163 }}}
     164
     165 * protocol file
     166 {{{
     167write_ABC {
     168    out "A=%(A).2f B=%(B).6f C=%(C).0f";
     169}
     170 }}}
     171
     172=== 同じIOCの違うレコードの値を出力 ===
     173
     174 プロトコルファイルの引数'''{{{$1}}}'''には文字列が設定されるので、レコード名(その一部)も設定可能
     175
     176 * db file
     177 {{{
     178record (stringout, "$(DEVICE):getimage") {
     179  field (DTYP, "stream")
     180  field (OUT, "@$(DEVICETYPE).proto acquire($(DEVICE)) $(BUS)")
     181}
     182 }}}
     183
     184 * protocol file
     185 {{{
     186acquire {
     187    out 'ACQUIRE "%(\$1:directory)s/%s",%(\$1:time).3f;';
     188}
     189 }}}
     190
     191 この例では、$(DEVICE)が引数として設定されているが、$(DEVICE)が"TEST"とすると、プロトコルファイル内では次のように展開される。
     192 {{{
     193acquire {
     194    out 'ACQUIRE "%(TEST:directory)s/%s",%(TEST:time).3f;';
     195}
     196 }}}
     197
     198 
     199 '''{{{%()}}}'''にはそのレコードのVALが展開され、出力文字列が生成される。'''{{{TEST:directory}}}'''が"'''{{{./TEST}}}'''"、'''{{{TEST:time}}}'''が'''{{{123.456}}}'''とすると
     200 {{{
     201acquire {
     202    out 'ACQUIRE "./TEST/%s",123.456;';
     203}
     204 }}}
     205
     206 ということになる。
     207
     208