Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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`.
Expand Down
2 changes: 1 addition & 1 deletion GitVersion.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
mode: ContinuousDeployment
next-version: 0.61.0
next-version: 0.61.1
branches:
main:
regex: ^master$|^main$
Expand Down
21 changes: 0 additions & 21 deletions src/components.kuka.robotics/ctrl/src/AxoKrc5/v_5_x_x/AxoKrc5.st
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
11 changes: 11 additions & 0 deletions src/components.kuka.robotics/docs/AxoKrc5.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand All @@ -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)]
Expand Down
19 changes: 19 additions & 0 deletions src/components.kuka.robotics/docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:**
Expand Down
7 changes: 5 additions & 2 deletions src/components.kuka.robotics/docs/TROUBLES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Loading