Skip to main content

OPC Data Transfer via transfer object

Systems

Host

Operating System: Windows 11
RAM: 32 GB
Processor: Intel i7-8700

Virtual Machines

OPC Router

Operating System: Windows Server 2022
RAM: Dynamic, up to 16 GB
Virtual Processors: 8
OPC Router: 5.3.5008.157 (inraySDK version: 3.32.6002.24)

Test Server

Operating System: Windows Server 2025
RAM: 8 GB
Virtual processors: 6
OPC Server: IoT Edge OPC UA PLC in Docker

Test Setup

In the flows, 10 data points were read using either a Batch Read transfer object or a Data Access transfer object. The data is sent to MQTT and also written to an InfluxDB database.

Separate tests were conducted using Data Change triggers, Time triggers, and Cron triggers. Performance was determined by comparing the expected number of executions with the actual number of executions.

OPC-UA Client Plug-in Settings

For the test, several settings were adjusted in the plug-in.

SettingValue
Register OPC tags on startupEnabled
OPC Read ModeAsynchronous
note

In this test, we deliberately pushed the OPC Router and the OPC server used to and beyond their performance limits. Data rates of more than 19,500 tags per second were achieved.

The Ø Executions/Min column counts the executions per flow; the Data Points (Total) column, on the other hand, lists the total across all flows (10 data points per flow). The transferred data rate is calculated as follows: data points (total) × executions/min ÷ 60.

Results When Using the Cron Trigger

With the Batch Read TO

FlowsData Points (total)Trigger IntervalAvg. Runs/MinExpected
1,00010,0001 second6060

Using the OPC Data Access TO

FlowsData Points (total)Trigger IntervalAvg. Runs/MinExpected
1,00010,0001 second6060

Results when using the Datachange trigger

note

With a data change rate of 250 ms, the sample rate in the plug-in was reduced to 250 ms.

With Batch Read Transfer Object

FlowsData Points (total)Data ChangesAvg. Executions/MinExpected
100010000500 ms118.9120
5005000500 ms120120
5005,000250 ms192.2240
2502,500250 ms198240
1001000250 ms199.4240

Using the OPC Data Access Transfer Object

FlowsData Points (total)Data ChangesAvg. Executions/MinExpected
100010000500 ms118.1120
5005000500 ms120120

Results when using the Time Trigger

note

Please note that the time trigger cycle is the amount of time that elapses between executions.

Using the Batch Read Transfer Object

FlowsData Points (total)CycleExecutions/Min
100010000500 ms114
5005,000500 ms114
5005,000250 ms215

Using the OPC Data Access Transfer Object

FlowsData Points (total)CycleExecutions/Min
100010000500 ms114
5005000500 ms114
5005000250 ms214
2502500250 ms214

Conclusion

The number of data points. The highest measured data rate is achieved by the Datachange runs with 1,000 flows: 10,000 data points at 118.9 executions per minute equate to approximately 19,800 tags per second—the data rate mentioned at the beginning of more than 19,500 tags per second. The cron trigger with a 1-second interval achieves 10,000 tags per second and is fully processed (60 out of 60 executions).

The limit does not lie in the amount of data. At a change rate of 500 ms, the expected 120 executions per minute are achieved (118.9 vs. 120). At 250 ms, however, the number remains at around 200 instead of 240 executions—regardless of whether 500, 250, or 100 flows are running (192.2 / 198 / 199.4). Since the data volume decreases by a factor of 5 but the backlog remains, it is not the throughput that limits performance, but the 250-ms update cycle itself.

With the time trigger, the gap can be explained mathematically. The cycle is the wait time between executions, to which the execution time is added: From 114 executions per minute at a 500-ms cycle, a round length of approximately 526 ms results; from 214 at 250 ms, a round length of approximately 280 ms—in both cases, therefore, approximately 30 ms of execution time per round.

Batch Read or OPC Data Access. Where both transfer objects were measured, they are neck and neck (118.9 to 118.1 and 120 to 120 for the DataChange trigger, 114 to 114 and 215 to 214 for the Time trigger). These measurements do not provide any basis for choosing between them.

note

For the OPC Data Access transfer object, the measurement points with a 250-ms change rate are missing; therefore, the comparison of the two transfer objects for the Data Change trigger ends at 500 ms.

Project Files

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

Download Benchmark_TimeTrigger_DataAccess_1000.rpe

Compose file for the OPC server