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

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