Skip to content

3. Context and Scope

This section defines the boundaries of Essert.MF and its interfaces to external systems.


3.1 Business Context

System Context Diagram

flowchart TD
    subgraph ExternalSystems["External Systems"]
        HMI["HMI Panels\n(Operators)"]
        SCADA["SCADA Systems"]
        PLC["PLC Controllers"]
        Vision["Vision Systems\n(XGX/IV3)"]
    end

    subgraph EssertMF["Essert.MF System"]
        subgraph APILayer["API Layer"]
            REST_API["REST API\n(Active)"]
            OPCUA_API["OPC UA\n(Active)"]
            GraphQL_API["GraphQL\n(Planned)"]
            GRPC_API["gRPC\n(Planned)"]
        end

        subgraph AppLayer["Application Layer"]
            AppServices["Commands | Queries | Handlers | DTOs"]
        end

        subgraph DomainLayer["Domain Layer"]
            Domains["Manufacturing | Product | Quality | Robot | WorkPieceCarrier"]
        end

        subgraph InfraLayer["Infrastructure Layer"]
            InfraServices["Repositories | DbContexts | Services"]
        end
    end

    subgraph MariaDB["MariaDB Database Server"]
        db_process["db_process"]
        db_stats["db_statistics"]
        db_wpc["db_wpc"]
        db_robots["db_robots"]
        db_essert["db_essert"]
        db_changelogs["db_changelogs"]
        db_productparam["db_productparameter"]
        db_sysparam["db_systemparameter"]
    end

    HMI -->|REST| REST_API
    SCADA -->|OPC UA| OPCUA_API
    PLC -->|REST| REST_API
    Vision -->|REST| REST_API

    REST_API --> AppServices
    OPCUA_API --> AppServices
    GraphQL_API --> AppServices
    GRPC_API --> AppServices

    AppServices --> Domains
    Domains --> InfraServices

    InfraServices --> db_process
    InfraServices --> db_stats
    InfraServices --> db_wpc
    InfraServices --> db_robots
    InfraServices --> db_essert
    InfraServices --> db_changelogs
    InfraServices --> db_productparam
    InfraServices --> db_sysparam

3.2 External Interfaces

3.2.1 REST API Interface

Property Value
Protocol HTTP/HTTPS
Format JSON
Documentation Swagger/OpenAPI 3.0
Base URL /api/v1
Status Active (31 controllers)

Controller Endpoints

Controller Base Path Description
ManufacturingController /api/v1/manufacturing Process lifecycle management
ProductsController /api/v1/products Product CRUD, versions
WorkPieceCarriersController /api/v1/wpc WPC tracking and management
RobotsController /api/v1/robots Robot master/position data
StatisticsController /api/v1/statistics Measurements, messages, cycle times
SystemController /api/v1/system Variables, battery, downtime

Parameter Controllers (15 types)

Controller Base Path Equipment Type
ThParametersController /api/v1/parameters/th TrayHandling
ScParametersController /api/v1/parameters/sc Steep Conveyor
EgpParametersController /api/v1/parameters/egp Schunk EGP Grippers
RflParametersController /api/v1/parameters/rfl Refill Logic
XgxParametersController /api/v1/parameters/xgx Keyence XGX Vision
Iv3ParametersController /api/v1/parameters/iv3 Keyence IV3 Vision
KannParametersController /api/v1/parameters/kann KocoMotion Steppers
HpParametersController /api/v1/parameters/hp RNA Vibration Hopper
EsParametersController /api/v1/parameters/es Essert Shaker
CmmtParametersController /api/v1/parameters/cmmt FESTO CMMT-AS Servos
ClParametersController /api/v1/parameters/cl Circulation Logic
ElParametersController /api/v1/parameters/el Essert Lighting
GjParametersController /api/v1/parameters/gj Gripperjaws
MfconfigController /api/v1/parameters/mfconfig Microfactory Config
UnspecifiedParametersController /api/v1/parameters/unspecified Dynamic Parameters

3.2.2 OPC UA Interface

