Conversions de données
Les conversions de données s’effectuent lors du mélange des types de données dans la programmation. Lors de la programmation d’une logique à relais, mélangez les types de données des paramètres au sein d’une instruction ou d’une expression.
Les instructions s’exécutent plus rapidement et nécessitent moins de mémoire si tous les opérandes de l’instruction utilisent :
- Le même type de données.
- Un type de données intermédiaire :
- Si vous mélangez des types de données ou utilisez des balises différentes du type de données optimal, l’automate convertit les données selon les règles suivantes :
- Les opérandes sont convertis selon le classement des types de données de SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, REAL et LREAL, avec un classement allant de 1 (le plus faible) à 10 (le plus élevé).CONSEIL: Pour réduire le temps et la mémoire lors de la conversion de données, utilisez le même type de données pour tous les opérandes d’une instruction.
Convertissez SINT ou INT en DINT ou DINT en LINT
Une balise d’entrée source SINT ou INT est promue vers une valeur DINT par une extension de signe de la balise source. Les instructions qui convertissent des valeurs SINT ou INT en valeurs DINT utilisent l’une des méthodes de conversion suivantes.
Cette méthode de conversion | Convertit les données en plaçant |
|---|---|
Extension de signe | La valeur du bit le plus à gauche (signe de la valeur) dans chaque position de bits à la gauche des bits existants jusqu’à atteindre 32 ou 64 bits. |
Remplissage avec des zéros | Ajoute des zéros à gauche des bits existants jusqu’à atteindre 32 ou 64 bits |
Les instructions logiques utilisent le remplissage avec des zéros. Toutes les autres instructions utilisent l’extension de signe
L’exemple suivant montre les résultats de la conversion d’une valeur en utilisant l’extension de signe et le remplissage avec des zéros.
Cette valeur | 2#1111_1111_1111_1111 | (-1) |
|---|---|---|
Convertit cette valeur avec l’extension de signe | 2#1111_1111_1111_1111_1111_1111_1111_1111 | (-1) |
Convertit cette valeur avec le remplissage avec des zéros | 2#0000_0000_0000_0000_1111_1111_1111_1111 | (65535) |
Si vous utilisez une balise SINT ou INT et une valeur immédiate dans une instruction qui convertit les données par une extension de signe, utilisez l’une de ces méthodes pour traiter les valeurs immédiates.
Spécifiez une valeur immédiate dans la base de numérotation décimale.
Si vous entrez la valeur dans une base numérique autre que décimale, spécifiez tous les 32 bits de la valeur immédiate. Pour cela, entrez la valeur du bit le plus à gauche dans chaque position de bit à sa gauche jusqu’à atteindre 32 bits.
Créez une balise pour chaque opérande et utilisez le même type de données dans toute l’instruction. Pour attribuer une valeur constante, vous pouvez utiliser l’une des méthodes suivantes :
Entrez-la dans l’une des balises.
Ajoutez une instruction MOV qui déplace la valeur dans l’une des balises.
Utilisez une instruction MEQ pour vérifier uniquement les bits requis.
Les exemples suivants montrent deux manières de mélanger une valeur immédiate avec une balise INT. Ces deux exemples vérifient les bits d’un module d’E/S (I/O) 1771 pour déterminer si tous les bits sont activés. Comme l’entrée d’un mot de données d’un module d’E/S (I/O) 1771 est une balise INT, il est plus facile d’utiliser une valeur constante de 16 bits.
IMPORTANT:
- Lors du mélange d’une balise INT avec une valeur immédiate, puisque remote_rack_1:I.Data[0] est une balise INT, la valeur à comparer avec elle est également entrée sous la forme d’une balise INT. Lors du mélange d’une balise INT avec une valeur immédiate, puisque remote_rack_1:I.Data[0] est une balise INT, la valeur à comparer avec elle est également entrée sous la forme d’une balise INT.
- Lors du mélange d’une balise INT avec une valeur immédiate, puisque remote_rack_1:I.Data[0] est une balise INT, la valeur à comparer avec elle est d’abord déplacée dans int_0, qui est également une balise INT. L’instruction EQU compare alors les deux balises.
Convertir un entier en REAL
L’automate mémorise des valeurs REAL en simple précision IEEE, au format de nombre à virgule flottante. Il utilise un bit pour le signe de la valeur, 23 bits pour la valeur de référence et huit bits pour l’exposant (32 bits au total). Si vous mélangez une balise entière (SINT, INT ou DINT) et une balise REAL comme entrées dans la même instruction, l’automate convertit la valeur entière en valeur REAL avant que l’instruction ne s’exécute.
- Une valeur SINT ou INT se convertit toujours en la même valeur REAL.
- Une valeur DINT ne se convertit pas nécessairement en une valeur REAL identique :
- Une valeur REAL utilise jusqu’à 24 bits pour la valeur de référence (23 bits stockés plus un bit « masqué »).
- Une valeur DINT utilise jusqu’à 32 bits pour la valeur (un pour le signe et 31 pour la valeur).
Si la valeur DINT nécessite plus de 24 bits importants, elle peut ne pas se convertir en la même valeur REAL. Si ce n’est pas le cas, l’automate stocke les 24 bits de poids le plus élevé arrondis à la valeur paire la plus proche.
NOTE:
L’application Logix Designer interprète les chiffres différemment selon que le modèle d’automate est 5x80 ou 5x70. Par exemple :
- Pour un automate 5x70, Logix Designer interprète le littéral 2 comme un REAL.
- Pour un automate 5x80, Logix Designer interprète le littéral 2 comme un DINT.
Convertir DINT en SINT ou INT
Pour convertir une valeur DINT en valeur SINT ou INT, l’automate tronque la partie supérieure de la valeur DINT et stocke les bits de poids inférieur qui correspondent au type de données. Si la valeur est trop importante, la conversion génère un débordement.
Convertir une valeur DINT en valeur INT et SINT
Il s’agit d’une valeur DINT | Se convertit en une valeur inférieure | |
|---|---|---|
16#0001_0081 (65,665) | INT | 16#0081 (129) |
SINT | 16#81 (-127) | |
Convertir REAL en SINT, INT ou DINT
Pour convertir une valeur REAL en une valeur entière, l’automate arrondit la partie fractionnaire et stocke les bits qui correspondent au type de données du résultat. Si la valeur est trop importante, la conversion génère un débordement.
Les nombres sont arrondis comme dans les exemples suivants.
Les fractions < 0,5 sont arrondies au nombre entier inférieur le plus proche.
Les fractions > 0,5 sont arrondies au nombre entier supérieur le plus proche.
Les fractions = 0,5 sont arrondies vers le haut ou vers le bas au nombre pair le plus proche.
Conversion de valeurs REAL en valeurs DINT
Cette valeur REAL | Se convertit en cette valeur DINT |
|---|---|
-2,5 | -2 |
-3,5 | -4 |
-1,6 | .2 |
-1,5 | .2 |
-1,4 | .1 |
1,4 | 1 |
1,5 | 2 |
1,6 | 2 |
2,5 | 2 |
3,5 | 4 |
Fournir une réponse