FUNCTION "TIMEDIFF" : TIME TITLE = Compute TIME0 minus TIME1 VAR_INPUT TIME0 : TIME; TIME1 : TIME; END_VAR BEGIN L #TIME0 L #TIME1 -D UD DW#16#7FFFFFFF T #RET_VAL END_FUNCTION FUNCTION "UPDATE_TIME" : VOID BEGIN CALL "TIME_TCK" ( RET_VAL := "TIME", ) END_FUNCTION ORGANIZATION_BLOCK OB 1 BEGIN M001: CALL "UPDATE_TIME" // Check 0.1s trigger time U "CLOCK_0.1s" FN "CLOCK_0.1s_EDGE" SPBN M010 CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "STAMP_0.1s", RET_VAL := "DIFF", ) L "DIFF" __ASSERT>= __ACCU 1, T#50ms __ASSERT<= __ACCU 1, T#150ms L "TIME" T "STAMP_0.1s" L "COUNT_0.1s" + 1 T "COUNT_0.1s" // Check 0.2s trigger time M010: U "CLOCK_0.2s" FN "CLOCK_0.2s_EDGE" SPBN M020 CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "STAMP_0.2s", RET_VAL := "DIFF", ) L "DIFF" __ASSERT>= __ACCU 1, T#150ms __ASSERT<= __ACCU 1, T#250ms L "TIME" T "STAMP_0.2s" L "COUNT_0.2s" + 1 T "COUNT_0.2s" // Check 0.4s trigger time M020: U "CLOCK_0.4s" FN "CLOCK_0.4s_EDGE" SPBN M030 CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "STAMP_0.4s", RET_VAL := "DIFF", ) L "DIFF" __ASSERT>= __ACCU 1, T#350ms __ASSERT<= __ACCU 1, T#450ms L "TIME" T "STAMP_0.4s" L "COUNT_0.4s" + 1 T "COUNT_0.4s" // Check 0.5s trigger time M030: U "CLOCK_0.5s" FN "CLOCK_0.5s_EDGE" SPBN M040 CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "STAMP_0.5s", RET_VAL := "DIFF", ) L "DIFF" __ASSERT>= __ACCU 1, T#450ms __ASSERT<= __ACCU 1, T#550ms L "TIME" T "STAMP_0.5s" L "COUNT_0.5s" + 1 T "COUNT_0.5s" // Check 0.8s trigger time M040: U "CLOCK_0.8s" FN "CLOCK_0.8s_EDGE" SPBN M050 CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "STAMP_0.8s", RET_VAL := "DIFF", ) L "DIFF" __ASSERT>= __ACCU 1, T#750ms __ASSERT<= __ACCU 1, T#850ms L "TIME" T "STAMP_0.8s" L "COUNT_0.8s" + 1 T "COUNT_0.8s" // Check 1.0s trigger time M050: U "CLOCK_1.0s" FN "CLOCK_1.0s_EDGE" SPBN M060 CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "STAMP_1.0s", RET_VAL := "DIFF", ) L "DIFF" __ASSERT>= __ACCU 1, T#950ms __ASSERT<= __ACCU 1, T#1s50ms L "TIME" T "STAMP_1.0s" L "COUNT_1.0s" + 1 T "COUNT_1.0s" // Check 1.6s trigger time M060: U "CLOCK_1.6s" FN "CLOCK_1.6s_EDGE" SPBN M070 CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "STAMP_1.6s", RET_VAL := "DIFF", ) L "DIFF" __ASSERT>= __ACCU 1, T#1s550ms __ASSERT<= __ACCU 1, T#1s650ms L "TIME" T "STAMP_1.6s" L "COUNT_1.6s" + 1 T "COUNT_1.6s" // Check 2.0s trigger time M070: U "CLOCK_2.0s" FN "CLOCK_2.0s_EDGE" SPBN M080 CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "STAMP_2.0s", RET_VAL := "DIFF", ) L "DIFF" __ASSERT>= __ACCU 1, T#1s950ms __ASSERT<= __ACCU 1, T#2s50ms L "TIME" T "STAMP_2.0s" L "COUNT_2.0s" + 1 T "COUNT_2.0s" // Stop test, if test time complete M080: CALL "TIMEDIFF" ( TIME0 := "TIME", TIME1 := "START_TIME", RET_VAL := "DIFF", ) L "DIFF" L T#4s50ms