☰
Vision Master与PLC联动触发实战:硬触发、信号链路全解析
2026/9/28 1:35:15 网站建设 项目流程

做视觉项目的人,大概都经历过这种尴尬:软件在办公室调得顺风顺水,一到车间现场就连连掉链子。尤其是用Vision Master做检测,流程里模板匹配、卡尺测量都写好了,结果到了产线,产品从相机下面嗖嗖地过去,相机就是不拍;或者好不容易拍到了,OK和NG的结果又传不回PLC,设备只管往前跑。问题出在哪?绝大多数时候不是视觉算法不行,而是PLC信号和视觉流程之间的“触发链路”没有打通。

这次我就围绕Vision Master和PLC联动时的自动化触发实战,把方案选型、信号链路、PLC程序和视觉流程的设计,以及现场调试踩过的坑完整讲一遍。内容以西门子S7-1200为例,但思路对三菱、汇川、倍福等PLC都通用。适合正在做视觉方案、或者刚接手视觉检测项目的工程师参考,也适合被“相机不触发”“结果丢失”“重复拍照”折磨过的朋友,看完应该能少走不少弯路。

1. 为什么触发是视觉项目从Demo到产线的分水岭

1.1 从手动拍照到自动化触发:需求是怎么来的

大部分视觉软件第一次跑通都是“手动触发”:鼠标点一下采集,拍一张,处理。Demo阶段完全没问题。但产线是连续流水的,产品什么时候到达相机前,你无法提前预测,只能靠传感器加PLC来告诉视觉系统“现在拍”。这就是自动化触发要解决的核心问题。而且手动模式下,每次点击的时机、产品的位置都会有差异,检出的稳定性也很难保证。

自动化触发一旦打通,产线才能从半自动变成全自动:产品到位,传感器响,PLC发信号,视觉系统自己拍照、自己检测、自己输出结果。整个过程就像流水线交接棒,信号就是那根接力棒。这根棒什么时候递、递多久、怎么确认对方接住了,都是需要认真设计的细节。我的经验是,项目里90%的信号类故障,都出在这根“接力棒”本身。

1.2 硬触发、软触发、通讯触发怎么选

生产线上触发视觉系统的常见方式有三种:硬触发、软触发和通讯触发。很多新手一听“用PLC触发视觉”,第一反应是在PLC里写一段网络指令发过去,其实不一定要这样。三者的差异和适用场景可以看下面这张表。

触发方式原理典型延迟适用场景
硬触发(IO)PLC输出信号直接接视觉控制器或相机输入,硬件电平变化触发拍照微秒级到毫秒级,最稳定高速线、对时序要求严格的场景
软触发(SDK/指令)PLC通过串口或以太网发送触发指令,视觉软件收到指令后执行取像毫秒到几十毫秒,依赖协议栈速度要求不高、IO接线不便的场景
通讯触发(协议)基于Modbus TCP、Socket等协议,在数据报文中携带触发信号或参数与网络负载、PLC扫描周期有关需要同时下传参数、上传结果、多工位复用的场景

现场首选硬触发。因为IO信号是电平直接触发,不依赖协议栈和CPU调度,延迟抖动小得多。尤其是有曝光时间在几百微秒的高速相机,用软触发经常出现“收到指令时产品已经过去了”的问题。但硬触发也有硬触发的坑,比如电平类型、脉宽、信号抖动、隔离、接地,这些我会在第2节详细展开。

1.3 为什么选Vision Master而不是OpenCV/Halcon

顺带说一句框架选择。Vision Master和OpenCV、Halcon经常被放在一起比较,但它们的定位差别挺大。Halcon更适合做算法原型开发和深度定制,算法库强,跨语言,但相机采集、IO通信、界面、结果管理这些工程问题都要自己搭。OpenCV适合做嵌入式、轻量级应用,免费开源,但项目化周期长,稳定性要自己扛。Vision Master这类图形化流程编排软件,做“流程编排加PLC联动”的时候效率最高,硬触发、结果输出、通信模块这些工程能力基本是开箱即用,现场接线、调试、改流程都快。

