# Tipo de datos

Hay dos tipos de variables.

- Variables básicas
  Una variable que almacena un valor.
- Variables de tipo de datos del usuario
  Una variable que puede almacenar múltiples valores (múltiples variables manejadas como una sola variable).

Nota:

- Para más información sobre la operación cuando el valor (valor de entrada) almacenado en la variable está fuera del rango de entrada (valor mínimo/máximo), véase lo siguiente.
  Operación cuando el valor de entrada está fuera del rango de entrada

## Variables básicas

La siguiente es una lista de los tipos de variables básicas.

Tipo de datos | Descripción
BOOL | Esta variable almacena 0 o 1.
SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE | Estas variables almacenan valores integrales. El procesamiento es más rápido en comparación con las variables de tipo punto flotante.
WORD, DWORD, LWORD | Estas variables almacenan valores de tipo palabra.
STRING, WSTRING | Estas variables almacenan cadenas de texto.
REAL, LREAL | Estas variables almacenan valores de punto flotante. Las variables REAL pueden almacenar valores mayores (como cálculos y constantes) que las variables de tipo entero.
TIME, DATE, TIME_OF_DAY, DATE_AND_TIME | Estas variables almacenan los valores de fecha y hora.

### SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE

Tipo de datos | Con signo | Longitud de los datos | Intervalo de datos
SINT | Complemento a 2's | 8 bits | -128...127
USINT | - | 8 bits | 0...255
INT | Complemento a 2's | 16 bits | -32768...32767
UINT | - | 16 bits | 0...65535
DINT | Complemento a 2's | 32 bits | -2147483648...2147483647
UDINT | - | 32 bits | 0...4.294.967.295
LINT | Complemento a 2's | 64 bits | -9.223.372.036.854.775.808...9.223.372.036.854.775.807
ULINT | - | 64 bits | 0...18.446.744.073.709.551.615
BYTE | - | 8 bits | 0...255

### WORD, DWORD, LWORD

Tipo de datos | Longitud de los datos | Intervalo de datos
WORD | 16 bits | 0...65.535
DWORD | 32 bits | 0...4.294.967.295
LWORD | 64 bits | 0...18.446.744.073.709.551.615

### STRING, WSTRING

Tipo de datos | Descripción
STRING | Almacena hasta 512 bytes de texto. Cuando se utiliza una variable externa, la codificación de las cadenas se define mediante la propiedad [Código de cadena] de la variable. Los valores de codificación de cadenas disponibles son: UTF8, UTF16, ShiftJIS, Code Page850, GB2312, BIG5, KSC5601, CodePage1251, CodePage874, and CodePage1252. Nota: También puede configurar la codificación de las cadenas en las propiedades del equipo. El ajuste de la propiedad variable tiene prioridad sobre la propiedad del equipo. En la propiedad [Código de cadena] de la variable, seleccione [Tipo de configuración del equipo] para aplicar el ajuste de codificación de cadenas del equipo. La propiedad [Código de cadena] sólo se muestra cuando el controlador admite la codificación de cadenas.
WSTRING | Almacena hasta 512 palabras de texto de doble byte. Sólo puede utilizar el tipo de datos WSTRING con variables externas. La codificación de cadenas está fijada como UTF16. No se puede cambiar la configuración [Código de cadena] en las propiedades de la variable, y se ignora la codificación en las propiedades del equipo.

Nota:

- Puede definir el número de bytes o palabras que puede almacenar variable en la propiedad [Número de bytes/palabras].

- Reconoce el final de la cadena de texto con un NULL (0x00) o [Número de bytes].

- Para una variable o dispositivo seleccionado, si utiliza un texto cuyo código de caracteres no puede ser convertido por el [Código de cadena], el final de la cadena se reconoce por el código de caracteres.

- La relación de orden alto/bajo para los datos de palabra depende del [Modo cadena] en el controlador seleccionado.

### REAL, LREAL

Tipo de datos | Longitud de los datos | Intervalo de datos
REAL | 32 bits | +/-3,402823E38 ... +/-1,1754944E-38
LREAL | 64 bits | +/-4,19E-307 ... +/-1,67E308

Nota:

- La precisión de las variables REAL está limitada a siete dígitos. Si se requiere precisión en los datos (como en las operaciones de comparación), utilice variables enteras.
  Ejemplos
  Ejemplo 1: Para el valor 1.2345678, el valor resultante es aproximado, ya que se elimina el octavo dígito (después de 1.234567).
  Ejemplo 2: El valor 0.1 almacenado en una variable REAL podría dar como resultado 0.1000000014901161.

