Skip to main content

POU: CheckLRangeSigned

Funktion zur Überwachung der Bereichsgrenzen eines Unterbereichstypen vom Typ LINT

Für ein Implementierungsbeispiel einer Bereichsüberwachung sehen Sie die Hilfeseite zur Funktion CheckRangeSigned.

Bereichsgrenzen überwachen

Aufgabe dieser Überwachungsfunktion ist eine angemessene Behandlung von Verletzungen der Bereichsgrenzen. Eine Reaktion auf eine Verletzung kann beispielsweise das Setzen eines Error-Flags oder das Verändern eines Wertes sein. Der Aufruf der Funktionen erfolgt implizit bei der Zuweisung eines Wertes an eine Variable vom Unterbereichstyp.

Achtung

Um die Funktionalität der Überwachungsfunktionen zu erhalten, dürfen Sie den Deklarationsteil nicht verändern. Als einzige Ausnahme dürfen Sie lokale Variablen hinzufügen.

. Beim Aufruf werden der Funktion folgende Eingangsparameter übergeben:
  • value:  Wert der der Variablen vom Unterbereichstyp zugewiesen werden soll

  • lower:  Bereichsuntergrenze

  • upper:  Bereichsobergrenze

Rückgabewert ist der Zuweisungswert selbst, sofern sich dieser im gültigen Bereich befindet. Ansonsten wird je nach Verletzung des Unterbereichs seine Ober- oder  Untergrenze zurückgegeben.

Die Zuweisung i:=10*y wird nun implizit ersetzt durch i := CheckRangeSigned(10*y, -4095, 4095);

Hat y beispielsweise den Wert „1000“, so wird der Variablen i nicht wie im ursprünglichem Code vorgesehen der Wert „10*1000=10000“ zugewiesen, sondern der Wert der Bereichsobergrenze, also  „4095“.

Dasselbe gilt für die Funktion CheckRangeUnsigned.

Wichtig

Steht Ihnen keine Funktion zur Bereichsüberwachung zur Verfügung,  so erfolgt während der Laufzeit keine Überprüfung des Unterbereichs bei entsprechenden Variablen! In diesem Fall können Sie einer Variablen eines Unterbereichtyps von DINT/UDINT jeden Wert zwischen -2147483648 und +2147483648 beziehungsweise zwischen 0 und 4294967295 zuweisen! Einer Variablen eines Unterbereichtyps von LINT/ULINT können Sie dann jeden Wert zwischen – 9223372036854775808 und +9223372036854775807 beziehungsweise zwischen 0 und18446744073709551615 zuweisen!

Achtung

Wenn Sie Bereichsüberwachungsfunktionen einbinden, können Endlosschleifen entstehen. Dies ist beispielsweise der Fall, wenn die Zählvariable einer FOR-Schleife vom Unterbereichstyp ist und der Zählbereich der Schleife den definierten Unterbereich verlässt !

Beispiel 535. Beispiel einer Endlosschleife:
VAR
        ui : UINT (0..10000);
 ...
END_VAR
FOR ui:=0 TO 10000 DO
        ...
END_FOR

Das Programm verlässt niemals die FOR-Schleife, da die Überwachungsfunktion CheckRangeSigned verhindert, dass ui auf einen Wert größer als 10000 gesetzt wird.