




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)5.1 編程方式與程序塊編程方式與程序塊5.2 數(shù)據(jù)塊與數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)塊與數(shù)據(jù)結(jié)構(gòu)5.3 S7系列系列PLC程序設(shè)計(jì)程序設(shè)計(jì)思考與練習(xí)題思考與練習(xí)題第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)5.1 編程方式與程序塊編程方式與程序塊5.1.1 S7-300編程方式簡介編程方式簡介 S7-300系列PLC的編程語言是STEP 7。STEP 7繼承了STEP 5語言結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)點(diǎn),用文件塊的形式管理用戶編寫的程序及程序運(yùn)行所需的數(shù)據(jù)。如果這些文件塊是子程序,則可以通過調(diào)用語句,將它們組成結(jié)構(gòu)化的用戶程序。這樣,PLC的程序組織明確,結(jié)構(gòu)
2、清晰,易于修改。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)5-1各塊的簡要說明見表5-1第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 為支持結(jié)構(gòu)化程序設(shè)計(jì),STEP 7用戶程序通常由組織塊(OB)、功能塊(FB)或功能塊(FC)等三種類型的邏輯塊和數(shù)據(jù)塊(DB)組成。 組織塊(OB)是系統(tǒng)操作程序與用戶應(yīng)用程序在各種條件下的接口界面,用于控制程序的運(yùn)行。OB塊根據(jù)操作系統(tǒng)調(diào)用的條件(如時間中斷、報(bào)警中斷等)可分成幾種類型,這些類型有不同的優(yōu)先級,高優(yōu)先級的OB可以中斷低優(yōu)先級的OB。每個S7 CPU包含一套可編程的OB塊(隨CPU而不同),不同的OB塊執(zhí)行特定的功能。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) OB1是
3、主程序循環(huán)塊,在任何情況下,它都是需要的。根據(jù)過程控制的復(fù)雜程度,可將所有程序放入OB1中進(jìn)行線性編程,或?qū)⒊绦蛴貌煌倪壿媺K加以結(jié)構(gòu)化,通過OB1調(diào)用這些邏輯塊,并允許塊間的相互調(diào)用。塊的調(diào)用指令中止當(dāng)前塊(調(diào)用塊)的運(yùn)行調(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)用實(shí)例。除了OB1,操作系統(tǒng)可以調(diào)用其它的OB塊以響應(yīng)確定事件。其它可用的OB塊隨所用的CPU性能和控制過程的要求而定。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)圖5.1 STEP 7調(diào)用
4、過程示意圖背景DB共享DBFB/SFB背景DBFB/SFBOB操作系統(tǒng)FC/SFCFC/SFC共享DB第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 功能塊(FB、FC)實(shí)際上是用戶子程序,分為帶“記憶”的功能塊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:電動機(jī)1電動機(jī)1的背景數(shù)據(jù)塊DB202:電動機(jī)2DB203:電動機(jī)3電動機(jī)2的背景數(shù)據(jù)塊電動機(jī)3的背景數(shù)據(jù)塊FB22:電動機(jī)圖 不同對象的背景數(shù)據(jù)塊第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)數(shù)據(jù)塊(DB)是用戶定義的用于存取數(shù)據(jù)的存儲區(qū),可以被打開或關(guān)閉。DB可以是屬于某個FB的情景數(shù)據(jù)塊,也可以是通用的全局?jǐn)?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è)計(jì) 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)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è)計(jì) 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è)計(jì)表表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è)計(jì) 對于功能塊FB,操作系統(tǒng)為參數(shù)及靜態(tài)變量分配的存儲空間是背景數(shù)據(jù)塊。這樣參數(shù)變量在背景數(shù)據(jù)塊中留有運(yùn)行結(jié)
9、果備份。在調(diào)用FB時,若沒有提供實(shí)參,則功能塊使用背景數(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è)計(jì) 1) 形參 為保證功能塊對同一類設(shè)備控制的通用性,用戶在編程時就不能使用具體設(shè)備對應(yīng)的存儲區(qū)地址參數(shù)(如不能使用I1.0等),而是使用這類設(shè)備的抽
10、象地址參數(shù)。這些抽象參數(shù)稱為形式參數(shù),簡稱形參。將該設(shè)備的相應(yīng)實(shí)際存儲區(qū)地址參數(shù)(簡稱實(shí)參)傳遞給功能塊,功能塊在運(yùn)行時以實(shí)參替代形參,從而可通過調(diào)用功能塊實(shí)現(xiàn)對具體設(shè)備的控制。當(dāng)對另一設(shè)備控制時,同樣也可通過調(diào)用實(shí)參將其傳遞給功能塊。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 形參需在功能塊的變量聲明表中定義,實(shí)參在調(diào)用功能塊時給出。在功能塊的不同調(diào)用處,可為形參提供不同的實(shí)參,但實(shí)參的數(shù)據(jù)類型必須與形參一致。用戶程序可定義功能塊的輸入值參數(shù)或輸出值參數(shù),也可定義一參數(shù)作為輸入/輸出值。參數(shù)傳遞可將調(diào)用塊的信息傳遞給被調(diào)用塊,也能把被調(diào)用塊的運(yùn)行結(jié)果返回給調(diào)用塊。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)
11、2) 靜態(tài)變量 靜態(tài)變量在PLC運(yùn)行期間始終被存儲。S7將靜態(tài)變量定義在背景數(shù)據(jù)塊中,當(dāng)被調(diào)用塊運(yùn)行時,能讀出或修改靜態(tài)變量;被調(diào)用塊運(yùn)行結(jié)束后,靜態(tài)變量保留在數(shù)據(jù)塊中。由于只有功能塊FB有關(guān)聯(lián)的背景數(shù)據(jù)塊,因此只能為FB定義靜態(tài)變量。功能塊FC不能有靜態(tài)變量。 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 3) 臨時變量 臨時變量僅在邏輯塊運(yùn)行時有效,邏輯塊結(jié)束時存儲臨時變量的內(nèi)存被操作系統(tǒng)另行 分配。S7將臨時變量定義在L堆棧中,L堆棧是為存儲邏輯塊的臨時變量而專設(shè)的。當(dāng)塊程序運(yùn)行時,在L堆棧中建立該塊的臨時變量,一旦塊執(zhí)行結(jié)束,堆棧重新分配,因而信息丟失。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 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ù)類型包括定時器、計(jì)數(shù)器、塊的地址或指針等,見表5.2。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)表表5.2 參數(shù)類型變量參數(shù)類型變量參數(shù)類型 大 小 說 明 定時器(Timer) 2 B 在功能塊中定義一個定時器形參,調(diào)用時賦予定時器實(shí)參 計(jì)數(shù)器(Counter) 2 B 在功能塊中定義一個計(jì)數(shù)器形參,調(diào)用時賦予計(jì)數(shù)器實(shí)參 塊: Block_FB Block_FC Block
13、_DB Block_SDB 2 B 在功能塊中定義一個功能塊或數(shù)據(jù)塊形參變量,調(diào)用時給功能塊類或數(shù)據(jù)塊類形參賦予實(shí)際的功能塊或數(shù)據(jù)塊編號,如 FC 101、DB 42 指針(Pointer) 6 B 在功能塊中定義一個形參, 該形參說明的是內(nèi)存的地址指針。例如,調(diào)用時可給形參賦予實(shí)參 P#M50.0,以訪問內(nèi)存 M50.0 ANY 10 B 當(dāng)實(shí)參的數(shù)據(jù)類型未知時,可以使用該類型 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 1) 定時器或計(jì)數(shù)器參數(shù)類型定時器或計(jì)數(shù)器參數(shù)類型 在功能塊中定義一個定時器或計(jì)數(shù)器類型的形參,功能塊就能使用一個定時器或計(jì)數(shù)器,而不需明確具體的定時器或計(jì)數(shù)器,等到調(diào)用該功能塊時
14、再確定定時器或計(jì)數(shù)器號。這使用戶程序能靈活性地分配和使用定時器或計(jì)數(shù)器。當(dāng)給定時器或計(jì)數(shù)器參數(shù)類型形參分配實(shí)參時,在“T”或“C”后跟一個有效整數(shù),如T 100。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 2) 塊參數(shù)類型 當(dāng)定義一個作為輸入/輸出的塊時,參數(shù)聲明決定了塊的類型(FB、FC、DB等)。當(dāng)為塊參數(shù)類型形參分配實(shí)參時,可以使用物理地址,如FC 101,也可使用符號地址,如“valve”。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 3) 指針參數(shù)類型 一個指針給出的是變量的地址,而不是變量的數(shù)值大小。在有些功能塊中,可能使用指針編程更為方便。用定義指針類型的形參,就能在功能塊中先使用一個虛設(shè)的指針,
15、待調(diào)用功能塊時再為其賦予確定的地址。當(dāng)為指針參數(shù)類型形參分配實(shí)參時,需要指明內(nèi)存地址,例如P#M50.0。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 4) ANY參數(shù)類型 當(dāng)實(shí)參的數(shù)據(jù)類型不能確定或在功能塊中需要使用變化的數(shù)據(jù)類型時,可以把形參定義為ANY參數(shù)類型。這樣就可以將任何數(shù)據(jù)類型的實(shí)參賦給ANY類形參,而不必像其它類型那樣保證實(shí)參、形參類型一致。STEP 7自動為ANY類型分配80 bit的內(nèi)存,STEP 7用這80 bit存儲實(shí)參的起始地址、數(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ù)數(shù)組(臨時變量Thermo)、一個布爾值(M 1.3)或一個定時器(T2)。FB 10和FB 11分別調(diào)用FC 100時,傳遞的實(shí)參類型完全不同。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 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è)計(jì)圖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è)計(jì)圖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è)計(jì)a)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)b)c)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 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è)計(jì) STEP 7中可使用的B堆棧大小是有限制的,對于S
19、7-300 CPU,則可在B堆棧中存儲8個塊的信息。因此,塊調(diào)用嵌套深度也是有限制的,最多可同時激活8個塊。 L堆棧是CPU內(nèi)存中的一部分,它在塊調(diào)用時被重新分配。L堆棧用來存儲邏輯塊中定義的臨時變量,也分配給臨時本地?cái)?shù)據(jù)使用。梯形圖的方塊指令與標(biāo)準(zhǔn)功能塊也可能使用L堆棧存儲運(yùn)算的中間結(jié)果。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 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)用塊的實(shí)參裝入DB和L堆棧上部
20、; (5) 當(dāng)功能塊FB結(jié)束時,先前塊的現(xiàn)場信息從塊堆棧中彈出,臨時變量彈出L堆棧; (6) DB和DI寄存器內(nèi)容交換。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 當(dāng)調(diào)用功能塊FB時,STEP 7并不一定要求給FB形參賦予實(shí)參,除非參數(shù)是復(fù)式數(shù)據(jù)類型的I/O形參或參數(shù)類型形參。如果沒有給FB形參賦予實(shí)參,則功能塊FB就調(diào)用背景數(shù)據(jù)塊內(nèi)的數(shù)值。該數(shù)值是在功能塊的變量聲明表內(nèi)或背景數(shù)據(jù)塊內(nèi)設(shè)置的形參初始數(shù)值。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 3) 調(diào)用功能塊FC 當(dāng)調(diào)用功能塊FC時會有以下事件發(fā)生: (1) 功能塊FC實(shí)參的指針存到調(diào)用塊的L堆棧; (2) 調(diào)用塊的地址和返回位置存儲在塊堆棧,調(diào)用塊的局
21、部數(shù)據(jù)壓入L堆棧; (3) 功能塊存儲臨時變量的L堆棧區(qū)被推入L堆棧上部; (4) 當(dāng)被調(diào)用功能塊FC結(jié)束時,先前塊的信息存儲在塊堆棧中,臨時變量彈出L堆棧。 因?yàn)楣δ軌KFC不用背景數(shù)據(jù)塊,不能分配初始數(shù)值給功能塊FC的局部數(shù)據(jù),所以必須給功能塊FC提供實(shí)參。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) STEP 7為功能塊FC提供了一個特殊的返回值輸出參數(shù)(關(guān)鍵字:RET_VAL)。當(dāng)在文本文件中創(chuàng)建功能塊FC時,你可以在定義功能塊FC命令后輸入數(shù)據(jù)類型(如BOOL或INT)。對文本文件進(jìn)行編譯時,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è)計(jì)5.1.3 功能塊編程與調(diào)用舉例功能塊編程與調(diào)用舉例 對功能塊編程分兩步進(jìn)行:第一步是定義局部變量(填寫局部變量表);第二步是編寫要執(zhí)行的程序,可以用梯形圖或語句表兩種形式編程,并在編程過程中使用定義了的局部變量(數(shù)據(jù))。 定義局部變量的工作內(nèi)容包括: (1) 分別定義形參、靜態(tài)變量和臨時變量(FC塊中不包括靜態(tài)變量);第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) (2) 確定各變量的聲明類型(Decl.)、變量名(Name)和數(shù)據(jù)類型(Data Type),還要為變量
23、設(shè)置初始值(Initial Value)(盡管對有些變量初始值不一定有意義)。如果需要還可為變量注釋(Comment)。在增量編程模式下,STEP 7將自動產(chǎn)生局部變量地址(Address)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 寫功能塊程序時,可以用以下兩種方式使用局部變量: (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è)計(jì)1.發(fā)動機(jī)控制系統(tǒng)的用戶程序結(jié)構(gòu)在右圖中組織塊OB1是主程序,用一個名為:“發(fā)動機(jī)控制”的功能塊FB1來分別控制汽油機(jī)和柴油機(jī),控制的參數(shù)在背景數(shù)據(jù)塊DB1和DB2中。風(fēng)扇控制使用功能FC1。(1)符號表為了使程序易于理解,可以給變量制定符號。(2)變量聲明表(3)局域變量的類型第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)柴油
25、機(jī)達(dá)到設(shè)定轉(zhuǎn)速柴油機(jī)達(dá)到設(shè)定轉(zhuǎn)速Q(mào) 5.5BOOL柴油機(jī)風(fēng)扇運(yùn)行柴油機(jī)風(fēng)扇運(yùn)行Q 5.6BOOL柴油機(jī)風(fēng)扇運(yùn)行延時柴油機(jī)風(fēng)扇運(yùn)行延時T 2TIMER柴油機(jī)故障柴油機(jī)故障 I 1.6BOOL柴油機(jī)數(shù)據(jù)柴油機(jī)數(shù)據(jù) DB 2FB 1柴油機(jī)運(yùn)行柴油機(jī)運(yùn)行 Q 5.4BOOL柴油機(jī)轉(zhuǎn)速柴油機(jī)轉(zhuǎn)速 MW 4INT發(fā)動機(jī)控制發(fā)動機(jī)控制 FB 1FB 1風(fēng)扇控制風(fēng)扇控制 FC 1FC 1共享數(shù)據(jù)共享數(shù)據(jù) DB 3DB 3關(guān)閉柴油機(jī)關(guān)閉柴油機(jī) I 1.5BOOL關(guān)閉汽油機(jī)關(guān)閉汽油機(jī) I 1.1BOOL啟動柴油機(jī)啟動柴油機(jī) I 1.4BOOL啟動汽油機(jī)啟動汽油機(jī)I 1.0BOOL汽油機(jī)達(dá)到設(shè)定轉(zhuǎn)速汽油機(jī)達(dá)到設(shè)定轉(zhuǎn)
26、速Q(mào) 5.1BOOL汽油機(jī)風(fēng)扇延時汽油機(jī)風(fēng)扇延時T 1TIMER汽油機(jī)風(fēng)扇運(yùn)行汽油機(jī)風(fēng)扇運(yùn)行Q 5.2BOOL汽油機(jī)故障汽油機(jī)故障I 1.2BOOL汽油機(jī)數(shù)據(jù)汽油機(jī)數(shù)據(jù)DB 1FB 1汽油機(jī)運(yùn)行汽油機(jī)運(yùn)行Q 5.0BOOL汽油機(jī)轉(zhuǎn)速汽油機(jī)轉(zhuǎn)速M(fèi)W 2INT手動按鈕手動按鈕I 0.6BOOL主程序主程序OB 1OB 1自動按鈕自動按鈕I 0.5BOOL自動模式自動模式Q 4.2BOOL符號符號地址地址類型類型第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)FB1:控制發(fā)動機(jī)的功能塊控制發(fā)動機(jī)的功能塊第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)FC1第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)第5
27、章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 2二分頻器二分頻器 假設(shè)功能塊FC1是二分頻器產(chǎn)生程序,功能是對不同的輸入位進(jì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è)計(jì)FC1 梯形圖程序OB1調(diào)用梯形圖程序第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 3讀模擬輸入量程序讀模擬輸入量程序 一些S7-300的應(yīng)用系統(tǒng)中,使用8通道模擬量模塊采集信號,當(dāng)模塊數(shù)量較多時,讀模擬輸入量就很繁瑣。下面給出一個通用程序FC100,利用它可以方便地把模擬量讀回并順序存入數(shù)據(jù)塊,因?yàn)槟H肽K的起始地址、通道數(shù)、存儲數(shù)據(jù)塊號及數(shù)據(jù)在數(shù)據(jù)塊中的存儲起始位置均是可變的,所以可在調(diào)用FC100時靈活確定。 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)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è)計(jì) Network 1 L #DB_No T LW0 OPN DBLW 0 /打開存儲數(shù)據(jù)塊 L #PIW_Addr SLD 3 /形成模入模塊地址指針 T LD4 /在臨時本地?cái)?shù)據(jù)雙字LD 4中存儲模入模塊地址指針 L #DBW_Addr SLD 3
30、/形成數(shù)據(jù)塊存儲地址指針 T LD8 /在臨時本地?cái)?shù)據(jù)雙字LD 8中存入數(shù)據(jù)塊存儲地址指針 L #CH_LEN /以要讀入的通道數(shù)為循環(huán)次數(shù),裝入累加器1 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) /將累加器1的值,裝入循環(huán)次數(shù)計(jì)數(shù)器LW0(臨時本地?cái)?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ù)計(jì)數(shù)器LW0的值裝入累加器1LOOP NEXT /若累加器1的值不為0,將累加器減1繼續(xù)循環(huán);若累加 /器為0,則結(jié)束 NEXT:T LW 0第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 在FC100中,寄存器間接尋址指令OP NDBLW0使用了臨時本地?cái)?shù)據(jù)LW0,變量表中定義的臨時變量雖然也在L堆棧中,但不能用于存儲器間接尋址,從這里也可看出
32、臨時本地?cái)?shù)據(jù)與臨時變量的區(qū)別。程序中LW2、LD4和LD8起的作用也可用臨時變量替代。 下面舉例說明如何使用FC100。在某應(yīng)用中,機(jī)架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è)計(jì)4. 時鐘脈沖發(fā)生器時鐘脈沖發(fā)生器使用定時器實(shí)現(xiàn)自由設(shè)定時鐘脈沖發(fā)生器功能使用定時器實(shí)現(xiàn)自由設(shè)定時鐘脈沖發(fā)生器功能(脈沖占空系數(shù)脈沖占空系數(shù)1:1)。(1)FC
33、1變量聲明表 (2)FC1梯形圖程序第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)(3)OB1調(diào)用梯形圖程序第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)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è)計(jì) 1. 定義數(shù)據(jù)塊定義數(shù)據(jù)塊 在編程階段和運(yùn)行程序中都能定義數(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中。 如果確實(shí)需要,還可以在程序運(yùn)行中動態(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è)計(jì) 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è)計(jì) 另一種方法是“先打開后訪問”。在訪問某數(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è)計(jì) 在打開一個數(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時可以自動實(shí)現(xiàn)。由于調(diào)用FB時使用DI寄存器,因此,一般不在FB程序中用OPN DI n指令打開數(shù)據(jù)塊。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 3. 背景數(shù)據(jù)塊和共享數(shù)據(jù)塊背景數(shù)據(jù)塊和共享數(shù)據(jù)塊 背景數(shù)據(jù)塊和共享數(shù)據(jù)塊有不同的用途。任何FB、FC或OB均可讀寫存放在共享數(shù)據(jù)塊中的數(shù)據(jù)。背景數(shù)據(jù)塊是FB運(yùn)行
37、時的工作存儲區(qū),它存放FB的部分運(yùn)行變量。調(diào)用FB時,必須指定一個相關(guān)的背景數(shù)據(jù)塊。作為規(guī)則,只有FB塊才能訪問存放在背景數(shù)據(jù)塊中的數(shù)據(jù)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 一般情況下,每個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í)際上,一個數(shù)據(jù)塊由FB當(dāng)作背景數(shù)據(jù)塊使用時,必須與FB的要求格式相符。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)4. 多重背景數(shù)據(jù)塊在用戶程序中使用多重背景可以減少背景數(shù)據(jù)塊的數(shù)量。以發(fā)動機(jī)控制程序?yàn)槔?,原來FB1控制汽油機(jī)和柴油機(jī)時,分別使用了背景數(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è)計(jì)
39、FB10變量聲明表第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)OB1中調(diào)用多重背景中調(diào)用多重背景第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)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è)計(jì)表表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é)存放此串的定義長度(默認(rèn)值為 254 個字符),第二個字節(jié)存放字符串實(shí)際長度。例如,String7定義長度為 7 的字符串,占用內(nèi)存 9 B(2+7)
41、。若不定義長度,則默認(rèn)為 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è)計(jì) 另一種復(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è)計(jì) 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è)計(jì)圖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è)計(jì) 1) 建立數(shù)組建立數(shù)組 在數(shù)據(jù)塊或變量聲明表中可定義數(shù)組。在聲明數(shù)組時,首先給數(shù)組命名,接著使用關(guān)鍵字(ARRAY),然后在方括號中給出數(shù)組的大小及維數(shù)??梢远x多達(dá)6維的數(shù)組,并用下標(biāo)來標(biāo)識數(shù)組的大小。在方括號中放下標(biāo),各維之間用逗號隔開,每一維的首尾之間用雙點(diǎn)隔開。一個下標(biāo)可以為任何一個整數(shù)值(范圍:32 76832 767),并包括負(fù)數(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è)計(jì)圖5.5 建立數(shù)組Address0.00.02.012.0SymbolHeat_23Data TypeSTRUCTARRAY1 2,1 3INTEND_STRUCTInitial ValueComment第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 2) 賦初始值 在建立數(shù)組時,STEP 7允許以兩種方法給數(shù)組的元素賦初始值。對圖5.5中的數(shù)組,可以為6個元素賦初始值:17,23,45,556,3342,0;若初始值中有順序相同的元素,寫法可以簡化,如要數(shù)組的頭兩個元素設(shè)特定數(shù)值,其余4
45、個為10,則可簡寫為17,23,4(10),其中4為重復(fù)系數(shù),10為要重復(fù)的數(shù)值。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 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ù)必須有同樣的數(shù)據(jù)組織結(jié)構(gòu)、相同 的數(shù)據(jù)類型,并按相同的順序排列。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 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è)計(jì)圖5.6 構(gòu)造的存儲結(jié)構(gòu)INTBYTECHARREALBOOLSTRUCT整數(shù)字節(jié)字符浮點(diǎn)數(shù)布爾數(shù)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 1) 建立構(gòu)造 構(gòu)造(STRUCT)只能在數(shù)據(jù)塊或變量聲明表中定義。圖5.7所示為由整數(shù)(存放數(shù)量)、字節(jié)(存放原始數(shù)據(jù))、字符(存放控制碼)、浮點(diǎn)數(shù)(存放溫度)、布爾數(shù)(完成標(biāo)志信號)組成的構(gòu)造。該構(gòu)造的名稱為Stack_1。第5章 S7系列程
47、序結(jié)構(gòu)與程序設(shè)計(jì)圖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è)計(jì) 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è)計(jì) 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ù)和實(shí)際
49、參數(shù)必須有同樣的數(shù)據(jù)組織結(jié)構(gòu)、相同的數(shù)據(jù)類型,并按相同的順序排列。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 3. 用戶數(shù)據(jù)類型用戶數(shù)據(jù)類型 STEP 7允許將基本數(shù)據(jù)類型或復(fù)式數(shù)據(jù)類型組合成用戶自己定義的數(shù)據(jù)類型,這種類型稱為用戶數(shù)據(jù)類型或UDT。用戶數(shù)據(jù)類型必須首先單獨(dú)建立,并存放在稱為UDT的特殊數(shù)據(jù)塊中,見圖5.8。 圖5.8是用“程序編輯器”建立的一個UDT,其數(shù)據(jù)組織結(jié)構(gòu)與圖5.7相同,該用戶數(shù)據(jù)類型被定義為UDT200,并單獨(dú)存儲在被稱為UDT200的特殊塊中。也可以為UDT200建立符號名(如process_data),但是,命名只能在符號表中進(jìn)行。圖5.9給出了一個使用UDT定義數(shù)據(jù)
50、塊(如DBl0)的例子,數(shù)據(jù)塊DBl0中定義兩個變量,一個為整型,另一個為用戶數(shù)據(jù)類型(UDT200)。從圖中可以看出,數(shù)據(jù)塊中UDT的用法與基本數(shù)據(jù)類型的用法類似。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)圖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è)計(jì)
51、圖5.9 使用UDTAddress0.012.0SymbolData TypeSTRUCTInitial Value Comment0.02.0NumberStack_2INTUDT 200END_STRUCT第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 用符號地址或物理地址兩種方式可以訪問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)點(diǎn)將更加突出。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)5.3 S7系列系列PLC程序設(shè)計(jì)程序設(shè)計(jì)5.3.1 程序結(jié)構(gòu)設(shè)計(jì)程序結(jié)構(gòu)設(shè)計(jì) STEP 7不僅從不同層次充分支持合理的程序結(jié)構(gòu)設(shè)計(jì),而且也簡化了結(jié)構(gòu)設(shè)計(jì)的復(fù)雜程度。 一個復(fù)雜的自動化過程可以被分解并定義為一個或多個項(xiàng)目(PROJECT);而對于每個項(xiàng)目,又可以進(jìn)一步分解并定義給一個或多個CPU,每個CPU都有一個控制程序(CPU_PR
53、OGRAM)。圖5.10顯示了一個樣本過程,它分成4個不同的項(xiàng)目:項(xiàng)目1和項(xiàng)目2只有一個CPU,而項(xiàng)目3和項(xiàng)目4有多個CPU。這樣,一個很復(fù)雜的控制任務(wù)的結(jié)構(gòu)設(shè)計(jì),就被簡化為各個CPU程序的結(jié)構(gòu)設(shè)計(jì)。項(xiàng)目間或項(xiàng)目中的各CPU程序之間,能以某種方式聯(lián)網(wǎng),實(shí)現(xiàn)信息共享。如在S7協(xié)議支持下,用MPI網(wǎng)以全局?jǐn)?shù)據(jù)通信的方式可方便地建立起聯(lián)系,實(shí)現(xiàn)一個項(xiàng)目中各CPU共享信息。 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)圖5.10 樣本過程的項(xiàng)目劃分存儲攪拌準(zhǔn)備包裝一個工廠的過程任務(wù)項(xiàng)目1CPU1:存儲項(xiàng)目2CPU2:攪拌項(xiàng)目3CPU3:傳輸CPU4:加工項(xiàng)目4CPU5:打包CPU6:傳輸CPU7:裝箱第5章 S
54、7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 典型的情況是一個過程控制任務(wù)只有一個項(xiàng)目,該項(xiàng)目下也僅有一個CPU程序,每一個CPU程序又可依據(jù)時間特性或事件觸發(fā)特性的差異分類編入不同的組織塊(OB)中。例如,需要以固定時間間隔循環(huán)執(zhí)行的那部分程序編入組織塊OB35中,為PLC正常運(yùn)行而需進(jìn)行初始化的程序編入組織塊OBl00中。又如,由硬件觸發(fā)的中斷服務(wù)程序編入組織塊OB40中,對程序執(zhí)行中產(chǎn)生的同步錯誤的響應(yīng)處理程序編入組織塊OB121或OB122中。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 對于各組織塊中的程序,可以根據(jù)其復(fù)雜程度分別選用線性、分部或結(jié)構(gòu)化等三種形式中的一種程序結(jié)構(gòu)。由于組織塊OB1(主程序循環(huán))中的
55、程序是應(yīng)用程序中主要的也是最復(fù)雜的部分,因此,對OB1中的程序設(shè)計(jì)合理的結(jié)構(gòu)是十分重要的。下面分別說明三種典型結(jié)構(gòu)的特點(diǎn)及選用原則。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 1. 線性程序結(jié)構(gòu)線性程序結(jié)構(gòu) 用“線性”結(jié)構(gòu)設(shè)計(jì)的程序連續(xù)放置在一個塊內(nèi)(通常為OB1),塊中的程序按順序執(zhí)行。這一結(jié)構(gòu)是最初的PLC模擬的繼電器梯形邏輯的模型。線性程序具有簡單、直接的特點(diǎn)。編程時,不必考慮功能塊如何編程及如何調(diào)用,也不必考慮如何定義局部變量及如何使用背景數(shù)據(jù)塊。由于所有的指令在一個塊內(nèi),因此它適用于只需一個人編寫的、相對簡單的控制程序。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 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) 用于進(jìn)行PLC自診斷的FC。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 在分部程序中,既無數(shù)據(jù)交換也沒有重復(fù)利用的程序代碼。各功能塊收集并使用自己的數(shù)據(jù),功能塊不傳遞也不接收參數(shù),功能塊的編程與調(diào)用比較簡單。由于每個功能區(qū)分為不同的塊,因而使得多個程序員能夠同時編程而不發(fā)生
57、沖突。分部程序結(jié)構(gòu)的編程效率比線性程序有所提高,程序測試也較方便,對程序員的要求也不太高。對不太復(fù)雜的控制程序可考慮采用這種程序結(jié)構(gòu)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 3. 結(jié)構(gòu)化程序結(jié)構(gòu)結(jié)構(gòu)化程序結(jié)構(gòu) 完全結(jié)構(gòu)化(模塊化)的程序結(jié)構(gòu)是PLC程序設(shè)計(jì)和編程最有效的結(jié)構(gòu)形式,它可用于復(fù)雜程度高、程序規(guī)模大的控制應(yīng)用程序設(shè)計(jì)。結(jié)構(gòu)化程序可以重復(fù)使用某些功能塊,只需要在使用功能塊時為其提供不同的環(huán)境變量(實(shí)參),就能完成對不同設(shè)備的控制。例如,在工業(yè)攪拌控制過程中有三臺泵,對它們的控制功能相似,可以編寫一個用于對泵進(jìn)行控制的功能塊,編程時先定義泵控制所需的變量(形參),并使用這些變量構(gòu)成一個稱為“
58、泵控制”的一般功能塊。在調(diào)用該功能塊時,通過改變傳入功能塊中的參數(shù)(實(shí)參),可以分別對成分A、成分B和攪拌桶中的三臺泵進(jìn)行控制。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 結(jié)構(gòu)化程序有最高的編程和程序調(diào)試效率,應(yīng)用程序代碼量也最小。結(jié)構(gòu)化程序也支持多個程序員協(xié)同編程。這種程序結(jié)構(gòu)建立在對PLC系統(tǒng)功能的合理分析、分解及綜合的基礎(chǔ)之上,程序具體結(jié)構(gòu)形式的確定與程序設(shè)計(jì)人員的水平及經(jīng)驗(yàn)關(guān)系很大,對程序員的要求也較前兩種高。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì)5.3.2 程序設(shè)計(jì)實(shí)例程序設(shè)計(jì)實(shí)例圖5.11 工業(yè)攪拌過程示意圖MMM入口閥進(jìn)料泵進(jìn)料閥流量傳感器區(qū)域:配料A區(qū)域:混合罐攪拌電機(jī)MM入口閥進(jìn)料泵進(jìn)料
59、閥區(qū)域:配料BM排料閥區(qū)域:排料罐液位測量開關(guān)第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 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è)計(jì) 2. 說明各個功能區(qū)域說明各個功能區(qū)域 1) 配料A和配料B區(qū)域 (1) 每種配料的管道都配備有一個入口和一個進(jìn)料閥以及進(jìn)料泵。 (2) 進(jìn)料管還有流量傳感器。 (3) 當(dāng)罐的液面?zhèn)鞲衅髦甘竟逎M時,進(jìn)料泵的接通必須
60、被鎖定。 (4) 當(dāng)排料閥打開時,進(jìn)料泵的啟動必須被鎖定。 (5) 在啟動進(jìn)料泵后1 s內(nèi)必須打開入口閥和進(jìn)料閥。 (6) 在進(jìn)料泵停止后(來自流量傳感器的信號)閥門必須立即被關(guān)閉以防止配料從泵中泄露。 第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) (7) 進(jìn)料泵的啟動與一個時間監(jiān)控功能相結(jié)合,換句話說,在泵啟動后的7 s之內(nèi),流量傳感器會報(bào)告溢出。 (8) 當(dāng)進(jìn)料泵運(yùn)行時,如果流量傳感器沒有流量信號,進(jìn)料泵必須盡可能快地?cái)嚅_。 (9) 必須對進(jìn)料泵啟動的次數(shù)進(jìn)行計(jì)數(shù)(維護(hù)間隔)。第5章 S7系列程序結(jié)構(gòu)與程序設(shè)計(jì) 2) 混合罐區(qū)域 (1) 當(dāng)罐的液面?zhèn)鞲衅髦甘尽耙好娴陀谧畹拖蕖被蚺帕祥y打開時,攪拌電機(jī)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版試用期勞動合同模板合同
- 土地承包合同法律文本示例
- 廠家設(shè)備租賃合同樣本集錦
- 項(xiàng)目合作人才服務(wù)合同
- 茶葉購銷合同模板
- 新產(chǎn)品開發(fā)項(xiàng)目合同協(xié)議書范本
- 保密合同-工作手機(jī)保管細(xì)則
- 度設(shè)備采購借款合同模板
- 倉儲用房租賃合同參考樣本
- 度醫(yī)療服務(wù)采購合同
- 汽車電子技術(shù)專業(yè)人才培養(yǎng)方案樣本
- 血栓風(fēng)險(xiǎn)評估及個體化干預(yù)(遺傳性易栓癥風(fēng)險(xiǎn)基因檢測)
- 血透患者的健康宣教課件
- 醫(yī)院輿情應(yīng)對處置預(yù)案
- 普通高中歷史課程標(biāo)準(zhǔn)(2022年版2023年修訂)解讀
- 第9課《呵護(hù)我們的鼻子》課件
- 《統(tǒng)計(jì)學(xué)原理賈俊平》課件
- 2024電力儲能電站鈉離子電池技術(shù)條件
- 方法驗(yàn)證報(bào)告方案
- 關(guān)于企業(yè)高層管理人員職責(zé)的通知
- 消防員班長培訓(xùn)課件
評論
0/150
提交評論