• 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 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

Programador horario de tareas en S7

por Iñigo Gútiez · 26 Comments

Vamos a ver un ejemplo práctico sobre un programador de tareas de dos cámaras frigoríficas, que tiene básicamente los siguientes requerimientos:

  • La programación de las cámaras tienen que ser independientes
  • La programación tiene que ser independiente por días.
  • La programación tiene que ser independiente en cuanto a las horas y su duración.
  • La salida se dará mediante una booleana que se llevará a la máquina como marcha/paro.

 A lo que yo le añadiría

  • Visualización de la hora del autómata
  • Posibilidad de poner en hora el reloj.

 Las solicitaciones son claras: quiere poder programar al detalle cada una de las cámaras por separado. Pues pongámonos manos a la obra.

Programador horario de tareas en S7

Para realizar un programa de este tipo no nos podemos olvidar de los dos puntos que he añadido: ver por un lado la hora que está corriendo en el autómata y por otro lado poder ponerlo en hora.

Esto nos va a permitir indagar en cómo se obtiene la hora del PLC y cómo se le hace un Setup. No te preocupes, esto los teutones lo tienen resuelto con unas bonitas funciones que vienen con el paquete de Step 7.

  • SFC 0 «SET_CLK» para establecer la hora en el PLC
  • SFC 1 «READ_CLK» para leer la hora del PLC

Por otro lado está la programación en sí mismo de las cámaras frigoríficas.

 ¿Cómo es la mejor manera de programarlas?

En un principio había pensado en hacerlo con hora de entrada y salida, es decir, simplemente le dices la hora a la que quieres que arranque cada día, y a qué hora que pare.

Podría valer salvo que quieras que arranque y pare varias veces al día, cosa probable. Bueno, es cuestión de poner más campos… o sea, una pequeña chapuza.

Lo suyo a mi juicio es hacer algo un poco más sofisticado pero simple, a la par que elegante: unos botones marcando las horas donde quieres que esté activa y listo. Luego grabamos el horario para cada máquina y ya está ¿mola eh?

Por tanto tendremos que añadir la posibilidad de recuperar el horario de cada máquina para editarlo.

En resumen, el resultado gráfico sería este:

Programador horario de tareas en S7

Para que no cojas tendinitis en el dedo índice, he añadido unos botones para borrar el contenido del día y para seleccionarlo completamente.

Como ves, se podrá editar cargado y guardando el contenido del horario diseñado.

Finalmente está representada la salida de activación de la máquina A  y la máquina B.

Bien , pero ¿cómo funciona?

Sencillo, vamos a almacenar las horas de arranque/paro en un DB por máquina como booleanas.

Luego recuperaremos el día y la hora del reloj del PLC y buscaremos el estado del bit de dicho día a esa hora. Si está a true pues activaremos la salida de la máquina A y/o B dependiendo de cada programación.

Usaremos un DB de intercambio y edición de tal forma que trabajaremos sobre él y guardaremos en el DB de A o de B en función de lo que elijamos.

Para ello usaremos la función SFC20 que sirve para copiar bloques de datos. Esto nos permitirá leer y escribir en el DB de intercambio desde el HMI. Así, para grabar pasaremos el contenido del DB de intercambio al DB de cada una de las cámaras y al revés. Cuando queramos recuperar qué tiene programado, leeremos el DB y su contenido lo copiaremos en el DB de intercambio, viéndolo por tanto en el HMI.

Adicionalmente podrás cambiar la hora y la fecha del reloj del PLC para asegurarte que se enciende y apaga cuando debe.

Bueno, para mejor explicación y como siempre, os dejo con el vídeo explicativo, que es como mejor me voy a explicar y más fácilmente lo vas a entender. Es un poco largo pero creo que merece la pena.

Para finalizar decir que ejemplos como este puedes encontrarlos en Cómo programar Step 7 sin morir en el intento, el cual se irá actualizando con el paso del tiempo para todos aquellos que lo compren y que viene con los proyectos asociados en formato zip para su estudio y mejor comprensión.

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.

Filed Under: ejemplos, Tutoriales, Videos Tagged With: awl, ejemplos, Tutoriales, videos, youtube

