Esta semana vamos a comenzar a tratar el tiempo en Step 7. Qué mejor que con el reloj del sistema. Además, vamos a ver un nuevo adelanto de siguientes capítulos viéndolo de forma práctica.
Además, en el foro han pendido ayuda, así que qué mejor que aprender nuevas funcionalidades realizando un ejemplo que tiene alguna aplicación práctica.[divider]
Contenido
¿En qué consiste el ejemplo?
Bueno, la idea es en función de la hora del sistema, calculemos por un lado el día del año en el que estamos y los minutos transcurridos del día actual.
Hay que tener en cuenta que el día del año puede variar en función del día del calendario y si es un año bisiesto.
¿Cómo vamos a leer el reloj del sistema?
Bueno, lo primero que tienes que saber, si es que no lo sabes ya, es que hay dos SFC, el SFC0 y el SFC1 para leer y escribir la hora en el PLC.
El SFC0, que es con el que vamos a trabajar hoy, lee la hora del PLC y nos lo devuelve así:
Byte | Contenido | Ejemplo |
0 | Año | B#16#04 |
1 | Mes | B#16#08 |
2 | Día | B#16#05 |
3 | Hora | B#16#08 |
4 | Minuto | B#16#05 |
5 | Segundo | B#16#05 |
6 | Los dos dígitos superiores de los milisegundos | B#16#25 |
7 (4 MSB) | Los dos dígitos inferiores de los milisegundos | B#16#0 |
7 (4 LSB) | Día de la semana: 1: Domingo, 2: Lunes, 3: Martes, 4: Miércoles, 5: Jueves, 6: Viernes, 7: Sábado |
B#16#5 |
Esta información proviene de esta página de support de Siemens.
Por tanto, leeremos el reloj del sistema con el SFC0 y volcaremos esa infomación en un DB para leerlo cuando deseemos.
Tened en cuenta que toda la información está dada en BCD. Para más información sobre qué es BCD tenéis la entrada de la temporada pasada del display de 7 segmentos.
¿Cómo calcularemos el día del año?
Aquí vamos a introducir el nuevo concepto: el CASE en Step 7. Puedes leer más información sobre ello en este post anterior.
La idea es que en función del mes, hagamos una precarga de días.
Es decir, si estamos en febrero, nuestro día será = 31 de enero + los días de febrero.
¿Y si estamos en marzo … o en septiembre?
En principio podría parecer que es igual.. y lo es. Casi.
¿Qué es lo que falta? Pues saber si es bisiesto.
Por tanto miraremos si es bisiesto y si el mes es superior a febrero. Si es así, sumaremos un día más del 29 de febrero. Si estamos en febrero, no haría falta ya que si es el día 29 estará en el valor del día, no del mes.
¿Cómo calculamos si es un día bisiesto?
Lo primero es saber cuándo es un año bisiesto: tiene que ser divisible entre 4 ¿no?
Sí, pero además no debe ser divisible entre 100, salvo que sea además de 100, por 400.
La razón de esta norma es que la Tierra tarda 365 días y casi 6 horas. Para eliminar el error cometido, cada 100 años, no se hace bisiesto pero cada 400 sí. Podéis indagar más en la página de la wikipedia.
En definitiva, la fórmula que vamos a usar es:
If (Año Mod 4 = 0) And ((Año Mod 100 <> 0) Or (Año Mod 400 = 0)) Then''' Año Bisiesto else Año No Bisiesto end if
Pues ya está. Veamos el vídeo donde vemos cada uno de estos puntos y damos solución al problema.[divider]
¿Qué te ha parecido?
Espero que por un lado haya aclarado y solucionado el problema de uno de los lectores que solicitó un poco de ayuda.
Por otro lado, has podido ver cómo leer la hora del sistema. Te dejo que hagas la función inversa de escribir en el PLC la hora que quieras. Si tienes algún problema, ya sabes.
Te agradecería tu opinión de lo visto y si te parece interesante.
Finalmente recordarte como siempre que si piensas comprar material eléctrico por internet, pienses en este pequeño blog y te pases por el foro para ver si puedes usar alguno de los códigos para usar en www.masvoltaje.com[divider]
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
excelente Iñigo, me aclaraste mucho la película respecto al tema.
De nada Jose.
Espero que sea lo que necesitabas.
Un saludo
Si muchas gracias, era exactamente lo que necesitaba 😀
Hola:
Muchas gracias por la ayuda. Había empezado a programar sólo con el manual en la mano y me costó mucho llegar a buscar órdenes sencillas y como configurar el autómata.
Ya he llegado a las pasarelas, profibus, profinet, etc. pero se me ha quedado en el tintero algo muy básico y me gustaría que me pudieras mostrar un ejemplo de cómo pasar de una sección a otra para separar el programa en bloques. Estoy acostumbrada a otro tipo de PLC (Omron, Schneider, Allan Bradlley) y se hace de forma diferente y aquí, supongo que por ser lo más básico no lo encuentro.
Soy fan de tu curso.
Saludos
Hola,
No entiendo muy bien a qué te refieres.
De todas formas, todo lo que quieras consultar fuera del post en concreto, por favor hacedlo en el foro.
Así que por favor, plantea tus dudas en el foro y así entre todos te podremos ayudar.
Un saludo
Hola Iñigo, te quería consultar como es que llamas al SFC 1 y SFC0 en el administrador de bloques…..me lo podrías indicar ya que recién empiezo con siemens.
Saludos.
La llamada a cualquier sfc en AWL lo puedes hacer simplemente haciendo un call SFC0 por ejemplo. Son FC de sistema, están en el PLC y no hay que cargarlos, simplemente los llamas y listo.
Saludos
gracias Iñigo, respecto a los sfc– el SFC0 de este caso donde lo has llamado?
Hola Andrés,
Pues ahora que lo dices, no sé si lo uso en ese ejemplo. En cualquier caso, se usan de la misma forma. Uno es para leer la hora y cargarlo en una variable y el otro es cargar el valor de la variable en el reloj del PLC.
Saludos