Cómo usar los acumuladores en AWL

Lo primero que vamos a ver en este capítulo es lógicamente, qué son los acumuladores en AWL.

acumuladores en awl

Acumuladores en AWL

Los acumuladores son dos:

  • ACU 1
  • ACU 2

Ambos son dos áreas de memoria de 4 bytes (doble palabra) cada uno.

Se usan fundamentalmente para realizar cálculos matemáticos y para transferir información de una área de memoria a otra (por ejemplo de marcas a zonas de DB, entradas, salidas…)

La forma de trabajar básica con ellos son la lectura y la transferencia

  • Lectura (L): Lees la marca, dw, pew o lo que sea y lo transfieres a el ACU 1
  • Transferencia (T): Lees lo que tiene el ACU 1 y lo copias en la marca, paw, etc.

Como ejemplo:

L 67 -> Leemos el valor 67 y lo transferimos al ACU1

T MW 10> Leemos lo que tenga el ACU1 (en este caso un 67) y se lo transferimos a la marca MW10.

¿Sencillo no?

Pero si los acumuladores en AWL son dos, ¿qué pasa con el ACU2?

Bien. La idea de tener dos acumuladores es básicamente para realizar operaciones matemáticas (entre otras cosas que veremos a continuación). La forma en la que trabaja es en forma de pila, es decir:

Cuando leemos algo y se lo transferimos al ACU1, previamente el PLC ha realizado la operación de transferir el ACU1 al ACU2. Posteriormente transfiere lo leido al ACU1.

Imaginemos que queremos sumar dos valores enteros. Para ello actuaríamos de la siguiente manera:

L 8 -> Cargamos el ACU1 en el ACU2  (nos da igual qué tenga), y cargamos el 8 en el ACU1

L 7 -> Copiamos el ACU1 al ACU2 (el 8) y cargamos el 7 en el ACU1.

+I -> Hace la suma entera entre el ACU1 y el ACU2 y el resultado lo transfiere al ACU 1

T MW 10 -> Copiamos el valor del ACU1 a la marca MW10 (15)

¿Qué tendrían entonces el ACU1 y el ACU2?

ACU1 = 15

ACU2 = 8

Sí. 8. No 7 que es el último valor leído. Tras hacer la suma, ha transferido el valor  de la suma al ACU1 (ha machacado el 7 con el 15). El acumulador 2 como veremos en el vídeo se pone a cero (aunque realmente poco o nada importa tenga ya que no lo vas a utilizar).

¿Qué más operaciones se pueden hacer?

Como puedes intuir, además de sumar enteros, podrás restar, multiplicar, dividir, entre otras muchas operaciones  en todas sus variantes:

  • Enteros
  • Dobles enteros
  • Reales

¿Qué seguridades hay a la hora de realizar operaciones matemáticas?

Pues así, como resumen, y para no alargarme demasiado: NINGUNA

Como bien sabes en FUP o KOP, el editor del PLC no te deja realizar ideas felices como sumar un entero con un real, por mucho que te guste y lo intentes.

En AWL sí vas a poder.

Guay. Pues lo sumo en AWL.

Pequeño saltamontes, he dicho que deja, no que el resultado sea el esperado. Es más, te daría resultados interesantes y variopintos para que estés entretenido durante unas cuantas horas como no te percates en el momento de la chapuza realizada.

Imagina que sumas, haciendo ya el burro del todo:

L L#50000

L 50000.0

+I

T MW10

¿Valor de MW10?

Chupado: 50 mil más 50 mil, cien mil. Sí. Sí por lo coj…

No sé ni lo que daría.

Para empezar, porque 100 mil no se puede cargar en 16 bits. Como bien sabes, los enteros van desde -32767 a 32768. Para continuar, porque mezclar reales con doble enteros no pega ni con cola.

Forma en que carga y se transfiere al ACU1

Para dejarlo aún más claro: el ACU1 tiene 4 bytes, lo que viene siendo dos palabras. Cuando tú transfieres un número entero positivo inferior a 256 (un byte), este se carga en el byte bajo de la palabra baja. Es decir, en el byte 3 del ACU1. El resto de los bytes se ponen a cero.

Cuando transfieres un entero más grande que no entra en 8 bits, (imaginemos 12345), este valor se carga en la palabra baja(bytes 3 y 4). Los bytes 1 y dos se ponen a cero.

Finalmente cuando cargo un número real (el -1234,5), se usan los 4 bytes (si es pertinente)

