我与大家的观点有一些不一致,说出来谨供大家参考。(楼主提出的问题是属于FX1s、FX1n系列PLC上遇到的。所以,我的这些观点仅限于FX1s、FX1n系列范围)
1、 PLSY(FNC57)指令是一种高速指令。它的“执行过程”(单指脉冲的输出过程)是独立于程序扫描周期之外的过程,不受程序的扫描周期的制约。在该指令的驱动条件为ON的最初一个周期里开始运算,然后立即输出脉冲!(不等程序扫描到END命令,它是以中断形式执行的。)
2、 当PLSY指令的第一个操作数指定频率在 1Hz~1999Hz 之内时,指令单次触发执行的最小基本单位数量为1个脉冲。
3、 当指定频率在 2000Hz~3000Hz 之内时,指令单次触发执行的最小基本单位数量为2个脉冲。
4、 当指定频率在 3001Hz~4999Hz 之内时,指令单次触发执行的最小基本单位数量为4个脉冲。
5、 当指定频率在 5000Hz~8998Hz 之内时,指令单次触发执行的最小基本单位数量为8个脉冲。
6、 当指定频率在 8999Hz~16999Hz 之内时,指令单次触发执行的最小基本单位数量为16个脉冲。
7、 当指定频率在 17000Hz~32976Hz 之内时,指令单次触发执行的最小基本单位数量为32个脉冲。
8、 当指定频率在 32977Hz~65040Hz 之内时,指令单次触发执行的最小基本单位数量为64个脉冲。
9、 当指定频率在 65041Hz 以上的频率时,指令单次触发执行的最小基本单位数量为128个脉冲。
三菱FX系列的编程手册对PLSY(FNC57)指令称之为<脉冲输出>。这个“脉冲”不同于随机时序中出现的单个脉冲,而它是一种周期性出现的脉冲。既然这个“脉冲”是周期性出现的,所以对这执行脉冲输出的硬件电路(这里与PLC通常的输出过程是不一样的。它不是靠软件在执行END命令时刷新输出锁存器来实现的,而是靠专门的脉冲输出硬件电路直接控制Y0或Y1输出。)就得赋予它有“前瞻性”。当硬件输出电路在输出第1个“基本单位”脉冲时,就已经“前瞻性”的为下一个“基本单位”脉冲的输出作好了准备(给M8148的导通时间准备了用于输出两个“基本单位”所需的时间)。
对于其指令第2个“操作数”(S2)≥ 2 的情形,我们可以把PLSY(FNC57)指令理解成<脉冲串输出>。要形成“串”则至少不得少于两个脉冲!所以当楼主网友所写的 < LDP X02 PLSY K1 K5 Y01 > 这条指令在执行时,标志位: M8148(Y01脉冲输出中)ON的持续时间最短也得保证有2个完整的周期。故,该指令执行的结果是Y01输出“两个脉冲”。即便是程序在第1个脉冲还没有输出完毕时程序进入第2个扫描周期,运算出该PLSY指令应该OFF,但是,已经启动了的M8148 在导通时间未满两个脉冲周期之前是不会OFF的!
不能说误差。是最少脉冲数的原因。这个事情我很早前曾经试验过了。没办法,使用上就尽量避开一个脉冲这唯一一种情况,就可以正常的。
<Wanggq>回复:
楼主的程序片断在输入点“X02”的前沿脉冲操作下为什么不输出 5 个脉冲? 那是因为程序在第2个“扫描周期”内就运算出PLSY指令OFF,所以该指令执行不到第2个“脉冲周期”之后(不包括第2个“脉冲周期”)的脉冲输出。
既然楼主的程序片断在程序的第2个“扫描周期”中就运算得到该PLSY 指令“OFF”,而且这时,第1个“脉冲周期”甚至都还没有执行完毕,为什么不就此中止“脉冲”的输出呢? 那是因为PLSY指令的“脉冲输出硬件电路”已经启动,不受程序“扫描周期”制约,若在启动之前“Y01脉冲输出禁止”之M8146 没有被置位,则“Y01脉冲输出中”M8148 之ON至少要保证有两个完整的“基本单位”的脉冲周期(前瞻性的多准备了一份最小“基本单位”)。在楼主的例程中,单次触发执行最小“基本单位数量”是1个脉冲。故,该例程在单次触发下输出的是2个完整的脉冲,而不是1个完整脉冲,更不可能是1个不足一个“脉冲周期”的不完整脉冲!
事实上,我们也完全不需要刻意去“避开只输出一个脉冲的情况”!倘若有人需要用“PLSY”指令来实现:用“X02”前沿触发一次,PLC的“Y01”就输出一个“完整的脉冲”。那么,我们将楼主的例程中该脉冲输出指令的“S2”指定为“K1”即可!
M8146的控制在置位后是否需要编写复位的程序?
另王先生那个关于基本单位脉冲数量与频率关系的描述是实际测试得出来的吗?
内容的回复:
回复第一个问题:
在FX1s、FX1n中,M8146 是<Y01脉冲输出禁止>位。它如果在PLSY指令(设目标操作数为Y01) 执行前就已经为ON ,则它将禁止 M8148 -<Y01脉冲输出中> ON 之时值中的“前瞻性”的预备部分,但它却不能禁止对应于该PLSY指令对 M8148 的触发(启动)!换句话说就是:“脉冲禁止位”于PLSY指令执行前有效时,其禁止的是除首份脉冲之外的所有后续脉冲。(关于“首份脉冲”的定义,我将在以后抽时间来细讲)
当目标功能定为:用< LDP X02 PLSY K1 K5 Y01 > 实现每操作一次“X02”,“Y01”就仅输出一个“占空比为50%的周期脉冲”时,我们没有必要对 M8146 施行“复位”操作。
引用 < gzf1 > 的内容:
“ 当程序在X2的闭合这个周期内检测到上升沿有效,在下一个输出刷新阶段是马上以PLSY指令规定的速度来执行Y1的输出.这个输出是高速输出,和下一个阶段的输入刷新和程序执行同步进行的,只有当下一次扫描周期进行时,检测到X2的PLSY指令不具备执行条件,才会在输出刷新阶段停止执行PSLY指令。”
< Wanggq > 回复:
楼主的问题是在FX1s / FX1n 系列PLC上遇到的。而我理解< gzf1 >网友这句“当程序在X2的闭合这个周期内检测到上升沿有效,在下一个输出刷新阶段是马上以PLSY指令规定的速度来执行Y1的输出”好像是对FX2n 或FX2nc来讲的。如果是在FX2n系列的PLC上做运行这个 < LDP X02 PLSY K1 K5 Y01 > 的试验,则:从PLC面板上的输出指示灯来看,这个片断是不会有“输出”指示的。
在FX2n系列的PLC上运行“PLSY指令”,其驱动条件为ON的时值至少应当保证有2个扫描周期才会有“输出”指示!
<紧接上一楼的内容>
在FX2n系列的PLC上,如果我们写一个片断来保证“PLSY指令”的驱动条件只通两个扫描周期,当程序第1次扫描至该“PLSY指令”的驱动条件(X02)为ON,则该“PLSY指令”运算为ON,但是“Y01”在“映象寄存器”中的映像并不立即出现“脉冲”的ON状态。直到程序扫描至本周期的“End命令”时“Y01的映像”也不出现“脉冲”的ON状态,而是在下一个扫描周期里再次扫描至该“PLSY指令”(X02 仍然为ON时),立即刷新“Y01的映像”(不等这一周期的“输出刷新阶段”)。倘若第三次扫描至该“PLSY指令”,其驱动条件(X02)为OFF时,运算出该“PLSY指令”为OFF。这时将立即中止“正在执行中的脉冲输出”(同样的也是不等这一周期的“输出刷新阶段”)。如此这样,从PLC面板指示灯上看“Y01就只输出一个脉冲”。
(从“输出指示”上看到的这一个脉冲的脉宽只有一个程序扫描周期的时值,而不是象在FX1s或FX1n上运行 < PLSY K1 K5 Y01 > 指令那样输出完整的:“ OFF-500mS、 ON-500mS ”的一个“周期脉冲”)
引用 < gzf1 > 的内容:
“ 当程序在X2的闭合这个周期内检测到上升沿有效,在下一个输出刷新阶段是马上以PLSY指令规定的速度来执行Y1的输出.。”
------------------------------------------------
< Wanggq > 回复:
我对“PLSY指令规定的速度”的理解是:该指令的“源操作数1”指定的“脉冲频率”。对应于楼主提供的例程片断———— < LDP X02 PLSY K1 K5 Y01 > 来说,“S1” 所指定的为“K1”,即指定频率为“1Hz ”。
在FX1s或FX1n系列PLC 中,“PLSY指令”在驱动条件(X02)上升沿有效的周期内立即以“中断”形式触发“硬件脉冲输出电路”其输出脉冲频率为对应“S1”所指定的(K1)——“1 周期/每秒”的脉冲速度。
在FX2n系列PLC中,“PLSY指令”在驱动条件(X02)上升沿有效的周期内立即以“中断”形式触发“硬件脉冲输出电路”(“硬件脉冲输出电路”输出脉冲与“映像寄存器状态”及“输出锁存器状态”是不同的概念),但其脉冲速度不可能低到“1 周期/每秒”。因为FX2n中的“PLSY指令”最低频率是2Hz 。
下面是支持这一观点的实验证据:让“PLSY指令”的驱动条件之ON时值延长到M8029标志出现时,记下这段时间为2250毫秒。