和云敏
(長江工程職業技術學院,武漢 430212)
Visual Basic是一種由微軟公司開發的包含協助開發環境的事件驅動編程語言,簡稱VB,源自BASIC編程語言。由于其具有結構簡單,編寫程序對系統的資源占有極低等優點,已成為程序編寫者編寫小型程序的第一選擇[1]。在數控加工領域,由于數控標準ISO代碼只包含直線和圓弧兩種插補指令,當遇到橢圓、拋物線等特殊曲線時采用宏指令編寫宏程序才能滿足要求。宏程序包含多種宏變量,代碼較多,編程思路復雜,對編程人員是一大挑戰[2]。若借助CAXA等自動編程軟件,又小題大做,其繪圖、路徑規劃及編程模擬的過程也使得編程效率不高。此時采用VB編程,再用宏程序工具生成宏程序即可解決這一難題。
數控車床是加工中小批量、形狀復雜軸套類零件的重要設備。圖1所示為我國某企業生產的用于造紙機械的輥軸裝配組件。
圖1 輥軸裝配組件
輥軸包含4個零件,裝配完成后外輪廓有一段為橢圓弧,分別分布于件1、3、4上,其中件1和件4通過件2進行螺紋連接。如果采用傳統的工藝,很難保證裝配后橢圓弧處光滑無接縫;另外,需對應編寫3個零件的橢圓弧程序,程序編寫效率不高,當產品更新換代后還需重新編寫[3]。
以某企業輥軸裝配組件為例,利用VB工具開發一個數控車床宏程序工具,用戶只需要輸入曲線參數、工件坐標等必要編程要素即可一鍵完成宏程序生成與匯出,大大提高了數控編程效率和準確性,降低了數控編程人員的勞動強度。
圖2、圖3為輥軸裝配組件零件圖,裝配完成后要求外表面橢圓弧處光滑無接痕。
圖2 件1和2零件圖
圖3 件3和4零件圖
根據光滑無接痕的裝配要求和4個零件精度要求,橢圓弧處的加工必須待4個零件裝配好用一個單獨的程序進行一體加工,即用一個程序一次性完成件1、3、4外圓橢圓弧的加工?;谝陨戏治?輥軸裝配組件加工工藝設計如表1所示。
輥軸裝配組件中的件2是關鍵零件,需要先行加工到位。件2一方面控制件1和件4螺紋的配合松緊情況和擰入長度,保證件1和件4同時擰入時兩零件端面不能相互頂住;另一方面,控制件3長度尺寸大于件2長度尺寸0~0.04mm,使得組件裝配時件3能被件1和件4夾緊,以保證件1、3和4三個零件外圓橢圓弧能夠被一體加工到位。
由于件1、3和4三個零件外圓橢圓弧是在裝配后一體加工的,在巨大的切削力作用下螺紋配合會非常緊密,極有可能造成裝配組件無法拆卸的情況,因此必須借助皮帶扭力扳手強行將件1和4擰出。為減少拆卸的難度,可以在裝配加工之前將螺紋裝配處進行清理、去毛刺和涂抹潤滑油等操作,便于加工后的拆卸。
由于ISO代碼僅包含直線G01和圓弧G02/3兩種準備性工藝代碼,因此針對橢圓弧等特殊曲線,需單獨編寫宏程序。宏程序的編寫類似于C語言編程,變量多,邏輯性強,對程序員應變不同位置特殊曲線的編程能力是極大的考驗[4]。為快速、準確、有效地完成特殊曲線程序編寫,降低勞動強度,可以利用Visual Basic語言開發一款數控車床宏程序,能根據用戶需要和曲線方位,設置特殊曲線的方程參數,路徑起點、終點及切削參數等,自動生成宏程序[5]。
(1)宏程序工具界面
在工程實際中,特殊曲線有很多種,如拋物線、橢圓、雙曲線等。為適應不同的特殊曲線自動生成NC程序,可以通過VB中添加窗體程序將常用的曲線羅列于宏程序工具初始界面[6],如圖4所示。
(2)曲線參數設置
以輥軸裝配組件外圓橢圓弧為例說明曲線參數的設置,如圖5所示。
圖5 曲線參數設置界面(橢圓弧)
曲線參數設置必須包括四大要素,即曲線方程參數、曲線起終點參數、切削參數和其他參數。以輥軸裝配組件外圓橢圓弧為例,其曲線方程參數包括長半軸a值、短半軸b值、橢圓中心x、z坐標及橢圓弧段(凸、凹);曲線起終點參數包括橢圓弧起點x、z坐標和橢圓弧終點x、z坐標;切削參數包括進給量F、主軸轉速S、刀具號T、背吃刀量U、粗加工直徑方向余量X值和長度方向Z值;其他參數包括確定循環起點的毛坯尺寸D值、曲線加工精度J值。
在曲線參數設置界面中,【程序頭】和【程序尾】是為了配合不同用戶的需求,可以僅生成曲線宏程序粘貼到已有程序中使用。若單獨需要生成一個完整的NC程序,可以將【程序頭】和【程序尾】勾上,點擊【生成代碼】則可生成包含外輪廓復合循環指令的宏程序,直接用于機床實操現場,【匯出代碼】可將程序導入到指定控制介質中。
(3)VB程序編寫
在完成曲線參數設置后,可以點擊【生成代碼】功能按鈕編寫VB程序。
Private Sub Command1_Click()
Dim s1 As Integer
Dim crlf As String
Dim sTR1 As String
Dim strHEAD As String
Dim strTAIL As String
s1 = 1
If Check1.Value = 1 Then
s1 = 1
Else
s1 = 0
End If
crlf = Chr(13) &Chr(10)
sTR1 = ""
strHEAD = "N1" &crlf
strHEAD = strHEAD &"G00 G90 G95 G97 M03 S" &txtdegree2.Text &" F" &txtdegree1.Text &" T0" &txtdegree3.Text &"0" &txtdegree3.Text &crlf
strHEAD = strHEAD &"G00 X" &Val(txtradiusd.Text + 2) &" Z" &txtz1.Text &crlf
If 0.1 * Val(txtdegree4.Text) <1 Then
strHEAD = strHEAD &"G71 U" &txtdegree4.Text &" R0" &(0.1 * Val(txtdegree4.Text)) &" P10 Q20"
If s1 = 1 Then
strHEAD = strHEAD &" E" &txtdegree5.Text &crlf
Else
strHEAD = strHEAD &" X" &txtdegree5.Text &" Z" &txtdegree6.Text &crlf
End If
Else
strHEAD = strHEAD &"G71 U" &txtdegree4.Text &" R" &(0.1 * Val(txtdegree4.Text)) &" P10 Q20"
If s1 = 1 Then
strHEAD = strHEAD &" E" &txtdegree5.Text &crlf
Else
strHEAD = strHEAD &" X" &txtdegree5.Text &" Z" &txtdegree6.Text &crlf
End If
End If
'head
If Check2.Value = 1 Then
sTR1 = strHEAD
Else
sTR1 = ""
End If
sTR1 = sTR1 &"#10=" &Val(txtz1.Text - txtyd.Text) &crlf
If s1 = 1 Then
sTR1 = sTR1 &"#11=" &(Val(txtyb.Text) * -1) &"*" &"SQRT[1-#10*#10/" &txtxa.Text &"/" &txtxa.Text &"]" &crlf
Else
sTR1 = sTR1 &"#11=" &txtyb.Text &"*" &"SQRT[1-#10*#10/" &txtxa.Text &"/" &txtxa.Text &"]" &crlf
End If
sTR1 = sTR1 &"N10 G00 G42 X" &txtx1.Text &crlf
sTR1 = sTR1 &"Z" &txtz1.Text &crlf
sTR1 = sTR1 &"WHILE #10 GE " &Val(txtz2.Text - txtyd.Text) &crlf
sTR1 = sTR1 &"G01 X[" &txtxc.Text &"+2*#11]" &" Z[" &txtyd.Text &"+#10]" &" F" &txtdegree1.Text &crlf
sTR1 = sTR1 &"#10=#10-" &txtdegree7 &crlf
If s1 = 1 Then
sTR1 = sTR1 &"#11=" &(Val(txtyb.Text) * -1) &"*" &"SQRT[1-#10*#10/" &txtxa.Text &"/" &txtxa.Text &"]" &crlf
Else
sTR1 = sTR1 &"#11=" &txtyb.Text &"*" &"SQRT[1-#10*#10/" &txtxa.Text &"/" &txtxa.Text &"]" &crlf
End If
sTR1 = sTR1 &"ENDW" &crlf
sTR1 = sTR1 &"N20 G00 X" &Val(txtradiusd.Text + 2) &crlf
'tail
strTAIL = strTAIL &"G00 X100" &crlf
strTAIL = strTAIL &"G00 Z100" &crlf
strTAIL = strTAIL &"M30" &crlf
If Check3.Value = 1 Then
sTR1 = sTR1 &strTAIL
End If
txtresult.Text = sTR1
End Sub
Private Sub Command2_Click()
Open "wenjian.txt" For Output As #1
Print #1, txtresult.Text
Close #1
End Sub
完成VB程序編寫后點擊【文件】菜單,【生成mymain.exe程序】后生成宏程序,如圖6所示。
圖6 宏程序
以輥軸裝配組件右端面中心點為工件原點,完成橢圓弧各參數設置后生成宏程序。圖6右側文本框為采用華中數控系統編程格式生成的宏程序。同理,可以根據工程實際加工需求,生成“拋物線”“雙曲線”等對應的宏程序,從而形成宏程序工具。
通過【匯出程序】將宏程序工具生成的宏程序導出,并采用宇龍數控仿真系統對程序進行仿真驗證,仿真結果如圖7所示。
圖7 計算機仿真結果
在數控仿真系統中對零件進行尺寸測量且各項尺寸均滿足圖紙要求之后,將NC宏程序導入數控機床進行實操驗證,如圖8所示。
圖8 NC宏程序導入數控機床進行實操驗證
通過對加工的產品進行測量,均達到圖紙要求。由此可以得出結論,由數控車床宏程序工具生成的NC宏程序可以直接用于數控加工現場,效率高、可靠性好。
工程實際中,編程人員在編寫程序之前必須要進行加工工藝分析。而筆者開發的數控車床宏程序工具在實際使用時,僅需要輸入數控加工工藝分析中所必須的“毛坯尺寸”“特殊曲線類型”“加工部位”“切削參數”“加工精度”等參數,即可一鍵生成宏程序,簡單快捷方便。
宏程序工具中囊括了不同的回轉體零件中所常見的“拋物線”“雙曲線”“橢圓”等特殊曲線,且VB源代碼具備二次開發定制功能,當用戶需要定制大批量零件所需宏程序時,可以對VB程序進行更改和優化來滿足要求。
針對具有橢圓弧等特殊曲線輪廓而必須采用宏指令才能編寫程序的零件,開發了一個數控車床宏程序工具,可以幫助編程人員準確、迅速地完成宏程序編寫與輸出,經計算機仿真和現場實操驗證結果表明:工藝方法選擇恰當,采用由宏程序工具生成的NC程序加工的零件各項尺寸均滿足精度要求,輸出程序效率高、準確,可以直接用于加工現場。且宏程序VB源代碼具有二次開發定制功能,具有較高的通用性和有效性,為從事數控車床編程及操作的技術人員解決相關難題提供了一個有效的工具。