sidel_plc_sniffer/README.md

184 lines
5.6 KiB
Markdown

# 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 <repository-url>
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/<name>` - 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 <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.