# Tipo de dados

Existem dois tipos de variáveis.

- Variáveis básicas
  Uma variável que armazena um valor.
- Variáveis de tipos de dados de usuário
  Uma variável que pode armazenar vários valores (várias variáveis tratadas como uma única variável).

Observação:

- Para operação quando o valor (valor de entrada) armazenado na variável estiver fora da faixa de entrada (valor mínimo/máximo), consulte o seguinte.
  Operação quando o valor de entrada está fora da faixa de entrada

## Variáveis básicas

A seguir está uma lista dos tipos de variáveis básicas.

Tipo de dados | Descrição
BOOL | Esta variável armazena 0 ou 1.
SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE | Estas variáveis armazenam valores integrais. O processamento é mais rápido em comparação com variáveis do tipo ponto flutuante.
WORD, DWORD, LWORD | Estas variáveis armazenam valores do tipo word.
STRING, WSTRING | Estas variáveis armazenam segmento de texto.
REAL, LREAL | Estas variáveis armazenam valores de ponto flutuante. Variáveis REAIS podem armazenar valores maiores (como cálculos e constantes) do que variáveis do tipo integer.
HORA, DATA, HORA_DO_DIA, DATA_E_HORA | Estas variáveis armazenam valores de hora e data.

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

Tipo de dados | Sinalizado | Comprimento de dados | Intervalo de dados
SINT | Complemento de 2 | 8 bits | -128...127
USINT | - | 8 bits | 0...255
INT | Complemento de 2 | 16 bits | -32768...32767
UINT | - | 16 bits | 0...65535
DINT | Complemento de 2 | 32 bits | -2147483648...2147483647
UDINT | - | 32 bits | 0...4.294.967.295
LINT | Complemento de 2 | 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 dados | Comprimento de dados | Intervalo de dados
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 dados | Descrição
STRING | Armazena até 512 bytes de texto. Ao utilizar uma variável externa, a codificação de strings é definida pela propriedade [Codificação de strings] da variável. Os valores disponíveis da codificação de strings são: UTF8, UTF16, ShiftJIS, Página de código850, GB2312, BIG5, KSC5601, Página de código1251, Página de código874 e Página de código1252. Observação: Você também pode configurar a codificação de strings nas propriedades do equipamento. A configuração da propriedade da variável tem prioridade sobre a propriedade do equipamento. Na propriedade [Codificação de strings] da variável, selecione [Tipo de configuração do equipamento] para aplicar a configuração de codificação de strings do equipamento. A propriedade [Codificação de strings] é exibida somente quando o driver suporta a codificação de strings.
WSTRING | Armazena até 512 words de texto de byte-duplo. Você pode usar tipo de dados WSTRING somente com variáveis externas. A codificação de strings é fixada como UTF16. Não se pode alterar a configuração [Codificação de strings] nas propriedades das variáveis, e a codificação nas propriedades do equipamento é ignorada.

Observação:

- Você pode definir o número de bytes ou words que a variável pode armazenar em [Número de bytes/palavras].

- Reconhece o final do segmento de texto com um NULL (0x00) ou [Número de bytes].

- Para uma variável ou driver selecionado, se você usar um texto cujo código de caracteres não pode ser convertido pela [Codificação de strings], então o fim da string é reconhecido pelo código de caracteres.

- A relação de ordem alta/baixa para dados de palavras depende de [Modo String] no driver selecionado.

### REAL, LREAL

Tipo de dados | Comprimento de dados | Intervalo de dados
REAL | 32 bits | +/-3.402823E38 ... +/-1.1754944E-38
LREAL | 64 bits | +/-4.19E-307 ... +/-1.67E308

Observação:

- A precisão das variáveis REAIS é limitada a sete dígitos. Se a precisão dos dados for necessária (como operações de comparação), use variáveis inteiras.
  Exemplos
  Exemplo 1: Para o valor 1.2345678, o valor resultante é aproximado, pois o oitavo dígito é descartado (após 1.234567).
  Exemplo 2: O valor 0.1 armazenado em uma variável REAL poderia resultar em 0.1000000014901161.