Reader Interactions

    Deja un comentario Cancelar

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

    26 Comentarios

  1. JM. Rosado says

    4 marzo, 2013 at 20:32

    Hola Iñigo, quisiera saber, que version de wincc flexible tiene, pues no puedo abrir el wincc, me da un error de version, y tengo interes en verla.

    Un saludo

    Responder
  2. Iñigo Gútiez says

    4 marzo, 2013 at 20:36

    Hola,

    Es la versión 2008 SP3

    Responder
  3. Osvaldimas says

    16 junio, 2013 at 15:58

    Hola! Iñigo mi verção WinCC es SP2 y el voluntad tentatar hacen mediante el uso de su programa S7, que esta muy bien preparado, espero conceguir.
    Excusa mi ESPAÑOL no es bueno! Gracias por los exelente lección!! Saludos.

    Responder
  4. Iñigo Gútiez says

    19 junio, 2013 at 12:14

    Gracias por comentar y hacer el esfuerzo de hacerlo en español!!

    Responder
  5. Osvaldimas says

    19 junio, 2013 at 16:09

    Hola Iñigo! FC3 creado para Borrar todos y activar todos, ¿cómo puedo hacer con el WinCC ?
    Gracias, Un saludo.

    FUNCTION FC 3 : VOID

    TITLE =
    VERSION : 0.1

    VAR_TEMP
    Valor : BYTE ;
    Error : INT ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =

    L B#16#FF;
    T #Valor;
    A M 4.1; // Botão IHM
    JC M001;
    A M 4.3; // Botão IHM
    JC M002;

    L B#16#0;
    T #Valor;
    A M 4.2; // Botão IHM
    JC M001;
    A M 4.4; // Botão IHM
    JC M002;
    BE ;

    M001: CALL SFC 21 (
    BVAL := #Valor,
    RET_VAL := #Error,
    BLK := DB1.Dia[1]);
    BE ;

    M002: CALL SFC 21 (
    BVAL := #Valor,
    RET_VAL := #Error,
    BLK := DB1.Dia[2]);
    BE ;

    NETWORK
    TITLE =

    END_FUNCTION

    Responder
  6. Jose Luis says

    11 noviembre, 2013 at 20:33

    Hola Iñigo ,tengo algunas consultas sobre este ejemplo y me he registrado en el foro ,pero todavía no he recibido la activación .
    Te comento una de mis consultas , he visto el el DB2 y el DB3 son diferentes , me puedes explicar a que se debe eso.
    Y la otra consulta es que tú comentas que el DB2 Siemens ordena los datos de esa forma,
    ¿Como es que lo genera ?
    Estas son algunas de la muchas dudas que tengo.
    Desde ya muchas gracias y un saludo

    Responder
    • Iñigo Gútiez says

      11 noviembre, 2013 at 22:06

      Hola Jose Luis,

      Creo recordar que en el video se veian un poco diferentes pero en el proyecto estaba bien. En cualquier caso es igual el texto que pongas en los DB. son literales, nombres de las variables, pero no es funcional.
      Si son iguales en cuanto a tipo y número de bytes.

      En cuanto a el orden de los bytes no hay que hacer nada. Simplemente hay que tenerlo en cuenta. Cuando cargas un 1 en el MW0, el bit que se activa no es el M0.0 sino el M1.0 que es el primer bit del byte alto. En una doble palabra, en el MD0, el bit sería el .0 del byte bajo de la palabra baja. Es decir, de MD0,
      La palabra alta es la MW2
      La palabra baja es la MW0

      De la palabra baja, la MW2, el byte bajo es el MB3 y el byte alto es el MB2. Con lo cual, si cargas un 1 en el MD0, el bit que se activa es el M3.0

      En definitiva, el orden que se usa para activar los bits son, del 1 a 32:
      M3.0(1) M3.1 (2)… M3.7(8) M2.0(9) M2.1(10)… M2.7 M1.0 M1.1 … M1.7 M0.0 M0.1 … M0.7(32)

      Espero haberte ayudado y no liado más.

      Responder
  7. Jose Luis says

    12 noviembre, 2013 at 16:32

    Hola Iñigo
    Comprendo lo que explicas en la posición de los bytes.
    No se si sera lo correcto lo que estoy haciendo pero como no tengo instalado el wincc ,fuerzo los bit desde la tabla de variables y en el caso de la maquina A funciona correctamente ,pero la máquina B no .
    Por eso te comentaba que el DB2 es diferente al DB3 si bien el tipo (bool) y el número de bytes(28) son iguales.
    Por ejemplo al día 2 a las 15:00 horas le corresponde en la máquina A el bit 6.7 y a la máquina B el mismo día y la misma hora le corresponde el bit 5.7.
    No quiero liarte con esto y me interesa mucho ya que creo que se puede aplicar para muchos proyectos.
    Desde ya muchas gracias y un saludo

    Responder
    • Iñigo Gútiez says

      12 noviembre, 2013 at 19:32

      Hola Jose,

      Vale. He visto el fallo. Como bien indicas, el problema residia en el DB3, que no es igual que el DB2. Había un error en las leyendas de las booleanas.

      Ya está corregido y subido de nuevo al servidor. Si lo bajas ahora lo verás mejor.

      En cualquier caso no te funciona porque como bien indicas al forzar la hora por el nombre de la variable y como no estaban bien, pues no iba bien.

      Espero que ahora sí te funcione como esperabas.

      Un saludo

      Responder
      • Jose Luis says

        12 noviembre, 2013 at 20:45

        Ok Iñigo
        Muchas gracias.

        Responder
  8. Jose Luis says

    14 noviembre, 2013 at 20:01

    Hola Iñigo ,nuevamente yo
    Espero no molestarte ,pero he visto que el DB de intercambio es diferente a los otros dos.
    Lo he corregido copiando de uno de ellos y funciona correctamente.
    No se si es complicarte mucho el que me expliques un poco mas el FC10 ,ya que me lió bastante con la nemotecnia.
    El programa realmente funciona muy bien y como te comentaba creo que se puede aplicar a muchos proyectos (estantería inteligente por ejemplo) .
    Muchas gracias .

    Responder
  9. Jan Reyes says

    15 mayo, 2014 at 6:11

    hola amigo, quisiera saber si este «programador horario de tareas» aplica para el «GMWIN» del plc glofa gm7

    Responder
    • Iñigo Gútiez says

      15 mayo, 2014 at 18:42

      Lo siento, pero en ese tipo de PLC no tengo experiencia.
      Un saludo

      Responder
  10. jonas arjona torres says

    11 marzo, 2018 at 20:17

    es un buen vídeo para una buena programación gracias por compartirlo con tus seguidores de la automatización. saludos

    Responder
    • Iñigo Gútiez says

      11 marzo, 2018 at 21:19

      Gracias Jonas!

      Responder
  11. Pedro Absalon Caballero Vasquez says

    26 marzo, 2018 at 17:33

    Hola Iñigo quisiera obtener el curso completo para aprender a programar plc y los demás cursos que has dictado, yo soy de Bolivia como puedo cancelar para que me hagan el envio

    Responder
  12. SerraJuan says

    21 noviembre, 2018 at 15:47

    Donde se puede descargar este ejercicio resuelto?
    Saludos

    Responder
    • Iñigo Gútiez says

      21 noviembre, 2018 at 18:09

      Los ejemplos solo están disponibles para los alumnos de cada curso. En este caso, el de step 7.
      Saludos

      Responder
  13. José Gomez says

    17 febrero, 2019 at 10:24

    Hola Iñigo he buscado y he llegado asta este ejemplo porque es algo similar a lo que quiero hacer, pero yo en TIA PORTAL. Intento hacer esos movimientos de fecha y hora para colocarme en el bit adecuado pero no consigo que me permita hacerlo (FC10). Muchas gracias.

    Responder
    • Iñigo Gútiez says

      17 febrero, 2019 at 11:29

      Hola,
      Si es TIA Portal con la serie 300, tendrías que poderlo hacer tal cual. Si no lo es, y es la s7-1200, o 1500, la forma de trabajar con el reloj es diferente ya que tienes que jugar con tipos de dato DTL, que es muy sencillo de usar.
      No te puedo indicar más, primero porque no sé cual es el problema con los datos aportados, y porque son plataformas diferentes, y hay que hacerlo de forma diferente.
      Saludos

      Responder
      • José gomez says

        17 febrero, 2019 at 17:06

        Es Tia Portal con S7-1200. L a fecha la obtengo del PLC con un dato DTL. Pero nose como ubicarme en el DB según el día y la hora que sea en cada momento, por ejemplo, si es martes a las 12:00, que vaya al día 3 y al bit de la hora 12:00 para ver si ese bit está activo o no.
        Gracias por responder.
        Un saludo

        Responder
        • Iñigo Gútiez says

          17 febrero, 2019 at 18:47

          En el s7 1200 no se puede hacer desde el momento que no se puede programar en awl.
          Lo mejor es hacerlo en scl con arrays.
          Saludos

          Responder
  14. Angel Daniel says

    14 agosto, 2019 at 3:57

    muy buenos los vídeos explicativos te ayudan mucho

    Responder
  15. MANSERINE says

    8 enero, 2021 at 15:18

    Muy aplicable el ejemplo, Muchas gracias por tus exposicion Iñigo. Se los recomiendo ampliamente, ayuda a comprender el funcionamiento del SFC20, para transferir datos de un DB a otro y ademas como tratar las variajes del reloj y otras muchas cosas mas, Se los recomiendo ampliamente.

    Responder
  16. MANSERINE says

    8 enero, 2021 at 15:38

    Por favor si puedes reparar el enlace . Me da error al tratar de reproducir el video «no puede reproducir este video en tu navegador», de anticipo muchas gracias por tus buenos oficios.

    Responder
    • Iñigo Gútiez says

      8 enero, 2021 at 16:02

      Lo siento, pero yo lo veo bien. Mira con otro navegador o que tu conexión de internet (si es en el trabajo) permita visualizar videos de youtube/vimeo.

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

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

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