西門子6RA70勵磁板失控維修
如果程序塊不需要保存它自已的數(shù)據(jù),可以用功能FC來編程。與功能塊FB相比較,FC不需要配套的背景數(shù)據(jù)塊。
1.生成功能
用右鍵點擊SIMATIC管理器左邊窗口中的“塊”,執(zhí)行出現(xiàn)的快捷菜單中的“插入新對象”→“功能”,生成一個新的功能。在出現(xiàn)的功能屬性對話框中,采用系統(tǒng)自動生成的功能的名稱FC 1,選擇梯形圖(LAD)為功能默認的編程語言。
2.功能的局部變量
雙擊SIMATIC管理器中FC 1的圖標(biāo),打開程序編輯器(見圖6-7)。
與功能塊的變量聲明表(見圖6-5)相比,功能沒有靜態(tài)變量(STAT),但是多了一個返回值RET_VAL。調(diào)用功能時,可以一個地址作為實參來存儲返回值。使用返回值之前應(yīng)設(shè)置它的數(shù)據(jù)類型。FC沒有靜態(tài)變量,退出FC后不能保存它的臨時局部變量的值。
功能FC 1用來控制發(fā)動機的風(fēng)扇,要求在發(fā)動機運行信號Engine_On變?yōu)?/span>1時起動風(fēng)扇,發(fā)動機停車后,用輸出的Bool變量Fan_On控制的風(fēng)扇繼續(xù)運行30s后關(guān)斷。
在FC 1中,用延時斷開定時器S_OFFDT(見圖6-7)來定時。在功能的變量聲明表中定義了輸入變量和輸出變量,調(diào)用FC 1時將延時斷開定時器的編號作為功能的輸入變量,數(shù)據(jù)類型為Timer,FC 1用于不同的發(fā)動機時不同的定時器。
3.功能與功能塊的區(qū)別
1) FB和FC均為用戶編寫的子程序,局部數(shù)據(jù)變量均有IN、OUT、IN_OUT和TEMP,臨時變量TEMP儲存在局部數(shù)據(jù)堆棧中。
FC的返回值RET_VAL實際上屬于輸出變量的范疇,因此有無靜態(tài)變量(STAT)是二者的局部變量的本質(zhì)區(qū)別,功能塊的靜態(tài)變量用背景數(shù)據(jù)塊來保存。功能如果有執(zhí)行完后需要保存的數(shù)據(jù),可以存放在全局變量(例如共享數(shù)據(jù)塊)中,但是這樣會影響功能的可移植性。如果功能或功能塊的內(nèi)部不使用全局變量,只使用局部變量,不需要作任何修改,就可以將塊移植到其他項目。如果使用了全局變量,在移植時需要考慮各個塊使用的全局變量是否會產(chǎn)生沖突。
2)只有功能塊有背景數(shù)據(jù)塊,調(diào)用功能塊時需要它的背景數(shù)據(jù)塊。只能在功能內(nèi)部訪問功能的局部變量,可以在功能塊外部的用戶程序中,或通過HMI(人機界面)訪問背景數(shù)據(jù)塊中的變量。
3)不能給功能的局部變量設(shè)置初始值,可以給功能塊的局部變量(不包括TEMP)設(shè)置初始值。在調(diào)用功能塊時如果采用輸入變量的初始值,可以省略這些輸入變量的實參。
4.組織塊與其他邏輯塊的區(qū)別
組織塊是對應(yīng)的事件發(fā)生時操作系統(tǒng)調(diào)用的,其他邏輯塊是用戶程序在邏輯塊中調(diào)用的。
組織塊中的程序是用戶編寫的,只有臨時局部變量,沒有背景數(shù)據(jù)塊、輸入、輸出變量和靜態(tài)變量。組織塊的局部數(shù)據(jù)區(qū)的20 B的啟動信息是由操作系統(tǒng)提供的。

