Macro 中文用户宏程序开发手册.docx
- 文档编号:5987271
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:66
- 大小:188.67KB
Macro 中文用户宏程序开发手册.docx
《Macro 中文用户宏程序开发手册.docx》由会员分享,可在线阅读,更多相关《Macro 中文用户宏程序开发手册.docx(66页珍藏版)》请在冰豆网上搜索。
Macro中文用户宏程序开发手册
OpenCNCMacro
用户宏程序开发
新代科技
2005/8/1
前言
本发展环境OpenCNC开发的目的在于方便Macro程序的撰写及测试,使得程序设计师得以在实际上线执行程序之前可以先作一程序的测试,经由图形化的接口而得知其程序是否有逻辑上的错误存在。
第一章OpenCNC开发环境安装及使用说明
第一节系统需求
个人计算机:
80486以上的中央处理器
操作系统:
NT4.0以上的版本,Windows95以上的版本(需先安装MSIE3.0)
硬盘空间:
约1MB的硬盘空间
第二节软件安装
1、将安装磁盘放入3.5吋磁盘驱动器中,执行SETUP。
建议在开始安装之前先行关闭其它的窗口应用程序。
2、稍待片刻即可进入下面之安装画面。
3、选择Next继续安装的工作。
4、选择Browse更改所要安装的目录或是接受内定的目录,选择Next继续安装的工作。
5、稍待片刻即可完成安装。
第三节使用说明
操作说明:
1、首先选取OpenCNC的图标,在图标上以鼠标左键点两下,即可进入主画面:
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、设定所欲显示的空间:
XYZXYYZZX
各个空间设定如上所示。
2、坐标参数设定:
调整各轴的上限和原点的位置。
3、SingleStep:
设定为SingleStep可以一步步的执行程序。
4、开始模拟:
开始执行程序,并将结果显示于结果显示区。
5、停止模拟:
暂停程序的执行。
6、重设:
重新设定系统。
7、开启新档:
开启一个新的Macro程序。
8、加载程序:
加载Macro程序。
9、储存档案:
储存目前的Macro程序。
10、另存新檔:
以新的文件名储存目前的Macro程序。
11、讯息显示区:
显示错误讯息,此外亦可用来显示程序中各个变量值;命令栏(Command)可以输入所欲察看的变量名称,而变量值会显示在讯息显示区。
13、Macro程序中变量的部份请参照第二章「系统变量」的说明。
第二章用户宏编程的基本概念和基本书写格式
第一节用户宏编程的基本概念
用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。
在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。
其代表指令称为用户宏命令,也称作宏程序调用指令。
使用时,编程人员只需会使用用户宏指令即可,而不必去关心宏程序体中的指令内容。
例如,在下述程序流程中,可以这样使用用户宏:
主程序用户宏
……O9011
G65P9011A10I5;……
……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;
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——#2
U——#21
V——#22
则用户宏程序即可写成如下形式
09801;
G9lG00X#lY#2;
G01Y#22;
X#21
Y-#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指令及进行坐标系设定等。
如上述所示,当加工同一类,但只是尺寸不同的工件时,只需改变用户宏命令的数值即可,而没有必要针对每一个零件都编一个程序。
第二节基本书写格式
一、用户宏文档格式
数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。
当标题行含有关键字“@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-
;
顺序号
准备功能字
尺寸字
进给功能字
主轴转速功能字
刀具功能字
辅助功能字
程序段结束
程序字
程序段内各字说明如下:
(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。
表1—3常用辅助功能
代码
功能说明
代码
功能说明
M00
程序停止
M08
切削液开
M01
选择停止
M09
切削液关
M02
程序结束
M30
程序结束
M03
主轴正转
M98
调用子程序
M04
主轴反转
M99
返回主程序
M05
主轴停止
(9)程序段结束写在每一程序段之后,表示程序结束,一般用符号“;”表示。
表1-2地址码一览表
功能
地址
意义
程序号
:
/O/%
程序编号
顺序号
N
程序段编号
准备功能
G
建立工作方式
尺寸字
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
固定循环中参数的指定
三、用户宏程序段格式
用户宏程序段的书写格式与普通数控程序段格式相似,每个程序段也是由若干个程序字和程序段结束组成,但是在地址码后面的具体数值可以被变量置换。
例如:
N100G33U-(#18*2-#31)W(#23-SIGN(#23)*#33)Q#37F(#9*#11);
可见,两者的不同之处就是组成程序字的地址符后面不仅仅可以是数字,而且可以是变量或者变量的表达式,如G(地址码)33(数字)、U(地址码)-(#18*2-#31)(表达式)、Q(地址码)#37(变量)。
但需注意的是,作为地址码的O、N、/等不能引用变量,其余功能字均可在用户宏中按上述格式使用,功能字的意义和使用方法不变。
第三章用户宏程序的编写
第一节变量
一、变量及其使用方法
如前所述,变量是指可以在用户宏程序中的地址码后代替具体数值,在调用宏程序时进行赋值的符号#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、变量赋值
用户宏程序中变量赋值使用赋值运算符“:
=”,不可仅用“=”符号。
因为在本系统中符号“=”是被规定为关系运算符,用来比较是否相等的。
例如#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引数赋值的地址码和变量的对应关系
引数赋值的地址码
用户宏中的变量
引数赋值的地址码
用户宏中的变量
A
#1
P
#16
B
#2
Q
#17
C
#3
R
#18
D
#7
S
#19
E
#8
T
#20
F
#9
U
#21
H
#11
V
#22
I
#4
W
#23
J
#5
X
#24
K
#6
Y
#25
M
#13
Z
#26
[注]:
关于扩充的地址码,X1=,请使用GETARG(address)函式读取。
三、变量的种类
按变量的组成符号和编号可将变量分为局部(Local)变量、系统变量(System)和全局变量(Global),其性质和用途都是不同的。
1、局部变量:
#1~#50
所谓局部变量,就是在用户宏程序内部使用的变量,它只在定义它的用户宏程序中有效,也就是说只有该用户宏程序内使用,在此用户宏程序以外是使用不到这些变量的。
但这并不意味着在此外的用户宏程序就不可以再使用#i这样的变量编号,因为在某一时刻调出的用户宏中所使用的局部变量编号#i和另一时刻调用的用户宏(也不论与前一个用户宏相同还是不同)中所使用的#i是不同的,或者说不同的用户宏调用实例中的#i所占用系统内存地址是不同的,即使在多重调用情况下,当用户宏A调用用户宏B的情况下,也不会将A中的局部变量破坏。
我们可以用局部变量级的这样一个概念来理解,作用于宏程序某一级中的变量称为本级变量,即这一变量在同一程序级中调用时内容相同,若在另一级程序(如子程序)中使用,则意义不同。
本级变量主要用于变量间的相互传递,初始状态下未赋值的本级变量即为空白变量。
如图2-1,就是用G代码(或G65时)调用宏时,局部变量级会随着调用多重度的增加而增加,即存在如图的关系:
主程序用户宏用户宏
(第1级)(第2级)
局部变量
(0级)(1级)(2级)
上图说明了以下几点:
1)主程序中具有#1~#50的局部变量(0级)。
2)用G65调用宏(第1级)时,主程序的局部变量(0级)被保存起来。
再重新为用户宏(第1级)准备了另一套局部变量#1~#50(第1级),可以再向它赋值。
3)下一用户宏(第2级)被调用时,其上一级的局部变量(第l级)被保存,再准备出新的局部变量#1-#50(第2级),如此类推。
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
…
@655=R255
※
※
※
@656~@999
有记忆性变量
读/写
读/写
是
@10000~@14095
对应PLC寄存器R0~R4095:
@10000=R0
…
@14095=R4095
※
※
※
[注]:
※表示具体参见资源分配表表2-4中对应寄存器。
而@401~@655和@10000~@14095两组变量则影射为PLC中系统预定义的一些寄存器,用户宏程序对其的读写规则和使用方法不尽相同,具体可参见表2-4资源分配表中对应的寄存器,至于更详细的寄存器资源用途和规则可参阅《OpenCNCPLC发展手册》书中介绍。
表2-4资源分配表
编号
说明
读写规则
是否可位(Bit)存取
永久保存
宏程序或人机接口
阶梯程序
R0~R39
CNC系统接口区
只读
※
是
否
R40~R49
PLC警报讯息区
R50~R80
使用者自行定义
读/写
读/写
是
否
R81~R100
对应到系统参数3401~3420PLC参数
只读
只读
是
否
R101~R102
刀具状态
读/写
读/写
是
是
R103~R255
使用者自行定义
读/写
读/写
是
是
R256~R511
否
R512~R639
CNC系统接口区
只读
※
是
否
R640~R1023
否
R1023~R4095
使用者自行定义
读/写
读/写
否
否
[注]:
※表示更详细的寄存器资源用途和规则可参阅《OpenCNCPLC发展手册》一书。
第二节变量运算及变量表达式
一、用户宏运算符
要对变量进行各种运算操作就要用到运算符,它是“能对变量所存数据进行运算的符号”。
本系统的运算符及其优先级如表3-2所示。
表3-2运算符及其优先级
运算名
符号
优先级
括号
(),[]
1
函数调用运算
<函数名>(<参数列表>)
2
取负
-
3
求补运算
NOT
3
乘法运算
*
4
除法运算
/
4
模运算/求余运算
MOD
4
加法运算
+
5
减法运算
-
5
关系运算
<,>,<=,>=
6
相等运算
=
7
不等运算
<>
8
布尔逻辑/按位与
&,AND
9
布尔逻辑/按位异或
XOR
10
布尔逻辑/按位或
OR
11
二、基本算数运算符
(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的运算。
这样“自左至
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Macro 中文用户宏程序开发手册 中文 用户 程序 开发 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)