File name: CiA301_HBTime200_V202.esat Full name: CiA301 Heartbeat Timing Test Version: V02.02 of 04-MAR-2015 Test ID: 0x0000 (0d) DUTnodeID: default Functions: Smart_ID Resources: 3 variables, 0 buffers, 1000us timer resolution Timeout: 35.000s Descript.: Setting HB to 200ms and verify timing accuracy to 10 percent State 0001h: (START) Start of test, start sequence ALWAYS ON TRANSMIT {0000h,2,80h,00h,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (IDLE) "Set DUT pre-op, clr var3" VAR ACTION: VAR[3] = 0 GOTO State 0002h Set Heartbeat 200ms State 0002h: Set Heartbeat 200ms ALWAYS ON TRANSMIT {0600h,8,2Bh,17h,10h,00h,C8h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (IDLE) "SDO Write HB time 200, start timer 1" VAR ACTION: ALLOC TIMER VAR[1] = 0 GOTO State 0003h Heartbeat set State 0003h: Heartbeat set ALWAYS ON RECEIVE {0580h, 8,60h,17h,10h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh,FFh} (Smart CAN ID based on DUT) LOG: (PASS) "SDO Write Response, clear timer 1" VAR ACTION: FREE VAR[1] GOTO State 0004h Start HB timer ALWAYS ON RECEIVE {0580h, 8,80h,17h,10h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,FFh,FFh,FFh,FFh,FFh,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (FAIL) "SDO Abort" VAR ACTION: FREE ALL GOTO State FFFFFFFEh (FAIL) IF (VAR[1] >= 100000) THEN LOG: (FAIL) "SDO Timeout" VAR ACTION: FREE ALL GOTO State FFFFFFFEh (FAIL) State 0004h: Start HB timer ALWAYS LOG: (IDLE) "Alloc and clr var2" VAR ACTION: ALLOC VAR[2] = 0 GOTO State 0101h State 0101h: ALWAYS ON RECEIVE {0700h, 1,7Fh,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) "Receive first HB, start timer 1" VAR ACTION: ALLOC TIMER VAR[1] = 0 GOTO State 0102h Look for early heartbeat State 0102h: Look for early heartbeat ALWAYS ON RECEIVE {0700h, 1,7Fh,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: (FAIL) "HB too early (180ms)" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0107h Continuous HB monitoring IF (VAR[1] >= 180000) THEN LOG: (IDLE) "Timer 1 reaches 180ms" VAR ACTION: NONE GOTO State 0103h Time window 10 percent opens IF (VAR[2] >= 50) THEN LOG: (PASS) "50 cycles, var 2" VAR ACTION: VAR[2] = 0 GOTO State 01FEh State 0107h: Continuous HB monitoring ALWAYS LOG: (PASS) "Start new HB timer 1 interval" VAR ACTION: VAR[1] = 0 GOTO State 0102h Look for early heartbeat State 0103h: Time window 10 percent opens ALWAYS ON RECEIVE {0700h, 1,7Fh,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: (WARN) "Early HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0107h Continuous HB monitoring IF (VAR[1] >= 190000) THEN LOG: (IDLE) "Timer 1 reaches 190ms" VAR ACTION: NONE GOTO State 0104h Time window 5 percent opens State 0104h: Time window 5 percent opens ALWAYS ON RECEIVE {0700h, 1,7Fh,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) "Correct HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0107h Continuous HB monitoring IF (VAR[1] >= 210000) THEN LOG: (IDLE) "Timer 1 reaches 210ms" VAR ACTION: NONE GOTO State 0105h Time window 5 percent closes State 0105h: Time window 5 percent closes ALWAYS ON RECEIVE {0700h, 1,7Fh,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: (WARN) "Late HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0107h Continuous HB monitoring IF (VAR[1] >= 220000) THEN LOG: (IDLE) "Timer reaches 220ms" VAR ACTION: NONE GOTO State 0106h Time window 10 percent closes State 0106h: Time window 10 percent closes ALWAYS ON RECEIVE {0700h, 1,7Fh,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: (FAIL) "Too late HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0107h Continuous HB monitoring State 01FEh: ALWAYS ON TRANSMIT {0000h,2,01h,00h,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (IDLE) "NMT: DUT operational, clr var2" VAR ACTION: VAR[2] = 1 GOTO State 0201h State 0201h: ALWAYS ON RECEIVE {0700h, 1,05h,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) "Receive first HB, start timer 1" VAR ACTION: ALLOC TIMER VAR[1] = 0 GOTO State 0202h Look for early heartbeat State 0202h: Look for early heartbeat ALWAYS ON RECEIVE {0700h, 1,05h,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: (FAIL) "HB too early (180ms)" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0205h Continuous HB monitoring IF (VAR[1] >= 180000) THEN LOG: (IDLE) "Timer 1 reaches 180ms" VAR ACTION: NONE GOTO State 0203h Time window 10 percent opens IF (VAR[2] >= 50) THEN LOG: (PASS) "50 cycles, var 2" VAR ACTION: VAR[2] = 0 GOTO State 02FEh State 0205h: Continuous HB monitoring ALWAYS LOG: (PASS) "Start new HB timer 1 interval" VAR ACTION: VAR[1] = 0 GOTO State 0202h Look for early heartbeat State 0203h: Time window 10 percent opens ALWAYS ON RECEIVE {0700h, 1,05h,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: (WARN) "Early HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0205h Continuous HB monitoring IF (VAR[1] >= 190000) THEN LOG: (IDLE) "Timer 1 reaches 190ms" VAR ACTION: NONE GOTO State 0204h Time window 5 percent opens State 0204h: Time window 5 percent opens ALWAYS ON RECEIVE {0700h, 1,05h,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) "Correct HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0205h Continuous HB monitoring IF (VAR[1] >= 210000) THEN LOG: (IDLE) "Timer 1 reaches 210ms" VAR ACTION: NONE GOTO State 0206h Time window 5 percent closes State 0206h: Time window 5 percent closes ALWAYS ON RECEIVE {0700h, 1,05h,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: (WARN) "Late HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0205h Continuous HB monitoring IF (VAR[1] >= 220000) THEN LOG: (IDLE) "Timer reaches 220ms" VAR ACTION: NONE GOTO State 0207h Time window 10 percent closes State 0207h: Time window 10 percent closes ALWAYS ON RECEIVE {0700h, 1,05h,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: (FAIL) "Too late HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0205h Continuous HB monitoring IF (VAR[1] >= 750000) THEN LOG: (FAIL) "Timer reaches 750ms" VAR ACTION: FREE ALL GOTO State FFFFFFFEh (FAIL) State 02FEh: ALWAYS ON TRANSMIT {0000h,2,02h,00h,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (IDLE) "NMT: DUT to stopped, clr var2" VAR ACTION: VAR[2] = 0 GOTO State 0301h State 0301h: ALWAYS ON RECEIVE {0700h, 1,04h,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) "Receive first HB, start timer 1" VAR ACTION: ALLOC TIMER VAR[1] = 0 GOTO State 0302h Look for early heartbeat State 0302h: Look for early heartbeat ALWAYS ON RECEIVE {0700h, 1,04h,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: (FAIL) "HB too early (180ms)" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0305h Continuous HB monitoring IF (VAR[1] >= 180000) THEN LOG: (IDLE) "Timer 1 reaches 180ms" VAR ACTION: NONE GOTO State 0303h Time window 10 percent opens IF (VAR[2] >= 50) THEN LOG: (PASS) "50 cycles, var 2" VAR ACTION: VAR[2] = 0 GOTO State 03FEh State 0305h: Continuous HB monitoring ALWAYS LOG: (PASS) "Start new HB timer 1 interval" VAR ACTION: VAR[1] = 0 GOTO State 0302h Look for early heartbeat State 0303h: Time window 10 percent opens ALWAYS ON RECEIVE {0700h, 1,04h,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: (WARN) "Early HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0305h Continuous HB monitoring IF (VAR[1] >= 190000) THEN LOG: (IDLE) "Timer 1 reaches 190ms" VAR ACTION: NONE GOTO State 0304h Time window 5 percent opens State 0304h: Time window 5 percent opens ALWAYS ON RECEIVE {0700h, 1,04h,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) "Correct HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0305h Continuous HB monitoring IF (VAR[1] >= 210000) THEN LOG: (IDLE) "Timer 1 reaches 210ms" VAR ACTION: NONE GOTO State 0306h Time window 5 percent closes State 0306h: Time window 5 percent closes ALWAYS ON RECEIVE {0700h, 1,04h,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: (WARN) "Late HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0305h Continuous HB monitoring IF (VAR[1] >= 220000) THEN LOG: (IDLE) "Timer reaches 220ms" VAR ACTION: NONE GOTO State 0307h Time window 10 percent closes State 0307h: Time window 10 percent closes ALWAYS ON RECEIVE {0700h, 1,04h,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: (FAIL) "Too late HB" VAR ACTION: VAR[2] = VAR[2] + 1 GOTO State 0305h Continuous HB monitoring IF (VAR[1] >= 750000) THEN LOG: (FAIL) "Timer reaches 750ms" VAR ACTION: FREE ALL GOTO State FFFFFFFEh (FAIL) State 03FEh: ALWAYS ON TRANSMIT {0000h,2,80h,00h,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (IDLE) "Set DUT to pre-op, free all" VAR ACTION: FREE ALL GOTO State FFFFFFFDh (PASS) State FFFFFFEFh: (ANY) Receives handled in EVERY state IF (VAR[3] == 0) THEN ON RECEIVE {0080h, 8,00h,00h,00h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,Fh,00h,FFh,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (PASS) "EMCY Reset, set var3 true" VAR ACTION: VAR[3] = 1 IF (VAR[3] >= 1) THEN ON RECEIVE {0080h, 8,00h,00h,00h,00h,00h,00h,00h,00h} AND MATCH {0FFFh,Fh,00h,00h,00h,00h,00h,00h,00h,00h} (Smart CAN ID based on DUT) LOG: (FAIL) "Fail on any EMCY when var 3 is set" VAR ACTION: FREE ALL GOTO State FFFFFFFEh (FAIL)