1.生成功能塊
選中SIMATIC管理器左邊窗口中的“塊”圖標(biāo),用右鍵點擊右邊窗口,執(zhí)行出現(xiàn)的快捷菜單中的“插入新對象”→“功能塊”,生成一個新的功能塊。
在出現(xiàn)的功能塊屬性對話框中,采用系統(tǒng)自動生成的功能的名稱FB 1,選擇梯形圖( LAD)為默認的編程語言。點擊“多實例能力”前面的多選框,使小框中的“√”消失(沒有多重背景功能)。點擊“確定”按鈕后返回SIMATIC管理器,可以看到右邊窗口中新生成的功能塊FB 1。
2.局部變量
雙擊SIMATIC管理器中FB 1的圖標(biāo),打開程序編輯器,圖6-5的上面是FB 1的變量聲明表,下面是梯形圖程序,左邊是指令列表和庫。在變量聲明表中聲明塊的局部變量,局部變量只能在它所在的塊中使用。
用鼠標(biāo)按住圖6-5右邊分隔變量聲明表和程序區(qū)的分隔條,可以上下拉動它,以調(diào)節(jié)變量聲明表的大小。將水平分隔條拉至程序編輯器視窗的頂部,不再顯示變量聲明表,但它仍然存在。將分隔條下拉,將再次顯示變量聲明表。
變量聲明表的左邊窗口給出了該表的總體結(jié)構(gòu),選中某一變量類型,例如“IN”,在表的右,邊顯示的是輸人類局部變量Start等的詳細情況。
由圖6-5可知,功能塊有5種局部變量:
1) IN(輸入變量):由調(diào)用它的塊提供的輸入?yún)?shù)。
2) OUT(輸出變量):返回給調(diào)用它的塊的輸出參數(shù)。
3) IN_OUT(輸入_輸出變量):初值由調(diào)用它的塊提供,塊執(zhí)行后返回給調(diào)用它的塊。
4) TEMP(臨時變量):暫時保存在局部數(shù)據(jù)區(qū)中的變量。只是在執(zhí)行塊時使用臨時變量,執(zhí)行完后,不再保存臨時變量的數(shù)值,它可能被別的數(shù)據(jù)覆蓋。
5) STAT(靜態(tài)變量):從功能塊執(zhí)行完,到下一次重新調(diào)用它,靜態(tài)變量的值保持不變。
雙擊變量聲明表左邊窗口中的“IN”,在右邊的窗口中生成兩個Bool變量和一個Int變量(見圖6-5)。用類似的方法生成其他局部變量,變量聲明表中的局部變量與FB 1的背景數(shù)據(jù)塊(見圖6-6)中的變量相同。
圖6-6 背景數(shù)據(jù)塊
塊中的局部變量名必須以字母開始,只能由英語字母、數(shù)字和下劃線組成,不能使用漢字,但是在符號表中定義的共享數(shù)據(jù)的符號名可以使用其他字符(包括漢字)。

在變量聲明表中賦值時,不需要存儲器地址;根據(jù)各變量的數(shù)據(jù)類型,程序編輯器自動地為所有局部變量存儲器地址。
3.生成梯形圖程序
圖6-5下面是功能塊FB 1的梯形圖程序。用起保停電路來控制發(fā)動機的運行,功能塊的輸入變量Start和Stop分別用來接收起動命令和停止命令。輸出信號Engine_On用來控制發(fā)動機的運行。
FB 1用比較指令來監(jiān)視轉(zhuǎn)速,檢查實際速度Actual_Speed是否大于等于預(yù)置轉(zhuǎn)速Preset_Speed。如果滿足比較條件,Bool型輸出變量#Overspeed(超速)為1。
操作系統(tǒng)自動地在局部變量前面加上“#”號,共享變量名被自動加上雙引號。
4.背景數(shù)據(jù)塊
中文版STEP 7將背景數(shù)據(jù)塊翻譯為實例數(shù)據(jù)塊。背景數(shù)據(jù)塊是專門給某個功能塊( FB)或系統(tǒng)功能塊(SFB)使用的數(shù)據(jù)塊,它是FB或SFB運行時的工作存儲區(qū)。
背景數(shù)據(jù)塊用來保存FB和SFB的實參和靜態(tài)數(shù)據(jù),背景數(shù)據(jù)塊中的數(shù)據(jù)是自動生成的。它們是功能塊的變量聲明表中的數(shù)據(jù)(不包括臨時變量),臨時變量( TEMP)存儲在局部數(shù)據(jù)堆棧中。調(diào)用功能塊時應(yīng)對應(yīng)的背景數(shù)據(jù)塊。功能塊被執(zhí)行完后,它的背景數(shù)據(jù)塊中存儲的數(shù)據(jù)不會丟失。
使用不同的背景數(shù)據(jù)塊調(diào)用功能塊,可以控制多個同類的對象。
生成功能塊后,可以首先生成它的背景數(shù)據(jù)塊,然后在調(diào)用該功能塊時使用它。選中SI-MATIC管理器左邊窗口中的“塊”圖標(biāo),用右鍵點擊右邊的窗口,執(zhí)行出現(xiàn)的快捷菜單中的“插入新對象”→“數(shù)據(jù)塊”,生成一個新的數(shù)據(jù)塊。在出現(xiàn)的數(shù)據(jù)塊屬性對話框中,采用系統(tǒng)自動生成的名稱DB 1,選擇數(shù)據(jù)塊的類型為“實例DB”(即背景數(shù)據(jù)塊),如果有多個功能塊,還需要選擇它是哪一個功能塊的背景數(shù)據(jù)塊。

