第5章S7系列程序結構與程序設計_第1頁
第5章S7系列程序結構與程序設計_第2頁
第5章S7系列程序結構與程序設計_第3頁
第5章S7系列程序結構與程序設計_第4頁
第5章S7系列程序結構與程序設計_第5頁
已閱讀5頁,還剩147頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第5章 S7系列程序結構與程序設計第5章 S7系列程序結構與程序設計5.1 編程方式與程序塊編程方式與程序塊5.2 數據塊與數據結構數據塊與數據結構5.3 S7系列系列PLC程序設計程序設計思考與練習題思考與練習題第5章 S7系列程序結構與程序設計5.1 編程方式與程序塊編程方式與程序塊5.1.1 S7-300編程方式簡介編程方式簡介 S7-300系列PLC的編程語言是STEP 7。STEP 7繼承了STEP 5語言結構化程序設計的優點,用文件塊的形式管理用戶編寫的程序及程序運行所需的數據。如果這些文件塊是子程序,則可以通過調用語句,將它們組成結構化的用戶程序。這樣,PLC的程序組織明確,結構

2、清晰,易于修改。第5章 S7系列程序結構與程序設計5-1各塊的簡要說明見表5-1第5章 S7系列程序結構與程序設計 為支持結構化程序設計,STEP 7用戶程序通常由組織塊(OB)、功能塊(FB)或功能塊(FC)等三種類型的邏輯塊和數據塊(DB)組成。 組織塊(OB)是系統操作程序與用戶應用程序在各種條件下的接口界面,用于控制程序的運行。OB塊根據操作系統調用的條件(如時間中斷、報警中斷等)可分成幾種類型,這些類型有不同的優先級,高優先級的OB可以中斷低優先級的OB。每個S7 CPU包含一套可編程的OB塊(隨CPU而不同),不同的OB塊執行特定的功能。第5章 S7系列程序結構與程序設計 OB1是

3、主程序循環塊,在任何情況下,它都是需要的。根據過程控制的復雜程度,可將所有程序放入OB1中進行線性編程,或將程序用不同的邏輯塊加以結構化,通過OB1調用這些邏輯塊,并允許塊間的相互調用。塊的調用指令中止當前塊(調用塊)的運行調用,然后執行被調用塊的所有指令。一旦被調用的塊被完成,執行調用指令的塊繼續執行調用指令后的指令。調用塊可以是任何邏輯塊,被調用塊只能是功能塊(除OB外的邏輯塊)。圖5.1所示是一個STEP 7調用實例。除了OB1,操作系統可以調用其它的OB塊以響應確定事件。其它可用的OB塊隨所用的CPU性能和控制過程的要求而定。第5章 S7系列程序結構與程序設計圖5.1 STEP 7調用

4、過程示意圖背景DB共享DBFB/SFB背景DBFB/SFBOB操作系統FC/SFCFC/SFC共享DB第5章 S7系列程序結構與程序設計 功能塊(FB、FC)實際上是用戶子程序,分為帶“記憶”的功能塊FB和不帶“記憶”的功能塊FC。前者有一個數據結構與該功能塊的參數表完全相同的數據塊(DB)附屬于該功能塊,并隨功能塊的調用而打開,隨功能塊的結束而關閉。該附屬數據塊叫做背景數據塊(Instance Data Block),存放在背景數據塊中的數據在FB塊結束時繼續保持,即被“記憶”。功能塊FC沒有背景數據塊,當FC完成操作后數據不能保持。 在調用功能塊時使用不同的背景數據塊,可以控制多個同類的對

5、象。DB201:電動機1電動機1的背景數據塊DB202:電動機2DB203:電動機3電動機2的背景數據塊電動機3的背景數據塊FB22:電動機圖 不同對象的背景數據塊第5章 S7系列程序結構與程序設計數據塊(DB)是用戶定義的用于存取數據的存儲區,可以被打開或關閉。DB可以是屬于某個FB的情景數據塊,也可以是通用的全局數據塊,用于FB或FC。S7 CPU還提供標準系統功能塊(SFB、SFC),它們是預先編好的,經過測試后集成在S7 CPU中的功能程序庫。用戶可以直接調用它們,高效地編制自己的程序。由于它們是操作系統的一部分,因此不需將其作為用戶程序下載到PLC。與FB塊相似,SFB需要一個背景數

6、據塊,并需將此DB塊作為程序的一部分安裝到CPU中。不同的CPU提供不同的SFB、SFC功能。系統數據塊(SDB)是為存放PLC參數所建立的系統數據存儲區。用STEP 7的S7組態軟件可以將PLC組態數據和其它操作參數存放于SDB中。第5章 S7系列程序結構與程序設計 第5章 S7系列程序結構與程序設計5.1.2 功能塊編程及調用功能塊編程及調用 功能塊由兩個主要部分組成:一部分是每個功能塊的變量聲明表,變量聲明表聲明此塊的局部數據;另一部分是邏輯指令組成的程序,程序要用到變量聲明表中給出的局部數據。 當調用功能塊時,需提供塊執行時要用到的數據或變量,也就是將外部數據傳遞給功能塊,這被稱為參數

7、傳遞。參數傳遞的方式使得功能塊具有通用性,它可被其它的塊調用,以完成多個類似的控制任務。第5章 S7系列程序結構與程序設計 1. 變量聲明表變量聲明表(局部數據局部數據) 每個邏輯塊前部都有一個變量聲明表,在變量聲明表中定義邏輯塊用到的局部數據。局部數據分為參數和局部變量兩大類,局部變量又包括靜態變量和臨時變量(暫態變量)兩種。參數是在調用塊和被調用塊間傳遞的數據。靜態變量和臨時變量是僅供邏輯塊本身使用的數據。表5.1給出了局部數據聲明類型,表中內容的排列順序也是在變量聲明表中聲明變量的順序和變量在內存中的存儲順序。在邏輯塊中不需使用的局部數據類型,可以不必在變量聲明表中聲明。第5章 S7系列

