3 releases (breaking)
0.3.0 | Jun 26, 2024 |
---|---|
0.2.0 | Mar 5, 2024 |
0.1.3 | Feb 29, 2024 |
#966 in Hardware support
355 downloads per month
24KB
388 lines
modbus-mapping
An API for Modbus Register Mapppings based on tokio-modbus
Usage
Check examples folder for usage.
The device and client examples pair is to be run at the same time in two different terminals. The RTU examples assume that virtual serial port has been created beforehand
socat -d -d pty,raw,echo=0,link=/tmp/ttys001 pty,raw,echo=0,link=/tmp/ttys002
Development
Check justfile
.
lib.rs
:
A high-level API for Modbus Register Maps based on tokio-modbus.
Traits
The library defines
core::InputRegisterMap
andcore::HoldingRegisterMap
traits to read from (and write to) the Modbus registers in batch, andsimulator::InputRegisterModel
andsimulator::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,u16
integer,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 is123
which 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.
Dependencies
~3–12MB
~139K SLoC