您好,欢迎来到年旅网。
搜索
您的当前位置:首页新代系统

新代系统

来源:年旅网
OpenCNCMacro用户宏程序开发

新代科技2007/12/5

前言

本发展环境OpenCNC开发的目的在于方便Macro程序的撰写及测试,使得程序设计师得以在实际上线执行程序之前可以先作一程序的测试,经由图形化的接口而得知其程序是否有逻辑上的错误存在。

目录

第一章OpenCNC开发环境安装及使用说明---------------------------------------------1

第一节系统需求-------------------------------------------------------------------------1第二节软件安装-------------------------------------------------------------------------1第三节使用说明-------------------------------------------------------------------------2第二章用户宏编程的基本概念和基本书写格式---------------------------------------4

第一节用户宏编程的基本概念-------------------------------------------------------4第二节基本书写格式-------------------------------------------------------------------6

一、用户宏文档格式--------------------------------------------------------------6二、普通数控程序段格式--------------------------------------------------------6三、用户宏程序段格式-----------------------------------------------------------8

第三章用户宏程序的编写-------------------------------------------------------------------9

第一节变量-------------------------------------------------------------------------------9

一、变量及其使用方法-----------------------------------------------------------9二、变量赋值和引数赋值--------------------------------------------------------9三、变量的种类-----------------------------------------------------------------10第二节变量运算及变量表达式---------------------------------------------------13

一、用户宏运算符--------------------------------------------------------------13二、基本算数运算符-----------------------------------------------------------14三、算术表达式和运算符优先级--------------------------------------------14四、关系运算符和关系表达式-----------------------------------------------14五、逻辑运算和逻辑表达式--------------------------------------------------15第三节用户宏程序的流程控制---------------------------------------------------15

一、条件判断--------------------------------------------------------------------16二、循环控制--------------------------------------------------------------------18三、无条件转移-----------------------------------------------------------------21第四节库函数-------------------------------------------------------------------------21

一、数学函数类-----------------------------------------------------------------22二、信息传递类-----------------------------------------------------------------23三、操作辅助类-----------------------------------------------------------------24四、文档操作类-----------------------------------------------------------------25五、仿真绘图类-----------------------------------------------------------------25

第四章宏程序的调用----------------------------------------------------------------------27

第一节简单宏调用-------------------------------------------------------------------27

一、简单宏调用指令-----------------------------------------------------------27二、模态信息的回复-----------------------------------------------------------27第二节模态宏调用-------------------------------------------------------------------27

一、模态宏调用指令G66-----------------------------------------------------27二、模态宏调用指令G66.1---------------------------------------------------28第三节扩充G代码宏指令调用---------------------------------------------------29第五章用户宏程序范例-------------------------------------------------------------------30

第一节用户宏程序编写注意事项------------------------------------------------30第二节用户宏程序编写范例-------------------------------------------------------30

一、车床G21车床车牙-------------------------------------------------------30

附录-----------------------------------------------------------------------------------------35

附录Ⅰ基本G码指令一览表------------------------------------------------------35附录Ⅱ地址码一览表----------------------------------------------------------------36附录Ⅲ引数赋值的地址码和变量的对应关系表------------------------------36附录Ⅳ运算符及其优先级----------------------------------------------------------37附录Ⅴ系统变量分配表-------------------------------------------------------------37附录Ⅵ库函数-------------------------------------------------------------------------41附录Ⅶ程序调用方法----------------------------------------------------------------48

第2页

第一章OpenCNC开发环境安装及

使用说明

第一节系统需求

个人计算机:80486以上的处理器

操作系统:NT4.0以上的版本,Windows95以上的版本(需先安装MSIE3.0)硬盘空间:约1MB的硬盘空间

第二节软件安装

1、将安装磁盘放入3.5吋磁盘驱动器中,执行SETUP。建议在开始安装之前先行关闭其它的窗口应用程序。

2、稍待片刻即可进入下面之安装画面。

3、选择Next继续安装的工作。

4、选择Browse更改所要安装的目录或是接受内定的目录,选择Next继续安装的工

第1页

作。

5、稍待片刻即可完成安装。

第三节使用说明

操作说明:

1、首先选取OpenCNC的图标,在图标上以鼠标左键点两下,即可进入主画面:

結果顯示區跚始模擬停止模擬重設跚啟新檔載入琵式_儲存檔案另存新檔座標參數設定

訊息顯示區

Macro琵式_編輯區

2、将所欲仿真之Macro程序存成*.nc文件,复制到syntec\\OpenCNC\\CNCfiles\\底下,或是利用操作系统的注册编辑器(regedit),自行设定一目录以存放所编辑的*.mmp文件,选取主窗口中的Load选项,将档案加载,选取开始模拟即可,仿真的结果会显示在结果显示区。

3、如欲自行设定一目录以存放所编辑的*.mmp档,请执行regedit,选取

HKEY_LOCAL_MACHINESOFTWARESyntecOpenCNC2.0,选取选项”MacroStorage”,将设定值改为:

C:\\ProgramFiles\\Syntec\\OpenCNC\\CNCFiles\\;”Yourfileslocation”功能说明:

1、设定所欲显示的空间:

第2页

ZXYYXZYXZZX

XYZXYYZ各个空间设定如上所示。

2、坐标参数设定:调整各轴的上限和原点的位置。

3、SingleStep:设定为SingleStep可以一步步的执行程序。4、开始模拟:开始执行程序,并将结果显示于结果显示区。5、停止模拟:暂停程序的执行。6、重设:重新设定系统。

7、开启新档:开启一个新的Macro程序。8、加载程序:加载Macro程序。

9、储存档案:储存目前的Macro程序。

10、另存新檔:以新的文件名储存目前的Macro程序。

11、讯息显示区:显示错误讯息,此外亦可用来显示程序中各个变量值;命令栏(Command)可以输入所欲察看的变量名称,而变量值会显示在讯息显示区。13、Macro程序中变量的部份请参照第二章「系统变量」的说明。

第3页

第二章用户宏编程的基本概念和基本

书写格式

第一节用户宏编程的基本概念

用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。

在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代表指令称为用户宏命令,也称作宏程序调用指令。

使用时,编程人员只需会使用用户宏指令即可,而不必去关心宏程序体中的指令内容。

例如,在下述程序流程中,可以这样使用用户宏:主程序用户宏……O9011G65P9011A10I5;…………X#1Y#4;

在这个程序的主程序中,用G65P9011调用用户宏程序O9011,并且对用户宏中的变量赋值:#1=10、#4=5(A代表#1、I代表#4)。而在用户宏中未知量用变量#1及#4来代表。

用户宏有以下四个主要特征:

1)在用户用户宏程序中可以使用变量,即宏程序体中能含有复杂的表达式;2)能够进行变量之间的各种运算;3)可以用用户宏指令对变量进行赋值,就象许多高级语言中的带参函数或过程,实参能赋值给形参;

4)容易实现程序流程的控制。

使用用户宏时的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类的工件时.只得将实际的值赋予变量既可,而不需要对每个不同的零件都编一个程序。

下面再以一个示意性的例子来说明用户宏的概念。

当图1-1中A、B、U、V的尺寸分别为A=20、B=10、U=40、V=20时,其程序为:

O1;

G9lG00X20.0Y10.0;G01Y10.0;X40.0;Y-20.0;

第4页

X-40.0;

G00X-20.0Y-10.0;;

但是当图中A、B、U、V尺寸变化时则又需要编一个类似的程序。实际上,我们可以将程序写为:O1;

G91G00XAYB;G01YV;XU;Y-V;X-U;

G00X-AY-B;

此时可以将其中变量,用用户宏中的变量#i代替,而字母与#i的对应关系为:

A——#1

B——#2U——#21V——#22

