¿Recuerdas al señor de la derecha? Lo vimos en el primer capítulo de álgebra de Boole. Hoy vamos a ver un poco de lógica binaria de AWL en Step 7. Si estás buscando en TIA Portal, tienes el curso de AWL en TIA Portal
Sí. Antes de ver los temporizadores.
¿Por qué antes?
Pues porque cuando veamos los temporizadores, habrá que verlos también en AWL y hombre, no quiero que te de un derrame cerebral así de primeras. Pero lo veremos enseguida.
AWL en Step 7
Deberíamos empezar por ver qué es el AWL. El AWL no es mas que uno de los tres lenguajes básicos de Step 7. En la entrada AWL, FUP, KOP... ¿cuál elijo? definíamos un poco de qué se trata cada uno.
Es la mamá de todos los lenguajes en Step 7. Todos finalmente se van a traducir a AWL y todo aquello que no se pueda programar en AWL es que simplemente no lo vas a poder programar. Otra cosa es los sudores que te costaría hacer directamente en AWL tareas complejas, pero por poder, se podría.
Con AWL en Step 7 se pueden hacer auténticas filigranas ahorrando código a más no poder. Digamos que es la forma de programar más compacta de todas (en general).
Si hiciéramos una comparación con otros lenguajes, tendríamos lenguajes de alto nivel como el Pascal (SCL en nuestro caso) y luego tendríamos lenguajes de bajo nivel como Ensamblador, que en nuestro caso sería el AWL.
Puede que la comparación no sea lo más acertada del mundo, pero suficientemente buena a mi juicio para que te hagas una idea.
¿Ensamblador? Ya me estas acojon...
No te asustes, que no es para tanto. Digo que es similar a ensamblador en el sentido de que es un lenguaje básico, con instrucciones primarias que se ejecutan "a pelo" le pongas lo que le pongas por delante.
Por poner un ejemplo. Ya hemos dicho con anterioridad que no puedes comparar en FUP y en KOP valores enteros con reales, por poner un ejemplo. En AWL sí se puede.
¿Tiene sentido?
Ninguno.
Pero AWL no entiende de variables enteras, entiende de bits. Y si tu le indicas que haga una suma entera de dos variables, la hará. Si el formato de estas variables está correcto todo irá bien. Si está mal pues el PLC hará cosas muy pintorescas y divertidas... los primeros dos minutos. Después de 15 minutos sin tener ni pajolera idea de qué pasa, deja de tenerla.
Con el tiempo te darás cuenta de que no tiene ni p.. gracia ya desde el principio.
Frustraciones personales a parte, con todo esto quiero que te quedes con dos cosas:
- El AWL es el lenguaje base del resto.
- Todo es traducible a AWL, pero no al revés.
La primera parte creo que ha quedado clara. La segunda, la vas a ver clara enseguida.
Los lenguajes FUP y KOP cuando lo traduces a AWL crean instrucciones que a veces son inservibles de cara a la ejecución del programa pero necesarios para la propia integridad del lenguaje FUP y KOP. Necesitan de esas instrucciones para dar consistencia a lo que estás dibujando y de ahí que creen lineas que en principio no serían necesarias para un funcionamiento idéntico realizando el programa directamente en AWL.
El problema está que si realizas el programa en AWL directamente, si quieres traducirlo a KOP, por decir uno, el editor no va a tener la capacidad de entender qué diantre quieres hacer. Y por tanto, no podrá traducirlo.
Por tanto siempre podrás traducir FUP y KOP a AWL (más o menos depurado) pero en general, no podrás traducir código AWL a FUP y a KOP. Es así. Asúmelo.
Así que empecemos con las cosas básicas que debes tener claras antes de empezar a programar en AWL.
Instrucciones básicas para programar AWL en Step 7
Las instrucciones básicas van a ser:- U para hacer un AND
- O para hacer un OR
- X para hacer una O exclusiva
- = para igualación
¿No hay negadas?
Veo que estás despierto. Efectivamente. También tendremos:- UN para hacer un AND negado
- ON para hacer un OR negado
- XN para hacer una O exclusiva negada.
¿No hay más?
Sí que hay más. El Set, Reset, flancos... pero de momento, quédate con los básicos que son los de ahí arriba.Operaciones de Y lógica.
Esto lo vas a pillar enseguida verás. Imagina que tienes dos entradas que cuando están las dos a true (1), tenemos que activar una salida. La logica sería así: U E 0.0 U E 0.1 = A 1.0 Es decir, iniciamos el segmento leyendo lo que hay en el E0.0 y le hacemos un AND con el E0.1 y su resultado se lo asignamos a la salida A1.0. O de otra forma, cargamos el E0.0 en el RLO y luego hacemos un AND de la E0.1 con el RLO y se lo asignamos a la A1.0Ya bien, pero estooo, una cosita que te quería comentar...¿Qué es el RLO?
¿Siglas chulas eh? ¿De alguna organización?
Pues no. El RLO no es mas que una variable que almacena el valor de una operación binaria. Es especialmente relevante en la programación de AWL en Step 7.La definición ha quedado chulísima pero no he entendido ni papa.
A ver. En el ejemplo de la Y lógica hemos visto primero una U E0.0 Bien. Como hemos dicho que la U es un AND con lo que tenga el RLO (V ó F). Como no hay operación previa, entonces lo que hace es leer el el valor de la E0.0 y la transfiere al RLO. Imaginemos que tiene un cero. Luego el RLO valdrá cero. Luego imaginemos que la E0.1 está a uno y hace un U E0.1 Es decir, hace un AND con lo que tenga el RLO tras haber ejecutado la operación anterior. La E0.1 está a uno, pero el RLO está a cero, luego el resultado nuevo será cero y se lo cargará nuevamente al RLO. = A1.0 Finalmente, toma el valor del RLO y se lo transfiere a la A1.0 Imaginemos que ambas señales estuvieran a uno. Entonces, inicialmente al leer la E0.0 el RLO pasaría a valer uno. Luego haría un AND entre el RLO y la E0.1. Como ambas están a uno, el resultado lógico sería uno, que sería nuevamente almacenado en el RLO. Finalmente, cargaría ese uno en la salida A1.0 ¿Capito?Operación O lógica
En buena lógica (nunca mejor dicho), podrías pensar que la forma correcta de hacer un OR sería: U E0.0 O E0.1 = A1.0 Y eso estaría bien. Pero la forma más mejó sería haciendo: O E0.0 O E0.1 = A1.0¿Por qué?
Lógicamente hacen lo mismo. Pero me gusta más hacerlo así porque de hecho, cuando traduces un OR de KOP a AWL así lo representa. Mejor que escribamos todos de la misma manera ¿no? Bueno, al grano. ¿Adivinas como actuaría no? Inicialmente haría un: U E0.0 // O E0.0 Como en el caso anterior leería el estado del E0.0 y lo volcaría en el RLO (imaginemos un cero). Luego un: O E0.1 Y aquí haría un OR con el RLO. Imaginemos que el E0.1 estuviera a uno. El resultado del OR sería un bonito uno. = A1.0 E igualamos el uno a la salida A1.0. ¿Sencilo no? Vayamos ahora con los paréntesis.Paréntesis en AWL en Step 7
Como puedes imaginar, en cuanto queramos realizar combinaciones un poco más elaboradas necesitaremos paréntesis para poder realizar estas lógicas. Así, dispondremos de las siguientes operaciones:- U( ..) //UN(..) que valdrá para realizar un (N)AND con el contenido interior al paréntesis
- O(..) // ON(..) que valdrá para realizar un (N)OR con el contenido interior del paréntesis.
- X(..) // XN(..) que valdrá para realizar una (N)XOR con el contenido interior del paréntesis
Operandos de cierre de consulta
A estas alturas de la película te estarás preguntando... si los resultados de la combinatoria se van almacenando en el RLO, ¿qué pasa después de una igualación si quiero empezar a realizar una nueva combinatoria? Pues efectivamente después de los operandos:- Igualación (=)
- Set (S)
- Reset (R)



