在运动控制中,我们经常需要对脉冲计数,比如测量电机转速的旋转编码器或者简化版的接近开关信号。以西门子中低端PLC为例,在s7-200或者s7-1200系列PLC中都提供了集成的高速计数器和相应的配置和指令。
二、高速计数实现方式
一般的,当开关频率大于50Hz,使用普通的数字量输入点DI就难以满足计数的需求。低于50Hz要看CPU的扫描时间,这决定于很多因素,比如程序的复杂程度等等。而当开关频率大于50Hz,则推荐采用PLC的高速计数器。
2.1 中断处理
我们以目前主流的s7-1200 PLC为例,在其编程调试软件博途V13中介绍实现PLC高速计数器的方法。其中一种就是采用硬件中断,首先添加程序块硬件中断组织块OB40,如图1所示。
硬件中断,是指PLC CPU独立于扫描周期之外,响应来自PLC硬接点的信号变化。我们可以配置响应的硬件中断具体是哪些DI点,哪种方式。
PLC CPU循环扫描程序并刷新输入输出映像寄存器,而硬件中断可以快速响应输入输出的变化,不受程序扫描的影响。如图2在硬件组态CPU属性页中,我们可以配置数字量输入点(即通道)的硬件中断方式:是否启用边沿检测,以及硬件中断和优先级。配置后,在相应的中断组织块OB40中编写计数程序。
2.2 集成的高速计数通道
我们可以使用PLC CPU自带的数字量输入点(比如I0.0)配置成高速计数器,其实很难严格区分种方法“中断处理”和第二种方法“集成的高速计数通道”,第二种方法本质上就是种方法。
不同型号的CPU可以配置不同的高速计数通道,以及不同模式。以CPU1212C为例,六个点可以配置为高速计数器,I0.0~I0.5对应HSC1~HSC6,如图3在硬件组态CPU属性页中,配置HSC1是否启用,以及计数类型、工作模式、计数方向。详细解释可按F1或者在网上找资料寻求帮助。
值得一提的是,在I/O地址的输入地址中,默认HSC1起始地址为1000,结束地址为1003,意思是I0.0的高速计数值存储在ID1000中,双字占用四个字节从IB1000到IB1003。其他高速计数器的值以此类推,也可以配置。
2.3 高速计数模块
有些品牌PLC的高速计数器只能使用高速计数器模块,西门子s7-300系列PLC采用扩展模块FM350-2实现脉冲高数计数,而西门子s7-200或者s7-1200系列PLC CPU集成有高速计数DI点,没有高速计数器模块。
三、某项目电机测速
举个工程应用实例。在某项目中,我们需要将电机转速信号接入PLC,而测量电机转速的是接近开关信号。我们在电机轴上焊接一个螺丝,用接近开关检测螺丝是否通过,以此来表示电机旋转了一圈。
当精度要求不是太高的情况下,这种方法是可行的。假如电机高转速为3000rpm,那么每秒钟电机转了50圈,这就要求接近开关响应频率(即开关频率)必须大于50Hz,而且接入到PLC的DI点响应频率也必须大于50Hz。
如上所述,如果将高速计数器配置成“计数”,比如HSC1,则计数值ID1000会一直累加,如果需要复位或者装载新的计数值、参考值、计数方向,则需要在程序中调用CTRL_HSC指令并赋值控制。这样做比较麻烦。
如果将高速计数器的计数类型选择为“频率”,则不需要像“计数”类型那样隔段时间复位,得到的数值就是频率并存储在ID1000中。
ID1000是双字类型,即双整形,存储值为I0.0的频率,在这个项目中表示电机1秒钟转多少圈(rps),乘以60转换为转速标准单位rpm。
四、总结
西门子中低端PLC,比如200、1200系列,CPU自带高速计数器,可以配置为高速计数通道。s7-1200系列PLC甚至更简单,在一些应用场合只需要直接引用高速计数存储器的值即可。
本文重点介绍了s7-1200系列PLC配置集成的高速计数器HSC的方法,并结合工程应用实例,对于需要电机测速以及捕获高速脉冲并计数的应用场合,非常实用,希望对大家有所启发和帮助。