当前位置:首页 >> 机械/仪表 >>

新代数控车床宏程序说明


一.用户宏程序的基本概念
用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的 功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。 在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代 表指令称为用户宏命令,也称作宏程序调用指令。 用户宏有以下四个主要特征: 1)在用户用户宏程序中可以使用变量,即宏程序体中能含

有复杂的表达式; 2)能够进行变量之间的各种运算; 3) 可以用用户宏指令对变量进行赋值, 就象许多高级语言中的带参函数或过程, 实参能赋值给形参; 4)容易实现程序流程的控制。 使用用户宏时的主要方便之处在于由于可以用变量代替具体数值,因而在加工 同一类的工件时〃只得将实际的值赋予变量既可,而不需要对每个不同的零件都编 一个程序。

二. 基本书写格式
数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。 当标题行含有关键字“@MACRO”时整个文档就会以系统所定义的 MACRO 语法 处理。如果该行无“@MACRO”关键词此档案就会被视为一般 ISO 程序文档格式处 理,此时将不能编写用户宏和使用其 MACRO 语法。而当书写 ISO 程序文档时标题 行一般可以省略,直接书写数控程序。“@MACRO”关键词必须是大写字母。 对于程序的注释可以采用“//??”的形式,这和高级语言 C++一样。 例一:MACRO 格式文档 % @MACRO //用户宏程序文档,必须包含“@MACRO”关键词 IF @1 = 1 THEN G00 X100.; ELSE G00 Z100.; END_IF; M99; 例二:ISO 格式文档 % 这是标题行,可当作档案用途说明,此行可有可无 G00 X100.; G00 Z100.; G00 X0; G00 Z0; M99;

第 1 页

三. 用户宏程序的编写
如前所述,变量是指可以在用户宏程序中的地址码后代替具体数值,在调用宏 程序时进行赋值的符号#i (i=1,2,3,?)。使用变量可以使用户宏程序具有通用 性。用户宏程序中可以使用多个变量,以变量编号进行识别。 1、 变量的形式 变量是用符号#或@后面加上变量编号所构成的,即: #i(i=1,2,3,?) 例如:#5 #109 #1005 也可用#[<表达式>]的形式来表示。 例如:#[#100] #[#1001-1] #[#6/2] 其实,通过用符号@后面加上变量编号也可构成的变量,即: @ i(i=1,2,3,?) 例如:@5 @ [@5] 但一般地,由符号@后面加上变量编号构成的变量称为全局变量,不提倡在用 户宏程序中使用,具体见后面的介绍。 2、 变量的引用 在地址符后的数值可以用变量置换。 例如: 若写成 F#33,则当#33=1.5 时,与 F1.5 相同。 若写成 Z-#18,则当#18=20.0 时,与 Z-20.0 相同。 但需要注意,作为地址符的 O、N、/等,不能引用变量。 例如,O#27、N#1 等,都是错误的。 3、未定义变量 尚未被定义的变量,被称为空(VACANT)。 变量#0,@0 始终为空,经常被用作空变量使用。

3.变量赋值和引数赋值
变量赋值:用户宏程序中变量赋值使用赋值运算符“:=”,不可仅用“=”符号。 因为在本系统中符号“=” 是被规定为关系运算符,用来比较是否相等的。 例如#30:=100,会将变量#30 赋值为整数 100;而#30=100,将不能为变量#30 赋值,实际上是比较变量#30 是否与整数 100 相等。

第 2 页

四.变量运算及变量表达式
1.用户宏运算符
要对变量进行各种运算操作就要用到运算符,它是“能对变量所存数据进行运 算的符号”。本系统的运算符及其优先级如表 3-2 所示。 表 3-2 运算符及其优先级 运算名 括号 函数调用运算 取负 求补运算 乘法运算 除法运算 模运算/求余运算 加法运算 减法运算 关系运算 相等运算 不等运算 布尔逻辑/按位与 布尔逻辑/按位 异或 布尔逻辑/按位 或 符号 ( ),[ ] <函数名>(<参数列表> ) NOT * / MOD + <,>,<=,>= = <> &,AND XOR OR 优先级 1 2 3 3 4 4 4 5 5 6 7 8 9 10 11

