劉解語
(洛陽市第一高級中學(xué),河南 洛陽 471000)
不同的數(shù)控系統(tǒng)對NC程序格式有不同的要求,UG軟件提供了一個性能優(yōu)異的后置處理工具PostBuilder,利用它可以把UG軟件制作的刀軌源文件轉(zhuǎn)換成特定數(shù)控系統(tǒng)能接受的NC程序格式,這個過程叫“后置處理”[1]。UG軟件使用TCL語言以方便后置處理模塊的編輯與設(shè)計(jì)。
TCL(ToolCommand Language機(jī)器命令語言)是一種很通用的交互式解釋性計(jì)算機(jī)語言,與C語言有相似的地方。TCL語言首先是一種簡單的腳本語言,其提供了一套標(biāo)準(zhǔn)語法用于發(fā)布命令給一些交互程序;其次,TCL是一個庫,可以被嵌入應(yīng)用程序。用戶一旦掌握了TCL語言就可以很容易地在UG的后置處理工具Post Builder中插入用戶自定義的TCL子程序,以滿足數(shù)控系統(tǒng)的特殊要求[2]。
替換命令(substitution)是TCL中重要的概念,TCL把替換分為三種:命令替換、變量替換和反斜杠符號替換。在一個命令的參數(shù)中使用另一個命令的結(jié)果,這被稱之為命令替換。例如:
當(dāng)方括號出現(xiàn)在一個命令中的時(shí)候,TCL把方括號內(nèi)的所有語句看作是一組TCL命令并對這組命令進(jìn)行解釋,用結(jié)果替代中括號內(nèi)的文字,這稱為命令替換。
當(dāng)變量前面出現(xiàn)在一個“$”符號的時(shí)候,TCL會把該變量用它的值來替換,這被稱之為變量替換。例如上面的例子中,TCL將用變量a的值15來替換變量a,結(jié)果第二個set命令的結(jié)果是b被賦值為60。
TCL中還有一個替換是反斜杠符號替換,例如“ ”被替換為 tab,“\”被替換為“”。
Siemens數(shù)控系統(tǒng)在程序頭對程序名稱有固定的格式要求,否則不能識別。為了在程序頭顯示如下的固定格式:
這就需要用到TCL語言的替換命令。為此需要在UG軟件Post Builder的startof program部分創(chuàng)建一個進(jìn)程proc,如圖1所示。
此proc中TCL語言內(nèi)容如下:
上面的語句中使用了MOM_output_literal""命令,其可以把""內(nèi)的文本及變量輸出到NC程序中。
圖1 Siemens系統(tǒng)程序頭PostBuilder設(shè)置
程序輸出效果如圖2所示:
圖2 Siemens系統(tǒng)程序頭輸出效果
TCL流程控制主要包括條件轉(zhuǎn)移和循環(huán)控制,用于控制程序執(zhí)行的流向。
其中條件轉(zhuǎn)移指令可以控制程序執(zhí)行哪些指令、跳過哪些指令,其用于判斷條件真假,如果條件為真,執(zhí)行一個流程的指向;如果為假,則執(zhí)行另一個流程的指令。而循環(huán)控制可以控制程序重復(fù)執(zhí)行某些命令。TCL語言流程控制結(jié)構(gòu)命令的綜合運(yùn)用可以處理遇到的各種復(fù)雜情況。
TCL語言流程控制結(jié)構(gòu)命令主要指令見表1:
表1 TCL語言流程控制結(jié)構(gòu)命令
例如條件語句if:
if語句使得變量x的值為負(fù)時(shí),將它設(shè)置為0。
再例如條件匹配語句sw itch[3],其可以依據(jù)一個給定的值對多個腳本中的一個腳本進(jìn)行求值,其語法結(jié)構(gòu)為:
sw itch命令依次針對每個pattern(模式)參數(shù)匹配它的string參數(shù)。如果它發(fā)現(xiàn)一個pattern匹配string,則立即通過把跟隨在(這個模式)后面的body參數(shù)遞歸傳遞給TCL解釋器來求值,并返回這次求值的結(jié)果。如果最后的pattern參數(shù)是default,則它匹配所有的東西。如果沒有pattern參數(shù)匹配string,并且沒有給出缺省,則sw itch命令返回一個空串。
例1:TCL語言條件轉(zhuǎn)移命令在Siemens數(shù)控系統(tǒng)高速加工指令中的應(yīng)用
Siemens 840D數(shù)控系統(tǒng)中有個高速加工指令[4],CYCLE832(a,b,c),根據(jù)常用加工工藝要求,設(shè)計(jì)如下 CYCLE832指令:
在零件加工余量大于等于1時(shí),輸出CYCLE832(0.1,2,1);
在零件加工余量大于0小于1時(shí),輸出CYCLE832(0.05,2,1);
在零件加工余量等于0時(shí),輸出CYCLE832(0.01,2,1)。
比如在零件加工余量為2時(shí),數(shù)控程序輸出為CYCLE832(0.1,2,1)。
為此需要在UG軟件Post Builder的Operation Start Sequence的initialmove里創(chuàng)建一個進(jìn)程proc,如圖3所示。
圖3 Siemens系統(tǒng)高速加工指令高速加工指令PostBuilder設(shè)置
內(nèi)容如下:
例如,當(dāng)加工如圖4a所示的零件時(shí),粗加工中設(shè)置如圖4b所示零件基準(zhǔn)面的加工余量為1,則此刀軌使用Siemens數(shù)控系統(tǒng)后置處理后,生成的NC代碼如圖4c所示。因?yàn)榧庸び嗔康脑O(shè)置,會在NC代碼特定位置出現(xiàn)對應(yīng)的不同的CYCLE832高速加工指令。
圖4 TCL語言條件轉(zhuǎn)移命令在Siemens數(shù)控系統(tǒng)高速加工指令中的應(yīng)用
例2:TCL語言條件轉(zhuǎn)移命令在Siemens數(shù)控系統(tǒng)換刀操作中的應(yīng)用
每條刀軌加工結(jié)束之后需要判斷是否需要換刀,如果需要換刀,則輸出關(guān)閉主軸M 5命令,關(guān)閉冷卻液M 9命令,為此,使用TCL語言寫成用戶自定義命令,在UG/Post Builder軟件的Operation End Sequence中的End of path中創(chuàng)建一個進(jìn)程proc,如圖5所示。
圖5 Siemens系統(tǒng)程序尾PostBuilder設(shè)置
其內(nèi)容如下:
其中變量mom_next_oper_has_tool_change的取值可以為YES或者NO,string為TCL語言的字符串命令,在此條件轉(zhuǎn)移指令中,如果變量mom_next_oper_has_tool_change的值為YES,則意味著下一操作有換刀動作為真,需要輸出M 5及M 9,如果不需要換刀,則不輸出任何語句。
例1:TCL語言條件匹配命令在Siemens數(shù)控系統(tǒng)換刀類型指令中的應(yīng)用
數(shù)控機(jī)床換刀有兩種:手動(MANUAL)與自動(AUTO),根據(jù)換刀類型的不同,數(shù)控系統(tǒng)分別執(zhí)行相應(yīng)的不同的指令,為實(shí)現(xiàn)這個功能,可以使用條件匹配指令,其內(nèi)容如下:
首先對變量mom_tool_change_type進(jìn)行聲明,它定義換刀類型,有兩個取值,MANUAL與AUTO;Sw itch命令對mom_tool_change_type的取值進(jìn)行匹配,如果取值為MANUAL,則執(zhí)行PB_manual_tool_change子程序,如果取值為AUTO,則執(zhí)行PB_auto_tool_change子程序。
例2:TCL語言條件匹配命令在Siemens數(shù)控系統(tǒng)輸出程序單位中的應(yīng)用
UG軟件模型建模單位與后置處理輸出程序單位常常存在不一致的現(xiàn)象,比如有些國家使用英制單位IN建立模型,而我們使用公制單位MM做后置處理,這樣就會出現(xiàn)錯誤,為消除這種錯誤,可以使用如下語句:
解釋如下:首先對變量mom_output_unit、mom_part_unit、mom_siemens_tol進(jìn)行聲明,變量mom_output_unit意為后置處理輸出程序的單位,變量mom_part_unit為模型建模單位,這兩個變量的取值都只有2個:IN(英制單位)或者M(jìn)M(公制單位),但mom_output_unit與mom_part_unit可以不同;mom_siemens_tol為中間變量,是UG軟件建模數(shù)值,無單位。
使用TCL語言條件轉(zhuǎn)移指令if,對mom_output_unit與mom_part_unit的值進(jìn)行判斷,當(dāng)mom_output_unit與mom_part_unit取值不同時(shí),用TCL條件匹配指令sw itch對mom_output_unit的值進(jìn)行匹配:如果后置處理需要輸出IN英制單位(這時(shí)意味著模型建模單位為MM公制單位),則把中間變量mom_siemens_tol建模尺寸數(shù)值除以25.4;如果后置處理需要輸出MM公制單位(這時(shí)意味著模型建模單位為IN英制單位),則把中間變量mom_siemens_tol建模尺寸數(shù)值乘以25.4;最后使用TCL語言替換命令把mom_siemens_tol的6位小數(shù)格式賦值給自己。
根據(jù)TCL語言條件轉(zhuǎn)移指令if,當(dāng)mom_output_unit與mom_part_unit取值相同時(shí),不做任何處理。
TCL語言目前已應(yīng)用于UG軟件的Post Builder、Process Assistants(CAM過程輔助)等多個功能模塊。Post Builder中的Custom Command(用戶自定義命令)可以讓用戶插入自己編寫的TCL子程序,以滿足特殊需要的輸出格式,如需對UG軟件進(jìn)行高級定制或二次開發(fā),則必須熟練掌握TCL語言。