您现在的位置是:首页 > PLC技术 > PLC技术

S7-200系列PLC的高速计数器的初始化

来源:艾特贸易2017-06-04

简介由于高速计数器的 HDEF 指令在进入 RUN 模式后只能执行 1 次,为了减少程序运行时间,优化程序结构,一般以子程序的形式进行初始化。下面以 HC0 为例,介绍高速计数器的各个工作模式

    由于高速计数器的HDEF指令在进入RUN模式后只能执行1次,为了减少程序运行时间,优化程序结构,一般以子程序的形式进行初始化。下面以HC0为例,介绍高速计数器的各个工作模式的初始化步骤。    (1)模式012的初始化。    ·利用SM0.1来调用一个初始化子程序。    ·在初始化子程序中,根据需要向SMB47装入控制字节。例如,    SMB47=16#F8,其意义是:允许计数,允许写入新的当前值,允许写入新的    设定值,计数方向为增计数,启动和复位信号均为高电平有效。    ·执行HDEF指令,其输入参数为:HSC端为1(选择1号高速计数器),    MODE端为0/1/2(对应工作模式0,模式1,模式2)。    ·将希望的当前计数值装入SMD48(装入0可进行计数器清零操作)。    ·将希望的设定值装入SMD52    ·如果希望捕获当前值等于设定值的中断事件,编写与中断事件号13相关联的中断服务程序。    ·如果希望捕获外部复位中断事件,编写与中断事件号15相关联的中断服务程序。    ·执行ENI(全局开中断)指令。    ·执行HSC指令。    ·退出初始化子程序。    下面介绍在STEP 7开发环境中使用指令向导初始化HSCI的工作模式0    在编辑界面,选择【工具】/【指令向导】命令,如图5-16所示,弹出如图5-17所示的【指令向导】对话框,选择HSC,然后单击按钮,弹出如图5-18所示的对话框。
打开指令向导
    5-16    打开指令向导
【指令向导】对话框
    5-17    【指令向导】对话框    在图5-18中,选择希望配置计数器为HC1和其工作模式0,选择完毕后单击按钮,弹出如图5-19所示的对话框。
选择需要使用的HC1和模式0
    5-18    选择需要使用的HC1和模式0    在图5-19中,写上HSC1初始化用的子程序名称“HSC1_INIT”或默认名称,并写上初始状态HSC1的设定值(本例是40)、当前值(本例是0)和计数方向。选择完毕后单击按钮,进入如图5-20所示的对话框。
HSC1初始化
    5-19    HSC1初始化    在图5-20中,选择“当前值等于预置值(CV=PV)时中断”并写上该中断事件联系的中断程序名称,本例中采用默认名称,同时选择在该中断程序里改变HSCI的参数步骤个数“1”,选择完毕后单击按钮,进入图5-21所示的对话框。
声明使用当前值等于预置值中断
    5-20    声明使用当前值等于预置值中断    在图5-21中的动态参数更新界面里,更新PV为“4”,更新CV为“44”,更新计数方向为“减”,选择完毕后单击按钮,进入图5-22所示的对话框。
声明更新预置值和当前值及计数方向
    5-21    声明更新预置值和当前值及计数方向    在图5-22中,可以看到向导按照前面步骤生成的初始化子程序和中断程序名称,单击按钮,在弹出的【完成】对话框中单击按钮,如图5-23所示。
向导生成的程序名称
    5-22    向导生成的程序名称
【完成】对话框
    5-23    【完成】对话框    在程序编辑画面,打开项目中的程序块或视图中的程序块可以看到向导生成的初始化子程序和当前值等于设定值的中断程序。    (2)模式345的初始化    ·利用SM0.1来调用一个初始化子程序。    ·在初始化子程序中,根据需要向SMB47装入控制字节。例如,    SMB47=16#F8,其意义是:允许计数,允许写入新的当前值,允许写入新的    设定值,计数方向为增计数,启动和复位信号均为高电平有效。    ·执行HDEF指令,其输入参数为:HSC端为1(选择1号高速计数器),    MODE端为3/4/5(对应工作模式3,模式4,模式5)。    ·将希望的当前值装入SMD48(装入0可进行计数器清零操作)。    ·将希望的设定值装入SMD52    ·如果希望捕获当前值等于设定值的中断事件,编写与中断事件号13相关联的中断服务程序。    ·如果希望捕获计数方向改变的中断事件,编写与中断事件号14相关联的中断复位程序。    ·如果希望捕获外部复位中断事件,编写与中断事件号15相关联的中断服务程序。    ·执行ENI(全局开中断)指令。    ·执行HSC指令。    ·退出初始化子程序。    (3)模式678的初始化。    ·利用SM0.1来调用一个初始化子程序。    ·在初始化子程序中,根据需要向SMB47装入控制字节。例如,    SMB47=16#F8,其意义是:允许计数,允许写入新的当前值,允许写入新的    设定值,计数方向为增计数,启动和复位信号均为高电平有效。    ·执行HDEF指令,其输入参数为:HSC端为1(选择1号高速计数器),    MODE端为6/7/8(对应工作模式6,模式7,模式8)    ·将希望的当前值装入SMD48(装入0可进行计数器清零操作)。    ·将希望的设定值装入SMD52    ·如果希望捕获当前值等于设定值的中断事件,编写与中断事件号13相关联的中断服务程序。    ·如果希望捕获计数方向改变的中断事件,编写与中断事件号14相关联的中断复位程序。    ·如果希望捕获外部复位中断事件,编写与中断事件号15相关联的中断服务程序。    ·执行ENI(全局开中断)指令。    · 执行HSC指令。    ·退出初始化子程序。    (4)模式91011的初始化。    ·利用SM0.1来调用一个初始化子程序。    ·在初始化子程序中,根据需要向SMB47装入控制字节。例如,SMB47=16#F8,其意义是:允许计数,允许写入新的当前值,允许写入新的设定值,计数方向为增计数,启动和复位信号均为高电平有效,计数频率为4倍频。如果SMB47=16#FC,其意义是:允许计数,允许写入新的当前值,允许写入新的设定值,计数方向为增计数,启动和复位信号均为高电平有效,计数频率为1倍频。    ·执行HDEF指令,其输入参数为:HSC端为1(选择l号高速计数器),    MODE端为9/10/11(对应工作模式9,模式10,模式11)。    ·将希望的当前值装入SMD48(装入0可进行计数器清零操作)。    ·将希望的设定值装入SMD52    ·如果希望捕获当前值等于设定值的中断事件,编写与中断事件号13相关联的中断服务程序。    ·如果希望捕获计数方向改变的中断事件,编写与中断事件号14相关联的中断复位程序。    ·如果希望捕获外部复位中断事件,编写与中断事件号15相关联的中断服务程序。    ·执行ENI(全局开中断)指令。    ·执行HSC指令。    ·退出初始化子程序。    例:将HSC1定义为工作模式11,控制字节(SMB47)=16#F8,设定值(SMD52)=50,当前值(CV)等于设定值(PV),响应中断事件。因此用中断事件13,连接中断服务程序INT_0。程序见表5-33    设计步骤    ①选择计数器和工作模式。    ②设置控制字节。    ③设置当前值(起始值)。    ④设置预设值(目标数值)。    ⑤分配和启用中断例行程序。    ⑥激活高速计数器。    5-33    高速计数器初始化
高速计数器初始化