Test case R1022
Full test suiteDevice test case
TP (pulse)
This test case it part of the test suite proposed for new devices.
Test case ID: R1022
Language: ST
tests2/t1022.st(* TP pulse test - this should be called several 13 times with deltaTime=100msecs *) (* +---------+ tp1 | | --+ +------------ 0 600 +-----+ tp2 | | ------------+ +------ 0 600 1000 *) PROGRAM T1022 VAR cont : INT; // count iters tp1: TP; // 580msecs pulse, start at t=100 tp2: TP; // 380msecs pulse, starts when tp1 ends dt1,dt2 : DATE_AND_TIME; // timestamps tp1done,tp2done : BOOL; // true if both pulses have been up at least once iter : INT := -1; // iterations are counted started from 0 END_VAR VAR_TEMP tp1_in,tp1_q,tp2_in,tp2_q : BOOL; t1,t2 : TIME; msecs : DINT := 0 ; // msecs since tp1 started END_VAR VAR_EXTERNAL _T_PARAMS : TEST_PARAMS; END_VAR iter := iter+1; IF iter = 1 THEN // at iter 1 we produce a rising edge at TP1 input tp1_in := 1; dt1:= _GEB_NOW_TIMESTAMP(1); // record start of pulse END_IF; tp1( IN := tp1_in , PT := T#580ms); tp2_in := iter > 2 AND NOT(tp1.Q); // tp2_in will have a rising edge when tp1 ends tp2( IN := tp2_in , PT := T#380ms); IF tp1.Q THEN tp1done := TRUE; END_IF; IF tp2.Q THEN tp2done := TRUE; END_IF; IF iter > 1 THEN msecs := TIME_TO_DINT(_GEB_ELAPSED_TIME(dt1)); END_IF; IF msecs > 10 AND msecs < 570 THEN // inside pulse 1 _GEB_ASSERT_( tp1.Q); _GEB_ASSERT_(NOT( tp2.Q)); END_IF; IF msecs > 630 AND msecs < 970 THEN // inside pulse 2 _GEB_ASSERT_( tp2.Q); _GEB_ASSERT_(NOT( tp1.Q)); END_IF; IF _T_PARAMS.cycle = _T_PARAMS.timestorun THEN // last iter _GEB_ASSERT_( tp1done AND tp2done); _GEB_ASSERT_( NOT tp1.Q); _GEB_ASSERT_( NOT tp2.Q); _GEB_ASSERT_( iter=12); // _GEB_MSG_('last iter'); END_IF; END_PROGRAM