We have a older PLC-5 fluid distribution system that communicates with six or so sub-systems using DH+. Each subsystem also uses a PLC-5. The distribution PLC-5 talks with three subsystems across port A and three on port B. Actually, the subsystems do all the DH+ message reading and writing and the distribution system PLC just responds. All is well now, but when the last subsystem was introduced, we experienced immediate DH+ B network failures.
What I found out was every MSG instruction on every subsystem was programmed for continuous broadcast. This meant that once the message was successful (DN bit set) the message would be automatically reloaded into the queue and eventually be sent out again, regardless of rung input conditions. There were 12 messages per PLC being continuously broadcast to the distribution PLC. So when we added that last node, message errors were being encountered. It didn't crash the network, because the next iteration of the message would usually get through. What it did do, however, was cause one of the PLCs to fault because the message was delayed enough to trip a communication timout.
After evaluating all of the messages, I discovered and corrected several things:
- We did not need to continuously transmit (data transferred was not time sensitive).
- 9 write messages to the same node could be reduced to a single three word message with a little bit of data organizing.
- 3 read messages to the same node could be reduced to a single, one word read message.
- An unconditional timer was added to "pace" the read and write messages. I set it to 500msec.
- No changes were made to the functionality of the distribution PLC or subsystem PLCs (only messaging logic was modified).
Keep in mind that every message creates what I call administrative overhead, meaning additional control and status information must be broadcast across the network and this was what was really taxing our distribution PLC (not too many data words, but too many messages). By condensing the same amount of information into fewer (but longer) messages, it greatly reduced overall network traffic. Slowing things down with the timer made it even better and will easily allow me to adjust things should it become necessary in the future.
I also created and incremented an up counter on each MSG DN bit and just watched the accumulator increase over time. Even with a slow update on the laptop, it was very easy to see the consistent rate at which successful messages were being braodcast; pretty much two per second.
One thing I failed to mention was that we couldn't even run an online RSLogix connection at the distribution system PLC A-port via a laptop. It would always crash as it uploaded. Now that all the nodes have been reprogrammed, I can run two programs online from the A-port with no problems.
You don't need to modify the other PLC programs. Program your ControlLogix to push out (MSG write) data out to the other PLCs and retrieve (MSG read) data back from them. Put the MSG instructions on timers and experiment with how frequent you want the data updated. Set the time with the assumption that if one iteration failed, the process will be OK until the next one got through. I put 3-second timeout fault detection and response logic on all nodes as well to handle a PLC being offline.
Also, if you have one of the better RSLinx versions (OEM and Gateway, perhaps some others, definitely not Lite, though) you can invoke Station Diagnostics and see if there are any comm issues on any connected node. It is pretty handy.
CeCo3