Hi everyone,
I’m working on a small-scale Smart Factory project using CODESYS-based PLCs (WAGO) and running into an OPC UA NodeID naming issue. Hope someone can point me in the right direction.
Project Architecture:
- 5 subordinate PLCs, each acting as an OPC UA Server
- 1 central PLC (WAGO Compact Controller 100) acting as an OPC UA Client via Data Sources Manager, aggregating data from all 5 PLCs
- Each subordinate PLC also needs data from the other subordinate PLCs for inter-logic processing
- The central PLC then acts as a second OPC UA Server, exposing selected variables to a Node-RED instance running locally on the same central PLC
Current Status:
All 5 PLCs are communicating successfully with the central PLC. The data is flowing correctly.
Problem — NodeID Naming:
On the subordinate PLC (e.g. Station1), I have a GVL named Production containing variables like Magazine1.SlotCount. The OPC UA Server exposes this as:
ns=2;s=Production.Magazine1.SlotCount
However, on the central PLC (OPC UA Client side, using Data Sources Manager), the mapped variable path appears as:
Station1.Symbol_Set.Magazine1.SlotCount
The Production prefix from the subordinate PLC is lost, and Symbol_Set (the Symbol Set name) is injected into the path instead.
What I want to achieve:
Station1.Production.Magazine1.SlotCount
What I’ve tried:
- Renaming the Symbol Set on the server side
- Wrapping variables in nested structs to add hierarchy
- Adjusting GVL naming
None of these approaches produced the desired NodeID structure on the client side.
Questions:
- Is there a way to control the NodeID path that appears on the OPC UA Client side in CODESYS Data Sources Manager?
- Is the
Symbol_Setlayer in the client path hardcoded by CODESYS, or can it be customized? - If this isn’t achievable natively, what is the recommended approach for maintaining a clean, meaningful NodeID hierarchy across multiple PLCs in this kind of architecture?
Any advice or alternative approaches would be greatly appreciated.
Thank you!