I'm not a Rockwell Engineer, and haven't experimented to see what happens too much, but it seems that if you MANUALLY switch off the .EN bit, the original message instruction still tries to execute in the PLC, but has no place to give it's results to. So now you re-cycle the .EN bit, and an entirely new MSG is queued up and sent/waited for.
ControlLogix MSG's are asynchronous to the CPU scan, so every time you initiate one, it must either finish (with success or failure), or time out. If you manually force the CPU to initiate yet another, the CPU has no place to actually store the result of the one it's trying to work on, so it gets discarded (hopefully). Forcing the MSG instruction to abort itself by manually setting the .TO bit actually cleans up the 'Stack' for that MSG instruction, and readies it to work again.
Depending on the protocol, there might be sequence information in the message reply, so if you manually terminate one (killing .EN) and initiate another, there is always the possibility that the remote device is responding to "SEQ-0001", and now you have a MSG instruction waiting for a response to "SEQ-0002", which will ignore the "SEQ-0001" response.
It gets much worse if both ends are looking for ordered packets (like you get with TCP over any physical layer).
rbnice1 said:
manually playing with the .EN bit has been what i was using will redo it with the .TO bit but what im wondering is why this msg statment is not returning a .ER or a .DN and just hanging like this.
The cached communications box is NOT check marked.