从零打造 C# 工业视觉检测系统(十五):项目打包部署与进阶展望
系列标签 :
C#部署Inno SetupMES工业 4.0架构升级本文目标:掌握 WinForms 项目打包发布,了解工业视觉的进阶方向
一、前言
历时 15 篇文章,我们从零搭建了一套完整的 C# 工业视觉检测系统。本文作为系列收官,将讲解:
- 如何将项目打包为可安装的软件
- 代码架构的复盘与重构建议
- 工业视觉技术的进阶方向
二、项目打包发布
2.1 Visual Studio 发布
- 右键项目 → 发布
- 选择发布目标:文件夹
- 配置:
- 部署模式:框架依赖(目标机器需安装 .NET Framework 4.7.2)
- 或独立部署(体积大但无需安装运行时)
2.2 依赖项整理
确保输出目录包含:
输出目录/
├── 在线相机检测模板.exe
├── Algorithm.dll # 算法库
├── MvCamCtrl.Net.dll # 海康 SDK
├── config.json # 配置文件
├── SunnyUI.dll # UI 库
├── EPPlus.dll # Excel 库
├── NModbus4.dll # Modbus 库
├── Newtonsoft.Json.dll # JSON 库
├── MySql.Data.dll # MySQL 驱动
├── System.Data.SQLite.dll # SQLite 驱动
└── ... 其他依赖
2.3 Inno Setup 安装包制作
Inno Setup 是免费的安装包制作工具,脚本示例:
pascal
[Setup]
AppName=检测系统
AppVersion=1.0
DefaultDirName={pf}\视觉检测系统
OutputDir=.
OutputBaseFilename=DetectSystem_Setup
[Files]
Source: "bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
[Icons]
Name: "{group}\检测系统"; Filename: "{app}\检测系统.exe"
Name: "{commondesktop}\检测系统"; Filename: "{app}\检测系统.exe"
[Run]
Filename: "{app}\检测系统.exe"; Description: "立即运行"; Flags: nowait postinstall
三、架构复盘与重构建议
3.1 当前架构的优点
- 模块化:各功能独立成 Form,职责清晰
- 可扩展:工厂模式支持多数据库切换
- 配置化:JSON 配置文件便于现场调整
3.2 可改进之处
| 当前实现 | 改进方案 | 收益 |
|---|---|---|
SqlHelper 静态类 |
依赖注入 + 接口 | 便于单元测试 |
全局 Config 静态字段 |
强类型配置类 | 编译期检查 |
| 直接在 UI 中调用算法 | 引入 Service 层 | 便于算法替换 |
| 单线程检测循环 | 生产者-消费者队列 | 提升吞吐量 |
3.3 分层架构建议
┌─────────────────────────────────────┐
│ Presentation 层 │
│ MainForm / RunningForm / ... │
├─────────────────────────────────────┤
│ Service 层 │
│ DetectService / ConfigService │
├─────────────────────────────────────┤
│ Repository 层 │
│ IDatabaseProvider / SqlHelper │
├─────────────────────────────────────┤
│ Infrastructure 层 │
│ CameraSDK / SerialPort / Algorithm │
└─────────────────────────────────────┘
四、进阶方向
4.1 MES 系统对接
将检测数据实时上传至 MES(制造执行系统):
csharp
// 检测完成后上报 MES
public void ReportToMES(SlugStruct result)
{
var mesData = new
{
stationId = "STATION_01",
productId = Config.name,
length = result.length,
width = result.width,
isOk = result.is_qualified,
timestamp = DateTime.Now
};
// HTTP POST 到 MES 接口
// var json = JsonConvert.SerializeObject(mesData);
// httpClient.PostAsync(mesUrl, new StringContent(json));
}
4.2 数据上云
- 使用 MQTT 协议将数据推送至阿里云 IoT / 华为云 IoT
- 云端大屏实时展示产线状态
- 大数据分析预测设备故障
4.3 深度学习升级
- 从传统图像处理升级到 YOLO / Faster R-CNN 目标检测
- 缺陷检测:划痕、凹坑、脏污的 AI 识别
- OCR 识别:产品编号、日期码的自动读取
4.4 双机热备
关键产线不能停,可部署主备两套检测系统:
- 主机故障时,备机自动接管
- 共享触发信号和剔除控制
- 数据同步至同一数据库
五、系列知识图谱
工业视觉检测系统
├── UI 层
│ ├── WinForms + SunnyUI
│ ├── TabControl 子窗体嵌入
│ └── 窗体自适应布局
├── 视觉层
│ ├── 海康 MVS SDK
│ ├── 相机枚举/连接/取流
│ ├── IntPtr → Bitmap 转换
│ └── 比例尺标定
├── 算法层
│ ├── P/Invoke 调用 C++ DLL
│ ├── SlugStruct 数据传递
│ └── ONNX Runtime 部署
├── 通信层
│ ├── SerialPort 串口编程
│ ├── Modbus RTU 协议
│ └── PLC/继电器控制
├── 数据层
│ ├── 工厂模式三库切换
│ ├── ADO.NET 数据访问
│ └── EPPlus Excel 导出
└── 架构层
├── 单例/工厂模式
├── Task 异步编程
├── JSON 配置系统
└── 异常处理与性能优化
六、学习资源推荐
| 方向 | 推荐资源 |
|---|---|
| C# WinForms | 《Windows Forms Programming》 |
| 工业相机 | 海康机器人官方文档、MVS SDK 示例 |
| OpenCV | 《学习 OpenCV 3》、官方文档 |
| 深度学习 | 李沐《动手学深度学习》、YOLO 官方仓库 |
| Modbus | Modbus 协议标准文档、NModbus 示例 |
| 工业 4.0 | 《工业 4.0 驱动制造业数字化转型》 |
七、总结
15 篇文章,从零到一,我们完成了:
- 一套完整的 C# WinForms 工业视觉检测系统
- 涵盖 UI、相机、算法、通信、数据库五大模块
- 掌握 10+ 个工业软件开发核心技术点
感谢一路相伴! 如果在实践过程中遇到问题,欢迎在评论区留言交流。
欢迎点赞、收藏、关注,你的支持是我持续输出的动力!
系列完结 🎉