四川自贡西门子CPU代理商 四川自贡西门子CPU代理商
四川自贡西门子CPU代理商四川自贡西门子CPU代理商四川自贡西门子CPU代理商
高速计数器指令(HS或DHS)有3个,以HS开头,分别为比较置位指令(HSCS)、比较复位指令(HSCR)和区间比较指令(HSZ)。上篇文章中提到,高速计数器是32位软元件,所以,其相关指令显然也是32位的。即以上3个指令在应用时应该用DHSCS、DHSCR、DHSZ。
以上,废话不多说,我们开始3个指令的学习吧!
1、比较置位指令HSCS
比较置位指令的编程手册截图如下图17-1所示,从截图可以看到,HSCS指令不适用于16位,仅用于32位,且只有连续执行型。
图17-1
DHSCS指令有3个孩子,啊呸,有3个操作数,即源址S1、S2和终址D,它们的适用软元件如截图所示,其中S2为高速计数器编号,终址D可以为高速计数器中断指针I010~I060。显然,高速计数器是一种中断源,可以用于中断服务。
这在我之前分享的有关中断服务的文章中也简单提到过,大家可以回顾一下。
图17-2
DHSCS的梯形图形式如图17-2所示,S1为设置值或设定值的存储地址,用于与高速计数器的计数值进行比较,S2为对应高速计数器编号,D为被置位的位元件地址或高速计数器中断指针编号。当驱动条件成立时,将高速计数器的当前值与设定值进行比较,若计数器当前值等于设定值,立即以中断处理方式将D置为ON或立即转移到指定的中断服务子程序执行中断服务。
这里就顺便再说一下高速计数器中断吧,正如图17-2所示,当高速计数器的当前值等于K100时,执行中断指针I10所指的中断服务程序。
显然,高速计数器中断必须与DHSCS指令一起使用,且指针号不可重复。另外,正如我在中断服务文章中所言,不同指针都有对应禁止中断继电器,高速计数器中断指针I010~I060的禁止中断继电器为M8059,所以若M8059=ON,计数器中断将全部被禁止。
上篇文章提及,高速计数器的计数与扫描周期无关,相应的,其3个指令(DHS)的执行方式亦为中断处理方式。为了便于理解,我们以之与内部计数器相比较,如图17-3所示的两段程序为例,它们的执行功能都是将Y0输出ON。
图17-3
于内部计数器C0而言,其计数值为X10的通断次数,且每通断1次就要历经1个程序扫描周期,当C0计数值达到设定值且其程序扫描一次结束后,Y0才输出ON。高速计数器C235所计数的是输入端口X0处的脉冲信号数,而不是X10的通断次数,所以,它的计数与扫描时间无关,一旦C235的计数值等于设定值,程序扫描中断,立即将Y0输出ON,不受扫描时间影响。
另外,若X0没有脉冲输入或高速计数器未被启动,即使用DMOV指令等改变高速计数器的当前值,显然DHSCS指令也不会执行。
2、比较复位指令HSCR
比较复位指令的编程手册截图如下图17-4所示,从截图可以看到,HSCS指令也是仅用于32位,且只有连续执行型。
图17-4
其梯形图形式与DHSCS指令类似,S1为设置值或设定值的存储地址,用于与高速计数器的计数值进行比较,S2为对应高速计数器编号,D为被复位的位元件地址或与S2一样的高速计数器编号。当驱动条件成立时,将高速计数器的当前值与设定值进行比较,若计数器当前值等于设定值,立即以中断处理方式将D复位。
上文提及,高速计数器指令都是中断处理形式,毫无疑问,DHSCR也是如此,不再赘述。DHSCR有一个特点就是它可以对高速计数器自身复位,而编程手册中也是相关示例,其截图如下图17-5所示。
图17-5
当高速计数器C255当前值为K300时,其常开触点闭合并保持接通状态,当C255当前值为K400时,DHSCR指令执行,将高速计数器C255自身复位,其相应触点也复位。
同一程序中,高速计数器指令DHS可以多次使用,但其数量是有限制的,在FX2N中,*多只能用6个。在使用多个高速计数器指令时,终址为输出Y时要注意其编号,因为编号对其驱动方式有很大影响。
如图17-6所示,例如使用2个DHSCR指令,当所驱动的输出继电器Y为同一组的Y0、Y1(Y0~Y7、Y10~Y17等)时,Y0、Y1均按中断处理方式立即复位,若Y为不同组的Y10、Y20,此时Y10以中断处理方式复位,而Y20则在程序扫描结束后才被复位。
图17-6
另外,上文提到,若没有脉冲信号输入,即使用DMOV指令等改变高速计数器当前值,高速计数器指令也不会执行。
但有一种特殊的情况,如下图17-7的梯形图所示,在特殊继电器M8025为ON的状态下,若外部复位端子X1有信号,C241复位,当前值清零,此时即使没有脉冲信号输入,DHSCS、DHSCR指令也会执行,Y0=ON,Y1=OFF。
图17-7
3、区间比较指令HSZ
说到这个区间比较指令,不知各位是否还记得大明湖畔的夏雨荷……咳咳,是否还记得当年我所分享的ZCP指令?
类似ZCP指令,高速计数器区间比较指令DHSZ就是将计数器当前值与两个数进行比较,其编程手册截图如图17-8所示。
其操作数有4个,S1、S2分别为设定值的下限值和上限值或其数据存储地址,(S1)≤(S2);S为对应高速计数器编号;D为驱动位元件首址,占3个点D、D 1、D 2。
图17-8
当驱动条件成立时,将S的当前值与S1和S2进行比较,根据比较结果所属区间,驱动D、D 1、D 2中的某一个为ON。如图17-9所示,当高速计数器C的当前值小于S1,D=ON;当高速计数器C的当前值大于S1且小于S2,D 1=ON;当高速计数器C的当前值大于S2,D 2=ON。
图17-9
可以发现,DHSZ指令和ZCP指令很相似,但其实两者有很大的区别,DHSZ指令是以中断处理方式执行的,而ZCP指令是以扫描方式执行的,而且若高速计数器对应输入端口没有脉冲信号输入,即使用DMOV指令给高速计数器赋值,DHSZ指令也不会执行。
如下图17-10所示,为用ZCP指令初始驱动的DHSZ指令应用程序段,目的是Y0可以动作初始化,即高速计数器当前值为0,Y0也能有输出(Y0=ON)。
图17-10
若没有DZCPP指令,在触点X10接通时,若X0没有脉冲输入,即使此时C235当前值为0,DHSZ指令也不会不执行,Y0=OFF。加上DZCPP指令后,在X10接通的上升沿,DZCPP指令执行,即使当前X0没有脉冲输入,C235没有开始计数,但因为C235当前值为0,小于K100,Y0=ON。直到X0有脉冲信号输入,C235开始计数,DHSZ指令开始执行区间比较功能。
其动作波形图如下图17-11所示。
图17-11
根据波形图17-11,X10接通,DZCPP指令执行,C235当前值为0,小于K100,Y0=ON,直到X0有脉冲信号输入,C235开始计数,DHSZ指令执行,Y0保持接通;当C235的当前值为K100时,Y1接通,此时Y0=OFF;当C235的当前值为K200时,Y2接通,此时Y0、Y1均为OFF。
四川自贡西门子CPU代理商 四川自贡西门子CPU代理商