STEP7程序結(jié)構(gòu)的基本原理
S7-300/400系列CPU 原則上運(yùn)行兩個(gè)不同的程序:操作系統(tǒng)和用戶(hù)程序。
每個(gè)CPU都帶有集成的操作系統(tǒng),組織與特定控制任務(wù)無(wú)關(guān)的所有CPU功能和順序。操作系統(tǒng)任務(wù)包括下列各項(xiàng):處理重啟(熱啟動(dòng))和熱重啟;更新輸入的過(guò)程映像表,并輸出輸出過(guò)程映像表;調(diào)用用戶(hù)程序;采集中斷信息,調(diào)用中斷OB;識(shí)別錯(cuò)誤并進(jìn)行錯(cuò)誤處理;管理內(nèi)存區(qū)域;與編程設(shè)備和其它通訊伙伴進(jìn)行通訊;通過(guò)修改操作系統(tǒng)參數(shù)(操作系統(tǒng)默認(rèn)設(shè)置),可以在某些區(qū)域影響CPU響應(yīng)。
用戶(hù)程序則是由用戶(hù)進(jìn)行創(chuàng)建,在STEP 7中進(jìn)行編程后并將其下載到CPU中。它包含處理特定自動(dòng)化任務(wù)所要求的所有功能,其任務(wù)包括:確定CPU的重啟(熱啟動(dòng))和熱重啟條件,如用特定值初始化信號(hào);處理過(guò)程數(shù)據(jù),如產(chǎn)生二進(jìn)制信號(hào)的邏輯鏈接,獲取并評(píng)估模擬量信號(hào),指定用于輸出的二進(jìn)制信號(hào),輸出模擬值;響應(yīng)中斷;處理正常程序周期中的干擾。
2、用戶(hù)程序中的塊
在STEP 7編程軟件中進(jìn)行構(gòu)建的用戶(hù)程序,可以將程序分成單個(gè)或獨(dú)立的程序段,稱(chēng)為“塊”。,這對(duì)于一個(gè)大的工業(yè)自動(dòng)化過(guò)程來(lái)說(shuō)具有非常大的優(yōu)點(diǎn),比如易于理解、可以標(biāo)準(zhǔn)化、方便修改程序、簡(jiǎn)化測(cè)試等。表3-2所示為在S7用戶(hù)程序內(nèi)可使用多種塊的類(lèi)型。
OB、FB、SFB、FC和SFC包含程序段,因此也稱(chēng)為邏輯塊。每種塊類(lèi)型許可的塊數(shù)目和塊長(zhǎng)度由CPU決定。
3、組織塊
組織塊(OB)表示操作系統(tǒng)和用戶(hù)程序之間的接口,它由操作系統(tǒng)調(diào)用,控制循環(huán)中斷驅(qū)動(dòng)的程序執(zhí)行、plc啟動(dòng)特性和錯(cuò)誤處理。用戶(hù)可以在STEP 7中對(duì)組織塊進(jìn)行編程來(lái)確定CPU特性。
常見(jiàn)的組織塊主要包括以下部分(如圖1所示):
圖1常見(jiàn)的組織塊
組織塊確定單個(gè)程序段執(zhí)行的順序,即啟動(dòng)事件。啟動(dòng)事件觸發(fā)OB調(diào)用稱(chēng)為中斷,一個(gè)OB調(diào)用可以中斷另一個(gè)OB的執(zhí)行,哪個(gè)OB允許中斷另一個(gè)OB取決于其優(yōu)先級(jí),高優(yōu)先級(jí)的OB可以中斷低優(yōu)先級(jí)的OB,背景OB的優(yōu)先級(jí)最低。
可以通過(guò)STEP 7給中斷分配參數(shù),如通過(guò)參數(shù)分配,可以取消選定參數(shù)塊中的中斷OB或優(yōu)先級(jí):日歷中斷、延時(shí)中斷、循環(huán)中斷和硬件中斷(如圖2所示)。
圖2組織塊優(yōu)先級(jí)
必須說(shuō)明的是:S7-300 CPU上的組織塊優(yōu)先級(jí)固定,但是對(duì)于S7-400 CPU(和CPU 318),可以通過(guò)STEP 7 修改OB10 - OB47組織塊的優(yōu)先級(jí)或者可以將相同優(yōu)先級(jí)分配給多個(gè)OB。具有相同優(yōu)先級(jí)的OB按照其啟動(dòng)事件發(fā)生的先后次序進(jìn)行處理。
4、功能塊、功能和數(shù)據(jù)塊
功能塊(FB)是屬于用戶(hù)自己編程的塊,需要分配數(shù)據(jù)塊(DB)作為其內(nèi)存(實(shí)例數(shù)據(jù)塊),因此傳送到FB的參數(shù)和靜態(tài)變量保存在實(shí)例DB中,而臨時(shí)變量則保存在本地?cái)?shù)據(jù)堆棧中。執(zhí)行完FB時(shí),不會(huì)丟失實(shí)例DB中保存的數(shù)據(jù)。但執(zhí)行完FB時(shí),會(huì)丟失保存在本地?cái)?shù)據(jù)堆棧中的數(shù)據(jù)。
系統(tǒng)功能塊(SFB)是集成在S7 CPU中的功能塊,SFB是操作系統(tǒng)的一部分,不作為程序的一部分而被加載。同F(xiàn)B一樣,必須給SFB創(chuàng)建實(shí)例數(shù)據(jù)塊,然后將它們作為程序的一部分下載到CPU中。
功能(FC)也是屬于用戶(hù)自己編程的塊,是一種"不帶內(nèi)存"的邏輯塊。屬于FC的臨時(shí)變量保存在本地?cái)?shù)據(jù)堆棧中,執(zhí)行FC時(shí),該數(shù)據(jù)將丟失,為永久保存該數(shù)據(jù),功能也可使用共享數(shù)據(jù)塊。由于FC本身沒(méi)有內(nèi)存,因此,必須始終給它指定實(shí)際參數(shù)。不能給FC的本地?cái)?shù)據(jù)分配初始值。
FC和FB輸出參數(shù)之間的重要區(qū)別在于后者使用實(shí)例DB。在功能塊(FB)中,訪問(wèn)參數(shù)時(shí),使用實(shí)例DB中的實(shí)際參數(shù)副本。如果調(diào)用FB時(shí),沒(méi)有傳送輸入?yún)?shù)或沒(méi)有寫(xiě)訪問(wèn)輸出參數(shù),那么將使用原先保存在實(shí)例DB(實(shí)例DB = FB內(nèi)存)中的值。但功能(FC)沒(méi)有內(nèi)存。(http://www.diangon.com/版權(quán)所有)因此,與FB相反,將形式參數(shù)分配給這些FC不是可選,而是必須的。通過(guò)地址(指針跨過(guò)區(qū)域邊界指向目標(biāo))訪問(wèn)FC參數(shù)。當(dāng)數(shù)據(jù)區(qū)(數(shù)據(jù)塊)地址或調(diào)用塊的局部變量用作實(shí)際參數(shù)時(shí),實(shí)際參數(shù)的副本將臨時(shí)保存到用于傳送參數(shù)的調(diào)用塊的本地?cái)?shù)據(jù)區(qū)中。
系統(tǒng)功能(SFC)是集成在S7 CPU中的預(yù)編程功能,可以在程序中調(diào)用SFC。SFC屬于操作系統(tǒng),不能作為程序的一部分而被加載。同F(xiàn)C一樣,SFC也是"不具內(nèi)存"的塊。
與邏輯塊(如FB、OB等)相反,數(shù)據(jù)塊不包含STEP 7指令,它們用來(lái)存儲(chǔ)用戶(hù)數(shù)據(jù),即數(shù)據(jù)塊包含用戶(hù)程序使用的變量數(shù)據(jù)。共享數(shù)據(jù)塊則用來(lái)存儲(chǔ)可由所有其它塊訪問(wèn)的用戶(hù)數(shù)據(jù),其大小各不相同。用戶(hù)也可以任何方式構(gòu)造共享數(shù)據(jù)塊,滿(mǎn)足特定要求。
評(píng)論