• 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 | Teoría | Saltos en Step 7 (I) – SPA , SPB y SPBN (If -Then-Else)

Saltos en Step 7 (I) – SPA , SPB y SPBN (If -Then-Else)

por Iñigo Gútiez · 13 comentarios

Las operaciones de saltos en Step 7 son parecidas conceptualmente a los que nos podemos encontrar en otros lenguajes: interrumpen la ejecución normal del programa (secuencial) y lo retoman en una etiqueta dada.

Los saltos tienen una serie de características y requisitos:

  • Constan de una condición de salto y una dirección donde saltar (la etiqueta).
  • La etiqueta puede tener como máximo 4 caracteres y el primer carácter no puede ser un número.
  • Los saltos pueden ser incondicionales y condicionados.
  • Se distinguen en los nombres de las etiquetas entre mayúsculas y minúsculas («aaa» no es la misma etiqueta que «AAA»)

En la entrada de hoy vamos a ver un salto incondicional (SPA) y dos condicionados (SPB y SPBN). Te mostraré en futuras entradas más saltos para poder hacer un CASE o un FOR-NEXT, pero de momento veremos estos que son los más simples y probablemente más habituales.[divider]

Contenido

  • 1 Saltos en Step 7: SPA
  • 2 Saltos en Step 7: SPB y SPBN (If /Then)
  • 3 ¿Cuándo los voy a usar?
  • 4 ¿Existen más tipos de saltos en Step 7?

Saltos en Step 7: SPA

La operación de salto SPA es un salto incondicional, es decir, se ejecuta siempre que se encuentre en el camino de la ejecución del programa y no depende del estado del RLO.

La sintáxis será de la siguiente forma:

 

….

SPA pepe

(código que no se ejecutará)

pepe: NOP 0

(Código que continuará ejecutándose)

…

 

Tras la etiqueta hay que escribir 2 puntos y obligatoriamente una instrucción.

La instrucción NOP 0 es una instrucción nula. No hace nada de nada. Ocupa 2 bytes en memoria y lleva un minúsculo tiempo de ejecución.  Además sólo es programable en AWL.

A mi personalmente me gusta colocar el NOP 0 tras la etiqueta por varios motivos

  • Porque cuando estás colocando las etiquetas SPA u otras me gusta colocar la etiqueta de salto inmediatamente después. Como no sé cómo va a seguir el programa, coloco la NOP 0.
  • Si coloco una instrucción tras la etiqueta y mañana borro la primera instrucción tras el salto corro el peligro de no darme cuenta que además de la instrucción, he borrado también el salto.
  • A mi juicio queda más limpio ya que todas las etiquetas siempre llevarán el mismo empiece y es más visible entre todo el código.
  • Manías personales (la de más peso probablemente de todas)

La operación de salto SPA en general no irá sola ya que salvo en ocasiones que quieras evitar la ejecución de una parte del código porque estés depurando alguna parte, no tiene mucha utilidad en sí misma.

Normalmente va a ir acompañada de otras instrucciones de salto, complementando las acciones. En el vídeo de ejemplo podrás ver cómo se pueden combinar.[divider]

Saltos en Step 7: SPB y SPBN (If /Then)

Saltos en Step 7

Saltos en Step 7

Estas dos operaciones de salto son condicionadas, es decir, dependen del estado del RLO:

  • SPB: Se ejecutará el salto cuando el resultado de la operación booleana sea true (RLO = 1)
  • SPBN: Se ejecutará el salto cuando el resultado de la operación booleana sea FALSE (RLO = 0)

En definitiva es lo que podríamos llamar  los IF- THEN de otros lenguajes de programación.

La sintáxis será de la siguiente forma:

….

Condición booleana

SPB pepe

(código que se ejecutará si RLO = 0 y no se ejecutará con RLO=1)

pepe: NOP 0

(Código que continuará ejecutándose con o sin salto)

…

Evidentemente con SPBN sería idéntico:

….

Condición booleana

SPBN pepe

(código que se ejecutará si RLO = 1 y no se ejecutará con RLO=0)

pepe: NOP 0

(Código que continuará ejecutándose con o sin salto)

…

 Como bien indica la sintáxis el salto se produce si y sólo si se produce la condición de salto (RLO=0 ó 1 dependiendo de si elijes SPB o SPBN). Esto implica, y quiero dejarlo bien claro aunque sea una obviedad, que el código que está bajo la condición de salto y la etiqueta se ejecutará normalmente si la condición de salto no se satisface.

Para que tengas una idea de cómo hacer un IF-THEN-ELSE… la estructura sería del estilo

…

Condición IF

SPB Etiq1

(Codigo ELSE)

SPA Etiq2

Etiq1: NOP 0

(Codigo del IF)

Etiq2: NOP 0

…

Como puedes ver, hemos combinado el SPB con el SPA de forma que:

  • Si la condición de salto se cumple, saltamos al Etiq1 y ejecutamos el código del IF y continuamos evitando el código del ELSE.
  • Si la condición de salto NO se cumple, ejecutamos a continuación el código del ELSE y hacemos un salto incondicional (SPA) para evitar y no ejecutar el código del IF saltando al Etiq2.

 Como veis estas instrucciones empiezan a ser interesantes ya que nos van a dar bastante juego a la hora de realizar nuestros programas.[divider]

¿Cuándo los voy a usar?

En general vas a usar estas instrucciones cuando el código a evitar o no no lleven aparejado un FC/FB ya que en otro caso, es más simple crear una booleana que te active la llamada a la funcion FB/FB que no andar con saltos.

