Rela AIRela AI Docs
Strumenti

Protocolli Industriali (Modbus, S7, EtherNet/IP)

Collega l'agente direttamente a PLC e inverter via Modbus TCP, S7comm (Siemens S7-1200/1500) ed EtherNet/IP (Allen-Bradley). Lettura e scrittura senza gateway.

Protocolli Industriali Nativi

Oltre a HTTP / MQTT / OPC UA, Rela AI parla nativamente i tre protocolli più diffusi in campo: Modbus TCP, S7comm (Siemens) e EtherNet/IP (CIP, Allen-Bradley). L'agente può leggere variabili ed eseguire scritture sui PLC senza gateway intermedio.

A cosa serve

Gran parte del parco industriale installato non ha server OPC UA. Fino a poco tempo fa, integrare un Siemens S7-1200 o un Allen-Bradley richiedeva un gateway o un server OPC UA intermedio. Ora:

  • L'agente legge direttamente registri / data block / tag.
  • L'agente scrive direttamente su coil, holding register, DB word, tag CIP (half-duplex completo).
  • Il listener di eventi ingesta cambi di valore senza URL HTTP.

Riduce tre cose: costo di integrazione, latenza, superficie di guasto.

Come funziona

flowchart LR
  PLC[PLC / SCADA] -->|Modbus TCP / S7 / CIP / OPC UA| L[Listener persistente<br/>worker WORKER_MODE=true]
  L --> FM[Field mapping<br/>+ normalizzazione]
  FM --> P[Pipeline predittivo<br/>anomaly / energy / prognostics]
  A[Agente IA] -->|dispatcher sincrono| PLC

Due percorsi: i listener persistenti del worker leggono in continuo e pubblicano eventi al pipeline; i dispatcher sincroni permettono agli strumenti dell'agente di scrivere verso il PLC. Ogni protocollo usa la sua libreria canonica (pymodbus 3.8+, snap7, pycomm3, asyncua) con i suoi gotcha (vedi il CLAUDE.md di relaai-api per i kwargs specifici).

Protocolli supportati

ProtocolloDispositivi tipiciLetturaScritturaLibreria
HTTP / RESTERP, CMMS, API generichehttpx
MQTTBroker IoT, gatewayaiomqtt
OPC UA (incl. Reverse Connect)SCADA, PLC con server OPC UAasyncua
Modbus TCPPLC, inverter, misuratori✅ holding/input/coil/discrete✅ write_register / write_coilpymodbus ≥ 3.8
S7commSiemens S7-1200, S7-1500, S7-300/400✅ DB / M / I / Q✅ DB write con codec per tipopython-snap7
EtherNet/IP (CIP)Allen-Bradley ControlLogix / CompactLogix✅ tag read✅ tag writepycomm3

Modbus TCP

Lettura (listener)

Sorgente di tipo modbus:

protocol: modbus
modbus_host: 10.10.2.15
modbus_port: 502
modbus_unit_id: 1
poll_interval_s: 5
registers:
  - address: 40001
    count: 2
    register_type: holding
    field_name: tank_level

register_type supportati: holding, input, coil, discrete.

Scrittura (tool action)

tool_type: action
config:
  protocol: modbus
  modbus_host: 10.10.2.15
  modbus_port: 502
  modbus_unit_id: 1
  modbus_operation: holding   # o "coil"
action_defaults:
  address: 40100

Dispatcher valida modbus_host, address, value, esegue write_register o write_coil (kwarg device_id, API pymodbus 3.8+), ritorna {success, written, address, value, type, duration_ms}.

Le scritture agli holding register modificano il comportamento del PLC. Usa solo con agenti il cui prompt includa restrizioni di sicurezza e conferma esplicita.

S7comm (Siemens)

Lettura (listener)

protocol: s7
s7_host: 10.10.2.40
s7_rack: 0
s7_slot: 1
poll_interval_s: 10
variables:
  - area: DB
    db_number: 20
    offset: 0
    data_type: real
    field_name: pressure

Aree supportate: DB, M, I, Q.

Scrittura (tool action)

tool_type: action
config:
  protocol: s7
  s7_host: 10.10.2.40
action_defaults:
  db_number: 20
  offset: 0
  data_type: real

Tipi encodati dal dispatcher (_s7_encode_value):

data_typeByteEncoder
bool1set_bool
byte1set_byte
int2set_int
word2set_word
dint4set_dint
dword4set_dword
real4set_real
stringNset_string

EtherNet/IP (CIP)

Lettura (listener)

protocol: ethernet_ip
cip_host: 10.10.3.22
poll_interval_s: 5
tags:
  - tag_name: Program:MainProgram.Temperature
    field_name: temperature

Scrittura (tool action)

tool_type: action
config:
  protocol: ethernet_ip
  cip_host: 10.10.3.22

Dispatcher usa pycomm3.LogixDriver. Se il tag non esiste o tipo non corrisponde, risponde {success: false, error}.

OPC UA Reverse Connect

Per PLC dietro firewall stretti: OPC UA Reverse Connect — il PLC inizia la connessione TCP. Sorgente tipo opcua_reverse con opcua_reverse_listen_port e certificati opzionali.

Sicurezza

  • Isolamento di rete: listener e dispatcher industriali devono girare su worker con accesso alla VLAN industriale.
  • Permessi di scrittura: pre-configura address / db_number / tag_name via action_defaults.
  • Conferma umana: agenti con azioni di scrittura devono includere "conferma prima di eseguire".
  • Rate limiting: evita tool che permettano scritture massive.
  • Audit: ogni scrittura loggata con host, address, value, actor, duration_ms.

Listener persistenti e orchestrazione

MQTT, OPC UA, Modbus, S7, EtherNet/IP richiedono connessioni persistenti. Rela AI le gestisce in rela-ai-worker (Cloud Run):

  • Scansiona tutte le sorgenti abilitate all'avvio.
  • Avvia un asyncio.Task per sorgente.
  • Auto-riconnessione con backoff esponenziale (1s → 60s).
  • Pubblica status di connessione via Ably.
  • Stop/restart automatico quando una sorgente viene creata/aggiornata/eliminata.

L'API web non esegue listener, solo il worker.

Test dal dashboard

Prima di attivare una sorgente o tool di scrittura:

  1. Test connessione — valida credenziali.
  2. Test lettura — legge un registro configurato.
  3. Test scrittura — scrive e rilegge per conferma.

Benefici chiave

  • Tre protocolli industriali nativi aggiuntivi.
  • Half-duplex completo.
  • Listener riconnettibili con backoff.
  • Dispatcher validati da test.
  • Status real-time via Ably.
  • Rate limiting + audit + conferma umana per difesa in profondità.

In questa pagina