# Tipi di dati

Sono disponibili due tipi di variabili.

- Variabili di base
  Una variabile memorizza un valore.
- Variabili di tipo dati utente
  Una variabile può memorizzare più valori (più variabili gestite come una sola variabile).

Nota:

- Nelle operazioni in cui il valore (valore immesso) memorizzato nella variabile è fuori dall’intervallo di ingresso (valore minimo e massimo), far riferimento al seguente.
  Funzionamento con il valore di ingresso al di fuori del campo di ingresso

## Variabili di base

Quanto segue è un elenco di tipi di variabili di base.

Tipo di dati | Descrizione
BOOL | La variabile BOOL memorizza 0 o 1.
SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, BYTE | Tali variabili memorizzano valori interi. L’elaborazione è più veloce in confronto alle variabili di tipo virgola mobile.
WORD, DWORD, LWORD | Tali variabili memorizzano valori di tipo word.
STRING, WSTRING | Tali variabili memorizzano stringhe di testo.
REAL, LREAL | Tali variabili memorizzano valori in virgola mobile. Le variabili REAL possono memorizzare valori maggiori (come per es. i calcoli e le costanti) delle variabili di tipo intero.
TIME, DATE, TIME_OF_DAY, DATE_AND_TIME | Tali variabili memorizzano i valori di giorno e ora.

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

Tipo di dati | Con segno | Lunghezza dati | Intervallo dati
SINT | Complemento a 2 | 8 bit | -128...127
USINT | - | 8 bit | 0...255
INT | Complemento a 2 | 16 bit | -32768...32767
UINT | - | 16 bit | 0...65535
DINT | Complemento a 2 | 32 bit | -2147483648...2147483647
UDINT | - | 32 bit | 0...4294967295
LINT | Complemento a 2 | 64 bit | -9223372036854775808...9223372036854775807
ULINT | - | 64 bit | 0...18446744073709551615
BYTE | - | 8 bit | 0...255

### WORD, DWORD, LWORD

Tipo di dati | Lunghezza dati | Intervallo dati
WORD | 16 bit | 0...65535
DWORD | 32 bit | 0...4294967295
LWORD | 64 bit | 0...18446744073709551615

### STRING, WSTRING

Tipo di dati | Descrizione
STRING | Memorizza fino a 512 byte di testo. Se si usano variabili esterne, la codifica delle stringhe è definita dalla proprietà [Codifica stringa] della variabile. I valori di codifica delle stringhe disponibili sono: UTF8, UTF16, ShiftJIS, CodePage850, GB2312, BIG5, KSC5601, CodePage1251, CodePage874 e CodePage1252. Nota: La codifica delle stringhe si può configurare anche nelle proprietà dell'apparecchiatura. L'impostazione della proprietà delle variabili ha priorità sulle proprietà dell'apparecchiatura. Nella proprietà [Codifica stringa] delle variabili, selezionare [Tipo di impostazione del dispositivo] per applicare l'impostazione di codifica delle stringhe dell'apparecchiatura. La proprietà [Codifica stringa] compare solo quando il driver supporta la codifica stringa.
WSTRING | Memorizza fino a 512 word di testo a doppio byte. Con le variabili esterne si può usare solo il tipo dati WSTRING. La codifica delle stringhe è fissata come UTF16. Nelle proprietà delle variabili non si può cambiare l'impostazione [Codifica stringa] e la codifica nelle proprietà dell'apparecchiatura viene ignorata.

Nota:

- È possibile definire il numero di byte o word memorizzabili dalla variabile nella proprietà [Numero di byte/Word].

- Riconosce la fine della stringa di testo da NULL (0x00) o da [Numero di Byte].

- Con la variabile selezionata o con il driver, se si usa un testo il cui codice carattere non può essere convertito con [Codifica stringa], la fine della stringa viene riconosciuta con il codice carattere.

- La relazione di ordine alto/basso dei dati word dipende dalla [Modalità stringa] nel driver selezionato.

### REAL, LREAL

Tipo di dati | Lunghezza dati | Intervallo dati
REAL | 32 bit | +/-3.402823E38 ... +/-1.1754944E-38
LREAL | 64 bit | +/-4.19E-307 ... +/-1.67E308

Nota:

- La precisione delle variabili REAL è limitata a solo sette cifre. Se occorre maggiore precisione dei dati (per es. nelle operazioni di confronto), usare le variabili intere.
  Esempi
  Esempio 1: Nel valore 1.2345678, il valore risultante è approssimato all’ottava cifra (dopo 1.234567).
  Esempio 2: Il valore 0.1 memorizzato con una variabile REAL potrebbe dar luogo a 0.1000000014901161.

