宏程序.docx

上传人:b****5 文档编号:12305232 上传时间:2023-04-18 格式:DOCX 页数:59 大小:1.30MB
下载 相关 举报
宏程序.docx_第1页
第1页 / 共59页
宏程序.docx_第2页
第2页 / 共59页
宏程序.docx_第3页
第3页 / 共59页
宏程序.docx_第4页
第4页 / 共59页
宏程序.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

宏程序.docx

《宏程序.docx》由会员分享,可在线阅读,更多相关《宏程序.docx(59页珍藏版)》请在冰豆网上搜索。

宏程序.docx

宏程序

宏程序

数控程序中含有变量的程序称为宏程序。

虽然子程序对编制相同的加工程序非常有用,但用户宏程序由于允许使用变量、算术和逻辑运算及条件转移,使得编制同样的加工程序更简便。

例如型腔加工宏程序和用户开发固定循环。

使用时,加工程序可用一条简单指令调出用户宏程序,和调用子程序完全一样。

1.1变量

普通加工程序直接用数值指定G代码和移动距离;例如,G01和X100.0。

使用用户宏程序时,数值可以直接指定或用变量指定。

当用变量时,变量值可用程序或用MDI面板操作改变。

#1=#2+100;

G01X#1F300;

 说明变量的表示

一般编程方法允许对变量命名,但用户宏程序不行。

