首页 理论教育 高速计数器编程在地铁设备中的应用

高速计数器编程在地铁设备中的应用

时间:2023-10-11 理论教育 版权反馈
【摘要】:为了解高速计数器的操作,用下面初始化及编程操作进行说明。如果情况与此不符,请注意进入运行模式后对各高速计数器只能执行一次HDEF指令。对某高速计数器执行两次HDEF指令,将生成运行错误,而且不会改变第一次执行HDEF指令后对计数器的设定。对高速计数器编程。装载高速计数器的当前值。

高速计数器编程在地铁设备中的应用

为了解高速计数器的操作,用下面初始化及编程操作进行说明。在下列说明中,一直采用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编程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