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.


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


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 modified version of libnodave distributed with s7nodave 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 2.1.4 (October 31st, 2019):
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):
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):
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):
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):
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):
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):
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):
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):
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):
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):
First public release of s7nodave.


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