- Ao utilizar variáveis externas REAL, certifique-se de que a configuração Ordem Double Word na Configuração do dispositivo corresponde à configuração no equipamento. Se as configurações não corresponderem, os valores das variáveis externas REAL não serão exibidos corretamente.

- Usar período (.) para o ponto decimal do valor da variável. A vírgula (,) não é suportada para os pontos decimais.
  Mesmo que a vírgula (,) seja usada para o ponto decimal do valor da variável no software de edição de tela ou na unidade de display, resultados inesperados, como aquele erro é mostrado, a vírgula é ignorada ou assim por diante.

### HORA, DATA, HORA_DO_DIA, DATA_E_HORA

Tipo de dados | Descrição | Intervalo de dados
TIME | Armazena o tempo decorrido em dias e horas. | - 24 d 20 h 31 m 23 s 648 ms ... 24 d 20 h 31 m 23 s 647 ms Observação: Quando um valor negativo é definido para as propriedades [Valor inicial] e [Faixa de entradas] em uma variável TIME, o sinal negativo será exibido para cada unidade de tempo. (Exemplo: -24d -20:-31:-23.-648)
DATE | Armazena a data. | Ao usar a Série SP5000 Open Box (Windows 10 IoT Enterprise Model), Série IPC, ou PC/AT 1970/01/01 ... 2106/02/07 Modelos diferentes dos acima 1970/01/01 ... 2038/01/19
TIME_OF_DAY | Armazena a hora. | 00:00:00 ... 23:59:59
DATE_AND_TIME | Combina a DATA e HORA_DO_DIA. | Ao usar a Série SP5000 Open Box (Windows 10 IoT Enterprise Model), Série IPC, ou PC/AT 1970/01/01 00:00:00 UTC ... 2106/02/07 06:28:15 UTC Modelos diferentes dos acima 1970/01/01 00:00:00 UTC ... 2038/01/19 03:14:07 UTC

Observação:

- Ao usar essas variáveis, combine os tipos de dados no dispositivo externo com o valor dos dados armazenados.
  Se você inseriu o valor que não está no faixa do endereço do dispositivo externo, então o valor inserido é exibido na tela, mas não é definido no endereço do dispositivo externo.

- Quando você associa variáveis com diferentes tipos de dados, às vezes o valor da variável de origem é substituído com um valor de resultado comum.

  Por exemplo, converta uma variável Real para uma variável Integer: Defina 123.4 para uma variável REAL, depois grave o valor para uma variável INT e o resultado será 123. O valor da variável REAL também é atualizado para 123.

- Quando um valor inteiro é inserido na variável DATE_AND_TIME de um Dispositivo externo, o valor armazenado é compensado pelo fuso horário da unidade de display. Portanto, para a entrada de valor inteiro, a data e a hora exibida por uma Exibição de data/hora diferem dependendo do fuso horário.

Série SP5000 Open Box (Windows 10 IoT Enterprise Model), Série IPC, ou PC/AT

Entrada de valor inteiro do 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 diferentes dos acima

Entrada de valor inteiro do 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

## Variáveis de Tipos de Dados do Usuário

A seguir estão os tipos de variáveis do tipo de dados do usuário.

- Variáveis de matriz
  Use uma única variável para lidar com várias variáveis do mesmo tipo de dados.
- Variáveis de estrutura
  Use uma única variável para lidar com várias variáveis de diferentes tipos de dados.

Observação: Suportes de matrizes e suportes de estruturas também são contados como variáveis.

### Variáveis de matriz

Uma matriz é uma coleção de variáveis com o mesmo tipo de dados. Cada variável em uma matriz é chamada de elemento.

Para entender como uma variável de matriz funciona, pense na variável como uma caixa. Como é exibido no diagrama a seguir, o número da variável é uma única caixa contendo apenas um valor.

Pense em uma matriz como uma linha de caixas com um número associado a cada caixa. No diagrama a seguir, a variável número da matriz contém 5 elementos 0-4. Os valores das variáveis são armazenados em cada uma das 5 caixas.

Para especificar cada variável em uma matriz, especifique o nome da variável seguido pelo número do elemento entre colchetes [ ].