选型没有绝对优劣,主要看项目周期和实施团队。如果是标准视觉检测项目,要在几天内完成部署并和产线PLC对接,我用Vision Master的效率远高于从Halcon或OpenCV开始写代码。如果是要做深度定制的算法,那老老实实用Halcon或OpenCV。

2. 信号链路搭建:从PLC接线到Vision Master触发配置

2.1 硬件接线:NPN/PNP、光耦隔离和抖动问题

先看整条信号链路:PLC输出点经过中间继电器或光耦(可选)接到视觉控制器或相机的触发输入,再到Vision Master里的取像触发。这一步看起来简单,实际上是最容易出问题的地方。

第一,NPN和PNP必须匹配。NPN输出管是低电平有效,也叫漏型;PNP输出管是高电平有效,也叫源型。PLC输出模块有源型漏型之分,相机或视觉控制器的触发输入也分NPN和PNP。如果PLC输出NPN接到了只支持PNP输入的视觉系统,信号逻辑是反的,永远不触发。这种问题在现场太常见了,尤其是不同厂家的设备混搭的时候,一定要先查手册确认两边的极性定义。

第二,信号隔离。如果信号线长度超过一两米,建议加中间继电器或光耦隔离,避免现场干扰串入视觉系统的IO。特别是PLC输出是继电器型触点时,触点抖动会造成重复触发,最好选用固态继电器或者晶体管输出。在变频器、伺服驱动器多的柜子里,这个隔离几乎不能省。

第三,触发信号的脉宽。很多PLC工程师习惯在程序里输出一个10ms的脉冲,觉得够了,但相机可能存在触发信号有效沿之后的曝光准备时间。实测很多相机需要触发脉宽大于50ms才稳定。我建议在PLC里用定时器产生50到200ms的高电平,确保触发沿可靠。如果PLC输出的是窄脉冲,也可以在视觉控制器的输入端做滤波或延展。

第四,接地和屏蔽。信号线要用屏蔽双绞线,屏蔽层单端接地,避免和大功率变频器、伺服驱动器的动力线平行走线。这个就是“信号完整性”在工业现场的体现,电磁干扰会导致偶发误触发,时有时无,最难查。

2.2 Vision Master侧的触发配置与取像流程

硬件信号到了之后,还需要在Vision Master里配置好触发源。新建一个流程后,第一步就是取像。在取像步骤里要选择触发源,一般有三种:软件触发、硬件触发、连续采集。调试阶段用软件触发,鼠标点一下采集一张;产线运行阶段必须切到硬件触发,选择对应的IO输入,并根据接线方式配置高电平有效还是低电平有效。

配置硬件触发时,要注意触发有效沿。PLC输出默认高电平有效的话,视觉系统侧就选上升沿触发。这里有个容易忽略的地方:很多工业相机本身就支持硬触发模式,需要把相机的TriggerMode设为On,TriggerSource设为对应的Line口;同时Vision Master的取像步骤也要配置对应的IO触发源。两层没对齐,信号到了相机也不拍。

配置完成后,一定要先手动触发一次,确认流程能跑通。再模拟PLC发一个信号,用万用表或者示波器确认信号到达视觉控制器后,视觉流程能否按照预期启动。信号链路到这里只是通了,但还不算稳,链路稳定性的验证需要放到联调阶段做。

3. 核心实战:PLC程序怎么写,视觉流程怎么排

3.1 PLC侧梯形图设计:触发脉冲、结果锁存、防重复

以一个西门子S7-1200为例,假设:

  • I0.0:光电传感器到位信号(常开)
  • Q0.0:视觉触发信号(接视觉控制器输入)
  • I0.1:视觉OK信号
  • I0.2:视觉NG信号
  • Q0.1:剔除气缸
  • Q0.6:NG报警灯

第一段,检测到位,产生触发请求:

Network 1: 产品到位,产生触发请求 A I0.0 FP M0.0 // 上升沿检测 S M0.1 // 触发请求置位

这里的关键是FP上升沿检测,而不是直接用传感器电平去触发。因为传感器在产品停在工位的整个过程中都保持高电平,如果用电平触发,同一个产品会被重复触发,视觉系统就会对同一个产品拍好几次。

