C
I am using a Rockwell ControlLogix PLC in an industrial control application. In this application two PLC's exchange data contained in TAGs using explicit message instructions. The problem is the data transfers appear to be non-atomic. I have a TAG named TEST. It is a UDT.
INT Sequence number
INT[100] filled with pattern
PLC 1 fills the tag with data and puts a sequence number in the first member. It uses an explicit message instruction to send the data to PLC 2. The sequence number starts at 1 and increases by 1 each time the data is written.
Ladder logic in PLC 2 checks the sequence number in the tag. When it changes. PLC 2 uses a CPS instruction to copy the data to local non-global tag.
The problem is that it appears that when PLC 1 writes the data, the sequence number changes and PLC 2 copies the data before all the bytes have been transferred. In 5000-10000 transfers 10-15 will have partially updated data.
What gives? Isn't the CIP transfer of a tag supposed to be atomic? How can I reliably know all the new data has been transferred before I process it?
ccervp [at] casepick.com
INT Sequence number
INT[100] filled with pattern
PLC 1 fills the tag with data and puts a sequence number in the first member. It uses an explicit message instruction to send the data to PLC 2. The sequence number starts at 1 and increases by 1 each time the data is written.
Ladder logic in PLC 2 checks the sequence number in the tag. When it changes. PLC 2 uses a CPS instruction to copy the data to local non-global tag.
The problem is that it appears that when PLC 1 writes the data, the sequence number changes and PLC 2 copies the data before all the bytes have been transferred. In 5000-10000 transfers 10-15 will have partially updated data.
What gives? Isn't the CIP transfer of a tag supposed to be atomic? How can I reliably know all the new data has been transferred before I process it?
ccervp [at] casepick.com