北京西門(mén)子S7-200SMARTPLC代理批發(fā)銷(xiāo)售

結(jié)構(gòu)化編程將復(fù)雜的自動(dòng)化任務(wù)分解成能夠反映過(guò)程的工藝、功能或可以反復(fù)使用的小任務(wù),這些任務(wù)由相應(yīng)的程序塊來(lái)表示,程序運(yùn)行時(shí)所需的大量數(shù)據(jù)和變量存儲(chǔ)在數(shù)據(jù)塊中。某些程序塊可以用來(lái)實(shí)現(xiàn)相同或相近的功能。這些程序塊是相對(duì)獨(dú)立的,它們被OB1或別的程序塊調(diào)用。
在塊調(diào)用中,調(diào)用者可以是各種邏輯塊,包括用戶(hù)編寫(xiě)的組織塊(OB)、FB、FC和系統(tǒng)提供的SFB和SFC,被調(diào)用的塊是除OB1外的所有邏輯塊。調(diào)用功能塊時(shí)需要為其一個(gè)背景數(shù)據(jù)塊,背景數(shù)據(jù)塊在功能塊調(diào)用的同時(shí)被打開(kāi),在調(diào)用結(jié)束時(shí)被關(guān)閉。
在給功能塊編程時(shí)使用的是形參,調(diào)用它時(shí)需要使用實(shí)參來(lái)為形參賦值。在一個(gè)項(xiàng)目中,可以多次調(diào)用同一個(gè)塊,例如在調(diào)用控制電動(dòng)機(jī)的塊時(shí),將不同的實(shí)參賦值給形參,就可以實(shí)現(xiàn)對(duì)類(lèi)似但不*相同的被控對(duì)象(例如直流電機(jī)和交流電機(jī))的控制。
塊調(diào)用及子程序的調(diào)用,可以嵌套調(diào)用,即被調(diào)用的塊同時(shí)還可以調(diào)用其他的塊。嵌套調(diào)用的嵌套深度與CPU的型號(hào)相關(guān)。
嵌套調(diào)用的深度同時(shí)還與局部數(shù)據(jù)堆棧(L堆棧)有關(guān)。每個(gè)OB需要至少20B的L內(nèi)存。當(dāng)塊A調(diào)用塊B時(shí),塊A的臨時(shí)變量將被壓入L堆棧進(jìn)行現(xiàn)場(chǎng)保護(hù)。
在圖7-1中,OB1調(diào)用FB1,FB1調(diào)用FC1,應(yīng)按下面的順序創(chuàng)建塊:FC1→FB1及其背景數(shù)據(jù)塊→OB1,即編程時(shí)被調(diào)用的塊必須已經(jīng)存在。
程序被分為不同的邏輯塊,每個(gè)塊包含了完成部分控制任務(wù)所需的邏輯指令。組織塊OB1(主程序)中的指令決定在什么情況下調(diào)用哪一個(gè)塊,功能和功能塊(子程序)用來(lái)完成不同的過(guò)程任務(wù)。被調(diào)用的塊執(zhí)行完后,返回到OB的調(diào)用點(diǎn),繼續(xù)執(zhí)行OB1。
模塊化編程的程序被分為若干塊,易于實(shí)現(xiàn)多人同時(shí)對(duì)一個(gè)項(xiàng)目編程。由于只在需要時(shí)執(zhí)行相關(guān)的指令,因此提高了CPU的執(zhí)行效率。 線(xiàn)性化編程類(lèi)似硬件繼電器控制電路,整個(gè)系統(tǒng)的控制程序放在主循環(huán)控制組織塊OB1(主程序)中,每一次循環(huán)掃描都要不斷地順序執(zhí)行OB1中的全部指令。這種方法的程序結(jié)構(gòu)簡(jiǎn)單,不涉及功能、功能塊、數(shù)據(jù)塊、局部變量和中斷等比較復(fù)雜的概念,容易入門(mén),一般在編寫(xiě)簡(jiǎn)單的控制系統(tǒng)程序時(shí)使用。
由于所有的指令都集中在一個(gè)塊中,即使程序中的某些部分在大多數(shù)時(shí)候都不需要執(zhí)行,但每個(gè)掃描周期都需要執(zhí)行所有指令,CPU的執(zhí)行效率比較低。此外如果需要多次執(zhí)行相同或相似的程序就需要重復(fù)編寫(xiě)程序。
與SFB相比,SFC沒(méi)有存儲(chǔ)功能。STEP7提供以下的SFC:復(fù)制及塊功能,檢查程序,處理時(shí)鐘和運(yùn)行時(shí)間計(jì)數(shù)器,數(shù)據(jù)傳送,在多CPU模式下的CPU之間傳送事件,處理時(shí)間日期中斷和延時(shí)中斷,處理同步錯(cuò)誤、中斷錯(cuò)誤和異步錯(cuò)誤,有關(guān)靜態(tài)和動(dòng)態(tài)系統(tǒng)數(shù)據(jù)的信息,過(guò)程映像刷新和位域處理,模塊尋址,分布式I/O,全局?jǐn)?shù)據(jù)通信,非組態(tài)連接的通信、生成與塊相關(guān)的信息等。
數(shù)據(jù)塊是用來(lái)存放用戶(hù)程序執(zhí)行時(shí)所需要的變量數(shù)據(jù)的數(shù)據(jù)區(qū)。與邏輯塊不同,在數(shù)據(jù)塊中沒(méi)有PLC的指令,STEP7按數(shù)據(jù)形成的順序自動(dòng)地為數(shù)據(jù)塊總的變量分配地址。數(shù)據(jù)塊分為共享數(shù)據(jù)塊和背景數(shù)據(jù)塊。數(shù)據(jù)塊的大容量與CPU的型號(hào)有關(guān)。
數(shù)據(jù)塊中的基本數(shù)據(jù)類(lèi)型有BOOL、REAL和INTEGER( INT)等。結(jié)構(gòu)化數(shù)據(jù)類(lèi)型由基本數(shù)據(jù)類(lèi)型組成。在STEP7中,可以用在符號(hào)表中定義的符號(hào)來(lái)代替數(shù)據(jù)塊中的數(shù)據(jù)地址,以方便程序的編寫(xiě)與閱讀。
(1)共享數(shù)據(jù)塊(Share Block) 共享數(shù)據(jù)塊用來(lái)存儲(chǔ)全局?jǐn)?shù)據(jù),所有的邏輯塊都可以在共享數(shù)據(jù)塊中進(jìn)行數(shù)據(jù)的讀寫(xiě)。CPU可以同時(shí)打開(kāi)一個(gè)共享數(shù)據(jù)塊和一個(gè)背景數(shù)據(jù)塊。
(2)背景數(shù)據(jù)塊(Instance Data Block) 背景數(shù)據(jù)塊中的數(shù)據(jù)是自動(dòng)生成的,它們是功能塊的變量聲明表中除臨時(shí)變量( TEMP)外的數(shù)據(jù)。背景數(shù)據(jù)塊用于對(duì)功能塊傳遞參數(shù),FB的實(shí)參和靜態(tài)數(shù)據(jù)存放在背景數(shù)據(jù)塊中。調(diào)用功能塊時(shí)要同時(shí)背景數(shù)據(jù)塊,背景數(shù)據(jù)塊只能被特定的功能塊訪(fǎng)問(wèn)。
功能塊是用戶(hù)編寫(xiě)的有固定參數(shù)存儲(chǔ)區(qū)(背景數(shù)據(jù)塊)的邏輯塊,在每次調(diào)用功能塊時(shí),要給功能塊提供各種不同類(lèi)型的數(shù)據(jù),功能塊也要返回?cái)?shù)據(jù)給調(diào)用它的塊。這些數(shù)據(jù)以靜態(tài)變量( STAT)的形式存放在的背景數(shù)據(jù)塊(DI)中,臨時(shí)變量存儲(chǔ)在局部數(shù)據(jù)堆棧中。功能塊執(zhí)行完成后,背景數(shù)據(jù)塊中的數(shù)據(jù)不會(huì)丟失,但臨時(shí)變量會(huì)被其他數(shù)據(jù)覆蓋。