8、程序結構與程序設計表表5.1 局部數據類型局部數據類型變 量 名 類 型 說 明 輸入參數 In 由調用邏輯塊的塊提供數據,輸入給邏輯塊的指令 輸出參數 Out 向調用邏輯塊的塊返回參數,即從邏輯塊輸出結果數據 I/O 參數 In_Out 參數的值由調用塊的塊提供,由邏輯塊處理修改,然后返回 靜態變量 Stat 靜態變量存儲在背景數據塊中,塊調用結束后,其內容被保留 臨時變量 Temp 臨時變量存儲在 L 堆棧中,塊執行結束變量的值因被其它內容覆蓋而丟掉 第5章 S7系列程序結構與程序設計 對于功能塊FB,操作系統為參數及靜態變量分配的存儲空間是背景數據塊。這樣參數變量在背景數據塊中留有運行結

9、果備份。在調用FB時,若沒有提供實參,則功能塊使用背景數據塊中的數值。操作系統在L堆棧中給FB的臨時變量分配存儲空間。 對于功能塊FC,操作系統在L堆棧中給FC的臨時變量分配存儲空間。由于沒有背景數據塊,因而FC不能使用靜態變量。輸入、輸出、I/O參數以指向實參的指針形式存儲在操作系統為參數傳遞而保留的額外空間中。 對于組織塊OB來說,其調用是由操作系統管理的,用戶不能參與。因此,OB只有定義在L堆棧中的臨時變量。第5章 S7系列程序結構與程序設計 1) 形參 為保證功能塊對同一類設備控制的通用性,用戶在編程時就不能使用具體設備對應的存儲區地址參數(如不能使用I1.0等),而是使用這類設備的抽

10、象地址參數。這些抽象參數稱為形式參數,簡稱形參。將該設備的相應實際存儲區地址參數(簡稱實參)傳遞給功能塊,功能塊在運行時以實參替代形參,從而可通過調用功能塊實現對具體設備的控制。當對另一設備控制時,同樣也可通過調用實參將其傳遞給功能塊。第5章 S7系列程序結構與程序設計 形參需在功能塊的變量聲明表中定義,實參在調用功能塊時給出。在功能塊的不同調用處,可為形參提供不同的實參,但實參的數據類型必須與形參一致。用戶程序可定義功能塊的輸入值參數或輸出值參數,也可定義一參數作為輸入/輸出值。參數傳遞可將調用塊的信息傳遞給被調用塊,也能把被調用塊的運行結果返回給調用塊。第5章 S7系列程序結構與程序設計

11、2) 靜態變量 靜態變量在PLC運行期間始終被存儲。S7將靜態變量定義在背景數據塊中,當被調用塊運行時,能讀出或修改靜態變量;被調用塊運行結束后,靜態變量保留在數據塊中。由于只有功能塊FB有關聯的背景數據塊,因此只能為FB定義靜態變量。功能塊FC不能有靜態變量。 第5章 S7系列程序結構與程序設計 3) 臨時變量 臨時變量僅在邏輯塊運行時有效,邏輯塊結束時存儲臨時變量的內存被操作系統另行 分配。S7將臨時變量定義在L堆棧中,L堆棧是為存儲邏輯塊的臨時變量而專設的。當塊程序運行時,在L堆棧中建立該塊的臨時變量,一旦塊執行結束,堆棧重新分配,因而信息丟失。第5章 S7系列程序結構與程序設計 2.

12、邏輯塊局部數據的數據類型邏輯塊局部數據的數據類型 在變量聲明表中,要明確局部數據的數據類型,這樣操作系統才能給變量分配確定的 存儲空間。局部數據可以是基本數據類型或復式數據類型,也可以是專門用于參數傳遞 的所謂的“參數類型”。參數類型包括定時器、計數器、塊的地址或指針等,見表5.2。第5章 S7系列程序結構與程序設計表表5.2 參數類型變量參數類型變量參數類型 大 小 說 明 定時器(Timer) 2 B 在功能塊中定義一個定時器形參,調用時賦予定時器實參 計數器(Counter) 2 B 在功能塊中定義一個計數器形參,調用時賦予計數器實參 塊: Block_FB Block_FC Block

13、_DB Block_SDB 2 B 在功能塊中定義一個功能塊或數據塊形參變量,調用時給功能塊類或數據塊類形參賦予實際的功能塊或數據塊編號,如 FC 101、DB 42 指針(Pointer) 6 B 在功能塊中定義一個形參, 該形參說明的是內存的地址指針。例如,調用時可給形參賦予實參 P#M50.0,以訪問內存 M50.0 ANY 10 B 當實參的數據類型未知時,可以使用該類型 第5章 S7系列程序結構與程序設計 1) 定時器或計數器參數類型定時器或計數器參數類型 在功能塊中定義一個定時器或計數器類型的形參,功能塊就能使用一個定時器或計數器,而不需明確具體的定時器或計數器,等到調用該功能塊時

14、再確定定時器或計數器號。這使用戶程序能靈活性地分配和使用定時器或計數器。當給定時器或計數器參數類型形參分配實參時,在“T”或“C”后跟一個有效整數,如T 100。第5章 S7系列程序結構與程序設計 2) 塊參數類型 當定義一個作為輸入/輸出的塊時,參數聲明決定了塊的類型(FB、FC、DB等)。當為塊參數類型形參分配實參時,可以使用物理地址,如FC 101,也可使用符號地址,如“valve”。第5章 S7系列程序結構與程序設計 3) 指針參數類型 一個指針給出的是變量的地址,而不是變量的數值大小。在有些功能塊中,可能使用指針編程更為方便。用定義指針類型的形參,就能在功能塊中先使用一個虛設的指針,

