Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
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
4 changes: 2 additions & 2 deletions GitVersion.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
mode: ContinuousDeployment
next-version: 0.56.3
next-version: 0.56.4
branches:
main:
regex: ^master$|^main$
Expand All @@ -15,7 +15,7 @@ branches:
pre-release-weight: 55000
develop:
regex: ^dev(elop)?(ment)?$
mode: ManualDeployment
mode: ContinuousDelivery
label: alpha
increment: Minor
prevent-increment:
Expand Down
5 changes: 5 additions & 0 deletions src/components.kuka.robotics/ctrl/test/KukaRoboticsTests.st
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,8 @@ NAMESPACE AXOpen.Components.Kuka.Robotics.Tests
END_METHOD
END_CLASS
END_NAMESPACE





Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "this", "this.proj", "{C91BAA51-7B27-48BF-BE13-DED526D007B3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "inxton_axopen_abstractions", "..\abstractions\src\AXOpen.Abstractions\inxton_axopen_abstractions.csproj", "{26B3BB63-88A9-4CDF-8F04-8E78F3284F6F}"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#<RexrothCtrlxDriveTemplate>
Templates:
Devices:
- Name: 'rexroth_ctrlx_drive_xcs'
Expand Down Expand Up @@ -151,3 +152,4 @@ Templates:
FileName: 'GSDML-V2.41-BOSCH REXROTH AG-CTRLX DRIVE-20241107.XML'
GsdId: 'ID_SM_Operating_status_STO_P_0_0106_0_0_prod'
Slot: 8
#</RexrothCtrlxDriveTemplate>
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#<RexrothIndraDriveTemplate>
Templates:
Devices:
- Name: 'rexroth_indradrive'
Expand Down Expand Up @@ -72,3 +73,4 @@ Templates:
GsdId: ID_OutMod_13Words
FileName: GSDML-V2.1-BOSCH REXROTH AG-011F-INDRADRIVE_01V01-20110705.XML
Slot: 4
#</RexrothIndraDriveTemplate>
1,056 changes: 775 additions & 281 deletions src/components.rexroth.drives/ctrl/src/AxoCtrlxDriveXsc/AxoCtrlxDriveXsc.st

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ NAMESPACE AXOpen.Components.Rexroth.Drives
SwitchTo0M : BOOL; // Bit 0 of the Subdevice STM: C0200 Activate operation mode (S-0-0422) !!! must be set in drive !!!
{#ix-set:AttributeName = "<#CancelReferencePoint#>"}
CancelReferencePoint : BOOL; // Homing function: C1500 Command cancel reference point (0x2500:01 / S-0-0191 / --) !!! must be set in drive !!!
{#ix-set:AttributeName = "<#_bit11_Reserve#>"}
_bit11_Reserve : BOOL;
{#ix-set:AttributeName = "<#Device reboot#>"}
DeviceReboot : BOOL;
{#ix-set:AttributeName = "<#_bit12_Reserve#>"}
_bit12_Reserve : BOOL;
{#ix-set:AttributeName = "<#_bit13_Reserve#>"}
Expand Down
66 changes: 64 additions & 2 deletions src/components.rexroth.drives/docs/AxoCtrlxDriveXsc.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ View the .NET twin source at [`AXOpen.Components.Rexroth.Drives`](https://github

# [BLAZOR](#tab/blazor)

`AxoCtrlxDriveXsc` does not ship a dedicated Blazor view. It renders via the generic `AxoComponent` pattern using `RenderableContentControl`, which inspects the component type at runtime and selects the matching rendering based on the `Presentation` attribute.
`AxoCtrlxDriveXsc` ships a dedicated Blazor view, `AxoCtrlxDriveXscView`, with `Status`, `Command`, and `Spot` derivatives. `RenderableContentControl` automatically resolves and renders this dedicated view at runtime based on the selected `Presentation`, so the markup below renders the dedicated view without importing it explicitly.

## Status display

Expand All @@ -61,7 +61,7 @@ Available `Presentation` values: `Status-Display`, `Command-Control`, `Service-C

## Source

View the Blazor package at [`AXOpen.Components.Rexroth.Drives.blazor`](https://github.com/Inxton/AXOpen/tree/3-unify-showcase/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives.blazor/).
View the dedicated view at [`AxoCtrlxDriveXscView.razor`](https://github.com/Inxton/AXOpen/tree/3-unify-showcase/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives.blazor/AxoCtrlxDriveXsc/AxoCtrlxDriveXscView.razor), or the whole Blazor package at [`AXOpen.Components.Rexroth.Drives.blazor`](https://github.com/Inxton/AXOpen/tree/3-unify-showcase/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives.blazor/).

# [HARDWARE](#tab/hardware)

Expand All @@ -77,4 +77,66 @@ PROFINET hardware template at `showcase/app/hwc/library_templates/rexroth_ctrlx_

[!code-yaml[](../../showcase/app/hwc/plc_line.hwl.yml?name=RexrothCtrlxDriveIoSystem)]

## Drive commissioning (ctrlX DRIVE Engineering)

Before the controller can exchange cyclic process data with `AxoCtrlxDriveXsc`,
the drive must be parameterized in the **ctrlX DRIVE Engineering** commissioning
tool. The cyclic Consumer/Producer telegram and the signal control/status words
configured here must match the layout the component expects on its
`AxisRefExt` inputs and outputs. Perform the steps in order.

### 1. Master communication — PROFINET + FSP Drive profile

Under **Master communication → Master communication settings**, set the
protocol to **PROFINET®** and the application profile to **FSP Drive profile**.
Confirm the master communication is active (e.g. `AR established`) and note the
assigned PROFINET device name, which must match the device entry in
`plc_line.hwl.yml`.

![Master communication settings — PROFINET and FSP Drive profile](pics/rexroth_ctrlx_drive/001_FSP_DRIVE_PROFILE.png)

### 2. Consumer — cyclic setpoint data (controller → drive)

Configure the **Consumer** telegram (Slot 0) with the cyclic data the drive
receives from the controller: the servodrive-profile control word and the
drive-controlled-positioning command values (target position, velocity,
acceleration profile). This is the process data the component writes through
`AxisRefExt.Outputs`.

![Consumer cyclic data configuration](pics/rexroth_ctrlx_drive/002_CONSUMER.png)

### 3. Producer — cyclic actual/status data (drive → controller)

Configure the **Producer** telegram (Slot 1) with the cyclic data the drive
sends back: the servodrive-profile status word, position feedback, torque/force
actual value, velocity, and the diagnostic message. This is the process data
the component reads through `AxisRefExt.Inputs` / `AxisRefExt.Status`.

![Producer cyclic data configuration](pics/rexroth_ctrlx_drive/003_PRODUCER.png)

### 4. Signal control word

Map the **Signal control word** bits to the drive parameters the component
drives (control word and field-bus control bits). The bit assignments must
match the order the component expects in its outgoing control word.

![Signal control word bit mapping](pics/rexroth_ctrlx_drive/004_SignalControlWord.png)

### 5. Signal status word

Map the **Signal status word** bits to the source parameters reported back
(status word, position-feedback status, field-bus status, actual values). The
component decodes these bits to derive its `eAxoDriveState`.

![Signal status word bit mapping](pics/rexroth_ctrlx_drive/005_SignalStatusWord.png)

### 6. Operation mode selection

Under **Operation modes / Drive Halt → Operation mode selection**, set the
**primary operation mode** to **Drive-controlled positioning** and the
secondary operation modes (e.g. **Torque/force control**, **Velocity control**)
to match the motion tasks you intend to use from `AxoCtrlxDriveXsc`.

![Operation mode selection](pics/rexroth_ctrlx_drive/006_OperationMode.png)

---
4 changes: 2 additions & 2 deletions src/components.rexroth.drives/docs/AxoIndraDrive.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ View the .NET twin source at [`AXOpen.Components.Rexroth.Drives`](https://github

# [BLAZOR](#tab/blazor)

`AxoIndraDrive` does not ship a dedicated Blazor view. It renders via the generic `AxoComponent` pattern using `RenderableContentControl`, which inspects the component type at runtime and selects the matching rendering based on the `Presentation` attribute.
`AxoIndraDrive` ships a dedicated Blazor view, `AxoIndraDriveView`, with `Status`, `Command`, and `Spot` derivatives. `RenderableContentControl` automatically resolves and renders this dedicated view at runtime based on the selected `Presentation`, so the markup below renders the dedicated view without importing it explicitly.

## Status display

Expand All @@ -61,7 +61,7 @@ Available `Presentation` values: `Status-Display`, `Command-Control`, `Service-C

## Source

View the Blazor package at [`AXOpen.Components.Rexroth.Drives.blazor`](https://github.com/Inxton/AXOpen/tree/3-unify-showcase/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives.blazor/).
View the dedicated view at [`AxoIndraDriveView.razor`](https://github.com/Inxton/AXOpen/tree/3-unify-showcase/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives.blazor/AxoIndraDrive/AxoIndraDriveView.razor), or the whole Blazor package at [`AXOpen.Components.Rexroth.Drives.blazor`](https://github.com/Inxton/AXOpen/tree/3-unify-showcase/src/components.rexroth.drives/src/AXOpen.Components.Rexroth.Drives.blazor/).

# [HARDWARE](#tab/hardware)

Expand Down
20 changes: 20 additions & 0 deletions src/components.rexroth.drives/docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,26 @@
on every run.
-->

### 0.56.4

**New features:**
- Added dedicated Blazor views `AxoCtrlxDriveXscView` and `AxoIndraDriveView` (with `Status`, `Command`, and `Spot` derivatives) for the Rexroth drive components.

**Bug fixes:**
- `AxoCtrlxDriveXsc`: reworked torque and velocity scaling calculations, switched torque/velocity parameters to degrees and adjusted scaling values, and fixed torque scaling for linear actuators.
- `AxoCtrlxDriveXsc`: retrigger scaling-parameter reading when leaving operation mode so scaling stays consistent.
- `AxoCtrlxDriveXsc`: added message-timer resets so diagnostic messages clear correctly.

**Other:**
- `AxoCtrlxDriveXsc`: filter the `C00E2054` ("NOT HOMED") diagnostic message while homing is in progress.
- `AxoCtrlxDriveXsc`: added a debug message for the unknown error code `F4035`.
- `AxoCtrlxDriveXsc`: removed the homing (`AxoHome`) task timeout.
- Added ctrlX DRIVE servo-drive communication-configuration reference images under `ctrl/assets/rexroth_ctrlx_drive/servodrive_communication_config/`.
- Added a step-by-step "Drive commissioning (ctrlX DRIVE Engineering)" section to `AxoCtrlxDriveXsc.md` (PROFINET/FSP profile, Consumer/Producer telegrams, signal control/status word mapping, operation-mode selection) with screenshots under `docs/pics/rexroth_ctrlx_drive/`.
- Corrected the BLAZOR tab of `AxoCtrlxDriveXsc` and `AxoIndraDrive` docs to reflect the dedicated Blazor views (`AxoCtrlxDriveXscView`, `AxoIndraDriveView`) now resolved by `RenderableContentControl`, with source links.
- Enriched `README.md` with a Components table (ctrlX DRIVE XSC + IndraDrive), a Dependencies table, and the Bosch Rexroth vendor link.
- Populated `TROUBLES.md` with drive-specific common issues, the `eAxoDriveState` error states and `Errorstop` recovery, diagnostics, and known limitations.

### 0.43.0

**Other:**
Expand Down
20 changes: 19 additions & 1 deletion src/components.rexroth.drives/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,27 @@

The **components.rexroth.drives** is a set of libraries covering the product portfolio of motion systems from the vendor [Rexroth](https://www.boschrexroth.com/en/dc/) for the target PLC platform [Siemens AX](https://www.siemens.com/global/en/products/automation/industry-software/automation-software/simatic-ax.html) and [AxOpen](https://github.com/inxton/AXOpen?tab=readme-ov-file) framework.

The package consists of a PLC library providing control logic and its .NET twin counterpart aimed at the visualization part. This package currently covers the IndraDrive drives family.
The package consists of a PLC library providing control logic and its .NET twin counterpart aimed at the visualization part. This package currently covers the IndraDrive and ctrlX DRIVE families.

### Components

| Component | Description |
|-----------|-------------|
| `AxoCtrlxDriveXsc` | Rexroth ctrlX DRIVE XSC servo drive. Extends `AxoDrive` with ctrlX-specific axis reference (`AxisRefExt`) and scaling constants. |
| `AxoIndraDrive` | Rexroth IndraDrive servo drive. Extends `AxoDrive` with IndraDrive fieldbus/parameter axis reference (`AxisRef`). |

Both components derive from `AXOpen.Components.Drives.AxoDrive` and follow the PLCopen-style motion state machine (`eAxoDriveState`).

### Dependencies

| Package | Purpose |
|---------|---------|
| `@inxton/axopen.components.drives` | Provides the `AxoDrive` base component and the shared `eAxoDriveState` motion state machine. |
| `@ax/simatic-1500-distributedio` | SIMATIC S7-1500 distributed I/O support for PROFINET device communication. |

### Links to documentation
[Siemens AX-documentation](https://developer.siemens.com/simatic-ax/developer.html)

[AxOpen-documentation](https://inxton.github.io/AXOpen/)

[Bosch Rexroth documentation](https://www.boschrexroth.com/en/dc/)
156 changes: 155 additions & 1 deletion src/components.rexroth.drives/docs/TROUBLES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,159 @@
# Troubleshooting

Unfortunately, we don't have a direct solution to your problem at the moment. If you encounter any issues, please [file a report on our GitHub](https://github.com/inxton/AXOpen/issues/new/choose). We appreciate your feedback and patience.
This guide covers the most common issues encountered when integrating the
`AxoCtrlxDriveXsc` and `AxoIndraDrive` components, the drive state machine,
and the diagnostics surface exposed by both components.

---

## Common Issues

### The drive values never update / the view stays blank

**What you observe**: `DriveState`, `ActualPosition`, `ActualVelocity` and
`ActualTorque` never change, motion tasks never complete.

**Why it happens**: the component advances its internal logic and its task
state machines only while its `Run(...)` method is being called cyclically.
If `Run(...)` stops being called, every value and task freezes in place.

**What to check**: ensure the component's `Run(...)` method is called on every
cycle from within the call tree of your `AxoContext.Main()` method. It does
**not** have to be called directly in `Main()` — calling it from any object,
station, or method reachable through the `Main()` call chain is sufficient, as
long as the call executes on every scan.

### A motion task only works once, then does nothing

**What you observe**: the first invocation of a motion/parameter task succeeds,
but invoking it again has no effect or immediately reports the previous result.

**Why it happens**: tasks (`AxoTask`) latch their result. A completed task must
be restored before it can run again.

**What to check**: call `Restore()` on the task (the Blazor task views expose a
Restore button for this) before re-invoking it, and keep calling `Run(...)`
while the task executes. Only one motion task is serviced at a time — do not
expect two motion commands to run concurrently.

### The drive will not leave `Disabled` / will not enable

**What you observe**: `DriveState` stays at `Disabled` and motion commands are
ignored.

**Why it happens**: the drive must be powered/enabled before it transitions to
`Standstill` and accepts motion. A pending error also blocks enabling.

**What to check**: use the Power/enable task in the Operate panel, confirm the
drive is not in `Errorstop` (see Error States below), and verify the I/O
mapping so the component actually exchanges process data with the physical
drive.

### Manual control panel is missing in the UI

**What you observe**: the Blazor view shows the read-only Monitor/STATE panel
instead of the interactive Operate/CONFIGURATION panel.

**Why it happens**: the container view branches on
`_isManuallyControllable.Cyclic`. When it is `false`, only the monitor and
state views are shown.

**What to check**: activate manual control on the component so
`_isManuallyControllable` becomes `true`; the Operate commands and
CONFIGURATION panel then render.

---

## Hardware vs. Configuration vs. Application

Both `AxoCtrlxDriveXsc` and `AxoIndraDrive` control physical PROFINET devices.
When data exchange fails, isolate the layer before changing code:

- **Communication issues** — device unreachable, link down, watchdog timeout.
Check the physical connection, the device IP address, and the PROFINET device
name. The drive will not reach `Standstill` if process data is not exchanged.
- **Configuration issues** — GSDML/template mismatch, wrong slot or module
assignment, parameter error. Check the device entry in
`showcase/app/hwc/plc_line.hwl.yml` and the device template under
`ctrl/assets/` (`rexroth_ctrlx_drive` / `rexroth_indradrive`).
- **Application issues** — wrong `hwID`, missing or swapped I/O references,
incorrect `Run(...)` arguments. Check the ST wiring that passes the hardware
identifier and the axis reference (`AxisRefExt` for ctrlX,
`AxisRef` for IndraDrive) into the component.

---

## Error States

Both components expose their motion state through `DriveState`, typed as
`eAxoDriveState` (defined in `AXOpen.Components.Drives`). The states follow the
PLCopen motion state model:

| State | Meaning |
|-------|---------|
| `Disabled` | Drive is not powered/enabled. No motion is possible. |
| `Standstill` | Drive is enabled and holding position, ready to accept a motion command. |
| `Homing` | A homing/reference task is in progress. |
| `Stopping` | A stop has been commanded; the drive is decelerating to standstill. |
| `DiscreteMotion` | A point-to-point move (absolute/relative/additive) is active. |
| `ContinuousMotion` | A velocity move is active. |
| `SynchronizedMotion` | A synchronized/coordinated move is active. |
| `Errorstop` | The drive has faulted and stopped. **This is the error state.** |

### Recovering from `Errorstop`

**Possible causes**: drive-side fault (over-current, following error, limit
switch, communication loss), an invalid motion target, or a hardware/safety
condition reported by the physical drive.

**Resolution**:
1. Read `DriveState` to confirm `Errorstop`, and inspect the component's alarm
messenger (`_Messenger`, surfaced as the alarm badge/panel in the Blazor
view) for the specific fault text.
2. Clear the originating condition (acknowledge the drive fault, remove the
limit/safety condition, correct an out-of-range target).
3. Invoke the reset task to clear the error, then re-enable the drive. On
success the drive returns to `Standstill`.
4. If the drive immediately re-enters `Errorstop`, the underlying hardware fault
is still present — diagnose at the physical drive before retrying.

---

## Diagnostics

Read these members to understand the component's runtime state (all are exposed
read-only in the STATE / Monitor panel of the Blazor view):

| Member | Meaning |
|--------|---------|
| `DriveState` | Current `eAxoDriveState` motion state (see table above). |
| `ActualPosition` | Live position feedback. |
| `ActualVelocity` | Live velocity feedback. |
| `ActualTorque` | Live torque feedback. |
| `DriveStatus` | Aggregated status readout of the drive. |
| `DriveConfig` | Active configuration parameters (writable in the CONFIGURATION panel). |
| `_Messenger` | Alarm/message source; populated faults appear in the header alarm badge. |

For `AxoCtrlxDriveXsc`, additionally inspect the `AxisRefExt`
(Inputs/Outputs/Status) and the scaling constants. For `AxoIndraDrive`, inspect
`AxisRef` (FieldBus_In/FieldBus_Out, Parameter_In/Parameter_Out, Status, Data).

---

## Known Limitations

- A component services a single active motion task at a time; motion commands
are not executed concurrently.
- The component reflects the capabilities reported by the physical drive over
PROFINET — features not supported by the connected drive firmware cannot be
exercised from the component.

---

## Support

If you encounter an issue not covered here, please
[file a report on our GitHub](https://github.com/inxton/AXOpen/issues/new/choose).
We appreciate your feedback and patience.

---
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading