为了解高速计数器的操作,用下面初始化及编程操作进行说明。在下列说明中,一直采用HSC1作为计数器模型。初始化过程中,假定S7-200刚刚进入运行(RUN)模式。如果情况与此不符,请注意进入运行模式后对各高速计数器只能执行一次HDEF指令。对某高速计数器执行两次HDEF指令,将生成运行错误,而且不会改变第一次执行HDEF指令后对计数器的设定。
1.模式0、1或2初始化
下列步骤说明如何为带内部方向的单相计数器HSC1进行初始化。
(1)调用初始化程序。利用第一扫描内存位SM0.1调用初始化操作的子程序。因为使用了子程序调用,随后的扫描不再调用这个子程序,因此可降低执行时间,并使程序结构化更强。
(2)装载控制字。在初始化子程序内,根据控制操作装载控制字到SMB47。
例如,SMB47=16#F8产生下列结果:允许计数器计数;写入新当前值;写入新预设值;设定HSC初始计数方向为向上计数;设定启动和复位输入为高电平有效。
(3)执行HDEF指令。HSC输入设定为1,无外部重置或起始时模式输入设定为0,有外部重置无起始时模式输入设定为1,有外部重置及起始时模式输入设定为2。
(4)装载高速计数器的当前值。用所需当前值装载SMD48(双字尺寸数值,装载零进行清除)。
(5)装载高速计数器的预置值。用所需预设值装载SMD52(双字尺寸数值)。
(6)设置中断。为了捕捉当前值等于预设值,将CV=PV中断事件(事件13)附加于中断程序,对中断进行编程。
为了捕捉外部重置事件,将外部重置中断事件(事件15)附加于中断程序,对中断进行编程。
(7)启动全局中断。执行全局中断启动指令(ENI),启动全局中断。
(8)对高速计数器编程。执行HSC指令,使S70200对HSC1进行编程。
(9)退出子程序。
2.模式3、4或5初始化
下列步骤说明如何为带外部方向的单相向上/向下计数器(HSCl)进行初始化。
(1)调用初始化程序。利用第一扫描内存位SM0.1调用初始化操作的子程序。因为使用了子程序调用,随后的扫描不再调用这个子程序,因此可降低执行时间,并使程序结构化更强。
(2)装载控制字。在初始化子程序内,根据控制操作装载控制字到SMB47。
例如,SMB47=16#F8产生下列结果:允许计数器计数;写入新当前值;写入新预设值;
设定HSC初始计数方向为向上计数;设定启动和复位输入为高电平有效。
(3)执行HDEF指令。HSC输入设定为1,无外部重置或起始时模式输入设定为3,有外部重置无起始时模式输入设定为4,有外部重置及起始时模式输入设定为5。
(4)装载高速计数器的当前值。用所需当前值装载SMD48(双字尺寸数值,装载零进行清除)。
(5)装载高速计数器的预置值。用所需预设值装载SMD52(双字尺寸数值)。
(6)设置中断。为了捕捉当前值等于预设值,将CV=PV中断事件(事件13)附加于中断程序,对中断进行编程。
为了捕捉方向改变,将方向改变中断事件(事件14)附加于中断程序,对中断进行编程。
为了捕捉外部重置事件,将外部重置中断事件(事件15)附加于中断程序,对中断进行编程。
(7)启动全局中断。执行全局中断启动指令(ENI),启动全局中断。
(8)对高速计数器编程。执行HSC指令,使S7-200对HSC1进行编程。
(9)退出子程序。
3.模式6、7或8初始化
下列步骤说明如何为双相计数器(HSC1)进行初始化。
(1)调用初始化程序。利用第一扫描内存位SM0.1调用初始化操作的子程序。
(2)装载控制字。在初始化子程序内,根据控制操作装载控制字到SMB47。
例如,SMB47=16#F8产生下列结果:允许计数器计数;写入新当前值;写入新预设值;设定HSC初始方向为向上计数;设定启动和复位输入为高电平有效。
(3)执行HDEF指令。HSC输入设定为1,无外部重置或起始时模式输入设定为6,有外部重置无起始时模式输入设定为7,有外部重置及起始时模式输入设定为8。
(4)装载高速计数器的当前值。用所需当前数值装载SMD48(双字数值,装载零进行清除)。
(5)装载高速计数器的预置值。用所需预设值装载SMD52(双字尺寸数值)。
(6)设置中断。为了捕捉当前数值等于预设值,将CV=PV中断事件(事件13)附加于中断程序,对中断进行编程。
为了捕捉方向改变,将方向改变中断事件(事件14)附加于中断程序,对中断进行编程。
为了捕捉外部重置事件,将外部重置中断事件(事件15)附加于中断程序,对中断进行编程。
(7)启动全局中断。执行全局中断启动指令(ENI),启动全局中断。
(8)对高速计数器编程。执行HSC指令,使S7-200对HSC1进行编程。
(9)退出子程序。
4.模式9、10或11初始化
下列步骤说明如何为正交计数器(HSC1)进行初始化。
(1)调用初始化程序。利用第一扫描内存位SM0.1调用初始化操作的子程序。
(2)装载控制字。在初始化子程序内,根据控制操作装载控制字到SMB47。
例如,1倍计数模式SMB47=16#FC产生下列结果:允许计数器计数;写入新当前值;写入新预设值;设定HSC初始方向为向上计数;设定启动和复位输入为高电平有效。
例如,4倍计数模式SMB47=16#F8产生下列结果:允许计数器计数;写入新当前值;写入新预设值;设定HSC初始方向为向上计数;设定启动和复位输入为高电平有效。
(3)执行HDEF指令。HSC输入设定为1,无外部重置或起始时模式输入设定为9,有外部重置无起始时设定为10,有外部重置及起始设定为11。
(4)装载高速计数器的当前值。用所需当前值装载SMD48(双字尺寸数值,装载零进行清除)。(www.xing528.com)
(5)装载高速计数器的预置值。用所需预设值装载SMD52(双字尺寸数值)。
(6)设置中断。为了捕捉当前数值等于预设数值,将CV=PV中断事件(事件13)附加于中断程序,对中断进行编程。
为了捕捉方向改变,将方向改变中断事件(事件14)附加于中断程序,对中断进行编程。
为了捕捉外部重置事件,将外部重置中断事件(事件15)附加于中断程序,对中断进行编程。
(7)启动全局中断。执行全程中断启动指令(ENI),启动中断。
(8)对高速计数器编程。执行HSC指令,使S7-200对HSC1进行编程。
(9)退出子程序。
5.在模式0、1、2下改变方向
下列步骤说明如何设置HSC1,使带内部方向(模式0、1或2)的单相计数器改变方向。
(1)装载SMB47,写入所要方向:
SMB47=16#90启动计数器设定HSC方向,向下计数;
SMB47=16#98启动计数器设定HSC方向,向上计数。
(2)执行HSC指令,使S7-200对HSC1进行编程。 -
6.装载新当前值(任何模式)
下列步骤说明如何改变HSC1计数器当前值(任何模式)。
改变当前值强迫计数器在进行改动的过程中处于关闭状态。计数器被关闭时,将不再计数或生成中断。
(1)装载SMB47,写入所需当前值:
SMB47=16#C0启动计数器写入新当前值。
(2)用所需当前值装载SMD48(双字尺寸,装载零进行清除)。
(3)执行HSC指令,使S7-200对HSC1进行编程。
7.装载新预设值(任何模式)
下列步骤说明如何改变HSC1的计数器预设值(任何模式)。
(1)装载SMB47,写入所需预设值:
SMB47=16#AO启动计数器写入新预设值。
(2)用所需要预设值装载SMD52(双字尺寸数值)。
(3)执行HSC指令,使S7-200对HSC1进行编程。
8.关闭HSC1高速计数器(任何模式)
下列步骤说明如何关闭HSC1高速计数器(任何模式)。
(1)装载SMB47,关闭计数器:
SMB47=16#A0 关闭计数器。
(2)执行HSC指令,关闭计数器。
上述操作说明如何逐一改变方向、改变当前值,以及如何改变预设值,当然也可以按照相同步骤,适当设定SMB47数值并执行HSC指令,改变全部数值或其中任意组合。
【例4-16】图4-31是一个给高速计数器编程的示例。高速计数器1设定为正交4倍速率计数器。当HSC1的当前值等于预置值时,引发中断,在中断程序中对变量VW0进行加1操作。VW0的值即为HSC1的中断计数。
图4-31 高速计数器的编程
(1)OB1。从程序中可以看出,主程序OB1利用初次扫描SM0.1调用HSC1初始化程序。
(2)SBR0。子程序SBR0对HS01初始化。
第1条指令是向SMB47传送十六进制数16#F8。设定高速计数器为允许计数、写入新当前值、写入新预置值、设定计数器初始计数方向为向上计数、设定启动输入和复位输入为高电平有效、正交4倍速率模式。
第2条指令是设定HSC1为模式11方式。
第3条指令是对SMD48送零,即清除HSC1的当前值。
第4条指令是设定HSC1的预置值为50。
第5条指令是连接当前值、预置值(事件13)与中断程序(INT0)。
第6条指令是设定允许全局中断(ENI)。
第7条指令是对HSC1编程。
(3)INT0。
第1条指令是把0送到SMD48中,对HSC1当前值清零。
第2条指令是把C0 H送入SMB47,即设定HSC1允许更新当前值。
第3条指令是对HSC1编程。
第4条指令是对VW0加1,可以由VW0的值记录中断次数。或者说用VW0记录HSC1从0计数到50的次数。
从这个例子中可以看到,一般HDEF指令只能使用一次;每重新赋一次控制字都要对高速计数器用HSC编程。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。