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
// 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 |