Betrifft welche Produkte?
ESP-DDS2-P (Global Drive PLC Developer Studio V2.x)
Wie sieht die Reaktion aus?
Es werden zwei Arten von Konstanten unterschieden:
- Zahlenkonstante: ein in der PLC-Logik (Quellcode) befindlicher Zahlenwert.
- Variablenkonstante (Typed Literal): eine zwischen den Schlüsselwörtern VAR CONSTANT und END_VAR als Konstante deklarierte Variable.
Die Division von zwei ganzzahligen Konstanten führt abhängig vom Wert der Konstanten zu einem fehlerhaften Berechnungsergebnis.
Beispiel:
udnVar:=3000000000/10; (*Ergebnis der Division = 4165470567*)
Wann tritt das Problem auf?
- Hat eine ganzzahlige Zahlenkonstante im Zähler einer Division einen Wert größer gleich 2^31 (≥ 2147483647), dann ist das Ergebnis der Division nicht korrekt.
- Hat eine ganzzahlige Variablenkonstante im Zähler einer Division einen Wert größer gleich 2^31 (≥ 2147483647) und ist der Schalter Konstanten ersetzen in der Kategorie Übersetzungsoptionen des Dialogs Optionen (Menü Projekt>Optionen) aktiv, dann ist das Ergebnis der Division nicht korrekt.
Diagnosemöglichkeiten?
Bei Verwendung von Variablenkonstanten überprüfen Sie, ob der Schalter
Konstanten ersetzen aktiv ist (siehe oben).
Kurzfristige Maßnahmen/Empfehlungen?
- Ersetzen Sie in der PLC-Logik die Konstante im Zähler der Division durch eine Variable (Deklaration zwischen den Schlüsselwörtern VAR und END_VAR) vom Datentyp UDINT oder DWORD, die mit dem Wert der Konstante initialisiert wurde.
oder besser
- Ersetzen Sie in der PLC-Logik die Division durch eine Konstante, deren Wert dem des Berechnungsergebnisses der Division entspricht.
Bewertung:
Die Division von sehr großen, ganzzahligen Konstanten (≥ 2147483647) führt zu einem fehlerhaften Ergebnis. Spätestens bei der Inbetriebnahme wird diese Funktionseinschränkung entdeckt. Ausdrücke, in denen Konstanten in dieser Form dividiert werden, treten in der Praxis eher selten auf.