表1-20列出的运算可以在变量中执行。运算符右边的表达式可包含常量和/,或由函数、运算符组成的变量。表达式中的变量#j和#k可以用常数替换。左边的变量也可以用表达式赋值。
表1-20 算术和逻辑运算
1.角度单位
函数SIN、COS、ASIN、ACOS、TAN和ATAN中所用的角度单位是度(°)。
2.ARCSIN#i=ASIN[#j]
1)取值范围如下:
a)当参数(No.6004#0)NAT位设为0时,取值范围为90°~270°。
b)当参数(No.6004#0)NAT位设为1时,取值范围为-90°~90°。
2)当#j超出-1~+1的范围时,发出P/S报警No.111。
3)常数可替代变量#j。
3.ARCCOS#i=ACOS[#j]
1)取值范围从0°~180°。
2)当#j超出-1~+1的范围时,发出P/S报警No.111。
3)常数可以代替变量#j。
4.ARCTAN
指定两个边的长度,并用斜杠(/)分开。
5.#i=ATAN[#j]/[#k]
1)取值范围如下:
a)当NAT位(参数No.6004,#0)设为0时,取值范围为0°~360°。
例如:当指定#1=ATAN[-1]/[1]时,#1=225°。
b)当NAT位(参数No.6004,#0)设为1时,取值范围为-180°~180°。
例如:当指定#1=ATAN[-1]/[1]时,#1=-135.0°。
2)常数可以代替变量#j。
6.自然对数#i=LN[#j]
1)注意,相对误差可能大于10-8。
2)当反对数(#j)为0或小于0时,发出P/S报警No.111。
3)常数可以代替变量#j。
7.指数函数#i=EXP[#j]
1)注意,相对误差可能大于10-8。
2)当运算结果超过3.65×1047(j大约是110)时,出现溢出并发出P/S报警No.111。
3)常数可以代替变量#j。
8.ROUND(舍入)函数
1)当算术运算或逻辑运算指令IF或WHILE中包含ROUND函数时,则ROUND函数在第1个小数位置四舍五入。
例如:当执行#1=ROUND[#2]时,此处#2=1.2345,变量1的值是1.0。
2)当在NC语句地址中使用ROUND函数时,ROUND函数根据地址的最小设定单位将指定值四舍五入。
例如:编制一个钻削加工程序,按变量#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,刀具不能返回到初始位置。而换成G00 X[ROUND[#1]+ROUND[#2]],则能返回到初始点。
该误差来自在钻入时,钻入深度是分别按变量#1和#2的舍入值钻削的,而返回时是按变量#1和#2的和舍入的,所以刀具不会返回到初始值;如果要使刀具返回初始值,则必须在返回程序段(G00 X[#1+#2])之前,指定钻削程序段中的变量#2为函数(G00 X-[ROUND[#2]]。
9.上取整和下取整
CNC处理数值运算时,若操作后产生的整数绝对值大于原数的绝对值时,为上取整;若小于原数的绝对值时,为下取整。对于负数的处理应小心。
例如:假设#1=1.2、#2=-1.2。
当执行#3=FUP[#1]时,2.0赋给#3。
当执行#3=FIX[#1]时,1.0赋给#3。(www.xing528.com)
当执行#3=FUP[#2]时,-2.0赋给#3。
当执行#3=FIX[#2]时,-1.0赋给#3。
10.算术与逻辑运算指令的缩写
程序中指定函数时,函数名的前两个字符可以用于指定该函数。
例如:ROUND→RO
FIX→FI
11.运算次序
运算次序为
1)函数。
2)乘和除运算(*、/、AND)。
3)加和减运算(+、-、OR、XOR)。
1、2和3表示运算次序
括号用于改变运算次序。括号可以使用5级,包括函数内部使用的括号。当超过5级时,出现P/S报警No.118。
1~5表示运算次序
注意:
1)方括号用于封闭表达式,圆括号用于注释。
2)运算时,可能出现误差,见表1-21。
表1-21 运算中的误差
注:如果SIN、COS或TAN函数的运算结果小于1.0×10-8,或由于运算精度的限制不为0的话,设定参数No.6004#1为1,则运算结果可以推算为0。
① 相对误差取决于运算结果。
② 使用两类误差的较小者。
③ 绝对误差是常数,而不管运算结果。
④ 函数TAN执行SIN/COS。
3)变量值的精度约为8位十进制数。当在加/减运算中处理非常大的数时,将得不到期望的结果。
例如:当试图把下面的值赋给变量#1和#2时,
#1=9876543210123.456
#2=9876543277777.777
变量值变成:
#1=9876543200000.000
#2=9876543300000.000
此时,当计算#3=#2-#1时,结果为#3=100000.000。(该计算的实际结果稍有误差,因为是以二进制执行的。)
4)还应该意识到,使用条件表达式EQ、NE、GE、GT、LE和LT时可能造成误差。
例如:IF[#1EQ#2]的运算会受#1和#2误差的影响,由此会造成错误的判断。因此,应该用IF[ABS[#1-#2]LT0.001]代替上述语句,以避免两个变量的误差。
当两个变量的差值未超过允许极限(此处为0.001)时,则认为两个变量的值是相等的。
5)使用下取整指令时应小心。
例如:当计算#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]
13.除数
当在除法或TAN[90]中指定为0的除数时,出现P/S报警No.112。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。