OPC-UA-integratie
Inleiding
OPC-UA (Unified Architecture) is het standaardprotocol voor industriële communicatie voor beveiligde gegevensuitwisseling tussen PLC's, SCADA-systemen en cloudsystemen. Met Eziwan kunt u vanaf elke locatie toegang krijgen tot OPC-UA-servers in uw OT-netwerk via de beveiligde OpenVPN-tunnel.
Vereisten
Aan de automatiseringszijde (OPC-UA-server)
| PLC | OPC-UA-server | Minimale firmwareversie | Systeemvereisten |
|---|---|---|---|
| Siemens S7-1500 | Native geïntegreerd | FW 2.0 (2017) | Activering in TIA Portal |
| Siemens S7-1200 | Niet beschikbaar | — | Gebruik in plaats daarvan Modbus TCP |
| B&R Automation | Native (ArOpc) | AR 4.34 | Activering in Automation Studio |
| Beckhoff TwinCAT | TF6100 (TwinCAT OPC UA-server) | TwinCAT 3.1.4020 | TF6100-licentie vereist |
| Phoenix Contact PLCnext | Geïntegreerd | FW 2020.0 | Activering via Web Based Management |
| Schneider EcoStruxure | Native (M262/M580) | — | Activering in SoMachine |
Eziwan-kant
- Eziwan-gateway met firmware ≥ 2.3
- De gateway moet zich op hetzelfde Ethernet-netwerk bevinden als de OPC-UA-controller, of hiermee verbinding kunnen maken (zelfde VLAN, geen firewall die poort 4840 blokkeert)
- Standaard OPC-UA-poort: TCP 4840
Architectuur: toegang via een VPN-tunnel
De OPC-UA-toegang op afstand via Eziwan verloopt als volgt:
De Eziwan-gateway fungeert als OPC-UA-proxy: hij ontvangt verbindingen van externe clients via de OpenVPN-tunnel en stuurt deze door naar de OPC-UA-server op het lokale OT-netwerk. De externe client heeft geen directe toegang tot het OT-netwerk.
Configuratie van TIA Portal: de OPC-UA-server van de S7-1500 inschakelen
Stap 1: De eigenschappen van de CPU openen
- Dubbelklik in TIA Portal op de S7-1500-CPU in de hardwareweergave
- Ga naar het tabblad OPC UA
Stap 2: De server inschakelen
OPC UA
└── Server
[✓] Activate OPC UA server
Port: 4840
Max. sessions: 10
Session timeout: 10 000 ms
Security:
[✓] Geen beveiliging (Basic256Sha256 wordt ook aanbevolen in de productieomgeving)
[✓] Basic256Sha256 - SignAndEncrypt
Access control:
[ ] Anonieme toegang toestaan (in de productieomgeving uitschakelen)
[✓] Enable user access control
Stap 3: Een serverinterface maken
De serverinterface definieert de variabelen die via OPC-UA beschikbaar worden gesteld:
OPC UA
└── Server interfaces
└── [New interface] → Nom: "Monitoring_Production"
└── Slepen en neerzetten vanuit het project:
DB10.Temperature → wordt weergegeven als "Temperature"
DB10.Pressure → wordt weergegeven als "Pressure"
DB10.ProductCount → wordt weergegeven als "ProductCount"
DB10.Running → wordt weergegeven als "Running"
Stap 4: Een OPC-UA-gebruiker aanmaken
OPC UA
└── Users
└── [Add user]
Username: eziwan_client
Password: MotDePasseStrong2026!
Rol: Waarnemer (alleen lezen) of Operator (lezen/schrijven)
Stap 5: De hardwareconfiguratie compileren en downloaden
Belangrijk: alleen de hardwareconfiguratie moet opnieuw worden gecompileerd en gedownload. Het gebruikersprogramma (OB, FC, FB) wordt niet gewijzigd.
Menu: Build → Build all (of Ctrl+B)
Controleer of er geen fouten zijn bij het compileren van de hardware alleen
Menu : Online → Download to device → Hardware configuration
Verbinding maken vanaf een OPC-UA-client op afstand
Optie 1: Prosys OPC UA Browser (gratis grafische interface)
- Download Prosys OPC UA Browser van prosysopc.com
- Start het programma
- Voer de URL in:
opc.tcp://[IP_TUNNEL_EZIWAN]:4840 - Klik op "Connect"
- Kies de beveiligingsmodus (None voor tests, SignAndEncrypt voor productie)
- Blader door de knooppuntboomstructuur om uw variabelen te vinden
Optie 2: Python met asyncua
import asyncio
from asyncua import Client
from asyncua import ua
# Configuration de connexion
OPC_UA_URL = "opc.tcp://[IP_TUNNEL_EZIWAN]:4840"
USERNAME = "eziwan_client"
PASSWORD = "MotDePasseStrong2026!"
async def lire_donnees_production():
"""Verbinding en uitlezing van productiedata via Eziwan."""
async with Client(url=OPC_UA_URL) as client:
# Authenticatie op basis van gebruikersnaam
client.set_user(USERNAME)
client.set_password(PASSWORD)
print(f"Connecté à {OPC_UA_URL}")
# Methode 1: Directe toegang via NodeId (indien bekend)
node_temp = client.get_node("ns=3;s=Monitoring_Production.Temperature")
temp = await node_temp.read_value()
print(f"Température : {temp} °C")
# Methode 2: Navigeren door de boomstructuur
root = client.get_root_node()
objects = await root.get_child(["0:Objects"])
# De onderliggende knooppunten weergeven
children = await objects.get_children()
for child in children:
name = await child.read_browse_name()
print(f"Nœud trouvé : {name.Name}")
# Methode 3: Abonnement op koerswijzigingen
handler = ChangementValeurHandler()
sub = await client.create_subscription(period=1000, handler=handler)
nodes_a_surveiller = [
client.get_node("ns=3;s=Monitoring_Production.Temperature"),
client.get_node("ns=3;s=Monitoring_Production.Pressure"),
client.get_node("ns=3;s=Monitoring_Production.Running"),
]
await sub.subscribe_data_change(nodes_a_surveiller)
print("Abonnement actif. Ctrl+C pour arrêter.")
try:
while True:
await asyncio.sleep(1)
except KeyboardInterrupt:
pass
finally:
await sub.delete()
class ChangementValeurHandler:
"""Gestionnaire des notifications OPC-UA."""
def datachange_notification(self, node, val, data):
print(f"[{data.monitored_item.Value.SourceTimestamp}] {node}: {val}")
asyncio.run(lire_donnees_production())
Optie 3: Node-RED met node-opcua
[
{
"id": "opc-ua-input",
"type": "OpcUa-Client",
"endpoint": "opc.tcp://[IP_TUNNEL_EZIWAN]:4840",
"action": "subscribe",
"deadbandtype": "a",
"deadbandvalue": "1",
"time": "1",
"timeUnit": "s",
"certificate": "n",
"item": [
{"name": "Temperature", "nodeId": "ns=3;s=Monitoring_Production.Temperature"},
{"name": "Pressure", "nodeId": "ns=3;s=Monitoring_Production.Pressure"}
]
}
]
OPC-UA-beveiliging: modi en certificaten
Beschikbare beveiligingsmodi
| Modus | Authenticatie | Versleuteling | Aanbeveling |
|---|---|---|---|
| Geen | Geen | Geen | Alleen voor testdoeleinden, nooit in productie |
| Sign | X.509-certificaat | Nee | Gemiddeld |
| SignAndEncrypt | X.509-certificaat | AES-256 | Verplicht in productie |
Ondersteunde beveiligingsbeleidsregels
- Basic128Rsa15: RSA 1024 bits (verouderd, niet gebruiken)
- Basic256: RSA 2048 bits + SHA-1 (aanvaardbaar)
- Basic256Sha256: RSA 2048 bits + SHA-256 (aanbevolen)
- Aes128_Sha256_RsaOaep: AES-128 + SHA-256 (modern)
- Aes256_Sha256_RsaPss: AES-256 + SHA-256 (het veiligst)
Certificaatbeheer via Eziwan
Eziwan genereert automatisch X.509-certificaten voor de OPC-UA-verbinding:
- Eziwan-portaal → Integraties → OPC-UA → Certificaten
- Klik op "Certificaat genereren"
- Exporteer het certificaat in het formaat
.der - Importeer het in de lijst met vertrouwde clients van de OPC-UA-server (TIA Portal → OPC UA → Trusted Clients)
Problemen oplossen
Probleem 1: Time-out bij het verbinden
Symptoom: ServiceResultException: BadTimeout of verbinding mislukt.
Oorzaken en oplossingen:
| Oorzaak | Controle | Oplossing |
|---|---|---|
| Poort 4840 geblokkeerd | telnet [IP_OT] 4840 vanaf de gateway | Open de poort op de lokale OT-firewall |
| OPC-UA-server niet geactiveerd | Controleer in TIA Portal → OPC UA → Server | Activeer en download de configuratie opnieuw |
| Verkeerd IP-adres van de gateway | Ping vanaf de gateway naar de PLC | Controleer de netwerkconfiguratie van de gateway |
| Time-out te kort | Verhoog de client-time-out | client.session_timeout = 30000 (asyncua) |
Probleem 2: Afgewezen certificaten
Symptoom: BadCertificateUntrusted of BadSecurityChecksFailed
Oplossingen:
- S7-1500-serverzijde: TIA Portal → OPC UA → Trusted Clients → Het Eziwan-certificaat toevoegen
- Tijdelijke modus: TIA Portal → OPC UA → Server → "Accept all certificates automatically" (na configuratie uitschakelen)
- Certificaten opnieuw genereren: als het certificaat is verlopen, genereer het dan opnieuw in het Eziwan-portaal
Probleem 3: Knooppunten niet gevonden (BadNodeIdUnknown)
Symptoom: BadNodeIdUnknown bij het lezen van een knooppunt.
Oorzaken:
- De naamruimte (ns=X) is onjuist
- De serverinterface is niet aangemaakt in TIA Portal
- De naam van het knooppunt is verkeerd gespeld
Oplossing: gebruik de Prosys OPC UA Browser om door de daadwerkelijke boomstructuur te navigeren en de exacte NodeIds te kopiëren.
Probleem 4: Regelmatige verbroken verbindingen
Symptoom: de klant wordt regelmatig losgekoppeld, foutmelding BadConnectionClosed.
Oplossingen:
- Verhoog de
keepaliveIntervalaan de clientzijde - Controleer de stabiliteit van de netwerkverbinding (OpenVPN keepalive geconfigureerd)
- Controleer of de
max_sessionsvan de S7-1500-server niet is bereikt (TIA Portal → OPC UA → Server → Max. sessies)
Diagnosecommando's via de gateway
Via de Eziwan-console (SSH of webinterface → Terminal):
# De verbinding met de OPC-UA-server testen
nc -zv 192.168.20.10 4840
# De status van de OpenVPN-tunnel controleren
systemctl status openvpn-client@eziwan --no-pager
# OPC-UA-verbindingslogboeken (gefilterd op fouten)
journalctl -u eziwan-opcua-client -n 50 --no-pager | grep -i error
Veelgestelde vragen
OPC-UA of Modbus: wat is de beste keuze voor het doorsturen van gegevens?
OPC-UA biedt typecontrole, eenheden, knooppunthierarchie en beveiliging via certificaten; Modbus blijft eenvoudiger voor een snelle retrofit. Bij een S7-1500 of een recent SCADA-systeem verdient OPC-UA de voorkeur; bij een oud, heterogeen systeem is Modbus de betere keuze.
Wat is een OPC-UA-knooppunt?
De informatie-eenheid van de server: een variabele (meting, instelwaarde), een object of een methode, geïdentificeerd door een NodeId in een naamruimte. De Eziwan-client doorloopt de boomstructuur en abonneert zich op de gekozen knooppunten.
Hoe beheer je OPC-UA-certificaten?
De client en de server wisselen X.509-certificaten uit: het certificaat van de Eziwan-client moet aan de serverzijde (TIA Portal, UaExpert) worden goedgekeurd en er moet een versleutelingsbeleid worden gekozen (aanbevolen: Basic256Sha256).
Welke apparatuur maakt een OPC-UA-server beschikbaar?
De nieuwste PLC’s (Siemens S7-1500/S7-1200, Schneider M580, Beckhoff), SCADA-systemen (WinCC, Ignition, AVEVA) en talrijke hoogwaardige sensoren en regelaars. Voor de overige apparatuur verzamelt de gateway gegevens via Modbus.
Gerelateerde bronnen
- OPC UA naar de industriële cloud — de oplossingspagina
- OPC UA en MQTT — uitgebreide gegevensverzameling combineren met lichtgewicht gegevensoverdracht
- Volledige OPC-UA-gids — het achtergrondartikel
- Compatibiliteit met Siemens S7 — de OPC-UA-server activeren in TIA Portal
- Industriële protocollen — de hub voor OT-protocollen