Tipo de datos

Top 

 

Es una característica principalmente vinculada al tamaño, y que es obligatorio asignar a cada variable que se declara o crea (ver mas abajo).

 

    Bit, bool o DIG

    Entero o INT o Word o int_16 (16bit)

    Entero largo o LNG o int_32 (32bit)

    Real o SNG (punto flotante)

  

  

|<----------------------- entero 32bit ------------------------>|

|         parte alta            |         parte baja            |

|                                                               |

|                                                               |

|<------ entero 16bit --------->|<------ entero 16bit --------->|

|                               |                               |

|_______________________________|_______________________________|

| |B| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

 ¯¯¯\¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

 |   \___ bit                  | |                             |

31                            16 15                            0

                                 |

|<------- una dirección ------->|<------- una dirección ------->|

           de memoria                       de memoria

  

  • Un dato tipo Bit, Bool o DIG solo puede tener los valores 1 o 0 (entran 16 por dirección)
  • Un dato Entero o INT o int_16 puede tener los valores desde -32768 hasta 32767  (ocupa una dirección)
  • Un Largo o LNG o int_32 abarca los valores desde -2147483648 hasta 2147483647  (ocupa dos direcciones)
  • Un real (de simple precisión) o SNG o punto flotante abarca desde -3.4028235E+38 hasta -1.401298E-45 para negativos, y 1.401298E-45 a 3.4028235E+38 para positivos  (ocupa dos direcciones)

   

        El tipo común es el Entero de 16bit, y es posible hacer referencia a cada uno de sus bits. Ejemplo:

       

•     i0 hace referencia a los 16bits de las entradas digitales, q0 hace referencia a los 16bits de las salidas digitales.

•     i0.0 hace referencia a la 1º entrada digital (bit 0), i0.1 a la segunda, etc. q0.15 hace referencia al último bit de la variable correspondiente a las salidas digitales, q0.14 a la anterior, y así hasta llegar a la primera que es q0.0. 

  

        El entero largo (LNG) y el real (SNG) no son comunes y están reservados para las funciones aritméticas y comparaciones, por lo que no se puede usar algo como i0.25. Las operaciones aritméticas, las comparaciones, INC, DEC, LD y ST pueden usar estos dos tipos. Para esto es necesario usar variables declaradas. Esto significa que si se hace un  LD v0  lo hará en 16bit, pero si se declara una variable como entero largo o real en la posición de v0 (ocupará v0 y v1) la operación se hará correctamente (ver instrucción LD).

    

Constantes (valores numéricos)

    

        Los números son tomados como constantes, y su tipo (entero, largo o real) será determinado por la forma que esté escrito. Un  LD 2  cargará el acumulador con un entero de valor 2, un  LD 80000  cargará el acumulador con un largo de valor ochenta mil, y un  LD 1.23  cargará el acumulador con un real uno coma veintitrés.
       Esta regla puede modificarse de la siguiente forma (norma IEC61131):

  • Para tomar como largo un número comprendido entre -32768 y 32767 (entero) debe anteponerse la declaración di#. Ejemplo: LD di#2.

  • Para tomar un número como real se debe expresar con formato decimal. Ejemplo: LD 1.0, o también LD 1.0e5 (cien mil).

       Los enteros y enteros largos pueden también expresarse en binario, octal y hexadecimal:

  • Entero en binario:  i#2#10011  (representa el número 19)

  • Entero en octal:  i#8#23  (representa el número 19)

  • Entero en hexadecimal:  i#16#13  (representa el número 19)

  • Entero largo en binario:  id#2#100001100  (representa el número 268)

  • Entero largo en octal:  id#8#414 (representa el número 268)

  • Entero largo en hexadecimal:  id#16#10C  (representa el número 268)

    

    

En la imagen están los tipos de datos que se pueden declarar. Nótese que el salto de la variable llamada Total a Prop es de 2 posiciones. Esto es debido a su tamaño (el doble), y así se evita que se superpongan.

   
aux_1 y aux_2 están en la misma dirección (o variable), pero ocupan diferentes bits.
Resist ocupa los 16 bits de la variable o dirección o posición de memoria.
Total y Prop ocupan 32 bits cada una o dos posiciones de memoria cada una.

    

Uniones

   

    

Aquí las variables están superpuestas. Es lo que en C se llama unión. Los nombres que se le han asignado coinciden con el tipo de superposición. De esta forma, lo que le acontece a una se refleja en la otra, ya que es la misma cosa con varios nombres.

Por ejemplo, en CP127 y CP128 CntFst es de 16 bits. Cuando la cuenta pase de 32767 a 32768 se leerá -32768 (es porque todas las variables son con signo). Para leerlo correctamente se lo convierte a 32 bit mediante una unión, copiando CntFst a Parte_baja, cero a Parte_alta, y finalmente leyendo Variable_Larga:

  

     MOVE CntFst, Parte_baja

     MOVE 0, Parte_alta

     LD Variable_Larga

    

        Un largo equivale a 2 enteros adyacentes. Para pasar datos de uno a otro utilice BLKMOVE. A partir de determinadas versiones puede usar MOVE para hacer conversiones entre 16 y 32 bit.

   

  
 Lista de instrucciones
 Ejemplos matemática

 Tips de programación

  
 Índice