From 44c57f588f9d3a47f2bf619f434efc2fdd0df19e Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Tue, 5 May 2026 13:03:11 +0200 Subject: [PATCH 1/5] Create draft PR for #1128 From cf352a1546aecff5e3900fea0415d3a032ecdb9c Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Tue, 5 May 2026 13:07:35 +0200 Subject: [PATCH 2/5] Add MC_PowerCycle variable and implement power cycling logic in MC_Power method --- .../ctrl/src/AxoCmmtAs/AxoCmmtAs.st | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st b/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st index 67476e7fc..f4ab4e3e6 100644 --- a/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st +++ b/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st @@ -1169,6 +1169,7 @@ NAMESPACE AXOpen.Components.Festo.Drives /// VAR INTERNAL MC_PowerEnable_PV : BOOL := FALSE; //Enable - previous value + MC_PowerCycle : ULINT := ULINT#0; END_VAR METHOD PUBLIC OVERRIDE MC_Power VAR_INPUT @@ -1195,37 +1196,39 @@ NAMESPACE AXOpen.Components.Festo.Drives END_IF; IF Enable THEN + MC_PowerCycle := MC_PowerCycle + ULINT#1; THIS.UpdateInputs(AxisRef); - IF _blink.Blink(THIS,T#2s,T#500ms) THEN - IF NOT MC_PowerEnable_PV THEN - _AxisReference^.Telegram750_Out.M_LIMIT_POS := 16384; - _AxisReference^.Telegram750_Out.M_LIMIT_NEG := -16384; - _AxisReference^.Telegram111_Out.MDI_ACC := TO_UINT(16384.0 * _AxisReference^.Data.OverrideAccelerationFactor); - _AxisReference^.Telegram111_Out.MDI_DEC := TO_UINT(16384.0 * _AxisReference^.Data.OverrideAccelerationFactor); - _AxisReference^.Telegram111_Out.Override_ := TO_WORD(TO_INT(16384.0 )); // * _AxisReference^.Data.OverrideVelocityFactor)); - _AxisReference^.Telegram111_Out.MDI_VELOCITY := DINT#1; - END_IF; - _AxisReference^.Telegram111_Out.STW1.on_ := TRUE; - _AxisReference^.Telegram111_Out.STW1.activateTraversing := FALSE; - _AxisReference^.Telegram111_Out.STW1.acknowledgeFault := FALSE; - // _AxisReference^.Telegram111_Out.MDI_VELOCITY := DINT#1; - // _AxisReference^.Telegram111_Out.POS_STW2.SW_Limit := TRUE; - _AxisReference^.Telegram111_Out.POS_STW2.HW_Limit := TRUE; - _AxisReference^.Telegram111_Out.STW1.noCoastStop := TRUE; - _AxisReference^.Telegram111_Out.STW1.noQuickStop := TRUE; - _AxisReference^.Telegram111_Out.STW1.enableOperation := TRUE; - _AxisReference^.Telegram111_Out.STW1.cancelTraversing := TRUE; - _AxisReference^.Telegram111_Out.STW1.intermediateStop := TRUE; - _AxisReference^.Telegram111_Out.STW1.controlByPlc := TRUE; - IF _AxisReference^.Telegram111_In.ZSW1.operationEnabled THEN - Status := TRUE; (* Status OK*) - Valid := TRUE; - ELSIF _AxisReference^.Telegram111_In.ZSW1.faultPresent = TRUE THEN - Error := TRUE; (* Set the ERROR-Output *) - Valid := TRUE; - ErrorID := TO_DINT(_AxisReference^.Telegram111_In.Fault_Code); - END_IF; - ELSE + IF NOT MC_PowerEnable_PV THEN + _AxisReference^.Telegram750_Out.M_LIMIT_POS := 16384; + _AxisReference^.Telegram750_Out.M_LIMIT_NEG := -16384; + _AxisReference^.Telegram111_Out.MDI_ACC := TO_UINT(16384.0 * _AxisReference^.Data.OverrideAccelerationFactor); + _AxisReference^.Telegram111_Out.MDI_DEC := TO_UINT(16384.0 * _AxisReference^.Data.OverrideAccelerationFactor); + _AxisReference^.Telegram111_Out.Override_ := TO_WORD(TO_INT(16384.0 )); // * _AxisReference^.Data.OverrideVelocityFactor)); + _AxisReference^.Telegram111_Out.MDI_VELOCITY := DINT#1; + END_IF; + _AxisReference^.Telegram111_Out.STW1.on_ := TRUE; + _AxisReference^.Telegram111_Out.STW1.activateTraversing := FALSE; + _AxisReference^.Telegram111_Out.STW1.acknowledgeFault := FALSE; + // _AxisReference^.Telegram111_Out.MDI_VELOCITY := DINT#1; + _AxisReference^.Telegram111_Out.POS_STW2.SW_Limit := TRUE; + _AxisReference^.Telegram111_Out.POS_STW2.HW_Limit := TRUE; + _AxisReference^.Telegram111_Out.STW1.noCoastStop := TRUE; + _AxisReference^.Telegram111_Out.STW1.noQuickStop := TRUE; + _AxisReference^.Telegram111_Out.STW1.enableOperation := TRUE; + _AxisReference^.Telegram111_Out.STW1.cancelTraversing := TRUE; + _AxisReference^.Telegram111_Out.STW1.intermediateStop := TRUE; + _AxisReference^.Telegram111_Out.STW1.controlByPlc := TRUE; + IF _AxisReference^.Telegram111_In.ZSW1.operationEnabled THEN + MC_PowerCycle := ULINT#0; + Status := TRUE; (* Status OK*) + Valid := TRUE; + ELSIF _AxisReference^.Telegram111_In.ZSW1.faultPresent = TRUE THEN + Error := TRUE; (* Set the ERROR-Output *) + Valid := TRUE; + ErrorID := TO_DINT(_AxisReference^.Telegram111_In.Fault_Code); + END_IF; + IF MC_PowerCycle >= ULINT#200 THEN + MC_PowerCycle := ULINT#0; _AxisReference^.Telegram111_Out.STW1.on_ := FALSE; _AxisReference^.Telegram111_Out.STW1.StartHoming := FALSE; _AxisReference^.Telegram111_Out.POS_STW1.MDI_MOD := FALSE; @@ -1250,7 +1253,7 @@ NAMESPACE AXOpen.Components.Festo.Drives IF NOT Enable AND MC_PowerEnable_PV THEN THIS.UpdateInputs(AxisRef); - _blink.Restore(); + MC_PowerCycle := ULINT#0; _AxisReference^.Telegram111_Out.STW1.on_ := FALSE; THIS.UpdateOutputs(AxisRef); END_IF; @@ -5556,6 +5559,7 @@ NAMESPACE AXOpen.Components.Festo.Drives END_METHOD METHOD PUBLIC OVERRIDE Restore + MC_PowerCycle := ULINT#0; MC_HomeExecute_PV := FALSE; MC_HomeErrorID := DINT#0; MC_HomeCycle := ULINT#0; @@ -5678,8 +5682,6 @@ NAMESPACE AXOpen.Components.Festo.Drives DriveStatus.Error.Id := UINT#0; Messenger.Restore(); TaskMessenger.Restore(); - _blink.Restore(); - //AxoPower_Task.Restore(); AxoStop_Task.Restore(); @@ -5740,6 +5742,4 @@ NAMESPACE AXOpen.Components.Festo.Drives RestoreTask.DoneWhen(TRUE); END_METHOD END_CLASS -END_NAMESPACE - - +END_NAMESPACE \ No newline at end of file From f4fa33765e55ed563ae407a5b566549596f53a0f Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Tue, 5 May 2026 13:08:04 +0200 Subject: [PATCH 3/5] Comment out SW_Limit assignment in AxoCmmtAs to prevent unintended behavior --- src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st b/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st index f4ab4e3e6..4684c5512 100644 --- a/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st +++ b/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st @@ -1210,7 +1210,7 @@ NAMESPACE AXOpen.Components.Festo.Drives _AxisReference^.Telegram111_Out.STW1.activateTraversing := FALSE; _AxisReference^.Telegram111_Out.STW1.acknowledgeFault := FALSE; // _AxisReference^.Telegram111_Out.MDI_VELOCITY := DINT#1; - _AxisReference^.Telegram111_Out.POS_STW2.SW_Limit := TRUE; + // _AxisReference^.Telegram111_Out.POS_STW2.SW_Limit := TRUE; _AxisReference^.Telegram111_Out.POS_STW2.HW_Limit := TRUE; _AxisReference^.Telegram111_Out.STW1.noCoastStop := TRUE; _AxisReference^.Telegram111_Out.STW1.noQuickStop := TRUE; From 5f004d3ec4428ba591f5583c53dee130f5fc6d8f Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Tue, 5 May 2026 13:17:28 +0200 Subject: [PATCH 4/5] Comment out MC_PowerCycle assignments to prevent unintended behavior --- .../ctrl/src/AxoCmmtAs/AxoCmmtAs.st | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st b/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st index 4684c5512..dc45673fd 100644 --- a/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st +++ b/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st @@ -1169,7 +1169,7 @@ NAMESPACE AXOpen.Components.Festo.Drives /// VAR INTERNAL MC_PowerEnable_PV : BOOL := FALSE; //Enable - previous value - MC_PowerCycle : ULINT := ULINT#0; + // MC_PowerCycle : ULINT := ULINT#0; END_VAR METHOD PUBLIC OVERRIDE MC_Power VAR_INPUT @@ -1196,8 +1196,9 @@ NAMESPACE AXOpen.Components.Festo.Drives END_IF; IF Enable THEN - MC_PowerCycle := MC_PowerCycle + ULINT#1; + // MC_PowerCycle := MC_PowerCycle + ULINT#1; THIS.UpdateInputs(AxisRef); + IF NOT MC_PowerEnable_PV THEN _AxisReference^.Telegram750_Out.M_LIMIT_POS := 16384; _AxisReference^.Telegram750_Out.M_LIMIT_NEG := -16384; @@ -1219,16 +1220,19 @@ NAMESPACE AXOpen.Components.Festo.Drives _AxisReference^.Telegram111_Out.STW1.intermediateStop := TRUE; _AxisReference^.Telegram111_Out.STW1.controlByPlc := TRUE; IF _AxisReference^.Telegram111_In.ZSW1.operationEnabled THEN - MC_PowerCycle := ULINT#0; + // MC_PowerCycle := ULINT#0; Status := TRUE; (* Status OK*) Valid := TRUE; + _blink.Restore(); ELSIF _AxisReference^.Telegram111_In.ZSW1.faultPresent = TRUE THEN Error := TRUE; (* Set the ERROR-Output *) Valid := TRUE; ErrorID := TO_DINT(_AxisReference^.Telegram111_In.Fault_Code); + _blink.Restore(); END_IF; - IF MC_PowerCycle >= ULINT#200 THEN - MC_PowerCycle := ULINT#0; + // IF MC_PowerCycle >= ULINT#200 THEN + // MC_PowerCycle := ULINT#0; + IF NOT _blink.Blink(THIS,T#5s,T#1s) AND NOT _AxisReference^.Telegram111_In.ZSW1.operationEnabled THEN _AxisReference^.Telegram111_Out.STW1.on_ := FALSE; _AxisReference^.Telegram111_Out.STW1.StartHoming := FALSE; _AxisReference^.Telegram111_Out.POS_STW1.MDI_MOD := FALSE; @@ -1253,7 +1257,7 @@ NAMESPACE AXOpen.Components.Festo.Drives IF NOT Enable AND MC_PowerEnable_PV THEN THIS.UpdateInputs(AxisRef); - MC_PowerCycle := ULINT#0; + // MC_PowerCycle := ULINT#0; _AxisReference^.Telegram111_Out.STW1.on_ := FALSE; THIS.UpdateOutputs(AxisRef); END_IF; @@ -5559,7 +5563,7 @@ NAMESPACE AXOpen.Components.Festo.Drives END_METHOD METHOD PUBLIC OVERRIDE Restore - MC_PowerCycle := ULINT#0; + // MC_PowerCycle := ULINT#0; MC_HomeExecute_PV := FALSE; MC_HomeErrorID := DINT#0; MC_HomeCycle := ULINT#0; @@ -5682,6 +5686,8 @@ NAMESPACE AXOpen.Components.Festo.Drives DriveStatus.Error.Id := UINT#0; Messenger.Restore(); TaskMessenger.Restore(); + _blink.Restore(); + //AxoPower_Task.Restore(); AxoStop_Task.Restore(); From 6adff99e7855abb696e884a511bf4d503fd79c34 Mon Sep 17 00:00:00 2001 From: TK <61820360+TomKovac@users.noreply.github.com> Date: Tue, 5 May 2026 14:44:14 +0200 Subject: [PATCH 5/5] xxx --- .../ctrl/src/AxoCmmtAs/AxoCmmtAs.st | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st b/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st index dc45673fd..06bcc41f2 100644 --- a/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st +++ b/src/components.festo.drives/ctrl/src/AxoCmmtAs/AxoCmmtAs.st @@ -1169,7 +1169,7 @@ NAMESPACE AXOpen.Components.Festo.Drives /// VAR INTERNAL MC_PowerEnable_PV : BOOL := FALSE; //Enable - previous value - // MC_PowerCycle : ULINT := ULINT#0; + MC_PowerCycle : ULINT := ULINT#0; END_VAR METHOD PUBLIC OVERRIDE MC_Power VAR_INPUT @@ -1196,7 +1196,7 @@ NAMESPACE AXOpen.Components.Festo.Drives END_IF; IF Enable THEN - // MC_PowerCycle := MC_PowerCycle + ULINT#1; + MC_PowerCycle := MC_PowerCycle + ULINT#1; THIS.UpdateInputs(AxisRef); IF NOT MC_PowerEnable_PV THEN @@ -1220,19 +1220,16 @@ NAMESPACE AXOpen.Components.Festo.Drives _AxisReference^.Telegram111_Out.STW1.intermediateStop := TRUE; _AxisReference^.Telegram111_Out.STW1.controlByPlc := TRUE; IF _AxisReference^.Telegram111_In.ZSW1.operationEnabled THEN - // MC_PowerCycle := ULINT#0; + MC_PowerCycle := ULINT#0; Status := TRUE; (* Status OK*) Valid := TRUE; - _blink.Restore(); ELSIF _AxisReference^.Telegram111_In.ZSW1.faultPresent = TRUE THEN Error := TRUE; (* Set the ERROR-Output *) Valid := TRUE; ErrorID := TO_DINT(_AxisReference^.Telegram111_In.Fault_Code); - _blink.Restore(); END_IF; - // IF MC_PowerCycle >= ULINT#200 THEN - // MC_PowerCycle := ULINT#0; - IF NOT _blink.Blink(THIS,T#5s,T#1s) AND NOT _AxisReference^.Telegram111_In.ZSW1.operationEnabled THEN + IF MC_PowerCycle >= ULINT#2000 THEN + MC_PowerCycle := ULINT#0; _AxisReference^.Telegram111_Out.STW1.on_ := FALSE; _AxisReference^.Telegram111_Out.STW1.StartHoming := FALSE; _AxisReference^.Telegram111_Out.POS_STW1.MDI_MOD := FALSE; @@ -1257,7 +1254,7 @@ NAMESPACE AXOpen.Components.Festo.Drives IF NOT Enable AND MC_PowerEnable_PV THEN THIS.UpdateInputs(AxisRef); - // MC_PowerCycle := ULINT#0; + MC_PowerCycle := ULINT#0; _AxisReference^.Telegram111_Out.STW1.on_ := FALSE; THIS.UpdateOutputs(AxisRef); END_IF; @@ -5563,7 +5560,7 @@ NAMESPACE AXOpen.Components.Festo.Drives END_METHOD METHOD PUBLIC OVERRIDE Restore - // MC_PowerCycle := ULINT#0; + MC_PowerCycle := ULINT#0; MC_HomeExecute_PV := FALSE; MC_HomeErrorID := DINT#0; MC_HomeCycle := ULINT#0; @@ -5686,7 +5683,6 @@ NAMESPACE AXOpen.Components.Festo.Drives DriveStatus.Error.Id := UINT#0; Messenger.Restore(); TaskMessenger.Restore(); - _blink.Restore(); //AxoPower_Task.Restore();