Conversiones de datos

Las conversiones de datos se producen al mezclar tipos de datos en la programación.
Al programar:
Se pueden producir conversiones si:
Diagrama de lógica de escalera
Texto estructurado
Se combinan los tipos de datos para los parámetros dentro de una
instrucción o expresión.
Bloque de funciones
Se conectan dos parámetros que tienen diferentes tipos de datos
Las instrucciones se ejecutan de manera más rápida y necesitan menos memoria, si todos los operandos de la instrucción usan:
  • El mismo tipo de datos.
  • Un tipo de datos intermedio:
    • Todas las instrucciones del bloque de funciones son compatibles con el operando de un solo tipo.
    • Si mezcla tipos de datos o utiliza etiquetas que no son del tipo de datos óptimo, el controlador convertirá los datos según estas reglas:
      • Los operandos se convierten según la clasificación de tipos de datos, en el siguiente orden: SINT, USINT, INT, UINT, DINT, UDINT, LINT, ULINT, REAL y LREAL, donde 1 es el más bajo y 10 el más alto.
        CONSEJO: Para reducir el tiempo y el uso de memoria necesarios en la conversión de datos, se utiliza el mismo tipo de datos para todos los operandos de una instrucción.
Convertir SINT o INT en DINT, o DINT en LINT
Una etiqueta de origen de entrada SINT o INT sube a un valor DINT por una extensión de signo para la etiqueta de entrada. Las instrucciones que convierten valores SINT o INT en valores DINT utilizan uno de los siguientes métodos de conversión.
Este método de conversión
Convierte datos colocando
Extensión de signo
El valor del bit que está más a la izquierda (el signo del valor) en cada posición de bit a la izquierda de los bits existentes, hasta que haya 32 o 64 bits.
Relleno de ceros
Ceros a la izquierda de los bits existentes hasta que haya 32 o 64 bits.
Las instrucciones lógicas emplean el relleno de ceros. Todas las otras instrucciones utilizan la extensión de signo.
El siguiente ejemplo muestra los resultados de convertir un valor usando la extensión de signo y el relleno de ceros.
Este valor
2#1111_1111_1111_1111
(-1)
Se convierte en este valor mediante la extensión de signo
2#1111_1111_1111_1111_1111_1111_1111_1111
(-1)
Se convierte en este valor mediante el relleno de ceros
2#0000_0000_0000_0000_1111_1111_1111_1111
(65535)
Si se utilizan una etiqueta SINT o INT y un valor inmediato en una instrucción que convierta datos con extensión de signo, utilice uno de estos métodos para gestionar los valores inmediatos.
Especifique cualquier valor inmediato en base decimal.
Si introduce el valor en una base que no sea decimal, especifique los 32 bits del valor inmediato. Para hacerlo, introduzca el valor del bit que está más a la izquierda en cada posición, a su izquierda, hasta que haya 32 bits.
Cree una etiqueta para cada operando y utilice el mismo tipo de datos en toda la instrucción. Para asignar un valor constante, use una de las siguientes opciones:
Introducirlo en una de las etiquetas.
Añadir una instrucción MOV para mover el valor a una de las etiquetas.
Utilizar una instrucción MEQ para comprobar solo los bits necesarios.
Los siguientes ejemplos muestran dos maneras de mezclar un valor inmediato con una etiqueta INT. Ambos ejemplos comprueban los bits de un módulo E/S 1771 para determinar si todos los bits están activados. Como la palabra de datos de entrada de un módulo E/S 1771 es una etiqueta INT, es más fácil usar un valor constante de 16 bits.
IMPORTANTE: Mezcla de una etiqueta INT con un valor inmediato
Como remote_rack_1:I.Data[0] es una etiqueta INT, el valor con el que se debe comparar también se introduce como una etiqueta INT.
DC_Other_Pg547_v31
IMPORTANTE: Mezcla de una etiqueta INT con un valor inmediato
Como remote_rack_1:I.Data[0] es una etiqueta INT, el valor con el que se debe comparar se coloca primero en int_0 y también es una etiqueta INT. A continuación, la instrucción EQU compara ambas etiquetas.
DC_Other_Pg548_v31
Conversión de entero en REAL
El controlador almacena los valores REAL en un formato de número de punto flotante de precisión única IEEE. Utiliza un bit para el signo del valor, 23 bits para la mantisa y ocho bits para el exponente (en total son 32 bits). Si mezcla una etiqueta de entero (SINT, INT o DINT) con una etiqueta REAL como entrada de la misma instrucción, el controlador convierte el valor entero en un valor REAL antes de que se ejecute la instrucción.
  • Un valor SINT o INT siempre se convierte en el mismo valor REAL.
  • Un valor DINT puede que no se convierta en el mismo valor REAL:
  • Un valor REAL usa hasta 24 bits para el valor de base (23 bits almacenados más uno "oculto").
  • Un valor DINT usa hasta 32 bits para el valor (uno para el signo y 31 para el valor).
Si el valor DINT requiere más de 24 bits significativos, podría no convertirse en el mismo valor REAL. Si ocurre eso, el controlador almacena los 24 bits superiores y los redondea al valor par más cercano.
Conversión de DINT en SINT o INT
Para convertir un valor DINT en uno SINT o INT, el controlador trunca la porción superior del DINT y almacena los bits inferiores que quepan en el tipo de dato. Si el valor es demasiado grande, la conversión genera un desbordamiento.
Conversión de DINT en un INT y un SINT
Este valor DINT
Se convierte en este valor menor
16#0001_0081 (65,665)
INT:
16#0081 (129)
SINT:
16#81 (-127)
Conversión de REAL en SINT, INT o DINT
Para convertir un valor REAL en un valor entero, el controlador redondea la parte fraccionaria y almacena los bits que quepan en el tipo de datos del resultado. Si el valor es demasiado grande, la conversión genera un desbordamiento.
Los números se redondean tal y como ocurre en los siguientes ejemplos.
Las fracciones < 0,5 se redondean a la baja al número entero más cercano.
Las fracciones > 0,5 se redondean al alza al número entero más cercano.
Las fracciones = 0,5 se redondean al alza o a la baja al número par más cercano.
IMPORTANTE: Conversión de valores REAL en valores DINT
Este valor REAL
Se convierte en este valor 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
Entregue su opinión
¿Tiene dudas o comentarios acerca de esta documentación? Por favor deje su opinión aquí.
Normal