Skip to content

PHOENIXCONTACT/MORYX-Framework

Repository files navigation

CI Coverage Stack Overflow License

NuGet Release MyGet PreRelease

MORYX Framework

The MORYX Framework is a .NET based framework to quickly build three-tier applications. It aims to reduce boilerplate code as much as possible and provides modularity, flexibility and easy configuration with very little effort. It originates from the original MORYX project targeted to develop machines but has expanded to a much bigger field of use. The MORYX AbstractionLayer is the environment for the digital twins of resources and products. It defines the domain independent meta model and enables applications to model their physical system and product portfolio as typed objects. It thereby makes other modules hardware independent by encapsulating details of the underlying structure and devices.

Getting Started

To contribute to the developmen of the MORYX, ensure you have the following prerequisites installed:

  • Node.jsv22.22.0 LTS
  • .NET SDK10.0.101

Steps to Set Up Your Development Environment

  1. Clone the repository

    git clone https://github.com/PHOENIXCONTACT/MORYX-Framework.git
  2. Open the solution

    Use an IDE such as:

    Open the solution file: MORYX.Framework.slnx

  3. Build the solution

    Compile the projects using your IDE's build tools or via CLI. The StartProject.Asp provides you a startable ASP.NET Core server.

To use MORYX to build your own application, we recommend to

To quickly get a running MORYX application to check out the different components, we offer the MORYX Demo, a fully functional, simulated production system based on MORYX.

The Ecosystem

Here we list all available packages in the MORYX ecosystem separated into components, linking to their documentation and providing the respective code coverage for the component.

MORYX Framework and Abstractions
(Includes the Framework as the core of any MORYX application as well as public APIs for components used to abstract digital twins)
Component Packages
MORYX Moryx
Moryx.AspNetCore
MORYX Abstractions Moryx.AbstractionLayer
Moryx.ControlSystem
Moryx.Factory
Moryx.Users
MORYX Container Moryx.Container
MORYX Runtime Moryx.Runtime
Moryx.Runtime.Endpoints
Moryx.Runtime.Kernel
MORYX CommandCenter Moryx.CommandCenter.Web
MORYX Model Moryx.Model
Moryx.Model.InMemory
Moryx.Model.PostgreSQL
Moryx.Model.Sqlite
MORYX Communication Moryx.Communication.Serial
MORYX Tools Moryx.Tools
Moryx.TestTools.UnitTest
Moryx.TestTools.IntegrationTest
Moryx.ControlSystem.TestTools
Samples Moryx.Benchmarking
Moryx.Products.Samples

