Volledige OPC-UA-gids voor de industrie: architectuur, beveiliging, implementatie
OPC-UA (OPC Unified Architecture) is uitgegroeid tot het standaardprotocol voor interoperabiliteit in Industrie 4.0. Toch vormt de schijnbare complexiteit ervan nog steeds een belemmering voor veel implementaties. Deze praktische gids ontrafelt OPC-UA: architectuur, beveiliging, NodeId, implementatie in Python/Node.js en cloudintegratie.
- Wat is OPC-UA en waarom is het belangrijk?
- OPC-UA-architectuur: de basisbegrippen
- OPC-UA-beveiliging: de complete gids
- OPC-UA implementeren in Python
- OPC-UA implementeren in Node.js
- OPC-UA op de belangrijkste industriële besturingssystemen
- OPC-UA PubSub: de uitbreiding voor de cloud
- Migratie van OPC-DA naar OPC-UA
- OPC-UA met de Eziwan-gateway
- Veelgestelde vragen — OPC-UA
- Meer informatie
- Aanvullende bronnen
Wat is OPC-UA en waarom is het belangrijk?
OPC-UA (IEC 62541) is een platformonafhankelijk communicatieprotocol, ontworpen voor de veilige uitwisseling van industriële gegevens. In tegenstelling tot zijn voorganger OPC-DA (alleen Windows, DCOM) werkt OPC-UA op elk besturingssysteem (Linux, Windows, embedded RTOS) en op elk netwerk (Ethernet, 4G, Wi-Fi).
Waarom OPC-UA de Industrie 4.0 domineert
- Interoperabiliteit: een Siemens S7-1500 OPC-UA-server kan zonder propriëtaire driver door elke conforme client worden gelezen
- Informatiemodel: gegevens hebben betekenis (eenheid, beschrijving, geschiedenis), niet alleen een waarde
- Ingebouwde beveiliging: versleuteling, authenticatie, certificaten — geïntegreerd in het protocol
- Conformiteitsprofielen: een lichtgewicht subset voor kleine embedded apparaten
- Pubsub & MQTT: OPC-UA Pub/Sub-uitbreiding voor cloudarchitecturen (IEC 62541-14)
OPC-UA-architectuur: de basisbegrippen
Client-server
Het OPC-UA-basismodel is client-server:
- OPC-UA-server: wordt door het apparaat (PLC, HMI, gegevensserver) beschikbaar gesteld
- OPC-UA-client: gebruikt de gegevens (SCADA, gateway, cloudtoepassing)
Eén en hetzelfde apparaat kan tegelijkertijd als server en als client fungeren (bijv. een gateway die meerdere PLC’s samenvoegt en de geconsolideerde gegevens beschikbaar stelt).
Adresruimte en NodeId
De Address Space is de informatieboom die door een OPC-UA-server wordt weergegeven. Elk knooppunt heeft een unieke NodeId:
NodeId-formaat:
ns=2;i=1234— naamruimte 2, gehele getal-ID 1234ns=2;s=Station_1.Pression— naamruimte 2, tekenreeks-IDns=0;i=2258— naamruimte 0 (standaard), ServerStatus
Naamruimten:
ns=0: standaard OPC-UA-naamruimte (typen, methoden)ns=1: vaak de naamruimte van de fabrikantns=2+: toepassingsnaamruimten (uw gegevens)
Communicatiemethoden
| Modus | Beschrijving | Toepassingsvoorbeeld |
|---|---|---|
| Read | Eenmalig lezen van een knooppunt | Polling om de N seconden |
| Subscription | Abonnement op wijzigingen (MonitoredItem) | Gebeurtenissen, alarmen |
| Browse | Verkenning van de Address Space | Configuratie, discovery |
| Write | Een waarde schrijven | Setpoints, commando's |
| Method Call | Methodeaanroep | Complexe acties |
| Pubsub | MQTT- of UDP-publicatie/abonnement | Grootschalige cloudarchitecturen |
Abonnementen zijn de juiste aanpak voor realtime monitoring: in plaats van elke seconde te pollen, abonneert de client zich op een knooppunt en ontvangt hij alleen een melding wanneer de waarde buiten een configureerbare drempelwaarde (DeadbandValue) valt.
OPC-UA-beveiliging: de complete gids
Beveiliging is een van de sterke punten van OPC-UA — en tegelijkertijd een van de bronnen van complexiteit. Hieronder volgen de belangrijkste begrippen.
Beveiligingsmodi
| Modus | Vertrouwelijkheid | Integriteit | Authenticatie | Gebruik |
|---|---|---|---|---|
None | Geen | Geen | Geen | Tests, geïsoleerd netwerk |
Sign | Nee | Handtekening | Certificaat | Beveiligd netwerk |
SignAndEncrypt | AES-256 | Handtekening | Certificaat | Internet, cloud |
Gebruik SecurityMode: None nooit in een productieomgeving op een netwerk dat van buitenaf toegankelijk is.
X.509-certificaten
OPC-UA maakt gebruik van X.509-certificaten voor wederzijdse authenticatie tussen client en server:
Een zelfondertekend certificaat aanmaken voor testdoeleinden:
# Avec OpenSSL
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout client_key.pem -out client_cert.pem \
-subj "/CN=EziwanGateway/O=Eziwan/C=FR" \
-extensions v3_req \
-config <(cat /etc/ssl/openssl.cnf; echo "[v3_req]"; echo "subjectAltName=URI:urn:eziwan:gateway:client")
In productie: gebruik een interne PKI of een erkende certificeringsinstantie. De certificaten moeten de eerste keer handmatig tussen client en server worden uitgewisseld.
Gebruikersauthenticatie
Naast machinecertificaten ondersteunt OPC-UA ook gebruikersauthenticatie:
- Anonymous: geen authenticatie (indien toegestaan door de server)
- Gebruikersnaam/wachtwoord: aanmelding via de applicatie
- Certificaat: X.509-gebruikerscertificaat
- IssuedToken: JWT- of Kerberos-token
OPC-UA implementeren in Python
De bibliotheek python-opcua (of de afsplitsing daarvan, asyncua) is dé standaard in Python.
Installatie
pip install asyncua
OPC-UA-client in Python — gegevens lezen
import asyncio
from asyncua import Client
async def main():
url = "opc.tcp://192.168.1.10:4840/freeopcua/server/"
async with Client(url=url) as client:
# Een knooppunt ophalen op basis van NodeId
node = client.get_node("ns=2;s=Station_1.Pression")
value = await node.read_value()
print(f"Pression: {value} bar")
# Meerdere knooppunten in batches lezen
nodes = [
client.get_node("ns=2;s=Station_1.Pression"),
client.get_node("ns=2;s=Station_1.Debit"),
client.get_node("ns=2;s=Station_1.Defaut"),
]
values = await client.read_values(nodes)
for node, val in zip(nodes, values):
print(f" {node}: {val}")
asyncio.run(main())
OPC-UA-client voor Python — abonnement (Subscription)
import asyncio
from asyncua import Client
from asyncua.common.subscription import SubHandler
class DataChangeHandler(SubHandler):
def datachange_notification(self, node, val, data):
print(f"[CHANGE] {node} = {val}")
def event_notification(self, event):
print(f"[EVENT] {event}")
async def main():
url = "opc.tcp://192.168.1.10:4840"
async with Client(url=url) as client:
handler = DataChangeHandler()
subscription = await client.create_subscription(500, handler) # 500ms
nodes = [
client.get_node("ns=2;s=Station_1.Pression"),
client.get_node("ns=2;s=Station_1.Debit"),
]
monitored_items = await subscription.subscribe_data_change(nodes)
print("Subscriptions actives, attente changements...")
await asyncio.sleep(30) # 30 seconden beluisteren
await subscription.unsubscribe(monitored_items)
asyncio.run(main())
Beveiligde verbinding met certificaat
from asyncua.crypto.security_policies import SecurityPolicyBasic256Sha256
from asyncua.crypto.cert_man import CertificateManager
async def connect_secure():
client = Client("opc.tcp://192.168.1.10:4840")
await client.set_security(
SecurityPolicyBasic256Sha256,
certificate="./client_cert.der",
private_key="./client_key.pem",
server_certificate="./server_cert.der"
)
await client.connect()
# ... uw activiteiten
await client.disconnect()
OPC-UA implementeren in Node.js
De bibliotheek node-opcua is dé standaard voor JavaScript/TypeScript.
npm install node-opcua
Gegevens uitlezen
const opcua = require("node-opcua");
const client = opcua.OPCUAClient.create({
endpointMustExist: false,
connectionStrategy: { maxRetry: 5, initialDelay: 2000 }
});
const endpointUrl = "opc.tcp://192.168.1.10:4840";
async function main() {
await client.connect(endpointUrl);
const session = await client.createSession();
const nodeToRead = {
nodeId: "ns=2;s=Station_1.Pression",
attributeId: opcua.AttributeIds.Value
};
const dataValue = await session.read(nodeToRead);
console.log(`Pression: ${dataValue.value.value} bar`);
console.log(`Timestamp: ${dataValue.serverTimestamp}`);
await session.close();
await client.disconnect();
}
main().catch(console.error);
OPC-UA op de belangrijkste industriële besturingssystemen
Siemens S7-1500 / S7-1200
De S7-1500 ondersteunt native OPC-UA-server vanaf firmwareversie 2.0:
- Poort: 4840 (TCP)
- Configuratie in TIA Portal:
Device Configuration → OPC UA → Server - Activeer de gewenste knooppunten in de Access-configuratie
- Authenticatie: certificaten of gebruikersnaam/wachtwoord
De S7-1200 ondersteunt OPC-UA vanaf firmwareversie 4.1.
Schneider Electric M580 / M340
M580: OPC-UA via module BMENOC0311 (firmware ≥ V2.0) M340: geen native ondersteuning voor OPC-UA → Modbus TCP aanbevolen, of een OPC-UA-naar-Modbus-gateway (bijv. Kepware KEPServerEX)
Allen-Bradley / Rockwell (EtherNet/IP)
Rockwell-PLC’s ondersteunen geen native OPC-UA. Opties:
- KEPServerEX (Kepware): EtherNet/IP → OPC-UA-bridge
- FactoryTalk Linx Gateway: OPC-UA-server voor het Rockwell-ecosysteem
- Eziwan Gateway: directe verbinding via EtherNet/IP/Modbus, REST-API-toegang
Beckhoff TwinCAT 3
TwinCAT 3 beschikt over een ingebouwde OPC-UA-server via TF6100 (OPC-UA-module). Configuratie via TwinCAT System Manager.
Wago / Phoenix Contact / Pilz
De meeste moderne PLC’s van deze fabrikanten ondersteunen OPC-UA. Controleer de firmware en schakel de server in de netwerkconfiguratie in.
OPC-UA PubSub: de uitbreiding voor de cloud
OPC-UA PubSub (IEC 62541-14) is de uitbreiding die OPC-UA compatibel maakt met IoT-cloudarchitecturen:
- Publisher: het apparaat publiceert zijn gegevens via een Message Oriented Middleware
- Subscriber: de cloud of het SCADA-systeem abonneert zich op de gegevensstroom
Ondersteunde protocollen:
- AMQP (poort 5672)
- MQTT (poort 1883 of 8883) — het meest gebruikte protocol in het IoT
- UDP Multicast (lokaal netwerk)
Coderingen:
- JSON (leesbaar, eenvoudig te debuggen)
- UADP (binair, compact, ingebed)
Voorbeeld van een OPC-UA PubSub JSON-bericht:
{
"MessageId": "abc123",
"PublisherId": "urn:station1:plc",
"DataSetWriterId": 1,
"MetaDataVersion": {"MajorVersion": 1, "MinorVersion": 0},
"Timestamp": "2026-08-14T10:30:00.000Z",
"Payload": {
"Station_1.Pression": {"Value": 4.2, "StatusCode": 0, "SourceTimestamp": "2026-08-14T10:29:59.950Z"},
"Station_1.Debit": {"Value": 125.3, "StatusCode": 0, "SourceTimestamp": "2026-08-14T10:29:59.950Z"}
}
}
Migratie van OPC-DA naar OPC-UA
Als u installaties hebt die gebruikmaken van OPC-DA (OPC Classic, Windows DCOM), biedt de migratie naar OPC-UA de volgende voordelen:
- Geen afhankelijkheid meer van Windows/DCOM
- Compatibiliteit met Linux / Raspberry Pi / Linux-PLC’s
- Versleuteling (ontbreekt in OPC-DA)
- Directe internettoegang (onmogelijk met DCOM zonder een ingewikkelde VPN)
Migratietool: OPC UA Wrapper (bijv. Kepware) maakt een OPC-UA-server aan die de gegevens van een bestaande OPC-DA-server beschikbaar stelt, waardoor een stapsgewijze migratie mogelijk wordt.
OPC-UA met de Eziwan-gateway
De Eziwan Gateway beschikt over een ingebouwde OPC-UA-client waarmee verbinding kan worden gemaakt met de OPC-UA-servers van uw apparatuur:
- Verbinding met Siemens S7-1500 via OPC-UA (poort 4840)
- Verbinding met elke OPC-UA-server die voldoet aan IEC 62541
- Ondersteuning van de beveiligingsmodi
None,Sign,SignAndEncrypt - Configuratie van NodeIds in de cloudinterface (automatisch doorzoeken van de adresruimte)
- Gegevensoverdracht naar het Eziwan-cloudplatform via MQTT/TLS
Belangrijkste voordeel: u hoeft zelf geen OPC-UA-client te schrijven. De gateway doet het werk en stelt een REST-API beschikbaar voor uw SCADA- of ERP-systeem.
Veelgestelde vragen — OPC-UA
Is OPC-UA complexer dan Modbus? Ja, maar dat is gerechtvaardigd voor installaties met apparatuur van verschillende fabrikanten en voor Industrie 4.0-projecten. Voor een installatie met 2-3 PLC’s van dezelfde fabrikant kan Modbus TCP volstaan. OPC-UA is onmisbaar wanneer u te maken hebt met heterogene apparatuur, veiligheidseisen of de noodzaak van ERP/MES-interoperabiliteit.
Moet poort 4840 op mijn firewall worden geopend? Bij een "zero-inbound-port"-architectuur (zoals Eziwan) initieert de gateway de verbinding met de OPC-UA-server intern. Er is geen poort open naar buiten toe. De versleutelde VPN-tunnel transporteert de gegevens naar de cloud.
Kan OPC-UA MQTT vervangen in een IoT-architectuur? OPC-UA PubSub met MQTT-transport combineert het beste van beide: het semantische informatiemodel van OPC-UA met de lichtheid en schaalbaarheid van MQTT. Dit is de richting die wordt aangegeven door de Industrie 4.0-referentiekaders (Industrie 4.0 Architecture Reference Model, IDS-R).
Welke prestaties kun je verwachten van een ingebouwde OPC-UA-server? Een Siemens S7-1500 CPU 1515 kan ~10.000 OPC-UA-knooppunten per seconde lezen. Voor minder krachtige PLC's (M221, kleine WAGO's) moet de OPC-UA-polling worden beperkt tot 100-500 knooppunten/s. Abonnementen (Subscription) zijn bij grote volumes veel efficiënter dan polling.
Zijn er gratis OPC-UA-servers om te testen?
Ja: ProsysOPC UA Simulation Server (gratis, Windows), Node-RED met node-red-contrib-opcua (gratis, platformonafhankelijk), python-opcua in servermodus (voorbeeld in de GitHub-documentatie). Hiermee kunt u een client testen zonder dat u een fysieke PLC nodig hebt.
Meer informatie
- Blog: OPC-UA en MQTT — hoe combineer je beide op een industriële gateway
- Blog: beveiligde toegang op afstand tot PLC’s en SCADA — VPN, zero-trust en NIS2
- Blog: een Siemens S7-PLC verbinden met de cloud — technische handleiding
- Blog: IEC 62443 — praktische gids voor industriële cyberbeveiliging
- Blog: Modbus TCP versus RTU — uitgebreide vergelijking voor het industriële IoT
Hulp nodig bij het aansluiten van uw OPC-UA-servers op de cloud? Vraag een gratis demo aan — ons team begeleidt u van de POC tot de implementatie.
Aanvullende bronnen
- OPC UA naar MQTT — OPC UA-gegevens publiceren naar een MQTT-cloudbroker
- Industriële protocollen — vergelijking tussen OPC UA, Modbus, MQTT en andere protocollen
- Industriële IoT-gateway — een OPC UA-compatibele gateway kiezen
- Modbus TCP naar de cloud — bewaking van Modbus TCP-PLC's vanuit de cloud
- Cloud-SCADA — moderne SCADA-architectuur met OPC UA- en cloudconnectiviteit