1、第五章 用户宏程序5.1 变量普通加工程序直接用数值指定 G 代码和移动距离;例如,GO1 和 X100.0。使用用户宏程序时,数值可以直接指定或用变量指定。当用变量时,变量值可用程序或用 MDI 面板上的操作改变。12100G01 X#1 F300说明: 变量的表示 计算机允许使用变量名,用户宏程序不行。变量用变量符号()和后面的变量号指定。例如:1表达式可以用于指定变量号。此时,表达式必须封闭在括号中。例如:#1+#2-12 变量的类型变量根据变量号可以分成四种类型变量号 变量类型 功能#0 空变量 该变量总是空,没有值能赋给该变量.#1-#33 局部变量 局部变量只能用在宏程序中存储数据
2、,例如,运算结果.当断电时,局部变量被初始化为空.调用宏程序时,自变量对局部变量赋值,#100-#199#500-#999公共变量 公共变量在不同的宏程序中的意义相同.当断电时,变量#100-#199 初始化为空.变量#500-#999 的数据保存,即使断电也不丢失.#1000- 系统变量 系统变量用于读和写 CNC 运行时各种数据的变化,例如,刀具的当前位置和补偿值. 变量值的范围 局部变量和公共变量可以有 0 值或下面范围中的值:-1047到-10 -29或-10 -2到-10 47如果计算结果超出有效范围,则发出 P/S 报警 NO.111. 小数点的省略当在程序中定义变量值时,小数点可
3、以省略。例:当定义1123;变量1 的实际值是 123.000。 变量的引用 为在程序中使用变量值,指定后跟变量号的地址。当用表达式指定变量时,要把表达式放在括号中。例如:G01X#1+#2F#3;被引用变量的值根据地址的最小设定单位自动地舍入。例如:当 G00X#/;以 1/1000mm 的单位执行时,CNC 把 123456 赋值给变量#1,实际指令值为 G00X12346.改变引用变量的值的符号,要把负号()放在的前面。例如:G00X#1当引用未定义的变量时,变量及地址都被忽略。例如:当变量1 的值是 0,并且变量2 的值是空时,G00X#1 Y#2 的执行结果为 G00X0。 双轨迹(
4、双轨迹控制)的公共变量 对双轨迹控制,系统为每一轨迹都提供了单独的宏变量,但是,根据参数 N0.6036 和 6037 的设定,某些公共变量可同时用于两个轨迹。 未定义的变量 当变量值未定义时,这样的变量成为空变量。变量0 总是空变量。它不能写,只能读。(a) 引用当引用一个未定义的变量时,地址本身也被忽略。当1= 当10G90 X100 Y#1G90 X100G90 X100 Y#1G90 X100 Y0(b) 运算除了用赋值以外,其余情况下与 0 相同。当1=时 当10 时21221202*5202*52021+12021+120(c)条件表达式EQ 和 NE 中的不同于 0。当1=时 当
5、10 时1EQ0成立1EQ0不成立1 NE 0成立1 NE 0不成立1 GE 0成立1 GE 0不成立1 GT 0不成立1 GT 0不成立 限制 程序号,顺序号和任选程序段跳转号不能使用变量。例:下面情况不能使用变量:01;/2G00X100.0;N#3Y200.0;5.2 算术和逻辑运算下面表中列出的运算可以在变量中执行。运算符右边的表达式可包含常量和或由函数或运算符组成的变量。表达式中的变量j 和#k 可以用常数赋值。左边的变量也可以用表达式赋值。功能 格式 备注定义 #i=#j加法减法乘法除法#i-#j+#k;#i-#j-#k;#i-#j*#k;#i-#j/#k;正弦反正弦余弦反余弦正切
6、反正切#i=SIN#j;#i=ASIN#j;#i=COS#j;#i=ACOS#j;#i=TAN#j;#i=ATAN#j;角度以度数指定,9030表示为 90.5度。平方根绝对值舍入上取整下取整自然对数指数函数#i=SQRT#j;#i=ABS#j;#i=ROUNND#j;#i=FIX#j;#i=FUP#j;#i=LN#j;#i=EXP#j;或异或与#i-#jOR#k;#i-#jXOR#k;#i-#jAND#k;逻辑运算一位一位地按二进制数执行。从 BCD 转为 BIN从 BIN 转为 BCD#i=BIN#j;#i=BCD#j;用于与 PMC 的信号交换。说明: 角度单位 函数 SIN ,COS,
7、ASIN,ACOS,TAN 和 ATAN 的角度单位是度。如 9030表示为 90.5 度。 ARCSIN # i= ASIN#j (1)取值范围如下:当参数(NO.6004#0)NAT 位设为 0 时,27090当参数(NO.6004#0)NAT 位设为 1 时,9090(2)当#j 超出1 到 1 的范围时,发出 P/S 报警 NO.111.(3)常数可替代变量#j ARCCOS iACOS#j(1)取值范围从 1800(2)当#j 超出1 到 1 的范围时,发出 P/S 报警 NO.111.(3)常数可替代变量#j ARCTAN #i= ATAN#j/ #k(1)指定两个边的长度,并用斜
8、杠(/)分开(2)取值范围如下:当 NAT 位(参数 NO.6004,#0)设为 0 时;0到 360当 NAT 位(参数 NO.6004,#0)设为 1 时;-180到 180(3) 常数可替代变量#j 自然对数 #i=LN#j;(1) 注意,相对误差可能大于 10-8.(2) 当反对数(#j)为 0 或小于 0 时,发出 P/S 报警 NO.111.(3) 常数可替代变量#j。 指数函数 #i=EXP#j(1) 注意,相对误差可能大于 10-8。(2) 当运算结果超过 3.65X1047(j 大约是 110)时,出现溢出并发出 P/S 报警 NO.111.。(3) 常数可替代变量#j。 R
9、OUND(舍入)函数(1) 当算术运算或逻辑运算指令 IF 或 WHILE 中包含 ROUND 函数时,则 ROUND 函数在第一个小数位置四舍五入. 当执行#1= ROUND#2;此处#2=1.2345,变量 1 的值是 1.0。(2) 当在 NC 语句地址中使用 ROUND 函数时,ROUND 函数根据地址的最小设定单位将指定值四舍五入 上取整下取整CNC 处理数值运算时,若操作后产生的整数绝对值大于原数的绝对值时为上取整;若小于原数的绝对值为下整数.对于负数的处理应小心. 算术与逻辑运算指令的缩写程序中指令函数时,函数名的前两个字符可以用于指定该函数.ROUNDROFLXFI 运算次序(
10、1)函数(2)乘和除运算(3)加和减运算 括号嵌套括号用于改变运算次序,括号可以使用 5 级,包括函数内部使用的括号.当超过 5 级时,出现 P/S 报警 NO.118.限制 括号 (,)用于封闭表达式.注意,圆括号用于注释. 运算误差 运算时,可能出现误差.注: 1.相对误差取决于运算结果.2.使用两类误差的较小者.3.绝对误差是常数,而不管运算结果.4.函数 TAN 执行 SIN/COS.5.如果 SIN/COS 或 TAN 函数的运算结果小于 10X10-8或由于运算精度的限制不为 0 的话,设定参数NO.6004#1 为 1,则运算结果可以规算为 0.(1) 变量值的精度约为 8 位十
11、进制数.当在加/减速中处理非常大的数时,将得不到期望的结果.(2) 还应该意识到,使用条件表达式 EQ,NE,GE,GT.LE 和 LT 时可能造成误差.(3) 使用下取整指令时应小心. 除数 当在除法或 TAN90中指定为 0 的除数时,出现 P/S 报警 NO.1125.3 宏程序语句和 NC 语句下面的程序段为宏程序语句: 包含算术或逻辑运算(=)的程序段. 包含控制语句的程序段 包含宏程序调用指令的程序段除了宏程序以外的任何程序段都为 NC 语句.说明: 与 NC 语句的不同(1) 即使置于单程序段运行方式,机床也不停止.但是,当参数 N0.6000#5SBM 设定为 1 时,在单程序
12、段方式中,机床停止.(2) 在刀具半径补偿方式中宏程序语句段不做为不移动程序段处理. 与宏程序语句有相同性质的 NC 语句(1) 含有子程序调用指令,但没有除 O,N 或 L 地址之外的其它地址指令的 NC 语句其性质与宏程序相同.(2) 不包含除 ONP 或 L 以外的指令地址的程序段其性质与宏程序语句相同.5.4 转移和循环在程序中,使用 GOTO 语句和 IF 语句可以改变控制的流向.有三种转移和循环操作可供使用;转移和循环-GOTO 语句(无条件转移)IF 语句(条件转移)WHILE 语句(当时循环)5.4.1 无条件转移(GOTO 语句)转移到标有顺序号 n 的程序段.当指定 1 到
13、 99999 以外的顺序号时,出现 P/S 报警 NO.128.可用表达方式指定顺序号.GOTOn;n:顺序号(1 到 99999)5.4.2 条件转移(IF)语句 IF 之后指定条件表达式.IFGOTOn 如果指定的条件表达式满足时,转移到标有顺序号 n 的程序段.如果指定的条件表达式不满足,执行下个程序段.IFTHEN 如果条件表达式满足,执行预先决定的宏程序语句.只执行一个宏程序语句.说明: 条件表达式条件表达式必须包括算符.算符插在两个变量中间或变量和常数中间,并且用括号(,)封闭.表达式可以替代变量. 运算符运算符由 2 个字母组成,用于两个值的比较,以决定它们是相等还是一个值小于或
14、大于另一个值.注意,不能使用不符号.运算符 含义EQ 等于NE 不等于GT 大于GE 大于或等于LT 小于LE 小于或等于典型程序:下面的程序计算数值 1-10 的总和5.4.3 循环(WHILE 语句)在 WHILE 后指定一个条件表达式.当指定条件满足时,执行从 D0 到 END 之间的程序.否则,转到 END 后的程序段.说明:当指定的条件满足时,执行 WHILE 从 D0 到 END 之间的程序.否则,转而执行 END 之后的程序段,这种指令格式适用于IF 语句.D0 后的号和 END 后的号是指定程序执行范围的标号,标号值为 1,2,3.若用 1,2,3 以外的值会产生 P/S 报警
15、NO.126. 嵌套 在 DO-END 循环中的标号可根据需要多次使用.但是,当程序有交叉重复循环(DO 范围的重叠)时,出现 P/S 报警NO.124.说明: 无限循环 当指定 DO 而没有指定 WHILE 语句时,产生从 DO 到 END 的无限循环. 处理时间 当在 GOTO 语句中有标号转移的语句时,进行顺序号检索.反向检索的时间要比正向检索长.用WHILE 语句实现循环可减少处理时间. 未定义的变量 在使用 EQ 或 NE 的条件表达式中,和零有不同的效果,在其它形式的条件表达式中,被当作零. 典型程序 下面的程序计算数值 1 到 10 的总和.00001;#1=0;#2=1;WHI
16、LE#2LE10DO 1;09500;#1=0; 存储和数变量的初值#2=1; 被加数变量的初值N1 IF#2 GT 10GOTO 2; 当被加数大于 10 时转移到 N2#1=#1+#2; 计算和数#2=#2+#1; 下一个被加数GOTOA1; 转到 N1N2 M30 ; 程序结束#1=#1+#2;#2=#2+1;END 1;M30;5.5 宏程序调用用下面的方法调用宏程序:宏程序调用-非模态调用(G65)-模态调用(G66,G67)-用 G 代码调用宏程序-用 M 代码调用宏程序-用 M 代码调用子程序-用 T 代码调用子程序限制 用宏程序调用和子程序调用之间的差别宏程序调用用(G65)不
17、同于子程序用(G68),如下所述:(1) 用(G65),可以指定自变量(数据传送到宏程序).M98 没有该功能.(2) 当 M98 程序段包含另一个 NC 指令时,在指令执行之后调用子程序.相反,G65 无条件地调用宏程序.(3) M98 程序段包含另一个 NC 指令时,在单程序段方式中,机床停止.相反,G65 机床不停止.(4) 用 G65,改变局部变量的级别.用 M98,不改变局部变量的级别.5.5.1 非模态调用(G65)当指定 G65 时,以地址 P 指定的用户宏程序被调用.数据能传递到用户宏程序体中.说明:呼调:(1) 在 G65 之后,用地址 P 指定用户宏程序的程序号.(2) 当
18、要求重复时,在地址 L 后指定从 1 到 9999 的重复次数.省略 L 值时,认为 L 等于 1.(3) 使用自变量指定,其值被赋值到相应的局部变量. 自变量指定可用两种形式的自变量指定,自变量指定 I 使用除了 G,L,O,N 和 P 以外的字母,每个字母指定一次.自变量指定 II 使用 A,B,C 和 I,J 和 K(i 为 1-10).根据使用的字母,自动地改变自变量指定的类型.自变量指定 I 地址 变量号 地址 变量号 地址 变量号ABCDEFH#1#2#3#7#8#9#11IJKMQRS#4#5#6#13#17#18#19TUVWXYZ#20#21#22#23#24#25#26(1
19、) 地址 G,L,N,Q 和 P 不能在自变量中使用.(2) 不需要指定的地址可以省略,对应于省略地址的局部变量设为空.(3) 地址不需要按字母顺序指定,但应符合字地址的格式.但是 I,J 和 K 需要按字母顺序指定.自变量地址 II自变量指定 II 使用 A,B,和 C 各一次,I,J,K10 次.自变量指定 II 用于传递诸如三维坐标值的变量.地址 变量号 地址 变量号 地址 变量号ABCI1J1K1I2J2K2L3J3#1#2#3#4#5#6#7#8#9#10#11K3I4J4K4I5J5K5I6J6K6I7#12#13#14#15#16#17#18#19#20#21#22J7K7I8J
20、8K8I9J9K9I10J10K10#23#24#25#26#27#28#29#30#31#32#33I,J,K 的下标用于确定自变量指定的顺序,在实际编程中不写.限制: 格式: 任何自变量前必须指定 G65 自变量指定 I,II 的混合 CNC 内部自动识别自变量指定 I自变量指定 II.如果自变量指定 I 和自变量指定 II 混合指定的话,后指定的自变量类型有效. 小数点的位置 没有小数点的自变量数据的单位为各地址的最小设定单位.传递的没有小数点的自变量的值根据机床实际的系统配置变化.在宏程序调用中使用小数点可使程序兼容性好. 调用嵌套:调用可以嵌套 4 级,包括非模态调用(G95)和模态
21、调用(G66).但不包括子程序调用(M98). 局部变量的级别 :1.局部变量嵌套从 0 到 4 级.2.主程序是 0 级.3.宏程序每调用 1 次,局部变量级别加 1.前 1 级的局部变量值保存在 CNC 中.4.当宏程序中执行 M99 时,控制返回到调用的程序.此时,局部变量级别减 1;并恢复宏程序调用时保存的局部变量值. 典型程序: 编制一个宏程序加工轮圆上的孔.圆周的半径为 I.起始角为 A,间隔为 B,钻孔数为 H,圆的中心是(X,Y)指令可以用绝对值或增加量指定.顺时针方向钻孔时 B 应指定负值. 调用格式:G95 P9100 Xx Yy Zz Rr Li Aa Bb Hh ;X:
22、圆心的 X 坐标(绝对值或增量值的指定)(#24)Y:圆心的 Y 坐标(绝对值或增量值的指定)(#25)Z:孔深(#26)R:快速趋近点坐标(#18)F:切削进给速度(#9)I:圆半径(#4)A:第一孔的角度(#1)B:增量角(指定负值时为顺时针)(#2)H:孔数(#11) 宏程序调用程序:O0002;G90 G92 X0 Y0 Z100,0;G65 p9100 X100 Y50.0 R30.0 Z50.0 500 I100.0 A0 B45.0 H5;M30; 宏程序09100;#3=#4003;存储 03 组 G 代码G81 Z#26 R#18 F#9 K0;(注)钻孔循环注:也可以使用
23、L0IF#3 EQ 90 GOTO 1;在 G90 方式转移到 N1#24=#5001+#24;计算圆心的 X 坐标#25=#5001+#25;计算圆心的 Y 坐标N1 WHILE#11 GT O DO 1;直到剩余孔数为 0#5=#24+#4*COS#1;计算 X 轴上的孔位#6=#25+#4*SIN+1; 计算 X 轴上的孔位G90 X#5 Y#6 ;移动到目标位置之后执行钻孔#1=#1+#2;更新角度#11=#11-1;孔数-1END 1;G#3 G80 ;返回原始状态的 G 代码M995.5.2 模态调用(G66)一旦发出 G66 则指定模态调用,即指定沿移动轴移动的程序段后调用宏程序
24、.G97 取消模态调用.说明: 调用 1.在 G66 之后,用地址 P 指定模态调用的程序号.2.当要求重复时,地址 L 后指定从 1 到 9999 的重复次数.3.与非模态调用(G65)相同,自变量指定的数据传递到宏程序体中. 取消 指定 G97 代码时,其后面的程序段不再执行模态宏程序调用. 调用嵌套 调用可以嵌套 4 级.包括非模态调用(G65)和模态调用(G66).但不包括子程序调用(M98)限制: 1.在 G66 程序段中,不能调用多个宏程序.2.G66 必须在自变量之前指定.3.在只有诸如辅助功能但无移动指令的程序段中不能调用宏程序.4.局部变量(自变量)只能在 G66 程序段中指
25、定.注意,每次执行模态调用时,不再设定局部变量. 典型程序 用宏程序编制 G81 固定循环的操作.加工程序使用模态调用,为了简化程序,使用绝对值指定全部的钻孔数据. 调用格式 G65 P9110 Xx Yy Zz Rr Ff Ll;X:孔的 X 坐标(由绝对值指定)(#24)Y:孔的 Y 坐标(由绝对值指定)(#25)Z: Z 点坐标(由绝对值指定) (#26)R: R 点坐标(由绝对值指定) (#18)F:切削进给速度(#9)L:重复次数 调用宏程序的程序 00001;G28 G91 X0 Y0 ZO;G92 X0 Y0 Z50.0;G00 G90 X100.0 Y50.0;G66 P911
26、0 Z-20.0 R.0 F500;G90 X20.0 Y20.0;X50.0;X0.0 Y80.0;G67;M30; 宏程序(被调用的程序) 09110;#1=#4001;贮存 G00/G01#2=#4003; 贮存 G90/G91#3=#4109; 贮存切削进给速度#5=#5003; 贮存钻孔开始的 Z 坐标G00 G90 Z#18; 定位在 R 点G01 Z#26 F#9 ; 切削进给到 Z 点IF#4010 EQ 98GOTO1;返回到 1 点G00 Z#18 ;定位在 R 点GOTO 2;N1 G00 Z#5 ;定位在 1 点N2 G#1 G#3 F#4; 恢复模态信息.M99;5.
27、5.3 用 G 代码调用宏程序在参数中设置调用宏程序的 G 代码,与非模态调用(G65)同样的方法用该代码调用宏程序.说明:在参数(NO.6050 到 NO.6059)中设置调用用户宏程序(09010 到 09019)的 G 代码号(从 1 到 9999),调用户宏程序的方法与 G65 相同.例如,设置参数,使宏程序 09010 由 G81 调用,不用修改加工程序,就可以调用由用户宏程序编制的加工循环. 参数号和程序号之间的对应关系程序号 参数号090100901109012090130901409015090160901709018090196050605160526053605460556
28、056605760586059 重复 与非模态调用一样,地址 L 可以指定从 1 到 9999 的重复次数. 自变量指定 与非模态调用一样,两种自变量指定是有效的;自变量指定 I 和自变量指定 II.根据使用的地址自动地决定自变量的指定类型. 使用 G 代码的宏调用的嵌套 在 G 代码调用的程序中,不能用一个 G 代码调用多个宏程序.这种程序中的 G代码被处理为普通 G 代码.在用 M 或 T 代码作为子程序调用的程序中,不能用一个 G 代码调用多个宏程序.这种程序中的 G 代码也处理为普通 G 代码.5.5.4 用 M 代码调用宏程序在参数中设置调用宏程序的 M 代码,与非模态调用(G65)
29、的方法一样用该代码调用宏程序.说明: 在参数(NO.6080 到 NO.6089)中设置调用用户宏程序(09021 到 09029)的 M 代码(从 1 到 99999999),用户宏程序能与 G65 同样的方法调用. 参数号和程序号之间的对应关系程序号 参数号0902009026080608109022090209024090250902609027090280902960826083608460856086608760886089 重复 与非模态调用一样,地址 L 可以指定从 1 到 9999 的重复次数. 自变量指定 与非模态调用一样,两种自变量指定是有效的;自变量指定 I 和自变量指定
30、 II.根据使用的地址自动地决定自变量的指定类型. 限制: 1.调用宏程序的 M 代码必须在程序段的开头指定.2.G 代码调用的宏程序或用 M 代码或 T 代码作为子程序调用的程序中,不能用一个 M 代码调用多个宏程序.这种宏程序或程序中的 M 代码被处理为普通 M 代码.5.5.5 用 M 代码调用子程序在参数中设置调用子程序(宏程序)的 M 代码号,可与子程序调用(M98)相同的方法用该代码调用宏程序.说明:在参数(NO.6071 到 NO.6079)中设置调用子程序的 M 代码(从 1 到 99999999),相应的用户宏程序(09001到 09009)可与 M98 同样的方法用该代码调
31、用. 参数号程序号之间的对应关系 程序号 参数号090010900209003090040900509006090070900809009607160726073607460756076607760786079 重复 与非模态调用一样,地址 L 可以指定从 1 到 9999 的重复次数. 自变量指定 不允许自变量指定. M 代码 在宏程序中调用的 M 代码被处理为普通的 M 代码. 限制: 用 G 代码调用的宏程序,或用 M 或 T 代码调用的程序中,使用一个 M 代码不能调用几个子程序.这种宏程序或程序中的 M 代码被处理为普通的 M 代码.5.5.6 用 T 代码调用子程序在参数中设置调用
32、的子程序(宏程序)的 T 代码,每当在加工程序中指定该 T 代码时,即调用宏程序.说明: 调用: 设置参数 NO.6001 的 5 位 TCS=1,当在加工程序中指定 T 代码时,可以调用宏程序 09000.在加工程序中指定的 T 代码赋值到公共变量#149. 限制:用 G 代码调用的宏程序中或用 M 或 T 代码调用的程序中,一个 M 代码不能调用多个子程序.这种宏程序或程序中的 T 代码被处理为普通 T 代码.5.5.7 典型程序用 M 代码调用子程序的功能,调用测量每把刀具的累积使用时间的宏程序.条件: 1.测量 T01 到 T05 各把刀具的累积使用时间.刀号大于 T05 的刀具不进行
33、测量.2.下面的变量用于贮存刀号和测量的时间.#501 刀号 1 的累积使用时间#502 刀号 2 累积使用时间#503 刀号 3 累积使用时间#504 刀号 4 累积使用时间#505 刀号 5 累积使用时间3.当指定 M03 时,开始计算使用时间,当指定 M05 时,停止计算.在循环起 动灯亮期间,用系统变量#3002 测量该时间.进给暂停单段停止期间,时间不计算,但要计算换刀和交换工作台的时间.进行检查 参数设置 参数 NO.6071 中设置 3,参数 NO.6072 中设置 05. 变量值的设置 变量#501 到#505 中设置 0. 调用宏程序的程序 00001;T01 M06;M03
34、;M05;改变#501T02 M06;M03;M05; 改变#503T05 M06;M03;M05;改变#504T05 M06;M03;M05;改变#505M30; 宏程序(被调用的程序) 09001 (M03);启动计算的宏程序N01;IF#4120 EQ 0GOTO9;没有指定刀具IF#4120 GT 5GOTO9;超出刀号范围#3002=0;计算器清 0N9 M03;以正向旋转主轴M99;09002(M05);结束计算的宏程序M01;IF#4120 EQ 0GOTO9;没有指定刀具IF#4120 GT 5GOTO9;超出刀号范围#500+#120=#3002+#500+4120;计算累积
35、时间N9 M05;停止主轴M99;5.6 宏程序语句的处理为了平滑加工,CNC 预读下一个要执行的 NC 语句.这种运行称为缓冲.在刀具半径补偿方式(G41,G42)中,NC 为了找到交点提前预读 2 或 3 个程序段的 NC 后语句,算术表达式和条件转移的宏程序语句在它们被读进缓冲寄存器后立即被处理.包含 M00,M01,M02 或 M30 的程序段,包含由参数 NO.3411 到 NO.3420 设置的禁止缓冲的 M 代码的程序段,以及包含 G31 的程序段不预读.说明: 当下个程序段不缓冲时(不缓冲的 M 代码,G31 等) 在除了刀具半径补偿方式(G41,G42)以外的方式中,缓冲下个
36、程序段(正常预读一个程序段)当执行 N1 时,下个 NC 语句(N4)被读入缓冲器.N1 和 N4 之间的宏语句(N2,N3)在 N1 执行期间被处理. 在刀具半径补偿方式(G41,G42)中缓冲下个程序段当 N1 正在执行时,在下 2 个程序段(直到 N5)中的 NC 语句被读进缓冲寄存器.在 N1 和 N5 之间的宏语句(N2,N4)在 N1 的执行期间被处理. 在刀具半径补偿方式 C(G41,G42)中,当下个程序段包含没有移动的程序段时当 NC1 程序段正在执行时,下两个程序段(直到 N5)中的 NC 语句被读进缓冲寄存器.由于 N5 是不移动的程序段,不能计算交点.此时,下面三个程序
37、段(直到 N7)中的 NC 语句被读入.在 N1 和 N7 之间的宏语句(N2,N4 和 N6)在执行 N1 时被处理.5.7 用户宏程序的存储用户宏程序与子程序相似,可用与子程序同样的方法进行存储和编程,存储容量由子程序和宏程序的总容量确定.5.8 限制 MDI 运行 在 MDI 方式中可以指定宏程序调用指令.但是,在自动运行期间,宏程序调用不能切换到 MDI 方式. 顺序号检索 用户宏程序正在执行,在单程序段方式,程序段也能停止.包含宏程序调用指令(G65,G66 或 G67)的程序段中,即使在单程序段方式时也不能停止.当设定 SBM()参数 NO.6000 的 5 位)为 1 时,包含算
38、术运算指令和控制指令的程序段可以停止.单程序段运行用于调试用户宏程序.注意,在刀具半径补偿 C 方式中,当宏程序语句中出现单程序段停止时,该语句被认为不包含移动的程序段,并且,在某些情况下,不能执行正确的补偿. 任选程序段跳过 在中间出现的符号被认为时除法运算符;不作为任选程序段跳过代码. 在 EDIT 方式中的运行 设定参数 NE8 和 NEP 为 1,可对程序号 8000 到 8999 和 9000 到 9999 的用户宏程序和子程序进行保护.当存储器全清时,存储器的全部内容包括宏程序都被清除. 复位 当复位时,局部变量和#100 到#149 的公共变量被清除为空值.设定 CLV 和 CCV,它们可以不被清除.系统变量#1000 到#1333 不被清除.复位操作清除任何用户宏程序和子程序的调用状态及 DO 状态并返回到主程序. 程序再起动的显示 和 M98 一样,子程序调用使用的 M,T 代码不显示. 进给暂停 在宏程序语句的执行期间,进给暂停有效时,当宏语句执行之后机床停止.当复位或出现报警时,机床也停止. 中可以使用的常数值 +0.0000001 到+99999999-99999999 到-0.0000001有效数值是 8 位(十进制),如果超过这个范围,出现 P/S 报警 NO.003.