Hoy vamos a ver un poco por encima cómo realizar faceplates con Qt-Designer.
Es algo similar a lo que sería un plugin. De hecho es básicamente lo mismo, solo que lo que solemos entender como Faceplates tienen varios elementos inteligentes juntos (botones, campos de texto…)
La estructura del proceso de creación
El proceso como tal no es complejo:
- Crear la plantilla gráfica: crear un widget con los botones, textos, campos numéricos.. lo que necesite.
- Crear la clase en Python: dar inteligencia a cada elemento para que todo funcione. Es la parte más laboriosa, pero que no es para nada complicado si sobre todo usas soluciones como la plantilla que se usa en el curso de Python y Qt-Designer.
- Realizar las llamadas necesarias: en este caso, en ventanas emergentes, pero podría ser directamente en el formulario, o en un QDialog… hay varias alternativas. En este caso los he cargado en un QMainwindow. Pero hay varias alternativas.
Del PLC a Python
En el lado del PLC básicamente lo que hay que hacer es un UDT con la estructura de los datos que vas a usar.
En el caso del ejemplo, es una serie de bits de mando y una consigna en forma de número real, y unos estados (modos de trabajo, velocidad real…)
En definitiva, es crear una estrutura con todos los datos de lectura y de escritura necesarios.
Pero ¿cómo manejamos estas variables en el lado de Python?
Para hacer la lectura/escritura de variables del UDT:
- Definimos una variable de tipo puntero que abarque el área que se usa. En el ejemplo que vamos a ver son 14 bytes.
- En la clase en python deshacemos el ovillo, pasando cada parte de ese puntero a la variable que corresponda.
- A la hora de escribir, hacemos básicamente lo mismo. Introducimos los valores que quedemos escribir en el área del puntero, y mandamos escribir las palabras de mando en el PLC.
El vídeo
Lo mejor es verlo en el siguiente vídeo.
¿Qué te ha parecido?
Espero que te haya parecido interesante. Como ves es bastante versátil y una vez lo tienes programado, puedes reutilizarlo tantas veces como lo necesites.
Si además, tienes el motor de comunicación entre python y el PLC como vemos en el curso de HMI con Python y Qt-Designerahorras mucho tiempo de programación.
El ejemplo lógicamente lo subiré a este curso dentro de los anexos.
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.
3 Comentarios
Leave a comment x 4.
Hola Iñigo, eso que estás haciendo pienso que tienes que mostrarlo con ejemplos más «potentes» si quieres detallarlo, te doy mi punto de vista, he llegado a la conclusión basada en mi experiencia que la gente hoy lo que quiere es ser «youtuber», «tiktoker» o «creadores de contenido», aprenden según lo que ellos creen que es lo correcto, o lo que es lo mismo, que no quieren pensar, eso que tú estás haciendo, (lo de los tres motores) se puede hacer con Vijeo Runtime, (WINCC FLEXIBLE creo que es en Siemens), simplemente creando el conjunto de objetos, hacerlos un bloque, después copiar el bloque tantas veces como quieras cambiando las variables correspondientes y punto, sin aprender Phyton, ni VB NET, ni QT, ni nada por el estilo, ya que tanto WINCC como VIJEO están pensados para que «cualquiera» pueda hacer precisamente lo que tú estás haciendo sin Phyton o NET.
Dicho esto, yo sé porque lo he comprobado, lo he analizado, lo he creado, pero sobre todo lo he pensado, que donde esté PHYTON, esté NET, o esté C, que se quite VIJEO, que se quite WINCC y que se quite todo lo que se parezca a esa forma de programar digamos, «alejado del procesador», pero claro, programar «cerca del procesador» lleva aparejados unos conocimientos, tales como los que tú has adquirido para crear esto, y esos conocimientos sólo te sirven para eso y no para otra cosa, por lo tanto, GENERALIZANDO porque en el mundo hay de todo, la gente no va a aprender Phyton si lo puede hacer con otras plataformas más fácilmente, la gente espera de ti que le hagas un algo que les sirva para todo, que no les suponga mucho pensar, que sea fácil de implementar a la vez que le resulte familiar el lenguaje por lo que comento, pensar lo justo para hacer lo que quiere, si le das lo contrario la respuesta es «Leave a comment», nada más.
Entonces, la cuestión creo que está en decirle:
Mira artista, coge tu WINCC, haz que recorra una base de datos, se detenga en el que cumpla esta condición, realice está función, guarde el resultado en tal sitio de tal forma que otro WINCC pueda acceder a los datos para realizar esta otra función, para la cual debes usar tal librería que no funcionará nunca en WINCC porque no está pensado para ello, si lo consigues, tu nivel de programación subirá exponencialmente, permitiéndote ser mucho más eficaz en campos donde el conocimiento sin pensamiento NUNCA llegará, eso sí, tendrás que pensar por ti mismo al igual que yo he hecho adaptando el código de Phyton a un PLC.
Para muestra un botón:
«——–Aquí tu vídeo de un ejemplo que no se pueda realizar con WINCC——–»
Muchos lo intentarán, algunos lo pensarán, sólo unos pocos lo harán, (entre esos pocos me encuentro yo), de esta forma puede que despiertes más interés en la gente para aprender Phyton, creo.
Saludos.
PD:
Os dejo uno mío, (los procesos de programación están en mi canal):
https://youtu.be/Xw7Ks3lr3Hw
A poco que sea complejo que sea el HMI no se puede hacer con WinCC Flexible.
No me preocupa. La gente a la que me dirijo, ya saben lo que vale esta forma de programar y qué potencia tiene.
El que no lo vea, ya lo verá.
No se trata de hacer Faceplates con python en sí mismo, se trata de que esto también se puede hacer, que no es lo mismo.
Tan sencillo como una pequeña aplicación de visión artificial, sí lo podrás hacer con Python, pero lógicamente no con WinCC Flexible.
El punto está para los que quieren desarrollar en Python, facilitar el trabajo, nada más.
Comunicar con una BBDD en Python es sencillo, lo mismo que lo es en visual basic u otros lenguajes.
La historia es que hay muchos entornos estilo WinCC (no flexible), Ifix, Wonderware u otros, que hacen lo que hacen pero finalmente acabas picando cientos de líneas de código en scripts pagando un dineral por la licencia para que finalmente has tenido que programar casi tanto como si lo hubieras hecho en .net desde cero.
Entonces, es que no me preocupa el que piense que es trivial. El que piense que hacer la plantilla que he programado para comunicar con los PLC se puede hacer en una mañana, es simplemente no sabe las cosas que implican.
«se trata de que esto también se puede hacer, que no es lo mismo»
Exacto Iñigo, esa es la base fundamental de ofrecer lo que ofreces, una forma diferente «pensada» por ti.
«El punto está para los que quieren desarrollar en Python»
A esos me refería, muy poquitos lo desarrollarán.
«finalmente has tenido que programar casi tanto como si lo hubieras hecho en .net desde cero»
Por supuesto que sí, aunque yo creo que programas más, aparte de pagar, programas más y peor.
«El que piense que hacer la plantilla que he programado para comunicar con los PLC se puede hacer en una mañana, es simplemente no «sabeR» las cosas que implican»
Pero seguro que quiere que se lo envíes a su correo, así se ahorra los MESES que a ti te ha costado crear esa plantilla en Phyton.
La respuesta mía a estos usuarios normalmente es:
No hombre no, esto no funciona así, tú inténtalo, me envías lo que has hecho, yo lo reviso, y te ayudo en tu problema a medida que pueda.
También te comentaré, que el trabajo que tú haces aunque sea compartiendo una parte en tus vídeos, es digno de admirar, eso por un lado, por otro lado, cualquier precio que pongas a tus cursos compartiendo lo que tanto te cuesta aprender, para mi es poco.
Saludos.