You are on page 1of 3

Compatibility Information

Automation Platform
User Management (CDS-28943)
Important note for Automation Platform customers:
There is a behavioral change in the various ICommandManagerXX.ExecuteXX() methods for those cases
where the user is not authorized to execute the command by means of the User Management.
Previous behavior: The method returned without having done anything.
New behavior: A PermissionNotGrantedException is thrown.

Softmotion: SMC_MoveGeneral (CDS-45524)


Change in behavior on error: If a motion FB (example: MC_MoveAbsolute, MC_MoveRelative, and so on)
detects an error in its input parameters, then the axis is no longer set to errorstop. The new behavior
complies with the “PLCopen for Motion Control” standard.

MUX, SEL (CDS-45979)


If the SEL or MUX operators are used on user defined types, then all three types must be equal. As such,
it cannot be used to cast an FB to an interface.
It is now checked for these operators and error C0384 is reported in case the check fails.

LMM: Execute implicit CheckPointer (CDS-45397)


The POU for implicit pointer checks is now also executed when variables of a reference type
(REFERENCE TO <type>) are accessed in the application.

Compile, Libman (CDS-24880)


In compiler version 3.5.8.0 and later, placeholder libraries within the pool library manager are resolved by
using the context of the device for which an application is built (if it is a placeholder which can be resolved
by the device description). In other words: a device placeholder within the pool now behaves as it would
have been copied into all device library managers.

String literals assigned to VAR_IN_OUT (CDS-37231)


With compiler version 3.5.8.0 and later, CODESYS issues a new warning for passing constant strings or
string literals to VAR_IN_OUT variables.
In future versions, this warning will be upgraded to an error (CDS-46665).

A VAR_IN_OUT input has two special properties:


1) the value is passed as reference, and
2) the called function has the option of both reading and writing the passed value.
In order to apply the first property, it has been permitted to pass string literals and constant string variables
to the VAR_IN_OUT variable.
(Example: SysFileOpen('my_path\my_file.txt', 'r'))

If the called function had write access to the VAR_IN_OUT variable, then this could lead to serious errors.
Therefore, the construct "VAR_IN_OUT CONSTANT" has been available in version V3.5 SP2 and later
(CDS-27294).
A variable that is declared in this way is passed as reference and cannot be modified in the called
function.
Write access leads to a compiler error message. A string literal or constant variable can still be assigned
to a VAR_IN_OUT CONSTANT variable because the compiler checks that the value is not modified in the
function.
Automatically generated POU CDS-27155
We did not change the implementation of the “Project Information” functions because they are registered
in the runtime system and required to remain compatible. These functions are available only if the runtime
system supports WSTRING; there is no way around this fact.

A common use case for activating the auto-generated functions was to get version information for
libraries. To enable this functionality also for controllers that do not support WSTRINGs, we added a new
set of functions called 'Library Information', consisting of three functions:
- GetLibVersion: VERSION
- GetLibVersionNumber: DWORD
- IsLibReleased: BOOL
They are not registered in the runtime system, but available only from IEC application code.

Runtime System
ComponentManager: safe mode (CDS-41257)
Safe mode is a state of the runtime system that is set if a serious error occurred during startup.
Serious errors includes the following:
a) a required interface function could not be resolved
b) an init hook of a component returns an error

In safe mode, the IEC application is not loaded and not started. This avoids any possible damage to the
system.

ComponentManager (CDS-43828)
Return values of init hooks are checked and handled now (V3.5 SP8 and later):
Components that fail to initialize let the system go into safe mode (see CDS-41257).

Linking files to application needed to separate them from kernel files (CDS-35792)
There is a new setting to separate the application related files from the runtime system files:
[SysFile]
PlcLogicPrefix=1
This can also be predefined at compile time with:
#define SYSFILE_VALUE_INT_PLCLOGIC_PREFIX_DEFAULT 1

Values for SysFile.PlcLogicPrefix


1 [RECOMMENDED value for new controllers]: Create and use the new directory/file structure for SP8
0: Migrate to new directory/file structure when either reset origin device is chosen in device context menu
or at startup on a PLC without any boot project and set PlcLogicPrefix=1
-1 [DEFAULT]: Keep the old flat directory/file structure.

C++ runtime system (CDS-25249)


There is a new macro EXIT_STMT generated by means of the new m4 compiler in the Dep.h file of every
component. This macro should be used in every component. However, it is blank for C runtimes and is
relevant for C++ runtimes only.

This EXIT_STMT must be called in every CH_EXIT hook of a standard component or in


CH_EXIT_SYSTEM in every system component:
Standard component:
case CH_EXIT:
{
EXIT_STMT;
break;
}
System component:
case CH_EXIT_SYSTEM:
{
EXIT_STMT;
break;
}

CmpOpenSSL: Extend CmpOpenSSL with a crypto interface (CDS-41694)


A new crypto interface has been created (see CmpCryptoItf.m4 for details). This interface can be used
inside the PLC code using the CmpCrypto library.

OnlineUserManagement: Disable Rights Management (CDS-44563)


By default, the "Access Rights" page (device editor of a PLC) will not be displayed anymore. There are
two ways to activate this page:

A new checkbox on the device editor options has been added to hide or show the "Access Rights" page.

A new target settings has been introduced to activate the "Access Rights" page from the device
description. This setting overrides the setting in the device editor options.

<ts:section name="device-user-management">
<ts:setting name="show-access-rights-page" type="boolean" access="visible">
<ts:value>1</ts:value>
</ts:setting>
</ts:section>