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
oTipos de datos de tiempo (LTIME)
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.
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).
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).
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).
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).
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:
oConstantes STRING (operandos)
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:
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).
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.