2、基本算数运算符
(1) + (加法运算符,如 3+5,#12+4) (2) (减法运算符,或取负运算符,如#33-16,-#16) (3) * (乘法运算符,如 9*2,#13*8) (4) / (除法运算符,如 10/3,#43/15) (5)MOD (模运算符,或称求余运算符,其两侧均应为整型数据,如 7 MOD4 的值为 3,当#18=20 时#18 MOD4 的值为 2)

3、算术表达式和运算符优先级
用算术运算符和括号将运算对象连接起来的、符合语法规则的式子称为算术表 达式,运算对象可以是常数、变量、函数等。 例如:#6*8/#32-1.5+#18+ ROUND(#1) 这就是一个算术运算式,它可以作为一个整体赋值给某个变量,或用作其他表 达式中的一个运算对象。 本系统按表表 3-2 规定了运算符的优先级和结合性。在表达式求值时,先按运 算符的优先级别高低次序执行, 例如先乘除后加减。 如表达式#12-#41*5 的左侧为减,

右侧为乘号,而乘号优先于减号,因此,相当于#12-(#41*5)。 如果在一个运算对象两侧的运算符的优先级别相同,如#2-5+#23,则按规定的 结合性(结合方向)处理,算术运算符的结合方向为“自左至右”,即先左后右。 因此 5 先与减号结合,执行#2-5 的运算,再执行加#23 的运算。这样“自左至右的 结合方向”又称为“左结合性”,即运算对象先与左面的运算符结合;对应地,也 有“右结合性”的运算符,例如赋值运算符“:=”就是。

4、关系运算符和关系表达式
关系运算符是逻辑运算中比较简单的一种。所谓“关系运算”实际上就是“比 较运算”。将两个值进行比较,判断比较的结果是否符合给定的条件。 例如, #3>10 是一个关系表达式, 大于号 (>) 是一个关系运算符, 如果#3=12, 则满足给定的“#3>10”条件,因此关系表达式的值为“真”(即“条件满足”); 如果#3=6,不满足“#3>10”条件,则称关系表达式的值为“假”。 本系统提供 6 种关系运算符: (1) < (小于) (2) <= (3) > (4) >= (5) = (6) <> 关于优先次序: (小于或等于) (大于) (大于或等于) (等于) (不等于) 优先级相同(高)

优先级(较高) 优先级(低)

1、前 4 种关系运算符(<,<=,>,>=)的优先级别相同,它们却高于关 系运算符“=”,而“=”又高于“<>” 2、关系运算符的优先级低于算术运算符。 3、关系运算符的优先级高于赋值运算符。 用两个关系运算符将两个表达式连接起来的式子,称为关系表达式。 例如:#6>36,#13+4<>#23 关系表达式的值是一个逻辑值,即“真”或“假”。例如,若#12 为 8,则关系 表达式“#12=10”的值为“假”,“#12>=6”的值为“真”。

5、逻辑运算和逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。 本系统提供 6 种逻辑运算符和逻辑运算 (1) &,AND 逻辑与 (2) XOR 逻辑或 (3) OR 逻辑异或 它们都是“双目(元)运算符”,它要求有两个运算量(操作数),逻辑运算 举例如下: #1 AND #2 若#1 、#2 为真,则#1 AND #2 为真。 #1 OR #2 若#1 、 #2 之一为真,则#1 XOR #2 为真。

逻辑运算符低于关系运算符,见图 3-1。 算术运算符 关系运算符 逻辑运算符 赋值运算符 图 3-1 (低) (高)

五. 用户宏程序的流程控制
所谓程序的流程(Flow Control)是通过控制程序的执行方向,进而掌握程序动 态。这用户宏程序区别于一般数控程序的特征之一,也是用户选择用户宏程序编写 数控代码的一大理由。用户宏程序的流程控制包括无条件判断、循环控制、无条件 转移三大类,这与其他的高级语言程序类似,下面将分别介绍其功能和使用语法。

1、条件判断
判断条件的真假,然后根据真假或者对应情况到指定的地方去执行程序,这方 面的语句有 IF 和 CASE 语句。 1、IF 条件语句 1)基本语法: IF <条件表达式> THEN→<操作>→ELSEIF <条件表达式> THEN→<操作>→ ELSE→<操作>→END_IF; 说明:IF 条件判断,根据真假情况到指定的地方去执行程序。 例如: % @MACRO // 启动 MACRO 语法 #1 := 3.0; G01 X20. Z15. F200; IF #1 = 1 THEN;X(1.0*1);Z(1.0*1); ELSEIF #1 = 2 THEN;X(1.0*2);Z(1.0*2); ELSEIF #1 = 3 THEN;X(1.0*3);Z(1.0*3); ELSE;X(1.0*4);Z(1.0*4); END_IF;X(1.0)Z(1.0); M30; 然而在实际使用中,可以有以下一些变形: 2)变形 1 语法: IF <条件表达式> THEN→<操作>→ELSE→<操作>→END_IF;

