很多设备出现卡顿、漏检、节拍不稳定,其实不是算法问题,而是软件线程架构设计不合理。工业视觉设备里最常见的一种架构是:多线程流水线架构(Pipeline Architecture)
核心思想:采集 → 处理 → 控制 → 显示,各线程并行运行
一、工业视觉软件整体架构
典型系统结构如下:
相机线程↓图像队列↓图像处理线程↓结果队列↓运动控制线程↓设备动作
同时还有:UI线程/日志线程/通信线程
所有模块并行工作。
二、视觉软件线程结构
工业视觉系统通常至少有5个线程:
1.相机采集线程
2.图像处理线程
3.运动控制线程
4.UI显示线程
5.通信线程
这样可以避免:相机采集被算法阻塞
三、线程功能分工
1.相机采集线程
负责:相机触发、图像采集、缓存图像
典型流程:
等待触发↓采集图像↓写入队列
关键原则:采集线程必须非常轻量,只负责采集,不做算法。
2.图像处理线程
负责:图像算法、特征提取、定位计算
流程:
从队列取图像↓执行算法↓输出检测结果
如果设备有多相机:通常一个相机一个线程
3.运动控制线程
负责:发送运动指令、触发设备动作
例如:
视觉识别 → 坐标↓运动控制线程↓伺服轴运动
这样视觉和运动不会互相阻塞。
4.UI线程
负责:界面显示、参数设置、图像显示
原则:UI线程不能做算法,否则界面会卡死。
5.通信线程
负责:PLC通信、IO通信、设备状态
常见通信方式:TCP、Modbus、EtherCAT
四、线程之间的数据传递
通常使用:线程安全队列(Queue)
例如:ConcurrentQueue、BlockingQueue
数据流:
采集线程 → 图像队列
图像队列 → 处理线程
处理线程 → 结果队列
结果队列 → 控制线程
这样可以保证,线程互不干扰
五、视觉软件流水线
工业视觉系统通常采用流水线结构:
Frame1 → 采集
Frame2 → 处理
Frame3 → 控制
Frame4 → 输出
不同帧在不同阶段运行。
优点:系统吞吐量最大
六、工业视觉典型处理时间
一个典型设备:
模块 | 时间 |
相机曝光 | 2 ms |
图像传输 | 3 ms |
图像处理 | 10 ms |
运动控制 | 5 ms |
总延迟:≈ 20 ms
如果多线程设计合理:设备节拍可以 < 50 ms
七、工业视觉常见错误
很多设备软件架构会犯这些错误:
错误1:单线程系统
采集 → 算法 → 控制
结果:系统卡顿
错误2:UI做算法
界面线程执行图像处理
结果:界面卡死
错误3:线程无队列
直接共享变量:线程冲突
容易出现:数据错误
八、工业视觉软件推荐架构
设备厂常用架构:
采集线程↓图像缓存队列↓算法线程↓结果队列↓运动控制线程
UI线程独立。
九、C#视觉系统典型结构
如果用 C# WinForms/WPF,通常是:
Main UI Thread
Camera Thread
Vision Thread
Motion Thread
IO Thread
常用技术:Task、Thread、ConcurrentQueue、async/await
十、工业视觉软件设计原则
视觉工程师常用一个原则:视觉系统 = 实时流水线
也就是每个模块独立运行,这样系统最稳定。
往期热门文章:
三菱FX5U与西门子S7-1200谁更强(性能、通信、运控、软件等方面)
为什么中国90%的自动化设备不用CC-Link,而是EtherCAT?
海康VM基于颜色识别模块的分拣类项目实际操作分享(一)(附详细步骤解释)
夜雨聆风