- Cuando use variables REAL externas, asegúrese de que el valor Orden de doble palabra de la Configuración del dispositivo coincida con el del equipo. Si el valor no coincide, los valores de las variables REAL externas no se mostrarán correctamente.

- Utilice el punto (.) para el punto decimal del valor de la variable. La coma (,) no es compatible con los puntos decimales.
  Aunque se utilice la coma (,) para el punto decimal del valor de la variable en el software de edición de pantallas o en la unidad de visualización, se producen resultados inesperados, como que se muestra un error, se ignora la coma, etc.

### TIME, DATE, TIME_OF_DAY, DATE_AND_TIME

Tipo de datos | Descripción | Intervalo de datos
TIME | Almacena el tiempo transcurrido en días y hora. | - 24 d 20 h 31 m 23 s 648 ms ... 24 d 20 h 31 m 23 s 647 ms Nota: Cuando se establece un valor negativo para las propiedades [Valor inicial] y [Rango de entrada] en una variable de TIEMPO, se mostrará el signo negativo para cada unidad de tiempo. (Ejemplo: -24d -20:-31:-23.-648)
DATE | Almacena la fecha. | Cuando se utiliza la Serie SP5000 Open Box (Windows 10 IoT Enterprise Model), la Serie IPC o el PC/AT 1970/01/01 ... 2106/02/07 Modelos distintos a los anteriores 1970/01/01 ... 2038/01/19
TIME_OF_DAY | Guarda la hora. | 00:00:00 ... 23:59:59
DATE_AND_TIME | Combina DATE y TIME_OF_DAY. | Cuando se utiliza la Serie SP5000 Open Box (Windows 10 IoT Enterprise Model), la Serie IPC o el PC/AT 1970/01/01 00:00:00 UTC ... 2106/02/07 06:28:15 UTC Modelos distintos a los anteriores 1970/01/01 00:00:00 UTC ... 2038/01/19 03:14:07 UTC

Nota:

- Cuando utilice estas variables, haga coincidir los tipos de datos en el dispositivo externo con el valor de los datos almacenados.
  Si ha introducido un valor que no está en el rango de la dirección del dispositivo externo, el valor introducido se muestra en la pantalla, pero no se establece en la dirección del dispositivo externo.

- Cuando asocia las variables con diferentes tipos de datos, a veces el valor de la variable de origen se sobrescribe con un valor de resultado común.

  Por ejemplo, convertir una variable Real en una variable Entera: Poner 123.4 en una variable REAL, luego escribir el valor en una variable INT y el resultado es 123. El valor de la variable REAL también se actualiza a 123.

- Cuando se introduce un valor entero en la variable DATE_AND_TIME desde un dispositivo externo, el valor almacenado se desplaza según la zona horaria de la unidad de visualización. Por lo tanto, para la entrada de valores enteros, la fecha y la hora mostradas por un visualizador de fecha/hora difieren en función del huso horaria.

La Serie SP5000 Open Box (Windows 10 IoT Enterprise Model), la Serie IPC, o PC/AT

Entrada de valor entero desde dispositivo externo | UTC+0 (Intervalo: 1970/01/01 00:00:00 ... 2106/02/07 06:28:15) | UTC+9 (Intervalo: 1970/01/01 09:00:00 ... 2106/02/07 15:28:15)
0 | 1970/01/01 00:00:00 | 2106/02/07 06:28:16
1 | 1970/01/01 00:00:01 | 2106/02/07 06:28:17
: | : | :
32399 | 1970/01/01 08:59:59 | 2106/02/07 15:28:15
32400 | 1970/01/01 09:00:00 | 1970/01/01 09:00:00
: | : | :
4294967295 | 2106/02/07 06:28:15 | 2106/02/07 06:28:15

Modelos distintos a los anteriores

Entrada de valor entero desde dispositivo externo | UTC+0 (Intervalo: 1970/01/01 00:00:00 ... 2038/01/19 03:14:07) | UTC+9 (Intervalo: 1970/01/01 09:00:00 ... 2038/01/19 12:14:07)
0 | 1970/01/01 00:00:00 | 2038/01/19 03:14:08
1 | 1970/01/01 00:00:01 | 2038/01/19 03:14:09
: | : | :
32399 | 1970/01/01 08:59:59 | 2038/01/19 12:14:07
32400 | 1970/01/01 09:00:00 | 1970/01/01 09:00:00
: | : | :
2147483647 | 2038/01/19 03:14:07 | 2038/01/19 03:14:07

## Variables de los tipos de datos de usuario

Los siguientes son los tipos de variables del tipo de datos de usuario.

- Variables de matriz
  Utilice una única variable para manejar múltiples variables del mismo tipo de datos.
- Variables de estructura
  Utilice una única variable para manejar múltiples variables de distintos tipos de datos.

