S7-200的程序有三種:主程序、子程序、中斷程序。
主程序只有一個(gè),名稱為OB1。
子程序可以達(dá)到64個(gè),名稱分別為SBR0~SBR63。子程序可以由子程序或中斷程序調(diào)用。
中斷程序可以達(dá)到128個(gè),名稱分別為INT0~INT127。中斷方式有輸入中斷、定時(shí)中斷、高速計(jì)數(shù)中斷、通信中斷等中斷事件引發(fā),當(dāng)CPU響應(yīng)中斷時(shí),可以執(zhí)行中斷程序。
由這三種程序可以組成線性程序和分塊程序兩種結(jié)構(gòu)。
一、線性程序結(jié)構(gòu)
_線性程序是指一個(gè)工程的全部控制任務(wù)都按照工程控制的順序?qū)懺谝粋(gè)程序中,比如寫在OB1中。程序執(zhí)行過程中,CPU不斷地掃描OB1,按照事先準(zhǔn)備好的順序去執(zhí)行工作,如圖:
顯然,線性程序結(jié)構(gòu)簡單,一目了然。但是,當(dāng)控制工程大到一定程序之后,僅僅采用線性程序就會(huì)使整個(gè)程序變得龐大而難于編制、難于調(diào)試了。
二、分塊程序結(jié)構(gòu)
分塊程序是指一個(gè)工程的全部控制任務(wù)被分成多個(gè)小的任務(wù)塊,每個(gè)任務(wù)塊的控制任務(wù)根據(jù)具體情況分別放到子程序中,或者放到中斷程序中。程序執(zhí)行過程中,CPU不斷地調(diào)用這些子程序或者被中斷程序中斷,
分塊程序雖然結(jié)構(gòu)復(fù)雜一些,但是可以把一個(gè)復(fù)雜的過程分解成多個(gè)簡單的過程。對(duì)于具體的程序塊容易編寫,容易調(diào)試。從總體上看,分塊程序的優(yōu)勢是十分明顯的。
西門子S7-200plc用戶程序可以采用主、子程序結(jié)構(gòu)或普通線性化結(jié)構(gòu)。當(dāng)采用普通線性化結(jié)構(gòu)時(shí),只需要編制主程序OBl;當(dāng)采用主、子程序式分塊結(jié)構(gòu)時(shí),PLC程序由主程序(OBl)、子程序(SBRn)、中斷程序( INRn)等組成。
S7-200 PLC的主、子程序結(jié)構(gòu)對(duì)程序塊的內(nèi)部排列有規(guī)定的要求。主程序(OBl)必須進(jìn)行編寫,且位于程序的最前面;隨后是子程序( SBRn)與中斷程序(INRn)。在S7-200中,子程序(SBRn)、中斷程序(INRn)可以根據(jù)需要進(jìn)行選用與編寫。
(1)主程序
S7-200主程序代號(hào)規(guī)定為OB1。早期的S7-200 PLC用戶程序不分塊,需要在主程序之后接著安排子程序與中斷程序,因此,主程序的結(jié)束應(yīng)使用指令MEND作為標(biāo)記。但如果使用的是Micro/WIN32編程軟件,主程序、子程序、中斷程序都可以通過獨(dú)立的區(qū)域進(jìn)行編程,通過編程軟件的自動(dòng)編譯功能,可以對(duì)程序進(jìn)行自動(dòng)的編排與調(diào)整,主程序的結(jié)束無須再編寫指令MEND,如圖1 (a)所示。
圖1 S7-200的程序結(jié)構(gòu)與執(zhí)行過程
主程序081在S7-200 PLC中為用戶程序的組織、管理者,必須位于PLC用戶程序的最前面,以保證每次執(zhí)行PLC循環(huán)時(shí),首先對(duì)OB1進(jìn)行掃描。
同樣,早期的S7-200在子程序結(jié)束處應(yīng)使用指令RET作為返回標(biāo)記,子程序SRBn必須編在主程序OB1的結(jié)束指令MEND之后。采用了Micro/WIN32編程軟件后,這些由編程軟件進(jìn)行自動(dòng)編排與調(diào)整。
子程序SRBn在S7-200 PLC中為可選部分,可以編寫也可以不編寫。子程序的執(zhí)行通過主程序OB1的對(duì)該子程序的調(diào)用實(shí)現(xiàn),并非每次PLC循環(huán)都需要執(zhí)行全部子程序。
(3)中斷程序
S7-200 PLC的中斷程序代號(hào)為INTn(n為十進(jìn)制數(shù)值,可以是0--127),用于區(qū)別不同的中斷程序。早期的中斷程序結(jié)束應(yīng)使用指令RETI作為返回標(biāo)記,中斷程序INTn同樣必須編在主程序OB1的結(jié)束指令MEND之后,且習(xí)慣上是放在子程序SRBn之后(也可以放在子程序之前)。
中斷程序INTn在S7-200中同樣為可以選擇的部分,它需要通過主程序OB1的調(diào)用才能執(zhí)行,并非每次PLC循環(huán)都需要執(zhí)行全部中斷程序。
S7-200的程序結(jié)構(gòu)與執(zhí)行過程如圖1 (c)所示。
(4)局部變量堆棧
在進(jìn)行PLC程序設(shè)計(jì)時(shí),程序中有很多為了簡化邏輯塊結(jié)構(gòu)而設(shè)置的臨時(shí)狀態(tài)、數(shù)據(jù)存儲(chǔ)單元,這些存儲(chǔ)單元實(shí)際上只是為了方便編程、檢查而設(shè)的臨時(shí)存儲(chǔ)單元,它與邏輯外部的程序無關(guān),在S7中將其稱為“局部變量”或“臨時(shí)變量(Temp)”。
根據(jù)需要,設(shè)計(jì)者可以在S7-200的OB1、SBRn、INTn中使用“臨時(shí)變量”。“臨時(shí)變量”存儲(chǔ)在局部變量數(shù)據(jù)堆棧(L)中,這一區(qū)域?yàn)槿砍绦驂K所公用,只可以用于OB1或SBRn、INTn塊內(nèi)部使用的中間運(yùn)算結(jié)果寄存(這些中間運(yùn)算結(jié)果不可以用于塊外部)。局部變量堆棧在程序塊執(zhí)行完成后,數(shù)據(jù)將被其他邏輯所需要的內(nèi)容所替代。
如果需要保存可以用于其他邏輯塊的狀態(tài),應(yīng)使用PLC的內(nèi)部標(biāo)志寄存器M或變量存儲(chǔ)器V。