Go to file
Miguel c1d258fbf3 Implementada persistencia de configuración en JSON y traducción de la interfaz al inglés. Se añadieron métodos para cargar y guardar configuraciones y variables, mejorando la usabilidad y la experiencia del usuario. Además, se actualizó el diseño visual a una paleta de grises más profesional. 2025-07-17 12:45:31 +02:00
.cursor/rules Adaptado Memoria de Evolucion 2025-07-17 12:30:51 +02:00
.doc Implementada persistencia de configuración en JSON y traducción de la interfaz al inglés. Se añadieron métodos para cargar y guardar configuraciones y variables, mejorando la usabilidad y la experiencia del usuario. Además, se actualizó el diseño visual a una paleta de grises más profesional. 2025-07-17 12:45:31 +02:00
templates Implementada persistencia de configuración en JSON y traducción de la interfaz al inglés. Se añadieron métodos para cargar y guardar configuraciones y variables, mejorando la usabilidad y la experiencia del usuario. Además, se actualizó el diseño visual a una paleta de grises más profesional. 2025-07-17 12:45:31 +02:00
.gitignore Primera Version 2025-07-16 16:37:51 +02:00
README.md Primera Version 2025-07-16 16:37:51 +02:00
main.py Implementada persistencia de configuración en JSON y traducción de la interfaz al inglés. Se añadieron métodos para cargar y guardar configuraciones y variables, mejorando la usabilidad y la experiencia del usuario. Además, se actualizó el diseño visual a una paleta de grises más profesional. 2025-07-17 12:45:31 +02:00
requirements.txt Primera Version 2025-07-16 16:37:51 +02:00

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

  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

2. Configurar recepción UDP

  1. Abrir PlotJuggler
  2. Ir a: StreamingStart 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.