MORYX Adapters and Modules
(Includes all adapters and modules built on top of the MORYX Framework, ready to be used in your applications)
Component Packages
Adapter - Influx DB Moryx.ProcessData.InfluxDbListener
Adapter - Spreadsheet Moryx.ProcessData.SpreadsheetsListener
Module - Products Moryx.Products.Management
Moryx.Products.Web
Moryx.AbstractionLayer.Products.Endpoints
Module - Resources Moryx.Resources.Management
Moryx.AbstractionLayer.Resources.Endpoints
Module - Media Moryx.Media
Moryx.Media.Server
Moryx.Media.Endpoints
Moryx.Media.Web
Module - Notifications Moryx.Notifications
Moryx.Notifications.Publisher
Moryx.Notifications.Endpoints
Moryx.Notifications.Web
Module - Orders Moryx.Orders
Moryx.Orders.Management
Moryx.Orders.Endpoints
Moryx.Orders.Web
Module - Process Data Moryx.ProcessData
Moryx.ProcessData.Adapter.NotificationPublisher
Moryx.ProcessData.Adapter.OrderManagement
Moryx.ProcessData.Adapter.ProcessEngine
Moryx.ProcessData.Adapter.ResourceManagement
Moryx.ProcessData.Endpoints
Moryx.ProcessData.Monitor
Module - Process Engine Moryx.ControlSystem.ProcessEngine
Moryx.ControlSystem.ProcessEngine.Web
Moryx.ControlSystem.Processes.Endpoints
Moryx.ControlSystem.Jobs.Endpoints
Module - Setups Moryx.ControlSystem.SetupProvider
Module - Simulation Moryx.ControlSystem.Simulator
Moryx.Drivers.Simulation
Module - Worker Support Moryx.ControlSystem.WorkerSupport
Moryx.ControlSystem.WorkerSupport.Web
Moryx.ControlSystem.VisualInstructions.Endpoints
Moryx.Resources.AssemblyInstruction
Module - Workplans Moryx.Workplans
Moryx.Workplans.Editing
Moryx.Workplans.Web
MORYX - Access Management Moryx.Identity
Moryx.Identity.AccessManagement
Moryx.Identity.Web
Web - Factory Monitor Moryx.FactoryMonitor.Endpoints
Moryx.FactoryMonitor.Web
Web - Launcher Moryx.Launcher
Module - Operators Moryx.Operators
Moryx.Operators.Management
Moryx.Operators.Endpoints
Moryx.Operators.Web
Module - Shifts Moryx.Shifts
Moryx.Shifts.Management
Moryx.Shifts.Endpoints
Moryx.Shifts.Web
Module - Material Management Moryx.ControlSystem.MaterialManager
Driver - MQTT Moryx.Drivers.Mqtt
Driver - OPC UA Moryx.Drivers.OpcUa

Architecture of the MORYX Framework

At the core MORYX is a .NET based framework to quickly build three-tier applications. Its architecture is a modular monolith using the service and facade pattern to isolate and decouple functionality. It uses a 2-level Dependency Injection structure to isolate a modules composition and offer a per-module life-cycle with all instances hidden behind the previously mentioned facades. It also offers a range of tools and components to speed up development, increase stability and drastically reduce boilerplate code. To improve flexibility of modules and applications the core has built in support for configuration management as well as plugin loading.

Each modules composition is constructed by its own DI-container instance. This makes it possible to dispose the container in order to restart the module and reconstruct the composition with a different configuration or to recover from a fatal error. The ModuleController and Facade instances are preserved through the lifecycle of the application as part of the level 1 composition. The Components (always present) and plugins (configurable) are created when a module is started and disposed when the module stops. For each lifecycle the references of the facade are updated.

Key Features of the factory automation components

Modular Manufacturing Systems Arbitrary production units (cells/stations) can be added or removed from the manufacturing system. New production capabilities will be used immediately without modifying existing workplans.

One Piece Flow and Mass Production The control system components supports both, one piece flow and mass production.

Worker Assistance The worker gets a detailed description on process steps with options to confirm their execution, report problems and trace application specific user inputs on the process steps.

Enterprise Integration The system is designed to allow interaction with data repositories like PDM or ERP systems with the goal to enrich their data and fuel the cyber-physical production process without duplicating data.

History

Starting with version 3.0 of the core we decided to open source it as a foundation for Industrial IoT (IIoT) applications. For this public version, the framework received an overhaul to replace commercial libraries and tools, remove specialized Phoenix Contact code and better comply with the .NET open source community.

Version 6 uses .NET 6 with ASP.NET Core and EntityFramework Core 6. All WPF UIs were replaced by WebUIs. In order to make debugging easier, we decided to merge the AbstractionLayer and Core repositories into one and name this one MORYX Framework. The AbstractionLayer will be archived. Additionally, all MORYX components are now released under the same major version as the MORYX-Framework and aligned with the .NET release schedule.

With version 10 the complete MORYX portfolio aside from Phoenix Contact specific components is released as open source. We decided to combine all components into this mono-repository to make it easier to keep everything in sync and to lower the barrier for contributions. The previously seperated repository MORYX-Factory as well as the internal repositories will be archived.

About

⚙️ .NET based framework to quickly build three-tier applications.

Topics

Resources

License

Stars

Watchers

Forks

Contributors