变量用变量符号(#)和后面的变量号指定。

例如:

#1

表达式可以用于指定变量号。

此时,表达式必须封闭在括号中。

例如:

#[#1+#2-12]

变量的类型

变量根据变量号可以分成四种类型。

变量值的范围

局部变量和公共变量可以为0值或下面范围中的值:

-1047到-10-29

或10-29到1047

如果计算结果超出有效范围,则发出P/S报警No.111

小数点的省略当在程序中定义变量值时,小数点可以省略。

例:

当定义#1=123;变量#1的实际值是123.000。

 

变量的引用

在地址后指定变量号即可引用其变量值。

当用表达式指定变量时,要把表达式放在括号中。

例如:

G01X[#1+#2]F#3;

被引用变量的值根据地址的最小设定单位自动地舍入。

例如:

当系统的最小输入增量为1/1000mm单位,指令G00X#1,并将

12.3456赋值给变量#1,实际指令值为G00X12.346;。

改变引用变量的值的符号,要把负号(—)放在#的前面。

例如:

G00X—#1;

当引用未定义的变量时,变量及地址字都被忽略。

例如:

当变量#1的值是0,并且变量#2的值是空时,G00X#1Y#2的执行结果为G00X0;。

双轨迹(双轨迹控制)的公共变量

对双轨迹控制,系统为每一轨迹都提供了单独的宏变量。

但是,根据参数No.6036和6037的设定,某些公共变量可同时用于两个轨迹。

未定义的变量

当变量值未定义时,这样的变量成为“空”变量。

变量#0总是空变量。

它不能写,只能读。

(a)引用

当引用一个未定义的变量时,地址本身也被忽略。

(b)运算

除了用<空>赋值以外,其余情况下<空>与0相同。

当变量值是空白时,变量是空。

符号********表示溢出(当变量的绝对值大于99999999时)或下溢出(当变量的绝对值小于0.0000001时)。

 限制程序号,顺序号和任选程序段跳转号不能使用变量。

例:

下面情况不能使用变量:

○#1;

/#2G00X100.0;

N#3Y200.0;

1.2系统变量

系统变量用于读和写NC内部数据,例如,刀具偏置值和当前位置数据。

但是,某些系统变量只能读。

系统变量是自动控制和通用程序开发的基础。

说明接口信号是可编程机床控制器(PMC)和用户宏程序之间交换的信号。

刀具补偿值用系统变量可以读和写刀具补偿值。

可使用的变量数取决于刀补数,是否区分外形补偿和磨损补偿以及是否区分刀长补偿和刀尖补偿。

当偏置组数小于等于200时,也可使用#2001~#2400。

宏程序报警

例:

#3000=1(TOOLNOTFOUND)

→报警屏幕上显示“3001TOOLNOTFOUND”(刀具未找到)

 停止和信息显示程序停止执行并显示信息。

 时间信息时间信息可以读和写。

自动运行控制可以改变自动运行的控制状态。

·当电源接通时,该变量的值为0。

·当单程序段停止无效时,即使单程序段开关设为ON,也不执行单程序段停止。

·当指定不等待辅助功能(M,S和T功能)完成时,在辅助功能完成之前,程序即执行到下一程序段。

而且分配完成信号DEN不输出。

·当电源接通时,该变量的值为0。

·当进给暂停无效时:

(1)当进给暂停按钮被按下时,机床以单段停止方式停止。

但是,当用变量#3003使单程序段方式无效时,单程序段停止不执行。

(2)当进给暂停按钮压下又松开时,进给暂停灯亮,但是,机床不停止;程序继续执行,并且机床停在进给暂停有效的第一个程序段。

·当进给速度倍率无效时,倍率总为100%,而不管机床操作面板上的进给速度倍率开关的设置。

·当准确停止检测无效时,即使那些不执行切削的程序段也不进行准确停止检测(位置检测)

 SETTING值SETTING值可用变量读和写。

二进制数转换为十进制数。

镜像使用外部开关或SETTING操作设置的各轴镜像状态可以通过输出信号(镜像检测信号)读出。

可以检测当前的镜像状态(见III—4.6节)。

得到的二进制值转换成十进制。

·当用镜像信号和SETTING两者对某轴设置镜像功能时,信号值和设定值相或,然后输出。

·当控制轴以外的轴的镜像功能接通时,它们也被读进系统变量#3007。

·系统变量#3007是写保护的系统变量。

如果试图在变量中写数据,则发出P/S116报警“WRITEPROTECTEDVARIABLE”。

 

已加工的零件数要求的零件数(目标数)和已加工的零件数(完成数)可以读和写。

 模态信息

正在处理的程序段之前的模态信息可以读出。

例:

当执行#1=#4002;时,在#1中得到的值是17,18或19。

对于不能使用的G代码组,如果指定系统变量读取相应的模态信息,则发出P/S报警。

 当前位置位置信息不能写,只能读。

·第1位代表轴号(从1到3)。

·变量#5081~#5083存储的刀具长度补偿值是当前的执行值,不是后面程序段的处理值。

·在G31(跳转功能)程序段中跳转信号接通时的刀具位置储存在变量#5061到#5063中。

当G31程序段中的跳转信号未接通时,这些变量中储存指定程序段的终点值。

·移动期间不能读是指由于缓冲(预读)功能的原因,不能读期望值。

 工件坐标系补偿值

工件零点偏移值的系统变量(工件零点偏移值)

可以使用以下变量

 1.3算术和逻辑运算

表15.3(a)中列出的运算可以在变量中执行。

运算符右边的表达式可包

含常量和/或由函数或运算符组成的变量。

表达式中的变量#j和#k可以用常数替换。

左边的变量也可以用表达式赋值。

表15.3(a)算术和逻辑运算

 角度单位函数SIN,COS,ASIN,ACOS,TAN和ATAN的角度单位是度。

如90°30ˊ表示为90.5度。

ARCSIN#i=ASIN[#j]􀁺取值范围如下:

当参数(No.6004#0)NAT位设为0时,270°~90°

当参数(No.6004#0)NAT位设为1时,-90°~90°

当#j超出-1到1的范围时,发出P/S报警No.111。

常数可替代变量#j。

ARCCOS#i=ACOS[#j]􀁺取值范围从180°~0°。

当#j超出-1到1的范围时,发出P/S报警No.111。

常数可以替代变量#j

ARCTAN·指定两个边的长度,并用斜杠(/)分开。

#i=ATAN[#j]/[#k];·取值范围如下:

当NAT位(参数No.6004,#0)设为0时:

0°到360°

[例如]当指定#1=ATAN[-1]/[-1];时,#1=225°。

当NAT位(参数No.6004,#0)设为1时,-180°到180°

[例如]当指定#1=ATAN[-1]/[-1];时,#1=-135.0°。

·常数可以代替变量#j。

·注意,相对误差可能大于10-8。

自然对数#i=LN[#j];

·当反对数(#j)为0或小于0时,发出P/S报警No.111。

·常数可以代替变量#j。

·注意,相对误差可能大于10-8。

指数函数#i=EXP[#j]

·当运算结果超过3.65×1047(大约是110)时,出现溢出并发出P/S报警No.111。

·常数可以代替变量#j。

ROUND(舍入)函数·当算术运算或逻辑运算指令IF或WHILE中包含ROUND函数时,则ROUND函数在第1个小数位置四舍五入。

例:

当执行#1=ROUND[#2];时,此处#2=1.2345,变量1的值是1.0。

·当在NC语句地址中使用ROUND函数时,ROUND函数根据地址的最小设定单位将指定值四舍五入。

例:

编制钻削加工程序,按变量#1和#2的值切削,然后返回到初始位置。

假定最小设定单位是1/1000mm,变量#1是1.2345,变量#2是2.3456,

则,

G00G91X-#1;移动1.235mm

G01X-#2F300;移动2.346mm

G00X[#1+#2];由于1.2345+2.3456=3.5801,移动距离为3.580,刀具不会返回到初始位置。

该误差来自于舍入之前还是舍入之后相加。

必须指定G00

X-[ROUND[#1]+ROUND[#2]]以使刀具返回到初始位置。

上取整和下取整

CNC处理数值运算时,若操作后产生的整数绝对值大于原数的绝对值时为上取整;若小于原数的绝对值为下取整。

对于负数的处理应小心。

例如:

假设#1=1.2,#2=-1.2。

当执行#3=FUP[#1]时,2.0赋给#3。

当执行#3=FIX[#1]时,1.0赋给#3。

当执行#3=FUP[#2]时,-2.0赋给#3。

当执行#3=FIX[#2]时,-1.0赋给#3。

 算术与逻辑运算指令的缩写程序中指令函数时,函数名的前二个字符可以用于指定该函数(见Ⅲ—9.7节)。

例如:

ROUND→RO

FIX→FI

 运算次序①函数

②乘和除运算(*、/、AND)

③加和减运算(+、-、OR、XOR)

括号嵌套

括号用于改变运算次序。

括号可以使用5级,包括函数内部使用的括

号。

当超过5级时,出现P/S报警No.118。

限制

括号([,])用于封闭表达式。

注意,圆括号用于注释。

运算误差运算时,可能出现误差。

表15.3(b)运算中的误差

1相对误差取决于运算结果。

2使用两类误差的较小者。

3绝对误差是常数,而不管运算结果。

4函数TAN执行SIN/COS。

5如果SIN、COS或TAN函数的运算结果小于1.0×10-8或由于

运算精度的限制不为0的话,设定参数No.6004#1为1,则运算结果可以规算为0。

 ·变量值的精度约为8位十进制数。

当在加/减运算中处理非常大的数时,将得不到期望的结果。

例:

当试图把下面的值赋给变量#1和#2时:

#1=9876543210123.456

#2=9876543277777.777

变量值变成:

#1=9876543200000.000

#2=9876543300000.000

此时,当计算#3=#2-#1;时,结果为#3=100000.000。

(该计算的实际结果稍有误差,因为是以二进制执行的。

·还应该意识到,使用条件表达式EQ,NE,GE,GT,LE和LT时可能造成误差。

例如:

IF[#1EQ#2]的运算会受#1和#2的误差的影响,由此会造成错误的判断。

因此,应该用IF[ABS[#1-#2]LT0.001]代替上述语句,以避免两个变

量的误差。

当两个变量的差值未超过允许极限(此处为0.001)时,则认为两个

变量的值是相等的。

·使用下取整指令时应小心。

例如:

当计算#2=#1*1000,式中#1=0.002时,变量#2的结果值不是准确的

2,可能是1.99999997。

这里,当指定#3=FIX[#2]时,变量3的结果值不是2,而是1.0。

此时,可先纠正误差,再执行下取整,或是用如下的四舍五入操作,即可得到正确结果。

#3=FIX[#2+0.001]

#3=ROUND[#2]

除数当在除法或TAN[90]中指定为0的除数时,出现P/S报警No.112。

1.4宏程序语句和NC语句下面的程序段为宏程序语句:

·包含算术或逻辑运算(=)的程序段。

·包含控制语句(例如,GOTO,DO,END)的程序段。

·包含宏程序调用指令(例如,用G65,G66,G67或其它G代码,M代码调用宏程序)的程序段。

除了宏程序语句以外的任何程序段都为NC语句。

说明

􀁺与NC语句的不同·即使置于单程序段运行方式,机床也不停止。

但是,当参数No.6000#5

SBM设定为1时,在单程序段方式中,机床停止。

·在刀具半径补偿方式中宏程序语句段不做为不移动程序段处理(见

II—15.7节)。

􀁺与宏程序语句有相·含有子程序调用指令(例如,用M98或其它M代码或用T代码调用

子程序)但没有除O,N或L地址之外的其它地址指令的NC语句,

其性质与宏程序语句相同。

同性质的NC语句

·不包含除O,N,P或L以外的指令地址的程序段其性质与宏程序语句相同。

 

1.5转移和循环在程序中,使用GOTO语句和IF语句可以改变控制的流向。

有三种转移和循环操作可供使用:

无条件转移

转移到标有顺序号n的程序段。

当指定1到99999以外的顺序号时,出现P/S报警No.128。

可用表达式指定顺序号。

例:

GOTO1;

GOTO#10;

转移和循环GOTO语句(无条件转移)

IF语句(条件转移:

IF⋯THEN⋯)

WHILE语句(当⋯时循环)

GOTOn;n:

顺序号(1到99999)

条件转移(IF语句)IF之后指定条件表达式。

IF[<条件表达式>]GOTOn如果指定的条件表达式满足时,转移到标有顺序号n的程序段。

如果指定的条件表达式不满足,执行下个程序段。

IF[<条件表达式>]THEN

如果条件表达式满足,执行预先决定的宏程序语句。

只执行一个宏程序语句。

 

条件表达式

条件表达式必须包括运算符。

运算符插在两个变量中间或变量和常数中间,并且用括号([,])封闭。

表达式可以替代变量。

 运算符

运算符由2个字母组成,用于两个值的比较,以决定它们是相等还是一个值小于或大于另一个值。

注意,不能使用不等号。

示例程序下面的程序计算数值1~10的总和

○9500;

#1=0;⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯存储和的变量初值

#2=1;⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯被加数变量的初值

N1IF[#2GT10]GOTO2;⋯⋯⋯当被加数大于10时转移到N2

#1=#1+#2;⋯⋯⋯⋯⋯⋯⋯⋯⋯计算和

#2=#2+#1;⋯⋯⋯⋯⋯⋯⋯⋯⋯下一个被加数

GOTO1;⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯转到N1

N2M30;⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯程序结束

循环(WHILE语句)

在WHILE后指定一个条件表达式。

当指定条件满足时,执行从DO到END之间的程序。

否则,转到END后的程序段。

说明当指定的条件满足时,执行WHILE后从DO到END之间的程序。

否则,转而执行END之后的程序段。

与IF语句的指令格式相同。

DO后的数和END后的数为指定程序执行范围的标号,标号值为1,2,3。

若用1,2,3以外的值会产生P/S报警No.126。

嵌套

在DO—END循环中的标号(1到3)可根据需要多次使用。

但是,当程序有交叉重复循环(DO范围重叠)时,出现P/S报警No.124。

说明

无限循环

当指定DO而没有指定WHILE语句时,产生从DO到END的无限循环。

处理时间

在处理有标号转移的GOTO语句时,进行顺序号检索。

反向检索的时间要比正向检索长。

用WHILE语句实现循环可减少处理时间。

未定义的变量

在使用EQ或NE的条件表达式中,<空>和零有不同的效果。

在其它形式的条件表达式中,<空>被当作零。

示例程序下面的程序计算数值1到10的总和。

宏程序调用

用以下方法调用宏程序:

宏程序调用和子程序调用之间的差别

宏程序调用(G65)不同于子程序调用(G98),如下所述。

·用G65,可以指定自变量(数据传送到宏程序)。

M98没有该功能。

·当M98程序段包含另一个NC指令(例如,G01X100.0M98Pp)时,在指令执行之后调用子程序。

相反,G65无条件地调用宏程序。

·M98程序段包含另一个NC指令(例如,G01X100.0M98Pp)时,在单程序段方式中,机床停止。

相反,G65机床不停止。

·用G65,改变局部变量的级别。

用M98,不改变局部变量的级别。

非模态调用(G65)当指定G65时,以地址P指定的用户宏程序被调用。

数据(自变量)能传递到用户宏程序体中。

说明调用

·在G65之后,用地址P指定用户宏程序的程序号。

·当要求重复时,在地址L后指定从1到9999的重复次数。

省略L值时,认为L等于1。

·使用自变量指定,其值被赋值到相应的局部变量。

自变量指定可用两种形式的自变量指定。

自变量指定Ⅰ使用除了G,L,O,N和P以外的字母,每个字母指定一次。

自变量指定Ⅱ使用A,B,C和Ii,Ji和Ki(i为1~10)。

根据使用的字母,自动决定自变量指定的类型。

·地址G,L,N,Ο和P不能在自变量中使用。

·不需要指定的地址可以省略,对应于省略地址的局部变量为空。

·地址不需要按字母顺序指定。

但应符合字地址的格式。

I,J和K需

要按字母顺序指定。

例:

B_A_D_…J_K_正确

B_A_D_…J_I_不正确

自变量指定Ⅱ

自变量指定Ⅱ使用A,B和C各1次,I,J,K各10次。

自变量指定Ⅱ

用于传递诸如三维坐标值。

限制

格式任何自变量前必须指定G65。

自变量指定Ⅰ、Ⅱ混合使用CNC内部自动识别自变量指定Ⅰ和自变量指定Ⅱ。

如果自变量指定Ⅰ

和自变量指定Ⅱ混合指定,后指定的自变量类型有效。

小数点的位置

不带小数点的自变量,其数据单位为各地址的最小设定单位。

传递不带小数点的自变量,其值会根据机床实际的系统配置变化。

在宏程序调用中使用小数点可使程序兼容性好。

调用嵌套

调用可以嵌套4级,包括非模态调用(G65)和模态调用(G66)。

但不包括子程序调用(M98)。

局部变量的级别

·局部变量嵌套从0到4级。

·主程序是0级

·宏程序每调用1次(用G65或G66),局部变量级别加1。

前1级的局部变量值保存在CNC中。

·当宏程序执行M99时,控制返回到调用程序。

此时,局部变量级别减1,并恢复宏程序调用时保存的局部变量值。

示例程序(圆周螺纹孔)

编制一个宏程序加工轮圆上的孔。

圆周的半径为I,起始角为A,间隔为B,钻孔数为H,圆的中心是(X,Y)。

指令可以用绝对值或增量值指定。

顺时针方向钻孔时B应指定负值。

调用格式

G65P9100XxYyZzRrFfIiAaBbHh;

X:

圆心的X坐标(绝对值或增量值指定)(#24)

Y:

圆心的Y坐标(绝对值或增量值指定)(#25)

Z:

孔深(#26)

R:

趋近点坐标(#18)

F:

切削进给速度(#9)

I:

圆半径(#4)

A:

第一孔的角度(#1)

B:

增量角(指定负值时为顺时针)(#2)

H:

孔数(#11)

宏程序调用程序○0002;

G90G92X0Y0Z100.0;

G65P9100X100.0Y50.0R30.0Z-50.0F500I100.0A0B45.0H5;

M30;

宏程序

(被调用的程序)○9100;

#3=#4003;储存03组G代码

G81Z#26R#18F#9K0;(注)钻孔循环

注:

也可以使用L0

IF[#3EQ90]GOTO1;在G90方式转移到N1

#24=#5001+#24;计算圆心的X坐标

#25=#5002+#25;计算圆心的Y坐标

N1WHILE[#11GT0]DO1;直到剩余孔数为0

#5=#24+#4*COS[#1];计算X轴上的孔位

#6=#25+#4*SIN[+1];计算Y轴上的孔位

G90X#5Y#6;移动到目标位置之后执行钻孔

#1=#1+#2;更新角度

#11=#11-1;孔数-1

END1;

G#3G80;返回原始状态的G代码

M99;

变量的含义

#3:

储存03组的G代码

#5:

下个孔的X坐标

#6:

下个孔的Y坐标

模态调用(G66)

一旦发出G66则指定模态调用,即在指定轴移动的程序段后调用宏程序。

G67取消模态调用

说明

调用

·在G66之后,用地址P指定模态调用的程序号。

·当要求重复时,在地址L后指定从1到9999的重复次数。

·与非模态调用(G65)相同,自变量指定的数据传递到宏程序体中。

取消

指定G67代码后,其后面的程序段不再执行模态宏程序调用。

调用嵌套

调用可以嵌套4级。

包括非模态调用(G65)和模态调用(G66)。

但不包括子程序调用(M98)。

模态调用嵌套

在模态调用期间,指定另一个G66代码,可以嵌套模态调用。

限制

·在G66程序段中,不能调用宏程序。

·G66必须在自变量之前指定。

·在只有诸如辅助功能但无移动指令的程序段中不能调用宏程序。

·局部变量(自变量)只能在G66程序段中指定。

注意,每次执行模态调用时,不再设定局部变量。

 

示例程序用宏程序编制G81固定循环的操作。

加工程序使用模态调用。

为了简化程序,使用绝对值指定全部的钻孔数据。

调用格式

G65P9110XxYyZzRrFfLl;

X:

孔的X坐标(由绝对值指定)(#24)

Y:

孔的Y坐标(由绝对值指定)(#25)

Z:

Z点坐标(由绝对值指定)(#26)

R:

R点坐标(由绝对值指定)(#18)

F:

切削进给速度(#9)

L:

重复次数

调用宏程序的程序○0001;

G28G91X0Y0Z0;

G92X0Y0Z50.0;

G00G90X100.0Y50.0;

G66P9110Z-20.0R5.0F500;

G90X20.0Y20.0;

X50.0;

Y50.0;

X70.0Y80.0;

G67;

M30;

宏程序(被调用的程序)○9110;

#1=#4001;储存G00/G01

#2=#4003;储存G90/G91

#3=#4109;储存切削进给速度

#5=#5003;储存钻孔开始的Z坐标

G00G90Z#18;定位在R点

G01Z#26F#9;切削进给到Z点

IF[#4010EQ98]GOTO1;返回到1点

G00Z#18;定位在R点

GOTO2;

N1G00Z#5;定位在1点

N2G#1G#3F#4;恢复模态信息。

M99;

用G代码调用宏程序

在参数中设置调用宏程序的G代码,按非模态调用(G65)同样的方法调用宏程序。

 

说明在参数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1