西門(mén)子plc計(jì)數(shù)器指令
成都PLC控制柜為我們分解計(jì)數(shù)器指令包括增計(jì)數(shù)器、減計(jì)數(shù)器、增減計(jì)數(shù)器和高速計(jì)數(shù)器
增計(jì)數(shù)器
增計(jì)數(shù)指令(CTU)從當(dāng)前計(jì)數(shù)值開(kāi)始,在每一個(gè)(CU)輸入狀態(tài)從低到高時(shí)遞增計(jì)數(shù)。當(dāng)CXX的當(dāng)前值大于等于預(yù)置值PV時(shí),計(jì)數(shù)器位CXX置位。當(dāng)復(fù)位端(R)接通或者執(zhí)行復(fù)位指令后,計(jì)數(shù)器被復(fù)位。當(dāng)它達(dá)到大值(32,767)后,計(jì)數(shù)器停止計(jì)數(shù)。
減計(jì)數(shù)器
減計(jì)數(shù)指令(CTD)從當(dāng)前計(jì)數(shù)值開(kāi)始,在每一個(gè)(CD)輸入狀態(tài)的低到高時(shí)遞減計(jì)數(shù)。當(dāng)CXX的當(dāng)前值等于0時(shí),計(jì)數(shù)器位CXX置位。當(dāng)裝載輸入端(LD)接通時(shí),計(jì)數(shù)器位被復(fù)位,并將計(jì)數(shù)器的當(dāng)前值設(shè)為預(yù)置值PV。當(dāng)計(jì)數(shù)值到0時(shí),計(jì)數(shù)器停止計(jì)數(shù),計(jì)數(shù)器位CXX接通。
增/減計(jì)數(shù)器
增/減計(jì)數(shù)指令(CTUD),在每一個(gè)增計(jì)數(shù)輸入(CU)的低到高時(shí)增計(jì)數(shù),在每一個(gè)減計(jì)數(shù)輸入(CD)的低到高時(shí)減計(jì)數(shù)。計(jì)數(shù)器的當(dāng)前值CXX保存當(dāng)前計(jì)數(shù)值。在每一次計(jì)數(shù)器執(zhí)行時(shí),預(yù)置值PV與當(dāng)前值作比較。當(dāng)達(dá)到大值(32767)時(shí),在增計(jì)數(shù)輸入處的下一個(gè)上升沿導(dǎo)致當(dāng)前計(jì)數(shù)值變?yōu)樾≈?--32768)。當(dāng)達(dá)到小值(--32768)時(shí),在減計(jì)數(shù)輸入端的下一個(gè)上升沿導(dǎo)致當(dāng)前計(jì)數(shù)值變?yōu)榇笾?32767)。當(dāng)CXX的當(dāng)前值大于等于預(yù)置值PV時(shí),計(jì)數(shù)器位CXX置位。否則,計(jì)數(shù)器位關(guān)斷。當(dāng)復(fù)位端(R)接通或者執(zhí)行復(fù)位指令后,計(jì)數(shù)器被復(fù)位。當(dāng)達(dá)到預(yù)置值PV時(shí),CTUD計(jì)數(shù)器停止計(jì)數(shù)。
PS:CXX代表的是計(jì)數(shù)器的名稱(chēng),是常數(shù)范圍時(shí)從C0到C25,由于每一個(gè)計(jì)數(shù)器只有一個(gè)當(dāng)前值,所以不要多次定義同一個(gè)計(jì)數(shù)器。(具有相同標(biāo)號(hào)的增計(jì)數(shù)器、增/減計(jì)數(shù)器、減計(jì)數(shù)器訪問(wèn)相同的當(dāng)前值。)當(dāng)使用復(fù)位指令復(fù)位計(jì)數(shù)器時(shí),計(jì)數(shù)器位復(fù)位并且計(jì)數(shù)器當(dāng)前值被清零。計(jì)數(shù)器標(biāo)號(hào)既可以用來(lái)表示當(dāng)前值,又可以用來(lái)表示計(jì)數(shù)器位。
減計(jì)數(shù)器應(yīng)用
當(dāng)I0.1斷開(kāi)時(shí),減計(jì)數(shù)器C1的當(dāng)前值從3變到0。I0.0的上升沿使C1的當(dāng)前值遞減。I0.1接通時(shí)裝載預(yù)置值3。當(dāng)計(jì)數(shù)器C1的當(dāng)前值=0時(shí),C1接通。
增減計(jì)數(shù)器實(shí)例應(yīng)用
當(dāng) I0.0接通時(shí),使用增計(jì)數(shù),計(jì)數(shù)器數(shù)值增加,當(dāng) I0.1接通時(shí),使用減計(jì)數(shù),計(jì)數(shù)器數(shù)值減少,當(dāng)I0.2接通時(shí), I0.2將當(dāng)前值復(fù)位為0,當(dāng)當(dāng)前值=4時(shí),將增/減計(jì)數(shù)器C48接通,輸出Q0.0.
高速計(jì)數(shù)器
一般來(lái)說(shuō),高速計(jì)數(shù)器被用作驅(qū)動(dòng)鼓式計(jì)時(shí)器,該設(shè)備有一個(gè)安裝了增量軸式編碼器的軸,以恒定的速度轉(zhuǎn)動(dòng)。軸式編碼器每圈提供一個(gè)確定的計(jì)數(shù)值和一個(gè)復(fù)位脈沖。來(lái)自軸式編碼器的時(shí)鐘和復(fù)位脈沖作為高速計(jì)數(shù)器的輸入。高速計(jì)數(shù)器裝入一組預(yù)置值中的第一個(gè)值,當(dāng)前計(jì)數(shù)值小于當(dāng)前預(yù)置值時(shí),希望的輸出有效。www.diangon.com版權(quán)所有。計(jì)數(shù)器設(shè)置成在當(dāng)前值等于預(yù)置值和有復(fù)位時(shí)產(chǎn)生中斷。隨著每次當(dāng)前計(jì)數(shù)值等于預(yù)置值的中斷事件的出現(xiàn),一個(gè)新的預(yù)置值被裝入,并重新設(shè)置下一個(gè)輸出狀態(tài)。當(dāng)出現(xiàn)復(fù)位中斷事件時(shí),設(shè)置第一個(gè)預(yù)置值和第一個(gè)輸出狀態(tài),這個(gè)循環(huán)又重新開(kāi)始。由于中斷事件產(chǎn)生的速率遠(yuǎn)低于高速計(jì)數(shù)器的計(jì)數(shù)速率,用高速計(jì)數(shù)器可實(shí)現(xiàn)精確控制,而與plc整個(gè)掃描周期的關(guān)系不大。采用中斷的方法允許在簡(jiǎn)單的狀態(tài)控制中用獨(dú)立的中斷程序裝入一個(gè)新的預(yù)置值。(同樣的,也可以在一個(gè)中斷服務(wù)程序中,處理所有的中斷事件。)
理解不同的高速計(jì)數(shù)器
對(duì)于操作模式相同的計(jì)數(shù)器,其計(jì)數(shù)功能是相同的。計(jì)數(shù)器共有四種基本類(lèi)型:帶有內(nèi)部方向控制的單相計(jì)數(shù)器,帶有外部方向控制的單相計(jì)數(shù)器,帶有兩個(gè)時(shí)鐘輸入的雙相計(jì)數(shù)器和A/B相正交計(jì)數(shù)器。注意,并不是所有計(jì)數(shù)器都能使用每一種模式。您可以使用以下類(lèi)型:無(wú)復(fù)位或啟動(dòng)輸入,有復(fù)位無(wú)啟動(dòng)輸入或既有啟動(dòng)又有復(fù)位輸入。
- 當(dāng)激活復(fù)位輸入端時(shí),計(jì)數(shù)器清除當(dāng)前值并一直保持到復(fù)位端失效。
- 當(dāng)激活啟動(dòng)輸入端時(shí),它允許計(jì)數(shù)器計(jì)數(shù)。當(dāng)啟動(dòng)端失效時(shí),計(jì)數(shù)器的當(dāng)前值保持為常數(shù),并且忽略時(shí)鐘事件。
- 如果在啟動(dòng)輸入端無(wú)效的同時(shí),復(fù)位信號(hào)被激活,則忽略復(fù)位信號(hào),當(dāng)前值保持不變。如果在復(fù)位信號(hào)被激活的同時(shí),啟動(dòng)輸入端被激活,當(dāng)前值被清除。
在使用高速計(jì)數(shù)器之前,應(yīng)該用HDEF(高速計(jì)數(shù)器定義)指令為計(jì)數(shù)器選擇一種計(jì)數(shù)模式。使用初次掃描存儲(chǔ)器位SM0.1(該位僅在第一次掃描周期接通,之后斷開(kāi))來(lái)調(diào)用一個(gè)包含HDEF指令的子程序。
對(duì)于高速計(jì)數(shù)器來(lái)說(shuō),我們可以使用指令向?qū)?lái)配置計(jì)數(shù)器。向?qū)С绦蚴褂孟铝行畔ⅲ河?jì)數(shù)器的類(lèi)型和模式、計(jì)數(shù)器的預(yù)置值、計(jì)數(shù)器的初始值和計(jì)數(shù)的初始方向。要啟動(dòng)HSC指令向?qū)?,可以在命令菜單窗口中選擇Tools >Instruction Wizard ,然后在向?qū)Т翱谥羞x擇HSC指令。對(duì)高速計(jì)數(shù)器編程,必須完成下列基本操作:定義計(jì)數(shù)器和模式、設(shè)置控制字節(jié)、設(shè)置初始值、 設(shè)置預(yù)置值、指定并使能中斷服務(wù)程序、激活高速計(jì)數(shù)器。
工作模式
高速計(jì)數(shù)器的初始化步驟舉例
以下以HSC1為例,對(duì)初始化和操作的步驟進(jìn)行描述。在初始化描述中,假定S7--200已經(jīng)置成RUN模式。因此,首次掃描標(biāo)志位為真。如果不是這種情況,請(qǐng)記住在進(jìn)入RUN模式之后,對(duì)每一個(gè)高速計(jì)數(shù)器的HDEF指令只能執(zhí)行一次。對(duì)一個(gè)高速計(jì)數(shù)器第二次執(zhí)行HDEF指令會(huì)引起運(yùn)行錯(cuò)誤,而且不能改變第一次執(zhí)行HDEF指令時(shí)對(duì)計(jì)數(shù)器的設(shè)置。PS:雖然下列步驟描述了如何分別改變計(jì)數(shù)方向、初始值和預(yù)置值,但完全可以在同一操作步驟中對(duì)全部或者任意參數(shù)組合進(jìn)行設(shè)置,只要設(shè)置正確的SMB47然后執(zhí)行HSC指令即可。
初始化模式0、1或2
HSC1為內(nèi)部方向控制的單相增/減計(jì)數(shù)器(模式0、1或2),初始化步驟如下:
1. 用初次掃描存儲(chǔ)器位(SM0.1=1)調(diào)用執(zhí)行初始化操作的子程序。由于采用了這樣的子程序調(diào)用,后續(xù)掃描不會(huì)再調(diào)用這個(gè)子程序,從而減少了掃描時(shí)間,也提供了一個(gè)結(jié)構(gòu)優(yōu)化的程序。
2. 初始化子程序中,根據(jù)所希望的控制操作對(duì)SMB47置數(shù)。例如:
SMB47=16#F8 產(chǎn)生如下的結(jié)果:
允許計(jì)數(shù)
寫(xiě)入新的初始值
寫(xiě)入新的預(yù)置值
置計(jì)數(shù)方向?yàn)樵?/p>
置啟動(dòng)和復(fù)位輸入為高電平有效
3. 執(zhí)行HDEF指令時(shí),HSC輸入置1,MODE輸入置0(無(wú)外部復(fù)位或啟動(dòng))或置1(有外部復(fù)位和無(wú)啟動(dòng))或置2(有外部復(fù)位和啟動(dòng))。
4. 向SMD48(雙字)寫(xiě)入所希望的初始值(若寫(xiě)入0,則清除)。
5. 向SMD52(雙字)寫(xiě)入所希望的預(yù)置值。
6. 為了捕獲當(dāng)前值(CV)等于預(yù)置值(PV)中斷事件,編寫(xiě)中斷子程序,并指定CV=PV中斷事件(事件號(hào)13)調(diào)用該中斷子程序。
7. 為了捕獲外部復(fù)位事件,編寫(xiě)中斷子程序,并指定外部復(fù)位中斷事件(事件號(hào)15)調(diào)用該中斷子程序。
8. 執(zhí)行全局中斷允許指令(ENI)來(lái)允許HSC1中斷。
9. 執(zhí)行HSC指令,使S7--200對(duì)HSC1編程。
10. 退出子程序。
應(yīng)用實(shí)例
實(shí)例應(yīng)用2
在首次掃描時(shí),調(diào)用SBR0,在首次掃描,配置HSC1:SMB48=16#F8意思就是使能計(jì)數(shù)器、寫(xiě)初始值、寫(xiě)預(yù)置值、設(shè)初始方向?yàn)樵鲇?jì)數(shù)、選擇啟動(dòng)和復(fù)位輸入高電平有效、選擇4倍速模式、配置HSC1為帶啟動(dòng)和復(fù)位輸入的正交模式、SMD48=0表示清除HSC1的初始值。置HSC1的預(yù)置值為50。 當(dāng)HSC1的當(dāng)前值=預(yù)置值時(shí),執(zhí)行INT_0。 全局中斷允許。執(zhí)行HSC1,執(zhí)行HSC1,清除HSC1的初始值、選擇寫(xiě)入新的初始值和HSC1使能。