- 從零開始學(xué)數(shù)控編程與操作
- 徐衡編著
- 11字
- 2021-12-23 10:02:04
第3章?子程序與宏程序
3.1 子程序與宏程序基礎(chǔ)
3.1.1 子程序
(1)子程序的概念
在一個(gè)加工程序中,若有幾個(gè)完全相同的部分程序(即一個(gè)零件中有幾處形狀相同,或刀具運(yùn)動(dòng)軌跡相同),可以把這部分程序單獨(dú)抽出,編成子程序存在存儲(chǔ)器中,需要使用時(shí)加工程序用一條簡單指令即可調(diào)出應(yīng)用,從而簡化編程。
(2)子程序的結(jié)構(gòu)
O××××; 子程序號
… 子程序內(nèi)容
M99; 子程序結(jié)束,從子程序返回到主程序,是子程序最后一個(gè)程序段
(3)調(diào)用子程序指令
調(diào)用子程序的指令是:M98 P×××× ××××;
地址“P”后的前1~4位數(shù)字為子程序重復(fù)調(diào)用次數(shù),省略時(shí)默認(rèn)為調(diào)用一次。后四位數(shù)字(必須4位)為子程序號。即:

例如:調(diào)用子程序指令:
M98 P61020; 調(diào)用1020號子程序,重復(fù)調(diào)用6次(執(zhí)行6次)
M98 P1020; 調(diào)用1020號子程序,調(diào)用1次(執(zhí)行1次)
M98 P5001020; 調(diào)用1020號子程序,重復(fù)調(diào)用500次(執(zhí)行500次)
允許重復(fù)調(diào)用子程序最多999次。為與自動(dòng)編程系統(tǒng)兼容,在子程序中的第1個(gè)程序段順序號——“N××××”,可以用來替代地址“O”后的子程序號,即用子程序中的第1個(gè)程序段的順序號作為子程序號。
主程序調(diào)用子程序的執(zhí)行順序如圖3?1所示。

圖3?1 主程序調(diào)用子程序的執(zhí)行順序
子程序可以由主程序調(diào)用,被調(diào)用的子程序也可以調(diào)用另一個(gè)子程序,稱為子程序嵌套。被主程序調(diào)用的子程序稱為一級子程序,被一級子程序調(diào)用的子程序稱為二級子程序,以此類推。子程序調(diào)用,可以嵌套4級,如圖3?2所示。

圖3?2 子程序嵌套
(4)從子程序返回
M99是子程序結(jié)束指令,該指令使執(zhí)行順序從子程序返回到主程序中調(diào)用子程序段之后的程序段,該指令可以不作為獨(dú)立的程序段編寫,例如:“G00 X100.0 Y100.0 M99;”。
(5)只使用子程序
調(diào)試子程序時(shí),希望能夠單獨(dú)運(yùn)行子程序,用MDI檢索到子程序的開頭,就可以單獨(dú)執(zhí)行子程序。此時(shí)如果執(zhí)行包含M99的程序段,則返回到子程序的開頭重復(fù)執(zhí)行;如果執(zhí)行包含“M99 Pn”的程序段,則返回到在子程序中順序號為n的程序段重復(fù)執(zhí)行。要結(jié)束這個(gè)程序,必須插入包含“/M02”?或“/M30”的程序段,并且把任選程序段開關(guān)設(shè)為斷開(OFF),如圖3?3所示。

圖3?3 單獨(dú)運(yùn)行子程序
3.1.2 用戶宏程序
宏程序是數(shù)控系統(tǒng)廠家面向客戶提供的二次開發(fā)工具,是數(shù)控機(jī)床編程的最高級手工方式,合理有效地利用這個(gè)工具將極大地提升機(jī)床的加工能力。
普通程序中指令和數(shù)據(jù)均為常量,一個(gè)程序只能描述一個(gè)幾何形狀,普通程序不允許使用變量,程序只能按程序段排列的順序運(yùn)行。用戶宏程序中允許使用常量、變量、算術(shù)、邏輯運(yùn)算和條件轉(zhuǎn)移,所以宏程序能夠控制程序運(yùn)行的流向,實(shí)現(xiàn)程序段運(yùn)行次序的轉(zhuǎn)移和循環(huán)功能。宏程序與子程序類似,可以被任一個(gè)數(shù)控程序調(diào)用。編制相同加工操作的程序時(shí),可將相同加工操作編為通用程序,如型腔加工宏程序、固定加工循環(huán)宏程序等,加工程序中需要該類加工時(shí)只需用一條指令調(diào)出用戶宏程序,和調(diào)用子程序完全一樣,如圖3?4所示。

