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