15、待調用功能塊時再為其賦予確定的地址。當為指針參數類型形參分配實參時,需要指明內存地址,例如P#M50.0。第5章 S7系列程序結構與程序設計 4) ANY參數類型 當實參的數據類型不能確定或在功能塊中需要使用變化的數據類型時,可以把形參定義為ANY參數類型。這樣就可以將任何數據類型的實參賦給ANY類形參,而不必像其它類型那樣保證實參、形參類型一致。STEP 7自動為ANY類型分配80 bit的內存,STEP 7用這80 bit存儲實參的起始地址、數據類型和長度編碼。 例如,功能塊FC 100有三個參數(in_par1、in_par2和in_par3),它們都被定義為ANY類型。當功能塊FB 1

16、0調用功能塊FC 100時,FBl0傳遞的可以是一個整數(靜態變量Speed)、一個字(MW 100)或數據塊DB 10中的雙字(DB 10.DBD 40)。而當功能塊FB 11調用功能塊FC 100時,FB 11傳遞的可以是一個實數數組(臨時變量Thermo)、一個布爾值(M 1.3)或一個定時器(T2)。FB 10和FB 11分別調用FC 100時,傳遞的實參類型完全不同。第5章 S7系列程序結構與程序設計 3. 塊調用過程及內存分配塊調用過程及內存分配 CPU提供塊堆棧(B堆棧)來存儲與處理被中斷塊的有關信息。當發生塊調用或有來自更高優先級的中斷時,就有相關的塊信息存儲在B堆棧里,并影響

17、部分內存和寄存器。圖5.2顯示了調用塊時B堆棧與L堆棧的變化。圖5.3提供了關于STEP 7的塊調用情況。第5章 S7系列程序結構與程序設計圖5.2 堆棧與L堆棧先前塊的數據(仍是激活的)DB寄存器(DB和DI)臨時數據指針塊號返回地址先前塊的數據(仍是激活的)DB寄存器(DB和DI)臨時數據指針塊號返回地址塊堆棧(B堆棧)可執行的用戶程序邏輯塊數據塊工作內存仍是激活的先前塊的臨時數據L堆棧數據塊寄存器打開的數據塊號當前塊的臨時數據打開的背景數據塊號被中斷塊的數據DB寄存器(DB和DI)臨時數據指針塊號返回地址第5章 S7系列程序結構與程序設計圖5.3 調用指令對CPU內存的影響邏輯塊調用其它

18、塊被調用塊的局部數據存儲到L堆棧頂部先前塊的局部數據壓入L堆棧新的背景數據塊號先前的背景數據塊號DI寄存器DB寄存器先前激活著的調用塊的信息壓入塊堆棧調用塊的信息裝入塊堆棧程序第5章 S7系列程序結構與程序設計a)第5章 S7系列程序結構與程序設計b)c)第5章 S7系列程序結構與程序設計 1) B堆棧與L堆棧 B堆棧是CPU系統內存中的一部分,它存儲以下被中斷塊的數據:(1) 塊號、塊類型、優先級、被中斷塊的返回地址;(2) 塊寄存器DB、DI被中斷前的內容;(3) 臨時變量的指針(被中斷塊的L堆棧地址)。第5章 S7系列程序結構與程序設計 STEP 7中可使用的B堆棧大小是有限制的,對于S

19、7-300 CPU,則可在B堆棧中存儲8個塊的信息。因此,塊調用嵌套深度也是有限制的,最多可同時激活8個塊。 L堆棧是CPU內存中的一部分,它在塊調用時被重新分配。L堆棧用來存儲邏輯塊中定義的臨時變量,也分配給臨時本地數據使用。梯形圖的方塊指令與標準功能塊也可能使用L堆棧存儲運算的中間結果。第5章 S7系列程序結構與程序設計 2) 調用功能塊FB 當調用功能塊FB時,會有以下事件發生: (1) 調用塊的地址和返回位置存儲在塊堆棧中,調用塊的臨時變量壓入L堆棧; (2) 數據塊DB寄存器內容與DI寄存器內容交換; (3) 新的數據塊地址裝入DI寄存器; (4) 被調用塊的實參裝入DB和L堆棧上部

20、; (5) 當功能塊FB結束時,先前塊的現場信息從塊堆棧中彈出,臨時變量彈出L堆棧; (6) DB和DI寄存器內容交換。第5章 S7系列程序結構與程序設計 當調用功能塊FB時,STEP 7并不一定要求給FB形參賦予實參,除非參數是復式數據類型的I/O形參或參數類型形參。如果沒有給FB形參賦予實參,則功能塊FB就調用背景數據塊內的數值。該數值是在功能塊的變量聲明表內或背景數據塊內設置的形參初始數值。第5章 S7系列程序結構與程序設計 3) 調用功能塊FC 當調用功能塊FC時會有以下事件發生: (1) 功能塊FC實參的指針存到調用塊的L堆棧; (2) 調用塊的地址和返回位置存儲在塊堆棧,調用塊的局

