Présentation

Un opérande peut être :

  • une adresse,

  • un libellé,

  • une variable,

  • une variable multi-éléments,

  • un élément d’une variable multi-éléments,

  • un appel de fonction ou

  • une sortie FFB.

Types de données

Les types de données des opérandes à traiter dans une instruction doivent être identiques. Si des opérandes de différents types de données doivent être traités, une conversion de types doit obligatoirement être effectuée auparavant.

Dans l’exemple, la variable Integer i1 est convertie en une variable Real, avant d’être ajoutée à la variable Real r4.

r3 := r4 + SIN(INT_TO_REAL(i1)) ;

Comme exception à cette règle, des variables du type de données TIME peuvent être multipliées par des variables du type de données INT, DINT, UINT ou UDINT ou divisées par ces dernières.

Opérations autorisées :

  • timeVar1 := timeVar2 / dintVar1;

  • timeVar1 := timeVar2 * intVar1;

  • timeVar := 10 * time#10s;

Cette fonction est considérée comme " indésirable " par la norme CEI 61131-3.

Utilisation directe d'adresses

Les adresses peuvent être utilisées directement (sans déclaration préalable). Dans ce cas, le type de données est directement affecté à l'adresse. L'affectation a lieu via le "préfixe de taille".

Le tableau suivant indique les différents préfixes de taille :

Préfixe de taille / Symbole

Exemple

Type de données

pas de préfixe

%I10, %CH203.MOD, %CH203.MOD.ERR

BOOL

X

%MX20

BOOL

B

%QB102.3

BYTE

W

%KW43

INT

D

%QD100

DINT

F

%MF100

REAL

Utilisation d'autres types de données

Si d’autres types de données doivent être affectés en tant que types de données par défaut d'une adresse, cela doit faire l’objet d’une déclaration explicite. L'éditeur de variables facilite la déclaration de ces variables. Il n'est pas possible de déclarer directement le type de données d'une adresse dans une section ST (par ex. la déclaration AT %MW1 : UINT ; non permise).

Exemple : les variables ci-dessous sont déclarées dans l'éditeur de variables.

UnlocV1 : ARRAY [1..10] OF INT;
LocV1 :   ARRAY [1..10] OF INT AT %MW100;
LocV2 :   TIME AT %MW100;

Les appels ci-dessous sont donc corrects du point de vue de la syntaxe :

%MW200 := 5;
UnlocV1[2] := LocV1[%MW200];
LocV2      := t#3s;

Accès aux variables de champs

Lors d’un accès aux variables de champ (ARRAY), seuls les libellés et les variables du type INT, UINT, DINT et UDINT sont autorisés dans l’indication d’index.

L'index d'un élément ARRAY peut être négatif si la limite inférieure de la plage est négative.

Exemple : Emploi de variables de zone

var1[i] := 8 ;
var2.otto[4] := var3 ;
var4[1+i+j*5] := 4 ;