做机器视觉项目这几年,我发现一个很有意思的现象:搞视觉的人懂相机、懂算法,但一到跟PLC对接就抓瞎;搞PLC的兄弟能搞定逻辑控制,但看到相机SDK、像素当量、曝光时间这些词就头大。产线上真正能把“相机拍到图→工控机算出结果→PLC收到信号→机构执行动作”这条完整链路打通的人,其实并不多。
这篇文章我打算把整套部署连接的思路和细节从头到尾捋一遍。从嵌入式工控机的选型、工业相机的安装触发,到视觉算法的判定结果怎么稳定可靠地交给PLC,再到现场调试时常见的坑和排查方法,都按我实际做项目时的习惯来讲。适合刚入手机器视觉项目调试的朋友,也适合那些平时只写PLC程序、突然要接手视觉工位的人。
1. 先想清楚整条链路再动手:方案选型和设计思路
接手任何视觉检测项目,我第一件事不是开软件、不是连相机,而是先在脑子里把整条链路画出来。链路不清晰,后面接线的顺序、通讯的方式、程序的结构全会乱套。
1.1 链路全景:从拍照到执行到底经过哪些环节
一条标准的机器视觉产线检测链路,从物理设备上看分这么几段:
- 传感器/光电开关触发相机拍照,或者PLC直接给相机一个硬触发信号。
- 相机通过GigE、USB3.0或者CameraLink接口把图像传到嵌入式工控机。
- 工控机上运行的视觉软件或SDK程序对图像做处理,比如找特征、测尺寸、识别字符、判断缺陷,最后得出一个OK或者NG的结果。
- 工控机把结果通过数字IO或以太网通讯送给PLC。
- PLC根据结果控制气缸、分拣机构、报警灯或者机械臂做对应动作。
这里最容易犯的认知错误是,很多人以为“视觉系统”就是“相机+算法”,把结果输出这一步完全抛给电气工程师去想办法。但实际上,结果怎么给出去、用IO还是走通讯、信号怎么编码,直接决定了整个项目的稳定性和调试周期。我见过太多项目因为前期没谈清楚输出方式,现场扯皮、改接线、改程序,搞到凌晨两三点。
1.2 结果输出方式怎么选:IO硬接线与通讯协议的取舍
视觉系统给PLC传结果,主流的方案就三种。
| 输出方式 | 延迟 | 信号内容 | 适用场景 | 隐患 |
|---|---|---|---|---|
| 数字IO硬接线 | 毫秒级,极快 | 只有OK/NG电平,或简单脉冲 | 高速分拣、实时剔除、简单的结果判断 | 线缆数量多,信号内容单一,无法传数据 |
| Modbus TCP | 十几毫秒级,可接受 | 可传状态字、结果码、测量数值 | 需要传数值、多工位、需要追溯数据 | 依赖网络稳定性,需处理掉线重连 |
| 串口Modbus RTU | 几十毫秒级 | 可传数值和状态 | 老旧设备、距离远、电磁环境差的环境 | 速率低,接线相对麻烦 |
我在实际项目中,只要PLC支持以太网,我会优先推荐“IO信号做关键动作保障 + Modbus TCP传详细数据”的组合。什么意思?就是OK/NG这种直接影响机构动作的信号,用一根硬线直接接到PLC的输入端,靠信号本身的电平变化触发,保证响应速度;同时把具体的测试值、缺陷类型、图片编号这些信息通过Modbus TCP发给PLC,方便它做数据记录和追溯。
如果只能二选一,项目速度要求高、逻辑简单,就选IO;项目要的数据多、检测项复杂,就优先通讯。但多数情况下,稳健的做法是两边都上,成本其实没增加多少。
1.3 硬件选型的几个关键点和经验值
选嵌入式工控机,别只看CPU型号,要看它用在什么样的产线环境。产线对工控机的要求和办公室里的台式机完全是两个物种。
嵌入式工控机至少要满足这几点:
- 无风扇被动散热,不然灰尘堵住风扇几个月就过热死机。
- 宽温设计,至少能扛住0到50摄氏度的现场环境,夏天没空调的车间温度能到40度以上。
- 有足够的网口和USB口,GigE相机一个网口,PLC通讯一个网口,加上键盘鼠标、调试口,至少需要2个千兆网口和2个以上USB3.0口。
- PCIe插槽有富余,有时候要插独立IO卡或图像采集卡。
- 支持DIN导轨安装或者壁挂安装,能塞进电柜里。
采集卡和IO输出卡是很多人容易忽略的一环。很多视觉工位图省事,结果信号直接用相机自带的IO口输出。这个方案在简单场景能跑,但相机IO输出能力有限,驱动不了大负载,而且一旦相机厂家把IO定义改一下、或者你需要输出更多路信号时就不好扩展了。稳妥的方案是工控机里插一块独立的数字IO卡,或者是通过支持IO扩展的视觉控制器,把结果信号从IO卡上引出。这样信号数量、电压等级、驱动能力都可控。
相机选型方面,工业相机品牌在产线上用的最多就是海康机器人、Basler、大华。分辨率怎么定?核心思路就一条:算清楚你要求的最小检测精度。比如你要检测的缺陷最小是0.1mm,视野范围大约是100mm宽,那么需要的像素数量就是100除以0.1等于1000像素,再留2到3倍的余量,最低选300万像素左右的相机才靠谱。很多人贪便宜选低分辨率,结果现场发现小缺陷根本看不清楚,返工换相机,损失更大。
镜头更是个容易踩坑的地方。我记得有个朋友的项目要检测一个3*3mm大小的零件表面缺陷,问我用什么镜头。我当时给他的建议是:用500万像素级别以上的工业镜头,焦距按工作距离和视野算。公式很粗暴:焦距约等于工作距离乘以传感器宽度除以视野宽度。比如工作距离打算放100mm,传感器宽度用常见的6.4mm(1/2.5英寸芯片),要覆盖的视野是10mm宽,那焦距就是100乘以6.4除以10,等于64mm,选个标准50mm或60mm镜头,然后微调工作距离就行。这里千万要注意,千万别把传感器尺寸搞错,不同相机芯片大小差很多,同样焦距下视野能差出将近一倍。
光源选型,说白了就是看你要突出什么特征。检测字符和划痕,用低角度环形光;测量尺寸,用背光让轮廓最清晰;检测透明瓶杂质,用平行背光;表面平整度检测,用同轴光。我一般会在选型初期就让光学方案工程师或资深调试人员参与进来,因为这玩意纯靠理论算不出来的,必须在现场试几种光源和角度。
1.4 为什么要用嵌入式工控机而不是普通PC
这个问题我每次都跟客户解释一遍。普通工控电脑机箱大、风扇多、接口紧,放在办公区没毛病,塞进产线电柜里就是灾难。嵌入式工控机无风扇、宽温、体积小,抗振动,接口朝向也都为接线方便设计过。
还有一个隐性原因是稳定性。机器视觉项目调试阶段用台式机无所谓,但量产以后最怕的就是工控机死机、系统崩溃。嵌入式工控机因为硬件设计相对收敛,驱动兼容性问题少,在产线那种连续开机的环境下故障率低得多。你要是用过那种自己攒的台式机跑视觉,就知道时不时蓝屏、USB口松一下相机就断开的痛苦。
2. 相机到工控机:把图像稳定地采进来
链路的前半段,目标就一个:稳定、清晰、不丢帧地让算法拿到图。这一段的坑主要集中在触发方式、硬件接线和SDK的开发细节上。
2.1 硬触发接线与光耦隔离,别让信号毛刺毁掉一整天
视觉系统拍照有两种触发模式:软件触发和硬触发。产线上几乎无一例外用硬触发。
为什么要硬触发?因为产线是连续运动的。产品经过传感器时,PLC或传感器发出一个上升沿信号,相机立刻拍照,这样每次拍到的位置都一致,不会因为软件延迟导致拍照位置漂移。软件触发的延迟有几十毫秒,高速线上早就跑过头了。
硬触发的接线以海康相机为例,相机上有Line0、Line1等IO口。传感器或PLC的DO输出接到相机的Line0+,Line0-跟相机电源负极共地,然后相机把触发模式设成Line0上升沿触发。很多相机出厂默认是软件触发,第一次用的人会发现怎么接线相机都不拍照,就是因为参数没改。
接线时有个非常容易踩的坑:PLC的DO输出如果是继电器型的,响应速度很慢,拉高拉低要十几毫秒,而且触点抖动严重,可能一次触发产生好几个上升沿,相机咔咔咔连拍好几张。这时候一定要换晶体管型的DO模块,或者干脆用感应器直出信号。
还有一点要说清楚:相机出厂IO一般做了光耦隔离,这是好事,能防止现场电机启停浪涌把相机IO口打坏。但是光耦隔离输入是有最小电流要求的,信号源驱动能力太弱可能触发不了。如果你遇到相机硬触发怎么都不拍照,先拿万用表量一下触发信号在相机IO口处的电压有没有达到阈值,再考虑是接线问题还是参数问题。
2.2 SDK开发要点:回调线程里别干重活
这部分我默认读者是要写一点代码的,哪怕你是用LabVIEW或者VisionMaster这种图形化工具,底层逻辑也一样。
以海康MvCameraControl SDK为例,标准流程是:
- 枚举设备、创建设备句柄、打开设备。
- 设置触发模式:设置TriggerMode为TriggerMode_On,TriggerSource为Line0,TriggerActivation为上升沿。
- 设置像素格式、曝光时间、增益。
- 注册图像回调,然后开始抓图。
C#或C++的伪代码大致是这样(简化版,正式项目里要做异常处理):
// 打开相机并设置参数 camera.TriggerMode = TriggerMode.On; camera.TriggerSource = TriggerSource.Line0; camera.TriggerActivation = TriggerActivation.RisingEdge; camera.ExposureTime = 500; // 微秒,具体看现场光照 camera.Gain = 0; // 注册回调 camera.ImageGrabbed += OnImageGrabbed; camera.StartGrabbing();关键点来了:图像回调函数里千万不要直接做复杂的算法处理。因为回调线程是SDK内部的高优先级抓图线程,你在里面做几分钟的模板匹配或者深度学习推理,会导致SDK内部缓冲队列塞满,然后丢帧报错。
正确的做法是,回调里只把图像数据复制到你自己管理的内存队列里,然后用另一个独立的工作线程去处理图像。处理好之后,把结果塞到结果队列里,再经由通信线程发出去。这样相机采集和图像处理完全解耦,就算算法偶尔慢一下,也不会导致采集链路崩溃。
这个“生产者和消费者分离”的思路,是全套机器视觉软件架构的基石。我接手过好几个半路项目,代码全写在回调里,运行时卡得一塌糊涂,重构之后立刻稳了。
另外一个细节是曝光和光源的配合。硬触发模式下,曝光时间由软件设定,但如果你用的是频闪光源(就是拍照瞬间闪一下的光源),频闪控制器一般也是由PLC或单独的控制器触发,必须保证频闪点亮时刻和相机曝光窗口重合。这个漂移问题在高速线上特别明显,相位稍微错开一点,图像亮度就会忽明忽暗。调这个相位我一般会在相机驱动里打开测试曝光模式,看着图像亮度手动微调PLC里面一个延时参数。
2.3 相机标定和镜头工作距离,要把像素换算成毫米
如果你的项目只是判断有无、判断颜色,标定可以缓一缓。但一旦涉及尺寸测量,标定是绕不开的。
标定的本质,是搞清楚每个像素对应实际物体上的多少毫米,这个值叫做像素当量。拿一个已知尺寸的标定板或者标准件放在相机下面拍一张,然后用软件提取出特征点距离,算出对应关系。比如一个宽度10mm的标准块,在图像中占2000个像素,那么像素当量就是10/2000,等于0.005毫米每像素。
相机标定的另一个任务是畸变矫正。工业镜头尤其是短焦距广角镜头,画面边缘会有明显的桶形畸变,直接影响边缘区域的尺寸测量精度。正规的做法是用棋盘格标定板拍多组照片,用OpenCV的CalibrateCamera函数算内参和畸变系数,然后对每帧图像做Undistort处理。产线上嫌麻烦的,也可以只在中心区域测量,畸变影响小一些,但精度要求高时还是老老实实标定吧。
补充一句跟镜头工作距离有关的经验:调机时不要只凭公式算出来就直接锁死位置,实际装好后先拍一张标准件,量一下视野实际宽度和成像清晰度。因为镜头的实际焦距会有5%左右的误差,工作距离差一点,对焦和视野都会不同。最好的做法是装好后再用激光测距仪确认一下工作距离,然后拿标准件做最终的标定,别省这一步。
2.4 光源的安装角度和频闪控制,细节决定成像质量
光源这块我觉得特别值得用一两段来写,因为产线上70%的视觉调试问题,最后都能追溯到光源没配好。
先说角度。低角度光源适合把表面凹凸、划痕照射出来,因为光线近乎平行于表面,微小的凸起会形成明显的阴影。高角度光源适合有字符、有颜色的表面,让特征部位反射光更多。背光源则是把被测物体放在光源和相机之间,拍出来是黑色的轮廓,适合尺寸测量和边缘检测。同轴光利用半透半反镜原理,让光线垂直照射物体并垂直反射,适合高反光表面的划痕检测。
频闪光源的接线和触发更值得注意。普通常亮光源只要供电就行,但频闪光源需要额外的频闪控制器。控制器的触发信号可以从PLC的输出点取,或者从相机的频闪输出口取。从相机输出取的好处是同步性最好,因为相机曝光窗口和光源闪亮天然同步。坏处是相机的频闪输出驱动能力有限,且增加了相机IO口的负担。现场实际调试中,我建议优先用相机频闪输出,如果负载太大再外挂控制器、由PLC统一触发。这部分的时序配合,只能靠示波器或者图像亮度变化来验证,没有捷径。
3. 工控机到PLC:把判定结果稳定可靠地送过去
链路的后半段,很多人会低估它的难度。视觉算法只要你肯花时间,总能调到满意,但结果送给PLC以后,机构动不动如山,问题往往出在信号传输和PLC逻辑处理上。
3.1 先定责任边界,再谈通讯方案
这句话是我做项目多年最深的体会。一台设备,视觉系统和PLC之间必须有明确的责任边界。我的习惯是:视觉系统只负责“判断”和“上报”,不负责“决策执行”。意思就是画面采集、分析、结果判定都是视觉这边的事,但判定完之后,具体怎么剔除、怎么报警、怎么停机,全部交给PLC。视觉系统不能因为自己误判去直接控制机构动作,否则追溯起来就是一团乱麻。
责任边界定好以后,再谈信号方案就有章法了。如果只传OK/NG,最简单的就是IO信号;如果需要传缺陷代码、测量数值、图片文件名,就走Modbus TCP。我见过把结果用串口发过去的,也不是不行,但产线环境干扰大、速率低,能上以太网就上以太网。
3.2 Modbus TCP实操:寄存器规划不做,后面全是坑
Modbus TCP是目前PLC和上位机之间最常见的通讯方式,关键在于寄存器地址的规划。规划得好,调试半小时搞定;规划得烂,现场对地址对到怀疑人生。
先把IP规划做了。PLC、工控机、相机、交换机必须在同一个网段,比如PLC是192.168.1.10,工控机是192.168.1.20,相机是192.168.1.30。这里提醒一句,千万别把工控机和相机的网口接在同一个无管理交换机上然后不做任何隔离,因为相机的巨量图像数据流会占用交换机带宽,可能会影响Modbus TCP报文的实时性。我的做法是相机走单独的网口或独立的网段,工控机通过另一个网口跟PLC通讯,物理隔离最省心。
然后规划寄存器。以PLC做Server,工控机做Client为例,我会在PLC里划出一段保持寄存器专门给视觉系统用,比如Modbus地址从40001开始。寄存器规划表长这样:
| 寄存器地址 | 数据内容 | 说明 |
|---|---|---|
| 40001 | 状态字 | Bit0=OK,Bit1=NG,Bit2=超时,Bit3=视觉系统在线 |
| 40002 | 结果码 | 0=无结果,1=OK,2=NG,3=ERROR,4=超时 |
| 40003 | 测量值 | 比如尺寸值,整数型,单位由PLC端约定 |
| 40004 | 缺陷类型 | 不同的缺陷编码,PLC根据编码做不同处理 |
| 40005 | 帧计数 | 视觉系统的处理帧数,用于对账查丢帧 |
关键点在于心跳机制。PLC必须能感知视觉系统是否在线。我在40001的Bit3就是留给心跳用的,工控机每500毫秒主动把Bit3置1,PLC在程序里判断如果超过2秒没收到心跳,就认为视觉系统掉线,设备停机报警,防止瞎跑造成批量不良品。
还有字节序的问题。Modbus TCP传输多个字节时,有的PLC用大端模式,有的用小端模式。特别是传输测量值、计数这种多字节数据时,如果PLC端和工控机端字节序不一致,你会读到完全对不上的数值。我吃过这个亏,现场调试时数值怎么读都是乱的,最后发现是字节序反了,把工控机侧高低字节交换一下立即好了。这里建议项目一开始就在技术协议里写清楚字节序,别到现场再猜。
3.3 PLC侧程序怎么写:用上升沿捕捉短脉冲,别丢信号
PLC侧的逻辑,看着不难,但对细节的处理真的是天壤之别。
先说IO信号方式。如果视觉系统输出一个100毫秒的OK脉冲,PLC必须具备“上升沿捕捉”能力才能保证不丢信号。因为PLC的扫描周期如果是10毫秒,100毫秒的脉冲能扫到10次,没问题;但如果视觉系统在高速线上只输出一个5毫秒的脉冲,而PLC扫描周期恰好10毫秒,那这个脉冲就可能落在两次扫描之间,直接丢掉了。
保险的做法分两层。第一层,视觉系统输出结果时保持一个稳定的电平,比如OK输出持续保持高电平直到PLC有应答信号过来;第二层,PLC程序里用沿指令加锁存变量,把视觉系统传来的脉冲信号在第一次扫到时立即锁存,后续步骤再根据锁存值去动作。锁存值记得在动作完成后及时复位,免得影响下一轮。
用梯形图的话,大致是这个思路:
// 伪代码,只表达思路 IF VISION_OK_PULSE AND NOT VISION_OK_PULSE_PREV THEN M_OK_LATCH := TRUE; // 锁存OK脉冲 END_IF VISION_OK_PULSE_PREV := VISION_OK_PULSE; IF M_OK_LATCH THEN // 执行剔除动作或者其他逻辑 EXECUTE_SORTING(); M_OK_LATCH := FALSE; // 动作完成后复位 END_IFModbus TCP方式下PLC侧的处理逻辑也类似,一般是在一个定时中断或扫描周期里读视觉系统写入的寄存器,然后用沿判断新结果来了没有。这里特别要小心:不能只盯着状态字的变化,要把状态字和上一周期的状态字做异或判断,否则同一个结果值你可能会重复触发动作两次。
再补充一个实用技巧:在PLC程序里加上“超时判定”。如果PLC给视觉系统发了拍照指令后,1秒内没收到对应结果,视为超时,走超时NG流程。这既是保护机制,又是排错线索。很多故障现场查来查去,最后发现是某次触发后相机没拍到图,而视觉系统还在傻等,PLC也没办法,只好靠超时来兜底。
3.4 连线与防干扰:屏蔽、接地、分槽走线一个都不能少
关于IO信号线,我总结几条铁律:
- 信号线和动力线必须分开走线槽,不能捆在一起。变频器、伺服电机、接触器的启停会在动力线上产生强干扰,信号线跟它们平行走几十厘米,100毫秒的脉冲里可能全是毛刺。
- 必须用屏蔽双绞线,而且屏蔽层单端接地。屏蔽层两端都接地会形成地环路,反而引入更大干扰。
- 数字IO信号标准一般是24V DC,信号线不能过长,超过5米要量压降,有时候PLC输出的24V到了相机端就变成22V,还能勉强工作,但就会时不时无规律误触发。
- 电源问题常常是视觉系统纹波、死机的元凶。相机、工控机、光源最好由独立电源供电,不要和电机驱动器共用开关电源。驱动器一启动,电源电压瞬间跌落,嵌入式工控机其实最怕这种电源毛刺,搞不好直接重启。
4. 现场调试:我踩过的坑和排查方法实录
现场调试是整个项目里最折磨人也最有价值的部分。按惯例,把常见的问题列成速查表,再挑几个印象深刻的典型故障详细复盘。
4.1 常见问题速查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 相机硬触发不拍照 | 触发模式没设成硬触发;接线电压不够;极性反了 | 先用相机调试软件手动触发,确认相机正常,再量触发线电压,检查触发源类型 |
| 图像忽亮忽暗 | 频闪光源和曝光不同步;光源电源不稳定 | 在相机软件里打开连续曝光观测图像亮度,微调频闪控制器延时 |
| 图像有横纹或跳动 | 供电电源纹波大;信号线受电机干扰 | 单独供电,改用屏蔽线,换槽走线 |
| PLC收不到视觉信号 | IO没共地;电压等级不匹配;脉冲太短被漏捕 | 万用表量IO端电压,用沿锁存逻辑,确认NPN/PNP类型一致 |
| Modbus TCP连不上 | IP不在同一网段;PLC端口没开放;防火墙拦截 | 用wireshark抓包,ping通后再测端口连通性 |
| 通讯偶尔断线 | 交换机质量差;物理线路虚接;IP冲突 | 固定IP并错开,换工业级交换机,检查水晶头 |
| 视觉系统误判率高 | 光源角度不对;模板不鲁棒;相机曝光模糊 | 重新调光、增加预处理、旋转方向校正 |
4.2 三个典型故障复盘
第一个案例是关于IO脉冲丢失的。某项目要检测产品表面缺陷,视觉系统输出NG脉冲给PLC,但现场发现NG品偶尔漏到下一工位去了。排查过程非常痛苦,最后用了示波器才看到,NG脉冲输出只有3毫秒左右,而PLC的输入模块滤波默认设成了10毫秒,直接把信号滤掉了。这个问题的解法有两个方向,一个是把视觉系统的输出延时加长到100毫秒,另一个是把PLC输入断言的滤波时间调小。从此以后,我再接视觉IO信号,默认先把输入滤波参数确认一遍。
第二个案例是Modbus寄存器字节序问题。视觉系统把测量值写入PLC,显示出来的数值永远是乱的,好端端的12.34变成乱七八糟的数。用Wireshark抓报文分析后确认,PLC端寄存器读到工控机写入的数据高低字节是反的,把视觉系统侧的字节序设置改成Big Endian后一切正常。这类问题如果不熟悉抓包工具,很容易在地址对不对、协议对不对上瞎折腾半天。
第三个案例跟光源频闪和曝光不同步有关。检测节拍加快以后,图像亮度开始周期性变化,导致误判率飙升。原因是原方案里相机曝光时间是固定的500微秒,而频闪光源的闪光时刻受PLC扫描周期影响,产生了周期性漂移。后来我把光源触发改成了相机频闪输出直接带,并且把曝光时间稍微调大留出容差,亮度就稳定了。
4.3 现场调试最好用的几类工具
调试工具清单,我的建议是:
- 相机厂家自己的调试软件,海康的MVS、Basler的pylon Viewer,这个必须有。它能快速验证相机通讯、手动拍照、设置IO触发、看曝光效果,是最快定位“相机本身没问题”的手段。
- 万用表和示波器,要测IO电压、测触发信号质量。示波器不一定要高端的,手持式双通道的就够用。
- Wireshark,抓Modbus TCP报文和GigE Vision的图像传输报文,排查通讯问题必备。
- 串口调试助手,如果走串口通讯,还得靠它查看底层交互。
- 一个好的网口转USB调试工具,很多嵌入式工控机装得比较深,调试设备网口不够用时,USB转网口能救命。
4.4 验收清单:不是能跑就结束,要系统性验证
视觉项目调通以后,我习惯按清单验收,避免漏项:
- 连续空跑8小时以上,统计掉线次数、漏检次数、误检次数,指标达到约定值。
- 断电重启后,视觉系统自启动、PLC自动恢复通讯、心跳自动恢复,不需要人工干预。
- 故意制造断网、断信号、遮光、堵料等故障条件,确认故障能被检出并且设备进入安全状态。
- 结果数据可追溯,PLC或上位机里至少能查到最近N次的检测结果、时间戳和对应图片编号。
- 把OK/NG判据的标准样件在产线上复测多次,确认一致性。
我每次做验收都会挑几件物理上有争议的样品,反复放进产线测试,看视觉系统到底稳不稳。这种样本测试越严格,量产以后的麻烦就越少。
5. 最后再多说几句
链路部署连接这件事,本质上考验的是跨工种配合能力。视觉工程师要理解PLC的扫描周期、IO滤波、脉冲触发逻辑;PLC工程师也得懂一点触发极性、光耦隔离、图像采集原理。项目推进中建议尽早定一份接口协议,把信号电平、脉冲宽度、寄存器地址、心跳机制、超时策略全写明,两边同时照着开发,不然到现场再协调真能脱层皮。
调试顺序上,我是先搞定“相机到工控机能出图”,然后调“触发拍照稳定”,再做“算法判定”,接着通“IO和Modbus”,最后才做联调和验收。别看步骤简单,按这个顺序走能把出问题的范围快速收敛,别一上来就东戳一下西试一下。
如果你正在做类似的项目,希望这篇长文能让你少走点弯路。链路看着长,但每一段都有章可循,稳扎稳打,最后一定能跑顺。