1. Problema y Necesidad
Los ingenieros de commissioning de relés de protección (alta y media tensión) programan y prueban lógicas (enclavamientos, disparos, permisos de cierre) directamente sobre el equipo físico (p.ej. SIPROTEC 5, ABB Relion, GE, SEL) usando el software del fabricante. No existe una plataforma universal que permita:
- Extraer automáticamente la lógica de una captura de pantalla CFC o diagrama de puertas.
- Clasificar elementos (entradas físicas, salidas, variables internas, variables de usuario como Permiso de cierre).
- Simular condiciones y escenarios de enclavamientos sin el relé físico, validando la robustez antes de ir a campo.
- Aportar auditoría reproducible e independiente del firmware del fabricante.
2. Estado Actual del Mercado
Herramientas existentes parcialmente relacionadas:
- IEDScout / Omicron: Simulación de comunicaciones y entradas GOOSE/61850, no reconstruye lógicas gráficas desde imagen.
- Vendor Software (SIPROTEC DIGSI, ABB PCM600, GE EnerVista, SEL Architect): edición y prueba básica, siempre ligado al ecosistema propio.
- Herramientas de estudios eléctricos (DIgSILENT, ETAP, PSCAD): enfocadas en análisis de sistema, no en parsing de lógica CFC de relés.
No se observa una plataforma SaaS neutral que analice directamente la lógica visual y ofrezca simulación generativa + clasificación automática.
3. Visión de la Plataforma
Crear un entorno web donde el usuario sube una imagen (captura CFC) o exportación nativa y el sistema:
- Detecta cada bloque (AND, OR, XOR, NOT, Timer, Pickup/Dropoff, Counter, Set/Reset Latch).
- Aplica OCR y clasificación para obtener etiquetas (Binary Input 5, SF6 Alto P, Permiso de cierre).
- Genera un grafo dirigido con metadatos (tipo de nodo, parámetros: tiempo, umbral, etc.).
- Identifica naturaleza del símbolo: Entrada física, Salida física, Variable interna (firmware), Variable de usuario.
- Permite construir escenarios de simulación (estados iniciales, secuencias temporales, fallas).
- Ejecuta motor de evaluación determinista + comprobaciones de enclavamiento (reglas definidas).
- Entrega reporte de consistencia, redundancias, condiciones nunca alcanzables y sugerencias.
4. Arquitectura Propuesta (Alta Nivel)
Componentes Frontend
- UI Upload (imagen / zip / XML export).
- Canvas para render del grafo (D3.js / Cytoscape.js).
- Panel de propiedades de nodo.
- Editor de escenarios (timeline de estados).
- Motor de simulación cliente (para pruebas rápidas) + validación servidor (autoridad).
Backend / Microservicios
- Image Preprocessor (deskew, binarización, segmentación).
- Detector de Shapes (OpenCV + modelo CNN ligero de iconos).
- OCR & Label Normalizer (Tesseract + heurísticas domain-specific).
- Graph Builder.
- Classifier (Modelo que asigna tipo: entrada, salida, interna, usuario).
- Simulation Engine (estado discreto, pasos de Δt, timers asíncronos).
- Rules & Validation (enclavamientos esperados, invariantes).
- Report Generator (PDF/JSON).
Flujo Resumido
{
upload -> preprocess -> detect_nodes -> classify_nodes -> detect_connections ->
build_graph -> infer_semantics -> simulate(scenarios) -> validation_report
}
5. Modelo de Datos (Conceptual)
- Node
- Edge
- Label
- Scenario
- Event
- Result
Node: { id, type(enum: INPUT|OUTPUT|LOGIC|TIMER|COUNTER|LATCH|INTERNAL|USER_VAR), name, params{...}, position{ x,y }, connections{ in[], out[] } }
Edge: { id, from, to, signalProps{ polarity, group } }
Scenario: { id, description, initialStates{ nodeId: value }, events:[ { t(ms), nodeId, value } ] }
Result: { scenarioId, timeline:[ { t, states{ nodeId: value } } ], violations:[...] }
Violations ejemplos: condición de enclavamiento no satisfecha, disparo simultáneo conflictivo, timer sin activación, nodo muerto (never reached).
6. Flujo de IA Detallado
- Pre-Proceso: ruido → filtro bilateral; corrección de inclinación (Hough lines); contraste adaptativo.
- Segmentación: edge detection + contour grouping → crops de candidatos (íconos y textos).
- Clasificación de iconos: CNN pequeña (MobileNetV3) entrenada con dataset de puertas típicas (AND, OR, XOR, NOT, Timer, Counter, Latch Set/Reset, Pickup/Dropoff).
- OCR: Tesseract + whitelist de tokens (Binary, Input, SF6, Sec., Disparo, Permiso, etc.) para mejorar precisión.
- Normalización: reglas regex → "Binary Input 5" → type=INPUT, index=5.
- Grafo: detección de líneas/segmentos (skeletonization) y asociación de puertos (puntos de anclaje).
- Clasificación Semántica: Modelo (p.ej. LightGBM o transformer pequeño) que usa features (nombre, proximidad a icono, sufijo Ind#, DPCSO#) para etiquetado final INPUT/OUTPUT/USER_VAR/INTERNAL.
- Validación Básica: chequeo de aciclicidad en grafo lógico puro (timers introducen pseudo estados, pero no rompen DAG principal).
Expresión formal (pipeline):
Let I = input image Clean(I) -> I' DetectShapes(I') -> S Classify(S) -> Nodes (set N) DetectConnections(I', N) -> E (edges) OCR(I', N) -> Labels L Semantic(N, L) -> N' Graph G = (N', E) Simulate(G, Scenarios) -> Results R Validate(G, R) -> Report
7. Motor de Simulación
Evaluación discreta con paso de tiempo Δt (ej. 10 ms). Timers acumulan tiempo mientras condición de pickup es verdadera:
timer.state: if condition==true: elapsed += Δt else: elapsed = 0 output = (elapsed >= setpoint)
Enclavamientos: Conjunto de invariantes declarativas.
// Ejemplo pseudo-regla
rule "Permiso de cierre requiere SF6 OK y muelles cargados" {
assert (Permiso_Cierre == 1) implies (SF6_Alto_P == 1 && Muelles_Descargados == 0)
}
Algoritmo de ejecución:
- Topological sort de nodos lógicos (ignorar ciclos provenientes de latches → tratarlos como nodos con memoria).
- Aplicar actualizaciones de eventos al inicio de cada t.
- Evaluar nodos puros (AND/OR/XOR/NOT).
- Actualizar timers/counters/latches.
- Registrar snapshot de estados.
- Chequear reglas de enclavamiento y acumular violaciones.
Complejidades: latencias no idénticas al firmware real; valores análogos (mediciones) simplificados a booleanos/umbrales.
8. Roadmap MVP (Iterativo)
- MVP 0: Upload imagen → extracción manual asistida (usuario valida bounding boxes).
- MVP 1: Detección automática de puertas básicas + OCR nominal (≥85% precisión).
- MVP 2: Construcción de grafo + simulación de booleanos + timers.
- MVP 3: Reglas de enclavamiento personalizadas + reporte de cobertura.
- MVP 4: API de importación desde export XML (DIGSI / PCM600) para eliminar dependencia de calidad de imagen.
- MVP 5: Analítica avanzada (condiciones inalcanzables, redundancias, tiempo mínimo de disparo).
- MVP 6: Multi-usuario, históricos, control de versiones, firma digital del reporte.
9. Modelo de Negocio y Monetización
Pricing Propuesto
- Plan Profesional: suscripción mensual por asiento (ej. 200–400 €/mes).
- Enterprise: licencias flotantes + despliegue on-prem (cumplimiento OT).
- Pay-per-Report: token para análisis único (para pequeñas firmas).
Generadores de Valor
- Reducción horas en sitio.
- Menos errores de enclavamientos → evita re-trips.
- Trazabilidad auditorías (ISO, reguladores).
- Base de conocimiento reutilizable entre proyectos.
Diferenciación: Integración universal + IA de parsing + analítica de calidad lógica + motor neutro.
10. Riesgos y Mitigación
| Riesgo | Impacto | Mitigación |
|---|---|---|
| OCR bajo en capturas pobres | Errores en la lógica generada | Pipeline de revisión humana asistida; aceptar export XML |
| Variaciones de íconos entre fabricantes | Falsos positivos en clasificación | Dataset incremental + transferencia de estilo |
| Responsabilidad por decisiones de protección | Riesgo legal | Disclaimer estricto; la herramienta no reemplaza pruebas en campo |
| Datos críticos (infraestructura) | Compliance y seguridad | Encriptación, segregación de tenants, opción on-prem |
| Escalabilidad de simulación | Lentitud con grafos grandes | Topological caching + ejecución incremental Δt adaptativo |
11. Prototipo Interactivo (Stub)
Sube una imagen (no se procesa realmente aquí). Se generan nodos ficticios para que veas la estructura. Reemplaza funciones stub* con llamadas a tu backend de IA.
Esta demo no envía datos; toda la lógica es local.
Nodos Detectados
| ID | Nombre | Tipo | Parámetros | Estado |
|---|
Escenario
Resultados
// Salida de simulación aparecerá aquí.
12. Ejemplo de JSON de Esquema
{
"version": "0.1",
"meta": { "source": "capture.png", "parsedAt": "2025-10-27T12:00:00Z" },
"nodes": [
{ "id":"n1","name":"Binary Input 5","type":"INPUT","params":{} },
{ "id":"n2","name":"Timer10s","type":"TIMER","params":{"setpoint_ms":10000} },
{ "id":"n3","name":"Muelles Descargados","type":"OUTPUT","params":{} }
],
"edges": [
{ "id":"e1","from":"n1","to":"n2" },
{ "id":"e2","from":"n2","to":"n3" }
],
"rules": [
{ "id":"r1","expr":"Permiso_Cierre -> (SF6_Alto_P && !Muelles_Descargados)" }
]
}
13. Seguridad / Cumplimiento
- Cifrado en tránsito (TLS 1.3) y en reposo (AES-256) para ficheros e informes.
- Segregación multi-tenant estricta.
- Logs inmutables (append-only) para auditoría.
- Firmas digitales de reportes (hash + clave privada del servicio).
- Opcional despliegue on-prem en red OT aislada.
- Control de versiones de la lógica para rastrear cambios antes de commissioning.
14. Roadmap Extendido (12 Meses)
- Mes 1-2: Dataset de iconos (≥2000 ejemplos), prototipo de OCR adaptado.
- Mes 3: Grapho completo + simulación booleana simple.
- Mes 4-5: Timers/counters avanzados, interfaz escenarios.
- Mes 6: Reglas declarativas + reporte PDF.
- Mes 7: Import directo XML DIGSI / PCM600.
- Mes 8: Analítica de cobertura lógica & nodos muertos.
- Mes 9: Multi-usuario + control de versiones + roles.
- Mes 10: API externa + SDK Python para integración CI.
- Mes 11: Seguridad reforzada, firma digital, on-prem pack.
- Mes 12: Optimización performance, internacionalización, comerciales.