在編寫(xiě)調(diào)用FB或SFB(系統(tǒng)功能塊)的程序時(shí),必須相應(yīng)的DI,調(diào)用時(shí)DI被自動(dòng)打開(kāi)。在編譯FB或SFB時(shí)自動(dòng)生成背景數(shù)據(jù)塊中的數(shù)據(jù)。可以在用戶(hù)程序或HMI(人機(jī)界面)中訪(fǎng)問(wèn)這些背景數(shù)據(jù)。
PLC中的程序分為操作系統(tǒng)和用戶(hù)程序,操作系統(tǒng)用來(lái)實(shí)現(xiàn)一些與特定的控制任務(wù)無(wú)關(guān)的功能,如PLC的啟動(dòng)、對(duì)輸入/輸出映像的刷新、調(diào)用用戶(hù)程序、處理中斷和錯(cuò)誤、管理存儲(chǔ)器及處理通信等。
用戶(hù)程序由用戶(hù)在STEP7中生成,然后下載到CPU中。用戶(hù)程序包含了對(duì)特定的自動(dòng)化任務(wù)處理所需要的所有功能,例如PLC啟動(dòng)的條件、處理過(guò)程數(shù)據(jù)、對(duì)中斷響應(yīng)和處理程序正常運(yùn)行中的干擾等。
STEP7將用戶(hù)編寫(xiě)的程序和程序所需要的數(shù)據(jù)存放在塊中,使單個(gè)的程序部件標(biāo)準(zhǔn)化。通過(guò)在塊內(nèi)和塊間子程序的調(diào)用,使用戶(hù)程序結(jié)構(gòu)化,可以簡(jiǎn)化程序組織,使程序易于修改、查錯(cuò)和調(diào)試。塊結(jié)構(gòu)顯著地增加了PLC程序的組織透明性、可理解性和易維護(hù)性。各種塊的說(shuō)明見(jiàn)表7-1,在OB、FB、FC、SFB和SFC中都包含了部分程序,所以這些塊統(tǒng)稱(chēng)為邏輯塊。
表7-1 用戶(hù)程序中的塊
塊 | 簡(jiǎn)要描述 |
組織塊(OB) | 操作系統(tǒng)與用戶(hù)程序的接口,決定用戶(hù)程序的結(jié)構(gòu) |
系統(tǒng)功能塊(SFB) | CPU提供的重要系統(tǒng)功能,有存儲(chǔ)區(qū) |
系統(tǒng)功能(SFC) | CPU提供的重要系統(tǒng)功能,無(wú)存儲(chǔ)區(qū) |
功能塊(FB) | 用戶(hù)編寫(xiě)的包含常用功能的子程序,有存儲(chǔ)區(qū) |
功能(FC) | 用戶(hù)編寫(xiě)的包含常用功能的子程序,無(wú)存儲(chǔ)區(qū) |
背景數(shù)據(jù)塊(DI) | 調(diào)用FB和SFB時(shí)用于傳遞參數(shù)的數(shù)據(jù)塊,編譯時(shí)自動(dòng)生成數(shù)據(jù) |
共享數(shù)據(jù)塊(DB) | 存儲(chǔ)用戶(hù)數(shù)據(jù)的數(shù)據(jù)區(qū)域,供所有塊共享 |
一個(gè)功能塊可以有多個(gè)背景數(shù)據(jù)塊,使功能塊可以控制不同的對(duì)象??梢栽?/span>FB的變量聲明表中為形參賦初值,它被自動(dòng)寫(xiě)入相應(yīng)的背景數(shù)據(jù)塊中。在調(diào)用FB時(shí),CPU將實(shí)參分配給形參的值存放在DI中。如果調(diào)用塊時(shí)沒(méi)有提供實(shí)參,則使用上一次調(diào)用時(shí)存放在DI中的參數(shù)。
功能是用戶(hù)編寫(xiě)的沒(méi)有固定參數(shù)存儲(chǔ)區(qū)的塊,其臨時(shí)變量存儲(chǔ)在局部數(shù)據(jù)堆棧中,功能執(zhí)行結(jié)束后,這些數(shù)據(jù)就被其他數(shù)據(jù)覆蓋了。可以用共享數(shù)據(jù)區(qū)來(lái)存儲(chǔ)那些在功能執(zhí)行結(jié)束后需要保留的數(shù)據(jù)。不能對(duì)功能的參數(shù)分配初始值。
在調(diào)用功能和功能塊時(shí)用實(shí)參來(lái)代替形參,例如將“I0.0”(實(shí)參)賦值給“Start”(形參)。形參是實(shí)參在邏輯塊中的名稱(chēng),功能沒(méi)有背景數(shù)據(jù)塊。功能和功能塊用輸入(IN)、輸出( OUT)和輸入/輸出(IN/OUT)參數(shù)作為指針,指向調(diào)用它的邏輯塊所提供的實(shí)參。功能被調(diào)用后可以為調(diào)用它的邏輯塊提供一個(gè)類(lèi)型為RETURN的返回值。
組織塊是操作系統(tǒng)與用戶(hù)程序的接口,由操作系統(tǒng)調(diào)用,用于控制循環(huán)掃描和中斷程序的執(zhí)行、PLC的啟動(dòng)和錯(cuò)誤處理等,有的CPU只能使用部分組織塊。
(1) OB1。OB1用于循環(huán)處理,是用戶(hù)程序中的主程序。操作系統(tǒng)在PLC的每一次循環(huán)掃描中調(diào)用一次OB1。一個(gè)循環(huán)周期分為輸入、程序執(zhí)行、輸出和其他任務(wù),例如下載、刪除塊和發(fā)送全局?jǐn)?shù)據(jù)等。
(2)中斷處理。如果出現(xiàn)一個(gè)中斷事件,例如時(shí)間日期中斷、硬件中斷和錯(cuò)誤處理中斷等,當(dāng)前正在執(zhí)行的塊在當(dāng)前語(yǔ)句執(zhí)行完成后被停止執(zhí)行(即被中斷事件所中斷,中斷的位置稱(chēng)為斷點(diǎn)),操作系統(tǒng)會(huì)調(diào)用一個(gè)分配給該事件的組織塊。該組織塊執(zhí)行完成后,被中斷的塊將在斷點(diǎn)處繼續(xù)執(zhí)行。
這意味這部分用戶(hù)程序可以不用在每次循環(huán)中處理,而是在需要時(shí)才及時(shí)地被處理。用戶(hù)程序可以分解為在不同組織塊中的子程序。如果用戶(hù)程序是對(duì)一個(gè)重要事件的響應(yīng),而該事件出現(xiàn)的次數(shù)相對(duì)較少,例如壓力或液位達(dá)到大,那么處理中斷事件的程序放在該事件驅(qū)動(dòng)的OB中。
(3)中斷優(yōu)先級(jí)。OB按觸發(fā)事件分為多個(gè)級(jí)別,這些級(jí)別具有不同的優(yōu)先級(jí),高優(yōu)先級(jí)的OB可以中斷低優(yōu)先級(jí)的OB。當(dāng)一個(gè)OB啟動(dòng)時(shí),將提供觸發(fā)它的初始化啟動(dòng)事件的詳細(xì)信息,這些信息可以在用戶(hù)程序中使用。
1.累加器( ACCUx)
32位的累加器是用來(lái)處理字節(jié)、字和雙字的寄存器。S7-300有兩個(gè)累加器(ACCU1和ACCU2),S7-400有四個(gè)累加器(ACCU1、ACCU2、ACCU3和ACCU4)??梢园巡僮鲾?shù)裝入累加器并進(jìn)行運(yùn)算和處理,保存在ACCU1中的運(yùn)算結(jié)果可以傳送到系統(tǒng)存儲(chǔ)器中。在處理8位或16位的操作數(shù)時(shí),數(shù)據(jù)存放在累加器的低端(即右對(duì)齊)。

2.16位狀態(tài)字寄存器
狀態(tài)字是一個(gè)16位的寄存器,用于存儲(chǔ)CPU在執(zhí)行指令的過(guò)程中產(chǎn)生的狀態(tài)。狀態(tài)字中的某些位用于決定某些指令是否執(zhí)行以及如何執(zhí)行,另外一些位則用于反映在執(zhí)行指令時(shí)產(chǎn)生的一些狀態(tài),用位邏輯指令和字邏輯指令可以對(duì)其進(jìn)行訪(fǎng)問(wèn)和檢測(cè)。
北京西門(mén)子S7-200SMARTPLC代理批發(fā)銷(xiāo)售