(Exemplo) Matriz com 5 elementos

O número do elemento geralmente inicia com 0, mas também pode iniciar com um valor positivo ou negativo.

(Exemplo) Matriz iniciando com o número de elemento -1 com 5 elementos

Uma matriz multidimensional é uma matriz que contém outras matrizes. Por exemplo, uma matriz que contém duas matrizes DINT é uma matriz bidimensional.

#### Número de elementos em cada dimensão e configurações de dimensão

Na janela [Explorador de projeto], em [Variáveis] → [Todos os tipos de dados de usuário] → [Matrizes], na coluna [Dimensão], defina a dimensão da matriz e o número de elementos.

Para as etapas de criação de uma matriz, consulte o seguinte.

Etapas para projetar (Variáveis, Matriz, Estrutura)

Para uma matriz unidimensional, especifique apenas os elementos na matriz.

(Exemplo) Para uma matriz unidimensional com número de elementos = 3, digite "3".

Para uma matriz multidimensional, no campo [Dimensão], especifique o número de elementos em cada dimensão, separados por uma vírgula (,).

(Exemplo) Para uma matriz bidimensional onde a primeira dimensão tem 3 elementos (número inicial = 0) e a segunda dimensão tem 4 elementos (número inicial = 0), digite "3,4".

Esta definição de matriz é usada para criar a variável de matriz Var1, mostrada abaixo.

Observação: Para definir o número inicial de um elemento para algo diferente de 0, em vez do número de elementos, insira os números dos elementos inicial e final separados por dois pontos (..) e o campo [Número de elementos] calcula o número total de elementos.

(Exemplo) Para definir uma matriz bidimensional onde a primeira dimensão tem 3 elementos iniciando no elemento 0, e a segunda dimensão tem 4 elementos iniciando no elemento 3, digite "3,3..6".

Após a entrada, "3..6" é convertido em 4 elementos, e sua dimensão de matriz inicia no elemento número 3.

Esta matriz cria a variável de matriz Var1, mostrada abaixo.

#### Endereçar a matriz indiretamente

O endereçamento indireto é a maneira mais rápida de acessar um valor de variável em uma faixa de valores consecutivos em uma matriz, para minimizar o consumo de memória e para atualizar o valor em milissegundos.

Para o endereçamento indireto de matrizes, especifique o número de elemento da matriz por meio de um valor de variável ou do valor de propriedade de um objeto para especificar dinamicamente o elemento de uma matriz.

- Para especificar indiretamente por meio de um valor de variável:
  Digite "(Nome da variável).Value" entre os colchetes [] que especificam o número de elemento da matriz.
  (Exemplo) Var2[Var1.Value].Value: Este é o valor da variável de matriz Var2 cujo número de elemento da matriz é especificado indiretamente usando o valor da variável Var1.
- Para especificar indiretamente por meio de um valor de propriedade de um objeto:
  Digite "$GraphicalObject" seguido pelo "(Nome do objeto).(Nome da propriedade)" entre os colchetes [] que especificam o número de elemento da matriz.
  (Exemplo) Var2[$GraphicalObject.NumericDisplay1.CurrentValue].Value: Este é o valor da variável de matriz Var2 cujo valor do número de elemento da matriz é especificado indiretamente usando o Valor atual de um objeto de Campo numérico, Numeric Display1.

Observação:

Ao especificar um número de elemento da matriz indiretamente com o valor da propriedade de um objeto, digite “$GraphicalObject” antes do nome do objeto.
Dependendo da função de assistência de entrada, depois de digitar "$" no campo de propriedade de entrada ou de origem, na lista de opções, você pode selecionar "$GraphicalObject" para inserir a string facilmente.

O endereçamento indireto da uma matriz suporta o seguinte:

- Você pode utilizar no conversor [Expressão].
  (Exemplo: Array11[DINT1.value+2], Array21[Int2[Int3[Int1+1]]], Array31[Int1*4-(Int2+Int4/4)])

- É suportado um máximo de 5 níveis de aninhamento para todos os tipos de dados de variáveis.
  (Exemplo: Array11[Array22[DINT1.value],DINT02.value])

