• 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 HMI con Python y Qt-Designer
    • Curso de AWL
    • Curso de iniciación a la Industria 4.0
    • Curso Express de TIA Portal
    • Curso de WinCC Flexible 2008
    • Crear HMI con OPC y VB.NET
    • Crear HMI con Snap7 y VB.NET
    • Curso ViSnap7
    • Curso de TIA Portal para CPU 1200
    • Curso de Step 7 V5.x
    • Curso de comunicaciones IE y Profinet
  • Contacto & Faq
Home | blog | Cómo crear tareas a tiempo fijo con solo un OB cíclico

Cómo crear tareas a tiempo fijo con solo un OB cíclico

Cómo crear tareas a tiempo fijo con solo un OB cíclico

por Iñigo Gútiez · 12 comentarios

Hace unas semanas desde Italia (¡ciao Alessandro!) me preguntaban si su CPU 318 además del OB 35 y el OB32, podía activar otro OB cíclico.

Nos estamos mal acostumbrado (en el buen sentido) con TIA Portal y los nuevos PLC, pero en la serie 300 y 400 los OB cíclicos vienen definidos por la CPU.

¿Comooor?

Pues sí, es lo que hay.

Así como en TIA Portal con los S7-1200 y S7-1500 puedes crear diferentes OB cíclicos en función de necesidades y eligiendo el numero de OB cíclico, con las series 300 y 400, esto no es así.

Los OB cíclicos en estas series quedan definidas por el modelo de CPU que estés usando.

No solamente eso, ya que el número de cada OB cíclico está pre determinado.

Para modelos actuales, no es un gran problema ya que típicamente tienen cuatro OB ciclico: desde el OB32 al OB35

Pero los modelos más antiguos o modestos pueden tener solamente 1 ó 2 OB cíclicos. Por ejemplo, el caso de Alessandro: solo tiene disponible el OB32 y el OB35 como se muestra en la imagen:

Cómo crear tareas a tiempo fijo con solo un OB cíclico

La cuestión es que si tienes diferentes tareas a realizar a tiempo fijo ¿cómo lo haces si solamente tienes 1 o 2 OB ciclico?

Vamos a suponer que tienes una CPU un poco viejita que solo tiene 1 OB cíclico para que sea todo más claro.

Ni que decir tiene que esto que te voy a contar es exportable si tienes un número mayor y lo puedes aplicar parcial o totalmente si fuera necesario.

Contenido

  • 1 Crear tareas a tiempo fijo con solo un OB cíclico
  • 2 ¿Como hacemos con las tareas de 50, 60 y 100ms?
    • 2.1 ¿Qué es el comando MOD?
    • 2.2 Houston, tenemos un problema…
    • 2.3 Mínimo Común Múltiplo
    • 2.4 ¿Es un problema bajar mucho el tiempo de ciclo del OB cíclico?
  • 3 El vídeo
  • 4 ¿Qué te ha parecido?

Crear tareas a tiempo fijo con solo un OB cíclico

La idea es tan sencilla que seguro que se te ha ocurrido, pero quiero compartir esta idea tan básica con personas que igual no han caido en ello como tú y yo.

Imagina que quieres que el PLC de Siemens realice 4 tareas a tiempo fijo: 50, 60, 100,  500 ms.

He puesto 50 y 60 aunque sea muy raro, para que veas la pequeña limitación.

Como ves, con el OB35 out of the box que dicen los ingleses tendrías la opción 3: cada 100ms.

Pero ¿y el resto?

Pues muy sencillo.

Lo que vas a hacer es buscar el MCD o Máximo Común Divisor…

¡tóma! ¡tóma! y ¡tóma!

…lo que estudiaste en primaria, ¡resulta que te va a servir cuando tienes unas cuantas canas ya!

Ahora ya en serio: vamos a buscar el ciclo más alto que hagan que se puedan ejecutar todos los intervalos.

En este caso, nuestro MCD es 10ms.

¿Por qué?

Porque si ponemos el OB35 a 10ms, nos aseguramos que cada 5 veces podemos ejecutar la tarea de 50ms, cada 6 veces la de 60ms, cada 10 veces la de 100ms y cada 50 veces la de 500ms.

