現在很多數控技術人員都不懂宏程序,他們認為有了自動編程軟件,就不需要學習宏程序了。事實上,宏程序的功能非常強大,比如編寫一些批量、重複的程序,使用宏程序就隻需要改動幾個數據就可以了,沒有必要進行大量重複的編程,可極大簡化操作,大幅度提高工作效率。
宏程序可以使用變量進行算術運算、邏輯運算和函數的混合運算,還提供了循環語句、分支語句和子程序調用語句。
一般來說:宏程序适合圖形一樣,隻是尺寸不同的系列零件的編程;适合工藝路徑一樣,隻是位置參數不同的系列零件的編程;适合抛物線、橢圓、雙曲線等沒有插補指令的曲線編程。
01
變量的表示和使用
一、變量表示
#I(I=1,2,3,…)或#[<式子>]
1. 局部變量#1~#33
一個在宏程序中局部使用的變量,其運算結果其他程序不可使用。
例: A宏程序 B宏程序
… …
#10=20 X#10 不表示X20
… …
斷電後清空,調用宏程序時代入變量值
2. 公共變量#100~#199,#500~#999
各用戶宏程序内公用的變量 ,其運算結果任何程序調用都相同。
例:上例中#10改用#100時,B宏程序中的
X#100表示X20
#100~#149 斷電後清空
#500~#531保持型變量(斷電後不丢失)
3. 系統變量
固定用途的變量,其值取決于系統的狀态
例:#2001值為1号刀補X軸補償值
#5221值為X軸G54工件原點偏置值
入時必須輸入小數點,小數點省略時單位為μm
03
運算指令
運算式的右邊可以是常數、變量、函數、式子
式中#j,#k也可為常量
式子右邊為變量号、運算式
一、定義
#I=#j
二、 算術運算
#I=#j #k
#I=#j-#k
#I=#j*#k
#I=#j/#k
三、邏輯運算
#I=#JOK#k
#I=#JXOK#k
#I=#JAND#k
四、函數
#I=SIN[#j] 正弦
#I=COS[#j] 餘弦
#I=TAN[#j] 正切
#I=ATAN[#j] 反正切
#I=SQRT[#j] 平方根
#I=ABS[#j] 絕對值
#I=ROUND[#j] 四舍五入化整
#I=FIX[#j] 上取整
#I=FUP[#j] 下取整
#I=BIN[#j] BCD→BIN(二進制)
#I=BCN[#j] BIN→BCD
1) 角度單位為度
例:90度30分為90.5度
2) ATAN函數後的兩個邊長要用“/ ”隔開
例:#1=ATAN[1]/[-1]時,#1為了35.0
3) ROUND用于語句中的地址,按各地址的最小設定單位進行四舍五入
例:設#1=1.2345,#2=2.3456,設定單位1μm
G91 X-#1;X-1.235
X-#2 F300;X-2.346
X[#1 #2];X3.580
未返回原處,應改為
X[ROUND[#1] ROUND[#2]];
4) 取整後的絕對值比原值大為上取整,反之為下取整
例:設#1=1.2,#2=-1.2時
若#3=FUP[#1]時,則#3=2.0
若#3=FIX[#1]時,則#3=1.0
若#3=FUP[#2]時,則#3=-2.0
若#3=FIX[#2]時,則#3=-1.0
5) 指令函數時,可隻寫開頭2個字母
例:ROUND→RO
FIX→FI
6) 優先級
函數→乘除(*,1,AND)→加減( ,-,OR,XOR)
例:#1=#2 #3*SIN[#4];
7) 括号為中括号,最多5重,括号用于注釋語句
例:#1=SIN[[[#2 #3]*#4 #5]*#6];(3重)
04
轉移與循環指令
1. 無條件的轉移
格式:GOTO n;
無條件地轉移到程序段n去
n:程序段号(1-99999)
n也可用變量或表達式來代替
GOTO10;
GOTO #10;
2. 條件轉移
IF [<條件表達式>] GOTO n;
若滿足<條件表達式>,下步操作轉移到程序段号為n的程序段去。
若不滿足,執行下個程序段。
IF [<條件表達式>] THEN … ;
若滿足<條件表達式>,執行THEN後的宏程序語句,隻執行一個語句。
IF[#1EQ #2] THEN #3=0;
條件式:
#j 和#k也可用<表達式>來代替
例:IF[#1 GT 10] GOTO 100;
…
N100 G00 G91 X10;
例:求1到10之和
O9500;
#1=0
#2=1
N1 IF [#2 GT10] GOTO 2
#1=#1 #2;
#2=#2 1;
GOTO 1
N2 M30
3. 循環
格式:WHILE[<條件式>]DO m;(m=1,2,3)
…
…
…
ENDm
1.條件滿足時,執行DOm到ENDm,則從DOm的程序段
不滿足時,執行ENDm後面的程序段
2.省略WHILE語句隻有DOm…ENDm,則從DOm到ENDm之間形成死循環
3.嵌套
4.EQ NE時,空和“0”不同
其他條件下,空和“0”相同
例:求1到10之和
O0001;
#1=0;
#2=1;
WHILE [#2LE10] DO1;
#1=#1 #2;
#2=#2 #1;
END1;
M30;
,