There is a lot of change in this release. Use it with caution. It works for me(TM).
First credits: Once, again, many thanks to @mikecflood for testing so helpfully with PCCC and Modbus PLCs! He finds bugs quickly and is a huge help in testing the fixes.
Contributed changes other than Mike's help include:
* User Ruben donated a patch set to make it possible to use MinGW to compile for Windows on a Linux host.
* User Ruben donated a patch set to update the recognized CIP data types to include a few missing ones from the newer releases of Rockwell's software/firmware.
If there is a theme to this release it is that I finally started putting together some detailed performance statistics and fairness statistics. Most of the changes in this release are from that.
ab_server:
* Perf tweaks. It now responds under 200us (microseconds) to a request most of the time on my macOS M1 laptop.
* It now supports CIP multi-request packets for Control Logix-class PLCs emulation.
* It now _correctly_ supports single bit write on PLC/5 and SLC/Micrologix.
Mobus TCP:
* Perf tweaks and many small fairness changes in the Modbus client code. This helps prevent any one tag from getting starved by others in high load situations.
* nearly complete rewrite of the Modbus TCP test server code. It now supports multiple end points. After much performance tuning, it now responds to most requests (again on my laptop) in less than 100 microseconds.
30+ integration tests are now run on all tier 1 platforms:
* Ubuntu Linux 24.04 on x86, x64, Aarch64, and x64 + the musl C runtime library,
* macOS 14 and 15 on x64 and Aarch64,
* Windows with MSVC on x64, x86, and Aarch64,
* Windows with MinGW on x64 and x86,
* Alpine Linux on X64 and Aarch64 (uses musl C library).
Other builds include:
* Ubuntu/Debian Arm32 v6 and Arm32 v7hf (hardware floating point support)
Other changes:
* Test/experimental packages are available for Ubuntu, Debian, Redhat, and Alpine Linux. These are experimental.
* By using the new fairness tests, I was able to find a race condition when aborting a tag while it had an operation in flight that would result in a double abort and an unexpected error indicating that abort was not implemented. This is now passing my tests, but it is a race condition, so please check your own code with this release carefully.
This is a big release. Please test before using it in production. Please file issues if you find bugs or something that has changed and broken your code.
I have started a new way of introducing experimental API extensions. Rather than just adding them and bumping the minor version number, I am introducing them with an experimental annotation so that if you use them in C or C++, you will get a warning. This will allow you to try them and give the new functions time to get tested in environments I do not have access to. Once they are stable, I can remove the experimental warning.
Thanks to all the users who filed issues or asked questions on the forum and did testing!
One final note: it is getting harder and harder to find compilers and C libraries that support Arm 32-bit builds. On Windows, Microsoft has removed the 32-bit Arm components from the standard install of Visual Studio and my efforts to install them on GitHub's CI runners have failed. If someone knows how to do this, let me know!
You can get the
release here.