AWL

Algebra booleana (II) – AWL en Step 7

AWL en Step 7¿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.

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:

[unordered_list style=”bullet”]

  • El AWL es el lenguaje base del resto.
  • Todo es traducible a AWL, pero no al revés.

[/unordered_list]

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.

 

Luego lógicamente tendremos paréntesis (). Pero eso más tarde.

 ¿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.0

 Ya 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

En definitiva en lo que se basa es en realizar la combinatoria interior del paréntesis y luego ejecutar la operación asociada al paréntesis.

Los paréntesis pueden anidarse metiendo paréntesis dentro de otros paréntesis.

Así, odríamos hacer algo similar a lo anteriores ejemplos:

U(

U E0.0

O E0.1

)

O(

U E0.2

U E0.3

)

= A1.0

En este caso primero resolvería la combinatoia interior de los paréntesis por separado y luego realizaría el OR entre el resultado de los paréntesis.

Hay que añadir que el caso del OR es un poco especial ya que si dentro del paréntesis del OR la combinatoria es de AND exclusivamente, el paréntesis se podría haber obviado quedando esa parte así:

O

U E0.2

U E0.3

Y funcionaría exáctamente igual.

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)

 

Con esos operandos, se cierra la consulta actual y se abre una nueva (además del inicio del programa)

Da igual por tanto lo siguiente que hagas (U,O, UN…) porque lo que se hará es una lectura del operando en el RLO. Es decir, si la siguiente a una igualación es

= A1.0

UN E1.0

U E1.1

= A1.2

Lo que hará es leer el estado de la E1.0, le cambiará el signo y lo cargará en el RLO. No hará un NAND con nadie. Simplemente realizará la carga en el RLO.

Ojo. Un cambio de segmento no es un inicio de programa. Por tanto si la última instrucción de un segmento es la lectura de un bit haciendo un U E0.7, este afecta al siguiente segmento. A efectos prácticos es como si lo hubieras escrito al principio del nuevo segmento.

Finalmente vamos a ver un vídeo como siempre, explicando lo visto hasta ahora.

¿Qué pasa con el Set y Reset?

Paciencia pequeño saltamontes, paciencia…

¿Qué te ha parecido?

Como siempre, espero tus comentarios.

¿Se ha entendido? Porque si se entiende esto, lo tienes hecho. En serio. Una vez que entiendes cómo funcionar con el RLO, lo que veremos a continuación (en el siguiente capítulo), es pan comido.

En el siguiente capítulo terminaremos con la lógica booleana y veremos algunas cosillas más de los acumuladores y registros.

Y por supuesto, si quieres realizar una compra en material eléctrico, no dejes de visitar nuestra tienda de Masvoltaje.com

 

Acerca de Iñigo Gútiez

Ingeniero industrial por la Escuela de Ingenieros Superiores de Bilbao. Trabajo como ingeniero de proyectos y automatización en Guardian Industries

Te puede interesar

curso en pdf de Step 7

El curso en pdf de Step 7 V5.x se vuelve una Rolling Release

Muchos de los lectores han comprado el curso en pdf de Step 7 “Cómo programar en …

19 Comentarios

  1. Gracias por una nueva entrega del curso.

    Una pequeña errata, para que veas que te seguimos y que estamos atentos:

    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:

    O 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

    Los dos ejemplos son iguales.
    Supongo que es:

    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……Etc.

  2. Gracias, por fin me han resuelto la duda del RLO.

    Saluos

  3. Excelente Iñigo!!!!

    Buen aporte!!!

  4. Para que veais que Íñigo es humano y también se equivoca, no es un S7-400 que hemos puesto aquí automatizado escribiendo post.

    Muy trabajado!, un saludo!

  5. Me parece muy interesante este tema lo explicas muy bien y con el vídeo mucho mejor porque podemos ver que menús del programa vas utilizando .
    El año pasado estudie un curso de automatas dimos el Zelio,Omron y Siemens 200 y 300 pero no dio tiempo a ver mucho programación scada y el step7 sólo un poco por encima y lo de AWL poco y claro era un curso de 3 meses que estuvo muy bien pero claro falto esto y como utilizar el Profibus.
    Ahora estoy haciendo uno de Mantenimiento de Electrónica que dura 9 meses pero claro tengo FP2 de Electronica y al ver que ibas a explicar como programar con el Step 7 me pareció muy interesante por poder aprender más y recordar algo de lo que aprendí.

    Muchas gracias por dedicarnos tu tiempo y tu sabiduría y sigue con está labor tan valiosa.
    Atentamente .

    Jose Luis

  6. Iñigo,antes que nada agradecerte tu labor y decir que me sirve de mucha ayuda y que lo haces muy bien.

    Viendo lo difícil que es descifrar el AWL una forma de proteger tus programa podría ser hacerlo en KOP, luego lo traduces a AWL y lo copias todo en el mismo segmento?? Ya que he visto en la otra entrada no sirve de nada proteger el Know How.

    Un saludo

    • Hola Henry,

      La verdad es que un programa complicado, le quitas los comentarios y en AWL y el que vaya a echarle mano, pide la cuenta en su empresa.
      Así que no es tan mala opción, aunque no soy partidario de no dar el código a tu cliente.

      Un saludo

  7. Perfectamente entendido, gracias de nuevo Iñigo.

    Por cierto, por curiosidad ¿cual es el significado del acrónimo RLO?

    Saludos.

    • Hola Juan,

      El acrónimo RLO viene de la lengua de Shakespeare: “Result of Logical Operation”… que en un alarde de imaginación como ves lo llamaron Resultado Lógico de Operación.

      Saludos!

  8. Hola iñigo, de argentina te saludo,!! y te comento que gracias a todos tus tutoriales se me hace mas facil aprender el editor de step 7, ojala este blog siga asi con la ayuda de todos, esto que haces habla de manera real la parte humana y profesional que tienes. Un abrazo!!

  9. Hola muchas gracias por el post! esta buenisimo, Tienes por casualidad AWL para S5? necesita hacer una migracion de S5 a S7 y casi todo esta en AWL, y no entiendo ni papa, bueno hasta ahora que lei el post estoy un poco mas clara, solo que faltan muchas instrucciones que no veo aqui que tengo en el programa de PLC, Gracias por la info!

    • Hace unos cuantos años que no programo nada en S5 y realmente aunque sé que hay muchos 95 por ahí, no voy a entrar en el mundo del S5 lo mismo que no haremos ejemplos con protool, por poner un ejemplo.

      Espero que tengas suerte con tu migración.

      Un saludo