圖3?4 加工程序中調(diào)用宏程序
用戶宏程序分為A、B兩類。通常情況下,FANUC 0D系統(tǒng)采用A類宏程序,而FANUC 0i系統(tǒng)則采用B類宏程序。A類宏程序功能不直觀,可讀性差,在實(shí)際工作中很少使用。由于絕大部分FANUC系統(tǒng)支持B類宏程序,所以,本書以B類宏程序?yàn)榛A(chǔ),闡述宏程序知識與應(yīng)用。
3.1.3 常量、變量
普通程序中指令和數(shù)據(jù)均為常量,即用數(shù)值指定G代碼和移動(dòng)距離,例如程序段:
G00 X150.0;
使用變量的宏程序編寫該程序段:
N10 #1=150.0; #1是一個(gè)變量
N20 G00 X[#1]; #1是一個(gè)變量
上述程序中,#1是變量,N20程序段中用變量代替了常量(距離150mm),實(shí)際上變量還可以代替刀補(bǔ)號、G指令編號等數(shù)據(jù)。用戶宏程序中數(shù)據(jù)可以用常量直接指定,也允許用變量指定。變量值可用程序賦值,或通過MDI面板上的操作改變變量的值。變量的使用給程序的設(shè)計(jì)帶來了極大的靈活性。
(1)變量的表示形式
宏程序中,用“#”號后面緊跟1~4位數(shù)字表示一個(gè)變量,如#1,#50,#101是變量。其中“#”號是變量符號,數(shù)字是變量號。
變量號可以用表達(dá)式指定,此時(shí)表達(dá)式必須放在括號中,例如變量:#[#1+#2-12],其中:

使用變量前,變量必須帶有正確的值。如下述宏程序:
#1=25; 使#1為25
G01 X[#1]; 表示G01 X25
#1=110; 運(yùn)行過程中可以隨時(shí)改變#1的值
G01 X[#1]; 表示G01 X110
(2)變量類型
變量根據(jù)變量號可以分成以下四種類型。
① 空變量。#0為空變量,該變量總為空,不能賦值。
② 局部變量。編號#1~#33的變量為局部變量,局部變量的作用范圍是當(dāng)前程序(在同一個(gè)程序號內(nèi)),如果在主程序或不同子程序里,出現(xiàn)了相同名稱(編號)的局部變量,它們不會(huì)相互干擾,值也可以不同。系統(tǒng)斷電后,局部變量數(shù)據(jù)初始化為空。舉例如下。
O100;
N10 #3=30; 主程序中變量#3為30
M98 P101; 進(jìn)入子程序后變量#3不受影響
#4=#3; #3仍為30,所以#4=30
M30;
O101;
#4=#3; 這里的#3不是主程序中的#3,所以#3=0(沒定義),則:#4=0
#3=18; 這里使#3的值為18,不會(huì)影響主程序中的#3
M99;
③ 公共變量。#100~#199、#500~#999為公共變量。公共變量在不同的宏程序中意義相同,作用范圍是整個(gè)零件程序,即不管是主程序還是子程序,只要名稱(編號)相同就是同一個(gè)變量,帶有相同的值,在某個(gè)地方修改它的值,所有其他地方都受影響。當(dāng)斷電時(shí),變量#100~#199被初始化為空,變量#500~#999的數(shù)據(jù)不會(huì)丟失。例:
O1100; 主程序號
N10 #120=30; 使#120為30
M98 P101; 進(jìn)入子程序(注:在子程序O101中#120為18)
#4=#120; 由子程序O101返回,#120變?yōu)?8,所以此時(shí)#4=18
M30; 程序結(jié)束
O101; 子程序號
#4=#120; #120的值在子程序里也有效,所以#4=30
#120=18; 這里使#120=18,然后返回
M99; 子程序結(jié)束
④ 系統(tǒng)變量。#1000以上的變量為系統(tǒng)變量,系統(tǒng)變量用于讀和寫CNC運(yùn)行時(shí)的各種數(shù)據(jù),如刀具的當(dāng)前位置和補(bǔ)償值等。系統(tǒng)變量是數(shù)控系統(tǒng)內(nèi)部定義好了的,用戶不可以改變它們的用途。系統(tǒng)變量是全局變量,使用時(shí)可以直接調(diào)用。
(3)變量的引用
① 為了在程序中使用變量,必須在程序中指定變量號的地址,給變量賦值。沒指定的變量地址為無效變量。
② 當(dāng)用表達(dá)式指定變量時(shí),必須把表達(dá)式放在括號中。例如“G01 X[#1+#2] F#3”。
③ 被引用變量的值根據(jù)地址最小設(shè)定單位自動(dòng)地舍入。例如指令“G00 X#1”,X地址最小設(shè)定單位為1/1000mm,當(dāng)CNC把“12.3456”賦值給變量#1,實(shí)際指令值為“G00 X12.346”。
④ 改變引用變量值的符號,要把負(fù)號“?”放在“#”的前面。例如“G00 X?#1”。
⑤ 當(dāng)引用未指定的變量時(shí)變量及地址字都被忽略,或稱沒指定的變量為空變量。
例如,當(dāng)變量#1的值是0,并且變量#2的值是空時(shí),“G00 X#1 Y#2”的執(zhí)行結(jié)果為“G00 X0”。
注意“變量的值是0”和“變量的值是空”是不同的,“變量的值是0”是指把0賦值給某變量,所以該變量的值等于數(shù)值0,而“變量的值是空”指該變量所對應(yīng)的地址不存在,是無效的變量。
(4)變量值的精度
變量值的精度為8位十進(jìn)制數(shù)。
例如,用賦值語句#1=9876543210123.456時(shí),實(shí)際上#1=9876543200000.000。
用賦值語句#2=9876543277777.456時(shí),實(shí)際上#1=9876543300000.000。
(5)賦值
把常數(shù)或表達(dá)式的值送給一個(gè)宏變量稱為賦值,賦值號為:“=”。
格式:宏變量 = 常數(shù)或表達(dá)式。例如:
#2 =SQRT[2]?*COS[55 *PI/180 ]
#3 = 124.0
#50 =?#3+12
賦值號后面的表達(dá)式里可以包含變量自身,如:#1=#1+4,該表達(dá)式是把#1的值與4相加,結(jié)果賦給#1。這不是數(shù)學(xué)中的方程或等式,如果#1的值是2,執(zhí)行#1 = #1+4后,#1的值變?yōu)?。
(6)變量限制
程序號、順序號和任選程序段跳轉(zhuǎn)號不能使用變量,例如在以下方式中不可使用變量:
O#1
/#2 G00 X100.0
N#3 Z200.0
3.1.4 變量的算術(shù)和函數(shù)運(yùn)算
(1)算術(shù)運(yùn)算符
變量算術(shù)運(yùn)算符:“+”“-”“*”“/”。
(2)函數(shù)
宏程序中的變量可以進(jìn)行函數(shù)運(yùn)算,函數(shù)運(yùn)算符:SIN(正弦)、COS(余弦)、TAN(正切)、ATAN(反正切-π/2~π/2)、ABS(絕對值)、INT(取整)、SIGN(取符號)、SQRT(開方)、EXP(指數(shù))。
(3)表達(dá)式
用運(yùn)算符連接起來的常數(shù)、宏變量構(gòu)成表達(dá)式。例如:
175/SQRT[2]?*COS[55 *PI/180];
#3 *6 GT 14;
表達(dá)式中用方括號表示運(yùn)算順序。宏程序中不用圓括號,規(guī)定圓括號中的內(nèi)容是注釋。
(4)運(yùn)算符的優(yōu)先級
運(yùn)算符優(yōu)先級順序依次為:方括號→函數(shù)→乘除→加減→條件→邏輯。
宏程序中的變量可以進(jìn)行算術(shù)運(yùn)算和函數(shù)運(yùn)算,如表3?1所示。
表3?1 算術(shù)與函數(shù)運(yùn)算功能


3.1.5 宏程序語句和NC語句
下面的程序段為宏程序語句。
?包含算術(shù)或邏輯運(yùn)算(=)的程序段。
?包含控制語句(例如:GOTO,DO,END)的程序段。
?包含宏程序調(diào)用指令(例如:用G65,G66,G67或其他G代碼、M代碼調(diào)用宏程序)的程序段。
除了宏程序語句以外的任何程序段都為NC語句。
3.1.6 轉(zhuǎn)移和循環(huán)
(1)條件運(yùn)算符
條件運(yùn)算符用在程序流程控制IF和WHILE的條件表達(dá)式中,作為判斷兩個(gè)表達(dá)式大小關(guān)系的連接符。條件運(yùn)算符:

注: EQ—equal;NE—not equal;GT—greater than;GE—greater than or equal;LT—less than;LE—less than or equal。
(2)邏輯運(yùn)算符
在IF或WHILE語句中,如果有多個(gè)條件,用邏輯運(yùn)算符來連接多個(gè)條件。邏輯運(yùn)算符:
AND (且):多個(gè)條件同時(shí)成立才成立;
OR(或):多個(gè)條件只要有一個(gè)成立即可;
NOT(非):取反(如果不是)。
例如:
#1 LT 50 AND?#1 GT 20 表示:[#1<50]且[#1>20]
#3 EQ 8 OR?#4 LE 10 表示:[#3=8]或者[#4≤10]
有多個(gè)邏輯運(yùn)算符時(shí),可以用方括號來表示結(jié)合順序,如:
NOT[#1 LT 50 AND?#1GT 20] 表示:如果不是“#1<50 且?#1>20”
(3)轉(zhuǎn)移和循環(huán)
數(shù)控程序一般按程序段排列的先后順序運(yùn)行,稱為順序程序結(jié)構(gòu),在宏程序中使用GOTO語句和IF語句,可以控制程序運(yùn)行的流向,實(shí)現(xiàn)程序段運(yùn)行次序的轉(zhuǎn)移和循環(huán)功能,稱為分支程序結(jié)構(gòu)和循環(huán)程序結(jié)構(gòu)。有三種轉(zhuǎn)移和循環(huán)指令,即:
① GOTO語句。無條件轉(zhuǎn)移。
② IF語句。條件轉(zhuǎn)移,“IF…THEN…”。
③ WHILE語句。循環(huán)語句,當(dāng)…時(shí)循環(huán)。
(4)無條件轉(zhuǎn)移(GOTO)
格式:GOTOn;
n為順序號(1~9999)。
轉(zhuǎn)移到標(biāo)有順序號n的程序段,當(dāng)指定1~9999以外的順序號時(shí),出現(xiàn)P/S報(bào)警NO.128。
例如:GOTO6;
…
語句組:N6 G00 X100;
執(zhí)行GOTO6語句時(shí),轉(zhuǎn)去執(zhí)行標(biāo)號為N6的程序段。
可用表達(dá)式指定順序號,例如:GOTO?#10。
(5)條件轉(zhuǎn)移(IF)
格式:IF[關(guān)系表達(dá)式]?GOTOn;
例如,“IF[#1 GT 210]?GOTO2;”。
…
語句組:N2 G00 G91 X10.0;
…
解釋:如果變量#1的值大于20,轉(zhuǎn)移執(zhí)行標(biāo)號為N2的程序段,否則按順序執(zhí)行GOTO2下面的語句組,如圖3?5所示。

圖3?5 “IF[關(guān)系表達(dá)式] GOTOn”語句
(6)條件轉(zhuǎn)移(IF…THEN…)
格式:IF[條件表達(dá)式]?THEN (注:THEN后只能跟一個(gè)語句)
如果條件表達(dá)式滿足,執(zhí)行預(yù)先定義的宏程序語句,只執(zhí)行一個(gè)宏程序語句。
例如,“IF[#1 EQ?#2]?THEN?#3=0;”。
當(dāng)#1的值等于#2的值時(shí),將0賦給變量#3。
例3?1:編宏程序,計(jì)算自然數(shù)1到10的累加總和,宏程序如下。
O6000; 宏程序名
#1=0; 存儲(chǔ)和數(shù)變量的初值
#2=1; 被加數(shù)變量的初值
N1 IF[#2 GT 10]?GOTO2; 當(dāng)被加數(shù)大于10時(shí)轉(zhuǎn)移到N2
#1=#1+#2; 計(jì)算累加和數(shù)(該語句為累加器)
#2=#2+1; 下一個(gè)被加數(shù)(該語句為計(jì)數(shù)器)
GOTO1; 轉(zhuǎn)到標(biāo)號N1段
N2 M30; 程序結(jié)束
(7)循環(huán)(WHILE)
格式:WHILE[關(guān)系表達(dá)式]?DOm;(m=1,2,3)
循環(huán)區(qū)語句組;
END?m;
在WHILE 后指定一個(gè)條件表達(dá)式,當(dāng)指定條件滿足時(shí),執(zhí)行從DO 到END之間的程序,否則轉(zhuǎn)去執(zhí)行END后面的程序段,如圖3?6所示。DO后的m和END后的m,是指定程序執(zhí)行范圍的標(biāo)號,m標(biāo)號值為1、2、3,m若用1、2、3 以外的值會(huì)產(chǎn)生P/S報(bào)警NO.126。

圖3?6 WHILE語句執(zhí)行順序
例如宏程序:
#1=5;
WHILE[#1 LE 30]?DO1;
#1=#1+5;
G00 X#1 Y#1;
END1;
M99;
上述宏程序含義:當(dāng)變量#1的值小于等于30時(shí),執(zhí)行循環(huán)程序,當(dāng)#1大于30時(shí)結(jié)束循環(huán)返回主程序。
例3?2:用WHILE語句編宏程序,計(jì)算自然數(shù)1~10的累加總和。
宏程序如下。
O3000; 宏程序名
#1=0; 存儲(chǔ)和數(shù)變量的初值
#2=1; 被加數(shù)變量的初值
WHILE[#2 LE 10]?DO1; 當(dāng)被加數(shù)小于10時(shí)執(zhí)行循環(huán)區(qū)程序
#1=#1+#2; 計(jì)算累加和數(shù)(該語句稱為累加器)
#2=#2+1; 下一個(gè)被加數(shù)(該語句稱為計(jì)數(shù)器)
END1; 循環(huán)區(qū)終止
M30; 程序結(jié)束
3.1.7 宏程序調(diào)用
調(diào)用宏程序的方法有:非模態(tài)調(diào)用(G65);模態(tài)調(diào)用(G66、G67);用G代碼調(diào)用宏程序;用M代碼調(diào)用宏程序;用M代碼調(diào)用子程序;用T代碼調(diào)用子程序。為減輕讀者負(fù)擔(dān),本書只推薦非模態(tài)調(diào)用(G65)。
(1)宏程序非模態(tài)調(diào)用G65
① 調(diào)用指令格式:
G65 P(p)?L(l)?(自變量賦值);
其中,p為調(diào)用的程序號;l為重復(fù)次數(shù);自變量賦值為傳遞到宏程序的數(shù)據(jù)。
宏程序與子程序相同,一個(gè)宏程序可被另一個(gè)宏程序調(diào)用,最多嵌套4層。
G65指令調(diào)用以地址P 指定的用戶宏程序,數(shù)據(jù)自變量能傳遞到用戶宏程序體中,調(diào)用過程如圖3?7所示。

圖3?7 宏程序非模態(tài)調(diào)用G65執(zhí)行過程
② 宏程序的開始與返回。宏程序的編寫格式與子程序相同。其格式為:
O0010;(0001~8999為宏程序號) 程序名
N10…; 程序指令
…
N30 M99; 宏程序結(jié)束
宏程序以程序號開始,以M99結(jié)束。
(2)G65指令說明
① 在G65之后用地址P指定用戶宏程序的程序號。
② 當(dāng)要求重復(fù)時(shí),在地址L后指定從1~9999 的重復(fù)次數(shù),省略L值時(shí)認(rèn)為L等于1。
③ 使用自變量指定,其值被賦值到相應(yīng)的局部變量。
(3)自變量指定
可用兩種形式的自變量指定。自變量指定Ⅰ使用除了G、L、O、N和P 以外的字母,每個(gè)字母指定一次,自變量指定Ⅱ使用A、B、C和Ii、Ji和Ki,其下標(biāo)i=1~10,系統(tǒng)根據(jù)使用的字母自動(dòng)決定自變量指定的類型。
① 自變量指定Ⅰ。表3?2為自變量指定Ⅰ的自變量與變量的對應(yīng)關(guān)系。
a.自變量指定Ⅰ中,G、L、O、N、P不能用,地址I、J、K必須按順序使用,其他地址順序無要求。
舉例:G65 P3000 L2 B4 A5 D6 J7 K8; 正確(J、K符合順序要求)
在宏程序中將會(huì)把4賦給#2,把5賦給#1,把6賦給#7,把7賦給#5,把8賦給#6。
舉例:G65 P3000 L2 B3 A4 D5 K6 J5; 不正確(J、K不符合順序要求)
b.需要指定的地址可以省略,對應(yīng)于省略地址的局部變量設(shè)為空。
c.不需要按字母順序指定,但應(yīng)符合字地址的格式。但是I、J和K需要按字母順序指定。
表3?2 自變量指定Ⅰ的變量對應(yīng)關(guān)系

② 自變量指定Ⅱ。表3?3為自變量指定Ⅱ的自變量與變量的對應(yīng)關(guān)系。自變量指定Ⅱ中使用A、B、C各1次,使用I、J、K各10次。自變量指定Ⅱ用于傳遞諸如三維坐標(biāo)值的變量。
表3?3 自變量指定Ⅱ的變量對應(yīng)關(guān)系

注:表中I、J 、K的下標(biāo)用于確定自變量指定的順序,在實(shí)際編程中不寫。
③ 自變量指定Ⅰ、Ⅱ的混合。系統(tǒng)能夠自動(dòng)識別自變量指定Ⅰ和自變量指定Ⅱ,并賦給宏程序中相應(yīng)的變量號。如果自變量指定Ⅰ和自變量指定Ⅱ混合使用,則后指定的自變量類型有效。

說明:I4.0為自變量指定Ⅱ,D為自變量指定Ⅰ,數(shù)值4.0和5.0都賦值給變量#7,但后者有效,所以變量#7中為5.0,而不是4.0。
④ 小數(shù)點(diǎn)的位置。一個(gè)不帶小數(shù)點(diǎn)的數(shù)據(jù)在數(shù)據(jù)傳遞時(shí),其單位按其地址對應(yīng)的最小精度解釋,因此,不帶小數(shù)點(diǎn)的數(shù)據(jù),其值在傳遞時(shí)有可能根據(jù)機(jī)床的系統(tǒng)參數(shù)設(shè)置而被更改。應(yīng)養(yǎng)成在宏調(diào)用參數(shù)中使用小數(shù)點(diǎn)的好習(xí)慣,以保持程序的兼容性。
- 集裝箱運(yùn)輸管理理論與實(shí)務(wù)
- 連鎖企業(yè)促銷管理
- 酒吧服務(wù)(酒店服務(wù)與管理專業(yè)基于工作過程系統(tǒng)化系列教材)
- 外貿(mào)英語對話
- 中國民俗旅游文化(21世紀(jì)高職高專規(guī)劃教材·旅游與酒店管理系列)
- 銀行柜員基本技能(第2版)
- 商業(yè)銀行會(huì)計(jì)
- 會(huì)計(jì)學(xué)基礎(chǔ)(第2版)
- 健康評估實(shí)訓(xùn)指導(dǎo)
- 電工基礎(chǔ)
- 生產(chǎn)運(yùn)作管理(第三版)
- 餐廳技能訓(xùn)練(酒店服務(wù)與管理專業(yè)基于工作過程系統(tǒng)化系列教材)
- 團(tuán)隊(duì)管理與溝通藝術(shù)(慕課版)
- 會(huì)計(jì)綜合輪崗實(shí)訓(xùn)(第二版)
- 民航客艙服務(wù)與管理