劉解語(yǔ)
(洛陽(yáng)市第一高級(jí)中學(xué),河南 洛陽(yáng) 471000)
不同的數(shù)控系統(tǒng)對(duì)NC程序格式有不同的要求,UG軟件提供了一個(gè)性能優(yōu)異的后置處理工具PostBuilder,利用它可以把UG軟件制作的刀軌源文件轉(zhuǎn)換成特定數(shù)控系統(tǒng)能接受的NC程序格式,這個(gè)過(guò)程叫“后置處理”[1]。UG軟件使用TCL語(yǔ)言以方便后置處理模塊的編輯與設(shè)計(jì)。
TCL(ToolCommand Language機(jī)器命令語(yǔ)言)是一種很通用的交互式解釋性計(jì)算機(jī)語(yǔ)言,與C語(yǔ)言有相似的地方。TCL語(yǔ)言首先是一種簡(jiǎn)單的腳本語(yǔ)言,其提供了一套標(biāo)準(zhǔn)語(yǔ)法用于發(fā)布命令給一些交互程序;其次,TCL是一個(gè)庫(kù),可以被嵌入應(yīng)用程序。用戶一旦掌握了TCL語(yǔ)言就可以很容易地在UG的后置處理工具Post Builder中插入用戶自定義的TCL子程序,以滿足數(shù)控系統(tǒng)的特殊要求[2]。
替換命令(substitution)是TCL中重要的概念,TCL把替換分為三種:命令替換、變量替換和反斜杠符號(hào)替換。在一個(gè)命令的參數(shù)中使用另一個(gè)命令的結(jié)果,這被稱之為命令替換。例如:

當(dāng)方括號(hào)出現(xiàn)在一個(gè)命令中的時(shí)候,TCL把方括號(hào)內(nèi)的所有語(yǔ)句看作是一組TCL命令并對(duì)這組命令進(jìn)行解釋,用結(jié)果替代中括號(hào)內(nèi)的文字,這稱為命令替換。
當(dāng)變量前面出現(xiàn)在一個(gè)“$”符號(hào)的時(shí)候,TCL會(huì)把該變量用它的值來(lái)替換,這被稱之為變量替換。例如上面的例子中,TCL將用變量a的值15來(lái)替換變量a,結(jié)果第二個(gè)set命令的結(jié)果是b被賦值為60。
TCL中還有一個(gè)替換是反斜杠符號(hào)替換,例如“ ”被替換為 tab,“\”被替換為“”。
Siemens數(shù)控系統(tǒng)在程序頭對(duì)程序名稱有固定的格式要求,否則不能識(shí)別。為了在程序頭顯示如下的固定格式:

這就需要用到TCL語(yǔ)言的替換命令。為此需要在UG軟件Post Builder的startof program部分創(chuàng)建一個(gè)進(jìn)程proc,如圖1所示。
此proc中TCL語(yǔ)言內(nèi)容如下:


上面的語(yǔ)句中使用了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í)行哪些指令、跳過(guò)哪些指令,其用于判斷條件真假,如果條件為真,執(zhí)行一個(gè)流程的指向;如果為假,則執(zhí)行另一個(gè)流程的指令。而循環(huán)控制可以控制程序重復(fù)執(zhí)行某些命令。TCL語(yǔ)言流程控制結(jié)構(gòu)命令的綜合運(yùn)用可以處理遇到的各種復(fù)雜情況。
TCL語(yǔ)言流程控制結(jié)構(gòu)命令主要指令見(jiàn)表1:

表1 TCL語(yǔ)言流程控制結(jié)構(gòu)命令
例如條件語(yǔ)句if:

if語(yǔ)句使得變量x的值為負(fù)時(shí),將它設(shè)置為0。
再例如條件匹配語(yǔ)句sw itch[3],其可以依據(jù)一個(gè)給定的值對(duì)多個(gè)腳本中的一個(gè)腳本進(jìn)行求值,其語(yǔ)法結(jié)構(gòu)為:

sw itch命令依次針對(duì)每個(gè)pattern(模式)參數(shù)匹配它的string參數(shù)。如果它發(fā)現(xiàn)一個(gè)pattern匹配string,則立即通過(guò)把跟隨在(這個(gè)模式)后面的body參數(shù)遞歸傳遞給TCL解釋器來(lái)求值,并返回這次求值的結(jié)果。如果最后的pattern參數(shù)是default,則它匹配所有的東西。如果沒(méi)有pattern參數(shù)匹配string,并且沒(méi)有給出缺省,則sw itch命令返回一個(gè)空串。
例1:TCL語(yǔ)言條件轉(zhuǎn)移命令在Siemens數(shù)控系統(tǒng)高速加工指令中的應(yīng)用
Siemens 840D數(shù)控系統(tǒng)中有個(gè)高速加工指令[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)建一個(gè)進(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è)置,會(huì)在NC代碼特定位置出現(xiàn)對(duì)應(yīng)的不同的CYCLE832高速加工指令。


