Salta ai contenuti

Connettore OPC UA

Il connettore OPC UA (Open Platform Communications Unified Architecture) abilita la comunicazione con server OPC UA, il protocollo standard industriale per l’automazione industriale e lo scambio dati.

Tipi Connettore:

  • OpcuaReader - Leggi dati da server OPC UA
  • OpcuaWriter - Scrivi dati su server OPC UA
  • ✅ Protocollo standard industriale per automazione industriale
  • ✅ Metodi di autenticazione multipli (Anonimo, Basic, Certificato)
  • ✅ Modalità di sicurezza (None, Sign, SignAndEncrypt)
  • ✅ Frequenze di polling configurabili
  • ✅ Supporto per strutture nodi complesse
  • ✅ Operazioni di lettura e scrittura
{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://localhost:4840",
"pollingRate": 1000
},
"variables": [
{
"key": "temperature",
"nodeId": "ns=1;s=Temperature"
},
{
"key": "pressure",
"nodeId": "ns=1;s=Pressure"
}
]
}
{
"type": "OpcuaWriter",
"config": {
"endpoint": "opc.tcp://localhost:4840",
"auth": {
"mode": "Basic",
"username": "opcuser",
"password": "opcpassword"
}
},
"variables": [
{
"key": "setpoint",
"nodeId": "ns=1;s=Setpoint"
},
{
"key": "control_mode",
"nodeId": "ns=1;s=ControlMode"
}
]
}

L’URL endpoint del server OPC UA.

{
"endpoint": "opc.tcp://192.168.1.100:4840"
}

Formato: opc.tcp://[host]:[porta][/percorso]

Per i reader, l’intervallo in millisecondi tra le letture dati.

{
"pollingRate": 1000 // Leggi ogni 1 secondo
}

Valori raccomandati:

  • Veloce: 100-500ms
  • Normale: 1000ms (1 secondo)
  • Lento: 5000ms (5 secondi)

Nessuna autenticazione richiesta:

{
// Nessun campo auth necessario
}

Username e password:

{
"auth": {
"mode": "Basic",
"username": "your-username",
"password": "your-password"
}
}

Certificati X.509:

{
"auth": {
"authCertificateFile": {
"mode": "DirectPath",
"fileName": "client-cert.pem",
"path": "/path/to/client-cert.pem"
},
"authKeyFile": {
"mode": "DirectPath",
"fileName": "client-key.pem",
"path": "/path/to/client-key.pem"
}
}
}

Configura modalità e policy di sicurezza:

{
"security": {
"mode": "SignAndEncrypt",
"policy": "Basic256Sha256"
}
}

Modalità di Sicurezza:

  • None - Nessuna sicurezza (default)
  • Sign - Solo firma messaggi
  • SignAndEncrypt - Firma e cripta messaggi

Policy di Sicurezza:

  • None
  • Basic128Rsa15
  • Basic256
  • Basic256Sha256 (raccomandato)

Le variabili definiscono quali nodi OPC UA leggere o scrivere.

{
"key": "temperature",
"nodeId": "ns=1;s=Temperature"
}

Campi:

  • key - Il nome chiave nel payload Meddle
  • nodeId - L’identificatore nodo OPC UA

OPC UA supporta diversi formati node ID:

{
"key": "sensor1",
"nodeId": "ns=1;s=SensorName"
}

Formato: ns=[namespace];[tipo]=[identificatore]

Dove:

  • ns - Indice namespace (0-65535)
  • tipo - Tipo Node ID:
    • s - String
    • i - Numerico
    • g - GUID
    • b - Opaco (Base64)
Server OPC UA → OpcuaReader → Payload Meddle

Esempio:

Nodi OPC UA:

  • ns=1;s=Temperature = 25.5
  • ns=1;s=Pressure = 101.3

Payload output:

{
"temperature": 25.5,
"pressure": 101.3
}
Payload Meddle → OpcuaWriter → Server OPC UA

Esempio:

Payload input:

{
"setpoint": 30.0,
"mode": "auto"
}

Scrive su:

  • ns=1;s=Setpoint ← 30.0
  • ns=1;s=Mode ← “auto”

Leggi sensori temperatura da un PLC:

{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://plc.local:4840",
"pollingRate": 1000
},
"variables": [
{
"key": "zone1_temp",
"nodeId": "ns=2;s=Zone1.Temperature"
},
{
"key": "zone2_temp",
"nodeId": "ns=2;s=Zone2.Temperature"
},
{
"key": "ambient_temp",
"nodeId": "ns=2;s=Ambient.Temperature"
}
]
}

