第四章:算术运算在宏程序中的实现

各位工程师朋友,今天我们来聊聊宏程序里的算术运算。说实话,这部分内容看着基础,但真正用好的没几个。我见过太多人只会用G01、G02这些基本指令,一碰到变量计算就头疼。其实说白了,宏程序的核心就是让机床自己算、自己判断、自己干活。

4.1 加减乘除:最基础的运算

先看个最简单的例子。你要在工件上钻一排孔,间距10mm,共5个孔。传统写法你得写5行G代码。用宏程序呢?

#1 = 0          ; 起始位置
#2 = 10         ; 间距
#3 = 1          ; 计数器

WHILE [#3 LE 5] DO1
    G90 G00 X#1 Y0
    G81 R2 Z-10 F100
    #1 = #1 + #2    ; 加法运算
    #3 = #3 + 1     ; 计数器加1
END1

看到没?#1 = #1 + #2 这一行,就是加法。我刚开始学的时候总觉得别扭——怎么变量还能自己加自己?后来想明白了,这就是把右边的计算结果赋给左边。

我的习惯:做加法时,我一般把累加变量放在左边,增量放在右边。比如 #100 = #100 + #101,这样一眼就能看出哪个是累加器。

减法、乘法、除法同理:

#10 = #20 - #30    ; 减法
#10 = #20 * #30    ; 乘法
#10 = #20 / #30    ; 除法

这里有个坑,我踩过好几次。除法时,如果分母是0,机床直接报警停机。所以做除法前,一定要检查分母:

IF [#30 EQ 0] GOTO 100
#10 = #20 / #30
...
N100 #3000 = 100 (分母为零,程序终止)

4.2 取余运算:被忽视的好工具

取余运算,符号是MOD。它返回的是除法后的余数。你可能觉得这玩意儿没用,但我在项目中用它解决过不少实际问题。

举个例子:你要在圆周上均布6个孔。怎么判断当前是不是第6个孔?用取余:

#1 = 1          ; 当前孔号
#2 = 6          ; 总孔数

WHILE [#1 LE #2] DO1
    ; 加工第#1个孔
    IF [#1 MOD 2 EQ 0] THEN
        ; 偶数孔,做特殊处理
    ENDIF
    #1 = #1 + 1
END1

我曾经做过一个项目,需要在每加工3个孔后执行一次刀具检测。用MOD就特别方便:

IF [#100 MOD 3 EQ 0] THEN
    ; 执行刀具检测
ENDIF
注意:不同厂家的系统对MOD的处理略有差异。FANUC系统里,#10 = #20 MOD #30 要求#30必须是正整数。我曾经在0i系统上吃过亏,用了负数做模数,结果报警了。

4.3 三角函数:让机床会算角度

三角函数在宏程序里太常用了。尤其是做斜面加工、圆弧插补、坐标旋转时,没有三角函数寸步难行。

常用的有:SIN(正弦)、COS(余弦)、TAN(正切)、ASIN(反正弦)、ACOS(反余弦)、ATAN(反正切)。

看个实际例子:你要在直径100mm的圆上,每隔30度钻一个孔。共12个孔。用三角函数算坐标:

#1 = 50         ; 半径
#2 = 0          ; 起始角度
#3 = 30         ; 角度增量

WHILE [#2 LT 360] DO1
    #10 = #1 * COS[#2]    ; X坐标
    #11 = #1 * SIN[#2]    ; Y坐标
    G90 G00 X#10 Y#11
    G81 R2 Z-10 F100
    #2 = #2 + #3
END1

这里要注意,宏程序里的角度单位是度,不是弧度。我见过有人把数学里的弧度直接搬过来用,结果孔位全偏了。

避坑指南:我曾经在加工一个斜面时,需要用反正切算角度。当时我写的是 #1 = ATAN[#2 / #3],结果发现当#3为0时直接报警。后来我改成 #1 = ATAN[#2] / [#3] 的形式,先判断分母是否为0。

4.4 运算优先级与括号

宏程序的运算优先级和数学一样:先乘除后加减,括号优先。但我的建议是——多用括号,别省。

看这两个表达式:

#10 = #1 + #2 * #3      ; 先乘后加
#10 = [#1 + #2] * #3    ; 先加后乘

结果完全不同。我习惯把所有运算都用括号括起来,哪怕优先级是对的。这样别人看你的程序,一眼就能明白运算顺序。

运算符 功能 示例
+ 加法 #1 = #2 + #3
- 减法 #1 = #2 - #3
* 乘法 #1 = #2 * #3
/ 除法 #1 = #2 / #3
MOD 取余 #1 = #2 MOD #3
SIN 正弦 #1 = SIN[#2]
COS 余弦 #1 = COS[#2]
TAN 正切 #1 = TAN[#2]
ATAN 反正切 #1 = ATAN[#2]

4.5 知识体系总览

下面这张图,是我自己总结的算术运算知识结构。你照着这个框架去学,不会乱。

宏程序算术运算 加减乘除 取余 MOD 三角函数 运算优先级 坐标计算 循环计数 周期判断 奇偶检测 圆周分孔 斜面加工 括号使用 核心原则:先判断、后计算、多测试

这张图把算术运算分成了四大块。你仔细看,加减乘除是基础,取余是技巧,三角函数是进阶,优先级是规矩。我建议你从基础开始练,每练熟一个分支,再往下走。

我的建议:刚开始学的时候,别急着写复杂的宏程序。先在机床上跑几个简单的算术测试,比如 #1 = 10 + 20,然后看变量显示对不对。这一步能帮你建立信心。

好了,算术运算这部分就讲到这里。记住一句话:宏程序里的算术,就是让机床替你算。你只要把逻辑写对,剩下的交给机床。下次遇到重复性的加工,别傻傻地写几十行G代码了,试试用宏程序,你会爱上这种感觉的。


专注资料整理