用一台S7-1200控制多台伺服电机,很多人第一反应是用脉冲方向。但S7-1200的高速脉冲输出点就那么几个,1214C也就4路PTO,控制两台轴就到头了。多轴应用更实际的选择是RS485 Modbus RTU,一根总线挂多台从站,接线简单,扩展也方便。下面聊一下实际做项目时的接线和调试思路。
一、硬件选型和接线要点CPU建议选1214C或以上,通讯模块用CM1241 RS485,也可以用CB1241板载模块。伺服这边以YZ-AIM多圈绝对值防爆伺服为例,手册版本v2.56,支持Modbus RTU模式,站号可设1到N。
接线方面,伺服的485A和485B并联到CM1241的RS485总线,采用总线型串接方式,两头各加一个120欧终端电阻,屏蔽层单端接地。每台伺服的供电独立,别图省事共用一路电源,带载加速时电流冲击会让通讯乱码。伺服的WR+报警输出接PLC数字输入,用来做硬件联锁,这个比靠通讯读报警码靠谱得多。
防爆现场的供电、接地和安全栅这些别自己瞎搞,让有资质的电气工程师按现场标准设计。PLC程序归程序,安全回路归安全回路,两码事。
二、寄存器地址换算伺服手册里寄存器地址用的是十六进制,比如0x00、0x16。S7-1200的MB_MASTER指令用40001起始的地址制,换算公式很简单,DATA_ADDR等于40001加上手册寄存器的十进制值。手册0x16等于十进制22,所以DATA_ADDR就是40023。
几个关键寄存器要知道:0x00写1是Modbus使能,0x01写1是电机控制使能,0x02写目标速度单位r/min,0x03写加速度,0x0E读报警代码,0x16和0x17分别是绝对目标位置的低16位和高16位。写位置时用FC16功能码一次写两个寄存器,DATA_LEN设2。
位置换算方面,手册默认一圈8192个脉冲。比如目标位置是正转2圈,就是16384;反转1圈就是-8192。负数用补码,-4000的十六进制是FFFF F060,发送时低字在前高字在后,顺序为F060、FFFF。这个顺序搞反了电机会跑到莫名其妙的位置。
三、程序结构怎么搭整个程序分三块。OB100做上电初始化,清运行位,装载默认站号速度加速度和目标位置。OB1做主循环,管安全联锁、通信初始化、命令调度和故障处理。FB_ModbusAxis是轴功能块,封装了从使能到定位再到到位判断的完整步序。
RS485是半双工总线,同一时刻只能有一个MB_MASTER请求在执行。轴功能块内部用步序控制:Step 10写0x00使能Modbus,Step 20写速度,Step 30写加速度,Step 40写目标位置,Step 50轮询当前位置判断到位,Step 60置Done返回空闲。出错进Step 900,保存STATUS码置总故障等复位。
安全联锁这块不能偷懒。急停反馈I0.0、防爆箱门联锁I0.1、总故障标志M10.0三个条件全满足才允许伺服主电源接触器吸合。任一轴的WR报警反馈掉了或者通讯报错,立刻置总故障,撤销运行请求,亮故障灯。别指望操作员一直盯着屏幕,硬件联锁才是最后一道防线。
四、调试节奏别急着把三台伺服全接上跑。先把每台伺服设好唯一站号,确认通讯参数19200波特率、8数据位、无校验、1停止位。只接一台伺服,在线监控MB_COMM_LOAD的DONE位和MB_MASTER的DONE和STATUS。写0x00等于1之后读0x0E报警码,确认没有电池报警、过压、失速这些异常。
位置定位先用小目标试运行,比如正转819个脉冲,别上来就给大行程。一台轴跑稳了再加第二台第三台,顺便检查终端电阻和屏蔽接地有没有做好。最后再开广播同步写入功能,广播地址用0,数据区按每轴4个WORD组织。广播没有从站应答,发完之后还是要逐站轮询当前位置和报警码确认。
五、踩坑记录MB_MASTER报STATUS等于80C8是最常见的,原因无非接线松了、站号不对、波特率没匹配、A和B接反了。先交换A/B试试,再核对站号,拿单台伺服隔离测试。
写完位置电机不动,十有八九是Modbus使能没写、速度为零、报警没清、或者目标位置跟当前位置一样。按顺序排查,先写0x00等于1,再写0x02速度和0x03加速度,然后读报警码看看有没有问题。
多轴不同步是顺序写入的固有延迟导致的。如果工艺要求严格同步,用广播写入代替逐站写,同时降低总线负载。到位判断抖动一般是因为机械惯量大或者误差窗口设太小,把正负2脉冲的窗口放宽到现场允许的精度范围就行。
联系我们
邮箱:rencai.guuo@plcwb.com
电话:18501512500
网址:https://www.ttplc.com/


