从零打造 C# 工业视觉检测系统(十五):项目打包部署与进阶展望

从零打造 C# 工业视觉检测系统(十五):项目打包部署与进阶展望

系列标签C# 部署 Inno Setup MES 工业 4.0 架构升级

本文目标:掌握 WinForms 项目打包发布,了解工业视觉的进阶方向


一、前言

历时 15 篇文章,我们从零搭建了一套完整的 C# 工业视觉检测系统。本文作为系列收官,将讲解:

  1. 如何将项目打包为可安装的软件
  2. 代码架构的复盘与重构建议
  3. 工业视觉技术的进阶方向

二、项目打包发布

2.1 Visual Studio 发布

  1. 右键项目 → 发布
  2. 选择发布目标:文件夹
  3. 配置:
    • 部署模式:框架依赖(目标机器需安装 .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+ 个工业软件开发核心技术点

感谢一路相伴! 如果在实践过程中遇到问题,欢迎在评论区留言交流。


欢迎点赞、收藏、关注,你的支持是我持续输出的动力!

系列完结 🎉

相关推荐
Nebula_g1 小时前
JavaSE基础语法:特殊类(特殊情景下的设计模式)
java·开发语言·设计模式
不正经学生1 小时前
C语言大小端字节序:内存里字节的排列顺序
c语言·开发语言·arm开发·c++·算法·c#
黑泽明*1 小时前
LVS-Keepalived-全解析
服务器·开发语言·笔记·学习·php
动词ing2 小时前
【C语言】命名规范
c语言·开发语言
大可-2 小时前
Go Air 热重载安装配置指南
开发语言·后端·golang
Dovis(誓平步青云)2 小时前
《 固井工程软件 Cemsol 的数据管理与国产化适配实践》
android·java·开发语言·人工智能
看浪的路人2 小时前
第6讲:SQL 解析器
java·开发语言·数据库
深视智能科技2 小时前
手机中框多项几何尺寸如何在线测量?三维轮廓方案解析
视觉检测
breeze jiang2 小时前
Next.js App Router 全栈实战:从 SPA 的 SEO 痛点到服务端组件与 Hydration 水合机制
开发语言·javascript·ecmascript