From 3690af0636728cfc7962f24e576838255cd2a33d Mon Sep 17 00:00:00 2001 From: Navid Mashayekh Date: Wed, 9 Feb 2022 08:45:46 +0330 Subject: [PATCH 1/6] add getTestByName & currentTest instace reference in GVL --- TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL | 3 +++ TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU | 24 ++++++++++++++++++- TcUnit/TcUnit/POUs/Functions/TEST.TcPOU | 2 +- .../TcUnit/POUs/Functions/TEST_ORDERED.TcPOU | 2 +- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL b/TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL index a5393bb..5d662e9 100644 --- a/TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL +++ b/TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL @@ -11,6 +11,9 @@ VAR_GLOBAL (* Pointer to current test suite being called *) CurrentTestSuiteBeingCalled : POINTER TO FB_TestSuite; + + (* Reference to current test being called *) + CurrentTestBeingCalled : REFERENCE TO FB_Test; (* Current name of test being called *) CurrentTestNameBeingCalled : Tc2_System.T_MaxString; diff --git a/TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU b/TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU index d975183..a9aa4c2 100644 --- a/TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU +++ b/TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU @@ -47,7 +47,7 @@ END_VAR]]> - + + + + + + Date: Wed, 9 Feb 2022 14:34:26 +0330 Subject: [PATCH 2/6] add TimeoutWatcher & Utility FBs. add set Time of start in addTest. --- TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL | 1 + TcUnit/TcUnit/POUs/FB_Test.TcPOU | 21 ++++++++++++ TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU | 5 +++ TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU | 37 ++++++++++++++++++++++ TcUnit/TcUnit/POUs/FB_Utility.TcPOU | 27 ++++++++++++++++ TcUnit/TcUnit/TcUnit.plcproj | 6 ++++ 6 files changed, 97 insertions(+) create mode 100644 TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU create mode 100644 TcUnit/TcUnit/POUs/FB_Utility.TcPOU diff --git a/TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL b/TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL index 5d662e9..d4cab43 100644 --- a/TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL +++ b/TcUnit/TcUnit/GVLs/GVL_TcUnit.TcGVL @@ -5,6 +5,7 @@ {attribute 'qualified_only'} VAR_GLOBAL TcUnitRunner : FB_TcUnitRunner; + TimeoutWatcher : FB_TimeoutWatcher; (* Indication of whether the last instantiated test suite has an assert instance created *) TestSuiteIsRegistered : BOOL; diff --git a/TcUnit/TcUnit/POUs/FB_Test.TcPOU b/TcUnit/TcUnit/POUs/FB_Test.TcPOU index 96cf10e..c760c04 100644 --- a/TcUnit/TcUnit/POUs/FB_Test.TcPOU +++ b/TcUnit/TcUnit/POUs/FB_Test.TcPOU @@ -20,6 +20,8 @@ VAR TestIsFailed : BOOL; // Indication of whether this test has at least one failed assert AssertionMessage : Tc2_System.T_MaxString; // Assertion message for the first assertion in this test AssertionType : E_AssertionType; // Assertion type for the first assertion in this test + {attribute 'hide'} + _timeStampOfStart : ULINT; END_VAR]]> @@ -144,5 +146,24 @@ END_VAR]]> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU b/TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU index a9aa4c2..87b94cd 100644 --- a/TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU +++ b/TcUnit/TcUnit/POUs/FB_TestSuite.TcPOU @@ -42,6 +42,8 @@ VAR (* Number of ordered tests (created by TEST_ORDERED()) that this test suite contains *) NumberOfOrderedTests : UINT(0..GVL_Param_TcUnit.MaxNumberOfTestsForEachTestSuite); + + Utility : FB_Utility; END_VAR]]> @@ -129,6 +131,9 @@ IF NOT TestWithThisNameAlreadyExists THEN END_IF AddTest REF= GetTestByName(TrimmedTestName); +IF AddTest.TimeStampOfStart=0 THEN + AddTest.TimeStampOfStart := Utility.GetCpuCounterAsULINT(); +END_IF (* Check if this test should be disabled *) IF IgnoreCurrentTestCase THEN diff --git a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU new file mode 100644 index 0000000..d51d25a --- /dev/null +++ b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU @@ -0,0 +1,37 @@ + + + + + + 255 THEN + IF NOT GVL_TcUnit.CurrentTestBeingCalled.IsFinished AND CpuCounterULINT >= GVL_TcUnit.CurrentTestBeingCalled.TimeStampOfStart + TimeoutAsULINT THEN + StopCmd := TRUE; + END_IF +END_IF +PlcStop(NETID:='',PORT:=AdsPort,STOP:=stopCmd);]]> + + + \ No newline at end of file diff --git a/TcUnit/TcUnit/POUs/FB_Utility.TcPOU b/TcUnit/TcUnit/POUs/FB_Utility.TcPOU new file mode 100644 index 0000000..647500b --- /dev/null +++ b/TcUnit/TcUnit/POUs/FB_Utility.TcPOU @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TcUnit/TcUnit/TcUnit.plcproj b/TcUnit/TcUnit/TcUnit.plcproj index c3b39fd..1998946 100644 --- a/TcUnit/TcUnit/TcUnit.plcproj +++ b/TcUnit/TcUnit/TcUnit.plcproj @@ -112,6 +112,12 @@ Documentation and examples are available at www.tcunit.org Code + + Code + + + Code + Code From 89830b5f559b0d5bf31b17d867b981ed06e23282 Mon Sep 17 00:00:00 2001 From: Navid Mashayekh Date: Wed, 9 Feb 2022 14:52:59 +0330 Subject: [PATCH 3/6] add TIME_OUT_FOR_EACH_TEST function to call timeoutWatcher. version update. --- TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU | 9 +++++---- .../Functions/TIMEOUT_FOR_EACH_TEST.TcPOU | 20 +++++++++++++++++++ TcUnit/TcUnit/TcUnit.plcproj | 5 ++++- TcUnit/TcUnit/Version/Global_Version.TcGVL | 2 +- 4 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 TcUnit/TcUnit/POUs/Functions/TIMEOUT_FOR_EACH_TEST.TcPOU diff --git a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU index d51d25a..c00ae13 100644 --- a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU +++ b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU @@ -1,9 +1,10 @@  - - + + + + + + + + \ No newline at end of file diff --git a/TcUnit/TcUnit/TcUnit.plcproj b/TcUnit/TcUnit/TcUnit.plcproj index 1998946..df5ef27 100644 --- a/TcUnit/TcUnit/TcUnit.plcproj +++ b/TcUnit/TcUnit/TcUnit.plcproj @@ -32,7 +32,7 @@ Documentation and examples are available at www.tcunit.org www.tcunit.org Jakob Sagatowski and contributors - 1.2.1.0 + 1.2.2.0 @@ -187,6 +187,9 @@ Documentation and examples are available at www.tcunit.org Code + + Code + Code diff --git a/TcUnit/TcUnit/Version/Global_Version.TcGVL b/TcUnit/TcUnit/Version/Global_Version.TcGVL index 4d7d59f..b9e265d 100644 --- a/TcUnit/TcUnit/Version/Global_Version.TcGVL +++ b/TcUnit/TcUnit/Version/Global_Version.TcGVL @@ -7,7 +7,7 @@ // This function has been automatically generated from the project information. VAR_GLOBAL CONSTANT {attribute 'const_non_replaced'} - stLibVersion_TcUnit : ST_LibVersion := (iMajor := 1, iMinor := 2, iBuild := 1, iRevision := 0, sVersion := '1.2.1.0'); + stLibVersion_TcUnit : ST_LibVersion := (iMajor := 1, iMinor := 2, iBuild := 2, iRevision := 0, sVersion := '1.2.2.0'); END_VAR ]]> From 63d6450da126909275fbeb7b1e456abb9567381a Mon Sep 17 00:00:00 2001 From: Navid Mashayekh Date: Wed, 9 Feb 2022 15:12:33 +0330 Subject: [PATCH 4/6] use testIsFinished instead of IsFinished. seems ISFINISHED is a TYPE --- TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU | 4 ++-- TcUnit/TcUnit/POUs/FB_Utility.TcPOU | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU index c00ae13..5a47a37 100644 --- a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU +++ b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU @@ -28,9 +28,9 @@ IF IndexOfTaskThatContainsTestSuites = 255 THEN IndexOfTaskThatContainsTestSuites := GVL_TcUnit.TestSuiteAddresses[1]^.GetCurrentTaskIndex.index; END_IF IF IndexOfTaskThatContainsTestSuites <> 255 THEN - IF NOT GVL_TcUnit.CurrentTestBeingCalled.IsFinished AND CpuCounterULINT >= GVL_TcUnit.CurrentTestBeingCalled.TimeStampOfStart + TimeoutAsULINT THEN + IF (CpuCounterULINT >= GVL_TcUnit.CurrentTestBeingCalled.TimeStampOfStart + TimeoutAsULINT) AND NOT GVL_TcUnit.CurrentTestBeingCalled.TestIsFinished THEN StopCmd := TRUE; - END_IF + END_IF END_IF PlcStop(NETID:='',PORT:=AdsPort,STOP:=stopCmd);]]> diff --git a/TcUnit/TcUnit/POUs/FB_Utility.TcPOU b/TcUnit/TcUnit/POUs/FB_Utility.TcPOU index 647500b..fb49475 100644 --- a/TcUnit/TcUnit/POUs/FB_Utility.TcPOU +++ b/TcUnit/TcUnit/POUs/FB_Utility.TcPOU @@ -18,9 +18,9 @@ END_VAR ]]> +GetCpuCounterAsULINT := TempResult + CpuCounter.cpuCntLoDW;]]> From f50fa65d5f6972501435c86ce527dab01b16d112 Mon Sep 17 00:00:00 2001 From: Navid Mashayekh Date: Wed, 9 Feb 2022 17:22:07 +0330 Subject: [PATCH 5/6] send plcstop request continuously until plc stops --- TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU index 5a47a37..42bb1a3 100644 --- a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU +++ b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU @@ -16,23 +16,26 @@ VAR Utility : FB_Utility; END_VAR]]> - 255 THEN - IF (CpuCounterULINT >= GVL_TcUnit.CurrentTestBeingCalled.TimeStampOfStart + TimeoutAsULINT) AND NOT GVL_TcUnit.CurrentTestBeingCalled.TestIsFinished THEN + IF CpuCounterULINT >= GVL_TcUnit.CurrentTestBeingCalled.TimeStampOfStart + TimeoutAsULINT THEN + // TODO: generate log to inform user what is going on StopCmd := TRUE; END_IF END_IF -PlcStop(NETID:='',PORT:=AdsPort,STOP:=stopCmd);]]> +PlcStop(NETID:='',PORT:=AdsPort,STOP:=stopCmd); +StopCmd := FALSE;]]> \ No newline at end of file From 5cebd10e3d911519122eafa6e1624318b2310b5d Mon Sep 17 00:00:00 2001 From: Navid Mashayekh Date: Sun, 13 Feb 2022 10:16:36 +0330 Subject: [PATCH 6/6] add log report --- TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU index 42bb1a3..06ddd39 100644 --- a/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU +++ b/TcUnit/TcUnit/POUs/FB_TimeoutWatcher.TcPOU @@ -14,6 +14,10 @@ VAR TimeoutAsULINT : ULINT; CpuCounterULINT : ULINT; Utility : FB_Utility; + TestSuiteInstancePath : Tc2_System.T_MaxString; + TestName : Tc2_System.T_MaxString; + ReportMessage : Tc2_System.T_MaxString; + AdsLogStringMessageFifoQueue : FB_AdsLogStringMessageFifoQueue; END_VAR]]> 255 THEN IF CpuCounterULINT >= GVL_TcUnit.CurrentTestBeingCalled.TimeStampOfStart + TimeoutAsULINT THEN - // TODO: generate log to inform user what is going on + + // generate report message + TestSuiteInstancePath := GVL_TcUnit.CurrentTestSuiteBeingCalled^.InstancePath; + TestName := GVL_TcUnit.CurrentTestNameBeingCalled; + ReportMessage := CONCAT('| Timeout Reached. TestSuite Path=',TestSuiteInstancePath); + ReportMessage := CONCAT(ReportMessage,', Test Name=%s'); + // add report to FifoQueue for pipelines + AdsLogStringMessageFifoQueue.WriteLog(MsgCtrlMask:=ADSLOG_MSGTYPE_ERROR,MsgFmtStr:=ReportMessage,StrArg:=TestName); + // print report in error list for developers + ADSLOGSTR(MsgCtrlMask:=ADSLOG_MSGTYPE_ERROR,MsgFmtStr:=ReportMessage,StrArg:=TestName); + StopCmd := TRUE; END_IF END_IF