版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一用户宏程序的基本概念用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。 在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代表指令称为用户宏命令,也称作宏程序调用指令。用户宏有以下四个主要特征:1)在用户用户宏程序中可以使用变量,即宏程序体中能含有复杂的表达式;2)能够进行变量之间的各种运算;3)可以用用户宏指令对变量进行赋值,就象许多高级语言中的带参函数或过程,实参能赋值给形参;4)容易实现程序流程的控制。使用用户宏时的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类
2、的工件时只得将实际的值赋予变量既可,而不需要对每个不同的零件都编一个程序。二 基本书写格式数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。当标题行含有关键字“macro”时整个文档就会以系统所定义的macro语法处理。如果该行无“macro”关键词此档案就会被视为一般iso程序文档格式处理,此时将不能编写用户宏和使用其macro语法。而当书写iso程序文档时标题行一般可以省略,直接书写数控程序。“macro”关键词必须是大写字母。对于程序的注释可以采用“/”的形式,这和高级语言c+一样。例一:macro格式文档% macro /用户宏程序文档,必须包含“macro”关键词
3、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、 变量的形式变量是用符号或后面加上变量编号所构成的,即:i(i1,2,3,)例如:5 109 1005也可用表达式的形式来表示。例如:#1
4、00 #10011 #6/2其实,通过用符号后面加上变量编号也可构成的变量,即: i(i1,2,3,)例如:5 5但一般地,由符号后面加上变量编号构成的变量称为全局变量,不提倡在用户宏程序中使用,具体见后面的介绍。2、 变量的引用在地址符后的数值可以用变量置换。例如:若写成f#33,则当331.5时,与f1.5相同。若写成z#18,则当1820.0时,与z20.0相同。但需要注意,作为地址符的o、n、等,不能引用变量。例如,o#27、n#1等,都是错误的。3、 未定义变量尚未被定义的变量,被称为空(vacant)。变量0,0 始终为空,经常被用作空变量使用。3变量赋值和引数赋值变量赋值:用户宏
5、程序中变量赋值使用赋值运算符“:=”,不可仅用“=”符号。因为在本系统中符号“=” 是被规定为关系运算符,用来比较是否相等的。例如#30:=100,会将变量#30赋值为整数100;而#30=100,将不能为变量#30赋值,实际上是比较变量#30是否与整数100相等。四变量运算及变量表达式用户宏运算符要对变量进行各种运算操作就要用到运算符,它是“能对变量所存数据进行运算的符号”。本系统的运算符及其优先级如表3-2所示。表3-2 运算符及其优先级运算名符号优先级括号( ), 1函数调用运算<函数名>(<参数列表> )2取负-3求补运算not3乘法运算*4除法运算/4模运算/
6、求余运算mod4加法运算+5减法运算-5关系运算<,>,<=,>=6相等运算=7不等运算<>8布尔逻辑/按位与&,and9布尔逻辑/按位 异或xor10布尔逻辑/按位 或or11、基本算数运算符(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)、算术表达式和运算符优先级
7、用算术运算符和括号将运算对象连接起来的、符合语法规则的式子称为算术表达式,运算对象可以是常数、变量、函数等。例如:#6*8/#32-1.5+#18+ round(1) 这就是一个算术运算式,它可以作为一个整体赋值给某个变量,或用作其他表达式中的一个运算对象。本系统按表表3-2规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如表达式#12-#41*5的左侧为减,右侧为乘号,而乘号优先于减号,因此,相当于#12-(#41*5)。如果在一个运算对象两侧的运算符的优先级别相同,如#2-5+#23,则按规定的结合性(结合方向)处理,算术运算符的
8、结合方向为“自左至右”,即先左后右。因此5先与减号结合,执行#2-5的运算,再执行加#23的运算。这样“自左至右的结合方向”又称为“左结合性”,即运算对象先与左面的运算符结合;对应地,也有“右结合性”的运算符,例如赋值运算符“:=”就是。、关系运算符和关系表达式关系运算符是逻辑运算中比较简单的一种。所谓“关系运算”实际上就是“比较运算”。将两个值进行比较,判断比较的结果是否符合给定的条件。例如,#310是一个关系表达式,大于号()是一个关系运算符,如果#3=12,则满足给定的“#310”条件,因此关系表达式的值为“真”(即“条件满足”);如果#3=6,不满足“#310”条件,则称关系表达式的值
9、为“假”。本系统提供6种关系运算符:优先级相同(高)优先级(较高)优先级(低) (1) < (小于) (2) <= (小于或等于) (3) > (大于)(4) >= (大于或等于)(5) = (等于)(6) <> (不等于)关于优先次序:1、前4种关系运算符(,>)的优先级别相同,它们却高于关系运算符“=”,而“=”又高于“<>”2、关系运算符的优先级低于算术运算符。3、关系运算符的优先级高于赋值运算符。用两个关系运算符将两个表达式连接起来的式子,称为关系表达式。例如:#636,#13+4<>#23关系表达式的值是一个逻辑值,即
10、“真”或“假”。例如,若#12为8,则关系表达式“#12=10”的值为“假”,“#12>=6”的值为“真”。、逻辑运算和逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。本系统提供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。(高)(低)算术运算符关系运算符逻辑运算符赋
11、值运算符图3-1五 用户宏程序的流程控制所谓程序的流程(flow control)是通过控制程序的执行方向,进而掌握程序动态。这用户宏程序区别于一般数控程序的特征之一,也是用户选择用户宏程序编写数控代码的一大理由。用户宏程序的流程控制包括无条件判断、循环控制、无条件转移三大类,这与其他的高级语言程序类似,下面将分别介绍其功能和使用语法。、条件判断判断条件的真假,然后根据真假或者对应情况到指定的地方去执行程序,这方面的语句有if和case语句。1、if条件语句1)基本语法:if <条件表达式> then<操作>elseif <条件表达式> then<操作
12、>else<操作>end_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 <条件表达式> then&
13、lt;操作>else<操作>end_if;3)变形2语法:if <条件表达式> then<操作>end_if;编程时可根据需要选择合适的语法格式。、循环控制1、repeat直到型循环语法:repeat<循环体>until<条件表达式> end_repeat;说明:repeat直到型循环控制,先执行循环体,后判断条件表达式,当条件满足时退出循环。例如:% macro/ 启动macro语法#10 := 30.;#11 := 22.5.;#12 := #10/2;#13 := #11/2;#14 := 2.0;#15 := 1.5;g
14、01 x#12 #13 f200.0;repeat g00 x(#12+#14) (#13+#15); g01 x(#12+#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 <条件表达式> do<循环体>end_whil
15、e;说明:while当型循环控制,先判断条件表达式,当条件满足时执行循环体,否则退出循环。例如:% macro;#10 := 20.;#11 := 15.;#12 := #10/2;#13 := #11/2;#14 := 2.0;#15 := 1.5;g01 x#12 #13 f200.0;while (#14 <= #12) and (#15 <= #13) dog00 x(#12+#14) (#13+#15);g01 x(#12+#14) (#13-#15);x(#12-#14) (#13-#15);if #14 > 6.0 thenexit;end_if;x(#12-#
16、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 <循环变量> := <表达式1> to <表达式2> by <表达式3> do<循环体>end_for;说明:for循环控制,式中各参数意义如下循环变量控制循环次数的变量;表达式1循环计数的起始值,可为整数或表达式;表达式2循环计数的终止值,可为整数或表达式;表达式3循环计数每次的累加值,可为整数或表达式;循环体 循
17、环每次执行内容;for循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次累加值,、无条件转移goto转移语句语法:goto n;说明:无条件地跳到指定的n行号执行,其中n可为整数或表达式。goto常和if语句搭配使用,那就是说当程序检查到某个条件满足时用goto语句去进一步处理,但应尽量少用该语句以提高程序可读性。范例:% macro/ 启动macro语法if( #1 = 2 ) then goto 100;g01 x10. 10.;n100 g01 x30. 30.;m02;exit循环中断语句语法:exi
18、t;说明:循环中断,跳离循环控制;用在循环控制中,通常exit都和if语句搭配使用,当某个条件满足后就跳离循环。请参考while范例。六 库函数1、abs调用方法:abs(<参数>)函数描述:求一个数的绝对值范例:#1 := abs(-2.3); / #1 的结果是 2.3注:此处函数内“参数”既可为实际数值,也可为变量或表达式,以下若无特殊说明均按此处理。2、sin调用方法:sin (<参数>)函数描述:求一个数的正弦值范例:#1 := sin(#10);3、asin调用方法:asin (<参数>)函数描述:求一个数的反正弦值范例: #1 := asin(
19、#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_i
20、f;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. 变量赋值使用“:=”符号,不可仅用“=”
21、符号。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,#5001 #5100 )。5. 请不要使用全局变量(global varia
22、bles,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,g40/g41/g42,)的状态,如果用户宏程序中需要改变其状态时,就需要模态信息的回复,8. 对于长度或角度的自变量在运
23、算前请使用std()函数将单位标准化,以符合工具机使用习惯。9. 不可以改变坐标系统设定,g92/g54/g52等与坐标系统相关指令不能使用,否则图形仿真功能将失去参考意义。10. 请在程序中加上必要的注释,养成良好的编程习惯,以增加程序可读性和可维护性,以帮助后续开发人员维护和排除问题。附录 运算符及其优先级运算名符号优先级括号( ), 1函数调用运算<函数名>(<参数列表> )2取负-3求补运算not3乘法运算*4除法运算/4模运算/求余运算mod4加法运算+5减法运算-5关系运算<,>,<=,>=6相等运算=7不等运算<>8布尔
24、逻辑/按位与&,and9布尔逻辑/按位 异或xor10布尔逻辑/按位 或or11函数名描述abs求一个数的绝对值范例: #1 := abs(-2.3); /#1 的结果是 2.3acos求一个数的反余弦值范例: #1 := acos(#10);asin求一个数的反正弦值范例: #1 := asin(#10);atan求一个数的反正切值范例: #1 := atan(#10);cos求一个数的余弦值范例: #1 := cos(#10);max求两个数的最大值范例1:#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);sin求一个数的正弦值范例: #1 := sin(#10);sqrt求一个数的平方根值范例1:#2 := sqrt(3); / #2 等于 1.732.范例2: #2 := sqrt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路轨道工程施工方案
- 第十八章 维生素课件
- 20200208学校疫情防控门卫管理制度
- xx中学疫情防控期间教学楼各室管理方案
- 赞助活动策划方案
- 第二章 管理信息系统概论课件
- 三年级阅读方案
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (812)【含简略答案】
- Methyl-Salicylate-Standard-生命科学试剂-MCE
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (737)【含简略答案】
- 金融服务创新联合体协议书
- 发票勾选认证培训课件
- 榴莲项目计划书
- 2024年高考数学复习备考策略讲座
- 合同验收记录
- 行政事业单位财政专项资金管理
- 课程思政示范课程申报书
- 加油站反恐培训知识
- 麻醉恢复室护理课件
- 房源推广团购方案
- 钢结构防腐涂装工艺参数优化技术
评论
0/150
提交评论