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:
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 de memoria.
Para obtener más información, consulte el capítulo Constantes BOOL.
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 |
Para obtener más información, consulte la descripción de constantes de números.
Para crear código IEC adecuado para los diferentes sistemas de destino, utilice los tipos de datos enteros independientes del destino __UXINT, __XINT y __XWORD. El compilador convierte estos tipos de datos en los tipos de datos estándar adecuados compatibles con el sistema de destino. Se admiten sistemas con registros de direcciones de 32 bits y 64 bits de ancho.
Se incluyen los siguientes operadores de conversión de tipo:
Tipos de datos independientes del destino |
En plataformas de 64 bits |
En plataformas de 32 bits |
---|---|---|
__UXINT |
ULINT |
UDINT |
__XINT |
LINT |
DINT |
__XWORD |
LWORD |
DWORD |
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 |
Ejemplo:
PROGRAM PLC_PRG
VAR
rMax: REAL := 3.402823E+38; // Largest number
rPosMin : REAL := 1.0E-44; // Smallest positive number
rNegMax: REAL := -1.0E-44; // Largest negative number
rMin: REAL := -3.402823E+38; // Smallest number
lrMax: LREAL := 1.7976931348623158E+308; // Largest number
lrPosMin : LREAL := 4.94065645841247E-324; // Smallest positve number
lNegMax: LREAL := -4.94065645841247E-324; // Largest negative number
lrMin: LREAL := -1.7976931348623158E+308; // Smallest number
END_VAR
Al asignar i1 := r1;
, se detecta 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).
Con EcoStruxure Machine Expert V2.2 y versiones posteriores, el tipo de datos STRING se puede codificar en formato Latin 1 o UTF-8. Para la interpretación de todo el proyecto en UTF-8, habilite el parámetro en el cuadro de diálogo . Para obtener más información, consulte Codificación UTF-8 en todo el proyecto.
{attribute 'monitoring_encoding' := 'UTF-8'}
a la declaración de una variable. Permite supervisar el contenido de la variable en la codificación UTF-8.
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 bytes 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 predeterminado de 80 bytes. 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.
Longitud de cadena:
Para la codificación Latin 1, 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.
Con la codificación UTF-8, un carácter puede tener una longitud de hasta cuatro bytes. La longitud de la cadena indica el número de bytes reservados para el STRING. Por tanto, ya no existe una relación 1:1 entre el número de caracteres y la longitud de la cadena en bytes.
Ejemplo de una declaración de cadena con 35 bytes:
str:STRING(35):='This is a String';
En general, la longitud de una cadena no está limitada. Cuando se ejecutan manipulaciones de cadenas con las funciones de la biblioteca Standard, se permiten cadenas de hasta una longitud de 255. Cuando se ejecutan manipulaciones de cadenas con las funciones de la biblioteca StringUtils, también se permiten cadenas más largas (>255 caracteres).
Cuando se reinicializa una variable del tipo de datos STRING al restablecer la aplicación, no se sobrescribe el contenido de la cadena antigua que existe después del carácter nulo de terminación del valor inicial. Esto se aplica tanto a la inicialización con el valor de inicialización como a la inicialización con el valor de inicialización predeterminado de 0.
Para obtener más información, consulte WSTRING y las constantes de STRING (operandos).
El tipo de datos WSTRING se diferencia del tipo STRING (ASCII) en la interpretación del formato Unicode y la necesidad de dos bytes para cada carácter y dos bytes de espacio adicional en memoria (frente a uno en ambos casos con STRING).
Los tipos de datos WSTRING se codifican como Unicode en formato UTF-16.
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 una 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:
Los tipos de datos TIME, TIME_OF_DAY (abreviado TOD), DATE y DATE_AND_TIME (abreviado DT) se gestionan internamente como DWORD. Los tipos de datos LDATE, LDATE_AND_TIME (LDT) y LTIME_OF_DAY (LTOD) se gestionan internamente como LWORD. El tiempo se indica en milisegundos en TIME y TOD. El tiempo en TOD comienza a las 0:00. El tiempo se indica en segundos en DATE y DT desde el 1 de enero de 1970 a las 0:00.
LTIME se admite como base de tiempo para 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 tal y como se utilizan con la constante TIME y en:
us: microsegundos
ns: nanosegundos
Ejemplo de LTIME:
LTIME1 := LTIME#1000d15h23m12s34ms2us44ns
Para obtener más información, consulte las siguientes descripciones:
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 |
– |
BYTE, WORD, DWORD, LWORD |
ANY_DATE |
– |
DATE_AND_TIME, DATE, TIME_OF_DAY, LDATE_AND_TIME, LDATE, LTIME_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 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.