欢迎光临
我们一直在努力

从零打造 C# 工业视觉检测系统(一):项目全景与架构设计

从零打造 C# 工业视觉检测系统(一):项目全景与架构设计

系列标签:C# WinForms 工业视觉 海康威视 Modbus OpenCV SQL
源码配套:基于真实项目完整拆解
适合人群:有一定 C# 基础,想转型工业软件开发或机器视觉方向的工程师


一、前言

在工业 4.0 和智能制造的大背景下,机器视觉检测已经成为生产线上的"质检员"。无论是电子元器件的尺寸测量、食品包装的缺陷检测,还是汽车零部件的瑕疵识别,视觉检测系统都在以远高于人眼的精度和速度,24 小时不间断地工作。

本系列文章将基于一个真实的 C# WinForms 工业视觉检测项目,从零开始,手把手带你搭建一套完整的在线检测系统。你将学到:

  • 工业相机的选型与 SDK 开发(海康威视 MVS)
  • OpenCV 图像处理与像素级尺寸测量
  • 串口通信与 Modbus RTU 协议(PLC 剔除控制)
  • 多数据库切换架构(SQL Server / MySQL / SQLite)
  • 检测业务闭环:拍照 → 算法推理 → 判定 → 存库 → 剔除

二、什么是工业视觉检测?

工业视觉检测系统通常由以下几个核心模块组成:

┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 工业相机 │────▶│ 算法推理 │────▶│ 合格判定 │
│ (海康/大华) │ │ (AI/传统CV) │ │ (OK/NG) │
└─────────────┘ └─────────────┘ └──────┬──────┘

┌──────────────────────┘

┌─────────────────┐
│ PLC / 继电器 │
│ (不合格品剔除) │
└─────────────────┘


┌─────────────────┐
│ 数据库 / MES │
│ (数据追溯分析) │
└─────────────────┘

