miércoles, 20 de noviembre de 2013

Operaciones digitales

Funciones de comparación



En CoDeSys se realizan las funciones de comparación mediante un acumulador, lo que significa que primero se carga Operando 1 en el acumulador y luego se realiza la operación de comparación con el Operando 2. El resultado de la operación será de tipo BOOL, pero los valores que se comparan pueden ser del tipo BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME o STRING.
Ejemplo de comparación en CoDeSys:
      Lógica binaria

Al igual que en las funciones de comparación, las de lógica binaria se realizan en CoDeSys mediante un acumulador. Las operaciones de lógica binaria son:
El tipo y formato de dato de los operandos se comprueban en todos los lenguajes de programación. Con una XOR de más de dos entradas, se va realizando la operación por parejas.

Enmascaramiento de dígitos: La función AND se puede utilizar para el enmascaramiento de dígitos, para así desactivar las posiciones deseadas.
Ejemplo:
Origen                  0110 1111 1010 0110                      En este caso se quieren enmascarar los cuatro
Máscara             0000 0000 0000 1111                      bits de la derecha.
Resultado           0000 0000 0000 0110
Complemento: Con la función OR se pueden realizar operaciones de complemento
Ejemplo:
Origen                  0110 1111 1010 0100                      En este caso se quieren poner a “1” los tres
Máscara             0000 0000 0000 0111                      últimos bits de la derecha.
Resultado           0110 1111 1010 0111                     
Reconocimiento de cambios de valor en una posición determinada: Con una XOR se puede comprobar si ha habido algún cambio de valor en alguna posición.
Ejemplo:
Valor anterior   … 1010  0100
Valor actual       … 0010  0110
XOR                       … 1000  0010                     
AND                      … 0000  0010      (Con AND entre el valor actual y resultado de XOR sólo se
reflejan los cambios 0à1)
AND                      … 1000  0000      (Con AND entre valor anterior y resultado de XOR sólo se
reflejan los cambios 1à0)
Funciones de desplazamiento
-          SHL: Desplazamiento hacia la izquierda. Los bits que se quedan libres a la derecha se rellenan con Cero.
-          SHR: Desplazamiento hacia la derecha. Los bits que se quedan libres a la izquierda se rellenan con Cero.
-          ROR: Rotación hacia la derecha.
-          ROL: Rotación hacia la izquierda.
En CoDeSys se desplazan tantos bits como se indique en IN.
 



  Funciones de conversión
Presentan la forma *_TO_**, donde “*” es el tipo de las variables de entrada y “**” el de las de salida. Es importante tener en cuenta que la conversión desde tipos de datos “mayores” a “menores” (como podría ser desde INT a BYTE) puede ocasionar pérdida de datos.
Los tipos de datos elementales a tener en consideración a la hora de realizar conversiones son:



 Para la conversión de tipo es posible cualquier combinación entre estos tipos de datos.  

Debido a que la representación en BCD no corresponde a un tipo de dato, no existe una operación de conversión desde o a BCD. Para hacer esto hay que recurrir a funciones de la biblioteca. 
Conversión desde y a BOOL: La conversión desde BOOL a un tipo de dato numérico tiene como resultado un 1 cuando el operando es TRUE, y un 0 cuando es FALSE. Al convertir a STRING el resultado será “TRUE” o “FALSE” respectivamente.
La conversión a BOOL da como resultado TRUE cuando el dato de origen es distinto de 0, y FALSE cuando es 0. Al convertir desde STRING será el resultado TRUE cuando el operando es “TRUE”, y en caso contrario será FALSE.
Conversión entre datos de tipo entero: A este tipo de datos pertenecen BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT y UDINT. Al convertir desde tipos de datos mayores a menores se pueden perder parte de los datos, y cuando el valor a convertir supera el límite no se tendrá en cuenta los bits más elevados.
Conversión de números reales: Al convertir REAL o LREAL a un entero se redondea hacia arriba o abajo.
Conversión desde TIME o TIME_OF_DAY: Debido a que el tiempo se almacena internamente como DWORD en ms, se convierte este valor. Al convertir desde tipos mayores a menores se pueden perder datos. Al convertir a STRING se obtiene como resultado una cadena de caracteres (del tipo ‘T#12ms’).
Conversión desde DATE y DATE_AND_TIME: Internamente se almacena como DWORD en segundos desde el 1 de enero de 1970, y este es el dato que se convierte. Al convertir desde tipos mayores a menores se pueden perder datos. Al convertir a STRING se obtiene como resultado una cadena de caracteres (del tipo ‘DT#1998-02-13-14:25’).
Conversión desde STRING: El operando de tipo STRING tiene que tener un equivalente en el tipo de dato de destino, o el resultado será 0. Ejemplo:
VAR1 := STRING_TO_BOOL (‘TRUE’); //El resultado es VAR1 := TRUE
VAR2 :=  STRING_TO_WORD (‘abc125’) //El resultado es VAR2 := 0
TRUNC: Con la operación TRUNC sólo se emplea la parte entera de un número real. Ejemplo:
VAR1 := TRUNC (1.9); // VAR1 := 1



 

No hay comentarios:

Publicar un comentario