Nota: los marcadores de la matriz y los marcadores de la estructura también se cuentan como variables.

### Variables de matriz

Una matriz es un conjunto de variables con el mismo tipo de datos. Cada variable en una matriz es llamada elemento.

Para entender cómo funciona una variable de matriz, imagínese que la variable es una caja. Tal como se muestra en el diagrama siguiente, la variable Número es un sólo cuadro que contiene un valor.

Considere cada matriz una fila de cuadros con un número asociado a cada cuadro. En el siguiente diagrama, la variable de matriz Número contiene 5 elementos 0-4. Los valores de las variables se almacenan en cada una de las 5 casillas.

Para especificar cada variable en una matriz, especifique el nombre de la variable seguido del número de elemento entre corchetes [ ].

(Ejemplo) Matriz con 5 elementos

El número de elemento suele empezar por 0, pero también puede empezar por un valor positivo o negativo.

Ejemplo: Matriz que comienza con el número de elemento -1 con 5 elementos

Una matriz multidimensional es una matriz que contiene otras matrices. Por ejemplo, una matriz que contiene dos matrices DINT es una matriz bidimensional.

#### Número de elementos en cada dimensión y configuración de dimensiones

En la ventana [Explorador de proyectos], desde [Variables] → [Todos los tipos de datos del usuario] → [Matrices], en la columna [Dimensión], configure tanto la dimensión de la matriz como el número de elementos.

Para los pasos en el diseño de una matriz, consulte lo siguiente.

Pasos para diseñar (Variables, Matriz, Estructura)

Para una matriz unidimensional, especifique solamente los elementos en la matriz.

(Ejemplo) Para una matriz unidimensional con número de elementos = 3, introduzca "3".

Para una matriz multidimensional, en el campo [Dimensión], especifique el número de elementos en cada dimensión, separados por una coma (,).

Ejemplo: Para una matriz bidimensional donde la primera dimensión tiene 3 elementos (número de inicio = 0) y la segunda dimensión tiene 4 elementos (número de inicio = 0), ingrese '3,4'.

Esta definición de matriz se utiliza para crear la variable de matriz Var1, como se muestra a continuación.

Nota: Para establecer el número de inicio de un elemento en un valor distinto de 0, en lugar del número de elementos, introduzca el número de inicio y el número del último elemento separados por dos puntos (..), y el campo [Número de elementos] calculará el número total de elementos.

(Ejemplo) Para configurar una matriz bidimensional donde la primera dimensión tiene 3 elementos comenzando desde el elemento 0, y la segunda dimensión tiene 4 elementos comenzando desde el elemento 3, ingrese "3,3..6".

Después de la entrada, "3..6" se convierte en 4 elementos, y su dimensión de matriz comienza a partir del elemento número 3.

Esta matriz crea la variable de matriz Var1, que se muestra a continuación.

#### Direccionamiento indirecto de matrices

El direccionamiento indirecto es la forma más rápida de acceder a un valor de variable de un rango de valores consecutivos en una matriz, ya que se minimiza el consumo de memoria y el valor se actualiza en cuestión de milisegundos.

Para el direccionamiento indirecto de matrices, especifique el número de elemento de la matriz a través del valor de una variable o el valor de propiedad de un objeto para especificar dinámicamente el elemento de una matriz.

- Para especificar indirectamente a través del valor de una variable:
  ingrese "(Nombre de la variable).Value" entre los corchetes [] que especifican el número de elemento de la matriz.
  (Ejemplo) Var2[Var1.Value].Value: Este es el valor de la variable de matriz Var2 cuyo número de elemento de matriz se especifica indirectamente usando el valor de la variable Var1.
- Para especificar indirectamente a través del valor de propiedad de un objeto:
  Introduzca "$GraphicalObject" seguido de '(nombre del objeto).(nombre de la propiedad)' entre los corchetes [] que especifican el número de elemento de la matriz.
  (Ejemplo) Var2[$GraphicalObject.NumericDisplay1.CurrentValue].Value: Este es el valor de la variable de matriz Var2 uyo número de elemento de matriz se especifica indirectamente usando el Valor Actual de un objeto de visualización numérica, Numeric Display1.

Nota:

Cuando un número de elemento de una matriz indirectamente con el valor de propiedad de un objeto, ingrese "$GraphicalObject" antes del nombre del objeto.
Dependiendo de la función de ayuda a la entrada, después de escribir "$" en el campo de propiedad de entrada o fuente, en la lista de opciones puede seleccionar "$GraphicalObject" para introducir la cadena fácilmente.

El direccionamiento indirecto de una matriz es compatible con los elementos siguientes:

