How to detect PLC failure

Hello All,

I was wondering if anyone has dealt with - Detecting PLC failures in Ignition?
We have Allen Bradley devices connected to Ignition and I am able to get their Conception status in Ignition via - Is Connected Tag Under Diagnostics.

But this is really the connection status and not the PLC failure status.
Any one dealt with this? Any suggestion?

You haven’t mentioned PLC type, but your screen shot suggests Rockwell.

If so you may be able to leverage the [Diagnostics]Device/Status tag.

Hi Jordan,

Yes, it is Rockwell PLC (L-72). I have taken off the PLC from Rack to simulate a ‘Non availability/Fault’. But the status of diagnostics -

  1. [Diagnostics]Device/Is_Connected tag - still remains 1.
  2. [Diagnostics]Device/Status tag- always reads as 12640 even when the PLC is not online.

See screen shot -

Not sure how to get the Correct Status when it is faulted.

Yeah, I see that. It would figure that Rockwell wouldn’t make it easy. :smirk:

You would need to use a fault handling routine in the PLC. Shane Welcher has a video covering how to do this. He has a few stumbles as he goes through it, but in my opinion, it’s okay, because it shows some common issues that can happen while setting one up.

A fault routine won’t really help here. I suspect the issue is the reliance of the driver on the first-hop ethernet encapsulation connection to yield the “IsConnected” status, which will improperly remain true when the backplane connection from the EN?T to the processor breaks. The “Status” won’t update when the connection is down, which I would call a bug.
I understand that recent versions of the driver have enhanced the detection of connection problems, but I haven’t experimented with that or even noted what versions it applies to… @Kevin.Herron ?

The most reliable way to assess both processor and connection health is to subscribe to tags that are constantly changing due to ladder logic. If changes stop coming in, the connection is broken or the PLC isn’t in Run mode anymore. (I like reading an LINT containing the utc wallclock microsecond time obtained in ladder by a GSV.)

I did implement a new keep-alive and state machine for managing connection state but it’s just a ListIdentity to the first hop.

Hi All,

Thanks for the reply.
I am using a bit of code in PLC to go 1,0 every sec when the PLC is healthy.

.

Then I am using an expression tag with the following expression -

if(hasChanged({[.]PLC_Heartbeat}),1,0)

This tag is set as an alarm to flag up when the heartbeat is not healthy and I have set it to a ‘clock’ scan class.

I have tested it and this seems to be working fine with following errors -

  1. Any minor/major PLC faults.
  2. PLC network/comms error.
  3. Connecting/Disconnecting Device status in Ignition.

I guess its a round about way of getting it working. But seems to be giving me the result that I want. :slight_smile:

Thank you all for help and direction.