Esta semana vamos a ver el salto SPL en step 7. Se trata de un salto de metas estilo Select Case que podríamos encontrar en lenguajes de programación de alto nivel.
Junto con los ejemplos vistos de cómo hacer los IF/THEN/ELSE y el FOR-NEXT, tendríamos elementos suficientes para realizar programas bastante sofisticados ya que estas tres operaciones son básicas en un lenguaje de alto nivel, pero que permiten realizar operaciones complejas.[divider]
¿En qué consiste el SPL en Step 7?
Básicamente lo que vamos a realizar es un salto a una meta en función del valor numérico de una variable que hemos volcado en el ACU1 antes de realizar la llamada a la instrucción SPL.
La estructura sería como sigue:
Me vas a permitir que te lo cuente un poco más en cristiano. La idea es que cargas un valor numérico entero en el MB0 en este caso en cualquier parte del programa y cuando quieras evaluarlo lo cargas en el ACU1 (haces un L MB0).
Bien. En función de ese valor, con el SPL en step 7 saltaremos a un meta diferente que están ordenados en orden creciente para valores 0,1,2,3… etc.
La primera instrucción curiosamente es definir la condición de CASE ELSE, es decir, qué hacer si no hay un meta definido para el valor en concreto (en nuestro caso si MB0 vale más de 3). En este caso, simplemente estamos haciendo que salte incondicionalmente a la salida del bucle, pero podríamos realizar algún tipo de instrucción antes de salirnos.
Lógicamente es aplicable a todos los metas. Yo incluso se lo suelo poner al último aunque estrictamente no es necesario ya que hacer un:
SPA END0
END0: NOP 0
O quitar el SPA END0, viene haciendo lo mismo. La ventaja es que si añado en un futuro valores para MB=4 por ejemplo, no corro riesgo de dejarme el salto, que entonces si sería necesario para este meta al haber uno nuevo bajo el.[divider]
El vídeo y más información
Este tema ya lo hemos visto con anterioridad y básicamente he repetido lo mismo, más o menos . Te animo de todas formas a que lo leas ya que se indican un par de usos habituales.
En esa entrada también ya te mostraba un ejemplo en el cual se explicaba esto mismo. Creo que es bastante ilustrativo por lo que adjunto aquí también ese vídeo. Si se me ocurre algún ejemplo práctico[divider]
[divider]
¿Qué te ha parecido?
Como todas las semanas te insto a que des tu opinión sobre el tema, si has usado este tipo de saltos y si les ves utilidad.
Y cómo no recordarte que si quieres colaborar con el mantenimiento del blog, te pido que valores colaborar con él accediendo a través de cualquiera de los links del blog a la tienda www.masvoltaje.com donde podrás encontrar material eléctrico a buen precio.
Recordarte también que los comentarios que se viertan deben estar relacionados con el tema en cuestión. Si tienes cualquier duda de otro tipo por favor ,hacedlo a través del foro.
[divider]
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.
4 Comentarios
Excelente!!!
Problema de tipeado SEG2!!! increible que esto antes me parecia escritura china. y me negaba a cambiar la programacion ladder, el AWL ayuda bastante a saber bien que se esta haciendo.
Felicitaciones Iñigo!!!!!
Jeje. Corregido.
AWL quieras o no hay que conocerlo y usarlo a conveniencia… no es ni un ángel ni un diablo.
Saludos!
Hola, me está enganchando este blog últimamente. Me está sirviendo para mejorar bastante. La cuestión es que lo ejecuto cargando 1(L1) y me funciona. Lo ejecuto cargando L DIW0 y se me cae el simulador. No se si es normal. También he probado con L DIB0 y con L DBX0.0 y no arranca el dichoso FB a pesar de tener un valor inicial 1 en la variable estatica «Contador» . A ver si alguien me comenta si le ha pasado. ¡Gracias y salud!
ELSE: NOP 0
L 1
T #NumeroDB
L ‘ ‘
T #Espacio
AUF DI [#NumeroDB]
CALL «FILL»
BVAL :=#Espacio
RET_VAL:=#Temp
BLK :=P#DIX 2.0 BYTE 10
Hola, buen tutoríal.
Te recomiendo que además incluyas el como afecta esta instrucción al estado lógico. (vke o rlo) .
Un saludo y felicitaciones por la explicación.
Miguel Madrid.