欧姆龙NX1P2总线PLC打造自动检测机:EtherCAT多轴协同与视觉通信实战解析

发布时间:2026/10/20 9:04:40
欧姆龙NX1P2总线PLC打造自动检测机:EtherCAT多轴协同与视觉通信实战解析
搞检测设备这几年我越来越觉得一台自动检测机能不能稳定运行控制架构的选择比机械结构还关键。最近手头这套小型电子元器件的自动检测机就是用欧姆龙NX1P2系列总线PLC做主控做的从伺服运动到传感器IO再到视觉数据交互全部走总线EtherCAT管运动、EtherNet/IP管数据。这套系统从选型到调试跑通踩了不少坑也总结了不少经验。这篇文章把整套方案掰开讲清楚包括为什么选NX1P2、总线架构怎么搭、程序怎么写、现场调试会遇到什么问题。准备用NX1P2做设备的同行或者正在纠结“普通PLC加脉冲”和“总线PLC”怎么选的朋友看完应该能少走一些弯路。这是一台什么设备检测对象是小型电子元器件具体是一种板卡上用的连接器外壳。检测项分两大类一是外观缺陷包括划伤、脏污、变形二是关键尺寸比如两个配合面的间距和端子孔的位置度。工艺节拍要求5秒以内完成一个工件的检测。设备结构上分成上料工位、检测工位、分选工位三个区上料由振动盘加直振送料检测工位有一组XY轴带动工件运动视觉系统固定在横梁上分选工位用气缸加滑台把OK和NG的产品分开。整套设备伺服轴一共4个气缸和电磁阀十几个检测传感器包括光电、光纤、接近开关加起来几十个点再加上两套视觉系统需要数据通信。这个架构如果用传统脉冲PLC做起来会非常吃力这也正是我选择NX1P2的直接原因。1. 检测机选型必看NX1P2为什么能扛住多轴协同1.1 自动检测机对控制系统的硬性要求先把需求捋一遍。这类检测机虽然结构看着简单但对控制系统的要求其实很苛刻。第一是多轴协同XY平台要在视觉拍照的时候快速走位同时旋转轴要配合相机的取景方向这几个轴必须协同动作节拍才有保证。如果用普通PLC发脉冲控制CPU会耗费大量时间在脉冲输出上一旦同时处理通信和逻辑很容易出现丢步或者响应变慢。第二是IO响应速度检测机上光电和光纤传感器非常多气缸换向阀也多整个动作就是十几个点同时频繁切换IO扫描周期太长会导致执行机构动作不连贯。第三是数据交互视觉检测的结果需要实时回传给PLC由PLC做判定和分选同时检测数据要能统计、查询通信接口必须稳定。第四是程序的可维护性这台设备后续要改检测项、加视觉工位控制程序如果写成一坨嵌套梯形图后面维护的人会想骂人。NX1P2正好能满足这几条。1.2 NX1P2在欧姆龙产品线里的定位欧姆龙的PLC产品线拉得很开。传统的CP系列属于小型机主要靠脉冲输出控制步进和伺服胜在便宜但多轴联动和通信能力都有限NJ系列是真正意义上的机器控制器擅长多轴运动控制和数据处理价格也高。NX1P2正好卡在中间它是一体化的机器控制器外形和CP系列差不多但内置了EtherCAT主站支持最多4轴的运动控制程序语言支持IEC 61131-3标准的ST、梯形图等编程环境用Sysmac Studio和NJ系列完全同一个平台。这意味着小设备也能用上总线运动和结构化编程不用一上来就上NJ那种大家伙。对于我这台4轴设备来说NX1P2的轴数上限正好覆盖再往上加轴就必须升级到NJ系列了。1.3 和传统脉冲方案比总线方案赢在哪很多同行做这种检测机会选择CP系列加伺服驱动器接脉冲方式成本低接线也简单。但实际用下来有几个明显痛点。第一个是接线量和调试时间。脉冲方案每一根伺服线都要专门走线我这台上料、检测、分选一共4个轴加上编码器反馈、抱闸控制线多到电柜里面塞不下总线方案每台伺服只要一根EtherCAT网线串起来一根线就把位置指令、状态反馈、报警信息全带过去了。第二个是同步性。脉冲输出受PLC扫描周期影响多轴联动的时候各轴之间的协调性不如EtherCAT这种硬实时总线。第三个是故障诊断。总线伺服能把报警代码、电流、位置偏差这些数据全部读上来出问题可以直接看到是哪根轴因为什么原因报警脉冲方案只能靠万用表量。综合算下来总线方案初期看起来贵实际在调试和维护上省回来的时间远不止这个差价。2. 系统架构与硬件配置先把底子打好2.1 完整硬件清单与选型要点先给一个我当时配下来的完整清单给正准备下手的朋友参考。CPU选的是NX1P2-1040DT带EtherCAT主站支持4轴运动控制内置EtherNet/IP口可以连接触摸屏和视觉系统。伺服配置了4套欧姆龙1S系列驱动器加电机1S系列是标准的EtherCAT从站动力线和编码器线都是快插头安装速度快。远程IO用了欧姆龙EtherCAT从站IO模块输入输出按上面的统计来配输入40点输出32点各留了20%余量。视觉系统是两套一套用来定位引导一套用来检测缺陷通过以太网口和PLC做TCP通信。触摸屏选的是欧姆龙同品牌HMI通过EtherNet/IP直接和PLC通信画面组态简单变量直接映射。这里有个选型要点必须提醒一句NX1P2的不同型号功能差别很大有的型号只带一个以太网口、不支持EtherCAT有的型号支持运动控制但轴数不同。选型的时候不要只看“NX1P2”这个系列名称就下单一定要看清楚规格表上有没有EtherCAT主站功能运动轴数上限是多少程序容量多大IO点数上限是多少。我手头有一台设备差点用错型号就是因为采购按系列名下单结果到货的版本不支持总线运动控制最后只能退货换货白白耽误工期。2.2 EtherCAT做主运动总线EtherNet/IP做信息总线这套系统的总线规划分了两层。底层运动控制走EtherCAT拓扑是菊花链从NX1P2的EtherCAT口出来第一根网线接到第一个伺服驱动器然后第二个伺服从第一个伺服上串接出来依次串完全部4个伺服再去接远程IO模块。EtherCAT的优势在于循环同步多轴联动时位置的一致性明显比脉冲方式好。顶层信息交互走EtherNet/IP这个网络用来连接触摸屏、视觉系统、上位机传输的是检测结果、配方参数、报警信息这类不要求硬实时的数据。把运动和信息分开就避免了大数据流量把运动控制的实时性拖垮。EtherCAT组网有几个细节需要注意。网线长度和设备之间的距离有限制电柜里面如果走线太绕信号质量会下降。我当时用的都是标准的工业屏蔽网线屏蔽层在两端都做了接地。EtherCAT不需要终端电阻但最后一个从站如果没被识别整个网络是进不了运行状态的。另外从站的供电要和主站分开考虑。EtherCAT从站IO模块的工作电源如果和伺服电源共用一路伺服刹车和启动瞬间可能会把从站电压拉低轻则通信闪断重则掉站。我在这台设备上专门给各从站加了一路独立的直流电源后面调试基本没出现掉站的情况。2.3 远程IO布局与传感器信号处理IO布局的原则是就近采集。这台设备虽然点数不算多但分布很散上料区、检测区、分选区各有一批传感器和气缸。如果全部拉线回到主控柜走线会非常乱而且长度太长容易引入干扰。所以我在三个区域各放了一个远程IO从站通过EtherCAT串在伺服后面传感器信号在本地接入IO模块输出信号由本地IO模块直接驱动继电器板和电磁阀。这样每个区域的线束都短排查故障也方便。传感器信号处理上有一个很关键的细节。很多检测机用的传感器是NPN型输出低电平有效而NX1P2的IO模块输入形式要注意是漏型还是源型买模块之前一定要和传感器类型对齐。我有一批传感器到了现场才发现输出类型和IO模块不匹配最后只能在中间加转换继电器板虽然能用但电柜里多了一堆继电器既占空间又增加了故障点。所以建议在出BOM之前就把传感器型号和IO模块规格核对清楚这一步做错了后面全是事。另外光纤放大器这类传感器如果检测机对测量精度有要求建议走模拟量模块读取普通开关量IO只能读到“有或无”读取不了信号强度定位和测距的场景必须用模拟量。2.4 安全回路与抗干扰设计安全回路不能省这是所有设备的基础。急停按钮、安全门锁、光幕这些信号要进安全回路急停触发后要同时切断伺服使能和气缸气源。NX1P2本身支持安全功能但需要在配置里做相应设定而且要经过风险评估。我这台设备的安全逻辑比较简单一个急停回路串了三个急停按钮和一个安全门开关急停输出通过安全继电器切断伺服电机使能信号同时断开总气源。注意急停信号如果直接硬接线切伺服使能程序里也要有一个对应的状态位告诉各轴“现在处于急停状态”否则伺服恢复使能后容易产生位置跳变。抗干扰方面电柜内强电和弱电分开走线交流接触器和开关电源的线不要和EtherCAT网线绑在一起。伺服电机的动力线高频开关噪声大必须和编码器线、通信线分开走。还有接地电柜要有可靠的大地接地伺服驱动器的接地端子必须单独接地不要和PLC的接地串在一起。我调试到后期遇到一次偶发的IO闪烁排查了很久最后是把一个光纤放大器的电源从开关电源的同一路挪到了另一路隔离出来的电源上问题才消失。抗干扰这个事前期布线多做一分后期调试少熬一个通宵。3. 程序怎么写任务划分、状态机与视觉通信实现3.1 任务划分不同周期的任务怎么安排Sysmac Studio的项目里任务这个概念一定要用好。NX1P2支持多个周期任务和事件任务我把程序分成了三个主要任务。第一个是运动控制任务周期1毫秒里面只放运动控制相关的功能块比如轴使能、回原点、定位指令。第二个是主逻辑任务周期4毫秒放检测流程、气缸控制、状态判定。第三个是通信任务周期10毫秒放视觉数据的收发、触摸屏数据交互。为什么要分这么细因为不同任务对实时性的要求不一样如果全部塞在同一个任务里运动控制被IO扫描和通信处理拖慢整个设备的节拍就上不去。而且分任务还有一个好处某个任务出现问题的时候可以在Sysmac Studio的监视界面里直接看到哪个任务周期超时排查范围一下子缩小了。任务划分好之后全局变量要按功能模块来命名。我的习惯是前缀区分设备区域和数据类型比如上料区的气缸输出叫OUT_Feed_Cylinder检测区的到位传感器叫IN_Insp_InPos伺服轴位置变量用AX0_Pos。命名规范看着是小事但程序写大了之后查找变量、交接给别的工程师能省非常多时间。Sysmac Studio里变量有详细的注释字段我要求自己每个关键变量都写上注释包括单位、用途、有效范围这对后期维护太重要了。这个程序到现在已经不是我一个人在维护新接手的同事看注释就能懂大半逻辑。3.2 运动控制从使能到回原点到定位NX1P2的运动控制编程和NJ系列是同一种风格使用带实例的运动功能块。以我用的4个轴为例程序里先对各轴做配置轴类型是EtherCAT伺服然后调用MC_Power功能块给轴使能。MC_Power的输入有Enable和StopEmg输出有Status、Error、ErrorID。调试的时候ErrorID非常重要轴起不来的时候可以从系统定义的错误码表里查到具体原因。轴使能之后是回原点操作我用的是MC_Home功能块回原点方式选择带原点输入信号加限位信号的模式回原点的搜索速度和接近速度都要单独设定。速度设太高容易冲过头设太低又浪费时间一般我会让接近速度比搜索速度慢一个数量级让原点信号可靠停下来。定位指令我主要用MC_MoveAbsolute和MC_MoveRelative绝对定位用在有固定原点的工位相对定位用在需要连续叠加位移的场合。有一个细节欧姆龙运动功能块默认是沿使能执行也就是说只要前面的条件保持成立指令就会一直有效所以在写梯形图或ST程序时要自己加入沿触发逻辑。我习惯的做法是把启动信号沿触发后置位一个内部标志位然后把这个标志位接到功能块的Execute输入指令完成或报错后再复位标志位。这样不会因为条件信号一直是TRUE导致功能块重复触发。下面是一段示意性的ST代码实际项目中轴和各参数都是通过系统定义的MC_Axis变量来管理CASE byStep OF 10: // 等待启动信号 IF bStartTrigger THEN bStartTrigger : FALSE; bStartHome : TRUE; byStep : 20; END_IF; 20: // X轴回原点 MC_Home_Inst0( Execute : bStartHome, Axis : MC_Axis[0], Reference : TRUE, ... ); IF MC_Home_Inst0.Done THEN bStartHome : FALSE; byStep : 30; END_IF; 30: // 运动到检测位 MC_MoveAbsolute_Inst0( Execute : TRUE, Axis : MC_Axis[0], Position : rDetectPosX, Velocity : rFeedSpeed, ... ); IF MC_MoveAbsolute_Inst0.InPosition THEN byStep : 40; END_IF; END_CASE;注意上面这段代码省略了很多参数实际用的时候每个功能块的实例都要在Sysmac Studio里建立并绑定对应的轴参数也要逐个核对。运行位置的单位我统一用毫米速度单位用毫米每秒加速度用毫米每二次方秒。做程序之前先和机械工程师确认好机械的丝杆导程和减速比在轴配置里把电子齿轮比设对不然位置指令和实际走的位置对不上。这是所有没有总线伺服经验的人都会犯的错。3.3 检测流程状态机用CASE把逻辑理清楚检测流程是整个程序的核心。我用的写法是状态机加CASE分支每个工步一个编号从等待启动、上料、到位确认、视觉拍照、数据判定、分选执行到等待下一件全部按固定的状态顺序切换。状态机的优点是好排查、好维护出现问题时可以直接定位当前停在哪个工步再结合IO监视判断是哪个条件没满足。当时如果写成一大段嵌套的梯形图后面改程序的时候逻辑会越理越乱。状态机的切换条件要特别注意沿触发和超时保护。比如上料到位传感器没有信号如果程序永远等在那里设备就会卡死操作人员看着也不知道怎么回事。所以每个工步都要加一个超时定时器正常时间是工艺时间加一点余量超时之后报错在触摸屏上显示对应的“XX超时”同时设备进入暂停状态。这个超时机制在调试初期帮了我大忙很多问题都是先通过超时报警暴露出来的。另外气缸动作的到位信号不能用延时来代替。很多人图省事气缸输出之后就延时几百毫秒当到位这在空载试验可能没问题但工件尺寸变化、气压波动的时候延时和实际到位时间不一定对得上最好都用磁性开关或接近传感器的到位信号来确认。3.4 与视觉系统的通信交互视觉系统和PLC通信是检测机最核心的交互。我这两套视觉系统分别负责定位和外观检测定位相机在PLC触发后拍照计算出工件当前的坐标偏差回传给PLC之后由PLC做位置补偿外观检测相机输出检测结果和缺陷类型。通信协议用的是TCP Socket方式视觉控制器作为服务器端PLC作为客户端主动连接。程序里每个视觉相机对应一个Socket通道通过SocketOpenClient建立连接然后通过SocketSend和SocketReceive收发数据。通信报文要约定一个清晰的帧格式。我用的是简短的ASCII字符串比如定位视觉的报文格式是“POS,0.123,-0.456,”指引符是指令代号是POS后面跟两个坐标偏差值末尾是号。外观检测的格式是“RESULT,OK,12.345,6.789,*”结果分OK和NG后面跟两个测量值。做这种字符串协议的时候一定要约定好小数点的位数两端程序都是按固定位数解析数据的如果视觉端输出的小数位数和PLC端解析不一致数据就会整体错位。我当时就因为视觉端某个测量值在有些情况下会输出“---”表示无效导致PLC端字符串转浮点时报错后来统一规定无效值输出“999.999”PLC端再单独判断这个特殊值问题才解决。还有一个容易出现的问题视觉处理的时间是不固定的PLC不能简单地延时等待视觉结果。正确做法是PLC发送触发指令之后进入等待状态位视觉完成后主动给PLC发送结果字符串PLC在SocketReceive里收到完整的一帧后置位一个“视觉完成”标志主逻辑检测到这个标志再往下走。同时整个等待过程要有超时保护超时按视觉故障处理避免设备一直卡死。这个机制在节拍调试中也起了很重要的作用因为视觉处理时间波动大事件触发方式比固定延时方式要灵活得多。3.5 检测数据记录与配方管理自动检测机如果只是把OK和NG分选掉那价值就少了一半数据记录才是产线真正看重的。我这套程序里把每个工件的检测结果、测量值、时间戳、当前配方号都记录下来。NX1P2支持文件操作功能通过TextIO相关的功能块把数据写入SD卡或板载内存里的CSV文件。CSV文件每个工件一行列与列之间用逗号分隔方便后期用Excel或者上位机软件直接分析。注意频繁写SD卡会加快存储卡老化所以我用缓存的方式攒够一定数量再统一写一次既减少写卡次数又避免影响节拍。配方管理也是少不了的。这台设备虽然现在只检测一种连接器外壳但客户明确提出以后可能换型。我在触摸屏上做了配方画面每个配方保存一组参数包括各轴的检测位置坐标、视觉检测项目、判定阈值、气缸动作时序。配方存储在PLC的内存区触摸屏上选择配方号后通过EtherNet/IP通信把配方号下发到PLCPLC从配方表读取对应参数并覆盖运行变量。这样做换型的时候操作人员只要选个配方号程序自动把坐标和参数切过去不用一个点一个点地改。配方的数量我预留了10组足够了。4. 现场调试实录踩过的坑和排查技巧4.1 EtherCAT组网掉站先从物理层查起第一次带电调试的时候我在Sysmac Studio的EtherCAT配置里看到明明是4个伺服加3个IO从站结果实际连接只识别出5个。我首先怀疑是配置和实际不一致检查了一遍节点地址和从站ID都对得上。然后又怀疑是从站供电用万用表量了最后一个从站的电源端子电压正常。最后换了连接最后一个从站的那根网线问题解决。原因是那根网线在折弯处内部芯线断裂通信时好时坏。EtherCAT的物理层看起来简单但网线质量真的不能省建议采购专门的工业级拖链网线接线头要压接好。排查这种问题时我的顺序是先看软件里识别到的从站列表确认掉的是哪一个再到现场检查该从站的电源和网线最后才去动配置。千万别一上来就改软件配置那样只会把问题搞得更乱。4.2 回原点位置不稳定问题出在原点信号抖动设备调试到第三天出现了一个让人头疼的问题X轴回原点之后每次停的位置都不一样差个几丝到十几丝视觉定位补偿虽然能修正一部分但误差大的时候分选就会误判。一开始我以为是伺服本身精度问题重新做了伺服增益整定情况没有改善。后来用示波器看原点传感器的信号发现原始的无源信号根本没有抖动但是进到伺服驱动器的原点输入口之后信号边沿有明显的毛刺。排查下去发现是原点信号的线缆和伺服动力线在电柜里有一段并行走线动力线的高频噪声耦合进来了。把传感器线单独分开走并且在伺服驱动器的原点输入上接入RC滤波之后回原点位置就稳定了。这个事给我的教训是回原点的精度问题伺服参数只是其中一方面信号质量和接线方式的影响往往更大。4.3 视觉通信偶发超时缺少完整的帧协议处理视觉通信在调试初期有个现象10次里面大概有1到2次PLC收不到视觉结果导致流程卡住超时报警。我一开始怀疑是视觉端处理偶尔变慢在视觉程序里加了日志结果发现视觉端每次都在标准时间内发出去了。问题就出在PLC端的SocketReceive。原来TCP是流式协议两帧数据可能粘在一起也可能一帧被拆成两次收到PLC端如果单纯按“收到数据就解析”就会碰到不完整的帧解析失败后就丢弃了视觉那边自然就收不到应答。后来我改了接收逻辑用一个缓冲区把收到的字节先暂存起来每次收到数据都检查缓冲区里有没有完整的起始符和结束符有就提取一帧完整报文没有就继续等。同时SocketReceive还加了超时重试。改完之后通信再没有出现过超时。4.4 节拍不够快找到真正的瓶颈第一版程序跑下来单件节拍在7秒左右离5秒的目标差距很大。我开始逐个工步计时发现X轴从取料位走到检测位走位动作本身不到1秒但“视觉定位”和“外观检测”这两步是顺序执行的加起来占了将近4秒。这两套视觉的检测区域虽然不完全重叠但也没有绝对串行的必要。我把程序改成定位视觉拍照完成后X轴先带工件走一段同时触发外观相机拍照外观相机在后续过程中自动完成处理等X轴走到下一个位置时结果刚好出来。这样一个动作周期里同时完成两件事单件节拍直接压到了4.2秒。这个例子说明节拍优化不是单纯把伺服加速度调大很多时间浪费在等待上把等待变成并行效果比把轴速度拉满要好得多。节拍优化的第二个方向是伺服的运动参数。很多工程师怕设备报警加速度不敢往高调但实际上伺服选型时已经留了余量把加速度、减速度慢慢往上提配合观察跟随误差和是否报警可以在安全范围内提高不少效率。我一般以每次提高10%到20%的幅度去试每次改完跑一整天采集数据确认稳定后再继续往上加这样既效率又稳妥。4.5 现场常见问题速查表调试期间积累的问题整理成了一张速查表直接贴出来给大家参考。现象可能原因排查方向EtherCAT从站识别数量不对网线断芯、从站供电不足、节点地址冲突先查物理层再看配置上电后轴无法使能急停未复位、伺服报警、MC_Power的Enable未置位查看ErrorID结合伺服面板报警码回原点位置漂移原点信号受干扰、原点搜索速度过快查信号线、加滤波、降低接近速度视觉结果收不到帧解析逻辑不完整、通信超时设置太短检查缓冲区帧处理加超时重连某输入点偶发闪烁电源干扰、传感器与IO模块类型不匹配排查走线、隔离电源触摸屏和PLC连不上IP网段不一致、端口被占、EtherNet/IP连接数超限检查IP配置和通信设置程序下载后运动位置不对电子齿轮比设置错误、单位换算不对核对丝杆导程、减速比、编码器分辨率这张表里的问题几乎每一个都是我在不同项目里真实遇到过的。把这些经验沉淀下来之后后面做同类设备的时候调试时间明显缩短了。5. 实测效果与扩展规划稳定运行之后还能做什么5.1 实际运行效果这台检测机交付到现在已经连续跑了几个月单件节拍稳定在4秒到4.5秒之间完全满足5秒节拍要求。OK/NG分选准确率在8小时连续运行下稳定在99%以上误判主要出现在极端光照变化的时候后期在视觉端加了光源亮度反馈之后进一步得到改善。EtherCAT总线运行非常稳定几个月下来没有出现过一次掉站远比我之前用脉冲方案省心。数据记录功能每天生成一个CSV文件客户直接拿到质量部门做统计分析。维护方面因为程序用了结构化的状态机写法现场电气人员通过触摸屏就能看到当前工步和报警信息基本不需要厂家到场就能处理简单的停机问题。5.2 后续还能怎么扩展这套架构的扩展性其实比我一开始预想的要好。NX1P2的运动轴数上限是4轴现在刚好用完如果以后要增加轴只能升级到NJ系列或者加独立的从站控制器程序迁移的成本不会太高因为Sysmac Studio平台完全一致变量和程序代码可以大部分复用。IO点位如果后期要增加直接在EtherCAT总线上多串一个从站IO模块就行不用改主程序。数据接口方面现在采集的数据存在SD卡里后续如果客户要对接产线MES系统NX1P2的EtherNet/IP口可以直接和上位机做数据交互把这套设备的生产数据实时上传这个扩展方案已经和客户初步沟通过可行性很高。最后分享一个我个人的体会。用总线PLC做检测机看起来成本比传统方案高一些但这笔钱换来的是调试效率、故障诊断能力和设备可维护性的大幅提升。如果是做标准机、批量复制这些优势会随着项目数量被放大。我自己的习惯是无论设备多简单控制程序里都会留好注释、做好状态机和变量命名规范因为设备不是做完就完了后面还有调试、优化、维护、换型每一步都要靠程序的可读性撑着。希望这篇东西能帮到正在入坑或已经在坑里的同行。