Conversions de données

La conversion de données s'effectue lors du mélange des types de données dans la programmation.
Lors de la programmation :
Des conversions peuvent se produire lorsque vous :
Diagramme à relais
Texte structuré
Mélangez des types de données de paramètres entre eux
Instruction ou expression
Bloc fonctionnel
Câblez deux paramètres possédant des types de données différents
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 :
    • Toutes les instructions du bloc fonctionnel prennent en charge seulement un opérande de types de données.
    • Si vous mélangez des types de données ou utilisez des étiquettes différentes du type de données optimal, le contrôleur convertit les données selon les règles suivantes :
      • Les opérandes sont convertis selon le classement des types de données entre 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 vers DINT ou DINT vers LINT
Une étiquette de source d'entrée SINT ou INT est promue en valeur DINT par une extension de signe de l'étiquette 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
Une 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
Remplissage avec des zéros à gauche des bits existants jusqu'à ce qu'il y ait 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 zéro
2#0000_0000_0000_0000_1111_1111_1111_1111
(65535)
Si vous utilisez une étiquette 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 étiquette 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 une des étiquettes.
Ajoutez une instruction MOV qui déplace la valeur dans l'une des étiquettes.
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 étiquette INT. Ces deux exemples, vérifient les bits d'un module d'E/S 1771 pour déterminer si tous les bits sont activés. Comme l'entrée d'un mot de donnée d'un module d'E/S 1771 est une étiquette INT, il est plus facile d'utiliser une valeur constante de 16 bits.
IMPORTANT: Mélange d'une étiquette INT avec une valeur immédiate
Comme remote_rack_1:I.Data[0] est une étiquette INT, la valeur à vérifier par rapport elle est également entrée sous la forme d'une étiquette INT.
DC_Other_Pg547_v31
IMPORTANT: Mélange d'une étiquette INT avec une valeur immédiate
Comme remote_rack_1:I.Data[0] est une étiquette INT, la valeur à vérifier par rapport elle est d'abord déplacée dans int_0, qui est également une étiquette INT. L'instruction EQU compare alors les deux étiquettes.
DC_Other_Pg548_v31
Convertir un entier vers à 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 étiquette entière (SINT, INT ou DINT) et une étiquette 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 en même valeur REAL.
  • Une valeur DINT ne peut pas se convertir dans la même valeur REAL.
  • 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 de poids significatif, elle peut ne pas se convertir dans la même valeur REAL. Si elle ne le fait pas, l'automate stocke les 24 bits de poids le plus élevé arrondis à la valeur paire la plus proche.
Convertir DINT vers 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 vers une valeur INT et une valeur SINT
Cette valeur DINT
Se convertit en cette valeur plus petite
16#0001_0081 (65 665)
INT :
16#0081 (129)
SINT
16#81 (-127)
Convertir REAL vers 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 s'arrondissent au nombre entier inférieur le plus proche.
Les fractions > 0,5 s'arrondissent au nombre entier supérieur le plus proche.
Les fractions = 0,5 s'arrondissent au nombre entier inférieur ou supérieur le plus proche.
IMPORTANT: Conversion de valeurs REAL en valeurs DINT
Cette valeur REAL
Se convertit en cette valeur DINT
-2,5
-3,5
-2
-4
-1,6
-2
-1,5
-2
-1,4
-1
1,4
1
1,5
2
1,6
2
2,5
3,5
2
4
Fournir une réponse
Vous avez des questions ou des commentaires sur cette documentation ? Veuillez envoyer vos commentaires ici.
Normal