1. 项目概述:当AI视觉遇上工业PLC
在工厂车间里,质检工位往往是最“费眼”也最“费人”的地方。工人需要长时间盯着流水线上的产品,判断外观是否有划痕、装配是否到位、标签是否贴歪。这种重复性高、注意力要求集中的工作,不仅容易导致疲劳漏检,人员成本也居高不下。我最近完成的一个项目,核心就是用“AI视觉”+“PLC”的组合拳,把质检员从这种枯燥的岗位上解放出来,实现产线视觉检测的全流程自动化。
简单来说,这个项目就是给传统的工业自动化控制系统(以PLC为核心)装上“眼睛”和“大脑”。眼睛是工业相机,负责采集图像;大脑是部署了AI模型的工控机或边缘计算设备,负责分析图像并做出判断;而PLC,作为整个产线的“神经中枢”和“执行指挥官”,则根据大脑的指令,精准地控制机械手、气缸、分拣装置等执行机构,将不良品剔除或进行后续处理。这不仅仅是两个技术的简单叠加,而是从图像采集、智能分析到物理执行的全链路闭环,真正让生产线具备了“感知-决策-执行”的智能。
这套方案适合谁?如果你是工厂的自动化工程师、设备维护人员,或者是对工业4.0、智能制造感兴趣的技术开发者,那么这个将IT(人工智能)与OT(运营技术)深度融合的实践,会给你带来很多启发。它解决的不仅是“看”的问题,更是“看了之后怎么办”的问题,将AI的决策能力无缝嵌入到实时的物理控制流程中,这才是工业自动化的价值所在。
2. 核心架构与通信协议选型
要实现AI与PLC的协同,首要任务是搭建一个稳定、高效的通信桥梁。这不仅仅是软件层面的接口调用,更涉及到工业现场对实时性、可靠性的严苛要求。整个系统的架构可以清晰地分为三层:感知层、决策层和执行层。
2.1 系统三层架构解析
感知层:由工业相机、光源、镜头及图像采集卡(或直接使用千兆网口相机)构成。它的任务是在PLC触发(例如,光电传感器检测到产品到位)后,高速、清晰地捕捉产品图像。这里的关键在于“触发同步”,必须确保相机拍照的瞬间,产品处于预设的检测位置,这通常由PLC发送一个脉冲信号(Trigger)给相机或视觉控制器来实现。
决策层:这是AI发挥作用的核心。通常是一台安装了视觉处理软件的工控机(IPC)或专用的边缘AI推理设备(如NVIDIA Jetson系列)。它接收来自感知层的图像,运行预先训练好的AI模型(例如,基于YOLO的目标检测模型,或基于ResNet的分类模型),在毫秒级时间内完成缺陷识别、字符读取(OCR)、尺寸测量等分析,并输出一个结构化的结果,例如:“产品A,OK”或“产品B,NG,缺陷类型为划痕,坐标(X,Y)”。
执行层:以PLC为核心,连接着气缸、电机、变频器、机器人等所有执行单元。它接收来自决策层的“判决”结果,并驱动相应的机构动作。例如,如果结果是“NG”,PLC会控制一个推杆气缸在流水线的特定位置将不良品推出;如果结果是“OK”,则放行。
2.2 通信协议的关键抉择
决策层与执行层(AI与PLC)之间的通信,是整个系统的“任督二脉”。选型不当,轻则延迟高,重则系统不稳定。以下是几种主流方案,各有优劣:
1. OPC UA(首选推荐)这是目前工业4.0背景下最受推崇的通信架构。OPC UA独立于硬件平台和操作系统,提供了安全、可靠、跨厂商的数据交换能力。
- 如何工作:在工控机(AI侧)上运行一个OPC UA客户端,将检测结果(如一个布尔变量
Product_Quality)发布到OPC UA服务器。PLC作为OPC UA客户端,订阅这个变量。一旦变量值更新(从False变为True,表示NG),PLC立即能获取到并触发相应的控制逻辑。 - 优势:标准化程度高,几乎所有主流PLC(西门子、罗克韦尔、三菱、欧姆龙的新型号)都支持。支持复杂数据结构、历史数据存取和强大的安全机制(证书、加密)。非常适合需要与MES/ERP等上层系统集成的复杂场景。
- 实操注意:配置相对复杂,需要分别在服务器和客户端设置地址、端口、安全策略。对于简单的信号传递,可能显得“杀鸡用牛刀”,但其面向未来的扩展性是最大优点。
2. 工业以太网协议(西门子Profinet、罗克韦尔EtherNet/IP等)如果AI工控机配备了相应的工业以太网网卡,可以直接接入PLC的工业以太网网络。
- 如何工作:通过PLC的编程软件(如TIA Portal),为工控机分配一个设备站,并配置好交换数据的区域(如一个输入/输出字节区)。AI程序将结果写入这个映射的内存区,PLC周期性地读取这个区域,就像读取一个远程I/O模块一样。
- 优势:速度极快,实时性最高,通信延迟可控制在毫秒甚至微秒级。数据传输完全在PLC的扫描周期内完成,确定性好。
- 劣势:严重依赖特定厂商的协议和硬件,通用性差。通常需要购买厂商专用的通信库或网卡,成本较高,且配置深度绑定PLC品牌。
3. 基于TCP/IP的Socket通信(最灵活,也最考验功底)这是最底层、最通用的方法。PLC和工控机通过标准的以太网口,建立TCP或UDP连接,直接收发自定义格式的数据包。
- 如何工作:在PLC侧,需要编写通信程序块(例如,西门子的TCON、TSEND、TRCV;三菱的套接字通信指令)。在工控机侧,用任何编程语言(Python、C#)编写Socket客户端/服务器程序。双方约定好数据包的格式(例如,前4个字节表示命令,后4个字节表示结果代码)。
- 优势:绝对的控制权,不受任何厂商限制,成本最低(只需普通网卡)。可以传输任何复杂的数据。
- 劣势:开发工作量最大,需要处理连接管理、心跳保持、数据校验、断线重连等一系列网络编程的细节。稳定性和可靠性完全取决于开发者的水平,在振动、电磁干扰复杂的工业现场,容易出问题。
- 实操心得:如果选择此方案,务必在数据包中加入“序列号”和“校验和”。PLC发送请求时带一个序号,AI回复时带回相同的序号和校验结果。PLC端只有校验通过且序号匹配,才认为数据有效。这是避免数据错乱、误动作的生死线。
提示:对于大多数初次尝试的团队,我强烈建议从OPC UA开始。它平衡了难度、通用性和可靠性。虽然初期学习有曲线,但它能让你摆脱对特定硬件的依赖,系统架构更清晰,后续维护和扩展也更容易。
3. AI视觉模型的选择与部署实战
视觉检测的核心是AI模型。但工业场景和互联网图片识别有天壤之别,直接套用开源模型往往“水土不服”。我们的目标是:在有限的硬件资源(工控机)上,实现高精度、高速度、高稳定性的推理。
3.1 模型选型:从问题定义出发
不要一上来就纠结用YOLOv8还是YOLOv9。先明确你的检测目标:
- 缺陷检测:产品表面的划痕、污点、凹坑。这通常是一个“异常检测”或“语义分割”问题。对于特征明显的缺陷,用目标检测(如YOLO)框出位置即可;对于细微、不规则的缺陷,可能需要用U-Net这类分割模型,生成缺陷的像素级掩膜。
- 装配验证:零件是否漏装、装错、装反。这可以转化为“目标检测”或“分类”问题。例如,训练一个YOLO模型识别各个零件的位置和类别;或者,将整个工位拍一张图,输入一个分类模型(如MobileNet),直接输出“OK”或“NG(具体哪种错误)”。
- 字符识别(OCR):读取产品上的序列号、生产日期。工业OCR通常环境可控(字体、背景固定),但可能面临反光、低对比度挑战。可以使用PaddleOCR、EasyOCR等开源框架,但关键是要针对自己的字体和背景做微调训练,直接使用通用模型识别率可能不达标。
- 尺寸测量:零件的长、宽、孔径是否在公差范围内。这属于“传统机器视觉”更擅长的领域,通常基于边缘提取、亚像素拟合等算法,精度可达微米级。AI在这里的作用,可能是先定位出待测区域(ROI),再由传统算法进行精确测量。
我的经验:对于大多数外观检测项目,YOLO系列的目标检测模型是一个很好的起点。它速度快、精度高,且能直接输出缺陷的位置和类别,非常直观。可以从YOLOv5或YOLOv8开始,它们的生态成熟,部署工具多。
3.2 数据:模型的“粮食”,决定模型的上限
工业AI项目,80%的精力可能花在数据上。
- 数据采集:必须模拟所有可能的生产状态。不仅要有良品和各类缺陷品,还要考虑光照变化(白天/晚上、灯管老化)、产品位置微小偏移、背景干扰等。最好能在实际产线上,用相机连续拍摄数小时甚至数天的视频,再从中抽取帧作为图像。
- 数据标注:使用LabelImg、CVAT等工具。标注务必精确和一致。对于划痕,是用矩形框粗略框住,还是用多边形精细勾勒?所有标注员的标准必须统一。标注质量直接决定模型性能。
- 数据增强:工业数据往往稀缺,尤其是缺陷样本。必须使用增强技术:随机旋转(小角度)、亮度对比度调整、添加高斯噪声、模拟运动模糊等。但要小心,不要增强出实际生产中不可能出现的图像,例如将产品旋转180度(如果产品方向是固定的)。
- 构建数据集:按8:1:1的比例划分训练集、验证集和测试集。测试集必须来自独立于训练集采集时间的一批新数据,用于最终评估模型的真实泛化能力。
3.3 模型训练与优化:向着“轻量化”和“高精度”前进
使用PyTorch或Ultralytics(YOLOv8官方库)进行训练。
- 训练技巧:学习率采用余弦退火或带热重启的余弦退火(CosineAnnealingWarmRestarts),有助于跳出局部最优。使用早停法(Early Stopping)防止过拟合。
- 模型轻量化:工控机CPU资源有限。训练完成后,可以考虑:
- 剪枝:移除网络中不重要的连接或通道。
- 量化:将模型权重从浮点数(FP32)转换为整数(INT8)。这能大幅减少模型体积、提升推理速度,对精度影响很小。可以使用TensorRT或OpenVINO等工具进行量化。
- 知识蒸馏:用一个大模型(教师模型)指导一个小模型(学生模型)训练,让小模型获得接近大模型的性能。
3.4 边缘部署:让模型在工控机上跑起来
训练好的PyTorch模型(.pt文件)不能直接在产线上用,需要转化为适合部署的格式。
- 格式转换:
- ONNX:这是一个通用的中间格式。几乎所有的训练框架(PyTorch, TensorFlow)都能将模型导出为ONNX。ONNX模型可以被多种推理引擎加载。
- TensorRT(NVIDIA GPU):如果你用的是带NVIDIA GPU的工控机,TensorRT是性能最优的选择。它会对ONNX模型进行针对特定GPU的深度优化,生成.engine文件,推理速度极快。
- OpenVINO(Intel CPU/集成显卡):如果你用的是Intel平台的工控机(大部分是),OpenVINO是绝配。它可以将ONNX模型转换为IR格式,并利用CPU的AVX指令集或集成显卡进行加速,在纯CPU上也能获得不错的推理速度。
- 编写推理服务:用Python(FastAPI/Flask)或C++编写一个常驻进程。这个服务负责:
- 监听来自PLC的触发信号(或轮询某个共享内存、OPC UA变量)。
- 接收到信号后,从指定位置读取图像。
- 调用TensorRT/OpenVINO引擎进行推理。
- 将推理结果(OK/NG、缺陷坐标)通过OPC UA或Socket写回给PLC。
- 关键点:这个服务必须健壮。要有看门狗机制,万一崩溃了能自动重启。要有完善的日志记录,记录每一张图的处理结果和时间戳,便于追溯。
注意:部署环境的软件版本(CUDA、cuDNN、TensorRT等)必须与模型转换时使用的版本严格一致,否则极易出现各种诡异的错误。建议使用Docker容器将整个推理环境打包,确保环境一致性。
4. PLC程序的逻辑设计与安全联锁
PLC是最终的执行者,它的程序逻辑必须严谨、安全、高效。这里不仅仅是接收一个结果然后动作那么简单。
4.1 核心控制流程设计
一个典型的检测工位PLC程序流程如下:
- 待机与触发:程序循环检测“产品到位”传感器(光电开关)。当传感器导通,启动一个延时定时器(例如,50ms),等待产品运动到相机正下方。定时器到点后,PLC输出一个宽度约10ms的脉冲信号给相机硬件触发线(或通过通信发送触发命令)。
- 等待与超时:触发相机后,PLC进入“等待检测结果”状态。同时启动一个“结果等待超时定时器”(例如,设定为2秒,应远大于AI处理的最大可能时间)。在此状态下,流水线应暂停或产品应被阻挡器挡住。
- 结果处理:
- 收到OK信号:PLC控制阻挡器放开,放行产品,并复位所有相关标志位,回到步骤1。
- 收到NG信号:PLC根据AI传回的缺陷类型或位置信息,控制对应的剔除机构(如推杆、摆臂、吹气嘴)在精确的位置动作,将不良品移出主线。完成后复位,回到步骤1。
- 超时未收到信号:这是非常重要的异常处理!如果超时定时器到点仍未收到AI的任何结果,PLC应判定为“通信故障”或“视觉系统故障”。此时,通常有两种安全策略:a)报警停机,点亮故障灯,等待人工干预;b)保守放行,将当前产品按“NG”处理(防止不良品流入后道),并报警。具体选择哪种,需与生产工艺人员商定。
- 剔除机构复位:确保剔除动作完成后,机构完全复位,不会干涉下一个产品。
4.2 通信数据解析与校验
假设通过OPC UA传输,AI侧传递了一个字符串"NG,Scratch,125,320",表示NG,缺陷为划痕,中心坐标X=125, Y=320。 PLC程序需要解析这个字符串:
- 提取逗号分隔的字段。
- 判断第一个字段是“OK”还是“NG”。
- 如果是“NG”,则根据第二个字段(缺陷类型)决定点亮哪个报警指示灯,或记录到哪种缺陷计数器。
- 将坐标值(125, 320)转换为剔除机构的动作位置。这需要事先做好“图像坐标”到“机械坐标”的标定。例如,通过一个简单的线性映射公式:
机械坐标 = 图像坐标 * 比例系数 + 偏移量。这个系数需要在设备调试时,通过示教方式获取。
4.3 安全联锁与异常处理
这是PLC程序的灵魂,确保设备和人员安全。
- 硬件互锁:剔除机构的气缸动作与流水线驱动电机之间必须建立电气互锁。当气缸伸出时,电机应能立即停止或禁止启动。
- 软件保护:在程序里,为每个运动机构设置软件限位。即使收到了错误的坐标指令,机构也不会运动到物理极限位置之外,防止撞机。
- 状态监控:PLC需要持续监控关键设备的状态,如相机电源、光源亮度(通过光耦反馈)、工控机心跳信号。任何一项异常,立即触发预定义的故障处理程序。
- 手动/自动模式:必须设计完善的手动模式。在手动模式下,操作员可以通过HMI按钮单独控制每一个气缸、电机,方便设备调试和维护。自动模式和手动模式之间要有明确的切换逻辑和状态复位。
实操心得:在PLC程序中,为每一个来自AI的信号(OK、NG、心跳)都设置一个“信号寿命”计时器。每次收到有效信号,就将计时器复位。如果超过设定时间(如3秒)未收到任何信号,则判断为通信中断,触发超时报警。这是诊断网络问题的第一道防线。
5. 系统集成调试与性能优化
当AI模型、PLC程序、机械机构都各自准备好后,真正的挑战——系统联调开始了。这个过程是“三分靠技术,七分靠耐心”。
5.1 分步调试法
绝对不要一上来就全自动运行。
- 通信测试:首先,在PLC和工控机都不连接真实设备的情况下,测试通信链路。用PLC编程软件强制给触发信号变量赋值,看工控机能否收到;在工控机上用脚本模拟发送OK/NG结果,看PLC程序能否正确接收并改变状态。使用网络抓包工具(如Wireshark)辅助排查。
- 视觉单独调试:将产品手动放在检测位,通过工控机上的视觉软件手动触发拍照、分析,观察定位是否准确,识别结果是否稳定。调整光源亮度、相机曝光时间、镜头焦距,确保图像质量最优。
- PLC与执行机构调试:在手动模式下,通过HMI点动控制各个气缸、电机,确保动作顺畅、到位传感器信号正常。
- 半自动联调:开启自动模式,但放慢流水线速度(或单步触发)。观察从传感器触发,到相机拍照,到AI处理,再到PLC控制机构动作,整个链条是否顺畅。重点观察时序:机构动作是否来得及?产品在动作时是否已经运动到了正确位置?
- 全自动压力测试:以正常生产速度连续运行数小时,甚至24小时。统计误检率(良品被判为不良品)、漏检率(不良品被判为良品),并记录所有出现的异常和报警。
5.2 性能瓶颈分析与优化
系统跑起来后,要持续监控和优化。
- 瓶颈定位:使用工控机上的系统监控工具和PLC的在线诊断功能。如果检测节拍达不到要求,是哪个环节慢了?
- 图像采集延迟?检查相机触发模式、曝光时间是否过长。
- AI推理速度慢?用性能分析工具(如PyTorch Profiler, TensorRT)分析模型各层耗时。考虑进一步量化、剪枝,或升级硬件。
- 通信延迟高?检查网络负载,OPC UA的订阅周期是否设置合理。
- PLC程序扫描周期长?优化PLC程序逻辑,将非实时任务放到后台循环。
- 稳定性优化:
- 抗干扰:所有通信线、信号线使用屏蔽线,并与动力线分开走线。PLC和工控机使用稳定的开关电源,必要时加装隔离变压器或UPS。
- 防错机制:在关键的数据交换点增加确认机制。例如,PLC发送触发信号后,可以等待AI回复一个“已接收”信号,然后再等待最终结果。避免因单次通信丢失导致流程卡死。
- 状态恢复:程序要能应对各种意外断电后的重启。所有关键的状态变量(如当前产品状态、计数器)应保存在PLC的断电保持区,上电后能自动恢复到合理状态。
5.3 建立完善的监控与日志系统
一个成熟的自动化系统必须是可观测的。
- PLC侧:将关键数据(检测总数、OK数、NG数、各缺陷类型数量、当前状态、报警代码)映射到HMI画面上,并支持历史数据记录和导出。
- AI工控机侧:推理服务应记录每一张处理过的图像(至少保存NG图像和可疑的OK图像)、推理结果、耗时。这些日志文件要定期归档,它们是后期优化模型、分析漏误检原因的黄金数据。
- 网络侧:可以部署简单的网络监控,确保PLC与工控机之间的Ping延迟稳定。
6. 常见问题排查与维护心得
即使设计再完善,现场总会遇到意想不到的问题。下面是我踩过坑后总结的一些典型问题及排查思路。
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 误检率/漏检率高 | 1. 图像质量差(过曝、欠曝、模糊) 2. 光源不稳定或老化 3. 产品位置波动大 4. AI模型训练数据不充分或过拟合 | 1.复查图像:调出保存的NG/OK图片,肉眼判断是否清晰。调整光源、相机参数。 2.检查光源:用照度计测量光照均匀性,检查光源驱动器供电是否稳定。 3.检查治具:产品定位的机械治具是否磨损,导致产品每次停放位置不一致。需加强机械定位精度。 4.分析错误样本:收集新的误检/漏检样本,加入训练集重新训练模型。 |
| 检测节拍不达标 | 1. AI模型推理速度慢 2. 图像传输或保存耗时 3. PLC与AI通信等待超时 4. 机械动作时间过长 | 1.性能剖析:测量从拍照到结果输出的各阶段耗时。 2.模型优化:尝试量化、剪枝,或更换更轻量的模型主干网络。 3.硬件升级:考虑使用带GPU的工控机,或专用的AI加速卡。 4.并行处理:如果有多工位,可采用多相机+多推理进程并行处理。 |
| 通信间歇性中断 | 1. 网络线缆或接头松动 2. 网络交换机故障或负载过大 3. OPC UA/ Socket连接未做心跳和重连 4. IP地址冲突 | 1.物理层检查:重新插拔网线,更换网线测试。 2.网络诊断:Ping测试看是否有丢包,延迟是否增大。检查交换机状态灯。 3.程序加固:在通信程序中增加心跳包机制和自动重连逻辑。 4.检查IP:确认PLC和工控机的IP地址在同一网段且无冲突。 |
| PLC收到错误坐标导致机构撞机 | 1. AI输出坐标值异常(如负数、超界) 2. 通信数据解析错误 3. 坐标变换系数错误 | 1.数据校验:在PLC程序解析坐标后,立即进行范围判断。如果X,Y值超出图像最大像素范围,则丢弃该结果,按“通信错误”处理。 2.增加标定验证:定期(如每班次开始)用标准标定块进行一次坐标系统验证。 |
| 系统运行一段时间后死机 | 1. 工控机内存泄漏 2. 软件进程崩溃 3. 散热不良导致CPU过热降频或关机 | 1.检查日志:查看系统日志和应用程序日志,寻找崩溃记录。 2.资源监控:在工控机上部署监控,观察内存、CPU使用率是否随时间增长。 3.物理检查:清理工控机风扇和滤网的灰尘,改善设备柜的通风。 |
最后的维护心得:这套系统交付后,绝不是一劳永逸。要建立定期维护制度:每周检查光源亮度,每月备份一次AI模型和程序,每季度清洁一次相机镜头和防护玻璃。最重要的,是保持一份详细的《故障排查手册》,把调试和运行过程中遇到的所有问题及解决方法都记录下来。这不仅是为自己积累经验,更是为接手维护的同事铺平道路。自动化系统的价值,最终体现在长期、稳定、可靠的运行上。