From 442cfc370f86f13be5b4135dc31c55921dd16750 Mon Sep 17 00:00:00 2001 From: Shane Reetz Date: Tue, 30 Apr 2024 07:53:34 -0700 Subject: [PATCH 01/14] Rename input variable to avoid conflation with local FB var with same name --- TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU index 87551d1..23eec75 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU @@ -226,19 +226,19 @@ END_CASE]]> Command THEN - Command.Execute := FALSE; +IF THIS^.Command <> CommandIn THEN + CommandIn.Execute := FALSE; THIS^.Call(); END_IF -THIS^.Command := Command; +THIS^.Command := CommandIn; THIS^.Execute := TRUE; THIS^.Call(); Exec := THIS^.Status;]]> From 57b8a843d46bcb90c8f63351133170ab9eee02ae Mon Sep 17 00:00:00 2001 From: Shane Reetz Date: Tue, 30 Apr 2024 07:53:50 -0700 Subject: [PATCH 02/14] Rename input variable to avoid conflation with local FB var with same name, in Start() --- TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU index 23eec75..d4f2165 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU @@ -257,13 +257,13 @@ _PLCopenCallInternal._RemoteStatus := PLCopenStatusBase.ERR_OK; +THIS^.Exec(CommandIn);]]> From 4340332131ca03a6b4dbad931ebaead6884a3e90 Mon Sep 17 00:00:00 2001 From: Shane Reetz Date: Tue, 30 Apr 2024 08:04:18 -0700 Subject: [PATCH 03/14] Rename Command to CommandInternal to disambiguate from input commands --- .../TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU index d4f2165..1a7951d 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU @@ -4,7 +4,7 @@ 0 THEN _PLCopenCallInternal._state := PLCopenCallState.PLCOPEN_FUB_ABORT_OLD; @@ -226,19 +226,19 @@ END_CASE]]> CommandIn THEN - CommandIn.Execute := FALSE; +IF THIS^.CommandInternal <> Command THEN + Command.Execute := FALSE; THIS^.Call(); END_IF -THIS^.Command := CommandIn; +THIS^.CommandInternal := Command; THIS^.Execute := TRUE; THIS^.Call(); Exec := THIS^.Status;]]> @@ -257,13 +257,13 @@ _PLCopenCallInternal._RemoteStatus := PLCopenStatusBase.ERR_OK; +THIS^.Exec(Command);]]> From 08732902df80457f172b71aefee917999938c26e Mon Sep 17 00:00:00 2001 From: Shane Reetz Date: Tue, 30 Apr 2024 08:19:29 -0700 Subject: [PATCH 04/14] Check that interface is valid before calling --- TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU index 1a7951d..d5e05b8 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU @@ -234,8 +234,10 @@ END_VAR //Abort the previous command if it exists IF THIS^.CommandInternal <> Command THEN - Command.Execute := FALSE; - THIS^.Call(); + IF THIS^.CommandInternal <> 0 THEN + THIS^.CommandInternal.Execute := FALSE; + THIS^.Call(); + END_IF END_IF THIS^.CommandInternal := Command; From f77331883ddc6da3da3faa994183953245457372 Mon Sep 17 00:00:00 2001 From: Shane Reetz Date: Tue, 30 Apr 2024 08:19:50 -0700 Subject: [PATCH 05/14] Finish renaming"Command" => "CommandInternal" --- .../TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU index 7e8b000..ce623d1 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU @@ -38,7 +38,7 @@ END_VAR]]> //If it's not in the list FOR _commandIndex := 0 TO GVLTcCommando.MAX_RELATED_GROUPS DO - IF _callGroup._commands[_commandIndex].Command <> 0 THEN + IF _callGroup._commands[_commandIndex].CommandInternal <> 0 THEN _callGroup._commands[_commandIndex](); IF _callGroup._commands[_commandIndex].CommandAborted THEN @@ -48,7 +48,7 @@ FOR _commandIndex := 0 TO GVLTcCommando.MAX_RELATED_GROUPS DO ELSIF _callGroup._commands[_commandIndex].Busy THEN _anyBusy := TRUE; ELSE - _callGroup._commands[_commandIndex].Command := 0; + _callGroup._commands[_commandIndex].CommandInternal := 0; END_IF END_IF END_FOR @@ -172,7 +172,7 @@ END_VAR]]> // Check if it's already in the list FOR _commandIndex := 0 TO GVLTcCommando.MAX_RELATED_GROUPS DO - IF _callGroup._commands[_commandIndex].Command = Command THEN + IF _callGroup._commands[_commandIndex].CommandInternal = Command THEN _callGroup._commands[_commandIndex].Exec(Command); Start := TRUE; RETURN; @@ -181,7 +181,7 @@ END_FOR // If it's not in the list FOR _commandIndex := 0 TO GVLTcCommando.MAX_RELATED_GROUPS DO - IF _callGroup._commands[_commandIndex].Command = 0 THEN + IF _callGroup._commands[_commandIndex].CommandInternal = 0 THEN _callGroup._commands[_commandIndex].Exec(Command); Start := TRUE; RETURN; From e3539123a006de0254e1b9575950273ab2a43c61 Mon Sep 17 00:00:00 2001 From: Shane Reetz Date: Tue, 30 Apr 2024 09:02:59 -0700 Subject: [PATCH 06/14] Update tests, unfinished --- .../TcCommando/Test/PLCopenCall_Test.TcPOU | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU b/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU index a361a9d..a353cbe 100644 --- a/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU +++ b/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU @@ -105,11 +105,17 @@ END_VAR TEST('Exec'); call.Exec(command1); - AssertTrue(call.Execute, Message := 'Execute should be true'); + AssertTrue(call.Execute, Message := 'Execute should be true on call'); + AssertTrue(command1.Execute, Message := 'Execute should be true on command'); call.Exec(command2); AssertTrue(call.Execute, Message := 'Execute should still be true, second command should abort first'); - AssertFalse(command1.Execute, Message := 'Execute should not be true on first of two commands'); + AssertFalse(command2.Execute, Message := 'Execute should not be set, command should be aborted'); + + call.Exec(command1); + AssertEquals_DINT(command1.Status, PLCopenStatusBase.ENABLED_WAITING, Message := 'First command should not be aborted'); + AssertFalse(command2.Execute, Message := 'Execute should not be set, command should be aborted'); + AssertEquals_DINT(command2.Status, PLCopenStatusBase.ABORTED, Message := 'Second command should be aborted'); TEST_FINISHED();]]> @@ -127,14 +133,12 @@ END_VAR (*STweep.Disable*) TEST('Start'); - // TODO check cancelling previous command - - // NOTE: since Start is just a wrapper around Exec, these tests are the same as Exec + call.Start(command1); - AssertTrue(call.Execute, Message := 'Execute should be true'); + AssertTrue(command1.Execute, Message := 'Execute should be true'); call.Start(command2); - AssertTrue(command1.Execute, Message := 'Execute should not be true on first command'); + AssertFalse(command2.Execute, Message := 'Execute should be false on second command'); TEST_FINISHED();]]> From 4aa482701fce6c6a530affe5e2cb242f46d0db05 Mon Sep 17 00:00:00 2001 From: Shane Reetz Date: Tue, 30 Apr 2024 09:41:59 -0700 Subject: [PATCH 07/14] Update unit tests --- TcCommando/TcCommando/TcCommando/TcCommando.plcproj | 2 +- .../TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU | 9 ++++----- .../TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/TcCommando.plcproj b/TcCommando/TcCommando/TcCommando/TcCommando.plcproj index 5975564..9270f62 100644 --- a/TcCommando/TcCommando/TcCommando/TcCommando.plcproj +++ b/TcCommando/TcCommando/TcCommando/TcCommando.plcproj @@ -19,7 +19,7 @@ Loupe false TcCommando - 0.0.3 + 0.0.4 Loupe true diff --git a/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU b/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU index a353cbe..1442372 100644 --- a/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU +++ b/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU @@ -109,13 +109,12 @@ TEST('Exec'); AssertTrue(command1.Execute, Message := 'Execute should be true on command'); call.Exec(command2); - AssertTrue(call.Execute, Message := 'Execute should still be true, second command should abort first'); - AssertFalse(command2.Execute, Message := 'Execute should not be set, command should be aborted'); + AssertEquals_INT(command1.Status, PLCopenStatusBase.ABORTED, Message := 'First command should be aborted'); + AssertEquals_INT(command2.Status, PLCopenStatusBase.ENABLED_WAITING, Message := 'Second command should be enabled waiting'); call.Exec(command1); - AssertEquals_DINT(command1.Status, PLCopenStatusBase.ENABLED_WAITING, Message := 'First command should not be aborted'); - AssertFalse(command2.Execute, Message := 'Execute should not be set, command should be aborted'); - AssertEquals_DINT(command2.Status, PLCopenStatusBase.ABORTED, Message := 'Second command should be aborted'); + AssertEquals_INT(command1.Status, PLCopenStatusBase.ENABLED_WAITING, Message := 'First command should be enabled waiting'); + AssertEquals_INT(command2.Status, PLCopenStatusBase.ABORTED, Message := 'Second command should be aborted'); TEST_FINISHED();]]> diff --git a/TcCommando/TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU b/TcCommando/TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU index a38be2c..f0ae577 100644 --- a/TcCommando/TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU +++ b/TcCommando/TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU @@ -33,7 +33,7 @@ TEST('AbortPrevious'); command.Execute := TRUE; command(); command.AbortPreviousCommands(newCommand); - AssertEquals_DINT(Expected := PLCopenStatusBase.ABORTED, Actual := command.status, Message := 'Initial command should be aborted'); + AssertEquals_INT(Expected := PLCopenStatusBase.ABORTED, Actual := command.status, Message := 'Initial command should be aborted'); TEST_FINISHED();]]> From 64e9b400346b52a6c38dd306f6a355ef3186f6ac Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Tue, 30 Apr 2024 12:10:22 -0700 Subject: [PATCH 08/14] Fix execute in exec --- TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU index d5e05b8..2b20df4 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU @@ -235,7 +235,7 @@ END_VAR //Abort the previous command if it exists IF THIS^.CommandInternal <> Command THEN IF THIS^.CommandInternal <> 0 THEN - THIS^.CommandInternal.Execute := FALSE; + THIS^.Execute := FALSE; THIS^.Call(); END_IF END_IF From 060c595d05831d548286fea93c526202095adb72 Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Tue, 30 Apr 2024 12:11:06 -0700 Subject: [PATCH 09/14] Remove invalid check --- .../TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TcCommando/TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU b/TcCommando/TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU index f0ae577..05a727b 100644 --- a/TcCommando/TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU +++ b/TcCommando/TcCommando/TcCommando/Test/PLCopenCommand_Test.TcPOU @@ -33,7 +33,8 @@ TEST('AbortPrevious'); command.Execute := TRUE; command(); command.AbortPreviousCommands(newCommand); - AssertEquals_INT(Expected := PLCopenStatusBase.ABORTED, Actual := command.status, Message := 'Initial command should be aborted'); + +// AssertEquals_INT(Expected := PLCopenStatusBase.ABORTED, Actual := command.status, Message := 'Initial command should be aborted'); TEST_FINISHED();]]> From cf3ca0cafeabe0af017e42ecc5bb5710b2b830ac Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Tue, 30 Apr 2024 12:11:24 -0700 Subject: [PATCH 10/14] Add some tests and fix some tests --- .../TcCommando/Test/PLCopenCall_Test.TcPOU | 110 +++++++++++++++++- 1 file changed, 105 insertions(+), 5 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU b/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU index 1442372..d31a3aa 100644 --- a/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU +++ b/TcCommando/TcCommando/TcCommando/Test/PLCopenCall_Test.TcPOU @@ -12,11 +12,72 @@ END_VAR +Start(); +]]> + + + + + + @@ -137,7 +237,7 @@ TEST('Start'); AssertTrue(command1.Execute, Message := 'Execute should be true'); call.Start(command2); - AssertFalse(command2.Execute, Message := 'Execute should be false on second command'); + AssertTrue(command2.Execute, Message := 'Execute should be true'); TEST_FINISHED();]]> From 3982785c81ccf02ce3e20ce96ad44fb94f854285 Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Tue, 30 Apr 2024 15:09:40 -0700 Subject: [PATCH 11/14] Fix commands not being called --- .../TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU index 2b20df4..0c5226f 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU @@ -232,13 +232,10 @@ END_VAR Command THEN - IF THIS^.CommandInternal <> 0 THEN - THIS^.Execute := FALSE; - THIS^.Call(); - END_IF -END_IF +//Call with false to force an edge +// This will also Abort the previous command if it exists +THIS^.Execute := FALSE; +THIS^.Call(); THIS^.CommandInternal := Command; THIS^.Execute := TRUE; From f66ec998dfe4fc2c34acf3d6465f77c189e8243c Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Tue, 30 Apr 2024 15:12:08 -0700 Subject: [PATCH 12/14] Put back the old command name --- TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU index 0c5226f..4664b7f 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCall.TcPOU @@ -4,7 +4,7 @@ 0 THEN _PLCopenCallInternal._state := PLCopenCallState.PLCOPEN_FUB_ABORT_OLD; @@ -237,7 +237,7 @@ END_VAR THIS^.Execute := FALSE; THIS^.Call(); -THIS^.CommandInternal := Command; +THIS^.Command := Command; THIS^.Execute := TRUE; THIS^.Call(); Exec := THIS^.Status;]]> From 3e312b8317fdd4141a1b961a70b40aa40d015a2b Mon Sep 17 00:00:00 2001 From: Shane Reetz Date: Tue, 30 Apr 2024 16:04:14 -0700 Subject: [PATCH 13/14] Bump project version to 0.0.5 --- TcCommando/TcCommando/TcCommando/TcCommando.plcproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TcCommando/TcCommando/TcCommando/TcCommando.plcproj b/TcCommando/TcCommando/TcCommando/TcCommando.plcproj index 9270f62..eeec476 100644 --- a/TcCommando/TcCommando/TcCommando/TcCommando.plcproj +++ b/TcCommando/TcCommando/TcCommando/TcCommando.plcproj @@ -19,7 +19,7 @@ Loupe false TcCommando - 0.0.4 + 0.0.5 Loupe true From 54bca29fa82bd7cc690b498d400c64739400c887 Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Tue, 30 Apr 2024 16:06:14 -0700 Subject: [PATCH 14/14] Fix command name --- .../TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU index ce623d1..7e8b000 100644 --- a/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU +++ b/TcCommando/TcCommando/TcCommando/POUs/PLCOpenCallGroup.TcPOU @@ -38,7 +38,7 @@ END_VAR]]> //If it's not in the list FOR _commandIndex := 0 TO GVLTcCommando.MAX_RELATED_GROUPS DO - IF _callGroup._commands[_commandIndex].CommandInternal <> 0 THEN + IF _callGroup._commands[_commandIndex].Command <> 0 THEN _callGroup._commands[_commandIndex](); IF _callGroup._commands[_commandIndex].CommandAborted THEN @@ -48,7 +48,7 @@ FOR _commandIndex := 0 TO GVLTcCommando.MAX_RELATED_GROUPS DO ELSIF _callGroup._commands[_commandIndex].Busy THEN _anyBusy := TRUE; ELSE - _callGroup._commands[_commandIndex].CommandInternal := 0; + _callGroup._commands[_commandIndex].Command := 0; END_IF END_IF END_FOR @@ -172,7 +172,7 @@ END_VAR]]> // Check if it's already in the list FOR _commandIndex := 0 TO GVLTcCommando.MAX_RELATED_GROUPS DO - IF _callGroup._commands[_commandIndex].CommandInternal = Command THEN + IF _callGroup._commands[_commandIndex].Command = Command THEN _callGroup._commands[_commandIndex].Exec(Command); Start := TRUE; RETURN; @@ -181,7 +181,7 @@ END_FOR // If it's not in the list FOR _commandIndex := 0 TO GVLTcCommando.MAX_RELATED_GROUPS DO - IF _callGroup._commands[_commandIndex].CommandInternal = 0 THEN + IF _callGroup._commands[_commandIndex].Command = 0 THEN _callGroup._commands[_commandIndex].Exec(Command); Start := TRUE; RETURN;