Temporizadores en Step7: manejo y creación

Uno de los motivos por los que los internautas acaban visitando el blog es porque buscan información sobre los temporizadores en Step7.

temporizadores en Step7

Te recuerdo que este tema ya lo tocamos con anterioridad en la entrada Temporizadores Operaciones en Step7 (II) .

Pero la forma de contar el tiempo en nuestro autómata puede ser muy diversa como veremos a continuación:

  • Uso de los temporizadores S5 (lo ya comentado)
  • Uso de temporizadores IEC en los FB
  • Creación de temporizadores

Temporizadores en Step7 – Temporizadores S5

Los temporizadores de S5 son una reminiscencia del anterior Step5 y tienen como características principales:

  • Son temporizadores Hardware, esto implica en sí mismo que por cada CPU hay un número finito de ellos (dependiendo de la CPU habrá más o menos)
  • La ejecución y disparo no depende del ciclo de scan.
  • Hay una mayor variedad que los que podemos encontrar en los temporizadores IEC

¿La ejecución no depende del ciclo de scan? ¿Qué significa esto?

Para que lo entiendas mejor, imagina un temporizador impulso prolongado S_VIMP. Este temporizador arranca con un flanco y la salida está a 1 durante un periodo T independiente de si el pulso que lo generó está a true o a false.

Bien. Pues el temporizador caerá independientemente de en qué fase de del OB1 estemos, esto es: si hacemos una lectura de este temporizador al principio del OB1 y otra al final, el temporizador cambiará de estado en cualquier momento de la ejecución del OB1 (cuando se agote el tiempo lógicamente). Esto implica que dichas lecturas pueden ser diferentes al principio y al final, dependiendo de en qué momento el temporizador cambie de estado.

Digo esto porque como bien sabes las imágenes de entradas y de las salidas se refrescan al principio del OB1 y se mantienen en su estado durante todo el ciclo OB1.

El temporizador S5 no. Es hardware. Corre en paralelo al OB1. Cuando acaba el tiempo se acabó, y cambia el estado allí donde pille.

En principio esto no es ningún problema, pero podría llegar a serlo dependiendo de las circunstancias y la aplicación. Simplemente tenlo en cuenta.

La explicación de todos los que hay y cómo se usan, lo tienes en la entrada ya comentada. 

Temporizadores en Step7 – Temporizadores IEC

Los temporizadores IEC  tienen unas características diferentes a los S5:

  • Son temporizadores Software. Esto hace que no haya un límite definido en su cantidad más allá de la memoria disponible.
  • Por ser software sí dependen del ciclo de ejecución (está controlado cuándo pueden cambiar de estado).
  • Tenemos una menor variedad debido principalmente a que siguen los estándares IEC centrándose básicamente en los TON y TOF.

 Si son software… ¿Cómo se llaman?

Pues mediante unos SFB existentes en las bibiotecas estándar.

  • SFB4 para el TON (Retardo a la conexión)
  • SFB5 para el TOF (Retardo a la desconexión)

Apreciarás que es un SFB, esto implica en sí mismo la necesidad de un DB.

En el caso de un FC, necesitarás obligatoriamente un DB, pero la ventaja de usarlos en los FB es incluirlo como variable STAT haciendo una multiinstancia no teniendo que declarar el DB ya que la memoria necesaria será reservada en el propio DB del FB en el que se usa.

Luego lo veremos con más detenimiento en el vídeo.

Temporizadores en Step7 – Creando tus propios temporizadores

Hay multitud de ocasiones en que no te van a convencer los temporizadores existentes y vas a necesitar tus propios contadores de tiempo. Así podrás hacerlos de diversas maneras:

  • Usando un OB cíclico para contar tiempo
  • Usando el tiempo de ciclo del OB1 para contar tiempo.
  • Usando la marca de ciclo.
  • Usando TIME_TCK para contar

Como ves hay muchas opciones.

  OB cíclico para contar tiempo

La idea es simple: Poner una marca o contador en el OB35 por ejemplo que se incremente en 1 cada vez que se ejecuta. Si está programado cada 100ms tendrás una resolución de décimas de segundo que para muchos casos será más que suficiente.