则用户宏程序即可写成如下形式09801;

G9lG00X#lY#2;G01Y#22;X#21Y-#22;X-#21;

G00X-#1Y-#2;M99;

使用时就可以用下述用户宏指令来调用:G65P9801A20.0B10.0U40.0V20.0;

由于地址码A、B、U、V分别与变量#1、#2、#21、#22有着一定的对应关系,执行以上用户宏调用程序段时,实际数值就会将被赋予给对应的变量,其对应结果为#1=20.0,#2=10.0,#21=40.0,#22=20.0;然后被调用的用户宏程序再按所得到的变量值在宏程序中进行运算或执行指令,结束后返回主程序。

实际使用时,一般还需要在这一指令前再加上F、S、T指令及进行坐标系设定等。

如上述所示,当加工同一类,但只是尺寸不同的工件时,只需改变用户宏命令的数值即可,而没有必要针对每一个零件都编一个程序。

第5页

第二节基本书写格式

一、用户宏文档格式

数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。当标题行含有关键字“@MACRO”时整个文档就会以系统所定义的MACRO语法处理。如果该行无“@MACRO”关键词此档案就会被视为一般ISO程序文档格式处理,此时将不能编写用户宏和使用其MACRO语法。而当书写ISO程序文档时标题行一般可以省略,直接书写数控程序。“@MACRO”关键词必须是大写字母。

对于程序的注释可以采用“//……”的形式,这和高级语言C++一样。例一:MACRO格式文档

%@MACRO//用户宏程序文档,必须包含“@MACRO”关键词

IF@1=1THEN

G00X100.;ELSE

G00Y100.;

END_IF;M99;

例二:ISO格式文档

%这是标题行,可当作档案用途说明,此行可有可无G00X100.;G00Y100.;G00X0;G00Y0;

M99;

二、普通数控程序段格式

数控程序是由若干个程序段所组成,而每个程序段是由若干个程序字和程序段结束组成。

例如:N20G01X25Y-36F100S300T02M03;

而程序字又是由地址符及其后面的数字所组成,如N(地址码)20(数字)、Y(地址码)-36(数字)。在程序中能作指令的最小单位是字,仅用地址码或仅用数字是不能作为指令的。

程序段的格式如下:N-顺序号

G-准备功能字

X-

Y-

Z-

……

F-进给功能字

S-主轴转速功能

T-刀具功能字

M-辅助功能字

;程序段结束

尺寸字

第6页

程序字

程序段内各字说明如下:

(1)顺序号放在程序段前用以识别各程序段,它由地址码N及其后面的5位以内数字组成的。程序段号不是必须的,可在需要时用,数字号码的顺序也是任意的,可以每段都加也可只加在需要的地方。

例如:N20——表示该的程序段号为20。

(2)准备功能字也称G功能字,使数控机床做好某种操作准备指令,它由地址码G及其后面的两位以内数字所组成。主要指令有:

1)动作指令如G01(直线插补)、G02(圆弧插补);2)平面指令如G17(设定XY工作平面);3)刀补指令如G41(左刀径补偿);4)其它指令。G代码及功能可参见表2-1。

G代码分为模态代码(又称续效代码)和非模态代码两种。所谓模态代码是指某一G代码(如G01)一经指定就一直有效,直到后面程序段中使用同组G代码(如G03)才能取代它。而非模态代码只在指定的本程序段中有效。下一程序段需要时必须重写(如G04)。另外,不同组的G代码可以放在同一程序段中。但在同一程序段中出现2个以上同一组的G代码指令时,则只有最后的G代码有效。

(4)尺寸字由地址码、+、—符号及绝对值(或增量)的数值组成。它主要包括以下几项:

1)坐标轴的移动指令例如:X35.418。

2)附加轴的移动指令如回转轴的转动,例如:A45。

3)圆弧圆心坐标它是在圆弧插补时用来指定圆弧圆心的值,用I、J、K表示。(5)进给功能字指定刀具中心运动时的进给速度,由地址码F及其后面的数字组成。这个数字的单位取决于每个数控系统所采用的进给速度的指定方法。

例如:F100——表示进给速度为100mm/min。

(6)主轴功能字指定主轴转速或速度,由地址码S及其后面的数字组成,单位为转速单位(r/min)。

例如:S300——表示主轴转速为800r/min。

(7)刀具功能字指定刀号以选择刀具,由地址码T及其后面的数字组成,刀具功能字的数字就表示指定的刀号,数字的位数由所用的系统决定。

例如:T08——表示第八号刀。(8)辅助功能字又称M功能字,主要用来表示机床操作时各种辅助动作及其状态,它由地址码M及其后面的两位数字组成。常用辅助代码可参见表1-3。

第7页

表1—3常用辅助功能代码

M00M01M02M03M04M05

功能说明

程序停止选择停止程序结束主轴正转主轴反转主轴停止

代码

M08M09M30M98M99

功能说明

切削液开切削液关程序结束调用子程序返回主程序

(9)程序段结束示。

功能

程序号顺序号准备功能尺寸字

NG

写在每一程序段之后,表示程序结束,一般用符号“;”表

表1-2地址码一览表地址

意义

程序编号程序段编号建立工作方式各坐标的移动指令各附加轴的移动指令圆弧半径

圆弧圆心的(增量)坐标指定进给的速度指定主轴的旋转速度刀具选择中用于指定刀号实现机床操作的各种辅助动作

偏置号的指定,长度偏移用H,半径补偿用D暂停时间指定

在M98程序段中,用以指定子程序号在顺序号的位置,程序被重复执行子程序或固定循环的重复次数固定循环中参数的指定

:/O/%

X、Y、Z

A、B、C、U、V、WRI、J、K

进给功能主轴功能刀具功能辅助功能偏置号暂停子程序号指定顺序号指定重复次数参数

FSTMH、DP、XPPLP、Q、R

三、用户宏程序段格式

用户宏程序段的书写格式与普通数控程序段格式相似,每个程序段也是由若干个程序字和程序段结束组成,但是在地址码后面的具体数值可以被变量置换。

