Skip to content

PHOENIXCONTACT/MORYX-Framework

Repository files navigation

CI Coverage Gitter 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 participate in the development of the MORYX Framework,

  • checkout this repository
  • use an IDE like Visual Studio or JetBrains Rider to open the solution file MORYX-Framework.sln
  • build the solution

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 Coverage
MORYX Moryx
Moryx.Asp.Extensions
to be done
MORYX - Abstractions Moryx.AbstractionLayer
Moryx.ControlSystem
Moryx.Factory
Moryx.Users
to be done
MORYX - Container Moryx.Container to be done
MORYX - Runtime Moryx.Runtime
Moryx.Runtime.DbUpdate
Moryx.Runtime.Endpoints
Moryx.Runtime.Kernel
Moryx.Runtime.Kestrel
Moryx.Runtime.Maintenance
Moryx.Runtime.SmokeTest
Moryx.Runtime.Wcf
Moryx.Runtime.WinService
to be done
MORYX - Model Moryx.Model
Moryx.Model.InMemory
Moryx.Model.PostgreSQL
Moryx.Model.Sqlite
to be done
MORYX - Communication Moryx.Communication.Serial to be done
MORYX - Tools Moryx.Tools
Moryx.Tools.WcfMoryx.TestTools.NUnit
Moryx.TestTools.SystemTest
Moryx.TestTools.Test.Model
Moryx.TestTools.UnitTest
Moryx.ControlSystem.TestTools
Moryx.ControlSystem.TestTools.Assemble
Moryx.TestTools.IntegrationTest
to be done
MORYX - Command Center Moryx.CommandCenter.Web to be done
Samples Moryx.Benchmarking
Moryx.Orders.Samples
Moryx.ProcessData.Samples
Moryx.Products.Samples
TestModule
Moryx.TestModule.Kestrel
-

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 Coverage
Adapter - Influx DB Moryx.ProcessData.InfluxDbListener to be done
Adapter - Spreadsheet Moryx.ProcessData.SpreadsheetsListener to be done
Module - Products Moryx.Products.Model
Moryx.Products.Management
Moryx.Products.Web
Moryx.AbstractionLayer.Products.Endpoints
to be done
Module - Resources Moryx.Resources.Management
Moryx.AbstractionLayer.Resources.Endpoints
to be done
Module - Analytics Moryx.Analytics.Server
Moryx.Analytics.Web
to be done
Module - Media Moryx.Media
Moryx.Media.Server
Moryx.Media.Endpoints
Moryx.Media.Web
to be done
Module - Notifications Moryx.Notifications
Moryx.Notifications.Publisher
Moryx.Notifications.Endpoints
Moryx.Notifications.Web
to be done
Module - Orders Moryx.Orders
Moryx.Orders.Management
Moryx.Orders.Endpoints
Moryx.Orders.Web
to be done
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
to be done
Module - Process Engine Moryx.ControlSystem.ProcessEngine
Moryx.ControlSystem.ProcessEngine.Web
Moryx.ControlSystem.Processes.Endpoints
Moryx.ControlSystem.Jobs.Endpoints
to be done
Module - Setups Moryx.ControlSystem.SetupProvider to be done
Module - Simulation Moryx.ControlSystem
Moryx.ControlSystem.Simulator
Moryx.Drivers.Simulation
to be done
Module - Worker Support Moryx.ControlSystem.WorkerSupport
Moryx.ControlSystem.WorkerSupport.Web
Moryx.ControlSystem.VisualInstructions.Endpoints
Moryx.Resources.AssemblyInstruction
to be done
Module - Workplans Moryx.Workplans
Moryx.Workplans.Editing
Moryx.Workplans.Web
to be done
MORYX - Access Management Moryx.Identity
Moryx.Identity.AccessManagement
Moryx.Identity.Web
to be done
Web - Factory Monitor Moryx.FactoryMonitor.Endpoints
Moryx.FactoryMonitor.Web
to be done
Web - Launcher Moryx.Launcher to be done
Module - Operators Moryx.Operators
Moryx.Operators.Management
Moryx.Operators.Endpoints
Moryx.Operators.Web
to be done
Module - Shifts Moryx.Shifts
Moryx.Shifts.Management
Moryx.Shifts.Endpoints
Moryx.Shifts.Web
to be done
Module - Material Management Moryx.ControlSystem.MaterialManager to be done
Driver - MQTT Moryx.Drivers.Mqtt to be done
Driver - OPC UA Moryx.Drivers.OpcUa to be done

MORYX Pending Platform Developments
(Includes planned additions to the platform portfolio which are in different states of developments)
Component Latest Version Pipeline Status Coverage Requirements
Module - Maintenance Calender 〰️ 〰️ 〰️
Module - Transport Controller 〰️ 〰️ 〰️
Module - Identifier Provider 〰️ 〰️ 〰️

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 25