123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- 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"
- // Warmup time (pypy needs this)
- CALL "TIMEDIFF" (
- TIME0 := "TIME",
- TIME1 := "BOOT_TIME",
- RET_VAL := "DIFF",
- )
- L "DIFF"
- L T#2s
- >=D
- S "RUNNING"
- U "RUNNING"
- FP "RUNNING_EDGE"
- SPBN M005
- CALL "__CLKRST"
- CALL "UPDATE_TIME"
- L "TIME"
- T "START_TIME"
- T "STAMP_0.1s"
- T "STAMP_0.2s"
- T "STAMP_0.4s"
- T "STAMP_0.5s"
- T "STAMP_0.8s"
- T "STAMP_1.0s"
- T "STAMP_1.6s"
- T "STAMP_2.0s"
- L 0
- T "COUNT_0.1s"
- T "COUNT_0.2s"
- T "COUNT_0.4s"
- T "COUNT_0.5s"
- T "COUNT_0.8s"
- T "COUNT_1.0s"
- T "COUNT_1.6s"
- T "COUNT_2.0s"
- CLR
- = "CLOCK_0.1s_EDGE"
- = "CLOCK_0.2s_EDGE"
- = "CLOCK_0.4s_EDGE"
- = "CLOCK_0.5s_EDGE"
- = "CLOCK_0.8s_EDGE"
- = "CLOCK_1.0s_EDGE"
- = "CLOCK_1.6s_EDGE"
- = "CLOCK_2.0s_EDGE"
- // Check 0.1s trigger time
- M005: U "CLOCK_0.1s"
- FN "CLOCK_0.1s_EDGE"
- SPBN M010
- CALL "TIMEDIFF" (
- TIME0 := "TIME",
- TIME1 := "STAMP_0.1s",
- RET_VAL := "DIFF",
- )
- L "DIFF"
- UN "RUNNING"
- SPB M006
- __ASSERT>= __ACCU 1, T#10ms
- __ASSERT<= __ACCU 1, T#250ms
- M006: 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"
- UN "RUNNING"
- SPB M011
- __ASSERT>= __ACCU 1, T#100ms
- __ASSERT<= __ACCU 1, T#350ms
- M011: 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"
- UN "RUNNING"
- SPB M021
- __ASSERT>= __ACCU 1, T#300ms
- __ASSERT<= __ACCU 1, T#550ms
- M021: 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"
- UN "RUNNING"
- SPB M031
- __ASSERT>= __ACCU 1, T#400ms
- __ASSERT<= __ACCU 1, T#650ms
- M031: 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"
- UN "RUNNING"
- SPB M041
- __ASSERT>= __ACCU 1, T#700ms
- __ASSERT<= __ACCU 1, T#950ms
- M041: 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"
- UN "RUNNING"
- SPB M051
- __ASSERT>= __ACCU 1, T#900ms
- __ASSERT<= __ACCU 1, T#1s150ms
- M051: 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"
- UN "RUNNING"
- SPB M061
- __ASSERT>= __ACCU 1, T#1s500ms
- __ASSERT<= __ACCU 1, T#1s750ms
- M061: 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"
- UN "RUNNING"
- SPB M071
- __ASSERT>= __ACCU 1, T#1s900ms
- __ASSERT<= __ACCU 1, T#2s150ms
- M071: 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",
- )
- UN "RUNNING"
- BEB
- L "DIFF"
- L T#4s50ms
- <D
- BEB // Not completed, yet
- // Completed. Check trigger counts.
- L "COUNT_0.1s"
- __ASSERT>= __ACCU 1, 39
- __ASSERT<= __ACCU 1, 41
- L "COUNT_0.2s"
- __ASSERT== __ACCU 1, 20
- L "COUNT_0.4s"
- __ASSERT== __ACCU 1, 10
- L "COUNT_0.5s"
- __ASSERT== __ACCU 1, 8
- L "COUNT_0.8s"
- __ASSERT== __ACCU 1, 5
- L "COUNT_1.0s"
- __ASSERT== __ACCU 1, 4
- L "COUNT_1.6s"
- __ASSERT== __ACCU 1, 2
- L "COUNT_2.0s"
- __ASSERT== __ACCU 1, 2
- // Everything is ok. Abort the test.
- CALL "STP" // Stop CPU
- END_ORGANIZATION_BLOCK
- ORGANIZATION_BLOCK OB 100
- BEGIN
- CALL "UPDATE_TIME"
- L "TIME"
- T "BOOT_TIME"
- CLR
- = "RUNNING"
- = "RUNNING_EDGE"
- END_ORGANIZATION_BLOCK
|