File name: CiA447_HBtime_V202.esat Full name: CiA447 Heartbeat Timing Version: V02.02 of 03-APR-2014 Test ID: 0xF002 (61442d) DUTnodeID: loop from 2 to 16 Functions: LSS_Master Smart_ID CiA_447_ID Resources: 3 variables, 0 buffers, 1000us timer resolution Timeout: 15.000s Descript.: Check if heartbeat between 190-210 State 0001h: (START) Start of test, start sequence ALWAYS ON TRANSMIT {0690h,8,82h,FEh,00h,00h,00h,00h,00h,00h} WITH DELAY TIME_MS[10.000] (Smart CAN ID based on DUT) LOG: (IDLE) "Transmit wake up 1" VAR ACTION: NONE GOTO State 0012h Transmit wakeup 2 State 0012h: Transmit wakeup 2 ALWAYS ON TRANSMIT {0690h,8,82h,FEh,00h,00h,00h,00h,00h,00h} WITH DELAY TIME_MS[300.000] (Smart CAN ID based on DUT) LOG: (IDLE) "Transmit wake up 2" VAR ACTION: NONE GOTO State 0002h Reset all nodes State 0002h: Reset all nodes ALWAYS ON TRANSMIT {0000h,2,81h,00h,00h,00h,00h,00h,00h,00h} WITH DELAY TIME_MS[10.000] LOG: (IDLE) "NMT Master: Reset all nodes" VAR ACTION: NONE GOTO State 0003h Start LSS Master fast scan State 0003h: Start LSS Master fast scan ALWAYS LOG: (IDLE) "LSS Master fast scan, assign node ID" VAR ACTION: ALLOC FCT_LSSM VAR[3] = 0 GOTO State 0011h LSS master fast scan State 0011h: LSS master fast scan ALWAYS ON RECEIVE {0700h, 1,00h,00h,00h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,Fh,FFh,00h,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (PASS) "Node bootup" VAR ACTION: FREE VAR[3] GOTO State 0004h Start HB timer ALWAYS ON RECEIVE {07E4h, 0,00h,00h,00h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,Fh,FFh,00h,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (PASS) "LSS fast scan response" VAR ACTION: NONE State 0004h: Start HB timer ALWAYS LOG: (IDLE) "Start new HB timer interval" VAR ACTION: ALLOC TIMER VAR[1] = 0 GOTO State 0005h Wait for reset State 0005h: Wait for reset ALWAYS ON RECEIVE {0080h, 8,00h,00h,00h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,Fh,FFh,00h,FFh,00h,00h,00h,00h,00h} LOG: (PASS) "Node EMCY reset" VAR ACTION: ALLOC VAR[2] = 0 GOTO State 0006h Look for early heartbeat State 0006h: Look for early heartbeat IF (VAR[1] >= 180000) THEN LOG: (PASS) "No early heartbeat" VAR ACTION: FREE VAR[1] GOTO State 0007h Time window for heartbeat IF (VAR[2] == 10) THEN LOG: (PASS) "10 cycles" VAR ACTION: VAR[2] = 0 GOTO State 0008h Starting test cycle State 0007h: Time window for heartbeat ALWAYS LOG: (PASS) "Time window for heartbeat receive opens" VAR ACTION: ALLOC TIMER VAR[1] = 0 GOTO State 0009h Monitor heartbeats State 0009h: Monitor heartbeats ALWAYS ON RECEIVE {0700h, 1,7Fh,00h,00h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,Fh,FFh,FFh,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (PASS) "Next heartbeat received" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 000Ah Continuous HB monitoring IF (VAR[1] >= 40000) THEN LOG: (FAIL) "Heartbeat not received in time window" VAR ACTION: FREE VAR[1] GOTO State FFFFFFFEh (FAIL) State 000Ah: Continuous HB monitoring ALWAYS LOG: (PASS) "Start new HB timer interval" VAR ACTION: VAR[1] = 0 GOTO State 0006h Look for early heartbeat State 0008h: Starting test cycle ALWAYS ON TRANSMIT {0000h,2,01h,00h,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (IDLE) "NMT Master: Set node to operational" VAR ACTION: NONE GOTO State 000Bh New HB timer interval State 000Bh: New HB timer interval ALWAYS LOG: (PASS) "Start new HB timer interval" VAR ACTION: ALLOC TIMER VAR[1] = 0 GOTO State 000Ch Look for early heartbeat State 000Ch: Look for early heartbeat IF (VAR[1] >= 190000) THEN LOG: (PASS) "No early heartbeat" VAR ACTION: FREE VAR[1] GOTO State 000Dh Time window for heartbeat IF (VAR[2] == 10) THEN LOG: (PASS) "10 cycles" VAR ACTION: FREE VAR[2] GOTO State 000Eh Transmit sleep command State 000Dh: Time window for heartbeat ALWAYS LOG: (PASS) "Time window for heartbeat receive opens" VAR ACTION: VAR[1] = 0 GOTO State 0010h Monitor heartbeats State 0010h: Monitor heartbeats ALWAYS ON RECEIVE {0700h, 1,05h,00h,00h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,Fh,FFh,FFh,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (PASS) "Next heartbeat received" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 000Bh New HB timer interval IF (VAR[1] >= 20000) THEN LOG: (FAIL) "Heartbeat not received in time window" VAR ACTION: FREE VAR[1] GOTO State FFFFFFFEh (FAIL) State 000Eh: Transmit sleep command ALWAYS ON TRANSMIT {0691h,8,02h,00h,00h,00h,00h,00h,00h,00h} WITH DELAY TIME_MS[100.000] LOG: (IDLE) "Transmit sleep command" VAR ACTION: ALLOC TIMER VAR[1] = 0 GOTO State 000Fh Wait 1s State 000Fh: Wait 1s IF (VAR[1] >= 1000000) THEN LOG: (PASS) "Wait 1s" VAR ACTION: FREE VAR[1] GOTO State FFFFFFFDh (PASS) State FFFFFFEFh: (ANY) Receives handled in EVERY state OK: No rules for state 'ANY'