La versione 1.1 di EcoStruxure Machine Expert non supporta i controllori M258, LMC058 e LMC078.

Tipi di dati standard

 

Tipi di dati standard

Panoramica

EcoStruxure Machine Expert supporta tutti i tipi di dati descritti dallo standard IEC61131-3.

In questo capitolo sono descritti i seguenti tipi di dati:

oBOOL

oIntero

oREAL / LREAL

oSTRING

oWSTRING

oTipi di dati ora (LTIME)

oANY e ANY_<type>

Sono inoltre supportati alcuni tipi di dati di estensione dei dati standard ed è possibile definire i tipi di dati definiti dall'utente.

BOOL

Le variabili di tipo BOOL possono avere i valori TRUE (1) e FALSE (0). Sono riservati 8 bit di spazio di memoria.

Per maggiori informazioni, vedere il capitolo Costanti BOOL.

NOTA: Si possono utilizzare controlli impliciti per convalidare la conversione di tipi di variabili (vedere il capitolo POU per controlli impliciti).

Intero

Nella tabella sono elencati i tipi di dati interi disponibili. Ogni tipo copre un campo di valori diverso. Per i campi valgono le seguenti limitazioni.

Tipo di dati

Limite inferiore

Limite superiore

Spazio di memoria

BYTE

0

255

8 bit

WORD

0

65.535

16 bit

DWORD

0

4.294.967.295

32 bit

LWORD

0

264-1

64 bit

SINT

–128

127

8 bit

USINT

0

255

8 bit

INT

–32,768

32,767

16 bit

UINT

0

65.535

16 bit

DINT

–2,147,483,648

2,147,483,647

32 bit

UDINT

0

4.294.967.295

32 bit

LINT

–263

263-1

64 bit

ULINT

0

264-1

64 bit

NOTA: Le conversioni da tipi di maggiori dimensioni a tipi di dimensioni minori può causare la perdita di informazioni.

Per maggiori informazioni, vedere la descrizione relativa alle costanti numeriche.

NOTA: Si possono utilizzare controlli impliciti per convalidare la conversione di tipi di variabili (vedere il capitolo POU per controlli impliciti).

REAL / LREAL

I tipi di dati REAL e LREAL sono tipi a virgola mobile. Rappresentano i numeri razionali.

Caratteristiche dei tipi di dati REAL e LREAL:

Tipo di dati

Limite inferiore

Limite superiore

Spazio di memoria

REAL

-3.402823e+38

3.402823e+38

32 bit

LREAL

-1.7976931348623158e+308

1.7976931348623158e+308

64 bit

NOTA: Il supporto del tipo di dati LREAL dipende dal dispositivo di destinazione. Vedere nella documentazione corrispondente se il tipo LREAL a 64 bit viene convertito o meno in REAL durante la compilazione (con la possibile perdita di informazioni).

NOTA: Se un tipo di dati REAL o LREAL viene convertito in SINT, USINT, INT, UINT, DINT, UDINT, LINT o ULINT e il valore del numero reale non è compreso nel campo di valori di tale intero, il risultato sarà indefinito e dipenderà dal sistema di destinazione. In questo caso è possibile anche un'eccezione. Per ottenere un codice indipendente dalla destinazione, gestire i superamenti del campo mediante applicazione. Se il numero REAL/LREAL è compreso nel campo di valori dell'intero, la conversione si svolgerà nello stesso modo in tutti i sistemi.

Durante l'assegnazione di i1 := r1; viene rilevato un errore. Pertanto, la nota precedente vale quando si usano operatori di conversione come i seguenti:

i1 := REAL_TO_INT(r1);

Per maggiori informazioni, vedere la sezione Costanti (operandi) REAL/LREAL.

NOTA: Si possono utilizzare controlli impliciti per convalidare la conversione di tipi di variabili (vedere il capitolo POU per controlli impliciti).

STRING

Una variabile del tipo di dati STRING può contenere qualsiasi stringa di caratteri. L'elemento dimensione nella dichiarazione determina lo spazio di memoria da riservare per la variabile. Si riferisce al numero di caratteri nella stringa e può essere collocato tra parentesi o parentesi quadre. Se le dimensioni non sono specificate, verrà utilizzata la dimensione predefinita di 80 caratteri.

In generale, la lunghezza di una stringa non è limitata. Tuttavia, le funzioni stringa possono elaborare solo stringhe di lunghezza compresa tra 1 e 255 caratteri. Se una variabile è inizializzata con una stringa troppo lunga per il tipo di dati variabile, la stringa verrà troncata in modo adeguato da destra verso sinistra.

