Modbus Skills

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

AddressNameData TypeByte OrderAccess
40001Tank LevelUINT16read-only
40003Flow RateFLOAT32CDABread-only
30001Energy TotalUINT32ABCDread-only
40010Level SetpointUINT16write-only

Finished user map

PointNameManual addressAreaOffsetType
tank_levelTank Level40001holding-register0uint16
flow_rateFlow Rate40003holding-register2float32
energy_totalEnergy Total30001input-register0uint32

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

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.

AddressNameData TypeByte OrderAccess
40001Tank LevelUINT16read-only
40003Flow RateFLOAT32read-only
30001Energy TotalUINT32read-only
40010Level SetpointUINT16write-only

The source files are in the repository under docs/examples/compile-user-map.

When to use this · Compile a user map