Pulsa ESC para cerrar · Ctrl+K para abrir

Registro de datos de PLC con InfluxDB

Recogiendo datos de PLC Siemens servidos por OPC UA Server, almacenándolos en InfluxDB y visualizándolos con Chronograf.

Arquitectura del sistema para registrar datos de PLC Siemens OPC UA en InfluxDB y visualizarlos con Chronograf

Objetivo

Vamos a montar un sistema sencillo de historización industrial usando InfluxDB, una base de datos de series temporales que puede servir como alternativa open source en determinados escenarios.

El laboratorio usa 3 PLC Siemens S7-1500 como servidores OPC UA, InfluxDB como base de datos, Chronograf para visualizar los datos y un bridge en Python como conector entre OPC UA e InfluxDB.

InfluxData mantiene varias versiones de InfluxDB. En este ejemplo trabajamos con el stack clásico de InfluxDB 1.x, porque encaja bien con Chronograf y con la escritura mediante HTTP API.

Arquitectura

InfluxDB guarda puntos de datos asociados a un instante de tiempo. Los organiza por mediciones, etiquetas y valores, por eso resulta útil para registrar señales industriales, sensores, variables de PLC o métricas cada pocos segundos.

A diferencia de motores como SQL Server o MySQL, pensados para relaciones entre tablas y procesos de negocio, InfluxDB está optimizada para escribir muchos datos cronológicos, comprimirlos y consultarlos rápido por rango de tiempo.

  • Base de datos: InfluxDB.
  • Origen de datos: 3 PLC S7-1500 con OPC UA Server.
  • Conector: script Python enviando datos por HTTP + Line Protocol.
  • Visualización: Chronograf.
  • Entorno: contenedor Linux LXC en Proxmox.

PLC Siemens como servidores OPC UA

Con TIA Portal V20 y PLCSIM Advanced V7.0 creamos 3 proyectos de PLC con variables de ejemplo y funciones para modificar su valor.

Después preparamos el servidor OPC UA de cada PLC. Si quieres el detalle del punto de partida, está explicado en Servidor OPC UA Siemens S7-1500: TIA Portal V20 y PLCSIM. Para este laboratorio se deja la política de seguridad en None; para trabajar con certificados, el artículo de referencia es Seguridad OPC UA: Siemens S7-1500 y Cliente UA Expert.

Siemens también documenta el acceso al servidor OPC UA del S7-1500 en la documentación de TIA Portal.

Tres PLC Siemens S7-1500 configurados como servidores OPC UA

InfluxDB en LXC

Montamos InfluxDB en un contenedor Linux LXC dentro de Proxmox. En este mismo equipo se instalarán la base de datos, el bridge, Chronograf y el panel de gestión.

  • ID: 115.
  • Nombre: opcua-influx.
  • IP: 192.168.1.115.
  • Sistema: Debian 13.
  • Recursos: 2 cores, 2 GB RAM, 512 MB swap y 12 GB de disco.
Configuración del contenedor LXC para InfluxDB en Proxmox

Para la prueba instalamos InfluxDB desde paquetes del sistema:

Debian
apt-get install -y influxdb

La versión instalada en este entorno ha sido influxdb 1.6.7~rc0-2+b12. InfluxData mantiene documentación oficial para la HTTP API de InfluxDB 1.x y para el Line Protocol, que son las piezas usadas en este montaje.

Comprobación de la versión instalada de InfluxDB

Chronograf

Para visualizar los datos de InfluxDB podemos usar herramientas como Chronograf o Grafana. En este caso usamos Chronograf, la interfaz web natural del stack clásico de InfluxData.

Instalación
apt-get install -y chronograf
systemctl enable --now chronograf
systemctl status chronograf

Chronograf queda accesible por el puerto 8888 del LXC. En este laboratorio: http://192.168.1.115:8888. La documentación oficial está en Chronograf Documentation.

Servicio Chronograf arrancado en Debian
Interfaz web de Chronograf conectada a InfluxDB

Bridge OPC UA a InfluxDB

Hay varias formas de introducir datos en InfluxDB: HTTP API con Line Protocol, librería influxdb de Python, librería influxdb-client o Telegraf.

En este ejemplo usamos HTTP + Line Protocol porque es simple, rápido, robusto y transparente para InfluxDB 1.x.

Python construye una línea de texto y la envía por HTTP al endpoint de escritura:

Line Protocol
plc_values,source=opcua,connection=plc1,tag=Var1_Bool bool_value=true
HTTP API
POST http://127.0.0.1:8086/write?db=opcua

El script principal del bridge queda en:

Ruta
/opt/opcua-client/bridge/opcua_to_influx.py

Como alternativa, usando la librería influxdb de Python, la escritura de un punto tendría esta forma:

Python
from influxdb import InfluxDBClient

client = InfluxDBClient(host="127.0.0.1", port=8086, database="opcua")
client.write_points([
    {
        "measurement": "plc_values",
        "tags": {
            "connection": "plc1",
            "tag": "Var1_Bool",
        },
        "fields": {
            "bool_value": True,
        },
    }
])

OPC UA Bridge Studio

Para facilitar la configuración he creado un OPC UA Bridge Studio. La interfaz permite crear conexiones de forma rápida, configurar certificados, explorar el servidor OPC UA y añadir variables a InfluxDB.

Primero se crea la conexión con la dirección del servidor OPC UA.

Creación de una conexión OPC UA en OPC UA Bridge Studio

Después se nombra la measurement, que será el grupo en InfluxDB, y se despliega el árbol OPC UA.

Measurement de InfluxDB y árbol OPC UA desplegado en Bridge Studio

Seleccionamos las variables que queremos registrar y las añadimos a InfluxDB.

Selección de variables OPC UA para registrar en InfluxDB

Con esto la conexión queda creada y lista para empezar a registrar datos.

Conexión OPC UA creada en el Bridge Studio

Resultados

En Chronograf ya podemos acceder a los valores registrados en InfluxDB desde las conexiones creadas previamente. En la vista de exploración se observan las señales almacenadas y su evolución temporal.

Señales de PLC registradas en InfluxDB y visualizadas en Chronograf
Valores registrados en InfluxDB desde variables OPC UA

Con esta arquitectura queda validado un flujo sencillo: PLC Siemens como servidor OPC UA, bridge Python escribiendo en InfluxDB y Chronograf mostrando las series temporales.

Artículos relacionados



¿Te ha servido este articulo?

Compartir en LinkedIn