From 8b3f7ba0818654339a52f537085ce244e706e26a Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Mon, 1 Jun 2026 17:33:25 +0200 Subject: [PATCH 1/2] wip remove task timeout krc5 --- .../ctrl/src/AxoKrc5/v_5_x_x/AxoKrc5.st | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/src/components.kuka.robotics/ctrl/src/AxoKrc5/v_5_x_x/AxoKrc5.st b/src/components.kuka.robotics/ctrl/src/AxoKrc5/v_5_x_x/AxoKrc5.st index 7bd774d01..4886e1e76 100644 --- a/src/components.kuka.robotics/ctrl/src/AxoKrc5/v_5_x_x/AxoKrc5.st +++ b/src/components.kuka.robotics/ctrl/src/AxoKrc5/v_5_x_x/AxoKrc5.st @@ -496,9 +496,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x END_IF; THIS.CallTimers(TRUE); - StartAtMainTask.ThrowWhen(_errorTimer.output ); Status.Action.Id := TO_UINT(_power_progress); - StartAtMainTask.ThrowWhen(StartAtMainTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StartAtMainTask timeout.#>'); END_IF; IF StartAtMainTask.DoneReached() THEN Status.Action.Id := UINT#101; @@ -648,9 +646,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x END_IF; THIS.CallTimers(TRUE); - StartMotorsAndProgramTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); - StartMotorsAndProgramTask.ThrowWhen(StartMotorsAndProgramTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StartMotorsAndProgramTask timeout.#>'); END_IF; IF StartMotorsAndProgramTask.DoneReached() THEN Status.Action.Id := UINT#111; @@ -933,9 +929,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x END_IF; THIS.CallTimers(NOT _movementExecuting); - StartMotorsProgramAndMovementsTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); - StartMotorsProgramAndMovementsTask.ThrowWhen(StartMotorsProgramAndMovementsTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StartMotorsProgramAndMovementsTask timeout.#>'); END_IF; IF StartMotorsProgramAndMovementsTask.IsFirstExecutionCycle() THEN MovementParameters := Status.CurrentMovementParameters; @@ -1025,7 +1019,6 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x END_IF; THIS.CallTimers(TRUE); - StartMotorsTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); END_IF; IF StartMotorsTask.DoneReached() THEN @@ -1238,9 +1231,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x THIS.CallTimers(NOT _movementExecuting); - StartMovementsTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_movement_progress); - StartMovementsTask.ThrowWhen(StartMovementsTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StartMovementsTask timeout.#>'); END_IF; IF StartMovementsTask.IsFirstExecutionCycle() THEN MovementParameters := Status.CurrentMovementParameters; @@ -1392,9 +1383,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x END_IF; THIS.CallTimers(TRUE); - StartProgramTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); - StartProgramTask.ThrowWhen(StartProgramTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StartProgramTask timeout.#>'); END_IF; IF StartProgramTask.DoneReached() THEN Status.Action.Id := UINT#171; @@ -1455,9 +1444,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x END_IF; THIS.CallTimers(TRUE); - StopMotorsTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); - StopMotorsTask.ThrowWhen(StopMotorsTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StopMotorsTask timeout.#>'); END_IF; IF StopMotorsTask.DoneReached() THEN Status.Action.Id := UINT#181; @@ -1527,9 +1514,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x THIS.CallTimers(TRUE); - StopMovementsAndProgramTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); - StopMovementsAndProgramTask.ThrowWhen(StopMovementsAndProgramTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StopMovementsAndProgramTask timeout.#>'); END_IF; IF StopMovementsAndProgramTask.DoneReached() THEN Status.Action.Id := UINT#191; @@ -1587,9 +1572,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x THIS.CallTimers(TRUE); - StopMovementsTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); - StopMovementsTask.ThrowWhen(StopMovementsTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StopMovementsTask timeout.#>'); END_IF; IF StopMovementsTask.DoneReached() THEN Status.Action.Id := UINT#201; @@ -1646,9 +1629,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x THIS.CallTimers(TRUE); - StopProgramTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); - StopProgramTask.ThrowWhen(StopProgramTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#StopProgramTask timeout.#>'); END_IF; IF StopProgramTask.DoneReached() THEN Status.Action.Id := UINT#911; @@ -1739,9 +1720,7 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.v_5_x_x THIS.CallTimers(TRUE); - ResetAllOutputsTask.ThrowWhen(_errorTimer.output); Status.Action.Id := TO_UINT(_power_progress); - ResetAllOutputsTask.ThrowWhen(ResetAllOutputsTask.Duration >= Config.TaskTimeout AND Config.TaskTimeout > T#0s ,'<#ResetAllOutputsTask timeout.#>'); END_IF; IF ResetAllOutputsTask.DoneReached() THEN Status.Action.Id := UINT#921; From a13c5b4051285993d847b0fc3b74c51e60685cf0 Mon Sep 17 00:00:00 2001 From: Peter Kurhajec <61538034+PTKu@users.noreply.github.com> Date: Mon, 1 Jun 2026 20:31:37 +0200 Subject: [PATCH 2/2] docs(kuka.robotics): document #1167 KRC5 timeout-throw removal Record the KRC5-only fix (AxoKrc5 tasks no longer ThrowWhen on ErrorTime/TaskTimeout) across library and central changelogs. - AxoKrc5.md: 4th KRC5-only divergence + Configuration note - TROUBLES.md: TaskTimeout watchdog bullet flagged KRC4-only - library CHANGELOG + GitVersion: bump to 0.61.1 - central CHANGELOG: [FIX] AxoKrc5 spurious task-timeout entry Refs #1167 --- CHANGELOG.md | 13 +++++++++++++ GitVersion.yml | 2 +- src/components.kuka.robotics/docs/AxoKrc5.md | 11 +++++++++++ .../docs/CHANGELOG.md | 19 +++++++++++++++++++ src/components.kuka.robotics/docs/TROUBLES.md | 7 +++++-- 5 files changed, 49 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dad8197d..2196102d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +### [FIX] `AxoKrc5` no longer throws spurious task-timeout errors + +**Note:** PLC bug fix in `src/components.kuka.robotics/ctrl/src/AxoKrc5/v_5_x_x/AxoKrc5.st`. KRC5-only — `AxoKrc4` is unchanged. No public-API change. Branch: `1165-bug-kuka-issue-with-robot-reset` ([#1167](https://github.com/Inxton/AXOpen/pull/1167)). + +- fix: Removed the `ThrowWhen` watchdog calls (`_errorTimer.output` and `Duration >= Config.TaskTimeout`) from every `AxoKrc5` task — `StartAtMain`, `StartMotors`, `StartProgram`, `StartMotorsAndProgram`, `StartMotorsProgramAndMovements`, `StartMovements`, `StopMotors`, and `StopMovementsAndProgram`. A stalled task now surfaces through the component's own status message instead of an additional, redundant task-timeout error that fired even when the component had already reported the proper condition. +- docs: `src/components.kuka.robotics/docs/AxoKrc5.md` and `TROUBLES.md` record the divergence (a 4th KRC5-only difference; `ErrorTime` / `TaskTimeout` no longer abort KRC5 tasks; the `TaskTimeout` watchdog troubleshooting bullet is now flagged KRC4-only). Library CHANGELOG bumped to `0.61.1`. + +**Impact:** Operating a KRC5 robot no longer produces nuisance task-timeout errors on top of the component's genuine status message. `AxoKrc4` retains both watchdogs. + +**Risks/Review:** KRC5 tasks no longer self-abort on duration; long-running or stuck tasks rely on the component status message and operator intervention rather than the `TaskTimeout` watchdog. + +**Testing:** `apax ibt` in `src/components.kuka.robotics` — build + AxUnit suite green. + ### [FIX] `axdev` password guard contradicted the secrets complexity policy **Note:** Bug fix in `src/axopen.dev`. Branch: `feat/axdev-user-secrets-loader`. diff --git a/GitVersion.yml b/GitVersion.yml index 8efe7f98c..a4cb25032 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -1,5 +1,5 @@ mode: ContinuousDeployment -next-version: 0.61.0 +next-version: 0.61.1 branches: main: regex: ^master$|^main$ diff --git a/src/components.kuka.robotics/docs/AxoKrc5.md b/src/components.kuka.robotics/docs/AxoKrc5.md index 24419fcad..48fef6a89 100644 --- a/src/components.kuka.robotics/docs/AxoKrc5.md +++ b/src/components.kuka.robotics/docs/AxoKrc5.md @@ -37,6 +37,11 @@ Refer to the [`AxoKrc4`](AxoKrc4.md) page for: > - Safety message **20002** (`Inputs.Automatic = FALSE` while a task is busy) > is raised as `Info` on `AxoKrc5`, where `AxoKrc4` still raises it as > `Error`. +> - Its tasks no longer self-abort on the duration/error-timer watchdog +> (#1167). `AxoKrc5` no longer calls `ThrowWhen` on `Config.TaskTimeout` +> or `Config.ErrorTime` (`_errorTimer.output`); a stalled task now surfaces +> through the component's own status message instead of a redundant +> task-timeout error. `AxoKrc4` still applies both watchdogs. The differences between KRC4 and KRC5 are confined to: @@ -57,6 +62,12 @@ LT#2S`, `ErrorTime = LT#5S`, `TaskTimeout = LT#50S`) match KRC4 — see the [`AxoKrc4` configuration table](AxoKrc4.md#configuration) for the meaning of each field. +> [!NOTE] +> Since #1167, `ErrorTime` and `TaskTimeout` no longer abort `AxoKrc5` tasks +> (the `ThrowWhen` watchdogs were removed). They are still applied by `AxoKrc4`. +> On `AxoKrc5` a stalled task is reported through the component's status +> message rather than raising a task-timeout error. + [!code-smalltalk[](../ctrl/src/AxoKrc5/v_5_x_x/TypesStructuresAndEnums/AxoKrc5_Config.st?name=AxoKrc5ConfigDeclaration)] [!code-smalltalk[](../ctrl/src/AxoKrc5/v_5_x_x/TypesStructuresAndEnums/AxoKrc5_HWIDs.st?name=AxoKrc5HWIDsDeclaration)] diff --git a/src/components.kuka.robotics/docs/CHANGELOG.md b/src/components.kuka.robotics/docs/CHANGELOG.md index 163b002d2..327d40b32 100644 --- a/src/components.kuka.robotics/docs/CHANGELOG.md +++ b/src/components.kuka.robotics/docs/CHANGELOG.md @@ -23,6 +23,25 @@ on every run. --> +### 0.61.1 + +**Bug fixes:** +- `AxoKrc5` no longer self-aborts its tasks on the duration/error-timer + watchdog (#1167). The `ThrowWhen` calls on `_errorTimer.output` and on + `Duration >= Config.TaskTimeout` were removed from every task + (`StartAtMain`, `StartMotors`, `StartProgram`, `StartMotorsAndProgram`, + `StartMotorsProgramAndMovements`, `StartMovements`, `StopMotors`, + `StopMovementsAndProgram`). A stalled task now surfaces through the + component's own status message instead of an extra, redundant + task-timeout error. `AxoKrc4` is unchanged and still applies both + watchdogs. + +**Other:** +- `AxoKrc5.md` — added a 4th KRC5-only divergence note and a Configuration + note recording that `ErrorTime` / `TaskTimeout` no longer abort KRC5 tasks. +- `TROUBLES.md` — the `TaskTimeout` watchdog bullet is now flagged KRC4-only, + with the KRC5 message-driven behaviour documented. + ### 0.54.0 **New features:** diff --git a/src/components.kuka.robotics/docs/TROUBLES.md b/src/components.kuka.robotics/docs/TROUBLES.md index ce312a6f7..b516f38dd 100644 --- a/src/components.kuka.robotics/docs/TROUBLES.md +++ b/src/components.kuka.robotics/docs/TROUBLES.md @@ -66,8 +66,11 @@ They are not errors. - `Inputs.Error = TRUE` raises error 20005 while a task is busy; clear the KRC4-side fault, then call `ExampleRobot.ErrorConfirmation` via `Outputs.ErrorConfirmation` or run the `Restore` sequencer step. -- `Config.TaskTimeout` has not elapsed (default `LT#50S`). Set to `0s` - during commissioning to disable the watchdog. +- **(KRC4 only)** `Config.TaskTimeout` has not elapsed (default `LT#50S`). + Set to `0s` during commissioning to disable the watchdog. Since #1167 + `AxoKrc5` no longer aborts tasks on `TaskTimeout` / `ErrorTime`; a stalled + KRC5 task is reported through the component status message instead, so + there is no task-timeout watchdog to disable on KRC5. ### Movement parameters never take effect