
宏程序使用说明.doc
17页第五章 用户宏程序5.1变量普通加工程序直接用数值指定G代码和移动距离;例如,GO1和X100.0使用用户宏程序时,数值可以直接指定或用变量指定当用变量时,变量值可用程序或用MDI面板上的操作改变#1=#2+100G01 X#1 F300 说明: ● 变量的表示 计算机允许使用变量名,用户宏程序不行变量用变量符号(#)和后面的变量号指定例如:#1表达式可以用于指定变量号此时,表达式必须封闭在括号中例如:#[#1+#2-12]● 变量的类型变量根据变量号可以分成四种类型变量号变量类型功能#0空变量该变量总是空,没有值能赋给该变量.#1-#33局部变量局部变量只能用在宏程序中存储数据,例如,运算结果.当断电时,局部变量被初始化为空.调用宏程序时,自变量对局部变量赋值,#100-#199#500-#999公共变量公共变量在不同的宏程序中的意义相同.当断电时,变量#100-#199初始化为空.变量#500-#999的数据保存,即使断电也不丢失.#1000---系统变量系统变量用于读和写CNC运行时各种数据的变化,例如,刀具的当前位置和补偿值.● 变量值的范围 局部变量和公共变量可以有0值或下面范围中的值:-1047到-10-29或-10-2到-1047如果计算结果超出有效范围,则发出P/S报警NO.111.● 小数点的省略 当在程序中定义变量值时,小数点可以省略。
例:当定义#1=123;变量#1的实际值是123.000● 变量的引用 为在程序中使用变量值,指定后跟变量号的地址当用表达式指定变量时,要把表达式放在括号中例如:G01X[#1+#2]F#3;被引用变量的值根据地址的最小设定单位自动地舍入例如: 当G00X#/;以1/1000mm的单位执行时,CNC把123456赋值给变量#1,实际指令值为G00X12346. 改变引用变量的值的符号,要把负号(-)放在#的前面例如:G00X-#1当引用未定义的变量时,变量及地址都被忽略例如:当变量#1的值是0,并且变量#2的值是空时,G00X#1 Y#2的执行结果为G00X0● 双轨迹(双轨迹控制)的公共变量 对双轨迹控制,系统为每一轨迹都提供了单独的宏变量,但是,根据参数N0.6036和6037的设定,某些公共变量可同时用于两个轨迹● 未定义的变量 当变量值未定义时,这样的变量成为空变量变量#0总是空变量它不能写,只能读a) 引用当引用一个未定义的变量时,地址本身也被忽略当#1=<空>当#1=0G90 X100 Y#1↓G90 X100G90 X100 Y#1↓G90 X100 Y0 (b) 运算除了用<空>赋值以外,其余情况下<空>与0相同。
当#1=<空>时当#1=0时#2=#1↓#2=<空>#2=#1↓#2=0#2=#*5↓#2=0#2=#*5↓#2=0#2=#1+#1↓#2=0#2=#1+#1↓#2=0(c)条件表达式EQ和NE中的<空>不同于0当#1=<空>时当#1=0时#1EQ#0↓成立#1EQ#0↓不成立#1 NE #0↓成立#1 NE #0↓不成立#1 GE #0↓成立#1 GE #0↓不成立#1 GT #0↓不成立#1 GT #0↓不成立 ● 限制 程序号,顺序号和任选程序段跳转号不能使用变量例:下面情况不能使用变量:0#1;/#2G00X100.0;N#3Y200.0;5.2算术和逻辑运算 下面表中列出的运算可以在变量中执行运算符右边的表达式可包含常量和或由函数或运算符组成的变量表达式中的变量#j和#k可以用常数赋值左边的变量也可以用表达式赋值功能格式备注定义#i=#j加法减法乘法除法#i-#j+#k;#i-#j-#k;#i-#j*#k;#i-#j/#k;正弦反正弦余弦反余弦正切反正切#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,ASIN,ACOS,TAN和ATAN的角度单位是度如9030’表示为90.5度● ARCSIN # i= ASIN[#j] (1)取值范围如下: 当参数(NO.6004#0)NAT位设为0时,270~90 当参数(NO.6004#0)NAT位设为1时,-90~90(2)当#j超出-1到1的范围时,发出P/S报警NO.111.(3)常数可替代变量#j● ARCCOS #i=ACOS[#j](1) 取值范围从180~0(2) 当#j超出-1到1的范围时,发出P/S报警NO.111.(3) 常数可替代变量#j● ARCTAN #i= ATAN[#j]/ [#k](1) 指定两个边的长度,并用斜杠(/)分开(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-82) 当运算结果超过3.65X1047(j大约是110)时,出现溢出并发出P/S报警NO.111.3) 常数可替代变量#j● ROUND(舍入)函数(1) 当算术运算或逻辑运算指令IF或WHILE中包含ROUND函数时,则ROUND函数在第一个小数位置四舍五入. 当执行#1= ROUND[#2];此处#2=1.2345,变量1的值是1.02) 当在NC语句地址中使用ROUND函数时,ROUND函数根据地址的最小设定单位将指定值四舍五入● 上取整下取整 CNC处理数值运算时,若操作后产生的整数绝对值大于原数的绝对值时为上取整;若小于原数的绝对值为下整数.对于负数的处理应小心.● 算术与逻辑运算指令的缩写 程序中指令函数时,函数名的前两个字符可以用于指定该函数. ROUND→ROFLX→FI● 运算次序(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位十进制数.当在加/减速中处理非常大的数时,将得不到期望的结果. (2) 还应该意识到,使用条件表达式EQ,NE,GE,GT.LE和LT时可能造成误差. (3) 使用下取整指令时应小心. ● 除数 当在除法或TAN[90]中指定为0的除数时,出现P/S报警NO.1125.3宏程序语句和NC语句 下面的程序段为宏程序语句: ◆ 包含算术或逻辑运算(=)的程序段. ◆ 包含控制语句的程序段 ◆ 包含宏程序调用指令的程序段 除了宏程序以外的任何程序段都为NC语句. 说明:● 与NC语句的不同(1) 即使置于单程序段运行方式,机床也不停止.但是,当参数N0.6000#5SBM设定为1时,在单程序段方式中,机床停止.(2) 在刀具半径补偿方式中宏程序语句段不做为不移动程序段处理.● 与宏程序语句有相同性质的NC 语句(1) 含有子程序调用指令,但没有除O,N或L地址之外的其它地址指令的NC语句其性质与宏程序相同.(2) 不包含除ONP或L以外的指令地址的程序段其性质与宏程序语句相同.5.4转移和循环 在程序中,使用GOTO 语句和IF语句可以改变控制的流向.有三种转移和循环操作可供使用;转移和循环----------GOTO语句(无条件转移) ↓→IF语句(条件转移) WHILE语句(当…时循环)5.4.1无条件转移(GOTO语句) 转移到标有顺序号n的程序段.当指定1到99999以外的顺序号时,出现P/S报警NO.128.可用表达方式指定顺序号. GOTOn;n:顺序号(1到99999)5.4.2条件转移(IF)语句 IF之后指定条件表达式.IF[<条件表达式>]GOTOn 如果指定的条件表达式满足时,转移到标有顺序号n的程序段.如果指定的条件表达式不满足,执行下个程序段.IF[<条件表达式>]THEN 如果条件表达式满足,执行预先决定的宏程序语句.只执行一个宏程序语句.说明:● 条件表达式 条件表达式必须包括算符.算符插在两个变量中间或变量和常数中间,并且用括号([,])封闭.表达式可以替代变量.● 运算符 运算符由2个字母组成,用于两个值的比较,以决定它们是相等还是一个值小于或大于另一个值.注意,不能使用不符号.运算符含义EQ等于NE不等于GT大于GE小于或等于LT小于LE小于或等于典型程序:下面的程序计算数值1-10的总和09500;#1=0; 存储和数变量的初值#2=1; 被加数变量的初值N1 IF[#2 GT 10]GOTO 2; 当被加数大于10时转移到N2#1=#1+#2; 计算和数#2=#2+#1; 下一个被加数GOTOA1; 转到N1N2 M30 ; 程序结束 。












