POU: CheckLRageUnsigned
Funzione per il monitoraggio dei limiti di campo di un tipo di sottocampo di tipo ULINT
Per un esempio di implementazione del monitoraggio dell'intervallo, vedere la pagina della guida per il CheckRangeSigned
funzione.
Limiti dell'intervallo di monitoraggio
Questo funzione di monitoraggio è responsabile della gestione appropriata delle violazioni dei limiti di portata. Esempi di reazioni alle violazioni includono l'impostazione di flag di errore e la modifica dei valori. Le funzioni vengono chiamate implicitamente quando un valore viene assegnato a una variabile di tipo sottointervallo.
Attenzione
Per ottenere la funzionalità per le funzioni di monitoraggio, non modificare la parte della dichiarazione. Tuttavia, è consentito aggiungere variabili locali.
value
: Valore che deve essere assegnato alle variabili di tipo sottointervallolower
: Limite di portata inferioreupper
: Limite superiore dell'intervallo
Il valore restituito è il valore di assegnazione purché sia compreso nell'intervallo valido. In caso contrario, viene restituito il limite superiore o inferiore, a seconda della soglia violata.
Ad esempio, l'incarico i := 10*y
è sostituito implicitamente da i := CheckRangeSigned(10*y, -4095, 4095);
Se y
è "1000", quindi "10*1000=10000" non è assegnato a i
come nel codice originale. Viene invece assegnato il limite di intervallo superiore di "4095".
Lo stesso vale per CheckRangeUnsigned
funzione.
Importante
Se le funzioni non sono disponibili, il sottointervallo non viene verificato per le rispettive variabili in fase di esecuzione. In questo caso è possibile assegnare qualsiasi valore compreso tra -2147483648 e +2147483648 (o tra 0 e 4294967295) ad una variabile di tipo di sottointervallo DINT/UDINT. È possibile assegnare qualsiasi valore compreso tra -9223372036854775808 e +9223372036854775807 (o compreso tra 0 e 18446744073709551615) a una variabile di un tipo di sottointervallo LINT/ULINT.
Attenzione
Il collegamento delle funzioni di monitoraggio dell'area può portare a loop infiniti. Ad esempio, un ciclo infinito può verificarsi se la variabile contatore di un ciclo FOR è un tipo di sottointervallo e l'intervallo di conteggio per il ciclo esce dal sottointervallo definito.
VAR ui : UINT (0..10000); ... END_VAR
FOR ui:=0 TO 10000 DO ... END_FOR
Il programma non esce mai dal ciclo FOR perché il CheckRangeSigned
la funzione di monitoraggio impedisce ui
dall'essere impostato su un valore maggiore di 10000.