Expand description
A high-level API for Modbus Register Maps based on tokio-modbus.
§Traits
The library defines
core::InputRegisterMapandcore::HoldingRegisterMaptraits to read from (and write to) the Modbus registers in batch, and- [
simulator::InputRegisterModel] and [simulator::HoldingRegisterModel] traits to simulate a Modbus device
§Derive macro
For convenience it provides derive macros to implement the traits automatically. The derive macros depends on modbus field attribute.
See examples/ for simple usage.
The modbus attributes can be added to struct fields to link them with modbus register mapping entries.
Then, the field modbus must contain the following key-values pairs:
addr- input or holding register start address,u16integer,ty- modbus data type, one of"i16","i32","i64","u16","u32","u64","f16","f32"or"raw(size)",ord- word order, either"be"for big-endian or"le"for little-endian,x- scale factor; multiply the stored value by it to get the actual valueunit- measurement unit of the actual value (i.e. actual value = stored value x scale factor)
The struct modbus attribute is optional and provides configuration for InputRegisterMap and HoldingRegisterMap traits when reading registers.
It can only contain these key-value pairs:
max_cnt_per_request- maximum number of registers to read in a single Modbus request; default value is123which is the maximumum allowed valueallow_register_gaps- an optimization flag to allow Modbus client to read longer register blocks which possibly contain unrequested (or undefined) registers in between the required ones. Iftrue, the client makes less requests but read more data. Otherwise, iffalse, the client makes more requests but read only the necessary data.
The modbus_doc attribute is to create documentation (by adding doc attribute) from modbus field attributes information.