3)变形 2 语法: IF <条件表达式> THEN→<操作>→END_IF; 编程时可根据需要选择合适的语法格式。

2、循环控制
1、REPEAT 直到型循环 语法: REPEAT <循环体> UNTIL <条件表达式> END_REPEAT; 说明:REPEAT 直到型循环控制,先执行循环体,后判断条件表达式,当条件 满足时退出循环。 例如: % @MACRO #10 := 30.; #11 := 22.5.; #12 := #10/2; #13 := #11/2; #14 := 2.0; #15 := 1.5; G01 X#12 Z#13 F200.0; REPEAT G00 X(#12+#14) Z(#13+#15); G01 X(#12+#14) Z(#13-#15); X(#12-#14) Z(#13-#15); X(#12-#14) Z(#13+#15); X(#12+#14) Z(#13+#15); #14 := #14 + 2.0; #15 := #15 + 1.5; UNTIL (#14 > #12) OR (#15 > #13) END_REPEAT; X(1.0) Z(1.0); M30; // 启动 MACRO 语法

3.WHILE 当型循环
语法: WHILE <条件表达式> DO→<循环体>→END_WHILE; 说明:WHILE 当型循环控制,先判断条件表达式,当条件满足时执行循环体,

否则退出循环。 例如: % @MACRO; #10 := 20.; #11 := 15.; #12 := #10/2; #13 := #11/2; #14 := 2.0; #15 := 1.5; G01 X#12 Z#13 F200.0; WHILE (#14 <= #12) AND (#15 <= #13) DO G00 X(#12+#14) Z(#13+#15); G01 X(#12+#14) Z(#13-#15); X(#12-#14) Z(#13-#15); IF #14 > 6.0 THEN EXIT; END_IF; X(#12-#14) Z(#13+#15); X(#12+#14) Z(#13+#15); #14 := #14 + 2.0; #15 := #15 + 1.5; END_WHILE; X(-5.0) Z(5.0); M02;

4.FOR 循环
语法: FOR <循环变量> := <表达式 1> TO <表达式 2> [ BY <表达式 3>] DO <循环体> END_FOR; 说明:FOR 循环控制,式中各参数意义如下 循环变量——控制循环次数的变量; 表达式 1——循环计数的起始值,可为整数或表达式; 表达式 2——循环计数的终止值,可为整数或表达式; 表达式 3——循环计数每次的累加值,可为整数或表达式; 循环体 ——循环每次执行内容; FOR 循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止 值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次 累加值,

5、无条件转移
GOTO 转移语句 语法: GOTO n; 说明:无条件地跳到指定的 n 行号执行,其中 n 可为整数或表达式。GOTO 常 和 IF 语句搭配使用, 那就是说当程序检查到某个条件满足时用 GOTO 语句去进一步 处理,但应尽量少用该语句以提高程序可读性。 范例: % @MACRO // 启动 MACRO 语法 … IF( #1 = 2 ) THEN GOTO 100; G01 X10. Z10.; … N100 G01 X30. Z30.; … M02; EXIT 循环中断语句 语法:EXIT; 说明:循环中断,跳离循环控制;用在循环控制中,通常 EXIT 都和 IF 语句搭 配使用,当某个条件满足后就跳离循环。 请参考 WHILE 范例。

六. 库函数
1、ABS 调用方法:ABS(<参数>) 函数描述:求一个数的绝对值 范例: #1 := ABS(-2.3); // #1 的结果是 2.3 [注]:此处函数内“参数”既可为实际数值,也可为变量或表达式,以下若无特殊说 明均按此处理。 2、SIN 调用方法:SIN (<参数>) 函数描述:求一个数的正弦值 范例: #1 := SIN(#10); 3、ASIN 调用方法:ASIN (<参数>) 函数描述:求一个数的反正弦值