Luego dicho contador o marca podrás tratarlo en el propio OB35 o en cualquier otro punto del programa para su lectura y/o puesta a cero.

Tiempo de ciclo del OB1

Una de las variables temporales que tiene por defecto el OB1 es los milisegundos que ha tardado en ejecutarse el ciclo anterior. Para contar tiempo no tendremos más que sumar los tiempos de los ciclos teniendo el tiempo transcurrido hasta que lo pongamos a cero.

La precisión la dará el ciclo de scan, que en general será de unos pocos milisegundos haciendo que esta sea suficiente para la mayoría de los casos.

También puedes hacer una cuenta atrás. Eso ya a gusto del consumidor.

Marca de ciclo

Como bien sabrás en la CPU puedes programar la marca de ciclo.

Por tanto puedes usar los flancos de la marca de ciclo para sumar o restar tiempo. La precisión te la dará qué bit de la marca uses para contar el tiempo.

TIME_TCK

En este punto no voy a inventar. La ayuda online de Siemens lo explica muy bien, aunque aquí lo copio y pego  como resumen:

Para implementar este tipo de temporizadores en S7 se puede utilizar la función del sistema SFC64 “TIME_TCK” y el módulo de función FB103 “IMPULS”. El temporizador creado funciona como un impulso prolongado. Se pueden utilizar todos los temporizadores que se quieran sin consumir recursos de “TIMER” en la “CPU”.

El principio para crear estos temporizadores es muy simple. Si se debe empezar a contar un tiempo, se lee el valor actual con ayuda del módulo “TIME_TCK” desde la “CPU” y se guarda su valor.

Si, pasado un tiempo, hay que consultar el valor contado hasta entonces, la función FC111 “GET_TIME” recoge este valor desde que se ha comenzado a contar.

La base para crear el temporizador es el registro “TIMETICK” de la “CPU”. Para los temporizadores con exactitud de ciclo es suficiente con leer el “TIMETICK” una vez por ciclo, archivar su valor y hacerlo accesible al resto de aplicaciones (FB, FC). Una lectura cíclica y central ahorra tiempo de ciclo. Con ello, el “SFC64” no tiene porqué llamarse para cada temporizador en cada ciclo. Si se necesita un temporizador más exacto, hay que realizar la lectura directa del tiempo del sistema antes de llamar al temporizador.

Como ves, no podrás decir que no hay formas de controlar el tiempo. ¡Ya hubieran querido los hombres grises de Momo tener esta tecnogía!

Para finalizar, y como siempre, te dejo con un vídeo explicativo de todo lo comentado.

¿Te ha sido útil esta entrada?

Ahora te toca a ti, te invito a que participes del blog comentando si tienes una forma adicional de contar el tiempo, y que si te ha parecido interesante des publiciad a la entrada mediante tus redes sociales. Te lo agradezco de antemano enormemente.

Por otro lado recordarte que esta y mucha más información está recopilada en el libro Cómo programar Step 7 y no morir en el intento. En él a lo largo de más de 40 capítulos descubrirás todos los entresijos de la programación en Step 7 de forma amena y a base de ejemplos, que es como mejor se aprende.

Acerca de Iñigo Gútiez

Ingeniero industrial por la Escuela de Ingenieros Superiores de Bilbao. Trabajo como ingeniero de proyectos y automatización en Guardian Industries

Te puede interesar

Step 7 V5.5

Step 7 V5.5: Compatibilidad con Windows 7 y Windows 8 (32 o 64 bits)

Step 7 V5.5 es la solución para mucha gente que está teniendo problemas para instalar …

