EcoStruxure Machine Expert versión 1.1 no soporta los controladores M258, LMC058 y LMC078.

Tipos de subárea

Descripción general

Un tipo de subárea es un tipo definido por el usuario cuyo rango de valores es solo un subconjunto del tipo de rangos básico. También puede utilizar comprobaciones de límites implícitas.

Puede realizar la declaración en un objeto DUT pero también puede declarar la variable directamente con un tipo de subárea.

Sintaxis

Sintaxis para la declaración como un objeto DUT:

TYPE <name>: <Inttype> (<ug>..<og>) END_TYPE;

<name>

un identificador IEC válido

<inttype>

uno de los tipos de datos SINT, USINT, INT, UINT, DINT, UDINT, BYTE, WORD, DWORD (LINT, ULINT, LWORD)

<ug>

una constante compatible con el tipo básico, estableciendo el límite inferior de los tipos de rango

El propio límite inferior está incluido en este rango.

<og>

una constante compatible con el tipo básico, estableciendo el límite superior de los tipos de rango

El propio límite inferior está incluido en este tipo básico.

Ejemplo

TYPE
 SubInt : INT (-4095..4095);
END_TYPE

Declaración directa de una variable con un tipo de subárea

VAR
 i : INT (-4095..4095);
 ui : UINT (0..10000);
END_VAR

Si se asigna un valor a un tipo de subrango (en la declaración o en la implementación) pero no se corresponde con este rango (por ejemplo, i:=5000 en el ejemplo de declaración anterior), se mostrará un mensaje.

Funciones de verificación para límites de rango

Para observar los límites de rango de los tipos de subrango durante el tiempo de ejecución, deberán añadirse a la aplicación las funciones CheckRangeSigned, CheckLRangeSigned o CheckRangeUnsigned, CheckLRangeUnsigned. Para obtener información sobre cómo insertar la función, consulte la descripción de la función POUs para comprobaciones implícitas.

El propósito de esta función de verificación es el tratamiento correcto de las infracciones de la subárea (por ejemplo, estableciendo un indicador de error o modificando el valor). Se llama implícitamente a la función en cuanto se asigna una variable de tipo de subárea.

Warning_Color.gifADVERTENCIA

FUNCIONAMIENTO IMPREVISTO DEL EQUIPO

No modifique la parte de declaraciones de una función de verificación implícita.

El incumplimiento de estas instrucciones puede causar la muerte, lesiones serias o daño al equipo.

Ejemplo

La asignación de una variable perteneciente a un tipo de subrango con signo implica una llamada implícita a CheckRangeSigned. La implementación por defecto de esa función reduciendo un valor al rango permitido es la siguiente:

Parte de la declaración:

// Implicitly generated code : DO NOT EDIT
FUNCTION CheckRangeSigned : DINT
VAR_INPUT
value, lower, upper: DINT;
END_VAR

Parte de implementación:

// Implicitly generated code : Only an Implementation suggestion
IF (value < lower) THEN
CheckRangeSigned := lower;
ELSIF(value > upper) THEN
CheckRangeSigned := upper;
ELSE
CheckRangeSigned := value;
END_IF

Una vez llamada, la función obtiene los siguientes parámetros de entrada:

ovalue: el valor que se va a asignar al tipo de rango

olower: el límite inferior del rango

oupper: el límite superior del rango

Mientras el valor asignado permanezca dentro del rango válido, se utilizará como valor de retorno de la función. De lo contrario, como consecuencia de la infracción de rango, se devolverá el límite superior o inferior del rango de campo.

La asignación i:=10*y ahora se sustituirá implícitamente por

i := CheckRangeSigned(10*y, -4095, 4095);

Si y, por ejemplo, tiene el valor 1000, la variable i no se asignará a 10 * 1000 = 10 000 (como en la implementación original), sino al límite superior del rango, que es 4095.

Lo mismo se aplica a la función CheckRangeUnsigned.

NOTA: Si ninguna de las funciones está presente, no tendrá lugar ninguna verificación de tipo de subrango durante el tiempo de ejecución. En ese caso, puede asignar cualquier valor de DINT/UDINT a una variable de tipo de subrango DINT/UDINT. Puede asignar cualquier valor de LINT/ULINT a una variable de tipo de subrango LINT/ULINT.