CheckRangeUnsigned : UDINT
Um die Einhaltung der Bereichsgrenzen der Unterbereichstypen zur Laufzeit überprüfen zu können, kann die Funktion CheckRangeUnsigned eingefügt werden. In der Funktion können Bereichsverletzungen in geeigneter Art und Weise abgefangen werden (z.B. kann der Wert abgeschnitten werden oder ein Fehlerflag gesetzt werden). Die Funktion wird implizit aufgerufen, sobald auf eine Variable geschrieben wird, die von einem Unterbereichstyp ist, der aus einem nicht vorzeichenbehafteten Typ gebildet wurde. Um eine Überprüfung vorzeichenbehafteten Unterbereichstypen durchführen zu können muss die Funktion CheckRangeSigned benutzt werden.
VAR_INPUT
value, lower, upper: UDINT;
END_VAR
Beispiel für eine Implementierung: siehe CheckRangeSigned
Hinweis | |
Wert der Variablen/Endlosschleife Sind die beiden Funktionen CheckRangeSigned und CheckRangeUnsigned nicht vorhanden, findet zur Laufzeit keine Typüberprüfung der Unterbereichstypen statt! Die Variable i könnte dann also beliebige Werte zwischen -32768 und 32767 annehmen! Wenn eine Funktion CheckRangeSigned bzw. CheckRangeUnsigned wie oben gezeigt implementiert ist, kann bei der Verwendung des Unterbereichstypen in einer FOR-Schleife eine Endlosschleife entstehen. Dies geschieht genau dann, wenn der für die FOR-Schleife angegebenen Bereich genauso groß oder größer ist als der des Unterbereichstypen! |
Beispiel:
VAR
ui : UINT (0..10000);
END_VAR
FOR ui:=0 TO 10000 DO
...
END_FOR
Die FOR-Schleife wird nicht verlassen, da ui nicht größer als 10000 werden kann.
Ebenso ist der Inhalt der CheckRange-Funktionen bei der Verwendung von Inkrementationswerten in der FOR-Schleife zu beachten!