s7nodave Device Support for EPICS

Table of Content

About s7nodave

s7nodave for EPICS is a device support based on Asyn and libnodave that communicates with S7 (or compatible) PLCs. Unlike other EPICS device supports for the S7 PLCs, this device support does not require any special programming on the PLC side. Instead, the EPICS records just specify the memory address in the PLC and the device support uses the ISO-TCP protocol supported by most S7 PLCs in order to read or write the channel data.

Documentation

An extensive manual, explaining how to install, configure and use the s7nodave device support is available online.

Download

This program and the accompanying materials are made available under the terms of the GNU General Public License version 3. By downloading the software you agree to be bound the the terms of this license. In particular, you have to agree to sections 15 (“Disclaimer of Warranty”) and 16 (“Limitation of Liability”) before downloading the software.

The minimal version of Snap7 distributed with s7nodave since version 3.0.0 is licensed under the terms if the GNU Lesser General Public License version 3. Please refer to the files included in the source distribution for more copyright and licensing information.

The modified version of libnodave distributed with s7nodave until version 2.1.4 is licensed under the terms if the GNU Lesser General Public License version 2.1. Please refer to the files included in the source distribution for more copyright and licensing information.

Release 3.0.2 (April 12th, 2021):
Changes:
This release fixes a critical bug that was introduced with the 3.0.0 release. Unit tests have now been added that test for the regressions introduced in the 3.0.0 release (and also test other components), so that similar regressions should be avoided in future releases.

Release 3.0.1 (April 1st, 2021):
Changes:
This release fixes two bugs, one of them critical, that were introduced with the 3.0.0 release. In addition to that, there is a minor improvement in the connection handling when using the device support on macOS.

Release 3.0.0 (March 30th, 2021):
Changes:
This release makes major changes in the backend. Usually, an EPICS IOC using this device support should not be affected by these changes and simply recompiling it should be sufficient. However, as it is possible that someone directly used the API of the backend, it has been decided to increment the major version number for this release.
In the backend, libnodave has been replaced by Snap7. This was mainly done to avoid a bug in libnodave that would sometimes cause communication problems in combination with some newer CPUs (the bug was first seen with a S7-1500 series CPU). Due to the rather bad code quality of libnodave, this bug could not be easily fixed there and thanks to the much better quality of Snap7, it is likely that this migration also helped to fix a few more bugs that simply had not been discovered yet.
The dependency on the Boost library has been removed and the respective components have been replaced with components from the C++ 11 standard library. This means that starting with this release, you will need a C++ compiler supporting C++ 11 in order to compile s7nodave.

Release 2.1.4 (October 31st, 2019):
Changes:
This release fixes two bugs and brings one minor improvement. The first bug that is fixed was triggered when the port number was explicitly specified when connecting to a PLC. This was rare, because usually the default port is used. The second bug caused an input record operating in I/O Intr mode (and thus being part of a poll group) to not be correctly put into an alarm state and instead provide random data when the overall read operation for the poll group succeded, but there was a problem with the specific address specified by the record. The improvement concerns output records: Their alarm severity is now automatically cleared when their current value could be read from the PLC during IOC startup. This means that such records do not have to be processed to clear the initial alarm state any longer.

Release 2.1.3 (December 11th, 2017):
Changes:
This release fixes a bug in the S7nodavePortDriver class. This bug sometimes caused the reading of multiple items in a single request (like used in poll groups) to fail because too many items were put into a single request. This problem would only appear, when an item's data would still fit into a PDU, but the item’s data plus header would not.

Release 2.1.2 (November 15th, 2017):
Changes:
This release fixes a bug in the S7nodavePortDriver class. This bug caused the reading of multiple items in a single request (like used in poll groups) to fail because too many items were put into a single request. This bug would only appear under very specific, rare circumstances.

Release 2.1.1 (November 24th, 2016):
Changes:
This release fixes three bugs in the S7nodavePortDriver class. The first bug would cause a crash when a log message was generated while writing a single bit. This would happen when there was a write error or when debugging was enabled. The two other bugs concerned the logic for reading multiple items in a single request (used for poll groups). The first of these two bugs could cause an infinite loop, causing the I/O thread spin indefinitely without making any progress. The second one could cause too many items being requested in a single request, resulting in a read error.

Release 2.1.0 (June 23rd, 2016):
Changes:
This release makes the s7nodave device support compatible with EPICS Base 3.15.4. As a side effect, the behavior when the value of the NOBT field of mbbi, mbbo, mbbiDirect, and mbboDirect records is equal to the number of bits of the PLC data type has been changed. In previous versions, the MASK and NOBT fields would be reset to zero, resulting in an explicitly set MASK being lost. With this release, the MASK is preserved and only reset to zero if NOBT is greater than the number of bits of the PLC data type. This change does not have any effects when using EPICS Base 3.14 because the record support always overwrites the MASK field in EPICS Base 3.14, even if the MASK is non-zero.

Release 2.0.1 (August 7th, 2015):
Changes:
This release fixes two bugs. The first bug caused the IOC to crash during startup under certain conditions and was caused by an invalid iterator dereference. This bug was present in all prior version of s7nodave. The second bug concerned the validation of parameters to the s7nodaveConfigureIsoTcpPort IOC shell command. This bug only had an effect when too few arguments were passed to this command and was only present in the 2.0.0 release.
In addition to the two bug fixes, this release implements a small change that allows you to change settings in the configure/CONFIG_SITE or configure/RELEASE files without actually modifying the files by creating a configure/CONFIG_SITE.local or configure/RELEASE.local.

Release 2.0.0 (February 8th, 2015):
Changes:
This release adds options to configure the rack and slot number for the PLC connection, thus enabling communication with a wider range of S7 PLCs. It also changes the way that individual bits in DB areas are addressed, so that the address format now matches the format used by most S7 tools.
Caution: These changes make this release incompatible with older releases of s7nodave. You will have to update your project configuration in order to use this release. The changes are simply and should only take a few minutes. Please refer to the News section of the manual for detailed instructions.

Release 1.0.3 (April 24th, 2014):
Changes:
This release fixes various bugs affecting the ai, stringin and stringout records. Other fixes address problems with timer and counter addresses and a dead-lock that could appear if record initialization failed. For more details and a full list of the fixed bugs, have a look at the NEWS file in the source distribution.

Release 1.0.2 (January 1st, 2013):
Changes:
This release fixes a bug that caused a wrong boolean value to be read for the first bit in a byte that had other bits set.

Release 1.0.1 (December 17th, 2012):
Changes:
This release fixes two bugs. The first bug was in the ai and ao record support and occurred when these record types were used with a floating-point number in the PLC. The other bug affected the support for the mbboRecord and (under special conditions) could cause a crash due to a read beyond array limits.

Release 1.0.0 (January 28th, 2012):
Changes:
First public release of s7nodave.

Contact

You can contact the author of this software, Sebastian Marsching, at s7nodave-maintainer removethis <at> oss <dot> aquenos <dot> com.

Visit other projects on oss.aquenos.com.

Imprint | Privacy Policy

© 2012-2013 aquenos GmbH