一、運(yùn)動控制結(jié)構(gòu)化批處理編程的需求 目前大家用西門子博途控制器+V90PN做項目越來越多,如果走工藝對象的話就必須采用PLC-OPEN運(yùn)控指令編程,程序里軸數(shù)量較多的話會每根軸重復(fù)調(diào)用MC_Power、MC_Absolute等指令,同時產(chǎn)生大量的背景數(shù)據(jù)塊。我們大家都熟悉西門子的結(jié)構(gòu)化批量編程套路:建一個標(biāo)準(zhǔn)FB,然后通過SCL語言的FOR循環(huán)Array of FB進(jìn)行多重背景的數(shù)組調(diào)用,這樣100個對象FB塊的調(diào)用一個FOR 循環(huán)語句就完事了。那么這個套路能否用在運(yùn)動控制編程中的,實際上焦點就是TO_PositioningAxis(包括TO_CommandTable)這個數(shù)據(jù)類型作為參數(shù)時支不支持多重實例的Array,實際是不支持的。如圖1所示。但不要緊,可以用DB_ANY這個數(shù)據(jù)類型來轉(zhuǎn)換,從S7-1200 V4.2開始,DB_ANY可以在運(yùn)動控制中使用,它可以使用在形參為TO_PositioningAxis和TO_CommandTable類型的實參處,包括以下幾種: (1) 當(dāng)FC/FB的輸入形參數(shù)據(jù)類型為TO_PositioningAxis時,外部實參可以使用DB_ANY數(shù)據(jù)類型的變量。(2) 在MC_MoveAbsolute/MC_MoveRelative指令的參數(shù)Axis處,實參可使用DB_ANY數(shù)據(jù)類型的變量。(3) 當(dāng)FC/FB的輸入形參數(shù)據(jù)類型為TO_CommandTable時,外部實參可使用DB_ANY數(shù)據(jù)類型的變量。(4) 在MC_CommandTable指令的參數(shù)CommandTable處,實參可直接使用DB_ANY數(shù)據(jù)類型的變量。 圖2顯示了支持多重實例的DB_ANY。 圖1:定位軸數(shù)據(jù)類型不支持多重實例 圖2:支持多重實例的DB_ANY 二、運(yùn)動控制程序使用DB_ANY的調(diào)用結(jié)構(gòu) 大家注意看上面第(2)條,只有絕對運(yùn)動和相對運(yùn)動指令的參數(shù)Axis處,實參才可以直接使用DB_ANY數(shù)據(jù)類型。其他的指令比如使能(MC_Power)、點動(MC_MoveJog)等的參數(shù)Axis處如果實參直接填DB_ANY,CPU會報錯,如圖3和4所示,原因是MC_Power/MC_Reset/MC_Home指令的參數(shù)Axis,類型為TO_Axis。而MC_Halt/MC_MoveVelocity/MC_MoveJog/MC_ChangeDynaic指令的參數(shù)Axis,類型為TO_SpeedAxis。 圖3:如果MC_POWER指令使用DB_ANY實參 圖4:下載到CPU后報錯 解決方法:這時我們增加一個FC進(jìn)行轉(zhuǎn)換,MC_Power等指令在這個FC里進(jìn)行調(diào)用(使用參數(shù)實例),這個轉(zhuǎn)換FC再使用DB_ANY作為接口參數(shù)被上級FB調(diào)用。這樣繞開了MC_Power等指令無法直接使用DB_ANY類型的矛盾,程序調(diào)用結(jié)構(gòu)如圖5所示。為了方便,我們實際在程序中把幾個轉(zhuǎn)換FC合并在一起用一個FC實現(xiàn)。 圖5:程序的調(diào)用結(jié)構(gòu) 三、具體實例化實現(xiàn)過程 下面以筆者手上的兩臺伺服松下A6和西門子V90PN來進(jìn)行具體實踐,松下A6采用PTO脈沖控制,V90PN采用PROFINET通信控制。 (1)對兩臺伺服建立TO_PoistioningAxis軸工藝對象進(jìn)行控制,如圖6所示。 圖6:建立2個伺服定位軸工藝對象 (2)建立數(shù)據(jù)塊,包括DB_ANY數(shù)組和實參用的數(shù)據(jù)變量,如圖7所示。實參數(shù)組長度是8,可以處理8根軸,但實際只用了2根軸,所以DB_ANY數(shù)組長度是2。為了方便,將各運(yùn)動指令的參數(shù)都設(shè)置成PLC數(shù)據(jù)類型,這樣DB塊里引用會很快捷。 圖7:運(yùn)動控制參數(shù)數(shù)據(jù)塊 (3)在啟動OB里(OB100)將實際工藝對象DB賦值給DB_ANY,如圖8所示。 圖8:賦值DB_ANY (4)建立轉(zhuǎn)換FC程序,在里面調(diào)用MC_Power等指令。 我們把實際應(yīng)用中常用的MC_Power、MC_Reset、MC_ReadParam(讀實際距離、速度)等指令都放進(jìn)去,注意在該FC中調(diào)用上述運(yùn)動控制指令FB時選擇“參數(shù)實例”,如圖9所示。 圖9:對MC_Power等FB的調(diào)用 同時在FC接口處定義相關(guān)輸入輸出變量,用于實際參數(shù)控制,如圖10所示,轉(zhuǎn)換FC程序如圖11所示。 圖10:轉(zhuǎn)換FC參數(shù)接口 圖11:轉(zhuǎn)換FC程序 (5)在FB中對轉(zhuǎn)換FC和絕對/相對運(yùn)動指令進(jìn)行數(shù)組調(diào)用。 注意在FB的靜態(tài)變量中建立多重背景,如圖12所示,數(shù)組調(diào)用程序如圖13所示。 圖12:FB靜態(tài)變量中多重背景 圖13:FB程序調(diào)用 (6)運(yùn)行測試 將PLC與松下A6伺服和V90PN連接后進(jìn)行程序測試,圖14就是兩臺伺服同時點動的測試運(yùn)行圖。 圖14:運(yùn)行測試 至此,DB_ANY在運(yùn)動控制結(jié)構(gòu)化編程中的應(yīng)用就結(jié)束了,當(dāng)項目中軸數(shù)量較多時這種結(jié)構(gòu)化編程還是有一定優(yōu)勢的,特別是使用了S7-1500PLC的項目。但MC_Power等指令無法直接使用DB_ANY實參還是帶來了許多不方便(轉(zhuǎn)換有點繁瑣),期待西門子后續(xù)能有所改進(jìn)。 文章思路實際來自全球技術(shù)資源條目號109750880的文檔,我只是手上有設(shè)備進(jìn)行了實際測試應(yīng)用而已,在西門子現(xiàn)在這種什么都安排好的產(chǎn)品應(yīng)用模式里,只要照搬就行了。 來源:網(wǎng)絡(luò),版權(quán)歸原作者,侵刪 |
|