21、部數據壓入L堆棧; (3) 功能塊存儲臨時變量的L堆棧區被推入L堆棧上部; (4) 當被調用功能塊FC結束時,先前塊的信息存儲在塊堆棧中,臨時變量彈出L堆棧。 因為功能塊FC不用背景數據塊,不能分配初始數值給功能塊FC的局部數據,所以必須給功能塊FC提供實參。第5章 S7系列程序結構與程序設計 STEP 7為功能塊FC提供了一個特殊的返回值輸出參數(關鍵字:RET_VAL)。當在文本文件中創建功能塊FC時,你可以在定義功能塊FC命令后輸入數據類型(如BOOL或INT)。對文本文件進行編譯時,STEP 7會自動生成RET_VAL輸出參數。當用STEP 7的程序編輯器(Program Editor

22、)以增量模式創建功能塊FC時,可在FC的變量聲明表中聲明一個輸出參數RET_VAL,并指明其數據類型。第5章 S7系列程序結構與程序設計5.1.3 功能塊編程與調用舉例功能塊編程與調用舉例 對功能塊編程分兩步進行:第一步是定義局部變量(填寫局部變量表);第二步是編寫要執行的程序,可以用梯形圖或語句表兩種形式編程,并在編程過程中使用定義了的局部變量(數據)。 定義局部變量的工作內容包括: (1) 分別定義形參、靜態變量和臨時變量(FC塊中不包括靜態變量);第5章 S7系列程序結構與程序設計 (2) 確定各變量的聲明類型(Decl.)、變量名(Name)和數據類型(Data Type),還要為變量

23、設置初始值(Initial Value)(盡管對有些變量初始值不一定有意義)。如果需要還可為變量注釋(Comment)。在增量編程模式下,STEP 7將自動產生局部變量地址(Address)。第5章 S7系列程序結構與程序設計 寫功能塊程序時,可以用以下兩種方式使用局部變量: (1) 使用變量名,此時變量名前加前綴“#”,以區別于在符號表中定義的符號地址(全局符號則顯示為全局符號加引號的形勢)。增量方式下,前綴會自動產生。 (2) 直接使用局部變量的地址,這種方式只對背景數據塊和L堆棧有效。 在調用FB塊時,要說明其背景數據塊。背景數據塊應在調用前生成,其順序格式與變量聲明表必須保持一致。在增

24、量方式下,調用FB塊時,STEP 7會自動提醒并生成背景數據塊。此時也為背景數據塊設置了初始值,該初始值與變量聲明表中的相同。當然也可以為背景數據塊設置當前值(Current Value),即存儲在CPU中的數值。第5章 S7系列程序結構與程序設計1.發動機控制系統的用戶程序結構在右圖中組織塊OB1是主程序,用一個名為:“發動機控制”的功能塊FB1來分別控制汽油機和柴油機,控制的參數在背景數據塊DB1和DB2中。風扇控制使用功能FC1。(1)符號表為了使程序易于理解,可以給變量制定符號。(2)變量聲明表(3)局域變量的類型第5章 S7系列程序結構與程序設計第5章 S7系列程序結構與程序設計柴油

25、機達到設定轉速柴油機達到設定轉速Q 5.5BOOL柴油機風扇運行柴油機風扇運行Q 5.6BOOL柴油機風扇運行延時柴油機風扇運行延時T 2TIMER柴油機故障柴油機故障 I 1.6BOOL柴油機數據柴油機數據 DB 2FB 1柴油機運行柴油機運行 Q 5.4BOOL柴油機轉速柴油機轉速 MW 4INT發動機控制發動機控制 FB 1FB 1風扇控制風扇控制 FC 1FC 1共享數據共享數據 DB 3DB 3關閉柴油機關閉柴油機 I 1.5BOOL關閉汽油機關閉汽油機 I 1.1BOOL啟動柴油機啟動柴油機 I 1.4BOOL啟動汽油機啟動汽油機I 1.0BOOL汽油機達到設定轉速汽油機達到設定轉

26、速Q 5.1BOOL汽油機風扇延時汽油機風扇延時T 1TIMER汽油機風扇運行汽油機風扇運行Q 5.2BOOL汽油機故障汽油機故障I 1.2BOOL汽油機數據汽油機數據DB 1FB 1汽油機運行汽油機運行Q 5.0BOOL汽油機轉速汽油機轉速MW 2INT手動按鈕手動按鈕I 0.6BOOL主程序主程序OB 1OB 1自動按鈕自動按鈕I 0.5BOOL自動模式自動模式Q 4.2BOOL符號符號地址地址類型類型第5章 S7系列程序結構與程序設計第5章 S7系列程序結構與程序設計FB1:控制發動機的功能塊控制發動機的功能塊第5章 S7系列程序結構與程序設計FC1第5章 S7系列程序結構與程序設計第5

27、章 S7系列程序結構與程序設計第5章 S7系列程序結構與程序設計第5章 S7系列程序結構與程序設計 2二分頻器二分頻器 假設功能塊FC1是二分頻器產生程序,功能是對不同的輸入位進行二分頻處理。以下給出了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 跳變沿標志

28、第5章 S7系列程序結構與程序設計FC1 梯形圖程序OB1調用梯形圖程序第5章 S7系列程序結構與程序設計 3讀模擬輸入量程序讀模擬輸入量程序 一些S7-300的應用系統中,使用8通道模擬量模塊采集信號,當模塊數量較多時,讀模擬輸入量就很繁瑣。下面給出一個通用程序FC100,利用它可以方便地把模擬量讀回并順序存入數據塊,因為模入模塊的起始地址、通道數、存儲數據塊號及數據在數據塊中的存儲起始位置均是可變的,所以可在調用FC100時靈活確定。 第5章 S7系列程序結構與程序設計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 要讀入的通道數 4.0 In DB_No INT 存儲數據塊號 6.0 In DBW_Addr INT 存儲在數據塊中的字地址 第5章 S7系列程序結構與程序設計 Network 1 L #DB_No T LW0 OPN DBLW 0 /打開存儲數據塊 L #PIW_Addr SLD 3 /形成模入模塊地址指針 T LD4 /在臨時本地數據雙字LD 4中存儲模入模塊地址指針 L #DBW_Addr SLD 3

