# 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 ```bash git clone cd S7_snap7_Stremer_n_Log ``` ### 2. Crear entorno virtual con miniconda ```bash conda create -n plc_streamer python=3.10 conda activate plc_streamer ``` ### 3. Instalar dependencias ```bash 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 ```bash python main.py ``` ### 2. Acceder a la interfaz web Abrir navegador en: `http://localhost:5000` ### 3. Configuración del PLC 1. Ir a la sección "Configuración PLC S7-315" 2. 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) 3. Hacer clic en "Guardar Configuración" 4. Hacer clic en "Conectar PLC" ### 4. Configurar Gateway UDP para PlotJuggler 1. Ir a la sección "Configuración Gateway UDP" 2. 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) 3. Hacer clic en "Guardar Configuración" ### 5. Añadir Variables del PLC 1. Ir a la sección "Variables del PLC" 2. 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 3. Hacer clic en "Añadir Variable" ### 6. Iniciar Streaming 1. Ir a la sección "Control de Streaming" 2. Hacer clic en "Iniciar Streaming" 3. 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 1. Abrir PlotJuggler 2. Ir a: `Streaming` → `Start streaming` 3. Seleccionar `UDP Server` 4. Configurar: - **Port**: 9870 (mismo que en la configuración) - **Protocol**: JSON 5. 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 PLC - `POST /api/udp/config` - Actualizar configuración UDP - `POST /api/plc/connect` - Conectar al PLC - `POST /api/plc/disconnect` - Desconectar del PLC - `POST /api/variables` - Añadir variable - `DELETE /api/variables/` - Eliminar variable - `POST /api/streaming/start` - Iniciar streaming - `POST /api/streaming/stop` - Detener streaming - `POST /api/sampling` - Actualizar intervalo de muestreo - `GET /api/status` - Obtener estado actual ## 📝 Logging El sistema genera dos tipos de logs: 1. **Log de aplicación**: Eventos del sistema, conexiones, errores 2. **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 `) - 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.