Releases: libplctag/libplctag
v2.6.10 - Fixes for issues #569 and #570
Many thanks to @mikecflood and @joed74 for finding these!
The following are fixed.
- Issue 569 - unable to get full tag listing.
- Issue 570 - Micrologix tag read/write errors.
I am beefing up my testing because both of these passed the tests I had and should not have.
Fix bug 565, error writing single bit in a tag
Thanks to user @mikecflood who found this. If you try to write a single bit, it will fail with an error on CIP-based PLCs. This was something that I broke with the rethinking of how the amount to write per packet is calculated. Much more testing was added to my internal tests against real hardware to make sure that this does not regress.
You can find the release in the usual place.
v2.6.8 - Fix for #558
The big one here is a fix for bug 558 found by user @byunghyunna2. The largest changes were actually in the PCCC PLC code. Please test well. All my tests pass, but I cannot cover all users scenarios.
There are other fixes for building with Debug and sanitizers on. That doesn't work, so the CMake config now prevents that.
Thanks to user CedricM for providing a test for parallel updates against the PLC simulator.
The release can be found here.
v2.6.7 - Fixes for double free bug #546, changes to release process
This release contains a fix for bug #546. Hopefully. It is a Heisenbug that is difficult to trigger consistently.
Thanks to user "2gd4who" from the forum who noticed this.
There are also a lot of changes to how the releases are done. I broke up the ZIP files that had contained everything for each target before. Now each target has three ZIP files (example shown for macOS on ARM64):
- libplctag_2.6.7_macos_aarch64.zip - everything as before
- libplctag_2.6.7_macos_aarch64_tools.zip - the basic library and files needed to develop with libplctag plus tools like tag_rw2, tag listing tools etc.
- libplctag_2.6.7_macos_aarch64_dev.zip - just the files needed to develop with libplctag.
The last two are experimental. Let me know if there is a flaw with them.
The final change is more automation around releases. This should help me get them out the door more easily and more frequently. Now when a PR is merged to the release branch, it automatically creates a release and tags it.
v2.6.6 - fixes for ARM builds and reconnecting after PLC outage
Many thanks, again, to @wegel for finding a problem with reconnection and providing a fix and test! Contents of this release:
- fixes for ARM 64-bit builds as reported by user @chanhowcheng.
- fixes for reconnecting to a PLC after an outage as reported by @wegel and @mikecflood. @wegel proposed a nice PR with some fixes and a good test program. I ended up solving this in a different way to also include fixing non-auto sync tags and expanded the test program. Thanks!
- Fix base glibc version on Debian/Ubuntu systems. User "2gd4who" found this. I backleveled the build systems to use Ubuntu 22.04 instead of 24.04 and the glibc version problem seems to be fixed. Debian does not have the latest glibc version yet.
Thanks for using libplctag!
v2.6.5 - MinGW as a tier-1 compiler, fixes for 2.6.4
This big change in this release is for MinGW. It is now a tier-1 supported compiler. The CI system tests builds with MinGW the same as with MSVC on Windows. On x86 and x64, the CI uses MinGW to build libplctag, all the examples and runs all tests that can be run using the ab_server simulator.
There are some fixes for 2.6.4:
- From user wegel, changes in how the refactored CMake configs reference directories. This helps with using libplctag in another Git project.
- Re-enable the install clauses in the config. This broke packaging for the brew package management system. Thanks to user daeho-ro for finding that!
The examples are now fully statically linked on Linux. Apple has decided to make it very difficult to make a fully static executable on macOS, so the examples there are linked with libplctag statically.
32-bit ARM Windows binaries are still broken. I have spent days trying to figure out how to make it work. It now looks like I might need to lean on LLVM/Clang instead of MinGW or MSVC. It is still possible to build your own binaries if you have such a system. I am able to build them with no problem on my own Windows machine. But the configuration of the GitHub CI runners seems to be different and for some reason I am not able to fully install all the needed components to get MSVC to generate 32-bit ARM binaries.
Note that the names of the binary packages below will start changing to incorporate the compiler when there are multiple compilers used for a platform. I have not made the binaries created by MinGW into tagged binaries attached to a release as there are already equivalent binaries from MSVC.
v2.6.4 - finally! see notes for fixes
This release has a lot in it. First many thanks to the contributors who did all the hard work: Heath, wegel, Dominik and ptsOSL! I think I caught all of you. If I missed someone, please tell me!
This contains:
- Smarter handling for OMRON. Better support for multi-request packets. To really finish this we will need to add some level of tag metadata retrieval to the OMRON code.
- ab_server changes (mostly thanks to contributors listed above!):
- Multithreading!
- Index handling now mirrors what real Rockwell PLCs do.
- Fixes for double free and use after free issues.
- More sanity checks for packets. Incoming packets are more carefully checked.
- A fix for 497 that was found by user EchoHowardLam-GTS. This started a lot of refactoring and rethinking.
- A huge refactor of how CMake config is set up. Most of it is broken out into individual files and is much, much easier to understand. But it is not all finished.
- The example binaries are now linked statically to libplctag to make those executables easier to run. I am aiming for fully static linking eventually but getting this release out had priority.
- Reorganization of the source tree into more meaningful subdirectories. This and the CMake refactoring go together. This is part of a longer process to refactor out common elements and reduce code duplication.
- Many compiler warnings fixed. At least with Clang and GCC warnings. MSVC is fairly happy now too. There are still some warnings. Over the next couple of releases I aim to have zero compiler warnings.
- The base release configuration has changed to MinSizeRel in CMake. This is a build configuration that optimizes for binary size (smaller). Very few, if any, parts of libplctag are CPU bound. Having small code is better for users that are working with smaller devices and lower memory requirements.
Known issues:
- MinGW is not working. This will be coming in another drop. Hopefully 2.6.5.
- Changes on the GitHub CI runners have made it much, much harder to build binaries for 32-bit ARM Windows. I have spent too many days delaying the release trying to track this down. So ARM 32-bit builds for Windows are removed for now. File an issue if you really need 32-bit ARM Windows binaries.
- The Zip files are much larger because the examples are mostly statically linked.
- The contributed CLI tool is currently not being built. That will come as soon as I get MinGW working. It has suffered some bit-rot and needs to be updated to avoid a lot of compiler warnings and potentially unsafe code.
- The Windows x86 32-bit build was accidentally set to 64-bit. It will be replaced with release 2.6.5.
Going forward there will be more refactoring. There are many areas where code can be combined and/or simplified. I will continue to simplify the CMake use so that it can be much more generic and use the defaults most of the time. The end goal is to make feature additions and bug fixes take much less time.
v2.6.4-r2 - Fixes for OMRON, ab_server and more sanity checks
This release has a lot in it. First many thanks to the contributors who did all the hard work: Heath, wegel, Dominik and ptsOSL! I think I caught all of you. If I missed someone, please tell me!
This contains:
- Smarter handling for OMRON. Better support for multi-request packets. To really finish this we will need to add some level of tag metadata retrieval to the OMRON code.
- ab_server changes:
- Multithreading!
- Handle multiple indexes (as well as just one) correctly! At least I think so...
- Fixes for double free and use after free issues.
- More sanity checks for packets. There are probably more coming in the future, but this is a very good start.
- (Updated) A fix for #497 that was found by user EchoHowardLam-GTS. Hopefully it is fixed...
This is not a full release yet! Please download it and use it for testing but do not put it into production at this time! If you find any problems, please let me know immediate via a GitHub issue!
v2.6.3 Merge in more Omron updates from user ptsOSL, other fixes
Trying something new here where I try to do better commit messages in Git and then use git log to generate most of the release message...
Merge into release (#491)
* Make file number optional if input or output file. Fix #481. Support I:1 and O:2 etc.
* Added support for a numeric subelement. Fix #479. (#483). Should allow sub-elements so that you can get to the IO files and their individual data.
* Fix #486. (#487). String size changes (larger) failed on Omron because it does not reserve the maximum string size in the data it sends to the library. Now when you call plc_tag_set_string() it will try to resize the tag buffer. Fixed with #488.
* Added atomic flag and checks to aid in making all sessions terminate when the library is shutting down. Fix #450.
* plc_tag_set_string() feature additions (#488). Setting string can change tag data buffer size. And added flag, allow_field_resize, to suppress change. Needed because the change for adjusting the buffer size could break code that is not aware of it.
* Added msp response size check before adding new requests to msp with allow_packing=1 and fragmented reads disabled (#489). This should allow more requests to be bundled together for Omron PLCs. This is a work in progress and Phil has done a lot of work here.
---------
Co-authored-by: Phil Smith
v2.6.2
This release is mostly little fixes, particularly for PLC/5, SLC and MicroLogix.
What's Changed
- Added more guard checks to the internals of the library.
- Added deprecation warning to tag_rw. It will be going away as all new work and features are in tag_rw2.
- Added support for raw tags. The tag_rw2 tool supports raw tags now. This makes it much, much easier to do exploration of new PLCs and to find out what data comes back on certain CIP calls.
- Fix up how printable characters are identified. ASCII is smarter than I thought. This is in tag_rw2 when dumping out results as single bytes.
- Make file number optional if input or output file on PLC/5, SLC and MicroLogix. Fix #481.
- Added support for a numeric subelement. Fix #479. This should allow you to access the I and O files beyond the first element.
Full Changelog: v2.6.1...v2.6.2
The raw tags in tag_rw2 are going to really help in our quest to support Omron PLCs better. Here's an example of what you can do:
tag_rw2 --type=raw "--tag=protocol=ab-eip&gateway=10.206.1.40&path=1,0&plc=ControlLogix&name=@raw" --write=0x55,0x03,0x20,0x6b,0x25,0x00,0x00,0x00,0x01,0x00,0x01,0x00
This sends the CIP service 0x55 to the 0x6b class. It asks for attribute 1 for all instances of that class. This is part of pulling back information when listing tags. The binary values in the write argument are sent as is to the PLC. The size of the tag is automatically adjusted to fit the request and the returned response.
There are two changes from the usual use of tag_rw2 here. The first is that the type is "raw" rather than uint8 or sint32 etc. This type tells the tool that it needs to not interpret any of the request or response but instead to just pass it through to the PLC. The second is that the tag name is that of a raw tag.
You can get this release in the releases page.