| 149 | | |
| 150 | | |
| | 148 | === 最大12個のデータを出力 === |
| | 149 | |
| | 150 | calcout のINPA,INPB,...に直接設定。[[br]] |
| | 151 | CALC fieldには計算をしなくても何かしらの設定は必須。 |
| | 152 | |
| | 153 | * db file |
| | 154 | {{{ |
| | 155 | record (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 | {{{ |
| | 167 | write_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 | {{{ |
| | 178 | record (stringout, "$(DEVICE):getimage") { |
| | 179 | field (DTYP, "stream") |
| | 180 | field (OUT, "@$(DEVICETYPE).proto acquire($(DEVICE)) $(BUS)") |
| | 181 | } |
| | 182 | }}} |
| | 183 | |
| | 184 | * protocol file |
| | 185 | {{{ |
| | 186 | acquire { |
| | 187 | out 'ACQUIRE "%(\$1:directory)s/%s",%(\$1:time).3f;'; |
| | 188 | } |
| | 189 | }}} |
| | 190 | |
| | 191 | この例では、$(DEVICE)が引数として設定されているが、$(DEVICE)が"TEST"とすると、プロトコルファイル内では次のように展開される。 |
| | 192 | {{{ |
| | 193 | acquire { |
| | 194 | out 'ACQUIRE "%(TEST:directory)s/%s",%(TEST:time).3f;'; |
| | 195 | } |
| | 196 | }}} |
| | 197 | |
| | 198 | |
| | 199 | '''{{{%()}}}'''にはそのレコードのVALが展開され、出力文字列が生成される。'''{{{TEST:directory}}}'''が"'''{{{./TEST}}}'''"、'''{{{TEST:time}}}'''が'''{{{123.456}}}'''とすると |
| | 200 | {{{ |
| | 201 | acquire { |
| | 202 | out 'ACQUIRE "./TEST/%s",123.456;'; |
| | 203 | } |
| | 204 | }}} |
| | 205 | |
| | 206 | ということになる。 |
| | 207 | |
| | 208 | |