1. 触发模式到底在解决什么问题工业相机和普通手机摄像头最大的区别不是像素高低而是拍照的时机能不能被精确控制。你拿手机拍一张流水线上的零件按快门的那一下零件可能已经往前走了两毫米拍出来就是虚的。工业视觉里这种情况直接导致误判——要么把合格品踢掉要么把不良品放行产线停一次损失可能就是几万块。触发模式就是干这个的让相机在正确的时间点曝光。这个“正确的时间点”可能来自一个光电开关检测到零件到位可能来自PLC发出一条指令也可能来自一个统一的时间基准让多台设备同时动作。不同的信号来源、不同的精度要求、不同的设备组合对应完全不同的接线和配置方案。我做了七八年视觉系统集成从最早用光电传感器硬触发到后来上PLC做逻辑控制再到现在用PTP做多相机微秒级同步踩过的坑基本覆盖了标题里说的这五种方案。这篇文章就把这五种接线方案从原理到实操全部拆开讲清楚包括什么场景该选哪种、线怎么接、参数怎么配、出了问题怎么查。不管你是刚入行的视觉工程师还是做PLC编程想搞明白相机怎么接的看完都能直接上手干活。先明确一个概念触发Trigger本质上是让相机从“自由运行”状态切换到“等待指令”状态。相机收到一个有效的触发信号后才开始一次曝光。这个信号可以是电平变化上升沿或下降沿也可以是一条软指令。工业相机的触发输入通常是光耦隔离的这意味着你不能直接把24V的PLC信号怼进去中间需要限流电阻或者电平转换。这一点后面会反复提到因为烧相机I/O口的事情我见过太多次了。五种方案按精度从低到高排列软件触发、光电传感器硬触发、PLC数字量触发、PLC总线触发、PTP同步触发。精度从几十毫秒到亚微秒级别成本也从几乎为零到需要支持PTP的交换机和主时钟设备。选哪种取决于你的产线速度、精度要求和预算。2. 五种触发方案的核心原理与选型逻辑2.1 软件触发最省事但最不靠谱软件触发就是上位机通过SDK发一条命令让相机拍照。不需要任何额外的接线相机用网线连到电脑或工控机就行。听起来很方便但实际产线上几乎不会单独用它做检测触发原因很简单操作系统不是实时系统。你发一条指令从应用层到驱动层再到网卡中间经过多少层调度、多少毫秒的延迟完全不可控。Windows下这个延迟通常在10到50毫秒之间波动Linux打上实时补丁能好一些但也就到毫秒级。那软件触发什么时候用调试阶段。你刚拿到相机还没接传感器想先看看成像效果、调调曝光和增益这时候软件触发最方便。另外一些低速场景比如每分钟就拍几张的抽检工位软件触发也够用。但只要产线速度上来了或者要求每次拍照的位置一致就必须换硬触发。2.2 光电传感器硬触发简单直接但要注意电平匹配光电传感器也叫光电开关是最常见的硬触发源。零件到位挡住光束传感器输出一个电平跳变直接接到相机的Trigger In引脚。这种方案响应快延迟在微秒级而且完全独立于操作系统稳定性很好。但这里有个关键问题传感器输出电平要和相机触发输入匹配。工业相机常见的触发输入电平是5V到24V但很多相机的光耦输入需要限流。比如Basler的相机Trigger In内部是一个光耦你需要根据相机手册计算串联电阻。假设相机内部光耦正向电流典型值是5mA正向压降1.2V传感器输出24V那么串联电阻R (24 - 1.2) / 0.005 4560欧姆取标准值4.7kΩ。如果不加这个电阻24V直接灌进去光耦瞬间就烧了。海康的相机有些型号内置了限流电阻支持宽电压输入但也不是所有型号都这样。接之前一定查手册的I/O电气规格这是铁律。2.3 PLC数字量触发逻辑控制的标配当产线上有多个传感器、多个动作需要协调时PLC就成了核心。PLC的数字量输出DQ可以直接驱动相机触发。比如一个工位上有三个传感器分别检测零件到位、夹具夹紧、安全门关闭只有三个条件都满足时PLC才输出一个脉冲触发相机。这种逻辑用PLC做最自然。PLC数字量输出的类型要特别注意继电器输出和晶体管输出。继电器输出响应慢毫秒级而且触点有寿命限制不适合高频触发。晶体管输出分PNP和NPN两种PNP输出高电平有效NPN输出低电平有效。相机的触发极性要跟PLC输出类型匹配否则要么不触发要么一直触发。西门子S7-1200/1500的DQ模块通常是PNP输出也就是输出24V。接相机时同样要考虑限流电阻的问题。三菱FX系列和欧姆龙CP系列也类似。汇川PLC的DQ输出规格要看具体型号有些支持推挽输出兼容性更好。2.4 PLC总线触发省接线但增加复杂度如果PLC和相机都支持现场总线比如Profinet、EtherCAT、Modbus TCP可以通过总线发触发指令。这种方式省去了物理接线而且可以在总线报文里携带更多信息比如触发的同时把零件编号、配方参数一起发给相机。但总线触发的实时性不如硬线。Profinet RT的循环周期通常在1到4毫秒EtherCAT可以到微秒级但需要专用从站芯片。对于大多数视觉检测几毫秒的抖动是可以接受的但如果你的产线速度要求触发点误差小于1毫秒总线触发就不太够用。另外总线触发需要PLC和相机都支持相同的协议配置起来比硬线复杂得多调试阶段容易出问题。2.5 PTP同步触发多设备微秒级对齐PTP是IEEE 1588精确时间协议通过以太网报文交换让网络中的设备时钟同步到亚微秒级。支持PTP的相机可以配置成在指定的时间点曝光而不是收到触发信号才曝光。这意味着多台相机可以在同一时刻拍照误差在微秒以内。这种方案用在什么场景比如一个大尺寸工件需要多个相机从不同角度同时拍摄或者3D视觉系统需要结构光和相机严格同步。PTP触发不需要额外的触发线所有相机接在同一台支持PTP的交换机上由主时钟统一授时。但代价是设备成本高配置复杂而且网络里所有设备都要支持PTP否则同步精度会下降。选型逻辑总结成一句话精度要求决定方案预算决定上限。软件触发零成本但精度最差PTP精度最高但需要全套支持PTP的设备。中间三种方案是大多数产线的实际选择。3. 五种接线方案实操详解3.1 软件触发配置从SDK到实际代码软件触发不需要接线但配置不对也拍不到图。以Basler pylon SDK为例基本流程是打开相机、设置触发模式为Software、设置触发源为Software、然后每次调用ExecuteSoftwareTrigger()。关键参数是TriggerSelector和TriggerMode。TriggerSelector要选FrameStartTriggerMode设为On。如果TriggerMode是Off相机就一直在自由运行你发多少软触发都没用。海康的MVS SDK类似用MV_CC_SetEnumValue设置TriggerMode为MV_TRIGGER_MODE_ONTriggerSource为MV_TRIGGER_SOURCE_SOFTWARE然后调用MV_CC_TriggerSoftwareExecute。注意海康有些相机需要先StopGrabbing再改触发模式改完再StartGrabbing顺序错了会报错。软件触发的延迟实测数据Windows 10下用pylon SDK从调用触发到相机开始曝光平均延迟约15毫秒抖动±8毫秒。Linux打PREEMPT_RT补丁后平均延迟约2毫秒抖动±0.5毫秒。这个数据是用示波器抓相机曝光信号测的不是看SDK返回值因为SDK返回只代表指令发出去了不代表相机真的开始曝光了。注意软件触发下相机的曝光时间要设得足够短否则上一帧还没读完下一帧触发就来了会丢帧。一般曝光时间不超过帧周期的80%。3.2 光电传感器硬触发接线限流电阻计算与极性匹配光电传感器接相机是最常见的方案但接线细节最多。先确定传感器的输出类型PNP高电平有效还是NPN低电平有效。然后查相机手册的Trigger In电气参数。以Basler acA2500-14gm为例手册里写Trigger In的输入电压范围是0到24V但内部光耦的推荐正向电流是5到15mA。假设用PNP传感器输出24V串联一个4.7kΩ电阻电流约(24-1.2)/4700≈4.8mA在推荐范围内。如果传感器输出12V电阻可以取2.2kΩ电流约(12-1.2)/2200≈4.9mA。接线方式传感器输出接电阻一端电阻另一端接相机Trigger In正极相机Trigger In负极接电源地。如果是NPN传感器输出是低电平有效接线方式不同传感器输出接相机Trigger In负极Trigger In正极通过电阻接电源正极。这样传感器导通时把Trigger In拉低产生下降沿触发。海康相机的Trigger In通常标的是Line0支持双向光耦接线更灵活。但同样要查手册确认最大输入电流。有些海康相机内置了1kΩ限流电阻外部只需要接传感器输出和地就行但这种情况手册会明确写“内置限流”。实操心得接完线先用万用表量一下Trigger In两端的电压确认在手册规定的范围内再上电。我见过有人直接把24V接到5V输入的相机上上电瞬间光耦就冒烟了。3.3 PLC数字量触发从梯形图到端子接线PLC数字量触发分两步PLC程序里产生触发脉冲硬件上把DQ输出接到相机Trigger In。先看PLC程序。以西门子S7-1200为例假设I0.0是零件到位传感器Q0.0接相机触发。梯形图逻辑当I0.0上升沿时用TON延时50毫秒等零件停稳然后Q0.0输出一个20毫秒的脉冲。脉冲宽度要大于相机触发输入的最小脉宽要求Basler通常要求最小2微秒海康要求最小10微秒20毫秒绰绰有余。硬件接线S7-1200的DQ输出是PNP型输出24V。Q0.0接到一个4.7kΩ电阻电阻另一端接相机Trigger In正极Trigger In负极接PLC的0V注意是PLC的0V不是相机的0V如果PLC和相机用同一个电源那就是同一个0V。如果PLC和相机用不同电源需要把两个电源的0V共地否则触发信号没有参考点。三菱FX5U的DQ输出也是PNP但输出电压是24V接线方式类似。欧姆龙CP1H的DQ输出有PNP和NPN两种型号买的时候要确认。汇川PLC的DQ输出规格看型号AM系列通常是PNP。常见坑PLC的DQ输出如果带短路保护接相机光耦时可能因为电流太小而误判为短路导致输出被关断。这种情况需要在光耦两端并联一个假负载电阻让电流达到短路保护的阈值以上。具体阻值计算假设短路保护阈值是10mA光耦电流5mA需要并联一个电阻让总电流超过10mA。24V下并联2.2kΩ电阻电流约11mA加上光耦的5mA总电流16mA超过阈值。3.4 PLC总线触发Profinet与EtherCAT配置要点总线触发省去了物理接线但配置步骤更多。以西门子S7-1500通过Profinet触发Basler相机为例首先在TIA Portal里安装Basler的GSD文件然后把相机添加到Profinet网络中分配设备名称和IP地址。相机的Profinet模块里会有一个Trigger输出字节PLC通过写这个字节来触发相机。具体是哪个位要看相机的GSD文件定义。Basler的Profinet模块通常用Byte 0的Bit 0作为触发位。PLC程序里用MOVE指令把1写入这个字节延时后再写0就产生了一个触发脉冲。但Profinet的循环周期决定了脉冲的最小宽度。如果PLC的Profinet循环周期是4毫秒那么脉冲宽度至少要是4毫秒的整数倍否则可能被从站漏掉。EtherCAT触发类似但需要相机支持EtherCAT从站协议。Basler的EtherCAT相机需要额外的EtherCAT接口板成本比Profinet方案高。海康的EtherCAT相机型号较少选型时要确认。总线触发的延迟实测Profinet RT下从PLC写触发位到相机开始曝光延迟约2到5毫秒抖动±1毫秒。EtherCAT下延迟约100微秒抖动±10微秒。如果产线速度要求触发点误差小于1毫秒Profinet RT不够用需要等时同步模式IRT但IRT需要专用交换机。3.5 PTP同步触发交换机配置与相机参数PTP触发是五种方案里最复杂的但也是精度最高的。基本架构是一台主时钟设备通常是支持PTP的交换机或工控机多台支持PTP的相机作为从时钟全部接在同一台支持PTP的交换机上。交换机配置以支持PTP的华为S5700为例需要开启PTP功能设置PTP域通常用0设置交换机为边界时钟或透明时钟。透明时钟不参与同步只转发PTP报文并修正时间戳延迟更低。边界时钟会同步到上游主时钟再分发给下游设备适合多级网络。相机配置以Basler ace 2为例在pylon Viewer里设置GevIEEE1588为On然后设置TriggerSelector为FrameStartTriggerMode为OnTriggerSource为GevIEEE1588。接着设置GevIEEE1588DataSetLatch和GevIEEE1588Status。相机同步上之后GevIEEE1588Status会显示Slave并且GevIEEE1588OffsetFromMaster会稳定在微秒级。触发时上位机通过SDK设置一个未来的时间点比如当前时间加100毫秒相机在那个时间点自动曝光。多台相机设置同一个时间点就能实现同步曝光。实测Basler ace 2在PTP同步下多相机曝光误差小于1微秒。注意PTP同步要求网络里所有交换机都支持PTP如果中间有一台普通交换机PTP报文会被当作普通报文转发同步精度会降到毫秒级甚至失步。另外网络负载不能太高PTP报文优先级要设为最高。4. 触发方案对比与选型速查4.1 五种方案关键参数对比方案触发精度延迟成本接线复杂度适用场景软件触发10-50ms高极低无调试、低速抽检光电传感器硬触发微秒级低低简单单相机定位检测PLC数字量触发微秒级低中中等多传感器逻辑控制PLC总线触发1-5ms中中高无物理接线多相机协同、参数下发PTP同步触发亚微秒级极低高复杂多相机同步、3D视觉选型时先问三个问题精度要求多少产线速度多快预算多少精度要求小于1毫秒的只能选硬触发或PTP。产线速度超过每分钟300件的软件触发和总线触发基本不用考虑。预算有限的光电传感器硬触发是性价比最高的。4.2 触发信号极性匹配速查PLC输出类型相机触发极性接线方式限流电阻PNP高电平有效上升沿触发输出→电阻→Trigger InTrigger In-→0V4.7kΩ24VNPN低电平有效下降沿触发输出→Trigger In-Trigger In→电阻→24V4.7kΩ24V推挽输出可配置根据相机设置2.2kΩ12V这个表建议截图保存接线时直接对照。限流电阻的阻值不是固定的要根据实际电压和相机手册的光耦参数计算。公式R (Vout - Vf) / If其中Vf是光耦正向压降通常1.2VIf是推荐正向电流通常5-10mA。5. 常见问题与排查技巧实录5.1 相机不触发从信号源到相机逐段排查相机不触发是最常见的问题排查要按信号流向逐段来。先确认相机触发模式设对了TriggerMode必须是OnTriggerSource要选对Line0还是Software还是GevIEEE1588。然后量Trigger In引脚有没有信号。用示波器看最直观没有示波器就用万用表看电压有没有跳变。如果信号源有信号但相机不触发检查极性设置。Basler相机在pylon Viewer里有个TriggerActivation参数可以设RisingEdge或FallingEdge。如果传感器是PNP输出上升沿但相机设的是FallingEdge那就永远触发不了。海康相机在MVS里也有TriggerActivation选项。如果极性对了还不触发检查限流电阻。电阻太大导致光耦电流不够光耦不导通。用万用表量光耦两端电压如果触发时电压变化很小说明电流不够减小电阻。但也不能太小否则烧光耦。5.2 触发抖动大接地与屏蔽的处理触发抖动大表现为每次拍照的位置不一致或者偶尔丢帧。原因通常是接地不良或信号干扰。PLC和相机如果分别用不同的开关电源两个电源的0V之间如果有电位差触发信号就会叠加一个共模干扰。解决办法是把两个电源的0V用粗线连起来确保共地。信号线要用屏蔽线屏蔽层单端接地接在相机端或PLC端不要两端都接否则形成地环路。如果触发线走线很长超过5米考虑用双绞线并且远离变频器输出线和伺服电机动力线。我见过一个案例触发线和伺服动力线捆在一起走结果每次伺服加速时相机就误触发分开走线后问题消失。5.3 PTP同步失败交换机与时钟源排查PTP同步失败的表现是GevIEEE1588Status一直显示Listening或UncalibratedOffsetFromMaster值很大或跳变。排查步骤先确认交换机PTP功能开了并且PTP域和相机一致。然后用Wireshark抓包看有没有PTP报文UDP端口319和320。如果没有报文说明交换机没发或相机没收到。如果报文有但同步不上检查交换机是不是透明时钟模式。透明时钟需要交换机硬件支持时间戳软件实现的透明时钟精度差。另外检查网络里有没有其他PTP主时钟冲突PTP域里只能有一个主时钟多了会打架。实操心得PTP调试时先用两台设备直连测试确认能同步后再接入交换机。直连能同步说明相机配置没问题问题在交换机。直连不能同步说明相机配置有问题检查GevIEEE1588参数。5.4 总线触发丢帧循环周期与脉冲宽度匹配总线触发丢帧通常是因为PLC的触发脉冲太窄从站没来得及响应。Profinet的循环周期如果是4毫秒触发脉冲至少要保持4毫秒最好8毫秒。EtherCAT的循环周期如果是1毫秒脉冲至少2毫秒。另外检查相机的触发超时设置。有些相机有TriggerTimeout参数如果触发信号间隔超过这个时间相机会报超时错误并停止采集。把这个值设大一些或者设为0不超时。5.5 常见问题速查表现象可能原因排查方法解决措施完全不触发触发模式未开查TriggerMode设为On完全不触发极性反了查TriggerActivation改Rising/Falling完全不触发光耦电流不够量光耦电压减小限流电阻偶尔丢帧触发脉冲太窄示波器看脉宽加宽脉冲偶尔丢帧触发超时查TriggerTimeout设大或设0位置不一致接地不良量两地0V压差共地位置不一致信号干扰看走线屏蔽线、远离动力线PTP不同步交换机不支持抓PTP包换支持PTP的交换机PTP不同步域不一致查PTP域统一设为0总线触发延迟大循环周期长查总线周期缩短周期或改硬触发这张表建议打印出来贴在工位上出问题先对照排查能省很多时间。6. 几个容易忽略的细节6.1 相机I/O口的保护工业相机的Trigger In虽然是光耦隔离但也不是无限抗造。静电、浪涌、接错线都可能打坏光耦。建议在Trigger In两端并联一个TVS二极管比如SMBJ24A钳位电压在30V左右能吸收大部分浪涌。成本几毛钱但能救一台几千块的相机。另外接线时先接0V再接信号线最后接电源。拆线时反过来先拆电源再拆信号线最后拆0V。这个顺序能减少带电插拔的风险。6.2 触发延迟的补偿从传感器检测到零件到相机实际曝光中间有传感器响应延迟、线缆传输延迟、相机内部处理延迟。这些延迟加起来可能几百微秒。如果产线速度很快这个延迟会导致拍照位置偏移。解决办法是在PLC程序里做延迟补偿或者把传感器往前移一段距离。补偿量的计算假设产线速度是1米/秒总延迟是500微秒那么零件在延迟期间移动了0.5毫米。如果要求拍照位置误差小于0.1毫米就需要把传感器往前移0.4毫米或者把触发提前0.4毫秒。6.3 多相机触发的同步误差多相机用硬触发时如果PLC的DQ输出驱动能力不够多台相机并联会导致信号边沿变缓同步误差增大。解决办法是用PLC的DQ输出驱动一个中间继电器或光耦隔离器再由隔离器驱动多台相机。或者用一台相机的闪光输出Strobe Out去触发下一台相机形成级联触发但这样会累积延迟。PTP同步没有这个问题因为每台相机独立根据时间戳曝光不依赖触发信号的边沿。但PTP同步要求网络里所有设备时钟同步如果有一台相机失步它的曝光时间就会和其他相机不一致。6.4 触发信号的滤波工业现场干扰大触发信号上可能叠加毛刺导致相机误触发。相机内部通常有触发滤波参数比如Basler的TriggerFilter可以设置滤波时间。如果毛刺宽度小于滤波时间就被滤掉。但滤波时间设太大也会导致有效触发被滤掉一般设1到10微秒。如果相机没有滤波功能可以在PLC程序里做软件滤波比如连续检测到3次上升沿才认为有效触发。但这样会增加延迟适合低速场景。7. 选型建议与个人经验做了这么多项目我的选型习惯是能用硬触发就不用总线能用PLC就不用软件。硬触发的稳定性和实时性是总线比不了的而且调试简单出问题容易排查。总线触发适合那种需要频繁改配方、下发参数的场景纯触发用总线有点杀鸡用牛刀。PTP同步是趋势尤其是多相机3D视觉和高速产线。但PTP的调试门槛确实高网络里任何一个环节不支持PTP都会导致同步失败。如果项目预算允许建议直接上支持PTP的交换机和相机一步到位。如果预算有限先用硬触发顶着等产线速度提上来了再升级。最后分享一个我常用的调试技巧用相机的Strobe Out信号反推触发时序。把Strobe Out接到示波器的一个通道触发信号接到另一个通道就能看到从触发到曝光的实际延迟和抖动。这个数据比看SDK文档准确得多而且能发现很多隐藏问题比如信号振铃、接地反弹等。示波器不用太好的几百块的入门款就够用关键是能同时看两路信号。