From 036c33d47508848fc1f950d65e362949607b6de2 Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Mon, 13 May 2024 14:34:56 -0700 Subject: [PATCH 1/6] Add support for PLCOpenCall --- .../TcSequencer/POUs/Sequencer.TcPOU | 465 ++++++++++++------ .../Sequencer/TcSequencer/TcSequencer.plcproj | 5 + .../Sequencer/_Config/PLC/TcSequencer.xti | 4 +- 3 files changed, 309 insertions(+), 165 deletions(-) diff --git a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU index 5d1e845..e2307be 100644 --- a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU @@ -1,18 +1,25 @@  - - @@ -23,88 +30,105 @@ END_VAR - - + - +Aborted := _command.Aborted(); +]]> - - - + _commandIndex : INT; + _anyAbort : BOOL; + _anyBusy : BOOL; + _anyError : BOOL; +END_VAR +]]> - - - - - + - +CurrentStep := _sequence.stepHandler.currentStep; +]]> - - _sequence.lastRequestNumber THEN - _sequence.lastRequestNumber := _sequence.stepHandler.RequestNumber; - _sequence.onEntry := TRUE; - _sequence.onExit := FALSE; + _sequence.lastRequestNumber := _sequence.stepHandler.RequestNumber; + _sequence.onEntry := TRUE; + _sequence.onExit := FALSE; ELSE - _sequence.onEntry := FALSE; + _sequence.onEntry := FALSE; END_IF //The start step is used to detect if the @@ -129,111 +153,138 @@ _sequence.statusChecked := FALSE; _sequence.errorHandled := FALSE; IF _sequence.onExit THEN - DoStep := SEQUENCE_STEP.NO_STEP; + DoStep := SEQUENCE_STEP.NO_STEP; ELSE - //Return the state - DoStep := _sequence.currentStep; -END_IF]]> + //Return the state + DoStep := _sequence.currentStep; +END_IF +]]> - - + - +Errored := _command.Errored(ID); +]]> - - - - - + _sequence.stepHandler := stepHandler; +END_IF +]]> - - + - - + - + - +IsAbort := _sequence.isAbort; +]]> - + - + - +IsDone := _sequence.isDone; +]]> - + - +IsError := _sequence.isError; +]]> - @@ -256,48 +307,56 @@ END_IF]]> - - +OnEntry := _sequence.onEntry; +]]> - - = 0 THEN - LogMessage(1, 'Step Abort'); - _sequence.errorHandled := TRUE; - setNextStep(nextStep); - END_IF + IF nextStep >= 0 THEN + LogMessage(1, 'Step Abort'); + _sequence.errorHandled := TRUE; + setNextStep(nextStep); + END_IF - OnError := TRUE; + OnError := TRUE; ELSE - OnError := FALSE; -END_IF]]> + OnError := FALSE; +END_IF +]]> - - - - = 0 THEN - LogMessage(1, 'Step Failure'); - setNextStep(nextStep); - END_IF + //On failure will not set the step if a more specific handler already set the step + IF _sequence.errorHandled = FALSE AND nextStep >= 0 THEN + LogMessage(1, 'Step Failure'); + setNextStep(nextStep); + END_IF - OnFailure := TRUE; + OnFailure := TRUE; ELSE - OnFailure := FALSE; -END_IF]]> + OnFailure := FALSE; +END_IF +]]> - - = 0 THEN - LogMessage(1, 'Step Success'); - setNextStep(nextStep); - END_IF + IF nextStep >= 0 THEN + LogMessage(1, 'Step Success'); + setNextStep(nextStep); + END_IF - OnSuccess := TRUE; + OnSuccess := TRUE; ELSE - OnSuccess := FALSE; + OnSuccess := FALSE; END_IF ]]> - - - - - - - + + + + + + + + + + + + + + + + + + - - - - +_sequence.activeTasks.ResetCommands(); +]]> - - +THIS^(); +]]> - - - - - - - - - + _commandIndex : INT; +END_VAR +]]> - - - +RequestStep(startStep); +]]> - - - diff --git a/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj b/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj index 105b86c..74abab4 100644 --- a/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj +++ b/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj @@ -102,6 +102,11 @@ Content + + + TcCommando, 0.0.6 (Loupe) + + diff --git a/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti b/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti index 6e59021..43d4b92 100644 --- a/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti +++ b/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti @@ -1,7 +1,7 @@ - + - + TcSequencer Instance {08500001-0000-0000-F000-000000000064} From 84c1f6f2f8d61d3fae4aa8c01ea1b65fc6fc065b Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Mon, 13 May 2024 15:36:27 -0700 Subject: [PATCH 2/6] Add PLCOpen call support to Sequencer --- .../TcSequencer/Example/ExampleProg1.TcPOU | 22 +++++ .../TcSequencer/Example/ExampleSeq1.TcPOU | 56 ++++++++++++ .../TcSequencer/Example/IMOCK_EM.TcIO | 23 +++++ .../TcSequencer/Example/Mock_EM.TcPOU | 86 +++++++++++++++++++ .../TcSequencer/Interfaces/ISequence.TcIO | 3 +- .../TcSequencer/POUs/Sequencer.TcPOU | 61 +++++++------ Sequencer/Sequencer/TcSequencer/PlcTask.TcTTO | 3 + .../Sequencer/TcSequencer/TcSequencer.plcproj | 15 +++- .../TcSequencer/Test/Sequencer_Test.TcPOU | 23 +++-- .../Sequencer/_Config/PLC/TcSequencer.xti | 2 +- 10 files changed, 253 insertions(+), 41 deletions(-) create mode 100644 Sequencer/Sequencer/TcSequencer/Example/ExampleProg1.TcPOU create mode 100644 Sequencer/Sequencer/TcSequencer/Example/ExampleSeq1.TcPOU create mode 100644 Sequencer/Sequencer/TcSequencer/Example/IMOCK_EM.TcIO create mode 100644 Sequencer/Sequencer/TcSequencer/Example/Mock_EM.TcPOU diff --git a/Sequencer/Sequencer/TcSequencer/Example/ExampleProg1.TcPOU b/Sequencer/Sequencer/TcSequencer/Example/ExampleProg1.TcPOU new file mode 100644 index 0000000..20752bc --- /dev/null +++ b/Sequencer/Sequencer/TcSequencer/Example/ExampleProg1.TcPOU @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/Example/ExampleSeq1.TcPOU b/Sequencer/Sequencer/TcSequencer/Example/ExampleSeq1.TcPOU new file mode 100644 index 0000000..e524d8d --- /dev/null +++ b/Sequencer/Sequencer/TcSequencer/Example/ExampleSeq1.TcPOU @@ -0,0 +1,56 @@ + + + + + + + + + \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/Example/IMOCK_EM.TcIO b/Sequencer/Sequencer/TcSequencer/Example/IMOCK_EM.TcIO new file mode 100644 index 0000000..c11a5b2 --- /dev/null +++ b/Sequencer/Sequencer/TcSequencer/Example/IMOCK_EM.TcIO @@ -0,0 +1,23 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/Example/Mock_EM.TcPOU b/Sequencer/Sequencer/TcSequencer/Example/Mock_EM.TcPOU new file mode 100644 index 0000000..a197161 --- /dev/null +++ b/Sequencer/Sequencer/TcSequencer/Example/Mock_EM.TcPOU @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO b/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO index df3c4ab..f57b5c0 100644 --- a/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO +++ b/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO @@ -89,7 +89,7 @@ END_VAR @@ -97,6 +97,7 @@ END_VAR diff --git a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU index e2307be..5c89506 100644 --- a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU @@ -1,26 +1,18 @@  - - + @@ -126,8 +118,8 @@ END_VAR - = 0 THEN - LogMessage(1, 'Step Abort'); - _sequence.errorHandled := TRUE; - setNextStep(nextStep); - END_IF + IF nextStep >= 0 THEN + LogMessage(1, 'Step Abort'); + _sequence.errorHandled := TRUE; + setNextStep(nextStep); + END_IF - OnAbort := TRUE; + OnAbort := TRUE; ELSE - OnAbort := FALSE; -END_IF]]> + OnAbort := FALSE; +END_IF +]]> @@ -557,7 +551,7 @@ _sequence.stepHandler._SequenceError(); _sequence.activeTasks.ResetCommands(); _sequence.onExit := TRUE; Aborted(); -]]> +SequenceAbort := TRUE;]]> @@ -574,14 +568,14 @@ _sequence.stepHandler._SequenceComplete(); _sequence.activeTasks.ResetCommands(); _sequence.onExit := TRUE; Finished(); -]]> +SequenceComplete := FALSE;]]> @@ -593,6 +587,7 @@ _sequence.stepHandler._SequenceError(); _sequence.activeTasks.ResetCommands(); _sequence.onExit := TRUE; Errored(ErrorCode); +SequenceError := TRUE; ]]> @@ -639,13 +634,17 @@ END_IF 0 THEN + Status.Start(_command); +ELSE + _command.Execute := TRUE; +END_IF ]]> diff --git a/Sequencer/Sequencer/TcSequencer/PlcTask.TcTTO b/Sequencer/Sequencer/TcSequencer/PlcTask.TcTTO index af65bbc..71fffba 100644 --- a/Sequencer/Sequencer/TcSequencer/PlcTask.TcTTO +++ b/Sequencer/Sequencer/TcSequencer/PlcTask.TcTTO @@ -7,6 +7,9 @@ TESTPRG + + ExampleProg1 + {4cd0da51-1b2f-4144-a490-9fdce30adf94} {a07683cb-0bbc-40c5-9013-3975ddd93290} {c915b013-bf2d-47e3-a454-81902059cacd} diff --git a/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj b/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj index 74abab4..fa5c6e0 100644 --- a/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj +++ b/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj @@ -19,7 +19,7 @@ Loupe false TcSequencer - 0.0.4 + 0.0.5 true @@ -39,6 +39,18 @@ Code + + Code + + + Code + + + Code + + + Code + Code @@ -68,6 +80,7 @@ + diff --git a/Sequencer/Sequencer/TcSequencer/Test/Sequencer_Test.TcPOU b/Sequencer/Sequencer/TcSequencer/Test/Sequencer_Test.TcPOU index 62c4a81..cd37c5f 100644 --- a/Sequencer/Sequencer/TcSequencer/Test/Sequencer_Test.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/Test/Sequencer_Test.TcPOU @@ -47,6 +47,7 @@ TEST_FINISHED();]]> VAR sequencer : Sequencer(0); outputVal : BOOL; + Command : PLCopenCommand; END_VAR ]]> @@ -56,9 +57,12 @@ END_VAR TEST('SequenceOnAbort'); sequencer.RequestStep(1); - sequencer.SequenceAbort(0, 'Error message'); - sequencer.Run(); - outputVal := sequencer.OnAbort(1); + sequencer.DoStep(); + sequencer.Start(Command); + Command.Execute := TRUE; + IF sequencer.OnAbort(-1) THEN + outputVal := sequencer.SequenceAbort(1, 'Command aborted'); + END_IF AssertTrue(Condition := outputVal, Message := 'Abort should be true'); TEST_FINISHED();]]> @@ -79,7 +83,7 @@ END_VAR]]> TEST('OnEntry'); - sequencer.StartSequence(); + sequencer.StartSequence(0); sequencer.DoStep(); AssertTrue(Condition := sequencer.onEntry(), Message := 'onEntry should evaluate TRUE on first pass through a new step'); sequencer.DoStep(); @@ -93,6 +97,7 @@ TEST_FINISHED();]]> VAR sequencer : Sequencer(0); outputVal : BOOL; + Command : PLCopenCommand; END_VAR ]]> @@ -102,9 +107,13 @@ END_VAR TEST('SequenceOnError'); sequencer.RequestStep(1); - sequencer.SequenceError(0, 'Test Error'); - sequencer.Run(); - outputVal := sequencer.OnError(1); + sequencer.DoStep(); + sequencer.Start(Command); + Command.Errored(1); + IF sequencer.OnError(1) THEN + outputVal := sequencer.SequenceError(0, 'Test Error'); + END_IF + AssertTrue(Condition := outputVal, Message := 'Error should be true'); TEST_FINISHED();]]> diff --git a/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti b/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti index 43d4b92..dd26260 100644 --- a/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti +++ b/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti @@ -1,7 +1,7 @@ - + TcSequencer Instance {08500001-0000-0000-F000-000000000064} From b864c7f177c71b66aa01b911afeeb8df31e35708 Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Mon, 20 May 2024 15:51:31 -0700 Subject: [PATCH 3/6] remove step handler and active task from structure --- Sequencer/Sequencer/TcSequencer.tsproj | 4 +- .../TcSequencer/DUTs/SequenceType.TcDUT | 3 - .../TcSequencer/POUs/Sequencer.TcPOU | 66 ++++++++----------- .../Sequencer/TcSequencer/TcSequencer.plcproj | 32 ++++----- .../TcSequencer/Test/Sequencer_Test.TcPOU | 19 ++++-- .../Test/StepManagerBasic_Test.TcPOU | 3 +- .../Sequencer/TcSequencer/Test/TESTPRG.TcPOU | 3 +- .../Sequencer/_Config/PLC/TcSequencer.xti | 2 +- 8 files changed, 62 insertions(+), 70 deletions(-) diff --git a/Sequencer/Sequencer/TcSequencer.tsproj b/Sequencer/Sequencer/TcSequencer.tsproj index cecaa79..cd5841e 100644 --- a/Sequencer/Sequencer/TcSequencer.tsproj +++ b/Sequencer/Sequencer/TcSequencer.tsproj @@ -1,6 +1,6 @@ - - + + diff --git a/Sequencer/Sequencer/TcSequencer/DUTs/SequenceType.TcDUT b/Sequencer/Sequencer/TcSequencer/DUTs/SequenceType.TcDUT index 4243131..bbea227 100644 --- a/Sequencer/Sequencer/TcSequencer/DUTs/SequenceType.TcDUT +++ b/Sequencer/Sequencer/TcSequencer/DUTs/SequenceType.TcDUT @@ -16,9 +16,6 @@ isAbort : BOOL; isError : BOOL; - stepHandler : IStepManager; - activeTasks : PLCopenCallGroup; - errorHandled : BOOL; END_STRUCT diff --git a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU index 5c89506..b61359e 100644 --- a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU @@ -8,6 +8,8 @@ END_VAR VAR _sequence : SequenceType; _command : PLCopenCommand; + _activeTasks : PLCopenCallGroup; + _stepHandler : IStepManager; _baseManager : StepManagerBasic; END_VAR ]]> @@ -52,12 +54,6 @@ AbortPreviousCommands := _command.AbortPreviousCommands(newCommand); @@ -103,7 +99,7 @@ PROPERTY CurrentStep : ENUM @@ -120,16 +116,16 @@ END_VAR IF THIS^.Consume THEN - _sequence.stepHandler._RequestStep(startStep); + _stepHandler._RequestStep(startStep); END_IF -_sequence.currentStep := _sequence.stepHandler.currentStep; +_sequence.currentStep := _stepHandler.currentStep; //If the current step has changed, // Set the flag for onEntry() -IF _sequence.stepHandler.RequestNumber <> _sequence.lastRequestNumber THEN +IF _stepHandler.RequestNumber <> _sequence.lastRequestNumber THEN - _sequence.lastRequestNumber := _sequence.stepHandler.RequestNumber; + _sequence.lastRequestNumber := _stepHandler.RequestNumber; _sequence.onEntry := TRUE; _sequence.onExit := FALSE; ELSE @@ -200,9 +196,9 @@ END_VAR // Copyright (c) 2024 Loupe (https://loupe.team), provided under the MIT License. IF stepHandler = 0 THEN - _sequence.stepHandler := _baseManager; + _stepHandler := _baseManager; ELSE - _sequence.stepHandler := stepHandler; + _stepHandler := stepHandler; END_IF ]]> @@ -303,9 +299,6 @@ END_IF - @@ -475,7 +464,7 @@ END_VAR @@ -487,7 +476,7 @@ METHOD ReportFinished : BOOL @@ -502,7 +491,7 @@ END_VAR @@ -519,7 +508,7 @@ END_VAR // Copyright (c) 2024 Loupe (https://loupe.team), provided under the MIT License. RequestStep(nextStep); -_sequence.activeTasks.ResetCommands(); +_activeTasks.ResetCommands(); ]]> @@ -547,8 +536,8 @@ END_VAR @@ -564,8 +553,8 @@ END_VAR @@ -583,8 +572,8 @@ END_VAR @@ -612,15 +601,12 @@ METHOD Start : BOOL VAR_INPUT Command : IPLCopenCommand; END_VAR -VAR - _commandIndex : INT; -END_VAR ]]> - - + + "<ProjectRoot>" {192FAD59-8248-4824-A8DE-9177C94C195A} @@ -147,7 +147,7 @@ bActive - False + True 4 @@ -156,7 +156,7 @@ bActive - False + True 33 @@ -165,7 +165,7 @@ bActive - False + True 6 @@ -174,7 +174,7 @@ bActive - False + True 27 @@ -183,7 +183,7 @@ bActive - False + True 28 @@ -192,7 +192,7 @@ bActive - False + True @@ -219,14 +219,14 @@ - - - System.Boolean - System.Collections.Hashtable - {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} - System.String - - + + + System.Boolean + System.Collections.Hashtable + {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} + System.String + + \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/Test/Sequencer_Test.TcPOU b/Sequencer/Sequencer/TcSequencer/Test/Sequencer_Test.TcPOU index cd37c5f..650821b 100644 --- a/Sequencer/Sequencer/TcSequencer/Test/Sequencer_Test.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/Test/Sequencer_Test.TcPOU @@ -17,7 +17,8 @@ OnEntry(); CurrentAndRequestStep();]]> - - - - - - - - - + TcSequencer Instance {08500001-0000-0000-F000-000000000064} From b4336c9c6e39852b3cb53dd31e01da782284176f Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Mon, 20 May 2024 16:45:17 -0700 Subject: [PATCH 4/6] Improve consistency --- .../TcSequencer/DUTs/SequenceCommand.TcDUT | 12 ++ .../TcSequencer/Example/Mock_EM.TcPOU | 2 +- .../TcSequencer/Interfaces/ISequence.TcIO | 2 +- .../TcSequencer/Interfaces/IStepManager.TcIO | 40 ++-- .../TcSequencer/POUs/Sequencer.TcPOU | 184 ++++++++---------- .../TcSequencer/POUs/StepManagerBasic.TcPOU | 74 +++---- .../Sequencer/TcSequencer/TcSequencer.plcproj | 5 +- .../Test/StepManagerBasic_Test.TcPOU | 6 +- .../Sequencer/_Config/PLC/TcSequencer.xti | 2 +- 9 files changed, 156 insertions(+), 171 deletions(-) create mode 100644 Sequencer/Sequencer/TcSequencer/DUTs/SequenceCommand.TcDUT diff --git a/Sequencer/Sequencer/TcSequencer/DUTs/SequenceCommand.TcDUT b/Sequencer/Sequencer/TcSequencer/DUTs/SequenceCommand.TcDUT new file mode 100644 index 0000000..c016185 --- /dev/null +++ b/Sequencer/Sequencer/TcSequencer/DUTs/SequenceCommand.TcDUT @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/Example/Mock_EM.TcPOU b/Sequencer/Sequencer/TcSequencer/Example/Mock_EM.TcPOU index a197161..e5dd063 100644 --- a/Sequencer/Sequencer/TcSequencer/Example/Mock_EM.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/Example/Mock_EM.TcPOU @@ -10,7 +10,7 @@ END_VAR VAR _MoveUp : PLCopenCommand; _MoveDown : PLCopenCommand; - _HeightGroup : PLCopenCommandGroup := (commands := [_MoveUp, _MoveDown, 18(0)]); + _HeightGroup : PLCopenExclusiveGroup := (commands := [_MoveUp, _MoveDown, 18(0)]); t : TON; Up : BOOL; Down : BOOL; diff --git a/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO b/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO index f57b5c0..4a429c6 100644 --- a/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO +++ b/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO @@ -97,7 +97,7 @@ END_VAR diff --git a/Sequencer/Sequencer/TcSequencer/Interfaces/IStepManager.TcIO b/Sequencer/Sequencer/TcSequencer/Interfaces/IStepManager.TcIO index 8618958..74b926a 100644 --- a/Sequencer/Sequencer/TcSequencer/Interfaces/IStepManager.TcIO +++ b/Sequencer/Sequencer/TcSequencer/Interfaces/IStepManager.TcIO @@ -3,42 +3,42 @@ - - + + + + + + + + + + + + + - - + - - + - - + - - - - - - - - - - - - \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU index b61359e..f8fb1e9 100644 --- a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU @@ -1,13 +1,13 @@  - - - + + + - @@ -44,14 +44,13 @@ VAR_INPUT END_VAR ]]> - - + @@ -62,9 +61,9 @@ METHOD PRIVATE CheckStatus : BOOL IF NOT _sequence.statusChecked THEN _sequence.statusChecked := TRUE; // Cache the abort so there's a consistent status for the whole state - _sequence.isError := _activeTasks.IsError; - _sequence.isAbort := _activeTasks.IsAbort; - _sequence.isDone := _activeTasks.IsDone; + _sequence.isError := _activeTasks.Error; + _sequence.isAbort := _activeTasks.CommandAborted; + _sequence.isDone := _activeTasks.Done; END_IF ]]> @@ -79,10 +78,9 @@ VAR END_VAR ]]> - @@ -111,12 +109,11 @@ VAR END_VAR ]]> - - @@ -168,21 +164,38 @@ Errored := _command.Errored(ID); + + + + + + - - + + + + + + + - - + @@ -232,7 +244,7 @@ IsAbort := _sequence.isAbort; - + @@ -249,7 +261,7 @@ IsDone := _sequence.isDone; - + @@ -406,13 +418,13 @@ END_VAR @@ -436,50 +448,11 @@ END_VAR - - - - - - - - - - - - - - - - - - - @@ -508,11 +480,11 @@ END_VAR // Copyright (c) 2024 Loupe (https://loupe.team), provided under the MIT License. RequestStep(nextStep); -_activeTasks.ResetCommands(); +_activeTasks.ResetStatus(); ]]> - + @@ -533,11 +505,10 @@ VAR_INPUT END_VAR ]]> - @@ -553,11 +524,11 @@ END_VAR +SequenceComplete := TRUE;]]> @@ -572,8 +543,8 @@ END_VAR - - + +VAR + _status : PLCopenStatusBase; +END_VAR]]> PLCopenStatusBase.BUSY THEN // TODO: All out of commands.. Throw an error sequenceError(10000, 'Too Many Commands in 1 step'); - Start := FALSE; -ELSE - Start := TRUE; END_IF +Start := _status; ]]> - + 0 THEN - Status.Start(_command); + Status.Start(Command.Start); ELSE - _command.Execute := TRUE; + Command.Start.Execute := TRUE; END_IF ]]> @@ -647,7 +617,7 @@ END_VAR diff --git a/Sequencer/Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU b/Sequencer/Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU index 24d085f..83f9d43 100644 --- a/Sequencer/Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU @@ -11,8 +11,37 @@ END_VAR]]> - - + + + + + + + + + + + + + + + + + + + @@ -23,8 +52,8 @@ _requestNumber := _requestNumber + 1; _currentStep := nextStep;]]> - - + _currentStep := SEQUENCE_STEP.NO_STEP;]]> - - + - - + - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj b/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj index 9797027..42dafe5 100644 --- a/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj +++ b/Sequencer/Sequencer/TcSequencer/TcSequencer.plcproj @@ -33,6 +33,9 @@ + + Code + Code @@ -117,7 +120,7 @@ - TcCommando, 0.0.6 (Loupe) + TcCommando, 0.0.7 (Loupe) diff --git a/Sequencer/Sequencer/TcSequencer/Test/StepManagerBasic_Test.TcPOU b/Sequencer/Sequencer/TcSequencer/Test/StepManagerBasic_Test.TcPOU index 53a5d7d..7f146b9 100644 --- a/Sequencer/Sequencer/TcSequencer/Test/StepManagerBasic_Test.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/Test/StepManagerBasic_Test.TcPOU @@ -29,7 +29,7 @@ END_VAR (*STweep.Disable*) TEST('RequestStep'); - stepManager._RequestStep(2); + stepManager.RequestStep(2); AssertEquals_UDINT(Expected := 2, Actual := stepManager.currentStep, 'Current Step shall be requested step'); TEST_FINISHED();]]> @@ -46,10 +46,10 @@ END_VAR (*STweep.Disable*) TEST('Reset'); - stepManager._RequestStep(20); + stepManager.RequestStep(20); AssertEquals_UDINT(Expected := 20, Actual := stepManager.currentStep, 'Confirm current step is not default'); - stepManager._Reset(); + stepManager.Reset(); AssertEquals_UDINT(Expected := SEQUENCE_STEP.NO_STEP, Actual := stepManager.currentStep, 'Reset should have put current step back to default'); TEST_FINISHED();]]> diff --git a/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti b/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti index d62c977..81cd684 100644 --- a/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti +++ b/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti @@ -1,7 +1,7 @@ - + TcSequencer Instance {08500001-0000-0000-F000-000000000064} From 6f0eb4cb0abb1c47c0eecc119f2de8f29b538009 Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Tue, 21 May 2024 09:41:28 -0700 Subject: [PATCH 5/6] Add impl suffix to step manager methods --- .../TcSequencer/Interfaces/IStepManager.TcIO | 26 +-- .../TcSequencer/POUs/Sequencer.TcPOU | 198 ++---------------- .../TcSequencer/POUs/StepManagerBasic.TcPOU | 33 +-- .../Test/StepManagerBasic_Test.TcPOU | 12 +- .../Sequencer/_Config/PLC/TcSequencer.xti | 2 +- 5 files changed, 54 insertions(+), 217 deletions(-) diff --git a/Sequencer/Sequencer/TcSequencer/Interfaces/IStepManager.TcIO b/Sequencer/Sequencer/TcSequencer/Interfaces/IStepManager.TcIO index 74b926a..1b016e4 100644 --- a/Sequencer/Sequencer/TcSequencer/Interfaces/IStepManager.TcIO +++ b/Sequencer/Sequencer/TcSequencer/Interfaces/IStepManager.TcIO @@ -3,40 +3,42 @@ - - + + - - + + - - + - - + - - + - - + diff --git a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU index f8fb1e9..a334667 100644 --- a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU @@ -1,7 +1,7 @@  - - - - - - - - - - - - - - - - - - - - - - - - @@ -113,16 +69,16 @@ END_VAR IF Command.Start.Consume THEN - _stepHandler.RequestStep(startStep); + _stepHandler.RequestStepImpl(startStep); END_IF -_sequence.currentStep := _stepHandler.currentStep; +_sequence.currentStep := _stepHandler.CurrentStepImpl; //If the current step has changed, // Set the flag for onEntry() -IF _stepHandler.RequestNumber <> _sequence.lastRequestNumber THEN +IF _stepHandler.RequestNumberImpl <> _sequence.lastRequestNumber THEN - _sequence.lastRequestNumber := _stepHandler.RequestNumber; + _sequence.lastRequestNumber := _stepHandler.RequestNumberImpl; _sequence.onEntry := TRUE; _sequence.onExit := FALSE; ELSE @@ -146,55 +102,6 @@ END_IF ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -407,52 +303,6 @@ END_IF ]]> - - - - - - - - - - - - - - - - - - - - - @@ -507,10 +357,10 @@ END_VAR @@ -524,10 +374,10 @@ END_VAR @@ -543,10 +393,10 @@ END_VAR @@ -561,7 +411,7 @@ END_VAR @@ -604,23 +454,5 @@ END_IF ]]> - - - - - - - - - \ No newline at end of file diff --git a/Sequencer/Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU b/Sequencer/Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU index 83f9d43..022e085 100644 --- a/Sequencer/Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU @@ -11,8 +11,8 @@ END_VAR]]> - - + +CurrentStepImpl := _CurrentStep;]]> - + +RequestNumberImpl := _requestNumber;]]> - - + @@ -52,8 +52,8 @@ _requestNumber := _requestNumber + 1; _currentStep := nextStep;]]> - - + _currentStep := SEQUENCE_STEP.NO_STEP;]]> - - + - - + + @@ -46,11 +46,11 @@ END_VAR (*STweep.Disable*) TEST('Reset'); - stepManager.RequestStep(20); - AssertEquals_UDINT(Expected := 20, Actual := stepManager.currentStep, 'Confirm current step is not default'); + stepManager.RequestStepImpl(20); + AssertEquals_UDINT(Expected := 20, Actual := stepManager.CurrentStepImpl, 'Confirm current step is not default'); - stepManager.Reset(); - AssertEquals_UDINT(Expected := SEQUENCE_STEP.NO_STEP, Actual := stepManager.currentStep, 'Reset should have put current step back to default'); + stepManager.ResetImpl(); + AssertEquals_UDINT(Expected := SEQUENCE_STEP.NO_STEP, Actual := stepManager.CurrentStepImpl, 'Reset should have put current step back to default'); TEST_FINISHED();]]> diff --git a/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti b/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti index 81cd684..2c8502a 100644 --- a/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti +++ b/Sequencer/Sequencer/_Config/PLC/TcSequencer.xti @@ -1,7 +1,7 @@ - + TcSequencer Instance {08500001-0000-0000-F000-000000000064} From ec0f106e2538cd9fe0a4d2664976d598d5437678 Mon Sep 17 00:00:00 2001 From: Josh Polansky Date: Thu, 23 May 2024 11:39:34 -0700 Subject: [PATCH 6/6] Add methods to set the step manager on a sequence --- .../Sequencer/TcSequencer/Interfaces/ISequence.TcIO | 7 +++++++ Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU | 10 ++++++++++ .../Sequencer/TcSequencer/POUs/StepManagerBasic.TcPOU | 7 ++++--- Sequencer/Sequencer/_Config/PLC/TcSequencer.xti | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO b/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO index 4a429c6..0a071fe 100644 --- a/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO +++ b/Sequencer/Sequencer/TcSequencer/Interfaces/ISequence.TcIO @@ -92,6 +92,13 @@ VAR_INPUT ErrorCode : INT; ErrorMessage : STRING; END_VAR +]]> + + + diff --git a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU index a334667..432d5d8 100644 --- a/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU +++ b/Sequencer/Sequencer/TcSequencer/POUs/Sequencer.TcPOU @@ -415,6 +415,16 @@ _stepHandler.RequestStepImpl(nextStep); ]]> + + + + + + + ErrorCode : INT; + ErrorMessage : STRING; +END_VAR +]]> - + TcSequencer Instance {08500001-0000-0000-F000-000000000064}