S7-200 CPU具有集成的、硬件高速计数器。
CPU221和CPU222可以使用4个30kHz单相高速计数器或2个20kHz的两相高速计数器,而CPU224和CPU226可以使用6个30kHz单相高速计数器或4个20kHz的两相高速计数器。
S7-200的新一代产品CPU224 XP 支持更高的计数速度。
高速计数器可以被配置为12种模式中的任意一种,但并不是所有计数器都能使用每一种模式。在正交模式下,你可以选择一倍速或者四倍速计数速率。对于操作模式相同的计数器,其计数功能是相同的。
计数器共有四种基本类型:带有内部方向控制的单相计数器,带有外部方向控制的单相计数器,带有两个时钟输入的双相计数器和A/B相正交计数器。
表1. 高速计数器的模式及输入点:
模式 描述 输入点 备注
HSCO I0.0 I0.1 I0.2 (1)
HSC1 I0.6 I0.7 I1.0 I1.1 (2)
HSC2 I1.2 I1.3 I1.4 I1.5 (2)
HSC3 I0.1 (1)
HSC4 I0.3 I0.4 I0.5
HSC5 I0.4
0 带有内部方向控制的单相计数器 时钟
1 时钟 复位
2 时钟 复位 启动
3 带有外部方向控制的单相计数器 时钟 方向
4 时钟 方向 复位
5 时钟 方向 复位 启动
6 带有增减计数时钟的双相计数器 增时钟 减时钟
7 增时钟 减时钟 复位
8 增时钟 减时钟 复位 启动
9 A/B相正交计数器 时钟A 时钟B
10 时钟A 时钟B 复位
11 时钟A 时钟B 复位 启动
12 只有 HSC0 和 HSC3 支持模式 12。
HSC0 计数高速脉冲输出 Q0.0;
HSC3 计数高速计数脉冲输出 Q0.1。
(1) 支持模式 12。
• 高速计数器的实际输入要根据用户选择的高速计数器号和模式来确定,如上表。例:如果你选择了HSC0的模式1,则你的外部高速计数输入点应接在I0.0,外部复位点应接在I0.2。
• 如果用户使用了多个高速计数器,则被某一高速计数器占用了的输入点,其它高速计数器不能再使用。如HSC0的模式3已经占用了I0.1作为外部方向控制点,那么HSC3高速计数器就不能再使用了,因为它的计数输入点也是I0.1,与之冲突了。
(2) CPU 221/222 没有 HSC1 和 HSC2。
表2. 高速计数器的寻址
高速计数器号 HSC0 HSC1 HSC2 HSC3 HSC4 HSC5
新当前值(仅装入) SMD38 SMD48 SMD58 SMD138 SMD148 SMD158
新预置值(仅装入) SMD42 SMD52 SMD62 SMD142 SMD152 SMD162
当前计数值(仅读出) HC0 HC1 HC2 HC3 HC4 HC5
高速计数器的具体编程及相关的中断和其它参数,请参见《S7-200系统手册》,上面有详细的阐述及例程。
STEP 7-Micro/WIN 提供了一个方便实用的高速计数器指令编程向导,用户可以简单快速地配置自己的高速计数器功能。
高速计数器模式 12
S7-200 CPU 从 23 版以上开始支持高速计数器模式 12。
只有 HSC0 和 HSC3 支持模式 12。 HSC0 计数高速脉冲输出 Q0.0;HSC3 计数高速计数脉冲输出 Q0.1。
用户既可以自己编程使用模式 12,也可以在配置高速脉冲输出功能时,通过简单的设置使能模式 12。
常问问题:
CPU 224 XP 的高速计数器模式 12,是否可以计数 30 KHz 以上的脉冲?
CPU 224 XP 支持最多 100 KHz 的高速脉冲输出。S7-200 系列 CPU 只有高速计数器 HSC0, HSC3 能够被设置为模式 12,使用的输入端子为I0.0, I0.1,而不是特高速输入端子:I0.3、I0.4、I0.5。非特高速脉冲信号输入端由于硬件电路的限制(如光电耦合等)只能支持最高 30 KHz 的高速脉冲输入。
用户使用高速计数器模式 12 时不需要任何外部连线,Q0.0(Q0.1) 与 I0.0(I0.1) 通过集成电路内部关联,越过了外部信号处理电路,因此 HSC0(HSC1) 可以计 100KHz 或者更高频率的脉冲。用户在使用向导配置 S7-200 内部 PTO/PWM 操作时,勾选“使用高速计数器HSCx(模式12)自动计数线性 PTO 生成的脉冲”即可。
高速计数器怎样占用输入点?
高速计数器根据被定义的工作模式,按需要占用CPU上的数字量输入点。每一个计数器都按其工作模式占用固定的输入点。在某个模式下没有用到的输入点,仍然可以用作普通输入点;被计数器占用的输入点(如外部复位),在用户程序中仍然可以访问到。
为什么高速计数器不能正常工作?
在程序中要使用初次扫描存储器位SM0.1来调用HDEF指令,而且只能调用一次。如果用SM0.0调用或者第二次执行HDEF指令会引起运行错误,而且不能改变第一次执行HDEF指令时对计数器的设定。
对高速计数器如何寻址? 为什么从SMDx中读不出当前的计数值?
可以直接用HC0;HC1;HC2;HC3;HC4;HC5对不同的高速计数器进行寻址读取当前值,也可以在状态表中输入上述地址直接监视高速计数器的当前值。SMDx不存储当前值,参见上述表2。
高速计数器的计数值是一个32位的有符号整数。
高速计数器如何复位到0?
• 选用带外部复位模式的高速计数器,当外部复位输入点信号有效时,高速计数器复位为0
• 也可使用内部程序复位,即将高速计数器设定为可更新初始值,并将初始值设为0,执行HSC指令后,高数计数器即复位为0
高速计数器的值在复位后是复位到初始值还是“0”值?
外部复位会将当前值复位到0值而不是初始值;内部复位则将当前值复位到初始值。如果你设定了可更新初始值,但在中断中未给初始值特殊寄存器赋新值,则在执行HSC 指令后,它将按初始化时设定的初始值赋值。
为何给高速计数器赋初始值和预置值时后不起作用,或效果出乎意料?
高速计数器可以在初始化或者运行中更改设置,如初始值、预置值。其操作步骤应当是:
1. 设置控制字节的更新选项。需要更新哪个设置数据,就把控制字节中相应的控制位置位(设置为“1”);不需要改变的设置,相应的控制位就不能设置
2. 然后将所需 的值送入初始值和预置值控制寄存器
3. 执行HSC指令
在 Micro/WIN 中的命令菜单中选择 Tools(工具) > Instruction Wizard(指令向导),然后在指令窗口中选择 HSC 向导,
图1.选择 HSC 向导
第一步,项目编译无错误后,选择HSC编号和模式,详细信息请见"表1.高速计数器的模式及输入点。
图2. 高速计数器及模式选择
第二步,配置初始化信息
图3. HSC 初始化选项
在上图中:
1. 为初始化子程序命名,或者使用默认名称。
2. 设置计数器预置值:可以为整数、双字地址或 符号名:如 5000、VD100、PV_HC1。用户可使用全局符号表中双字整数对应的符号名。如果用户输入的符号名尚未定义,点击‘下一步’后会看到:
点击‘Yes’。
填入地址和注释,注意:地址必须为双字地址, 注释可以不填。
3. 设置计数器初始值:可以为整数、双字地址或符号名:5000、VD100、CV_HC1。
4. 初始化计数方向:增,减。
5. 对于带外部复位端的高速计数器,可以设定复位信号为高电平有效或者低电平有效。
6. 对于带外部启动端的高速计数器,可以设定启动信号为高电平有效或者低电平有效。如果使用的高速计数器或工作模式没有外部复位或启动端,则对应选项为虚。
7. 使用A/B相正交计数器时,可以将计数频率设为1倍速或4倍速。使用非A/B相正交计数器时,此项为虚。
注意:所谓“高/低电平有效”指的是在物理输入端子上的有效逻辑电平,即可以使 LED 灯点亮的电平。这取决于源型/漏型输入接法,并非指实际电平的高、低。
第三步:配置中断事件及步骤总数:
图 4.配置中断及步骤
如图 4 所示,一个高速计数器最多可以有 3 个中断事件,在白色方框中填写中断服务程序名称或者使用默认名称:
在这里配置的中断事件并非必须,系由用户根据自己的控制工艺要求选用。
1. 外部复位输入有效值是中断,如果使用的高速计数器模式不具有外部复位端,则此项为虚。
2. 方向控制输入状态改变时的中断,有以下 3 种情况会产生该中断:
o 单项计数器的内部或外部方向控制位改变瞬间
o 双相计数器增、减时钟交替的瞬间
o A/B相脉冲相对相位(超前或滞后)改变时瞬间
3. 当前值等于预置值时产生的中断,通过向导,可以在该中断的服务程序中重新设置高速计数器的参数,如预置值、当前值。一个这样的过程称为‘一步‘。
4. 填写 HSC 的步数,最多可以设置 10 步。
第五步、定义高速计数器每一步中的操作:
图 5. HSC 第 1 步
在这里配置的是当前值等于设定值中断的服务程序中的操作:
1. 向导会自动为当前值等于预置值匹配一个新的中断服务程序,用户可以对其重新命名,或者使用默认的名称。
2. 勾选后,用户在右侧输入新的预置值。
3. 勾选后,用户在右侧输入新的当前值。
4. 如果选用的高速计数器模式有内部方向控制位。
5. 点击‘下一步‘,继续配置其余步。
第六步、完成向导:
图 6. 完成向导
第七步、调用子程序:
注意:
• HSC_INIT 为初始化子程序,请在主程序块中使用 SM0.1 或一条边沿触发指令调用一次此子程序。
• 向导生成的中断服务程序及子程序都未上锁,用户可以根据自己的控制需要进行修改。