分享

高级工程师的项目:高速计数器使用案例,含程序

 chuxuezhongyi 2021-05-22
关于启程

启程自动化成立于2012年,培训项目主打西门子PLC编程系统集成、工业机器人编程、EPLAN电气设计、视觉等培训与技术服务的机构。推荐高薪就业,越努力越幸运

假设在旋转机械上有单相增量编码器作为反馈,接入到S7-1200 CPU,要求在计数25个脉冲时,计数器复位,置位 M0.5,并设定新预置值为50个脉冲,当计满50个脉冲后复位M0.5,并将预置值再设为25,周而复始执行此功能。

针对此应用,选择CPU 1214C,高速计数器为:HSC1。模式为:单相计数,内部方向控制,无外部复位。脉冲输入接入I0.0,使用HSC1的预置值中断(CV=RV)功能实现此应用。

组态步骤:

先在设备与组态中,选择CPU,单击属性,激活高速计数器,并设置相关参数。此步骤必须事先执行,S7-1200的高速计数器功能必须要先在硬件组态中激活,才能进行下面的步骤。添加硬件中断块,关联相对应的高速计数器所产生的预置值中断,在中断块中添加高速计数器指令块,编写修改预置值程序,设置复位计数器等参数。将程序下载,执行功能。

硬件组态

如图1所示,进入CPU的硬件视图。

图1.选中CPU

图片

①展开PLC,左键双击设备组态

②在CPU硬件视图,左键选中CPU

如图2所示,启用高速计数器。

图2.选择属性打开组态界面

图片

①左键选择属性

②在导航栏中选择“高速计数器(HSC)”,在HSC1中选择“常规”

③勾选“启用该高速计数器”

如图3所示,设置高速计数器基本设置。

图片

图3.激活高速计数功能

①在HSC1中选择'功能'

②计数类型选择“计数”

③工作模式选择“单相”

④计数方向取决于选择“用户程序(内部方向控制)”

⑤初始计数方向选择“加计数”
如图4所示,设置计数器初始值。
图4. 计数器初始值
图片①在HSC1中选择'初始值'

②初始计数器值设置“0”

③初始参考值设置“25”

如图5所示,组态事件。
图5.事件组态

图片

①在HSC1中选择'事件组态'

②激活“为计数器值等于参考值这一事件生成中断”

③左键点击该按钮在弹出页面选择所需的硬件中断

④如果没有硬件中断或者没有所需要的硬件中断,则左键点击按钮“新增”,会弹出页面,如图6所示
图6. 添加新的硬件中断

图片

①选择'Hardware interrupt'

②注意该硬件中断的中断OB编号

③左键点击“确定”按钮

如图7所示,设置硬件输入点。

图片

图7. 设置输入点

①在HSC1中选择'硬件输入'

②在时钟发生器输入中选择所需的I点,例如例子中的“I0.0”
如图8所示,查看HSC的计数值地址。
图8. 计数值地址

图片

①在HSC1中选择'I/O地址'

②起始地址到结束地址为HSC实际计数器值的地址,图中地址为ID1000。

③组织块和过程映像一般设置默认,可以设置计数值在指定OB更新。

如图9所示,设置I点的输入滤波器时间。

图片

图9.输入滤波器

①在CPU或者信号板中找到使用的通道

②在输入滤波器设置合适的滤波值,V4.0以后版本需要设置,具体可以参考FAQ页面,为什么S7-1200 高速计数器只能检测到低频率的脉冲信号。
至此硬件组态部分已经完成,下面进行程序编写

程序编写

如图10所示,展开项目树中的PLC的程序块,选择所需的硬件中断。

图10. 打开硬件中断块

图片

①左键双击打开所需的硬件中断

如图11所示,在指令列表中找到工艺指令 -- 计数 -- CTRL_HSC_EXT。

图片

图11. 添加高速计数器

①在图中位置找到所需指令,将指令拖入硬件中断的程序编辑器,会产生如图12所示的调用选项,只能选择单个实例,单击“确定”按钮。

图片

图12. 定义指令背景数据块

如图13所示,新建DB,新建变量,数据类型为HSC_Count。

图片

图13. 高速计数器变量

①在数据类型处手动输入HSC_Count,输入完回车确认。

如图14所示,展开该变量。

图片

图14. 高速计数器变量

①将该变量设置为1,也就是高速计数器的软件门使能。

如图15所示,在硬件中断内编程。

图片

图 15. 硬件中断编程

程序段1:M0.5作为标志位,在OB1第一个扫描周期置位,参考图16,该标志位为1时指代参考值为25时,为0时指代参考值为50时。

当进入中断时,反转标志位,并赋值新的参考值。

程序段2:设置新的当前值为0,设置新的当前值使能,设置新的参考值使能。

程序段3:触发高速计数器指令

①输入高速计数器标识符,以HSC1为例,建议输入符号名“Local~HSC_1”。

②在CTRL处输入图13处新建的变量。

如图16所示,在OB1中编写程序,只需将图15中的程序段3复制到OB1即可。

图片

图16. OB1程序

至此程序编制部分完成,将完成的组态与程序下载到CPU后即可执行,当前的计数值可在ID1000中读出 ,关于高速计数器指令块,若不需要修改当前值、参考值等参数,可不需要调用,系统仍然可以计数。

高速计数器常见问题

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

答:有两种方法,分别使用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 的硬件输入地址

来源:网络侵删

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多