¿Sí, verdad?

Vale. ¿Cómo hacemos para que solo se ejecute cuando nosotros queramos como si tuviéramos un OB cíclico para cada periodo?

La forma más sencilla es con una marca a modo de contador que vaya de 1 a 50 y que en función del valor de éste, ejecute una u otra tarea.

Cuando el contador llegue a 50, lo pones a cero, de tal forma que va a pasar por todas los ciclos al menos una vez.

¿Como hacemos con las tareas de 50, 60 y 100ms?

Como ves, si lo ponemos de 1 a 50, como idea está bien para ejecutar el de 500ms, ya que así nos aseguramos que ejecutamos este ciclo cada 500ms.

Pero en el caso de 50ms, tendrá que ejecutarse en el ciclo 5, en el 10, 15.. etc.

Podrías hacer que el contador cuando valga 5 o 10, o 15 o 20… ejecute la tarea.

Pues sí. Pero sería poco elegante ¿no crees?

La forma PRO de hacerlo es usando el comando MOD.

¿Qué es el comando MOD?

El comando MOD nos devuelve el resto de una división.

Por tanto, si cogemos ese contador y hacemos MOD con 5 y su resto es cero significa que es 5, o múltiplo de 5, con lo que tienes que ejecutar la tarea de 50ms.

¿Mola o no mola?

Houston, tenemos un problema…

Antes de que empieces a llorar de la emoción, igual has detectado un pequeñísimo problema.

Si hacemos de 1 a 50 el contador, y cuando llegue a 50 lo ponemos a cero… funcionará genial para 50, 100 y 500… pero ¿y con 60?

También… ¿o no?

Pues no.

No funcionará del todo bien.

La razón es muy sencilla: 50 no es múltiplo de 6 y por tanto, en el primer ciclo, genial hasta que el contador vale 48… pero es que el siguiente debería ser 54… es decir… ¡el 4 de la siguiente vuelta!

¡Maldita sea! El MOD no nos valdría.

Pero tranquilo, porque tus estudios de primaria, vienen al rescate:

Mínimo Común Múltiplo

¡No me digas que esto no es una fiesta!

Si hemos usado el Máximo Común Divisor para determinar el periodo de nuestro OB cíclico… el Mínimo Común Divisor se tenía que apuntar a la juerga ¿no crees?

Pues va a ser que sí.

Así pues, nuestro contador o índice, no irá de 1 a 50, sino de 1 a … redoble de tambor… ¡150!

Ahora sí, haciendo MOD, todos las tareas se ejecutarán cuando deben ya que cerramos de forma perfecta los ciclos del contador.

Estoy viendo cómo se resbalan las lágrimas por las mejillas y te tiembla el labio inferior de pura emoción…

¿Es un problema bajar mucho el tiempo de ciclo del OB cíclico?

La respuesta es un depende de libro.

Si las tareas son muy básicas, podrás bajarlo muchísimo.

Si las tareas son muy complejas y largas, entonces lógicamente la cosa se complica más.

La idea es que la suma de las tareas no superen los 10ms.

Pero si no tienen los tiempos iguales… ¡melón!

Ya, pero cada 1500ms, se van a ejecutar todas: la de 50, 60, 100 y 500… porque todas tendran MOD igual a cero cuando el contador valga 150.

Por tanto, ojo con esto… ¡listo!

El sistema no es perfecto, pero vale para salir airoso del envite.

El vídeo

En el siguiente vídeo te dejo con un pequeño ejemplo ilustrativo de lo que estamos tratando de poner un OB cíclico a trabajar de esta manera

¿Qué te ha parecido?

Espero que te haya gustado y te haya abierto alguna puerta en el futuro.

Como otras veces, este ejemplo con el proyecto lo colgaré en los anexos del bloque 2 del  Curso de TIA Portal para que los alumnos lo tengáis siempre a mano.

Como imaginarás, esto es más aplicable en las CPU antiguas que solo tenían un OB cíclico.