- Quando si usano le variabili REAL, verificare che l'impostazione Ordine word doppia nella finestra di dialogo Configurazione del dispositivo corrisponda all'impostazione del dispositivo. Se le impostazioni non corrispondono, i valori delle variabili REAL esterne non saranno visualizzati correttamente.

- Usare il punto (.) al posto della virgola decimale del valore della variabile. La virgola (,) non è supportata per i punti decimali.
  Anche se si usa la virgola (,) al posto del punto decimale del valore della variabile nel software di modifica delle schermate o nel visualizzatore, si ottengono risultati inaspettati, per esempio viene mostrato l'errore, la virgola è ignorata, o altro.

### TIME, DATE, TIME_OF_DAY, DATE_AND_TIME

Tipo di dati | Descrizione | Intervallo dati
TIME | Memorizza la durata del tempo trascorso in giorni e ore. | - 24 d 20 h 31 m 23 s 648 ms ... 24 d 20 h 31 m 23 s 647 ms Nota: Quando si imposta un valore negativo per le proprietà [Valore iniziale] e [Intervallo di immissione] in una variabile TIME, il segno negativo verrà visualizzato per ogni unità di tempo. (Esempio: -24d -20:-31:-23.-648)
DATE | Memorizza il giorno. | Quando si usa la serie SP5000 Open Box (Windows 10 IoT Enterprise Model), la serie IPC o PC/AT 1970/01/01 ... 2106/02/07 Modelli diversi da quelli precedenti 1970/01/01 ... 2038/01/19
TIME_OF_DAY | Memorizza l’ora. | 00:00:00 ... 23:59:59
DATE_AND_TIME | Combina DATE e TIME_OF_DAY. | Quando si usa la serie SP5000 Open Box (Windows 10 IoT Enterprise Model), la serie IPC o PC/AT 1970/01/01 00:00:00 UTC ... 2106/02/07 06:28:15 UTC Modelli diversi da quelli precedenti 1970/01/01 00:00:00 UTC ... 2038/01/19 03:14:07 UTC

Nota:

- Se si usano queste variabili, far corrispondere i tipi di dati del dispositivo esterno ai valori dei dati memorizzati.
  Se è stato immesso un valore non contenuto nell’intervallo dell’indirizzo del dispositivo esterno, il valore immesso compare sulla schermata ma non viene impostato nell’indirizzo del dispositivo esterno.

- Quando si associano variabili con tipo di dati differenti, spesso il valore della variabile sorgente viene sovrascritto con un valore del risultato in comune.

  Per esempio, convertire una variabile reale su una variabile intera: impostare 123.4 su una variabile intera, quindi scrivere il valore su una variabile INT e il risultato è 123. Anche il valore della variabile REAL viene aggiornato a 123.

- Se nella variabile DATE_AND_TIME viene immesso un valore intero da un dispositivo esterno, il valore memorizzato viene sfalsato del fuso orario del visualizzatore. Pertanto, per l'immissione di valori interi, la data e l'ora visualizzate dal display giorno/ora variano a seconda del fuso orario.

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

