8.用户宏B功能 使用子程序编程可以重复同样的操作,简化程序的书写工作,但是用户宏B提供了更丰富的编程功能,它允许使用变量、算术和逻辑操作及条件分支,使得用户可以自行编辑软件包、固定循环程序。 8.1变量8.1.1 变量概述一个普通的零件加工程序指定G码并直接用数字值表示移动的距离,例:G100 X100.0。而利用用户宏,既可以直接使用数字值也可以使用变量号。当使用变量号时,变量值既可以由程序改变,也可以用MDI面板改变。 变量书写规格: 当指定一个变量时,在#后指定变量号。个人计算机允许赋名给变量,宏没有此功能。 例:#1 也可以用表达式指定变量号,这时表达式要用方括号括起来。例:#[#1+#2—12] 变量值的范围: 地方变量和公共变量可以有值0和在下述范围内的值: -1047~-10—19;10—29~1047,如果计算结果无效,发出111号报警。 忽略小数点: 在程序中定义变量时,可以忽略小数点。例:当#1=123被定义时,变量#1的实际值为123.000。 未定义的变量: 当变量的值未定义时,这样的一个变量被看作“空”变量,变量#0总是“空”变量,是一个只读变量。 变量的类型: 根据变量号将变量分为四类,见下表: | | | | | | | | 地方变量只能在宏中使用,以保持操作的结果,关闭电源时,地方变量被初始化成“空”。宏调用时,自变量分配给地方变量。 | #100~#149(#199) #500~#531(#999) | | 公共变量可在不同的宏程序间共享。关闭电源时变量#100~#149被初始化成“空”,而变量#500~#531保持数据。公共变量#150~#199和#532~#999可以选用,但是当这些变量被使用时,纸带长度减少了8.5米。 | | | 系统变量用于读写各种NC数据项,如当前位置、刀具补偿值。 |
引用变量: 为了在程序中引用变量,指定一个字地址其后跟一个变量号。当用表达式指定一个变量时,须用方括号括起来。例:G01 X[#1+#2] F#3。引用的变量值根据地址的最小输入增量自动进行四舍五入。例:G00 X#1;其中#1值为12.3456,CNC最小输入增量1/1000mm,则实际命令为G00 X12.346。为了将引用的变量值的符号取反,在#号前加“—”号。 例:G00 X—#1;当引用一个未定义的变量时,忽略变量及引用变量的地址。例:#1=0 ,#2=“空”, 则G00 X#1 Y#2;的执行结果是G00 X0; 显示变量值: 1)按键 显示刀具补偿页面 2)按软键[MACRO]显示宏变量页面 3)按NO.键后,输入一个变量号,然后按INPUT键,将光标移到输入的变量号的位置。 ☆当变量值空白时,变量为空。 ☆********表示溢出(即变量的绝对值大于99999999或小于0.0000001)。 注意: 程序号、顺序号、任选段跳跃号不能使用变量。例:变量不能用于下列方法 O#1; /#2G00 X100.0; N#3 Y200.0; 8.1.2系统变量系统变量能用来读写内部NC数据,如刀具补偿值和当前位置数据。然而,注意:有些系统变量是只读变量。对于扩展自动化操作和一般的程序,系统变量是必须的。 刀具补偿值: 使用这类系统变量可以读写刀具补偿值。可用的变量数取决于能使用的补偿对数,当补偿对数不大于200时,可以用变量#2001~#2400。 用于刀具补偿内存A的系统变量 | | | #10001(#2001) : #10200(#2200) |
用于刀具补偿内存B的系统变量 | | | | #11001(#2201) : #11200(#2400) | #10001(#2001) : #10200(#2200) |
宏报警: 用于宏报警的系统变量: | | | 当#3000中有0~99间的某一值时,NC停止并显示报警信息。报警信息不超过26个字符, |
例:#3000=1(TOOL NOT FOUND); 报警屏幕显示“3001 TOOL NOT FOUND。” 时间信息: 时间信息可以读写。 用于时间信息的系统变量: | | | 这个变量是一个以1毫秒为增量一直记数的记时器,上电或达到65535毫秒时复值为0。 | | 这个变量是一个以1小时为增量、当循环启动灯亮时记数的记时器,电源关闭后记时器值依然保持,达到1145324.612小时时复值为0。 | | 这个变量用于读当前年/月/日数据,该数据以十进制数显示。例:March 28,1993表示成19930328。 | | 这个变量用于读当前时/分/秒数据,该数据以十进制数显示。例:下午3点34分56秒表示成153456。 |
自动操作控制: 自动操作的控制状态可以改变。 自动操作控制的系统变量#3003 ☆上电时该变量值为0。 ☆当不能执行单段停止时,单段停止操作不能执行,即使单段开关有效。 ☆当没有指定是否等待辅助功能(M、S、T)完成时,在辅助功能完成之前,程序执行到下一段,定位完成信号DEN不发出。 自动操作控制的系统变量#3004 ☆上电时该变量值为0。 ☆当不能执行进给保持时: 进给保持按钮按下并保持时,机床以单段停止方式停止,但单段方式若因变量#3003而无效时,不执行单段停止操作。 进给保持按钮按下又释放时,进给保持灯亮,但机床不停止;程序继续进行,机床停在最先含有进给保持使能的段。 ☆当进给倍率无效时,倍率定在100%,忽略机床操作面板上的倍率开关。 ☆当精确停止无效时不执行精确停止检查(定位检查),即使是包含有不执行切削的段。 设定: 设定变量#3005可以读写,并且二进制值转换成十进制。 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | REVX:X—轴镜象on/off REVY:Y—轴镜象 on/off TVON:TV 检查 on/off ISO: 输出码EIA/ISO INCH: 公制/英制输入 ABS: 相对值/绝对值编程 SEQ: 顺序号自动插入on/off REV4: 第四轴镜象on/off TAPE: F10/11 纸带格式 on/off | | | | | | | | | | | | | | | | |
零件数: 需要加工的零件数变量#3902和已加工的零件数变量#3901可以被读写。见下表: 注:不能使用负数。 模信息: 段中指定的模信息可以读出。见下表: 例:当执行#1=#4001时,#1=0,1,2,3或33 当前位置: 位置信息变量不能写只能读。见下表: ☆首位数(从1~ 4)分别代表轴号,数1代表X轴,数2代表Y轴,数3代表Z轴,数4代表第四轴。 ☆执行当前的刀偏值,而不是立即执行保持在变量#5081~#5088里的值。 ☆在含有G31(跳段)的段中发出跳段信号时,刀具的位置保持在变量#5061~#5068里,如果不发出跳段信号,指定段的结束点位置保持在这些变量中。 ☆移动期间读变量无效时,表示由于缓冲(准备)区忙,所希望的值不能读。 工件坐标系补偿值(工件零点偏置值): 工件零点偏置值变量可以读写,见下表: | | | 第一轴外部工件零点偏置值~第四轴外部工件零点偏置值 | | 第一轴G54工件零点偏置值~第四轴G54工件零点偏置值 | | 第一轴G55工件零点偏置值~第四轴G55工件零点偏置值 | | 第一轴G56工件零点偏置值~第四轴G56工件零点偏置值 | | 第一轴G57工件零点偏置值~第四轴G57工件零点偏置值 | | 第一轴G58工件零点偏置值~第四轴G58工件零点偏置值 | | 第一轴G59工件零点偏置值~第四轴G59工件零点偏置值 | | 第一轴工件零点偏置值(G54P1)~第四轴工件零点偏置值 | | 第一轴工件零点偏置值(G54P2)~第四轴工件零点偏置值 | | | | 第一轴工件零点偏置值(G54P48)~第四轴工件零点偏置值 |
注:对于工件坐标系,变量#5201~#5328是可选变量。 对于附加的48工件坐标系,变量#7001~#7948(G54P1~G54P48) 是可选变量。 8.2算术和逻辑操作在下表中列出的操作可以用变量进行。操作符右边的表达式,可以含有常数和(/或)由一个功能块或操作符组成的变量。表达式中的变量#J和#K可以用常数替换。左边的变量也可以用表达式替换。见下表: 角单位: 在SIN,COS,TAN,ATAN中所用的角度单位是度。 ATAN功能: 在ATANT之后的两个变量用“/”分开,结果在0°和360°之间。 例:当#1=ATANT[1]/[—1]时,#1=135.0 ROUND功能: ☆当ROUND功能包含在算术或逻辑操作、IF语句、WHILE语句中时,将保留小数点后一位,其余位进行四舍五入。 例:#1=ROUND[#2];其中#2=1.2345,则#1=1.0 ☆当ROUND出现在NC语句地址中时,进位功能根据地址的最小输入增量四舍五入指定的值。 例:编一个程序,根据变量#1、#2的值进行切削,然后返回到初始点。假定增量系统是1/1000mm,#1=1.2345,#2=2.3456 则 G00 G91 X—#1; 移动1.235mm G01 X—#2 F300; 移动2.346mm G00 X[#1+#2]; 因为1.2345+2.3456=3.5801移动3.580mm,不能返回到初始位置。而换成G00X[ROUND[#1]+ROUND[#2]]能返回到初始点。 上进位和下进位成整数: 例:#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 算术和逻辑操作的缩写方式: 取功能块名的前两个字符,例:ROUNDàRO。 操作的优先权: ①功能块。 如乘除(*,/,AND,MOD)这样的操作。 ®如加减(+,—,OR,XOR)这样的操作。 方括号嵌套: 方括号用于改变操作的顺序。最多可用五层,超出五层,出现118号报警。 注意: 方括号用于封闭表达式,圆括号用于注释。 除数: 如果除数是零或TAN[90],则会产生112号报警。 8.3分支和循环语句在一个程序中,控制流程可以用GOTO、IF语句改变。有三种分支循环语句如下: ☆ GOTO语句(无条件分支); ☆ IF语句(条件分支:if…,then…); ☆ WHILE语句(循环语句while…)。 8.3.1无条件分支(GOTO语句)功能 转向程序的第N句。当指定的顺序号大于1~9999时,出现128号报警,顺序号可以用表达式。 格式 GOTO n; n是顺序号(1~9999) 8.3.2条件分支(IF 语句)功能 在IF后面指定一个条件表达式,如果条件满足,转向第N句,否则执行下一段。 格式 IF [条件表达式] GOTO n; 其中: 条件表达式 一个条件表达式一定要有一个操作符,这个操作符插在两个变量或一个变量和一个常数之间,并且要用方括号括起来,既[表达式 操作符 表达式。 操作符见下表: 8.3.3循环(WHILE语句)功能 在WHILE 后指定一个条件表达式,条件满足时,执行DO到END之间的语句,否则执行END后的语句。 格式 WHILE [条件表达式] DO m;(m=1,2,3) : : : END m; m只能在1、2、3中取值,否则出现126号报警。 嵌套 ①数1~3可以多次使用。 ②不能交叉执行DO语句,如下的书写格式是错误的: 8.3.4 注意 无限循环 指定了DO m而没有WHILE语句,循环将在DO和END之间无限期执行下去。 执行时间 程序执行GOTO分支语句时,要进行顺序号的搜索,所以反向执行的时间比正向执行的时间长。可以用WHILE语句减少处理时间。 未定义的变量 在使用EQ或NE的条件表达式中,空值和零的使用结果不同。而含其它操作符的条件表达式将空值看作零。 8.4宏调用可以用下列方式调用宏程序: 简单调用 G65 模调用 G66、G67 G码宏调用 M码宏调用 G码子程序调用 M码子程序调用 |
宏调用和子程序调用之间的区别: ☆ 用G65,可以指定一个自变量(传递给宏的数据),而M98没有这个功能。 ☆ 当M98段含有另一个NC语句时(如:G01 X100.0M98Pp),则执行命令之后调用子程序,而G65无条件调用一个宏。 ☆ 当M98段含有另一个NC语句时(如:G01 X100.0M98Pp),在单段方式下机床停止,而使用G65时机床不停止。 ☆ 用G65地方变量的级要改变,而M98不改变。 8.4.1 简单调用(G65)功能 G65被指定时,地址P所指定的用户宏被调用,数据(自变量)能传递到用户宏程序中。 格式 G65 Pp Ll <自变量表>; 其中: p 要调用的程序号 l 重复的次数(缺省值为1,取值范围1~9999) 自变量 传递给宏的数。通过使用自变量表,值被分配给相应的地方变量。 如下列中#1=1.0,#2=2.0 自变量分为两类。第一类可以使用除G、L、O、N、P之外的字母并且只能使用一次。第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使用的字母自动确定。见下表。 类别一: 地址 | 变量号 | | 地址 | 变量号 | | 地址 | 变量号 | A | #1 | | I | #4 | | T | #20 | B | #2 | | J | #5 | | U | #21 | C | #3 | | K | #6 | | V | #22 | D | #7 | | M | #13 | | W | #23 | E | #8 | | Q | #17 | | X | #24 | F | #9 | | R | #18 | | Y | #25 | H | #11 | | S | #19 | | Z | #26 |
☆ 地址G、L、N、O、P不能当作自变量使用。 ☆ 不需要的地址可以省略,与省略的地址相应的地方变量被置成空。 类别二: 地址 | 变量号 | | 地址 | 变量号 | | 地址 | 变量号 | A | #1 | | K3 | #12 | | J7 | #23 | B | #2 | | I4 | #13 | | K7 | #24 | C | #3 | | J4 | #14 | | I8 | #25 | I1 | #4 | | K4 | #15 | | J8 | #26 | J1 | #5 | | I5 | #16 | | K8 | #27 | K1 | #6 | | J5 | #17 | | I9 | #28 | I2 | #7 | | K5 | #18 | | J9 | #29 | J2 | #8 | | I6 | #19 | | K9 | #30 | K2 | #9 | | J6 | #20 | | I10 | #31 | I3 | #10 | | K6 | #21 | | J10 | #32 | J3 | #11 | | I7 | #22 | | K10 | #33 |
☆ 在实际的程序中,I、J、K的下标不用写出来。 注意: ☆ 在自变量之前一定要指定G65。 ☆ 如果将两类自变量混合使用, NC自己会辨别属于哪类,最后指定的那一类优先。 ☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。 ☆ 最多可以嵌套含有简单调用(G65)和模调用(G66)的程序4级。不包括子程序调用(M98)。地方变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,地方变量的级数增加一次。上一级地方变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时地方变量的级数减1,恢复宏调用时存储的地方变量值。 8.4.2、模调用(G66、G67)功能 一旦指定了G66,那么在以后的含有轴移动命令的段执行之后,地址P所指定的宏被调用,直到发出G67命令,该方式被取消。 格式 G66 Pp Ll <自变量表>; 其中: p 要调用的程序号 l 重复的次数(缺省值为1,取值范围1~9999) 自变量 传递给宏的数。与G65调用一样,通过使用自变量表,值被分配给相应的地方变量。 注意: ☆ 最多可以嵌套含有简单调用(G65)和模调用(G66)的程序4级。不包括子程序调用(M98)。模调用期间可重复嵌套G66。 ☆ 在G66段,不能调用宏。 ☆ 在自变量前一定要指定G66。 ☆ 在含有象M码这样与轴移动无关的段中不能调用宏。 ☆ 地方变量(自变量)只能在G66段设定,每次模调用执行时不能设定。 8.4.3 G码调用宏通过在下表所列出的参数中设定调用宏程序的G码号,就可以象用G65一样调用相应的宏程序。G码号设定范围是1~255。重复次数l和自变量使用方法与G65一样。 程序号 | 参数号 | O9010 | 220 | O9011 | 221 | O9012 | 222 | O9013 | 223 | O9014 | 224 | O9015 | 225 | O9016 | 226 | O9017 | 227 | O9018 | 228 | O9019 | 229 |
注意: 在用G码调用的程序中,不能再用G码调用宏程序,在这样的程序中G码被看作是普通G码,在用M码和T码调用的子程序中也一样。 8.4.4、M码调用宏通过在下表所列出的参数中设定调用宏程序的M码号,就可以象用G65一样调用相应的宏程序。M码号设定范围是1~255。重复次数l和自变量使用方法与G65一样。 程序号 | 参数号 | O9020 | 230 | O9021 | 231 | O9022 | 232 | O9023 | 233 | O9024 | 234 | O9025 | 235 | O9026 | 236 | O9027 | 237 | O9028 | 238 | O9029 | 239 |
注意: ☆ 调用宏程序的M码一定要在段首指定。 ☆ 在用G码调用的宏或用M码和T码调用的子程序中,不能再用M码调用宏程序,在这样的宏或程序中M码被看作是普通M码。 8.4.5 M码调用子程序通过在下表所列出的参数中设定调用宏程序的M码号,就可以象用M98调用子程序一样调用相应的宏程序。M码号设定范围是1~255。重复次数l使用方法与M98一样。不允许使用自变量。 程序号 | 参数号 | O9001 | 240 | O9002 | 241 | O9003 | 242 |
注意: 宏程序中,已用来调用宏程序的 M码被看作是普通M码。在用G码调用的宏和用M码或T码调用的程序中,不能再用M码调用子程序,在这样的程序中M码被看作是普通M码。 8.4.6 T码调用子程序将参数040的第5位置1,当在加工程序中指定一个T码时,宏程序O9000就被调用。在加工程序中指定的T码存储在公共变量#149中。 在用G码调用的宏和用M码或T码调用的程序中,不能再用T码调用子程序,在这样的程序中T码被看作是普通T码。 8.5附加说明① 用户宏程序与子程序相似,也能寄存和编辑。 ② 可以在自动操作方式下指定宏调用。但在自动操作期间不能转换到MDI方式。也能在MDI操作B方式下应用宏调用。 ③ 不能用顺序号搜索用户宏程序。 ④ 即使当宏程序正在执行,也能以单段方式停止(除了含有宏调用命令、算术操作命令、控制命令的段外)。含有宏调用命令(G65、G66、G67)的段,在单段方式下不能停止。而将参数011的第5位置1,含有算术操作命令、控制命令的段能停止。单段停止方式常用于测试用户宏程序。注意,在切削补偿方式C下,如果在宏语句处执行了单段停止,该语句被看作是与移动命令无关的段,这时补偿可能不正确。(严格地讲,这句被看作是移动命令为0的段)。 ⑤“/”如果出现在算术表达式的中间,则被认为是除号。 ⑥ 将参数010的第4位置1,可禁止对程序号为9000~9999的程序进行编辑和删除。同时按住RESET 和DELET键重新启动电源时,整个内存将被删除,包括宏程序。 ⑦ 复位操作可使地方变量和公共变量#100~#199清成空值。但是,通过设置参数040的第6第7位,可以避免这些参数的复位。系统变量#1000~#1133不受复位影响。 ⑧ 象M98一样,不显示用作子程序调用的M码和T码。 ⑨ 在表达式中使用的常数取值范围是+0.0000001~+99999999和-99999999~-0.0000001,如果超出此范围,将发出003号报警。 |