Skip to main content

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 104. Esempi

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

ADD

SUB

MUL

DIV

MOD

MOVE

INDEXOF

SIZEOF

XSIZEOF

Operatori di stringhe di bit

AND

OR

XOR

NOT

AND_THEN

OR_ELSE

Operatori di spostamento dei bit

SHL

SHR

ROL

ROR

Operatori di selezione

SEL

MAX

MIN

LIMIT

MUX

Operatori di confronto

Un operatore di confronto è un booleano che confronta due input (primo e secondo operando).

GT

LT

LE

GE

EQ

NE

Operatori di indirizzo

ADR

Operatore di contenuti

BITADR

Chiama gli operatori

CAL

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.

REAL, LREAL

TIME, LTIME

DATE, DT, TOD, LDATE, LDT, LTOD

STRING, WSTRING

TRUNC

TRUNC_INT

Operatori numerici

ABS

SQRT

LN

LOG

EXP

EXPT

SIN

ASIN

COS

ACOS

TAN

ATAN

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 globale

Spazio dei nomi per elenchi di variabili globali

Spazio dei nomi di enumerazione

Spazio dei nomi della libreria

__POOL

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.

TEST_AND_SET

__COMPARE_AND_SWAP

__XADD

Altri operatori

__DELETE

__ISVALIDREF

__NEW

__QUERYINTERFACE

__QUERYPOINTER

INI

__TRY, __CATCH, __FINALLY, __ENDTRY

__POSITION

__POUNAME