From 0f5e7c8e1c816fb069e70947202ad571c8a6dede Mon Sep 17 00:00:00 2001 From: Peter Kurhajec <61538034+PTKu@users.noreply.github.com> Date: Sat, 16 May 2026 12:45:50 +0200 Subject: [PATCH 1/5] Expand AxoCmmtAs Blazor view with full drive task surface - Header gains State / ScalingReadState / Debug badges (honor [ComponentHeader]). - CommandsOperate / CommandsMonitor now wrap content in + (mirrored): PowerAndSafety, Home, SetPosition, Override, MoveAbsolute, MoveRelative, MoveAdditive, Velocity, TorqueControl, ParameterAccess, DigitalIO, ExplicitReads. - Wire previously unrendered inherited AxoDrive tasks: AxoReset, RestoreTask, AxoWrite/ReadParameter (int/real/bool), AxoWrite/ReadDigitalOutput, AxoReadDigitalInput, AxoReadActualPosition/Velocity/Torque, AxoReadStatus, AxoReadMotionState, AxoReadAxisInfo. - Layout rule: max 2 AxoTask buttons per row, paired semantically (Power+Reset, Stop+Halt, Write+Read of same type, etc.). - ConfigurePolling adds AxisType (fixes silent unit-resolution bug where PositionUnit/VelocityUnit accessors read .Cyclic without polling), plus State / ScalingReadState / Debug for header badges. - Resources/Strings.resx: 24 new localization keys for the new sections, pair labels and tab titles. --- .../AxoCmmtAs/AxoCmmtAsView.razor | 569 ++++++++++++------ .../AxoCmmtAs/AxoCmmtAsView.razor.cs | 4 + .../Resources/Strings.resx | 92 +++ 3 files changed, 485 insertions(+), 180 deletions(-) diff --git a/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor b/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor index c17c50840..50211eea6 100644 --- a/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor +++ b/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor @@ -2,6 +2,7 @@ @using AXOpen.Core @using AXOpen.Core.Blazor @using AXOpen.Components.Drives +@using Operon.Components.Tab @inherits AxoComponentViewBase @@ -21,200 +22,408 @@ @Localizer["Torque"] @FormattedTorque +
+ @Localizer["State"] + @Component.State.Cyclic +
+
+ @Localizer["ScalingReadState"] + @Component.ScalingReadState.Cyclic +
+
+ @Localizer["Debug"] + @Component.Debug.Cyclic +
-
-
-
-
@Localizer["PowerAndSafety"]
-

@Localizer["PowerAndSafetyDescription"]

-
-
- - - -
-
- - - - - - -
-
+
+ + +
+
+ + + + + +
+
+ + + + + + +
+
+
-
-
-
@Localizer["HomingAndReferencing"]
-

@Localizer["HomingAndReferencingDescription"]

-
-
- - - -
-
- - - - - - - - - - -
-
+ +
+ +
+ + + + + +
+
+
-
-
-
@Localizer["DiscreteMotion"]
-

@Localizer["DiscreteMotionDescription"]

-
-
- - - -
-
- - - - - - - - - - - - -
-
+ +
+ +
+ + +
+
+
-
-
-
@Localizer["ContinuousMotionAndTorque"]
-

@Localizer["ContinuousMotionDescription"]

-
-
- - -
-
- - - - - - - - - - -
-
+ +
+ +
+ + + +
+
+
+ + +
+ +
+ + + + + +
+
+
+ + +
+ +
+ + + + +
+
+
+ + +
+ +
+ + + +
+
+
+ + +
+ +
+ + + + +
+
+
+ + +
+ +
+ + + + + + +
+
+
+ + +
+
+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+ + + +
+
+ + + + + + + + + +
+
+
+ + +
+
+ + + + + + +
+
+ + + + +
+
+
+
-
-
-
-
@Localizer["PowerAndSafety"]
-

@Localizer["LiveFeedbackDescription"]

-
-
- - - -
-
- - - - - - -
-
+
+ + +
+
+ + + + + +
+
+ + + + + + +
+
+
-
-
-
@Localizer["HomingAndReferencing"]
-

@Localizer["MonitorReferencingDescription"]

-
-
- - - -
-
- - - - - - - - - - -
-
+ +
+ +
+ + + + + +
+
+
-
-
-
@Localizer["DiscreteMotion"]
-

@Localizer["DiscreteMotionMonitorDescription"]

