EcoStruxure Machine Expert prend en charge tous les types de données décrits par la norme IEC61131-3.
Ce chapitre décrit les types de données suivants :
En outre, plusieurs types de données d'extension de la norme sont pris en charge et vous pouvez également ajouter vos propres types de données définis par l'utilisateur.
Les variables de type BOOL peuvent prendre les valeurs TRUE (1) et FALSE (0). 8 bits d'espace mémoire sont réservés.
Pour plus d'informations, reportez-vous au chapitre concernant les constantes BOOL.
Le tableau répertorie les types de données entier disponibles. Chaque type couvre une plage de valeurs spécifique soumise aux restrictions suivantes.
Type de données |
Limite inférieure |
Limite supérieure |
Espace mémoire |
---|---|---|---|
BYTE |
0 |
255 |
8 bits |
WORD |
0 |
65 535 |
16 bits |
DWORD |
0 |
4 294 967 295 |
32 bits |
LWORD |
0 |
264-1 |
64 bits |
SINT |
-128 |
127 |
8 bits |
USINT |
0 |
255 |
8 bits |
INT |
-32 768 |
32 767 |
16 bits |
UINT |
0 |
65 535 |
16 bits |
DINT |
-2 147 483 648 |
2 147 483 647 |
32 bits |
UDINT |
0 |
4 294 967 295 |
32 bits |
LINT |
–263 |
263-1 |
64 bits |
ULINT |
0 |
264-1 |
64 bits |
Pour plus d'informations, reportez-vous à la description des constantes numériques.
Pour créer un code IEC adapté aux différents systèmes cibles, utilisez les types de données entiers indépendants de la cible __UXINT, __XINT et __XWORD. Le compilateur convertit ces types de données en types de données standard pris en charge par le système cible. Les systèmes avec registres d'adresse de 32 bits et 64 bits sont pris en charge.
Les opérateurs de conversion de type suivants sont fournis :
Types de données indépendants de la cible |
Sur les plates-formes 64 bits |
Sur les plates-formes 32 bits |
---|---|---|
__UXINT |
ULINT |
UDINT |
__XINT |
LINT |
DINT |
__XWORD |
LWORD |
DWORD |
Les types de données REAL et LREAL sont des types à virgule flottante. Ils représentent des nombres rationnels.
Caractéristiques des types de données REAL et LREAL :
Type de données |
Limite inférieure |
Limite supérieure |
Espace mémoire |
---|---|---|---|
REAL |
-3,402823e+38 |
3,402823e+38 |
32 bits |
LREAL |
-1,7976931348623158e+308 |
1,7976931348623158e+308 |
64 bits |
Exemple :
PROGRAM PLC_PRG
VAR
rMax: REAL := 3.402823E+38; // Largest number
rPosMin : REAL := 1.0E-44; // Smallest positive number
rNegMax: REAL := -1.0E-44; // Largest negative number
rMin: REAL := -3.402823E+38; // Smallest number
lrMax: LREAL := 1.7976931348623158E+308; // Largest number
lrPosMin : LREAL := 4.94065645841247E-324; // Smallest positve number
lNegMax: LREAL := -4.94065645841247E-324; // Largest negative number
lrMin: LREAL := -1.7976931348623158E+308; // Smallest number
END_VAR
Lors de l'affectation de i1 := r1;
, une erreur est détectée. Par conséquent, la remarque précédente s'applique avec les opérateurs de conversion, comme dans l'exemple suivant :
i1 := REAL_TO_INT(r1);
Pour plus d'informations, reportez-vous au chapitre Constantes REAL/LREAL (opérandes).
Avec EcoStruxure Machine Expert V2.2 et les versions ultérieures, le type de données STRING peut être codé dans le format Latin 1 ou UTF-8. Pour une interprétation comme UTF-8 à l'échelle du projet, activez le paramètre dans la boîte de dialogue . Pour plus d'informations, voir Codage UTF-8 à l'échelle du projet.
{attribute 'monitoring_encoding' := 'UTF-8'}
à la déclaration d'une variable. Ce la vous permet de surveiller le contenu de la variable dans le codage UTF-8.
Une variable de type de données STRING peut contenir n'importe quelle chaîne de caractères. La taille indiquée dans la déclaration détermine l'espace mémoire à réserver pour la variable et correspond au nombre d'octets de la chaîne. Cette indication peut être placée entre parenthèses ou entre crochets. Si aucune taille n'est spécifiée, la taille par défaut de 80 octets est utilisée. Lorsque la chaîne d'initialisation dépasse la taille indiquée pour le type de variable, elle est tronquée (de droite à gauche).
Longueur de chaîne :
Pour le codage Latin 1, l'espace mémoire nécessaire pour une variable de type STRING est de 1 octet par caractère + 1 octet supplémentaire. Ainsi, la déclaration "STRING[80]"
nécessite 81 octets.
Avec le codage UTF-8, un caractère peut avoir une longueur maximale de quatre octets. La longueur de la chaîne indique le nombre d'octets réservés pour le type STRING. Il n'existe donc plus de relation 1:1 entre le nombre de caractères et la longueur de chaîne en octets.
Exemple de déclaration de chaîne de 35 octets :
str:STRING(35):='This is a String';
Généralement, la longueur d'une chaîne n'est pas limitée. Lorsque vous exécutez des manipulations de chaînes avec les fonctions de la bibliothèque Standard, la longueur des chaîne est limitée à 255. Lorsque vous exécutez des manipulations de chaînes avec les fonctions de la bibliothèque StringUtils, les chaînes de plus de 255 caractères sont également autorisées.
Lorsqu'une variable de type de données STRING est réinitialisée via une réinitialisation de l'application, le contenu de l'ancienne chaîne qui existe après le caractère NULL de fin de la valeur initiale n'est pas écrasé. Cela s'applique à la fois à l'initialisation avec la valeur d'initialisation et à l'initialisation avec la valeur d'initialisation par défaut 0.
Pour plus d'informations, reportez-vous à la section Constantes WSTRING et STRING (opérandes).
Le type de données WSTRING diffère du type STRING (ASCII) par son interprétation dans le format Unicode et le fait qu'il nécessite deux octets pour chaque caractère et deux octets supplémentaires d'espace mémoire pour la terminaison de chaîne (contre 1 octet à chaque fois pour le type STRING).
Les types de données WSTRING sont codés comme Unicode dans le format UTF-16.
La bibliothèque standard64.lib fournit des fonctions pour les chaînes WSTRING.
Le nombre de caractères des WSTRING dépend des caractères qui les composent. Une taille de 10 pour un WSTRING signifie que la longueur de la chaîne WSTRING peut prendre jusqu'à 10 WORDS. Dans le cas de certains caractères en Unicode, plusieurs WORDS sont nécessaires pour coder un caractère, de sorte que le nombre de caractères ne correspond pas forcément à la longueur du WSTRING (10 dans ce cas). Ce type de données requiert un WORD de mémoire supplémentaire car il se termine par un 0
.
Lorsque la taille n'est pas définie, 80 WORDS sont affectés plus un pour le caractère de fin 0
.
Exemples :
wstr:WSTRING:="This is a WString";
wstr10 : WSTRING(10) := "1234567890";
Pour plus d'informations, reportez-vous aux descriptions suivantes :
Constantes STRING (opérandes)
Les types de données TIME, TIME_OF_DAY (raccourci TOD), DATE et DATE_AND_TIME (raccourci DT) sont traités en interne comme DWORD. Les types de données LDATE, LDATE_AND_TIME (LDT) et LTIME_OF_DAY (LTOD) sont traités en interne comme LWORD. L'heure est indiquée en millisecondes dans TIME et TOD. L'heure dans un TOD commence à minuit. L'heure est donnée en secondes dans DATE et DT à compter du 1er janvier 1970 à minuit.
LTIME est pris en charge comme base de temps pour les temporisateurs haute résolution. LTIME a une taille de 64 bits et une résolution en nanosecondes.
Syntaxe de LTIME :
LTIME#<déclaration d'heure>
La déclaration de l'heure peut inclure les unités utilisées comme avec la constante TIME :
us : microsecondes
ns : nanosecondes
Exemple LTIME :
LTIME1 := LTIME#1000d15h23m12s34ms2us44ns
Pour plus d'informations, consultez les descriptions suivantes :
Lorsque vous implémentez une fonction dont l'une des entrées (VAR_INPUT) présente un type de données IEC générique (ANY ou ANY_<type>), le type de données du paramètre d'appel n'est pas défini comme unique. Des variables de types différents peuvent alors être transmises à la fonction. Il est possible d'appeler la valeur transmise et son type via une structure prédéfinie.
Types de données IEC génériques permettant d'utiliser des types de données élémentaires pour les entrées de fonction :
Hiérarchie des types de données génériques |
Types de données élémentaires |
||
---|---|---|---|
ANY |
ANY_BIT |
– |
BYTE, WORD, DWORD, LWORD |
ANY_DATE |
– |
DATE_AND_TIME, DATE, TIME_OF_DAY, LDATE_AND_TIME, LDATE, LTIME_OF_DAY, |
|
ANY_NUM |
ANY_REAL |
REAL, LREAL |
|
ANY_INT |
USINT, UINT, UDINT, ULINT SINT, INT, DINT, LINT |
||
ANY_STRING |
– |
STRING, WSTRING |
Exemple :
FUNCTION ANYBIT_TO_BCD : DWORD
VAR_INPUT
value : ANY_BIT;
END_VAR
Si la fonction ANYBIT_TO_BCD est appelée, une variable de type de données BYTE, WORD, DWORD ou LWORD peut être transmise à la fonction en tant que paramètre.
Structure prédéfinie :
Lors de la compilation du code, un type de données ANY est remplacé en interne par la structure suivante :
TYPE AnyType :
STRUCT
// the type of the actual parameter
typeclass : __SYSTEM.TYPE_CLASS ;
// the pointer to the actual parameter
pvalue : POINTER TO BYTE;
// the size of the data, to which the pointer points
diSize : DINT;
END_STRUCT
END_TYPE
Le paramètre d'appel actuel affecte les éléments de la structure lors de l'exécution.
Exemple :
Cet exemple de code vérifie si les deux variables transmises correspondent au même type et ont la même valeur.
FUNCTION Generic_Compare : BOOL
VAR_INPUT
any1 : ANY;
any2 : ANY;
END_VAR
VAR
icount: DINT;
END_VAR
Generic_Compare := FALSE;
IF any1.typeclass <> any2.typeclass THEN
RETURN;
END_IF
IF any1.diSize <> any2.diSize THEN
RETURN;
END_IF
// Byte comparison
FOR icount := 0 TO any1.diSize-1 DO
IF any1.pvalue[iCount] <> any2.pvalue[iCount] THEN
RETURN;
END_IF
END_FOR
Generic_Compare := TRUE;
RETURN;
// END_FUNCTION
Consultez également la description de l'opérateur __VARINFO.