西门子S7-200CPU上的集成高速计数器介绍

s7-200 cpu具有集成的、硬件高速计数器。
cpu221和cpu222可以使用4个30khz单相高速计数器或2个20khz的两相高速计数器,而cpu224和cpu226可以使用6个30khz单相高速计数器或4个20khz的两相高速计数器。
s7-200的新一代产品cpu224 xp 支持更高的计数速度。
高速计数器可以被配置为12种模式中的任意一种,但并不是所有计数器都能使用每一种模式。 在正交模式下,你可以选择一倍速或者四倍速计数速率。对于操作模式相同的计数器,其计数功能是相同的。
计数器共有四种基本类型:带有内部方向控制的单相计数器,带有外部方向控制的单相计数器,带有两个时钟输入的双相计数器和a/b相正交计数器。
表1. 高速计数器的模式及输入点:
(1) 支持模式 12。
高速计数器的实际输入要根据用户选择的高速计数器号和模式来确定,如上表。例:如果你选择了hsc0的模式1,则你的外部高速计数输入点应接在i0.0,外部复位点应接在i0.2。
如果用户使用了多个高速计数器,则被某一高速计数器占用了的输入点,其它高速计数器不能再使用。如hsc0的模式3已经占用了i0.1作为外部方向控制点,那么hsc3高速计数器就不能再使用了,因为它的计数输入点也是i0.1,与之冲突了。
(2) cpu 221/222 没有 hsc1 和 hsc2。
表2. 高速计数器的寻址
表2. 高速计数器的寻址
高速计数器的具体编程及相关的中断和其它参数,请参见《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”);不需要改变的设置,相应的控制位就不能设置
然后将所需 的值送入初始值和预置值控制寄存器
执行hsc指令