典型工作流程:

  • 传感器触发,工业相机拍照
  • 图像送入算法模块,提取特征、测量尺寸
  • 将实测值与标准规格对比,判定 OK/NG
  • 不合格品通过气吹/推杆等执行机构剔除
  • 检测数据存入数据库,供后续统计分析

  • 三、项目技术全景图

    本项目是一个基于 .NET Framework 4.7.2 的 WinForms 桌面应用,完整技术栈如下:

    模块技术选型用途
    UI 框架 WinForms + SunnyUI + CSkin 工业级人机交互界面
    工业相机 海康威视 MVS SDK (MvCamCtrl.Net) 图像采集,支持 2 路相机
    AI 推理 ONNX Runtime + 自研 Algorithm.dll 图像测量与缺陷检测
    串口通信 NModbus4 + System.IO.Ports Modbus RTU 控制 PLC 剔除
    数据库 SQL Server / MySQL / SQLite 检测数据持久化与追溯
    报表导出 EPPlus Excel 数据导出
    配置管理 Newtonsoft.Json JSON 配置文件读写

    四、源码目录结构解析

    项目根目录位于 F:\\工业视觉\\FormUI\\,核心目录结构如下:

    FormUI/
    ├── Program.cs # 程序入口
    ├── FormUI.csproj # 项目文件
    ├── Common/ # 公共数据模型与配置
    │ ├── Product.cs # 产品规格模型 + SlugStruct
    │ ├── CameraData.cs # 全局相机资源管理
    │ ├── Config.cs # 全局静态配置类
    │ └── CreateTableSql.cs # 数据库建表语句
    ├── Forms/ # 窗体界面
    │ ├── MainForm.cs # 主窗体(Tab 容器)
    │ ├── RunningForm.cs # 检测页面(核心业务流程)
    │ ├── ProductForm.cs # 产品管理
    │ ├── CameraOptionForm.cs # 相机参数与连接
    │ ├── CameraShowForm.cs # 实时浏览
    │ ├── DBOptionForm.cs # 数据库配置
    │ ├── SerialOptionForm.cs # 串口配置
    │ └── StatisticalChartsForm.cs # 历史记录与导出
    ├── Utils/ # 工具类
    │ ├── DllMethod.cs # P/Invoke 调用算法 DLL
    │ ├── SqlHelper.cs # 数据库操作封装
    │ ├── SerialPortHelper.cs # 串口/Modbus 封装
    │ ├── ImageUtil.cs # 图像格式转换
    │ ├── IniConfigHelper.cs # JSON 配置读写
    │ └── SQL/ # 数据库提供者实现
    │ ├── IDatabaseProvider.cs
    │ ├── SqlServerProvider.cs
    │ ├── MySqlProvider.cs
    │ └── SqliteProvider.cs
    └── ChildForms/
    └── SelectCamera.cs # 相机选择弹窗


    五、核心窗体功能一览

    5.1 MainForm —— 主控台

    MainForm 是整个软件的控制中枢,采用 TabControl 作为导航容器,动态加载 7 个功能子页面:

    // MainForm.cs 核心代码
    TabPage tabPage1 = new TabPage("检测");
    TabPage tabPage2 = new TabPage("产品");
    TabPage tabPage3 = new TabPage("相机参数");
    TabPage tabPage4 = new TabPage("数据库参数");
    TabPage tabPage5 = new TabPage("串口参数");
    TabPage tabPage6 = new TabPage("实时浏览");
    TabPage tabPage7 = new TabPage("历史记录");

    LoadFormIntoTabPage(tabPage1, typeof(RunningForm));
    LoadFormIntoTabPage(tabPage2, typeof(ProductForm));
    // … 以此类推

    启动时自动完成两件事:

  • 数据库连接:根据 config.json 中的配置自动连接数据库
  • 串口连接:自动打开串口,准备与 PLC 通信
  • 5.2 RunningForm —— 检测核心

    这是整个系统最重要的页面。点击"开始检测"后,后台启动一个 Task 循环:

  • 调用 DllMethod.start() 执行算法推理
  • 获取产品实测长度、宽度及合格状态
  • 更新界面统计(总数、合格数、不合格数、合格率)
  • 将记录存入数据库
  • 若不合格,通过串口发送剔除指令
  • 5.3 CameraOptionForm —— 相机管理

    支持最多 2 台相机的连接与断开:

    • 正面相机(Camera 0):用于主要检测
    • 背面相机(Camera 1):辅助或备用

    提供实时预览、比例尺标定等功能。


    六、数据库表结构设计

    系统使用两张核心表:

    6.1 Product(产品规格表)

    存储每种产品的检测标准:

    字段说明
    product_name 产品名称
    product_type 类型(0=矩形,1=圆形等)
    product_length 标准长度
    length_up_offset 长度上偏差
    length_down_offset 长度下偏差
    product_width 标准宽度
    width_up_offset 宽度上偏差
    width_down_offset 宽度下偏差
    delay_time 剔除延时(秒)
    hold_time 剔除保持时间(秒)

    6.2 Slug(检测记录表)

    存储每一次检测的原始数据:

    字段说明
    slug_name 产品名称
    slug_type 产品类型
    slug_length 实测长度
    slug_width 实测宽度
    is_qualified 是否合格(0/1)
    create_time 检测时间

    七、开发环境搭建

    7.1 必备工具

    • Visual Studio 2022(社区版即可)
    • .NET Framework 4.7.2 目标包
    • 海康威视 MVS 机器视觉软件(用于相机驱动和客户端调试)
    • SSMS / Navicat(数据库管理工具)

    7.2 项目运行步骤

  • 克隆源码到本地
  • 使用 VS 打开 工业视觉检测.sln
  • 通过 NuGet 还原包(已包含 SunnyUI、EPPlus、NModbus4 等)
  • 确保已安装海康 MVS 驱动,相机能被 MVS 客户端识别
  • 修改 config.json 配置数据库和串口参数
  • F5 运行项目

  • 八、系列文章路线图

    本系列共分为 15 篇文章,由浅入深,完整覆盖项目所有技术点:

    篇号主题核心内容
    01 项目全景与架构设计 你已经在这里 👆
    02 WinForms 主界面与 SunnyUI TabControl、子窗体嵌入、自适应布局
    03 单例/工厂模式与 JSON 配置 架构设计、全局配置、多数据库切换
    04 海康 MVS SDK 与相机枚举 工业相机选型、设备发现、列表展示
    05 相机连接、取流与实时预览 IntPtr 图像转换、双路显示、内存优化
    06 OpenCV 图像处理与比例尺标定 像素操作、BGR 通道、像素→物理尺寸
    07 串口通信 SerialPort 封装 RS232/485、HEX 收发、调试工具
    08 Modbus RTU 与 PLC 剔除控制 NModbus4、寄存器读写、剔除时序
    09 多数据库切换架构 工厂模式、ADO.NET、连接池
    10 检测记录入库与 Excel 导出 分页查询、EPPlus、SQL 注入防范
    11 Task 异步编程与实时性保障 Invoke、CancellationToken、死锁预防
    12 P/Invoke 调用 C++ 算法 DLL DllImport、结构体内存对齐、ONNX
    13 检测业务完整闭环 RunningForm 主循环、数据流串联
    14 异常处理与性能优化 全局异常、日志系统、内存泄漏排查
    15 打包部署与进阶展望 Inno Setup、MES 对接、架构升级

    九、总结

    本文作为系列开篇,介绍了工业视觉检测的应用场景、本项目的技术全景图、源码目录结构以及核心功能模块。从下一篇开始,我们将正式进入代码实战,手把手搭建 WinForms 主界面框架。

    思考题:

    工业视觉检测系统与普通消费级相机应用相比,在软件设计上有哪些特殊要求?(提示:考虑实时性、稳定性、硬件兼容性)


    下篇预告:《从零打造 C# 工业视觉检测系统(二):WinForms 主界面架构与 SunnyUI 实战》

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

    赞(0)
    未经允许不得转载:171主机测评 » 从零打造 C# 工业视觉检测系统(一):项目全景与架构设计
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址