stepfunc / rodbus

Rust implementation of Modbus with idiomatic bindings for C, C++, .NET, and Java
https://stepfunc.io/products/libraries/modbus/
Other
83 stars 23 forks source link

feat: Implementation of Function Code FC23 (0x17) - Read/Write Multiple Registers #132

Open grewek opened 7 months ago

grewek commented 7 months ago

This pull request implements the MODBUS function code FC23 (Read/Write Multiple Registers) as specified in the MODBUS Application Protocol Specification V1.1b3 (Page 38, Section 6.17: "23 (0x17) Read/Write Multiple registers").

The Function Code 23 (Hex 0x17) performs a combination of one read operation and one write operation in a single MODBUS transaction. The write operation is performed before the read.

This implementation was done by Dominik Köhler in the name of Iniationware GmbH, initialized by Klaus Landsdorf - CEO of Iniationware GmbH.

Client and Server now have support for the aforementioned Read/Write Multiple Registers feature. The implemented functionality was tested with unit tests for parsing/serializing an FC23 request/response - and should work as expected. Let me know, if there are any issues when testing.

I've also compiled a basic feature documentation of the FC23 request, accessible under rodbus\WCFC_README.md, feel free to modify it in any way needed.

If you have any open questions, suggestions or notes about the FC23 feature implementation, do not hesitate to let me know. I am always happy to help where I can.

jadamcrain commented 7 months ago

@grewek So this PR is ready for review? I like the idea of getting this simpler feature merged before we tackle device identification stuff.

grewek commented 7 months ago

Yes, this PR should be in a reviewable state :) If you find any issues please let us know

Regarding the Device Identification i will send you a different PR on our Review branch soon(ish) i also tried to work on something called a "FrameRecorder" but more on that in the bespoken PR.

Anyway i wish you a nice weekend, hope to hear from you soon :)