Tipo de datos

�ndice 

 

    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.