From ddfb6adbbc5000aa232d2a4ce9dcdd3bc80facfe Mon Sep 17 00:00:00 2001 From: Miguel Date: Tue, 23 Sep 2025 09:47:21 +0200 Subject: [PATCH] Readme --- README.md | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d85cf15 --- /dev/null +++ b/README.md @@ -0,0 +1,184 @@ +# 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. \ No newline at end of file