1、高速计数器可以对 CPU 扫描速度无法控制的高速事件进行计数。高速计数器的最大计数频率决定 CPU 类型。S7-200 CPU 内置到个高速计数器(HSC0HSC5,其中 PLC221及 PLC222 不支持 HSC1 及 HSC2)。这些高速计数器工作频率可达到 20kHz,有 12 种工作模式,不影响 CPU 的性能。对于双相计数器,两个计数都可以最大速率运行。对于正交模式,可以选择 1 倍或倍最大计数速率工作。HSC1 和 HSC2 互相完全独立,并不影响其它的高速功能。全部计数器均可以以最大速率运行,互不干扰。高速计数器经常被用于距离检测,用于电机转数检测。当计数器的当前值等于预设值或
2、发生重置时,计数器提供中断。因为中断的发生速率远远低于高速计数器的计数速率,可对高速操作进行精确控制,并对可编程序控制器的整体扫描循环的影响相对较小。高速计数器允许在中断程序内装载新的预设值,使程序简单易懂。(1)高速计数器工作模式高速计数器大体可以分为四种。第一种是带内部方向控制的单相计数器。这种计数器的计数要么是增计数,要么是减计数,只能是其中一种方式。这种计数器只有一个计数输入端。其控制计数方向由内部继电器控制。这种计数器的工作模式为模式 0、1、2。第二种是带外部方向控制的单相计数器。这种计数器的计数要么是增计数,要的是减计数,只能是其中一种方式。这种计数器只有一个计数输入端。由外部输
3、入控制其计数方向。这种计数器的工作模式为模式 3、4、5。第三种计数器是即可以增计数也可以减计数的双向计数器。这种计数器有两个计数输入端,一个增计数输入端,一个减计数输入端。这种计数器的工作模式为模式 6、7、8。第四种计数器是正交计数器。这种计数器有两个时钟脉冲输入端,一个输入端叫 A 相,一个输端叫 B 相。当 A 相时钟脉冲超前 B 相时钟脉冲时,计数器进行增计数。当 A 相时钟脉冲滞后 B 相时钟脉冲时,计数器进行减计数。这种计数器的工作模式为模式 9、10、11。在正交模式下,可选择 l 倍(1)或 4 倍(4)最大计数速率。HSC 模式说明 输入HSC0 I0.0 I0.1 I0.
4、2 HSC1 I0.6 I0.7 I0.2 I1.1HSC2 I1.2 I1.3 I1.1 I1.2HSC3 I0.1 HSC4 I0.3 I0.4 I0.5 HSC5 I0.4 0 时钟脉冲 1 时钟脉冲 复位2具有内部方向控制的单相计数器时钟脉冲 复位启动3 时钟脉冲 方向 4 时钟脉冲 方向 复位5具有外部方向控制的单相计数器时钟脉冲 方向 复位启动6 增计数脉冲增计数脉冲7具有两个时钟输入的双相计数器增计数脉 增计数脉 复 冲 冲 位8 增计数脉冲增计数脉冲复位启动9 时钟脉冲A时钟脉冲B10 时钟脉冲A时钟脉冲B复位11A/B 相正交计数器时钟脉冲A时钟脉冲B复位启动12 仅 HSC
5、0 和 HSC3 支持模式12。HSC0 计数 Q0.0 所发脉冲的数目。HSC3 计数 Q0.1 所发脉冲的数目。(2)高速计数器的中断描述全部计数器模式均支持当前数值等于预设数值中断,使用外部重置输入的计数器模式支持外部重置激活中断。除模式 0、1、2 以外的全部计数器模式均支持计数方向改变中断。可以单独启动或关闭这些中断。使用外部重置中断时,不要装载新当前数值,或者在该事件的中断程序中先关闭再启动高速计数器。否则将引起 CPU 严重错误。中断事件号中断描述 优先级别(在整个中断事件中排序)12 HSC0 CV=PV(当前值= 设定值)1027 HSC0 计数方向改变 1128 HSC0
6、外部复位 1213 HSC1 CV=PV(当前值= 设定值)1314 HSC1 计数方向改变 1415 HSC1 外部复位 1516 HSC2 CV=PV(当前值= 设定值)1617 HSC2 计数方向改变 1718 HSC2 外部复位 1832 HSC3 CV=PV(当前值= 设定值)1929 HSC4 CV=PV(当前值= 设定值)2030 HSC4 计数方向改变 2131 HSC4 外部复位 2233 HSC5 CV=PV(当前值= 设定值)23(3)高速计数器的状态字每一个高速计数器都有一个状态字节,该字节的每一位都反映了这个计数器的工作状态。表示当前计数方向以及当前数值是否大于或等于
7、预设数值。HSC0 HSC1 HSC2 HSC0 HSC0 HSC0 说明(0 、l 、2 位仅在 HDEF 指令中用)SM37.0 SM47.0 SM57.0 SM147.0 复位控制:0 高电平复位 1 低电平复位SM37.1 SM47.1 SM57.1 SM147.1 启动控制:0 高电平启动 1 低电平启动SM37.2 SM47.2 SM57.2 SM147.2 正交速率:0 为 4倍速率 1 为 l 倍速率SM37.3 SM47.3 SM57.3 SM137.3 SM147.3 SM157.3 计数方向:0 向下计数 1 向上计数SM37.4 SM47.4 SM57.4 SM137.
8、4 SM147.4 SM157.4 方向更新:0 无更新 1 更新方向SM37.5 SM47.5 SM57.5 SM137.5 SM147.5 SM157.5 预设值更新:0 无更新 1 更新预设值SM37.6 SM47.6 SM57.6 SM137.6 SM147.6 SM157.6 当前值更新:0 无更新 1 更新当前值SM37.7 SM47.7 SM57.7 SM137.7 SM147.7 SM157.7 允许控制:0 禁止HSC1 允许 HSC(6)高速计数器的预设值每个高速计数器均有一个 32 位的预设值。预设值为带符号整数值。欲向计数器内装载新的预设值,必须设定包含预设值的控制字节
9、及特殊内存字节。然后执 HSC 指令,将新数值传输至高速计数器。高速计数器 HSC0 HSC1 HSC2 HSC3 HSC4 HSC5新预设值 SMD42 SMD52 SMD62 SMD142 SMD152 SMD162(7) 定义高速计数器指令定义高速计数器 HDEF使用高速计数器之前必须选择计数器模式,读者可利用 HDEF 指令(高速计数器定义)选择计数器模式。HDEF 提供高速计数器(HSCn)及计数器模式之间的联系。对每个高速计数器只能采用一条 HDEF 指令定义高速计数器。高速计数器中的四个计数器拥有三个控制位,用于配置重置(复位)、起始输入(启动)的激活状态和选择 1或 4计数模式
10、(只用于正交计数器)。这些位处于计数器的控制字节内,只有在执行 HDEF 指令时才被使用。执行HDEF 指令之前,必须将这些控制位设定成要求状态。否则,计数器对所选计数器模式采用默认配置。重置输入及起始输入的默认设定是激活高,正交计数速率为 4(或输入时钟频率的四倍)。一旦执行 HDEF 指令后,不可改变计数器设定,除非首先将 PLC 置于停止模式。定义高速计数器指令的表示:定义高速计数器指令高助记符 HDEF、定义高速计数允许端 EN、高速计数器编号 HSC、高速计数器工作模式 MODE 构成。定义高速计数器指令的操作:在高速计数器定义指令允许时,高速计数器的计数器号(HSC)、高速计数器的
11、工作模式(MODE)被确定。要注意的是 HDEF 指令只能用次。数据范围:EN:I、Q、M、SM、T、C、V、S、L;HSC:常量(0、1、2、3、4、5);MODE:常量(0、1、2 10、11 )(8)高速计数器编程指令为高速计数器编程 HSC:高速计数器在定义之后,高速计数器在重置(复位)时,高速计数器在更新当前值时,在更新预置值时,都要应用高速计数器编程指令 HSC 对其编程。执行 HSC 指令的目的就是使 S7-200 对高速计数器进行编程。只有经过编程,高速计数器才能运行。高速计数器编程指令的表示:高速计数器编程指令由高速计数器编程指令允许端 EN、高速计数器编程指令助记符 HSC
12、 和对高速计数器进行编程的计数器编号构成。高速计数器编程指令的操作:当高速计数器编程指令有效时,对高速计数器 n 进行的一系列新的操作,将被 S7-200 编程。高速计数器新的功能生效。数据范围:EN:I、Q、M、SM、T、C、V、S、L;n:常量(0、1、2、3、4、5)(9)高速计数器的编程步骤为了解高速计数器的操作,用下面初始化及编程操作进行说明。在下列说明中,一直采用 HSC1 作为计数器模型。初始化过程中,假定 S7-200 刚刚进入运行(RUN)模式。如果情况与此不符,请注意进入运行模式后对各高速计数器只能执行一次 HDEF 指令。对某高速计数器执行两次 HDEF,将生成运行时错误
13、,而且不会改变第一次执行 HDEF 指令后对计数器的设定。1)模式 0、1 或 2 初始化下列步骤说明如何为带内部方向的单相计数器 HSC1 进行初始化。调用初始化程序;利用第一扫描内存位 SM0.1 调用初始化操作的子程序。因为使用了子程序调用,随后的扫描不再调用这个子程序,因此可降低执行时间并使程序结构化更强。装载控制字:在初始化子程序内,根据所要控制操作装载控制字到 SMB47。例如:SMB47=16#F8 产生下列结果:允许计数器写入新当前数值写入新预设数值设定方向为向上计数设定启动和复位输入为高电平有效执行 HDEF 指令:HSC 输入设定为 1,无外部重置或起始的模式输入设定为 0
14、,有外部重置无起始设定为 1,有外部重置及起始设定为 2。装载高速计数器的当前值:用所要当前数值装载 SMD48(双字尺寸数值,装载零进行清除)。装载高速计数器的预置值:用所要预设值装载 SMD52 (双字尺寸数值)。设置中断:为了捕捉当前数值等于预设数值,将 CVPV 中断事件(事件 13)附加于中断程序,对中断进行编程;为了捕捉外部重置事件,将外部重置中断事件(事件 15)附加于中断程序,对中断进行编程。启动全局中断:执行全局中断启动指令(ENI),启动全局中断。对高速计数器编程:执行 HSC 指令,使 S7-200 对 HSC1 进行编程。退出子程序。2)模式 3、4 或 5 初始化下列
15、步骤说明如何为带外部方向的单相向上/向下计数器 HSC1 进行初始化。调用初始化程序;利用第一扫描内存位 SM0.1 调用初始化操作的子程序。因为使用了子程序调用,随后的扫描不再调用这个子程序,因此可降低执行时间并使程序结构化更强。装载控制字:在初始化子程序内,根据所要控制操作装载控制字到 SMB47。例如:SMB47 = 16#F8 产生下列结果:允许计数器写入新当前数值写入新预设数值设定 HSC 初始方向为向上计数设定启动和复位输入为高电平有效执行 HDEF 指令:HSC 输入设定为 1,无外部重置或起始的模式输入设定为 3,有外部重置无起始设定为 4,有外部重置及起始设定为 5。装载高速
16、计数器的当前值:用所要当前数值装载 SMD48(双字尺寸数值,装载零进行清除)。装载高速计数器的预置值:用所要预设值装载 SMD52(双字尺寸数值)。设置中断:为了捕捉当前数值等于预设数值,将 CVPV 中断事件(事件 13)附加于中断程序,对中断进行编程;为了捕捉外部重置事件,将外部重置中断事件(事件 15)附加于中断程序,对中断进行编程。启动全局中断:执行全局中断启动指令(ENI),启动全局中断。对高速计数器编程:执行 HSC 指令,使 S7-200 对 HSC1 进行编程。退出子程序。3)模式 6、7 或 8 初始化下列步骤说明如何为双向计数器 HSC1 进行初始化。调用初始化程序;利用
17、第一扫描内存位 SM0.1 调用初始化操作的子程序。装载控制字:在初始化子程序内,根据所要控制操作装载控制字到 SMB47。例如:SMB47=16#F8 产生下列结果:允许计数器写入新当前数值写入新预设数值设定 HSC 初始方向为向上计数设定启动和复位输入为高电平有效执行 HDEF 指令:HSC 输入设定为 1,无外部重置或起始的模式输入设定为 6,有外部重置无起始设定为 7,有外部重置及起始设定为 8。装载高速计数器的当前值:用所要当前数值装载 SMD48(双字尺寸数值)(装载零进行清除)。装载高速计数器的预置值:用所要预设值装载 SMD52(双字尺寸数值)。设置中断:为了捕捉当前数值等于预
18、设数值,将 CVPV 中断事件(事件 13)附加于中断程序,对中断进行编程;为了捕捉外部重置事件,将外部重置中断事件(事件 15)附加于中断程序,对中断进行编程。启动全局中断:执行全局中断启动指令(ENI),启动全局中断。对高速计数器编程:执行 HSC 指令,使 S7-200 对 HSC1 进行编程。退出子程序。4)模式 9、10 或 11 初始化下列步骤说明如何为正交计数器 HSC1 进行初始化。调用初始化程序;利用第一扫描内存位 SM0.1 调用初始化操作的子程序。装载控制字:在初始化子程序内,根据所要控制操作装载控制字到 SMB47。例如 1 倍计数模式:SMB47=16#FC 产生下列
19、结果:允许计数器写入新当前数值写入新预设数值设定 HSC 初始方向为向上计数设定启动和复位输入为高电平有效例如 4 倍计数模式::SMB47 = 16#F8 产生下列结果:允许计数器写入新当前数值写入新预设数值设定初始 HSC 方向为向上计数设定启动和复位输入为高电平有效执行 HDEF 指令:HSC 输入设定为 1,无外部重置或起始的模式输入设定为 9,有外部重置无起始设定为 10,有外部重置及起始设定为 11。装载高速计数器的当前值:用所要当前数值装载 SMD48 (双字尺寸数值)(装载零进行清除)。装载高速计数器的预置值:用所要预设值装载 SMD52(双字尺寸数值)。设置中断:为了捕捉当前
20、数值等于预设数值,将 CVPV 中断事件(事件 13)附加于中断程序,对中断进行编程。为了捕捉方向改变,将方向改变中断事件(事件 14)附加于中断程序,对中断进行编程。为了捕捉外部重置事件,将外部重置中断事件(事件 15)附加于中断程序,对中断进行编程。启动全局中断:执行全程中断启动指令(ENI),启动中断。对高速计数器编程:执行 HSC 指令,使 S7-200 对 HSC1 进行编程。退出子程序。5)在模式 0、1、2 下改变方向下列步骤说明如何设置 HSC1,使带内部方向(模式 0、1 或 2)的单相计数器改变方向:装载 SMB47,写入所要方向:SMB47 =16#90 启动计数器设定
21、HSC 方向,向下计数SMB47=16#98 启动计数器设定 HSC 方向,向上计数执行 HSC 指令,使 S7-200 对 HSC1 进行编程。6)装载新当前数值(任何模式)下列步骤说明如何改变 HSC1 的计数器当前数值(任何模式):改变当前数值强迫计数器在进行改动的过程中处于关闭状态。计数器被关闭时,将不再计数或生成中断。装载 SMB47,写入所要当前数值:SMB47=16#C0 启动计数器写入新当前数值用所要当前数值装载 SMD48(双字尺寸)(装载零进行清除)。执行 HSC 指令,使 S7-200 对 HSC1 进行编程。7)装载新预设数值(任何模式)下列步骤说明如何改变 HSC1
22、的计数器预设数值(任何模式):装载 SMB47,写入所要预设数值:SMB47=16#A0 启动计数器写入新预设数值用所要预设数值装载 SMD52(双字尺寸数值)。执行 HSC 指令,使 S7-200 对 HSC1 进行编程。8)关闭 HSC1 高速计数器(任何模式)下列步骤说明如何关闭 HSC1 高速计数器(任何模式):装载 SMB47,关闭计数器:SMB47=16#00 关闭计数器执行 HSC 指令,关闭计数器。上述操作说明如何逐一改变方向、改变当前数值以及改变预设数值,当然也可以按照相同步骤,适当设定 SMB47 数值并执行 HSC 指令,改变全部数值或其中任何组合。例:这是一个给高速计数
23、器编程的例子。高速计数器 1 设定为正交 4 倍速率计数器。当 HSC1 的当前值等于预置值时,引发中断,在中断程序中对变量 VW0 进行加 1 操作。VW0的值即为 HSC1 的中断记数。OB1Network 1 / 网络标题/ 主程序 0B1 利用初次扫描 SM0.1 调用 HSC1 初始化程序。LD SM0.1CALL SBR0SBR_0TITLE=子程序 SBR0 对 HS01 初始化。Network 1 / 网络标题/ 第一条指令是向 SMB47 传送十六进制数 0F8H。设定高速计数器为允许计数、写入新当/ 前值、写入新预置值、设定计数器初始计数方向为向上计数、设定启动输入和复位输
24、入高电/ 平有效、正交 4 倍速率模式。/ 第二条指令是设定 HSC1 为模式 11 方式。/ 第三条指令是对 SMD48 送零,这是清除 HSC1 的当前值。/ 第四条指令是设定 HSC1 的预置值为 50。/ 第五条指令是连接当前值=预置值(事件 13)与中断程序(INT0)。/ 第六条指令是设定允许全局中断(ENI)。/ 第七条指令是对 HSC1 编程。LD SM0.0MOVB 16#F8, SMB47HDEF 1, 11MOVD 0, SMD48MOVD 50, SMD52ATCH INT0, 13ENIHSC 1INT_0Network 1 / 网络标题/ 第一条指令是把 0 送到
25、SMD48 中,对 HSC1 当前值清零。/ 第二条指令是把 0C0H 送入 SMB47,是设定 HSC1 允许更新当前值。/ 第三条指令是对 HSC1 编程。/ 第四条指令是对 VW0 加 1,可以由 VW0 的值记录中断次数。或者说用 VW0 记录 HSC1/ 从计数到 50 的次数。LD SM0.0MOVD 0, SMD48MOVB 16#C0, SMB47HSC 1+I 1, VW0从这个例子中可以看到,一般 HDEF 指令只能使用一次;每重新赋一次控制字都要对高速计数器用 HSC 编程。 赞 转载(2) 分享 评论 复制地址 举报 更多已经是第一篇 |下一篇:工业搅拌电工 |标签: 计数器子程序高速计数器编程内存签名档undefined主人的热评日志 照明用 LED 驱动器解决方案 2011-03-11 16:00 oq 壮阳秘方 2011-01-17 14:10 弱电符号 2012-03-07 10:02本文最近访客