I have a BRX communicating with multiple Modbus TCP Devices, as both a Server and Client. Yesterday, one of the Clients was taken offline (power removed) for repairs, and when the Client came back online (power restored), the PLC would not communicate with the Client. It was still MRX/WRX'ing fine with all the other Clients, and still responding to Modbus TCP requests as a Server.
I could access the Client's web interface. I could read and write to Client via command line Modbus TCP commands.
I created a simple MRX instruction with the Client in $Main, manually edge triggered, read 2 registers. It would set neither the Success nor the Error bit. It would not set a Warning in DmD's System Status.
Hours later, when the process allowed for the PLC to be shut down, I did a Program Mode transition to STOP, and back to RUN. No change.
I went to the PLC, set Mode Switch to STOP, removed control power from the PLC, restored control power, Switch to RUN, Switch to TERM.
The Client's Device came alive instantly. $Main's WRX instruction set it's long delayed Error bit, and upon each new edge trigger, it would set the Success bit.
I re-enabled the original WRX/MRX logic with the Client, and it worked as to be expected.
1. What could cause this?
2. Can it be prevented?
3. Can it be restored without power cycling?
4. Does a Program Mode transition not perform the same effect as a power cycle?
5. Is a REBOOT instruction the same effect as a power cycle?