Readme
This commit is contained in:
commit
ddfb6adbbc
|
@ -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 <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.
|
Loading…
Reference in New Issue