2. 系统架构与信号流:视觉闭环系统的硬件组成与软件架构
大家好,我是老张。今天咱们聊聊视觉闭环系统的骨架——系统架构与信号流。说白了,就是搞清楚相机怎么拍、数据怎么传、PLC怎么动。我在现场调试时见过太多人一上来就调参数,结果发现硬件选型就错了,那真是白忙活一场。
2.1 硬件组成:四件套的选型与搭配
一个典型的视觉闭环系统,硬件上离不开四样东西:相机、镜头、光源、PLC/运动控制器。这四样东西,缺一个都不行,搭配不好更不行。
2.1.1 相机:眼睛要亮,更要快
相机选型,我个人习惯先看三个参数:分辨率、帧率、传感器类型。
- 分辨率:不是越高越好。检测0.1mm的划痕,200万像素够用;要是测晶圆上的纳米级缺陷,那得上千万像素。我有个项目,客户非要上1200万像素,结果帧率跟不上,产线直接卡死。后来换成500万像素,配合好光源,问题全解决了。
- 帧率:产线速度决定帧率。比如产线节拍是0.5秒一个工件,那相机至少得2fps以上。但要注意,帧率高了,曝光时间就短,光源得跟上。
- 传感器类型:CCD和CMOS。现在主流是CMOS,便宜、功耗低。但如果你做的是高速运动检测,CCD的全局快门(Global Shutter)优势就出来了。我做过一个锂电池极片检测项目,用CMOS的卷帘快门(Rolling Shutter),拍出来的极片都是歪的,后来换成全局快门才搞定。
重要提示:相机接口也很关键。GigE Vision适合远距离传输(100米内),USB3.0适合近距离高速传输。工业现场我推荐GigE,抗干扰能力强。
2.1.2 镜头:焦距、光圈、畸变
镜头这东西,很多人不重视。其实镜头选不好,相机再好也白搭。
- 焦距:决定了视野大小。比如你要看一个10cm×10cm的工件,工作距离300mm,那焦距大概在12mm左右。公式很简单:焦距 = 工作距离 × 传感器尺寸 / 视野尺寸。
- 光圈:光圈越大,进光量越多,但景深越小。做精密测量时,我建议用小光圈(F8-F16),保证整个工件都在焦内。
- 畸变:这是镜头的硬伤。普通镜头边缘畸变可能到1%-2%,做测量的话必须用远心镜头或进行畸变校正。我记得有个项目,客户用普通镜头测螺丝外径,结果边缘的螺丝总是偏大0.05mm,后来换了远心镜头,问题迎刃而解。
我的经验:选镜头时,一定要考虑接口兼容性。C接口和CS接口就差2.5mm,装不上就尴尬了。我包里常备一个转接环,以防万一。
2.1.3 光源:打光打得好,算法省一半
光源是视觉系统的灵魂。我常说,打光打得好,算法省一半。光源选型主要看颜色、角度、形状。
| 光源类型 | 适用场景 | 我的建议 |
|---|---|---|
| 环形光源 | 检测字符、划痕 | 低角度环形光,突出表面纹理 |
| 背光源 | 测量外形、轮廓 | 均匀性好,适合高精度测量 |
| 条形光源 | 检测反光表面 | 配合角度调整,避免反光干扰 |
| 同轴光源 | 检测镜面、玻璃 | 消除阴影,但亮度要求高 |
颜色选择上,记住一个原则:光源颜色与工件颜色互补。比如检测红色工件上的黑色缺陷,用蓝色光源,对比度最高。我做过一个PCB焊点检测,用红色光源死活看不清焊锡,换成蓝色光源,焊点轮廓清晰可见。
2.1.4 PLC/运动控制器:执行的大脑
PLC负责接收视觉系统的结果,然后控制执行机构(气缸、伺服电机等)。这里要注意通信协议的选择。
- 以太网通信:主流方式,支持TCP/IP、UDP、Profinet、EtherCAT等。我个人偏爱EtherCAT,实时性好,适合高速运动控制。
- 串口通信:RS232/RS485,适合简单场景,但速度慢。
- IO信号:最直接的方式,通过数字量IO触发相机拍照或接收结果。但信号多了,接线就复杂了。
避坑指南:我曾经在一个项目中,PLC和视觉系统之间用TCP通信,结果因为网络延迟,导致运动控制滞后了200ms。后来换成EtherCAT,延迟降到1ms以内。所以,实时性要求高的场合,别用TCP。
2.2 软件架构:从采集到通信的完整链路
硬件搭好了,软件就是灵魂。一个完整的视觉软件架构,通常包含三层:图像采集层、图像处理层、通信层。
2.2.1 图像采集层
这一层负责从相机获取原始图像数据。关键点在于触发方式和缓存管理。
- 触发方式:软触发(软件指令)和硬触发(外部信号)。产线上我强烈推荐硬触发,用PLC的IO信号直接触发相机拍照,延迟最低。
- 缓存管理:相机采集的图像数据量很大,比如200万像素的彩色图像,一张就6MB。如果处理速度跟不上,缓存会爆。我一般用环形缓冲区(Ring Buffer),保证数据不丢失。
// 伪代码示例:硬触发采集流程
while (true) {
if (硬触发信号到达) {
相机开始曝光;
读取图像数据到缓冲区;
通知处理线程;
}
}
2.2.2 图像处理层
这是核心。处理流程一般是:预处理 → 特征提取 → 判断决策。
- 预处理:去噪、增强对比度、二值化。我常用高斯滤波去噪,再用直方图均衡化增强对比度。
- 特征提取:边缘检测、模板匹配、Blob分析。比如检测螺丝有无,用模板匹配;测量尺寸,用边缘检测。
- 判断决策:根据特征值判断OK/NG。这里要设置合理的阈值,太严容易误判,太松容易漏检。
我的经验:处理时间要严格控制。一般视觉处理时间不能超过产线节拍的80%。比如节拍是500ms,那处理时间最好控制在400ms以内。否则,产线会等视觉系统,导致效率下降。
2.2.3 通信层
处理完的结果,要发给PLC。通信层负责数据封装和协议转换。
- 数据封装:把结果(OK/NG、坐标值、角度等)打包成PLC能识别的格式。比如Profinet协议,数据要按字节对齐。
- 协议转换:视觉系统通常用C++或C#开发,PLC用梯形图。中间需要协议栈来转换。我常用的是Socket通信,简单可靠。
// 伪代码示例:发送结果给PLC
void SendResultToPLC(bool isOK, float posX, float posY) {
byte[] data = new byte[8];
data[0] = isOK ? 1 : 0;
BitConverter.GetBytes(posX).CopyTo(data, 1);
BitConverter.GetBytes(posY).CopyTo(data, 5);
plcSocket.Send(data);
}
2.3 信号流与数据链路:从拍照到执行的全过程
好了,硬件和软件都讲完了,咱们看看信号是怎么流的。我画了一张图,帮你理解整个链路。
信号流其实很简单,就三步:
- 触发拍照:PLC或传感器发出触发信号,相机开始拍照。这里要注意,触发信号的电平和脉宽要匹配相机的要求。我遇到过触发信号脉宽太短,相机没反应的情况。
- 图像处理:相机把图像传给视觉处理PC,PC运行算法,得出结果。这个过程中,图像数据量很大,建议用DMA(直接内存访问)传输,减少CPU负担。
- 结果反馈:视觉PC把结果发给PLC,PLC控制执行机构动作。比如检测到NG,PLC控制气缸把不良品推掉。
关键点:整个闭环的延迟要控制在毫秒级。从触发到执行,延迟超过100ms,产线就可能出问题。我一般用示波器抓触发信号和输出信号,算延迟时间。
2.4 实战中的常见问题与排查思路
说了这么多,咱们看看实际项目中容易踩的坑。
- 问题1:相机拍不到图像。先检查触发信号有没有到相机,再看光源有没有亮。我有个项目,折腾了半天,结果是触发线松了。
- 问题2:图像处理结果不稳定。大概率是光源问题。检查光源是否老化、是否有环境光干扰。我曾经在车间里,头顶的日光灯一开一关,检测结果就飘。
- 问题3:PLC收不到结果。检查通信协议是否匹配,IP地址、端口号对不对。我建议先用串口调试助手测试通信,排除软件问题。
我的习惯:每次调试前,先画一张信号流图,标出每个节点的信号类型和延迟时间。这样排查问题,一目了然。
好了,系统架构与信号流就讲到这里。记住,硬件选型是基础,软件架构是灵魂,信号流是纽带。三者缺一不可。下次咱们聊聊具体的故障排查方法,到时候见。