Property Value
Protocol OPC UA (IEC 62541)
Port 4840 (configurable)
Security Basic256Sha256, Anonymous
Status Active (In Development)

Node Managers

Node Manager Namespace Description
ManufacturingNodeManager urn:essert:mf:manufacturing Process state, operations
ProductNodeManager urn:essert:mf:product Product data, versions

OPC UA Methods (Exposed)

Method Node Manager Description
CreateProcess Manufacturing Create new manufacturing process
CompleteProcess Manufacturing Complete a process
FailProcess Manufacturing Mark process as failed
GetProduct Product Get product details
GetProductsByVersion Product Query products by version

3.2.3 Database Interface

Property Value
DBMS MariaDB 11.7
Host 192.168.101.128 (configurable)
Port 3306
User Service
Protocol MySQL native protocol

Databases

Database Tables Purpose
db_process 1 Manufacturing process tracking
db_statistics 23 Measurements, messages, cycle times
db_changelogs 71 Historical change tracking
db_essert 3 System configuration, variables
db_productparameter 59 Parameter configurations
db_robots 5 Robot master/position data
db_wpc 4 Work Piece Carrier management
db_systemparameter 8 System-level machine parameters

3.3 Technical Context

Communication Diagram

flowchart TD
    subgraph ExternalSystems["External Systems"]
        HMI_Browser["HMI Browser"]
        SCADA_Client["SCADA/OPC Client"]
        PLC_Beckhoff["PLC/Beckhoff"]
        TestClient["Test Client\n(Swagger)"]
    end

    subgraph Runtime["Essert.MF Runtime"]
        subgraph Servers["API Servers"]
            Kestrel["Kestrel Web Server\nPort: 5000 (REST)"]
            OpcUaServer["OPC UA Server\n(MfOpcServer)\nPort: 4840"]
            GraphQLServer["GraphQL\n(Planned)"]
        end

        AppServices["Application Services\n(73 Handlers)"]

        DomainLayer["Domain Layer\n5 Bounded Contexts | 21 Events | 19 Value Objects"]

        subgraph Infra["Infrastructure (32 Repositories)"]
            EFCore["Entity Framework Core\nPomelo MySQL Provider\n8 DbContexts with Connection Pooling"]
        end
    end

    subgraph MariaDB["MariaDB 11.7 Server\n192.168.101.128:3306"]
        DBInfo["8 Databases | 174 Tables\nAUTO_INCREMENT UIDs | InnoDB Engine"]
    end

    HMI_Browser -->|"HTTP / JSON"| Kestrel
    SCADA_Client -->|"OPC UA / Binary"| OpcUaServer
    PLC_Beckhoff -->|"REST / JSON"| Kestrel
    TestClient -->|"HTTP / JSON"| Kestrel

    Kestrel --> AppServices
    OpcUaServer --> AppServices
    GraphQLServer --> AppServices

    AppServices --> DomainLayer
    DomainLayer --> EFCore

    EFCore -->|"TCP/IP Port 3306\nMySQL Protocol"| DBInfo

Technology Stack

Layer Technology Version
Runtime .NET 8.0 / 9.0
Web Server Kestrel Built-in
REST Framework ASP.NET Core MVC 8.0
OPC UA OPC Foundation .NET Standard Latest
ORM Entity Framework Core 8.0
MySQL Provider Pomelo.EntityFrameworkCore.MySql 8.x
Testing xUnit + FluentAssertions Latest
API Docs Swashbuckle (Swagger) Latest

3.4 Interface Contracts

REST API Response Format

// Success Response
{
  "success": true,
  "data": { ... },
  "message": null
}

// Error Response
{
  "success": false,
  "data": null,
  "message": "Error description"
}

// List Response
{
  "success": true,
  "data": [
    { ... },
    { ... }
  ],
  "totalCount": 42,
  "pageSize": 20,
  "pageNumber": 1
}

Common Entity Fields

All entities exposed via API include:

Field Type Description
uid long Unique identifier (AUTO_INCREMENT)
timestamp datetime Last modification time
creator string User/system that created record
crc long CRC32 checksum