Go to file
Miguel 631850125a Actualización del archivo application_events.json para incluir un nuevo evento de inicio de aplicación y ajuste de la fecha de última actualización. Modificación en reglas.mdc para aplicar siempre las reglas. Se implementó una nueva cuadrícula de configuración en index.html para mejorar la organización de los formularios de configuración de PLC y UDP. 2025-07-19 12:21:05 +02:00
.cursor/rules Actualización del archivo application_events.json para incluir un nuevo evento de inicio de aplicación y ajuste de la fecha de última actualización. Modificación en reglas.mdc para aplicar siempre las reglas. Se implementó una nueva cuadrícula de configuración en index.html para mejorar la organización de los formularios de configuración de PLC y UDP. 2025-07-19 12:21:05 +02:00
.doc Implementación de mejoras en la gestión de variables de streaming, asegurando que solo se transmitan las variables activas y sincronizando las configuraciones de streaming al iniciar la aplicación. Se corrigieron problemas de inicialización de streaming en la recuperación automática y se actualizaron los archivos de configuración y estado del sistema para reflejar los cambios recientes. Además, se mejoró la interfaz de usuario para mostrar correctamente el estado de las variables en streaming. 2025-07-17 18:32:47 +02:00
.images Implementadas mejoras significativas en el sistema de streaming y grabación de CSV. Se añadió un control independiente para la grabación de CSV, permitiendo la organización automática de archivos por hora. Se implementó un sistema de persistencia del estado del sistema y recuperación automática, mejorando la fiabilidad en entornos industriales. Además, se integró el logo de SIDEL en la interfaz y se realizaron ajustes en el diseño para una mejor experiencia de usuario. 2025-07-17 14:32:45 +02:00
core Version base con Pico.css 2025-07-19 12:17:44 +02:00
records/17-07-2025 Se implementó un sistema de registro de eventos persistente con almacenamiento en disco y visualización en tiempo real en la interfaz web. Se añadieron nuevas funcionalidades para la carga y guardado del estado del sistema, así como mejoras en la gestión de instancias únicas y recuperación automática. Además, se realizaron ajustes en la interfaz para mostrar el registro de eventos, incluyendo opciones de filtrado y limpieza de la vista. 2025-07-17 15:47:48 +02:00
static/css Version base con Pico.css 2025-07-19 12:17:44 +02:00
templates Actualización del archivo application_events.json para incluir un nuevo evento de inicio de aplicación y ajuste de la fecha de última actualización. Modificación en reglas.mdc para aplicar siempre las reglas. Se implementó una nueva cuadrícula de configuración en index.html para mejorar la organización de los formularios de configuración de PLC y UDP. 2025-07-19 12:21:05 +02:00
.gitignore Implementación de mejoras en la gestión de variables de streaming, asegurando que solo se transmitan las variables activas y sincronizando las configuraciones de streaming al iniciar la aplicación. Se corrigieron problemas de inicialización de streaming en la recuperación automática y se actualizaron los archivos de configuración y estado del sistema para reflejar los cambios recientes. Además, se mejoró la interfaz de usuario para mostrar correctamente el estado de las variables en streaming. 2025-07-17 18:32:47 +02:00
README.md Primera Version 2025-07-16 16:37:51 +02:00
application_events.json Actualización del archivo application_events.json para incluir un nuevo evento de inicio de aplicación y ajuste de la fecha de última actualización. Modificación en reglas.mdc para aplicar siempre las reglas. Se implementó una nueva cuadrícula de configuración en index.html para mejorar la organización de los formularios de configuración de PLC y UDP. 2025-07-19 12:21:05 +02:00
main.py Version base con Pico.css 2025-07-19 12:17:44 +02:00
plc_config.json Implementadas mejoras significativas en el sistema de streaming y grabación de CSV. Se añadió un control independiente para la grabación de CSV, permitiendo la organización automática de archivos por hora. Se implementó un sistema de persistencia del estado del sistema y recuperación automática, mejorando la fiabilidad en entornos industriales. Además, se integró el logo de SIDEL en la interfaz y se realizaron ajustes en el diseño para una mejor experiencia de usuario. 2025-07-17 14:32:45 +02:00
plc_datasets.json Antes de refactorizar a varias clases 2025-07-19 10:00:52 +02:00
requirements.txt Se implementó un sistema de registro de eventos persistente con almacenamiento en disco y visualización en tiempo real en la interfaz web. Se añadieron nuevas funcionalidades para la carga y guardado del estado del sistema, así como mejoras en la gestión de instancias únicas y recuperación automática. Además, se realizaron ajustes en la interfaz para mostrar el registro de eventos, incluyendo opciones de filtrado y limpieza de la vista. 2025-07-17 15:47:48 +02:00
system_state.json Antes de refactorizar a varias clases 2025-07-19 10:00:52 +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.