先说一个我印象很深的调试现场。客户说三菱FX3U程序里写了脉冲输出,步进电机就是不动。我到现场一看,梯形图里的确用了PLSY指令,Y0也有输出动作,问题出在PLC选型上——那是一台继电器输出型的FX3U,根本输出不了高速脉冲。换了一台晶体管输出型的FX3U,重新接线,电机马上转起来了。
这不是个例。三菱FX3U高速脉冲指令这块,很多人卡住并不是因为梯形图写不出来,而是没搞明白指令背后的硬件底子、输出通道资源、伺服驱动器的参数配合,以及加减速曲线这些环环相扣的东西。这篇我准备从硬件开始,把DPLSY、DPLSR、DPLSV和DRVI/DRVA这几条常用的高速脉冲指令拆开讲,再结合实际调试讲清楚接线、电子齿轮比计算、加减速时间估算和常见故障排查。哪怕你刚入门PLC,只要后面要接触步进或伺服定位控制,这篇都值得看完。
1. 高速脉冲输出的硬件底子:先搞清Y0到底能干嘛
1.1 晶体管输出与继电器输出差在哪,选错型号等于白干
三菱FX3U的市场保有量极大,型号后缀也特别好认。带“R”的是继电器输出,带“T”的是晶体管输出,比如FX3U-32MT/ESS里的T,就是晶体管。继电器输出内部是物理触点,机械动作时间按毫秒算,用来控制接触器、电磁阀、指示灯完全没问题,但根本扛不住几十千赫兹的脉冲频率。晶体管输出内部是电力电子开关,没有机械触点,开断速度快,才能输出高频脉冲。
这里还要再分一层:同样是晶体管输出,还有漏型和源型的区别。FX3U-32MT/ESS这类常见型号是漏型输出,输出点ON的时候把Y端子拉到低电平,外设的24V正极直接接负载,Y端子作为低端开关;而带“DS”后缀的型号是源型输出,Y端子输出高电平。伺服驱动器或步进驱动器的脉冲输入端通常分为共阳、共阴、差动几种接法,选型之前一定要先看驱动器手册,确定它需要的是高电平脉冲还是低电平脉冲,再决定PLC输出类型和公共端接线。否则接反了,轻则不动作,重则烧输出点。
1.2 三路高速脉冲通道的“地盘”:Y0、Y1、Y2与配套软元件
FX3U本体自带三路高速脉冲输出,对应Y0、Y1、Y2三个端子,每一路最高可以到100kHz。有些项目对频率要求更高,会加装FX3U-2HSY这类高速适配器,输出频率能更高。但绝大多数步进和伺服定位场景,100kHz已经够用了,毕竟伺服驱动的电子齿轮比可以放大脉冲当量。
这三路通道既然干了高速脉冲的活,对应的Y端子就不能再当普通输出点使用。也就是说,程序里写了DPLSY/DPLSR这类指令占用Y0,就不能再写OUT Y0或者SET Y0去控制同一个点,否则会出现双线圈冲突,脉冲输出行为不可控。这也是新手容易踩的坑。
每一路通道都有一套配套的特殊辅助继电器和特殊数据寄存器,用来监控输出状态、读取当前位置、设置方向信号等。比如Y0通道有输出中监视用的M8340,有32位当前值寄存器D8340;Y1通道对应M8350、D8350,Y2通道对应M8360、D8360。具体到某个固件版本,个别地址会有细节差异,用之前一定要翻对应版本的手册确认,别凭印象背地址。我在现场吃了不少亏之后,养成了一个习惯:把用到的特殊软元件编号直接注释在程序里,下次翻起来一眼就明白。
1.3 扫描周期和高速脉冲到底是什么关系
很多刚开始学PLC的人会有一个误解:程序每个扫描周期执行一次,那脉冲频率是不是受扫描周期限制?不是。高速脉冲输出指令启动之后,由CPU内部的高速硬件电路接管脉冲发生,不再依赖扫描周期逐行执行,所以才能稳定输出几十千赫兹的方波。这一点和普通的DO输出有本质区别,也是为什么调试高速脉冲时,不能用“监视程序有没有反复执行”来判断输出是否正常。
但是程序仍然能影响脉冲输出。最典型的就是驱动条件断开时,脉冲输出会立即停止,DPLSY、DPLSR这类指令都是这个逻辑。假设一个往复定位的程序,启动线圈在脉冲还没走完的时候被某个互锁条件断开了,电机就会停在一半。所以写这类程序时,要格外注意驱动条件的稳定性,尽量用置位/复位的方式管理启动信号,避免误触发断开。
另外,脉冲输出完成后,M8029会有一个扫描周期的ON信号。这个“完成标志”是编写多段定位、往复运动程序的关键,后面实操部分我会专门演示。
2. 三大脉冲指令拆解:DPLSY、DPLSR、DPLSV怎么选
2.1 DPLSY:最基础的定速脉冲输出,适合不需要加减速的场合
DPLSY是三菱FX3U里结构最简单的高速脉冲指令,指令格式是:
DPLSY S1 S2 DS1指定脉冲频率,单位Hz;S2指定脉冲个数;D指定脉冲输出端子,也就是Y0、Y1、Y2中的一个。16位版本的PLSY只能指定最多32767个脉冲,实际项目中基本都直接用32位的DPLSY,避免脉冲数不够用。
DPLSY的工作方式是:启动后以固定频率输出指定数量的脉冲,输出完M8029动作。它没有加减速过程,启动瞬间就是目标频率,停止瞬间也是直接切断。频率越高、负载惯量越大,机械冲击就越明显。如果用在小型步进电机点动、定量送料这类对启停平稳性要求不高的场合,DPLSY完全够用,而且程序最简单。
有个很实用的小细节:如果把S2脉冲个数设为0,DPLSY会一直连续输出脉冲,直到驱动条件断开。这个特性常被用来做一个简单的“脉冲发生器”,给步进电机连续运转或者给某些支持脉冲频率给定的设备提供速度信号。
2.2 DPLSR:带加减速的脉冲输出,定位控制的主力
DPLSR是我在实际定位项目里用得最多的指令。格式是:
DPLSR S1 S2 S3 DS1是最高频率,S2是总输出脉冲数,S3是加减速时间,单位ms,D同样是脉冲输出端子。和DPLSY最大的区别就是,DPLSR在启动时按加减速时间从0逐步升到S1设定频率,走完脉冲后再逐步减速到0,速度曲线是一个梯形。
为什么定位控制更推荐DPLSR?因为步进电机和伺服电机都有一个共同特点:突然给很高的频率,电机会丢步或者过冲。步进电机一旦丢步,机械位置就错了;伺服电机虽然不丢步,但瞬间启停容易触发过载报警。有了加减速过程,电机从低速平滑过渡到高速,启停平稳,定位也更可靠。
使用DPLSR时有一个数学关系要心里有数:加速阶段实际输出的脉冲数大约是S1乘S3再除以2000。比如最高频率20kHz、加减速时间500ms,加速段脉冲数就是20000乘以500除以2000,等于5000个脉冲。如果总脉冲数连两个5000都不够,DPLSR会自动把速度曲线从梯形压成三角形,也就是说根本跑不到设定最高频率。这个现象不是故障,位置依然准确,但会影响节拍,调程序时要能看懂。
2.3 DPLSV:速度可变的连续脉冲输出
DPLSV的指令格式比前两个都简单:
DPLSV S1 DS1是速度设定值对应的数据寄存器,D是输出端子。它没有总脉冲数限制,也没有加减速时间的操作数,运行时只要修改S1寄存器里的数值,输出频率就会跟着变化。换句话说,DPLSV天生就是做“变速连续运动”的,适合放卷、收卷、送料、张力控制这类需要随时调整速度的场合。
没有加减速参数,不代表不能平滑变速。实际工程里我会用一个定时中断程序,每隔固定时间把速度寄存器往目标值方向修一点点,相当于软件实现斜坡。比如每10ms把速度增加一个固定增量,一路加到目标值。这样写出来的变速过程虽然不完美,但足够平稳,也不会给电机造成刚性冲击。
DPLSV的另一个特点是执行途中如果驱动条件断开,脉冲立即停止,这和DPLSY一致。所以做暂停功能时,不要直接断开驱动条件,最好借助通道的专用控制位先做减速或暂停,具体控制位编号查手册确认。
2.4 DRVI与DRVA:从“发脉冲”到“做定位”的升级
DRVI和DRVA是更接近“伺服定位”语义的指令。DRVI是相对定位,以当前位置为基准移动一段距离;DRVA是绝对定位,以原点为基准移动到指定坐标。指令格式分别是:
DDRVI S1 S2 D1 D2 DDDRVA S1 S2 D1 D2S1是位置相关参数,S2是输出频率,D1是脉冲输出端子,D2是方向信号输出端子。方向信号由PLC自动根据当前位置和目标位置计算并在D2端子上输出高低电平,也就是常见的“脉冲加方向”控制方式。
DRVI/DRVA本质上也是高速脉冲输出,只是它们在PLC内部维护了一套当前位置寄存器,并且自动控制方向信号。和DPLSY/DPLSR比,DRVI/DRVA写多段定位程序时更省心,因为它不需要自己做方向判断。缺点是指令本身不带加减速参数,想加加减速,需要去设置对应通道的特殊参数,灵活性反而不如DPLSR直接在指令里指定来得直观。所以有些老工程师做加减速要求高的项目,还是会选择DPLSR加外部方向控制的方式。
下面用一张表把这几个指令的核心区别说清楚:
| 指令 | 有无加减速 | 是否自动方向 | 位置管理 | 适用场景 |
|---|---|---|---|---|
| DPLSY | 无 | 无 | 无 | 点动、定量送料、连续脉冲 |
| DPLSR | 有,梯形加减速 | 无 | 无 | 步进/伺服定位、平稳启停 |
| DPLSV | 无 | 无 | 无 | 连续变速、送料、张力控制 |
| DRVI/DRVA | 需另设参数 | 有 | 有 | 多段定位、绝对坐标控制 |
3. 实操:从接线到梯形图,跑通一个伺服脉冲定位控制
3.1 硬件选型与接线:晶体管PLC和驱动器该怎么连
做伺服脉冲定位,PLC这边必须选晶体管输出型,这一点前面强调过了。以三菱MR-JE系列伺服驱动器为例,先把驱动器设为位置控制模式,也就是标准的位置模式参数,然后重点设置脉冲输入形式和电子齿轮比。
接线方面,典型的集电极开路接法是:PLC的Y0作为脉冲输出接到驱动器PULSE输入端,Y3作为方向信号接到驱动器DIR输入端。很多驱动器脉冲输入内部有光耦,需要外部串一个限流电阻,阻值按驱动器手册要求选。脉冲线必须用双绞屏蔽线,屏蔽层在PLC侧或驱动器侧单端接地。最忌讳的是把脉冲线和电机动力线绑在同一个线槽里,那种干扰一旦出现,丢步、位置漂移特别难查。
还有一点容易被忽略:驱动器一定要有使能信号,很多伺服驱动器默认没有使能就不接收脉冲。现场经常遇到“脉冲在发,电机不动”的情况,最后一看是SON使能信号没接或者没置ON。所以调试伺服定位的第一步,不是看PLC程序,而是确认驱动器面板上有没有显示使能状态、有没有报警。
3.2 电子齿轮比计算:让1mm对应1000个脉冲
电子齿轮比是伺服调试绕不开的参数,也是最容易算错的地方。它的本质是把上位机发出的指令脉冲数,和电机编码器的反馈脉冲数按比例匹配起来。只有设对了,PLC发一个指定数量的脉冲,机械平台才会走对应的距离。
举例来说,三菱MR-JE系列伺服电机编码器分辨率是131072脉冲每转。假设机械结构是电机直连丝杠,丝杠导程10mm,我希望每个指令脉冲对应0.001mm,也就是1mm对应1000个脉冲。那么电机转一圈、工作台走10mm,就需要10000个指令脉冲。电子齿轮比就是编码器分辨率除以每转指令脉冲数,是131072除以10000,约等于13.1072。三菱驱动器里CMX设131072、CDV设10000就可以,有些驱动器支持自动化简,那就填化简后的数值。
这个参数直接决定了定位精度和最高速度。如果电子齿轮比设得过大,每毫米脉冲数太少,精度达不到;设得过小,每毫米脉冲数太多,PLC频率上限摆在那里,移动速度会受限。比如刚才这个例子,PLC最高100kHz,每秒能输出的脉冲就是100000个,对应移动速度是100mm每秒,换算过来就是6米每分钟。如果项目要求更快的速度,只能通过调大电子齿轮比减少每毫米脉冲数,同时接受精度下降。速度、精度、频率上限,永远是三个互相牵制的指标。
3.3 梯形图思路:用DPLSR加方向信号实现往复定位
写一个最简单的往复定位控制程序。核心需求:按下启动按钮,工作台以20kHz的最高频率正向移动200000个脉冲,移动完成后自动反向移动相同距离,然后停止,等待下一次启动。
程序可以先在数据寄存器里准备好参数:
LD M0 MOV K20000 D10 MOV K200000 D20 MOV K300 D30D10是最高频率20kHz,D20是脉冲个数200000,D30是加减速时间300ms。然后启动逻辑用置位方式处理:
LD X0 SET M1M1是运行中标志,用来驱动DPLSR:
LD M1 DPLSR D10 D20 D30 Y0方向信号Y3的正反逻辑由程序根据M1的状态来控制。第一段正方向时Y3置ON,DPLSR完成后M8029会有一个扫描周期的ON,利用它把Y3复位、再次调用DPLSR,同时把方向标志取反。程序里注意,完成标志M8029动作后,要先去复位当前方向的运行标志,再置位反向运行标志,避免同一条DPLSR指令被重复触发。
实际调试中,我会先在低频比如2kHz下空跑一遍,确认转向没有反、限位逻辑正常,然后才把频率拉到目标值。高速下如果发现定位不准或者机械冲击大,优先调加减速时间,不要一上来就降频率,频率降了节拍就慢了。
3.4 加减速时间估算:一个公式帮你少走弯路
加减速时间的设定没有绝对标准,要看负载惯量和机械刚性。但有一个估算公式非常实用:加速段脉冲数等于最高频率乘以加减速时间再除以2000。
举个例子,最高频率20kHz,加减速时间300ms,那么加速段脉冲数等于20000乘以300除以2000,也就是3000个脉冲。减速段同样大约3000个脉冲。如果总脉冲数小于6000,DPLSR自动切到三角形速度曲线,跑不到20kHz。这种场景常见于短行程快速往复,位置不会错,但节拍比你预期的慢。要提速,就得减小加减速时间或者提高目标频率。
从设备安全角度来说,加减速时间太小,冲击大;太大,节拍慢。我一般的做法是先在设备上用一个偏保守的值,比如500ms,确认稳定后,每次减100ms往下试,直到机械出现轻微冲击的临界点,再退回一档。这个过程比任何理论计算都更贴近实际设备。另外,垂直轴带负载的情况下,加减速时间要设得比水平轴更大,否则重负载停止时会有明显的过冲风险。
4. 常见问题与排查技巧实录
4.1 程序看着没问题,Y0就是不出脉冲
这种问题排在第一位的原因就是PLC选错型号,继电器输出型根本发不了高速脉冲,前面说过,这里不再重复。第二个常见原因是Y0被程序里其他指令占用了,比如在另一段程序里对Y0做了SET或OUT操作,双线圈冲突导致高速脉冲指令异常。排查方法是下载程序前做一次双线圈检查,或者用软件的查找功能搜一下Y0在几处出现过。
还有一种情况是PLC的RUN状态没问题,程序也执行了,但输出就是不动。这时候要把判断范围从PLC扩展到驱动器。拿万用表量Y0和COM端的电压,静态也许能看出来高低电平,但几十千赫兹的动态波形用万用表量不出来,必须用示波器或者驱动器自带的监视功能。很多伺服驱动器能在面板上直接显示收到的脉冲数,判断起来比万用表高效得多。
4.2 脉冲中途停止、位置不对,按这几个思路查
脉冲发到一半突然停了,先看程序里的驱动条件是不是还保持ON。DPLSY和DPLSR这类指令,驱动条件一断开脉冲立刻终止,很多互锁逻辑写得不够严谨就会导致这种情况。可以把相关线圈在监控画面里盯一遍,看是谁抢先复位了。
位置不对是另一个高频问题,往往和电子齿轮比有关。算法很简单,PLC发出的脉冲数乘以每个脉冲对应的移动量,就是理论移动距离。实际距离和理论距离对不上,先重新算一遍电子齿轮比。再有就是机械间隙,丝杠反向间隙、联轴器打滑都会造成位置偏差,这类问题调程序解决不了,得从机械端补偿。
伺服驱动器如果报警过载或者过流,也会导致电机不动作,但位置记录还在继续,等报警复位后位置就彻底乱了。所以排查位置问题时,一定要去看驱动器的历史报警记录,很多线索就在那里。
4.3 干扰导致丢步,接线和接地远比程序重要
脉冲线抗干扰能力弱,尤其是长距离传输的时候。最典型的干扰场景是脉冲线和变频器动力线放同一个线槽,变频器一启动,步进电机就开始乱走或者干脆丢步。这不是程序能解决的问题,是现场施工问题。
正确做法是脉冲信号线用双绞屏蔽线,屏蔽层单端接地;脉冲线和动力线分槽敷设,至少保持20厘米以上的间距,交叉处垂直走线;PLC和伺服驱动器要有各自独立的接地,避免接地环路。还有一招,在驱动器的脉冲输入端口并联一个几百欧的电阻来增强驱动能力,但具体阻值要看驱动器手册,别盲目加。
如果现场整改条件受限,还可以把输出频率降下来试试。高频脉冲的沿变缓之后,抗干扰能力会好一些,但治标不治本。真正靠谱的还是在布线上花功夫。
4.4 仿真器能不能仿真高速脉冲,很多人搞错了
GX Works2的仿真器对梯形图逻辑的仿真很好用,你可以看线圈、看寄存器、看指令执行流程。但高速脉冲指令到了仿真器里就会大打折扣,因为它本质是硬件行为,仿真环境下没有真实的脉冲波形,甚至某些与高速输出相关的特殊继电器在仿真时都不按预期动作。
所以如果你在仿真器里跑DPLSR发现M8029不置位,或者DPLSV变速看不到效果,别慌,这不是你的程序写错了,而是仿真环境的局限。凡是和高速脉冲指令有关的项目,最好直接上实物PLC调试。没有实物就空跑,靠仿真器验证逻辑可以,但千万别以为仿真通过了就能直接上设备。
还有一个小提示:有人分不清“高速脉冲不输出”和“程序下载不了”是两回事。FX3U下载不了程序,大多是通讯参数不对、USB驱动问题或者PLC处于RUN状态导致写入被拒,和高速脉冲指令本身没有关系。
4.5 现场问题速查表
| 现象 | 可能原因 | 排查与解决 |
|---|---|---|
| Y0完全没有脉冲输出 | PLC为继电器输出型;接线错误;Y0被其他指令占用 | 换成晶体管型;核对公共端;检查双线圈 |
| PLC有脉冲输出但电机不动 | 驱动器未使能;模式不是位置控制;脉冲形式不匹配 | 接好SON使能;设置位置模式;核对PA13 |
| 脉冲走一半停了 | 驱动条件被其他逻辑断开;程序存在互锁冲突 | 监视相关线圈;检查互锁条件 |
| 实际位置与理论值不符 | 电子齿轮比错误;机械间隙;联轴器打滑 | 重算齿轮比;检查机械结构 |
| 运行过程中丢步或位置漂移 | 电磁干扰;频率过高;加减速时间太短 | 屏蔽接地;降频;加大加减速时间 |
| 仿真能过但实物不动作 | 仿真器不支持高速脉冲硬件行为 | 用实物PLC验证,不迷信仿真 |
我自己用FX3U跑过的步进和伺服项目不少,最大的体会是:高速脉冲出不出得来,靠的是指令和PLC;但出得好不好,靠的是接线、电子齿轮比和加减速参数的配合。写梯形图只是最表层的工作,真正的功夫全在硬件的匹配和参数的调试上。调试时别急着把速度拉满,先把电子齿轮比、方向、限位这些基础动作一项项确认了,再慢慢往高频试。最后多提醒一句,现在AI辅助写PLC代码确实越来越方便,但像高速脉冲这种和硬件时序强绑定的功能,输出逻辑靠AI生成代码很容易翻车,还是自己吃透原理、用实物验证最稳妥。