30、/形成數據塊存儲地址指針 T LD8 /在臨時本地數據雙字LD 8中存入數據塊存儲地址指針 L #CH_LEN /以要讀入的通道數為循環次數,裝入累加器1 第5章 S7系列程序結構與程序設計 /將累加器1的值,裝入循環次數計數器LW0(臨時本地數據字) L LD4 LARl /將模入模塊地址指針裝入地址寄存器1 L PIWARl,P#0.0 /讀模入模塊裝入累加器1 T LW2 /將累加器1的內容暫存入緩沖器LW2 L LD8 LARl /將數據塊存儲地址指針裝入地址寄存器1 L LW2 /將數據緩沖器中的內容裝入累加器1 T DBWARl,P#0.0 /將累加器的內容存入數據塊中L LD4

31、/AR1+P#2.0AR1+ L#16 /ACC1+(_0001_0 000)T LD4 /調整模入模塊地址指針,指向下一通道Acc1+(bb bbbb bxxx)L LD8+ L#16T LD8 /調整數據塊存儲地址指針,指向下一存儲地址L LW0 /將循環次數計數器LW0的值裝入累加器1LOOP NEXT /若累加器1的值不為0,將累加器減1繼續循環;若累加 /器為0,則結束 NEXT:T LW 0第5章 S7系列程序結構與程序設計 在FC100中,寄存器間接尋址指令OP NDBLW0使用了臨時本地數據LW0,變量表中定義的臨時變量雖然也在L堆棧中,但不能用于存儲器間接尋址,從這里也可看出

32、臨時本地數據與臨時變量的區別。程序中LW2、LD4和LD8起的作用也可用臨時變量替代。 下面舉例說明如何使用FC100。在某應用中,機架0的4號槽位安裝了一個8模入模塊(地址256開始),若要將前6個模入模塊信號讀回,存入DB50.DBW10開始的6個字單元中,可按下列形式調用FC100: CALL FC100 PIW_Add:=256 CH_LEN:=6 DB_No:=50 DBW_Addr:=10 第5章 S7系列程序結構與程序設計4. 時鐘脈沖發生器時鐘脈沖發生器使用定時器實現自由設定時鐘脈沖發生器功能使用定時器實現自由設定時鐘脈沖發生器功能(脈沖占空系數脈沖占空系數1:1)。(1)FC

33、1變量聲明表 (2)FC1梯形圖程序第5章 S7系列程序結構與程序設計(3)OB1調用梯形圖程序第5章 S7系列程序結構與程序設計5.2 數據塊與數據結構數據塊與數據結構5.2.1 數據塊數據塊 數據塊定義在S7 CPU存儲器中,用戶可在存儲器中建立一個或多個數據塊。每個數據塊可大可小,但CPU對數據塊數量及數據總量有限制,如對于CPU314,用作數據塊的存儲器最多為8 KB(8192 B),用戶定義的數據總量不能超出這個限制。對數據塊必須遵循先定義后使用的原則,否則,將造成系統錯誤。第5章 S7系列程序結構與程序設計 1. 定義數據塊定義數據塊 在編程階段和運行程序中都能定義數據塊。大多數數

34、據塊是在編程階段用STEP 7開發軟件包定義的,定義內容包括數據塊號及塊中的變量(包括變量符號名、數據類型以及初始值等),定義完成后,數據塊中變量的順序及類型決定了數據塊的數據結構,變量的數量決定了數據塊的大小。數據塊在使用前,必須作為用戶程序的一部分下載到CPU中。 如果確實需要,還可以在程序運行中動態定義一個數據塊。動態定義時,數據塊號是自動產生的,數據塊在存儲器中的位置是動態分配的。由于要定義的數據塊有可能大于CPU存儲器(用于數據塊的部分)的剩余空間,因此動態定義過程有可能失敗。第5章 S7系列程序結構與程序設計 2訪問數據塊訪問數據塊 在用戶程序中可能定義了許多數據塊,而每個數據塊中

35、又有許多不同類型的數據,因此,訪問時需要明確數據塊號和數據塊中的數據類型與位置。根據明確數據塊號的不同方法,可以用多種方法訪問數據塊中的數據。 直接在訪問指令中寫明數據塊號,如: L DB5.DBW10 T DB10.DBW20 L Motor_1.Speed /符號地址第5章 S7系列程序結構與程序設計 另一種方法是“先打開后訪問”。在訪問某數據塊中的數據前,先“打開”這個數據塊,也就是將數據塊號(數據塊的起始地址)裝入數據塊寄存器。這樣,存放在數據塊中的數據就可利用數據塊起始地址加偏移量的方法來訪問。如:OPN DB5L DBW10OPN DB10T DBW20第5章 S7系列程序結構與程

36、序設計 在打開一個數據塊時,先打開的數據塊會自動關閉(沒有專門的數據塊關閉指令)。由于有兩個數據塊寄存器(DB和DI寄存器),因此,最多可同時打開兩個數據塊。一個作為背景數據塊,數據塊的起始地址存儲在DI寄存器中;另一個作為共享數據塊,數據塊的起始地址存儲在DB寄存器中。打開背景數據塊,在調用FB時可以自動實現。由于調用FB時使用DI寄存器,因此,一般不在FB程序中用OPN DI n指令打開數據塊。第5章 S7系列程序結構與程序設計 3. 背景數據塊和共享數據塊背景數據塊和共享數據塊 背景數據塊和共享數據塊有不同的用途。任何FB、FC或OB均可讀寫存放在共享數據塊中的數據。背景數據塊是FB運行

37、時的工作存儲區,它存放FB的部分運行變量。調用FB時,必須指定一個相關的背景數據塊。作為規則,只有FB塊才能訪問存放在背景數據塊中的數據。第5章 S7系列程序結構與程序設計 一般情況下,每個FB都有一個對應的背景數據塊,一個FB也可以使用不同的背景數據塊。如果幾個FB需要的背景數據完全相同,為節省存儲器,則可以定義成一個背景數據塊,供它們分別使用。通過多重背景數據,也可將幾個FB需要的不同的背景數據定義在一個背景數據塊中,以優化數據管理。各數據塊在CPU的存儲器中是沒有區別的,只是由于打開方式不同,才在打開時有背景數據塊和共享數據塊之分。原則上,任何一個數據塊都可以當作共享數據塊或背景數據塊使