圖6-6是FB 1的背景數(shù)據(jù)塊中的數(shù)據(jù),與圖6-5中的變量聲明表相比較,可以看出二者之間的對應(yīng)關(guān)系。表中BOOL變量(數(shù)字量)的初始值FALSE為二進制數(shù)0。靜態(tài)變量Preset_Speed(預(yù)置轉(zhuǎn)速)的初值為1500。
功能塊的變量聲明表決定了它的背景數(shù)據(jù)塊的結(jié)構(gòu)和變量。不能直接修改背景數(shù)據(jù)塊,只能通過對應(yīng)的功能塊的變量聲明表來修改它。
塊調(diào)用即子程序調(diào)用,在OB1中可以調(diào)用不包括OB的邏輯塊。
可以將控制任務(wù)分層劃分為工廠級、車間級、生產(chǎn)線、設(shè)備等多級任務(wù),分別建立與各級任務(wù)對應(yīng)的邏輯塊。每一層的控制程序(邏輯塊)作為上一級控制程序的子程序,前者又可以調(diào)用下一級的子程序。這種調(diào)用稱為嵌套調(diào)用,即被調(diào)用的塊又可以調(diào)用別的塊。編程時被調(diào)用的塊應(yīng)該是已經(jīng)存在的。
在塊調(diào)用中,調(diào)用者可以是各種邏輯塊,被調(diào)用的塊是OB之外的邏輯塊。調(diào)用功能塊和系統(tǒng)功能塊時需要為它們一個背景數(shù)據(jù)塊,后者隨這些塊的調(diào)用而打開,在調(diào)用結(jié)束時自動關(guān)閉。
下面以發(fā)動機控制系統(tǒng)的用戶程序為例,介紹生成和調(diào)用功能和功能塊的方法。
用STEP 7的新項目向?qū)?chuàng)建一個名為“發(fā)動機控制”的項目。
圖6-3中的組織塊OB1是主程序,用功能塊FB 1來分別控制汽油機和柴油機,控制參數(shù)在背景數(shù)據(jù)塊DB 1和DB 2中??刂破蜋C時調(diào)用FB 1和名為“汽油機數(shù)據(jù)”的背景數(shù)據(jù)塊DB 1,控制柴油機時調(diào)用FB 1和名為“柴油機數(shù)據(jù)”的背景數(shù)據(jù)塊DB 2。此外還用不同的實參調(diào)用功能FC 1來控制汽油機和柴油機的風(fēng)扇。
圖6-3 程序結(jié)構(gòu)
圖6-4是程序設(shè)計好后SIMATIC管理器中的塊。DB 4和UDT1用于介紹復(fù)雜數(shù)據(jù)類型和用戶定義數(shù)據(jù)類型,與發(fā)動機控制無關(guān)。
圖6-4 SIMATIC管理器
西門子6RA70勵磁板失控維修