Hoy en día, ya no es necesario porque puedes programar muchos más aunque sea de la serie 300.

Pero como nunca se sabe con qué vas a tener que lidiar, está bien saber estas cosillas ¿no crees?

 

 

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: blog

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.

    12 Comentarios

  1. Jorge dice

    14 diciembre, 2017 a las 23:02

    Puff! Se me acaba de deshacer un poco la pelota al ver en el ejemplo que el “resto” de todas las operaciones sea la MD204!
    No se si lo he acabado de entender del todo (el hecho de que no se machaque el valor de MD204) pero…
    al ejecutarse los segmentos, el último que se ejecuta sobreescribe al anterior sin que afecte al valor de la marca en los segmentos anteriores en ese mismo ciclo? Y si no afecta a los anteriores, los posteriores tampoco? Porque lo sobreescribirian?

    Madre! Qué duda!

    Responder
    • Iñigo Gútiez dice

      14 diciembre, 2017 a las 23:14

      Hola Jorge,
      Creo que te estás liando.
      La variable Resto, como bien dices, es machacada en cada segmento por un nuevo MOD. ¿y que mas da?
      Fíjate que lo que haces es realizar el MOD, obtener el resto en MD204 e INMEDIATAMENTE evaluar su valor para decidir si ejecutar el FC pertinente o no.
      Evidentemente, en el siguiente segmento, se le da nuevo valor, pero se vuelve a evaluar seguidamente.
      Realmente el MD204 es una variable auxiliar necesaria para evaluar el resto, pero no es necesario tener una por cada MOD ya que digamos que solo necesito el contenido de esta variable durante la ejecución de cada segmento. Luego, una vez evaluado,su valor es irrelevante.
      ¿me sigues?
      Saludos

      Responder
      • Jorge dice

        16 diciembre, 2017 a las 13:00

        Gracias Íñigo;
        Si, me estaba liando la verdad…

        Responder
  2. Julian dice

    15 diciembre, 2017 a las 13:48

    Digo siempre lo mismo, eres um crack!!!!
    Muchas gracias !!!!

    Responder
  3. Jesus dice

    15 diciembre, 2017 a las 15:21

    Buena opcion. Siempre es bueno ser conscientes de las posibilidades de un automata. Gracias

    Responder
  4. Sofia dice

    17 diciembre, 2017 a las 20:23

    Me parece Maravilloso, creo q debo dedicarme un poco mas…agradecida

    Responder
  5. Juan M. dice

    20 diciembre, 2017 a las 17:59

    Hola Íñigo:

    Eres el hombre S7.

    Tras un periodo de descanso vuelvo a poder ver tus vídeos y como siempre son del todo amenos e instructivos.

    Aprovecho para desearte una feliz Navidad.

    Saludos

    Responder
    • Iñigo Gútiez dice

      20 diciembre, 2017 a las 18:34

      Jaja
      Muchas gracias Juan!
      Felices fiestas también !

      Responder
  6. MARCOS P SOSA dice

    15 julio, 2018 a las 15:10

    genial gracias..

    Responder
  7. Jose Miguel dice

    7 diciembre, 2021 a las 12:54

    Buen video… Lo bueno si breve 2 veces bueno.

    Responder
  8. Jesus dice

    15 julio, 2022 a las 1:49

    Buen trabajo, yo estoy buscando información del ob35 para ejecutarlo a 1ms, lo necesito para hacer una medición con fotocelula infrarrojas, pero necesito un ciclo muy bajo para precisión y no se si se puede que el ob 35 trabaje a 1ms.

    Responder
    • Iñigo Gútiez dice

      28 julio, 2022 a las 12:17

      Depende del PLC y de la tarea que quieras ejecutar cada 1ms. no es lo mismo querer hacer una suma cada 1ms que mil sumas.
      Si puede trabajar a 1ms, es fácil de saber ¿te deja configurarlo a 1ms? ¿has mirado las especificaciones de la CPU?
      Respecto el trabajo a realizar, pues eso ya es lo que quieras programar.
      Si la CPU es moderna, un 1200, o un 1500, puede seguro. CPU 300 viejas, pues no.

      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