高速计数器常见问题

如何在高速计数器断电或停机后实现数据保持?

答: 有两种方法,分别使用CTRL_HSC指令和CTRL_HSC_EXT指令。

首先配置高速计数器:

1

在设备视图>HSC_1>属性>常规,启用该高速计数器。

图 01

2

在设备视图>HSC_1>属性>功能,定义计数类型为计数。

图 02

3

在设备视图>HSC_1>属性>I/O地址,使用缺省地址1000作为高速计数器地址。

图 03

方法1:使用CTRL_HSC指令

1


添加一个新的 DB 命名为 DB HSC retain,并且创建一个DINT数据元素,命名为HSC_1用于保存高速计数器的值。为了实现这个功能,HSC_1通过勾选保持项实现数据保持。

图 04

2

插入 Cyclic interrupt (循环中断)OB201,设置中断时间为 10 ms (也可以根据需要改变这个时间)。然后在 OB201 中将高速计数器的值 ID1000:P 送到 "DB HSC retain".HSC_1 中。这样,高速计数器的值每10ms 送到 DB 中保存。

图 05

3

创建Startup(启动OB)OB100,并且编程将保存的数值 "DB HSC retain".HSC_1 送到 NEW_CV,并且置位 CV 位。使得在CPU 启动时,保存的值被设置成当前值。

图 06

4

在 OB1 中编程 CTRL_HSC ,再将保存的值设为当前值后,复位 CV 位。

图07

方法2:使用CTRL_HSC_EXT指令

1

添加一个新的 DB 命名为 DB HSC retain,并且创建一个DINT数据元素,命名为HSC_1用于保存高速计数器的值。为了实现这个功能,HSC_1通过勾选保持项实现数据保持。此外创建系统数据类型HSC_Count的变量Static_1用于CTRL_HSC_EXT指令。

图 08

2

插入 Cyclic interrupt (循环中断)OB201,设置中断时间为 10 ms (也可以根据需要改变这个时间)。然后在 OB201 中将高速计数器的值 ID1000:P 送到 "DB HSC retain".HSC_1 中。这样,高速计数器的值每10ms 送到 DB 中保存。


图 09
3

创建Startup(启动OB)OB100,并且编程将保存的数值 "DB HSC retain".HSC_1 送到新当前值且置位触发条件和高速计数器的软件门,使得在CPU 启动时,保存的值被设置成当前值。

图 10

4

在 OB1 中编程 CTRL_HSC_EXT ,将保存的值设为当前值后,复位触发位。

图 11

高速计数器的计数范围是什么?

答: 高速计数器的计数范围是-231~231-1。当向上计数到最大值231-1时,会跳回到-231;当向下计数到最小值-231时,会跳回231-1。

断电停机或复位后,高速计数器的值会复位到什么值?

答: CPU 断电或重启后,高速计数器的值会复位到初始值;如果执行了外部复位,高速计数器的值会复位为0。

不编写 CTRL_HSC,高速计数器是否可以计数?

答: 只要在硬件配置里使能并组态了高速计数器,不编写 CTRL_HSC,高速计数器就可以正常计数。CTRL_HSC 只是完成参数写入的功能。

为什么高速计数器的数值不增加,总是停在一个固定的值?

答: 如果编程了 CTRL_HSC,当置位 CV 将 NEW_CV 写入当前值后,CV位不会自动复位为0,这时程序会一直将 NEW_CV写入当前值,导致高速计数器不继续计数而保持在固定的 NEW_CV 值。因此必须编程复位 CV,才能避免该错误的发生。

如果高速计数器定义为 "运动轴" 计数,程序中是否还可以访问 ID1000:P 的值?

答: 如果高速计数器用做内部的运动控制的计数,此时程序中不能再访问 ID1000:P 的值,否则会造成 I/O 访问错误。如果没有编程GET_ERROR 或 GET_ERR_ID 指令,还会造成 CPU 停机。

为什么 CTRL_HSC 的 "STATUS" 会返回 "80C0" 多次访问高速计数器错误?

答: 如果高速计数器用做内部的运动控制的计数,则CTRL_HSC 的 "STATUS" 就会返回 "80C0" 多次访问高速计数器错误。

使用信号板 SB1221 4DI (CPU V3.0及早期版本)最多可以接入多少组高速计数器 ?

答: 最多2组,所使用的高速计数器号可以是 HSC1、HSC2、HSC5、HSC6其中2组。

为什么S7-1200 高速计数器只能检测到低频率的脉冲信号?

答: 在 S7-1200 CPU 和 SB 信号板的属性中,数字量输入通道的输入滤波器默认设置值为 6.4 millisec,该输入滤波时间对应的高速计数器能检测到的最大频率为 78Hz。

因此如果使用该默认值,且 S7-1200 CPU 或 SB 信号板接入的高速输入脉冲超过 78Hz,则 S7-1200 CPU 或SB 信号板过滤掉该频率的输入脉冲。

要正确使用 S7-1200 CPU 和 SB 信号板高速计数功能,需要根据实际接入的高速输入脉冲最大频率,在"属性—常规—数字量输入通道设置"输入滤波器时间。

V4.0 或更高版本的 S7-1200 CPU 和 SB 信号板,每个数字量输入点都可设置输入滤波器时间, 如下图 12、13 所示:

图 12. 设置 S7-1200 CPU 输入滤波器时间

图 13. 设置 SB 信号板输入滤波器时间

下表 1 显示了输入滤波器时间和可检测到的最大输入频率:

输入滤波器时间 可检测到的最大输入频率
0.1 microsec 1MHz
0.2 microsec 1MHz
0.4 microsec 1MHz
0.8 microsec 625kHz
1.6 microsec 312kHz
3.2 microsec 156kHz
6.4 microsec 78kHz
10 microsec 50kHz
12.8 microsec 39kHz
20 microsec 25kHz
0.05 millisec 10kHz
0.1 millisec 5kHz
0.2 millisec 2.5kHz
0.4 millisec 1.25kHz
0.8 millisec 625Hz
1.6 millisec 312Hz
3.2 millisec 156Hz
6.4 millisec 78Hz
10 millisec 50Hz
12.8 millisec 39Hz
20 millisec 25Hz

表 1 输入滤波器时间和可检测到的最大输入频率

S7-1200 的高速计数器输入通道是否固定?

答: 早期固件版本的高速计数器输入通道是固定的。

V4.0 或更高版本的 S7-1200 的高速计数器输入通道可以在其属性中更改。如图 14 所示:

图 14. 更改高速计数器输入通道

S7-1200 CPU 最多支持多少个高速计数器?

答: 早期固件版本的S7-1200 CPU 中,CPU 1211C 最多支持3个单相的高速计数器,CPU 1212C 最多支持 4 个单相的高速计数器,CPU1214C 和 CPU1215C最 多支持6个单相的高速计数器。

V4.0或更高版本的所有型号的S7-1200 CPU 都支持最多6个单相高速计数器。

需要注意的是V4.0或更高版本的 S7-1200 CPU 有默认的高速计数器通道地址,而 CPU 1211C 数字量输入地址仅有 6 个,为I0.0-I0.5,CPU 1212C 数字量输入地址仅有8个,为I0.0-I0.7。

因此如果需要使用 CPU 1211C 的 HSC4, HSC5, HSC6 或 CPU 1212C 的 HSC5, HSC6 ,则需要更改其硬件输入地址到有效的范围才能正常使用。以 CPU1211C 举例,如图 15、16、17所示:

图 15. 更改 HSC4 的硬件输入地址

图 16. 更改 HSC5 的硬件输入地址

图 17. 更改 HSC6 的硬件输入地址