Esta semana resolvemos el caso del registro rapidito que veíamos la semana pasada.
Quedaba en el aire si la fórmula teórica que te presentaba iba a funcionar… o no.
Vamos a ver que la solución tiene dos partes: la adquisición de los datos en el PLC y luego volcar estos datos en un PC.
En la parte del PLC, la solución está más o menos clara: tener un hardware (tarjetas) de adquisición más rápidas que lo que queremos registrar y luego una CPU que sea lo suficientemente rápida para hacerlo en un OB cíclico.
En mi caso, y para hacer las pruebas, lo he hecho con un S7-1200. Los datos que queremos registrar los he simulado y se presuponen adquiridos.
Luego, simplemente hay que hacer el proceso de captura en un OB cíclico al tiempo deseado. En el ejemplo vamos a ir desde los 3ms hasta 1ms viendo que funciona sin problemas esta parte.
Por otro lado queda la adquisición en el lado del PC. Para ello he desarrollado un pequeño programa en Python en modo consola.
Lo que hace este programa es ir leyendo las veces que le digamos los bloques de datos de forma alternativa y finalmente generarte un archivo de texto plano con la información adquirida.
Para ver que funciona correctamente he procesado 3 variables:
- Una variable que representa un contador de ciclos del OB30 para ver que efectivamente no perdemos información.
- Una variable entera con el segundo del reloj del sistema
- Una variable donde almacenar los ms del reloj del sistema. Con ello vamos a ver que la captura efectivamente se realiza a los tiempos marcados.
Por tanto con esto vemos que por un lado somos capaces de registrar varias variables (3) y además en estas variables tomamos los valores que nos certifica el buen funcionamiento: por un lado tenemos que ver que cada línea del registro contiene todos los ciclos del contador (1,2,3,4…) sin que haya saltos, y por otro lado, con los ms del reloj tenemos que ver que entre registros, el salto en estos ms es el tiempo deseado de muestreo.
La razón de usar Python es que es un lenguaje muy liviano y rápido en la ejecución.
Para la lectura del PLC he usado la librería de snap7 que nos permite una comunicación rápida y sencilla de implementar.
¿Lo vemos funcionar?
Registro de valores en TIA Portal con Python
¿Qué te ha parecido?
Espero que te haya parecido interesante.
Como ves, se puede implementar este tipo de soluciones a tiempos de registro bastante bajos. Quedaría ver qué pasa con una CPU más potente (S7-1500) si queremos bajar por ejemplo a los 0,5ms por registro. Para ello, sería cuestión de aumentar el buffer a 2000 registros y ver si al tratar 2000 registros se pueden almacenar en menos de 1 segundo.
Claro que esto empieza a no tener sentido si las tarjetas analógicas no son HS. En el caso de los 1500 tienes la posibilidad de bajar hasta los 62.5µs con las analógicas HS. Puedes verlo en uno de sus manuales aquí.
En todo esto hay que pensar además que el ordenador de sobremesa con el que he hecho las pruebas es un equipo del 2015 (cómo pasa el tiempo). Quiero decir con ello que hoy en día hay equipos mucho más potentes que mi PC por lo que seguramente sea posible bajar bastante más los tiempos de registro. Además, se está registrando en un SSD, de menores prestaciones que un NVME moderno.
Por tanto, creo que aún queda margen de mejora incluyendo un hardware más acorde a los tiempos y necesidades actuales.
El ejemplo lo voy a dejar colgado en el Anexo del bloque de Ladder del curso completo de TIA Portal y en los ejercicios resueltos de Guorker.com
Finalmente en el vídeo te preguntaba si estarías interesado en un nuevo curso orientado a crear HMI usando Python con entorno gráfico Qt.
No sería un curso propiamente de Python, sino de cómo usarlo para crear una plantilla que te permita hacer tus entornos gráficos más rápidamente. Es decir, crear una especie de WinCC Flexible usando Python, Qt Designer y comunicar con el PLC usando Snap7.
Lo dicho ¿estarías interesado en este mundillo?
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.
17 Comentarios
Muy buen video!!
La creación de HMIs con python, la harías usando dash+plotly?
No, como comento al final del post sería Python + Qt Designer + Snap7.
La semana que viene seguramente haga una pequeña presentación de lo que propongo.
Excelente Video!!
Gracias Juan Manuel!
Excelente Iñigo:
Gracias por tu gran aporte…es invalorable !!!!
Abrazos desde Paraguay.
Gracias Oscar!
Excelente solución Ingeniero.
Me ha gustado mucho la solución que has publicado, eres un genio.
HMI con Python? Sería estupendo!
Un abrazo!
jaja, ya quisiera serlo.
La semana que viene preparo un video para presentar lo del curso.
Saludos!
Buenas noches Iñigo; interesante el proceso de logear los registros. Como siempre sorprendiendo . Me veo atraído por la nueva oferta que propones del programación con Python.
En fase de de proyecto un pupítre con mando ya sea remoto y mediante cableado Ethernet manipular varios sistemas ya sean hidráulicos, neumáticos y mecánicos seuenciales con sensores de posicionamiento entre los que son inductivos, laser de posición y celdas, cortinas en las que se deben de mantener una medidas en concreto para la evacuación de una piezas a una temperatura y aplicación de elementos para su tueste, recuperación estructural y/o limpieza de superficie. La estructura en el programa a formar se debe de calcular de alguna manera en concreto o con las funciones básicas se puede realizar. Además dispone de una grúa automatizada secuencial que realiza la puesdta y retirada de dichos materiales. Si cuento con unas recetas para que en el pupitre se puedan seleccionar o que se detecten automáticamente. Un saludo!
Hola Fran. Me alegra que te haya gustado.
Suerte con el proyecto.
Muy buen vídeo, seria excelente hacer hmi con python.
te comento que me gustaría hacer un curso completo de wincc explorer mas puntual la parte de script para comunicar con bases de datos
Genial 🙂
Yo WinCC Explorer no uso, por lo que es complicado.
Hola, ¿qué ventajas presenta Snap7 frente a un OPC?, ¿es más rápido para este tipo de aplicaciones?.
No tiene nada que ver con la aplicación, pero también se podrían escribir los datos en la memoria de carga. Pero de nuevo no sé cómo evaluar la rapidez de esta escritura. Y la memoria de carga también es bastante finita. La idea sería pasar todos los datos de la memoria de carga al PC una vez acabada la recepción de datos.
Comunicar con Snap7 es muy rápido, gratuito y fácil de implementar.
Yo la SD la descartaría directamente: ni tienes tanta capacidad, ni tienes la rapidez, ni tienes la versatilidad, ni tienes la robustez que te puede dar un PC bien configurado.
No se puede pretender hacer una tortilla sin romper huevos. Pues no se puede pretender tener una aplicación de registro super rápida con cualquier hardware y sin romper algún que otro huevo.
Genial Iñigo
Buenas Iñigo:
Esperando con impaciencia tu nueva propuesta de Python.
Siempre nos sorprendes. Muchisimas gracias por tu tiempo.
Saludos
Gracias Ángel por la confianza.
Esta semana hago la presentación preliminar.