Token mechanism: there is one bit in the configuration IBox workspace, and one bit in each individual Client IBox workspace. The "test if I have the token" is basically a check on the client IBox's workspace. The "test if token is available" is a check on the configuration IBox's workspace.
Your interpretation is not correct. On first scan, or on the scan after the client ECRX/ECWX IBox finishes, it sees if it has power flow - that means it WANTS the token. It Goes to the state that says "I want the token". That is latched. It does not latch the "I want the token" after it has the token. It latches the "I want the token" immediatley after it "wants the token".
If it doesn't need to be EXACTLY at a 1.000 second interval, my PD C100 on the SP3 contact is good enough because the ECRX/ECWX to the other PLC will INTERNALLY LATCH that it NEEDS THE TOKEN.
Here's the macro-ized mnemonics of the ECRX instruction. This may help or not help, but I really don't want to get into disecting it too much...
// ECRX (ECOM Read Network)
// P1 - ECOM#
// P2 - Workspace Register
// P3 - Slave ID
// P4 - "From" Slave Element
// P5 - Number of Bytes
// P6 - "To" Master Destination Element
// P7 - Success Bit
// P8 - Error Bit
// Workspace Bits reflect the STATE - at most 1 bit should be ON in the Workspace register (values 0, 1, 2, 4)
// P2 == K0 (no bits) - Home
// P2.*0 - WaitForRXWXToken
// P2.*1 - WaitForRXWXNotBusy
// P2.*2 - WaitForDone
// TEMPs
// B7710.0 - power flow upon entering IBox
// B7710.1 - when in WaitForDone state and Slot NOT Busy nor Slot Error at Top of Scan (success)
// B7710.2 - when in WaitForDone state and Slot Error at Top of Scan (error)
// B7710.3 - power flow when RX is executed but the SlotBusy SP bit does NOT come on (wrong slot)
// Save off Enable state into TEMP BIT
OUT B7710.0
// On First Scan, reset state machine to HOME state (Workspace = K0)
// Cannot reset success/error bits on first scan due to E471 Duplicate Coil error
// Do not allow anything else to occur on first scan
STR SP0
LD K0
OUT %P2
// If at Home state, and have power flow, clear the error and success bits, and go to WaitForRXWXToken state
STRE %P2 K0
AND B7710.0
RST %P7
RST %P8
SET %P2.*0
// If at WaitForRXWXToken state and not on first scan, and RX/WX Token is available,
// get the RX/WX Token and go to WaitForRXWXNotBusy
STR %P2.*0
ANDN SP0
ANDN %ECOM.RXWXTokenInUse
SET %ECOM.RXWXTokenInUse
SET %P2.*1
RST %P2.*0
// This completion logic must be BEFORE the RX rung, otherwise it appears to be
// done IMMEDIATELY! Duh!
//
// Top of Scan Status:
// --------------+----------------+-----------------------------------------------
// ECOM.SlotBusy | ECOM.SlotError | Result
// --------------+----------------+-----------------------------------------------
// 0-not busy | 0-no error | DONE, SUCCESS
// --------------+----------------+-----------------------------------------------
// 0-not busy | 1-error | Done, Error
// --------------+----------------+-----------------------------------------------
// 1-busy | 0-no error | not done, keep waiting
// --------------+----------------+-----------------------------------------------
// 1-busy | 1-error | not done, but error - REPORT AS DONE, W/ERROR
// --------------+----------------+-----------------------------------------------
//
// When we are in the WaitForDone state, if the slot is flagged as busy from the top of scan,
// and there are no slot errors at the top of scan, stay in this state (no logic for this).
// Otherwise, we are moving to the Home state as success or failure:
// Success:
// STATE == WaitForDone AND ECOM.SlotBusy is FALSE AND ECOM.SlotError is FALSE; B7710.1 will be on
// iff when this is true, set the Success bit
// Failure:
// STATE == Wait AND AND ECOM.SlotError is TRUE; B7710.2 will be on iff when this is true,
// set the Error bit (actually, this must be done as common logic towards end of logic)
// Common logic for transitioning to Home state is at end
STR %P2.*2
ANDN %ECOM.SlotBusy
ANDN %ECOM.SlotError
OUT B7710.1
SET %P7
STR %P2.*2
AND %ECOM.SlotError
OUT B7710.2
// Do the RX when the port is not busy.
// If the STATE == WaitForRXWXNotBusy and the Slot SP is NOT busy, then do the RX.
// Set the STATE variable to WaitForDone.
STR %P2.*1
ANDN %SPSlotBusy
LD %ECOM.Slot_MSByte
ORD %P3 // slave ID
LD %P5 // number of bytes
LDA %P6.o // master destination address in V memory
RX %P4 // slave source address
SET %P2.*2
RST %P2.*1
ANDN %SPSlotBusy // if the SlotBusy SP is OFF, then we are RXing to an EMPTY slot!
OUT B7710.3
// Common ERROR logic - when RX completed in error or when tried to RX to an empty slot
STR B7710.2
OR B7710.3
SET %P8
// Common DONE logic - set state to Home (K0), give up RX/WX Token
// Do this when RX completed successfully, when RX completed in error, or when tried to
// RX to an empty slot
STR B7710.1
OR B7710.2
OR B7710.3
LD K0
OUT %P2
RST %ECOM.RXWXTokenInUse
// restore original power flow
STR B7710.0
OUT B7710.0 // this eliminates the E464 errors by having a complete rung