S7-1200 計(jì)數(shù)器
S7-1200的計(jì)數(shù)器為IEC計(jì)數(shù)器,用戶程序中可以使用的計(jì)數(shù)器數(shù)量僅受CPU的存儲器容量限制。
這里所說的是軟件計(jì)數(shù)器,最大計(jì)數(shù)速率受所在OB的執(zhí)行速率限制。指令所在OB的執(zhí)行頻率必須足夠高,以檢測輸入脈沖的所有變化,如果需要更快的計(jì)數(shù)操作,請參考高速計(jì)數(shù)器(HSC)。
注:S7-1200的IEC計(jì)數(shù)沒有計(jì)數(shù)器號(即沒有C0、C1這種帶計(jì)數(shù)器號的計(jì)數(shù)器)。
S7-1200的計(jì)數(shù)器包含3種計(jì)數(shù)器,指令位置參見圖1:
1.計(jì)數(shù)器(CTU)
2.減計(jì)數(shù)器(CTD)
3.加減計(jì)數(shù)器(CTUD)

圖1 指令位置
對于每種計(jì)數(shù)器,計(jì)數(shù)值可以是任何整數(shù)數(shù)據(jù)類型,并且需要使用每種整數(shù)對應(yīng)的數(shù)據(jù)類型的DB結(jié)構(gòu)(見表1)或背景數(shù)據(jù)塊來存儲計(jì)數(shù)器數(shù)據(jù)。計(jì)數(shù)器引腳參考表2,計(jì)數(shù)器使用及時(shí)序圖參考表3(本文均以INT計(jì)數(shù)器為例)。
表1 計(jì)數(shù)器類型及范圍
| 整數(shù)類型 | 計(jì)數(shù)器類型 | 計(jì)數(shù)器類型(TIA博途V14開始) | 計(jì)數(shù)范圍 | ||
| SINT | IEC_SCOUNTER | CTU_SINT | CTD_SINT | CTUD_SINT | -128~127 |
| INT | IEC_COUNTER | CTU_INT | CTD_INT | CTUD_INT | -32768~32767 |
| DINT | IEC_DCOUNTER | CTU_DINT | CTD_DINT | CTUD_DINT | -2147483648~2147483647 |
| USINT | IEC_USCOUNTER | CTU_USINT | CTD_USINT | CTUD_USINT | 0~255 |
| UINT | IEC_UCOUNTER | CTU_UINT | CTD_UINT | CTUD_UINT | 0~65535 |
| UDINT | IEC_UDCOUNTER | CTU_UDINT | CTD_UDINT | CTUD_UDINT | 0~4294967295 |
表2 計(jì)數(shù)器引腳匯總
| 輸入的變量 | |||
| 名稱 | 說明 | 數(shù)據(jù)類型 | 備注 |
| CU | 加計(jì)數(shù)輸入脈沖 | BOOL | 僅出現(xiàn)在CTU、CTUD |
| CD | 減計(jì)數(shù)輸入脈沖 | BOOL | 僅出現(xiàn)在CTD、CTUD |
| R | CV清0 | BOOL | 僅出現(xiàn)在CTU、CTUD |
| LD | CV設(shè)置為PV | BOOL | 僅出現(xiàn)在CTD、CTUD |
| PV | 預(yù)設(shè)值 | 整數(shù) | 僅出現(xiàn)在CTU、CTUD |
| 輸出的變量 | |||
| 名稱 | 說明 | 數(shù)據(jù)類型 | 備注 |
| Q | 輸出位 | BOOL | 僅出現(xiàn)在CTU、CTD |
| QD | 輸出位 | BOOL | 僅出現(xiàn)在CTUD |
| QU | 輸出位 | BOOL | 僅出現(xiàn)在CTUD |
| CV | 計(jì)數(shù)值 | 整數(shù) | ? |
表3計(jì)數(shù)器使用及時(shí)序圖
| 指令 | 說明 | 時(shí)序圖 |
|
加計(jì)數(shù) LAD: ![]() SCL:CTU |
當(dāng)CU從“0”變?yōu)椤?”,CV增加1; 當(dāng)CV=PV時(shí),Q輸出“1”,此后當(dāng)CU從“0”變?yōu)椤?”,Q保持輸出“1”,CV繼續(xù)增加1直到達(dá)到計(jì)數(shù)器指定的整數(shù)類型的最大值。; 在任意時(shí)刻,只要R為“1”時(shí),Q輸出“0”,CV立即停止計(jì)數(shù)并回到0; |
? |

| ? | ||
|
減計(jì)數(shù) LAD: ![]() SCL:CTD |
當(dāng)CD從“0”變?yōu)椤?”,CV減少1; 當(dāng)CV=0時(shí),Q輸出“1”,此后當(dāng)CU從“0”變?yōu)椤?”,Q保持輸出“1”,CV繼續(xù)減少1直到達(dá)到計(jì)數(shù)器指定的整數(shù)類型的最小值; 只要LD為“1”時(shí),Q輸出“0”,CV立即停止計(jì)數(shù)并回到PV值; |
? |

| ? | ||
|
加減計(jì)數(shù) LAD: ![]() SCL:CTUD |
當(dāng)CU從“0”變?yōu)椤?”,CV增加1; 當(dāng)CD從“0”變?yōu)椤?”,CV減少1; 當(dāng)CV>=PV時(shí),QU輸出“1”;當(dāng)CV CV的上下限取決于計(jì)數(shù)器指定的整數(shù)類型的最大值與最小值; 只要R為“1”時(shí),QD輸出“1”,CV立即停止計(jì)數(shù)并回到0; 只要LD為“1”時(shí),QU輸出“1”,CV立即停止計(jì)數(shù)并回到PV值。 |
? |

