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.
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.
Para la prueba instalamos InfluxDB desde paquetes del sistema:
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.
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.
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.
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:
plc_values,source=opcua,connection=plc1,tag=Var1_Bool bool_value=true
POST http://127.0.0.1:8086/write?db=opcua
El script principal del bridge queda en:
/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:
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.
Después se nombra la measurement, que será el grupo en InfluxDB, y se despliega el árbol OPC UA.
Seleccionamos las variables que queremos registrar y las añadimos a InfluxDB.
Con esto la conexión queda creada y lista para empezar a registrar datos.
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.
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