产线上的视觉检测和 MES 系统,不少工厂都在推,但推着推着就容易走偏——视觉那边跑了一套软件,MES 那边又是另一套系统,两边数据不通,出了问题还得靠人工来回翻。
这个项目的来源挺实在的:一个做非标自动化设备的团队,给客户做的产线质检项目里,发现每次都得把视觉检测、设备监控、工单管理、报表统计这几块东西重新写一遍,很费劲。于是他们花了大半年的时间,把共性部分抽出来,做成了这套 WPF 客户端。
整套东西不花哨,就是冲着车间现场能用、好用来做的。UI 用了深色主题,车间光线复杂的环境下看得清楚。功能上把视觉检测、PLC 通信、工单管理、数据统计都收进来了,形成一个桌面端的一体化方案。
项目介绍一款基于 WPF(.NET 8.0)开发的工业级视觉检测制造执行系统桌面客户端。系统将机器视觉检测与制造执行管理整合在一起,面向产线质检场景,提供从设备监控、视觉检测、生产管理到统计分析的全流程解决方案。
客户端通过项目引用的方式集成 BLL 业务逻辑层、DAL 数据访问层、Models 实体层、Common 公共工具库、Communication 通信层和 Vision 视觉处理层,形成完整的分层架构。视觉部分基于 OpenCvSharp4,通信部分走 Modbus TCP 对接 PLC,数据存在 SQL Server,图表用 LiveCharts2 绘制。
项目功能功能模块
具体说明
用户登录认证
多角色登录(管理员/工程师/操作员),不同角色展示不同功能权限
设备监控
PLC 设备实时状态监控,Modbus TCP 通信,2 秒轮询心跳检测,在线/离线指示灯
视觉检测
实时相机画面采集(OpenCV),缺陷检测与模板匹配,检测结果可视化叠加展示,数据自动记录
MES 生产管理
工单管理(创建/启动/完成/取消),产品管理,生产进度追踪与计数联动
报警中心
实时报警推送,历史报警记录查询与统计,异常快速定位
检测记录
完整检测数据记录,支持按时间/产品/结果筛选,Excel 报表导出(ClosedXML)
统计分析
良率趋势图(LiveCharts2),产量统计柱状图,合格率按颜色分级展示(绿/橙/红)
生产看板
大屏展示实时产量、合格率、当前工单信息,适合产线悬挂展示
产品管理
产品信息增删改查,检测参数配置(阈值、缺陷面积、最大缺陷数)
用户管理
用户账号增删改查,角色权限分配(Admin/Engineer/Operator)
系统配置
数据库连接字符串、PLC 通信地址等参数可视化配置
项目特点视觉检测与 MES 深度绑定:很多项目里视觉检测和 MES 是两个独立系统,数据要靠人工导。这里从设计上就把两块揉在一起——检测结果自动关联当前工单,良品/不良品计数联动更新,不需要中间环节。
分层清晰,模块独立:BLL、DAL、Models、Common、Communication、Vision 各层分开,每个模块有明确的边界。视觉算法想换、PLC 协议要改、数据库要迁移,都在各自层里操作,不会牵一发动全身。
Modbus TCP 通信带心跳保活:2 秒一次的心跳检测,设备状态变化实时反馈到界面上。通信断了界面状态跟着变,现场人员不用猜设备到底在不在线。
Excel 报表一键导出:检测记录支持导出 Excel,用的是 ClosedXML,不用装 Office 也能生成文件。现场管理人员每天下班前点一下导出,当天数据就能带走做日报。
项目技术技术项
具体内容
运行时
.NET 8.0
界面框架
WPF + MVVM
视觉处理
OpenCvSharp4(相机采集、缺陷检测、模板匹配)
图表可视化
LiveCharts2(SkiaSharp)
报表导出
ClosedXML(Excel .xlsx)
PLC 通信
Modbus TCP
数据库
SQL Server
主题样式
自定义 IndustrialDark(20000+ 行 XAML)
系统架构
项目结构├── App.xaml / App.xaml.cs # 应用程序入口├── Config/│ └── appsettings.json # 数据库连接 & PLC 配置├── Converters/│ └── Converters.cs # XAML 值转换器集合├── Themes/│ └── IndustrialDark.xaml # 工业深色主题样式(20000+ 行)├── ViewModels/ # MVVM ViewModel 层│ ├── ViewModelBase.cs # INotifyPropertyChanged 基类│ ├── RelayCommand.cs # ICommand 实现│ ├── MainWindowViewModel.cs # 主窗口(导航、PLC轮询、时钟)│ ├── LoginViewModel.cs # 登录认证│ ├── DeviceMonitorViewModel.cs # 设备状态监控│ ├── VisionInspectViewModel.cs # 视觉检测(核心)│ ├── MESViewModel.cs # MES 数据管理│ ├── AlarmRecordViewModel.cs # 报警记录│ ├── InspectionRecordViewModel.cs # 检测记录│ ├── StatisticsViewModel.cs # 统计分析│ ├── DashboardViewModel.cs # 生产看板│ ├── ProductManagerViewModel.cs # 产品管理│ ├── UserManagerViewModel.cs # 用户管理│ └── SystemConfigViewModel.cs # 系统配置└── Views/ # XAML 视图层├── LoginWindow.xaml(.cs) # 登录窗口├── MainWindow.xaml(.cs) # 主窗口(左侧导航栏)├── DeviceMonitorWindow.xaml # 设备监控├── VisionInspectWindow.xaml # 视觉检测界面├── MESWindow.xaml # MES 数据管理├── AlarmRecordWindow.xaml # 报警记录├── InspectionRecordWindow.xaml # 检测记录├── StatisticsWindow.xaml # 统计分析├── DashboardWindow.xaml # 生产看板├── ProductManagerWindow.xaml # 产品管理├── UserManagerWindow.xaml # 用户管理└── SystemConfigWindow.xaml # 系统配置项目效果
设备监控
视觉检测
MES数据
产品管理
统计分析
生产看板
项目源码运行前注意事项:本项目为 WPF 客户端部分,需要同级目录下放置以下依赖项目:
xxx.BLL— 业务逻辑层
xxx.DAL— 数据访问层
xxx.Models— 实体模型
xxx.Common— 公共工具库
xxx.Communication— 通信层(PLC 等)
xxx.Vision— 视觉处理层
快速启动
配置文件位于 Config/appsettings.json,需配置 SQL Server 连接字符串和 PLC 通信地址。
总结工业软件有个特点:功能再多,不好用就白搭。客户端给我的感觉是,它没去追什么时髦的概念,就是老老实实地把视觉检测、PLC 通信、工单管理、数据统计这几件事做好,然后拼在一起。深色主题、MVVM 分层、Modbus 心跳、Excel 导出——每项技术选择都挺务实,不为了炫技而加东西。
如果你正好在给产线做类似的质检系统,或者手头有个 WPF 项目缺一套像样的工业 UI 框架,可以看看这套源码。代码结构还算清晰,拿来做二次开发起点不低。