PLC基礎篇之S7-300/400的計數器指令
工業包裝流水線經常需要對包裝物體的數量進行統計,比如:把24瓶啤酒包裝到一個箱子里。這裡對「24瓶」的統計,就需要用到計數器指令。今天這篇文章,我們就來談談S7-300/400的計數器(counter)。
西門子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,如下圖:

二進位的計數器位用來表示計數器的狀態,當計數值大於0時,狀態位為1;當計數值等於0時,狀態位為0;
用字母「C」加上計數器的編號(比如,C10)來對計數器進行訪問,位操作的指令可以訪問計數器的狀態位;字操作指令可以訪問計數器的當前值(計數值);
Step7支持兩種類型的計數器:IEC計數器和SIMATIC計數器,本章我們討論SIMATIC計數器。
SIMATIC計數器包括三種:加計數器(S_CU),減計數器(S_CD)和加減計數器(S_CUD);
加計數器(S_CU)的指令如下圖:

當"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)的指令如下圖:

當"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),如下圖:

當"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)官網方正智芯(founder chip)提供本文PDF版本下載:

推薦閱讀:
※INTERBUS匯流排基於何種拓撲結構?有哪些特點?
※對於我們學電氣的來說,怎樣才能把所學的知識轉化為能力?目前感覺學得東西沒有實際價值。用不上。?
※電子系的學生都有哪些口頭禪?
※關係自學單片機,各位有什麼書和板子值得推薦的嗎?
TAG:可编程逻辑控制器PLC | 电气自动化 | 电气工程 |
