Rounding the REAL value is the correct solution, see our customer information from Mai 2021 below. The problem is caused by REAL_TO_STRING / LREAL_TO_STRING.
Beckhoff provides a nice function LREAL_TO_FMTSTR in the Tc2_Utilities library to round a floating number.
Customer information English / German:
Nexeed Automation Release Mail
28.05.2021
Bugfix – Control plus – NxIpDdl
Problem description
The TC system function LREAL_TO_STRING or. REAL_TO_STRING generates sporadically illegal characters in the converted string. The error occurs with floating-point numbers with many decimal places. This leads to errors in the MES communication because there is an illegal character in the string to be transmitted.
To avoid this, a correction function was installed in the versions specified above. As we now had to determine, this function does work incorrectly with numbers in the range between -1.0 and +1.0, as well as very large numbers. Due to this error, the exponent is truncated, i.e., the values communicated to the MES are wrong by one or more orders of ten.
Please note that as part of our investigations, we have also found that the use of a LREAL_TO_STRING conversion to a REAL number can be performed without a compiler message, but then leads to incorrect results.
Versions affected
NxIpDdl
o From V1.1.3.0 – 21.12.2018
o To V1.1.13.0 – 04.10.2020
Bugfixes
NxDll V1.1.15.0
Correction function is still available: However, this version only checks the last character of the string for invalid values and removes them. Afterwards the complete string is searched again for invalid characters and should such an invalid character be found an error is returned.
NxDll V1.2.0.0
Correction function removed
We recommend an update to V1.2. In this case, error messages may occur as a result of the MES communication. These can be corrected by a corresponding rounding of the value to be exceeded.
Problembeschreibung
Die TC Systemfunktion LREAL_TO_STRING bzw. REAL_TO_STRING zeigt sporadisch unzulässige Zeichen im konvertierten String. Der Fehler tritt bei Zahlen mit vielen Nachkommastellen auf. Dies führt in der Folge zu Fehlern in der MES Kommunikation da sich ein unzulässiges Zeichen im zu übertragenden String befindet.
Um dies zu umgehen wurde in den oben angegebenen Versionen eine Korrektur-Funktion eingebaut. Wie wir nun feststellen mussten arbeitet diese Funktion bei Zahlen im Bereich zw. -1.0 und +1.0, sowie sehr großen Zahlen, fehlerhaft. Aufgrund dieses Fehler wird der Exponent abgeschnitten, d.h. die an das MES kommunizierten Werte sind um eine oder mehrere 10-er Potenzen falsch.
Bitte beachten Sie, dass wir im Rahmen unserer Untersuchungen auch festgestellt haben, dass die Anwendung einer LREAL_TO_STRING Konvertierung auf eine REAL Zahl ohne Compilermeldung durchgeführt werden kann, dann aber zu falschen Ergebnissen führt.
Betroffene Versionen
NxIpDdl
o von V1.1.3.0 – 21.12.2018
o bis V1.1.13.0 – 04.10.2020
Bugfixes
NxDll V1.1.15.0
Korrekturfunktion ist noch vorhanden: Diese Version überprüft allerdings nur noch das letzte Zeichen des Strings auf unzulässige Werte und entfernt diese. Anschließend wird der komplette String nochmals auf unzulässige Zeichen durchsucht und sollte solch ein unzulässiges Zeichen gefunden werden wird ein Fehler ausgegeben.
NxDll V1.2.0.0
Korrekturfunktion entfernt
Wir empfehlen ein Update auf V1.2. In diesem Fall kann es in der Folge zu Fehlermeldungen durch die MES Kommunikation kommen. Diese können durch eine entsprechende Rundung des zu übertagenden Wertes behoben werden.
... View more