22 Comentarios

  1. Hola Iñigo,

    He visto el video , y sobre de lo que quería hacer es con una entrada que está activa durante 2″. Otra cosa para hacer esto podría servir lo “previos cycle del OB1”?

  2. Hola Jose Antonio,
    Si los dos segundos no necesitan una ultra-exactitud, desde luego. Sumas los tiempos, cuando esto sea mayor que 2000ms pista.
    Luego tendrás que ver como activarlo/resetear etc. Pero por poder, se puede sin ningún género de dudas.

    Un saludo,

    • Bueno, lo que he comprovado en on-line, y en AWL! que hasta hoy no había programado, (interesante por cierto) es que lo que suma es el tiempo del OB1 a la marca no?, y lo que se puede hacer sobre la base de 1000ms es poner un comparador y activar lo que quieras no?

      Sobre el SBF4 TON , de mi consulta , yo lo pongo dentro de una FC, pero lo que no tengo claro si es necesario poner la MD que citas como alta o baja. Yo lo he probado in situ y se me activa la bool que sólo necesita mi programa.Lo que pasa que esa salida tiene que excluir un camino de otro y no lo hace de momento, pero bueno, es cuestión de programa.

      O que es mejor poner ese TON como FB sin cambiar nada más y hará la mismo?

  3. Si, la idea es sumar en una marca los ms de cada ciclo y cuando llegue a un cierto valor, dispares la acción deseada.

    En cuanto a la SBF4, no es necesario la MD para saber el tiempo restante. Puedes dejarlo vacío si no lo deseas saber.

    A mi juicio si vas a usar un FC, lo mejor son los temporizadores normales. Menos lios, más flexibilidad (hay de más tipos) y no generas un nuevo DB. I
    Imagina que necesitaras 10 temporizadores. Si usa FC+IEC vas a generar 10 DB, uno por temporizador. Como tengas muchos FC con muchos temporizadores IEC la lista de DB va a ser digna de ver ¿Y para qué? ¿qué ventaja te aporta que merezca esa ristra de DB ?

    Si vas a usar FB y vas a reutilizar el código, IEC como multiinstancia. Sin duda.

    Usa los temporizadores para que sea cómodo para ti, no para demostrar que los sabes usar. No se si me explico.

  4. Bueno yo fui por el IEC pq puse uno normal de hard y no me funcion. Tengo otros 3 que van perfectos , pero al quere hacer una emerg con subrutina , a lo mejor no funcion por eso. La verdad es twngo varias formas de contar, pero hago tanto cambios que no se cual seria mejor. Me parece que con el IEC me funciono ayer . LOs normales puedes resetearlos cuando quieras no?

    • Hola Jose,

      Sí claro. Los temporizadores de S5 los puedes resetear cuando quieras. Tienen su entrada de booleana para ello y en caso de trabajar en AWL puedes hacerlo con un reset.

      Un saludo,

  5. Hola. Veo que en todos tus ejemplos, programas en SCL, y yo SCL no se absolutamente nada. Solo KOP y AWL. Que hay que hacer para poder empezar a programar en SCL? Por donde tengo que empezar para no perderme en el camino? hay algun manual que me sea util y que resulte entendible?

    • Adrian,

      Creo que confundes las siglas:
      SCL es una especie de PASCAL, es decir un lenguaje de alto nivel. Un día de estos nos meteremos con ello. No hay ningún ejemplo realizado en el blog en este lenguaje aún.
      FUP y KOP son la programación en bloques lógicos y escalera respectivamente.

      Y creo que has confundido SCL con AWL.
      AWL es el papá de todos y es el que se escribe todas las instrucciones. ¿Te refieres a este?

      Si es así, no único que he visto por ahí son los manuales de Siemens y algún tutorial. ¿Entendible? Buena pregunta jeje.

      A mi juicio el de Siemens es bastante “alemán”. A la gente neófita en el tema que quiera aprender con ello, seguramente acabe jurando en varios idiomas entre ellos por seguro alemán.

      Si googleas por ahí puede que encuentres algo interesante.

      Yo por mi parte me estoy pensando en hacer un curso audiovisual de programación básica para poderlo ofrecer a la gente que empieza. No sería gratuito como el blog porque me llevaría mucho esfuerzo, pero digamos que a un precio razonable.

      La cosa sería desde cero, un curso totalmente práctico (nada de teoría que no nos interese) e ir viendo los aspectos más relevantes de la programación de AWL y KOP. FUP lo dejaría casi a un lado ya que si sabes KOP, FUP es casi lo mismo, con otra pinta. Y es más interesante los diagramas de escalera porque sirven para otros lenguajes de programación (la forma de pensar y de visualizar).

      El tema es que no sé si habría gente interesada en ello. En cuanto se habla de dinero la gente tiende a torcer el morro.

      Un saludo

  6. Rafael Navas Sanchez

    He entendido en tus publicaciones lo que llevo años sin entender gracias por tu generosidad en las explicaciones,podrias incluir los encoders¿?

  7. Hola Rafael,

    Es una de las cosas que tengo en la bandeja de incoming.
    No puedo decirte cuándo, pero dalo por hecho seguramente este mes.

    Un saludo

  8. Iñigo, primero te quiero falicitar y agradecer por el blog, no sabia nada de plc y ahora estoy programando.

    Puedo preguntarte que es un sistema scada y como se realiza con tia porta y un siemens s7 1200 pc 1214c dc/ac/rly.
    Capaz no se entienda la pregunta porque al no conocer del tema no se como hacerla.
    Gracias

    Saludos

  9. Hola Kuka.
    Scada es el acrónimo de Supervisión, Control y Adquisición de datos… lo que viene siendo normalmente un PC conectado a nuestro autómata.

    Para hacer un Scada/HMI con Siemens, lo más fácil (que no barato) es usar las pantallas de Siemens (las confort son las últimas) y con el WinCC.

    Para enredar un poco e ir aprendiendo puedes usar el propio PC donde simulas como hago yo con los tutoriales. Te servirá para hacerte con el entorno y cacharrear.

    Luego dependiendo del proyecto pondrás un PC con un software X o una pantalla tipo confort o cualquier otro tipo de pareja hardware/software que te sirva para manejar desde una pantalla el proceso.

    Un saludo

  10. Hola que tal? No te puedo escribir tu nombre no me deja. Mira pues es una consulta sobre aquellos timers que hablabamos el otro dia. Te explico por e-mail?

  11. Hola Iñigo,
    Me parece magnifica tu web y tu dedicación. Enhorabuena¡
    Tengo un problemilla con el Wincc flexible, haber si se te ocurre algo.
    Si lo ejecuto desde su acceso directo sale una pantalla toda en gris y se queda ahí.
    Si lo ejecuto desde la aplicación integrada en S7, se carga la barra de inicio hasta quedarse al completo y se queda ahi colgado.

    Voy a reinstalarlo haber porque no se me ocurre nada ni se donde puedo ver información de diagnostico.

    PD: el Runtime en el PC si que me lo permite ok, accediendo con doble click en el icono: PROJECT_1.Scada (Wincc flexible RT document)

  12. Andres,

    Ufff, suena a que hay algo que se está dando leña con el WinCC.
    Es buena idea reinstalar, porque lo mismo es una dll que se ha quedado por ahí perdida o cualquier otra cosa.
    Son las cosas de Windows…

  13. Hola que tal lñigo Gútiez primero que nada quiero darte las gracias por tus blogs que son de mucha ayuda para mi que soy estudiante me gustaria que me dieras algún tipo de asesoria online mi correo es: ing.mecatronico.ivan.barbosa@gmail.com de antemano muchas gracias.

  14. Hola Ivan,

    Si tienes alguna pregunta concreta, puedes escribirme al mail o en el blog e intentare resolver la duda si se como.

    Un saludo

  15. rene gonzalez guadarrama

    Buenos dias necesito pausar un temporizador es decir que si aun no se cumple el tiempo programado al volver a restablecerlo continúe con el tiempo con el que se quedo y no se vuelva a restablecer.

    • Hola René,

      La mejor forma es crearse un bloque que haga lo que tú desees ya que hasta donde yo se no hay temporizador en S7 que haga eso.

      Saludos

      • rene gonzalez guadarrama

        Y si no es mucha molestia podria dar un ejemplo de como crear un bloque de este tipo?? me seria de enorme ayuda