1、Open CNC Macro用户宏程序开发新代科技2005/8/1第 页前言本发展环境OpenCNC开发的目的在于方便Macro程序的撰写及测试,使得程序设计师得以在实际上线执行程序之前可以先作一程序的测试,经由图形化的接口而得知其程序是否有逻辑上的错误存在。目录第一章OpenCNC开发环境安装及使用说明第一节 系统需求第二节 软件安装第三节 使用说明第二章 用户宏编程的基本概念和基本书写格式第一节 用户宏编程的基本概念第二节 基本书写格式一、用户宏文档格式二、普通数控程序段格式三、用户宏程序段格式第三章 用户宏程序的编写第一节 变量一、变量及其使用方法二、变量赋值和引数赋值三、变量的种类第二
2、节 变量运算及变量表达式一、用户宏运算符二、基本算数运算符三、算术表达式和运算符优先级四、关系运算符和关系表达式五、逻辑运算和逻辑表达式第三节 用户宏程序的流程控制一、条件判断二、循环控制三、无条件转移第四节 库函数一、数学函数类二、信息传递类三、操作辅助类四、文档操作类五、仿真绘图类第四章 宏程序的调用第一节 简单宏调用一、简单宏调用指令二、模态信息的回复第二节 模态宏调用一、模态宏调用指令G66二、模态宏调用指令G66.1第三节 扩充G代码宏指令调用第五章 用户宏程序范例第一节 用户宏程序编写注意事项第二节 用户宏程序编写范例一、车床G21车床车牙附 录附录 基本G码指令一览表附录 地址码
3、一览表附录 引数赋值的地址码和变量的对应关系表附录 运算符及其优先级附录 系统变量分配表附录 库函数附录 程序调用方法第一章OpenCNC开发环境安装及使用说明第一节 系统需求个人计算机:80486以上的中央处理器操作系统:NT 4.0以上的版本,Windows95以上的版本(需先安装MSIE 3.0)硬盘空间:约1MB的硬盘空间第二节 软件安装1、将安装磁盘放入3.5吋磁盘驱动器中,执行SETUP。建议在开始安装之前先行关闭其它的窗口应用程序。2、 稍待片刻即可进入下面之安装画面。3、选择Next继续安装的工作。4、选择Browse更改所要安装的目录或是接受内定的目录,选择Next继续安装的
4、工作。5、 稍待片刻即可完成安装。第三节 使用说明操作说明:1、首先选取OpenCNC的图标,在图标上以鼠标左键点两下,即可进入主画面:2、将所欲仿真之Macro程序存成*.nc文件,复制到syntecOpenCNCCNCfiles底下,或是利用操作系统的注册编辑器(regedit),自行设定一目录以存放所编辑的*.mmp文件,选取主窗口中的Load选项,将档案加载,选取开始模拟即可,仿真的结果会显示在结果显示区。3、 如欲自行设定一目录以存放所编辑的*.mmp 档,请执行regedit,选取HKEY_LOCAL_MACHINESOFTWARESyntecOpenCNC2.0,选取选项”Mac
5、roStorage”,将设定值改为:C:Program FilesSyntecOpenCNCCNCFiles;” Your files location ”功能说明:1、设定所欲显示的空间: XYZ XY YZ ZX各个空间设定如上所示。2、 坐标参数设定:调整各轴的上限和原点的位置。3、Single Step:设定为Single Step可以一步步的执行程序。4、开始模拟:开始执行程序,并将结果显示于结果显示区。5、停止模拟:暂停程序的执行。6、重设:重新设定系统。7、开启新档:开启一个新的Macro程序。8、加载程序:加载Macro程序。9、储存档案:储存目前的Macro程序。10、另存新
6、檔:以新的文件名储存目前的Macro程序。11、 讯息显示区:显示错误讯息,此外亦可用来显示程序中各个变量值;命令栏(Command)可以输入所欲察看的变量名称,而变量值会显示在讯息显示区。13、Macro程序中变量的部份请参照第二章系统变量的说明。第二章 用户宏编程的基本概念和基本书写格式第一节 用户宏编程的基本概念用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。 在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代表指令称为用户宏命令,也称作宏程序调用指令。 使用时,编程人员只
7、需会使用用户宏指令即可,而不必去关心宏程序体中的指令内容。 例如,在下述程序流程中,可以这样使用用户宏:主程序 用户宏 O9011G65 P9011 A10 I5; X1Y4;在这个程序的主程序中,用G65 P9011调用用户宏程序O9011,并且对用户宏中的变量赋值:110、45(A代表1、I代表4)。而在用户宏中未知量用变量1及4来代表。用户宏有以下四个主要特征:1)在用户用户宏程序中可以使用变量,即宏程序体中能含有复杂的表达式;2)能够进行变量之间的各种运算;3)可以用用户宏指令对变量进行赋值,就象许多高级语言中的带参函数或过程,实参能赋值给形参;4)容易实现程序流程的控制。使用用户宏时
8、的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类的工件时只得将实际的值赋予变量既可,而不需要对每个不同的零件都编一个程序。下面再以一个示意性的例子来说明用户宏的概念。当图11中A、B、U、V的尺寸分别为A20、B10、U40、V20时,其程序为:O1;G9l G00 X20.0 Y10.0;G01 Y10.0;X40.0;Y20.0;X40.0;G00 X20.0 Y10.0;但是当图中A、B、U、V尺寸变化时则又需要编一个类似的程序。实际上,我们可以将程序写为:O1;G91 G00 XA YB;G01Y V;XU;YV;XU;G00 XA YB;此时可以将其中变量,用用户宏中的
9、变量i代替,而字母与i的对应关系为:A 1B #2U #21V #22则用户宏程序即可写成如下形式09801;G9l G00 Xl Y2;G01 Y22;X21Y22;X21;G00 X1 Y2;M99;使用时就可以用下述用户宏指令来调用:G65 P9801 A20.0 B10.0 U40.0 V20.0;由于地址码A 、B、U、V分别与变量1、#2、#21、#22有着一定的对应关系,执行以上用户宏调用程序段时,实际数值就会将被赋予给对应的变量,其对应结果为120.0,#210.0,#21=40.0,#22=20.0;然后被调用的用户宏程序再按所得到的变量值在宏程序中进行运算或执行指令,结束后
10、返回主程序。实际使用时,一般还需要在这一指令前再加上F、S、T指令及进行坐标系设定等。如上述所示,当加工同一类,但只是尺寸不同的工件时,只需改变用户宏命令的数值即可,而没有必要针对每一个零件都编一个程序。第二节 基本书写格式一、用户宏文档格式数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。当标题行含有关键字“MACRO”时整个文档就会以系统所定义的MACRO语法处理。如果该行无“MACRO”关键词此档案就会被视为一般ISO程序文档格式处理,此时将不能编写用户宏和使用其MACRO语法。而当书写ISO程序文档时标题行一般可以省略,直接书写数控程序。“MACRO”关键词必须是大
11、写字母。对于程序的注释可以采用“/”的形式,这和高级语言C+一样。例一:MACRO格式文档% MACRO /用户宏程序文档,必须包含“MACRO”关键词IF 1 = 1 THENG00 X100.;ELSEG00 Y100.;END_IF;M99;例二:ISO格式文档% 这是标题行,可当作档案用途说明,此行可有可无G00 X100.;G00 Y100.;G00 X0;G00 Y0;M99;二、普通数控程序段格式数控程序是由若干个程序段所组成,而每个程序段是由若干个程序字和程序段结束组成。例如:N20 G01 X25 Y-36 F100 S300 T02 M03;而程序字又是由地址符及其后面的数
12、字所组成,如N(地址码)20(数字)、Y(地址码)-36(数字)。在程序中能作指令的最小单位是字,仅用地址码或仅用数字是不能作为指令的。程序段的格式如下:NGXYZFSTM;顺序号准备功能字尺寸字进给功能字主轴转速功能字刀具功能字辅助功能字程序段结束 程序字程序段内各字说明如下:(1)顺序号 放在程序段前用以识别各程序段,它由地址码N及其后面的5位以内数字组成的。程序段号不是必须的,可在需要时用,数字号码的顺序也是任意的,可以每段都加也可只加在需要的地方。例如:N20表示该的程序段号为20。(2)准备功能字 也称G功能字,使数控机床做好某种操作准备指令,它由地址码G及其后面的两位以内数字所组成
13、。主要指令有:1)动作指令 如G01(直线插补)、G02(圆弧插补);2)平面指令 如G17(设定XY工作平面);3)刀补指令 如G41(左刀径补偿);4)其它指令。G代码及功能可参见表2-1。G代码分为模态代码(又称续效代码)和非模态代码两种。所谓模态代码是指某一G代码(如G01)一经指定就一直有效,直到后面程序段中使用同组G代码(如G03)才能取代它。而非模态代码只在指定的本程序段中有效。下一程序段需要时必须重写(如G04)。另外,不同组的G代码可以放在同一程序段中。但在同一程序段中出现2个以上同一组的G代码指令时,则只有最后的G代码有效。 (4)尺寸字 由地址码、符号及绝对值(或增量)的
14、数值组成。它主要包括以下几项: 1)坐标轴的移动指令 例如: X35.418。 2)附加轴的移动指令 如回转轴的转动,例如:A45。 3)圆弧圆心坐标 它是在圆弧插补时用来指定圆弧圆心的值,用I、J、K表示。(5)进给功能字 指定刀具中心运动时的进给速度,由地址码F及其后面的数字组成。这个数字的单位取决于每个数控系统所采用的进给速度的指定方法。例如:F100表示进给速度为100mm/min。(6)主轴功能字 指定主轴转速或速度,由地址码S及其后面的数字组成,单位为转速单位(r/min)。例如:S300表示主轴转速为800r/min。(7)刀具功能字 指定刀号以选择刀具,由地址码T及其后面的数字
15、组成,刀具功能字的数字就表示指定的刀号,数字的位数由所用的系统决定。例如:T08表示第八号刀。(8)辅助功能字 又称M功能字,主要用来表示机床操作时各种辅助动作及其状态,它由地址码M及其后面的两位数字组成。常用辅助代码可参见表1-3。表13 常用辅助功能代码功能说明代码功能说明M00程序停止M08切削液开M01选择停止M09切削液关M02程序结束M30程序结束M03主轴正转M98调用子程序M04主轴反转M99返回主程序M05主轴停止(9)程序段结束 写在每一程序段之后,表示程序结束,一般用符号“;”表示。表12 地址码一览表功能地址意义程序号:/ O / 程序编号顺序号N程序段编号准备功能G建
16、立工作方式尺寸字X、Y、Z各坐标的移动指令A、B、C、U、V、W各附加轴的移动指令R圆弧半径I、J、K圆弧圆心的(增量)坐标进给功能F指定进给的速度主轴功能S指定主轴的旋转速度刀具功能T刀具选择中用于指定刀号辅助功能M实现机床操作的各种辅助动作偏置号H、D偏置号的指定,长度偏移用H,半径补偿用D暂停P、X暂停时间指定子程序号指定P在M98程序段中,用以指定子程序号顺序号指定P在顺序号的位置,程序被重复执行重复次数L子程序或固定循环的重复次数参数P、Q、R固定循环中参数的指定三、用户宏程序段格式用户宏程序段的书写格式与普通数控程序段格式相似,每个程序段也是由若干个程序字和程序段结束组成,但是在地
17、址码后面的具体数值可以被变量置换。例如:N100 G33 U-(#18*2-#31) W(#23-SIGN(#23)*#33) Q#37 F(#9*#11);可见,两者的不同之处就是组成程序字的地址符后面不仅仅可以是数字,而且可以是变量或者变量的表达式,如G(地址码)33(数字)、U(地址码) -(#18*2-#31) (表达式)、Q(地址码)#37(变量)。但需注意的是,作为地址码的O、N、/等不能引用变量,其余功能字均可在用户宏中按上述格式使用,功能字的意义和使用方法不变。第三章 用户宏程序的编写第一节 变量一、变量及其使用方法如前所述,变量是指可以在用户宏程序中的地址码后代替具体数值,在
18、调用宏程序时进行赋值的符号i (i1,2,3,)。使用变量可以使用户宏程序具有通用性。用户宏程序中可以使用多个变量,以变量编号进行识别。1、 变量的形式变量是用符号或后面加上变量编号所构成的,即:i(i1,2,3,)例如:5 109 1005也可用表达式的形式来表示。例如:#100 #10011 #6/2其实,通过用符号后面加上变量编号也可构成的变量,即: i(i1,2,3,)例如:5 5但一般地,由符号后面加上变量编号构成的变量称为全局变量,不提倡在用户宏程序中使用,具体见后面的介绍。2、 变量的引用在地址符后的数值可以用变量置换。例如:若写成F#33,则当331.5时,与F1.5相同。若写
19、成Z#18,则当1820.0时,与Z20.0相同。但需要注意,作为地址符的O、N、等,不能引用变量。例如,O#27、N#1等,都是错误的。3、 未定义变量尚未被定义的变量,被称为空(VACANT)。变量0,0 始终为空,经常被用作空变量使用。二、变量赋值和引数赋值1、 变量赋值用户宏程序中变量赋值使用赋值运算符“:=”,不可仅用“=”符号。因为在本系统中符号“=” 是被规定为关系运算符,用来比较是否相等的。例如#30:=100,会将变量#30赋值为整数100;而#30=100,将不能为变量#30赋值,实际上是比较变量#30是否与整数100相等。2、 引数赋值对于用户宏程序的另外一些接口变量,如
20、何获得实际的数值,这是通过引数赋值实现的,下面我们再回头看看第一章第一节中的用户宏程序调用例子:G65 P9801 A20.0 B10.0 U40.0 V20.0;执行这条用户宏调用程序段后,子程序中的变量就会得到120.0、#210.0、#21=40.0、#22=20.0的结果,这就是引数赋值。实际上,用户宏编程系统中,地址码A、B、C、D分别与变量1、#2、#3、#7有着一定的对应关系,当执行用户宏调用程序段时,地址码后面的实际数值就被赋予给用户宏程序中所对应的变量,这个过程就称为引数赋值。除去G、L、N、O、P以外的地址码都可作为引数赋值的地址码,大部分无顺序要求,但对I、J、K则必须按
21、字母顺序排列,对没有使用的地址可省略。例如:B_ A_ D_ I_ K_ 正确,而B_ A_ D_ J_ I_ 就是不允许。引数赋值所指定的地址码和用户宏程序中所使用的变量编号的对应关系如表21所示。表21 引数赋值的地址码和变量的对应关系引数赋值的地址码用户宏中的变量引数赋值的地址码用户宏中的变量A#1P#16B#2Q#17C#3R#18D#7S#19E#8T#20F#9U#21H#11V#22I#4W#23J#5X#24K#6Y#25M#13Z#26注:关于扩充的地址码,X1=,请使用GETARG(address)函式读取。三、变量的种类按变量的组成符号和编号可将变量分为局部(Local)
22、变量、系统变量(System)和全局变量(Global),其性质和用途都是不同的。1、 局部变量:#1 #50所谓局部变量,就是在用户宏程序内部使用的变量,它只在定义它的用户宏程序中有效,也就是说只有该用户宏程序内使用,在此用户宏程序以外是使用不到这些变量的。但这并不意味着在此外的用户宏程序就不可以再使用i这样的变量编号,因为在某一时刻调出的用户宏中所使用的局部变量编号i和另一时刻调用的用户宏(也不论与前一个用户宏相同还是不同)中所使用的i是不同的,或者说不同的用户宏调用实例中的i所占用系统内存地址是不同的,即使在多重调用情况下,当用户宏A调用用户宏B的情况下,也不会将A中的局部变量破坏。我们
23、可以用局部变量级的这样一个概念来理解,作用于宏程序某一级中的变量称为本级变量,即这一变量在同一程序级中调用时内容相同,若在另一级程序(如子程序)中使用,则意义不同。本级变量主要用于变量间的相互传递,初始状态下未赋值的本级变量即为空白变量。如图21,就是用G代码(或G65时)调用宏时,局部变量级会随着调用多重度的增加而增加,即存在如图的关系: 主程序 用户宏 用户宏(第1级) (第2级)G65 P_ O_G65 P_M99 O_G65 P_M99 局部变量(0级) (1级) (2级)#150 #150 #150上图说明了以下几点:1)主程序中具有150的局部变量(0级)。2)用G65调用宏(第1
24、级)时,主程序的局部变量(0级)被保存起来。再重新为用户宏(第1级)准备了另一套局部变量150(第1级),可以再向它赋值。3)下一用户宏(第2级)被调用时,其上一级的局部变量(第l级)被保存,再准备出新的局部变量150(第2级),如此类推。4)当用M99从各用户宏回到前一程序时,所保存的局部变量(第0、1、2级)存在的状态出现。对于没有赋值的局部变量,其初始状态为空,用户可自由使用。2、 系统变量:#100031986系统变量是根据用途而被固定的变量。主要有以下各种表22,详情请见附录。表22 系统变量分配变量编号用途#1000#1058模态信息#1500#1624运行控制/状态#1301#1
25、436运行时状态变量#1800#1916模态变量40015100用户参数60016032信号接口7001#7101模式组变量1100012999刀具补偿变量2000125986工件坐标系补偿值 (工件零点偏移值)2600131986参考点3、 全局变量:114095与局部变量相对,全局变量是在主程序以及调用的子程序中通用的变量,它在不同程序级中调用时内容相同,即它在同一系统中的所有程序中都有效,因为全局变量在系统中所占用的内存地址是唯一不变的。因此,对于任何一个全局变量i,它都可以在主程序和用户宏或者用户宏之间相互使用,传递数值,并对其操作。全局变量在114095的范围内,按用途主要分为四组。
26、其中1400和656999两组可以被用户宏程序所使用(可读可写),但它们具有不同的性质和使用方法,前者中的变量常用于一般的运算,可以用操作面板(人机界面)来读取显示;而后者中的变量为保持形变量有记忆性变量,可以被永久保存,即掉电不丢失,在操作面板上可进行读写操作。具体可见表23。表23全局变量使用对照表变量编号说明宏程序人机界面永久保存1400一般运算用变量读/写只读否401655对应PLC寄存器R1 R255:401=R1655=R255656999有记忆性变量读/写读/写是1000014095对应PLC寄存器R0R4095:10000=R014095=R4095注:表示具体参见资源分配表表
27、24中对应寄存器。而401655和1000014095两组变量则影射为PLC中系统预定义的一些寄存器,用户宏程序对其的读写规则和使用方法不尽相同,具体可参见表24资源分配表中对应的寄存器,至于更详细的寄存器资源用途和规则可参阅OpenCNC PLC发展手册书中介绍。表24资源分配表编号说明读写规则是否可位(Bit)存取永久保存宏程序或人机接口阶梯程序R0R39CNC系统接口区只读是否R40R49PLC警报讯息区R50R80使用者自行定义读/写读/写是否R81R100对应到系统参数34013420 PLC参数只读只读是否R101R102刀具状态读/写读/写是是R103R255使用者自行定义读/写
28、读/写是是R256R511否R512R639CNC系统接口区只读是否R640R1023否R1023R4095使用者自行定义读/写读/写否否注:表示更详细的寄存器资源用途和规则可参阅OpenCNC PLC发展手册一书。第二节 变量运算及变量表达式一、用户宏运算符要对变量进行各种运算操作就要用到运算符,它是“能对变量所存数据进行运算的符号”。本系统的运算符及其优先级如表3-2所示。表3-2 运算符及其优先级运算名符号优先级括号( ), 1函数调用运算( )2取负-3求补运算NOT3乘法运算*4除法运算/4模运算/求余运算MOD4加法运算+5减法运算-5关系运算,=6相等运算=7不等运算8布尔逻辑/
29、按位与&,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)三、算术表达式和运算符优先级用算术运算符和括号将运算对象连接起来的、符合语法规则的式子称为算术表达式,运算对象可以是常数、变量、函数等。例如:#6*8/#32-1.5+#1
30、8+ ROUND(1)这就是一个算术运算式,它可以作为一个整体赋值给某个变量,或用作其他表达式中的一个运算对象。本系统按表表3-2规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如表达式#12-#41*5的左侧为减,右侧为乘号,而乘号优先于减号,因此,相当于#12-(#41*5)。如果在一个运算对象两侧的运算符的优先级别相同,如#2-5+#23,则按规定的结合性(结合方向)处理,算术运算符的结合方向为“自左至右”,即先左后右。因此5先与减号结合,执行#2-5的运算,再执行加#23的运算。这样“自左至右的结合方向”又称为“左结合性”,即运算对象先
31、与左面的运算符结合;对应地,也有“右结合性”的运算符,例如赋值运算符“:=”就是。四、关系运算符和关系表达式关系运算符是逻辑运算中比较简单的一种。所谓“关系运算”实际上就是“比较运算”。将两个值进行比较,判断比较的结果是否符合给定的条件。例如,#310是一个关系表达式,大于号()是一个关系运算符,如果#3=12,则满足给定的“#310”条件,因此关系表达式的值为“真”(即“条件满足”);如果#3=6,不满足“#310”条件,则称关系表达式的值为“假”。本系统提供6种关系运算符:优先级相同(高)优先级(较高)优先级(低) (1) (小于) (2) (大于)(4) = (大于或等于)(5) = (
32、等于)(6) (不等于)关于优先次序:1、前4种关系运算符(,)的优先级别相同,它们却高于关系运算符“=”,而“=”又高于“”2、关系运算符的优先级低于算术运算符。3、关系运算符的优先级高于赋值运算符。用两个关系运算符将两个表达式连接起来的式子,称为关系表达式。例如:#636,#13+4#23关系表达式的值是一个逻辑值,即“真”或“假”。例如,若#12为8,则关系表达式“#12=10”的值为“假”,“#12=6”的值为“真”。五、逻辑运算和逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。本系统提供6种逻辑运算符和逻辑运算(1) &,AND 逻辑与(2) XOR 逻辑或(3)
33、OR 逻辑异或它们都是“双目(元)运算符”,它要求有两个运算量(操作数),逻辑运算举例如下:#1 AND #2 若#1 、#2为真,则#1 AND #2为真。#1 OR #2 若#1 、 #2之一为真,则#1 XOR #2为真。逻辑运算符低于关系运算符,见图3-1。(高)(低)算术运算符关系运算符逻辑运算符赋值运算符图3-1第三节 用户宏程序的流程控制所谓程序的流程(Flow Control)是通过控制程序的执行方向,进而掌握程序动态。这用户宏程序区别于一般数控程序的特征之一,也是用户选择用户宏程序编写数控代码的一大理由。用户宏程序的流程控制包括无条件判断、循环控制、无条件转移三大类,这与其他
34、的高级语言程序类似,下面将分别介绍其功能和使用语法。一、条件判断判断条件的真假,然后根据真假或者对应情况到指定的地方去执行程序,这方面的语句有IF和CASE语句。1、IF条件语句1)基本语法:IF THENELSEIF THENELSEEND_IF;说明:IF条件判断,根据真假情况到指定的地方去执行程序。例如:% MACRO/ 启动MACRO语法#1 := 3.0;G01 G91 G92 X20. Y15. F200000;IF #1 = 1 THENX(1.0*1);Y(1.0*1);ELSEIF #1 = 2 THENX(1.0*2);Y(1.0*2);ELSEIF #1 = 3 THEN
35、X(1.0*3);Y(1.0*3);ELSEX(1.0*4);Y(1.0*4);END_IF;X(1.0) Y(1.0);M30;然而在实际使用中,可以有以下一些变形:2)变形1语法:IF THENELSEEND_IF;3)变形2语法:IF THENEND_IF;编程时可根据需要选择合适的语法格式。2、CASE分支语句语法:CASE OF:,:,:ELSEEND_CASE;说明:CASE多条件判断分支,根据条件表达式运算结果所对应的条件值(整数),分别执行不同程序区块。例如:% MACRO/ 启动MACRO语法#1 := 8;G01 G91 G92 X20. Y15. F200000;CASE
36、 #1 OF1: X(1.0*1); Y(1.0*1);2: X(1.0*2); Y(1.0*2);3,4,5: X(1.0*#1); Y(1.0*#1);ELSE X(1.0*6); Y(1.0*6);END_CASE;X(1.0) Y(1.0);M30;二、循环控制1、REPEAT直到型循环语法:REPEATUNTIL END_REPEAT;说明:REPEAT直到型循环控制,先执行循环体,后判断条件表达式,当条件满足时退出循环。例如:% MACRO/ 启动MACRO语法#10 := 30.;#11 := 22.5.;#12 := #10/2;#13 := #11/2;#14 := 2.0;
37、#15 := 1.5;G01 G92 X#12 Y#13 F200.0;REPEAT G00 X(#12+#14) Y(#13+#15); G01 X(#12+#14) Y(#13-#15); X(#12-#14) Y(#13-#15); X(#12-#14) Y(#13+#15); X(#12+#14) Y(#13+#15); #14 := #14 + 2.0; #15 := #15 + 1.5;UNTIL (#14 #12) OR (#15 #13) END_REPEAT;X(1.0) Y(1.0);M30;2、WHILE当型循环语法:WHILE DOEND_WHILE;说明:WHILE当
38、型循环控制,先判断条件表达式,当条件满足时执行循环体,否则退出循环。例如:% MACRO/ 启动MACRO语法#10 := 20.;#11 := 15.;#12 := #10/2;#13 := #11/2;#14 := 2.0;#15 := 1.5;G01 G92 X#12 Y#13 F200.0;WHILE (#14 = #12) AND (#15 6.0 THENEXIT;END_IF;X(#12-#14) Y(#13+#15);X(#12+#14) Y(#13+#15);#14 := #14 + 2.0;#15 := #15 + 1.5;END_WHILE;X(-5.0) Y(5.0);
39、M02;2、FOR循环语法:FOR := TO BY DOEND_FOR;说明:FOR循环控制,式中各参数意义如下循环变量控制循环次数的变量;表达式1循环计数的起始值,可为整数或表达式;表达式2循环计数的终止值,可为整数或表达式;表达式3循环计数每次的累加值,可为整数或表达式;循环体 循环每次执行内容;FOR循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次累加值,继续判断直到循环变量为终止值时退出循环。范例:% MACRO/ 启动MACRO语法#1 := 2.0;(*INITIAL RADIUS*)#2 := 8.0;(*FINIAL RADIUS*)#3 := 9;(* SIDES*)#4 := 360.0 / #3;(*THETA*)#5 := (180.0 + #4)/2;(*START ANGLE*)G91 G92 X0. Y0. F300000;G01 X(#1);FOR #6:=#1 TO #2 BY 2.0 DO#7 := 2.0 * #6 * COS(180.0-#5);#8 := (#7/2.0) / COS(180