例如:N100G33U-(#18*2-#31)W(#23-SIGN(#23)*#33)Q#37F(#9*#11);

可见,两者的不同之处就是组成程序字的地址符后面不仅仅可以是数字,而且可以是变量或者变量的表达式,如G(地址码)33(数字)、U(地址码)-(#18*2-#31)(表达式)、Q(地址码)#37(变量)。

但需注意的是,作为地址码的O、N、/等不能引用变量,其余功能字均可在用

第8页

户宏中按上述格式使用,功能字的意义和使用方法不变。

第9页

第三章用户宏程序的编写

第一节变量

一、变量及其使用方法

如前所述,变量是指可以在用户宏程序中的地址码后代替具体数值,在调用宏程序时进行赋值的符号#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始终为空,经常被用作空变量使用。二、变量赋值和引数赋值

1、变量赋值

用户宏程序中变量赋值使用赋值运算符“:=”,不可仅用“=”符号。因为在

第10页

本系统中符号“=”是被规定为关系运算符,用来比较是否相等的。

例如#30:=100,会将变量#30赋值为整数100;而#30=100,将不能为变量#30赋值,实际上是比较变量#30是否与整数100相等。

2、引数赋值对于用户宏程序的另外一些接口变量,如何获得实际的数值,这是通过引数赋值实现的,下面我们再回头看看第一章第一节中的用户宏程序调用例子:

G65P9801A20.0B10.0U40.0V20.0;

执行这条用户宏调用程序段后,子程序中的变量就会得到#1=20.0、#2=10.0、#21=40.0、#22=20.0的结果,这就是引数赋值。

实际上,用户宏编程系统中,地址码A、B、C、D……分别与变量#1、#2、#3、#7……有着一定的对应关系,当执行用户宏调用程序段时,地址码后面的实际数值就被赋予给用户宏程序中所对应的变量,这个过程就称为引数赋值。

除去G、L、N、O、P以外的地址码都可作为引数赋值的地址码,大部分无顺序要求,但对I、J、K则必须按字母顺序排列,对没有使用的地址可省略。例如:

B_A_D_…I_K_…正确,而B_A_D_…J_I_…就是不允许。

引数赋值所指定的地址码和用户宏程序中所使用的变量编号的对应关系如表2-1所示。

表2-1引数赋值的地址码和变量的对应关系引数赋值的地址码

ABCDEFHIJK

用户宏中的变量

#1#2#3#7#8#9#11#4#5#6

引数赋值的地址码

PQRSTUVWXY

用户宏中的变量

#16#17#18#19#20#21#22#23#24#25

M#13Z#26

[注]:关于扩充的地址码,X1=,请使用GETARG(address)函式读取。

三、变量的种类

按变量的组成符号和编号可将变量分为局部(Local)变量、系统变量(System)和全局变量(Global),其性质和用途都是不同的。

1、局部变量:#1~#50

第11页

所谓局部变量,就是在用户宏程序内部使用的变量,它只在定义它的用户宏程序中有效,也就是说只有该用户宏程序内使用,在此用户宏程序以外是使用不到这些变量的。

但这并不意味着在此外的用户宏程序就不可以再使用#i这样的变量编号,因为在某一时刻调出的用户宏中所使用的局部变量编号#i和另一时刻调用的用户宏(也不论与前一个用户宏相同还是不同)中所使用的#i是不同的,或者说不同的用户宏调用实例中的#i所占用系统内存地址是不同的,即使在多重调用情况下,当用户宏A调用用户宏B的情况下,也不会将A中的局部变量破坏。

我们可以用局部变量级的这样一个概念来理解,作用于宏程序某一级中的变量称为本级变量,即这一变量在同一程序级中调用时内容相同,若在另一级程序(如子程序)中使用,则意义不同。本级变量主要用于变量间的相互传递,初始状态下未赋值的本级变量即为空白变量。

如图2-1,就是用G代码(或G65时)调用宏时,局部变量级会随着调用多重度的增加而增加,即存在如图的关系:

主程序G65P_用户宏(第1级)O_G65P_用户宏(第2级)O_G65P_M99局部变量(0级)#1……#50(1级)#1……#50M99(2级)#1……#50上图说明了以下几点:

1)主程序中具有#1~#50的局部变量(0级)。

2)用G65调用宏(第1级)时,主程序的局部变量(0级)被保存起来。再重新为用户宏(第1级)准备了另一套局部变量#1~#50(第1级),可以再向它赋值。

3)下一用户宏(第2级)被调用时,其上一级的局部变量(第l级)被保存,再准备出新的局部变量#1-#50(第2级),如此类推。

第12页

4)当用M99从各用户宏回到前一程序时,所保存的局部变量(第0、1、2级)存在的状态出现。对于没有赋值的局部变量,其初始状态为空,用户可自由使用。

2、系统变量:#1000~#31986

系统变量是根据用途而被固定的变量。主要有以下各种表2-2,详情请见附录。

表2-2系统变量分配

变量编号#1000~#1058#1500~#1624#1301~#1436#1800~#1916#4001~#5100#6001~#6032#7001~#7101#11000~#12999#20001~#25986#26001~#31986

用途模态信息运行控制/状态运行时状态变量模态变量用户参数信号接口模式组变量刀具补偿变量

工件坐标系补偿值(工件零点偏移值)

参考点

3、全局变量:@1~@14095

与局部变量相对,全局变量是在主程序以及调用的子程序中通用的变量,它在不同程序级中调用时内容相同,即它在同一系统中的所有程序中都有效,因为全局变量在系统中所占用的内存地址是唯一不变的。因此,对于任何一个全局变量@i,它都可以在主程序和用户宏或者用户宏之间相互使用,传递数值,并对其操作。

全局变量在@1~@14095的范围内,按用途主要分为四组。其中@1~400和@656~@999两组可以被用户宏程序所使用(可读可写),但它们具有不同的性质和使用方法,前者中的变量常用于一般的运算,可以用操作面板(人机界面)来读取显示;而后者中的变量为保持形变量有记忆性变量,可以被永久保存,即掉电不丢失,在操作面板上可进行读写操作。具体可见表2-3。

表2-3全局变量使用对照表

变量编号@1~@400@401~@655

说明

一般运算用变量

对应PLC寄存器R1~R255:@401=R1…

@656~@999@10000~@14095

@655=R255有记忆性变量

对应PLC寄存器R0~R4095:@10000=R0…

@14095=R4095

第13页

宏程序读/写※

人机界面只读※

永久保存否※

读/写※

读/写※

是※

[注]:※表示具体参见资源分配表表2-4中对应寄存器。

而@401~@655和@10000~@14095两组变量则影射为PLC中系统预定义的一些寄存器,用户宏程序对其的读写规则和使用方法不尽相同,具体可参见表2-4资源分配表中对应的寄存器,至于更详细的寄存器资源用途和规则可参阅《OpenCNCPLC发展手册》书中介绍。

表2-4资源分配表

编号R0~R39R40~R49R50~R80R81~R100R101~R102R103~R255R256~R511R512~R639R0~R1023

CNC系统接口区

只读

是否

说明

CNC系统接口区PLC警报讯息区使用者自行定义对应到系统参数3401~3420PLC参数刀具状态使用者自行定义

读/写只读读/写读/写

读/写只读读/写读/写

是是是是

否否是是否否

只读

读写规则

宏程序或人机接口阶梯程序

是否可位永久(Bit)存取保存是

读/写读/写否否R1023~R4095使用者自行定义

[注]:※表示更详细的寄存器资源用途和规则可参阅《OpenCNCPLC发展手册》一书。

第二节变量运算及变量表达式

一、用户宏运算符

要对变量进行各种运算操作就要用到运算符,它是“能对变量所存数据进行运算的符号”。本系统的运算符及其优先级如表3-2所示。

表3-2运算符及其优先级运算名括号

函数调用运算取负求补运算乘法运算除法运算模运算/求余运算加法运算减法运算关系运算相等运算

符号(),[]

<函数名>(<参数列表>)-NOT*/MOD+

-<,>,<=,>==

优先级12334445567

第14页

不等运算布尔逻辑/按位与布尔逻辑/按位异或布尔逻辑/按位或

<>

&,ANDXOROR

1011

二、基本算数运算符

