Entendiendo AWL con Tia Portal
El lenguaje en AWL es uno de los que Tia Portal de Siemens ofrece para que programador de PLCs realice sus instrucciones. Normalmente, se usa para hacer que la ejecuci贸n del programa sea r谩pido.
AWL (Anweisungsliste en alem谩n) signfica literalmente Lista de instrucciones.
Para entender AWL se requiere una serie de conceptos como el RLO.
RLO
El RLO (resultado l贸gico) es el estado resultande de las operaciones que hay desde la primera condici贸n hasta la ocndici贸n deseada.
Aunque existe, s贸lo se muestra de manera direta en AWL. En KOP de manera indirecta iluminando el contacto.
Supongamos que tenemos la siguiente instrucci贸n en la que a
y b
son 0
(su valor en el arranque del programa):
RLO Valor
U a 0 0 // RLO = a = 0
U b 0 0 // RLO = a * b = 0
= r 0 0 // RLO = r = 0
El RLO en cada l铆nea ser谩 obviamente cero.
Si ahora ahcemos que a=1
, tenemos que el RLO s贸lo vale 1
en la primera l铆nea:
L 1 // Cargamos un 1
T a // Lo transferimos a la variable a
RLO Valor
U a 1 1 // RLO = a = 1
U b 0 0 // RLO = a * b = 0
= r 0 0 // RLO = r = 0
Haciendo lo mismo pero con b
(b=1
), el RLO de todas las l铆neas es de nuevo 0
.
L 1 // Cargamos un 1
T b // Lo transferimos a la variable b
RLO Valor
U a 0 0 // RLO = a = 0
U b 0 1 // RLO = a * b = 0
= r 0 0 // RLO = r = 0
En el caso de que ambas variables sean 1
, tenemos que el RLO ser谩 tambi茅n 1
en todas las l铆neas de esta instrucci贸n:
L 1 // Cargamos un 1
T a // Lo transferimos a la variable a
T b // Lo transferimos a la variable b tambi茅n
RLO Valor
U a 1 1 // RLO = a = 1
U b 1 1 // RLO = a * b = 1
= r 1 1 // RLO = r = 1
Saltos
Los saltos son similares a una instrucci贸n if/else. Bajo una condici贸n, podemos programar para que la ejecucci贸n del programa se dirija a un bloque u otro.
Las instrucciones de Saltos empiezan por SP
(Sprung, salto en alem谩n).
Estos son algunos tipos de saltos que pueden ser 煤tiles para tu programa en AWL:
- SPB: salta si RLO vale 1
- SPBN: salta si RLO vale 0
- SPA: salto absoluto (salta incondicionalmente). 脷til para organizar tus instrucciones.
// C贸digo
SPB NombreDelSalto // Se realizar谩 el salto si el RLO es 1
NombreDelSalto: NOP 0 // indica instruci贸n nulla
// M谩s c贸digo
Bucles
Un bucle es una secuencia repetiva de operaciones iguales. Si introducimos un salto al final de una secuencia de instrucciones para que se ejecute el principio de un c贸digo dada una condici贸n tenemos un bucle.
La mejor manera de ver esto es con un ejemplo. Supon que queremos incrementar el valor de una variable numero
por su valor actual m谩s una serie de veces (10). La forma de implementar en AWL ser铆a:
// Asignamos 0 a las variables indice y numero que son de tipo Int
L 0
T indice
T numero
BUCLE: NOP 0
// Sumamos en cada iteraci贸n numero = numero + 1
L numero
L 1
+I
T numero
// Actualizamos el 铆ndice
L indice
L 1
+I
T indice
// Verificamos 铆ndice
L indice
L 10
>=I // indice >= 10 ?
SPBN BUCLE // La ejecuci贸n salta a la etiqueta BUCLE si RLO=0
Instrucci贸n AUF
Aufmachen. Auf. . Aufmachen significa abrir en alem谩n. Se suele usar auf para referir que algo est谩 abierto haciendo funci贸n de adjetivo: "heute Abend ist Lidl nur 18Uhr auf" (hoy el supermercado Lidl est谩 hasta las 18:00 abierto). Sin embargo, aqu铆 en AWL es una acci贸n, abrir.
Como debes intuir, la instrucci贸n AUF permite abrir algo. Como estamos en AWL, qu茅 es posible que podamos abrir? Exacto! Un DB (DatenBaustein) y hacer operaciones en 茅l, como asignar cambiar cualquier variable del mismo.
Ejemplo:
AUF "DB_Datos" // Accediendo al DB_Datos
L %DBW48 // Cargamos el valor de la posici贸n (offset) 48 del DB
T "DB_Datos".Variable1 // Transferimos ese dato a valor Value1 del DB Data2
Es posible abrir un DB de forma din谩mica usando AUF DB [ #Num]
donde Num
es una variable de tipo Int
. Esto es 煤til en b煤cles o en instrucciones donde no sabemos de manera fija el DB a cambiar sino que depende de un bloque de c贸digo anterior.
Acumuladores
Los PLCs de Siemens disponen de 2 acumuladores (ACU1 y ACU2).
L 2 // Cargamos un 2 en un acumulador
L 4 // Cargamos un 4 en un acumulador
+I // Hacemos la suma de ambos
T "DB_Datos".Variable1 // Transferimos el resultado en una variable del programa
Supongamos que queremos sumar 3 valores, como en el ejemplo siguiente, pues pasar谩 lo comentado en el c贸digo:
RLO Valor
L 2 1 2 // 2 se carga en ACU1
L 4 1 4 // 4 se carga en ACU1 y 2 se pasa el ACU2
L 3 1 3 // 3 se carga en ACU1 y 4 se pasa el ACU2
+I 1 7 // Se realiza la suma de los Acumuladores
T "DB_Datos".Variable1 1 7 // Se transfiere el resultado a una variable
Vemos el primer valor de la instrucci贸n L 2
se ignora ya que se pierde durante la ejecucci贸n. Para resolver este problema podemos hacer lo siguiente:
RLO Valor
L 2 1 2
L 4 1 4
+I 1 6
L 3 1 3
+ I 1 9
T "DB_Datos".Variable1 1 9
Fin
Hasta aqu铆 el art铆culo. Lo ir茅 actualizando en el futuro mientras vaya aprendiendo y aplicando m谩s instrucciones en AWL.