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 :
oBOOL
oTypes de données d'horodatage (LTIME)
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.
NOTE : des vérifications implicites permettent de valider la conversion des types de variable (reportez-vous au chapitre POU pour vérifications implicites).
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 |
NOTE : la conversion d'un type de taille élevée vers un type de taille inférieure risque d'entraîner une perte d'informations.
Pour plus d'informations, reportez-vous à la description des constantes numériques.
NOTE : des vérifications implicites permettent de valider la conversion des types de variable (reportez-vous au chapitre POU pour vérifications implicites).
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 |
NOTE : la prise en charge du type de données LREAL dépend de l'équipement cible. Consultez la documentation correspondante pour savoir si le type LREAL 64 bits est converti en REAL à la compilation (éventuellement avec perte d'informations) ou persiste.
NOTE : prenons le cas d'une conversion d'une valeur de type REAL ou LREAL en SINT, USINT, INT, UINT, DINT, UDINT, LINT ou ULINT. Si le nombre réel converti est situé hors de la plage de valeurs de l'entier, le résultat sera indéfini et dépendra du système cible. Il existe cependant une exception. Pour éviter que le code dépende de la cible, vous pouvez gérer les valeurs hors plage via l'application. Si le nombre REAL/LREAL appartient à la plage de valeurs de l'entier, la conversion fonctionnera à l'identique sur tous les systèmes.
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).
NOTE : des vérifications implicites permettent de valider la conversion des types de variable (reportez-vous au chapitre POU pour vérifications implicites).
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).
NOTE : une variable de type STRING nécessite un espace mémoire de 1 octet par caractère + 1 octet supplémentaire. À titre d'exemple, la déclaration "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 Constantes STRING et WSTRING (opérandes).
NOTE : des vérifications implicites permettent de valider la conversion des types de variable (reportez-vous au chapitre POU pour vérifications implicites).
Disponible au format Unicode, contrairement au type STRING (ASCII), le type de données WSTRING 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 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 dans le cas présent). Le 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 :
oConstantes STRING (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. L'heure est exprimée en millisecondes avec les types 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).
LTIME
L'extension de la norme LTIME est prise en charge comme base temps 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) :
ous : microsecondes
ons : nanosecondes
Exemple de LTIME :
LTIME1 := LTIME#1000d15h23m12s34ms2us44ns
À comparer avec le type TIME (32 bits) affichant une résolution en millisecondes
Pour plus d'informations, reportez-vous aux descriptions suivantes :
NOTE : des vérifications implicites permettent de valider la conversion des types de variable (reportez-vous au chapitre POU pour vérifications implicites).
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 |
– |
BOOL, BYTE, WORD, DWORD, LWORD |
ANY_DATE |
– |
DATE_AND_TIME, DATE, TIME_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 BOOL, 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.