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 en 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.
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 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).
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 predeterminado 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.
"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).
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 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:
STRING Constantes Constantes de cadena (operandos)
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. La hora se da en milisegundos en TIME y TOD. La hora en TOD comienza a las 12 a. m. La hora se indica en segundos en DATE y DT desde el 1 de enero de 1970 a las 12 a. m.
LTIME se admite como referencia de hora 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 hora>
La declaración de hora puede incluir las unidades de hora como se utilizan con la constante TIME y como:
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.