范例: #1 := ASIN(#10); 4、MAX 调用方法:MAX(<参数 1,参数 2>) 函数描述:求两个数的最大值 范例 1: #1 := MAX(10,20); // #1 等于 20 范例 2: #1 := MAX(#2,#3); 5、SQRT 调用方法:SQRT (<参数>) 函数描述:求一个数的平方根值 范例 1: #2 := SQRT(3); // #2 等于 1.732 范例 2: #16 := SQRT(#10); 6、SIGN 调用方法:SIGN (<参数>) 函数描述:返回一个数的符号,-1 表示该数是负数,1 表示该数是正数,0 表示该数 是零。 范例: IF( SIGN(#10) > 0 ) THEN ? END_IF; 5、 CEIL 调用方法:CEIL(<参数>) 函数描述:返回比一个数大或与其相等的最小整数 范例 1: #2 := CEIL(2.3); // #2 等于 3 范例 2: #2 := CEIL(#10); 7、ROUND 调用方法:ROUND (<参数>) 函数描述:四舍五入化整, 范例 1: #2 := ROUND(2.3); // #2 等于 2 范例 2: #2 := ROUND(#10);

七.用户宏程序编写注意事项
1. 2. 3. 用户宏文档第一行必须为%@MACRO;程序段的每一行结束需加“;”结束 符;对于用户宏子程序最后需加“M99;”,以便能返回到主程序。 变量赋值使用“:=”符号,不可仅用“=”符号。 文档名储存需依照下列规则。 例如:编写 G100 之 MACRO,需将该 MACRO 程序存在 C:\CNC\MACRO 目录底下,且文件名需为 G0100,不需扩展名。 而编写 G100.1 之 MACRO,需将该 MACRO 程序存在 C:\CNC\MACRO 目 录底下,且文件名需为 G100001,不需扩展名。 请多使用局部变量(#1~#50), 模态变量(#2001~#2100 #3001~#3100)为所有扩 , 充 G 码的共享资源,请仅用于多个扩充 G 码间的数据交换,以节省共享资 源;如果需要系统定义的初始值,请使用用户参数( #4001~#4100,#5001~ #5100 )。 5. 6. 请不要使用全局变量(Global Variables,@1~@999),因为 G 码执行时,使用 者的数据是由自变量(A_,B_…,Z_)传入,由公共变量传递不符合使用习惯。 系统在执行加工时对于 MACRO 程序会事先预编译,因此 MACRO 执行速 度会超前于 G、M 代码指令,因此当要求变量赋值或数据读取须与 G、M 代码指令发出的时间进程相同时,请于变量赋值或数据读取前加 WAIT() 指令,否则该变量赋值或该数据读取将无法与 G、M 代码同步。

4.

不可改变模式 G 码(G00/G01/G02/G03/G33/G34/G35,G91/G90, G40/G41/G42,…,)的状态,如果用户宏程序中需要改变其状态时,就需要 模态信息的回复, 8. 对于长度或角度的自变量在运算前请使用 STD()函数将单位标准化,以符合 工具机使用习惯。 9. 不可以改变坐标系统设定,G92/G54/G52 等与坐标系统相关指令不能使用, 否则图形仿真功能将失去参考意义。 10. 请在程序中加上必要的注释,养成良好的编程习惯,以增加程序可读性和可 维护性,以帮助后续开发人员维护和排除问题。 7.

附录Ⅳ 运算符及其优先级
运算名 括号 函数调用运算 取负 求补运算 乘法运算 除法运算 模运算/求余运算 加法运算 减法运算 关系运算 相等运算 不等运算 布尔逻辑/按位与 布尔逻辑/按位 异或 布尔逻辑/按位 或 函数名 ABS 描述 求一个数的绝对值 范例: #1 := ABS(-2.3); //#1 的结果是 2.3 求一个数的反余弦值 范例: #1 := ACOS(#10); 求一个数的反正弦值 范例: #1 := ASIN(#10); 求一个数的反正切值 范例: #1 := ATAN(#10); 求一个数的余弦值 范例: #1 := COS(#10); 求两个数的最大值 范例 1:
第 11 页

符号 ( ),[ ] <函数名>(<参数列表> ) NOT * / MOD + <,>,<=,>= = <> &,AND XOR OR

优先级 1 2 3 3 4 4 4 5 5 6 7 8 9 10 11

ACOS

ASIN

ATAN

COS

MAX

函数名

描述 #1 := MAX(10,20); // #1 等于 20 范例 2: #1 := MAX(#2,#3);

MIN

求两个数的最小值 范例 1: #1 := MIN(10.0,20.0); // #1 等于 10.0 范例 2: #1 := MIN(#10,#11); 求一个数的正弦值 范例: #1 := SIN(#10); 求一个数的平方根值 范例 1: #2 := SQRT(3); // #2 等于 1.732.. 范例 2: #2 := SQRT(#10); 求一个数的正切值 范例: #1 := TAN(#10); 返回一个数的符号,-1 表示该数是负数,1 表示该数是 正数,0 表示该数是零 范例: IF( SIGN(#10) > 0 ) THEN …. END_IF; 返回比一个数大或与其相等的最小整数 范例 1: #2 := CEIL(2.3); // #2 等于 3 范例 2: #2 := CEIL(#10); 返回比一个数小或与其相等的最大整数 范例 1: #2 := FLOOR(2.3); // #2 等于 2 范例 2: #2 := FLOOR(#10); 四舍五入化整 范例 1:

SIN

SQRT

TAN

SIGN

CEIL

FLOOR

ROUND

函数名

描述 #2 := ROUND(2.3); // #2 等于 2 范例 2:

STD

#2 := ROUND(#10); 参数规范化, 读第一个参数为规范化对象, 根据第二 个参数使用最小增量方法,特别对小数编程尤为必要。 范例: #9 := STD(#9,#1600); // 根据远轴规范化 参数规范化, 读第一个参数为规范化对象, 根据第二 个轴地址参数使用最小增量方法 范例: #24 := STDAX(#24,X); //根据 X 轴规范化 #3 := STDAX(#3,A); //根据 A 轴规范化

STDAX

RANDOM

产生一个伪随机数 范例: #1 := RANDOM(); 进宏堆栈 范例: PUSH(#1); // 变量#1 内容进栈 PUSH(#3); // 变量#3 内容进栈 出宏堆栈 范例: #1 := POP( ); //出栈值赋给变量#1 从栈顶依据索引获取堆栈元素,但不弹出此元素 范例: STKTOP(0); //栈顶元素 STKTOP(1); //栈顶下的第一个元素 STKTOP(2); //栈顶下的第二个元素 …etc 发出宏警告 范例: ALARM(300); // 发出标识号为 300 的警告 ALARM(#1); // #1 必须为整数 临时放弃执行循环 范例: SLEEP();

PUSH

POP

STKTOP

ALARM

SLEEP


相关文章:
新代数控车床宏程序说明
新代数控车床宏程序说明_机械/仪表_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档新代数控车床宏程序说明_机械/仪表_工程科技_专业资料。一.用户宏程序...
新代宏程序实例
新代宏程序实例_机械/仪表_工程科技_专业资料。1、REPEAT 直到型循环 REPEAT <...说明: WHILE 当型循环控制, 先判断条件表达式, 当条件满足时执行循环体, 否则...
数控车床新代说明书
51 -1- SNC Mill Controller Manual V3.0 第一单元 新代控制器面板操作说明 ...新代数控车床宏程序说明 13页 免费 数控机床设计说明书 52页 2下载券 数控车床...
数控车床宏程序
第三章宏程序编程 5 梯形螺纹 36×6 序号 参数 内容说明 1 2 3 4 #...单击“ ” ,在下拉菜单中击一下“加工” ,这时就会出现 新的对话框“加工...
数控车床宏程序编程
数控车床宏程序编程_机械/仪表_工程科技_专业资料。数控宏程序一.什么是宏程序? 什么是数控加工宏程序?简单地说, 宏程序是一种具有计算能力和决策能力的数控程序...
数控车床宏程序编程
数控车床宏程序编程_数学_自然科学_专业资料。数控车床宏程序从入门到精通 第一小节: 相信自己看过宏书籍的人车工朋友,你们一定会见到很多的犹如#1、 #2、#3.....
浅谈数控车床宏程序的编写技巧
浅谈数控车床宏程序的编写技巧 摘要 宏程序的编程思维基础是 “批处理 ”的概念, 它的最大特点是可以对变 量进行运算,使程序应用更加灵活方便,但在理解、使用中...
数控车床由浅入深的宏程序实例
局部变量#1~#33 一个在宏程序中局部使用的变量,其运算结果其他程序不可使用。...新代数控车床宏程序说明 13页 免费 数控车床椭圆宏程序 2页 免费 利用宏程序...
数控车床宏程序案例
数控车床宏程序案例_工学_高等教育_教育专区。数控车床宏程序案例教学 烟台机电工业...新代数控车床宏程序说明 13页 免费 数控车床加工椭圆的宏程... 5页 免费 ...
更多相关标签:
数控车床宏程序编程 | 数控车床椭圆宏程序 | 数控车床宏程序车四方 | 数控车床正弦宏程序 | 数控车床宏程序公式 | 数控车床宏程序教程 | ck6136数控车床说明书 | 数控车床说明书 |