ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

一套能直接用的 WPF 工业上位机(HMI)框架,带源码

2026/8/15 16:11:27 拓冰建站 浏览量
一套能直接用的 WPF 工业上位机(HMI)框架,带源码

目录

前言

项目介绍

项目功能

项目特点

项目技术

项目代码

整体结构

项目效果

项目源码

总结


前言

工业上位机软件这块,市面上的方案要么太重,要么太定制化,每次新项目都得从零搭一遍架子。之前做过几个设备控制项目,发现大量时间花在重复的架构搭建和基础功能实现上,真正投入业务逻辑的时间反而不多。

这次基于 WPF 和 DDD 分层架构做了一套快速开发框架,把设备通讯、数据采集、配方管理、实时监控这些工业场景的通用能力都集成好了,目标是下次再做类似项目时,可以直接拿来用,把精力放在业务本身。

项目介绍

一套面向工业自动化场景的上位机控制框架,采用 DDD 领域驱动设计分层架构,界面基于 Material Design 风格。涵盖了设备通讯、数据采集、配方管理、实时监控等核心能力,可用于搭建半导体、CMP 等工业设备的运行控制与监控软件。

框架整体按 DDD 经典分层拆成表示层、应用层、领域层、基础设施层,外加独立的控件库和插件层,每一层的职责边界都很清楚。

项目功能

功能模块

具体说明

登录鉴权

用户登录入口,权限验证基础

首页看板

关键指标与设备状态概览

工作台

日常作业主界面,承载核心操作

实时监控

设备状态监控,LiveCharts 实时曲线展示

配方管理

工艺配方的增删改查与下发

业务配置

业务参数配置管理

系统设置

系统级参数配置

主题切换

Material Design 多皮肤切换

数据持久化

SQLite 本地存储,基于 SqlSugarCore ORM

Excel 导入导出

基于 MiniExcel 的高性能处理

远程文件操作

基于 Renci.SshNet.Async 的 SFTP/SSH 操作

项目特点

DDD 分层清晰:领域层和基础设施层严格分离,业务逻辑不依赖具体技术实现,替换数据库或通讯协议不影响核心业务

MVVM 样板代码极少:CommunityToolkit.Mvvm 的源生成器模式,[ObservableProperty][RelayCommand]在编译时生成绑定代码

CQRS 风格的协作方式:MediatR 处理命令和事件,模块之间通过消息通信,耦合度低

通讯协议可插拔:ReaderFactory + ReaderStrategy 工厂策略模式,换设备类型只需要新增策略实现,不用动现有代码

插件化打包:DillonMvvm.Plugins 可独立生成 NuGet 包,功能模块可以按需分发

项目技术

技术方向

具体选型

运行时

.NET 8.0 (WPF)

MVVM 框架

CommunityToolkit.Mvvm 8.4.0

UI 主题

MaterialDesignThemes 5.2.1

中介者/CQRS

MediatR 13.0.0

ORM

SqlSugarCore 5.1.4.198

数据库

Microsoft.Data.Sqlite 9.0.8

对象映射

Mapster 7.4.0

日志

Serilog 4.3.0

Excel 处理

MiniExcel 1.41.3

工业通讯

HslCommunication 12.3.3

远程交互

Renci.SshNet.Async 1.4.0

图表

LiveCharts.Wpf 0.9.7

依赖注入

Microsoft.Extensions.Hosting 9.0.7

项目代码

整体结构

解决方案包含七个项目,按 DDD 分层组织:

├── sss.GenericWpf.App/ # 表示层,启动入口 │ ├── Views/ # 所有视图 │ ├── ViewModels/ # 所有视图模型 │ ├── Resources/ # 字体、图片、样式 │ └── Themes/ # 主题资源 ├── sss.GenericWpf.Application/ # 应用层 │ ├── Dtos/ # 数据传输对象 │ ├── Services/ # 应用服务 │ └── EventHandlers/ # 事件处理器 ├── sss.Wpf.Domain/ # 领域层 │ ├── Entities/ # 领域实体 │ ├── EventBus/ # 领域事件 │ └── Extension/ # 领域扩展 ├── sss.Wpf.Domain.Core/ # 领域核心 │ ├── EntityBases/ # 实体基类 │ ├── Repository/ # 仓储抽象接口 │ └── Communication/ # 通讯抽象接口 ├── sss.Wpf.Infrastructure/ # 基础设施层 │ ├── Repositories/ # 仓储具体实现 │ ├── Communication/ # 通讯具体实现 │ └── Configuration/ # 配置文件 ├── sss.GenericWpf.Controls/ # 通用控件库 └── DillonMvvm.Plugins/ # 插件层

项目效果

启动后的主界面左边是导航菜单,右边是内容区域。首页看板展示设备运行状态、产量统计等关键指标。实时监控页面用 LiveCharts 绘制实时曲线,数据刷新流畅。

配方管理页面提供配方的增删改查和下发操作,数据存储在本地的 SQLite 数据库中。通讯模块支持配置多种设备地址和协议类型,切换设备时只需要调整策略配置,业务代码不用动。

主题切换功能可以在亮色和暗色之间切换,界面风格统一。整个界面基于 Material Design,视觉上比较现代,和传统工控软件的风格有明显区别。

项目源码

可以直接克隆、还原依赖、编译运行,示例数据已经预置好了。https://github.com/chinaxuyanan/YR_TM

总结

框架把工业上位机开发中那些重复性的基础设施工作都封装好了。项目结构DDD分层确实让职责边界清晰了不少,换数据库或者换设备通讯协议的时候,影响范围被限制在基础设施层,领域层不需要改动。

CommunityToolkit.Mvvm 的源生成器模式用起来确实省事,View 和 ViewModel 之间的绑定代码量少了很多。MediatR 做模块间通信的方式也算顺手,命令和事件的处理逻辑各自独立,不会堆在一个类里越写越大。

如果大家也在做类似的工业上位机项目,这套架子可以拿过去直接用,或者在它的基础上做定制扩展。

引入地址