Valore intero in ingresso da dispositivo esterno | UTC+0 (ntervallo: 1970/01/01 00:00:00 ... 2106/02/07 06:28:15) | UTC+9 (ntervallo: 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

Modelli diversi da quelli precedenti

Valore intero in ingresso da dispositivo esterno | UTC+0 (ntervallo: 1970/01/01 00:00:00 ... 2038/01/19 03:14:07) | UTC+9 (ntervallo: 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

## Variabili di tipo dati utente

Quanto segue è un elenco di tipi di variabili di tipo dati utente.

- Variabili Array
  Usare una sola variabile per gestire più variabili dello stesso tipo di dati.
- Variabili struttura
  Usare una sola variabile per gestire più variabili di tipi di dati diversi.

Nota: Anche i contenitori di array e di struttura sono considerati variabili.

### Variabili array

Un array è una raccolta di variabili con lo stesso tipo di dati. Ciascuna variabile in un array si chiama elemento.

Per comprendere come funziona una variabile array, immaginare la variabile come una scatola. Come indicato nello schema seguente, la variabile Numero è una scatola singola contenente un valore.

L'array è simile a una fila di scatole, a ognuna delle quali è stato associato un numero. Nello schema seguente, la variabile array NUMERO contiene 5 elementi da 0 a 4. I valori della variabile vengono salvati in ciascuna delle 5 scatole.

Per specificare ogni variabile dell'array, specificare il nome della variabile seguito dal numero dell'elemento racchiuso tra parentesi quadre [ ].

(Esempio) Array con 5 elementi

Il numero dell'elemento inizia solitamente con 0, ma può anche iniziare con valori positivi o negativi.

(Esempio) Array che inizia con numero dell'elemento -1 con 5 elementi

Un array multidimensionale è un array che contiene altri array. Ad esempio, l'array che contiene due array DINT è un array bidimensionale.

#### Numero di elementi per ciascuna dimensione e impostazioni della dimensione

Nella finestra [Esplora progetti], da [Variabili] → [Tutti i tipi di dati utente] → [Array], nella colonna [Dimensione], impostare sia la dimensione dell'array che il numero di elementi.

Per le fasi di progettazione degli array, fare riferimento a quanto segue.

Procedura per il progetto (Variabili, Array, Struttura)

Per l'array a 1 dimensione, specificare solo gli elementi dell'array.

(Esempio) Per l'array a 1 dimensione con numero di elementi = 3, immettere "3".

Per gli array multidimensionali, nel campo [Dimensione] specificare il numero di elementi di ciascuna dimensione, separati dalla virgola (,).

(Esempio) Per l'array bidimensionale in cui la prima dimensione ha 3 elementi (numero iniziale = 0) e la seconda dimensione ha 4 elementi (numero iniziale = 0), immettere "3,4".

Questa definizione di array si utilizza per creare la variabile array Var1, mostrata di seguito.

Nota: Per impostare il numero iniziale degli elementi su qualcosa diverso da 0, al posto del numero di elementi immettere i numeri iniziale e finale separati da due punti (..) e il campo [Numero di elementi] calcola il numero totale di elementi.

(Esempio) Per impostare un array bidimensionale in cui la prima dimensione ha 3 elementi a partire dall'elemento 0 e la seconda dimensione ha 4 elementi a partire dall'elemento 3, immettere "3,3..6".

Dopo l'immissione, "3..6" viene convertito in 4 elementi e la sua dimensione di array inizia dal numero dell'elemento 3.

Questa array crea la variabile array Var1, mostrata di seguito.

#### Indirizzamento indiretto dell'array

L'indirizzamento indiretto è il modo più rapido per accedere a un valore di variabile nell'intervallo di valori consecutivi in un array, per ridurre il consumo di memoria e aggiornare il valore in pochi millisecondi.

Per l'indirizzamento indiretto degli array, specificare il numero di elementi dell'array attraverso il valore della variabile o il valore della proprietà di un oggetto, per specificare dinamicamente l'elemento dell'array.

- Per specificare indirettamente attraverso il valore di una variabile:
  Immettere "(Nome variabile).Value" tra le parentesi [] che specificano il numero di elementi dell'array.
  (Esempio) Var2[Var1.Value].Value: questo è il valore della variabile array Var2 il cui numero di elementi dell'array è specificato indirettamente usando il valore della variabile Var1.
- Per specificare indirettamente il valore della proprietà di un oggetto:
  Immettere "$GraphicalObject" seguito da "(Nome oggetto).(Nome proprietà)" tra le parentesi [] che specificano il numero di elementi dell'array.
  (Esempio) Var2[$GraphicalObject.NumericDisplay1.CurrentValue].Value: questo è il valore della variabile array Var2, il cui valore del numero di elementi dell'array è specificato indirettamente usando il valore corrente dell’oggetto Display numerico, Numeric Display1.

Nota:

Quando si specifica indirettamente il numero di elementi dell'array con il valore della proprietà dell'oggetto, immettere "$GraphicalObject" prima del nome dell'oggetto.
A seconda della funzione di assistenza all'immissione, dopo aver digitato "$" nel campo della proprietà di input o di origine, dall'elenco delle opzioni è possibile selezionare "$GraphicalObject" per immettere facilmente la stringa.

L'indirizzamento indiretto dell'array è supportato quando:

- È possibile utilizzare nel convertitore [Espressione].
  (Esempio: Array11[DINT1.value+2], Array21[Int2[Int3[Int1+1]]], Array31[Int1*4-(Int2+Int4/4)])

- È supportato un massimo di 5 livelli di annidamento per tutti i tipi di dati delle variabili.
  (Esempio: Array11[Array22[DINT1.value],DINT02.value])

### Variabili struttura

Una struttura è una variabile che contiene una raccolta di altre variabili. Ogni variabile in un array si chiama elemento. Un elemento può essere formato da qualsiasi tipo di dati.

Si può creare una struttura annidata aggiungendo un'altra struttura o un array come elemento.

La struttura è simile a una fila di scatole, a ognuna delle quali è stato associato un elemento.

Nello schema seguente, la variabile struttura DATA contiene 3 elementi. I valori della variabile vengono salvati in ciascuna delle tre scatole.

## Funzionamento con il valore di ingresso al di fuori del campo di ingresso

Nelle operazioni in cui il valore memorizzato nella variabile è fuori dall’intervallo di ingresso (valore minimo e massimo), il valore viene trattato come segue.

- Il valore viene superato sul dispositivo esterno
- Quando il valore viene superato con l’operazione Cambio valore [Loop]
- Quando il valore viene superato con l’operazione Cambio valore [Stop]
- Quando il valore viene superato con l’operazione Cambio valore [Set], valore specificato indirettamente, oppure operazione convertitore di Espressione
- Quando il valore viene superato con una ricetta

Nota:

- Per i dettagli sulle operazioni di Cambio valore, far riferimento a Cambio valore.

### Il valore viene superato sul dispositivo esterno

Tipo di dati | Descrizione
STRING, WSTRING | Memorizza i dati che possono adattarsi.
Diversi dai precedenti | Il valore della porzione che supra l’intervallo di immissione viene contato di nuovo dal fondo dell’intervallo di immissione e memorizzato. Esempio) Variabile a 8 bit senza segno (intervallo valore: 0...255) Esempio 1: Se si cerca di memorizzare 256, nella variabile si memorizza 0. (Poiché il limite superiore è superato da 1, viene memorizzato il valore del limite inferiore 0) Esempio 2: Se si cerca di memorizzare 257, nella variabile si memorizza 1. (Poiché il limite superiore è superato da 2, viene memorizzato il secondo valore dal limite inferiore 1)

### Quando il valore viene superato con l’operazione Cambio valore [Loop]

Il valore della porzione che supra l’intervallo di immissione viene contato di nuovo dal fondo dell’intervallo di immissione e memorizzato.

(Esempio): Variabile a 8 bit senza segno (intervallo valore: 0...255)

Esempio 1: Se si cerca di memorizzare 256, nella variabile si memorizza 0. (Poiché il limite superiore è superato da 1, viene memorizzato il valore del limite inferiore 0)

Esempio 2: Se si cerca di memorizzare 257, nella variabile si memorizza 1. (Poiché il limite superiore è superato da 2, viene memorizzato il secondo valore dal limite inferiore 1)

### Quando il valore viene superato con l’operazione Cambio valore [Stop]

Tipo di dati | Descrizione
STRING, WSTRING | Memorizza i dati che possono adattarsi.
Diversi dai precedenti | Quelli che seguono sono i valori arrotondati al valore superiore o inferiore. 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 Varia in base all’impostazione delle proprietà. TIME 2147483647/-2147483648 DATE/TIME_OF_DAY, DATE_AND_TIME 4294967295/0

### Quando il valore viene superato con l’operazione Cambio valore [Set], valore specificato indirettamente, oppure operazione convertitore di Espressione

Il valore non viene memorizzato.

### Quando il valore viene superato con una ricetta

Tipo di dati | Descrizione
BOOL, REAL, LREAL | Il valore non viene memorizzato.
LINT, ULINT, LWORD | Quelli che seguono sono i valori arrotondati al valore superiore o inferiore. LINT 9223372036854775807/-9223372036854775808 ULINT, LWORD 18446744073709551615/0
STRING, WSTRING | Memorizza i dati che possono adattarsi.
Diversi dai precedenti | Il valore della porzione che supra l’intervallo di immissione viene contato di nuovo dal fondo dell’intervallo di immissione e memorizzato. (Esempio): Variabile a 8 bit senza segno (intervallo valore: 0...255) Esempio 1: Se si cerca di memorizzare 256, nella variabile si memorizza 0. (Poiché il limite superiore è superato da 1, viene memorizzato il valore del limite inferiore 0) Esempio 2: Se si cerca di memorizzare 257, nella variabile si memorizza 1. (Poiché il limite superiore è superato da 2, viene memorizzato il secondo valore dal limite inferiore 1)