NOTA: Lo spazio di memoria necessario per una variabile di tipo STRING è 1 byte per carattere + 1 byte aggiuntivo. Questo significa che la dichiarazione "STRING[80]" richiede 81 byte.

Esempio di dichiarazione di stringa con 35 caratteri:

str:STRING(35):='This is a String';

Per maggiori informazioni, vedere WSTRING e Costanti (operandi) STRING.

NOTA: Si possono utilizzare controlli impliciti per convalidare la conversione di tipi di variabili (vedere il capitolo POU per controlli impliciti).

WSTRING

Il tipo di dati WSTRING differisce dal tipo STRING (ASCII) per l'interpretazione in formato Unicode e per il fatto che richiede 2 byte per ogni carattere e 2 byte aggiuntivi di spazio di memoria (solo ciascuno nel caso di STRING).

La libreria standard64.lib contiene funzioni per stringhe WSTRING.

Il numero di caratteri per WSTRING dipende dai caratteri contenuti. Una dimensione di 10 per WSTRING significa che la lunghezza del WSTRING può avere un massimo di 10 WORDS. Per alcuni caratteri in Unicode, sono richiesti più WORDS per codificare un carattere in modo che il numero di caratteri non debba corrispondere alla lunghezza di WSTRING (10 in questo caso). Il tipo di dati richiede 1 WORD di memoria aggiuntiva in quanto termina con uno 0.

Se la dimensione non è definita, vengono assegnate 80 WORDS più 1 per il carattere finale 0.

Esempi:

wstr:WSTRING:="This is a WString";

wstr10 : WSTRING(10) := "1234567890";

Per maggiori informazioni, vedere le seguenti descrizioni:

oSTRING

oCostanti STRING (operandi)

Tipo di dati ora

I tipi di dati TIME, TIME_OF_DAY (abbreviazione TOD), DATE e DATE_AND_TIME (abbreviazione DT) vengono gestiti internamente come DWORD. L'ora è indicata in millisecondi in TIME e TOD. L'ora in TOD inizia alle 12:00 A.M. L'ora è indicata in secondi in DATE e DT a partire dal 1° gennaio 1970 alle 12:00 A.M.

LTIME

LTIME è supportato come base tempo per timer ad alta risoluzione. LTIME ha le dimensioni 64 bit e risoluzione in nanosecondi.

Sintassi di LTIME:

LTIME#<dichiarazione tempo>

La dichiarazione di tempo può includere le unità di tempo utilizzate con la costante TIME e:

ous : microsecondi

ons : nanosecondi

Esempio di LTIME:

LTIME1 := LTIME#1000d15h23m12s34ms2us44ns

Confrontare con TIME dimensioni 32 bit e risoluzione in millisecondi.

Per maggiori informazioni, vedere le seguenti descrizioni:

oTipi di dati

ocostanti TIME

ocostanti DATE

ocostanti DATE_AND_TIME

ocostanti TIME_OF_DAY

NOTA: Si possono utilizzare controlli impliciti per convalidare la conversione di tipi di variabili (vedere il capitolo POU per controlli impliciti).

ANY / ANY_<type>

Quando si implementa una funzione e uno degli ingressi della funzione (VAR_INPUT) ha un tipo dati generico IEC (ANY o ANY_<type>), il tipo dati del parametro di chiamata non è definito come univoco. È possibile passare variabili di tipi di dati diversi a questa funzione. Il valore passato e il relativo tipo possono essere richiesti nella funzione tramite una struttura predefinita.

Tipi di dati generici IEC che consentono l'uso di tipi di dati elementari per ingressi della funzione:

Gerarchia dei tipi di dati generici

Tipi di dati elementari

ANY

ANY_BIT

BOOL, BYTE, WORD, DWORD, LWORD

ANY_DATE

DATE_AND_TIME, DATE, TIME_OF_DAY

ANY_NUM

ANY_REAL

REAL, LREAL

ANY_INT

USINT, UINT, UDINT, ULINT

SINT, INT, DINT, LINT

ANY_STRING

STRING, WSTRING

Esempio:

FUNCTION ANYBIT_TO_BCD : DWORD
   VAR_INPUT
      value : ANY_BIT;
   END_VAR

Se si chiama la funzione ANYBIT_TO_BCD, è possibile passare una variabile di tipo di dati BOOL, BYTE, WORD, DWORD o LWORD alla funzione come parametro.

Struttura predefinita:

Quando si compila il codice, un tipo di dati ANY viene sostituito internamente con la seguente struttura:

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

Il parametro di chiamata effettivo assegna gli elementi della struttura in runtime.

Esempio:

Questo esempio di codice consente di vedere se le due variabili passate hanno lo stesso tipo e valore.

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

Fare riferimento anche alla descrizione dell'operatore __VARINFO.