Es decir, la usaré dentro de los FC/FB  cuando el código a ejecutar o a esquivar sea pequeño y no merezca tener un FC/FB para ello ya que si el código va a ser muy largo, bajo mi punto de vista es mejor englobarlo en una función para un mejor seguimiento y depuración.[divider]

¿Existen más tipos de saltos en Step 7?

Efectivamente hay otros tipos de salto para realizar otro tipos de tareas como pueden ser los que se generan en otros lenguajes como son las sentencias SELECT-CASE o FOR-NEXT entre otros.

Estos tipos de saltos los veremos en posteriores entradas.

Para finalizar, os dejo un video con un ejemplo de saltos donde ver los conceptos vistos anteriormente.

https://youtube.com/watch?v=z611CvyJxvo%3Ffs%3D1

 

Referencias:

 

  • Operaciones con saltos
  • Operaciones de saltos

 

 

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: Teoría, Tutoriales, Videos Etiquetado como: Condiciones, IF-THEN, saltos, SPA, SPB, SPBN

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.

    13 Comentarios

  1. Euclides Rios dice

    11 enero, 2013 a las 21:36

    La verdad es de mucha utilidada para mi ya que estoy practicando, solo y me estoy enterando de muchas cosas a travez de su informacion espero contar contigo para cualquier consulta desde ya gracias y saludos.

    Responder
    • Iñigo Gútiez dice

      11 enero, 2013 a las 21:46

      Hola Euclides,

      Por su puesto que puedes preguntar lo que quieras y en lo que te pueda ayudar, así será.

      ¿Algún tema en concreto?

      Por cierto, podéis contactar conmigo a través de twitter a través del usuario programacions7 o igutiez

      Responder
  2. juan manuel dice

    11 septiembre, 2014 a las 3:05

    Estimado inigo necesito saber si me puedes ayudar en lo siguiente:

    Me estoy empezando a empapar en el tema de programacion y la duda es la siguiente: Me pidieron en mi trabajo dejar fuera de servicio una parte del programa de la maquina, que tiene originalmente la siguiente instruccion:

    SEGMENTO 31
    UN #step.bit_21
    SPB M011
    // Gate opening
    S #Gate

    U «DB_Machine setup».POS_0
    U #Gate_low
    U #Compactions_opened
    R #step.bit_21
    S #step.bit_22
    M011: NOP 0

    Yo necesitaria que no se cumplan las siguientes operaciones logicas:

    (S #Gate) y (U #Gate_low)

    Las demas operaciones se tendrian que continuar ejecutandose,…yo arme y modifique todo el segmento por este:

    SEGMENTO 31
    UN #step.bit_21
    SPB M011
    // Gate opening
    SPA M100
    S #Gate
    M100: NOP 0
    U «DB_Machine setup».POS_0
    SPA M101
    U #Gate_low
    M101: NOP 0
    U #Compactions_opened
    R #step.bit_21
    S #step.bit_22
    M011: NOP 0

    Me podrias decir si esta correcto lo que hice?

    Saludos Y Muchas Gracias

    Responder
  3. Iñigo Gútiez dice

    11 septiembre, 2014 a las 6:20

    Si. Esta bien. Pero te has complicado la vida un buen rato.
    Si quieres anular eso sin borrarlo, simplemente los comentas poniendo // delante y ya esta.
    No tiene mucho sentido hacer saltos para eso

    Saludos

    Responder
    • juan manuel dice

      11 septiembre, 2014 a las 11:43

      Estimado Inigo:
      Te agradezco enormemente la respuesta, la verdad no se me habia ocurrido, al poner las // queda como una parte comentada del programa y eso no se ejecutaria no es cierto?

      Responder
  4. Iñigo Gútiez dice

    11 septiembre, 2014 a las 11:47

    Cooorrecto!
    Saludos!

    Responder
    • juan manuel dice

      11 septiembre, 2014 a las 13:48

      Saludos inigo y nuevamente gracias, me gustaria tener otro medio de contacto, es posible? una direccion de mail?

      Responder
      • Iñigo Gútiez dice

        11 septiembre, 2014 a las 18:37

        En el apartado «acerca de» puedes encontrarlo.

        En cualquier caso, aprovecho para comentar que las dudas que no hagan referencia a la entrada, por favor realizadlas en el foro.
        Tampoco por correo voy a ayudar si puedo. Todo las dudas que pueda resolver, en el foro.

        Saludos

        Responder
        • juan manuel dice

          11 septiembre, 2014 a las 23:40

          Perfecto Iñigo, entiendo y acepto las politicas del blog, ya modifique el programa del plc en cuestion y quedo perfecto, fue enorme tu ayuda.

          Saludos

          Responder
  5. Aylen dice

    9 mayo, 2019 a las 16:10

    Hola no puedo ver el video.

    Responder
    • Iñigo Gútiez dice

      9 mayo, 2019 a las 17:04

      Corregido.

      Responder
  6. Adrián dice

    24 octubre, 2019 a las 14:39

    Buenas,tengo una pregunta. Cuando el programa de dentro del salto se ejecuta y llega al BEA, el programa vuelve a la primera linea,o vuelve a la linea en la que se llamó al salto? Gracias de antemano.

    Responder
    • Iñigo Gútiez dice

      24 octubre, 2019 a las 15:21

      Ninguna de las dos.
      Bea es finalizar la ejecución del bloque incondicional, y por tanto sale de este y continua en el bloque padre (desde donde se llamó)

      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