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
7 changes: 4 additions & 3 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"AXSharp.ixc": {
"version": "0.47.0-alpha.392",
"version": "0.47.0-alpha.394",
"commands": [
"ixc"
],
Expand All @@ -17,14 +17,14 @@
"rollForward": false
},
"AXSharp.ixd": {
"version": "0.47.0-alpha.392",
"version": "0.47.0-alpha.394",
"commands": [
"ixd"
],
"rollForward": false
},
"AXSharp.ixr": {
"version": "0.47.0-alpha.392",
"version": "0.47.0-alpha.394",
"commands": [
"ixr"
],
Expand Down Expand Up @@ -59,3 +59,4 @@




20 changes: 2 additions & 18 deletions COMPONENTS_MATURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,32 +60,16 @@ This document tracks the maturity state of all AXOpen components across differen

### Implemented
- [ ] Core functionality working
- [ ] Public API stable
- [ ] Basic documentation exists
- [ ] Compiles without errors
- [ ] Basic manual testing completed

### Tested
- [ ] Unit tests cover >80% of public methods
- [ ] Integration tests exist where applicable
- [ ] CI/CD pipeline runs tests
- [ ] Test results consistently pass
- [ ] Performance benchmarks defined

### Battle Tested
- [ ] Deployed in production environment
- [ ] Proven reliable over extended period (>6 months)
- [ ] Proven reliable over extended period
- [ ] Performance validated under load
- [ ] Support & maintenance processes established
- [ ] Customer feedback incorporated

## Update Process

This matrix should be updated when:
- New components are added
- Components reach new maturity milestones
- Production deployments are completed
- Major issues are discovered/resolved

**Last Updated**: November 7, 2025
**Next Review**: December 2025
- [ ] Support & maintenance processes established
11 changes: 6 additions & 5 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
<!-- Framework-Agnostic Packages -->
<ItemGroup>
<!-- AX# Libraries -->
<PackageVersion Include="AXSharp.Abstractions" Version="0.47.0-alpha.392" />
<PackageVersion Include="AXSharp.Connector" Version="0.47.0-alpha.392" />
<PackageVersion Include="AXSharp.Connector.S71500.WebAPI" Version="0.47.0-alpha.392" />
<PackageVersion Include="AXSharp.Presentation.Blazor" Version="0.47.0-alpha.392" />
<PackageVersion Include="AXSharp.Presentation.Blazor.Controls" Version="0.47.0-alpha.392" />
<PackageVersion Include="AXSharp.Abstractions" Version="0.47.0-alpha.394" />
<PackageVersion Include="AXSharp.Connector" Version="0.47.0-alpha.394" />
<PackageVersion Include="AXSharp.Connector.S71500.WebAPI" Version="0.47.0-alpha.394" />
<PackageVersion Include="AXSharp.Presentation.Blazor" Version="0.47.0-alpha.394" />
<PackageVersion Include="AXSharp.Presentation.Blazor.Controls" Version="0.47.0-alpha.394" />
<PackageVersion Include="Inxton.Operon" Version="0.3.0-alpha.104" />
<!-- Data & Serialization -->
<PackageVersion Include="ClosedXML" Version="0.105.0" />
Expand Down Expand Up @@ -97,3 +97,4 @@




69 changes: 11 additions & 58 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,64 +46,11 @@ Moreover, AXOpen comprises powerful tools that expedite the development of HMI/U

# Library Overview

AXOpen provides a comprehensive set of libraries and components for industrial automation. Here's a detailed overview of the main libraries:

## Core Libraries

- **Core**: Contains fundamental components and base functionality for the AXOpen framework
- **Abstractions**: Provides interfaces and abstract classes that define the framework's architecture
- **Utils**: Utility functions and helper classes for common operations
- **Timers**: Time-related functionality and timing operations
- **Data**: Data management and handling subsystem for controller data
- **IO**: Input/Output operations and communications

## Component Libraries

### Robotics
- **components.robotics**: Base robotics functionality and common interfaces
- **components.abb.robotics**: Integration with ABB robots
- **components.kuka.robotics**: Integration with KUKA robots
- **components.ur.robotics**: Integration with Universal Robots
- **components.mitsubishi.robotics**: Integration with Mitsubishi robots

### Vision and Identification
- **components.cognex.vision**: Integration with Cognex vision systems
- **components.keyence.vision**: Integration with Keyence vision systems
- **components.balluff.identification**: Balluff identification systems integration
- **components.siem.identification**: Siemens identification systems integration

### Motion and Control
- **components.drives**: Base functionality for drive systems
- **components.festo.drives**: Integration with Festo drive systems
- **components.rexroth.drives**: Integration with Rexroth drive systems
- **components.rexroth.press**: Specialized integration for Rexroth press systems
- **components.desoutter.tightening**: Integration with Desoutter tightening systems
- **components.pneumatics**: Pneumatic system controls and operations

### Base Components
- **components.abstractions**: Base abstractions for all components
- **components.elements**: Basic control elements and building blocks

## Testing and Development
- **inspectors**: Tools for system inspection and diagnostics
- **probers**: Testing and probing functionality
- **toolbox**: Collection of development tools and utilities
- **tools**: Additional development tools and helpers

## Integration and Platform
- **simatic1500**: Specific integration for Siemens SIMATIC S7-1500 controllers
- **sdk-ax**: Software Development Kit for AX integration
- **traversals**: System traversal and navigation utilities
- **Security**: Security-related functionality and access control

Each library is designed with modularity in mind, allowing you to use only the components you need for your specific automation project. All components come with built-in support for:
- Automated UI generation
- Integrated alarm handling
- Diagnostic capabilities
- Documentation
- Example implementations

## Tasks
AXOpen provides a comprehensive set of libraries and components for industrial automation. For an up-to-date list of available packages, their maturity, and intended usage, see [COMPONENTS_MATURITY](COMPONENTS_MATURITY.md).

## Notable features

### Tasks

The task provides a simple coordination primitive to execute actions. Tasks provide additional benefits regarding handling and observability of executed actions.

Expand Down Expand Up @@ -162,6 +109,12 @@ We are planning the first pilot project using `AXOpen` in the coming months. Onc

In parallel with the project's advancement, we are incrementally building the [documentation](https://inxton.github.io/AXOpen/). We invite you to visit the link if you wish to learn more about AXOpen.


## About the Repository

More about how the repository is organized and structured, see [here](src/README.md).


## Important remarks

**Localization**: AXOpen projects come with pre-scaffolded localization resources for multiple languages. These resources are meant as a starting point: not all translations are complete or production-ready, and some texts may still fall back to English. Before deploying, review and adjust the localized strings relevant to your target languages.
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
@using Operon.Icons
@using System.Globalization
@using AXSharp.Connector.Localizations
@using Microsoft.Extensions.Localization
@using AXOpen.Core.Blazor.Properties
@inject IStringLocalizer<AxOpenCoreResources> Localizer
@* @using AXSharp.Presentation.Blazor.Controls.Layouts.TabControlComponents; *@
@inherits RenderableComplexComponentBase<AxoBoolArray>;

<div data-axo-bool-array-view class="flex flex-wrap w-full">
<Accordion>
<AccordionItem Title="Data">
<AccordionItem Title="@Localizer["Data"]">
<div class="flex flex-wrap justify-between">
<p class="align-middle">@Component.GetAttributeName(CultureInfo.CurrentUICulture)</p>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@
@using Operon.Icons
@using System.Globalization
@using AXSharp.Connector.Localizations
@using Microsoft.Extensions.Localization
@using AXOpen.Core.Blazor.Properties
@inject IStringLocalizer<AxOpenCoreResources> Localizer
@inherits RenderableComplexComponentBase<AxoByteArray>;

<div data-axo-byte-array-view class="flex flex-wrap w-full">
<Accordion>
<AccordionItem Title="Data">
<AccordionItem Title="@Localizer["Data"]">
<div class="flex flex-wrap justify-between">
<p class="align-middle">@Component.GetAttributeName(CultureInfo.CurrentUICulture)</p>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
@using AXOpen.Messaging.Static
@using System.Globalization
@using AXSharp.Connector.Localizations
@using Microsoft.Extensions.Localization
@using AXOpen.Core.Blazor.Properties
@inject IStringLocalizer<AxOpenCoreResources> Localizer
@inherits RenderableComponentBase

<div @onmouseenter="BringToForeGround"
Expand All @@ -26,14 +29,14 @@
{
<button @onclick="ToggleMessages"
class="badge @AlarmBadgeClass"
title="@ActiveAlarmCount @(ActiveAlarmCount != 1 ? "alarms" : "alarm") active">
@ActiveAlarmCount Active Alarm@(ActiveAlarmCount != 1 ? "s" : "")
title="@ActiveAlarmCount @(ActiveAlarmCount != 1 ? Localizer["Alarms"] : Localizer["Alarm"]) @Localizer["Active"]">
@ActiveAlarmCount @Localizer["Active"] @(ActiveAlarmCount != 1 ? Localizer["Alarms"] : Localizer["Alarm"])
</button>
}
<button @onclick="ToggleServiceView"
class="badge badge-primary"
title="Toggle service view">
@(this.ServiceViewActive ? "Normal" : "Service")
title="@Localizer["ToggleServiceView"]">
@(this.ServiceViewActive ? Localizer["Normal"] : Localizer["Service"])
</button>
</div>
</div>
Expand Down Expand Up @@ -71,7 +74,7 @@
if (Component._isManuallyControllable.Cyclic == true)
{
<div class="card p-4" @onclick:stopPropagation="true">
<p class="text-sm font-bold text-text/70 mt-2 mx-2">CONFIGURATION</p>
<p class="text-sm font-bold text-text/70 mt-2 mx-2">@Localizer["CONFIGURATION"]</p>
<div class="m-2 w-full">
@if(ConfigContent is not null)
{
Expand All @@ -89,7 +92,7 @@
else
{
<div class="card p-4" @onclick:stopPropagation="true">
<p class="text-sm font-bold text-text/70 mt-2 mx-2">STATE</p>
<p class="text-sm font-bold text-text/70 mt-2 mx-2">@Localizer["STATE"]</p>
<div class="m-2 w-full">
@ConfigAndStateViewContent
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
@using AXOpen.Core.Blazor.Culture;
@using AXSharp.Connector.ValueTypes;
@using AXSharp.Connector;
@using Microsoft.Extensions.Localization
@using AXOpen.Core.Blazor.Properties
@inject IStringLocalizer<AxOpenCoreResources> Localizer
@inherits RenderableComplexComponentBase<AxoStep>

<div data-axo-step-view class="flex flex-wrap justify-center items-center gap-2 w-full px-4 py-2 @Class">
Expand Down Expand Up @@ -31,7 +34,7 @@
<div class="flex flex-wrap items-center gap-2">
@if (_stepState == eStepState.Active || _stepState == eStepState.Done)
{
<span class="badge @(_stepState == eStepState.Active ? "badge-primary" : null)" title="Duration">
<span class="badge @(_stepState == eStepState.Active ? "badge-primary" : null)" title="@Localizer["Duration"]">
<Operon.Icons.HeroIcon Icon="clock" Type="Operon.Icons.IconType.Outline" Class="size-5" />
@_durationText
</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
<div data-axo-messenger-view class="card w-full @ConvertToInternalShadowGlowSeverityName((eAxoMessageCategory)Component.Category.LastValue) @ConvertToInternalBgShadowSeverityName((eAxoMessageCategory)Component.Category.LastValue) @Class">
<div class="card-title flex flex-wrap flex-row justify-between gap-2 bg-background-light/40!">
<div class="flux-flex flex-wrap items-center gap-2">
<div class="flux-badge badge-primary gap-2" aria-label="Severity">
<div class="flux-badge badge-primary gap-2" aria-label="@Localizer["SeverityLabel"]">
<span class="inline-flex w-2 h-2 rounded-full @ConvertToInternalBgSeverityName((eAxoMessageCategory)Component.Category.LastValue)"></span>
@ConvertToInternalSeverityName((eAxoMessageCategory)Component.Category.LastValue)
</div>
@if (!string.IsNullOrWhiteSpace(Component.GetMessageText()))
{
<span class="text-text/80 font-semibold uppercase" aria-label="Alarm code">@Component.GetMessageText()</span>
<span class="text-text/80 font-semibold uppercase" aria-label="@Localizer["AlarmCode"]">@Component.GetMessageText()</span>
}
</div>
<div class="badge badge-primary" role="status">@StateLabel</div>
Expand Down
Loading
Loading