简介:这份文档面向汽车制造、自动化及机器视觉方向的工程师与技术人员,聚焦西门子机器视觉系统在发动机装配线上的落地应用,帮助读者理解如何用视觉方案替代人工完成高精度质量检测。资源为单个docx文件,压缩包约1000KB,内容以图文结合的技术文档形式呈现,便于按章节查阅。文档围绕VS100与VS700两大系列展开,重点讲解VS722在缸体打刻号码检查与总成后外观检查两个工位的实际部署,涵盖SPECTATION软件组态、OCR软传感器定义、与PLC的以太网及PROFIBUS通讯方式,以及零部件错装漏装的检测逻辑。读者可从中获取完整的工位控制结构、拍照触发与旋转检查流程、97种型号的识别比对思路,以及视觉系统选型与集成的参考经验。目前已有126人学习,适合需要了解西门子视觉产品在汽车装配场景中具体应用的技术人员参考。
1. 西门子机器视觉在发动机装配线上的真实定位:不是替代人眼,是接管判断
汽车发动机装配线有个特点:零件贵、节拍紧、返工成本高。一台四缸发动机总成上有上百个螺栓、几十个垫片和密封圈,装错一个,轻则漏油,重则拉缸。过去这些工位靠人眼加扭矩枪,但人眼在连续工作两小时后漏检率会明显上升,尤其是垫片缺失、O 型圈偏位、螺栓垫圈反装这类“差一点”的缺陷。西门子机器视觉系统在汽车发动机装配线上的应用,核心不是用相机替代人,而是把“装没装、装对没装对、装到位没到位”这三个判断从人的经验里抽出来,变成可追溯的图像判定结果。
这套方案适合谁?如果你正在做发动机装配线的电气设计、工位改造或者质量追溯系统,手上有西门子 PLC(S7-1500 或 S7-1200 居多),产线上有 VS722 或 SPECTATION 这类视觉系统,或者正在评估要不要上视觉工位,那这篇内容就是按你的实际场景写的。它不讨论视觉算法怎么从零训练,而是讲清楚:视觉系统在装配线上怎么和 PLC 配合、工位怎么选、参数怎么定、通信怎么做、出了问题先查哪里。下面按“先立住选型逻辑,再落到通信和工位实现,最后收在调试技巧”的顺序展开。
2. 发动机装配线为什么选西门子视觉方案:从工位需求反推系统边界
2.1 装配线视觉检测的四个典型工位与判定逻辑
发动机装配线上不是每个工位都值得上视觉。我一般按“缺陷后果 × 检测节拍 × 人工漏检率”三个维度筛,最后落在这四类工位:
第一类是垫片和密封圈有无检测。缸体结合面、油底壳、正时罩盖这些位置,垫片漏装后如果直接合盖,扭矩枪照样能打到设定值,但密封失效是必然的。视觉在这里做的是“在合盖前确认垫片轮廓存在且位置偏差小于阈值”。
第二类是螺栓垫圈正反装检测。螺栓垫圈有正反面,反装后预紧力分布不对,短期看不出问题,长期会松。视觉用背光或同轴光拍垫圈倒角方向,判定正反。
第三类是O 型圈和油封的到位检测。O 型圈如果只挂了一半,合盖后会被切掉,碎屑进入油道就是大事故。视觉拍 O 型圈与沟槽的贴合轮廓,判定是否完整嵌入。
第四类是总成后的外观和字符检测。包括铭牌字符、二维码、油管卡箍方向、线束插头是否插到位。这类工位节拍要求高,通常用 VS722 这类智能相机直接输出 OK/NG,不经过工控机。
这四类工位的共同点是:判定逻辑可以用“区域 + 特征 + 阈值”描述,不需要深度学习训练。这也是选西门子视觉方案的前提——如果你的缺陷是随机纹理、无法用几何特征描述,那不在这个方案的舒适区。
2.2 VS722 与 SPECTATION 的分工:什么时候用智能相机,什么时候用 PC 视觉
VS722 是西门子智能相机系列里在装配线上用得比较多的一类,特点是相机内置判定逻辑,输出数字 IO 或 PROFINET 信号,不依赖外部工控机。SPECTATION 则是 PC 端的视觉软件,跑在工控机上,适合多相机、复杂判定、需要和 MES 做数据交互的场景。
选型时我按下面这张表来分:
| 对比项 | VS722 智能相机 | SPECTATION PC 视觉 |
|---|---|---|
| 典型工位 | 单特征有无、正反、到位 | 多特征组合、尺寸测量、字符识别 |
| 节拍 | 单次判定 30~80 ms | 单次判定 80~300 ms,取决于相机数和算法 |
| 通信 | PROFINET / 数字 IO | 通过 PLC 或直接 TCP/IP |
| 与 PLC 耦合 | 直接进 PLC IO 或 PROFINET | 通常经 PLC 中转或独立工控机 |
| 调试门槛 | 低,相机内配置 | 中,需要工控机和软件授权 |
| 适合场景 | 单一判定、节拍紧、工位多 | 复杂判定、数据追溯、多相机 |
实际项目里常见做法是:垫片有无、O 型圈到位这类单特征工位用 VS722,直接给 PLC 一个 OK/NG 信号;总成外观和字符检测用 SPECTATION,跑在工控机上,结果通过 PLC 或 TCP 传给线体控制系统。这样既控制成本,也避免所有工位都上 PC 带来的维护复杂度。
2.3 视觉系统与 S7-1500 的通信链路:PROFINET 还是 IO 硬线
通信方式是这套方案落地时第一个要定的事。VS722 支持 PROFINET,可以直接作为 PROFINET IO 设备挂在 S7-1500 上;也可以走数字 IO,相机输出 OK/NG 两个信号进 PLC 的输入模块。
我一般这样选:
- 如果工位只需要 OK/NG,且线体已经有 PROFINET 网络,优先走 PROFINET。好处是相机状态、判定结果、甚至图像触发都可以在 PLC 侧看到,不用额外布线。
- 如果工位是改造项目,原有线体只有硬线,那就用数字 IO。相机输出 OK/NG,PLC 读输入点。缺点是信息量少,相机故障和判定 NG 分不清。
- 如果视觉系统是 SPECTATION 跑在工控机上,通常工控机通过 TCP/IP 和 PLC 通信,或者工控机自己控制一个 IO 模块,PLC 只读结果。
这里有个容易翻车的点:PROFINET 通信时,相机的判定结果不是实时刷新的,它按触发周期更新。PLC 侧如果扫描周期比相机判定周期快,会读到旧结果。所以 PLC 程序里要加“结果有效”标志位,或者用相机的“新结果”信号做上升沿触发。
提示:PROFINET 组态时,把相机的输入输出模块地址记清楚,PLC 侧用这些地址做判定逻辑,不要靠猜。
3. 从工位到 PLC:视觉判定结果怎么进 S7-1500 程序
3.1 VS722 走 PROFINET 的组态步骤与地址映射
假设你用 VS722 做垫片有无检测,走 PROFINET 挂到 S7-1500 上。步骤大致如下:
第一步,在博途里安装 VS722 的 GSD 文件。GSD 文件从西门子官网或设备随附资料里获取,安装后在硬件目录里能找到对应设备。
第二步,把 VS722 拖到 PROFINET 网络上,分配设备名称和 IP 地址。设备名称要和相机实际名称一致,否则连不上。
第三步,组态相机的输入输出模块。通常相机会提供几个字节的输入(判定结果、状态)和输出(触发、切换程序号)。记下起始地址,比如输入从 I100.0 开始,输出从 Q100.0 开始。
第四步,在 PLC 程序里读输入字节,做判定。下面是一段典型的梯形图逻辑对应的 SCL 代码:
// 读取 VS722 判定结果 // I100.0: 结果有效位 // I100.1: OK 信号 // I100.2: NG 信号 // I100.3: 相机就绪 // Q100.0: 触发相机 IF "Camera_Ready" AND NOT "Trigger_Edge" THEN "Trigger_Camera" := TRUE; // 触发相机拍照 END_IF; IF "Result_Valid" THEN IF "OK_Signal" THEN "Station_Pass" := TRUE; "Station_Fail" := FALSE; ELSIF "NG_Signal" THEN "Station_Pass" := FALSE; "Station_Fail" := TRUE; END_IF; END_IF;这段代码的逻辑是:相机就绪后,PLC 给一个触发信号,相机拍照并判定,判定完成后“结果有效位”置 1,PLC 读 OK 或 NG 信号,输出工位通过或失败。参数上要注意:触发信号建议用脉冲,宽度大于相机触发最小脉宽(通常 10 ms 以上);结果有效位要确认是电平还是脉冲,如果是脉冲,PLC 侧要用上升沿捕获。
3.2 SPECTATION 跑在工控机上的数据交互方式
SPECTATION 跑在工控机上时,和 PLC 的交互通常有三种方式:
第一种是工控机通过 TCP/IP 直接和 PLC 的开放式通信接口交换数据。S7-1500 支持 TCP 通信,工控机作为客户端,PLC 作为服务端,双方约定数据格式。这种方式灵活,但需要自己写通信程序。
第二种是工控机控制一个远程 IO 模块,PLC 读这个 IO 模块。相当于把工控机当成一个智能设备,输出 OK/NG 和状态。
第三种是工控机把结果写入数据库,PLC 通过 MES 或中间件读结果。这种方式延迟大,一般只用于追溯,不用于实时判定。
我一般选第一种或第二种。第一种适合数据量大的场景,比如要传缺陷类型、坐标、图像路径;第二种适合只传 OK/NG 的场景,接线简单,PLC 侧程序也简单。
下面是一个 TCP 通信的 Python 示例,工控机侧把判定结果发给 PLC:
import socket import struct # PLC 的 IP 和端口 PLC_IP = "192.168.0.10" PLC_PORT = 2000 def send_result(ok, ng, station_id): # 数据格式:站号(1字节) + OK(1字节) + NG(1字节) data = struct.pack("BBB", station_id, 1 if ok else 0, 1 if ng else 0) with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((PLC_IP, PLC_PORT)) s.sendall(data) # 等待 PLC 确认 ack = s.recv(1) return ack == b'\x01'这段代码把工位号、OK、NG 打包成三个字节发给 PLC。参数说明:PLC 侧要建立对应的 TCP 服务端,接收三个字节并解析;站号用于区分多个视觉工位;OK 和 NG 互斥,正常只有一个为 1。实际项目里还要加心跳和超时重连,否则网络一抖,结果就丢了。
3.3 触发时序与节拍匹配:相机拍照和 PLC 动作怎么对齐
视觉工位最容易出问题的地方不是算法,是时序。相机拍照需要工件到位且稳定,PLC 要在工件到位后给触发,相机判定后 PLC 才能放行。如果触发早了,工件还在动,图像模糊;触发晚了,节拍跟不上。
我一般这样定触发点:工件到位传感器信号上升沿后,延时 50~150 ms 再触发相机,具体延时看工件停止后的振动时间。相机判定时间如果是 60 ms,PLC 侧要保证在判定完成前不动作。整个工位节拍 = 到位延时 + 相机判定 + PLC 处理 + 放行动作,这个总时间要小于线体节拍。
如果节拍不够,优先换更快的相机或缩小检测区域,而不是硬压 PLC 扫描周期。PLC 扫描周期通常不是瓶颈,相机判定和机械稳定才是。
注意:触发信号和结果有效信号之间要有超时监控。如果相机 500 ms 内没返回结果,PLC 要报警并停线,不能默认 OK。
4. 避坑与排查:视觉工位上线后最容易翻车的五件事
4.1 现象:白天 OK,夜班频繁 NG
原因:夜班环境光变化,车间照明切换或窗外光线干扰,导致图像对比度变化,判定阈值卡在边缘。
解决:视觉工位加遮光罩,用主动光源(环形光或同轴光)而不是依赖环境光;阈值不要卡在临界值,留 20% 余量;如果还是不稳,改用背景抑制或偏振光。
4.2 现象:相机偶尔丢触发,PLC 显示结果有效但数据是旧的
原因:PROFINET 通信周期和 PLC 扫描周期不匹配,或者触发信号太窄,相机没捕获到。
解决:触发信号宽度加到 20 ms 以上;PLC 侧用“新结果”上升沿锁存判定结果,不要直接读实时字节;PROFINET 看门狗时间适当放大。
4.3 现象:同一工件连续拍两次,结果不一致
原因:工件定位重复精度不够,或者相机触发时工件还在微动。
解决:检查工装定位销和夹紧机构;触发延时加长;相机曝光时间缩短,用光源补亮度,减少运动模糊。
4.4 现象:SPECTATION 工控机重启后 PLC 收不到结果
原因:TCP 连接没有自动重连,工控机重启后 PLC 侧还等着旧连接。
解决:PLC 侧加连接超时判断,超时后复位连接状态;工控机侧加开机自启和重连逻辑;关键工位加心跳信号,PLC 检测心跳丢失就报警。
4.5 现象:判定 NG 但回放图像看是 OK
原因:图像存储和判定用的不是同一张图,或者判定区域包含了工件上的反光、油污。
解决:确认相机输出图像和判定图像同源;判定区域避开油污和反光区;如果油污不可避免,加吹气清洁或定期擦拭镜头。
5. 把调试经验固化成习惯:三个让视觉工位少停线的技巧
第一个技巧是在 PLC 里给每个视觉工位建一个状态字。不要只读 OK/NG,把相机就绪、触发已发、结果有效、通信正常、超时报警都映射到不同的位。这样出问题时,看 PLC 变量表就能定位到是相机没触发、还是判定没返回、还是通信断了。我一般用 MW 或 DB 块存这个状态字,HMI 上做一个诊断画面,操作工能看到“相机等待触发”还是“相机判定超时”。
第二个技巧是判定阈值不要写死在相机里,留一个 PLC 可切换的程序号。发动机装配线经常混线生产,不同机型垫片位置略有差异。VS722 支持切换程序号,PLC 在工件进入工位前根据机型给相机一个程序号输出,相机调用对应的判定参数。这样一条线能兼容多种机型,不用改相机配置。
第三个技巧是定期做“假 NG”测试。每周或每班次,拿一个已知 NG 的样件过工位,确认相机能判 NG、PLC 能停线、HMI 能报警。这个习惯听起来简单,但很多线体上线三个月后就不做了,等到真漏检才发现相机镜头脏了或者光源衰减了。我自己的血泪经验是:视觉工位最怕的不是算法不准,是“它一直说 OK,你就信了”。
最后说一个验证方法:在工位上线前,用连续 50 个 OK 件和 20 个 NG 件做盲测,记录误判和漏判。如果漏判为 0、误判小于 2%,这个工位才算可交付。上线后第一个月,每天抽检 10 件,确认稳定性。这套流程不复杂,但能让你在半夜被叫去停线之前,先知道问题在哪。
希望帮到你。
本文还有配套的精品资源,点击获取