西門子PLC?S7-300/400的用戶程序結(jié)構(gòu)與S7-200有明顯的不同,可以使用線性化結(jié)構(gòu)以及功能調(diào)用式結(jié)構(gòu)與結(jié)構(gòu)化編程。
采用調(diào)用式結(jié)構(gòu)與結(jié)構(gòu)化編程時(shí),程序以組織塊(OB)、程序塊(FC)、功能塊(FB)、系統(tǒng)程序塊(SFC)、系統(tǒng)功能塊(SFB)、數(shù)據(jù)塊(DB)等形式出現(xiàn),其中,組織塊(OB)、程序塊(FC)、功能塊(FB)統(tǒng)稱為“邏輯塊(Logic Block)”;系統(tǒng)程序塊(SFC)、系統(tǒng)功能塊(SFB)統(tǒng)稱為“系統(tǒng)塊”。
注:快捷菜單中的其它兩項(xiàng):數(shù)據(jù)類型和變量表。數(shù)據(jù)類型(UDT)用于指定程序中數(shù)據(jù)元素的大小與格式;變量表(VAT)用來在程序調(diào)試和運(yùn)行時(shí)修改和監(jiān)視變量的內(nèi)容(在地址欄中輸入地址后,符號欄中會自動(dòng)顯示在符號表中定義的符號)。
這幾種程序塊的功能簡要說明如下:
調(diào)用程序塊:OB,F(xiàn)B,F(xiàn)C(可以調(diào)用除OB塊外的其它程序塊);
被調(diào)用程序塊:FB,F(xiàn)C,SFB,SFC。
1、組織塊OB
OB由系統(tǒng)自動(dòng)調(diào)用,并執(zhí)行用戶在OB塊中編寫的程序,所以O(shè)B的基本作用是調(diào)用用戶程序。在OB塊中編寫程序的最大容量,S7-300是16KB,S7-400是64KB。除主程序循環(huán)OB1外,其它OB均是由事件觸發(fā)的中斷。
2、函數(shù)FC
函數(shù)FC有兩個(gè)作用:
(1)作為子程序用;
(2)作為函數(shù)用,函數(shù)中通常帶形參。
函數(shù)中程序的最大容量,S7-300是16KB,S7-400是64KB。
FC的形參通常也稱為接口區(qū),參數(shù)類型分為輸入?yún)?shù),輸出參數(shù),輸入/輸出參數(shù)和臨時(shí)數(shù)據(jù)區(qū)。
在編寫函數(shù)FC的輸出參數(shù)時(shí),應(yīng)避免沒有直接輸出(否則,可能輸出一個(gè)隨機(jī)值,影響程序的判斷)。可以在函數(shù)的開始,將字輸出參數(shù)清0,位輸出參數(shù)復(fù)位。
3、函數(shù)塊FB
FB與FC相比,F(xiàn)B每次調(diào)用都必須分配一個(gè)背景數(shù)據(jù)塊,用來存儲接口數(shù)據(jù)區(qū)(TEMP類型除外)和運(yùn)算的中間數(shù)據(jù)。其它程序可以直接使用背景數(shù)據(jù)區(qū)中的數(shù)據(jù)。
FB中程序的最大容量,S7-300是16KB,S7-400是64KB。
FB的接口區(qū)比FC多了一個(gè)靜態(tài)數(shù)據(jù)區(qū)(STAT),用來存儲中間變量。
程序調(diào)用FB時(shí),形參不像FC那樣必須賦值,可以通過背景數(shù)據(jù)塊直接賦值。
由于FB帶有背景數(shù)據(jù)塊,輸出參數(shù)不會輸出隨機(jī)值,可以不在FB中編寫初始化程序。
4、數(shù)據(jù)塊DB
DB用來存儲用戶數(shù)據(jù)及程序的中間變量,為全局變量。DB的最大容量,S7-300為32KB,S7-400為64KB。
DB可分為共享數(shù)據(jù)塊(Share DB)、背景數(shù)據(jù)塊(Instance DB)和用戶自定義數(shù)據(jù)(UDT)類型的數(shù)據(jù)塊。
共享數(shù)據(jù)塊可作為所有程序使用的全局變量,在CPU允許的條件下,一個(gè)程序可創(chuàng)建任意多個(gè)DB,每個(gè)DB的最大容量為64KB。默認(rèn)條件下,共享數(shù)據(jù)塊為掉電保持,在其屬性菜單中選中“Non Retain”可以更改為掉電數(shù)據(jù)丟失。如CPU中無足夠的內(nèi)部存儲空間保存數(shù)據(jù),可將指定的數(shù)據(jù)保存到共享數(shù)據(jù)塊。存儲在共享數(shù)據(jù)塊中的數(shù)據(jù)可被其它任意一個(gè)塊調(diào)用(全局變量)。這一點(diǎn)和背景數(shù)據(jù)塊不同,背景數(shù)據(jù)塊只能被指定的功能塊(FB)使用,保存在背景數(shù)據(jù)塊中的數(shù)據(jù)只能在這個(gè)功能塊中有效。
背景數(shù)據(jù)塊與FB和SFB關(guān)聯(lián),也是全局變量。背景數(shù)據(jù)塊和共享數(shù)據(jù)塊相比,只保存與FB或SFB接口數(shù)據(jù)區(qū)(Temp)相關(guān)的數(shù)據(jù)。背景數(shù)據(jù)塊中有一種比較特殊的數(shù)據(jù)塊,稱為多重背景數(shù)據(jù)塊。有關(guān)多重背景數(shù)據(jù)塊的用法和使用注意事項(xiàng)請參看《怎樣使用多重背景數(shù)據(jù)塊》。
基于UDT的數(shù)據(jù)塊為全局變量,提供一個(gè)固定格式的數(shù)據(jù)結(jié)構(gòu),便于用戶使用。
5、系統(tǒng)函數(shù)(SFC)和系統(tǒng)函數(shù)塊(SFB)
SFC和SFB集成在CPU中,相當(dāng)于系統(tǒng)提供的可供用戶程序調(diào)用的FC或FB,實(shí)現(xiàn)與CPU系統(tǒng)相關(guān)的一些功能,如讀寫CPU時(shí)鐘等功能。調(diào)用SFB需要背景數(shù)據(jù)塊。