• Skip to primary navigation
  • Skip to main content

ProgramaciónSiemens

Cursos online de automatización industrial con PLC Siemens

  • Cursos
  • Mi cuenta
    • Mi cuenta
    • Blog
    • Foros
    • 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 de TIA Portal para CPU 1200
    • Curso de Step 7 V5.x
    • Curso de comunicaciones IE y Profinet
  • Contacto

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 · 9 Comments

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

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.

Filed Under: blog

Reader Interactions

    Deja un comentario Cancelar

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

    9 Comentarios

  1. Jorge says

    14 diciembre, 2017 at 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 says

      14 diciembre, 2017 at 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 says

        16 diciembre, 2017 at 13:00

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

        Responder
  2. Julian says

    15 diciembre, 2017 at 13:48

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

    Responder
  3. Jesus says

    15 diciembre, 2017 at 15:21

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

    Responder
  4. Sofia says

    17 diciembre, 2017 at 20:23

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

    Responder
  5. Juan M. says

    20 diciembre, 2017 at 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 says

      20 diciembre, 2017 at 18:34

      Jaja
      Muchas gracias Juan!
      Felices fiestas también !

      Responder
  6. MARCOS P SOSA says

    15 julio, 2018 at 15:10

    genial gracias..

    Responder
  • Aviso Legal y Política de Privacidad
  • Condiciones de Venta
  • Política de cookies
  • Contacto
  • Blog

Copyright © 2021 · Programación Siemens · Todos los derechos reservados

· ¿Quién soy? · Misión, Visión y valores

7 pasos para programar mas ordenado y profesional op

7 pasos para programar más ordenado y profesional

Recibirás de forma TOTALMENTE GRATUITA:

  • Un PDF con los pasos para programar de forma más eficiente, limpia y profesional

PROGRAMACIÓN SIEMENS te informa que los datos de carácter personal que nos proporciones rellenando el presente formulario serán tratados por Iñigo Gútiez Chagartegui como responsable de esta web. La finalidad de la recogida y tratamiento de los datos personales que te solicitamos es para enviarte nuestras publicaciones, promociones de productos y/o servicios y recursos exclusivos. La legitimación se realiza a través del consentimiento del interesado. Te informamos que los datos que nos facilitas estarán ubicados en los servidores de ActiveCampaign, LLC  (proveedor de email marketing), ubicada en EEUU. ActiveCampaign, LLC
 está acogido al acuerdo EU-US Privacy Shield. Puedes ver la política de privacidad de ActiveCampaign en https://www.activecampaign.com/privacy-policy/. El hecho de que no introduzcas los datos de carácter personal que aparecen en el formulario como obligatorios podrá tener como consecuencia que no pueda atender tu solicitud. Podrás ejercer tus derechos de acceso, rectificación, limitación y suprimir los datos en info@programacionsiemens.com así como el derecho a presentar una reclamación ante una autoridad de control. Puedes consultar la información adicional y detallada sobre Protección de Datos en nuestra política de privacidad.

x