1. 台达PLC编程经典实例教程之四:从点位控制到多轴联动的实战拆解
搞工控的朋友对台达DVP系列PLC肯定不陌生,尤其是做设备改造和产线升级的兄弟,手头多多少少都碰过几台。这个“经典实例教程”系列我一直在追,前三篇聊了基本指令、定时器计数器和一些简单的逻辑控制,到了第四篇,难度明显上了一个台阶——开始涉及点位控制、脉冲输出、多轴联动这些真正在项目里能扛活的内容。如果你已经能熟练写个自锁互锁、跑个流水灯,但一遇到伺服定位、步进电机调速就心里没底,那这篇东西就是给你准备的。我会把台达DVP系列PLC在运动控制上的几个典型实例拆开揉碎,从指令选型、参数计算到程序框架全部过一遍,顺便把调试过程中容易踩的坑也一并说了。全文基于DVP-ES2/EX2和SS2系列的实际项目经验,ISPSoft和WPLSoft都适用,你可以直接抄作业。
2. 为什么运动控制实例值得单独拿出来讲
2.1 从“逻辑控制”到“运动控制”的思维转变
很多刚入行的兄弟写PLC程序,习惯性地把所有问题都当成逻辑问题来处理。按钮按下就置位,传感器亮了就复位,这套思路在纯逻辑控制里没问题,但一旦涉及到轴的运动,光靠X和Y的开关量就不够用了。运动控制的核心是脉冲输出和位置反馈,PLC需要在高频脉冲下精确控制输出点数,同时还要处理编码器返回的高速计数信号。台达DVP系列在这方面做得比较接地气,它把运动控制指令集成在固件里,不需要额外买运动控制模块,用本体自带的晶体管输出点就能跑脉冲。但这也带来一个问题:普通输出点和高速脉冲输出点在硬件上是复用的,如果你没注意Y0和Y1的分配,程序写完了发现脉冲发不出去,那就尴尬了。
我见过不少新手在选型阶段就栽跟头,买了个继电器输出的DVP-ES2,结果发现根本发不了高速脉冲。这里必须强调一下:只有晶体管输出(T型)的PLC才能发脉冲,继电器输出(R型)的响应速度跟不上,强行用只会烧触点。所以在动手写程序之前,先确认你手头的PLC型号,DVP-ES2-C、DVP-SS2、DVP-SV2这些带T后缀的才是运动控制的正主。
2.2 台达DVP系列在运动控制上的硬件底子
台达DVP系列能跑运动控制,靠的是本体集成的高速脉冲输出功能。以DVP-ES2为例,它支持2轴独立脉冲输出(Y0和Y1),最高频率可以到100kHz,这个速度对于大多数步进电机和中小功率伺服来说完全够用。如果是DVP-SV2系列,轴数更多,频率也能拉到200kHz,适合多轴联动的场景。脉冲输出模式支持脉冲+方向和正转/反转脉冲两种,具体用哪种取决于你的驱动器接受什么信号。大部分国产步进驱动器和日系伺服都支持脉冲+方向模式,接线简单,程序也好写。
这里有个细节值得注意:台达的脉冲输出指令是PLSY和PLSR,前者是定频脉冲输出,后者是带加减速的脉冲输出。PLSY适合简单的定位,比如走固定距离然后停;PLSR则适合需要平滑启停的场合,比如皮带输送线的调速。很多教程只讲PLSY,但实际项目里PLSR用得更多,因为电机突然启停会产生冲击,机械结构受不了。我在一个包装机上就吃过这个亏,用PLSY直接发脉冲,结果同步带跳齿,后来换成PLSR加了加减速时间,问题才解决。
3. 点位控制实例:单轴定长送料程序拆解
3.1 实例需求与硬件配置
假设我们要做一个定长送料的动作:按下启动按钮,步进电机驱动送料辊转动,把料送出500mm后自动停止,再按一次启动,再送500mm。这个需求在包装、印刷、切割设备里非常常见。硬件配置如下:PLC用DVP-ES2-C,步进驱动器用DM542,步进电机是57系列两相步进电机,丝杠导程5mm,驱动器细分设为1600脉冲/转。计算一下:电机转一圈走5mm,需要1600个脉冲,那么走500mm需要的脉冲数就是500÷5×1600=160000个脉冲。这个数字在PLC的32位寄存器范围内,没问题。
接线方面,Y0接驱动器的PUL+,Y1接DIR+,驱动器的PUL-和DIR-共阴极接0V。这里要注意,台达PLC的脉冲输出是NPN型,也就是输出低电平有效,所以驱动器的公共端要接24V,脉冲信号线接到PLC的Y0上,这样PLC输出低电平时,驱动器光耦导通,收到一个脉冲。如果接反了,电机要么不动,要么乱转。
3.2 关键指令PLSY的参数计算与程序框架
PLSY指令的格式是:PLSY S1 S2 D,其中S1是脉冲频率(Hz),S2是脉冲个数,D是输出口(Y0或Y1)。频率决定了电机转速,脉冲个数决定了行走距离。以刚才的例子,如果我想让送料速度是100mm/s,那么电机转速就是100÷5=20转/s,脉冲频率就是20×1600=32000Hz。这个频率在DVP-ES2的100kHz范围内,没问题。脉冲个数就是160000。
程序框架可以这样写:用M0作为启动标志,当X0按下时置位M0,然后调用PLSY指令。PLSY指令有个特点,它是连续执行的,只要驱动条件成立,它就一直在发脉冲。所以我们需要在脉冲发完后自动复位M0。怎么判断脉冲发完了?台达PLC有个特殊辅助继电器M1029,当Y0脉冲输出完成时,M1029会置位。我们可以用M1029的上升沿来复位M0,同时复位M1029本身。
LD X0 SET M0 LD M0 PLSY K32000 K160000 Y0 LD M1029 RST M0 RST M1029这段程序看起来简单,但有几个坑要注意。第一,PLSY指令在M0断开后不会立即停止脉冲输出,它会等当前脉冲发完才停。如果你在送料过程中按了急停,需要立即停止脉冲,那就得用PLSY的脉冲停止功能,或者直接断开Y0的公共端。第二,M1029是Y0专用的,如果你用Y1发脉冲,对应的完成标志是M1030,别搞混了。第三,PLSY的频率参数不能低于一定值,太低的话电机可能会抖动,一般建议不低于100Hz。
3.3 调试过程中容易踩的坑
调试这个程序的时候,我遇到过几个典型问题。第一个是电机方向反了。这个好办,把Y1的输出逻辑反过来就行,或者直接在驱动器上拨方向开关。第二个是脉冲数不对,明明算了160000个脉冲,结果实际走了480mm或者520mm。这种情况一般是细分设置和程序里的计算不一致。比如驱动器细分实际是800,你按1600算,那肯定走不准。所以调试前一定要确认驱动器的拨码开关状态,最好用示波器或者PLC的高速计数器测一下实际脉冲数。
第三个坑比较隐蔽:PLSY指令在发脉冲期间,如果修改S1或S2的值,不会立即生效。台达的PLSY是“一次性加载”的,也就是说,指令执行时会把S1和S2的值读进去,然后按这个值发完脉冲。如果你想在运行中改变速度,得用PLSR或者用中断来重新触发PLSY。我在一个项目里想让送料速度分两段,前段快后段慢,结果用PLSY怎么改频率都没用,后来换成PLSR加多段速才搞定。
4. 多轴联动实例:XY平台插补程序框架
4.1 两轴联动的核心难点
单轴定位搞定了,接下来就是两轴联动。XY平台是最典型的多轴应用,比如点胶机、雕刻机、贴片机,都需要X轴和Y轴配合走轨迹。台达DVP系列本身不支持硬件插补,也就是说,它不能像运动控制器那样直接走直线或圆弧。但我们可以用软件插补的方式,通过分别控制两个轴的脉冲频率和脉冲数,让两个轴同时到达目标点,走出一条近似直线的轨迹。
软件插补的核心思路是:把直线段分解成很多小段,每一小段里两个轴各走一步,然后循环执行。比如从(0,0)走到(100,200),我们可以把这段直线分成200个小段,每段X轴走0.5,Y轴走1。但PLC的脉冲是整数,不能走0.5个脉冲,所以实际做法是用Bresenham算法或者简单的比例分配,让X轴每走1个脉冲,Y轴走2个脉冲,这样走出来的轨迹就是一条斜线。
4.2 用PLSY+定时器实现简易插补
在台达DVP上实现两轴插补,最土但最有效的方法是用两个PLSY指令同时发脉冲,用定时器控制脉冲频率的比例。具体做法是:先算出X轴和Y轴需要走的脉冲数,然后根据速度要求算出各自的频率。比如X轴走10000个脉冲,Y轴走20000个脉冲,要求1秒走完,那么X轴频率就是10000Hz,Y轴频率就是20000Hz。两个PLSY指令同时触发,各自发各自的脉冲,发完为止。
但这里有个问题:两个PLSY指令同时执行时,PLC的扫描周期会影响脉冲输出的同步性。台达的PLSY是硬件脉冲输出,一旦触发就不占用CPU资源,所以两个轴可以真正同时发脉冲。但如果你在程序里先写X轴的PLSY,再写Y轴的PLSY,由于扫描顺序的原因,两个轴会有微小的启动时间差。这个时间差在低速时看不出来,但在高速时会导致轨迹偏差。解决办法是用同一个触发条件同时驱动两个PLSY指令,并且把这两个指令放在相邻的步序里,减少扫描周期带来的延迟。
LD M10 PLSY K10000 K10000 Y0 PLSY K20000 K20000 Y1这段程序看起来简单,但实际调试时你会发现,两个轴的停止时间可能不一致。因为PLSY的完成标志M1029和M1030是独立的,如果X轴先发完,Y轴还在发,那轨迹的末端就会拐弯。要解决这个问题,可以在两个轴都发完后,再用一个定时器延时一小段时间,确保机械结构稳定后再执行下一步。
4.3 插补精度的影响因素与优化
软件插补的精度受几个因素影响。第一是脉冲当量,也就是一个脉冲对应多少毫米。脉冲当量越小,插补精度越高,但需要的脉冲数也越多,对PLC的频率上限要求就越高。比如丝杠导程5mm,细分1600,脉冲当量就是5÷1600=0.003125mm,这个精度对于大多数应用足够了。第二是两轴的速度匹配,如果X轴和Y轴的频率比例不对,走出来的就不是直线,而是折线。第三是机械间隙,丝杠的反向间隙、联轴器的松动都会影响插补精度,这个只能靠机械调整来解决,软件补偿效果有限。
我在一个点胶机上做过测试,用软件插补走一个100mm×100mm的正方形,四个角的偏差大概在0.05mm左右,对于点胶来说完全够用。但如果要做高精度的雕刻,这个方案就不行了,得换带硬件插补的运动控制器。所以选方案之前先看精度要求,别盲目追求高端配置。
5. 脉冲输出与高速计数的配合使用
5.1 用高速计数器做位置闭环
开环的脉冲输出有个致命问题:丢步。电机走没走到位,PLC不知道。如果负载突然变大,或者电机速度太高,步进电机就会丢步,走出来的位置就不准了。要解决这个问题,就得用编码器+高速计数器做闭环。台达DVP系列本体自带高速计数器,比如C251、C252这些,可以接编码器的A/B相,实时读取电机的位置。
具体做法是:把编码器装在电机轴上,A相接X0,B相接X1,然后用高速计数器指令DHSCS或者DHSCR来读取计数值。PLC发脉冲的同时,高速计数器在计数,如果发完脉冲后计数值和理论值对不上,就说明丢步了,可以报警或者补偿。这个方案在成本上比伺服系统低很多,但精度和响应速度不如伺服,适合对成本敏感、精度要求不极端的场合。
5.2 高速计数器的参数设置与注意事项
台达DVP-ES2的高速计数器有几个关键参数:计数模式(1相1计数、1相2计数、2相2计数)、计数方向、复位方式。编码器一般用2相2计数模式,这样可以判断方向,也能四倍频提高分辨率。设置的时候要注意,高速计数器的输入点是有固定分配的,比如C251只能用X0和X1,C252只能用X2和X3,不能随便改。如果你把编码器接到了X4上,那高速计数器就用不了,只能当普通输入点用。
还有一个坑:高速计数器的计数频率上限。DVP-ES2的C251最高计数频率是100kHz,和脉冲输出频率一样。如果你的编码器分辨率很高,电机转速又快,那计数频率可能会超过上限,导致计数不准。比如编码器是2500线,四倍频后是10000脉冲/转,电机转速3000rpm,那计数频率就是10000×3000÷60=500kHz,远超100kHz的上限。这种情况下要么换低分辨率编码器,要么换更高端的PLC。
6. 常见问题与排查技巧实录
6.1 脉冲输出相关故障速查表
| 故障现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 电机不转 | 脉冲输出点选错 | 检查Y0/Y1是否对应PLSY指令 | 确认PLC型号支持脉冲输出 |
| 电机抖动不转 | 脉冲频率太低 | 用示波器测Y0输出频率 | 提高PLSY频率参数至100Hz以上 |
| 电机方向反 | 方向信号逻辑反 | 检查Y1输出与DIR+接线 | 修改程序逻辑或驱动器拨码 |
| 走不准 | 细分设置与程序不符 | 核对驱动器拨码与脉冲计算 | 统一细分设置重新计算脉冲数 |
| 高速时丢步 | 电机扭矩不足 | 降低速度或更换大扭矩电机 | 增加加减速时间或换伺服 |
| 脉冲发完不停 | PLSY未复位 | 检查M1029是否触发 | 用M1029上升沿复位驱动条件 |
6.2 程序调试的独家避坑经验
调试运动控制程序,我总结了几条经验,都是踩坑踩出来的。第一条:先手动后自动。别一上来就跑自动程序,先用手动模式点动一下,确认电机方向、速度、脉冲数都对,再跑自动。第二条:分段调试。比如走500mm,先走50mm看看,再走100mm,逐步加长,别一上来就走全程,撞机了哭都来不及。第三条:留余量。机械限位要比程序限位远一点,程序里设的软限位要留出减速距离,不然高速撞限位,机械结构直接报废。
还有一条特别重要:PLC的扫描周期会影响脉冲输出的响应速度。如果你在程序里用了大量的定时器、计数器、浮点运算,扫描周期会变长,PLSY指令的触发就会延迟。我见过一个项目,程序里写了2000步,扫描周期到了20ms,结果PLSY的启动信号延迟了20ms才响应,导致两个轴的同步性极差。后来把程序优化到500步以内,扫描周期降到5ms,问题才解决。所以运动控制的程序要尽量精简,别把无关的逻辑都塞进去。
6.3 关于台达PLC解密与程序保护的说明
网上有不少人搜“台达DVP全系列PLC解密”,想破解别人写的程序。这里我不教怎么解密,但可以聊聊程序保护的思路。台达的PLC支持密码保护和程序读保护,在ISPSoft里可以设置。如果你辛辛苦苦写的程序不想被别人抄走,可以在下载的时候设置密码,这样别人上载的时候就需要密码。但要注意,密码忘了自己也解不开,只能清空PLC重新写。所以密码要记好,最好写在项目文档里。
另外,台达的PLC程序可以编译成加密文件,用ISPSoft的“编译”功能生成一个不可读的文件,别人只能下载不能查看源码。这个功能对于交付给客户的程序很有用,既能让客户使用,又保护了自己的知识产权。不过话说回来,工控这行靠的是经验和方案,光靠保护程序源码意义不大,真正的核心竞争力在于对工艺的理解和调试的经验。
7. 从实例到项目:如何把教程里的东西用起来
7.1 建立自己的程序模板库
学完这些实例,最重要的是把它们变成自己的东西。我的做法是建一个程序模板库,把常用的功能块封装起来。比如单轴定位、两轴插补、高速计数、报警处理,每个功能写成一个子程序,用的时候直接调用。台达的ISPSoft支持函数块(FB),可以把这些功能做成FB,输入输出参数化,用起来非常方便。比如做一个“轴控FB”,输入是脉冲数、频率、方向,输出是完成标志、当前位置,这样不管项目里有多少个轴,直接调用FB就行,不用重复写代码。
模板库的好处是减少重复劳动,降低出错概率。我现在的项目里,80%的代码都是直接从模板库拖出来的,只需要改改参数和逻辑就行。剩下的20%是工艺相关的特殊逻辑,这部分才是真正需要动脑筋的地方。所以新手兄弟别急着写大程序,先把基础功能块写熟,后面做项目就是搭积木。
7.2 从单轴到多轴的项目升级路径
如果你已经能熟练跑单轴定位,下一步就是多轴协调。多轴协调的难点不在编程,而在时序控制。比如一个上下料机械手,X轴走到位后Z轴才能下降,Z轴下降到位后夹爪才能动作,夹爪动作完成后Z轴才能上升,这一连串动作的时序不能乱。我的做法是用**步进梯形图(SFC)**来写,把每个动作写成一个步,步与步之间用转移条件连接,这样逻辑清晰,调试也方便。台达的ISPSoft支持SFC编程,比纯梯形图直观得多。
再往上就是多轴插补和轨迹规划,这个就需要更高级的算法了。台达的DVP系列做不了太复杂的插补,但简单的直线和圆弧还是可以凑合的。如果项目要求高,建议直接上台达AS系列或者运动控制器,那些支持硬件插补,编程也更简单。不过话说回来,工具是次要的,思路是主要的。你把单轴和多轴协调的逻辑搞清楚了,换什么PLC都能快速上手。
7.3 持续学习的资源与方向
工控这行技术更新不快,但应用场景变化很快。今天做包装机,明天可能做锂电设备,后天可能做光伏产线。每个行业的工艺要求都不一样,所以学习能力比技术本身更重要。我的建议是:第一,多看别人的程序,尤其是成熟设备的程序,看看别人怎么处理报警、怎么规划时序、怎么做安全逻辑。第二,多动手调试,看一百遍不如自己调一遍,调试中遇到的问题才是真正学到的东西。第三,关注行业动态,比如现在锂电和光伏很火,相关的运动控制需求也很多,提前学点相关知识,机会来了就能抓住。
台达的PLC在国产品牌里算是比较稳的,资料也多,适合入门和中小型项目。但如果你要做高端设备,可能还得学学西门子、三菱、欧姆龙这些品牌,或者直接上CODESYS平台。不过底层逻辑都是相通的,脉冲、编码器、插补、时序,这些东西搞明白了,换平台就是熟悉一下指令和软件的事。
我个人在实际项目中的体会是,运动控制的核心不是编程,而是对机械和工艺的理解。你得知道电机的扭矩够不够、丝杠的精度行不行、负载的变化大不大,这些因素比程序写得好不好重要得多。程序写得再漂亮,机械不行照样跑不起来。所以做运动控制,多下车间,多摸设备,多和机械工程师聊天,比坐在电脑前写代码有用得多。