Lo primero que vamos a ver en este capítulo es lógicamente, qué son los acumuladores en AWL.[divider]
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?
- 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.
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.
17 Comentarios
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
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!
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..
perdona despues que pregunte entendi es porque es menor de 256 ¿¿?nuevamente gracias
Como siempre fantastica tu leccion
Gracias por tu tiempo.
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]
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.
Gracias Iñigo muy buena explicacion, Este seria el enlace del video https://youtu.be/WBt2EimjNmU
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!!
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.
excelente informacion, muchas gracias
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!
Muchas gracias Pablo!
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
L8.1 no es mas que una dirección local (temporal). Hace referencia a ese área de memoria.