第二段,生成触发脉冲:

Network 2: 生成触发脉冲 A M0.1 TON T1, 50ms // 消抖延时,等产品稳定 S Q0.0 // 视觉触发输出置位 R M0.1 A T1.Q TON T2, 150ms // 触发脉宽150ms R Q0.0 // 触发输出复位

为什么用两个定时器?第一个定时器T1是为了消除传感器信号抖动,等产品在工位上完全稳定后再发触发信号。第二个定时器T2决定触发信号的脉宽,一般建议100ms到200ms,保证视觉系统能可靠接收到。用这种方式生成的脉冲宽度和稳定性都远好于直接输出一个扫描周期的脉冲。

第三段,接收视觉结果并锁存:

Network 3: 视觉结果锁存 A I0.1 S M0.2 // OK结果锁存 A I0.2 S M0.3 // NG结果锁存

为什么结果要锁存?因为视觉系统的OK/NG输出可能是一个几十毫秒的脉冲,而PLC的扫描周期可能在10ms左右,虽然理论上能采到,但如果视觉输出脉宽更短、或者PLC扫描循环恰好在输出结束之后才执行到这一句,就会错过。用置位指令把结果锁存下来,等PLC程序在合适时机处理,这样最稳妥。

第四段,处理结果:

Network 4: 结果处理 A M10.0 // 下一工位就绪信号 A M0.2 S Q0.1 // 剔除气缸动作 R M0.2 A M10.0 A M0.3 S Q0.6 // NG报警灯 R M0.3

这段根据项目实际调整,但核心是一个“锁存-消费”关系。PLC收到结果后置位对应输出,处理完再复位中间标志。如果不注意这个关系,可能结果被重复处理两次。

3.2 Vision Master检测流程:从取像到结果输出

Vision Master流程的基本结构一般是这样:

  1. 取像:等待硬件触发,获取输入图像。
  2. 图像预处理:灰度转换、滤波、对比度增强,把要检测的特征凸显出来。
  3. 定位:模板匹配或几何找边,确定ROI的基准位置,补偿产品在视野里的偏移和旋转。
  4. 检测:在定位基础上进行卡尺测量、Blob分析或差值检测,得到实际测量值。
  5. 判断:将测量值和上下限公差比较,输出OK或NG。
  6. 输出:把结果写入全局变量,通过IO模块或通信模块发送给PLC。

在Vision Master这类图形化流程里,我的习惯是:取像步骤接硬件触发。检测步骤尽量少而精,每增加一个步骤都会增加流程耗时和不确定性。结果判断不要散落在多个步骤里,统一放到流程末端的全局脚本里做汇总。

为什么要用全局脚本获取变量结果?这是很多人都会问的。举个例子,比如我要同时测三个尺寸,每个尺寸都有单独的测量步骤,如果每个步骤各自判断OK/NG,那么只要有一个步骤NG就整个NG。但我也可能想把三个尺寸的具体数值都记录下来,或者在特殊配方下用不同的公差范围做判断。把这些逻辑写在全局脚本里,可以统一读取各步骤的变量结果,做综合判断,再统一输出。这是视觉流程设计里很实用的一招。

全局脚本的大致逻辑可以写成这样:

def main(): w1 = get_variable("Width_1") w2 = get_variable("Width_2") d1 = get_variable("Diameter_1") ok = (w1 > min_w1 and w1 < max_w1) and \ (w2 > min_w2 and w2 < max_w2) and \ (d1 > min_d1 and d1 < max_d1) set_output("Result_OK", ok) set_output("Result_NG", not ok) set_variable("Measure_Width_1", w1) set_variable("Measure_Width_2", w2) set_variable("Measure_Diameter_1", d1)

这样整个流程的结构就很清晰:一个检测流程里包括取像、预处理、定位、若干测量步骤、一个全局脚本步骤。全局脚本汇总结果后,置位OK/NG输出IO。后面要改公差、改逻辑,只需要动脚本,不用重新排流程。