¿Qué ocurre cuando lees el ACU1?

Pues que depende de la variable sobre la que escribas.

Si haces un T MB 8, pues estarás cogiendo el byte bajo, de la palabra baja. Tenga lo que tenga el resto, sólo leeras el byte 3 del ACU1 y se lo transferirás al MB8.

Si haces un T MW8, pues cogerás la palabra bajay se la transferirás a el MW8.

Finalmente si haces un T MD10, tomarás el valor completo del ACU1 y se lo transferirás al MD10.

 ¿Menudo lío no?

Pues en realidad, no tanto. Si simplemente haces operaciones con variables coherentes entre sí (reales con reales, enteros con enteros), no te deberás preocupar qué es lo que se está cargando o transfiriendo en el ACU1, porque simplemente estará bien.

Simplemente ten cuidado y no mezcles churras con merinas y todo irá bien. Pero quiero que entiendás qué es lo que estás haciendo y porqué funciona (o no).

Como ves, en ningún momento he hablado de nuestro nuevo mejor amigo el RLO. Hasta ahora.

Operaciones con los acumuladores que afectan al RLO

Hasta ahora sólo hemos hablado de operaciones que son aritméticas. Estas no afectan al RLO.

Ahora bien, hay operaciones en las cuales el resultado sí cambia el RLO como son las de comparación, por ejemplo.

Así, por poner un ejemplo:

L MW 10

L MW20

==I

= A1.0

Lo que estaremos será cargar el contenido del MW 10 y MW20 en los ACU2 y ACU1 respectivamente y ejecutar la operación de comparación de igualdad. El resultado es booleano (sí o no) y se carga en el RLO.

Por tanto, si ambos números son iguales, activaremos el A1.0 y si son diferentes, apagaremos la A1.0

¿Cuántas operaciones con los acumuladores hay?

Imagino que querrás sabes qué operaciones puedes realizar. Bien, en el blog tenemos un listado que encontré en su día con todas las operaciones que se pueden realizar en AWL.

Échale un vistazo y verás que el abanico es bastante amplio. En esos listados hay instrucciones que aún no hemos visto, pero que veremos más adelante. Que te vayan sonando.

¿Y el vídeo de esta semana?

En el vídeo de esta semana vamos a ver todo esto con el simulador del PLC.

¿Qué te parece esto de los acumuladores en AWL?

Como has podido ver, no es muy compicado si se tiene cuidado con lo que se hace. En futuros ejemplos iremos viendo cómo se aplica todo lo expuesto y podrás comprobar que es más fácil de lo que parece a primera vista esto de enredar con acumuladores en AWL.

Como ya es tradición recordarte que tienes cupones descuentos exclusivos en el foro para poder usarlos en la tienda.

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 …

7 Comentarios

  1. Hola Íñigo, una vez más has estado puntual a la cita, interesante exposición para seguir mirando el PLC de otra forma de la que los habituales a Ladder estamos acostumbrados a verlo.

    Estamos atentos al vídeo.

    Saludos.

    • Excelente explicación me a quedado muy claro como operan los acumuladores, si fuera posible explicar es cuando quieres cargar una DB en los acumuladores, primero se debe llamar a la DB o simplemente se diseña un programa, realizando un salto y cargar los acumuladores………gracias por esta información.

      • Puedes abrir el DB con un AUF DB100 (por poner un número) y luego cargas o transfieres con L DBW2 o T DBW 8 por poner ejemplos.

        Pero tambien puedes hacer las lecturas o escrituras de forma directa, haciendo un L DB100.DBW2 o T DB100.DBW8

        Saludos

  2. Gracias..
    Lamentablemente no he podido llegar a tiempo al jueves…
    Pensé en dejarlo para mañana y ponerlo todo junto, pero luego he creído que se puede echar una leída primero y una vez visto el post, ver tranquilamente el video.
    A ver si mañana puede estar.

    Un saludo!

  3. Hola Iñigo cuando dices que TMB 8 estoy leyendo el byte alto de la palabra alta del acumulador 1 o sea el byte 3 ¿? yo pensaba que era el 4 ¿¿? y como decia mi amigo Pedro Vargas ;muy agradecido,muy agradecido y muy agradecido..

  4. perdona despues que pregunte entendi es porque es menor de 256 ¿¿?nuevamente gracias

  5. Como siempre fantastica tu leccion

    Gracias por tu tiempo.