圖4 TCL語(yǔ)言條件轉(zhuǎn)移命令在Siemens數(shù)控系統(tǒng)高速加工指令中的應(yīng)用
例2:TCL語(yǔ)言條件轉(zhuǎn)移命令在Siemens數(shù)控系統(tǒng)換刀操作中的應(yīng)用
每條刀軌加工結(jié)束之后需要判斷是否需要換刀,如果需要換刀,則輸出關(guān)閉主軸M 5命令,關(guān)閉冷卻液M 9命令,為此,使用TCL語(yǔ)言寫(xiě)成用戶自定義命令,在UG/Post Builder軟件的Operation End Sequence中的End of path中創(chuàng)建一個(gè)進(jìn)程proc,如圖5所示。

圖5 Siemens系統(tǒng)程序尾PostBuilder設(shè)置
其內(nèi)容如下:

其中變量mom_next_oper_has_tool_change的取值可以為YES或者NO,string為T(mén)CL語(yǔ)言的字符串命令,在此條件轉(zhuǎn)移指令中,如果變量mom_next_oper_has_tool_change的值為YES,則意味著下一操作有換刀動(dòng)作為真,需要輸出M 5及M 9,如果不需要換刀,則不輸出任何語(yǔ)句。
例1:TCL語(yǔ)言條件匹配命令在Siemens數(shù)控系統(tǒng)換刀類型指令中的應(yīng)用
數(shù)控機(jī)床換刀有兩種:手動(dòng)(MANUAL)與自動(dòng)(AUTO),根據(jù)換刀類型的不同,數(shù)控系統(tǒng)分別執(zhí)行相應(yīng)的不同的指令,為實(shí)現(xiàn)這個(gè)功能,可以使用條件匹配指令,其內(nèi)容如下:

首先對(duì)變量mom_tool_change_type進(jìn)行聲明,它定義換刀類型,有兩個(gè)取值,MANUAL與AUTO;Sw itch命令對(duì)mom_tool_change_type的取值進(jìn)行匹配,如果取值為MANUAL,則執(zhí)行PB_manual_tool_change子程序,如果取值為AUTO,則執(zhí)行PB_auto_tool_change子程序。
例2:TCL語(yǔ)言條件匹配命令在Siemens數(shù)控系統(tǒng)輸出程序單位中的應(yīng)用
UG軟件模型建模單位與后置處理輸出程序單位常常存在不一致的現(xiàn)象,比如有些國(guó)家使用英制單位IN建立模型,而我們使用公制單位MM做后置處理,這樣就會(huì)出現(xiàn)錯(cuò)誤,為消除這種錯(cuò)誤,可以使用如下語(yǔ)句:

解釋如下:首先對(duì)變量mom_output_unit、mom_part_unit、mom_siemens_tol進(jìn)行聲明,變量mom_output_unit意為后置處理輸出程序的單位,變量mom_part_unit為模型建模單位,這兩個(gè)變量的取值都只有2個(gè):IN(英制單位)或者M(jìn)M(公制單位),但mom_output_unit與mom_part_unit可以不同;mom_siemens_tol為中間變量,是UG軟件建模數(shù)值,無(wú)單位。
使用TCL語(yǔ)言條件轉(zhuǎn)移指令if,對(duì)mom_output_unit與mom_part_unit的值進(jìn)行判斷,當(dāng)mom_output_unit與mom_part_unit取值不同時(shí),用TCL條件匹配指令sw itch對(duì)mom_output_unit的值進(jìn)行匹配:如果后置處理需要輸出IN英制單位(這時(shí)意味著模型建模單位為MM公制單位),則把中間變量mom_siemens_tol建模尺寸數(shù)值除以25.4;如果后置處理需要輸出MM公制單位(這時(shí)意味著模型建模單位為IN英制單位),則把中間變量mom_siemens_tol建模尺寸數(shù)值乘以25.4;最后使用TCL語(yǔ)言替換命令把mom_siemens_tol的6位小數(shù)格式賦值給自己。
根據(jù)TCL語(yǔ)言條件轉(zhuǎn)移指令if,當(dāng)mom_output_unit與mom_part_unit取值相同時(shí),不做任何處理。
TCL語(yǔ)言目前已應(yīng)用于UG軟件的Post Builder、Process Assistants(CAM過(guò)程輔助)等多個(gè)功能模塊。Post Builder中的Custom Command(用戶自定義命令)可以讓用戶插入自己編寫(xiě)的TCL子程序,以滿足特殊需要的輸出格式,如需對(duì)UG軟件進(jìn)行高級(jí)定制或二次開(kāi)發(fā),則必須熟練掌握TCL語(yǔ)言。