Vamos a ver cómo crear un calendario de trabajo en SCL para unos motores usando un S7-1200 y una pantalla Basic de Siemens.
En realidad, podría ser el calendario para el arranque/paro de cualquier máquina, pero me he basado en la duda que he encontrado en el foro de infoplc.net para intentarla resolver.
La duda es la siguiente:
Buenos días, tengo una aplicación en donde por medio de una HMI KTP1200 se va a dibujar un calendario de LUNES @ DOMINGO en donde se va ingresar una hora determinada de encendido y apagado de una serie de motores cada día, de tal forma que el sistema encienda y apague los motores automáticamente dependiendo del calendario configurado en la pantalla. El plc que estoy trabajando es un S7-1200. Alguien sabe que instrucciones puedo utilizar o si alguien tiene un documento que me pueda ayudar como soporte para iniciar a implementar la programación.
Está claro. Un calendario para una serie de motores (que no se especifica cuántos).
Contenido
Calendario de trabajo en SCL
Lo bueno que tiene SCL es que puedes hacer cosas que en ladder se complicaría mucho la cosa, o simplemente sería muy trabajoso de implementar.
Pensando bien la forma de trabajar y de organizar los datos, en SCL con un poco de código puedes hacer maravillas.
No estoy diciendo con esto que SCL sea mejor que Ladder.
¡NO! ¡Que quede bien claro!
Programar todo en SCL, bajo mi punto de vista, es un error y significa que no conoces bien las bondades de Ladder, y sobre todo, que no mantienes las máquinas y buscas averías.
Porque SCL es para cosas complejas, para tratamiento de datos… no para lógica booleana.
Pero esto es otra discusión.
Al tema.
Con unas pocas líneas se puede resolver en este caso el problema que se plantea:
//Leemos el reloj del sistem //a y lo guardamos en el DB #Resultado:= RD_LOC_T("Calendario".FechaHoraPLC); #HoraPLC :=DTL_TO_TOD("Calendario".FechaHoraPLC); FOR #Contador := 1 TO 3 DO //Obtenemos las horas y minutos para facilitar la comprensión #HoraMotorEntrada := "Calendario".Motor[#Contador].DiaSemana["Calendario".FechaHoraPLC.WEEKDAY].Entrada; #HoraMotorSalida := "Calendario".Motor[#Contador].DiaSemana["Calendario".FechaHoraPLC.WEEKDAY].Salida; //Encendemos o apagamos el motor en función de si la hora está dentro de los valores admitidos IF (#HoraPLC>=#HoraMotorEntrada ) AND (#HoraPLC<#HoraMotorSalida) THEN "Calendario".Motor[#Contador].EstadoMotor := true; ELSE "Calendario".Motor[#Contador].EstadoMotor := false; END_IF; END_FOR;
Como ves, no es mucho código que digamos.
Claro que con ese código te habrás quedado casi igual de cómo debes crear un calendario de trabajo en SCL.
Así que te dejo con un vídeo que presenta todo lo que hacen esas pocas líneas.
Vídeo de calendario de trabajo en SCL
Conclusiones y lecciones aprendidas con este calendario de trabajo en SCL
Lo que quiero que veas con este ejemplo es:
- Antes de ponerte a aporrear el teclado, piensa lo que quieres hacer.
- Aprende SCL si no lo conoces aún. Como ves, ahorra mucho tiempo si sabes cómo usarlo.
Piensa, piensa y piensa
De la primera parte, ni que decir tiene que un poco de papel y un lápiz son armas de primer orden: dibuja, haz tu esquema, imagina cómo debería funcionar.
Una vez que funcione en tu cabeza, sólo es teclear un poco.
Te sentirás como Dios (con perdón) cuando veas que está bien pensado, y que funciona a la primera.
Pero esto solo se logra analizando el problema y dedicando un poco de tiempo a pensar antes de ponerte a programar.
Ponte las pilas con SCL en TIA Portal
Sobre el segundo punto, está claro que conocer SCL es un must, que dicen los yankis: debes conocerlo.
Porque ahorra muchas horas de trabajo si está bien pensado.
Si no estás puesto en SCL, te puedo ayudar.
Tienes a tu disposición el bloque 4 del curso de TIA Portal para la serie 1200.
Ahí conocerás todos los entresijos de este lenguaje para que le quites el miedo y te pongas las pilas de una vez con ello.
Para los alumnos que ya lo están cursando, o lo han cursado, voy a dejar el proyecto de este ejemplo colgado en el apartado anexo del bloque de SCL.
¿Qué te ha parecido?
Me gustaría saber tu opinión.
¿Hubieras hecho este ejemplo en ladder o en SCL? ¿Lo hubieras hecho así?
¡Deja tus comentarios y comparte el post!
Recuerda que puedes apuntarte en Guorker.com donde por una cuota mensual, tendrás tarifa plana en todos los cursos disponibles en la plataforma.
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.
9 Comentarios
Interesante la programación en SCL, muy bueno.
Saludos desde Perú.
El sistema funcionaría siempre y cuando la programación del arranque y paro de la Bomba fuese en el mismo día. Pero si se programas el inicio a las 23 horas y el paro a las 2, si la hora del PLC estuviera entre ambas, la condición AND sería false.
Efectivamente está pensado para realizar un turno de trabajo. Si quisieras que trabajara un día por la noche, tendrías que empalmar el turno de noche de un día con la madrugada del siguiente. Por ejemplo, de 22h a 0 y de 0 a 6 del siguiente.
Tiene sus limitaciones tal y como es, pero a partir de lo creado, se le pueden buscar las vueltas que se quieran.
Si quisieras algo más sofisticado te tendrías que ir a algo como lo que ya programé en su día:https://programacionsiemens.com/programador-horario-de-tareas-en-s7/
Saludos
una vez mas, estupendo trabajo, ya tengo para aplicarlo, gracias
como siempre un gusto ver vuestros videos ya que siempre me deja una enseñanza.
no queda mas que felicitarte por tu gran empresa que es ayudarnos y darnos herramientas.
y por otro lado si este ejemplo se auisiera hacer por cada hora de cada día, como recomendarias realizarlo o alguna suferencia.
por ejemplo: lunes: 0:10 a 0:15; 1:20 a 1:25; 2:40 a 2:45, etc.
muchas gracias.
Hola,
La idea se similar, tendrías que hacerlo con botones como en el comentario anterior(https://programacionsiemens.com/programador-horario-de-tareas-en-s7/) y hacer algo parecido.
Saludos
Ya no es por la funcionalidad del reloj, si no, por coger el concepto de indexar variables de forma indirecta en SCL y aprovechar su potencial. Yo la verdad que viniendo del KOP me cuesta un poco seguir esta forma programar y con los punteros en AWL pero se agradecen ejercicios como este para poder afianzar poco a poco mas esos conceptos. Gracias Iñigo. un saludo!!
Muchas gracias David.
Esa es la idea, ver un poco el tema de la indexación, más que la aplicación de los relojes en sí.
Posteriormente se puede sofisticar todo lo que se quiera, que no es el fin del ejercicio.
Saludos!
Me parece genial esta forma de realizar los calendarios. Particularmente he tenido que pelearr en ladder con los s7200 ya pasados de moda mediante direccionamiento indirecto con puntero y el empleo de ciclos for next para calendariar las salidas de estos PLC en una red con protocolo PPI. Un saludo Iñigo sigue así. Yo como siempre tarde pero seguro hermano.