收藏 分销(赏)

新代数控车床宏程序说明.doc

上传人:天**** 文档编号:9799156 上传时间:2025-04-08 格式:DOC 页数:16 大小:98.04KB 下载积分:8 金币
下载 相关 举报
新代数控车床宏程序说明.doc_第1页
第1页 / 共16页
新代数控车床宏程序说明.doc_第2页
第2页 / 共16页


点击查看更多>>
资源描述
一.用户宏程序的基本概念 用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。 在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代表指令称为用户宏命令,也称作宏程序调用指令。 用户宏有以下四个主要特征: 1)在用户用户宏程序中可以使用变量,即宏程序体中能含有复杂的表达式; 2)能够进行变量之间的各种运算; 3)可以用用户宏指令对变量进行赋值,就象许多高级语言中的带参函数或过程,实参能赋值给形参; 4)容易实现程序流程的控制。 使用用户宏时的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类的工件时.只得将实际的值赋予变量既可,而不需要对每个不同的零件都编一个程序。 二. 基本书写格式 数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。当标题行含有关键字“”时整个文档就会以系统所定义的语法处理。如果该行无“”关键词此档案就会被视为一般程序文档格式处理,此时将不能编写用户宏和使用其语法。而当书写程序文档时标题行一般可以省略,直接书写数控程序。“”关键词必须是大写字母。 对于程序的注释可以采用“……”的形式,这和高级语言一样。 例一:格式文档 % 用户宏程序文档,必须包含“”关键词 @1 = 1 G00 X100.; G00 Z100.; ; M99; 例二:格式文档 % 这是标题行,可当作档案用途说明,此行可有可无 G00 X100.; G00 Z100.; G00 X0; G00 Z0; M99; 16 / 16 三. 用户宏程序的编写 如前所述,变量是指可以在用户宏程序中的地址码后代替具体数值,在调用宏程序时进行赋值的符号#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、 变量的引用 在地址符后的数值可以用变量置换。 例如: 若写成33,则当#33=1.5时,和F1.5相同。 若写成Z-#18,则当#18=20.0时,和Z-20.0相同。 但需要注意,作为地址符的O、N、/等,不能引用变量。 例如,27、1等,都是错误的。 3、 未定义变量 尚未被定义的变量,被称为空()。 变量#0,@0 始终为空,经常被用作空变量使用。 3.变量赋值和引数赋值 变量赋值:用户宏程序中变量赋值使用赋值运算符“:=”,不可仅用“=”符号。因为在本系统中符号“=” 是被规定为关系运算符,用来比较是否相等的。 例如#30:=100,会将变量#30赋值为整数100;而#30=100,将不能为变量#30赋值,实际上是比较变量#30是否和整数100相等。 四.变量运算及变量表达式 1.用户宏运算符 要对变量进行各种运算操作就要用到运算符,它是“能对变量所存数据进行运算的符号”。本系统的运算符及其优先级如表3-2所示。 表3-2 运算符及其优先级 运算名 符号 优先级 括号 ( ),[ ] 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) (模运算符,或称求余运算符,其两侧均应为整型数据,如7 4的值为3,当#18=20时#18 4的值为2) 3、算术表达式和运算符优先级 用算术运算符和括号将运算对象连接起来的、符合语法规则的式子称为算术表达式,运算对象可以是常数、变量、函数等。 例如:#6*832-1.518+ (#1)   这就是一个算术运算式,它可以作为一个整体赋值给某个变量,或用作其他表达式中的一个运算对象。 本系统按表表3-2规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如表达式#1241*5的左侧为减,右侧为乘号,而乘号优先于减号,因此,相当于#12-(#41*5)。 如果在一个运算对象两侧的运算符的优先级别相同,如#2-523,则按规定的结合性(结合方向)处理,算术运算符的结合方向为“自左至右”,即先左后右。因此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) &, 逻辑和 (2) 逻辑或 (3) 逻辑异或 它们都是“双目(元)运算符”,它要求有两个运算量(操作数),逻辑运算举例如下: #1 #2 若#1 、#2为真,则#1 #2为真。 #1 #2 若#1 、 #2之一为真,则#1 #2为真。 逻辑运算符低于关系运算符,见图3-1。 (高) (低) 算术运算符 关系运算符 逻辑运算符 赋值运算符 图3-1 五. 用户宏程序的流程控制 所谓程序的流程( )是通过控制程序的执行方向,进而掌握程序动态。这用户宏程序区别于一般数控程序的特征之一,也是用户选择用户宏程序编写数控代码的一大理由。用户宏程序的流程控制包括无条件判断、循环控制、无条件转移三大类,这和其他的高级语言程序类似,下面将分别介绍其功能和使用语法。 1、条件判断 判断条件的真假,然后根据真假或者对应情况到指定的地方去执行程序,这方面的语句有和语句。 1、条件语句 1)基本语法: <条件表达式> →<操作>→ <条件表达式> →<操作>→→<操作>→; 说明:条件判断,根据真假情况到指定的地方去执行程序。 例如: % 启动语法 #1 3.0; G01 X20. Z15. F200; #1 = 1 ;X(1.0*1);Z(1.0*1); #1 = 2 ;X(1.0*2);Z(1.0*2); #1 = 3 ;X(1.0*3);Z(1.0*3); ;X(1.0*4);Z(1.0*4); (1.0)Z(1.0); M30; 然而在实际使用中,可以有以下一些变形: 2)变形1 语法: <条件表达式> →<操作>→→<操作>→; 3)变形2 语法: <条件表达式> →<操作>→; 编程时可根据需要选择合适的语法格式。 2、循环控制 1、直到型循环 语法: <循环体> <条件表达式> ; 说明:直到型循环控制,先执行循环体,后判断条件表达式,当条件满足时退出循环。 例如: % 启动语法 #10 30.; #11 22.5.; #12 #10/2; #13 #11/2; #14 2.0; #15 1.5; G01 12 Z#13 F200.0; G00 X(#1214) Z(#1315); G01 X(#1214) Z(#1315); X(#1214) Z(#1315); X(#1214) Z(#1315); X(#1214) Z(#1315); #14 #14 + 2.0; #15 #15 + 1.5; (#14 > #12) (#15 > #13) ; X(1.0) Z(1.0); M30; 3当型循环 语法: <条件表达式> →<循环体>→; 说明:当型循环控制,先判断条件表达式,当条件满足时执行循环体,否则退出循环。 例如: % ; #10 20.; #11 15.; #12 #10/2; #13 #11/2; #14 2.0; #15 1.5; G01 12 Z#13 F200.0; (#14 <= #12) (#15 <= #13) G00 X(#1214) Z(#1315); G01 X(#1214) Z(#1315); X(#1214) Z(#1315); #14 > 6.0 ; ; X(#1214) Z(#1315); X(#1214) Z(#1315); #14 #14 + 2.0; #15 #15 + 1.5; ; X(-5.0) Z(5.0); M02; 4循环 语法: <循环变量> := <表达式1> <表达式2> [ <表达式3>] <循环体> ; 说明:循环控制,式中各参数意义如下 循环变量——控制循环次数的变量; 表达式1——循环计数的起始值,可为整数或表达式; 表达式2——循环计数的终止值,可为整数或表达式; 表达式3——循环计数每次的累加值,可为整数或表达式; 循环体 ——循环每次执行内容; 循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次累加值, 5、无条件转移 转移语句 语法: n; 说明:无条件地跳到指定的n行号执行,其中n可为整数或表达式。常和语句搭配使用,那就是说当程序检查到某个条件满足时用语句去进一步处理,但应尽量少用该语句以提高程序可读性。 范例: % 启动语法 … ( #1 = 2 ) 100; G01 X10. Z10.; … N100 G01 X30. Z30.; … M02; 循环中断语句 语法:; 说明:循环中断,跳离循环控制;用在循环控制中,通常都和语句搭配使用,当某个条件满足后就跳离循环。 请参考范例。 六. 库函数 1、 调用方法:(<参数>) 函数描述:求一个数的绝对值 范例: #1 (-2.3); #1 的结果是 2.3 [注]:此处函数内“参数”既可为实际数值,也可为变量或表达式,以下若无特殊说明均按此处理。 2、 调用方法: (<参数>) 函数描述:求一个数的正弦值 范例: #1 (#10); 3、 调用方法: (<参数>) 函数描述:求一个数的反正弦值 范例: #1 (#10); 4、 调用方法:(<参数1,参数2>) 函数描述:求两个数的最大值 范例1: #1 (10,20); #1等于20 范例2: #1 (#2,#3); 5、 调用方法: (<参数>) 函数描述:求一个数的平方根值 范例1: #2 (3); #2 等于 1.732 范例2: #16 (#10); 6、 调用方法: (<参数>) 函数描述:返回一个数的符号,-1表示该数是负数,1表示该数是正数,0表示该数是零。 范例: ( (#10) > 0 ) … ; 5、 调用方法:(<参数>) 函数描述:返回比一个数大或和其相等的最小整数 范例1: #2 (2.3); #2 等于 3 范例2: #2 (#10); 7、 调用方法: (<参数>) 函数描述:四舍五入化整, 范例1: #2 (2.3); #2 等于 2 范例2: #2 (#10); 七.用户宏程序编写注意事项 1. 用户宏文档第一行必须为;程序段的每一行结束需加“;”结束符;对于用户宏子程序最后需加“M99;”,以便能返回到主程序。 2. 变量赋值使用“”符号,不可仅用“=”符号。 3. 文档名储存需依照下列规则。 例如:编写G100之,需将该程序存在C:\\目录底下,且文件名需为G0100,不需扩展名。 而编写G100.1之,需将该程序存在C:\\目录底下,且文件名需为G100001,不需扩展名。 4. 请多使用局部变量(#150), 模态变量(#20012100,#30013100)为所有扩充G码的共享资源,请仅用于多个扩充G码间的数据交换,以节省共享资源;如果需要系统定义的初始值,请使用用户参数( #40014100,#5001~ #5100 )。 5. 请不要使用全局变量( ,@1999),因为G码执行时,使用者的数据是由自变量(,…,)传入,由公共变量传递不符合使用习惯。 6. 系统在执行加工时对于程序会事先预编译,因此执行速度会超前于G、M 代码指令,因此当要求变量赋值或数据读取须和G、M代码指令发出的时间进程相同时,请于变量赋值或数据读取前加()指令,否则该变量赋值或该数据读取将无法和G、M 代码同步。 7. 不可改变模式G码(G435,G9190,G404142,…,)的状态,如果用户宏程序中需要改变其状态时,就需要模态信息的回复, 8. 对于长度或角度的自变量在运算前请使用()函数将单位标准化,以符合工具机使用习惯。 9. 不可以改变坐标系统设定,G925452等和坐标系统相关指令不能使用,否则图形仿真功能将失去参考意义。 10. 请在程序中加上必要的注释,养成良好的编程习惯,以增加程序可读性和可维护性,以帮助后续开发人员维护和排除问题。 附录Ⅳ 运算符及其优先级 运算名 符号 优先级 括号 ( ),[ ] 1 函数调用运算 <函数名>(<参数列表> ) 2 取负 - 3 求补运算 3 乘法运算 * 4 除法运算 / 4 模运算/求余运算 4 加法运算 + 5 减法运算 - 5 关系运算 <,>,<=,>= 6 相等运算 = 7 不等运算 <> 8 布尔逻辑/按位和 &, 9 布尔逻辑/按位 异或 10 布尔逻辑/按位 或 11 函数名 描述 求一个数的绝对值 范例: #1 (-2.3); 1 的结果是 2.3 求一个数的反余弦值 范例: #1 (#10); 求一个数的反正弦值 范例: #1 (#10); 求一个数的反正切值 范例: #1 (#10); COS 求一个数的余弦值 范例: #1 (#10); 求两个数的最大值 范例1: #1 (10,20); #1等于20 范例2: #1 (#2,#3); 求两个数的最小值 范例1: #1 (10.0,20.0); #1等于10.0 范例2: #1 (#10,#11); 求一个数的正弦值 范例: #1 (#10); 求一个数的平方根值 范例1: #2 (3); #2 等于 1.732.. 范例2: #2 (#10); 求一个数的正切值 范例: #1 (#10); 返回一个数的符号,-1表示该数是负数,1表示该数是正数,0表示该数是零 范例: ( (#10) > 0 ) …. ; 返回比一个数大或和其相等的最小整数 范例1: #2 (2.3); #2 等于 3 范例2: #2 (#10); 返回比一个数小或和其相等的最大整数 范例1: #2 (2.3); #2 等于 2 范例2: #2 (#10); 四舍五入化整 范例1: #2 (2.3); #2 等于 2 范例2: #2 (#10); 参数规范化, 读第一个参数为规范化对象, 根据第二个参数使用最小增量方法,特别对小数编程尤为必要。 范例: #9 (#9,#1600); 根据远轴规范化 参数规范化, 读第一个参数为规范化对象, 根据第二个轴地址参数使用最小增量方法 范例: #24 (#24,X); 根据X轴规范化 #3 (#3,A); 根据A轴规范化 产生一个伪随机数 范例: #1 (); 进宏堆栈 范例: (#1); 变量#1 内容进栈 (#3); 变量#3 内容进栈 出宏堆栈 范例: #1 ( ); 出栈值赋给变量#1 从栈顶依据索引获取堆栈元素,但不弹出此元素 范例: (0); 栈顶元素 (1); 栈顶下的第一个元素 (2); 栈顶下的第二个元素 … 发出宏警告 范例: (300); 发出标识号为300的警告 (#1); #1 必须为整数 临时放弃执行循环 范例: ();
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服