Application-relevant changes 2025:
Changes of miscellaneous features
Logging
Logging API
The logging substruction was refactored completely. Nevertheless, the public API did not change, except of the following:
- The static logging implementation using macros was removed because it was not used
- The logging implementation using streams was removed because it was not used
Log file separation
To filter and find log messages more easily, the Output.log will be split into multiple log files.
The main log file is renamed to Arp.log:
- Size: 16 MB + 1 backup file
- All loggers starting with Arp, Eclr and CommonRemoting log to this file (see exceptions below).
For the following components, separate log files will be created:
- PROFINET: Arp.Io.ProfinetStack.log
- SPNS: Arp.Services.SpnsProxy.log
- eHMI: Arp.Services.Ehmi.log
- Size: 2 MB each + 1 backup file
An additional log file will be created to store identification and version information at system start:
- Arp.Init.log
- Size: 1 MB + 1 backup file
- The purpose of this file is to store persistently some important information that would otherwise be overwritten by log file rotation. These include:
- Firmware version
- Vendor, article name, article number, hardware revision, serial number
- FPGA version
- SPNS firmware version
- PCIe extensions: vendor, article name
- File system: size, free space
- External SD card: present, enabled, free space
- Function and location, initial value and changes
- Network interfaces (no IP address configuration, since it is too volatile)
An additional log file will be created for customer messages, that is every logger whose name does not start with Arp (see exceptions above):
- Custom.log
- Size: 2 MB + 1 backup file
The separated files can be merged using the tool arp-merge-logs on the controller. For information, run arp-merge-logs --help
in the console.
External libraries update
CppFormat library replaced by libfmt 10.2.1
The CppFormat
library has moved to libfmt
, and parts of the libfmt
library were adapted to the C++ standard.
PLCnext Technology does not use the std::format
due to lacking compiler support and compatibility issues with already present operator<<
implementations for user-defined types. But PLCnext Technology uses the libfmt
code directly, which was now updated to version 10.2.1.
There are no compatibility issues expected except those listed in class String .
boost libraries updated to version 1.84
The previously used version 1.63 of the boost
libraries is quite old and does not support C++ 20. To make newer features available, the boost
libraries are updated to version 1.84 for the final 2025.0 release. Meanwhile, the public Preview 2024.7 first comes with an update to version 1.78 because of a pending issue that still needs to be solved.
Some of the boost::filesystem
classes have minor changes regarding their behavior, but this was adapted in the PLCnext Technology firmware code. Thus, there are no compatibility issues expected, as long as the boost
code was not used directly by custom code.
CMake adjustments
The PLCnext Technology SDK now provides CMake export configuration files. A virtual package Arp
is provided that includes all the packages included in the SDK. This defines the target Arp::ALL
that encompasses all relevant libraries and sets the basic usage requirements for the libraries. These include C++ 20 and linker flag --no-undefined
.
Link at least one of the Arp
libraries to enable these preparations.
In CMakeLists.txt:
find_package(Arp REQUIRED)
target_link_libraries(YourTarget PRIVATE Arp::ALL)
Individual libraries are exported in the namespace Arp
. For example, to explicitly link the GDS, use Arp::Arp.Plc.Gds
.
For cross-compiling on Windows®, the mingw
SDK includes a CMake toolchain file in sysroots\x86_64-w64-mingw32\usr\share\cmake\OEToolchainConfigStandalone.cmake.
The function arp_add_tracing
from cmake/ArpTracing.cmake was moved to the export package. It is available after find_package(Arp)
.
API documentation
The API documentation is provided as an HTML-based online help system for each firmware release from 2020.0 LTS up to the latest releases. Each online help system is publicly available at PLCnext Technology C++ API documentation.
For the Preview 2024.7, the C++ API documentation is part of the delivery bundle and will also be made publicly available online.
PLCnext CLI adaption
The templates of PLCnext CLI 2024.6 (download at PLCNEXT TECHNOLOGY TOOLCHAIN | Phoenix Contact) have been reworked to support the Preview 2024.7 of the upcoming application-relevant changes.
Therefore, in order to re-use an existing project, a new project needs to be created by means of PLCnext CLI 2024.6, and the sources (typically folder src) need to be copied into the new project.
Due to changes in the Library
and Component
class, the existing code has to be merged manually (member/method by member/method).
Changing the initialization system
Every Linux® system has an initialization system which is responsible for starting the daemons and the system configuration (e.g., network configuration) when the system boots. Up to now, PLCnext Technology firmware has used SysV
initialization. Due to the increasing complexity of the PLCnext Runtime System and the growing importance of container technology (e.g., Podman or Docker®), it is necessary to switch to the more modern and complex systemd
.
Users who intervene directly in the Linux® OS to start their own daemons, or to integrate additional scripts into the system start, will have to convert their start scripts from SysV
init to systemd
service files. Since container apps from the PLCnext Store currently initialize and start their containers via a special init script, these apps must also be adapted accordingly.
Another impact is the network configuration, as systemd
has its own integrated network management. Therefore, the Linux® tools ifup
and ifdown
no longer exist, and the file /etc/network/interfaces will also no longer exist. This affects all users who manually intervene in the network configuration via the /etc/network/interfaces file.
If a user only uses Arp
mechanisms for network configuration (e.g., PLCnext Engineer or the Web-based Management), no adjustments are necessary.
Rework of network management
With the change of the Linux® initialization system (details see Changing the initialization system), the Linux® network management is also changed from the ifup
/ifdown
procedure with /etc/network/interfaces to the network management integrated in systemd
via networkd
.
This change allows to implement functions such as multiple IPs per interface, multiple gateways, VLANs and more in the medium term. It also increases the stability of the system when the IP is changed using Linux® tools.
The network configuration is now handled by the networkd
daemon, which is part of systemd
. The Linux® tools ifup
and ifdown
no longer exist, and the file /etc/network/interfaces will no longer exist, either. This affects all users who manually intervene in the network configuration via the /etc/network/interfaces file.
If a user only uses Arp
mechanisms for network configuration (e.g., PLCnext Engineer or the Web-based Management), no adjustments are necessary.
Activation of Usrmerge
Since 2012, some Linux® distributions have been implementing the project Usrmerge
which has the goal to remove the folders /bin, /lib and /sbin by "merging" their contents into the folders /usr/bin, /usr/lib and /usr/sbin. The reason for this is that this duplication of directories is historical and no longer necessary today. The result is a clearer and simpler directory structure. For compatibility reasons, only symbolic links are created for /bin, /lib and /sbin. In addition, the home directory of the root
user is no longer /home/root but just /root.
Since 2022, major Linux® distributions like Debian have activated Usrmerge
, and since 2024 also the Yocto Project® which is used to generate the PLCnext Linux OS did that. Newer versions of systemd
now require Usrmerge
, so that there is no longer an alternative to activation.
The folders /bin, /lib and /sbin do not exist anymore in the PLCnext Linux OS. Instead, symbolic links are created:
/bin --> /usr/bin
/lib --> /usr/lib
/sbin --> /usr/sbin
Special care should be taken by users who have stored files in one of the directories mentioned, as these could then overlay the symbolic links in the file system after an update to the Preview 2024.7 which would lead to unpredictable behavior.
New Web-based Management (WBM 2.0)
The previous Web-based Management (WBM) is completely replaced by a new development, called WBM 2.0. The reasons for the new development are, on the one hand, a new work standard for the definition of web interfaces for Phoenix Contact devices, which describes the design in a new way and considers contemporary features such as mobile views or responsive design. As well, the previous web technology used internally was no longer up to date.
In future, the WBM will be set up with the help of a framework (Angular.io), offering many more options and futureproofing. In addition, it will be possible in future for users to seamlessly integrate their own pages into the controller's WBM, e.g., via apps from the PLCnext Store.
The look and feel as well as the operation of the WBM are new. Functionally, little or nothing will change on the pages initially. In the Preview 2024.7, some pages are still under development, so to access the old WBM 1.0 frontend, the URL <IP>/wbm_legacy can be used.
Removal of Linux packages/tools/libraries
Removal of the vim editor
In addition to the nano
editor, the vim
editor is also integrated in PLCnext Linux.
In the recent past, security vulnerabilities (CVEs reported to the Phoenix Contact Product Security Incident Response Team (PSIRT) ) have frequently been discovered in vim
, so that the editor had to be updated frequently. As the security reports continue to be more frequent, the vim
editor is to be removed from the system. This will make the system more secure.
As the memory requirement of the editor in the root file system is very high at more than 40 MB, this step will also significantly reduce the image size of the firmware.
Only users who intervene directly in the Linux system and use the vim
editor there are affected by this change. These users must switch to the nano
editor, or alternatively translate the vim
editor themselves with the SDK and integrate it into PLCnext Linux. It would also be conceivable to provide an app that contains the vim
editor.
Removal of the busybox package
Every Linux® system has a set of elementary basic tools such as cp
, mount
, or grep
. These tools are provided by program collections such as GNU core-utils
, util-Linux
or net-tools
. One collection that is optimized in terms of resource requirements is busybox
, which was originally developed with a focus on use on embedded systems. The resource requirements have been reduced by omitting features of the tools.
However, many advanced Linux® technologies (e.g., container engines) require the basic tools in their full configuration, which is only provided by the mentioned collections. Over the years, PLCnext Linux has seen a difficult to understand coexistence of tools from collections such as core-utils
or util-Linux
on the one hand and busybox
on the other.
To regain order and future-proof the basic tools, it was decided to no longer integrate busybox
but to rely exclusively on the standard tools of the larger collections.
The impact on the user should be very small or even imperceptible. All tools that were previously provided via busybox
can still be found in the system under the same name. As the busybox
tools each support a subset of the features of the "big" tools, previous calls should continue to work as expected.
Restriction: If users have developed parsers that evaluate the output on stdout
of the tools, these parsers will no longer work in many cases, as the output of the busybox
tools differs from that of the tools from the larger collections. Users who call the busybox
binary directly are also affected, although this should very rarely be the case.
Change of NTP daemon
The currently used ntpd
provides a basic set of functions. However, for more complex time synchronization tasks like those mandatory for the implementation of Time-Sensitive Networking (TSN) this function set is not sufficient anymore.
Therefore, the ntpd
daemon will be replaced by the chrony
daemon. All configuration files will be invalidated or removed from the system.
All configuration files will be invalidated/removed from the system. This change will only affect users who intervene with the Linux® system by means of the ntpd
daemon itself and/or its configuration.
Removal of strongSwan legacy configuration interface
The strongSwan Team declared the stroke
plug-in as deprecated and it is disabled by default in strongSwan 6.0:
The legacy
stroke
management interface has been deprecated for many years and has been replaced by the versatile vici
management interface. Thus with strongSwan 6.0, the stroke
plugin is not enabled by default anymore and has to be built separately.
To avoid a forced removal of this deprecated plug-in in later PLCnext Control firmware versions, it is removed from the Application-relevant Changes release on. Existing configuration files (ipsec.conf) must be migrated to the new swanctl.conf syntax (read the strongSwan wiki article).
Also the ipsec
script was removed. To control an ipsec
connection, the swanctl commands must be used.