POU: CheckLRangeUnsigned
Función para monitorear los límites de rango de un tipo de subrango de tipo ULINT
Para ver un ejemplo de implementación de monitoreo de rango, vea la página de ayuda para el ComprobarRangoFirmado
función.
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.