| | 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 | |