301 lines
8.6 KiB
XML
301 lines
8.6 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1">
|
|
<POU Name="FB_BlinkerTest" Id="{93a2f3b8-14aa-41c9-9ba1-1c60e3f7d9e3}" SpecialFunc="None">
|
|
<Declaration><![CDATA[{attribute 'analysis' := '-31'}
|
|
FUNCTION_BLOCK FB_BlinkerTest EXTENDS TcUnit.FB_TestSuite
|
|
VAR
|
|
// variables for 50Hz test
|
|
_fbBlinkerFreq50Hz : FB_Blinker;
|
|
_fbDelayFreq50HzOnTimer : TON;
|
|
_fbDelayFreq50HzOffTimer : TON;
|
|
_fbRtrigFreq50Hz : R_TRIG;
|
|
_iFreq50HzCounter : INT := 0;
|
|
|
|
// variables for 5Hz test
|
|
_fbBlinkerFreq5Hz : FB_Blinker;
|
|
_fbDelayFreq5HzOnTimer : TON;
|
|
_fbDelayFreq5HzOffTimer : TON;
|
|
_fbRtrigFreq5Hz : R_TRIG;
|
|
_iFreq5HzCounter : INT := 0;
|
|
|
|
// variables for 2Hz test
|
|
_fbBlinkerFreq2Hz : FB_Blinker;
|
|
_fbDelayFreq2HzOnTimer : TON;
|
|
_fbDelayFreq2HzOffTimer : TON;
|
|
_fbRtrigFreq2Hz : R_TRIG;
|
|
_iFreq2HzCounter : INT := 0;
|
|
|
|
// variables for 1Hz test
|
|
_fbBlinkerFreq1Hz : FB_Blinker;
|
|
_fbDelayFreq1HzOnTimer : TON;
|
|
_fbDelayFreq1HzOffTimer : TON;
|
|
_fbRtrigFreq1Hz : R_TRIG;
|
|
_iFreq1HzCounter : INT := 0;
|
|
|
|
// variables for 0.5Hz test
|
|
_fbBlinkerFreq0_5Hz : FB_Blinker;
|
|
_fbDelayFreq0_5HzOnTimer : TON;
|
|
_fbDelayFreq0_5HzOffTimer : TON;
|
|
_fbRtrigFreq0_5Hz : R_TRIG;
|
|
_iFreq0_5HzCounter : INT := 0;
|
|
|
|
// variables for 0.1Hz test
|
|
_fbBlinkerFreq0_1Hz : FB_Blinker;
|
|
_fbDelayFreq0_1HzOnTimer : TON;
|
|
_fbDelayFreq0_1HzOffTimer : TON;
|
|
_fbRtrigFreq0_1Hz : R_TRIG;
|
|
_iFreq0_1HzCounter : INT := 0;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[// test blinker for different frequencies
|
|
TestOutputFrequency50Hz();
|
|
TestOutputFrequency5Hz();
|
|
TestOutputFrequency2Hz();
|
|
TestOutputFrequency1Hz();
|
|
TestOutputFrequency0_5Hz();
|
|
{analysis -140}
|
|
// TestOutputFrequency0_1Hz();]]></ST>
|
|
</Implementation>
|
|
<Method Name="TestOutputFrequency0_1Hz" Id="{c17bb511-c82a-42b8-a274-50330416d4e0}">
|
|
<Declaration><![CDATA[METHOD TestOutputFrequency0_1Hz
|
|
VAR
|
|
// blinker output
|
|
_xOut : BOOL;
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
// delay for timer
|
|
timDelay : TIME := T#5S;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[TEST('TestOutputFrequency0_1Hz');
|
|
|
|
// alternating timers (0.1Hz blinking frequency)
|
|
_fbDelayFreq0_1HzOnTimer(IN := NOT _fbDelayFreq0_1HzOffTimer.Q, PT := timDelay);
|
|
_fbDelayFreq0_1HzOffTimer(IN := _fbDelayFreq0_1HzOnTimer.Q, PT := timDelay);
|
|
_fbRtrigFreq0_1Hz(CLK := _fbDelayFreq0_1HzOnTimer.Q);
|
|
|
|
// run blinker
|
|
_fbBlinkerFreq0_1Hz(rFrequency := 0.1, xOut => _xOut);
|
|
|
|
// check results for each cycle depending on alternating timers
|
|
IF _fbDelayFreq0_1HzOnTimer.Q THEN
|
|
AssertTrue(_xOut, 'xOut is supposed to be true but is false.');
|
|
ELSE
|
|
AssertFalse(_xOut, 'xOut is supposed to be false but is true.');
|
|
END_IF
|
|
|
|
// increment counter when timer is done
|
|
IF _fbRtrigFreq0_1Hz.Q THEN
|
|
_iFreq0_1HzCounter := _iFreq0_1HzCounter + 1;
|
|
END_IF
|
|
|
|
// finish test after 5 blinking cycles
|
|
IF _iFreq0_1HzCounter > 5 THEN
|
|
TEST_FINISHED();
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="TestOutputFrequency0_5Hz" Id="{6ceaefc3-45ad-4025-9305-7cee18dd0ee3}">
|
|
<Declaration><![CDATA[METHOD TestOutputFrequency0_5Hz
|
|
VAR
|
|
// blinker output
|
|
_xOut : BOOL;
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
// delay for timer
|
|
timDelay : TIME := T#1S;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[TEST('TestOutputFrequency0_5Hz');
|
|
|
|
// alternating timers (0.5Hz blinking frequency)
|
|
_fbDelayFreq0_5HzOnTimer(IN := NOT _fbDelayFreq0_5HzOffTimer.Q, PT := timDelay);
|
|
_fbDelayFreq0_5HzOffTimer(IN := _fbDelayFreq0_5HzOnTimer.Q, PT := timDelay);
|
|
_fbRtrigFreq0_5Hz(CLK := _fbDelayFreq0_5HzOnTimer.Q);
|
|
|
|
// run blinker
|
|
_fbBlinkerFreq0_5Hz(rFrequency := 0.5, xOut => _xOut);
|
|
|
|
// check results for each cycle depending on alternating timers
|
|
IF _fbDelayFreq0_5HzOnTimer.Q THEN
|
|
AssertTrue(_xOut, 'xOut is supposed to be true but is false.');
|
|
ELSE
|
|
AssertFalse(_xOut, 'xOut is supposed to be false but is true.');
|
|
END_IF
|
|
|
|
// increment counter when timer is done
|
|
IF _fbRtrigFreq0_5Hz.Q THEN
|
|
_iFreq0_5HzCounter := _iFreq0_5HzCounter + 1;
|
|
END_IF
|
|
|
|
// finish test after 5 blinking cycles
|
|
IF _iFreq0_5HzCounter > 5 THEN
|
|
TEST_FINISHED();
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="TestOutputFrequency1Hz" Id="{d1f61e42-2489-495d-b533-6fba45f62c50}">
|
|
<Declaration><![CDATA[METHOD TestOutputFrequency1Hz
|
|
VAR
|
|
// blinker output
|
|
_xOut : BOOL;
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
// delay for timer
|
|
timDelay : TIME := T#500MS;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[TEST('TestOutputFrequency1Hz');
|
|
|
|
// alternating timers (1Hz blinking frequency)
|
|
_fbDelayFreq1HzOnTimer(IN := NOT _fbDelayFreq1HzOffTimer.Q, PT := timDelay);
|
|
_fbDelayFreq1HzOffTimer(IN := _fbDelayFreq1HzOnTimer.Q, PT := timDelay);
|
|
_fbRtrigFreq1Hz(CLK := _fbDelayFreq1HzOnTimer.Q);
|
|
|
|
// run blinker
|
|
_fbBlinkerFreq1Hz(rFrequency := 1.0, xOut => _xOut);
|
|
|
|
// check results for each cycle depending on alternating timers
|
|
IF _fbDelayFreq1HzOnTimer.Q THEN
|
|
AssertTrue(_xOut, 'xOut is supposed to be true but is false.');
|
|
ELSE
|
|
AssertFalse(_xOut, 'xOut is supposed to be false but is true.');
|
|
END_IF
|
|
|
|
// increment counter when timer is done
|
|
IF _fbRtrigFreq1Hz.Q THEN
|
|
_iFreq1HzCounter := _iFreq1HzCounter + 1;
|
|
END_IF
|
|
|
|
// finish test after 5 blinking cycles
|
|
IF _iFreq1HzCounter > 5 THEN
|
|
TEST_FINISHED();
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="TestOutputFrequency2Hz" Id="{1e5023d2-a4d9-4826-ac00-229fc3919936}">
|
|
<Declaration><![CDATA[METHOD TestOutputFrequency2Hz
|
|
VAR
|
|
// blinker output
|
|
_xOut : BOOL;
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
// delay for timer
|
|
timDelay : TIME := T#250MS;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[TEST('TestOutputFrequency2Hz');
|
|
|
|
// alternating timers (2Hz blinking frequency)
|
|
_fbDelayFreq2HzOnTimer(IN := NOT _fbDelayFreq2HzOffTimer.Q, PT := timDelay);
|
|
_fbDelayFreq2HzOffTimer(IN := _fbDelayFreq2HzOnTimer.Q, PT := timDelay);
|
|
_fbRtrigFreq2Hz(CLK := _fbDelayFreq2HzOnTimer.Q);
|
|
|
|
// run blinker
|
|
_fbBlinkerFreq2Hz(rFrequency := 2.0, xOut => _xOut);
|
|
|
|
// check results for each cycle depending on alternating timers
|
|
IF _fbDelayFreq2HzOnTimer.Q THEN
|
|
AssertTrue(_xOut, 'xOut is supposed to be true but is false.');
|
|
ELSE
|
|
AssertFalse(_xOut, 'xOut is supposed to be false but is true.');
|
|
END_IF
|
|
|
|
// increment counter when timer is done
|
|
IF _fbRtrigFreq2Hz.Q THEN
|
|
_iFreq2HzCounter := _iFreq2HzCounter + 1;
|
|
END_IF
|
|
|
|
// finish test after 5 blinking cycles
|
|
IF _iFreq2HzCounter > 5 THEN
|
|
TEST_FINISHED();
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="TestOutputFrequency50Hz" Id="{b4a8cd02-0a88-4b2c-9a24-0ee3a74bd6c1}">
|
|
<Declaration><![CDATA[METHOD TestOutputFrequency50Hz
|
|
VAR
|
|
// blinker output
|
|
_xOut : BOOL;
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
// delay for timer
|
|
timDelay : TIME := T#10MS;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[TEST('TestOutputFrequency50Hz');
|
|
|
|
// alternating timers (50Hz blinking frequency)
|
|
_fbDelayFreq50HzOnTimer(IN := NOT _fbDelayFreq50HzOffTimer.Q, PT := timDelay);
|
|
_fbDelayFreq50HzOffTimer(IN := _fbDelayFreq50HzOnTimer.Q, PT := timDelay);
|
|
_fbRtrigFreq50Hz(CLK := _fbDelayFreq50HzOnTimer.Q);
|
|
|
|
// run blinker
|
|
_fbBlinkerFreq50Hz(rFrequency := 50.0, xOut => _xOut);
|
|
|
|
// check results for each cycle depending on alternating timers
|
|
IF _fbDelayFreq50HzOnTimer.Q THEN
|
|
AssertTrue(_xOut, 'xOut is supposed to be true but is false.');
|
|
ELSE
|
|
AssertFalse(_xOut, 'xOut is supposed to be false but is true.');
|
|
END_IF
|
|
|
|
// increment counter when timer is done
|
|
IF _fbRtrigFreq50Hz.Q THEN
|
|
_iFreq50HzCounter := _iFreq50HzCounter + 1;
|
|
END_IF
|
|
|
|
// finish test after 5 blinking cycles
|
|
IF _iFreq50HzCounter > 5 THEN
|
|
TEST_FINISHED();
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="TestOutputFrequency5Hz" Id="{d93914de-f931-4cc2-adcc-04e3043464c9}">
|
|
<Declaration><![CDATA[METHOD TestOutputFrequency5Hz
|
|
VAR
|
|
// blinker output
|
|
_xOut : BOOL;
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
// delay for timer
|
|
timDelay : TIME := T#100MS;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[TEST('TestOutputFrequency5Hz');
|
|
|
|
// alternating timers (5Hz blinking frequency)
|
|
_fbDelayFreq5HzOnTimer(IN := NOT _fbDelayFreq5HzOffTimer.Q, PT := timDelay);
|
|
_fbDelayFreq5HzOffTimer(IN := _fbDelayFreq5HzOnTimer.Q, PT := timDelay);
|
|
_fbRtrigFreq5Hz(CLK := _fbDelayFreq5HzOnTimer.Q);
|
|
|
|
// run blinker
|
|
_fbBlinkerFreq5Hz(rFrequency := 5.0, xOut => _xOut);
|
|
|
|
// check results for each cycle depending on alternating timers
|
|
IF _fbDelayFreq5HzOnTimer.Q THEN
|
|
AssertTrue(_xOut, 'xOut is supposed to be true but is false.');
|
|
ELSE
|
|
AssertFalse(_xOut, 'xOut is supposed to be false but is true.');
|
|
END_IF
|
|
|
|
// increment counter when timer is done
|
|
IF _fbRtrigFreq5Hz.Q THEN
|
|
_iFreq5HzCounter := _iFreq5HzCounter + 1;
|
|
END_IF
|
|
|
|
// finish test after 5 blinking cycles
|
|
IF _iFreq5HzCounter > 5 THEN
|
|
TEST_FINISHED();
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
</POU>
|
|
</TcPlcObject> |