指令-程序控制+中断+高速计数.pptVIP

  • 18
  • 0
  • 约 54页
  • 2017-06-07 发布于湖北
  • 举报
指令-程序控制中断高速计数

HSC4操作模式 HSC5操作模式 模式0,1或2内部方向控制模式时序图 模式3,4或5外部方向控制模式时序图 模式6,7或8增/减双脉冲模式时序图 模式9,10或11正交1X模式时序图 模式9,10或11正交4X模式时序图 访问高速计数器(HC) 设定当前值和预置值 只有定义了计数器和计数器模式,才能对计数器的动态参数进行编程,每个高速计数器都有一个控制字节,包括下列几项:允许或禁止计数,计数方向控制(只能是模式0,1,2) ,或对所有其它模式的初始化,计数方向要装入的计数器,当前值和要装入的预置值,执行HSC 指令时要检验控制字节和有关的当前值及预置值 HSC控制字节 HSC状态字节 每个高速计数器都有一个状态字节,其中某些位指出了当前计数方向,当前值是否等于预置值,当前值是否大于预置值。 HSC使用举例 子程序SBR_0 中断子程序 程序演示 使用HSC向导完成HSC指令设置 HSC编程步骤 定义计数器和计数模式. 设定控制字节. 设当前值 (初始值). 设预设值 (目标值). 将中断子程序与中断事件连接,并开中断 激活高速计数器 用S7-200 的高速计数器HSC累计来自模拟量/频率转换器(A/F)的脉冲来模拟电压值 本例说明了如何利用CPU 224的高速计数器HSC及频率转换器来计算模拟电压。首先频率转换器将输入电压(0-10V)转换为矩形脉冲信号(0-2000Hz),再将此信号送入CPU 214高速记数器的输入端并累计脉冲数。当预置的间隔时间到后,通过累计脉冲数,计算出被测模拟电压值。 主程序在第一个扫描周期调用初始化程序SBR0,仅在第一个扫描周期标志位SM0.1=1由子程序实现初始化。首先,把高速计数器HSC1的控制字节SMB47置为16进制数‘FC’。其含义是:正方向计数,可更新预置值(PV),可更新当前值(CV),激活HSC1然后,用指令‘HDEF’把高速计数器HSC1置成工作模式0,即没有复位或起始输入,也没有外部的方向选择。 当前值SMD48复位为0预置值SMD52置为FFFF(十六进制)。 定时中断0间隔时间SMB34置为100ms,中断程序0分配给定时中断0(中断事件10),并允许中断。 用指令HSC1启动高速计数器。 每100ms调用一次中断程序0,读出高速计数器的数值后将其置零。通过HSC1计数值及变换关系(0-2kHz对应于0-10V)来求被测的模拟电压值。本例中,计数值仅除以2,然后置入输出字节QB0,以便通过LED来显示被测的电压值。显示值与10倍真实电压值相对应。 例如,计数值为200除以2是100,那么被测的模拟电压值就是10.0V。因为计数器100ms内共有200个计数脉冲,这正与2000Hz-10V相对应, 假设计数值为104,则实际电压值应为5.2V注意:定时中断间隔时间可在5-255ms的范围内变化,然而通过设立一个标志,可根据需要来延长高速计数器的求值和复位时间,这样就有更长的扫描间隔,以便提高精确度,同时也会带来更长的更新时间。例如,定时中断设为100ms,每调用一次,标志增加1,仅当标志满10时,才对高速计数器求值和复位。也就是说,10V电压可接收的最大脉冲为2000,这样,求值精确到5/1000V,即精确度是上例的10倍,但同时速度也减慢了10倍。 Network 1 // ***主程序*** LD SM0.1 // 仅首次扫描时,SM0.1=1 CALL SBR0 // 调用子程序0 ***子程序0*** SBR 0 Network 1 LD SM0.0 MOVB 16#FC, SMB47 // 设置HSC1控制字节:上升沿复位, //上升沿起动, 1*计数速率,正向计数,可改变方向, // 可更新PV, 可更新CV(当前值),激活HSC1 HDEF 1, 0 // HSC1工作于模式0 MOVD +0, SMD48 // HSC1当前值复位 MOVD 16#FFFF, SMD52 // 设置HSC1预置值,(本例未用) MOVB 100, SMB34 // 设置定时中断0间隔时间为100ms ATCH INT0, 10 // 指定定时中断事件10 调用中断程序0 ENI

文档评论(0)

1亿VIP精品文档

相关文档