1 引言
实际工艺控制中经常会碰到高速的脉冲信号,比如增量型编码器,一些流量计等,要正确对这些高速的脉冲信号计数和处理,需要用到PLC的高速计数器功能。高速计数器可对标准计数器无法控制的高速事件进行计数。
2 高速计数器数量及性能
·紧凑型型号共支持四个 HSC 设备(HSC0、 HSC1、 HSC2 和 HSC3)。
·SR 和 ST 型号(固件版本V2.3以上)共支持六个 HSC 设备(HSC0、 HSC1、 HSC2、 HSC3、 HSC4 和HSC5)。
标准CPU | SR20/ST20 | SR30/ST30 | SR40/ST40 | SR60/ST60 |
高速计数器 | 6 | 6 | 6 | 6 |
单相/双相 | 4 @ 200 KHz + | 5 @ 200 KHz + | 4 @ 200 KHz + | 4 @ 200 KHz + |
2 @30 KHz | 1 @30 KHz | 2 @30 KHz | 2 @30 KHz | |
A/B相 | 2 @ 100 KHz+ 2@20Kz | 3 @ 100 KHz+ 1@20Kz | 2 @ 100 KHz+ 2@20Kz | 2 @ 100 KHz+ 2@20Kz |
经济CPU | CR20S | CR30S | CR40S | CR60S |
高速计数器 | 4 | 4 | 4 | 4 |
单相/双相 | 4 @100 KHz | 4 @100 KHz | 4 @100 KHz | 4 @100 KHz |
A/B相 | 2 @ 50 KHz | 2 @ 50 KHz | 2 @ 50 KHz | 2 @ 50 KHz |
3 高速计数器的分配和功能
HSC0、 HSC2、 HSC4 和 HSC5 支持八种计数模式(模式 0、 1、 3、 4、 6、 7、 9 和10)
HSC1 和 HSC3 只支持一种计数模式(模式 0)
高速计数器输入连接(时钟、方向和复位)必须使用 CPU 的集成输入通道,信号板或扩展模块上的输入通道不能用于高速计数器
所有高速计数器输入均连接至内部输入滤波电路。 UN-200SMART 的默认输入滤波设置为 6.4 ms,这样便将最大计数速率限定为 78 Hz。如需以更高频率计数,必须更改滤波器设置。见下图:
已用作高速计数的输入点不能用于其他用途,例如HSC0 的所有计数模式始终使用 I0.0,因此使用HSC0时,无法将I0.0用于其它用途。
下表所示为高速计数器可检测到的各种输入滤波组态的最大输入频率:
4 输入逻辑电平有效电压范围
5 高速计数器寻址
下面以HSC0(高速计数器0)的控制字为例介绍特殊功能寄存器的每个位的实际作用。
6 高速计数器的编程
要使用高速计数器,程序必须执行以下基本任务:
①定义计数器和模式(对每个计数器执行一次 HDEF 指令)
②在 SM 存储器中设置控制字节
③在 SM 存储器中设置当前值(起始值)
④在 SM 存储器中设置预设值(目标值)
⑤分配并启用相应的中断例程
⑥激活高速计数器(执行 HSC 指令)
指令介绍:
HDEF,高速计数器定义指令。定义高速计数器的模式。
HSC,高速计数器指令。根据高速计数器的特殊存储器位的状态组态和控制高速计数器。
以上步骤可能较为麻烦且容易出错,也可以使用高速计数器向导简化编程任务。向导设置的过程就是对控制字节哪些地址赋值的过程。
完成向导设置后会自动生成子程序,子程序的内容就是上面所说的基本任务的创建。
1) 菜单栏选择工具》向导》高速计数器
2) 选择高速计数器编号
3) 定义高速计数器的名称
4) 选择模式
5) 定义高速计数器的计数方向等特性,这里的设定将会影响特殊寄存器里的控制字节的默认值。
6)配置中断
一个高速计数器最多可以有 3 个中断事件,在白色方框中填写中断服务程序名称或者使用默认名称。
当前值等于预置值时产生的中断,通过向导,可以在该中断的服务程序中重新设置高速计数器的参数,如预置值、当前值。一个这样的过程称为‘一步‘,最多可设置 10 步。
高速计数中相关的中断事件如下:
7) 完成向导
8) 调用子程序
HSC_INIT 为初始化子程序,需要主程序块中使用 SM0.1 或一条边沿触发指令调用一次此子程序后高速计数器才能正常工作。
向导生成的中断服务程序及子程序都未上锁,可以根据自己的控制需要进行修改。
7 指令介绍
8 常见问题
8.1 如何断电后保持高速计数器的当前值
UN 200 SMART的断电数据保持不支持高速计数器的范围设置,因此高速计数器的当前值在CPU每次断电后都会复位为数值0。要使高速计数器的当前值在CPU断电重启后依然保持,需要通过编程来实现。思路:首先,在除了第一个扫描周期之外的其它周期,需要将高速计数器的当前值传送到V 区寄存器中。然后,在上电的第一周期将V区寄存器存储的数值传送到高速计数器的当前值SMD中,保证高速计数器以V区的数值为初始值开始计数,并初始化高速计数器。最后,在系统块的断电数据保持处设置V区寄存器为断电保持区域。
以高速计数器0为例,编程如下:
8.2 高速计数器如何复位到0?
方法一:选用带外部复位模式的高速计数器,当复位信号有效时,高速计数器复位为0。
方法二:内部程序复位,将高速计数器的更新当前值控制字节相关位置1,并把0
赋给特殊寄存器SMD38,执行HSC指令后,高速计数器复位为0。