• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página

Programación Siemens

Cursos online de TIA Portal y PLC Siemens.

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

Cómo usar los acumuladores en AWL

por Iñigo Gútiez · 17 comentarios

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.

Publicado en: blog

Interacciones con los lectores

    Deja un comentario Cancelar

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

    17 Comentarios

  1. JMM dice

    17 octubre, 2013 a las 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 dice

      23 febrero, 2014 a las 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 dice

        24 febrero, 2014 a las 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 dice

    17 octubre, 2013 a las 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 dice

    22 octubre, 2013 a las 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 dice

    22 octubre, 2013 a las 11:27

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

    Responder
  5. Francisco dice

    23 octubre, 2013 a las 18:39

    Como siempre fantastica tu leccion

    Gracias por tu tiempo.

    Responder
  6. ELOY dice

    7 mayo, 2019 a las 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)
    [email protected]
    [email protected]

    Responder
    • Iñigo Gútiez dice

      7 mayo, 2019 a las 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 dice

    11 enero, 2021 a las 0:25

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

    Responder
  8. Miguel dice

    23 junio, 2022 a las 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 dice

      29 junio, 2022 a las 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 dice

    4 agosto, 2022 a las 3:35

    excelente informacion, muchas gracias

    Responder
  10. Pablo Muratorio dice

    1 octubre, 2023 a las 10:27

    Estoy en Berlin haciendo un curso de Tia Portal, tu sabes que la gente se pierde en espanol, imaginate en aleman! He hecho un par de cursos contigo y me ayudo mucho, este articulo vale su peso en oro. Gracias!

    Responder
    • Iñigo Gútiez dice

      1 octubre, 2023 a las 10:50

      Muchas gracias Pablo!

      Responder
  11. Edinson dice

    3 noviembre, 2023 a las 23:17

    buenas tardes, antemano excelente explicación, quisiera hacerle una pregunta, quiza un poco aparte del tema explicado. Tengo el siguiente segmento de código el cual no he podido entender para que se usa la línea 3 y 4, de donde sale esa área de memoria » = %L8.1″,
    SET
    SAVE
    = %L8.1
    = %L8.1
    A #P_MIN
    JCN A7d0
    L 0.0
    T #QP_TOT
    JU A7d1

    Responder
    • Iñigo Gútiez dice

      3 noviembre, 2023 a las 23:20

      L8.1 no es mas que una dirección local (temporal). Hace referencia a ese área de memoria.

      Responder

Footer

· Acerca de
· Misión, Visión y valores
· Aviso Legal y Política de Privacidad
· Condiciones de Venta
· Política de cookies
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y tu experiencia de usuario. Si continuas navegando, consideramos que aceptas su uso. Aceptar Política de cookies
Política de Cookies

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
GUARDAR Y ACEPTAR