### Variáveis de estrutura

Uma estrutura é uma variável que contém uma coleção de outras variáveis. Cada variável em uma estrutura é chamada de elemento. Um elemento pode ser de qualquer tipo de dados.

Você pode criar uma estrutura aninhada adicionando outra estrutura ou uma matriz como um elemento.

Pense em uma estrutura como um grupo de caixas com elementos associado a cada caixa.

No diagrama a seguir, a variável de estrutura DADOS contém 3 elementos. Os valores das variáveis são armazenados em cada uma das 3 caixas.

## Operação quando o valor de entrada está fora da faixa de entrada

Quando o valor a ser armazenado na variável está fora da faixa (valor mínimo/máximo), o valor é tratado da seguinte maneira.

- Quando o valor é excedido no dispositivo externo
- Quando o valor é excedido com uma operação Alterar valor [Loop]
- Quando o valor é excedido com uma operação de Alterar valor [Stop]
- Quando o valor é excedido com uma operação Alterar valor [Set], valor especificado indiretamente ou operação do conversor de expressão
- Quando o valor é excedido com uma receita

Observação:

- Para mais informações sobre as operações Alterar valor, consulte Alterar valor.

### Quando o valor é excedido no dispositivo externo

Tipo de dados | Descrição
STRING, WSTRING | Armazena os caracteres que podem caber.
Além do acima mencionado | O valor da parte que excede a faixa de entrada é contado novamente a partir da parte inferior da faixa de entrada e armazenado. Exemplo) Variável de 8 bits não assinada (faixa de valor: 0...255) Exemplo 1: Se você tentar armazenar 256, 0 é armazenado na variável. (Como o limite superior é excedido em 1, o valor limite inferior de 0 é armazenado) Exemplo 2: Se você tentar armazenar 257, 1 é armazenado na variável. (Como o limite superior é excedido em 2, o segundo valor do limite inferior de 1 é armazenado.)

### Quando o valor é excedido com uma operação Alterar valor [Loop]

O valor da parte que excede a faixa de entrada é contado novamente a partir da parte inferior da faixa de entrada e armazenado.

(Exemplo) Variável de 8 bits não assinada (faixa de valor: 0...255)

Exemplo 1: Se você tentar armazenar 256, 0 é armazenado na variável. (Como o limite superior é excedido em 1, o valor limite inferior de 0 é armazenado)

Exemplo 2: Se você tentar armazenar 257, 1 é armazenado na variável. (Como o limite superior é excedido em 2, o segundo valor do limite inferior de 1 é armazenado.)

### Quando o valor é excedido com uma operação de Alterar valor [Stop]

Tipo de dados | Descrição
STRING, WSTRING | Armazena os caracteres que podem caber.
Além do acima mencionado | Os valores a seguir são arredondados para o valor superior ou 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 Difere dependendo da configuração da propriedade. TIME 2147483647/-2147483648 DATA/HORA_DO_DIA, DATA_E_HORA 4294967295/0

### Quando o valor é excedido com uma operação Alterar valor [Set], valor especificado indiretamente ou operação do conversor de expressão

O valor não é armazenado.

### Quando o valor é excedido com uma receita

Tipo de dados | Descrição
BOOL, REAL, LREAL | O valor não é armazenado.
LINT, ULINT, LWORD | Os valores a seguir são arredondados para o valor superior ou inferior. LINT 9223372036854775807/-9223372036854775808 ULINT, LWORD 18446744073709551615/0
STRING, WSTRING | Armazena os caracteres que podem caber.
Além do acima mencionado | O valor da parte que excede a faixa de entrada é contado novamente a partir da parte inferior da faixa de entrada e armazenado. (Exemplo) Variável de 8 bits não assinada (faixa de valor: 0...255) Exemplo 1: Se você tentar armazenar 256, 0 é armazenado na variável. (Como o limite superior é excedido em 1, o valor limite inferior de 0 é armazenado) Exemplo 2: Se você tentar armazenar 257, 1 é armazenado na variável. (Como o limite superior é excedido em 2, o segundo valor do limite inferior de 1 é armazenado.)