I figured I would show some of the logging that I did to demonstrate:
A successful read. Address Program:HEAD_2.PARISON_FB[0] is the manually called ReadAny() delivering 50 members each in 2 calls in the midst of the AsyncMode results of the components.
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress ESTOP_OK, numberOfElements 1) SyncLock: AsyncMode, SequenceNumber 114
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress Program:HEAD_2.PARISON_FB[0], numberOfElements 50) while loop: ActiveRequest True, Delays 1
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress Program:HEAD_2.PARISON_FB[0], numberOfElements 50) while loop: ActiveRequest True, Delays 2
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress LAST_CYCLE_TIME, numberOfElements 1) SyncLock: AsyncMode, SequenceNumber 115
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress Program:HEAD_2.PARISON_FB[0], numberOfElements 50) SequenceNumber 116, returning d{19,19,19,19,20,20,20,20,20,20,20,21,21,21,21,21,22,22,22,22,23,23,24,24,24,25,25,25,26,26,26,26,27,27,27,27,27,28,27,27,27,27,27,26,26,26,25,25,25,24}
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress Program:ACCUM_1.CUSHION_KEYIN, numberOfElements 1) SyncLock: AsyncMode, SequenceNumber 118
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress Program:HEAD_2.PARISON_FB[50], numberOfElements 50) SequenceNumber 119, returning d{24,24,24,23,23,23,23,22,22,22,22,22,22,21,21,21,21,21,20,20,20,20,20,20,20,20,20,20,20,20,20,19,20,20,20,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20}
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress Program:ACCUM_1.SHOT_SIZE_KEYIN, numberOfElements 1) SyncLock: AsyncMode, SequenceNumber 120
In a bugged call to ReadyAny() it is returning as if it is also AsyncMode. This time it is for Program:HEAD_3.PARISON_CPT[0]
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress SAFETY_GUARDS_CLOSED, numberOfElements 1) SyncLock: AsyncMode, SequenceNumber 127
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress CUSHION, numberOfElements 1) SyncLock: AsyncMode, SequenceNumber 128
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress Program:HEAD_3.PARISON_CPT[0], numberOfElements 50) SyncLock: AsyncMode, SequenceNumber 129
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress EMPTY, numberOfElements 1) SyncLock: AsyncMode, SequenceNumber 131
10:19:06 AM Wednesday, March 20, 2013 :DRVR: ReadAny(startAddress ESTOP_OK, numberOfElements 1) SyncLock: AsyncMode, SequenceNumber 132
It's the same line of code in the form making both of these calls:
Dim profile_points1(50) As String 'read times out trying to pull all 100 points in one shot
Dim profile_points2(50) As String 'so break it into 2 separate arrays & calls
Dim addr1 As String = "Program:HEAD_" & (currentHead + 1) & ".PARISON_CPT[0]"
Dim addr2 As String = "Program:HEAD_" & (currentHead + 1) & ".PARISON_CPT[50]"
profile_points1 = plc_clx.ReadAny(addr1, 50)
Just now I notice that the unsuccessful call did not go through the delay loop, either.