Skip to content

Modbus adapter

The Modbus adapter reads holding registers over Modbus TCP and publishes each configured tag onto the Unified Namespace.

Modbus write function codes (5, 6, 15, 16, 22, 23) are rejected in the adapter’s code before a write is ever attempted — this adapter only ever issues read requests, regardless of what a caller asks it to do. See Security model for how this fits the broader isolation design.

A device entry names a connection (host, port, unit id) and a list of tags, each mapping a register address and decode format to a signal path:

devices:
- id: cnc-1-modbus
protocol: modbus
poll_ms: 200
conn: {kind: tcp, host: <plc-host>, port: 502, unit: 1}
tags:
- {address: "hr1:f32:be", signal_path: "press-shop/line-1/cnc-cell-1/cnc-1/cnc-1-spindle-load"}

The address format names the register type (hr = holding register), the decode type (f32 = 32-bit float spanning two registers), and byte order (be/le) — match this to your PLC’s register map and documented word order. signal_path must match a signal id already present in the site’s registry (see Sensors & recipes).

The demo plant’s rw-sim runs a Modbus server with a documented register map, and deploy/demo/edge.yaml is a complete, working example device entry for it — see Quick start to bring the whole chain up and watch samples land in the historian.