POU: CheckRangeFirmado
Función para monitorear los límites de rango de un tipo de subrango de tipo DINT
Límites del rango de monitoreo
Esta función de vigilancia es responsable del manejo adecuado de las violaciones a los límites del rango. Los ejemplos de reacciones a las violaciones incluyen la configuración de indicadores de error y el cambio de valores. Las funciones se llaman implícitamente cuando se asigna un valor a una variable de tipo subrango.
Atención
Para obtener la función de supervisión de funciones, no edite la parte de la declaración. Sin embargo, se le permite agregar variables locales.
value
: Valor que se debe asignar a las variables de tipo subrangolower
: límite de rango inferiorupper
: Límite de rango superior
El valor devuelto es el valor de asignación siempre que esté dentro del rango válido. De lo contrario, se devuelve el límite superior o el inferior, según el umbral que se violó.
Por ejemplo, la asignación i := 10*y
se sustituye implícitamente por i := CheckRangeSigned(10*y, -4095, 4095);
Si y
es "1000", entonces "10*1000=10000" no está asignado a i
como en el código original. En su lugar, se asigna el límite de rango superior de "4095".
Lo mismo es cierto para CheckRangeUnsigned
función.
Importante
Si las funciones no están disponibles, entonces el subrango no se verifica para las variables respectivas en el tiempo de ejecución. En este caso, puede asignar cualquier valor entre -2147483648 y +2147483648 (o entre 0 y 4294967295) a una variable de tipo subrango DINT/UDINT. Puede asignar cualquier valor entre -9223372036854775808 y +9223372036854775807 (o entre 0 y 18446744073709551615) a una variable de tipo subrango LINT/ULINT.
Atención
La vinculación de las funciones de supervisión del área puede dar lugar a bucles infinitos. Por ejemplo, puede ocurrir un bucle infinito si la variable de contador de un bucle FOR es un tipo de subrango y el rango de conteo del bucle sale del subrango definido.
VAR ui : UINT (0..10000); ... END_VAR
FOR ui:=0 TO 10000 DO ... END_FOR
El programa nunca sale del bucle FOR porque el CheckRangeSigned
la función de vigilancia evita ui
se establezca en un valor superior a 10000.
La asignación de un valor a una variable DINT de tipo subrango con signo es una condición para llamar automáticamente al CheckRangeSigned
. La función restringe el valor de asignación al subrango como se define en la declaración de variables. La implementación predeterminada de la función en ST es la siguiente:
Parte de la declaración:
// Automatisch erzeugter Code : NICHT EDITIEREN FUNCTION CheckRangeSigned : DINT VAR_INPUT value, lower, upper: DINT; END_VAR
Implementación:
// Automatisch erzeugter Code : Es handelt sich hierbei um einen Implementierungsvorschlag. IF (value < lower) THEN CheckRangeSigned := lower; ELSEIF(value > upper) THEN CheckRangeSigned := upper; ELSE CheckRangeSigned := value; END_VAR