From 3f3fb6e2f79965631370430f6907184564c37ae0 Mon Sep 17 00:00:00 2001 From: Markus Kristensson Date: Thu, 30 Oct 2025 17:36:05 +0100 Subject: [PATCH 1/4] Add input and status bools for brake diagnostics Adds an input word to facilitate mapping diagnostics from e.g. an EL2044 terminal to monitor if the output fails. Adds status variables for brake diagnostics. --- DUTs/Axis_Structures/ST_AxisInputs.TcDUT | 1 + DUTs/Axis_Structures/ST_AxisStatus.TcDUT | 2 ++ 2 files changed, 3 insertions(+) diff --git a/DUTs/Axis_Structures/ST_AxisInputs.TcDUT b/DUTs/Axis_Structures/ST_AxisInputs.TcDUT index 69818a3..2fd570f 100644 --- a/DUTs/Axis_Structures/ST_AxisInputs.TcDUT +++ b/DUTs/Axis_Structures/ST_AxisInputs.TcDUT @@ -10,6 +10,7 @@ STRUCT bAirpadPressurized AT %I*: BOOL; //Airpad pressurized bBrakeReleased AT %I*: BOOL; //External brake released fExternalPos AT %I*: LREAL; //External measurement tool + wBrakeTerminalDiagnositics AT %I*: WORD; //External brake output terminal diagnostics. END_STRUCT END_TYPE ]]> diff --git a/DUTs/Axis_Structures/ST_AxisStatus.TcDUT b/DUTs/Axis_Structures/ST_AxisStatus.TcDUT index fe4f65b..b5044e0 100644 --- a/DUTs/Axis_Structures/ST_AxisStatus.TcDUT +++ b/DUTs/Axis_Structures/ST_AxisStatus.TcDUT @@ -49,6 +49,8 @@ STRUCT bCommandHandlerMovePermit: BOOL; // True if command handler has given permit to move bCommandHandlerBufferingCommand: BOOL; //True if CommandHandler is waiting on a permit before releasing the command bCommandHandlerTimeoutError: BOOL; //True if CommandHandler did not receive a permit in time + bBrakeDiagnosticsOk: BOOL; //True if Brake Terminal Diagnostics Ok + bBrakeDiagnosticsOverTemperature: BOOL; //True if Brake Terminal has over termperature eInternalMotionCommand: E_MotionFunctions; stSwitchInfo: ST_SwitchInfo; //Trigger/Untrigger positions and values of switches END_STRUCT From 177633ba807ddadcdb909ea1b54e95e4c94da885 Mon Sep 17 00:00:00 2001 From: Markus Kristensson Date: Fri, 20 Feb 2026 10:07:02 +0100 Subject: [PATCH 2/4] Mask brake terminal diagnostics word Masks the brake terminal diagnostics word and maps to two AxisStatus variables. --- POUs/Motion/FB_Axis.TcPOU | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/POUs/Motion/FB_Axis.TcPOU b/POUs/Motion/FB_Axis.TcPOU index 3cf7d83..33a3bc1 100644 --- a/POUs/Motion/FB_Axis.TcPOU +++ b/POUs/Motion/FB_Axis.TcPOU @@ -1640,6 +1640,13 @@ VAR_INST rtrigFwdLimit: R_TRIG; ftrigFwdLimit: F_TRIG; END_VAR + +VAR CONSTANT + BRAKE_OVER_TEMPERATURE : WORD := 16#0001; + BRAKE_OPEN_LOAD : WORD := 16#0002; + BRAKE_OVER_CURRENT : WORD := 16#0003; + BRAKE_SHORT_CIRCUIT : WORD := 16#0004; +END_VAR ]]> 0; +_stAxis.stStatus.bBrakeDiagnosticsOk := + (_stAxis.stInputs.wBrakeTerminalDiagnositics AND BRAKE_OPEN_LOAD) = 0 + AND (_stAxis.stInputs.wBrakeTerminalDiagnositics AND BRAKE_OVER_CURRENT) = 0 + AND (_stAxis.stInputs.wBrakeTerminalDiagnositics AND BRAKE_SHORT_CIRCUIT) = 0; + {info 'NOTE: The fuses controlling the outputs are currently not monitored, constituting a risk for an airpad/brake without feedback.'} IF _stAxis.stConfig.stAirpadBrake.bAirpadConnected AND NOT _stAxis.stConfig.stAirpadBrake.bExternalBrakeConnected THEN From 748745632e751de05d6d848c4ee7f0e2a42fa31f Mon Sep 17 00:00:00 2001 From: Markus Kristensson Date: Thu, 30 Oct 2025 17:41:08 +0100 Subject: [PATCH 3/4] Use the brake terminal diagnostic input Adds the diagnostic input signal to the external brake code to prevent unwanted motion when the diagnostic input fails. Since the input variable defaults to TRUE, it is still possible to use the external brake functionality without connecting the diagnostic input variable to any I/O. --- POUs/Motion/FB_Axis.TcPOU | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/POUs/Motion/FB_Axis.TcPOU b/POUs/Motion/FB_Axis.TcPOU index 33a3bc1..55e731e 100644 --- a/POUs/Motion/FB_Axis.TcPOU +++ b/POUs/Motion/FB_Axis.TcPOU @@ -532,6 +532,7 @@ CASE eExternalBrake OF IF TON_DelayBrakeRelease.Q THEN IF NOT _stAxis.stStatus.bEnabled OR _stAxis.stStatus.bError + OR NOT _stAxis.stStatus.bBrakeDiagnosticsOk OR TON_BrakeOpeningTimeoutWhenFeedback.Q THEN _stAxis.stControl.bEnable := FALSE; _stAxis.stControl.bReleaseBrake := FALSE; @@ -543,6 +544,7 @@ CASE eExternalBrake OF END_IF IF _stAxis.stControl.bReleaseBrake + AND _stAxis.stStatus.bBrakeDiagnosticsOk AND ((_stAxis.stConfig.stAirpadBrake.bExternalBrakeFeedbackConnected AND _stAxis.stInputs.bBrakeReleased) OR NOT _stAxis.stConfig.stAirpadBrake.bExternalBrakeFeedbackConnected) THEN @@ -576,9 +578,10 @@ CASE eExternalBrake OF _stAxis.stControl.bEnable := FALSE; bEnableAmp := FALSE; eExternalBrake := E_ExternalBrake.eBrakeEngaged; - ELSIF _stAxis.stConfig.stAirpadBrake.bExternalBrakeFeedbackConnected - AND _stAxis.stControl.bReleaseBrake - AND NOT _stAxis.stInputs.bBrakeReleased THEN + ELSIF ((_stAxis.stConfig.stAirpadBrake.bExternalBrakeFeedbackConnected + AND NOT _stAxis.stInputs.bBrakeReleased) + OR NOT _stAxis.stStatus.bBrakeDiagnosticsOk) + AND _stAxis.stControl.bReleaseBrake THEN _stAxis.stControl.bReleaseBrake := FALSE; _stAxis.stControl.bEnable := FALSE; bEnableAmp := FALSE; @@ -612,6 +615,7 @@ END_CASE bReady := eExternalBrake = E_ExternalBrake.eBrakeReleased + AND _stAxis.stStatus.bBrakeDiagnosticsOk AND ((_stAxis.stConfig.stAirpadBrake.bExternalBrakeFeedbackConnected AND _stAxis.stInputs.bBrakeReleased) OR NOT _stAxis.stConfig.stAirpadBrake.bExternalBrakeFeedbackConnected); From bd7636fcf722bdfee11a0f49518f0c7eeda5da30 Mon Sep 17 00:00:00 2001 From: Markus Kristensson Date: Fri, 20 Feb 2026 10:09:14 +0100 Subject: [PATCH 4/4] Update warning note message --- POUs/Motion/FB_Axis.TcPOU | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/POUs/Motion/FB_Axis.TcPOU b/POUs/Motion/FB_Axis.TcPOU index 55e731e..cb53bbf 100644 --- a/POUs/Motion/FB_Axis.TcPOU +++ b/POUs/Motion/FB_Axis.TcPOU @@ -1677,7 +1677,7 @@ _stAxis.stStatus.bBrakeDiagnosticsOk := AND (_stAxis.stInputs.wBrakeTerminalDiagnositics AND BRAKE_OVER_CURRENT) = 0 AND (_stAxis.stInputs.wBrakeTerminalDiagnositics AND BRAKE_SHORT_CIRCUIT) = 0; -{info 'NOTE: The fuses controlling the outputs are currently not monitored, constituting a risk for an airpad/brake without feedback.'} +{info 'NOTE: If terminal diagnostics is not used, a risk constitutes for an airpad/brake without feedback.'} IF _stAxis.stConfig.stAirpadBrake.bAirpadConnected AND NOT _stAxis.stConfig.stAirpadBrake.bExternalBrakeConnected THEN _stAxis.stStatus.bAxisReadyToMove :=