Skip to main content

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.

. 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 533. 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.



ejemplo 534. Ejemplo para CheckRangeSigned

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