一台设备里有三台伺服要联动节拍要求又不到毫秒级同步我第一反应就是别再拉那几十根脉冲线和方向线了。最后用的是信捷XD5E的以太网口加MODBUS-TCP协议一根网线管到底PLC当主站三台伺服当从站触摸屏挂在同一张以太网里既能在画面上设定目标位置和速度也能实时看到每台轴的实际位置和报警状态。这篇文章就把整个实践的思路讲透重点放在网络搭建、寄存器映射、PLC程序组织和触摸屏画面规划上最后再完整复盘一次现场排错过程给准备用XD5E做以太网多轴通信的同行做个参考。1. 为什么最终选了MODBUS-TCP而不是脉冲或总线1.1 脉冲方案在3轴以上的痛点多轴控制最常见的做法就是PLC发高速脉冲伺服工作在脉冲/方向模式。轴数少的时候这方案确实简单两根输出线加一根公共端就能驱动一台伺服但轴数一旦超过两台麻烦立刻冒出来Y点资源被占、柜内走线越来越密、长距离传输脉冲容易受干扰导致丢脉冲位置就悄悄偏了。还有一个更头疼的问题是故障难查现场断一根脉冲线设备表现出来的是位置不对光靠眼睛根本排查不出来得拿示波器去量波形。我在模拟项目X里最初也考虑过脉冲方案。三台伺服每个轴需要脉冲口和方向口加上原点、限位这些输入输出PLC的I/O点很快就紧张了。后来算了一下光是线缆加接线工时成本已经和走以太网方案差不多。1.2 MODBUS-TCP为什么够用很多人一听以太网通信就直接跳到EtherCAT这类实时总线其实没必要上来就上重武器。MODBUS-TCP有以下几点非常契合中小型多轴点位控制信捷XD5E本体自带以太网口不用加通信模块编程软件里配置主站即可。市面几乎所有伺服驱动器都支持MODBUS协议做到协议统一不挑品牌。TCP本身就是以太网标准交换机、网线、水晶头都是现成件比专用总线卡便宜得多。通信数据量也丰富得多读取实时速度、当前位置、电流、报警代码都是顺手的事这在脉冲方案里根本不敢想。实测下来我设计的轮询周期在10ms左右三台伺服一轮循环不超过40ms。对于定位精度要求在0.1mm以内、节拍在几百毫秒的设备这个响应完全够用。数据监控和故障诊断带来的效率提升远超那一点点实时性差距。1.3 什么样的项目不建议这么做讲句实话MODBUS-TCP不是万能的。如果你的设备是三轴以上并且要求插补联动、轨迹规划或者伺服需要严格同步运行那这方案确实不适合。这种场合老老实实上EtherCAT或者专用运动总线不要想着用MODBUS扛。点位控制、速度控制、简单同步这才是MODBUS-TCP最舒服的区间。选型最重要的就是搞清楚需求边界不是越先进越好。2. 网络搭建与伺服参数准备先把物理链路和地址理干净2.1 网络拓扑与IP规划我习惯在动手接线前先把IP规划表画出来贴在电柜图纸上。这个项目里我用了工业交换机把所有设备汇到一张网里PLC和伺服之间走MODBUS-TCP电脑和触摸屏也挂在这张网上调试时不用反复拔线。模拟项目X的网络设备及IP分配如下设备IP地址子网掩码用途说明信捷XD5E主站192.168.1.10255.255.255.0MODBUS-TCP主站1号轴伺服192.168.1.21255.255.255.0从站12号轴伺服192.168.1.22255.255.255.0从站23号轴伺服192.168.1.23255.255.255.0从站3触摸屏192.168.1.30255.255.255.0HMI监控与操作规划时要留意三点所有设备必须处于同一网段IP不能重复伺服本身的站号和IP要一一对应。我见过太多通信故障最后发现是两台伺服IP写重了。另外如果这台设备要接入工厂办公网一定提前找信息部门确认网段避免跟整个车间的大网冲突。2.2 伺服驱动器上必须确认的通信参数我第一次调伺服通信时也走过弯路以为只要网线一插就能通结果卡了半个多小时。伺服驱动器要工作在MODBUS-TCP从站模式通常需要在面板上或者软件里把以下几项设好IP地址、子网掩码要和规划表一致。使能方式选择通信给定速度/位置给定源选MODBUS寄存器给定。确认该驱动器支持的MODBUS寄存器版本不同固件版本地址表可能不一样这是最容易被忽略的坑。如果是纯TCP通信不需要设波特率因为不走串口。有人把串口的4800/9600那套习惯带过来到处找波特率设置白白浪费时间。这些参数设完最好给每台伺服贴一张标签把IP地址和站号写清楚后面排查故障能省一半精力。2.3 触摸屏接入网络的两种接法触摸屏接入以太网有两种方式。一种是和PLC本体直连接线简单适合小系统另一种是大家都上交换机我推荐这种。因为调试期间电脑需要同时在线上传下载PLC程序、在线监控伺服参数触摸屏也需要和PLC保持实时通信四五个设备在交换机下共存才是最舒服的状态。选交换机的时候不用追求带网管功能但一定要选每个端口都有LED指示灯的故障排查时有没有灯真的差很多。普通百兆工业交换机完全够跑MODBUS-TCP注意别在同一个网络上混入摄像头这类持续占用带宽的设备就行。3. MODBUS-TCP寄存器映射多轴指令真正落地的关键一公里3.1 MODBUS读写首先要搞清楚的三件事MODBUS-TCP看起来简单就是把寄存器数据放到TCP包里发出去但真正用起来有三件事必须提前弄清楚。第一是寄存器读写的功能码。常用的是03读保持寄存器、06写单个寄存器、160x10写多个寄存器。目标速度、目标位置这类数据一般一个参数占两个寄存器所以写的时候经常用16功能码一次写两个寄存器。第二是MODBUS地址与PLC内部软元件的映射关系。信捷XD系列的D区、M区在MODBUS地址里都有固定的映射段但每款PLC固件的偏移量可能不同最稳妥的做法就是用MODBUS调试助手直接对PLC的D0、M0等地址去读一遍确认实际映射关系再写程序。第三是数据格式。伺服的位置、速度寄存器通常按整型或长整型存放有的带正负号有的是补码。如果没有统一约定现场调出来的数值就会千奇百怪甚至出现位置显示很大负值的诡异现象。3.2 一个实际项目的伺服寄存器映射表下面这张表来自模拟项目X里三台伺服的实际配置我只列出最核心的运行寄存器分组。具体项目一定要根据所用驱动器手册里的MODBUS地址表核对不能照搬但结构可以完全参考寄存器分组数量读写方向内容说明控制字1字PLC写伺服Bit0使能、Bit1方向、Bit2启动状态字1字伺服读给PLCBit0使能完成、Bit1报警、Bit2原点完成目标速度2字PLC写伺服32位数据速度给定目标位置2字PLC写伺服32位数据位置给定实际位置2字伺服读给PLC32位数据实时位置反馈报警代码1字伺服读给PLC故障时显示的具体报警编号把寄存器表整理成上面这种结构再去写PLC程序时思路会非常清楚。我强烈建议开发阶段先用MODBUS调试助手直接连接伺服把每个寄存器读一遍、写一遍做到心里有数。如果这一步跳过后面程序写完了再来排查数据对不上会非常痛苦。3.3 32位数据高低字拆分最常见的数据坑伺服的位置、速度寄存器是32位而MODBUS的一个寄存器只有16位所以一个参数要拆成两个寄存器。怎么拆、先发哪个字、字节序怎么排这个坑十个人有九个踩。我的习惯是先在PLC里定义一对辅助寄存器比如高位字D和低位字D然后按低位寄存器存低16位、高位寄存器存高16位的约定拼接。但不同厂家的驱动器可能恰恰相反所以必须先在调试助手里手动写一次验证数据确认端序后再固定到程序里。整个项目里所有轴、所有程序段统一用同一套约定不能有的地方拆字、有的地方不拆否则后面维护的人会晕。触摸屏上显示32位数据时也要跟PLC保持一致在画面组态里选择双字组合功能并选对字节顺序。实际位置这个值显示不对八成不是程序算错而是端序没对齐。4. PLC程序怎么组织轮询、使能、写入顺序与故障兜底4.1 轴功能块与接口变量设计多轴程序最忌讳的做法是每个轴单独写一整套梯形图复制粘贴三遍后面改逻辑时改一处漏两处。我习惯把每台轴抽象成一个功能块输入输出变量统一命名三台轴只是同一个块的不同实例。以模拟项目X的1号轴为例接口变量大概是这样的变量方向名称数据类型关联说明输入轴1目标速度32位触摸屏设定单位0.1rpm输入轴1目标位置32位触摸屏设定单位脉冲输入轴1启动位触摸屏按钮输入轴1急停位公共急停信号输出轴1实际位置32位显示到触摸屏输出轴1状态字16位显示到触摸屏输出轴1报警位触发触摸屏报警画面设计好接口变量梯形图就变成了搬运和判断逻辑读哪个、写哪个、什么时候写一目了然。加第四台轴的时候复制一个块、改一下IP和寄存器地址半小时就能搞定。4.2 分时轮询多轴通信不乱码的关键MODBUS-TCP虽然快但主站同时向多个从站发请求从站的响应也是串行回来的。如果程序里多个通信指令同时触发轻则通信拥塞重则数据错乱。我采用分时轮询策略每10ms只处理一个轴的读操作三台轴轮流来大约30-40ms完成一整轮状态刷新。这样的好处有两个一是通信占用时间非常均匀不会出现某个扫描周期突然被通信指令拖住二是就算某台轴掉线也只是它自己那个时隙超时不会阻塞其他轴的读写。轮询周期我宁可设得宽一点也不追求极限速度。多轴系统的稳定性和可维护性远比那几毫秒的性能重要。4.3 伺服使能状态机与写入顺序伺服使能不是简单置位一个控制字就行。如果上电瞬间直接写使能启动驱动器可能根本没准备好通信指令就被丢弃了。正确做法是严格按照状态机分步执行上电后先写控制字使能位等待驱动器返回状态字的使能完成位。确认使能完成后再写目标速度、目标位置。最后写入启动位指令才会被驱动器正确执行。如果省掉等待状态字的步骤你在触摸屏上看到的是指令发了但轴不动其实是驱动器压根没接收。梯形图上我通常用几个中间继电器组成状态推进每个动作完成后置位下一步的启动条件防止一上来就一股脑把控制字全写完。4.4 掉线检测与急停兜底通信控制的设备最怕的就是运行中通信中断伺服还在带着负载跑。我在程序里给每台轴加了一个掉线计时器如果连续超过150ms没有收到状态字回包就判定该轴通信故障立即置报警位并切断运行允许。急停回路除了接到PLC输入端伺服本身的急停输入端子也要接上双重保护这个不能省。通信指令本身一定要设超时时间避免某一轴掉线后程序一直卡在等待响应的死循环里。我一般把超时设成30ms连续3次超时再触发掉线标志这样短暂干扰不会误报警。4.5 一个可参考的梯形图逻辑片段用梯形图写时思路是条件到位再发命令不要写完控制字马上写目标值。下面这段是ST风格的思路示意信捷XD5E用梯形图实现时也是同样的逻辑顺序IF (轴1启动按钮 AND NOT 轴1报警 AND 轴1使能完成) THEN 发送目标速度到伺服; 发送目标位置到伺服; 发送启动命令到伺服; END_IF关键点是轴1使能完成这个条件必须存在。我在实际调试时见过很多次程序里把启动指令写在最上面、伺服使能还没确认最后怎么按启动键都没反应就是这个顺序问题。5. 触摸屏画面操作、监控、报警的三层设计5.1 两层数据链路触摸屏不直接访问伺服很多新手会把触摸屏变量直接绑定到伺服寄存器想省掉PLC这一步。我不建议这么干因为会带来三个问题一是触摸屏和PLC同时去读写伺服通信冲突的概率增大二是触摸屏直接访问伺服时没有逻辑判断误操作风险高三是掉线时不好判断是屏的问题还是伺服的问题。我设计的方案是两层数据链路触摸屏只跟PLC打交道PLC把所有伺服数据统一收上来再转发出去。触摸屏看到的寄存器和PLC内部D区对应而对伺服的控制完全由PLC程序决定。这样既安全又方便统一做故障处理。5.2 手动画面与自动画面的功能分区触摸屏程序我习惯分三个主画面手动画面、自动画面、报警画面互相之间通过按钮切换。手动画面上每台轴单独一组控件启动、停止、点动正转、点动反转、目标速度设定、当前位置显示。点动用的是触摸屏的按下置位、释放复位功能按下时给PLC一个M点信号PLC在该信号有效期间持续向伺服发送点动指令松开就停这样手动操作既直观又安全。自动画面上放一键启动、一键急停、整体运行状态灯还有三台轴的目标位置、实际位置、报警状态。数据刷新就靠PLC周期写D区触摸屏上显示双字组合数据字节序和PLC里保持一致这个前面已经强调过这里不再重复。5.3 报警与状态显示的实用小技巧报警处理我习惯做成当报警位触发时直接弹出报警画面做到有故障第一时间让操作员看到而不是等他们自己切到报警页去查。PLC侧把每台轴的状态字、报警代码、通信状态汇总成一组寄存器触摸屏只需要做显示判断逻辑都在PLC里。还有一个很实用的小细节在触摸屏上做一个当前轴实时位置大字体显示的窗口调试人员在柜门前就能直接观察到位置变化不用一直盯着电脑监控软件。尤其联动调试的时候这个界面效率非常高。触摸屏程序的维护也非常重要变量名要和PLC侧的D区规划表对应我每次做完工程都会导出一份变量对照表存档方便后续换人接手。6. 现场调试的一次完整排错从灰色状态到恢复运行6.1 故障现象与现场环境模拟项目X通电调试那天触摸屏上显示三台轴的状态2号轴和3号轴都是绿色运行正常只有1号轴一直是灰色报警画面也没弹出任何内容。第一反应是通信没通但2号、3号都正常说明PLC到交换机的整体链路是通的问题大概率出在1号轴自身或者PLC对1号轴的通信配置上。6.2 排查链路从物理层一路查到通道配置我没有直接改程序而是按从底向上的思路一点点排除先看交换机上1号轴对应的端口指示灯网线插紧指示灯正常闪烁物理层没问题。用电脑直接Ping 1号轴的IP地址结果不通。这说明问题在1号轴本身和PLC程序无关。到驱动器面板上看IP配置发现1号轴的IP地址和2号轴重复了都是192.168.1.22。两台伺服同一IP网络协议栈直接冲突通信自然不稳定。把1号轴IP改成规划表里的192.168.1.21重新Ping通了。但触摸屏上1号轴仍然是灰色。再用MODBUS调试助手直接连1号轴读它的状态字等寄存器发现寄存器数据正常说明驱动器的MODBUS从站功能没问题。回到PLC侧检查主站通道配置发现PLC里1号轴对应的从站号填的也是2号轴的站号等于PLC一直在跟2号轴通信读1号轴完全是空的。把PLC通道表里1号轴的从站号改成实际值后触摸屏立刻变绿整个排查过程前后不到二十分钟。6.3 多轴以太网调试的常见问题汇总把这次的排错经历和之前项目里的其他坑整理成一张表遇到类似问题可以直接对照故障现象常见原因检查方向某轴长时间灰色/无数据IP重复、从站号错误、网线松动先Ping再查PLC通道配置通信偶尔断运动中途停网线屏蔽差、交换机端口老化、轮询周期过短换线、换端口、调大轮询周期位置数值异常大或者负值32位高低字顺序反了用调试助手写已知值验证轴使能不成功控制字写完没等使能完成检查状态机步骤某一轴掉线导致整个系统卡住通信指令没有超时时间给每条指令加上超时处理触摸屏数据刷新慢轮询周期太长或者读的数据量太大减少每次读寄存器数量调整周期6.4 经验总结先验证再编程永远不亏这次排错最深的体会是排查通信故障一定要有层次感不要一上来就翻程序。物理层、IP层、从站参数、PLC配置一层一层排除大多数人觉得难的问题都没到程序那一步就解决了。调试初期一定要耐住性子先用MODBUS调试助手把要用的伺服寄存器全部验证一遍确认功能码、字节序、数据范围都没有问题再动手写PLC程序。这个前置工作多花一天后面可以少花一周。真正把IP规划、寄存器映射和通信轮询这三个基本功做扎实多轴以太网控制跟单轴的控制复杂度本质上差别不大三台轴和六台轴的区别也就是多复制几个功能块而已。最后再分享一个实用小习惯做完每台设备后把IP规划表、寄存器映射表、触摸屏变量对照表整理成一份配置文档放到电柜里。调试时顺手维护时不求人换人接手也少走弯路。
阅读完成 · 觉得有帮助?