Tipos de datos estándar

 

Tipos de datos estándar

Descripción general

EcoStruxure Machine Expert admite todos los tipos de datos descritos en la norma IEC61131-3.

Los siguientes tipos de datos se describen en este capítulo:

oBOOL

oEntero

oREAL / LREAL

oSTRING

oWSTRING

oTipos de datos de tiempo (LTIME)

oANY y ANY_<type>

Asimismo, se admiten ciertos tipos de datos de extensión de la norma y el usuario puede definir sus propios tipos de datos definidos por el usuario.

BOOL

Las variables de tipo BOOL pueden tener los valores TRUE (1) y FALSE (0). Se reservan 8 bits de espacio en memoria.

Para obtener más información, consulte el capítulo constantes BOOL.

NOTA: Puede usar las comprobaciones implícitas para validar la conversión de los tipos de variable (consulte el capítulo POU para comprobaciones implícitas).

Entero

En esta tabla se enumeran los tipos de datos enteros disponibles. Cada uno de estos tipos abarca un rango distinto de valores. Se aplican las limitaciones de rango siguientes.

Tipo de datos

Límite inferior

Límite superior

Espacio en memoria

BYTE

0

255

8 bits

WORD

0

65,535

16 bits

DWORD

0

4,294,967,295

32 bits

LWORD

0

264-1

64 bits

SINT

–128

127

8 bits

USINT

0

255

8 bits

INT

–32,768

32,767

16 bits

UINT

0

65,535

16 bits

DINT

–2,147,483,648

2,147,483,647

32 bits

UDINT

0

4,294,967,295

32 bits

LINT

–263

263-1

64 bits

ULINT

0

264-1

64 bits

NOTA: Las conversiones desde tipos más grandes hasta tipos más pequeños pueden provocar una pérdida de información.

Para obtener más información, consulte la descripción de constantes de números.

NOTA: Puede usar las comprobaciones implícitas para validar la conversión de los tipos de variable (consulte el capítulo POU para comprobaciones implícitas).

REAL / LREAL

Los tipos de datos REAL y LREAL son tipos de coma flotante. Representan números racionales.

Características de los tipos de datos REAL y LREAL:

Tipo de datos

Límite inferior

Límite superior

Espacio en memoria

REAL

-3.402823e+38

3.402823e+38

32 bits

LREAL

-1.7976931348623158e+308

1.7976931348623158e+308

64 bits

NOTA: La compatibilidad del tipo de datos LREAL depende del dispositivo de destino. Consulte la documentación correspondiente para ver si el tipo de 64 bits LREAL se convierte a REAL durante la compilación (posiblemente con una pérdida de información) o se mantiene.

NOTA: Si un REAL o LREAL se convierte en SINT, USINT, INT, UINT, DINT, UDINT, LINT o ULINT y el valor del número real está fuera del rango de valores de ese entero, el resultado no estará indefinido y dependerá del sistema de destino. En este caso, incluso una excepción sería posible. Para obtener un código de destino/independiente, gestione cualquier exceso del rango mediante la aplicación. Si el número REAL/LREAL está dentro del rango de valores de entero, la conversión funcionará del mismo modo en todos los sistemas.

Al asignar i1 := r1;, se ha detectado un error. Por consiguiente, la nota anterior se aplica cuando se utilizan operadores de conversión como el siguiente:

i1 := REAL_TO_INT(r1);

Para obtener más información, consulte Constantes REAL/LREAL (operandos).

NOTA: Puede usar las comprobaciones implícitas para validar la conversión de los tipos de variable (consulte el capítulo POU para comprobaciones implícitas).

STRING

Una variable de tipo de datos STRING puede contener cualquier cadena de caracteres. La entrada del tamaño en la declaración determina el espacio en memoria que se reserva para la variable. Hace referencia al número de caracteres de la cadena y se puede poner entre paréntesis o corchetes. Si no se especifica nada con respecto al tamaño, se usará el tamaño predefinido de 80 caracteres.

En general, la longitud de una cadena no está limitada. Sin embargo, las funciones de la cadena solo pueden procesar cadenas con una longitud de entre 1 y 255 caracteres. Si se inicializa una variable con una cadena demasiado larga para el tipo de datos de la variable, la cadena se acortará como corresponda de derecha a izquierda.

NOTA: El espacio en memoria necesario para una variable de tipo STRING es de 1 byte por carácter más 1 byte adicional. Es decir, la declaración "STRING[80]" requiere 81 bytes.

Ejemplo de una declaración de cadena con 35 caracteres:

str:STRING(35):='This is a String';

Para obtener más información, consulte WSTRING y Constantes de STRING (operandos).

NOTA: Puede usar las comprobaciones implícitas para validar la conversión de los tipos de variable (consulte el capítulo POU para comprobaciones implícitas).

WSTRING

El tipo de datos WSTRING se diferencia del tipo STRING (ASCII) en la interpretación de formato Unicode y la necesidad de dos bytes para cada carácter y dos bytes de espacio adicional de memoria (frente a uno en ambos casos con STRING).