| ? |
S7-1200計(jì)數(shù)器創(chuàng)建有以下幾種方法:
1. 指令直接拖入塊中,自動生成計(jì)數(shù)器的背景數(shù)據(jù)塊,該塊位于“系統(tǒng)塊>程序資源”中,參見圖2。需要在指令中修改計(jì)數(shù)值類型。

圖2 自動生成計(jì)數(shù)器的背景數(shù)據(jù)塊
2. 指令直接拖入FB塊中,生成多重背景,參見圖3。多重背景的數(shù)據(jù)類型在TIA博途V14之前是IEC_COUNTER類型,從TIA博途V14開始是CTU_INT、CTD_INT、CTUD_INT等類型(取決于指令)。

圖3 多重背景
3. 指令直接拖入FB、FC塊中,生成參數(shù)實(shí)例,從TIA博途V14開始,參見圖4。

圖4 參數(shù)實(shí)例
4. 在DB塊、FB的靜態(tài)變量、FC和FB的INOUT變量中新建IEC_COUNTER、CTU_INT、CTD_INT、CTUD_INT類型變量,在程序中將計(jì)數(shù)器指令拖入塊中時(shí),在彈出的“調(diào)用選項(xiàng)”頁面點(diǎn)擊“取消”按鈕,之后將該建好的變量填入指定位置。
(1) DB塊中新建IEC_COUNTER等類型變量(LAD/FBD),如果是IEC_COUNTER等類型變量的數(shù)組,S7-1200從V2.0版本開始支持,參見圖5、6。

圖5 DB塊中的定義

圖6 計(jì)數(shù)器使用
(2) FB的靜態(tài)變量中新建IEC_COUNTER等類型變量(LAD/FBD),如果是IEC_COUNTER等類型變量的數(shù)組,S7-1200從V2.0版本開始支持,參見圖7。

圖7 靜態(tài)變量中定義
(3) FC和FB的INOUT變量中新建IEC_COUNTER等類型變量(LAD/FBD),如果是IEC_COUNTER等類型變量的數(shù)組,S7-1200從V2.0版本開始支持,從TIA博途V14開始支持IEC_COUNTER等類型變量的變長數(shù)組(ARRAY[#]),參見圖8。

圖8 INOUT中定義
(4) 以上三種方法的SCL版本,從TIA博途V14開始支持,參見圖9。

圖9 SCL中使用
從以上四個(gè)示例可以看出,IEC_COUNTER、CTU_INT、CTD_INT、CTUD_INT四種數(shù)據(jù)類型沒有本質(zhì)的區(qū)別,可以互換使用,為使得程序明確,建議只使用計(jì)數(shù)器對應(yīng)名字的數(shù)據(jù)類型。
5. 在插入DB時(shí),選擇IEC_COUNTER類型的數(shù)據(jù)塊,將該數(shù)據(jù)塊填在指令上方。此種方法生成的數(shù)據(jù)塊等同于第一種的背景數(shù)據(jù)塊,位于“系統(tǒng)塊>程序資源”中,從TIA博途V11開始,參見圖10.

圖10 新建IEC_COUNTER類型DB
S7-1200 計(jì)數(shù)器常見問題
1. 為什么計(jì)數(shù)器不計(jì)數(shù)?
答:可能原因如下:
(1)計(jì)數(shù)器的輸入位(CU、CD)需要有電平信號的跳變,計(jì)數(shù)器才會計(jì)數(shù)。如果保持不變的信號作為輸入位是不會開始計(jì)數(shù)的。
(2)計(jì)數(shù)器的背景數(shù)據(jù)塊重復(fù)使用。
2. 如何編程自復(fù)位計(jì)數(shù)器并產(chǎn)生脈沖?
答:正確答案見圖11,錯(cuò)誤答案見圖12、13。

圖11 正確程序

圖12 錯(cuò)誤程序1

圖13 錯(cuò)誤程序2
正確原因:當(dāng)計(jì)數(shù)值達(dá)到10,"DB77".Static_15(False)作為計(jì)數(shù)器R的輸入,并沒有復(fù)位,Q輸出"DB77".Static_15為True,在下一周期時(shí)執(zhí)行復(fù)位指令,使得計(jì)數(shù)值清零,之后Q輸出"DB77".Static_15為False,實(shí)現(xiàn)自復(fù)位計(jì)數(shù)器并產(chǎn)生脈沖。
錯(cuò)誤1原因:當(dāng)計(jì)數(shù)值達(dá)到10,首先置位"數(shù)據(jù)塊_2".QU,緊接著"數(shù)據(jù)塊_2".QU作為計(jì)數(shù)器R的輸入,使得計(jì)數(shù)值清零,同時(shí)復(fù)位"數(shù)據(jù)塊_2".QU,在下一網(wǎng)絡(luò)段"DB77".Static_15依然是False,無法實(shí)現(xiàn)脈沖。
錯(cuò)誤2原因:當(dāng)計(jì)數(shù)值達(dá)到10,"數(shù)據(jù)塊_2".CV=10,緊接著"數(shù)據(jù)塊_2".CV與"數(shù)據(jù)塊_2".PV的比較結(jié)果(True)作為計(jì)數(shù)器R的輸入,使得計(jì)數(shù)值清零,同時(shí)復(fù)位"數(shù)據(jù)塊_2".QU,在下一網(wǎng)絡(luò)段"DB77".Static_15依然是False,無法實(shí)現(xiàn)脈沖。
從例子可知,計(jì)數(shù)器的執(zhí)行是先處理輸入,再處理輸出,在指令塊執(zhí)行過程中,內(nèi)部變量(例如QU、CV)可能出現(xiàn)多次變化。
編輯:黃飛
?
電子發(fā)燒友App





























































評論