可以在变量之间进行各类运算。运算指令可像一般的算术式子一样编程。FANUC系统算术和逻辑运算见表5-4。
例如:#i=<表达式>
<表达式>:运算指令右边的<表达式>是常量、变量、函数或算符的组合。代之以下面的#j、#k,也可以使用常量。在<表达式>中使用的不带数点的常量,视为其末尾有小数点。
表5-4 FANUC系统算术和逻辑运算
1.角度单位
在SIN、COS、TAN、ASIN、ACOS、ATAN函数中使用的角度,其单位用度表示。例如,25°51′,表示为25.85°。
2.反正弦#i=ASIN[#j];
数学上表示为arcsin,计算器上表示为sin-1。解的范围如下:
1)当参数NAT(No.6004#0)设为0时:270°~90°。
2)当参数NAT(No.6004#0)设为1时:-90°~90°。
3)当#j超出-1~1时,会有PS0119报警发出。
4)可用常量替代变量#j。
3.反余弦#i=ACOS[#j];
数学上表示为arccos,计算器上表示为cos-1。
1)解的范围为0°~180°。
2)当#j超出-1~1时,会有PS0119报警发出。
3)可用常量替代变量#j。
4.反正切#i=ATAN[#j]/[#k];(2个自变量)
数学上表示为arctan,计算器上表示为tan-1。
1)即使指定ATAN[#j,#k],也与ATAN[#j]/[#k]等效。
2)该函数由XY平面上的点(#k,#j)给定时,返还相对于由该点构成的角度的反正切的值。
3)可用常量替代变量#j。
4)解的范围如下:
①当参数NAT(No.6004#0)设为0时:0°~360°。
例如:#1=ATAN[1]/[1]时,#1是45.0°;
#1=ATAN[1]/[-1]时,#1是135.0°;
#1=ATAN[-1]/[-1]时,#1是225.0°;
#1=ATAN[-1]/[1]时,#1是315.0°;
②当参数NAT(No.6004#0)设为1时:-180°~180°。
例如:#1=ATAN[1]/[1]时,#1是45.0°;
#1=ATAN[1]/[-1]时,#1是135.0°;
#1=ATAN[-1]/[-1]时,#1是-135.0°;
#1=ATAN[-1]/[1]时,#1是-45.0°;
注意:“[]/[]”,代表所在平面的坐标值,如在G17平面,“[1]/[-1]”,代表该坐标Y值为1,X值为-1;如在G18平面,“[1]/[-1]”,代表该坐标X值为1,Z值为-1;如在G19平面,“[1]/[-1]”,代表该坐标Z值为1,Y值为-1。千万别混淆了顺序!
5.反正切#i=ATAN[#j];(1个自变量)
1)如上所述,在以1个自变量来指定ATAN时,该功能将返还反正切的主值(-90°<ATAN[#j]<90°)。也即,成为计算器型规格的ATAN。
2)在将该函数作为除法运算的被除数使用时,必须以[]括起来以后再指定,不括起来的情形视为ATAN[#j]/[#k]。
例如,“#100=[ATAN[1]]/10;”:将1个自变量ATAN除以10,即4.5°。
“#100=[ATAN[-1]]/10;”:将1个自变量ATAN除以10,即-4.5°。
“#100=ATAN[1]/[10];”:作为2个自变量ATAN执行,即5.7106°。
“#100=[ATAN[-1]/[1]]/10;”:视为先运算ATAN[-1]/[1],然后再把结果除以10,当参数No.6004#0设为0时,为31.5°;当参数No.6004#0设为1时,为-4.5°。
“#100=ATAN[1]/10;”:视为2个自变量ATAN,但是由于G17平面上X坐标的“10”指定中没有[],会有PS1131报警发出。
注意:反正弦、反余弦、反正切函数,在数学上的表示方法为arcsin、arccos、arctan,在计算器上的表示方法为sin-1、cos-1、tan-1,在数控机床上的表示方法为ASIN、ACOS、ATAN。
建议采用含两个自变量的反正切函数:ATAN[#j]/[#k]。
6.自然对数#i=LN[#j];
1)当反对数(#j)小于或等于0时,会有PS0119报警发出。
2)可用常量替代变量#j。
7.指数函数#i=EXP[#j];
1)运算结果溢出时,会有PS0119报警发出。
2)可用常量替代变量#j。
8.ROUND函数
1)当运算指令以及IF语句或WHILE语句中包含取整函数时,取整函数则从第一位小数起四舍五入。
例如,“#1=ROUND[#2];”,其中#2为1.2345,则变量#1的值是1.0。
2)当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.2345mm+2.3456mm=3.5801mm,移动量在正向为3.580mm,而非返回原来位置。
注意:差别来源于是四舍五入前相加的,还是四舍五入后相加的。
为了使刀具返回原来位置,必须指定“G00 X[ROUND[#1]+ROUND[#2]];”。
9.ADP(Add Decimal Point)函数
设定ADP[#n](n=1~33),对于不带小数点传递的自变量,可以在子程序端添加小数点。
例如,在用“G65 P X10;”调用的子程序端,ADP[#24]的值与在自变量的最后带有小数点的情形相同,也即为“10.”。它在不希望在子程序端考虑设定单位时使用。但是,参数No.6007#4为1时,自变量在传递的同时被变换为0.01,因此不可使用ADP函数。
注意:出于程序的兼容性考虑,不建议用户使用ADP函数在指定宏程序调用的自变量中添加上小数点。
10.只入不舍和只舍不入(FUP和FIX)(www.xing528.com)
当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。
11.运算指令的缩写
当函数在程序中被指定时,只需要前面的两个字符,后面的可以省略。
例如:ROUND→RO
FIX→FI
注意:
①POW不可省略。
②在以省略方式输入了运算指令的情况下,显示也为省略方式。
例如,如果输入“RO”,则不会变换显示为实际的运算指令ROUND,而显示“RO”。
12.运算的优先顺序
1)函数。
2)乘除运算(∗,/,AND)。
3)加减运算(+,-,OR,XOR)。
例如:
括号被用来改变运算的优先顺序。括号可含5层,包括函数外面的括号。因为超过5层,会有PS0118报警发出。
例如,
14.逻辑运算说明
逻辑运算符号是在二进制数值上使用的运算符号。宏变量为浮点数字。当在宏变量上使用逻辑运算符号时,只使用浮点数字的整数部分。逻辑运算符号是:
OR:两个数值一起Logically OR(或)。
XOR:两个数值一起Exclusively OR(异或)。
AND:两个数值一起Logically AND(与)。
逻辑运算相对于算术运算来说较为特殊,具体说明如下:
说明:
①AND的运算法则为:检查所有条件是否都为TRUE(真),如果所有参数都为TRUE(真),则结果为TRUE(真);只要有一个条件为FALSE(假),则结果为FALSE(假)。
例如:#1=5.2;
#2=3.6;
IF[[#1 GT 4.5]AND[#2 LT 9.8]]GOTO 19;
检查“[#1 GT 4.5]”条件为TRUE(真),“[#2 LT 9.8]”条件为TRUE(真),即两者都为TRUE(真),则出现GOTO(前进),跳转到N19程序段。只要有一个条件为FALSE(假),就不出现跳转。
②OR的运算法则为:如果任一条件为TRUE(真),则结果为TRUE(真);只有当所有条件均为FALSE(假)时,结果才为FALSE(假)。
例如:#1=1.0; 00000001
#2=2.0; 00000010
#3=#1 OR#200000011 在OR操作后,变量#3会包含3.0。
③XOR的运算法则为:如果a、b两个值不相同,则异或结果为1;如果a、b两个值相同,则异或结果为0。
例如:十进制5异或11,先转化为二进制,再异或,异或值为“1110”,即十进制14。
注意:当使用逻辑运算符时,必须小心操作,这样才会得到所要求的结果。
15.运算精度
①相对误差与运算结果有关。
②两类误差中,采用较小的一类。
③绝对误差是常量,与运算结果无关。
④函数TAN运算的是SIN/COS。
说明:
①变量值的精度大约是8位十进制数字,当对非常大的数进行加法或减法运算时,可能得不到预期的结果。
例如:#1=9876543210123.456,即使#2=9876543277777.777为真值,变量值为#1=9876543200000.000,#2=9876543300000.000。
此时,在计算#3=#2-#1时,#3=100000.000,而不是期望的差值67654.321。由于系统是以二进制进行计算的,实际结果还存在一定的差异。
②注意:误差还会来自使用EQ、NE、GE、GT、LE、LT的条件表达式。
例如:IF[#1 EQ#2]受#1和#2的误差影响,可能导致判断错误。
因此,如IF[ABS[#1-#2]LT 0.001]所示,求出两个变量之差,如果该差值不超过允许值(在这个例子中为0.001),则可以判定这两个变量的值相等。
③对一个数值进行只舍不入时,应小心。
例如:#1=0.002,计算#2=#1∗1000时,#2的结果不正好是2,而是1.99999997。此时,如果指定#3=FIX[#2],则变量#3的结果值不正好是2.0,而是1.0。
在这种情况下,进行误差修正之后,对该值应进行只舍不入或四舍五入,使结果大于预期的整数值。
#3=FIX[#2+0.001];
#3=ROUND[#2];
④括号。在表达式中使用的括号为方括号[ ]。
注意:圆括号( )用于注释。
⑤除数。除法运算中分母为“0”时,会有PS0112报警发出。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。