課題三:A類宏程序編程 一、用戶宏程序簡(jiǎn)介 用戶宏程序是FANUC數(shù)控系統(tǒng)及類似產(chǎn)品中的特殊編程功能。用戶宏程序的實(shí)質(zhì)與子程序相似,它也是把一組實(shí)現(xiàn)某種功能的指令,以子程序的形式預(yù)先存儲(chǔ)在系統(tǒng)存儲(chǔ)器中,通過(guò)宏程序調(diào)用指令執(zhí)行這一功能。在主程序中,只要編入相應(yīng)的調(diào)用指令就能實(shí)現(xiàn)這些功能。 一組以子程序的形式存儲(chǔ)并帶有變量的程序稱為用戶宏程序,簡(jiǎn)稱宏程序;調(diào)用宏程序的指令稱為“用戶宏程序指令”或宏程序調(diào)用指令。 宏程序與普通程序相比較,普通程序的程序字為常量,一個(gè)程序只能描述一個(gè)幾何形狀,所以缺乏靈活性和適用性。而在用戶宏程序的本體中,可以使用變量進(jìn)行編程,還可以用宏指令對(duì)這些變量進(jìn)行賦值、運(yùn)算等處理。通過(guò)使用宏程序能執(zhí)行一些有規(guī)律變化(如非圓二次曲線輪廓)的動(dòng)作。 用戶宏程序分為A、B兩類。通常情況下,F(xiàn)ANUC0TD系統(tǒng)采用A類宏程序,而FANUC0i系統(tǒng)則采用B類宏程序。 二、A類宏程序 1、變量 在常規(guī)的主程序和子程序內(nèi),總是將一個(gè)具體的數(shù)值賦給一個(gè)地址,為了使程序更加具有通用性、靈活性,故在宏程序中設(shè)置了變量。 (1)變量的表示。一個(gè)變量由符號(hào)“#”和變量序號(hào)組成,如:#i(i=1,2,3,…)。 (2)變量的引用。將跟隨在地址符后的數(shù)值用變量來(lái)代替的過(guò)程稱為引用變量。 例C01X#100Y-#10lF#102; 當(dāng)#100=100.0、#101=50.0、#102=80時(shí),上面這句程序即表示為G01X100.OY-50.OF80; (3)變量的種類變量分為局部變量、公共變量(全局變量)和系統(tǒng)變量三種。在A、B類宏程序中,其分類均相同。 1)局部變量:局部變量(#1~#33)是在宏程序中局部使用的變量:當(dāng)宏程序1調(diào)用宏程序2而且都有變量#1時(shí),由于變量#l服務(wù)于不同的局部,所以1中的#l與2中的#1不是同一個(gè)變量,因此可以賦于不同的值,且互不影響。 2)公共變量。公共變量(#100~#149、#500~#549)貫穿于整個(gè)程序過(guò)程。同樣,當(dāng)宏程序1調(diào)用宏程序2而且都有變量#100時(shí),由于#100是全局變量,所以1中的#100與2中的#100是同一個(gè)變量。 3)系統(tǒng)變量。系統(tǒng)變量是指有固定用途的變量,它的值決定系統(tǒng)的狀態(tài)。系統(tǒng)變量包括刀具偏置值變量、接口輸入與接口輸出信號(hào)變量及位置信號(hào)變量等。 2、用戶宏程序的格式及調(diào)用 (1)宏程序格式用戶宏程序與子程序相似。以程序號(hào)O及后面的4位數(shù)字組成,以M99指令作為結(jié)束標(biāo)記。 比較一下主程序、子程序和宏程序的格式。 O0060; G65H01P#100Q100;將值100賦給#100 G00X#100Y……; …… M99;宏程序結(jié)束 (2)宏程序的調(diào)用。宏程序的調(diào)用有兩種形式:一種與子程序調(diào)用方法相同,即用M98進(jìn)行調(diào)用。另一種用指令G65進(jìn)行調(diào)用,如: G65P0070X100.0Y100.0Z-30.0; 此處的X、Y、Z并不代表坐標(biāo)功能字 其中,G65為調(diào)用宏程序指令,該指令必須寫在句首;P0070表示宏程序的程序號(hào)為O0070;L5表示調(diào)用次數(shù)為5;X100.0Y100.0Z-30.0變量引數(shù),引數(shù)為有小數(shù)點(diǎn)的正、負(fù)數(shù)。 3、宏程序的運(yùn)算和轉(zhuǎn)移指令(表3-2) 指令 H碼 功能 定義 G65 H01 定義、替換 #i=#j G65 H02 加 #i=#j+#k G65 H03 減 #i=#j-#k G65 H04 乘 #i=#j×#k G65 H05 除 #i=#j/#k G65 H11 邏輯或 #i=#jOR#k G65 H12 邏輯與 #i=#jAND#k G65 H13 異或 #i=#jXOR#k G65 H21 平方根 #i= G65 H22 決定值 #i= G65 H23 求余 #i=#j-trunc(#j/#k)×#k G65 H24 十進(jìn)制碼變?yōu)槎M(jìn)制碼 #i=BIN(#j) G65 H25 二進(jìn)制碼變?yōu)槭M(jìn)制碼 #i=BCD(#j) G65 H26 復(fù)合乘/除 #i=(#i×#j)/#k G65 H27 復(fù)合平方根1 #i= G65 H28 復(fù)合平方根2 #i= G65 H31 正弦 #i=#j×sin(#k) G65 H32 余弦 #i=#j×cos(#k) G65 H33 正切 #i=#j×tan(#k) G65 H34 反正切 #i=arctan(#j/#k) G65 H80 無(wú)條件轉(zhuǎn)移 GOTOn G65 H81 條件轉(zhuǎn)移1(EQ) IF#j=#k,GOTOn G65 H82 條件轉(zhuǎn)移2(NE) IF#j #k,GOTOnG65 H83 條件轉(zhuǎn)移3(GT) IF#j>#k,GOTOn G65 H84 條件轉(zhuǎn)移4(LT) IF#j<#k,GOTOn G65 H85 條件轉(zhuǎn)移5(GE) IF#j #k,GOTOnG65 H86 條件轉(zhuǎn)移6(LE) IF#j #k,GOTOnG65 H99 產(chǎn)生P/S報(bào)警 P/S報(bào)警號(hào)500+n出現(xiàn) (1)宏程序的運(yùn)算指令宏程序的運(yùn)算指令通過(guò)G65的不同表達(dá)形式實(shí)現(xiàn),其指令的一般形式為: G65H(m)P(#i)Q(#j)R(#k): 其中,m可以是01~99中的任何一個(gè)整數(shù),表示運(yùn)算指令或轉(zhuǎn)移指令的功能;#i表示存放運(yùn)算結(jié)果的變量;#j為需要運(yùn)算的變量1,也可以是常數(shù),常數(shù)可以直接表示,不帶“#”;#k為需要運(yùn)算的變量2,也可以是常數(shù),常數(shù)可以直接表示,不帶“#”; 指令所代表的意義為:#i=#j #k; 代表運(yùn)算符號(hào),它由H(m)指定。 例1G65H02P#100Q#10lR#102:表示#100=#101+#102 G65H03P#100Q#101R15;表示#100=#101—15 G65H04P#100Q-100R#102:表示#100=-100×#102 G65H05P#100Q-100R#102;表示#100=-100÷#102 變量值是不含小數(shù)點(diǎn)的數(shù)值,它以系統(tǒng)的最小輸入單位為其值的單位。 例如,當(dāng)#100=10時(shí),X#100代表0.01mm。當(dāng)運(yùn)算結(jié)果出現(xiàn)小數(shù)點(diǎn)后的數(shù)值時(shí),其值將被舍去。另外,用G65指定的H代碼,對(duì)選擇刀具長(zhǎng)度補(bǔ)償?shù)钠锰?hào)沒(méi)有任何影響。 例2若#100=37,#101=10執(zhí)行如下指令,其運(yùn)算結(jié)果如下:#110=#100÷#101;結(jié)果為3;小數(shù)點(diǎn)后的數(shù)值被舍去。 在使用宏程序運(yùn)算指令中,當(dāng)變量以角度形式指定時(shí),其單位是0.0010。在各運(yùn)算中,當(dāng)必要的Q、R沒(méi)有指定時(shí),系統(tǒng)自動(dòng)將其值作為“0”參加運(yùn)算。而且運(yùn)算、轉(zhuǎn)移指令中的H、P、Q、R都必須寫在G65之后,因此在G65以前的地址符只能有0、N。 (2)宏程序的轉(zhuǎn)移指令宏程序的轉(zhuǎn)移指令與運(yùn)算指令相似,即通過(guò)指令G65的不同表達(dá)形式實(shí)現(xiàn)。A類宏程序的轉(zhuǎn)移指令格式見(jiàn)表4—8,分為無(wú)條件轉(zhuǎn)移和條件轉(zhuǎn)移兩類。 1)無(wú)條件轉(zhuǎn)移指令。指令格式: G65H80Pn;“n”為目標(biāo)程序段號(hào)。 例G65H80P120;執(zhí)行該程序段時(shí),將無(wú)條件轉(zhuǎn)移到N120程序段。 2)條件轉(zhuǎn)移指令。指令格式:G65H8PnQ#JR#k;H81~H86。 例G65H83P1000Q#20lR#202;當(dāng)#201>#202時(shí),轉(zhuǎn)移到N1000程序段,當(dāng)#201 #202時(shí),程序繼續(xù)執(zhí)行。 4、A類宏程序編程示例 例:試用A類宏程序編寫如圖3-3所示的橢圓加工的數(shù)控車床加工程序。 圖3-3橢圓加工 課題分析:本例以Z為自變量,每次增量為-0.1mm。X為應(yīng)變量(注意公式中的X為半徑值),直徑量X=2 = 。編寫該工件宏程序時(shí),使用以下變量進(jìn)行操作運(yùn)算。 #101:曲線上各點(diǎn)的Z坐標(biāo)。 #102:曲線上各點(diǎn)的X坐標(biāo)。 曲線精加工程序如下: O0501; 主程序 …… 程序開(kāi)始部分 G00X0.0Z2.0; 宏程序起點(diǎn) G65G01P#101Q0; Z坐標(biāo)賦初值 G65G01P#102Q0; X坐標(biāo)附初值 N100G01X#102Z#101F100; G65H03P#101Q#101R100; Z坐標(biāo)每次減0.1mm G65H04P#100Q#101R-64000; 注意R值為64000,而不能用64 G65H21P#102Q#100; X坐標(biāo)值 G65H86P100Q#102R32000; 如果X坐標(biāo)小于32mm,則返回N100 G01X100.0Z100.0; M30; 三、編程實(shí)例 例:試用A類宏程序的編程方法編寫如圖3-4所示的橢圓手柄的數(shù)控車床精加工程序。 圖3-4橢圓手柄 課題編程與加工思路:本課題的輪廓表面為非圓曲線,無(wú)法采用常規(guī)的直線和圓弧指令進(jìn)行編程。因此,本課題引人宏程序編程的方式進(jìn)行曲線擬合編程。其加工程序見(jiàn)表3-3。 1、編程說(shuō)明 如圖3-4所示,該橢圓的方程為X2/12.52+(Z+25)2/252=1;該橢圓方程的另一種表達(dá)式為“X=12.5sin ,Z=25cos -25”,橢圓上各點(diǎn)坐標(biāo)分別是(12.5sin ,25cos -25),坐標(biāo)值隨角度的變化而變化,“ ”是自變量,每次角度增量為0.10,而坐標(biāo)“X”和“Z”是應(yīng)變量。 注:用極坐標(biāo)編寫該橢圓時(shí),應(yīng)注意M點(diǎn)處的極角不等于圖樣上已知的平面角14630需經(jīng)換算后得到該點(diǎn)的極角為12686。 本課題編程時(shí)使用以下變量進(jìn)行運(yùn)算(過(guò)渡用變量略) #100:橢圓X向半軸A的長(zhǎng)度。 #101:橢圓Z向半軸B的長(zhǎng)度。 #102:橢圓上各點(diǎn)對(duì)應(yīng)的角度a。 #103:Asina。 #104:Bcosa。 #105:橢圓上各點(diǎn)在編程坐標(biāo)系中的X坐標(biāo)。 #106:橢圓上各點(diǎn)在編程坐標(biāo)系中的Z坐標(biāo)。 2、參考程序(表3-3) 刀具 1號(hào)刀具:930硬質(zhì)合金外圓車刀 程序段號(hào) FANUC0i系統(tǒng)程序 程序說(shuō)明 O0400; 主程序 N10 G98G40G21F100; 程序開(kāi)始部分 N20 T0101; 換菱形刀片外圓車刀,選精加工轉(zhuǎn)速 N30 M03S1200; N40 G00X0.0Z5.0; 宏程序起點(diǎn) N50 M98P402; 調(diào)用精加工宏程序 N60 G02X20.0Z-70.0R40.0; 加工圓弧 N70 G01Z-85.0; N80 G00X100.0Z100.0; 程序結(jié)束 N90 M30; O0402 N10 G65H01P#100Q12500; N20 G65H01P#101Q25000; N30 G65H01P#102Q0; N40 G65H31P#103Q#100R#102; N50 G65H32P#104Q#101R#102; N60 G65G04P#105Q#103R2; N70 G65H03P#106Q#104R25000; N80 G01X#105Z#106F100; N90 G65H02P#102Q#102R100; N100 G65H86P40Q#102R126860; N110 M99; 課題四:B類宏程序編程 一、B類宏程序 在FANUC0MD等老型號(hào)的系統(tǒng)面板上沒(méi)有“+”、“一”、“×”、“/”、“=”、“[]”等符號(hào),故不能進(jìn)行這些符號(hào)輸入,也不能用這些符號(hào)進(jìn)行賦值及數(shù)學(xué)運(yùn)算。所以,在這類系統(tǒng)中只能按A類宏程序進(jìn)行編程。而在FANUC0i及其后(如FANUC18i等)的系統(tǒng)中,則可以輸入這些符號(hào),并運(yùn)用這些符號(hào)進(jìn)行賦值及數(shù)學(xué)運(yùn)算,即按B類宏程序進(jìn)行編程. 1、變量 B類宏程序的變量與A類宏程序的變量基本相似,主要區(qū)別有以下幾個(gè)方面。 (1)變量的表示B類宏程序除可采用A類宏程序的變量表示方法外,還可以用表達(dá)式進(jìn)行表示,但其表達(dá)式必須全部寫入方括號(hào)“[]”中,程序中的圓括號(hào)“()”僅用于注釋。 例#[#l+#2+lO] 當(dāng)#1=lO,#2=100時(shí),該變量表示#120。 (2)變量的引用引用變量也可以采用表達(dá)式。 例G01X[#l00-30.0]Y-#101F[#101+#103]; 當(dāng)#100=100.O,#101=50.O,#103=80.O時(shí),上面語(yǔ)句即表示為G01X70.OY-50.OF130。 2、變量的賦值 (1)直接賦值變量可以在操作面板上用MDI方式直接賦值,也可在程序中以等式方式賦值,但等號(hào)左邊不能用表達(dá)式。 例#100=100.0; #100=30.O+20.O: (2)引數(shù)賦值宏程序以子程序方式出現(xiàn),所用的變量可在宏程序調(diào)用時(shí)賦值。 例G65P1000x100.0Y30.OZ20.0F100.0; 該處的X、Y、Z并不代表坐標(biāo)字,F(xiàn)也不代表進(jìn)給字,而是對(duì)應(yīng)于宏程序中的變量號(hào),變量的具體數(shù)值由引數(shù)后的數(shù)值決定。引數(shù)宏程序中的變量對(duì)應(yīng)關(guān)系有兩種,這兩種方法可以混用,其中G、L、N、O、P不能作為引數(shù)代替變量賦值。 例1變量引數(shù)賦值方法I G65P0030A50.0I40.0J100.0K0I20.0J10.0K40.0; 經(jīng)賦值后#l=50.0,#4=40.0,#5=100.0,#6=0,#7=20.0,#8=10.0,#9=40.0。 表3-4變量引數(shù)賦值方法Ι 表3-5變量引數(shù)賦值方法Ⅱ 例2變量引數(shù)賦值方法Ⅱ G65P0020A50.0X40.0F100.0; 經(jīng)賦值后#1=50.0,#24=40.0,#9=100.0。 例3變量引數(shù)賦值方法I和Ⅱ混合使用 G65P0030A50.0D40.0I100.0K0I20.0; 經(jīng)賦值后,I20.0與D40.0同時(shí)分配給變量#7,則后一個(gè)#7有效,所以變量#7=20.0,其余同上。 實(shí)例采用變量賦值后,圖3-4實(shí)例的A類精加工宏程序可改成如下形式: O0503;主程序 …… C65P0504A12.5B25.0CO.0D126.86F100.0;賦值后,X向半軸長(zhǎng)#l=12.5,Z向半軸長(zhǎng)#2=25.0,角度起始角#3=0.0,角度終止角#7=126.86,進(jìn)給速度#9=100.0 。 …… O504;精加工宏程序 N1000#4=#l×SIN[#3]; #5=#2×COS[#3]; #6=#4×2; #8=#5-#2; G01X#6Z#8F#9; #3=#3+0.0l: IF[#3LE#7]GOTO1000; M99; 3、運(yùn)算指令 B類宏程序的運(yùn)算指令與A類宏程序的運(yùn)算指令有很大的區(qū)別,它的運(yùn)算類似于數(shù)學(xué)運(yùn)算,仍用各種數(shù)學(xué)符號(hào)來(lái)表示。運(yùn)用運(yùn)算指令見(jiàn)表: 表3-6B類宏程序變量的各種運(yùn)算 (1)函數(shù)SIN、COS等的角度單位是0,’和”要換算成0。如90030’應(yīng)表示為90.50,30018’應(yīng)表示為30.30。 (2)宏程序數(shù)學(xué)計(jì)算的次序依次為:函數(shù)運(yùn)算(SIN、COS、ATAN等),乘和除運(yùn)算(×、/、AND等),加和減運(yùn)算(+、-、OR、XOR等)。 例#l=#2+#3×SIN[#4]; 運(yùn)算次序?yàn)椋汉瘮?shù)SIN[#4]→乘和除運(yùn)算#3×SIN[#4]→加和減運(yùn)算#2+#3×SIN[#4]。 (3)函數(shù)中的括號(hào)。括號(hào)用于改變運(yùn)算次序,函數(shù)中的括號(hào)允許嵌套使用,但最多只允許嵌套5層。 例#1=SIN[[[#2+#3]×4+#5]/#6]; (4)宏程序中的上、下取整運(yùn)算。CNC處理數(shù)值運(yùn)算時(shí),若操作產(chǎn)生的整數(shù)大于原數(shù)時(shí)為上取整,反之則為下取整。 例設(shè)#1=1.2,#2=-1.2 執(zhí)行#3=FUP[#1]時(shí),2.0賦給#3; 執(zhí)行#3=FIX[#l]時(shí),1.O賦給#3; 執(zhí)行#3=FUP[#2]時(shí),-2.O賦給#3; 執(zhí)行#3=FIX[#2]時(shí),-1.0賦給#3; 4控制指令:控制指令起到控制程序流向的作用。 (1)分支語(yǔ)句 格式一GOTOn; 例GOTO1000 該例為無(wú)條件轉(zhuǎn)移。當(dāng)執(zhí)行該程序段時(shí),將無(wú)條件轉(zhuǎn)移到N1000程序段執(zhí)行。 格式二IF[條件表達(dá)式]GOTOn; 例IF[#1GT#100]GOTO1000 該例為有條件轉(zhuǎn)移語(yǔ)句。如果條件成立,則轉(zhuǎn)移到N1000程序段執(zhí)行;如果條件不成立,則執(zhí)行下一程序段:條件表達(dá)式的種類見(jiàn)表3-7。 表3-7B類宏程序條件表達(dá)式的種類 注意:條件判斷中條件的表示方法 (2)循環(huán)指令循環(huán)指令格式為: WHlLE[條件表達(dá)式]DOm(m=l、2、3…) …… ENDm: 當(dāng)條件滿足時(shí),就循環(huán)執(zhí)行WHlLE與END之間的程序段m次;當(dāng)條件不滿足時(shí),就執(zhí)行ENDm的下一個(gè)程序段。 5、B類宏程序編程示例 例:試用B類宏程序編寫如圖3-5所示的玩具喇叭凸模曲線的精加工程序。 圖3-5B類宏程序編程示例 實(shí)例分析:本例的精加工采用B類宏程序編程,以Z值為自變量,每次變化0.1mm、X值為應(yīng)變量,通過(guò)變量運(yùn)算計(jì)算出相應(yīng)的X值。編程時(shí)使用以下變量進(jìn)行運(yùn)算: 注:宏程序編程時(shí),首先要找出各點(diǎn)X坐標(biāo)和Z坐標(biāo)之間的對(duì)應(yīng)關(guān)系。 #101為方程中的Z坐標(biāo)(起點(diǎn)Z=72); #102為方程中的X坐標(biāo)(起點(diǎn)半徑值X=3.5); #103為工件坐標(biāo)系中的Z坐標(biāo),#103=#101-72.0; #104為工件坐標(biāo)系中的X坐標(biāo),#104=R2×2; 精加工程序如下: 0420 …… G00X9.0Z2.0;宏程序起點(diǎn) #101=72.0: #102=3.5: N100#103=#10l-72.O;跳轉(zhuǎn)目標(biāo)程序段 #104=#102×2; C01X#104Z#103; #101=#101-0.1;Z坐標(biāo)每次增量-0.1mm #102=36/#101+3;變量運(yùn)算出X坐標(biāo) IF[#101GE2.0]GOTO100;有條件跳轉(zhuǎn) G28U0W0; M30: 二、編程實(shí)例 例:試用B類宏程序編寫圖3-6所示繞線筒曲線輪廓的數(shù)控車床加工程序。 圖3-6應(yīng)用B類宏程序的示件 本例編程與加工思路:本課題的精加工輪廓采用B類宏程序編程。由于宏程序編程中不能使用復(fù)合固定循環(huán)。因此,本課題粗加工時(shí),采用坐標(biāo)平移指令(G52)編寫出類似于仿形車復(fù)合循環(huán)G73指令的加工程序。其加工程序見(jiàn)表3-8。 1、實(shí)例分析 該正弦曲線由兩個(gè)周期組成,總角度為7200(-6300~900)。將沿Z軸方向?qū)⒃撉€分成1000條線段,每段直線在Z軸方向的間距為0.04mm,對(duì)應(yīng)其正弦曲線的角度增加7200/1000。根據(jù)公式,計(jì)算出曲線上每一線段終點(diǎn)的X坐標(biāo)值,X=34+6sin 。 工件粗加工時(shí),采用局部坐標(biāo)進(jìn)行編程,編程時(shí)使用以下變量進(jìn)行運(yùn)算: #100為局部坐標(biāo)系中的X坐標(biāo)變量; #10l為正弦曲線角度變量; #102為正弦曲線各點(diǎn)X坐標(biāo); #103為正弦曲線各點(diǎn)Z坐標(biāo)。 2、參考程序(見(jiàn)表3-8) 表3-8數(shù)控車床參考程序 刀具 1號(hào)刀具:350硬質(zhì)合金外圓車刀 程序段號(hào) FANUC0i系統(tǒng)程序 程序說(shuō)明 O0400; 主程序 N10 G98G40G21F100; 程序開(kāi)始部分 N20 T0101; N30 M03S800; N40 G0042.0Z-13.0; 宏程序起點(diǎn) N50 #100=10.0; 局部坐標(biāo)系X附初值 N60 N200G52X#100Z0; 局部坐標(biāo)系 N70 M98P402; 調(diào)用宏程序 N80 #100=#100-2.0; 徑向每次切深2mm N90 IF[#100GE0]GOTO200; 條件判斷 N100 G00X100.0Z100.0; 程序結(jié)束 N110 M30; O0402 曲線加工宏程序 N10 G01X40.0Z-15.0; 加工與曲線相連的直線段 N20 Z-20.0; N30 #101=90.0; 正弦曲線角度賦初值 N40 #103=-20.0; 曲線Z坐標(biāo)賦初值 N50 N300#102=34+6×SIN[#101]; 曲線X坐標(biāo) N60 G01X#102Z#102F100; 直線段擬合曲線 N70 #101=#101-0.72; 角度增量為-0.720 N80 #103=#103-0.04; Z坐標(biāo)增量為-0.04mm N90 IF[#101GE-630.0]GOTO300; 條件判斷 N100 G01X40.0Z-67.0; 加工與曲線相連的線段并退刀 N110 X42.0; N120 G00Z-13.0; N130 M99; 返回主程序 |
|