Worked example · fictional commissioning table
A messy table becomes a user map
The first table has the information needed to finish. The result keeps the readable points, preserves the manual addresses, and records the write-only point as an exclusion.
Resolved source
| Address | Name | Data Type | Byte Order | Access |
|---|---|---|---|---|
| 40001 | Tank Level | UINT16 | read-only | |
| 40003 | Flow Rate | FLOAT32 | CDAB | read-only |
| 30001 | Energy Total | UINT32 | ABCD | read-only |
| 40010 | Level Setpoint | UINT16 | write-only |
Finished user map
| Point | Name | Manual address | Area | Offset | Type |
|---|---|---|---|---|---|
| tank_level | Tank Level | 40001 | holding-register | 0 | uint16 |
| flow_rate | Flow Rate | 40003 | holding-register | 2 | float32 |
| energy_total | Energy Total | 30001 | input-register | 0 | uint32 |
Readable summary
# User map ## Included ### all documented Modbus read points - `tank_level` — Tank Level (holding-register offset 0) - `flow_rate` — Flow Rate (holding-register offset 2) - `energy_total` — Energy Total (input-register offset 0) ## Suggestions - None ## Blocking exceptions - None ## Exclusions and evidence annex - point.write-only-not-readable: The source declares a write-only point. It cannot enter a read plan. - level_setpoint: Excluded because the OEM map marks this point write-only.
What stayed explicit
- Level Setpoint is write-only, so it is recorded as an exclusion on the read plan.
- 40001 becomes holding-register offset 0. 40003 becomes holding-register offset 2. 30001 becomes input-register offset 0.
- Flow Rate uses CDAB. Energy Total uses ABCD. No blocking exception remains in this completed result.
What a pause looks like
This separate source leaves byte order blank for the two multi-register values. The skill does not choose a layout. It holds those rows and asks you to confirm the documented or tested order.
Needs a decision Flow Rate and Energy Total have no byte order.
| Address | Name | Data Type | Byte Order | Access |
|---|---|---|---|---|
| 40001 | Tank Level | UINT16 | read-only | |
| 40003 | Flow Rate | FLOAT32 | read-only | |
| 30001 | Energy Total | UINT32 | read-only | |
| 40010 | Level Setpoint | UINT16 | write-only |
The source files are in the repository under docs/examples/compile-user-map.