38、用,實際上,一個數據塊由FB當作背景數據塊使用時,必須與FB的要求格式相符。第5章 S7系列程序結構與程序設計4. 多重背景數據塊在用戶程序中使用多重背景可以減少背景數據塊的數量。以發動機控制程序為例,原來FB1控制汽油機和柴油機時,分別使用了背景數據塊DB1和DB2。使用多重背景時只需要一個背景數據塊DB10,但是需要增加一個功能塊F10來調用作為“局域背景”的FB1,FB1的數據存儲在FB10的背景數據塊DB10中,DB10是自動生成的。不需要給FB1分配背景數據塊。但需要在FB10的變量生命表中聲明靜態局域數據(STAT)FB1。多重背景的程序結構如下:第5章 S7系列程序結構與程序設計

39、FB10變量聲明表第5章 S7系列程序結構與程序設計第5章 S7系列程序結構與程序設計第5章 S7系列程序結構與程序設計OB1中調用多重背景中調用多重背景第5章 S7系列程序結構與程序設計5.2.2 數據結構數據結構 STEP 7數據塊中的數據結構形式比較豐富,數據塊中的數據既可以是基本數據類型,又可以是復式數據類型。所謂復式數據類型,是指位數超過32位的數據或由其它數據類型構成的數據組。基本數據類型在第4章中已有過介紹,本節專門說明復式數據類型。STEP 7允許4種復式數據類型,如表5.5所示。第5章 S7系列程序結構與程序設計表表5.5 復式數據類型復式數據類型名 稱 類 型 說 明 日期

40、-時間 DATE_AND_TIME 長度為 8 B(64 位)。 按 BCD 碼格式順序存儲以下信息: 年(字節 0)、月(字節 1)、日(字節 2)、小時(字節 3)、分(字節 4)、秒(字節 5)、毫秒(字節 6 和 7 的高半字節)、星期(字節 7 的低半字節) 字符串 STRING 字符串是一組 ASCII 碼,一個串內可定義最多 254 個字符,占用256 B 內存。串中每個字符占用 1 B,內存中頭兩個字節存儲串的長度信息。第一個字節存放此串的定義長度(默認值為 254 個字符),第二個字節存放字符串實際長度。例如,String7定義長度為 7 的字符串,占用內存 9 B(2+7)

41、。若不定義長度,則默認為 254 個字符 數組 ARRAY 由一種數據類型組成的數據集合, 數據類型可以是基本數據類型或復式數據類型。通過下標訪問數組中的數據。可定義到 6 維數組 構造 STRUCT 由多種數據類型組成的數據集合 第5章 S7系列程序結構與程序設計 另一種復式數據類型稱為“用戶數據類型(UDT)”,它是利用STEP 7“程序編輯器”產生的,可命名構造。將大量數據組織到UDT中,在生成數據塊或在變量聲明表中聲明變量時將變得更加方便。用戶還可為UDT聲明符號名。 日期-時間數據類型的名稱、位數及格式是由操作系統定義的,用戶不可改變,并且該類型在S7-300中必須用標準功能塊SFC

42、才能訪問。其它復式數據類型則由用戶在邏輯塊變量聲明表或數據塊中定義。第5章 S7系列程序結構與程序設計 1. 數組數組 一個數組將同種數據類型組合成整體,但不能建立數組的數組。圖5.4表示一個二維 整數數組。數組的符號名是“Op_temps”,用符號名加下標可訪問數組中的數據。以圖5.4為例,第一個整數是Op_temps1,1,第三個為Op_tempsl,3,第四個為Op_temps2,1,第六個為Op_temps2,3。第5章 S7系列程序結構與程序設計圖5.4 多維數組的存儲結構整數整數整數1,21,21,3整數整數整數2,12,22,312,13Op_temps(整型數組符號名)第5章

43、S7系列程序結構與程序設計 1) 建立數組建立數組 在數據塊或變量聲明表中可定義數組。在聲明數組時,首先給數組命名,接著使用關鍵字(ARRAY),然后在方括號中給出數組的大小及維數。可以定義多達6維的數組,并用下標來標識數組的大小。在方括號中放下標,各維之間用逗號隔開,每一維的首尾之間用雙點隔開。一個下標可以為任何一個整數值(范圍:32 76832 767),并包括負數。如用ARRAY13, 12, 13, 23, 3032, 14來定義變量Op_temps為6維數組。該數組的第一個整數為Op_temps1, 1, 1, 2, 30, 1;最后一個為Op_temps3, 2, 3, 3, 32

44、, 4。圖5.5顯示了建立名字為Heat_23的二維數組(與圖5.4中的數組相似)。第5章 S7系列程序結構與程序設計圖5.5 建立數組Address0.00.02.012.0SymbolHeat_23Data TypeSTRUCTARRAY1 2,1 3INTEND_STRUCTInitial ValueComment第5章 S7系列程序結構與程序設計 2) 賦初始值 在建立數組時,STEP 7允許以兩種方法給數組的元素賦初始值。對圖5.5中的數組,可以為6個元素賦初始值:17,23,45,556,3342,0;若初始值中有順序相同的元素,寫法可以簡化,如要數組的頭兩個元素設特定數值,其余4

45、個為10,則可簡寫為17,23,4(10),其中4為重復系數,10為要重復的數值。第5章 S7系列程序結構與程序設計 3) 訪問數組 利用數組中指定元素的下標可以訪問數組數據,這時數據塊、數組符號名及下標一起 使用。如圖5.5中聲明的數組在DB20(符號名:MOTOR)的第一個字節處開始,用以下地址訪問數組中的第二個元素:MOTOR. Heat_231,2 4) 利用數組傳遞參數 將數組作為參數傳遞時,要求形式參數和實際參數必須有同樣的數據組織結構、相同 的數據類型,并按相同的順序排列。第5章 S7系列程序結構與程序設計 2. 構造構造 構造將不同數據類型組合成一個整體,見圖5.6。構造的元素