3.3 结果回传PLC:IO映射和以太网通信的取舍

结果回传有两种主流方式:IO方式,也就是视觉系统直接输出OK、NG两个开关量给PLC;通讯方式,比如通过Modbus TCP或Socket把结果数据发给PLC。

IO方式适合只需要合格或不合格判断的场合。需要注意电平类型要和PLC输入模块匹配,视觉输出的脉宽要大于PLC扫描周期,建议大于100ms。如果视觉输出的是持续信号,必须由PLC在合适时机复位;如果视觉输出的是脉冲,PLC可能因为扫描周期错过,所以前面特意做了结果锁存。

通讯方式适合需要数据追溯、统计分析,或者视觉和PLC参数需要互相读取的场景。比如每次检测完成,发送一帧ASCII字符串:

RESULT,2024-06-15 08:30:12,OK,Width=12.34,OD=5.67

PLC侧用TCON/TRCV或者Modbus客户端去读取。需要提前定义好报文格式,比如字段顺序、分隔符、OK/NG的表示方式。很多人觉得Modbus TCP会不会太慢,其实单次检测结果才几十字节,在百兆局域网里传输是微秒级的,瓶颈不在网络本身,而在PLC的扫描周期和通信轮询时间。

两条路怎么取舍?我的原则是:只要判断OK/NG,就用IO方式,简单可靠,不涉及协议,也不占PLC通信资源。需要记录测量值、需要追溯批次、通讯线距离长,就用Modbus TCP或Socket。大项目里视觉结果要进MES,那必须通讯方式,IO方式只能做中间过渡。但不管用哪种,方案设计阶段就要和电气工程师约定好信号模式,是“电平保持加复位”还是“脉冲触发加锁存”,这个不提前说清楚,现场一定两天吵三回。

4. 现场调试实录:触发不稳、丢帧、假NG怎么查

4.1 高频故障排查表

我把这几年遇到的高频故障整理成一张速查表,可对着现象查原因。

现象可能原因排查方法解决方向
相机不拍照触发信号没到、脉宽太短、电平不匹配用万用表量视觉控制器输入,有示波器看波形调整PLC输出脉宽,检查NPN/PNP,增加光耦隔离
一个产品拍两次传感器信号抖动、PLC触发信号重复输出检查PLC程序是否用了上升沿,检查中间继电器触点PLC程序加TON消抖,加触发请求标志位防重复
检测结果丢失视觉输出脉宽短、PLC扫描周期长、输入滤波时间长查看PLC输入点是否捕捉到,看视觉日志视觉侧延长结果输出,PLC侧做结果锁存
偶发误触发电磁干扰、长线串扰查走线是否与动力线平行,临时换屏蔽线测试屏蔽双绞线、屏蔽层单端接地,加输入滤波,换光耦
视觉流程整体变慢流程步骤太多、预处理复杂、相机曝光过长统计单次流程耗时,定位耗时步骤精简流程,缩小ROI,优化预处理参数

这张表并不能覆盖所有情况,但覆盖了80%的触发类故障。每次排查信号问题,我的第一反应不是改程序,而是先确认“信号到底到没到、波形对不对”。

4.2 三个实测案例和解决过程

案例一:触发信号脉宽只有8ms,偶发漏拍。现象是产线跑快了之后,相机隔几分钟就漏一张,检测频率大概在每分钟30个产品,漏拍率不高但很难接受。排查过程用示波器看PLC输出点Q0.0的波形,发现脉冲只持续了一个扫描周期,大约8ms,输出点又恰好在扫描末期动作,视觉系统那边还没来得及响应,脉冲就结束了。解决办法是把触发输出改成了两个定时器组合,ON延时50ms,OFF延时150ms,保证脉宽200ms左右。改完后连续跑了一晚上,再没漏拍。

案例二:同一个产品被拍了两次甚至三次。原因是传感器用了漫反射光电,产品表面反光导致信号抖动,PLC程序又直接用传感器电平触发,没有做上升沿锁存。排查时先看了PLC程序,发现同一个传感器信号被多个网络引用,其中一个网络直接驱动了触发输出。解决方法是PLC程序加上升沿检测和触发请求标志,同时把传感器的输出回路加了一个小电容滤波,PLC输入端也启用了数字量滤波。两个措施叠加之后,单次触发链路才稳定下来。

