Skip to main content

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.

. Cuando se llama a la función, recibe los siguientes parámetros de entrada:
  • value: Valor que se debe asignar a las variables de tipo subrango

  • lower: límite de rango inferior

  • upper: 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.

ejemplo 537. Ejemplo de un bucle infinito:
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.