ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

信捷伺服内部位置模式(PR)实战:Modbus RTU控制精确转动圈数

信捷伺服内部位置模式(PR)实战:Modbus RTU控制精确转动圈数 1. 为什么内部位置模式是伺服控制里最被低估的功能很多人玩信捷伺服第一反应就是脉冲加方向PLC发脉冲驱动器收脉冲简单粗暴。但真到了要控制“精确转动圈数”的场景比如绕线机绕N圈、转盘定位到第几个工位、丝杆走固定行程脉冲方式就开始暴露短板了PLC的高速脉冲口数量有限一个PLC带不了几轴脉冲频率上去了线缆抗干扰又成问题更麻烦的是圈数一多脉冲数直接溢出还得做多段拼接。内部位置模式也就是信捷手册里常说的PR模式Position Register模式本质上是把“走多远、走多快、走什么曲线”这些运动参数提前写进驱动器的寄存器里PLC只负责发一条“启动第几段”的指令。这样一来PLC不需要高速脉冲口普通Modbus RTU串口就能干一根485线串十几台驱动器都不是问题。而“转动圈数”这个需求在PR模式下就是一道小学算术题一圈需要多少脉冲乘以圈数写进位置寄存器就完事了。我这次做的项目是一台自动绕线设备要求伺服带动绕线嘴正转25圈、反转25圈循环往复速度两档可调启停要平滑。用的就是信捷DS5系列伺服驱动器PLC是信捷XD5E走Modbus RTU485通讯。整套方案下来硬件成本比脉冲方案低了一截接线也清爽很多。下面我把整个思路、参数计算、Modbus指令、踩过的坑全部摊开讲一遍。2. 内部位置模式的核心逻辑与方案选型2.1 PR模式到底是怎么工作的先把概念捋清楚。信捷伺服的PR模式你可以理解成驱动器内部自带了一个“小PLC”。它内部有若干张“位置表”每张表里存着一段运动的完整描述走多少脉冲位置、用什么速度跑速度、加速多久加速时间、减速多久减速时间、走完之后停还是接着走下一段等待/继续。你通过Modbus把这张表填好然后给一个“启动”信号驱动器就自己把这段运动跑完。这跟脉冲模式最大的区别在于脉冲模式下PLC是“实时指挥”每个脉冲都得由PLC发出来PR模式下PLC是“下发任务”驱动器自己执行。前者像你手把手教人走路后者像你给人一张地图让他自己走。对于多轴、多段、循环运动的场景PR模式的优势是碾压性的。信捷DS5的PR模式支持最多16段位置表不同型号可能略有差异以手册为准每段可以独立设置位置、速度、加减速时间。段与段之间可以设置“等待时间”和“继续条件”实现复杂的连续轨迹。对于绕线这种“正转N圈、停一下、反转N圈”的需求只需要两张表就够了。2.2 为什么选Modbus RTU而不是脉冲或EtherCAT方案选型这块我纠结过三个方向脉冲、Modbus RTU、EtherCAT。最后选Modbus RTU理由很实在。脉冲方案的问题前面说了XD5E本体只有几个高速脉冲口绕线设备后面还要扩展送线轴、排线轴脉冲口根本不够。而且脉冲线走长了容易丢脉冲绕线车间里变频器、加热器一堆干扰不是闹着玩的。EtherCAT当然好速度快、同步精度高但成本直接翻倍。信捷的EtherCAT伺服和PLC都比485方案贵不少而且调试门槛高没个半天配不通。对于绕线这种对同步精度要求没那么极端的场景属于杀鸡用牛刀。Modbus RTU方案的优势就很明显了XD5E自带485口一根屏蔽双绞线串下去驱动器地址设好轮询就行。通讯速率用19200或38400对于“下发参数启动”这种低频操作完全够用。唯一要注意的是轮询周期别把时间设太短给驱动器留够响应时间。2.3 圈数控制的核心电子齿轮比与脉冲当量这是整个项目最关键的算术部分算错了圈数就不准。信捷伺服的位置指令单位是“脉冲”而电机转一圈需要多少脉冲取决于三个参数编码器分辨率、电子齿轮比分子、电子齿轮比分母。信捷DS5系列标配23位编码器分辨率是83886082的23次方。但你别被这个数字吓到实际发指令脉冲时驱动器内部会做电子齿轮比换算。公式是这样的电机转一圈所需指令脉冲数 编码器分辨率 × 电子齿轮比分母 / 电子齿轮比分子举个例子如果电子齿轮比分子设为8388608分母设为10000那么电机转一圈需要的指令脉冲数就是10000。这个数字很整好算。我一般习惯把“一圈脉冲数”设成一个整数比如10000或131072这样算圈数的时候心算就能出来。我这次项目里绕线嘴一圈对应丝杆走一个导程机械上要求一圈脉冲数设为10000。那么正转25圈就是250000个脉冲反转25圈就是-250000个脉冲。位置寄存器里直接写这两个数就行。这里有个坑要注意信捷伺服的位置寄存器是32位的分高16位和低16位两个寄存器。250000这个数超过了16位能表示的范围65535所以必须拆成高低位分别写。具体怎么拆后面实操部分详细讲。3. 硬件接线与通讯参数配置3.1 485通讯线怎么接才稳信捷XD5E的485口在端子排上标着A和B。伺服驱动器那边也是A和B。接线就两条线PLC的A接驱动器的APLC的B接驱动器的B。别接反了接反了通讯不上但不会烧东西放心。屏蔽层怎么处理我的做法是PLC端单端接地驱动器端悬空。这样能避免地环路干扰。线材用0.5平方的屏蔽双绞线别用普通的平行线双绞线对485差分信号很重要。如果通讯距离超过50米考虑加终端电阻120欧姆接在总线最远端的A和B之间。我这次设备上就一台伺服距离不到3米所以没加终端电阻通讯很稳。但如果你的总线上一串挂了好几台驱动器终端电阻就必须加了否则信号反射会导致通讯时好时坏。3.2 驱动器站号与波特率设置信捷DS5的站号通过面板参数Pn300设置范围1到127。我设的是1。波特率在Pn301里设我选的38400。数据格式Pn302设为8位数据、无校验、1位停止位8N1这是Modbus RTU最常用的格式。PLC这边XD5E的485口参数在软件里设置波特率、数据位、校验位、停止位必须和驱动器完全一致否则通讯不上。站号在PLC程序里通过指令指定不需要单独设。注意改完驱动器站号和波特率后必须断电重启才生效。我一开始没重启死活通讯不上查了半天以为是线接错了结果就是没重启。3.3 通讯测试先用调试工具打通在写PLC程序之前我强烈建议先用Modbus调试工具把通讯打通。我用的是Modbus Poll电脑通过USB转485转换器接到驱动器上设置好站号、波特率、数据格式然后读一个已知的寄存器比如读当前位置或者读站号。如果能读到数据说明硬件接线和通讯参数都没问题。如果读不到先检查A/B有没有接反再检查波特率和数据格式最后检查站号。这个顺序能帮你快速定位问题。读到一个寄存器之后再试着写一个寄存器比如写一个速度值然后读回来看看是不是写进去了。这一步验证了“读写都通”后面写PLC程序就心里有底了。4. Modbus寄存器映射与PR模式参数详解4.1 信捷伺服Modbus地址规则信捷伺服的Modbus地址用的是“功能码寄存器地址”的方式。读保持寄存器用功能码03写单个寄存器用06写多个寄存器用10十六进制。寄存器地址是十六进制的比如PR模式的参数区从0x1800开始具体地址以你的驱动器手册为准不同系列可能有偏移。这里要特别小心Modbus协议里的地址和手册里写的地址有时候差1。比如手册写“0x1800”在Modbus Poll里可能要填“1800”或者“1801”取决于工具怎么处理。我的经验是先用调试工具试读到了正确的值就说明地址对了。4.2 PR模式关键寄存器一览下面这张表是我整理的信捷DS5 PR模式常用寄存器以实际手册为准这里只列核心的寄存器地址功能数据类型说明0x1800PR0位置高位16位有符号第0段位置脉冲数高16位0x1801PR0位置低位16位有符号第0段位置脉冲数低16位0x1802PR0速度16位无符号第0段运行速度r/min0x1803PR0加速时间16位无符号第0段加速时间ms0x1804PR0减速时间16位无符号第0段减速时间ms0x1805PR0等待时间16位无符号第0段走完后的等待时间ms0x1806PR0继续条件16位无符号0等待启动1自动继续下一段0x1810PR1位置高位16位有符号第1段位置脉冲数高16位0x1811PR1位置低位16位有符号第1段位置脉冲数低16位............0x1A00PR启动段号16位无符号写入要启动的段号触发运动0x1A01PR启动触发16位无符号写1启动驱动器自动清零这张表里的地址是示意性的实际地址一定要查你手头驱动器的Modbus通讯手册。信捷不同系列的地址分配有差异DS5和DS3就不一样。我吃过这个亏照着DS3的地址写DS5结果写进去没反应查了半天才发现地址偏移了。4.3 位置脉冲数的32位拆分方法前面说了250000这个数超过16位范围必须拆成高低16位。怎么拆用整除和取余。250000 ÷ 65536 3余数是250000 - 3×65536 250000 - 196608 53392。所以高位是3低位是53392。但这里有个细节低位如果超过32767在16位有符号数里会被解释成负数。53392超过了32767所以实际写入时低位要写成53392 - 65536 -12144。这个转换在PLC程序里用整数运算就能实现。信捷XD5E的DIV指令可以做整除MOD指令可以取余。算完之后高位写0x1800低位写0x1801。反转25圈就是-250000拆分方法类似只是高位和低位都是负数。这里要特别注意符号处理搞错了电机就朝反方向飞了。5. PLC程序实现从参数下发到启动运动5.1 程序整体架构我的PLC程序分三个部分初始化参数下发、启动运动、状态监控。初始化部分在PLC上电第一次扫描时执行把PR0和PR1的所有参数通过Modbus写进驱动器。启动部分由按钮触发写启动段号和启动触发寄存器。状态监控部分轮询驱动器的状态寄存器判断运动是否完成。整个程序用信捷的Modbus指令实现。XD5E支持MODRW指令可以方便地读写Modbus寄存器。MODRW指令的格式是MODRW 站号 功能码 寄存器地址 数据长度 数据地址。具体用法查XD5E编程手册。5.2 参数下发把圈数写进驱动器以PR0正转25圈为例参数下发流程是这样的计算250000的高低16位存入PLC的D寄存器比如D100高位和D101低位。用MODRW指令写0x1800数据长度1数据地址D100。用MODRW指令写0x1801数据长度1数据地址D101。写速度值比如1500 r/min存入D102写0x1802。写加速时间比如500ms存入D103写0x1803。写减速时间比如500ms存入D104写0x1804。写等待时间比如1000ms存入D105写0x1805。写继续条件0等待启动存入D106写0x1806。PR1反转25圈类似只是位置是-250000地址换成0x1810到0x1816。这里有个效率问题一条一条写太慢可以用MODRW的多寄存器写功能一次写多个连续的寄存器。比如0x1800到0x1806是连续的7个寄存器可以一次写完。这样能减少通讯次数提高效率。5.3 启动运动一条指令让电机转起来参数下发完成后启动运动就很简单了。写0x1A00写入段号0表示要启动PR0。然后写0x1A01写入1触发启动。驱动器收到触发后会自动清零这个寄存器然后开始执行PR0的运动。如果要循环正反转可以在PR0的继续条件里设置成“自动继续下一段”然后在PR1的继续条件里设置成“自动继续PR0”这样就能自动循环。但我的项目里需要外部控制循环次数所以用的是“等待启动”模式每走完一段PLC检测到完成信号后再触发下一段。5.4 状态监控怎么知道运动完成了信捷伺服有一个状态寄存器里面有一位是“运动完成”标志。具体地址查手册我印象里是在0x1A10附近。PLC轮询这个寄存器检测到完成位置1后就认为这一段走完了。轮询周期怎么定我设的是100ms。太短了通讯负担重太长了响应慢。100ms对于绕线这种应用足够了毕竟一段运动至少几百毫秒。注意轮询的时候不要连续不停地读读一次等一会儿再读。我一开始用10ms轮询结果驱动器响应不过来通讯直接卡死。后来改成100ms稳如老狗。6. 实操中踩过的坑与排查技巧6.1 通讯不上先查这五个地方通讯不上是最常见的问题我总结了一个排查顺序A/B有没有接反这是最高频的原因接反了不通讯但不会坏。波特率和数据格式PLC和驱动器必须完全一致差一点都不行。站号驱动器站号和PLC指令里的站号必须一致。终端电阻总线长了必须加短了不用加。驱动器有没有重启改完通讯参数必须断电重启。按这个顺序查90%的通讯问题都能解决。6.2 圈数不准电子齿轮比算错了如果电机转的圈数不对比如设了25圈结果转了24圈半那肯定是电子齿轮比或者脉冲当量算错了。回头检查“一圈脉冲数”这个值确认编码器分辨率和电子齿轮比分子分母的乘积关系。还有一个可能位置寄存器的32位拆分写错了。高位和低位写反了或者符号处理错了都会导致位置不对。用调试工具读回0x1800和0x1801看看是不是你写进去的值。6.3 电机抖动或异响加减速时间太短如果电机启动或停止时抖动厉害或者有异响多半是加减速时间设太短了。伺服电机响应快但机械负载有惯性加速太猛会冲击机械。我的经验是加速时间至少设200ms负载大的话设500ms到1000ms。减速时间同理设太短电机会过冲停不准。绕线这种应用减速时间我设的是500ms停得很稳。6.4 常见问题速查表现象可能原因解决方法通讯不上A/B接反交换A/B线通讯不上波特率不一致统一PLC和驱动器波特率通讯不上站号错误检查驱动器站号和PLC指令站号通讯时好时坏缺终端电阻总线最远端加120欧姆电阻圈数不准电子齿轮比错误重新计算一圈脉冲数圈数不准32位拆分错误检查高低位和符号电机抖动加减速时间太短增大加减速时间电机不转启动触发没写检查0x1A01是否写入1电机不转段号写错检查0x1A00写入的段号运动完成检测不到状态寄存器地址错查手册确认状态寄存器地址6.5 独家避坑心得第一个心得先用调试工具把所有寄存器读写一遍再写PLC程序。很多人上来就写PLC结果通讯不通分不清是PLC程序问题还是硬件问题。先用Modbus Poll把每个寄存器都读写验证一遍确认硬件和参数没问题再写PLC效率高很多。第二个心得参数下发后读回来验证。写完PR参数后用MODRW读一遍确认写进去的值和预期一致。我遇到过写进去没生效的情况读回来发现值不对原来是地址偏移了。读回来验证能及时发现这类问题。第三个心得位置脉冲数用整数别用小数。一圈脉冲数尽量设成整数比如10000别设成10000.5。小数在32位拆分和Modbus传输中容易出精度问题导致累积误差。第四个心得加减速时间宁大勿小。设大了最多是运动慢一点设小了机械冲击、电机过冲、定位不准问题一堆。调试阶段先把加减速时间设大跑通了再慢慢往下调。7. 参数计算实战从圈数到寄存器的完整推导7.1 一圈脉冲数的确定假设你的机械结构是伺服电机通过联轴器直接驱动丝杆丝杆导程10mm要求绕线嘴每转一圈走10mm。那么电机转一圈丝杆走10mm绕线嘴转一圈。电子齿轮比设置编码器分辨率8388608你想让一圈脉冲数为10000那么电子齿轮比分子设为8388608分母设为10000。驱动器内部会做约分实际分子分母可能不是这两个数但比例关系不变。验证方法发10000个脉冲看电机是不是正好转一圈。如果不是微调电子齿轮比分母直到准确。7.2 25圈的位置脉冲数计算一圈10000脉冲25圈就是250000脉冲。正转25圈位置寄存器写250000反转25圈位置寄存器写-250000。32位拆分250000 ÷ 65536 3余53392高位 3低位 53392 - 65536 -12144因为53392 32767所以PR0的位置高位写3低位写-12144。-250000 ÷ 65536 -4余-250000 - (-4)×65536 -250000 262144 12144高位 -4低位 12144所以PR1的位置高位写-4低位写12144。这个计算过程在PLC里用整数运算实现注意信捷PLC的整数是16位的做32位运算要用双字指令。7.3 速度与加减速时间的设定速度设多少绕线应用一般线速度在几十米每分钟换算成电机转速大概1000到2000 r/min。我设的是1500 r/min两档可调低速档800 r/min。加减速时间加速500ms减速500ms。等待时间正转走完等1000ms再反转反转走完等1000ms再正转。这些参数不是拍脑袋定的是根据机械负载和工艺要求调的。调试的时候先用保守值跑顺了再优化。8. 扩展思考这套方案还能怎么用这套ModbusPR模式的方案不止能控制转动圈数。任何“走固定距离、固定速度、固定加减速”的运动都可以用这个思路实现。比如多工位转盘每个工位对应一个PR段段号就是工位号启动对应段号就转到对应工位。丝杆往复运动PR0正转走100mmPR1反转走100mm循环。多轴联动一台PLC通过485串多台驱动器每台驱动器独立执行自己的PR表PLC只负责协调启动顺序。甚至可以把PR表做成“配方”不同产品对应不同的PR参数切换产品时只改参数不改程序。这在柔性生产线里很实用。我个人的体会是信捷伺服的PR模式Modbus RTU这套组合性价比极高。对于中小型自动化设备既省了PLC高速脉冲口的硬件成本又降低了编程复杂度。唯一需要花心思的就是参数计算和通讯调试但这两块一旦跑通后面就是复制粘贴的事。最后分享一个小技巧把常用的PR参数做成Excel表格输入圈数和速度自动算出高低位寄存器的值直接复制到PLC程序里。这样每次换产品改几个数就行不用重新推导。我做了这个表格之后调试时间从半天缩短到半小时。
返回列表