Changes between Initial Version and Version 1 of epics/streamdevice/mes2manyrec


Ignore:
Timestamp:
02/18/13 22:59:13 (11 years ago)
Author:
obina
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/streamdevice/mes2manyrec

    v1 v1  
     1= 1つのメッセージから複数のレコードへ値を設定 = 
     2 
     3参考:[http://epics.web.psi.ch/software/streamdevice/doc/tipsandtricks.html#readmany PSIのDocument:Tips] 
     4 
     5目的:相手の機器から1行のメッセージが返ってきたとき、それを複数のレコードに入れたい 
     6 
     7== case1 : コマンドを送ると、あるフォーマットにのって複数の値が返ってくる場合 == 
     8例1 
     9{{{ 
     10VAL? 
     11A=262.1934, B=524.3868, C= 35.6740 
     12VAL? 
     13A=-71.1803, B=-142.3606, C= 45.5960 
     14VAL? 
     15A=-96.4911, B=-192.9821, C= 56.6379 
     16..... 
     17}}} 
     18これらの3つの値を, A, B, C 3つの別レコードに入れたい 
     19 
     20 
     21=== 解決方法1 === 
     22 * コマンドを送るレコードを1つ作成。 
     23 * 変換する値(この例では A )を %f で受ける。 
     24 * 残りのB,Cは value skipping (%*) フォーマットを使うことで無視する。 
     25 * 残り2つのレコードはI/O Intrで動かす。これによって、recvB, recvCへの入力はrecvAへの入力と同じ文字列となる 
     26 * B,Cについても、不要な部分を value skipping で無視する。 
     27 
     28protocol file (sample1.proto) 
     29{{{ 
     30Terminator = CR LF; 
     31 
     32recvA { 
     33  out "VAL?"; 
     34  in "A=%f, B=%*f, C=%*f"; 
     35} 
     36recvB { 
     37  in "A=%*f, B=%f, C=%*f"; 
     38} 
     39recvC { 
     40  in "A=%*f, B=%*f, C=%f"; 
     41} 
     42}}} 
     43 
     44DB file (sample1.db) 
     45{{{ 
     46record(ai, "obina:valA") 
     47{ 
     48    field(DTYP, "stream") 
     49    field(SCAN, "1 second") 
     50    field(INP,  "@sample1.proto recvA PS1") 
     51} 
     52record(ai, "obina:valB") 
     53{ 
     54    field(DTYP, "stream") 
     55    field(SCAN, "I/O Intr") 
     56    field(INP,  "@sample1.proto recvB PS1") 
     57} 
     58record(ai, "obina:valC") 
     59{ 
     60    field(DTYP, "stream") 
     61    field(SCAN, "I/O Intr") 
     62    field(INP,  "@sample1.proto recvC PS1") 
     63} 
     64}}} 
     65 
     66startup script 
     67{{{ 
     68..... 
     69dbLoadRecords("db/sample1.db") 
     70epicsEnvSet("STREAM_PROTOCOL_PATH", ".:../../streamexApp/Db") 
     71drvAsynIPPortConfigure("PS1", "localhost:9999") 
     72... 
     73}}} 
     74