• Skip to primary navigation
  • Skip to main content

ProgramaciónSiemens

Cursos online de automatización industrial con PLC Siemens

  • Cursos
  • Mi cuenta
    • Mi cuenta
    • Blog
    • Foros
    • Curso HMI con Python y Qt-Designer
    • Curso de AWL
    • Curso de iniciación a la Industria 4.0
    • Curso Express de TIA Portal
    • Curso de WinCC Flexible 2008
    • Crear HMI con OPC y VB.NET
    • Crear HMI con Snap7 y VB.NET
    • Curso ViSnap7
    • Curso de TIA Portal para CPU 1200
    • Curso de Step 7 V5.x
    • Curso de comunicaciones IE y Profinet
  • Contacto & Faq

Cómo usar los acumuladores en AWL

por Iñigo Gútiez · 13 Comments

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

acumuladores en awl

Contenido

  • 1 Acumuladores en AWL
  • 2 Pero si los acumuladores en AWL son dos, ¿qué pasa con el ACU2?
  • 3 ¿Qué más operaciones se pueden hacer?
    • 3.1 ¿Qué seguridades hay a la hora de realizar operaciones matemáticas?
    • 3.2 Guay. Pues lo sumo en AWL.
    • 3.3 Forma en que carga y se transfiere al ACU1
      • 3.3.1 ¿Qué ocurre cuando lees el ACU1?
    • 3.4  ¿Menudo lío no?
  • 4 Operaciones con los acumuladores que afectan al RLO
  • 5 ¿Cuántas operaciones con los acumuladores hay?
  • 6 ¿Y el vídeo de esta semana?
  • 7 ¿Qué te parece esto de los 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.[divider]

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.

https://youtube.com/watch?v=WBt2EimjNmU%3Ffs%3D1

 

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

Iñigo Gútiez
Iñigo Gútiez

Enseño a programar PLC de Siemens a través de mis cursos.
Más información sobre mi aquí

Puedes seguirme en cualquiera de las siguientes redes sociales.

Filed Under: blog

Reader Interactions

    Deja un comentario Cancelar

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

    13 Comentarios

  1. JMM says

    17 octubre, 2013 at 22:04

    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.

    Responder
    • Isaac says

      23 febrero, 2014 at 21:40

      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.

      Responder
      • Iñigo Gútiez says

        24 febrero, 2014 at 21:53

        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

        Responder
  2. Iñigo Gútiez says

    17 octubre, 2013 at 22:09

    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!

    Responder
  3. rafael says

    22 octubre, 2013 at 11:22

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

    Responder
  4. rafael says

    22 octubre, 2013 at 11:27

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

    Responder
  5. Francisco says

    23 octubre, 2013 at 18:39

    Como siempre fantastica tu leccion

    Gracias por tu tiempo.

    Responder
  6. ELOY says

    7 mayo, 2019 at 21:24

    Saludos Iñigo, tengo una duda sobre un programa que estoy analizando…..
    Desde un OB32
    Tengo varios direccionamientos con datos locales asignados a temporales…
    L PEB 0
    T #TEMP0
    …………..
    L PEB 4
    T LB4
    ……………
    // Y es aqui donde tengo la duda
    U L0.1
    U L0.5
    = L 10.0
    U L10.0
    U L0.7
    = L 10.1
    // No entiendo el porque se realizan estas ultimas cargas……………..
    // En teoría es un OB que se ha abierto para almacenar lecturas de posicionamientos de encoders

    Grácias de antemano y mucha salud.

    Eloy Martínez
    Gonvauto (Barcelona)
    aeloymj@uoc.edu
    aeloymj@gmail.com

    Responder
    • Iñigo Gútiez says

      7 mayo, 2019 at 21:44

      Como comprenderás, no sé cual es la intención de hacer esas cargas, para empezar, porque ni se ve en ese código donde apuntan las variables temporales, ni qué son las PEW… tendrás que averiguarlo por tu cuenta que es quien tiene toda la información y el proyecto. Yo puedo leer el programa y saber qué hace, ahora, qué significa? Para mi desde aquí nada porque no tengo la información completa. Suerte con ello.

      Responder
  7. MANSERINE says

    11 enero, 2021 at 0:25

    Gracias Iñigo muy buena explicacion, Este seria el enlace del video https://youtu.be/WBt2EimjNmU

    Responder
  8. Miguel says

    23 junio, 2022 at 13:55

    Hola.

    A ver si podría alguien responderme a esta duda:
    En el vídeo demostrativo del funcionamiento de la operación «+I» se ve claramente que el resultado de la suma se queda en el ACCU1 y el ACCU2 se borra (yo también lo he probado y esto es así).
    Sin embargo, en la documentación de Siemens se indica «El resultado se deposita en el ACU 1. El contenido del ACU 2 permanece inalterado» (https://cache.industry.siemens.com/dl/files/446/45523446/att_79276/v1/s7awl__d.pdf página 101).
    He probado ese mismo código con TIA PORTAL con PCUs 314 y 1511. El PLCSIM de la 314 es el mismo que en STEP7 y por lo tanto funciona como lo mostráis en el vídeo. Sin embargo, en el simulador del 1500 el valor del ACU2 efectivamente se mantiene inalterado.
    Mi opinión es que ese funcionamiento raro es un fallo del simulador y no de la documentación ¿Alguien podría confirmármelo o indicarme algún sitio «oficial» con una fe de erratas o algo así?

    Muchas gracias y buen vídeo!!

    Responder
    • Iñigo Gútiez says

      29 junio, 2022 at 20:58

      El ACU2 no se modifica como bien dices. Los resultados de operaciones aritméticas siempre se vuelcan sobre el ACU1 y el ACU2 permanece igual.

      Responder
  9. jose says

    4 agosto, 2022 at 3:35

    excelente informacion, muchas gracias

    Responder
  • Aviso Legal y Política de Privacidad
  • Condiciones de Venta
  • Política de cookies
  • Contacto & Faq
  • Blog

Copyright © 2023 · Programación Siemens · Todos los derechos reservados

· ¿Quién soy? · Misión, Visión y valores