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.
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.
26 Comentarios
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
Hola,
Es la versión 2008 SP3
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.
Gracias por comentar y hacer el esfuerzo de hacerlo en español!!
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
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
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.
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
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
Ok Iñigo
Muchas gracias.
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 .
hola amigo, quisiera saber si este «programador horario de tareas» aplica para el «GMWIN» del plc glofa gm7
Lo siento, pero en ese tipo de PLC no tengo experiencia.
Un saludo
es un buen vídeo para una buena programación gracias por compartirlo con tus seguidores de la automatización. saludos
Gracias Jonas!
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
Donde se puede descargar este ejercicio resuelto?
Saludos
Los ejemplos solo están disponibles para los alumnos de cada curso. En este caso, el de step 7.
Saludos
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.
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
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
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
muy buenos los vídeos explicativos te ayudan mucho
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.
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.
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.