王乃彥 閆明璞 上海電氣電站設備有限公司汽輪廠 (200240)
王乃彥(1980年~),男,工程師,專業方向為汽輪機制造。
在數控系統中,為方便程序編制,數控系統提供多種標準循環,如西門子840D中的銑螺紋循環CYCLE90(),切槽循環CYCLE93()等,作為一組基本指令的集合,實現了一些典型結構的加工。數控程序編制時,編程人員并不需要知道固定循環內部的結構和指令,只需要按說明填寫相應的參數就可完成程序的編制。標準循環簡化了程序、降低了編程的難度和出錯率,增強了數控程序的可讀性。這些標準循環主要使用子程序技術,參考標準循環的編程方法,將一些通用性較強的結構使用子程序編程,同樣可以簡化程序,降低程序編制的難度,提高工作效率,方便數控程序的管理。
數控程序編制過程中,如果零件不同位置具有相同或相似的結構(見圖1),為了簡化程序,可以把這些重復的程序段單獨列出,按一定的格式編寫成子程序。主程序在執行過程中如果需要某一子程序,通過調用指令來調用該子程序,完成相關結構的加工。子程序執行完后返回到主程序,繼續執行后面的程序段。使用子程序技術,不但減少了程序長度,增加了程序的可讀性,還降低了程序的出錯率,方便程序的修改。

圖1 有相同結構的零件
在加工中,經常會遇到一些典型結構,幾何形狀比較復雜,尺寸要素較多,加工方法相同或相似,區別只是位置、尺寸不同。加工這類典型零件時,數控程序使用的參數多、程序復雜。采用普通子程序編程,加工不同的零件時,不能直接被調用,必須對其中涉及到的尺寸、加工參數進行修改。這樣就增加了子程序調用的難度,而且容易出錯。在子程序技術中,有一種帶參數傳遞的子程序技術,編制的子程序類似于數控系統中標準循環,可以把典型結構的加工程序封裝在子程序中,將所有的幾何尺寸、加工參數等變量以參數的形式傳遞給該子程序。同時也可以把一組類似的加工程序封裝在一個子程序中,把加工方式作為子程序參數,使用時根據需要選擇加工方式。這樣可以減少程序數量,方便程序管理。
格式:
PROC PROGRAMNAME(VARIABLENTYP1 VARIABLE1,VARIABLENTYP2 VARIABLE2,…)
PROC:PROC指令,子程序標記關鍵字
PROGRAMNAME:子程序名稱
VARIABLENTYP1:參數1類型,
VARIABLE1:參數1名稱,
VARIABLENTYP2:參數2類型,
VARIABLE2:參數2名稱,
…
參數可以是普通的數據類型,也可以是數組。如果是數組,則必須在數組類型前加關鍵字VAR。
注意:帶 PROC 的定義指令必須在一個獨立的NC程序段中編程??梢宰疃嘤?127 個參數用于參數傳送。
子程序定義舉例:
PROC KONTUR(REAL LENGTH, REAL WITH)
N10 …
…
N50 X= LENGTH
N60 Y= WITH
…
N100 M17
子程序以M17或RET結束。
主程序中,在調用帶參數傳遞的子程序前,必需用EXTERN指令對子程序聲明,格式如下:
EXTERN NAME(TYP1, TYP2, …)
NAME:子程序名稱
TYP1:參數1類型,
TYP2:參數2類型,
…
聲明子程序時,參數類型和順序都必須與定義時一致,每個參數類型都必須填寫,不能省略。
注意:此處只有參數類型,沒有參數名稱。
舉例:
N10 EXTERN KONTUR(REAL, REAL);聲明子程序
N20 DEF REAL LENGTH,W
N30 LENGTH=10.18
N40 W=3.29
…
N100 KONTUR(LENGTH, W) ;調用子程序
…
N200 M30
在調用子程序時,參數類型和傳送的順序都必須與子程序定義時PROC語句中一致。但參數名稱不一定與子程序定義時一樣,這里只是把主程序中的相關數值(或地址)傳遞給子程序,與參數名稱無關。
在汽輪機蒸汽閥門中,有很多大螺距的鋸齒形螺紋(圖2),因螺距太大,無法使用普通的螺紋加工方式(車削或銑削)加工。為此專門開發出加工大尺寸鋸齒形螺紋的新技術解決了大尺寸螺紋的加工,參數見附表。

圖2 鋸齒形螺紋結構

附表
加工鋸齒形螺紋,主要采用分層切削,利用數控程序控制螺紋截面輪廓,采用普通菱形車刀多次車削,最終加工出符合圖樣要求的螺紋(見圖3)。

圖3 螺紋加工示意
因螺紋截面輪廓復雜,其精度和表面粗糙度要求較高。為了提高工作效率和便于編制數控程序,把整個加工過程分解成四部分:粗加工、精加工、圓角加工和倒角加工。粗加工以去除大部分多余材料為主要目的,在機床和刀具滿足要求的情況下盡可能地加大切削量。但在整個切削過程中,每刀的切削狀況不盡相同(比如每層的初始進刀和后續切削工作狀況差別很大),這就要在加工過程中對其計算,調整切削參數,以使其切削量盡量均衡。精加工和圓角、倒角加工過程中,精度和表面粗糙度為關注要點。刀尖圓弧對精度和表面粗糙度的影響尤為重要。這就要根據刀尖所處的位置對刀尖圓弧的影響進行補償。以刀尖圓弧對加工輪廓的影響為例(見圖4):P點為刀具對刀零點,很顯然,刀具切削點與P點不重合,并且其相對位置關系隨著切削點的變化在不斷變化。此處圓弧在空間為一螺旋曲面,切削原理與車圓弧不同,因此不能用G41(或G42)刀尖半徑補償。必須在程序中對P點和刀具切削點相對位置進行計算,根據刀具切削點位置計算出P點位置,以便程序控制刀具路徑。

