_xError, rScaledValue=> ); // assert results AssertTrue(Condition := _xError, Message:= 'No error thrown at warning max > error max'); TEST_FINISHED();]]> _xError, rScaledValue=> ); // assert result AssertTrue(Condition := _xError, Message:= 'No error thrown at warning min < error min'); TEST_FINISHED();]]> _xError, rScaledValue=> _rResult); // assert results AssertTrue(_xError,'Expected error when trying to devide by zero'); AssertEquals_REAL(Expected:= 0.0, Actual:= _rResult, Delta:= 0.0, Message:= 'Division by zero not correcty handled'); TEST_FINISHED();]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); // assert results AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is active'); AssertFalse(Condition:= _xResultWarningLow, Message:= 'Warning low is active'); AssertTrue(Condition:= _xResultWarningHigh, Message:= 'Warning high is not active'); AssertTrue(Condition:= _xResultErrorHigh, Message:= 'Error high is not active'); // Check without active release signal _fbAI( iAnalogValue:= 95, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= FALSE, xReleaseLimitErrors:= FALSE, xError=> _xResultError, rScaledValue=> , xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); // assert results AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is active without active release signal'); AssertFalse(Condition:= _xResultWarningLow, Message:= 'Warning low is active without active release signal'); AssertFalse(Condition:= _xResultWarningHigh, Message:= 'Warning high is active without active release signal'); AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active without active release signal'); TEST_FINISHED();]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); ELSE _fbErrorHighOffTimer(IN := TRUE, PT := timOffTime); _fbAIErrorHighOff( iAnalogValue:= 50, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); END_IF // Wait for the delay time to be finished and check the signal level // Should be high until the delay time has passed IF _fbErrorHighOffTimer.Q THEN _xErrorHighOffTestFinished := TRUE; AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is still active after the delay time'); ELSE AssertTrue(Condition:= _xResultErrorHigh, Message:= 'Error high is not active before the delay time elapsed'); IF NOT _xResultErrorHigh THEN _xErrorHighOffTestFinished := TRUE; END_IF END_IF IF _xErrorHighOffTestFinished THEN TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); // assert results IF NOT _fbErrorHighOnTimer.Q THEN AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active before the time'); _fbErrorLowOnTimer.IN := FALSE; ELSE _xErrorHighOnTestFinished := TRUE; AssertTrue(Condition:= _xResultErrorHigh, Message:= 'Error high is not active after the delay time'); END_IF IF _xErrorHighOnTestFinished THEN TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh ); // assert results AssertTrue(Condition:= _xResultErrorLow, Message:= 'Error low is not active'); AssertTrue(Condition:= _xResultWarningLow, Message:= 'Warning low is not active'); AssertFalse(Condition:= _xResultWarningHigh, Message:= 'Warning high is active'); AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active'); // Error low without release _fbAI( iAnalogValue:= 0, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= FALSE, xReleaseLimitErrors:= FALSE, xError=> _xResultError, rScaledValue=> , xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh ); // assert results AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is active with no active release signal'); AssertFalse(Condition:= _xResultWarningLow, Message:= 'Warning low is active with no active release signal'); AssertFalse(Condition:= _xResultWarningHigh, Message:= 'Warning high is active with no active release signal'); AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active with no active release signal'); TEST_FINISHED();]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); ELSE _fbErrorLowOffTimer(IN := TRUE, PT := timOffTime); _fbAIErrorLowOff( iAnalogValue:= 50, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); END_IF // Wait for the delay time to be finished and check the signal level // Should be high until the delay time has passed IF _fbErrorLowOffTimer.Q THEN _xErrorLowOffTestFinished := TRUE; AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is still active after the delay time'); ELSE AssertTrue(Condition:= _xResultErrorLow, Message:= 'Error low is not active before the delay time elapsed'); IF NOT _xResultErrorLow THEN _xErrorLowOffTestFinished := TRUE; END_IF END_IF IF _xErrorLowOffTestFinished THEN TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); // assert results IF NOT _fbErrorLowOnTimer.Q THEN AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is active before the time'); _fbErrorLowOnTimer.IN := FALSE; ELSE _xErrorLowOnTestFinished := TRUE; AssertTrue(Condition:= _xResultErrorLow, Message:= 'Error low is not active after the delay time'); AssertTrue(Condition:= _xResultWarningLow, Message:= 'Warning low is not active after the delay time'); END_IF IF _xErrorLowOnTestFinished THEN TEST_FINISHED(); END_IF]]> , xInUnitTestMode := TRUE, rScaledValue=> _rResult); // Value should be between 72.49 und 72.52 -> Delta = 0,03 AssertEquals_REAL( Expected := rExpected, Actual := _rResult, Delta := 0.03, Message := 'Analog value not correct'); TEST_FINISHED();]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> , xWarningLow=> , xWarningHigh=> , xErrorHigh=> ); // assert result AssertTrue(_xResultError, 'Expected overrange error'); TEST_FINISHED();]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> , xWarningLow=> , xWarningHigh=> , xErrorHigh=> ); END_IF // run AI cyclically until overrange error is supposed to be off _fbAIOverrangeOff( iAnalogValue:= 50, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= , xReleaseErrors := TRUE, xReleaseHardwareErrors := TRUE, xReleaseLimitErrors:= TRUE, xConfirmAlarms := TRUE, xError=> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> , xWarningLow=> , xWarningHigh=> , xErrorHigh=> ); // assert result depending on timer IF NOT _fbOverrangeOffTimer.Q THEN AssertTrue(_xResultError, 'Overrange error is reset before expected time'); ELSE AssertFalse(_xResultError, 'Overrange error not reset on time'); TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> , xWarningLow=> , xWarningHigh=> , xErrorHigh=> ); // assert result depending on timer IF NOT _fbOverrangeOnTimer.Q THEN AssertFalse(_xResultError, 'Overrange error set before expected time'); ELSE AssertTrue(_xResultError, 'Overrange error not set on time'); TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> , xWarningLow=> , xWarningHigh=> , xErrorHigh=> ); // assert result AssertTrue(_xResultError, 'Expected underrange error'); TEST_FINISHED();]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> , xWarningLow=> , xWarningHigh=> , xErrorHigh=> ); END_IF // run AI cyclically until underrange error is supposed to be off _fbAIUnderrangeOff( iAnalogValue:= 0, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= , xReleaseErrors := TRUE, xReleaseHardwareErrors := TRUE, xReleaseLimitErrors:= TRUE, xConfirmAlarms := TRUE, xError=> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> , xWarningLow=> , xWarningHigh=> , xErrorHigh=> ); // assert result depending on timer IF NOT _fbUnderrangeOffTimer.Q THEN AssertTrue(_xResultError, 'Underrange error is reset before expected time'); ELSE AssertFalse(_xResultError, 'Underrange error not reset on time'); TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> , xWarningLow=> , xWarningHigh=> , xErrorHigh=> ); // assert result depending on timer IF NOT _fbUnderrangeOnTimer.Q THEN AssertFalse(_xResultError, 'Underrange error set before expected time'); ELSE AssertTrue(_xResultError, 'Underrange error not set on time'); TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh ); // assert results AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is active'); AssertFalse(Condition:= _xResultWarningLow, Message:= 'Warning low is active'); AssertTrue(Condition:= _xResultWarningHigh, Message:= 'Warning high is not active'); AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active'); // Check without active release signal _fbAI( iAnalogValue:= 85, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= FALSE, xReleaseLimitErrors:= FALSE, xError=> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh ); // assert results AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is active without active release signal'); AssertFalse(Condition:= _xResultWarningLow, Message:= 'Warning low is active without active release signal'); AssertFalse(Condition:= _xResultWarningHigh, Message:= 'Warning high is active without active release signal'); AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active without active release signal'); TEST_FINISHED();]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); ELSE _fbWarningHighOffTimer(IN := TRUE, PT := timOffTime); _fbAIWarningHighOff( iAnalogValue:= 50, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); END_IF // Wait for the delay time to be finished and check the signal level // Should be high until the delay time has passed IF _fbWarningHighOffTimer.Q THEN _xWarningHighOffTestFinished := TRUE; AssertFalse(Condition:= _xResultWarningHigh, Message:= 'Warning high is still active after the delay time'); ELSE AssertTrue(Condition:= _xResultWarningHigh, Message:= 'Warning high is not active before the delay time elapsed'); IF NOT _xResultWarningHigh THEN _xWarningHighOffTestFinished := TRUE; END_IF END_IF IF _xWarningHighOffTestFinished THEN TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); // assert results IF NOT _fbWarningHighOnTimer.Q THEN AssertFalse(Condition:= _xResultWarningHigh, Message:= 'Warning high is active before the time'); _fbErrorLowOnTimer.IN := FALSE; ELSE _xWarningHighOnTestFinished := TRUE; AssertTrue(Condition:= _xResultWarningHigh, Message:= 'Warning high is not active after the delay time'); END_IF IF _xWarningHighOnTestFinished THEN TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh ); // assert results AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is active'); AssertTrue(Condition:= _xResultWarningLow, Message:= 'Warning low is not active'); AssertFalse(Condition:= _xResultWarningHigh, Message:= 'Warning high is active'); AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active'); // Warning low without release _fbAI( iAnalogValue:= 15, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= FALSE, xReleaseLimitErrors:= FALSE, xError=> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh ); // assert results AssertFalse(Condition:= _xResultErrorLow, Message:= 'Error low is active without active release'); AssertFalse(Condition:= _xResultWarningLow, Message:= 'Warning low is active without active release'); AssertFalse(Condition:= _xResultWarningHigh, Message:= 'Warning high is active without active release'); AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active without active release'); TEST_FINISHED();]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); ELSE _fbWarningLowOffTimer(IN := TRUE, PT := timOffTime); _fbAIWarningLowOff( iAnalogValue:= 50, xUnderrange:= FALSE, xOverrange:= FALSE, xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); END_IF // Wait for the delay time to be finished and check the signal level // Should be high until the delay time has passed IF _fbWarningLowOffTimer.Q THEN _xWarningLowOffTestFinished := TRUE; AssertFalse(Condition:= _xResultWarningLow, Message:= 'Warning low is still active after the delay time'); ELSE AssertTrue(Condition:= _xResultWarningLow, Message:= 'Warning low is not active before the delay time elapsed'); IF NOT _xResultWarningLow THEN _xWarningLowOffTestFinished := TRUE; END_IF END_IF IF _xWarningLowOffTestFinished THEN TEST_FINISHED(); END_IF]]> _xResultError, rScaledValue=> , xInUnitTestMode := TRUE, xErrorLow=> _xResultErrorLow, xWarningLow=> _xResultWarningLow, xWarningHigh=> _xResultWarningHigh, xErrorHigh=> _xResultErrorHigh); // assert results IF NOT _fbWarningLowOnTimer.Q THEN AssertFalse(Condition:= _xResultWarningLow, Message:= 'Warning low is active before the time'); _fbErrorLowOnTimer.IN := FALSE; ELSE _xWarningLowOnTestFinished := TRUE; AssertTrue(Condition:= _xResultWarningLow, Message:= 'Warning low is not active after the delay time'); END_IF IF _xWarningLowOnTestFinished THEN TEST_FINISHED(); END_IF]]>