标题：数控宏程序
数控宏程序的概念
用变量的方式进行数控编程的方法就叫做数控宏程序编程。
数控宏程序的分类
数控宏程序分为A类和B类宏程序，其中A类宏程序比较老，编写起来也比较费时费力，B类宏程序类似于C语言的编程，编写起来也很方便。不论是A类还B类宏程序，它们运行的效果都是一样的。
一般说来，华中的数控机床用的是B类宏程序，广州数控机床用的是A类宏程序。
数控宏程序的优点
1.可以编写一些非圆曲线，如宏程序编写椭圆，双曲线，抛物线等。
2.编写一些大批相似零件的时候，可以用宏程序编写，这样只需要改动几个数据就可以了，没有必要进行大量重复编程。
数控宏程序的使用方法
一、A类宏程序1）变量的定义和替换 #i=#j 
编程格式 G65 H01 P#i Q#j
例 G65 H01 P#101 Q1005； (#101=1005) 
G65 H01 P#101 Q-#112；(#101=-#112) 
2）加法 #i=#j+#k
编程格式 G65 H02 P#i Q#j R#k 
例 G65 H02 P#101 Q#102 R#103；(#101=#102+#103)
3）减法 #i=#j-#k
编程格式 G65 H03 P#i Q#j R#k
例 G65 H03 P#101 Q#102 R#103；(#101=#102-#103)
4）乘法 #i=#j×#k
编程格式 G65 H04 P#i Q#j R#k
例 G65 H04 P#101 Q#102 R#103；(#101=#102×#103)
5）除法 #i=#j / #k
编程格式 G65 H05 P#i Q#j R#k
例 G65 H05 P#101 Q#102 R#103；(#101=#102/#103)
6）平方根 #i= 
编程格式 G65 H21 P#i Q#j
例 G65 H21 P#101 Q#102；(#101= )
7）绝对值 #i=│#j│
编程格式 G65 H22 P#i Q#j
例 G65 H22 P#101 Q#102；(#101=│#102│) 
8）复合平方根1 #i= 
编程格式 G65 H27 P#i Q#j R#k
例 G65 H27 P#101 Q#102 R#103；( #101= 
9）复合平方根2 #i= 
编程格式 G65 H28 P#i Q#j R#k
例 G65 H28 P#101 Q#102 R#103 
1）逻辑或 #i=#j OR #k
编程格式 G65 H11 P#i Q#j R#k
例 G65 H11 P#101 Q#102 R#103；(#101=#102 OR #103)
2）逻辑与 #i=#j AND #k
编程格式 G65 H12 P#i Q#j R#k
例 G65 H12 P#101 Q#102 R#103；#101=#102 AND #103 
（3）三角函数指令 
1）正弦函数 #i=#j×SIN(#k) 
编程格式 G65 H31 P#i Q#j R#k (单位：度) .
例 G65 H31 P#101 Q#102 R#103；(#101=#102×SIN(#103))
2）余弦函数 #i=#j×COS(#k)
编程格式 G65 H32 P#i Q#j R#k (单位：度)
例 G65 H32 P#101 Q#102 R#103；(#101=#102×COS(#103))
3）正切函数 #i=#j×TAN#k
编程格式 G65 H33 P#i Q#j R#k (单位：度)
例 G65 H33 P#101 Q#102 R#103；(#101=#102×TAN(#103))
4）反正切 #i=ATAN(#j/#k)
编程格式 G65 H34 P#i Q#j R#k (单位：度，0o≤ #j ≤360o)
例 G65 H34 P#101 Q#102 R#103；(#101=ATAN(#102/#103)
（4）控制类指令
编程格式 G65 H80 Pn (n为程序段号)
例 G65 H80 P120；(转移到N120)
2）条件转移1 #j EQ #k(=)
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
例 G65 H81 P1000 Q#101 R#102
当#101=#102，转移到N1000程序段；若#101≠ #102，执行下一程序段。
3）条件转移2 #j NE #k（≠）
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
例 G65 H82 P1000 Q#101 R#102
当#101≠ #102，转移到N1000程序段；若#101=#102，执行下一程序段。
4）条件转移3 #j GT #k (> )
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
例 G65 H83 P1000 Q#101 R#102
当#101 > #102，转移到N1000程序段；若#101 ≤#102，执行下一程序段。
5）条件转移4 #j LT #k（<）
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
例 G65 H84 P1000 Q#101 R#102 
当#101 < #102，转移到N1000；若#101 ≥ #102，执行下一程序段。
6）条件转移5 #j GE #k(≥)
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
例 G65 H85 P1000 Q#101 R#102
当#101≥ #102，转移到N1000；若#101<#102，执行下一程序段。
7）条件转移6 #j LE #k（≤）
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
例 G65 H86 P1000 Q#101 R#102
当#101≤#102，转移到N1000；若#101>#102，执行下一程序段。二、B类宏程序1． 定义 　　
#I=#j 　　
2． 算术运算 　　
#I=#j+#k 　　（加）
#I=#j－#k 　　（减）
#I=#j×#k 　　（乘）
#I=#j/#k 　  （除）
3.1 逻辑函数之布尔函数
=　　EQ　　等于
≠　　NE　　不等于
>　　GT　　大于
<　　LT　　小于
≥　　GE　　大于或等于
≤　　LE　　小于或等于
例：#I = #j　即#I EQ #J
3.2 逻辑函数之二进制函数　　
#I=#J AND #k 　　（与，逻辑乘）
#I=#J OR #k 　　（或，逻辑加）
#I=#J XOR #k 　　（非，逻辑减）
4．三角函数 　　
#I=SIN[#j] 正弦 　　
#I=COS[#j] 余弦 　　
#I=TAN[#j] 正切
#I=ASIN[#j]反 正弦 　　
#I=ACOS[#j]反 余弦 　　#I=ATAN[#j] 反正切
5.四舍五入函数
#I=ROUND[#j]　四舍五入化整 　　
#I=FIX[#j]　上取整 　　
#I=FUP[#j]　下取整
6.辅助函数
#I=SQRT[#j]　平方根 　　
#I=ABS[#j]　绝对值 　　
#I= LN [#j]　自然对数　　
#I= EXP [#j]  指数函数
7.变换函数 　　#I=BIN[#j]　BCD→BIN（十进制转二进制） 　　
#I=BCD[#j]　BIN→BCD 　（二进制转十进制）
8.转移和循环　
1〉．无条件的转移 　　格式：　GOTO　1； 　　GOTO　#10； 　　
2〉．条件转移1 　　格式：　IF[<条件式>]　GOTO　n 　　
条件式：例：#j=#k用  #j EQ #k 表示，即  IF[#j EQ #k] GOTO n
3〉.条件转移2　　格式：　IF[<条件式>]　THEN #I
例：IF[#j EQ #k] THEN #a=#b
4〉.循环    格式：WHILE [<条件式>] DOm ，         （m=1、2、3）
N10~~~~~~~~~
N20~~~~~~~~~~~~
ENDm                                               （上下两个m只能为1、2、3且必须相
同， 这样才能够成一段程序的循环）
1． 说明 　　1) 角度单位为度 　　例：90度30分为90．5度 　　
2) ATAN函数后的两个边长要用“1”隔开 　　例：#1=ATAN[1]/[－1]时，#1为了35．0 　　
3) ROUND用于语句中的地址，按各地址的最小设定单位进行四舍五入 　　
例：设#1=1．2345，#2=2．3456，设定单位1μm 　　
G91　X－#1；X－1．235 　　X－#2　F300；X－2．346 　　X[#1+#2]；X3．580 　　未返回原处，应改为 　　X[ROUND[#1]+ROUND[#2]]； 　　
4) 取整后的绝对值比原值大为上取整，反之为下取整 　　例：设#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 　　
5) 简写函数时，可只写开头2个字母 　　例：ROUND→RO 　　FIX→FI 　　GOTO→GO
6) 优先级 　　函数→乘除（*，1，AND）→加减（+，－，OR，XOR） 　　例：#1=#2+#3*SIN[#4]； 　　
7) 括号为中括号，最多5重，园括号用于注释语句 　　例：#1=SIN[[[#2+#3]*#4+#5]*#6]；（3重）
转移与循环指令