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 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
Opérateurs de chaînes de bits
Opérateurs de décalage de bits
Opérateurs de sélection
Opérateurs de comparaison
Un opérateur de comparaison est un booléen qui compare deux entrées (premier et deuxième opérande).
Opérateurs d'adresse
Opérateurs d'appel
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.
Opérateurs numériques
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 pour les listes de variables globales
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.