Falsches Ergebnis bei Division von ganzzahligen Zahlenkonstanten

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.

URL zur Verlinkung dieses AKB-Artikels: https://www.lenze.com/de-de/go/akb/200503224/0/
Contact form