EcoStruxure Machine Expert prend en charge tous les types de données conformes à la norme IEC61131-3.
Ce chapitre décrit les types de données suivants :
Notez également que plusieurs types de données d'extension de la norme sont également pris en charge et que vous pouvez ajouter vos propres types de données définis par l'utilisateur.
Les variables de type BOOL prennent la valeur TRUE (1) ou FALSE (0). 8 bits sont réservés dans la mémoire.
Pour plus d'informations, reportez-vous au chapitre 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.
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
L'attribution de i1 := r1;
renvoie une erreur. 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).
Une variable de type 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 de caractères constituant la chaîne. Cette indication figure soit entre parenthèses, soit entre crochets. En l'absence de cette information, la taille par défaut de 80 caractères est utilisée.
Généralement, la longueur de la chaîne n'est pas limitée. Cependant, les fonctions de chaîne ne peuvent traiter que les chaînes comprises entre 1 et 255 caractères. Lorsque la chaîne d'initialisation dépasse la taille indiquée pour le type de variable, elle est tronquée (de droite à gauche).
"STRING[80]"
nécessite 81 octets.
Exemple de déclaration d'une chaîne de 35 caractères :
str:STRING(35):='This is a String';
Pour plus d'informations, reportez-vous au chapitre WSTRINGConstantes STRING et (opérandes).
Disponible au format WSTRING, contrairement au type STRING (ASCII), le type de données Unicode nécessite 2 octets par caractère + 2 octets d'espace mémoire supplémentaires (contre 1 octet à chaque fois pour le type STRING).
La bibliothèque standard64.lib propose des fonctions pour les chaînes WSTRING.
Le nombre de caractères acceptés pour la chaîne WSTRING dépend de la longueur de caractères. Par exemple, une taille de 10 pour WSTRING signifie que la chaîne WSTRING accepte jusqu'à 10 mots (WORDS). Plusieurs mots WORDS peuvent être nécessaires pour coder certains caractères Unicode. Dans ce cas, le nombre de caractères ne correspond pas à la longueur de WSTRING (10 en l'occurrence). Ce type de données requiert 1 WORD de mémoire supplémentaire, car il se termine par un 0
.
Lorsque la taille n'est pas définie, la chaîne se voit affecter 80 WORDS plus 1 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 :
STRING constantes (opérandes)
Les types de données TIME, TIME_OF_DAY (TOD sous forme abrégée), DATE et DATE_AND_TIME (DT sous forme abrégée) sont traités en interne comme des valeurs DWORD. Les types de données LDATE, LDATE_AND_TIME (LDT) et LTIME_OF_DAY (LTOD) sont traités en interne comme des valeurs LWORD. L'heure est indiquée en millisecondes dans TIME et TOD. Minuit (00:00) est utilisé comme heure de départ pour TOD. Avec les types DATE et DT, l'heure est exprimée en secondes à compter du 1er janvier 1970 minuit (00:00).
L'extension de la norme LTIME est prise en charge comme base temporelle pour les temporisateurs haute résolution. Le type de données LTIME (64 bits) affiche une résolution en nanosecondes.
Syntaxe de LTIME :
LTIME#<déclaration de l'heure>
La déclaration de l'heure peut inclure l'unité (comme pour la constante TIME) :
us : microsecondes
ns : nanosecondes
Exemple d'instruction LTIME :
LTIME1 := LTIME#1000d15h23m12s34ms2us44ns
Pour plus d'informations, consultez les descriptions suivantes :
Si vous implémentez une fonction dont l'une des entrées (VAR_INPUT) est associée à 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 acceptant les 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
Lorsque la fonction ANYBIT_TO_BCD est appelée, une variable de type 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, une valeur de type ANY est remplacée 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.