Operatori
CODESYS V3 supporta tutti gli operatori IEC 61131-3. Questi operatori sono riconosciuti implicitamente durante tutto il progetto. Oltre a questi operatori IEC, CODESYS supporta anche alcuni operatori non IEC 61131-3.
Gli operatori vengono utilizzati nei blocchi, come le funzioni.
Suggerimento
Per informazioni sull'ordine di elaborazione (forza di legame) degli operatori ST, vedere il capitolo "Espressioni ST".
Attenzione
Per le operazioni con tipi di dati a virgola mobile, il risultato di calcolo dipende dall'hardware del sistema di destinazione applicato.
Attenzione
Per le operazioni con overflow o underflow nel tipo di dati, il risultato di calcolo dipende dall'hardware del sistema di destinazione applicato.
Overflow/underflow nel tipo di dati
Il CODESYS il compilatore genera codice per il dispositivo di destinazione e calcola i risultati temporanei sempre con la dimensione nativa definita dal dispositivo di destinazione. Ad esempio, il calcolo viene eseguito almeno con valori temporanei a 32 bit su sistemi x86 e ARM e sempre con valori temporanei a 64 bit su sistemi x64. Ciò fornisce notevoli vantaggi nella velocità di calcolo e spesso produce anche il risultato desiderato. Ma ciò significa anche che in alcuni casi un overflow o un underflow nel tipo di dati non viene troncato.
Esempio 1
Il risultato di questa aggiunta non viene troncato e il risultato in dwVar
è 65536
.
VAR wVar : WORD; dwVar: DWORD; END_VAR wVar := 65535; dwVar := wVar + 1;
Esempio 2
L'overflow e l'underflow nel tipo di dati non vengono troncati e i risultati (bVar1, bVar2
) di entrambi i confronti sono FALSE
su hardware a 32 e 64 bit.
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := (wVar1 + 1) = wVar2; bVar2 := (wVar2 - 1) = wVar1;
Esempio 3
Con l'incarico a wVar3
, il valore viene troncato al tipo di dati di destinazione WORD
e il risultato bvar1
è TRUE
.
VAR wVar1 : WORD; wVar2 : WORD; wVar3 : WORD; bVar1 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; wVar3 := (wVar1 + 1); bVar1 := wVar3 = wVar2;
Esempio 4
Per forzare il compilatore a troncare i risultati temporanei, è possibile inserire una conversione.
La conversione del tipo assicura che entrambi i confronti siano solo a 16 bit e che i risultati (bVar1, bVar2
) di entrambi i confronti sono ciascuno TRUE
.
VAR wVar1 : WORD; wVar2 : WORD; bVar1 : BOOL; bVar2 : BOOL; END_VAR wVar1 := 65535; wVar2 := 0; bVar1 := TO_WORD(wVar1 + 1) = wVar2; bVar2 := TO_WORD(wVar2 - 1) = wVar1;
Operatori aritmetici
Operatori di stringhe di bit
Operatori di spostamento dei bit
Operatori di selezione
Operatori di confronto
Un operatore di confronto è un booleano che confronta due input (primo e secondo operando).
Operatori di indirizzo
Chiama gli operatori
Digitare gli operatori di conversione
Puoi chiamare esplicitamente gli operatori di conversione del tipo. Gli operatori di conversione del tipo descritti di seguito sono disponibili per le conversioni tipizzate da un tipo elementare a un altro tipo elementare, nonché per l'overloading. Sono implicitamente possibili anche conversioni da un tipo "più grande" a un tipo "più piccolo" (ad esempio, da INT
a BYTE
o da DINT
a WORD
).
Conversione digitata: <elementary data type> _TO_ another elementary data type>
Conversione sovraccarica: TO_ <elementary data type>
Tipi di dati elementari
<elementary data type> = __UXINT | __XINT | __XWORD | BIT | BOOL | BYTE | DATE | DATE_AND_TIME | DINT | DT | DWORD | INT | LDATE | LDATE_AND_TIME | LDT | LINT | LREAL | LTIME | LTOD | LWORD | REAL | SINT | TIME | TOD | UDINT | UINT | ULINT | USINT | WORD
Le parole chiave T
, TIME_OF_DAY
e DATE_AND_TIME
sono forme alternative per i tipi di dati TIME
, TOD
, e DT
. T
, TIME_OF_DAY
e DATE_AND_TIME
non sono rappresentati come un comando di conversione del tipo.
Importante
Se il valore dell'operando per un operatore di conversione del tipo non rientra nell'intervallo di valori del tipo di dati di destinazione, l'output del risultato dipende dal tipo di processore ed è quindi indefinito. Questo è il caso, ad esempio, della conversione di un valore di operando negativo da LREAL
al tipo di dati di destinazione UINT
.
Le informazioni possono andare perse durante la conversione da tipi di dati più grandi a tipi di dati più piccoli.
Manipolazione di stringhe durante la conversione in STRING
o WSTRING
Quando si converte il tipo in STRING
o WSTRING
, il valore digitato viene allineato a sinistra come stringa e troncato se è troppo lungo. Pertanto, dichiarare la variabile di ritorno per gli operatori di conversione del tipo <>_TO_STRING
e <>_TO_WSTRING
abbastanza a lungo in modo che la stringa abbia spazio sufficiente senza alcuna manipolazione.
Operatori numerici
Operatori dello spazio dei nomi
Gli operatori dello spazio dei nomi sono estesi dagli operatori IEC 61131-3. Consentono di fornire un accesso univoco a variabili e moduli, anche quando si utilizza lo stesso nome più volte per variabili o moduli in un progetto.
Spazio dei nomi per elenchi di variabili globali
Spazio dei nomi di enumerazione
Operatori multicore
Lavorare con attività diverse richiede la sincronizzazione di queste attività. Ciò è particolarmente vero quando si lavora su piattaforme multicore. CODESYS fornisce alcuni operatori speciali per supportare questa sincronizzazione.
Questi operatori sono estensioni di IEC-61131-3. Gli operatori TEST_AND_SET
e __COMPARE_AND_SWAP
vengono utilizzati per compiti simili.