Granalladora APH

Suite de aplicaciones de escritorio para la monitorización en tiempo real de máquinas de granallado industrial, desarrollada durante las prácticas en empresa. La solución cubre dos modelos de máquina — AP2 y P4 — arrancando una u otra (o ambas simultáneamente) según el valor configurado en un archivo config.ini externo, sin necesidad de recompilar.

Comunica con la máquina vía OPC UA y obtiene alarmas y avisos activos desde un WebService WCF propio, actualizando la interfaz cada segundo (datos OPC) y cada 3 segundos (alarmas/avisos).

Módulo P4 — Granalladora de 3 cabinas

Monitoriza una granalladora con 3 cabinas independientes, cada una con 4 turbinas. Para cada turbina se muestra en tiempo real la corriente (A) y la velocidad de lanzamiento (m/s) mediante gauges animados.

Módulo AP2 — Granalladora de 2 cabinas

Monitoriza una granalladora con 2 cabinas, cada una con 4 turbinas, mostrando corriente y velocidad de lanzamiento en tiempo real con el mismo sistema de gauges.

Tecnologías usadas

Lenguaje: C#

Framework: .NET 8, WPF

Comunicación industrial: OPC UA (Opc.Ua SDK), WebService WCF propio

UI: Telerik WPF Gauges (Needle + RadialGauge)

Otros: DispatcherTimer, archivos INI con P/Invoke, config.ini externo, async/await.

Galería de pantallas

Módulo P4 — Vista principal con 3 cabinas
Módulo P4 — 3 cabinas en tiempo real
Módulo AP2 — Vista principal con 2 cabinas
Módulo AP2 — 2 cabinas en tiempo real
Ventana de alarmas P4
Alarmas activas P4
Cambio de Receta AP2
Cambio de receta AP2
Ventana de avisos P4
Avisos activos P4
Ventana alarmas y avisos AP2
Alarmas y Avisos AP2

Decisiones técnicas

Arranque configurable desde INI: El App.xaml.cs lee la clave Granalladora del config.ini al iniciar y abre la ventana AP2, P4 o ambas simultáneamente. La misma aplicación se despliega en cualquier entorno industrial sin recompilar.

Timer con Stop/Start para OPC UA: El DispatcherTimer hace Stop() antes de iniciar cada ciclo de lectura y Start() al terminar, evitando que se solapen lecturas si una variable tarda más de 1 segundo en responder.

Separación de métodos de lectura: Se implementaron tres helpers independientes — LeerYActualizarGaugeAsync, LeerYActualizarTextoAsync y LeerYActualizarEstadoAsync — evitando duplicación de lógica en los más de 30 nodos que se leen por ciclo en P4.

WebService WCF propio para alarmas: Las alarmas y avisos no vienen de OPC UA sino de un servicio WCF desarrollado específicamente (ServicioAlarmasAvisosAP4), lo que desacopla el canal de monitorización del canal de alertas y permite filtrar por tipo (1=alarma, 2=aviso) con el mismo método.

Node IDs totalmente externalizados: Ningún identificador OPC UA está hardcodeado en el código. Todos se leen del config.ini por sección y clave, lo que permite reasignar cualquier variable a un nodo diferente del servidor sin modificar la aplicación.