| 242 | === メッセージと値を分離して取得 === |
| 243 | |
| 244 | 1つのメッセージを文字列と数値に分離して所得。 |
| 245 | |
| 246 | * db file |
| 247 | {{{ |
| 248 | record (ai, "$(DEVICE):A") { |
| 249 | field (DTYP, "stream") |
| 250 | field (INP, "@$(DEVICETYPE).proto read_A $(BUS)") |
| 251 | field (SCAN, "1 second") |
| 252 | } |
| 253 | record (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 | {{{ |
| 262 | read_A { |
| 263 | out "GET A,B"; |
| 264 | in "A=%f, B=%*f"; |
| 265 | } |
| 266 | read_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 | |