Conversiones de datos
Las conversiones de datos se producen al mezclar tipos de datos en la programación. Al programar un diagrama de escalera, mezcle los tipos de datos de los parámetros dentro de una instrucción o expresión.
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:
- 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, desde 1 (el más bajo) hasta 10 (el más alto).CONSEJO: Para reducir el tiempo y el uso de memoria necesarios en la conversión de datos, utilice el mismo tipo de datos para todos los operandos de una instrucción.
Convertir SINT o INT a DINT, o DINT a LINT
Una etiqueta de origen de entrada SINT o INT se convierte en un valor DINT por extensión de signo para la etiqueta de origen. 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 utilizando 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 del signo | 2#1111_1111_1111_1111_1111_1111_1111_1111 | (-1) |
Se convierte en este valor mediante el relleno con 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:
- Cuando se mezcla una etiqueta INT con un valor inmediato, puesto que 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. Cuando se mezcla una etiqueta INT con un valor inmediato, puesto que 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.
- Cuando se mezcla una etiqueta INT con un valor inmediato, puesto que 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.
Convertir entero a 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 más altos redondeados al valor par más cercano.
OBSERVACIÓN:
La aplicación Logix Designer interpreta los números de forma diferente según si el modelo de controlador es 5x80 o 5x70. Por ejemplo:
- Para un controlador 5x70, Logix Designer interpreta el literal 2 como REAL.
- Para un controlador 5x80, Logix Designer interpreta el literal 2 como DINT.
Convertir DINT a 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.
Convertir un 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) | |
Convertir REAL a 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.
Conversión de valores REAL a valores DINT
Este valor REAL | Se convierte en este valor 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 |
Entregue su opinión