46、可以是任何基本數據類型或復式數據類型,有數組或構造元素的構造能嵌套8層。因此,STEP 7允許用戶將過程中的各種關聯數據統一組織在一個構造中,也為統一處理不同類型數據或參數提供了可能性。第5章 S7系列程序結構與程序設計圖5.6 構造的存儲結構INTBYTECHARREALBOOLSTRUCT整數字節字符浮點數布爾數第5章 S7系列程序結構與程序設計 1) 建立構造 構造(STRUCT)只能在數據塊或變量聲明表中定義。圖5.7所示為由整數(存放數量)、字節(存放原始數據)、字符(存放控制碼)、浮點數(存放溫度)、布爾數(完成標志信號)組成的構造。該構造的名稱為Stack_1。第5章 S7系列程

47、序結構與程序設計圖5.7 建立構造Stack_lAddress0.00.010.0SymbolStack_1Data TypeSTRUCTInitial Value Comment0.02.03.04.08.010.0AmountOriginal_dataControl_codeTemperatureEndSTRUCTINTBYTECHARREALBOOLEND_STRUCTEND_STRUCT0B#16#0Z98.6FALSE第5章 S7系列程序結構與程序設計 2) 賦初始值 按每個元素的類型和名稱給構造的每個元素賦初始值。并將其寫入圖5.8中Initial Value(初始值欄)的相應行中

48、。例如,可以分配如下初始值: Amount0 Original_dataB#l6#0 Control_code“Z” Temperature98.6 End:FALSE 第5章 S7系列程序結構與程序設計 3) 訪問構造 (1) 用符號地址訪問:如MOTO.Stack_1.Temperature,其中,MOTO為構造所在數據塊DB20的符號名。 (2) 用物理地址訪問:如Stack_l從DB20的字節0開始存放,Amount的物理地址是DB20.DBW0,Temperature的地址為DB20.DBD4。 4) 利用構造傳遞參數 構造可以作為參數來傳遞。將構造作為參數傳遞時,要求形式參數和實際

49、參數必須有同樣的數據組織結構、相同的數據類型,并按相同的順序排列。第5章 S7系列程序結構與程序設計 3. 用戶數據類型用戶數據類型 STEP 7允許將基本數據類型或復式數據類型組合成用戶自己定義的數據類型,這種類型稱為用戶數據類型或UDT。用戶數據類型必須首先單獨建立,并存放在稱為UDT的特殊數據塊中,見圖5.8。 圖5.8是用“程序編輯器”建立的一個UDT,其數據組織結構與圖5.7相同,該用戶數據類型被定義為UDT200,并單獨存儲在被稱為UDT200的特殊塊中。也可以為UDT200建立符號名(如process_data),但是,命名只能在符號表中進行。圖5.9給出了一個使用UDT定義數據

50、塊(如DBl0)的例子,數據塊DBl0中定義兩個變量,一個為整型,另一個為用戶數據類型(UDT200)。從圖中可以看出,數據塊中UDT的用法與基本數據類型的用法類似。第5章 S7系列程序結構與程序設計圖5.8 建立用戶數據類型(UDT200)Address0.010.0SymbolData TypeSTRUCTInitial Value Comment0.02.03.04.08.0AmountOriginal_dataControl_codeTemperatureEndINTBYTECHARREALBOOLEND_STRUCT0B#16#0Z98.6FALSE第5章 S7系列程序結構與程序設計

51、圖5.9 使用UDTAddress0.012.0SymbolData TypeSTRUCTInitial Value Comment0.02.0NumberStack_2INTUDT 200END_STRUCT第5章 S7系列程序結構與程序設計 用符號地址或物理地址兩種方式可以訪問UDT中的變量。例如,在DB10中定義了圖5.9格式的數據,DB10的符號名為Process,訪問Amount變量可分別寫為DB10.DBW 2或Process.Stack_2.Amount。 建立用戶數據類型的目的是為了將UDT作為一種數據類型使用,以方便定義多個結構相同的構造變量。圖5.9建立的Stack_2與圖

52、5.7建立的Stack_1相比,不僅大小結構完全相同,而且對Stack_1和Stack_2中元素的訪問方法也完全相同。在建立DB10時,由于使用了UDT而使得數據塊建立過程方便快捷。在多處使用同樣的UDT時,這一優點將更加突出。第5章 S7系列程序結構與程序設計5.3 S7系列系列PLC程序設計程序設計5.3.1 程序結構設計程序結構設計 STEP 7不僅從不同層次充分支持合理的程序結構設計,而且也簡化了結構設計的復雜程度。 一個復雜的自動化過程可以被分解并定義為一個或多個項目(PROJECT);而對于每個項目,又可以進一步分解并定義給一個或多個CPU,每個CPU都有一個控制程序(CPU_PR

53、OGRAM)。圖5.10顯示了一個樣本過程,它分成4個不同的項目:項目1和項目2只有一個CPU,而項目3和項目4有多個CPU。這樣,一個很復雜的控制任務的結構設計,就被簡化為各個CPU程序的結構設計。項目間或項目中的各CPU程序之間,能以某種方式聯網,實現信息共享。如在S7協議支持下,用MPI網以全局數據通信的方式可方便地建立起聯系,實現一個項目中各CPU共享信息。 第5章 S7系列程序結構與程序設計圖5.10 樣本過程的項目劃分存儲攪拌準備包裝一個工廠的過程任務項目1CPU1:存儲項目2CPU2:攪拌項目3CPU3:傳輸CPU4:加工項目4CPU5:打包CPU6:傳輸CPU7:裝箱第5章 S

