工业视觉检测领域有个老问题:相机厂家SDK各不一样,串口网口通信协议五花八门,每个项目都要从头写一遍驱动层和流程控制。一套检测逻辑从调试到上线,花在底层适配上的时间往往比业务逻辑还多。
本文推荐一个视觉检测平台,支持海康工业相机、OpenCV 算子流程编排、C# 脚本运算节点、串口通信触发。它把相机接入和通信驱动抽象成独立的能力层,上层业务只需要关心流程编排和算子配置,不用再被硬件差异拖慢进度。
项目是一套工业视觉检测平台的核心能力层,专门处理海康工业相机的设备接入和通信驱动。
整个解决方案分为两层:底层的 VisualMaster 组件库负责相机控制和串口网口通信,上层的 xxxForm 是一个 WinForms 可执行程序,把流程编排、界面交互和运行时控制整合成完整的视觉检测软件。
项目采用单向依赖架构,主应用依赖组件库,组件库不依赖主应用。这意味着相机和通信的能力可以独立测试,甚至单独打包给其他项目复用。
| 功能模块 | 具体说明 |
|---|---|
| 相机设备发现 | 自动扫描并列出可用海康工业相机,支持多相机同时接入 |
| 相机连接与采集 | 建立设备连接,控制采集启停,支持连续采集和软触发 |
| 实时预览 | 将相机画面渲染到界面控件,支持缩放和 roi 区域显示 |
| 设备参数配置 | 曝光、增益、帧率等参数的读取和设置,支持保存配置档 |
| 帧缓冲管理 | 统一的帧对象模型,包含图像数据和时间戳,需要及时释放避免内存上涨 |
| UART 串口通信 | 串口参数配置、数据收发,支持字节块匹配触发 |
| TCP 网络通信 | TCP 客户端/服务器模式,数据收发与解析 |
| 通信驱动框架 | 统一的输入输出规则,新驱动可通过工厂注册的方式扩展 |
| 流程触发机制 | 支持手动触发、相机帧触发、定时器触发、串口数据匹配触发 |
| 流程执行器 | 编排视觉算子的执行顺序,通过服务接口调用硬件能力 |
| 运行时桥接 | 相机和通信的运行时状态管理与异常处理 |
分层清晰:能力层和应用层明确分离,相机驱动和通信驱动作为独立组件库存在,可以在不修改主程序的情况下单独升级
双路径兼容:相机接入同时保留了兼容路径(MvsCamera)和新路径(HikrobotDevice),过渡期间不会影响原有项目
统一帧模型:不管相机型号和分辨率如何变化,上层拿到的都是 CameraFrameBuffer 对象,包含图像数据和采集时间戳
可扩展通信架构:UART 和 TCP 通过工厂模式注册到 CommunicationManager,新增 Modbus 或其他协议时只需实现驱动接口
多触发模式:流程执行支持四种触发源,串口匹配触发特别适合流水线上靠传感器信号启停的场景
深色主题统一:UI 基础库提供了统一的深色 XAML 主题,两个核心库共同依赖,视觉风格保持一致
| 技术 | 用途 |
|---|---|
| C# .NET Framework | 主开发语言和运行时环境 |
| WinForms | 上层业务应用界面框架 |
| WPF | 组件库中的 UI 展示层 |
| 海康工业相机 SDK | 相机设备接入和底层采集 |
| OpenCV | 图像处理与视觉算子运算 |
| SerialPort | 串口通信基础类库 |
| Socket/TcpClient | TCP 网络通信实现 |
| MSBuild | 项目构建工具 |
项目启动后首先看到的是 xxxxForm 主窗口,左侧是流程编辑区,右侧是相机预览画面。点击相机连接按钮后,设备列表中会出现已识别的海康相机,选中即可打开采集流。
流程编排支持拖拽式添加算子节点。比如一个典型的检测流程可以是:相机帧触发 -> 图像预处理(高斯滤波)-> 边缘检测(Canny)-> 结果判断 -> 串口输出 OK/NG 信号。每个节点的参数可以在右侧属性面板中调整。
通信部分支持在界面上直接配置串口号、波特率、数据位、停止位等参数。配置保存后,通信驱动会自动启动并在后台监听数据。当收到的字节块匹配预设规则时,可以触发流程执行或者更新界面状态。
帧缓冲管理是运行时的关键点。相机采集到的每一帧都需要通过 CameraFrameSnapshot 对象传递,使用完毕后必须调用 Dispose 方法释放。这个机制保证了长时间运行下内存不会持续增长。




项目仓库结构如下:
xxxx/ # 能力组件库
├── xxxx.CameraLink/ # 相机驱动核心
│ ├── API/ # 对外接口
│ ├── Adapter/ # 适配器层
│ ├── Core/ # 核心实现
│ └── UI/ # 可复用UI控件
├── xxxx.Communication/ # 通信驱动核心
│ ├── Api/ # 对外接口
│ ├── Core/ # 核心抽象
│ ├── Driver/ # 驱动实现(UART/TCP)
│ └── UI/ # 配置界面控件
├── xxxx.UI.Basic/ # 深色主题基础库
└── 各个.TestApp/ # 示例应用
xxxxxForm/ # 主应用工程
├── Forms/ # 窗口界面
│ ├── VisionController.cs # 运行时编排入口
│ ├── VisionCameraRuntime.cs # 相机运行时桥接
│ └── VisionSerialRuntime.cs # 通信运行时桥接
├── WorkFlow/ # 流程执行
│ └── FlowExecutor.cs # 流程执行器
└── xxxxForm.csproj # 主工程文件
构建命令:
msbuild xxxxForm.slnx /p:Configuration=Debug
运行主程序:xxxForm\bin\Debug\xxxxForm.exe
需要注意一个细节:主要工程使用的是 old-style csproj 格式,新增 .cs 文件后必须手动在工程文件中加入 Compile Include 条目,否则编译时会找不到新文件。
这套框架解决的是工业视觉项目中的重复劳动问题。相机和通信这两块,不同厂家不同协议差异很大,但接入逻辑其实是相通的。把这两层抽象成独立组件库之后,上层业务只需要关心流程编排和算子配置,不用每次都被底层驱动折腾一遍。
架构上最值得借鉴的是分层方式和依赖方向的控制。能力层独立出来之后,相机驱动可以单独加测试用例跑,通信模块也可以单独验证,整体项目的稳定性和可维护性都会有明显提升。如果正在做类似的视觉检测项目,这套设计思路可以参考。
、、、、、、、、相机驱动、、C#、
更新时间:2026-06-15
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302034844号