案例三:视觉流程明明显示NG,PLC却没有任何动作。排查时先确认视觉侧确实输出了NG,再拿万用表量PLC输入点,发现NG信号只持续了20ms,而PLC扫描到这一路时信号已经消失了。而且PLC输入端默认的数字量滤波时间大约是10ms,又加剧了信号被过滤的情况。解决方法是两个方向同时改:视觉侧把结果输出脉宽调整到150ms,PLC侧把该输入点的数字量滤波时间调小到0.1ms,同时程序里对该输入做了锁存。两个措施都实施后,故障彻底消除。

调试心法就一句话:排查信号问题,第一步永远是拿万用表或示波器确认信号到底到没到、波形对不对。很多时候觉得是软件问题,其实信号根本没进来。这也是为什么我一直说,做视觉的工程师至少要会用万用表和示波器,能看懂基本的数字波形,不然到现场就是盲人摸象。

5. 进阶优化与个人体会

5.1 多工位协同、数据追溯和MES对接

一条产线如果有多个视觉工位,比如外观检测工位、尺寸测量工位、字符识别工位,那最好从一开始就统一规范和协议。每个工位的触发信号和结果返回都走同一个标准,PLC程序里用符号名而不是硬地址,这样排查问题的时候不用翻着地址表一个个对。

多个视觉工位同时和PLC通信时,要特别注意通信负载。之前有个项目,PLC一边跑着Modbus总线控制三十多台变频器,一边又要和视觉系统做TCP通信,结果视觉结果偶尔延迟几百毫秒,排查了半天才发现是通信端口资源被变频器轮询占满了。后来单独给视觉系统划了一个独立网段和独立通信端口,问题才解决。这种通信负载的问题,在方案设计阶段就要想好,不然后期改动代价很大。

如果视觉系统有数据追溯需求,建议提前预留产品ID和检测结果字段。比如报文里带批次号、产品序列号、时间戳,这样后续上MES系统或者在产线上做质量追溯的时候,数据都是现成的,不用重新改协议、改流程。很多人前期嫌麻烦不做,等客户提需求了才加班补数据,那个滋味不好受。至于部署平台,Vision Master这类软件主要在Windows上跑,如果碰到Linux或者嵌入式平台的需求,可能得考虑OpenCV等方案,但PLC触发逻辑是通用的,无非就是IO边沿触发或协议触发,思路完全一致。

5.2 我做视觉项目的一些门道

最后分享几条我自己比较坚持的做法,算是一些经验之谈。

  1. 项目一开始就约定信号时序。不要到了现场再商量,更不要等接完线了才说信号模式不对。我会画一张时序图,标明产品到位、PLC输出触发、视觉拍照、视觉输出结果、PLC处理结果这几个关键点的时间关系,项目组的电气、机械、软件各看各的,省得现场扯皮。

  2. 别把信号线和动力线绑在同一个线槽里。就算多走几步线槽、多花一点线缆,后期也能少很多奇怪的问题。因为电磁干扰导致的偶发误触发,往往是所有故障里最难查的。

  3. 视觉流程里所有测量步骤的变量名要起得足够清楚。比如Width_1、Diameter_OK这种,命名要能一眼看懂含义,不要用Var1、Var2这种,不然写全局脚本的时候自己都容易搞混。

  4. 产线试运行前,单独做一次连续触发联调。比如跑一晚上,统计触发次数和检测次数是否完全一致。这个阶段只验证信号可靠性,不计检测精度。信号链路稳定了,再谈算法精度。如果信号和精度的问题混在一起查,定位起来非常痛苦。

  5. 每次调试修改都记录下来。改的是PLC程序还是视觉流程,对应的现象是什么,改了之后有没有效果。记录做得好,排查效率会成倍提升。这个习惯帮我解决过很多“是不是改回去了”“上次不是好的吗”这种说不清的现场问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询