54、7系列程序結構與程序設計 典型的情況是一個過程控制任務只有一個項目,該項目下也僅有一個CPU程序,每一個CPU程序又可依據時間特性或事件觸發特性的差異分類編入不同的組織塊(OB)中。例如,需要以固定時間間隔循環執行的那部分程序編入組織塊OB35中,為PLC正常運行而需進行初始化的程序編入組織塊OBl00中。又如,由硬件觸發的中斷服務程序編入組織塊OB40中,對程序執行中產生的同步錯誤的響應處理程序編入組織塊OB121或OB122中。第5章 S7系列程序結構與程序設計 對于各組織塊中的程序,可以根據其復雜程度分別選用線性、分部或結構化等三種形式中的一種程序結構。由于組織塊OB1(主程序循環)中的

55、程序是應用程序中主要的也是最復雜的部分,因此,對OB1中的程序設計合理的結構是十分重要的。下面分別說明三種典型結構的特點及選用原則。第5章 S7系列程序結構與程序設計 1. 線性程序結構線性程序結構 用“線性”結構設計的程序連續放置在一個塊內(通常為OB1),塊中的程序按順序執行。這一結構是最初的PLC模擬的繼電器梯形邏輯的模型。線性程序具有簡單、直接的特點。編程時,不必考慮功能塊如何編程及如何調用,也不必考慮如何定義局部變量及如何使用背景數據塊。由于所有的指令在一個塊內,因此它適用于只需一個人編寫的、相對簡單的控制程序。第5章 S7系列程序結構與程序設計 2. 分部程序結構分部程序結構 這是

56、一種部分模塊化的程序結構,也稱為部分結構化。程序被分成各部分放在若干功能塊中,每個功能塊含有用于一種設備的一系列控制邏輯。放置在組織塊OB1中的指令決定控制程序的各功能塊的執行。比如說,一個分部程序可能包含以下內容:(1) 用于控制設備每一部分的FC;(2) 用于控制設備每一工作狀態的FC;(3) 用于控制操作員接口的FC;(4) 用于進行PLC自診斷的FC。第5章 S7系列程序結構與程序設計 在分部程序中,既無數據交換也沒有重復利用的程序代碼。各功能塊收集并使用自己的數據,功能塊不傳遞也不接收參數,功能塊的編程與調用比較簡單。由于每個功能區分為不同的塊,因而使得多個程序員能夠同時編程而不發生

57、沖突。分部程序結構的編程效率比線性程序有所提高,程序測試也較方便,對程序員的要求也不太高。對不太復雜的控制程序可考慮采用這種程序結構。第5章 S7系列程序結構與程序設計 3. 結構化程序結構結構化程序結構 完全結構化(模塊化)的程序結構是PLC程序設計和編程最有效的結構形式,它可用于復雜程度高、程序規模大的控制應用程序設計。結構化程序可以重復使用某些功能塊,只需要在使用功能塊時為其提供不同的環境變量(實參),就能完成對不同設備的控制。例如,在工業攪拌控制過程中有三臺泵,對它們的控制功能相似,可以編寫一個用于對泵進行控制的功能塊,編程時先定義泵控制所需的變量(形參),并使用這些變量構成一個稱為“

58、泵控制”的一般功能塊。在調用該功能塊時,通過改變傳入功能塊中的參數(實參),可以分別對成分A、成分B和攪拌桶中的三臺泵進行控制。第5章 S7系列程序結構與程序設計 結構化程序有最高的編程和程序調試效率,應用程序代碼量也最小。結構化程序也支持多個程序員協同編程。這種程序結構建立在對PLC系統功能的合理分析、分解及綜合的基礎之上,程序具體結構形式的確定與程序設計人員的水平及經驗關系很大,對程序員的要求也較前兩種高。第5章 S7系列程序結構與程序設計5.3.2 程序設計實例程序設計實例圖5.11 工業攪拌過程示意圖MMM入口閥進料泵進料閥流量傳感器區域:配料A區域:混合罐攪拌電機MM入口閥進料泵進料

59、閥區域:配料BM排料閥區域:排料罐液位測量開關第5章 S7系列程序結構與程序設計 1. 將過程分割為任務和區域將過程分割為任務和區域 一個自動化過程包括許多單個的任務,通過識別一個過程內的相關任務組,然后將這些組再分解為更小的任務,即使最復雜的過程也能夠被定義。下面將這個工業攪拌過程構造為四個功能區域:配料A區域、配料B區域、混合罐區域和排料區域。第5章 S7系列程序結構與程序設計 2. 說明各個功能區域說明各個功能區域 1) 配料A和配料B區域 (1) 每種配料的管道都配備有一個入口和一個進料閥以及進料泵。 (2) 進料管還有流量傳感器。 (3) 當罐的液面傳感器指示罐滿時,進料泵的接通必須

60、被鎖定。 (4) 當排料閥打開時,進料泵的啟動必須被鎖定。 (5) 在啟動進料泵后1 s內必須打開入口閥和進料閥。 (6) 在進料泵停止后(來自流量傳感器的信號)閥門必須立即被關閉以防止配料從泵中泄露。 第5章 S7系列程序結構與程序設計 (7) 進料泵的啟動與一個時間監控功能相結合,換句話說,在泵啟動后的7 s之內,流量傳感器會報告溢出。 (8) 當進料泵運行時,如果流量傳感器沒有流量信號,進料泵必須盡可能快地斷開。 (9) 必須對進料泵啟動的次數進行計數(維護間隔)。第5章 S7系列程序結構與程序設計 2) 混合罐區域 (1) 當罐的液面傳感器指示“液面低于最低限”或排料閥打開時,攪拌電機

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論