Skip to main content

Opérateurs

CODESYS V3 prend en charge tous les opérateurs CEI 61131-3. Ces opérateurs sont reconnus implicitement tout au long du projet. En plus de ces opérateurs CEI, CODESYS prend également en charge certains opérateurs non CEI 61131-3.

Les opérateurs sont utilisés dans des blocs, tels que des fonctions.

Astuce

Pour plus d'informations sur l'ordre de traitement (force de liaison) des opérateurs ST, reportez-vous au chapitre "Expressions ST".

Attention

Pour les opérations avec des types de données à virgule flottante, le résultat du calcul dépend du matériel du système cible appliqué.

Attention

Pour les opérations avec débordement ou sous-dépassement dans le type de données, le résultat du calcul dépend du matériel du système cible appliqué.

Débordement/débordement insuffisant dans le type de données

le CODESYS Le compilateur génère du code pour le périphérique cible et calcule toujours les résultats temporaires avec la taille native définie par le périphérique cible. Par exemple, le calcul est effectué au moins avec des valeurs temporaires 32 bits sur les systèmes x86 et ARM et toujours avec des valeurs temporaires 64 bits sur les systèmes x64. Cela offre des avantages considérables en termes de vitesse de calcul et produit souvent également le résultat souhaité. Mais cela signifie également qu'un débordement ou un débordement dans le type de données n'est pas tronqué dans certains cas.

Exemple 104. Exemples

Exemple 1

Le résultat de cette addition n'est pas tronqué et le résultat dans dwVar est 65536.

VAR
wVar : WORD;
dwVar: DWORD;
END_VAR

wVar := 65535;
dwVar := wVar + 1;

Exemple 2

Le débordement et le sous-dépassement dans le type de données ne sont pas tronqués et les résultats (bVar1, bVar2) des deux comparaisons sont FALSE sur du matériel 32 bits et 64 bits.

VAR
wVar1 : WORD;
wVar2 : WORD;
bVar1 : BOOL;
bVar2 : BOOL;
END_VAR

wVar1 := 65535;
wVar2 := 0;
bVar1 := (wVar1 + 1) = wVar2;
bVar2 := (wVar2 - 1) = wVar1;

Exemple 3

Par l'affectation à wVar3, la valeur est tronquée au type de données cible WORD et le résultat bvar1 est TRUE.

VAR
wVar1 : WORD;
wVar2 : WORD;
wVar3 : WORD;
bVar1 : BOOL;
END_VAR

wVar1 := 65535;
wVar2 := 0;
wVar3 := (wVar1 + 1);
bVar1 := wVar3 = wVar2;

Exemple 4

Afin de forcer le compilateur à tronquer les résultats temporaires, une conversion peut être insérée.

La conversion de type garantit que les deux comparaisons sont en 16 bits uniquement et que les résultats (bVar1, bVar2) des deux comparaisons sont chacune 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;


Opérateurs arithmétiques

ADD

SUB

MUL

DIV

MOD

MOVE

INDEXOF

SIZEOF

XSIZEOF

Opérateurs de chaînes de bits

AND

OR

XOR

NOT

AND_THEN

OR_ELSE

Opérateurs de décalage de bits

SHL

SHR

ROL

ROR

Opérateurs de sélection

SEL

MAX

MIN

LIMIT

MUX

Opérateurs de comparaison

Un opérateur de comparaison est un booléen qui compare deux entrées (premier et deuxième opérande).

GT

LT

LE

GE

EQ

NE

Opérateurs d'adresse

ADR

Opérateur de contenu

BITADR

Opérateurs d'appel

CAL

Opérateurs de conversion de type

Vous pouvez appeler explicitement des opérateurs de conversion de type. Les opérateurs de conversion de type décrits ci-dessous sont disponibles pour les conversions typées d'un type élémentaire vers un autre type élémentaire, ainsi que pour la surcharge. Les conversions d'un type "plus grand" vers un type "plus petit" sont aussi implicitement possibles (par exemple, de INT à BYTE ou de DINT à WORD).

Conversion typée : <elementary data type> _TO_ another elementary data type>

Conversion surchargée : TO_ <elementary data type>

Types de données élémentaires

<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

Les mots clés T, TIME_OF_DAY et DATE_AND_TIME sont des formes alternatives pour les types de données TIME, TOD, et DT. T, TIME_OF_DAY et DATE_AND_TIME ne sont pas représentés comme une commande de conversion de type.

Important

Si la valeur de l'opérande pour un opérateur de conversion de type est en dehors de la plage de valeurs du type de données cible, la sortie du résultat dépend du type de processeur et n'est donc pas définie. C'est le cas, par exemple, lorsqu'une valeur d'opérande négative est convertie de LREAL au type de données cible UINT.

Des informations peuvent être perdues lors de la conversion de types de données plus volumineux en types de données plus petits.

Manipulation de chaîne lors de la conversion en STRING ou WSTRING

Lors de la conversion du type en STRING ou WSTRING, la valeur saisie est alignée à gauche sous forme de chaîne et tronquée si elle est trop longue. Par conséquent, déclarez la variable de retour pour les opérateurs de conversion de type <>_TO_STRING et <>_TO_WSTRING suffisamment longtemps pour que la chaîne ait suffisamment d'espace sans aucune manipulation.

REAL, LREAL

TIME, LTIME

DATE, DT, TOD, LDATE, LDT, LTOD

STRING, WSTRING

TRUNC

TRUNC_INT

Opérateurs numériques

ABS

SQRT

LN

LOG

EXP

EXPT

SIN

ASIN

COS

ACOS

TAN

ATAN

Opérateurs d'espace de noms

Les opérateurs d'espace de noms sont étendus à partir des opérateurs CEI 61131-3. Ils vous permettent de fournir un accès unique aux variables et aux modules, même lorsque vous utilisez plusieurs fois le même nom pour les variables ou les modules d'un projet.

Espace de noms global

Espace de noms pour les listes de variables globales

Espace de noms d'énumération

Espace de noms de bibliothèque

__POOL

Opérateurs multicœurs

Travailler avec différentes tâches nécessite la synchronisation de ces tâches. Cela est particulièrement vrai lorsque vous travaillez sur des plates-formes multicœurs. CODESYS fournit des opérateurs spéciaux pour prendre en charge cette synchronisation.

Ces opérateurs sont des extensions de la CEI-61131-3. Les opérateurs TEST_AND_SET et __COMPARE_AND_SWAP sont utilisés pour des tâches similaires.

TEST_AND_SET

__COMPARE_AND_SWAP

__XADD

Autres opérateurs

__DELETE

__ISVALIDREF

__NEW

__QUERYINTERFACE

__QUERYPOINTER

INI

__TRY, __CATCH, __FINALLY, __ENDTRY

__POSITION

__POUNAME