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





