启程自动化成立于年,培训项目主打西门子PLC编程系统集成、工业机器人编程、EPLAN电气设计、视觉等培训与技术服务的机构。推荐高薪就业,越努力越幸运
假设在旋转机械上有单相增量编码器作为反馈,接入到S7-CPU,要求在计数25个脉冲时,计数器复位,置位M0.5,并设定新预置值为50个脉冲,当计满50个脉冲后复位M0.5,并将预置值再设为25,周而复始执行此功能。针对此应用,选择CPUC,高速计数器为:HSC1。模式为:单相计数,内部方向控制,无外部复位。脉冲输入接入I0.0,使用HSC1的预置值中断(CV=RV)功能实现此应用。组态步骤:
先在设备与组态中,选择CPU,单击属性,激活高速计数器,并设置相关参数。此步骤必须事先执行,S7-的高速计数器功能必须要先在硬件组态中激活,才能进行下面的步骤。添加硬件中断块,关联相对应的高速计数器所产生的预置值中断,在中断块中添加高速计数器指令块,编写修改预置值程序,设置复位计数器等参数。将程序下载,执行功能。
硬件组态如图1所示,进入CPU的硬件视图。图1.选中CPU
①展开PLC,左键双击设备组态
②在CPU硬件视图,左键选中CPU
如图2所示,启用高速计数器。图2.选择属性打开组态界面
①左键选择属性
②在导航栏中选择“高速计数器(HSC)”,在HSC1中选择“常规”
③勾选“启用该高速计数器”如图3所示,设置高速计数器基本设置。
图3.激活高速计数功能
①在HSC1中选择"功能"
②计数类型选择“计数”
③工作模式选择“单相”
④计数方向取决于选择“用户程序(内部方向控制)”
⑤初始计数方向选择“加计数”如图4所示,设置计数器初始值。图4.计数器初始值①在HSC1中选择"初始值"
②初始计数器值设置“0”
③初始参考值设置“25”
如图5所示,组态事件。图5.事件组态
①在HSC1中选择"事件组态"
②激活“为计数器值等于参考值这一事件生成中断”
③左键点击该按钮在弹出页面选择所需的硬件中断
④如果没有硬件中断或者没有所需要的硬件中断,则左键点击按钮“新增”,会弹出页面,如图6所示图6.添加新的硬件中断
①选择"Hardwareinterrupt"
②注意该硬件中断的中断OB编号
③左键点击“确定”按钮
如图7所示,设置硬件输入点。
图7.设置输入点
①在HSC1中选择"硬件输入"
②在时钟发生器输入中选择所需的I点,例如例子中的“I0.0”如图8所示,查看HSC的计数值地址。图8.计数值地址
①在HSC1中选择"I/O地址"
②起始地址到结束地址为HSC实际计数器值的地址,图中地址为ID。
③组织块和过程映像一般设置默认,可以设置计数值在指定OB更新。
如图9所示,设置I点的输入滤波器时间。
图9.输入滤波器
①在CPU或者信号板中找到使用的通道
②在输入滤波器设置合适的滤波值,V4.0以后版本需要设置,具体可以参考FAQ页面,为什么S7-高速计数器只能检测到低频率的脉冲信号。至此硬件组态部分已经完成,下面进行程序编写
程序编写如图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后即可执行,当前的计数值可在ID中读出,关于高速计数器指令块,若不需要修改当前值、参考值等参数,可不需要调用,系统仍然可以计数。
高速计数器常见问题如何在高速计数器断电或停机后实现数据保持?
答:有两种方法,分别使用CTRL_HSC指令和CTRL_HSC_EXT指令。
首先配置高速计数器:
1
在设备视图HSC_1属性常规,启用该高速计数器。
图01
2
在设备视图HSC_1属性功能,定义计数类型为计数。
图02
3
在设备视图HSC_1属性I/O地址,使用缺省地址作为高速计数器地址。
图03
方法1:使用CTRL_HSC指令
1
添加一个新的DB命名为DBHSCretain,并且创建一个DINT数据元素,命名为HSC_1用于保存高速计数器的值。为了实现这个功能,HSC_1通过勾选保持项实现数据保持。
图04
2
插入Cyclicinterrupt(循环中断)OB,设置中断时间为10ms(也可以根据需要改变这个时间)。然后在OB中将高速计数器的值ID:P送到"DBHSCretain".HSC_1中。这样,高速计数器的值每10ms送到DB中保存。
图05
3
创建Startup(启动OB)OB,并且编程将保存的数值"DBHSCretain".HSC_1送到NEW_CV,并且置位CV位。使得在CPU启动时,保存的值被设置成当前值。
图06
4
在OB1中编程CTRL_HSC,再将保存的值设为当前值后,复位CV位。
图07
方法2:使用CTRL_HSC_EXT指令
1
添加一个新的DB命名为DBHSCretain,并且创建一个DINT数据元素,命名为HSC_1用于保存高速计数器的值。为了实现这个功能,HSC_1通过勾选保持项实现数据保持。此外创建系统数据类型HSC_Count的变量Static_1用于CTRL_HSC_EXT指令。
图08
2
插入Cyclicinterrupt(循环中断)OB,设置中断时间为10ms(也可以根据需要改变这个时间)。然后在OB中将高速计数器的值ID:P送到"DBHSCretain".HSC_1中。这样,高速计数器的值每10ms送到DB中保存。
图09
3
创建Startup(启动OB)OB,并且编程将保存的数值"DBHSCretain".HSC_1送到新当前值且置位触发条件和高速计数器的软件门,使得在CPU启动时,保存的值被设置成当前值。
图10
4
在OB1中编程CTRL_HSC_EXT,将保存的值设为当前值后,复位触发位。
图11
高速计数器的计数范围是什么?
答:高速计数器的计数范围是-~-1。当向上计数到最大值-1时,会跳回到-;当向下计数到最小值-时,会跳回-1。
断电停机或复位后,高速计数器的值会复位到什么值?
答:CPU断电或重启后,高速计数器的值会复位到初始值;如果执行了外部复位,高速计数器的值会复位为0。
不编写CTRL_HSC,高速计数器是否可以计数?
答:只要在硬件配置里使能并组态了高速计数器,不编写CTRL_HSC,高速计数器就可以正常计数。CTRL_HSC只是完成参数写入的功能。
为什么高速计数器的数值不增加,总是停在一个固定的值?
答:如果编程了CTRL_HSC,当置位CV将NEW_CV写入当前值后,CV位不会自动复位为0,这时程序会一直将NEW_CV写入当前值,导致高速计数器不继续计数而保持在固定的NEW_CV值。因此必须编程复位CV,才能避免该错误的发生。
如果高速计数器定义为"运动轴"计数,程序中是否还可以访问ID:P的值?
答:如果高速计数器用做内部的运动控制的计数,此时程序中不能再访问ID:P的值,否则会造成I/O访问错误。如果没有编程GET_ERROR或GET_ERR_ID指令,还会造成CPU停机。
为什么CTRL_HSC的"STATUS"会返回"80C0"多次访问高速计数器错误?
答:如果高速计数器用做内部的运动控制的计数,则CTRL_HSC的"STATUS"就会返回"80C0"多次访问高速计数器错误。
使用信号板SBDI(CPUV3.0及早期版本)最多可以接入多少组高速计数器?
答:最多2组,所使用的高速计数器号可以是HSC1、HSC2、HSC5、HSC6其中2组。
为什么S7-高速计数器只能检测到低频率的脉冲信号?
答:在S7-CPU和SB信号板的属性中,数字量输入通道的输入滤波器默认设置值为6.4millisec,该输入滤波时间对应的高速计数器能检测到的最大频率为78Hz。
因此如果使用该默认值,且S7-CPU或SB信号板接入的高速输入脉冲超过78Hz,则S7-CPU或SB信号板过滤掉该频率的输入脉冲。
要正确使用S7-CPU和SB信号板高速计数功能,需要根据实际接入的高速输入脉冲最大频率,在"属性—常规—数字量输入通道设置"输入滤波器时间。
V4.0或更高版本的S7-CPU和SB信号板,每个数字量输入点都可设置输入滤波器时间,如下图12、13所示:
图12.设置S7-CPU输入滤波器时间
图13.设置SB信号板输入滤波器时间
下表1显示了输入滤波器时间和可检测到的最大输入频率:
输入滤波器时间
可检测到的最大输入频率
0.1microsec
1MHz
0.2microsec
1MHz
0.4microsec
1MHz
0.8microsec
kHz
1.6microsec
kHz
3.2microsec
kHz
6.4microsec
78kHz
10microsec
50kHz
12.8microsec
39kHz
20microsec
25kHz
0.05millisec
10kHz
0.1millisec
5kHz
0.2millisec
2.5kHz
0.4millisec
1.25kHz
0.8millisec
Hz
1.6millisec
Hz
3.2millisec
Hz
6.4millisec
78Hz
10millisec
50Hz
12.8millisec
39Hz
20millisec
25Hz
表1输入滤波器时间和可检测到的最大输入频率
S7-的高速计数器输入通道是否固定?
答:早期固件版本的高速计数器输入通道是固定的。
V4.0或更高版本的S7-的高速计数器输入通道可以在其属性中更改。如图14所示:
图14.更改高速计数器输入通道
S7-CPU最多支持多少个高速计数器?
答:早期固件版本的S7-CPU中,CPUC最多支持3个单相的高速计数器,CPUC最多支持4个单相的高速计数器,CPUC和CPUC最多支持6个单相的高速计数器。
V4.0或更高版本的所有型号的S7-CPU都支持最多6个单相高速计数器。
需要注意的是V4.0或更高版本的S7-CPU有默认的高速计数器通道地址,而CPUC数字量输入地址仅有6个,为I0.0-I0.5,CPUC数字量输入地址仅有8个,为I0.0-I0.7。
因此如果需要使用CPUC的HSC4,HSC5,HSC6或CPUC的HSC5,HSC6,则需要更改其硬件输入地址到有效的范围才能正常使用。以CPUC举例,如图15、16、17所示:
图15.更改HSC4的硬件输入地址
图16.更改HSC5的硬件输入地址
图17.更改HSC6的硬件输入地址
来源:网络侵删
课程咨询报名+老师