- Se puede utilizar en el convertidor de [Expresión].
  (Ejemplo: Array11[DINT1.value+2], Array21[Int2[Int3[Int1+1]]], Array31[Int1*4-(Int2+Int4/4)])

- Se admite un máximo de cinco niveles de anidación para todos los tipos de datos de variables.
  (Ejemplo: Array11[Array22[DINT1.value],DINT02.value])

### Variables de estructura

Una estructura es una variable que almacena una colección de otras variables. Cada variable en una estructura es llamada elemento. Un elemento puede ser de cualquier tipo de datos.

Puede crear una estructura anidada agregando como elemento otra estructura o una matriz.

Considere a una estructura como un grupo de cuadros con un elemento asociado a cada cuadro.

En el siguiente diagrama, la variable de estructura DATA contiene 3 elementos. Los valores de las variables se almacenan en cada una de las 3 casillas.

## Operación cuando el valor de entrada está fuera del rango de entrada

Cuando el valor a almacenar en la variable está fuera del rango (valor mínimo/máximo), el valor se trata de la siguiente manera.

- Cuando se supera el valor en el dispositivo externo
- Cuando se supera el valor con una operación de Cambio de valor [Loop]
- Cuando se supera el valor con una operación de Cambio de valor [Stop]
- Cuando se supera el valor con una operación [Set] de Cambio de valor, un valor especificado de manera indirecta, o una operación de convertidor de expresiones
- Cuando se supera el valor con una receta

Nota:

- Para más información sobre las operaciones de Cambio de valor , véase Cambio de valor.

### Cuando se supera el valor en el dispositivo externo

Tipo de datos | Descripción
STRING, WSTRING | Almacena los caracteres que pueden caber.
Aparte de lo anterior | El valor de la parte que excede el rango de entrada se vuelve a contar desde la parte inferior del rango de entrada y se almacena. Ejemplo) Variable de 8 bits sin signo (rango de valores: 0...255) Ejemplo 1: si intenta almacenar 256, se almacena 0 en la variable. (Al superar el límite superior en 1, se almacena el valor del límite inferior de 0) Ejemplo 2: si intenta almacenar 257, se almacena 1 en la variable. (Al superar el límite superior en 2, se almacena el segundo valor del límite inferior de 1)

### Cuando se supera el valor con una operación de Cambio de valor [Loop]

El valor de la parte que excede el rango de entrada se vuelve a contar desde la parte inferior del rango de entrada y se almacena.

(Ejemplo): Variable de 8 bits sin signo (rango de valores: 0...255)

Ejemplo 1: si intenta almacenar 256, se almacena 0 en la variable. (Al superar el límite superior en 1, se almacena el valor del límite inferior de 0)

Ejemplo 2: si intenta almacenar 257, se almacena 1 en la variable. (Al superar el límite superior en 2, se almacena el segundo valor del límite inferior de 1)

### Cuando se supera el valor con una operación de Cambio de valor [Stop]

Tipo de datos | Descripción
STRING, WSTRING | Almacena los caracteres que pueden caber.
Aparte de lo anterior | Los siguientes se redondean al valor superior o inferior. BOOL 1/0 SINT 127/-128 USINT, BYTE 255/0 INT 32767/-32768 UINT, WORD 65535/0 DINT 2147483647/-2147483648 UDINT, DWORD 4294967295/0 LINT 9223372036854775807/-9223372036854775808 ULINT, LWORD 18446744073709551615/0 REAL, LREAL Difiere según la configuración de la propiedad. TIME 2147483647/-2147483648 DATE/TIME_OF_DAY, DATE_AND_TIME 4294967295/0

### Cuando se supera el valor con una operación [Set] de Cambio de valor, un valor especificado de manera indirecta, o una operación de convertidor de expresiones

El valor no se almacena.

### Cuando se supera el valor con una receta

Tipo de datos | Descripción
BOOL, REAL, LREAL | El valor no se almacena.
LINT, ULINT, LWORD | Los siguientes se redondean al valor superior o inferior. LINT 9223372036854775807/-9223372036854775808 ULINT, LWORD 18446744073709551615/0
STRING, WSTRING | Almacena los caracteres que pueden caber.
Aparte de lo anterior | El valor de la parte que excede el rango de entrada se vuelve a contar desde la parte inferior del rango de entrada y se almacena. (Ejemplo): Variable de 8 bits sin signo (rango de valores: 0...255) Ejemplo 1: si intenta almacenar 256, se almacena 0 en la variable. (Al superar el límite superior en 1, se almacena el valor del límite inferior de 0) Ejemplo 2: si intenta almacenar 257, se almacena 1 en la variable. (Al superar el límite superior en 2, se almacena el segundo valor del límite inferior de 1)