La biblioteca standard64.lib incluye funciones para cadenas WSTRING.

El número de caracteres de WSTRING dependerá de los caracteres incluidos. Un tamaño de WSTRING de 10 significa que la longitud de WSTRING puede admitir como máximo 10 WORDS. Para determinados caracteres en Unicode, se necesitan varias WORDS para codificar un carácter, por lo que el número de caracteres no tiene que corresponderse con la longitud de la WSTRING (10 en este caso). El tipo de datos requiere una WORD de memoria adicional, ya que termina con un 0.

Si no se define un tamaño, se asignarán 80 WORDS más uno para el carácter de terminación 0.

Ejemplos:

wstr:WSTRING:="This is a WString";

wstr10 : WSTRING(10) := "1234567890";

Para obtener más información, consulte las siguientes descripciones:

oSTRING

oConstantes STRING (operandos)

Tipos de datos de tiempo

Los tipos de datos TIME, TIME_OF_DAY (abreviado TOD), DATE y DATE_AND_TIME (abreviado DT) se gestionan internamente como DWORD. El tiempo se indica en milisegundos enTIME y TOD El tiempo en TOD comienza a las 12 a. m. El tiempo se indica en segundos en DATE y DT desde el 1 de enero de 1970 a las 12 a. m.

LTIME

LTIME se admite como referencia de tiempo para los temporizadores de alta resolución. LTIME tiene un tamaño de 64 bits y una resolución de nanosegundos.

Sintaxis de LTIME:

LTIME#<declaración de tiempo>

La declaración de tiempo puede incluir las unidades de tiempo como se utilizan con la constante TIME y como:

ous : microsegundos

ons : nanosegundos

Ejemplo de LTIME:

LTIME1 := LTIME#1000d15h23m12s34ms2us44ns

Comparar con TIME de 32 bits y resolución de milisegundos.

Para obtener más información, consulte las siguientes descripciones:

oTipos de datos

oTIMEconstants

oDATEconstants

oDATE_AND_TIME constants

oTIME_OF_DAY constants

NOTA: Puede usar las comprobaciones implícitas para validar la conversión de los tipos de variable (consulte el capítulo POU para comprobaciones implícitas).

ANY / ANY_<type>

Cuando implemente una función y una de las entradas de la función (VAR_INPUT) tenga un tipo de datos IEC genérico (ANY o ANY_<type>)), el tipo de datos del parámetro de llamada no se definirá como exclusivo. Es posible transmitir las variables de diferentes tipos de datos a esta función. El valor transmitido y su tipo pueden solicitarse en la función a través de una estructura predefinida.

Tipos de datos IEC genéricos que permiten el uso de tipos de datos elementales para las entradas de funciones:

Jerarquía de tipos de datos genéricos

Tipos de datos elementales

ANY

ANY_BIT

BOOL, BYTE, WORD, DWORD, LWORD

ANY_DATE

DATE_AND_TIME, DATE, TIME_OF_DAY

ANY_NUM

ANY_REAL

REAL, LREAL

ANY_INT

USINT, UINT, UDINT, ULINT

SINT, INT, DINT, LINT

ANY_STRING

STRING, WSTRING

Ejemplo:

FUNCTION ANYBIT_TO_BCD : DWORD
   VAR_INPUT
      value : ANY_BIT;
   END_VAR

Si se llama la función ANYBIT_TO_BCD, podrá transmitirse a la función una variable de tipo de datos BOOL, BYTE, WORD, DWORD o LWORD en forma de parámetro.

Estructura predefinida:

Al compilar el código, se sustituirá internamente un tipo de datos ANY por la siguiente estructura:

TYPE AnyType :
STRUCT
        // the type of the actual parameter
    typeclass : __SYSTEM.TYPE_CLASS ;
        // the pointer to the actual parameter
    pvalue : POINTER TO BYTE;
        // the size of the data, to which the pointer points
    diSize : DINT;
END_STRUCT
END_TYPE

El parámetro de llamada en cuestión asigna los elementos de la estructura en el tiempo de ejecución.

Ejemplo:

En este ejemplo de código se compara si las dos variables transmitidas tienen el mismo tipo y el mismo valor.

FUNCTION Generic_Compare : BOOL
VAR_INPUT
    any1 : ANY;
    any2 : ANY;
END_VAR
VAR
    icount: DINT;
END_VAR

Generic_Compare := FALSE;
IF any1.typeclass <> any2.typeclass THEN
    RETURN;
END_IF
IF any1.diSize <> any2.diSize THEN
    RETURN;
END_IF
// Byte comparison
FOR icount := 0 TO any1.diSize-1 DO
    IF any1.pvalue[iCount] <> any2.pvalue[iCount] THEN
        RETURN;
    END_IF
END_FOR
Generic_Compare := TRUE;
RETURN;
// END_FUNCTION

Consulte también la descripción del operador __VARINFO.