Continuando con el curso, hoy vamos a comenzar una serie de post en los que veremos los diferentes tipos de saltos en Step 7.
Esta serie de capítulos ya los hemos visto con anterioridad. Concretamente este capítulo lo hemos visto aquí.
Contenido
¿Qué son los saltos en Step 7?

Como en cualquier lenguaje de programación, los saltos en step 7 no son mas que iterrupciones de la ejecución lineal del código, posicionándose en un nuevo punto (en general indicado por una etiqueta o meta) continuando normalmente con el programa desde este nuevo punto.
En el caso de los PLC estos saltos nos sirven para simular decisiones que en lenguajes de alto nivel se resuelven de otra forma, como por ejemplo con los IF/THEN-ELSE por poner un ejemplo.
Estas estructuras como tal no existen en AWL/FUP/KOP, sino que hay que fabricarlas por decirlo de alguna manera. La forma más sencilla de hacerlo es mediante el uso de saltos.[divider]
Los más importantes por su uso a mi juicio son SPA, SPB y SPBN.
SPA se usa para saltos incondicionales.
Es decir, cuando se ejecuta esta sentencia, la ejecución continua en la etiqueta que acompaña al operando de forma fija e incondicionada. No depende de nada. Salta y continua.
La forma de ejecución será la siguiente:
SPA META
<<Código que no se ejecuta>>
META: <<continua el código>>
Tal y como esta representado, si se ejecuta la sentencia SPA META, el código entre esta sentencia y la META en sí, no se ejecutará nunca.
¿Entonces para qué sirve?
Bueno, enseguida veremos como gestionar este tipo de cosas. De momento quédate con la idea de que SPA es un salto incondicional al META indicado.[divider]
SPB y SPBN se usan para saltos condicionados al valor del RLO
La diferencia fundamental entre ellos es que si usas SPB el salto se producirá si el RLO = 1, mientras que el salto usando SPBN se producirá si el RLO = 0.
Por tanto, y análogamente su uso será de esta forma:
<<Condición del salto>>
SPB META (o SPBN META)
<<Código que no se ejecuta>>
META: <<continua el código>>
Es decir, tras evaluar el resultado de la condición de salto (cero o uno), en fución de este. y del tipo de salto elegido (SPB o SPBN), se realizará el salto o no.[divider]
¿Qué pasa si no se realiza el salto?
Buenísima pregunta. ¿qué crees que sucederá?. Efectivamente, que la ejecución del código continuará normalmente. Pongamos un mini ejemplo.
L MW0
L MW2
==I
SPB IGUA
L 1
L MW4
+I
IGUA: NOP 0
<<Resto del programa>>
Veamos. Lo que estamos haciendo es lo siguiente: cargamos el contenido del MW0 y MW2 en el ACU1 y ACU2. Luego hacemos una opeación de comparación de igualdad. Es decir, preguntamos si estos dos valores son iguales. El resultado de esta comparación será binaria (cero o uno) y estará cargado en el RLO.
Bien, una vez tengamos el resultado de esta comparación decimos que si el RLO = 1, salte al meta IGUA. Entonces continuarça con el resto del programa.
Ahora bien, si no se cumple la igualdad, se ejecutará el código que hace que la marca MW4 se incremente en una unidad… y seguirá con el resto del programa.[divider]
¿Vale, vale… pero como construyo un IF-THEN-ELSE?
Pues haciendo una combinación de los saltos podemos hacer la lógica:
IF Condición THEN
Código si se cumple la condición
ELSE
Código si no se cumple la condición
END IF
¿Cómo lo hago con saltos en Step 7?
Pues usando los saltos así:
Condición de salto
SPBN ELSE
Código si se cumple la condición
SPA EXIT
ELSE: NOP 0
Código si no se cumple la condición
EXIT: NOP 0
Continuar con el código.
¿Lo vemos con un ejemplo?
Siguiendo con el ejemplo inicial:
L MW0
L Mw2
==I
SPBN ELSE
L MW4
L 1
-I
T MW4
ELSE: NOP 0
L MW4
L 1
+I
T MW 4
EXIT: NOP 0
Es decir, cargamos MW0 y MW2. Evaluamos si son iguales o no. En función del resultado:
- Si es igual, el resultado será RLO=1, y por tanto no hará el salto a la meta ELSE. Restará una unidad a MW4 y realizará un salto incondicional a la meta EXIT.
- Si no es igual, el resultado será RLO = 0, y por tanto SI hará el salto a la meta ELSE. Sumará una unidad a MW4 y continuará el programa.
[divider]
¿Pero esto no se puede hacer con FUP o KOP?
La mayoría de las veces, las situaciones de aplicar operaciones de comparación irá asociada y combinada con lógica booleana, por lo que sí será aplicable hacerlo con KOP o FUP si el resultado es por ejemplo poner una marca a Set.
La idea de usar AWL y este tipo de soluciones cuando vas a realizar muchas operaciones aritméticas, punteros etc. No para programación booleana.[divider]
¿El vídeo?
Esta semana no hay video nuevo porque no he tenido tiempo para preparar el ejemplo. Es por ello, que recupero el ejemplo que realicé en su día.[divider]
[divider]
¿Qué te ha parecido?
Espero que te haya sido útil, y estaría bien saber si sueles usar este tipo de saltos o no.
Por otro lado, y como siempre, recomendarte que si tienes que comprar material eléctrico entres en www.masvoltaje.com y eches un vistazo ya que podrá encontrar todo el material necesario para tus proyectos de automatización.
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.
8 Comentarios
Hola Íñigo:
Otra de tus aplicaciones prácticas de programación… Antes de visto este tema, según nos lo expones yo hacía trabajar un poquito de más al PLC… Por ejemplo, 24 condiciones que coinciden según sean las horas del día… Pasa por la primera, si es igual a 0 (primera hora del día, o hrs.) haz algo y sigue, pasando por las siguientes igualaciones (que lógicamente no se cumplían) y así hasta terminar, o bien si no se cumple sigue hasta que encuentres una que si se cumpla, hazla y sigue mirando el resto (si te quedan, aunque no se cumplan)… o sea, según nos muestras aquí, todo un derroche de tiempo de ciclo… Una vez entendido esto, mi manera de mirar los mini-programas a los que me he enfrentado ha cambiado radicalmente.
Aplicación entonces más que interesante.
Saludos.
Jeje.
Pues espera que aún hay bastante más..
Poco a poco..
Temazooo y muy bien explicado! Se agraadece la sencillez y animarte con el curso.
Saludos
Excelente explicación creo que es importante tener mas ejercicios para poder entender con mas facilidad estos ejemplos.
gracias Iñigo, que sencillo lo pones 🙂
Muchas gracias Andrés!
Muy Buena la explicacion y el ejemplo bastante util, por favor dime si falto hacer el salto incondicional a la meta EXITm despues de Restarle una unidad a MW4, dicho ejemplo quedaria de la siguiente manera ya correjido:
Siguiendo con el ejemplo inicial:
L MW0
L Mw2
==I
SPBN ELSE
L MW4
L 1
-I
T MW4
SPA EXIT ;?????
ELSE: NOP 0
L MW4
L 1
+I
T MW 4
EXIT: NOP 0
Sí, el salto incondicional es obligatorio como lo has hecho ya que de otra forma, se ejecutarían ambas partes cuando MW2 =MW4.