现在很多数控技术人员不懂宏程序。他们认为有了自动编程软件,就不需要学习宏程序了。其实宏程序是很强大的,比如写一些批量的,重复性的程序。使用宏程序时,只需更改少量数据。不需要做大量的重复编程,可以大大简化操作,大大提高工作效率。
宏可以使用变量进行函数的算术运算、逻辑运算和混合运算,还提供循环语句、分支语句和子程序调用语句。
一般来说,宏程序适用于图形相同但尺寸不同的系列零件的编程;适用于加工路径相同但位置参数不同的系列零件的编程;适用于抛物线、椭圆、双曲线等曲线编程。无插补指令。
01
变量的表示和使用
1.可变表示
#I(I=1,2,3,…)或# []
例如:#5、#109、#501、[# 1+# 2-12]
2.变量的使用
1)在地址字后指定变量编号或公式。
格式:#I
这里的“I”代表变量数。
例:F#103,如果#103=15,则为F15。
Z-#110,其中#110=250是Z-250。
X[#24+#18*COS[#1]]
2)变量数可以用变量代替。
例:#[#30],设#30=3为#3。
3)变量不能使用地址O,N,I。
示例:允许使用以下方法。
o # 1;
I # 2 6.00×100.0;
N # 3 Z200.0
4)对应于变量编号的变量对于每个地址具有特定的数值范围。
例:当#30=1100时,则不允许M#30。
5)#0是空变量,没有定义变量值的变量也是空变量。
6)变量值的定义:
定义程序时可以省略小数点,例如:#123=149
02
变量的类型
1.局部变量#1~#33
宏程序中局部使用的一种变量,其结果不能被其它程序使用。
示例:a宏程序b宏程序
… …
#10=20 X#10不代表X20
… …
断电后会清零,调用宏程序。
2.公共变量#100~#199,#500~#999
每个用户宏程序中的公共变量与任何程序调用具有相同的操作结果。
示例:在上面的示例中,当#10更改为#100时
X#100表示X20。
#100~#149停电后放空
#500~#531保持型变量(断电后不会丢失)
3.系统变量
一种有固定用途的变量,其值取决于系统的状态。
例:#2001的值是1号刀具的X轴补偿值。
#5221值是X轴G54工件原点的偏移值
输入时,必须输入小数点。省略小数点时,单位为μ m。
03
操作指令
公式右边可以是常量,变量,函数,公式。
其中#j和#k也可以是常数。
公式的右边是可变数字和表达式。
1.定义
#I=#j
2.算术运算
#I=#j+#k
#I=#j-#k
#I=#j*#k
#I=#j/#k
3.逻辑运算
#我=#JOK#k
#I=#JXOK#k
#我=#JAND#k
4.功能
正弦,正弦
#I=COS[#j]余弦
#I=TAN[#j]正切
#I=ATAN[#j]反正切
# I = sqrt的平方根[# j]
#I=ABS[#j]绝对值
#I=ROUND[#j]一圈又一圈。
# I =定点舍入[# j]
#I=FUP[#j]舍入
#I=BIN[#j] BCD→BIN(二进制)
#I=BCN[#j] BIN→BCD
1)角度单位是度。
例:90度和30度除以90.5度
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=固定[#1],则#3=1.0
如果#3=FUP[#2],#3=-2.0
如果#3=固定[#2],则#3=-1.0
5)在指示函数时,只能写前两个字母。
示例:圆形→圆形
修复→FI
6)优先级
函数→乘法和除法(*、1和)→加法和减法(+、-或、异或)
例:# 1 = # 2+# 3 * sin[# 4];
7)括号是中间括号,最多5个权重。括号用于注释语句。
例:# 1 = sin[[# 2+# 3]* # 4+# 5]* # 6];(三倍)
04
和转移循环指令
1.无条件转移
格式:GOTO n;;
无条件转移到程序段n
n:程序段号(1-99999)
n也可以用变量或表达式代替。
GOTO10
转到# 10;
2.有条件转移
IF[]GOTO n;
如果是,下一个操作将转移到程序段号为n的程序段。
如果没有,执行下一个程序段。
如果[]那么……;
如果是,则执行其后的宏程序语句,并且只执行一条语句。
如果[#1EQ #2]那么# 3 = 0;
条件公式:
#j和#k也可以用来代替
示例:if[# 1gt 10]goto 100;
…
N100 G00 G91 X10
例:求1到10的和。
O9500
#1=0
#2=1
N1 IF [#2 GT10]转到2
#1=#1+#2;
#2=#2+1;
转到1
N2 M30
3.流通
格式:WHILE[]DO m;;(m=1,2,3)
…
…
…
重复块
1.当条件满足时,执行DOm到ENDm,然后从DOm的程序段。
如果没有,执行ENDm后面的程序段。
2.省略WHILE语句只有DOm…ENDm,从DOm到ENDm形成一个无限循环。
3.嵌套
4.当4。EQ NE,null和“0”是不同的。
否则,null和“0”是相同的。
例:求1到10的和。
O0001
#1=0;
#2=1;
而[# 2le 10]DO1;
#1=#1+#2;
#2=#2+#1;
END1
M30