S7-1200 V4.1 CPU 高速计数器

S7-1200产品从固件版本V4.1起新增了高速计数器的周期测量功能,该功能通过CTRL_HSC_EXT扩展高速计数器指令实现。利用CTRL_HSC_EXT指令,程序可以按指定时间周期访问指定高速计数器的输入脉冲数量,以纳米级精度确定输入脉冲之间的时间长度。

其他高速计数性能与V4.0 固件版本完全兼容,具体可参见“S7-1200 V4.0 高速计数器特性” 内容。

CTRL_HSC 高速计数器组态及编程

S7-1200产品固件版本V4.1也可以使用 CTRL_HSC 高速计数器功能。

高速计数器寻址,事件组态和指令使用,请参考以下章节:

高速计数器组态及编程

CTRL_HSC_EXT 扩展高速计数器组态及编程

S7-1200产品从固件版本V4.1起新增了高速计数器的周期测量功能,该功能通过 CTRL_HSC_EXT 扩展高速计数器指令实现。如下:

周期测量 CTRL_HSC_EXT 扩展高速计数器指令

在博途软件集成的工艺指令文件夹中可以找到CTRL_HSC_EXT指令,如图1,图2所示。该指令各参数含义请参考图3。

图1 指令文件夹

图2 CTRL_HSC_EXT指令

图3 参数数据类型

全部CTRL_HSC_EXT指令都需要使用系统定义的数据结构(存储在用户自定义的全局背景数据块中)存储计数器数据。该数据块要被指定用作CTRL_HSC_EXT的“CTRL”输入参数,其创建和使用步骤如下:

  1. 新添加一个全局DB块(例如图4中名称为MYDB)。
  2. 在此DB块中找到一个空行,添加变量(例如图4中名称为 my period),在此变量的数据类型一列,手动输入“HSC_Period”并回车。注意:数据类型下拉控件里并没有此类型,所以必须用户正确输入该名称。
  3. 检查新添加变量是否是一个可以扩展的通信数据结构。
  4. 在梯形图CTRL_HSC_EXT 指令的 CTRL引脚上链接刚刚生成的数据块变量(例如“MYDB.my period”)。

图4 全局数据块示例

HSC_Period 数据结构如图5所示:

图5 HSC_Period数据结构


其中,

① ElapsedTime返回当前周期测量间隔最后一个脉冲和前一个周期测量间隔最后一个脉冲之间的间隔时间(单位:纳秒)。

若 EdgeCount = 0, 则 ElapsedTime 为自最后一个脉冲算起的累计时间。ElapsedTime的范围为 0 至 4,294,967,280 纳秒(0x0000 0000 至 0xFFFF FFF0)。 返回值若为 429496295 (0xFFFFFFFF),则表示出现周期溢出。 自 0xFFFF FFF1 至 0xFFFF FFFE 的值为保留值。 

如果 ElapsedTime 为 0 (没有收到输入脉冲)或 0xFFFF FFFF(出现周期溢出),则 EdgeCount 中的值无效。

② EdgeCount 返回最近一个测量间隔的输入脉冲的数量。 EdgeCount 必须大于等于“1”才能计算脉冲之间的间隔时间。 该周期采用以下公式计算:

周期 = ElapsedTime/EdgeCount


以下图6和图7描述了周期测量的测量原理。

图6:一个测量间隔中出现多个计数事件

图7:多个测量间隔出现0或1个计数事件

周期测量组态示例

下面通过一个例子说明高速计数器周期测量的组态过程。

示例:使用S7-1200的HSC1接收 1000Hz的脉冲信号,希望检测该脉冲的周期时间。

首先,编辑CPU设备组态并为HSC1分配属性。通过选择该HSC的"启用"选项启用HSC功能。

图8 启用高速计数功能

启用HSC之后,组态计数类型为"时间段",选择频率测量周期,这里选择1s的测量周期。

图9 组态HSC其他参数

请留意组态的高速计数器的硬件标识符,以备后续编程使用,如图10。

图10 HSC 硬件标识符

硬件组态完成后,创建全局DB块,步骤如前所述:

图11 创建全局数据块

创建好DB块后,在梯形图中调用CTRL_HSC_EXT指令,在其"HSC"管脚处填写高速计数器的硬件标识符(如图10),将"MYDB.my period"填写到指令的"CTRL"管脚上,并将输出管脚分配相应的存储区用来监视状态。

图12 CTRL_HSC_EXT指令

将组态好的硬件和程序下载到S7-1200 CPU中。

手动修改变量EnHSC=TRUE,然后可以在线监控全局数据块MYDB的数据变化,如图13所示:

图13 监控结果

根据周期计算公式,

脉冲周期=ElapsedTime/EdgeCount=1000291000/1004=996305 ns ≈0.001 s

由此可以得出所测量的脉冲信号周期为0.001秒。

如果修改NewPeriod为100,然后给EnPeriod信号一个上升沿,则可以修改测量周期为100ms,如图14所示:

根据周期计算公式,

脉冲周期=ElapsedTime/EdgeCount=100627000/101=996306 ns ≈0.001 s

由此可以得出所测量的脉冲信号周期为0.001秒。