三菱fx3u指令plsy和DVIT好像差不多。为什么要DVIT这条指令呢?
PLSY 和 DVIT 两条指令都属于三菱 FX3U 系列的 定位控制指令 ,都能从 Y0/Y1/Y2 等高速输出端口发出脉冲,用于驱动步进电机或伺服电机,但它们的功能和应用场景有本质区别。
PLSY 指令(FNC 57)
- 功能 :简单脉冲输出。指定输出频率(S1)和脉冲数量(S2),从指定端口(D)发出固定数量的脉冲。
- 特点 :
- 开环控制:输出完成后自动停止,不受外部信号影响。
- 不支持加减速(需配合 PLSR 或其他方式)。
- 执行过程中如果驱动条件关闭,脉冲立即停止;重新驱动会从头开始输出。
- 典型应用 :固定距离移动、恒速运行、简单速度控制(如风机调速、传送带匀速输送),对停止位置精度要求不高,或已知精确脉冲数的场合。
DVIT 指令(FNC 156)
- 功能 :中断单速定位(Interrupt Positioning)。在输出脉冲的过程中, 当接收到指定的外部中断信号 (如 X0~X5 的高速输入,或 DOG 近点信号)时,继续输出预设的“剩余脉冲数”,然后自动停止。
- 特点 :
- 支持外部中断触发:通过表格设定多个中断输入信号及其对应的剩余脉冲数。
- 半闭环控制:结合外部传感器(如光电开关、接近开关)实现更精确的停止位置。
- 执行中不受扫描周期影响,响应速度快。
- 可配合 DSZR(零返回)等指令实现完整的原点回归+定位流程。
- 典型应用 :需要精确停止的机械定位,如机床进给、包装机械、传送带分度、自动装配线等。常见场景是“高速接近 + 低速爬行 + 精确停止”:电机先高速运行,碰到近点传感器(中断信号)后,再走设定的小距离精确到位,补偿机械惯性或误差。
为什么需要 DVIT 指令?
PLSY 只能“盲输出”固定脉冲数,无法响应外部信号。如果机械系统存在惯性、负载变化或安装误差,实际停止位置容易偏差。
DVIT 专门解决这个问题:它允许在运行中 实时响应外部中断信号 ,在中断到来后再走精确的剩余距离停止,实现更高的定位精度和可靠性。这在工业现场非常常见(如用 DOG 信号做原点回归后的精确定位)。
简单来说:
- 用 PLSY → 适合“大概到位就行”的简单应用。
- 用 DVIT → 适合“必须精确到位”的专业定位应用。
如果你的项目对停止精度要求高,或者需要配合传感器,优先选择 DVIT(常与 DSZR、DRVI/DRVA 组合使用)。如果只是简单速度/距离控制,PLSY 就足够了。
中断单速定位(Interrupt Positioning)。在输出脉冲的过程中,当接收到指定的外部中断信号(如 X0~X5 的高速输入,或 DOG 近点信号)时,继续输出预设的“剩余脉冲数”,然后自动停止。 不理解。如果没有中断信号,这条指令也有指定的脉冲数。请解释一下。
DVIT指令(FNC156)的参数中, S2 指定的是“最大脉冲数”(或称上限脉冲数、总脉冲数),它的作用正是你困惑的点。
DVIT的执行逻辑
- 启动后 :PLC以恒定频率(S1指定)从指定端口(D,如Y0)开始输出脉冲,同时实时监控中断表格(S3起始)中定义的外部中断信号(通常是X0~X5的高速输入,上升沿触发,或DOG信号)。
- 有中断信号触发时 :
- 一旦检测到第一个匹配的中断信号(优先级按表格顺序),立即“丢弃”当前剩余的总脉冲计划。
- 转而输出表格中对应这个中断信号的“剩余脉冲数”(也叫爬行脉冲数,通常设为一个小值,如几十到几百脉冲,用于补偿惯性精确到位)。
- 输出完这个剩余脉冲数后,自动停止脉冲输出,指令完成标志(M8029或对应轴的)ON。
- 全程没有中断信号触发时 :
- 指令会像普通PLSY一样,继续输出脉冲,直到累计达到S2指定的“最大脉冲数”。
- 达到S2后,自动停止脉冲输出,指令正常完成。
为什么要有这个“最大脉冲数”S2?
- 安全性设计 → 如果外部传感器故障、信号线断、或机械没碰到近点开关,中断永远不会触发。如果没有S2上限,脉冲会无限输出,电机可能一直转,导致撞机、损坏设备或安全事故。S2相当于一个“保险上限”,确保最坏情况下也会停。
- 容错与灵活性 → 正常工况下,你会把S2设得很大(例如K100000或更大,甚至接近32位最大值2147483647),远超过高速接近距离,确保中断一定会触发,实现精确停止。但异常时,它会走到S2后停,程序可以检测“没触发中断”来报警或处理。
- 退化兼容 → 如果你不设置中断表格(或表格全0),DVIT就完全等同于单速PLSY,只是多了一个中断能力的扩展。
典型编程建议
- 高速接近阶段 → 把S2设大(确保不会先达到S2)。
- 剩余脉冲数 → 设小(根据机械惯性实测,补偿停止误差)。
- 常见组合 → DVIT常与DSZR(零返回)或DRVI(相对/绝对定位)配合,实现“粗定位+中断精确定位”。
举个简单例子:
- 假设目标是让电机高速跑到一个传感器前,然后低速爬行10脉冲精确停。
- 设置:频率10kHz,S2 = K50000(很大),中断信号X0,剩余脉冲K10。
- 正常:跑到传感器(X0 ON),触发中断,再走10脉冲停 → 精确到位。
- 异常(没碰到传感器):走到50000脉冲后自动停 → 不会无限转。
如果你程序中发现“有时没中断也停了”,很可能就是达到了S2。建议检查S2值是否设得太小。
请举例说明?
DVIT指令实际应用举例
假设一个典型场景: 步进电机驱动一个机械臂或转盘,需要高速接近目标位置,然后精确停止 。机械上安装了一个接近开关(近点信号DOG,接在X000输入),用于检测“粗定位到位”。
- 目标 :电机先以10kHz高速运行,接近开关触发后,再低速爬行50脉冲(补偿惯性)精确停在目标点。
- 硬件 :脉冲输出Y000,方向Y001(如果需要,正反转)。DOG信号接X000(上升沿触发)。
参数设置
使用DVIT指令: DVIT S1 S2 S3 D
- S1 (频率):K10000(10kHz,高速接近)
- S2 (最大脉冲数):K100000(设一个很大值,确保正常情况下不会先达到这个数;相当于“保险上限”)
- S3 (中断表格起始地址):D100(表格从D100开始定义中断)
- D (输出端口):Y000(脉冲从Y000输出,方向可另设)
中断表格设置(关键部分,从D100开始)
FX3U的DVIT支持多个中断点(通常最多3~4个,按顺序优先检测第一个触发的)。表格格式示例(简化,只用一个中断):
| 寄存器 | 值 | 含义 |
|---|---|---|
| D100 | K1 | 中断点数量(这里设1个) |
| D101 | K0 | 中断输入信号编号(0对应X000,1对应X001…) |
| D102 | K50 | 该中断触发后的剩余脉冲数(爬行50脉冲精确停) |
| D103~ | (未用) | 如果有多个中断,继续往下定义 |
(注:实际表格格式请参考三菱手册,FX3U具体是:第一个字为中断数n,然后每中断占2字:中断输入编号 + 剩余脉冲数)
执行过程举例
- 正常情况(有中断触发) :
- 程序驱动DVIT指令启动。
- 电机以10kHz开始高速转动(对应机械臂快速接近目标)。
- 当机械臂碰到接近开关 → X000 ON(上升沿),PLC立即检测到中断信号。
- 此时忽略原来的S2(100000) ,转而只输出表格中设定的剩余脉冲:50脉冲。
- 输出完50脉冲后,脉冲自动停止,指令完成(M8029 ON或对应轴标志)。
- 结果 :精确停在目标位置(高速接近 + 低速爬行补偿惯性误差)。
- 异常情况(无中断触发,例如传感器故障或没碰到开关) :
- 电机一直以10kHz高速转动。
- 因为没有中断信号,PLC继续累计脉冲。
- 当累计达到S2(K100000)时,自动停止脉冲输出,指令完成。
- 结果 :电机停在“最大安全距离”(对应100000脉冲),不会无限转下去,避免撞机。
- 程序可以检测“脉冲输出完成但中断标志没置位”来报警(例如检查专用标志位)。
简单梯形图伪代码示例(GX Works2风格)
text
LD M0 ; 启动条件(M0为定位启动按钮)
DVIT K10000 K100000 D100 Y000 ; 执行DVIT
; 预先MOV指令设置表格(程序初始化时执行)
MOV K1 D100 ; 中断数=1
MOV K0 D101 ; 中断输入=X000
MOV K50 D102 ; 剩余脉冲=50
为什么这个例子实用?
- 在包装机、贴标机、分度盘等设备中非常常见:高速运行节省时间,中断+剩余脉冲保证精度。
- 如果把剩余脉冲设为0,就是“碰到开关立即停”(适合零速停止场景)。
- 如果不设中断表格(D100=K0),DVIT就完全退化为PLSY,只走S2脉冲。