大家都在问宏程序。其实所谓宏就是用公式来加工零件的。比如说椭圆,如果没有宏程序的话,我们要逐点算出曲线上的点,然后慢慢用直线或曲线逼近,如果是个光洁度要求很高的工件,那么需要计算的点就会很多,可是应用了宏后,我们把椭圆公式输入到系统中,然后我们给出Z坐标或X坐标并且每次加一个很小的数值,那么宏就会自动算出X坐标或Z坐标,并且进行切削。实际上宏在程序中主要起到的是运算作用。
一、FANUC系统宏程序 宏一般分为A类宏和B类宏.A类宏是以G65HxxP#xxQ#xxR#xx的格式输入的,而B类宏程序则是:
以直接的公式和语言输入的和C语言很相似在0i系统中应用比较广。由于现在B类宏程序的大量使用,很多书都进行了介绍这里我就不再重复了,但在一些老系统中,比如法兰克OTD系统中由于它的MDI键盘上没有公式符号,连最简单的等于号都没有,为此如果应用B类宏程序的话就只能在计算机上编好再通过RSN-32接口传输的数控系统中,可是如果我们没有PC机和RSN-32电缆的话怎么办呢,那么只有通过A类宏程序来进行宏程序编制了,下面我介绍一下A类宏的引用。
A类宏是用G65HxxP#xxQ#xxR#xx或G65HxxP#xxQxxRxx格式输入的xx的意思就是数值,是以um级的量输入的,比如你输入100那就是0.1MM~#xx就是变量号,关于变量号是什么意思再不知道的的话我也就没治了,不过还是教一下吧,变量号就是把数值代入到一个固定的地址中,固定的地址就是变量,一般OTD系统中有#0~#100~#149~#500~#531关闭电源时变量#100~#149被初始化成“空”,而变量#500~#531保持数据。我们如果说#100=30那么现在#100地址内的数据就是30了,就是这么简单。
1、用户宏程序 能完成某一功能的一系列指令像子程序那样存入存储器,用一个总指令来它们,使用时只需给出这个总指令就能执行其功能。
所存入的这一系列指令——用户宏程序
调用宏程序的指令————宏指令
特点:使用变量
1)变量的表示和使用
变量表示
#I(I=1,2,3,…)或#[<式子>]
例:#5,#109,#501,#[#1+#2-12]
变量的使用
地址字后面指定变量号或公式
格式:<地址字>#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#26.00×100.0;
N#3Z200.0;
4)变量号所对应的变量,对每个地址来说,都有具体数值范围
例:#30=1100时,则M#30是不允许的
5)#0为空变量,没有定义变量值的变量也是空变量
6)变量值定义 :
程序定义时可省略小数点,例:#123=149
MDI键盘输一.变量的种类
①局部变量#1~#33
一个在宏程序中局部使用的变量
例:A宏程序B宏程序
……
#10=20X#10不表示X20
……
断电后清空,调用宏程序时代入变量值
②公共变量#100~#149,#500~#531
各用户宏程序内公用的变量
例:上例中#10改用#100时,B宏程序中的
X#100表示X20
#100~#149断电后清空
#500~#531保持型变量(断电后不丢失)
③系统变量
固定用途的变量,其值取决于系统的状态
例:#2001值为1号刀补X轴补偿值
#5221值为X轴G54工件原点偏置值
入时必须输入小数点,小数点省略时单位为μm
运算指令
运算式的右边可以是常数、变量、函数、式子
式中#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”隔开
例:#1=ATAN[1]/[-1]时,#1为了35.0
3)ROUND用于语句中的地址,按各地址的最小设定单位进行四舍五入
例:设#1=1.2345,#2=2.3456,设定单位1μm
G91X-#1;X-1.235
X-#2F300;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重)
2、转移与循环指令
1)无条件的转移
格式:GOTO1;
GOTO#10;
2)条件转移
格式:IF[<条件式>]GOTOn
条件式:
#jEQ#k表示=
#jNE#k表示≠
#jGT#k表示>
#jLT#k表示<
#jGE#k表示≥
#jLE#k表示≤
例:IF[#1GT10]GOTO100;
…
N100G00691X10;
例:求1到10之和
O9500;
#1=0
#2=1
N1IF[#2GT10]GOTO2
#1=#1+#2;
#2=#2+1;
GOTO1
N2M301.循环
格式:WHILE[<条件式>]DOm;(m=1,2,3)
…
…
…
ENDm
说明:
1)条件满足时,执行DOm到ENDm,则从DOm的程序段
不满足时,执行DOm到ENDm的程序段
2)省略WHILE语句只有DOm…ENDm,则从DOm到ENDm之间形成死循环
3)嵌套
4)EQNE时,空和“0”不同
其他条件下,空和“0”相同
例:求1到10之和
二、HNC-21M数控系统 为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算、逻辑运算和函数的混合运算,此外宏程序还提供了循环语句、分支语句和子程序调用语句,利于编制各种复杂的零件加工程序,减少乃至免除手工编程时进行繁琐的数值计算,以及精简程序量。
1、宏变量及常量
1.宏变量
#0~#49当前局部变量
#50~#199全局变量
#200~#2490层局部变量
#250~#2991层局部变量
#300~#3492层局部变量
#350~#3993层局部变量
#400~#4494层局部变量
#450~#4995层局部变量
#500~#5496层局部变量
#550~#5997层局部变量
#600~#699刀具长度寄存器H0~H99
#700~#799刀具半径寄存器D0~D99#800~#899刀具寿命寄存器
2、常量
PI:圆周率π
TRUE:条件成立(真)
FALSE:条件不成立(假)
运算符与表达式
①算术运算符:+,-,*,/
②条件运算符
EQ(=),NE(≠),GT(>),
GE(≥),LT(<),LE(≤)
③逻辑运算符
AND,OR,NOT
④函数
SIN,COS,TAN,ATAN,ATAN2,
ABS,INT,SIGN,SQRT,EXP
⑤表达式
用运算符连接起来的常数,宏变量构成表达式。
例如:175/SQRT[2]*COS[55*PI/180];
#3*6GT14;
赋值语句
格式:宏变量=常数或表达式
把常数或表达式的值送给一个宏变量称为赋值。
例如:#2=175/SQRT[2]*COS[55*PI/180];
#3=124.0;
条件判别语句IF,ELSE,ENDIF
格式(i):IF条件表达式
…
ELSE
…
ENDIF
格式(ii):IF条件表达式
…
ENDIF
循环语句WHILE,ENDW
格式:WIIILE条件表达式
…
ENDW
例如:车削椭圆
%(FNAUC)
O0001
N1G00X0Z150.
N2G98
N3#24=80(短轴半径,X轴方向)
N4#26=100(长轴半径,Z轴方向)
N5#7=0.1(Z轴取点的间隔距离)
N6#1=#26+#7(Z轴方向最大值,假设为顶点)
N7#23=3.15(Z轴方向最小值)
N8WHILE[#1GT#23]DO1
N9#1=#1-#7(计算每次Z轴的坐标值)
N10IF[#1GT#23]GOTO12
N11#1=#23(最后一次把Z轴终点坐标赋值给#1)
N12#3=2*#24*SQRT[1-[#1*#1]/[#26*#26]](X轴坐标值计算,此处按直径编程)
N13G01X#3Z#1F100
N14END1
N15M30
%
%0001(华中系统)
N1M03S1000T0101
N2G00X20Z5
N3#21=100(长轴半径,Z轴方向)
N4WHILE#21GT[-100]
N5#20=0.8*SQRT[100-#21*#21](计算每次X轴的坐标值)
N6G01X[#20*2]Z[#21]F100(加工椭圆)
N7#21=#21-0.05(计算每次Z轴的坐标值)
N8ENDW
N9M30