OPC-Datentransfer via Transferobjekt
Systeme
Host
Betriebssystem: Windows 11
RAM: 32 GB
Prozessor: Intel i7-8700
Virtuelle Maschinen
OPC Router
Betriebssystem: Windows Server 2022
RAM: Dynamisch, bis zu 16GB
Virtuelle Prozessoren: 8
OPC Router: 5.3.5008.157 (inraySDK-Version: 3.32.6002.24)
Testserver
Betriebssystem: Windows Server 2025
RAM: 8 GB
Virtuelle Prozessoren: 6
OPC Server: IoT Edge OPC UA PLC in Docker
Testaufbau
In den Flows wurde mit einem Batch Read Transferobjekt oder einem Data Access Transferobjekt je 10 Datenpunkte gelesen. Die Daten werden an MQTT gesendet und zusätzlich in eine Influx Datenbank geschrieben.
Es wurde mit Datachange Triggern, Time Triggern und Cron Triggern getrennt getestet. Die Performance wurde ermittelt, indem die erwartete Anzahl der Ausführungen mit der tatsächlichen Anzahl der Ausführungen verglichen wurde.
OPC-UA Client Plug-in Einstellungen
Für den Test wurden im Plug-in einige Einstellungen angepasst.
| Einstellung | Wert |
|---|---|
| OPC Tags beim Start registrieren | Aktiv |
| OPC Read Mode | Asynchron |
In diesem Test haben wir den OPC Router und den verwendeten OPC-Server bewusst an und über ihre Leistungsgrenzen geführt. Dabei wurden Datenraten von mehr als 19.500 Tags pro Sekunde erreicht.
Die Spalte Ø Ausführungen / Min zählt die Ausführungen je Flow; die Spalte Datenpunkte (ges) nennt dagegen die Summe über alle Flows (je Flow 10 Datenpunkte). Die übertragene Datenrate ergibt sich daraus als Datenpunkte (ges) × Ausführungen / Min ÷ 60.
Ergebnisse bei Verwendung des Cron Triggers
Mit dem Batch Read TO

| Flows | Datenpunkte (ges) | Trigger Intervall | Ø Ausführungen / Min | Erwartet |
|---|---|---|---|---|
| 1000 | 10000 | 1 Sekunde | 60 | 60 |
Mit dem OPC Data Access TO

| Flows | Datenpunkte (ges) | Trigger Intervall | Ø Ausführungen / Min | Erwartet |
|---|---|---|---|---|
| 1000 | 10000 | 1 Sekunde | 60 | 60 |
Ergebnisse bei Verwendung des Datachange Triggers
Bei einer Datenänderungsrate von 250 ms wurde die Sample Rate im Plug-in auf 250 ms herabgesetzt.
Mit Batch Read Transferobjekt

| Flows | Datenpunkte (ges) | Datenänderungen | Ø Ausführungen / Min | Erwartet |
|---|---|---|---|---|
| 1000 | 10000 | 500 ms | 118,9 | 120 |
| 500 | 5000 | 500 ms | 120 | 120 |
| 500 | 5000 | 250 ms | 192,2 | 240 |
| 250 | 2500 | 250 ms | 198 | 240 |
| 100 | 1000 | 250 ms | 199,4 | 240 |
Mit OPC Data Access Transferobjekt

| Flows | Datenpunkte (ges) | Datenänderungen | Ø Ausführungen / Min | Erwartet |
|---|---|---|---|---|
| 1000 | 10000 | 500 ms | 118,1 | 120 |
| 500 | 5000 | 500 ms | 120 | 120 |
Ergebnisse bei Verwendung des Time Triggers
Bitte beachten Sie, dass der Time-Trigger Zyklus die Zeit ist, die zwischen den Ausführungen gewartet wird.
Mit dem Batch Read Transferobjekt

| Flows | Datenpunkte (ges) | Zyklus | Ausführungen / Min |
|---|---|---|---|
| 1000 | 10000 | 500 ms | 114 |
| 500 | 5000 | 500 ms | 114 |
| 500 | 5000 | 250 ms | 215 |
Mit dem OPC Data Access Transferobjekt

| Flows | Datenpunkte (ges) | Zyklus | Ausführungen / Min |
|---|---|---|---|
| 1000 | 10000 | 500 ms | 114 |
| 500 | 5000 | 500 ms | 114 |
| 500 | 5000 | 250 ms | 214 |
| 250 | 2500 | 250 ms | 214 |
Fazit
Die Kopfzahl. Die höchste gemessene Datenrate erreichen die Datachange-Läufe mit 1000 Flows: 10.000 Datenpunkte bei 118,9 Ausführungen je Minute sind rund 19.800 Tags pro Sekunde – die eingangs genannte Datenrate von mehr als 19.500 Tags pro Sekunde. Der Cron-Trigger mit 1 Sekunde Intervall liegt bei 10.000 Tags pro Sekunde und wird dabei vollständig bedient (60 von 60 Ausführungen).
Die Grenze liegt nicht in der Datenmenge. Bei einer Änderungsrate von 500 ms werden die erwarteten 120 Ausführungen je Minute erreicht (118,9 bzw. 120). Bei 250 ms bleibt es dagegen bei rund 200 statt 240 Ausführungen – und zwar unabhängig davon, ob 500, 250 oder 100 Flows laufen (192,2 / 198 / 199,4). Da die Datenmenge dabei um den Faktor 5 sinkt, der Rückstand aber bleibt, begrenzt nicht der Durchsatz, sondern der 250-ms-Änderungstakt selbst.
Beim Time-Trigger ist die Lücke rechnerisch erklärt. Der Zyklus ist die Wartezeit zwischen den Ausführungen, die Ausführungsdauer kommt hinzu: Aus 114 Ausführungen je Minute bei 500 ms Zyklus folgt eine Rundenlänge von rund 526 ms, aus 214 bei 250 ms eine von rund 280 ms – in beiden Fällen also rund 30 ms Ausführungszeit je Runde.
Batch Read oder OPC Data Access. Wo beide Transferobjekte gemessen wurden, liegen sie gleichauf (118,9 zu 118,1 und 120 zu 120 beim Datachange-Trigger, 114 zu 114 und 215 zu 214 beim Time-Trigger). Für die Wahl zwischen ihnen geben diese Messungen nichts her.
Für das OPC Data Access Transferobjekt fehlen die Messpunkte mit 250 ms Änderungsrate; der Vergleich der beiden Transferobjekte beim Datachange-Trigger endet deshalb bei 500 ms.
Projektdateien
Download Benchmark_CronTrigger_BatchRead_1000.rpe
Download Benchmark_CronTrigger_DataAccess_1000.rpe
Download Benchmark_DatachangeTrigger_BatchRead_1000.rpe
Download Benchmark_DatachangeTrigger_DataAccess_1000.rpe
Download Benchmark_TimeTrigger_BatchRead_1000.rpe