(1)+(加法运算符,如3+5,#12+4)(2)-(减法运算符,或取负运算符,如#33-16,-#16)

(3)*(乘法运算符,如9*2,#13*8)(4)/(除法运算符,如10/3,#43/15)

(5)MOD(模运算符,或称求余运算符,其两侧均应为整型数据,如7MOD4的值为3,当#18=20时#18MOD4的值为2)三、算术表达式和运算符优先级

用算术运算符和括号将运算对象连接起来的、符合语法规则的式子称为算术表达式,运算对象可以是常数、变量、函数等。

例如:#6*8/#32-1.5+#18+ROUND(#1)

这就是一个算术运算式,它可以作为一个整体赋值给某个变量,或用作其他表达式中的一个运算对象。

本系统按表表3-2规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如表达式#12-#41*5的左侧为减,右侧为乘号,而乘号优先于减号,因此,相当于#12-(#41*5)。

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

关系运算符是逻辑运算中比较简单的一种。所谓“关系运算”实际上就是“比较运算”。将两个值进行比较,判断比较的结果是否符合给定的条件。

例如,#3>10是一个关系表达式,大于号(>)是一个关系运算符,如果#3=12,则满足给定的“#3>10”条件,因此关系表达式的值为“真”(即“条件满足”);如果#3=6,不满足“#3>10”条件,则称关系表达式的值为“假”。

本系统提供6种关系运算符:(1)<(小于)(2)<=(小于或等于)

优先级相同(高)

(3)>(大于)(4)>=(大于或等于)(5)=(等于)优先级(较高)(6)<>(不等于)优先级(低)

第15页

关于优先次序:

1、前4种关系运算符(<,<=,>,>=)的优先级别相同,它们却高于关系运算符“=”,而“=”又高于“<>”

2、关系运算符的优先级低于算术运算符。3、关系运算符的优先级高于赋值运算符。

用两个关系运算符将两个表达式连接起来的式子,称为关系表达式。例如:#6>36,#13+4<>#23

关系表达式的值是一个逻辑值,即“真”或“假”。例如,若#12为8,则关系表达式“#12=10”的值为“假”,“#12>=6”的值为“真”。五、逻辑运算和逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。本系统提供6种逻辑运算符和逻辑运算(1)&,AND逻辑与(2)XOR逻辑或(3)OR逻辑异或

它们都是“双目(元)运算符”,它要求有两个运算量(操作数),逻辑运算举例如下:

#1AND#2若#1、#2为真,则#1AND#2为真。#1OR#2若#1、#2之一为真,则#1XOR#2为真。逻辑运算符低于关系运算符,见图3-1。

算术运算符关系运算符逻辑运算符赋值运算符图3-1

(低)(高)第三节用户宏程序的流程控制

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

判断条件的真假,然后根据真假或者对应情况到指定的地方去执行程序,这方面的语句有IF和CASE语句。

第16页

1、IF条件语句

1)基本语法:

IF<条件表达式>THEN

<操作>

ELSEIF<条件表达式>THEN

<操作>

ELSE

<操作>

END_IF;

说明:IF条件判断,根据真假情况到指定的地方去执行程序。例如:

%@MACRO//启动MACRO语法

#1:=3.0;

G01G91G92X20.Y15.F200000;IF#1=1THEN

X(1.0*1);Y(1.0*1);

ELSEIF#1=2THEN

X(1.0*2);Y(1.0*2);

ELSEIF#1=3THEN

X(1.0*3);Y(1.0*3);ELSE

X(1.0*4);Y(1.0*4);END_IF;

X(1.0)Y(1.0);M30;

然而在实际使用中,可以有以下一些变形:2)变形1

语法:

IF<条件表达式>THEN

<操作>

ELSE

<操作>

第17页

END_IF;3)变形2

语法:

IF<条件表达式>THEN

<操作>

END_IF;

编程时可根据需要选择合适的语法格式。2、CASE分支语句

语法:

CASE<条件表达式>OF

<条件值>:

<操作>

<条件表达式>,<条件表达式>,<条件表达式>:

<操作>

<条件表达式>,…<条件表达式>:

<操作>ELSE

<操作>

END_CASE;

说明:CASE多条件判断分支,根据条件表达式运算结果所对应的条件值(整数),分别执行不同程序区块。例如:

%@MACRO//启动MACRO语法

#1:=8;

G01G91G92X20.Y15.F200000;CASE#1OF1:

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);

第18页

Y(1.0*6);END_CASE;X(1.0)Y(1.0);M30;二、循环控制

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;

G01G92X#12Y#13F200.0;REPEAT

