- Se añadieron múltiples eventos de inicio de aplicación, activación de datasets y creación de sesiones de gráficos en el archivo application_events.json. - Se mejoró la función get_historical_data en main.py con un manejo de errores más robusto y mensajes de depuración detallados. - Se actualizó el estado del sistema en system_state.json para reflejar los cambios en los datasets activos y la última actualización. - Se documentaron las mejoras en la Memoria de Evolución, destacando la implementación de la carga de datos históricos y la validación de encabezados CSV. |
||
---|---|---|
.. | ||
CHARTJS_STREAMING_INTEGRATION.md | ||
CONSOLE_CLEANUP_SUMMARY.md | ||
EJEMPLO_USO_PLOTTING.md | ||
MemoriaDeEvolucion.md | ||
PLOTTING_FINALIZATION_SUMMARY.md | ||
PLOTTING_FIXES_FINAL.md | ||
PLOTTING_FIXES_RESUMEN.md | ||
PLOTTING_STATUS_FINAL.md | ||
PLOTTING_SYSTEM.md | ||
README.md | ||
REAL_TIME_STREAMING.md | ||
STREAMING_TROUBLESHOOTING.md | ||
example.py |
README.md
PLC S7-315 Streamer & Logger
Sistema web para monitoreo y streaming en tiempo real de datos de PLC Siemens S7-315 hacia PlotJuggler.
🚀 Características
- Interfaz Web Moderna: Control completo desde navegador
- Configuración Dinámica: PLC, UDP y variables configurables en tiempo real
- Streaming en Vivo: Datos enviados a PlotJuggler vía UDP JSON
- Logging Completo: Registro de todas las operaciones y datos
- Soporte Multiples Tipos: REAL, INT, DINT, BOOL
- Estado en Tiempo Real: Monitoreo del estado de conexión y streaming
📋 Requisitos
Hardware
- PLC Siemens S7-315 conectado a la red
- PC con Windows y miniconda
Software
- Python 3.8+
- PlotJuggler (para visualización de datos)
- Bibliotecas snap7 de Siemens
🛠️ Instalación
1. Clonar o descargar el proyecto
git clone <repository-url>
cd S7_snap7_Stremer_n_Log
2. Crear entorno virtual con miniconda
conda create -n plc_streamer python=3.10
conda activate plc_streamer
3. Instalar dependencias
pip install -r requirements.txt
4. Instalar bibliotecas snap7 de Siemens
- Descargar snap7 library desde: https://snap7.sourceforge.net/
- Extraer y copiar
snap7.dll
a la carpeta del sistema o proyecto - En Windows, típicamente en
C:\Windows\System32\
o en el directorio del proyecto
🎯 Uso
1. Iniciar el servidor
python main.py
2. Acceder a la interfaz web
Abrir navegador en: http://localhost:5000
3. Configuración del PLC
- Ir a la sección "Configuración PLC S7-315"
- Introducir:
- IP del PLC: Dirección IP del PLC (ej: 192.168.1.100)
- Rack: Número de rack (típicamente 0)
- Slot: Número de slot (típicamente 2)
- Hacer clic en "Guardar Configuración"
- Hacer clic en "Conectar PLC"
4. Configurar Gateway UDP para PlotJuggler
- Ir a la sección "Configuración Gateway UDP"
- Configurar:
- Host UDP: 127.0.0.1 (localhost)
- Puerto UDP: 9870 (puerto por defecto de PlotJuggler)
- Intervalo de Muestreo: Tiempo entre lecturas (ej: 0.1s = 10Hz)
- Hacer clic en "Guardar Configuración"
5. Añadir Variables del PLC
- Ir a la sección "Variables del PLC"
- Para cada variable añadir:
- Nombre Variable: Nombre descriptivo (ej: temperatura)
- Data Block (DB): Número del DB (ej: 1 para DB1)
- Offset: Posición en bytes dentro del DB
- Tipo de Dato: REAL, INT, DINT, o BOOL
- Hacer clic en "Añadir Variable"
6. Iniciar Streaming
- Ir a la sección "Control de Streaming"
- Hacer clic en "Iniciar Streaming"
- Los datos se enviarán automáticamente a PlotJuggler
📊 Configuración de PlotJuggler
1. Instalar PlotJuggler
- Descargar desde: https://github.com/facontidavide/PlotJuggler
- Instalar siguiendo las instrucciones
2. Configurar recepción UDP
- Abrir PlotJuggler
- Ir a:
Streaming
→Start streaming
- Seleccionar
UDP Server
- Configurar:
- Port: 9870 (mismo que en la configuración)
- Protocol: JSON
- Hacer clic en
Start
3. Visualizar datos
- Los datos aparecerán automáticamente en el panel izquierdo
- Arrastrar variables al área de gráficos para visualizar
🏗️ Estructura del Proyecto
S7_snap7_Stremer_n_Log/
├── main.py # Aplicación Flask principal
├── templates/
│ └── index.html # Interfaz web
├── requirements.txt # Dependencias Python
├── README.md # Este archivo
├── plc_data.log # Log de datos (generado automáticamente)
└── .doc/
└── example.py # Ejemplo de referencia
🔧 API Endpoints
La aplicación expone los siguientes endpoints:
POST /api/plc/config
- Actualizar configuración PLCPOST /api/udp/config
- Actualizar configuración UDPPOST /api/plc/connect
- Conectar al PLCPOST /api/plc/disconnect
- Desconectar del PLCPOST /api/variables
- Añadir variableDELETE /api/variables/<name>
- Eliminar variablePOST /api/streaming/start
- Iniciar streamingPOST /api/streaming/stop
- Detener streamingPOST /api/sampling
- Actualizar intervalo de muestreoGET /api/status
- Obtener estado actual
📝 Logging
El sistema genera dos tipos de logs:
- Log de aplicación: Eventos del sistema, conexiones, errores
- Log de datos: Valores de variables con timestamp
Los logs se guardan en plc_data.log
y también se muestran en consola.
🛡️ Consideraciones de Seguridad
- El servidor Flask está configurado para desarrollo (
debug=True
) - Para producción, desactivar modo debug y configurar adecuadamente
- Verificar que la red del PLC sea segura
- Utilizar firewalls apropiados
🐛 Solución de Problemas
Error de conexión al PLC
- Verificar IP, rack y slot del PLC
- Comprobar conectividad de red (
ping <ip_plc>
) - Verificar que el PLC esté configurado para permitir conexiones Ethernet
Error snap7.dll
- Descargar snap7 library desde el sitio oficial
- Copiar
snap7.dll
al directorio del sistema o proyecto
PlotJuggler no recibe datos
- Verificar puerto UDP (debe coincidir en ambas aplicaciones)
- Comprobar firewall de Windows
- Verificar que PlotJuggler esté configurado para JSON
Variables no se leen correctamente
- Verificar offset y tipo de dato
- Confirmar estructura del Data Block en el PLC
- Comprobar que el DB existe y tiene el tamaño suficiente
📞 Soporte
Para problemas o mejoras, revisar:
- Logs en
plc_data.log
- Consola del servidor Flask
- Herramientas de desarrollo del navegador
📄 Licencia
Este proyecto está destinado para uso interno y educativo.