Scrivi setpoint per controllare un processo:

{
"type": "OpcuaWriter",
"config": {
"endpoint": "opc.tcp://plc.local:4840",
"auth": {
"mode": "Basic",
"username": "operator",
"password": "secure123"
}
},
"variables": [
{
"key": "temperature_setpoint",
"nodeId": "ns=2;s=Control.TempSetpoint"
},
{
"key": "pressure_setpoint",
"nodeId": "ns=2;s=Control.PressureSetpoint"
}
]
}

Monitora più macchine:

{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://scada.local:4840",
"pollingRate": 500
},
"variables": [
{
"key": "machine1_status",
"nodeId": "ns=3;s=Machine1.Status"
},
{
"key": "machine1_speed",
"nodeId": "ns=3;s=Machine1.Speed"
},
{
"key": "machine1_count",
"nodeId": "ns=3;s=Machine1.ProductCount"
},
{
"key": "machine2_status",
"nodeId": "ns=3;s=Machine2.Status"
},
{
"key": "machine2_speed",
"nodeId": "ns=3;s=Machine2.Speed"
}
]
}

Problema: Impossibile connettersi al server OPC UA

Soluzioni:

  1. Verifica che l’URL endpoint sia corretto
  2. Controlla connettività di rete: ping [server-ip]
  3. Verifica che la porta sia aperta: telnet [server-ip] 4840
  4. Controlla regole firewall
  5. Assicurati che il server OPC UA sia in esecuzione

Problema: Errori di autenticazione

Soluzioni:

  1. Verifica che username e password siano corretti
  2. Controlla se l’utente ha permessi appropriati
  3. Per auth certificato, assicurati che i certificati siano validi e non scaduti
  4. Verifica che i percorsi certificati siano corretti

Problema: Errori “Nodo non trovato”

Soluzioni:

  1. Usa un client OPC UA (come UaExpert) per esplorare il server
  2. Verifica che l’indice namespace sia corretto
  3. Controlla che il formato node ID corrisponda al formato del server
  4. Assicurati che il nodo esista e sia accessibile

Problema: Errori policy di sicurezza

Soluzioni:

  1. Controlla quali policy di sicurezza supporta il server
  2. Abbina security.policy a una policy supportata
  3. Assicurati che i certificati siano configurati correttamente per connessioni crittografate

Problema: Aggiornamenti dati lenti o alto utilizzo CPU

Soluzioni:

  1. Aumenta pollingRate per ridurre la frequenza
  2. Riduci il numero di variabili lette
  3. Usa lettura basata su sottoscrizione se supportata
  4. Controlla latenza di rete

Non fare polling più veloce del necessario:

  • Dati critici: 100-500ms
  • Monitoraggio normale: 1000ms
  • Valori a lento cambiamento: 5000ms+

Usa sempre autenticazione e crittografia in produzione:

{
"auth": {
"mode": "Basic",
"username": "user",
"password": "pass"
},
"security": {
"mode": "SignAndEncrypt",
"policy": "Basic256Sha256"
}
}

Mantieni variabili correlate nello stesso connettore per migliore organizzazione:

{
"variables": [
// Sensori temperatura
{"key": "temp1", "nodeId": "ns=1;s=Temp1"},
{"key": "temp2", "nodeId": "ns=1;s=Temp2"},
// Sensori pressione
{"key": "press1", "nodeId": "ns=1;s=Press1"},
{"key": "press2", "nodeId": "ns=1;s=Press2"}
]
}

Meddle gestisce automaticamente perdita connessione e riconnessione, ma considera:

  • Usare un connettore Merge con timeout per gestire dati mancanti
  • Aggiungere connettori Alert per notificare problemi di connessione

Inizia con autenticazione anonima per verificare connettività, poi aggiungi sicurezza:

  1. Testa senza auth
  2. Aggiungi username/password
  3. Aggiungi crittografia
  4. Aggiungi autenticazione certificato
OpcuaReader → Filter → Reshape → InfluxDb2Writer
Trigger → Alert (email su temp alta)
  1. OpcuaReader: Leggi temperatura e pressione
  2. Filter: Mantieni solo campi rilevanti
  3. Reshape: Aggiungi metadati (posizione, unità)
  4. InfluxDb2Writer: Archivia in database time-series
  5. Trigger: Controlla temperatura alta
  6. Alert: Invia email se soglia superata
  • Modbus - Protocollo industriale alternativo
  • Siemens S7 - Comunicazione diretta PLC Siemens
  • Filter - Filtra dati OPC UA
  • Trigger - Logica condizionale su dati OPC UA