1、新代数控车床宏程序说明书实用标准一用户宏程序的基本概念用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的 功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代 表指令称为用户宏命令,也称作宏程序调用指令。用户宏有以下四个主要特征:1)在用户用户宏程序中可以使用变量,即宏程序体中能含有复杂的表达式; 2)能够进行变量之间的各种运算;3)可以用用户宏指令对变量进行赋值,就象许多高级语言中的带参函数或过程, 实参能赋值给形参;4)容易实现程序流程的控制。使用用户宏时的主要方便之处在于由于可
2、以用变量代替具体数值,因而在加工 同一类的工件时只得将实际的值赋予变量既可,而不需要对每个不同的零件都编 一个程序。二 基本书写格式数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。 当标题行含有关键字“MACRO”时整个文档就会以系统所定义的 MACRO 语法 处理。如果该行无“MACRO”关键词此档案就会被视为一般 ISO 程序文档格式 处理,此时将不能编写用户宏和使用其 MACRO 语法。而当书写 ISO 程序文档时标 题行一般可以省略,直接书写数控程序。“MACRO”关键词必须是大写字母。对于程序的注释可以采用“/ ”的形式,这和高级语言 C+一样。 例一:MACR
3、O 格式文档% MACRO / 用户宏程序文档,必须包含“MACRO”关键词 IF 1 = 1 THENG00 X100. ;ELSEG00 Z100. ;END_IF;M99;例二:ISO 格式文档% 这是标题行,可当作档案用途说明,此行可有可无文档实用标准G00 X100. ;G00 Z100. ;G00 X0 ;G00 Z0 ;M99;文档实用标准三 用户宏程序的编写如前所述,变量是指可以在用户宏程序中的地址码后代替具体数值,在调用宏 程序时进行赋值的符号i (i1,2,3, )。使用变量可以使用户宏程序具有通用 性。用户宏程序中可以使用多个变量,以变量编号进行识别。1、 变量的形式变量
4、是用符号或后面加上变量编号所构成的,即:i(i1,2,3, )例如:51091005也可用表达式的形式来表示。例如:#100#1001 1#6/2其实,通过用符号后面加上变量编号也可构成的变量,即: i(i1,2,3, )例如:5 5但一般地,由符号后面加上变量编号构成的变量称为全局变量,不提倡在用 户宏程序中使用,具体见后面的介绍。2、 变量的引用在地址符后的数值可以用变量置换。例如:若写成 F#33,则当33 1.5 时,与 F1.5 相同。若写成 Z#18, 则当1820.0 时,与 Z20.0 相同。但需要注意,作为地址符的 O、N、等,不能引用变量。例如,O#27、N#1 等,都是错
5、误的。3、 未定义变量尚未被定义的变量,被称为空(VACANT)。变量0,0 始终为空,经常被用作空变量使用。3变量赋值和引数赋值变量赋值:用户宏程序中变量赋值使用赋值运算符“:=”,不可仅用“=”符文档实用标准号。因为在本系统中符号“=” 是被规定为关系运算符,用来比较是否相等的。 例如#30 :=100 ,会将变量#30 赋值为整数 100 ;而#30=100 ,将不能为变量 #30 赋值,实际上是比较变量#30 是否与整数 100 相等。四变量运算及变量表达式用户宏运算符要对变量进行各种运算操作就要用到运算符,它是“能对变量所存数据进行运 算的符号”。本系统的运算符及其优先级如表 3-2
6、 所示。表 3-2 运算符及其优先级运算名括号函数调用运算取负求补运算乘法运算除法运算模运算/求余运算 加法运算减法运算关系运算相等运算不等运算布尔逻辑/按位与 布尔逻辑/按位 异或 布尔逻辑/按位 或、基本算数运算符符号( ), ( ) -NOT*/MOD+-,=&,ANDXOROR优先级12334445567891011(1) +(2) -(3) *(4) /(加法运算符,如 3+5,#12+4 )(减法运算符,或取负运算符,如#33-16 ,-#16) (乘法运算符,如 9*2 ,#13*8 )(除法运算符,如 10/3 ,#43/15 )(5)MOD (模运算符,或称求余运算符,其两侧
7、均应为整型数据,如 7 MOD4 的值为 3,当#18=20 时#18 MOD4 的值为 2)文档实用标准、算术表达式和运算符优先级用算术运算符和括号将运算对象连接起来的、符合语法规则的式子称为算术表 达式,运算对象可以是常数、变量、函数等。例如:#6*8/#32-1.5+#18+ ROUND (1)这就是一个算术运算式,它可以作为一个整体赋值给某个变量,或用作其他表 达式中的一个运算对象。本系统按表表 3-2 规定了运算符的优先级和结合性。在表达式求值时,先按运 算符的优先级别高低次序执行,例如先乘除后加减。如表达式#12-#41*5 的左侧为 减,右侧为乘号,而乘号优先于减号,因此,相当于
8、#12-(#41*5 )。如果在一个运算对象两侧的运算符的优先级别相同,如#2-5+#23 ,则按规定 的结合性(结合方向)处理,算术运算符的结合方向为“自左至右”,即先左后右。 因此 5 先与减号结合,执行#2-5 的运算,再执行加#23 的运算。这样“自左至右的 结合方向”又称为“左结合性”,即运算对象先与左面的运算符结合;对应地,也 有“右结合性”的运算符,例如赋值运算符“:=”就是。、关系运算符和关系表达式关系运算符是逻辑运算中比较简单的一种。所谓“关系运算”实际上就是“比 较运算”。将两个值进行比较,判断比较的结果是否符合给定的条件。例如,#310 是一个关系表达式,大于号()是一个
9、关系运算符,如果#3=12, 则满足给定的“#310”条件,因此关系表达式的值为“真”(即“条件满足”); 如果#3=6,不满足“#310”条件,则称关系表达式的值为“假”。本系统提供 6 种关系运算符: (1) (小于)(2) (大于)(4) = (大于或等于) (5) = (等于)(6) (不等于)优先级相同(高)优先级(较高) 优先级(低)关于优先次序:1、前 4 种关系运算符(,)的优先级别相同,它们却高于关 系运算符“=”,而“=”又高于“”2、关系运算符的优先级低于算术运算符。3、关系运算符的优先级高于赋值运算符。用两个关系运算符将两个表达式连接起来的式子,称为关系表达式。文档实用
10、标准例如:#636 ,#13+4#23关系表达式的值是一个逻辑值,即“真”或“假”。例如,若#12 为 8,则关 系表达式“#12=10 ”的值为“假”,“#12=6 ”的值为“真”。、逻辑运算和逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。本系统提供 6 种逻辑运算符和逻辑运算(1) &,AND 逻辑与(2) XOR(3) OR逻辑或逻辑异或它们都是“双目(元)运算符”,它要求有两个运算量(操作数),逻辑运算 举例如下:#1 AND #2#1 OR #2若#1 、#2 为真,则#1 AND #2 为真。 若#1 、 #2 之一为真,则#1 XOR #2 为真。逻辑运算符低
11、于关系运算符,见图 3-1。算术运算符关系运算符逻辑运算符赋值运算符图 3-1(高)(低)五 用户宏程序的流程控制所谓程序的流程(Flow Control )是通过控制程序的执行方向,进而掌握程序 动态。这用户宏程序区别于一般数控程序的特征之一,也是用户选择用户宏程序编 写数控代码的一大理由。用户宏程序的流程控制包括无条件判断、循环控制、无条 件转移三大类,这与其他的高级语言程序类似,下面将分别介绍其功能和使用语法。 、条件判断判断条件的真假,然后根据真假或者对应情况到指定的地方去执行程序,这方 面的语句有 IF 和 CASE 语句。1、IF 条件语句1)基本语法:文档实用标准IF THENE
12、LSEIF THEN ELSEEND_IF ;说明:IF 条件判断,根据真假情况到指定的地方去执行程序。例如:% MACRO/ 启动 MACRO 语法#1 := 3.0;G01 X20. 15. F200;IF #1 = 1 THEN ;X(1.0*1); (1.0*1);ELSEIF #1 = 2 THEN ;X(1.0*2); (1.0*2);ELSEIF #1 = 3 THEN ;X(1.0*3); (1.0*3);ELSE;X(1.0*4); (1.0*4);END_IF;X(1.0)(1.0);M30;然而在实际使用中,可以有以下一些变形:2)变形 1语法:IF THENELSEEN
13、D_IF;3)变形 2语法:IF THENEND_IF;编程时可根据需要选择合适的语法格式。、循环控制1、REPEAT 直到型循环语法:REPEATUNTIL END_REPEAT;说明:REPEAT 直到型循环控制,先执行循环体,后判断条件表达式,当条件 满足时退出循环。例如:% MACRO#10 := 30.;/ 启动 MACRO 语法文档实用标准#11 := 22.5.;#12 := #10/2;#13 := #11/2;#14 := 2.0;#15 := 1.5;G01 X#12 #13 F200.0;REPEATG00 X(#12+#14) (#13+#15);G01 X(#12+#
14、14) (#13-#15);X(#12-#14) (#13-#15);X(#12-#14) (#13+#15);X(#12+#14) (#13+#15);#14 := #14 + 2.0;#15 := #15 + 1.5;UNTIL (#14 #12) OR (#15 #13) END_REPEAT;X(1.0) (1.0);M30;.WHILE 当型循环语法:WHILE DOEND_WHILE;说明:WHILE 当型循环控制,先判断条件表达式,当条件满足时执行循环体, 否则退出循环。例如:% MACRO;#10 := 20.;#11 := 15.;#12 := #10/2;#13 := #1
15、1/2;#14 := 2.0;#15 := 1.5;G01 X#12 #13 F200.0;WHILE (#14 = #12) AND (#15 6.0 THENEXIT;END_IF;X(#12-#14) (#13+#15);X(#12+#14) (#13+#15);#14 := #14 + 2.0;#15 := #15 + 1.5;END_WHILE;X(-5.0) Z(5.0);M02;.FOR 循环语法:FOR := TO BY DO END_FOR;说明:FOR 循环控制,式中各参数意义如下循环变量控制循环次数的变量;表达式 1循环计数的起始值,可为整数或表达式;表达式 2循环计数的
16、终止值,可为整数或表达式;表达式 3循环计数每次的累加值,可为整数或表达式;循环体 循环每次执行内容;FOR 循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止 值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次 累加值,、无条件转移GOTO 转移语句语法:GOTO n;说明:无条件地跳到指定的 n 行号执行,其中 n 可为整数或表达式。GOTO 常 和 IF 语句搭配使用,那就是说当程序检查到某个条件满足时用 GOTO 语句去进一文档实用标准步处理,但应尽量少用该语句以提高程序可读性。 范例:% MACRO/ 启动 MACRO 语法IF( #1 = 2 )
17、 THEN GOTO 100;G01 X10. 10.;N100 G01 X30. 30.;M02;EXIT 循环中断语句语法:EXIT;说明:循环中断,跳离循环控制;用在循环控制中,通常 EXIT 都和 IF 语句搭 配使用,当某个条件满足后就跳离循环。请参考 WHILE 范例。六 库函数1、ABS调用方法:ABS()函数描述:求一个数的绝对值范例:#1 := ABS(-2.3); / #1 的结果是 2.3注:此处函数内“参数”既可为实际数值,也可为变量或表达式,以下若无特殊说 明均按此处理。2、SIN调用方法:SIN ()函数描述:求一个数的正弦值范例:#1 := SIN(#10);3、
18、ASIN调用方法:ASIN ()函数描述:求一个数的反正弦值范例:#1 := ASIN(#10);文档实用标准4、MAX调用方法:MAX()函数描述:求两个数的最大值范例 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( SIG
19、N(#10) 0 ) THENEND_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. 用户宏文档第一行必须为%MACRO;程序段的每一行结束需加“;”结束 符;对于用户宏子程序最后需加“M99 ;”,以便能返回到主程序。2. 变量赋值使用“:=
20、”符号,不可仅用“=”符号。3. 文档名储存需依照下列规则。例如:编写 G100 之 MACRO,需将该 MACRO 程序存在 C:CNCMACRO 目录底下,且文件名需为 G0100 ,不需扩展名。而编写 G100.1 之 MACRO,需将该 MACRO 程序存在 C:CNCMACRO 目录底下,且文件名需为 G100001 ,不需扩展名。4. 请多使用局部变量(#1#50), 模态变量(#2001#2100 ,#3001#3100) 为所有扩充 G 码的共享资源,请仅用于多个扩充 G 码间的数据交换,以节 省共享资源;如果需要系统定义的初始值,请使用用户参数( #4001#4100 ,#5
21、001 #5100 ) 。5. 请不要使用全局变量(Global Variables ,1999) ,因为 G 码执行时, 使用者的数据是由自变量(A_,B_ ,Z_)传入,由公共变量传递不符合使用 习惯。6. 系统在执行加工时对于 MACRO 程序会事先预编译,因此 MACRO 执行速 度会超前于 G、M 代码指令,因此当要求变量赋值或数据读取须与 G、M 代码指令发出的时间进程相同时,请于变量赋值或数据读取前加 WAIT() 指令,否则该变量赋值或该数据读取将无法与 G、M 代码同步。7. 不可改变模式 G 码(G00/G01/G02/G03/G33/G34/G35 ,G91/G90 ,
22、G40/G41/G42, ,)的状态,如果用户宏程序中需要改变其状态时,就需 要模态信息的回复,8. 对于长度或角度的自变量在运算前请使用 STD()函数将单位标准化,以符合 工具机使用习惯。9. 不可以改变坐标系统设定,G92/G54/G52 等与坐标系统相关指令不能使 用,否则图形仿真功能将失去参考意义。10. 请在程序中加上必要的注释,养成良好的编程习惯,以增加程序可读性和可 维护性,以帮助后续开发人员维护和排除问题。文档实用标准运算名括号函数调用运算 取负求补运算乘法运算除法运算模运算/求余运算 加法运算减法运算关系运算相等运算不等运算布尔逻辑/按位与 布尔逻辑/按位 异或 布尔逻辑/
23、按位 或函数名ABS附录 运算符及其优先级 符号( ), ( ) -NOT*/MOD+-,=&,ANDXOROR描述求一个数的绝对值范例:优先级12334445567891011ACOSASINATAN#1 := ABS(-2.3); /#1 的结果是 2.3 求一个数的反余弦值范例:#1 := ACOS(#10);求一个数的反正弦值范例:#1 := ASIN(#10);求一个数的反正切值范例:#1 := ATAN(#10);文档实用标准函数名COSMAXMINSINSQRTTANSIGNCEIL描述求一个数的余弦值范例:#1 := COS(#10);求两个数的最大值范例 1:#1 := MA
24、X(10 ,20); / #1 等于 20范例 2:#1 := MAX(#2 ,#3);求两个数的最小值范例 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 .E
25、ND_IF;返回比一个数大或与其相等的最小整数范例 1:文档实用标准函数名FLOORROUNDSTDSTDAXRANDOMPUSHPOP描述#2 := CEIL(2.3); / #2 等于 3范例 2:#2 := CEIL(#10);返回比一个数小或与其相等的最大整数范例 1:#2 := FLOOR(2.3); / #2 等于 2范例 2:#2 := FLOOR(#10);四舍五入化整范例 1:#2 := ROUND(2.3); / #2 等于 2范例 2:#2 := ROUND(#10);参数规范化, 读第一个参数为规范化对象, 根据第二 个参数使用最小增量方法,特别对小数编程尤为必要。 范
26、例:#9 := STD(#9 ,#1600); / 根据远轴规范化参数规范化, 读第一个参数为规范化对象, 根据第二 个轴地址参数使用最小增量方法范例:#24 := STDAX(#24 ,X); / 根据 X 轴规范化#3 := STDAX(#3 ,A); /根据 A 轴规范化产生一个伪随机数范例:#1 := RANDOM();进宏堆栈范例:PUSH(#1); / 变量#1 内容进栈PUSH(#3); / 变量#3 内容进栈出宏堆栈范例:#1 := POP( ); / 出栈值赋给变量#1文档实用标准函数名STKTOP描述从栈顶依据索引获取堆栈元素, 范例:但不弹出此元素ALARMSLEEPSTKTOP(0); / 栈顶元素STKTOP(1); / 栈顶下的第一个元素STKTOP(2); / 栈顶下的第二个元素 etc发出宏警告范例:ALARM(300); / 发出标识号为 300 的警告 ALARM(#1); / #1 必须为整数临时放弃执行循环范例:SLEEP();文档
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1