Ignition OPC UA Client Failover Problem

We’re using Ignition SCADA connected via OPC UA to a redundant Schneider M580 PLC. Each rack has its own CPU and BMENUA0100 (NUA) OPC UA Server module, with fixed IPs. The redundancy follows the non-transparent server model in warm failover mode.

The issue is that Ignition’s OPC UA client only switches servers when communication is lost. It does not detect which CPU is Primary.

As a result, Ignition may connect to the OPC Server on the Standby CPU, which doesn’t execute logic. This leads to a situation where commands are sent but not executed, even though no error appears in Ignition.

Is there any way to configure Ignition to always connect to the OPC Server on the active Primary CPU?

I'm sure Kevin will come along eventually, but I do not think Ignition's OPC UA client supports the OPC UA redundancy specification. At least not the non-transparent modes. (I suppose every client supports transparent?)

I'm not sure if there are more creative way to get this to work or not (e.g. - some script that reads the service level and then triggers a change to the connection config).

Yeah, there's no good way to do this.

I think some people have hacked it up by monitoring both ServiceLevel variables themselves and then using system.opc.setServerEnabled to toggle the connection disabled/enabled, which forces it to attempt to reconnect, starting with the master.

Proper support for OPC UA non-transparent redundancy is on our shorter-term feature list but nothing has been decided in terms of timeline.

1 Like

Thank you @Kevin.Herron and @Cody_Morgan for your answers.

I’ve configured two separate connections—one for each CPU.
Since most of my tags are inside UDTs, I created a reference tag within each UDT that points to a tag indicating whether the CPU is running as Primary or Standby.

I added a script on the reference tag that sets a UDT parameter with the name of the desired connection based on the CPU state. Then, I used that parameter in a binding for the OPC source.

I created this topic to confirm whether there was a better or more standard way to handle this.

Thanks again!

1 Like

Another solution is to create 2 opc tags and a reference tag for each data you read in the plc. You monitor the primary and standby cpu and you write a parameter in each udt that drive the reference tag, for example the parameter is the folder in the path of the opc tag.

This solution is quite robust with a quick failover and all the data switch together.
Creatings tag take more times but when you have have some scripts to generate them that is not a problem.

Another post:

1 Like