![第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/41d68d7b-2837-46d5-8f11-0a42e4187d9a/41d68d7b-2837-46d5-8f11-0a42e4187d9a1.gif)
![第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/41d68d7b-2837-46d5-8f11-0a42e4187d9a/41d68d7b-2837-46d5-8f11-0a42e4187d9a2.gif)
![第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/41d68d7b-2837-46d5-8f11-0a42e4187d9a/41d68d7b-2837-46d5-8f11-0a42e4187d9a3.gif)
![第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/41d68d7b-2837-46d5-8f11-0a42e4187d9a/41d68d7b-2837-46d5-8f11-0a42e4187d9a4.gif)
![第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/41d68d7b-2837-46d5-8f11-0a42e4187d9a/41d68d7b-2837-46d5-8f11-0a42e4187d9a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5.1 編程方式與程序塊編程方式與程序塊5.2 數(shù)據(jù)塊與數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)塊與數(shù)據(jù)結(jié)構(gòu)5.3 S7系列系列PLC程序設(shè)計程序設(shè)計思考與練習(xí)題思考與練習(xí)題第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5.1 編程方式與程序塊編程方式與程序塊5.1.1 S7-300編程方式簡介編程方式簡介 S7-300系列PLC的編程語言是STEP 7。STEP 7繼承了STEP 5語言結(jié)構(gòu)化程序設(shè)計的優(yōu)點,用文件塊的形式管理用戶編寫的程序及程序運行所需的數(shù)據(jù)。如果這些文件塊是子程序,則可以通過調(diào)用語句,將它們組成結(jié)構(gòu)化的用戶程序。這樣,PLC的程序組織明確,結(jié)構(gòu)
2、清晰,易于修改。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5-1各塊的簡要說明見表5-1第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 為支持結(jié)構(gòu)化程序設(shè)計,STEP 7用戶程序通常由組織塊(OB)、功能塊(FB)或功能塊(FC)等三種類型的邏輯塊和數(shù)據(jù)塊(DB)組成。 組織塊(OB)是系統(tǒng)操作程序與用戶應(yīng)用程序在各種條件下的接口界面,用于控制程序的運行。OB塊根據(jù)操作系統(tǒng)調(diào)用的條件(如時間中斷、報警中斷等)可分成幾種類型,這些類型有不同的優(yōu)先級,高優(yōu)先級的OB可以中斷低優(yōu)先級的OB。每個S7 CPU包含一套可編程的OB塊(隨CPU而不同),不同的OB塊執(zhí)行特定的功能。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 OB1是
3、主程序循環(huán)塊,在任何情況下,它都是需要的。根據(jù)過程控制的復(fù)雜程度,可將所有程序放入OB1中進行線性編程,或?qū)⒊绦蛴貌煌倪壿媺K加以結(jié)構(gòu)化,通過OB1調(diào)用這些邏輯塊,并允許塊間的相互調(diào)用。塊的調(diào)用指令中止當(dāng)前塊(調(diào)用塊)的運行調(diào)用,然后執(zhí)行被調(diào)用塊的所有指令。一旦被調(diào)用的塊被完成,執(zhí)行調(diào)用指令的塊繼續(xù)執(zhí)行調(diào)用指令后的指令。調(diào)用塊可以是任何邏輯塊,被調(diào)用塊只能是功能塊(除OB外的邏輯塊)。圖5.1所示是一個STEP 7調(diào)用實例。除了OB1,操作系統(tǒng)可以調(diào)用其它的OB塊以響應(yīng)確定事件。其它可用的OB塊隨所用的CPU性能和控制過程的要求而定。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計圖5.1 STEP 7調(diào)用
4、過程示意圖背景DB共享DBFB/SFB背景DBFB/SFBOB操作系統(tǒng)FC/SFCFC/SFC共享DB第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 功能塊(FB、FC)實際上是用戶子程序,分為帶“記憶”的功能塊FB和不帶“記憶”的功能塊FC。前者有一個數(shù)據(jù)結(jié)構(gòu)與該功能塊的參數(shù)表完全相同的數(shù)據(jù)塊(DB)附屬于該功能塊,并隨功能塊的調(diào)用而打開,隨功能塊的結(jié)束而關(guān)閉。該附屬數(shù)據(jù)塊叫做背景數(shù)據(jù)塊(Instance Data Block),存放在背景數(shù)據(jù)塊中的數(shù)據(jù)在FB塊結(jié)束時繼續(xù)保持,即被“記憶”。功能塊FC沒有背景數(shù)據(jù)塊,當(dāng)FC完成操作后數(shù)據(jù)不能保持。 在調(diào)用功能塊時使用不同的背景數(shù)據(jù)塊,可以控制多個同類的對
5、象。DB201:電動機1電動機1的背景數(shù)據(jù)塊DB202:電動機2DB203:電動機3電動機2的背景數(shù)據(jù)塊電動機3的背景數(shù)據(jù)塊FB22:電動機圖 不同對象的背景數(shù)據(jù)塊第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計數(shù)據(jù)塊(DB)是用戶定義的用于存取數(shù)據(jù)的存儲區(qū),可以被打開或關(guān)閉。DB可以是屬于某個FB的情景數(shù)據(jù)塊,也可以是通用的全局數(shù)據(jù)塊,用于FB或FC。S7 CPU還提供標(biāo)準(zhǔn)系統(tǒng)功能塊(SFB、SFC),它們是預(yù)先編好的,經(jīng)過測試后集成在S7 CPU中的功能程序庫。用戶可以直接調(diào)用它們,高效地編制自己的程序。由于它們是操作系統(tǒng)的一部分,因此不需將其作為用戶程序下載到PLC。與FB塊相似,SFB需要一個背景數(shù)
6、據(jù)塊,并需將此DB塊作為程序的一部分安裝到CPU中。不同的CPU提供不同的SFB、SFC功能。系統(tǒng)數(shù)據(jù)塊(SDB)是為存放PLC參數(shù)所建立的系統(tǒng)數(shù)據(jù)存儲區(qū)。用STEP 7的S7組態(tài)軟件可以將PLC組態(tài)數(shù)據(jù)和其它操作參數(shù)存放于SDB中。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5.1.2 功能塊編程及調(diào)用功能塊編程及調(diào)用 功能塊由兩個主要部分組成:一部分是每個功能塊的變量聲明表,變量聲明表聲明此塊的局部數(shù)據(jù);另一部分是邏輯指令組成的程序,程序要用到變量聲明表中給出的局部數(shù)據(jù)。 當(dāng)調(diào)用功能塊時,需提供塊執(zhí)行時要用到的數(shù)據(jù)或變量,也就是將外部數(shù)據(jù)傳遞給功能塊,這被稱為參數(shù)
7、傳遞。參數(shù)傳遞的方式使得功能塊具有通用性,它可被其它的塊調(diào)用,以完成多個類似的控制任務(wù)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1. 變量聲明表變量聲明表(局部數(shù)據(jù)局部數(shù)據(jù)) 每個邏輯塊前部都有一個變量聲明表,在變量聲明表中定義邏輯塊用到的局部數(shù)據(jù)。局部數(shù)據(jù)分為參數(shù)和局部變量兩大類,局部變量又包括靜態(tài)變量和臨時變量(暫態(tài)變量)兩種。參數(shù)是在調(diào)用塊和被調(diào)用塊間傳遞的數(shù)據(jù)。靜態(tài)變量和臨時變量是僅供邏輯塊本身使用的數(shù)據(jù)。表5.1給出了局部數(shù)據(jù)聲明類型,表中內(nèi)容的排列順序也是在變量聲明表中聲明變量的順序和變量在內(nèi)存中的存儲順序。在邏輯塊中不需使用的局部數(shù)據(jù)類型,可以不必在變量聲明表中聲明。第5章 S7系列
8、程序結(jié)構(gòu)與程序設(shè)計表表5.1 局部數(shù)據(jù)類型局部數(shù)據(jù)類型變 量 名 類 型 說 明 輸入?yún)?shù) In 由調(diào)用邏輯塊的塊提供數(shù)據(jù),輸入給邏輯塊的指令 輸出參數(shù) Out 向調(diào)用邏輯塊的塊返回參數(shù),即從邏輯塊輸出結(jié)果數(shù)據(jù) I/O 參數(shù) In_Out 參數(shù)的值由調(diào)用塊的塊提供,由邏輯塊處理修改,然后返回 靜態(tài)變量 Stat 靜態(tài)變量存儲在背景數(shù)據(jù)塊中,塊調(diào)用結(jié)束后,其內(nèi)容被保留 臨時變量 Temp 臨時變量存儲在 L 堆棧中,塊執(zhí)行結(jié)束變量的值因被其它內(nèi)容覆蓋而丟掉 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 對于功能塊FB,操作系統(tǒng)為參數(shù)及靜態(tài)變量分配的存儲空間是背景數(shù)據(jù)塊。這樣參數(shù)變量在背景數(shù)據(jù)塊中留有運行結(jié)
9、果備份。在調(diào)用FB時,若沒有提供實參,則功能塊使用背景數(shù)據(jù)塊中的數(shù)值。操作系統(tǒng)在L堆棧中給FB的臨時變量分配存儲空間。 對于功能塊FC,操作系統(tǒng)在L堆棧中給FC的臨時變量分配存儲空間。由于沒有背景數(shù)據(jù)塊,因而FC不能使用靜態(tài)變量。輸入、輸出、I/O參數(shù)以指向?qū)崊⒌闹羔樞问酱鎯υ诓僮飨到y(tǒng)為參數(shù)傳遞而保留的額外空間中。 對于組織塊OB來說,其調(diào)用是由操作系統(tǒng)管理的,用戶不能參與。因此,OB只有定義在L堆棧中的臨時變量。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1) 形參 為保證功能塊對同一類設(shè)備控制的通用性,用戶在編程時就不能使用具體設(shè)備對應(yīng)的存儲區(qū)地址參數(shù)(如不能使用I1.0等),而是使用這類設(shè)備的抽
10、象地址參數(shù)。這些抽象參數(shù)稱為形式參數(shù),簡稱形參。將該設(shè)備的相應(yīng)實際存儲區(qū)地址參數(shù)(簡稱實參)傳遞給功能塊,功能塊在運行時以實參替代形參,從而可通過調(diào)用功能塊實現(xiàn)對具體設(shè)備的控制。當(dāng)對另一設(shè)備控制時,同樣也可通過調(diào)用實參將其傳遞給功能塊。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 形參需在功能塊的變量聲明表中定義,實參在調(diào)用功能塊時給出。在功能塊的不同調(diào)用處,可為形參提供不同的實參,但實參的數(shù)據(jù)類型必須與形參一致。用戶程序可定義功能塊的輸入值參數(shù)或輸出值參數(shù),也可定義一參數(shù)作為輸入/輸出值。參數(shù)傳遞可將調(diào)用塊的信息傳遞給被調(diào)用塊,也能把被調(diào)用塊的運行結(jié)果返回給調(diào)用塊。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計
11、2) 靜態(tài)變量 靜態(tài)變量在PLC運行期間始終被存儲。S7將靜態(tài)變量定義在背景數(shù)據(jù)塊中,當(dāng)被調(diào)用塊運行時,能讀出或修改靜態(tài)變量;被調(diào)用塊運行結(jié)束后,靜態(tài)變量保留在數(shù)據(jù)塊中。由于只有功能塊FB有關(guān)聯(lián)的背景數(shù)據(jù)塊,因此只能為FB定義靜態(tài)變量。功能塊FC不能有靜態(tài)變量。 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3) 臨時變量 臨時變量僅在邏輯塊運行時有效,邏輯塊結(jié)束時存儲臨時變量的內(nèi)存被操作系統(tǒng)另行 分配。S7將臨時變量定義在L堆棧中,L堆棧是為存儲邏輯塊的臨時變量而專設(shè)的。當(dāng)塊程序運行時,在L堆棧中建立該塊的臨時變量,一旦塊執(zhí)行結(jié)束,堆棧重新分配,因而信息丟失。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2.
12、邏輯塊局部數(shù)據(jù)的數(shù)據(jù)類型邏輯塊局部數(shù)據(jù)的數(shù)據(jù)類型 在變量聲明表中,要明確局部數(shù)據(jù)的數(shù)據(jù)類型,這樣操作系統(tǒng)才能給變量分配確定的 存儲空間。局部數(shù)據(jù)可以是基本數(shù)據(jù)類型或復(fù)式數(shù)據(jù)類型,也可以是專門用于參數(shù)傳遞 的所謂的“參數(shù)類型”。參數(shù)類型包括定時器、計數(shù)器、塊的地址或指針等,見表5.2。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計表表5.2 參數(shù)類型變量參數(shù)類型變量參數(shù)類型 大 小 說 明 定時器(Timer) 2 B 在功能塊中定義一個定時器形參,調(diào)用時賦予定時器實參 計數(shù)器(Counter) 2 B 在功能塊中定義一個計數(shù)器形參,調(diào)用時賦予計數(shù)器實參 塊: Block_FB Block_FC Block
13、_DB Block_SDB 2 B 在功能塊中定義一個功能塊或數(shù)據(jù)塊形參變量,調(diào)用時給功能塊類或數(shù)據(jù)塊類形參賦予實際的功能塊或數(shù)據(jù)塊編號,如 FC 101、DB 42 指針(Pointer) 6 B 在功能塊中定義一個形參, 該形參說明的是內(nèi)存的地址指針。例如,調(diào)用時可給形參賦予實參 P#M50.0,以訪問內(nèi)存 M50.0 ANY 10 B 當(dāng)實參的數(shù)據(jù)類型未知時,可以使用該類型 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1) 定時器或計數(shù)器參數(shù)類型定時器或計數(shù)器參數(shù)類型 在功能塊中定義一個定時器或計數(shù)器類型的形參,功能塊就能使用一個定時器或計數(shù)器,而不需明確具體的定時器或計數(shù)器,等到調(diào)用該功能塊時
14、再確定定時器或計數(shù)器號。這使用戶程序能靈活性地分配和使用定時器或計數(shù)器。當(dāng)給定時器或計數(shù)器參數(shù)類型形參分配實參時,在“T”或“C”后跟一個有效整數(shù),如T 100。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2) 塊參數(shù)類型 當(dāng)定義一個作為輸入/輸出的塊時,參數(shù)聲明決定了塊的類型(FB、FC、DB等)。當(dāng)為塊參數(shù)類型形參分配實參時,可以使用物理地址,如FC 101,也可使用符號地址,如“valve”。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3) 指針參數(shù)類型 一個指針給出的是變量的地址,而不是變量的數(shù)值大小。在有些功能塊中,可能使用指針編程更為方便。用定義指針類型的形參,就能在功能塊中先使用一個虛設(shè)的指針,
15、待調(diào)用功能塊時再為其賦予確定的地址。當(dāng)為指針參數(shù)類型形參分配實參時,需要指明內(nèi)存地址,例如P#M50.0。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 4) ANY參數(shù)類型 當(dāng)實參的數(shù)據(jù)類型不能確定或在功能塊中需要使用變化的數(shù)據(jù)類型時,可以把形參定義為ANY參數(shù)類型。這樣就可以將任何數(shù)據(jù)類型的實參賦給ANY類形參,而不必像其它類型那樣保證實參、形參類型一致。STEP 7自動為ANY類型分配80 bit的內(nèi)存,STEP 7用這80 bit存儲實參的起始地址、數(shù)據(jù)類型和長度編碼。 例如,功能塊FC 100有三個參數(shù)(in_par1、in_par2和in_par3),它們都被定義為ANY類型。當(dāng)功能塊FB 1
16、0調(diào)用功能塊FC 100時,F(xiàn)Bl0傳遞的可以是一個整數(shù)(靜態(tài)變量Speed)、一個字(MW 100)或數(shù)據(jù)塊DB 10中的雙字(DB 10.DBD 40)。而當(dāng)功能塊FB 11調(diào)用功能塊FC 100時,F(xiàn)B 11傳遞的可以是一個實數(shù)數(shù)組(臨時變量Thermo)、一個布爾值(M 1.3)或一個定時器(T2)。FB 10和FB 11分別調(diào)用FC 100時,傳遞的實參類型完全不同。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3. 塊調(diào)用過程及內(nèi)存分配塊調(diào)用過程及內(nèi)存分配 CPU提供塊堆棧(B堆棧)來存儲與處理被中斷塊的有關(guān)信息。當(dāng)發(fā)生塊調(diào)用或有來自更高優(yōu)先級的中斷時,就有相關(guān)的塊信息存儲在B堆棧里,并影響
17、部分內(nèi)存和寄存器。圖5.2顯示了調(diào)用塊時B堆棧與L堆棧的變化。圖5.3提供了關(guān)于STEP 7的塊調(diào)用情況。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計圖5.2 堆棧與L堆棧先前塊的數(shù)據(jù)(仍是激活的)DB寄存器(DB和DI)臨時數(shù)據(jù)指針塊號返回地址先前塊的數(shù)據(jù)(仍是激活的)DB寄存器(DB和DI)臨時數(shù)據(jù)指針塊號返回地址塊堆棧(B堆棧)可執(zhí)行的用戶程序邏輯塊數(shù)據(jù)塊工作內(nèi)存仍是激活的先前塊的臨時數(shù)據(jù)L堆棧數(shù)據(jù)塊寄存器打開的數(shù)據(jù)塊號當(dāng)前塊的臨時數(shù)據(jù)打開的背景數(shù)據(jù)塊號被中斷塊的數(shù)據(jù)DB寄存器(DB和DI)臨時數(shù)據(jù)指針塊號返回地址第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計圖5.3 調(diào)用指令對CPU內(nèi)存的影響邏輯塊調(diào)用其它
18、塊被調(diào)用塊的局部數(shù)據(jù)存儲到L堆棧頂部先前塊的局部數(shù)據(jù)壓入L堆棧新的背景數(shù)據(jù)塊號先前的背景數(shù)據(jù)塊號DI寄存器DB寄存器先前激活著的調(diào)用塊的信息壓入塊堆棧調(diào)用塊的信息裝入塊堆棧程序第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計a)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計b)c)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1) B堆棧與L堆棧 B堆棧是CPU系統(tǒng)內(nèi)存中的一部分,它存儲以下被中斷塊的數(shù)據(jù):(1) 塊號、塊類型、優(yōu)先級、被中斷塊的返回地址;(2) 塊寄存器DB、DI被中斷前的內(nèi)容;(3) 臨時變量的指針(被中斷塊的L堆棧地址)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 STEP 7中可使用的B堆棧大小是有限制的,對于S
19、7-300 CPU,則可在B堆棧中存儲8個塊的信息。因此,塊調(diào)用嵌套深度也是有限制的,最多可同時激活8個塊。 L堆棧是CPU內(nèi)存中的一部分,它在塊調(diào)用時被重新分配。L堆棧用來存儲邏輯塊中定義的臨時變量,也分配給臨時本地數(shù)據(jù)使用。梯形圖的方塊指令與標(biāo)準(zhǔn)功能塊也可能使用L堆棧存儲運算的中間結(jié)果。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2) 調(diào)用功能塊FB 當(dāng)調(diào)用功能塊FB時,會有以下事件發(fā)生: (1) 調(diào)用塊的地址和返回位置存儲在塊堆棧中,調(diào)用塊的臨時變量壓入L堆棧; (2) 數(shù)據(jù)塊DB寄存器內(nèi)容與DI寄存器內(nèi)容交換; (3) 新的數(shù)據(jù)塊地址裝入DI寄存器; (4) 被調(diào)用塊的實參裝入DB和L堆棧上部
20、; (5) 當(dāng)功能塊FB結(jié)束時,先前塊的現(xiàn)場信息從塊堆棧中彈出,臨時變量彈出L堆棧; (6) DB和DI寄存器內(nèi)容交換。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 當(dāng)調(diào)用功能塊FB時,STEP 7并不一定要求給FB形參賦予實參,除非參數(shù)是復(fù)式數(shù)據(jù)類型的I/O形參或參數(shù)類型形參。如果沒有給FB形參賦予實參,則功能塊FB就調(diào)用背景數(shù)據(jù)塊內(nèi)的數(shù)值。該數(shù)值是在功能塊的變量聲明表內(nèi)或背景數(shù)據(jù)塊內(nèi)設(shè)置的形參初始數(shù)值。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3) 調(diào)用功能塊FC 當(dāng)調(diào)用功能塊FC時會有以下事件發(fā)生: (1) 功能塊FC實參的指針存到調(diào)用塊的L堆棧; (2) 調(diào)用塊的地址和返回位置存儲在塊堆棧,調(diào)用塊的局
21、部數(shù)據(jù)壓入L堆棧; (3) 功能塊存儲臨時變量的L堆棧區(qū)被推入L堆棧上部; (4) 當(dāng)被調(diào)用功能塊FC結(jié)束時,先前塊的信息存儲在塊堆棧中,臨時變量彈出L堆棧。 因為功能塊FC不用背景數(shù)據(jù)塊,不能分配初始數(shù)值給功能塊FC的局部數(shù)據(jù),所以必須給功能塊FC提供實參。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 STEP 7為功能塊FC提供了一個特殊的返回值輸出參數(shù)(關(guān)鍵字:RET_VAL)。當(dāng)在文本文件中創(chuàng)建功能塊FC時,你可以在定義功能塊FC命令后輸入數(shù)據(jù)類型(如BOOL或INT)。對文本文件進行編譯時,STEP 7會自動生成RET_VAL輸出參數(shù)。當(dāng)用STEP 7的程序編輯器(Program Editor
22、)以增量模式創(chuàng)建功能塊FC時,可在FC的變量聲明表中聲明一個輸出參數(shù)RET_VAL,并指明其數(shù)據(jù)類型。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5.1.3 功能塊編程與調(diào)用舉例功能塊編程與調(diào)用舉例 對功能塊編程分兩步進行:第一步是定義局部變量(填寫局部變量表);第二步是編寫要執(zhí)行的程序,可以用梯形圖或語句表兩種形式編程,并在編程過程中使用定義了的局部變量(數(shù)據(jù))。 定義局部變量的工作內(nèi)容包括: (1) 分別定義形參、靜態(tài)變量和臨時變量(FC塊中不包括靜態(tài)變量);第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 (2) 確定各變量的聲明類型(Decl.)、變量名(Name)和數(shù)據(jù)類型(Data Type),還要為變量
23、設(shè)置初始值(Initial Value)(盡管對有些變量初始值不一定有意義)。如果需要還可為變量注釋(Comment)。在增量編程模式下,STEP 7將自動產(chǎn)生局部變量地址(Address)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 寫功能塊程序時,可以用以下兩種方式使用局部變量: (1) 使用變量名,此時變量名前加前綴“#”,以區(qū)別于在符號表中定義的符號地址(全局符號則顯示為全局符號加引號的形勢)。增量方式下,前綴會自動產(chǎn)生。 (2) 直接使用局部變量的地址,這種方式只對背景數(shù)據(jù)塊和L堆棧有效。 在調(diào)用FB塊時,要說明其背景數(shù)據(jù)塊。背景數(shù)據(jù)塊應(yīng)在調(diào)用前生成,其順序格式與變量聲明表必須保持一致。在增
24、量方式下,調(diào)用FB塊時,STEP 7會自動提醒并生成背景數(shù)據(jù)塊。此時也為背景數(shù)據(jù)塊設(shè)置了初始值,該初始值與變量聲明表中的相同。當(dāng)然也可以為背景數(shù)據(jù)塊設(shè)置當(dāng)前值(Current Value),即存儲在CPU中的數(shù)值。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計1.發(fā)動機控制系統(tǒng)的用戶程序結(jié)構(gòu)在右圖中組織塊OB1是主程序,用一個名為:“發(fā)動機控制”的功能塊FB1來分別控制汽油機和柴油機,控制的參數(shù)在背景數(shù)據(jù)塊DB1和DB2中。風(fēng)扇控制使用功能FC1。(1)符號表為了使程序易于理解,可以給變量制定符號。(2)變量聲明表(3)局域變量的類型第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計柴油
25、機達到設(shè)定轉(zhuǎn)速柴油機達到設(shè)定轉(zhuǎn)速Q(mào) 5.5BOOL柴油機風(fēng)扇運行柴油機風(fēng)扇運行Q 5.6BOOL柴油機風(fēng)扇運行延時柴油機風(fēng)扇運行延時T 2TIMER柴油機故障柴油機故障 I 1.6BOOL柴油機數(shù)據(jù)柴油機數(shù)據(jù) DB 2FB 1柴油機運行柴油機運行 Q 5.4BOOL柴油機轉(zhuǎn)速柴油機轉(zhuǎn)速 MW 4INT發(fā)動機控制發(fā)動機控制 FB 1FB 1風(fēng)扇控制風(fēng)扇控制 FC 1FC 1共享數(shù)據(jù)共享數(shù)據(jù) DB 3DB 3關(guān)閉柴油機關(guān)閉柴油機 I 1.5BOOL關(guān)閉汽油機關(guān)閉汽油機 I 1.1BOOL啟動柴油機啟動柴油機 I 1.4BOOL啟動汽油機啟動汽油機I 1.0BOOL汽油機達到設(shè)定轉(zhuǎn)速汽油機達到設(shè)定轉(zhuǎn)
26、速Q(mào) 5.1BOOL汽油機風(fēng)扇延時汽油機風(fēng)扇延時T 1TIMER汽油機風(fēng)扇運行汽油機風(fēng)扇運行Q 5.2BOOL汽油機故障汽油機故障I 1.2BOOL汽油機數(shù)據(jù)汽油機數(shù)據(jù)DB 1FB 1汽油機運行汽油機運行Q 5.0BOOL汽油機轉(zhuǎn)速汽油機轉(zhuǎn)速MW 2INT手動按鈕手動按鈕I 0.6BOOL主程序主程序OB 1OB 1自動按鈕自動按鈕I 0.5BOOL自動模式自動模式Q 4.2BOOL符號符號地址地址類型類型第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計FB1:控制發(fā)動機的功能塊控制發(fā)動機的功能塊第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計FC1第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計第5
27、章 S7系列程序結(jié)構(gòu)與程序設(shè)計第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2二分頻器二分頻器 假設(shè)功能塊FC1是二分頻器產(chǎn)生程序,功能是對不同的輸入位進行二分頻處理。以下給出了FC1的變量聲明表和程序。 1) FC1的變量聲明表(見表5.3)表表5.3 FC1的變量聲明表的變量聲明表Address Decl. Symbol Data Type Initial Value Comment 0.0 In INP BOOL FALSE 脈沖輸入信號 1.0 Out OUTP BOOL FALSE 脈沖輸出信號 2.0 In_Out ETF BOOL FALSE 跳變沿標(biāo)志
28、第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計FC1 梯形圖程序OB1調(diào)用梯形圖程序第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3讀模擬輸入量程序讀模擬輸入量程序 一些S7-300的應(yīng)用系統(tǒng)中,使用8通道模擬量模塊采集信號,當(dāng)模塊數(shù)量較多時,讀模擬輸入量就很繁瑣。下面給出一個通用程序FC100,利用它可以方便地把模擬量讀回并順序存入數(shù)據(jù)塊,因為模入模塊的起始地址、通道數(shù)、存儲數(shù)據(jù)塊號及數(shù)據(jù)在數(shù)據(jù)塊中的存儲起始位置均是可變的,所以可在調(diào)用FC100時靈活確定。 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計1) FC100的變量聲明表的變量聲明表(見表見表5.4)表表5.4 FC100的變量聲明表的變量聲明表Address D
29、ecl. Symbol Data Type Initial Value Comment 0.0 In PIW_Addr INT 模入模塊通道起始地址 2.0 In CH_LEN INT 要讀入的通道數(shù) 4.0 In DB_No INT 存儲數(shù)據(jù)塊號 6.0 In DBW_Addr INT 存儲在數(shù)據(jù)塊中的字地址 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 Network 1 L #DB_No T LW0 OPN DBLW 0 /打開存儲數(shù)據(jù)塊 L #PIW_Addr SLD 3 /形成模入模塊地址指針 T LD4 /在臨時本地數(shù)據(jù)雙字LD 4中存儲模入模塊地址指針 L #DBW_Addr SLD 3
30、/形成數(shù)據(jù)塊存儲地址指針 T LD8 /在臨時本地數(shù)據(jù)雙字LD 8中存入數(shù)據(jù)塊存儲地址指針 L #CH_LEN /以要讀入的通道數(shù)為循環(huán)次數(shù),裝入累加器1 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 /將累加器1的值,裝入循環(huán)次數(shù)計數(shù)器LW0(臨時本地數(shù)據(jù)字) L LD4 LARl /將模入模塊地址指針裝入地址寄存器1 L PIWARl,P#0.0 /讀模入模塊裝入累加器1 T LW2 /將累加器1的內(nèi)容暫存入緩沖器LW2 L LD8 LARl /將數(shù)據(jù)塊存儲地址指針裝入地址寄存器1 L LW2 /將數(shù)據(jù)緩沖器中的內(nèi)容裝入累加器1 T DBWARl,P#0.0 /將累加器的內(nèi)容存入數(shù)據(jù)塊中L LD4
31、/AR1+P#2.0AR1+ L#16 /ACC1+(_0001_0 000)T LD4 /調(diào)整模入模塊地址指針,指向下一通道Acc1+(bb bbbb bxxx)L LD8+ L#16T LD8 /調(diào)整數(shù)據(jù)塊存儲地址指針,指向下一存儲地址L LW0 /將循環(huán)次數(shù)計數(shù)器LW0的值裝入累加器1LOOP NEXT /若累加器1的值不為0,將累加器減1繼續(xù)循環(huán);若累加 /器為0,則結(jié)束 NEXT:T LW 0第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 在FC100中,寄存器間接尋址指令OP NDBLW0使用了臨時本地數(shù)據(jù)LW0,變量表中定義的臨時變量雖然也在L堆棧中,但不能用于存儲器間接尋址,從這里也可看出
32、臨時本地數(shù)據(jù)與臨時變量的區(qū)別。程序中LW2、LD4和LD8起的作用也可用臨時變量替代。 下面舉例說明如何使用FC100。在某應(yīng)用中,機架0的4號槽位安裝了一個8模入模塊(地址256開始),若要將前6個模入模塊信號讀回,存入DB50.DBW10開始的6個字單元中,可按下列形式調(diào)用FC100: CALL FC100 PIW_Add:=256 CH_LEN:=6 DB_No:=50 DBW_Addr:=10 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計4. 時鐘脈沖發(fā)生器時鐘脈沖發(fā)生器使用定時器實現(xiàn)自由設(shè)定時鐘脈沖發(fā)生器功能使用定時器實現(xiàn)自由設(shè)定時鐘脈沖發(fā)生器功能(脈沖占空系數(shù)脈沖占空系數(shù)1:1)。(1)FC
33、1變量聲明表 (2)FC1梯形圖程序第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(3)OB1調(diào)用梯形圖程序第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5.2 數(shù)據(jù)塊與數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)塊與數(shù)據(jù)結(jié)構(gòu)5.2.1 數(shù)據(jù)塊數(shù)據(jù)塊 數(shù)據(jù)塊定義在S7 CPU存儲器中,用戶可在存儲器中建立一個或多個數(shù)據(jù)塊。每個數(shù)據(jù)塊可大可小,但CPU對數(shù)據(jù)塊數(shù)量及數(shù)據(jù)總量有限制,如對于CPU314,用作數(shù)據(jù)塊的存儲器最多為8 KB(8192 B),用戶定義的數(shù)據(jù)總量不能超出這個限制。對數(shù)據(jù)塊必須遵循先定義后使用的原則,否則,將造成系統(tǒng)錯誤。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1. 定義數(shù)據(jù)塊定義數(shù)據(jù)塊 在編程階段和運行程序中都能定義數(shù)據(jù)塊。大多數(shù)數(shù)
34、據(jù)塊是在編程階段用STEP 7開發(fā)軟件包定義的,定義內(nèi)容包括數(shù)據(jù)塊號及塊中的變量(包括變量符號名、數(shù)據(jù)類型以及初始值等),定義完成后,數(shù)據(jù)塊中變量的順序及類型決定了數(shù)據(jù)塊的數(shù)據(jù)結(jié)構(gòu),變量的數(shù)量決定了數(shù)據(jù)塊的大小。數(shù)據(jù)塊在使用前,必須作為用戶程序的一部分下載到CPU中。 如果確實需要,還可以在程序運行中動態(tài)定義一個數(shù)據(jù)塊。動態(tài)定義時,數(shù)據(jù)塊號是自動產(chǎn)生的,數(shù)據(jù)塊在存儲器中的位置是動態(tài)分配的。由于要定義的數(shù)據(jù)塊有可能大于CPU存儲器(用于數(shù)據(jù)塊的部分)的剩余空間,因此動態(tài)定義過程有可能失敗。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2訪問數(shù)據(jù)塊訪問數(shù)據(jù)塊 在用戶程序中可能定義了許多數(shù)據(jù)塊,而每個數(shù)據(jù)塊中
35、又有許多不同類型的數(shù)據(jù),因此,訪問時需要明確數(shù)據(jù)塊號和數(shù)據(jù)塊中的數(shù)據(jù)類型與位置。根據(jù)明確數(shù)據(jù)塊號的不同方法,可以用多種方法訪問數(shù)據(jù)塊中的數(shù)據(jù)。 直接在訪問指令中寫明數(shù)據(jù)塊號,如: L DB5.DBW10 T DB10.DBW20 L Motor_1.Speed /符號地址第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 另一種方法是“先打開后訪問”。在訪問某數(shù)據(jù)塊中的數(shù)據(jù)前,先“打開”這個數(shù)據(jù)塊,也就是將數(shù)據(jù)塊號(數(shù)據(jù)塊的起始地址)裝入數(shù)據(jù)塊寄存器。這樣,存放在數(shù)據(jù)塊中的數(shù)據(jù)就可利用數(shù)據(jù)塊起始地址加偏移量的方法來訪問。如:OPN DB5L DBW10OPN DB10T DBW20第5章 S7系列程序結(jié)構(gòu)與程
36、序設(shè)計 在打開一個數(shù)據(jù)塊時,先打開的數(shù)據(jù)塊會自動關(guān)閉(沒有專門的數(shù)據(jù)塊關(guān)閉指令)。由于有兩個數(shù)據(jù)塊寄存器(DB和DI寄存器),因此,最多可同時打開兩個數(shù)據(jù)塊。一個作為背景數(shù)據(jù)塊,數(shù)據(jù)塊的起始地址存儲在DI寄存器中;另一個作為共享數(shù)據(jù)塊,數(shù)據(jù)塊的起始地址存儲在DB寄存器中。打開背景數(shù)據(jù)塊,在調(diào)用FB時可以自動實現(xiàn)。由于調(diào)用FB時使用DI寄存器,因此,一般不在FB程序中用OPN DI n指令打開數(shù)據(jù)塊。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3. 背景數(shù)據(jù)塊和共享數(shù)據(jù)塊背景數(shù)據(jù)塊和共享數(shù)據(jù)塊 背景數(shù)據(jù)塊和共享數(shù)據(jù)塊有不同的用途。任何FB、FC或OB均可讀寫存放在共享數(shù)據(jù)塊中的數(shù)據(jù)。背景數(shù)據(jù)塊是FB運行
37、時的工作存儲區(qū),它存放FB的部分運行變量。調(diào)用FB時,必須指定一個相關(guān)的背景數(shù)據(jù)塊。作為規(guī)則,只有FB塊才能訪問存放在背景數(shù)據(jù)塊中的數(shù)據(jù)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 一般情況下,每個FB都有一個對應(yīng)的背景數(shù)據(jù)塊,一個FB也可以使用不同的背景數(shù)據(jù)塊。如果幾個FB需要的背景數(shù)據(jù)完全相同,為節(jié)省存儲器,則可以定義成一個背景數(shù)據(jù)塊,供它們分別使用。通過多重背景數(shù)據(jù),也可將幾個FB需要的不同的背景數(shù)據(jù)定義在一個背景數(shù)據(jù)塊中,以優(yōu)化數(shù)據(jù)管理。各數(shù)據(jù)塊在CPU的存儲器中是沒有區(qū)別的,只是由于打開方式不同,才在打開時有背景數(shù)據(jù)塊和共享數(shù)據(jù)塊之分。原則上,任何一個數(shù)據(jù)塊都可以當(dāng)作共享數(shù)據(jù)塊或背景數(shù)據(jù)塊使
38、用,實際上,一個數(shù)據(jù)塊由FB當(dāng)作背景數(shù)據(jù)塊使用時,必須與FB的要求格式相符。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計4. 多重背景數(shù)據(jù)塊在用戶程序中使用多重背景可以減少背景數(shù)據(jù)塊的數(shù)量。以發(fā)動機控制程序為例,原來FB1控制汽油機和柴油機時,分別使用了背景數(shù)據(jù)塊DB1和DB2。使用多重背景時只需要一個背景數(shù)據(jù)塊DB10,但是需要增加一個功能塊F10來調(diào)用作為“局域背景”的FB1,F(xiàn)B1的數(shù)據(jù)存儲在FB10的背景數(shù)據(jù)塊DB10中,DB10是自動生成的。不需要給FB1分配背景數(shù)據(jù)塊。但需要在FB10的變量生命表中聲明靜態(tài)局域數(shù)據(jù)(STAT)FB1。多重背景的程序結(jié)構(gòu)如下:第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計
39、FB10變量聲明表第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計OB1中調(diào)用多重背景中調(diào)用多重背景第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5.2.2 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) STEP 7數(shù)據(jù)塊中的數(shù)據(jù)結(jié)構(gòu)形式比較豐富,數(shù)據(jù)塊中的數(shù)據(jù)既可以是基本數(shù)據(jù)類型,又可以是復(fù)式數(shù)據(jù)類型。所謂復(fù)式數(shù)據(jù)類型,是指位數(shù)超過32位的數(shù)據(jù)或由其它數(shù)據(jù)類型構(gòu)成的數(shù)據(jù)組。基本數(shù)據(jù)類型在第4章中已有過介紹,本節(jié)專門說明復(fù)式數(shù)據(jù)類型。STEP 7允許4種復(fù)式數(shù)據(jù)類型,如表5.5所示。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計表表5.5 復(fù)式數(shù)據(jù)類型復(fù)式數(shù)據(jù)類型名 稱 類 型 說 明 日期
40、-時間 DATE_AND_TIME 長度為 8 B(64 位)。 按 BCD 碼格式順序存儲以下信息: 年(字節(jié) 0)、月(字節(jié) 1)、日(字節(jié) 2)、小時(字節(jié) 3)、分(字節(jié) 4)、秒(字節(jié) 5)、毫秒(字節(jié) 6 和 7 的高半字節(jié))、星期(字節(jié) 7 的低半字節(jié)) 字符串 STRING 字符串是一組 ASCII 碼,一個串內(nèi)可定義最多 254 個字符,占用256 B 內(nèi)存。串中每個字符占用 1 B,內(nèi)存中頭兩個字節(jié)存儲串的長度信息。第一個字節(jié)存放此串的定義長度(默認值為 254 個字符),第二個字節(jié)存放字符串實際長度。例如,String7定義長度為 7 的字符串,占用內(nèi)存 9 B(2+7)
41、。若不定義長度,則默認為 254 個字符 數(shù)組 ARRAY 由一種數(shù)據(jù)類型組成的數(shù)據(jù)集合, 數(shù)據(jù)類型可以是基本數(shù)據(jù)類型或復(fù)式數(shù)據(jù)類型。通過下標(biāo)訪問數(shù)組中的數(shù)據(jù)??啥x到 6 維數(shù)組 構(gòu)造 STRUCT 由多種數(shù)據(jù)類型組成的數(shù)據(jù)集合 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 另一種復(fù)式數(shù)據(jù)類型稱為“用戶數(shù)據(jù)類型(UDT)”,它是利用STEP 7“程序編輯器”產(chǎn)生的,可命名構(gòu)造。將大量數(shù)據(jù)組織到UDT中,在生成數(shù)據(jù)塊或在變量聲明表中聲明變量時將變得更加方便。用戶還可為UDT聲明符號名。 日期-時間數(shù)據(jù)類型的名稱、位數(shù)及格式是由操作系統(tǒng)定義的,用戶不可改變,并且該類型在S7-300中必須用標(biāo)準(zhǔn)功能塊SFC
42、才能訪問。其它復(fù)式數(shù)據(jù)類型則由用戶在邏輯塊變量聲明表或數(shù)據(jù)塊中定義。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1. 數(shù)組數(shù)組 一個數(shù)組將同種數(shù)據(jù)類型組合成整體,但不能建立數(shù)組的數(shù)組。圖5.4表示一個二維 整數(shù)數(shù)組。數(shù)組的符號名是“Op_temps”,用符號名加下標(biāo)可訪問數(shù)組中的數(shù)據(jù)。以圖5.4為例,第一個整數(shù)是Op_temps1,1,第三個為Op_tempsl,3,第四個為Op_temps2,1,第六個為Op_temps2,3。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計圖5.4 多維數(shù)組的存儲結(jié)構(gòu)整數(shù)整數(shù)整數(shù)1,21,21,3整數(shù)整數(shù)整數(shù)2,12,22,312,13Op_temps(整型數(shù)組符號名)第5章
43、S7系列程序結(jié)構(gòu)與程序設(shè)計 1) 建立數(shù)組建立數(shù)組 在數(shù)據(jù)塊或變量聲明表中可定義數(shù)組。在聲明數(shù)組時,首先給數(shù)組命名,接著使用關(guān)鍵字(ARRAY),然后在方括號中給出數(shù)組的大小及維數(shù)。可以定義多達6維的數(shù)組,并用下標(biāo)來標(biāo)識數(shù)組的大小。在方括號中放下標(biāo),各維之間用逗號隔開,每一維的首尾之間用雙點隔開。一個下標(biāo)可以為任何一個整數(shù)值(范圍:32 76832 767),并包括負數(shù)。如用ARRAY13, 12, 13, 23, 3032, 14來定義變量Op_temps為6維數(shù)組。該數(shù)組的第一個整數(shù)為Op_temps1, 1, 1, 2, 30, 1;最后一個為Op_temps3, 2, 3, 3, 32
44、, 4。圖5.5顯示了建立名字為Heat_23的二維數(shù)組(與圖5.4中的數(shù)組相似)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計圖5.5 建立數(shù)組Address0.00.02.012.0SymbolHeat_23Data TypeSTRUCTARRAY1 2,1 3INTEND_STRUCTInitial Value Comment第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2) 賦初始值 在建立數(shù)組時,STEP 7允許以兩種方法給數(shù)組的元素賦初始值。對圖5.5中的數(shù)組,可以為6個元素賦初始值:17,23,45,556,3342,0;若初始值中有順序相同的元素,寫法可以簡化,如要數(shù)組的頭兩個元素設(shè)特定數(shù)值,其余
45、4個為10,則可簡寫為17,23,4(10),其中4為重復(fù)系數(shù),10為要重復(fù)的數(shù)值。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3) 訪問數(shù)組 利用數(shù)組中指定元素的下標(biāo)可以訪問數(shù)組數(shù)據(jù),這時數(shù)據(jù)塊、數(shù)組符號名及下標(biāo)一起 使用。如圖5.5中聲明的數(shù)組在DB20(符號名:MOTOR)的第一個字節(jié)處開始,用以下地址訪問數(shù)組中的第二個元素:MOTOR. Heat_231,2 4) 利用數(shù)組傳遞參數(shù) 將數(shù)組作為參數(shù)傳遞時,要求形式參數(shù)和實際參數(shù)必須有同樣的數(shù)據(jù)組織結(jié)構(gòu)、相同 的數(shù)據(jù)類型,并按相同的順序排列。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2. 構(gòu)造構(gòu)造 構(gòu)造將不同數(shù)據(jù)類型組合成一個整體,見圖5.6。構(gòu)造的元
46、素可以是任何基本數(shù)據(jù)類型或復(fù)式數(shù)據(jù)類型,有數(shù)組或構(gòu)造元素的構(gòu)造能嵌套8層。因此,STEP 7允許用戶將過程中的各種關(guān)聯(lián)數(shù)據(jù)統(tǒng)一組織在一個構(gòu)造中,也為統(tǒng)一處理不同類型數(shù)據(jù)或參數(shù)提供了可能性。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計圖5.6 構(gòu)造的存儲結(jié)構(gòu)INTBYTECHARREALBOOLSTRUCT整數(shù)字節(jié)字符浮點數(shù)布爾數(shù)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1) 建立構(gòu)造 構(gòu)造(STRUCT)只能在數(shù)據(jù)塊或變量聲明表中定義。圖5.7所示為由整數(shù)(存放數(shù)量)、字節(jié)(存放原始數(shù)據(jù))、字符(存放控制碼)、浮點數(shù)(存放溫度)、布爾數(shù)(完成標(biāo)志信號)組成的構(gòu)造。該構(gòu)造的名稱為Stack_1。第5章 S7系列
47、程序結(jié)構(gòu)與程序設(shè)計圖5.7 建立構(gòu)造Stack_lAddress0.00.010.0SymbolStack_1Data TypeSTRUCTInitial Value Comment0.02.03.04.08.010.0AmountOriginal_dataControl_codeTemperatureEndSTRUCTINTBYTECHARREALBOOLEND_STRUCTEND_STRUCT0B#16#0Z98.6FALSE第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2) 賦初始值 按每個元素的類型和名稱給構(gòu)造的每個元素賦初始值。并將其寫入圖5.8中Initial Value(初始值欄)的相應(yīng)行
48、中。例如,可以分配如下初始值: Amount0 Original_dataB#l6#0 Control_code“Z” Temperature98.6 End:FALSE 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3) 訪問構(gòu)造 (1) 用符號地址訪問:如MOTO.Stack_1.Temperature,其中,MOTO為構(gòu)造所在數(shù)據(jù)塊DB20的符號名。 (2) 用物理地址訪問:如Stack_l從DB20的字節(jié)0開始存放,Amount的物理地址是DB20.DBW0,Temperature的地址為DB20.DBD4。 4) 利用構(gòu)造傳遞參數(shù) 構(gòu)造可以作為參數(shù)來傳遞。將構(gòu)造作為參數(shù)傳遞時,要求形式參數(shù)和實
49、際參數(shù)必須有同樣的數(shù)據(jù)組織結(jié)構(gòu)、相同的數(shù)據(jù)類型,并按相同的順序排列。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3. 用戶數(shù)據(jù)類型用戶數(shù)據(jù)類型 STEP 7允許將基本數(shù)據(jù)類型或復(fù)式數(shù)據(jù)類型組合成用戶自己定義的數(shù)據(jù)類型,這種類型稱為用戶數(shù)據(jù)類型或UDT。用戶數(shù)據(jù)類型必須首先單獨建立,并存放在稱為UDT的特殊數(shù)據(jù)塊中,見圖5.8。 圖5.8是用“程序編輯器”建立的一個UDT,其數(shù)據(jù)組織結(jié)構(gòu)與圖5.7相同,該用戶數(shù)據(jù)類型被定義為UDT200,并單獨存儲在被稱為UDT200的特殊塊中。也可以為UDT200建立符號名(如process_data),但是,命名只能在符號表中進行。圖5.9給出了一個使用UDT定義數(shù)
50、據(jù)塊(如DBl0)的例子,數(shù)據(jù)塊DBl0中定義兩個變量,一個為整型,另一個為用戶數(shù)據(jù)類型(UDT200)。從圖中可以看出,數(shù)據(jù)塊中UDT的用法與基本數(shù)據(jù)類型的用法類似。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計圖5.8 建立用戶數(shù)據(jù)類型(UDT200)Address0.010.0SymbolData TypeSTRUCTInitial Value Comment0.02.03.04.08.0AmountOriginal_dataControl_codeTemperatureEndINTBYTECHARREALBOOLEND_STRUCT0B#16#0Z98.6FALSE第5章 S7系列程序結(jié)構(gòu)與程序設(shè)
51、計圖5.9 使用UDTAddress0.012.0SymbolData TypeSTRUCTInitial Value Comment0.02.0NumberStack_2INTUDT 200END_STRUCT第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 用符號地址或物理地址兩種方式可以訪問UDT中的變量。例如,在DB10中定義了圖5.9格式的數(shù)據(jù),DB10的符號名為Process,訪問Amount變量可分別寫為DB10.DBW 2或Process.Stack_2.Amount。 建立用戶數(shù)據(jù)類型的目的是為了將UDT作為一種數(shù)據(jù)類型使用,以方便定義多個結(jié)構(gòu)相同的構(gòu)造變量。圖5.9建立的Stack_2與
52、圖5.7建立的Stack_1相比,不僅大小結(jié)構(gòu)完全相同,而且對Stack_1和Stack_2中元素的訪問方法也完全相同。在建立DB10時,由于使用了UDT而使得數(shù)據(jù)塊建立過程方便快捷。在多處使用同樣的UDT時,這一優(yōu)點將更加突出。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5.3 S7系列系列PLC程序設(shè)計程序設(shè)計5.3.1 程序結(jié)構(gòu)設(shè)計程序結(jié)構(gòu)設(shè)計 STEP 7不僅從不同層次充分支持合理的程序結(jié)構(gòu)設(shè)計,而且也簡化了結(jié)構(gòu)設(shè)計的復(fù)雜程度。 一個復(fù)雜的自動化過程可以被分解并定義為一個或多個項目(PROJECT);而對于每個項目,又可以進一步分解并定義給一個或多個CPU,每個CPU都有一個控制程序(CPU_P
53、ROGRAM)。圖5.10顯示了一個樣本過程,它分成4個不同的項目:項目1和項目2只有一個CPU,而項目3和項目4有多個CPU。這樣,一個很復(fù)雜的控制任務(wù)的結(jié)構(gòu)設(shè)計,就被簡化為各個CPU程序的結(jié)構(gòu)設(shè)計。項目間或項目中的各CPU程序之間,能以某種方式聯(lián)網(wǎng),實現(xiàn)信息共享。如在S7協(xié)議支持下,用MPI網(wǎng)以全局數(shù)據(jù)通信的方式可方便地建立起聯(lián)系,實現(xiàn)一個項目中各CPU共享信息。 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計圖5.10 樣本過程的項目劃分存儲攪拌準(zhǔn)備包裝一個工廠的過程任務(wù)項目1CPU1:存儲項目2CPU2:攪拌項目3CPU3:傳輸CPU4:加工項目4CPU5:打包CPU6:傳輸CPU7:裝箱第5章
54、S7系列程序結(jié)構(gòu)與程序設(shè)計 典型的情況是一個過程控制任務(wù)只有一個項目,該項目下也僅有一個CPU程序,每一個CPU程序又可依據(jù)時間特性或事件觸發(fā)特性的差異分類編入不同的組織塊(OB)中。例如,需要以固定時間間隔循環(huán)執(zhí)行的那部分程序編入組織塊OB35中,為PLC正常運行而需進行初始化的程序編入組織塊OBl00中。又如,由硬件觸發(fā)的中斷服務(wù)程序編入組織塊OB40中,對程序執(zhí)行中產(chǎn)生的同步錯誤的響應(yīng)處理程序編入組織塊OB121或OB122中。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 對于各組織塊中的程序,可以根據(jù)其復(fù)雜程度分別選用線性、分部或結(jié)構(gòu)化等三種形式中的一種程序結(jié)構(gòu)。由于組織塊OB1(主程序循環(huán))中
55、的程序是應(yīng)用程序中主要的也是最復(fù)雜的部分,因此,對OB1中的程序設(shè)計合理的結(jié)構(gòu)是十分重要的。下面分別說明三種典型結(jié)構(gòu)的特點及選用原則。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1. 線性程序結(jié)構(gòu)線性程序結(jié)構(gòu) 用“線性”結(jié)構(gòu)設(shè)計的程序連續(xù)放置在一個塊內(nèi)(通常為OB1),塊中的程序按順序執(zhí)行。這一結(jié)構(gòu)是最初的PLC模擬的繼電器梯形邏輯的模型。線性程序具有簡單、直接的特點。編程時,不必考慮功能塊如何編程及如何調(diào)用,也不必考慮如何定義局部變量及如何使用背景數(shù)據(jù)塊。由于所有的指令在一個塊內(nèi),因此它適用于只需一個人編寫的、相對簡單的控制程序。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2. 分部程序結(jié)構(gòu)分部程序結(jié)構(gòu) 這
56、是一種部分模塊化的程序結(jié)構(gòu),也稱為部分結(jié)構(gòu)化。程序被分成各部分放在若干功能塊中,每個功能塊含有用于一種設(shè)備的一系列控制邏輯。放置在組織塊OB1中的指令決定控制程序的各功能塊的執(zhí)行。比如說,一個分部程序可能包含以下內(nèi)容:(1) 用于控制設(shè)備每一部分的FC;(2) 用于控制設(shè)備每一工作狀態(tài)的FC;(3) 用于控制操作員接口的FC;(4) 用于進行PLC自診斷的FC。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 在分部程序中,既無數(shù)據(jù)交換也沒有重復(fù)利用的程序代碼。各功能塊收集并使用自己的數(shù)據(jù),功能塊不傳遞也不接收參數(shù),功能塊的編程與調(diào)用比較簡單。由于每個功能區(qū)分為不同的塊,因而使得多個程序員能夠同時編程而不發(fā)
57、生沖突。分部程序結(jié)構(gòu)的編程效率比線性程序有所提高,程序測試也較方便,對程序員的要求也不太高。對不太復(fù)雜的控制程序可考慮采用這種程序結(jié)構(gòu)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 3. 結(jié)構(gòu)化程序結(jié)構(gòu)結(jié)構(gòu)化程序結(jié)構(gòu) 完全結(jié)構(gòu)化(模塊化)的程序結(jié)構(gòu)是PLC程序設(shè)計和編程最有效的結(jié)構(gòu)形式,它可用于復(fù)雜程度高、程序規(guī)模大的控制應(yīng)用程序設(shè)計。結(jié)構(gòu)化程序可以重復(fù)使用某些功能塊,只需要在使用功能塊時為其提供不同的環(huán)境變量(實參),就能完成對不同設(shè)備的控制。例如,在工業(yè)攪拌控制過程中有三臺泵,對它們的控制功能相似,可以編寫一個用于對泵進行控制的功能塊,編程時先定義泵控制所需的變量(形參),并使用這些變量構(gòu)成一個稱為
58、“泵控制”的一般功能塊。在調(diào)用該功能塊時,通過改變傳入功能塊中的參數(shù)(實參),可以分別對成分A、成分B和攪拌桶中的三臺泵進行控制。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 結(jié)構(gòu)化程序有最高的編程和程序調(diào)試效率,應(yīng)用程序代碼量也最小。結(jié)構(gòu)化程序也支持多個程序員協(xié)同編程。這種程序結(jié)構(gòu)建立在對PLC系統(tǒng)功能的合理分析、分解及綜合的基礎(chǔ)之上,程序具體結(jié)構(gòu)形式的確定與程序設(shè)計人員的水平及經(jīng)驗關(guān)系很大,對程序員的要求也較前兩種高。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計5.3.2 程序設(shè)計實例程序設(shè)計實例圖5.11 工業(yè)攪拌過程示意圖MMM入口閥進料泵進料閥流量傳感器區(qū)域:配料A區(qū)域:混合罐攪拌電機MM入口閥進料泵進
59、料閥區(qū)域:配料BM排料閥區(qū)域:排料罐液位測量開關(guān)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 1. 將過程分割為任務(wù)和區(qū)域?qū)⑦^程分割為任務(wù)和區(qū)域 一個自動化過程包括許多單個的任務(wù),通過識別一個過程內(nèi)的相關(guān)任務(wù)組,然后將這些組再分解為更小的任務(wù),即使最復(fù)雜的過程也能夠被定義。下面將這個工業(yè)攪拌過程構(gòu)造為四個功能區(qū)域:配料A區(qū)域、配料B區(qū)域、混合罐區(qū)域和排料區(qū)域。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2. 說明各個功能區(qū)域說明各個功能區(qū)域 1) 配料A和配料B區(qū)域 (1) 每種配料的管道都配備有一個入口和一個進料閥以及進料泵。 (2) 進料管還有流量傳感器。 (3) 當(dāng)罐的液面?zhèn)鞲衅髦甘竟逎M時,進料泵的接通必
60、須被鎖定。 (4) 當(dāng)排料閥打開時,進料泵的啟動必須被鎖定。 (5) 在啟動進料泵后1 s內(nèi)必須打開入口閥和進料閥。 (6) 在進料泵停止后(來自流量傳感器的信號)閥門必須立即被關(guān)閉以防止配料從泵中泄露。 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 (7) 進料泵的啟動與一個時間監(jiān)控功能相結(jié)合,換句話說,在泵啟動后的7 s之內(nèi),流量傳感器會報告溢出。 (8) 當(dāng)進料泵運行時,如果流量傳感器沒有流量信號,進料泵必須盡可能快地斷開。 (9) 必須對進料泵啟動的次數(shù)進行計數(shù)(維護間隔)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計 2) 混合罐區(qū)域 (1) 當(dāng)罐的液面?zhèn)鞲衅髦甘尽耙好娴陀谧畹拖蕖被蚺帕祥y打開時,攪拌電
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校團委辦公室申請書
- 申請緩交訴訟費申請書
- 貧困申請書2000字范文
- DB37-T 4636-2023 北方茶樹凍害氣象監(jiān)測指標(biāo)
- 武警留隊申請書
- 直播帶貨模式下的消費者行為研究
- 競選宣傳委員申請書
- 2024-2025學(xué)年高中地理第2章環(huán)境污染與防治第1節(jié)水污染及其成因?qū)W案新人教版選修6
- 勤奮好學(xué)好少年申請書
- 物流項目中基于KPI的績效管理方案設(shè)計
- 2025年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 二零二五年度博物館場地租賃與文物保護合作協(xié)議3篇
- 島津氣相色譜培訓(xùn)
- 2024年03月四川農(nóng)村商業(yè)聯(lián)合銀行信息科技部2024年校園招考300名工作人員筆試歷年參考題庫附帶答案詳解
- 睡眠專業(yè)知識培訓(xùn)課件
- 臨床思維能力培養(yǎng)
- 人教版高中物理必修第三冊第十章靜電場中的能量10-1電勢能和電勢練習(xí)含答案
- 《工程勘察設(shè)計收費標(biāo)準(zhǔn)》(2002年修訂本)
- 中國宗教文化 中國古代宗教文化的特點及現(xiàn)代意義
- 2024年四川省巴中市級事業(yè)單位選聘15人歷年高頻難、易錯點練習(xí)500題附帶答案詳解
- 演出經(jīng)紀人培訓(xùn)
評論
0/150
提交評論