西門(mén)子s7-300/400的plc用戶(hù)程序結(jié)構(gòu)與s7-200有明顯的不同,可以使用線(xiàn)性化結(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)稱(chēng)為“邏輯塊(logic block)”;系統(tǒng)程序塊(sfc)、系統(tǒng)功能塊(sfb)統(tǒng)稱(chēng)為“系統(tǒng)塊”。
(1)組織塊(ob)
組織塊(organization blocks,簡(jiǎn)稱(chēng)ob)提供了plc內(nèi)部cpu操作系統(tǒng)與用戶(hù)程序間的接口,它是由cpu操作系統(tǒng)直接進(jìn)行調(diào)用的邏輯塊,用來(lái)管理plc程序中各組成部分的調(diào)用和執(zhí)行中斷。ob決定了plc用戶(hù)程序的結(jié)構(gòu)與塊的調(diào)用順序,起到了“管理”用戶(hù)程序的作用。
s7-300/400不同的cpu類(lèi)型,可以選擇、支持不同的ob塊,但ob1是所有plc用戶(hù)程序的循環(huán)控制塊,它是運(yùn)行plc用戶(hù)程序的前提條件,因此,任何plc程序、任何cpu都不可以缺少ob1。
ob塊的調(diào)用條件被稱(chēng)為“觸發(fā)事件”,根據(jù)“觸發(fā)事件”的不同,ob塊可以分為若干級(jí)別,各個(gè)級(jí)別有不同的優(yōu)先級(jí),高優(yōu)先級(jí)的ob可以中斷低優(yōu)先級(jí)ob的執(zhí)行。如果需要,s7系列plc除ob1外,還可以使用多個(gè)ob塊。
(2)程序塊(fc)
程序塊(function,簡(jiǎn)稱(chēng)fc)是由用戶(hù)編寫(xiě)的、不需要專(zhuān)門(mén)數(shù)據(jù)塊的常用邏輯塊。
fc塊在程序中一般不可以重復(fù)調(diào)用,在大多數(shù)場(chǎng)合,fc塊應(yīng)直接使用plc的“絕對(duì)地址”或“符號(hào)地址”進(jìn)行編程,但根據(jù)需要,可以定義部分程序變量。
與s7-200 -樣,fc塊的“臨時(shí)變量”同樣存儲(chǔ)在局部變量數(shù)據(jù)堆棧(l)中,這一區(qū)域?yàn)槿砍绦驂K所公用,只可以用于fc塊內(nèi)部使用的中間運(yùn)算結(jié)果寄存(這些中間運(yùn)算結(jié)果不可以用于fc塊外部);程序塊執(zhí)行完成后,局部變量數(shù)據(jù)堆棧內(nèi)的數(shù)據(jù)將被其他塊所需要的內(nèi)容所替代。如果需要保存可以用于其他邏輯塊的狀態(tài),應(yīng)使用plc的內(nèi)部標(biāo)志寄存器m或使用“數(shù)據(jù)塊db”。
在程序塊fc中,有部分為plc生產(chǎn)廠家所提供的、集成在s7 cpu操作系統(tǒng)中的邏輯塊,稱(chēng)為系統(tǒng)程序塊(system function,簡(jiǎn)稱(chēng)sfc)。系統(tǒng)程序塊sfc屬于plc內(nèi)部操作系統(tǒng)的一部分,用戶(hù)不需要編寫(xiě),也不可以對(duì)其進(jìn)行編輯,但可以根據(jù)需要直接調(diào)用。
(3)功能塊(fb)
功能塊(function blocks,簡(jiǎn)稱(chēng)fb塊)是由用戶(hù)編寫(xiě)的、需要專(zhuān)用數(shù)據(jù)塊(instance data blocks,稱(chēng)為“即時(shí)數(shù)據(jù)塊”或“背景數(shù)據(jù)塊”,簡(jiǎn)稱(chēng)di)支持的常用邏輯塊。
fb塊與fc塊的作用基本相同,但fb中除可以使用“絕對(duì)地址”或“符號(hào)地址”進(jìn)行編程外,在結(jié)構(gòu)化編程時(shí)必須使用“程序變量”進(jìn)行編程,因此,fb必須配套的、獨(dú)立的數(shù)據(jù)存儲(chǔ)區(qū)域——“即時(shí)數(shù)據(jù)塊di”。di -方面可以為調(diào)用fb提供執(zhí)行程序所需要的“程序變量”賦值與其他數(shù)據(jù),另一方面,功能塊fb也能通過(guò)di給調(diào)用它的邏輯塊返回所需要的數(shù)據(jù)。
與功能調(diào)用塊fc -樣,功能塊fb中也有部分為plc生產(chǎn)廠家所提供的、集成在s7 cpu操作系統(tǒng)中的功能塊,稱(chēng)為系統(tǒng)功能塊(system function blocks,簡(jiǎn)稱(chēng)sfb)。系統(tǒng)功能塊sfb同樣屬于plc內(nèi)部操作系統(tǒng)的一部分,用戶(hù)不需要編寫(xiě),也不可以對(duì)其進(jìn)行編輯,但可以根據(jù)需要直接調(diào)用。
(4)數(shù)據(jù)塊(db)
數(shù)據(jù)塊(data blocks,簡(jiǎn)稱(chēng)db)是用來(lái)存放執(zhí)行用戶(hù)程序時(shí)所需的數(shù)據(jù)與存儲(chǔ)程序執(zhí)行結(jié)果的數(shù)據(jù)存儲(chǔ)區(qū),其作用與標(biāo)志寄存器類(lèi)似,但數(shù)量更多。數(shù)據(jù)塊db按不同的用途可以分為即時(shí)數(shù)據(jù)塊(instance datablocks,又稱(chēng)背景數(shù)據(jù)塊,簡(jiǎn)稱(chēng)di)和通用數(shù)據(jù)塊(data blocks,又稱(chēng)共享數(shù)據(jù)塊,簡(jiǎn)稱(chēng)db)兩類(lèi)。
即時(shí)數(shù)據(jù)塊( di)用于傳遞功能塊的參數(shù),只能被指定的功能塊fb訪(fǎng)問(wèn)。調(diào)用功能塊fb時(shí),必須同時(shí)指定用于該功能塊的即時(shí)數(shù)據(jù)塊di,即時(shí)數(shù)據(jù)塊內(nèi)的數(shù)據(jù)可以自動(dòng)生成,它們可以是fb變量聲明表中的數(shù)據(jù)(不含臨時(shí)變量)。
通用數(shù)據(jù)塊(db)用于存儲(chǔ)plc的全局?jǐn)?shù)據(jù),所有的fb、fc或ob都可以對(duì)通用數(shù)據(jù)塊進(jìn)行讀寫(xiě)操作,因此,又被稱(chēng)為共享數(shù)據(jù)塊。通用數(shù)據(jù)塊內(nèi)的數(shù)據(jù)不會(huì)因用戶(hù)程序的結(jié)束而刪除。