收藏
零基础WPF开发上位机
制造业数字化浪潮下,MES 系统外包需求爆发式增长,但很多 .NET 开发者面对 MES 项目时总感觉无从下手:业务模块太杂、数据量太大、多库协同难、生产环境排障难。传统单体 MES 改不动、扩不了,外包项目交付后维护成本极高。基于 .NET Core/.NET 8+ 的微服务架构,是目前中小工厂 MES 项目的最优解 —— 既能控制成本,又能按需扩展。
整体架构分层:
网关层
:YARP / Ocelot 统一入口,鉴权、限流、路由转发业务服务层
:按 MES 业务域拆分的独立微服务支撑服务层
:缓存、消息队列、任务调度、文件服务数据层
:多业务库 + Redis 集群 + 时序数据库监控层
:链路追踪、日志聚合、健康检查 技术栈标配:ASP.NET Core Web API、Entity Framework Core、AutoMapper、MediatR、Serilog、CAP / MassTransit。模块划分是 MES 项目的地基,拆粗了回到单体,拆细了运维爆炸。按照工业制造的标准业务域,拆成 8 个核心微服务刚刚好,外包项目可以按需裁剪。
独立库
:mes_base_db,数据变动频率低,是所有业务的基础 2. 生产计划微服务(PlanService) 工单创建、下发、拆分、合并、暂停、结案 排程结果接入(对接 APS 或简单排产) 物料齐套检查、领料单生成 重点处理工单状态机,避免状态错乱 3. 生产执行微服务(ExecuteService) 工序报工、返工、报废、补料 工位机数据采集、条码流转 在制品(WIP)追踪、工序转移MES 最核心服务
,并发最高,数据量最大 4. 质量管理微服务(QAService) 首检、巡检、完工检、全检 不良品处理、缺陷代码、8D 报告 质检方案、抽样标准、SPC 统计 与报工流程强联动,报工触发质检 5. 仓库物流微服务(WarehouseService) 原料入库、领料、退料、调拨 半成品 / 成品入库、出库、盘点 库位管理、条码管理、批次追溯 注意与 ERP 库存模块的边界划分 6. 设备管理微服务(EquipmentService) 设备状态实时采集(运行 / 待机 / 故障 / 停机) 点检、保养、维修工单 设备 OEE 计算、故障统计分析 对接 PLC、SCADA 或数采终端 7. 系统管理微服务(AuthService) 用户、角色、权限、菜单 租户管理(多工厂模式) 日志审计、数据字典、系统配置 统一认证中心,JWT + 刷新令牌 8. 报表分析微服务(ReportService) 生产日报、月报、看板数据 效率、良率、产能等核心指标 独立查询库,避免影响业务库性能外包实战经验:不要一开始就全量上,先做「基础数据 + 生产执行 + 质量管理」铁三角,80% 的工厂需求都能覆盖,后续再迭代扩展。
MES 数据有明显的冷热分离特征,业务属性差异极大,单库会成为性能瓶颈。
微服务下不要追求强分布式事务,MES 场景最终一致性足够。
方案
:CAP 或 MassTransit + RabbitMQ模式
:事件驱动 + 本地消息表补偿机制
:失败重试 + 人工干预页面 举例:工单下发 → 扣减库存 → 生成领料单,通过事件异步流转,异常时自动回滚事件。 3. EF Core 多库配置实战MES 很多场景读远多于写,而且生产现场工位机并发高,不用 Redis 很容易卡爆。
一级缓存(内存)
:IMemoryCache,存基础数据字典、系统配置,单实例服务用二级缓存(Redis)
:CRedis / StackExchange.Redis,存物料、BOM、工艺路线、用户权限本地 + Redis 多级缓存
:大工厂多节点部署时使用,减少 Redis 压力 2. MES 必缓存的 5 类数据 基础资料类 :物料、BOM、工艺路线、工序 —— 过期时间 24h,变更时主动失效 权限类 :用户菜单、角色权限 —— 过期时间 2h,权限变更时清理 工单快照 :当前生产工单基本信息 —— 过期时间 30min,报工更新 看板数据 :实时产量、设备状态 —— 过期时间 5~10s,定时刷新 防重复提交 :报工单号、条码校验 —— 短时效 1min 3. 缓存一致性与穿透防护外包项目成本优先:单机 Redis + 持久化足够中小工厂使用;大型项目用主从 + 哨兵模式。
MES 系统链路长、调用关系复杂,工位机报个错不知道卡在哪一层。没有链路追踪,外包售后能把你累死。
采集
:OpenTelemetry .NET SDK 自动埋点存储 + 展示
:Jaeger 轻量易部署,适合中小项目日志关联
:Serilog 注入 TraceId,日志与链路互通 2. 关键埋点位置 网关入口:记录请求来源、用户、客户端 IP 服务间调用:HTTP /gRPC 自动传播 TraceId 数据库:EF Core 拦截器记录 SQL 执行耗时 消息队列:生产端 + 消费端埋点 自定义业务点:报工、质检等核心操作手动加 Span 3. 实战配置代码把所有服务日志统一收集,通过 TraceId 一键串联起整个请求链路,生产环境排障效率提升 10 倍。
六、落地建议:外包项目怎么快速交付 技术选型保守原则 :优先用团队熟悉的技术,不要为了炫技上新技术。.NET 8 + SQL Server + Redis + RabbitMQ 是最稳组合。 先做 MVP 再迭代 :第一期只上核心 3~4 个模块,保证跑通主流程,二期再扩展报表、设备等。 预留扩展点 :接口设计留余量,比如数采服务抽象成接口,后续对接不同品牌 PLC 不用改核心。 文档交付到位 :数据库设计文档、接口文档、部署文档、运维手册,是外包项目验收的关键。微信扫一扫关注该公众号