西門子S7-1200PLC模塊江蘇代理商

西門子S7-300/400梯形圖中的邏輯塊調(diào)用指令
梯形圖中的CALL線圈可以調(diào)用功能FC或系統(tǒng)功能SFC,調(diào)用時不能傳遞參數(shù)。調(diào)用可以是無條件的,CALL線圈直接與左側垂直線相連,相當于語句表中的UC指令;也可以是有條件的,條件由控制CALL線圈的觸點電路提供,相當于語句表的CC指令。CALL指令調(diào)用的塊應是已經(jīng)存在的塊。
可以將程序編輯器左邊的指令列表窗口的FB、FC文件夾或庫文件夾中的邏輯塊(不包括OB)直接拖放到右邊的程序區(qū),生成的邏輯塊調(diào)用指令用方框表示(見圖4-17中的FC2)。需要傳遞參數(shù)的邏輯塊用這種方法來調(diào)用
邏輯塊包括組織塊、功能、功能塊、系統(tǒng)功能和系統(tǒng)功能塊。邏輯塊結束指令包括塊無條件結束指令BEU、塊結束指令BE和塊條件結束指令BEC(見表4-2)。
執(zhí)行塊結束指令時,將中止當前塊的程序掃描,返回調(diào)用它的塊。BEU和BE是無條件執(zhí)行的,而BEC只是在RLO為1時執(zhí)行。
假設邏輯塊A調(diào)用邏輯塊B,執(zhí)行邏輯塊B的無條件結束指令BEU或在條件滿足時執(zhí)行BEC指令,將會中止邏輯塊B(當前塊)的程序掃描,返回邏輯塊A調(diào)用邏輯塊B的調(diào)用指令( CALL)下面一條指令,繼續(xù)程序掃描。邏輯塊B結束后,它的局部數(shù)據(jù)區(qū)被釋放出來,調(diào)用它的塊A的局部數(shù)據(jù)區(qū)變?yōu)楫斍熬植繑?shù)據(jù)區(qū)。塊A調(diào)用塊B時打開的數(shù)據(jù)塊被重新打開。塊A的主控繼電器( MCR)被恢復,RLO從塊B被帶到塊A。
BEU指令的執(zhí)行不需要任何條件,但是如果BEU指令被跳轉指令跳過,當前程序掃描不會結束,在塊內(nèi)的跳轉目標處,程序將被繼續(xù)啟動。使用S7系列PLC的硬件時,塊結束指令BE與BEU的功能相同。下面是使用BEC的例子:
A I 0.1 //刷新RLO
BEC //如果RLO為1,結束塊
L IW 4 //如果RLO為0,不執(zhí)行BEC,繼續(xù)程序掃描
表4-2 塊結束與程序控制指令
語句表指令 | 梯形圖指令 | 描 述 |
BE | - | 塊結束 |
BEU | - | 塊無條件結束 |
BEC | - | 塊條件結束 |
CALL FCn | - | 調(diào)用功能 |
CALL SFCn | - | 調(diào)用系統(tǒng)功能 |
CALL FBn1,DBn2 | - | 調(diào)用功能塊 |
CALL SFBn1,DBn2 | - | 調(diào)用系統(tǒng)功能塊 |
CC FCn或 CC SFCn | CALL | RLO =1時條件調(diào)用 |
UC FCn或 UC SFCn | CALL | 無條件調(diào)用 |
RET | RET | 條件返回 |
條件返回指令RET (Return)以線圈的形式出現(xiàn),用于有條件地離開邏輯塊,條件由控制它的觸點電路提供,RET線圈不能直接連接在左側垂直“電源線”上。如果是無條件地返回調(diào)用它的塊,在塊結束時并不需要使用RET指令。
塊調(diào)用指令( CALL)用來調(diào)用功能塊(FB)、功能(FC)、系統(tǒng)功能塊(SFB)或系統(tǒng)功能( SFC),或調(diào)用西門子提供的其他標準塊。
在CALL指令中,FC、SFC、FB和SFB是作為地址輸入的,邏輯塊的地址可以是地址或符號地址。CALL指令與RLO和其他任何條件無關。在調(diào)用FB和SFB時,應提供與它們配套的背景數(shù)據(jù)塊。調(diào)用FC和SFC時,不需要背景數(shù)據(jù)塊。處理完被調(diào)用的塊后,調(diào)用它的程序繼續(xù)其邏輯處理。
無條件調(diào)用指令UC和條件調(diào)用指令CC用于調(diào)用沒有輸入/輸出參數(shù)的FC和SFC。其使用方法與CALL指令相同,只是在調(diào)用時不能傳遞參數(shù)。下面是使用CC指令和UC指令的例子:
A I 0.1 //刷新RLO
CC FC 6 //如果RLO為1,調(diào)用沒有參數(shù)的FC6
L IW 4 //從FC6返回后執(zhí)行,I0.1為0時不調(diào)用FC6,直接執(zhí)行本指令
UC FC 2 //無條件調(diào)用沒有參數(shù)的FC2
如果邏輯塊執(zhí)行完后不需要保存它內(nèi)部的數(shù)據(jù),可以用功能FC來編程。與功能塊FB相比較,FC不需要配套的背景數(shù)據(jù)塊。
1.生成功能
用鼠標右鍵點擊SIMATIC管理器左邊窗口中的“塊”,執(zhí)行出現(xiàn)的快捷菜單中的“插入新對象”→“功能”,生成一個新的功能。在出現(xiàn)的功能屬性對話框中,采用系統(tǒng)自動生成的功能的名稱FC1,設置梯形圖(LAD)為功能默認的編程語言。
2.功能的局部變量
雙擊SIMATIC管理器中FC1的圖標,打開程序編輯器(見圖4-16)。
與功能塊的變量聲明表(見圖4-13)相比,功能沒有靜態(tài)變量(STAT),退出FC后不能保存它的臨時局部變量。功能多了一個返回值RET_VAL,它實際上是一個輸出參數(shù)。返回值的設置與IEC 6113-3標準有關,該標準的功能沒有輸出參數(shù),只有一個返回值。
功能FC1用來控制發(fā)動機的風扇,要求在發(fā)動機運行信號Engine_On變?yōu)?/span>1時起動風扇,發(fā)動機停車后,用輸出的BOOL變量Fan_On控制的風扇繼續(xù)運行30s后關斷。
在FC1中,用延時斷開定時器S_OFFDT(見圖4-16)來定時。在功能的變量聲明表中定義的輸入?yún)?shù)Timer_Function是延時斷開定時器的編號,數(shù)據(jù)類型為Timer,在調(diào)用FC1時用它來為不同的發(fā)動機不同的定時器。
3.功能與功能塊的區(qū)別
FB和FC均為用戶編寫的子程序,局部數(shù)據(jù)均有IN、OUT、IN_OUT和TEMP,臨時變量TEMP儲存在局部數(shù)據(jù)堆棧中。
1) FC的返回值RET_VAL實際上是輸出參數(shù),因此有無靜態(tài)變量(STAT)是二者的局部變量的本質(zhì)區(qū)別,功能塊的靜態(tài)變量用背景數(shù)據(jù)塊來保存。如果功能有執(zhí)行完后需要保存的數(shù)據(jù),只能存放在全局變量(I/Q、PI/PQ、M、T、C和共享數(shù)據(jù)塊)中,但是這樣會影響功能的可移植性。如果功能或功能塊的內(nèi)部不使用全局變量,只使用局部變量,不需要做任何修改,就可以將塊移植到其他項目。如果塊的內(nèi)部使用了全局變量,在移植時需要重新統(tǒng)一分配它們內(nèi)部使用的全局變量的地址,以保證不會出現(xiàn)地址沖突。當程序很復雜,子程序和中斷程序很多時,這種重新分配全局變量地址的工作量非常大,也很容易出錯。
如果邏輯塊有執(zhí)行完后需要保存的數(shù)據(jù),顯然應使用功能塊,而不是功能,
2)功能塊的輸出參數(shù)不僅與來自外部的輸入?yún)?shù)有關,還與用靜態(tài)變量保存的內(nèi)部狀態(tài)數(shù)據(jù)有關。功能因為沒有靜態(tài)變量,相同的輸入?yún)?shù)產(chǎn)生的執(zhí)行結果是相同的。
3)功能塊有背景數(shù)據(jù)塊,功能沒有背景數(shù)據(jù)塊。只能在功能內(nèi)部訪問功能的局部變量,其他邏輯塊和人機界面可以訪問背景數(shù)據(jù)塊中的變量。
4)不能給功能的局部變量設置初始值,可以給功能塊的局部變量(不包括TEMP)設置初始值。在調(diào)用功能塊時如果沒有設置某些輸入?yún)?shù)的實參,將使用背景數(shù)據(jù)塊中的初始值,或上一次執(zhí)行后的值。調(diào)用功能時應給所有的形參實參。
4.組織塊與其他邏輯塊的區(qū)別
發(fā)生事件或故障時,由操作系統(tǒng)調(diào)用對應的組織塊,其他邏輯塊是用戶程序調(diào)用的。
組織塊有自動生成的20B臨時局部數(shù)據(jù),包含了與觸發(fā)組織塊的事件有關的信息。它們是操作系統(tǒng)提供的。組織塊中的程序是用戶編寫的,用戶可以自己定義和使用組織塊20B之后的臨時局部數(shù)據(jù)。
中文版STEP 7有時將背景數(shù)據(jù)塊翻譯為實例數(shù)據(jù)塊。背景數(shù)據(jù)塊是專門給某個功能塊( FB)或系統(tǒng)功能塊(SFB)使用的數(shù)據(jù)塊,它是FB或SFB運行時的工作存儲區(qū)。
背景數(shù)據(jù)塊用來保存FB和SFB的輸人參數(shù)、輸出參數(shù)、IN_OUT參數(shù)和靜態(tài)數(shù)據(jù),背景數(shù)據(jù)塊中的數(shù)據(jù)是自動生成的。它們是功能塊的變量聲明表中的變量(不包括臨時變量),臨時變量( TEMP)存儲在局部數(shù)據(jù)堆棧中。每次調(diào)用功能塊時應不同的背景數(shù)據(jù)塊。背景數(shù)據(jù)塊相當于每次調(diào)用功能塊時對應的被控對象的私人數(shù)據(jù)倉庫,它保存的數(shù)據(jù)不受別的邏輯塊的影響。
功能塊的數(shù)據(jù)保存在它的背景數(shù)據(jù)塊中,功能塊執(zhí)行完后也不會丟失,以供下次執(zhí)行時使用。其他邏輯塊可以訪問背景數(shù)據(jù)塊中的變量。不能直接刪除和修改背景數(shù)據(jù)塊中的變量,只能在它對應的功能塊的變量申明表中刪除和修改這些變量。
使用不同的背景數(shù)據(jù)塊調(diào)用功能塊,可以控制多個同類的對象。生成功能塊后,可以首先生成它的背景數(shù)據(jù)塊,然后在調(diào)用該功能塊時使用它。選中SIMATIC管理器左邊窗口中的“塊”圖標,用右鍵點擊右邊的窗口,執(zhí)行出現(xiàn)的快捷菜單中的“插入新對象”→“數(shù)據(jù)塊”,生成一個新的數(shù)據(jù)塊。在出現(xiàn)的數(shù)據(jù)塊屬性對話框中(見圖4-14),可采用系統(tǒng)自動生成的名稱,選擇數(shù)據(jù)塊的類型為“背景DB”,如果有多個功能塊,還需要設置它是哪一個功能塊的背景數(shù)據(jù)塊。
圖4-14 數(shù)據(jù)塊屬性對話框
圖4-15是FB1的背景數(shù)據(jù)塊DB1中的數(shù)據(jù),功能塊的變量聲明表決定了它的背景數(shù)據(jù)塊的結構和變量。
生成功能塊的輸入?yún)?shù)、輸出參數(shù)和靜態(tài)變量時,它們被自動一個初始值,可以修改這些初始值。它們被傳送給FB的背景數(shù)據(jù)塊,作為同一個變量的初始值。圖4-15中BOOL變量(數(shù)字量)的初始值FALSE為二進制數(shù)0。靜態(tài)變量Preset_Speed(預置轉速)的初值為1500,是在FB1的變量聲明表中設置的。
調(diào)用FB時沒有實參的形參使用背景數(shù)據(jù)塊中的初始值。
圖4-15 背景數(shù)據(jù)塊
西門子S7-1200PLC模塊江蘇代理商