G00X(#12+#14)Y(#13+#15);G01X(#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当型循环

第19页

语法:

WHILE<条件表达式>DO

<循环体>

END_WHILE;

说明:WHILE当型循环控制,先判断条件表达式,当条件满足时执行循环体,否则退出循环。例如:

%@MACRO//启动MACRO语法

#10:=20.;#11:=15.;#12:=#10/2;

#13:=#11/2;#14:=2.0;#15:=1.5;

G01G92X#12Y#13F200.0;

WHILE(#14<=#12)AND(#15<=#13)DO

G00X(#12+#14)Y(#13+#15);G01X(#12+#14)Y(#13-#15);X(#12-#14)Y(#13-#15);

IF#14>6.0THEN

EXIT;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);M02;2、FOR循环语法:

FOR<循环变量>:=<表达式1>TO<表达式2>[BY<表达式3>]DO

<循环体>

END_FOR;

第20页

说明:FOR循环控制,式中各参数意义如下循环变量——控制循环次数的变量;

表达式1——循环计数的起始值,可为整数或表达式;表达式2——循环计数的终止值,可为整数或表达式;表达式3——循环计数每次的累加值,可为整数或表达式;循环体——循环每次执行内容;FOR循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次累加值,继续判断直到循环变量为终止值时退出循环。范例:

%@MACRO//启动MACRO语法

#1:=2.0;(*INITIALRADIUS*)#2:=8.0;(*FINIALRADIUS*)#3:=9;(*SIDES*)#4:=360.0/#3;(*THETA*)#5:=(180.0+#4)/2;(*STARTANGLE*)G91G92X0.Y0.F300000;G01X(#1);

FOR#6:=#1TO#2BY2.0DO

#7:=2.0*#6*COS(180.0-#5);#8:=(#7/2.0)/COS(180.0/6);#9:=#5;G01X(1.0);FOR#10:=1TO#3DO

G03X(#7*COS(#9))

Y(#7*SIN(#9))

I(#8*COS(#9-180.0/6))J(#8*SIN(#9-180.0/6));

#9:=#9+#4;END_FOR;END_FOR;三、无条件转移1、GOTO转移语句

语法:

GOTOn;

第21页

说明:无条件地跳到指定的n行号执行,其中n可为整数或表达式。GOTO常和IF语句搭配使用,那就是说当程序检查到某个条件满足时用GOTO语句去进一步处理,但应尽量少用该语句以提高程序可读性。范例:

%@MACRO//启动MACRO语法

IF(#1=2)THENGOTO100;G01X10.Y10.;…

N100G01X30.Y30.;…

M02;

2、EXIT循环中断语句

语法:EXIT;

说明:循环中断,跳离循环控制;用在循环控制中,通常EXIT都和IF语句搭配使用,当某个条件满足后就跳离循环。

请参考WHILE范例。

第四节库函数

库函数是系统开发人员根据用户的需要事先编制并提供给用户使用的。在进行用户宏编程时若用户需要就直接在程序中调用即可,具体方法前面已有论述。本系统就提供了丰富的库函数,并分为四类,见表3-4;此将分别介绍其中的常用函数使用方法,其他函数请参见附录。

表3-4系统库函数分类

类别数学函数类

用途说明

函数名

基本的数算,象三ABS、ACOS、ASIN、ATAN、COS、MAX、角函数、求整,规范化MIN、SIN、SQRT、TAN、SIGN、CEIL、数据等FLOOR、ROUND、STD、STDX、RANDOM对系统信息的读取,显PUSH、POP、STKTOP、ALARM、PRINT、示,数据保存等AXID、GETARG、COMMENT、

GETTRAPARG、PARAM、SYSVAR、

SCANTEXT

操作辅助类文档操作类仿真状态类

辅助完成操作对文档或数据的一些操作

在仿真状态下的一些绘图操作

SLEEP、WAIT

OPEN、CLOSE、DBOPEN、DBLOADDRAWHOLE、DRAWMARK、SETDRAW

信息传递类

第22页

一、数学函数类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

第23页

END_IF;6、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、PUSH

调用方法:PUSH(<参数>)函数描述:进宏堆栈范例:

PUSH(#1);//变量#1内容进栈PUSH(#3);//变量#3内容进栈2、STKTOP

调用方法:STKTOP()

函数描述:从栈顶依据索引获取堆栈元素,但不弹出此元素,其中i为整数。范例:

STKTOP(0);STKTOP(1);STKTOP(2);

//栈顶元素

//栈顶下的第一个元素//栈顶下的第二个元素

3、ALARM

调用方法:ALARM(<参数>)

函数描述:发出整型参数所对应的宏警告范例:

ALARM(300);//发出标识号为300的警告ALARM(#1);//#1必须为整数4、AXID

调用方法:AXID(<轴标识符>)

第24页

函数描述:查找轴的标识符,轴的标识符就是机器轴的号数;当输入的轴名称不存在时,返回为空范例:

假定:第六轴的名称为Y2,第六轴的名称为Y;那么:

AXID(Y)返回2AXID(Y2)返回65、PRINT

调用方法:PRINT(<“字符串”>)

函数描述:此函数用来输出字符串,输出字符串中的变量名称会被取代成该变量的值,此函数如果成功响应值为1,失败时响应值为0。例:

@53=20;#3=23.1;

PRINT(“G01X#3Y@53Z20.0”);输出结果为

G01X23.100Y20Z20.0;

字符‘\\’为逃脱字符,特殊字符定义如下:

‘\\\\’表示’\\’字符‘\\@’表示’@’字符‘\\#’表示’#’字符‘\\p’表示’%’字符因此欲输出

G01X(@20/@30)Y#20/2.0;其语法格式为

PRINT(“G01X(\\@20/\\@30)Y\\#20/2.0”);三、操作辅助类1、SLEEP()

调用方法:SLEEP()

函数描述:临时放弃执行循环范例:

SLEEP();2、WAIT()

调用方法:WAIT()

函数描述:等待直到前一个动作或逻辑指令执行完毕范例:

WAIT();四、文档操作类1、OPEN

第25页

调用方法:OPEN(<“文件名称”>)函数描述:开启所指定的文件名称。此函数如果成功响应值为1,失败时响应值为0。档案开启后PRINT函数才有效。

文件名称为“COM”时表示打开RS232传输端口,其设定由系统参数3905等参数设定之。例:

OPEN(“PROBE.NC”);

//打开PROBE.NC文档准备输出例:

OPEN(“COM”);//打开传输口PRINT(\"\\p\");//输出’%’字符

FOR#1=1TO5000DO#30=#1*10.;

PRINT(\"G01X#30\");//输出G01X10.000…

END_FOR;

PRINT(“\\p”);//输出‘%’字符CLOSE();//关闭传输口2、DBLOAD

调用方法:DBLOAD()

函数描述:从目前加载的XML资料表中,加载指定的第i笔数据,其中i为整数例:

//加载FLAT\\\\TAB01数据文件DBOPEN(“FLAT\\\\TAB01”);//加载第0笔数据DBLOAD(0);…

//加载第1笔数据DBLOAD(1);

五、仿真绘图类1、DRAWHOLE()

调用方法:DRAWHOLE()

函数描述:在当前位置使用当前的刀具半径、线条颜色、填充色来描绘一个孔。该函数仅在图形仿真状态下有效。2、DRAWMARK

调用方法:DRAWMARK(<形状参数,大小参数,颜色参数>)

函数描述:在当前位置按指定的形状、大小、颜色来描绘一个标记,此标记由大小参数确定而与缩放比例无关大小参数:按像素计

第26页

形状参数:0——圆形,1——正方形,2——菱形该函数仅在图形仿真状态下有效。

第27页

第四章宏程序的调用

第一节简单宏调用

一、简单宏调用指令

用户宏的简单宏调用是指在主程序中,宏程序可以被单个程序段单次调用,也称简单宏指令调用。

调用格式:G65P<宏程序号>L<重复次数><引数赋值>

G65为简单宏程序调用指令,P之后的<宏程序号>为被调用的用户宏程序号;L之后的<重复次数>为宏程序重复运行的次数,重复次数为1时,可省略不写;<引数赋值>由地址符及实际数值构成,由它为用户宏程序中所使用的变量赋与实际数值。

例如:G65P10L3X10.Y10.;

其中,P10表示被调用的用户宏程序号为10,L3表示用户宏程序被重复运行3次,X10.Y10.是引数赋值。

宏程序与子程序相同的一点是,一个宏程序可被另一个宏程序调用,最多可调用4重。

二、模态信息的回复

模态信息的回复是指当调用宏时,可将系统内部的模态信息保存起来,使之即使在用户宏程序内部其信息发生变化,当从宏返回主程序时也能回复到原来的状态。这常用模态信息会发生改变,在返回主程序后又能恢复原模态信息的用户宏程序中。

一般地,不可改变模式G码(G00/G01/G02/G03/G33/G34/G35,G91/G90,

G40/G41/G42,…,)的状态,如果用户宏程序中需要改变其状态时,就需要模态信息的回复,即在进入用户宏程序时立即保存模态信息,离开时再恢复其原来状态。

例如:

%@MACRO#45:=#1000;#46:=#1004;…

G#45G#46;M99;

//启动MACRO语法//保存模态信息//模态信息发生改变

//返回主程序前恢复原模态信息

第二节模态宏调用

模态宏调用就是指用户宏一经调用就在主程序中一直有效,直到后面程序段中使用模态宏调用取消指令取消它的作用。一、模态宏调用指令G66

调用格式:G66P<程序号>L<循环次数><引数赋值>;

在使用这一用户宏调用指令状态下,每当执行到主程序的程序段中有移动指令

第28页

时,则先执行完这一移动指令后,再调用用户宏程序,直到模态宏调用被取消。所以,G66又称为移动调用指令。

取消模态宏调用使用指令G67。范例:

主程序:

G66P9802R_Z_X_;//调用宏程序,并且对引数赋值X_;//在有移动的程序段中,执行孔加工宏程序M_;//非移动指令不执行孔加工宏程序Y_;//执行孔加工宏程序…

G67://取消模态宏调用…

孔加工宏程序(采用增量方式):

O9082;G00Z#18;G01Z#26;G04X#24;

G00Z-[ROUND[#18]+ROUND[#26];M99;

执行这一程序的流程如图4-2所示。二、模态宏调用指令G66.1

调用格式:G66.1P<程序号>L<循环次数><引数赋值>;与模态宏调用指令G66类似,区别在于它是在主程序中使用G66进行模态宏调用后,每遇到一个程序段时,则先执行完该程序段后,再调用用户宏程序,直到模态宏调用被取消。

取消模态宏调用仍使用指令G67。对于上面一个范例,修改如下:

主程序:

G66.1P9802R_Z_X_;//调用宏程序,并且对引数赋值X_;//在有移动的程序段中,执行孔加工宏程序M_;//执行孔加工宏程序,区别于G66调用指令Y_;//执行孔加工宏程序…

G67://取消模态宏调用…

孔加工宏程序不变,执行这一程序的流程如图4-3所示。

第29页

第三节扩充G代码宏指令调用

用户宏除了用上述的模态调用指令G65和G66、G66.1外,本系统还提供扩充G代码宏调用的来调用用户宏程序。

调用格式:G<用户宏号码><引数赋值>

为了实现这一方法,需要通过修改模态信息变量#1000来改变目前的插值模式。当用户宏程序在离开后保留此宏插值模式,就须在宏程序离开前将#1000设为自己的用户宏号码。这样在主程序中就能按上述G代码宏调用格式调用用户宏程序,此后只要遇到移动指令指令的程序段就会自动调用此用户宏程序,其实际操作将由此用户宏程序定义之。如此调用宏程序的扩充G指令就叫做G代码宏指令

G代码宏指令可看作是模态代码,它与G00/G01/G02/G03/G31/G33等G代码同组,因此它在遇到G00/G01/G02/G03/G31/G33或其它扩充插值G代码宏指令等插值指令时自动取消并被代替。

范例:开发一个有模式循环的宏指令G21。主程序:

G21X_Z_R_;X_;X_;X_;G00Z_;

用户宏程序:

%@MACRO…//

宏程序

//设定G21插值模式,调用用户宏程序

//调用用户宏程序//调用用户宏程序//调用用户宏程序

//G21模式取消,并被G00模式代替

#1000:=21;//设定G21为目前的插值模式M99;

第30页

第五章用户宏程序范例

第一节用户宏程序编写注意事项

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)。

请不要使用全局变量(GlobalVariables,@1~@999),因为G码执行时,使用者的数据是由自变量(A_,B_…,Z_)传入,由公共变量传递不符合使用习惯。系统在执行加工时对于MACRO程序会事先预编译,因此MACRO执行速度会超前于G、M代码指令,因此当要求变量赋值或数据读取须与G、M代码指令发出的时间进程相同时,请于变量赋值或数据读取前加WAIT()指令,否则该变量赋值或该数据读取将无法与G、M代码同步。不可改变模式G码(G00/G01/G02/G03/G33/G34/G35,G91/G90,

G40/G41/G42,…,)的状态,如果用户宏程序中需要改变其状态时,就需要模态信息的回复,

对于长度或角度的自变量在运算前请使用STD()函数将单位标准化,以符合工具机使用习惯。

4.

5.6.

7.

8.9.

不可以改变坐标系统设定,G92/G/G52等与坐标系统相关指令不能使用,否则图形仿真功能将失去参考意义。

10.请在程序中加上必要的注释,养成良好的编程习惯,以增加程序可读性和可

维护性,以帮助后续开发人员维护和排除问题。

第二节用户宏程序编写范例

一、车床G21车床车牙

取材自车床G21车床车牙模式循环宏,其规格请参考车床程序使用手册%@MACRO

第31页

//WHENNOX(U)Z(W)ARGUMENTS,THENLOADMODALINFORMATION//ELSEDOTHREADCUTTING//#8(E)LEADCOUNTPERINCH//#18(R)TAPERAMOUNT

//#2070RECORDEDTAPERAMOUNT//#2071RECORDEDZAXISAMOUNT

//PROCESSNOARGUMENTCASEWHICHMAYCAUSEFROMMODALRESTORE

IF(#21=#0AND#23=#0AND#24=#0AND#26=#0)THEN

M99;END_IF;

//PROCESSTAPERIF(#1000<>21)THEN

//WHENFIRSTENTRY,CLEARTAPERMODALSTATE#2070:=0;#2071:=0;#2072:=#0;END_IF;

IF(#18<>#0)THEN

//THEREARETAPERADDRESS,RECORDITINTOMODALVARIABLE#2070:=#18;ELSE

//NOTAPERADDRESSAPPEAR,INHERITMODALSTATE#18:=#2070;END_IF;

IF(#9<>#0)THEN

//THEREARELEADADDRESS,RECORDITINTOMODALVARIABLE#2072:=#9;ELSE

//NOLEADADDRESSAPPEAR,INHERITMODALSTATE#9:=#2072;END_IF;

IF(#23<>#0OR#26<>#0)THEN

第32页

//WHENTHEREAREWORZADDRESSAPPEAR,THEN//CHECKWHICHKINDOFCOMMANDBEENADDRESS,AND//SAVEITINTOMODALVARIABLEIF(#26<>#0)THEN

//ZADDRESS

#2071:=#26-#1303;ELSE

//WADDRESS#2071:=#23;END_IF;ELSE

//WHENTHEREARENOZ/WADDRESS,THENINHERITITFROM//MODALVARIABLE#26:=#2071+#1303;END_IF;

//PROCESSEADDRESS

IF(#8<>#0AND#9=#0)THEN

IF(#1008=94)THEN

//FEEDPERMINUTE,CALCULATEMM/MIN=LEAD*SPINDLESPEED

#9:=(25.4*#1034)/#8;#2072:=#9;ELSE

//FEEDPERREVOLUTION,CALCULATEMM/REV=LEAD#9:=25.4/#8;#2072:=#9;END_IF;END_IF;

//STANDARDIZEARGUMENT#9:=STD(#9,#1600);#21:=STD(#21,#1600);#23:=STD(#23,#1600);#24:=STD(#24,#1600);#26:=STD(#26,#1600);#18:=STD(#18,#1600);

第33页

//workingvariable//#31chamferstartpointrelativetoblockendX//#32chamferblockX-directiondisplacement//#33chamferamount//#36threadheadnumberiterativecount//#37threadstartangle//READCHAMFERAMOUNT#33:=(#4043*#9)/10.0;

//COPYX,ZINFORMATIONINTOU,W//PROCESSXADDRESSIF(#24<>#0)THEN

#21:=#24-#1301;END_IF;

//PROCESSZADDRESSIF(#26<>#0)THEN

#23:=#26-#1303;END_IF;

//processHaddesss,theheadnumberIF(#11<>#0)THEN

#11:=ROUND(#11);ELSE

//setdefaultheadnumber#11:=1;END_IF;

//CALCULATECHAMFERSTARTPOINTRELATIVETOBLOCKENDPOINTINX

#31:=(SIGN(#23)*#33*2*#18)/#23;

//CALCULATECHAMFERBLOCKX-DIRECTIONDISPLACEMENT#32:=-SIGN(#21)*#33*2;FOR#36:=1TO#11DO

第34页

//calculatethreadstartangle#37:=(360.0/#11)*(#36-1);

G00U(#21+#18*2);

G33U-(#18*2-#31)W(#23-SIGN(#23)*#33)Q#37F(#9*#11);G33U#32W(SIGN(#23)*#33)Q#37;G00U-#21-#32-#31;G00W-#23;END_FOR;

//SETINTERPOLATIONMODETO21#1000:=21;//RETURNM99;

第35页

项目G00G01G02G03G04G10G15G16G17G18G19G28G29G30G31G33G40G41G42G43G44G49G50G51G52G53GG55G56G57G58G59G65G66G67G67功直线快速定位直线补间、切削进给圆弧补间(顺时钟)圆弧补间(逆时钟)暂停指定时间可程序数据输入取消极坐标命令极坐标命令设定XY工作平面设定ZX工作平面设定YZ工作平面原点回归从参考点复归任意参考点回归跳跃功能螺牙切削刀具半径补偿消除刀具半径左补偿刀具半径右补偿刀具长度正补偿刀具长度负补偿刀具长度补偿取消取消放大缩小放大缩小设定区域坐标(子工件坐标)机械坐标定位设定工件坐标系统设定第二工件坐标系统设定第三工件坐标系统设定第四工件坐标系统设定第五工件坐标系统设定第六工件坐标系统单一宏程序调用模式宏程序调用模式宏程序调用取消取消坐标旋转能录

名称附录Ⅰ基本G码指令一览表第36页

项目G68G70G71G90G91G92G94G95G96G97功坐标旋转英制单位加工公制单位加工绝对位置输入方式相对位置输入方式加工位置坐标系统设定每分钟进给量(mm/min.)每转进给量(mm/rev.)等表面切削速度等表面切削速度取消能名称附录Ⅱ地址码一览表

功能

程序号顺序号准备功能尺寸字

NGX、Y、Z

A、B、C、U、V、WRI、J、K

进给功能主轴功能刀具功能辅助功能偏置号暂停子程序号指定顺序号指定重复次数参数

FSTMH、DP、XPPLP、Q、R

地址

:/O/%

程序编号程序段编号建立工作方式各坐标的移动指令各附加轴的移动指令圆弧半径

意义

圆弧圆心的(增量)坐标指定进给的速度指定主轴的旋转速度刀具选择中用于指定刀号实现机床操作的各种辅助动作

偏置号的指定,长度偏移用H,半径补偿用D暂停时间指定

在M98程序段中,用以指定子程序号在顺序号的位置,程序被重复执行子程序或固定循环的重复次数固定循环中参数的指定

附录Ⅲ引数赋值的地址码和变量的对应关系表

引数赋值的地址码

ABC

用户宏中的变量

#1#2#3

第37页

引数赋值的地址码

PQR

用户宏中的变量

#16#17#18

DEFHIJK

#7#8#9#11#4#5#6

STUVWXY

#19#20#21#22#23#24#25

M#13Z#26

[注]:关于扩充的地址码,X1=,请使用GETARG(address)函式读取。

附录Ⅳ运算符及其优先级

运算名括号

函数调用运算取负求补运算乘法运算除法运算模运算/求余运算加法运算减法运算关系运算相等运算不等运算布尔逻辑/按位与布尔逻辑/按位异或布尔逻辑/按位或

符号(),[]

<函数名>(<参数列表>)-NOT*/MOD+

-<,>,<=,>==<>

&,ANDXOROR

优先级123344455671011

附录Ⅴ系统变量分配表

模态信息#1000#1002#1004#1006#1008

插值模式,00/01/02/03/33/34/35工作平面选择方式,17/18/19绝对值/增量值编程模式,90/91存储行程限位模式,22/23进刀模式,94/95

R/WRRRR

第38页

#1010#1012#1014#1016#1018#1020#1022#1024#1026#1028#1030#1032#1034#1036#1038#1040#1042#1044#1046#1048#1050#1052#10#1056

输入方式(英制/公制),20/21刀具半径补偿方式,40/41/42刀具长度补偿方式,43/44/49缩放方式,50/51等表面切削方式,96/97切削进料控制方式61/62/63/坐标旋转方式,68/69

主轴速度波动检测方式,25/26极坐标插补方式,12/13极坐标命令方式,15/16刀具半径偏置选择号,D代码刀具长度偏置选择号,H代码切削条件选择号,S代码刀具选择号,T代码辅助功能代码号,M代码当前工件坐标系号程序序号,N代码

上一个程序段插值方式,对于G66.1模态宏调用,可以有四个程序字(M_S_T_F_)或者为空进給速度命令,F代码调用者当前行号程序起始序号程序起始行号

主轴运行状态(M03/M04/M05)拐角处理后的程序序号,N代码

RRRRRRRRRRRRRRRRRRRRRRRR

运行控制/状态#1500#1502#1504#1506#1508#1600#1602#1604

安静方式,1(安静模式),0(正常模式)单程序块控制字进給控制字

仿真方式,1(仿真模式),0(正常模式)模式组内部的自身会议号最小输入距离增量

最小输入时间/旋转角度增量

使用U/V/W地址作为X/Y/Z轴的增量指令代码,1(用其作为X/Y/Z增量指令),0(作为通常的轴指令)

R/WR/WR/WRRRRR

第39页

#1606#1608#1610#1612#1614#1616#1618#1620#1622#1624当前位置#1301~#1316#1321~#1336#1341~#1356#1361~#1376

宏堆栈元素计数

空指令位置锁定标志,1锁定,0未锁定主轴停止的定位角度默认的工件坐标系号默认的主轴速度断点的序号断点的行号当前的序号当前点的行号当前活动的主轴号

RRRRR

RRR/WR/WR/W

Blockendpositioninworkpieceposition

Currentpositioninmachinecoordinate,thisvaluecan’tbereadduringmovement.

currentpositioninworkpiececoordinate

Skipsignalpositioninworkpiececoordinate,thetoolpositionwheretheskipsignalisturnedoninaG31(skipfunction)blockisheldinthesevariables

刀具长度补偿向量

Lastarcblockcentervector,(I,J,K)

Blockendpositioninworkpieceposition,indexby1441(X);1442(Y);1443(Z)

工件坐标系中机床编码器的当前位置值

RRRR

#1381~#1396#1401~#1403#1411~#1413#1421~#1436运行时状态变量#1800#1801#1802#1810#1811#1812#1815#1816#1820

RRRR

刚性攻牙旋转方向循迹误差BLU中的刚性攻牙Z-方向循迹误差刚性攻牙循迹误差,最大值Guidanceremaindistance,inLIU

Guidancex-directionremaindistance,inLIUGuidancey-directionremaindistance,inLIUIndicatorforisinguidancefunction,0:No;1:Yes

Guidanceederate,单位IU/min

Mutestate,discardallcommandduringmutestateON.0:OFF,1:

RRRRRRRR/WR/W

第40页

ON,thisstatevariablealsoavailablefromG10L1100command

静音状态,当在静音状态开启时丢弃所有指令。0:OFF,1:ON,该状态也可以通过G10L1100指令实现。

#1821#1822#1823#1824#1825#1827#1901~1916模态变量

当系统重置时态变量被自动清空#2001~#2100#3001~#3100用户参数#4001~#4100#5001~#5100信号接口#6001~#6032

MLC的位值接口(对应到C101~C132/S101~S132),范例:

@1:=#6001;//赋C101值给@1#6001:=@2;//赋@2值给S101

R/W

供内部使用的用户参数供制造商使用的用户参数

RR

供内部使用的模态变量供制造商使用的模态变量

R/WR/W

累积切削长度,单位IU切削进給指令,单位mm/min主轴速度指令,单位RPM

活动的进給控制方式,G61/G62/G63/G活动的G代码方式活动的工件坐标系号工件坐标系数量

R/WR/WR/WRRRR/W

模式组变量

当模式组被重新指定时模式组变量将被自动清空#7001~#7050#7101

供内部使用的模态变量模式组下的轴组号

R/WR

刀具补偿变量(R/W)本版本只有400个补偿值补偿号0

刀具长度补偿(H)几何补偿#11000

磨损补偿#10000

刀具补偿(D)几何补偿#13000

磨损补偿#12000

第41页

1..200..400..999#11001..

#11200..

#11400..

#11999#10001..

#10200..

#10400..

#10999#13001..

#13200..

#13400..

#13999#12001..

#12200..

#12400..

#12999

工件坐标系补偿值(工件零点偏移值)本版本只有16个工件坐标系

#20001~#20006扩展工件零点偏移值

#20021~#20026工件1的零点偏移值,G#20041~#20046工件2的零点偏移值,G55…

#25981~#25986工件299的零点偏移值参考点

参考点1总是在初始点本版本只有四个参考点

#26001~#26006参考点1的位置#26021~#26026参考点2的位置#26041~#26046参考点3的位置…

#31981~31986

参考点300的位置

R/WR/WR/WR/WR/WR/WR/WR/WR/WR/W

附录Ⅵ库函数

函数名ABS

描述

求一个数的绝对值范例:

#1:=ABS(-2.3);求一个数的反余弦值范例:

#1:=ACOS(#10);求一个数的反正弦值

第42页

//#1的结果是2.3

ACOS

ASIN

函数名描述范例:

#1:=ASIN(#10);求一个数的反正切值范例:

#1:=ATAN(#10);求一个数的余弦值范例:

#1:=COS(#10);求两个数的最大值范例1:

#1:=MAX(10,20);范例2:

#1:=MAX(#2,#3);

ATAN

COS

MAX

//#1等于20

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:

SIN

SQRT

TAN

SIGN

CEIL

第43页

函数名描述

#2:=CEIL(2.3);范例2:

//#2等于3

FLOOR

#2:=CEIL(#10);

返回比一个数小或与其相等的最大整数范例1:

#2:=FLOOR(2.3);//#2等于2范例2:

#2:=FLOOR(#10);四舍五入化整范例1:

#2:=ROUND(2.3);范例2:

ROUND

//#2等于2

STD

#2:=ROUND(#10);

参数规范化,读第一个参数为规范化对象,根据第二个参数使用最小增量方法,特别对小数编程尤为必要。范例:

#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

STDAX

RANDOM

PUSH

POP

STKTOP

从栈顶依据索引获取堆栈元素,但不弹出此元素范例:

STKTOP(0);//栈顶元素STKTOP(1);//栈顶下的第一个元素

第44页

函数名描述

STKTOP(2);

//栈顶下的第二个元素

…etc发出宏警告范例:

ALARM(300);//发出标识号为300的警告ALARM(#1);//#1必须为整数临时放弃执行循环范例:

SLEEP();

等待直到前一个动作或逻辑指令执行完毕范例:

WAIT();

查找轴的标识符,轴的标识符就是机器轴的号数;当输入的轴名称不存在时,返回为空范例:

假定:第六轴的名称为Y2,第六轴的名称为Y;那么:

AXID(Y)返回2AXID(Y2)返回6开启所指定的文件名称。此函数如果成功响应值为1,失败时响应值为0。档案开启后PRINT函数才有效。文件名称为“COM”时表示打开RS232传输端口,其设定由系统参数3905等参数设定之。例:

OPEN(“PROBE.NC”);

//打开PROBE.NC文档准备输出例:

OPEN(“COM”);//打开传输口PRINT(\"\\p\");//输出’%’字符

FOR#1=1TO5000DO#30=#1*10.;

PRINT(\"G01X#30\");//输出G01X10.000…END_FOR;

PRINT(“\\p”);//输出‘%’字符CLOSE();//关闭传输口

ALARM

SLEEP

WAIT

AXID

OPEN(“文件名称”)

CLOSE()

关闭前面由OPEN函数所开启的档案。程序结束后档案亦会自动关闭。档案关闭后PRINT函数就无效。

第45页

函数名描述例:

CLOSE();//关闭档案

PRINT(“输出字符串”)

此函数用来输出字符串,输出字符串中的变量名称会被取代成该变量的值,此函数如果成功响应值为1,失败时响应值为0。例:

@53=20;#3=23.1;

PRINT(“G01X#3Y@53Z20.0”);输出结果为

G01X23.100Y20Z20.0;

字符‘\\’为逃脱字符,特殊字符定义如下:

‘\\\\’表示’\\’字符‘\\@’表示’@’字符‘\\#’表示’#’字符‘\\p’表示’%’字符因此欲输出

G01X(@20/@30)Y#20/2.0;其语法格式为

GETARG(address)

PRINT(“G01X(\\@20/\\@30)Y\\#20/2.0”);读取调用者传递的自变量例:

O0001主程序

G101X30.Y40.Z1=40.Z2=50.;.

G0101扩充宏程序

#1=GETARG(X);//将X自变量内容30.存到#1#2=GETARG(Z1);//将Z1自变量内容40.存到#2#3=GETARG(W);//因W不存在#3值为空

GETTRAPARG(address)对于采用代码G66/G66.1进行模态宏调用的被调用者处

理获得此TRAP段信息例:

O0001主程序

G66P100X100.Y100.G01X20..

O0100子程序

第46页

函数名描述

#1=GETARG(X);//将X自变量内容100.存到#1#2=GETTRAPARG(X);//将Trap单字X自变量内容20.存到#2

DBOPEN(“文件名称”)

加载指定的XML数据表,文件名称路径相对于XML数据库的根目录。例:

DBOPEN(“FLAT\\\\TAB01”);//加载FLAT\\\\TAB01数据文件

例:

#1=51;

DBOPEN(“FLAT\\\\AB#1[3]ZZ”);//加载FLAT\\\\AB051ZZ资料文件,[3]表示三为有效数

字。

从目前加载的XML资料表中,加载指定的数据DBLOAD(CycleNo)

例:

//加载FLAT\\\\TAB01数据文件DBOPEN(“FLAT\\\\TAB01”);//加载第0笔数据DBLOAD(0);…

//加载第1笔数据DBLOAD(1);…

COMMENT(“批注字符此函数用来输出批注字符串,输出字符串中的变量名称串”)会被取代成该变量的值,此函数如果成功响应值为1,

失败时响应值为0。例:

@53=20;#3=23.1;

COMMENT(“//G01X#3Y@53Z20.0”);输出结果为

//G01X23.100Y20Z20.0;

字符‘\\’为转义字符,特殊字符定义如下:‘\\\\’表示’\\’字符‘\\@’表示’@’字符‘\\#’表示’#’字符‘\\p’表示’%’字符因此欲输出

第47页

函数名描述

//THISISTURNINGCYCLE其语法格式为

DRAWHOLE()

COMMENT(“//THISISTURNINGCYCLE”);

在当前位置使用当前的刀具半径、线条颜色、填充色来描绘一个孔。

该函数仅在图形仿真状态下有效

DRAWMARK(shape,在当前位置按指定的形状、大小、颜色来描绘一个标记size,color),此标记由Size确定而与缩放比例无关

Size:按像素计

Shape:0:圆形,1:正方形;2:菱形.该函数仅在图形仿真状态下有效SETDRAW(LineColor)or

SETDRAW(LineColor,FillColor,ToolRadius)PARAM(no)

配置绘图风格

线条颜色:以此色来描绘连续线条刀具半径:以此确定孔的半径大小填充色:以此色来填充孔的内部该函数仅在图形仿真状态下有效

读取号码所指定的系统参数

#1=PARAM(3204)//读取PLC扫描时间间隔

SYSVAR(AxisGroupI读取指定坐标系的系统变量D,No)AxisGroupID:轴组标识符;“1”标识第一轴组,“2”

标识第二轴组,以此类推No:系统变量编号范例:

#1=SYSVAR(1,1000);//读取第一轴组的插补方式SCANTEXT(No)

扫描读取全局变量的文本字符串说明:因为字符串是局部的,因此只能以局部变量存储,而不能存入全局变量,否则将得到错误结果。范例:

//scanstringtextfrom@300#1=SCANTEXT(300);

//以下将得到错误结果

@100=#1;//@100将丢失字符串信息

DBOPEN(“ABC_@100”);//这将得到错误结果//以下将得到正确结果

第48页

函数名描述

#100=#1;//#100有效地包含从@300开始的字符串DBOPEN(“ABC_#300”);//这将得到正确结果

附录Ⅶ程序调用方法

语法

M98P_H_L_

描述

子程序调用P_子程序名称H_起始序号L_重复次数简单宏调用P_子程序名称L_重复次数

G66P_L_addresses模态宏调用,遇到移动指令调G66P10X10.0Y10.0;用X20.P_子程序名称Y20.L_重复次数说明:

X20与Y20.移动指令会调用O0010

G66.1P10X10.0X20.G04X2.;M31;说明:

X20、G04X2与M31.每个程序段都会调用O0010

G128L3X1.0;(这将调用G0128三次)范例:M98P10L2;

G65P_L_addressesG65P10X10.0Y10.0;

G66.1P_L_addresses模态宏指令调用,每个程序段

都调用

P_子程序名称L_重复次数

G_L_addressesT_

扩充G代码调用L_重复次数

刀具选择子程序调用,任何TT3;(这将调用T0000)代码的执行相当于调用内部的换刀子程序,可以把其看作通常的T子程序调用。M代码宏调用

M13A_B_C_;

调用M0013宏程序;使用前必需先在系统参数3601~内登录。

M_addresses第49页

返回方法语法M99M99P_

描述一般返回

范例M99;

返回并转到指定的程序段编号M99P100;P_欲到达的序号编号回到主程序编号为N100

的位置返回并转到指定的行号Q_欲到达的行号编号模态宏调用取消

M99Q100;

回到主程序行号100的位置G67;

M99Q_

G67

第50页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务