-
-
- - - -
-
- - - - - - - - - - - - -
-
+ +
+ +
+ + +
+
+
-
-
-
@Localizer["ContinuousMotionAndTorque"]
-

@Localizer["ContinuousMotionMonitorDescription"]

-
-
- - -
-
- - - - - - - - - - -
-
+ +
+ +
+ + + +
+
+
+ + +
+ +
+ + + + + +
+
+
+ + +
+ +
+ + + + +
+
+
+ + +
+ +
+ + + +
+
+
+ + +
+ +
+ + + + +
+
+
+ + +
+ +
+ + + + + + +
+
+
+ + +
+
+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+ + + +
+
+ + + + + + + + + +
+
+
+ + +
+
+ + + + + + +
+
+ + + + +
+
+
+
diff --git a/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor.cs b/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor.cs index ab77a5dd0..fc768144e 100644 --- a/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor.cs +++ b/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor.cs @@ -84,6 +84,10 @@ public override void ConfigurePolling() this.StartPolling(Component.ActualVelocity, 250); this.StartPolling(Component.ActualTorque, 250); this.StartPolling(Component.DriveStatus.CurrentMotionTaskId, 500); + this.StartPolling(Component.AxisType, 1000); + this.StartPolling(Component.State, 500); + this.StartPolling(Component.ScalingReadState, 1000); + this.StartPolling(Component.Debug, 1000); } } diff --git a/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/Resources/Strings.resx b/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/Resources/Strings.resx index c37163168..5de2cae60 100644 --- a/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/Resources/Strings.resx +++ b/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/Resources/Strings.resx @@ -180,4 +180,96 @@ Nm + + + State + + + Scaling read state + + + Debug + + + + Reset drive + + + Restore + + + + Parameter access + + + Read and write integer, real and boolean drive parameters. + + + Observe parameter read/write transactions and their results. + + + Write parameter + + + Write real parameter + + + Write bool parameter + + + Read parameter + + + Read real parameter + + + Read bool parameter + + + + Digital I/O + + + Read digital inputs/outputs and write digital outputs. + + + Observe digital I/O transactions and their results. + + + Read digital input + + + Read digital output + + + Write digital output + + + + Explicit reads + + + Trigger explicit reads of position, velocity, torque, status and motion state. + + + Observe explicit read transactions and their results. + + + Read actual position + + + Read actual velocity + + + Read actual torque + + + Read status + + + Read motion state + + + Read axis info + From a9cb10db8f65ee3a14f6ec0675878a02c1317832 Mon Sep 17 00:00:00 2001 From: Peter Kurhajec <61538034+PTKu@users.noreply.github.com> Date: Sat, 16 May 2026 13:17:57 +0200 Subject: [PATCH 2/5] Align AxoToggleTaskView with AxoTaskView Refactor toggle task button to mirror AxoTask layout for visual consistency when placed side-by-side in component views. - Same button shell: flex items-center justify-between, gap-2 - Left slot: filled circle (ON) / hollow circle (OFF) matching the AxoTask state-circle vocabulary - Center: uppercased "Description -- StateDescription" label - Right slot: invisible size-5 spacer when HideRestoreButton=false to preserve width parity with AxoTask's reset icon in row-of-2 grids - State-driven color: btn-success (ON), btn-info (OFF), btn-inactive blur-[1px] (disabled), matching AxoTask color grammar - Added Class/Style parameters and aria-pressed for parity --- .../AxoToggleTask/AxoToggleTaskView.razor | 42 ++++++++++++++++--- .../AxoToggleTask/AxoToggleTaskView.razor.cs | 28 +++++++++++-- 2 files changed, 61 insertions(+), 9 deletions(-) diff --git a/src/core/src/AXOpen.Core.Blazor/AxoToggleTask/AxoToggleTaskView.razor b/src/core/src/AXOpen.Core.Blazor/AxoToggleTask/AxoToggleTaskView.razor index b5a38a707..7fa229d08 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoToggleTask/AxoToggleTaskView.razor +++ b/src/core/src/AXOpen.Core.Blazor/AxoToggleTask/AxoToggleTaskView.razor @@ -1,10 +1,40 @@ -@namespace AXOpen.Core +@namespace AXOpen.Core @using AXSharp.Connector; +@using Microsoft.AspNetCore.Components.Web; +@using Operon.Icons; @inherits RenderableComplexComponentBase @implements IDisposable; -
- -
\ No newline at end of file + + +@code { + + [Parameter] public string? Class { get; set; } + [Parameter] public string? Style { get; set; } +} diff --git a/src/core/src/AXOpen.Core.Blazor/AxoToggleTask/AxoToggleTaskView.razor.cs b/src/core/src/AXOpen.Core.Blazor/AxoToggleTask/AxoToggleTaskView.razor.cs index 6d14c5855..0ef6ada4f 100644 --- a/src/core/src/AXOpen.Core.Blazor/AxoToggleTask/AxoToggleTaskView.razor.cs +++ b/src/core/src/AXOpen.Core.Blazor/AxoToggleTask/AxoToggleTaskView.razor.cs @@ -1,4 +1,4 @@ -using AXSharp.Connector; +using AXSharp.Connector; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Authorization; using System.Security.Principal; @@ -31,14 +31,29 @@ private async void ToggleTask() AxoApplication.Current.Logger.Information($"Command `{Component.HumanReadable}` toggled.", Component, await GetCurrentUserIdentity()); Component.RemoteToggle.Cyclic = true; } + + public bool IsOn => Component.State.LastValue; + private string StateDescription { get { - return Component.State.LastValue ? (string.IsNullOrEmpty(Component.AttributeStateOnDesc) ? "<#On#>" : Component.AttributeStateOnDesc) : (string.IsNullOrEmpty(Component.AttributeStateOffDesc) ? "<#Off#>" : Component.AttributeStateOffDesc); + return IsOn + ? (string.IsNullOrEmpty(Component.AttributeStateOnDesc) ? "<#On#>" : Component.AttributeStateOnDesc) + : (string.IsNullOrEmpty(Component.AttributeStateOffDesc) ? "<#Off#>" : Component.AttributeStateOffDesc); } } + private string ButtonClass + { + get + { + if (IsDisabled) + return "btn-inactive blur-[1px]"; + + return IsOn ? "btn-success" : "btn-info"; + } + } [Parameter] public bool Disable { get; set; } @@ -51,7 +66,14 @@ private string StateDescription public bool IsDisabled => Disable || Component.IsDisabled.Cyclic; - public string Description => Component.GetAttributeName(CultureInfo.CurrentUICulture); + public string Description => string.IsNullOrEmpty(Text) + ? string.IsNullOrEmpty(Component.AttributeName) + ? Component.GetSymbolTail() + : Component.GetAttributeName(CultureInfo.CurrentUICulture) + : Text; + + public string LabelText => $"{Description} — {StateDescription}"; + public override void ConfigurePolling() { this.StartPolling(Component.IsDisabled); From ef92397c16cb32d1cd10eac98dae2d077a5e490d Mon Sep 17 00:00:00 2001 From: Peter Kurhajec <61538034+PTKu@users.noreply.github.com> Date: Sat, 16 May 2026 14:21:11 +0200 Subject: [PATCH 3/5] Update expected apax version to 4.3.0 and enhance FestoDrives component with manual control --- src/scripts/check_requisites_apax.sh | 2 +- .../app/hwc/hwc.gen/plc_line.SecurityConfiguration.json | 4 ++++ .../components-festo-drives/Documentation/FestoDrives.razor | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/scripts/check_requisites_apax.sh b/src/scripts/check_requisites_apax.sh index 9a0dda8ec..c3480d224 100644 --- a/src/scripts/check_requisites_apax.sh +++ b/src/scripts/check_requisites_apax.sh @@ -1,5 +1,5 @@ apaxUrl="https://console.simatic-ax.siemens.io/" -expectedApaxVersion="4.2.0" +expectedApaxVersion="4.3.0" export GREEN='\033[0;32m' export RED='\033[0;31m' diff --git a/src/showcase/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json b/src/showcase/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json index e23eca2d9..ad071ba18 100644 --- a/src/showcase/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json +++ b/src/showcase/app/hwc/hwc.gen/plc_line.SecurityConfiguration.json @@ -5,5 +5,9 @@ "TLS": 1, "WebServer": 2 }, +<<<<<<< Updated upstream "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIACDmcpW9l2KbKelN6FvcwaLAndUujD+RirRfC5n3hyAByAAk8sLUPu9xFk3Qdse0j9rzoWMkmPkatYswDi7QmJ6VPVQAAAAAAEBAAAAAgDQBwAAIACDmcpW9l2KbKelN6FvcwaLAndUujD+RirRfC5n3hyAByAAEcSJWeZMDmrZvkYFOygiehG/01uxiCv5LVhHYzwo3ZVQAAAAAAEBAAAAAgDQBwAAIACDmcpW9l2KbKelN6FvcwaLAndUujD+RirRfC5n3hyAByAAk8sLUPu9xFk3Qdse0j9rzoWMkmPkatYswDi7QmJ6VPVQAAAAAAEBAAAAAgDQBwAAIACDmcpW9l2KbKelN6FvcwaLAndUujD+RirRfC5n3hyAByAAk8sLUPu9xFk3Qdse0j9rzoWMkmPkatYswDi7QmJ6VPUgAAAAg5nKVvZdimynpTehb3MGiwJ3VLow/kYq0XwuZ94cgAc=" +======= + "AccessProtectionData": "AQAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAEBAAAAAgDQBwAAIACGPuCVKRYk+jYv2fiIefhw9xIoSuqwB4TQkDXJrRiO9iAAKa3miXIdXkL6KWpofQo1hiChdI3HBXXMvwu6CHW2s8VQAAAAAAEBAAAAAgDQBwAAIACGPuCVKRYk+jYv2fiIefhw9xIoSuqwB4TQkDXJrRiO9iAAOJc0J9egkkwFS4jD3SOX/4JVM0g7pRghkkLgfOtD8mZQAAAAAAEBAAAAAgDQBwAAIACGPuCVKRYk+jYv2fiIefhw9xIoSuqwB4TQkDXJrRiO9iAAKa3miXIdXkL6KWpofQo1hiChdI3HBXXMvwu6CHW2s8VQAAAAAAEBAAAAAgDQBwAAIACGPuCVKRYk+jYv2fiIefhw9xIoSuqwB4TQkDXJrRiO9iAAKa3miXIdXkL6KWpofQo1hiChdI3HBXXMvwu6CHW2s8UgAAAAhj7glSkWJPo2L9n4iHn4cPcSKErqsAeE0JA1ya0YjvY=" +>>>>>>> Stashed changes } \ No newline at end of file diff --git a/src/showcase/app/ix-blazor/showcase.blazor/Pages/components-festo-drives/Documentation/FestoDrives.razor b/src/showcase/app/ix-blazor/showcase.blazor/Pages/components-festo-drives/Documentation/FestoDrives.razor index 94a0e3596..0ec97a166 100644 --- a/src/showcase/app/ix-blazor/showcase.blazor/Pages/components-festo-drives/Documentation/FestoDrives.razor +++ b/src/showcase/app/ix-blazor/showcase.blazor/Pages/components-festo-drives/Documentation/FestoDrives.razor @@ -77,6 +77,7 @@
+
From 38d3b8ba12fd70fe4beb5b655bc1901bf821ebbd Mon Sep 17 00:00:00 2001 From: Peter Kurhajec <61538034+PTKu@users.noreply.github.com> Date: Sat, 16 May 2026 14:21:46 +0200 Subject: [PATCH 4/5] Align AxoToggleTaskView rendering with AxoTaskView for improved visual consistency and accessibility --- CHANGELOG.md | 23 +++++++++++++++++++++++ src/core/docs/CHANGELOG.md | 5 +++++ 2 files changed, 28 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a38f37c0..0fee4f26d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +### [CORE] AxoToggleTaskView aligned with AxoTaskView ([#1143](https://github.com/Inxton/AXOpen/pull/1143)) + +**Note:** Blazor UI-only change in `src/core/src/AXOpen.Core.Blazor/AxoToggleTask/`. The PLC `AxoToggleTask` class and its public API (`SwitchOn()`, `SwitchOff()`, `Toggle()`, `IsSwitchOn()`, `IsSwitchOff()`, event-like overrides) are unchanged. Bundled with the AxoCmmtAs view expansion under the same PR; the toggle-view refactor is the core-library portion. + +- refactor: `AxoToggleTaskView.razor` rebuilt to mirror `AxoTaskView`'s button shell (`flex items-center justify-between gap-2`), state-circle slot on the left (filled `bg-current` when ON, hollow `border-2 border-current` when OFF), uppercased center label, and invisible `size-5` right-slot spacer when `HideRestoreButton=false` to preserve width parity with `AxoTask`'s reset icon in row-of-2 grids. +- feat: Label format changed from `Description:State` to `DESCRIPTION — STATE` (uppercased, em-dash separator) so the on/off state reads alongside the toggle name without relying on color alone. +- feat: State-driven button color matches `AxoTaskView` vocabulary — `btn-success` (ON), `btn-info` (OFF), `btn-inactive blur-[1px]` (disabled). +- feat: Added `Class`, `Style`, and `aria-pressed` parameters/attributes for parity with `AxoTaskView` and improved accessibility. +- docs: Appended `0.50.0` entry to `src/core/docs/CHANGELOG.md`. + +**Impact:** +- A row of `AxoTask` + `AxoToggleTask` buttons in a component view now lines up correctly (icon-left, label-center, icon-right) regardless of which task type each cell holds. +- Existing component proxy views that render `AxoToggleTask` via `AxoToggleTaskView` or `RenderableContentControl Presentation="Command"/"Status"` pick up the new look automatically — no host-app code changes required. + +**Risks/Review:** +- `assets/AxoToggleTaskExampleVisu.gif` in `src/core/docs/assets/` was recorded against the previous bare-button rendering. Functional documentation prose in `AxoToggleTask.md` is still accurate, but the GIF visually diverges from the new view. Re-recording is a manual screen-capture step; not blocking. +- Pages that relied on the previous compact `Description:State` single-line look may now display wider buttons because of the icon + spacer slots. + +**Testing:** +- `dotnet build axopen/src/core/src/AXOpen.Core.Blazor/axopen_core_blazor.csproj` — 0 errors. +- Render an `AxoToggleTask` next to an `AxoTask` in a Blazor showcase page (`Pages/core/DocuExamples/AxoToggleTaskDocu.razor` exposes four variants) and visually verify the icon/label/spacer columns align. +- Toggle the underlying PLC state and confirm the button switches between filled+`btn-success` and hollow+`btn-info`; set `Disable=true` and confirm `btn-inactive blur-[1px]` activates. + ### [KUKA] KRC5 showcase, docs, and central changelog ([#1117](https://github.com/Inxton/AXOpen/pull/1117)) **Note:** Extends the KRC5 library assets landed in [#1116](https://github.com/Inxton/AXOpen/pull/1116) with full showcase and documentation coverage. No runtime behavior change in `AxoKrc4` — the existing class drives both KRC4 and KRC5 because the slot 1 / slot 2 = `DIO512` layout is identical. diff --git a/src/core/docs/CHANGELOG.md b/src/core/docs/CHANGELOG.md index 708c6e366..d6cf0ce56 100644 --- a/src/core/docs/CHANGELOG.md +++ b/src/core/docs/CHANGELOG.md @@ -38,3 +38,8 @@ **Breaking changes:** - Documentation file renames may break external bookmarks or links referencing the old UPPERCASE filenames + +### 0.50.0 + +**Other:** +- `AxoToggleTaskView` Blazor rendering aligned with `AxoTaskView` for visual consistency when both task buttons appear side-by-side in component views. Filled/hollow state circle on the left, uppercased `DESCRIPTION — STATE` label in the center, invisible right-slot spacer for width parity, and state-driven button color (`btn-success` ON / `btn-info` OFF / `btn-inactive blur-[1px]` disabled). No PLC API change — `SwitchOn()` / `SwitchOff()` / `Toggle()` / event-like overrides are unchanged. From b807f02e91aa3d28736c713a1a74853f734d4b35 Mon Sep 17 00:00:00 2001 From: Peter Kurhajec <61538034+PTKu@users.noreply.github.com> Date: Sat, 16 May 2026 16:37:45 +0200 Subject: [PATCH 5/5] Refactor AxoCmmtAsView to improve code clarity by commenting out unused elements in HeaderContent --- .../AxoCmmtAs/AxoCmmtAsView.razor | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor b/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor index 50211eea6..5f2b0e734 100644 --- a/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor +++ b/src/components.festo.drives/src/AXOpen.Components.Festo.Drives.blazor/AxoCmmtAs/AxoCmmtAsView.razor @@ -9,7 +9,7 @@
@DriveStateLabel - @CurrentMotionTaskLabel + @* @CurrentMotionTaskLabel *@
@Localizer["Position"] @FormattedPosition @@ -22,7 +22,7 @@ @Localizer["Torque"] @FormattedTorque
-
+ @*
@Localizer["State"] @Component.State.Cyclic
@@ -30,10 +30,10 @@ @Localizer["ScalingReadState"] @Component.ScalingReadState.Cyclic
-
+
@Localizer["Debug"] @Component.Debug.Cyclic -
+
*@