DC娱乐网

WPF 工业视觉检测制造执行系统 (MES)

前言产线上的视觉检测和 MES 系统,不少工厂都在推,但推着推着就容易走偏——视觉那边跑了一套软件,MES 那边又是另一
前言

产线上的视觉检测和 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 框架,可以看看这套源码。代码结构还算清晰,拿来做二次开发起点不低。