北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章545 浏览8637387

PLC基础篇之S7-300/400的计数器指令

工业包装流水线经常需要对包装物体的数量进行统计,比如:把24瓶啤酒包装到一个箱子里。这里对“24瓶”的统计,就需要用到计数器指令。今天这篇文章,我们就来谈谈S7-300/400的计数器(counter)。

cover.jpg西门子S7-300/400 CPU的内部有一块专门的计数器存储区,存储区的大小,决定了计数器的多少,不同的CPU型号支持的计数器的数量不同,比如:CPU315 -2PN/DP支持256个计数器(SIAMTIC counter);CPU319-3PN/DP支持2048个计数器(SIAMTIC  counter),差别还是比较大的是不是?

虽然支持的计数器的个数不同,但是每一个计数器的结构都是一样的,都由两部分组成:16位的计数器字(WORD)和二进制的状态位(Bit)。

16位的计数器字用来存放当前的计数值,它使用3个BCD码来表示,Bit0~Bit3为BCD0;Bit4~Bit7为BCD1;Bit8~Bit11为BCD2,;Bit12~Bit15保留(未使用);计数值的范围为0~999,如下图:

cw.png

二进制的计数器位用来表示计数器的状态,当计数值大于0时,状态位为1;当计数值等于0时,状态位为0;

用字母“C”加上计数器的编号(比如,C10)来对计数器进行访问,位操作的指令可以访问计数器的状态位;字操作指令可以访问计数器的当前值(计数值);

Step7支持两种类型的计数器:IEC计数器和SIMATIC计数器,本章我们讨论SIMATIC计数器。

SIMATIC计数器包括三种:加计数器(S_CU),减计数器(S_CD)和加减计数器(S_CUD);

加计数器(S_CU)的指令如下图:

cu.png

当"I_input(I1.2)"的信号从0变为1时(上升沿),并且当前计数值(MW10)小于999时,计数器的当前值将会增加1;

当"I_Set(I1.3)"的信号从0变为1时(上升沿),计数器的当前值(MW10)会被预设值(C#10)代替;

当"I_Reset(I1.4)"为1时,计数器的当前值(MW10)被复位(=0);

只要计数器的当前值(MW10)大于0,计数器的输出(Q0.0)就为1;

减计数器S_CD的指令如下图:

cd.png

当"I_input(I1.2)"的信号从0变为1时(上升沿),并且当前计数值(MW14)大于0时,计数器的当前值将会减1,;

当"I_Set(I1.3)"的信号从0变为1时(上升沿),计数器的当前值(MW14)会被预设值(C#800)代替;

当"I_Reset(I1.4)"为1时,计数器的当前值(MW14)被复位(=0);

只要计数器的当前值(MW14)大于0,计数器的输出(Q0.1)就为1;

还有一种同时支持加减两种运算的计数器-加减计数器(S_CUD),如下图:

cud.png

当"I_input(I1.2)"的信号从0变为1时(上升沿),并且当前计数值(MW18)小于999时,计数器的当前值将会增加1;

当"I_C_down(I1.5)"的信号从0变为1时(上升沿),并且当前计数值(MW18)大于0时,计数器的当前值将会减1,;

当"I_Set(I1.3)"的信号从0变为1时(上升沿),计数器的当前值(MW18)会被预设值(C#100)代替;

当"I_Reset(I1.4)"为1时,计数器的当前值(MW18)被复位(=0);

只要计数器的当前值(MW18)大于0,计数器的输出(Q0.2)就为1;

以上是SIMATIC的内部计数器指令,这些指令与之前介绍的高速计数器是不同的。高速计数器连接外部的脉冲输入,有专门的计数芯片对高速脉冲进行计数(有的高速计数器有单独的硬件模块,S7-1200系列有集成与CPU内部的高速计数器);而本章介绍的计数器是CPU内部的存储区,其信号受扫描周期的影响,不能用于高速计数

好了,关于S7的计数器指令先介绍到这里了,相关参考文章:

S7-1200硬件篇之高速计数器(HSC)

官网提供本文PDF版本下载


已经过安全软件检测无毒,请您放心下载。

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论