圖4 刀尖圓弧對加工輪廓的影響
因此,在此數控程序中,有大量的尺寸參數和加工參數參與運算,并且要運用大量的循環、判斷語句,整個程序非常復雜。如果采用普通編程方法,只要螺紋尺寸有所改變,或者加工方式和加工參數有所改變,程序中大量數據都必須相應改變。為確保程序正確,在程序編制完成后需試加工,驗證程序正確后才能應用于生產。
產品中涉及此類螺紋規格繁多,螺距從5~20mm,螺紋直徑從210~1 000mm不等,既有外螺紋又有內螺紋,加工方法無法統一,車削加工和鏜削加工都會用到。采用普通方法編程,程序將達幾十種之多。如對每種程序都進行驗證,成本將非常高。結果是不但工作量大,不便于加工參數的調試,而且極易出錯。因此采用普通方法編制的程序難以維護,沒有通用性。采用普通的子程序技術,雖然能解決普通編程方法存在的一些問題,但對于主程序和子程序之間存在大量的參數傳遞的情況,采用普通子程序技術也存在較大困難。
采用帶參數的子程序技術,把螺紋所有幾何尺寸和工藝參數提取出來,作為螺紋子程序的參數,增加相應參數區分內外螺紋、加工方法(直徑編程或半徑編程等)。通過這種編程方法可以把復雜的程序封裝在子程序里,在主程序調用該子程序時填寫相應參數,即可方便地編制出各種規格的螺紋加工程序。以下以螺紋的粗加工子程序加以說明。
%_N_rough_SPF
proc rough(real U_Dim,… ,int U_FS) SAVE DISPLOF;子程序定義
def int U_CengShu;變量定義
……
def real U_Feed
IF (U_FS<>-2)and(U_FS<>-1)and(U_FS<>1)and(U_FS<>2);參數檢查
MSG("U_FS 參數賦值錯誤")
GOTOF MARK_1
ENDIF
……
U_ThStart=U_ThStart-U_zFinallow;數據運算
……
U_CengShu=U_StartDNum
Begin_0:;層切循環
U_N=U_Width/U_zFeed
……
MSG("正在切削第"< U_CengShu=U_CengShu+1 Begin_1:;每層開始切口循環 U_Depth=U_Depth+U_pDepth …… REPEAT Begin_1 P=U_xNum IF U_Num<0 GOTOF MARKE_0 Begin_2:;每層切削循環,包含運算、選擇執行語句 U_ThStart1=U_ThStart1-U_Feed …… REPEAT Begin_2 P=U_Num MARKE_0: …… MSG() MARK_1: M17 rough(real U_Dim,…,int U_FS) U_Dim:螺紋底孔(外圓)直徑 …… U_FS:加工方式 -2:直徑編程,內螺紋;-1:半徑編程,內螺紋;1:半徑編程,外螺紋;2:直徑編程,外螺紋 在子程序后應附該程序的使用說明以及特殊要求(如參數賦值范圍等),以便其他人在不用了解子程序內部詳細信息的情況下就能直接調用,便于數控程序的共享。 %_N_NS650x20_MPF Extern rough(real,real,real,real,real,real,real,real,real,int,int,real,real,real,real,int,int);子程序聲明,如沒有此聲明,子程序不能被正確調用 G90 G18 G54 G00 T1 D1 X800 Z100 M3 S15 rough (650,20,0,-250,10.5,15.5,45.25,20,10,20,1,0.2,0,0.2,0.9,5,2) ;粗加工子程序調用 G00 X800 Z100 M05 M30 為了避免因調用子程序導致模態G功能值的改變,導致后續程序產生不可預知的錯誤,應在PROC指令結束處添加SAVE指令。此指令的工作過程是在調用子程序前,將G功能的值暫時保存起來。調用子程序結束后,返回主程序(或調用此子程序的子程序)后,將G功能的值恢復到調用前的狀態。比如子程序中用G90或G91改變了絕對坐標或相對坐標狀態時,不用SAVE指令,子程序結束返回主程序后將會出現錯誤。 在子程序經過調試、驗證無誤后,可在PROC指令結束處添加DISPLOF指令,使程序在運行時不顯示子程序內部的程序段。這可使加工程序在運行時操作界面顯得非常簡潔(見圖5)。 加工過程中的重要信息可通過MSG指令在屏幕上方顯示出來,適當地使用此指令可使操作人員及時、準確地了解加工狀態和加工進度,增強程序執行的透明度。如上述例子中顯示加工到第幾層。 圖5 程序運行界面 通過帶參數的子程序技術,可以實現典型結構加工的標準化、模塊化,方便程序的修改和優化。編程人員開發出子程序,編寫出此子程序的使用說明,其他人就可以根據說明直接使用此子程序,只需要填寫子程序需要的參數,而不需了解子程序的工作原理及工作過程。從而避免了編程錯誤,降低程序測試成本,降低了編程人員的工作強度,大大提高工作效率。3.2 子程序說明
3.3 主程序
4 其他常用指令

5 結論