附录1 刀具补偿值、刀具补偿号及在程序中赋值G10
1、刀具补偿值的范围
米制:0~±999.999mm
英制:0~±99.9999inch
2、刀具补偿值的存贮
刀具补偿存贮器A:使用与刀具补偿号对应的刀具补偿值。
补偿号 | 刀具补偿值 |
1 | |
… | |
400 |
补偿号 | 几何补偿 | 磨损补偿 |
1 | ||
… | ||
400 |
补偿号 | 刀具长度补偿(H) | 刀具半径补偿(D) | ||
几何补偿 | 磨损补偿 | 几何补偿 | 磨损补偿 | |
1 | ||||
… | ||||
400 |
●刀具补偿存贮器A:G10 P____ R____;
●刀具补偿存贮器B:
刀具补偿存贮器种类 | 格式 |
几何补偿 | G10 L10 P___ R___; |
磨损补偿 | G10 L11 P___ R___; |
刀具补偿存贮器种类 | 格式 | |
刀具长度补偿(H) | 几何补偿 | G10 L10 P___ R___; |
磨损补偿 | G10 L11 P___ R___; | |
刀具半径补偿(D) | 几何补偿 | G10 L12 P___ R___; |
磨损补偿 | G10 L13 P___ R___; |
附录2 缩放G50、G51
编程的形状可以被放大或缩小(比例缩放)。用x,y,z指定的尺寸均可用相同的或不同的放大倍率进行缩放,放大倍率可以在程序中指定。如果未在程序中指定,则使用在参数中指定的放大倍率。
格式:
●在所有轴分量上用相同的放大倍率缩放
G51 X__ Y__ Z__ P__; 缩放开始
…
G50; 缩放取消
X__ Y__ Z__:缩放中心绝对值指定。
P_:缩放比例。
●在每一个轴上用不同的放大倍率缩放
G51 X__ Y__ Z__ I__ J__ K__; 缩放开始
…
G50; 缩放取消
I__ J__ K__:x、y、z各自的缩放比例。
警告:
在一个单独的程序段中指令G51,在图形放大或缩小后,指令G50以取消缩放模式。
解释
●在所有轴上用相同的放大倍率缩放
最小放大比例输入增量是0.001或0.00001,这由参数036#07的值决定。如果在缩放程序段(G51 X__ Y__ Z__ P__;)没有指定比例P,则使用在参数731中设定的放大倍率。如果忽略X、Y、Z,则指定G51指令处的刀具位置为缩放中心。
●在每一个轴上用不同的放大倍率缩放(负放大倍数)
每个轴可按不同比例放大,当指定负放大时,可实现镜像。首先设置参数063#6,使各轴缩放(镜像)生效,然后设置参数036#0、#1、#2允许各轴缩放,最后设置参数036#7指定各轴最小放大比例输入增量是0.001或0.00001。
设置给参数5421的放大倍数不得超过范围±0.00001~±9.99999或±0.001~±9.999。
如果设置负值,则实现镜像。
如果未指令放大倍数I、J、K,则使用设置在参数(NO.731、732、733)中的放大倍数。但参数中必须设置一非零值。
注意:
缩放倍率(I、J、K)不能使用小数点编程。
●圆弧插补的缩放
即使在圆弧插补中各轴使用不同的放大倍率,刀具也不会沿椭圆运动。(即对圆弧插补的数据缩放后再执行圆弧插补。)
当用半径R指令的圆弧插补、各轴使用不同的放大倍数时,将如下图所示。(该示例中,X分量的放大倍数为2,Y分量的放大倍数为1)。
当用I、J、K指令的圆弧插补各轴使用不同的放大倍数时,将如下图所示。(该示例中,X分量的放大倍数为2,Y分量的放大倍数为1)
无效的缩放
缩放不能用于刀具半径补偿值、刀具长度偏置值和刀具偏置值。
在下列固定循环中,Z轴运动不会缩放:
深孔加工循环(G83、G73)的每次钻进量Q和回退量;
精镗循环G76;
反精镗循环G87中在X轴和Y轴上让刀量Q;
警告:
1、如果使用参数设置值作为放大比例而不指定P,则在G51指令的整个周期内都使用此设置值作为放大比例,并且对该值的任何修改都是无效的。
2、在指令返回参考点(G27、G28、G29、G30)或坐标系设置(G92)的G代码之前,应取消缩放模式。
3、如果缩放结果被四舍五入圆整后,超过了取值范围(数据上溢),忽略余数后,移动量可能变成零。此时,该程序段被当作一无运动程序段,因而将可能影响刀具半径C补偿下的刀具运动。
在手动操作中,移动距离不能用缩放功能增大或减小。
注意:
1、运动位置坐标显示值是缩放后的结果。
2、当镜像在指定平面内应用于某轴时,会产生下列结果:
圆弧指令-----------------------------圆弧旋向反向
刀具半径C补偿-------------------偏置方向反向
坐标系旋转--------------------------旋转角度反号
示例:镜像程序
子程序
O9000;
G00 G90 X60.0 Y60.0;
G01 X100.0 F100;
Y100.0;
X60.0 Y60.0;
M99;
主程序
N10 G00 G90;
N20 M98 P9000;
N30 G51 X50.0 Y50.0 I-1000 J1000;
N40 M98 P9000;
N50 G51 X50.0 Y50.0 I-1000 J-1000;
N60 M98 P9000;
N70 G51 X50.0 Y50.0 I1000 J-1000;
N80 M98 P9000;
N90 G50;
附录3 坐标系旋转 G68、G69
格式:
坐标系旋转开始
… 坐标系旋转状态
…
G69; 坐标系旋转取消
式中:
G17(G18、G19):用于选择旋转平面(该面内包含有需旋转的轮廓)
α_β_:旋转中心,可用xy,zx,yz指定,由G17、G18、G19决定。
R_:旋转角度,顺时针指定。
参数041的0位用于选择旋转角度的指定方式。
041#0=0,R值为绝对旋转角度;
041#0=1,G90时,R值为绝对旋转角度;G91时,R值为旋转角度增量。
最小输入增量:0.001deg(度)
无效数据范围:360,000~360,000
解释
●选择平面的G代码G17、G18、G19
在含有坐标系旋转的G代码(G68)的程序段内可指定选择平面的G代码G17、G18、G19,但在坐标系旋转状态下不能指定G17、G18、G19。
至于在G68程序段与一含绝对编程指令(G90)程序段之间用指令增量位置指令(G91)的情况,被当作:在G68被指令处的位置是旋转中心(图14.9(c))。
当α_β_省略时,G68被指令时的位置被设成旋转中心。
当旋转角度省略时,设置在参数NO.730中的值被当作旋转角度。
坐标系旋转由G69取消。
G69指令可和其它指令一起在同一程序段中指定。刀具偏置如:切削半径补偿、刀具长度补偿、刀具偏置,在坐标系旋转后执行。
警告:
在指定G69的程序段必须用绝对编程方式指定运动。
示例
●刀具半径补偿和坐标系旋转
比例缩放和坐标系旋转
如果在缩放状态(G51)下指令坐标系旋转旋转中心α_β_也将被缩放,但角度不缩放。当指令运动指令时,先实现缩放,再实现坐标缩放。在缩放模式的刀具补偿(G41、G42)状态下,不能指定坐标系旋转。坐标系旋转通常应先于刀具半径C补偿指定。
1、当系统没有处于刀具半径C补偿状态时,可按如下序列指定指令:
G51; 缩放模式开始
G68…; 坐标系旋转模式开始
…
G69; 坐标系旋转模式取消
G50; 缩放模式取消
2、当系统处于刀具半径C补偿状态时,可按如下序列指定指令:
G51; 缩放模式开始
G68…; 坐标系旋转模式开始
…
G41(G42)…;刀具半径C补偿模式开始
…
G40…; 刀具半径补偿模式
…
G69; 坐标系旋转模式取消
G50; 缩放模式取消
例:
G90 G92 X0 Y0;
G51 X300 .0 Y150.0 P500;
G68 X200.0 Y100.0 R45.0;
G01 G42 X400.0 Y100.0 F100 H01;
G91 Y100.0;
X-200.0;
Y-100.0;
X200.0;
…
●坐标系旋转的重复
可将一个程序当子程序存贮起来,再通过修改其角度来调用子程序。下例是在参数041#0=1的情况下编制的,此时角度指定用绝对值还是增量值依赖于G代码(G90/G91)状态。
附录4 宏程序B(custom macro B)
尽管子程序对重复性的相同操作很有用,(但仍不能和宏程序相提并论)。用户宏程序功能允许使用变量、算术和逻辑运算、以及条件分支控制,这便于普通加工程序的发展,如发展成打包好的自定义的固定循环。加工程序可利用一简单的指令来调用宏程序,就像使用子程序一样。
例:
1 宏变量(variables)
普通加工程序中指定G代码和移动距离时,直接使用数字值,如:G100和X 100.0。而在用户宏程序中,数字值可直接指定或使用变量号(称宏变量)。当采用宏变量时,其值可在程序中修改或利用MDI面板操作进行修改。
例:#1=#2+100;
G01 X #1 F300;
Explanation( 说明)
●宏变量的表示形式
当指定一宏变量时,用“#”后跟变量号的形式,如:#1。在计算机上允许给变量指定变量名,但用户宏程序没有提供这种能力。
宏变量号可用表达式指定,此时,表达式应包含在方括号内。
如:#[#1+#2-12]
●宏变量的取值范围
局部变量和全局变量取值范围如下:
,0,
如计算结果无效(超出取值范围)时,发出编号111的错误警报。
●小数点的省略
在程序中定义宏变量的值时,可省略小数点。
例:#1=123;
宏变量#1的实际值是123.000。
●未赋值(定义)的变量
如果一个宏变量没有赋值(无定义),则该变量被当作空变量。宏变量#0通常情况下是一个空变量,它只能读,不能写(赋值)。
●宏变量的类型
根据变量号,宏变量可分成四种类型,如下表所示。
变量号 | 变量类型 | 功 能 |
#0 | 空变量 | 该变量通常为空(null),该变量不能赋值 |
#1~#33 | 局部变量 Local Variables | 局部变量只能在宏程序内部使用,用于保存数据,如运算结果等。当电源关闭时,局部变量被清空,而当宏程序被调用时,(调用)参数被赋值给局部变量。 |
#100~#149(#199) #500~#531(#999) | 全局变量 Common variables | 全局变量可在不同宏程序之间共享,当电源关闭时,#100~#149被清空,而#500~#531的值仍保留。在某一运算中,#150~#199,#532~#999的变量可被使用,但存储器磁带长度不得小于8.5m。 |
#1000~#9999 | 系统变量 System variables | 系统变量可读、可写,用于保存NC的各种数据项,如:当前位置、刀具补偿值等。 |
●宏变量的引用
在程序中引用(使用)宏变量时,其格式为:在指令字地址后面跟宏变量号。当用表达式表示变量时,表达式应包含在一对方括号内。
如:G01 X[#1+#2] F#3;
被引用宏变量的值会自动根据指令地址的最小输入单位进行圆整。
例:程序段G00 X#1;,给宏变量#1赋值12.3456,在1/1000mm的CNC上执行时,程序段实际解释为G00 X12.346;。
要使被引用的宏变量的值反号,在“#”前加前缀“-”即可。
如:G00 X-#1;
当引用未定义(赋值)的宏变量时,该变量前的指令地址被忽略。
如:#1=0,#2=null(未赋值),执行程序段G00 X#1 Y #2;,结果为G00 X0。
●宏变量值的显示
1、按偏置菜单纽,显示刀具补偿显示屏幕。
2、按软体键[MACOR],显示宏变量屏幕。
3、按键,输入变量号,再按键,光标将移动到输入变量号的位置。
当变量值为空白时,该变量为null。
标记********表示变量值上溢(变量的绝对值大于99999999)或下溢(变量的绝对值小于0.0000001)。
使用:
宏变量不能用于程序号、程序段顺序号、程序段跳段编号。如不能用于以下用途:
O#1;
/#2 G00 X100.0;
N#3 Y200.0;
2 系统变量 SYSTEM VARIABLES
系统变量用于读写NC装置的内部数据,如:刀具补偿数据、刀具当前位置数据等。但需注意的是,有些系统变量是只读的。对于(NC的)自动控制和普通的程序开发来说,系统变量是必不可少的。
有关解释如下:
2.1接口信号 Interface signals
接口信号可在可编程控制器PMC和用户宏程序之间进行交换。
表2.1(a)用于接口信号的系统变量
变 量 号 | 功 能 |
#1000~#1015 #1032 | 用于从PMC传送16位的接口信号到用户宏程序。#1000~#1015信号是逐位读取的,而#1032信号是16 位一次读取的。 |
#1100~#1115 #1132 | 用于从用户宏程序传送16位的接口信号到PMC。#1100~#1115信号是逐位写入的,而#1132信号是16 位一次写入的。 |
#1133 | 用于从用户宏程序一次写入32位的接口信号到PMC。 注意:#1133取值范围为-99999999~+99999999。 |
2.2刀具补偿值 Tool compensation values
刀具补偿值可通过系统变量读写。无论是几何补偿和磨损补偿的区别,还是刀具长度补偿和刀具切削半径补偿间的区别,能用的变量号数都依赖于补偿值的对数。当补偿值对数不超过200时,变量号#2001~#2400均可使用。
表2.2(a) 刀具补偿存储方式A的系统变量
刀具补偿号 | 系统变量号 |
1 ┊ 200 ┊ 400 | #10001(#2001) ┊ #10200(#2200) ┊ #10400(#2400) |
刀具补偿号 | 几何补偿 | 磨损补偿 |
1 ┊ 200 ┊ 400 | #11001(#2201) ┊ #11200(#2400) ┊ #11400 | #10001(#2001) ┊ #10200(#2200) ┊ #10400 |
补偿号 | 刀具长度补偿 | 刀具半径补偿 | ||
几何补偿 | 磨损补偿 | 几何补偿 | 磨损补偿 | |
1 ┊ 200 ┊ 400 | #11001(#2201) ┊ #11200(#2400) ┊ #11400 | #10001(#2001) ┊ #10200(#2200) ┊ #10400 | #13001 ┊ ┊ #13400 | #12001 ┊ ┊ #12400 |
表 2.3表示宏程序报警信息的系统变量
变量号 | 功能 |
#3000 | 当#3000赋值为0~99中的某值时,NC停止并报警,随后给出一个不超过26个字符的报警信息。同时将#3000的值加上3000作为报警号于报警信息一起显示在屏幕上。 |
报警屏幕显示:3001 TOOL NOT FOUND。
2.4时间信息
时间信息可被读与写。
●表2.4表示时间信息的系统变量
变量号 | 功能 |
#3001 | 该变量的功能是作为计时器,并时刻以16毫秒的增量进行计时。当电源关闭时,该变量的值被重置为0。当累计计时65535毫秒时,计时器从0重新计时。(可用于刀具寿命管理) |
#3002 | 该变量的功能是作为计时器,并在循环启动灯亮的同时,以1 小时为增量进行计时。即使电源关闭,该计时器的值仍保留。当累计计时1145324.612小时时,该计时器从0重新计时。 |
#3011 | 该变量用于读取当前日期(年/月/日)。年/月/日信息被转换成类似于十进制的数。如:1993年3月28日表示为19930328。 |
#3012 | 该变量用于读取当前时间(时/分/秒)。时/分/秒信息被转换成类似于十进制的数。如:下午3点34分56秒表示为153456。 |
自动运行的控制状态可以改变。
●表2.5(a) 用于自动运行控制的系统变量#3003。completion
#3003 | 程序单段运行 | 辅助功能完成 |
0 | 允许 Enabled | 等待 |
1 | 禁止 disabled | 等待 |
2 | 允许 | 不等待 |
3 | 禁止 | 不等待 |
2、当单段运行禁止时,即使单段运行开关置为开(ON),单段运行操作也不执行。
3、当不指定等待辅助功能(M、S、T)完成时,在辅助功能完成前,程序会继续执行下一程序段。当然也不会输出分配任务已结束信号(DEN——Distribution END)。
●表2.5(b) 用于自动运行控制的系统变量#3004。
#3004 | 速度(进给)保持 Feed hold | 速度倍率超越 Feed rate override | 准确停止 Exact stop |
0 | 允许 | 允许 | 允许 |
1 | 禁止 | 允许 | 允许 |
2 | 允许 | 禁止 | 允许 |
3 | 禁止 | 允许 | 允许 |
4 | 允许 | 允许 | 禁止 |
5 | 禁止 | 允许 | 禁止 |
6 | 允许 | 禁止 | 禁止 |
7 | 禁止 | 禁止 | 禁止 |
2、当进给保持禁止时:
a、当进给保持按钮按下时,机床用单段运行模式停止。但当用#3003禁止单段运行模式时,单段运行操作不执行。
b、当进给保持按钮压下又释放时,进给保持灯亮,但机床不停止,程序继续执行,直到指定进给保持允许的第一个程序段,机床才停止。
3、当倍率超越禁止时,无论机床操作面板上速度倍率旋钮置于何处,速度倍率总是100%。
4、当准确停止检验禁止时,即使在没有指定切削的程序段,也不进行准确停止检查(到位检查)。
2.6背景(#3005) Settings
背景可以读写,二进制值转换成十进制数。
#15 | #14 | #13 | #12 | #11 | #10 | #9 | #8 |
TAPE | REV4 |
#7 | #6 | #5 | #4 | #3 | #2 | #1 | #0 |
SEQ | ABS | INCH | ISO | TVON | REVY | REVX |
REVX:X轴镜像,开/关
REVY:Y轴镜像,开/关
TVON:TV检测,开/关
ISO:输出代码格式,EIA/ISO
INCH:公制输入/英制输入
ABS:增量编程/绝对编程
SEQ:自动插入顺序号(Sequence-number)开/关
REV4:第四轴镜像开/关
TAPE:F10/11格式穿孔带开/关
2.7已加工的零件数 Number of machined parts
待加工零件数(目标数)和已加工零件数(完成数)可以读写的。
变量号 | 功 能 |
#3901 | 已加工零件数(完成数) |
#3902 | 待加工零件数(目标数) |
2.8模态信息 Model information
在程序段中指定的模态信息,直到(当前程序段)之前的程序段中是可读出的。
变量号 | 功能 | 分组 |
#4001 #4002 #4003 #4004 #4005 #4006 #4007 #4008 #4009 #4010 #4011 #4012 #4014 #4015 #4016 ┊ #4022 #4102 #4107 #4109 #4111 #4113 #4114 #4115 #4119 #4120 | G00 G01 G02 G03 G33 G17 G18 G19 G90 G91 G94 G95 G20 G21 G40 G41 G42 G43 G44 G49 G73 G74 G76 G80~G G98 G99 G50 G51 G65 G66 G67 G54~G59 G61~G G68 G69 ┊ B code D code F code H code M code 程序段顺序号 程序号 S code T code | Group 1 Group 2 Group 3 Group 4 Group 5 Goup 6 Group 7 Group 8 Group 9 Group 10 Group 11 Group 12 Group 14 Goup 15 Group 16 ┊ Group 22 |
位置信息是只读的。
变量号 | 位置信息 | 坐标系统 | 刀具补偿值 | 运动期间读操作 |
#5001~#5004 | 程序段终点 | 工件坐标系 | 不包含 | 允许 |
#5021~#5024 | 当前位置 | 机床坐标系 | 包含 | 禁止 |
#5041~#5044 | 当前位置 | 工件坐标系 | 包含 | 禁止 |
#5061~#50 | 跳转信号位置 | 工件坐标系 | 包含 | 允许 |
#5081~#5084 | 刀具补偿值 | 禁止 | ||
#5101~#5104 | 伺服位置误差 | 禁止 |
变量号的未位代表轴编号,1对应X轴,2对应Y轴,3对应Z轴,4对应第四轴。
#5081~5084存储的刀具偏置值是当前执行值,不是后面程序段的处理值。
在G31(跳转功能)程序段中跳转信号接通时的刀具位置存储在变量#5061~# 50 中.当G31段跳转信号接通不接通时, 这些变量中贮存指定程序段终点.
运动期间读为禁止指由于缓冲(预读)功能的原因, 无法读取期望值。
2.10工件坐标系补偿值(工件坐标系零点偏置值)
工件坐标系偏置值可以读写。
变量号 | 功能 |
#2500~#2506 | 外部工件坐标系、G54~G59第一轴零点偏置值 |
#2600~#2606 | 外部工件坐标系、G54~G59第二轴零点偏置值 |
#2700~#2706 | 外部工件坐标系、G54~G59第三轴零点偏置值 |
#2800~#2806 | 外部工件坐标系、G54~G59第四轴零点偏置值 |
#7001~#7004 | 工件坐标系G54 P1第一~四轴的零点偏置值 |
#7021~#7024 | 工件坐标系G54 P2第一~四轴的零点偏置值 |
┋ | ┋ |
#7941~#7944 | 工件坐标系G54 P48第一~四轴的零点偏置值 |
(G54Pp)的第n轴的工件零点偏置变量号由下式获得:#[7000+[p-1]*20+n]
3 算术和逻辑运算
在表16.2(a)中列出的操作可以使用变量完成。表中右边的表达式可用常量或变量与函数或运算符组合表示。表达式中的变量#j和#k可用常量替换,也可用表达式替换。
●表3(a) 算术和逻辑运算
函 数 | 格 式 | 备 注 |
赋值 | #i=#j | |
求和 求差 乘积 求商 | #i=#j+#k #i=#j-#k #i=#j*#k #i=#j/#k | |
正弦 余弦 正切 反正切 | #i=SIN[#j] #i=COS[#j] #i=TAN[#j] #i=ATAN[#J]/[#k] | 角度用十进制度表示。 |
平方根t 绝对值 四舍五入 向下取整 向上取整 | #i=SQRT[#j] #i=ABS[#J] #I=ROUND[#J] #I=FIX[#J] #I=FUP[#J] | |
或OR 异或XOR 与AND | #I=#J OR #K #I=#J XOR #K #I=#J | 逻辑运算用二进制数按位操作 |
十——二进制转换 二——十进制转换 | #I=BIN[#J] #I=BCD[#J] | 用于转换发送到PMC的信号或从PMC 接收的信号 |
●1、角度单位
SIN、COS、TAN和ATAN 函数使用的角度单位为十进制度。
●2、反正切函数ATAN
在反正切函数后指定两条边的长度,并用斜线隔开(y/x)。结果为0<=result<360。
如:#1=ATAN[1]/[-1];
#1的值为135.0。
●3、四舍五入函数ROUND
当ROUND函数包含在数学或逻辑操作命令中,IF、WHILE语句中时,四舍五入在第一个小数位进行。
如:#2=1.2345;
#1=ROUND[#2];
则#1=1.0。
当ROUND函数使用于NC语句中的指令地址后时,四舍五入按地址的最小精度进行。
例:钻孔程序,系统精度0.001mm
#1=1.2345;
#2=2.3456;
G00 G91 X-#1; 移动1.235mm
G01 X-#2; 移动2.346mm
G00 x[#1+#2]; 移动3.580mm
由于1.2345+2.3456=3.5801,四舍五入后为3.580mm,刀具未返回原位。刀具位移误差来至于运算时,先加后园整。为使刀具返回原位,最后的程序段应改为:
G00 X[ROUND[#1]+ROUND[#2]];
(注:G90编程时,上述问题不一定存在。)
●4、向上和向下取整
向上取整是指园整后的整数,其绝对值比原值的绝对值大,而向下园整是指园整后的整数,其绝对值比原值的绝对值小。当对负数取整时,需特别注意。
例:
#1=1.2;
#3=FUP[#1]; 2.0
#3=FIX[#1]; 1.0
#2=-1.2;
#3=FUP[#2]; -2.0
#3=FIX[#1]; -1.0
●5、函数缩写(Abbreviation)
可用函数的前两个字符表示该函数。
如:ROUND——RO,FIX——FI
●6、运算优先级
1、函数;
2、乘除类运算(*、/、AND、MOD);
3、加减类运算(+、-、OR、XOR).
●7、方括号嵌套bracket nesting
方括号用于改变运算顺序。方括号的嵌套深度为五层,含函数自己的方括号。当方括号超过五层时,发生118号报警。
●1、方括号Brackets
方括号用于封闭表达式,注意不能用园括号。
●2、运算误差
运算时会产生误差
表3(b) 运算涉及的错误
运算 | Average error 平均误差 | Maximum error 最大误差 | 误差类型 type of error |
a=b*c | 相对误差relative error (*1) | ||
a=b/c | |||
a=b+c a=b-c | 取小值min (*2) | ||
a=sin[b] a=cos[b] | 绝对误差absolute error(*3) degrees(度) | ||
a=atan[b]/[c] |
1、相对误差大小与运算结果有关;
2、取两误差中较小的一个。
3、绝对误差大小为常值,与运算结果无关。
4、正切函数TAN用SIN/COS完成。
说明:
①由于变量值的精度为8位小数(在NC中变量用科学计数法表示),当在加减运算中处理很大的数时,会出现意想不到的结果。
如:试图给#1、#2如下赋值
#1=9876543210123.456;
#2=9876543277777.777;
变量的实际值为:
#1=9876543200000.000
#2=9876543300000.000
此时如计算#3=#2-#1,则结果为#3=100000.000。
运算结果的误差由变量是用二进制数运算引起的。(在nc中用于存储变量的二进制位是有限的,为表示尽能大的数,将数转换成科学计数法表示,变量的二进制位中的后几位表示指数,其余的位存储小数部分,当数的有效位多于变量的最大有效位时,多余的部分进行四舍五入,从而引起误差。此误差相对数本身来说,误差极小,但对结果的影响就可能很大。编程时,应尽可能避免本例的情况。)
②因数据精度的原因,在条件表达式中用EQ、NE、GE、GT、LE和LT时,也可能出现误差
例:IF [#1 EQ #2]
当#1和#2的值存在近似时,结果就会出现误差。
但将上式改写成:IF [ABS[#1-#2] LT 0.001]后,如果两变量的差值小于所需精度(这里为 0.001)时,就可以认为二者相等。
③因数据精度的原因,在向下取整时许特别注意。
例:
#1=0.002;
#2=#1*1000;
#2的值应为2.000,但实际上为1.99999997。
#3=FIX[#2];
则#3=1.0而不是2.0。
在这种情况下,对一近似值向下取整,自然得不到期望的结果。可将上式改成:
#3=FIX[#2+0.001];
或#3=ROUND[#2];
●3、除数divisor
在除法运算中除数为0或在求正切时角度为90度,产生112号报警。
4 宏语句和NC语句
下列程序段被认为是宏语句:
包含算术和逻辑运算及赋值操作的程序段;
包含控制语句(如:GOTO,DO,END)的程序段;
包含宏调用命令(如:G65,G66,G67或其它调用宏的G、M代码)。
不是宏语句的程序段称NC(或CNC)语句。
●1、宏语句与NC语句的区别:
即使在程序单段运行模式下执行宏语句,机床也不停止。但当机床参数011的第五位设成1时,执行宏语句,机床用单段运行模式停止。
在刀具补偿状态下,宏语句程序段不作不含运动程序段处理。
●2、与宏语句具有相同特性的NC语句
子程序调用程序段(在程序段中,子程序被M98或指定的M、T代码调用)仅包含O,N,P,L地址,和宏语句具有相同特性。
包含M99和地址O、N、P的程序段,具有宏语句特性。
5分支和循环
在程序中可用GOTO语句和IF语句改变控制执行顺序。分支和循环操作共有三种类型:
GOTO 语句——无条件分支(转移)
IF语句——条件分支;if…,then…
WHILE语句—— 循环;while…
5.1无条件分支GOTO语句
控制转移(分支)到顺序号n所在位置。当顺序号超出1~9999的范围时,产生128号报警。顺序号可用表达式指定。
格式:GOTO n;
n——(转移到的程序段)顺序号
例:GOTO1;
GOTO#10;
5.2 条件分支IF语句
在IF后指定一条件,当条件满足时,转移到顺序号为n的程序段,不满足则执行下一程序段。
格式:
IF [表达式] GOTOn;
处理;
Nn …;
●1、条件表达式
条件表达式由两变量或一变量一常数中间夹比较运算符组成,条件表达式必需包含在一对方括号内。条件表达式可直接用变量代替。
●2、比较运算符
比较运算符由两个字母组成,用于比较两个值,来判断它们是相等,或一个值比另一个小或大。注意不能用不等号。
表5.2 比较运算符
运算符 | 含义 |
EQ | 相等equal to (=) |
NE | 不等于not equal to (≠) |
GT | 大于Greater than (>) |
GE | 大于等于greater than or equal to(≥) |
LT | 小于less than (<) |
LE | 小于等于less than or equal to (≤) |
求1~10的和。
O9500;
#1=0; 和
#2=1; 加数
N1 IF[#2 GT 10] GOTO2; 相加条件
#1=#1+#2; 相加
#2=#2+1; 下一加数
GOTO1; 返回1
N2 M30; 结束
5.3 循环WHILE 语句
在WHILE 后指定一条件表达式,当条件满足时,执行DO到END之间的程序,(然后返回到WHILE 重新判断条件,)不满足则执行END后的下一程序段。
格式:
WHILE [条件表达式] DO m; (m=1, 2, 3)
处理;
END m;
●说明:
WHILE语句对条件的处理与IF 语句类似。
在DO和END后的数字是用于指定处理的范围(称循环体)的识别号,数字可用1、2、3表示。当使用1、2、3之外的数时,产生126号报警。
●While的嵌套
对单重DO-END循环体来说,识别号(1~3)可随意使用且可多次使用。但当程序中出现循环交叉(DO范围重叠)时,产生124号报警。
1、识别号(1~3)可随意使用且可多次使用
WHILE […] DO1;
Processing
END1;
…
WHILE […] DO1;
Processing
END1;
2、DO范围不能重叠
WHILE […] DO1;
Processing
WHILE […] DO2;
…
END1;
Processing
END2;
3、DO循环体最大嵌套深度为三重
WHILE […] DO1;
…
WHILE […] DO2;
…
WHILE […]DO3;
Processing
END3;
…
END2;
…
END1;
4、控制不能跳转到循环体外
WHILE […] DO1;
…
IF […] GOTO n;
…
END1;
Nn … ;
5、分支不能直接跳转到循环体内
IF […] GOTO n;
…
WHLE […] DO1;
…
Nn … ;
…
END1;
●Limitations
1、无限循环Infinite loops
当指定Do m而未指定WHILE语句时,将产生一个从DO到END为循环体的无限循环。
2、处理时间
当转移到GOTO语句中指定顺序号对应的程序段时,程序段根据顺序号搜索。因此向回跳转比向前跳转要花费更多的处理时间。此时使用WHILE 语句循环可减少处理时间。
3、未定义变量
在条件表达式中使用EQ和NE判断时,空值(null)和0会产生不同的结果,在其它类型的条件表达式中,空值(null)被认为是0。
●例程
求1~10的和
O9501;
#1=0;
#2=1;
WHILE [#2 LE 10] DO1;
#1=#1+#2;
#2=#2+1;
END1;
M30;
6 调用宏程序
宏程序可用下述方式调用:
简单调用G65;
模态调用G66、G67;
用G代码调用宏程序;
用M代码调用宏程序;
用M代码的子程序调用;
用T代码的子程序调用。
●:宏程序调用和子程序调用的区别
A、用G65可以指定实参(传送给宏程序的数据),而M98 没有此能力。
B、当M98程序段包含其它NC指令(如:G01X100.0 M98 Pp)时,在该指令执行完后调用子程序,而G65则无条件调用宏程序。
C、当M98程序段包含其它NC指令(如:G01X100.0 M98 Pp)时,在程序单段运行模式下机床停止,而G65不会让机床停止。
D、G65调用时,局部变量的层次被修改,而M98调用不会更改局部变量的层次。
6.1 简单调用G65
当指定G65调用时,地址P后指定的用户宏程序被调用,同时数据(实参)被传递给用户宏程序。
格式:G65 Pp Ll <实参描述>;
p——被调宏程序号;l——调用次数,缺省值为1。实参——传送给宏程序的数据。
例:
O0001; O9010;
… #3=#1+#2;
G65 P9010 L2 A1.0 B2.0; IF [#3 GT 360] GOTO 9;
… G00 G91 X#3;
M30; N9 M99;
说明:
●1、调用
在G65后用地址P指定需调用的用户宏程序号;
当重复调用时,在地址L后指定调用次数(1~99)。L省略时,既定调用次数是1。
通过使用实参描述,数值被指定给对应的局部变量。
●2、实参描述 Argument specification
有两种实参描述类型,实参描述类型Ⅰ可同时使用除G、L、O、N和P之外的字母各一次。而实参描述类型Ⅱ只能使用A、B、C各一次,使用I、J、K最多十次。实参描述类型根据使用的字符自动判断。
实参描述类型Ⅰ
地址 | 变量号 | 地址 | 变量号 | 地址 | 变量号 |
A B C D E F H | #1 #2 #3 #7 #8 #9 #11 | I J K M Q R S | #4 #5 #6 #13 #17 #18 #19 | T U V W X Y Z | #20 #21 #22 #23 #24 #25 #26 |
实参描述类型Ⅱ
地址 | 变量号 | 地址 | 变量号 | 地址 | 变量号 |
A B C I1 J1 K1 I2 J2 K2 I3 J3 | #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 | K3 I4 J4 K4 I5 J5 K5 I6 J6 K6 I7 | #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 | J7 K7 I8 J8 K8 I9 J9 K9 I10 J10 K10 | #23 #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 |
1、格式
G65必须在实参之前指定。
2、实参描述Ⅰ和Ⅱ的混合
NC内部识别实参描述Ⅰ和Ⅱ,当二者混合指定时,实参描述类型由后出现的地址决定。(即两种类型可同时使用,当多个地址对应同一个局部变量时,该变量的值由后出现的地址决定)
3、小数点的位置
一个不带小数点的实参在数据传递时,其单位按其地址对应的最小精度解释,因此,不带小数点的实参,其值在传递时有可能根据机床的系统参数设置而被更改。为此,应养成在宏调用实参中使用小数点的好习惯,以保持程序的兼容性。
4、调用嵌套
调用可嵌套四层,包括简单调用G65和模态调用G66,但不包括子程序调用M98。
5、局部变量的层次
嵌套调用时,局部变量的层次指定为0~4。
主程序的层次为0。
宏程序每(嵌套)调用一次(G65,G66),局部变量的层次加一,原有局部变量的值被NC保存(不可见)。
当M99执行时,控制返回呼调程序。此时,局部变量层次减一,宏程序调用时保存的原有局部变量值被恢复。
例:
全局变量:可被各层的宏程序读写
#100~ | |
#500~ |
创建一个宏程序,用于加工处于同一分布圆上的H个孔。孔起始角为A,孔间夹角为B,分布圆半径为I,圆心为(x,y)。指令可用绝对或增量方式指定。当需顺时针方向加工时,B用负值指定。
●1、调用格式
G65 P9100 Xx Yy Zz Rr Ff Ii Aa Bb Hh;
X:分布圆圆心的X坐标(绝对或增量指定)#24
Y:分布圆圆心的Y坐标(绝对或增量指定)#25
Z:孔深 ――――――――――――――――#26
R:接近点(R点)坐标 ―――――――――#18
F:进给速率 ――――――――――――――#9
I:分布圆半径 ―――――――――――――#4
A:钻孔起始角―――――――――――――#1
B:增量角(顺时针时负值指定)―――――#2
H:孔数――――――――――――――――#11
●2、主程序
O0002;
G90 G92 X0 Y0 Z100.0;
G65 P9100 X100.0 Y50.0 R30.0 Z-50.0 I100.0 A0 B45.0 H5;
M30;
●3、宏程序
O9100;
#3=#4003;---------------------------读取03组G代码(G90/G91)
IF [#3 EQ 90] GOTO 1;-----------G90模式跳至N1分支
#24=#5001+#24;--------------------计算圆心X坐标
#25=#5002+#25;--------------------计算圆心Y坐标
N1 WHILE [#11 GT 0] DO 1;
#5=#24+#4*COS[#1];--------------计算孔轴线X坐标
#6=#25+#4*SIN[#1];---------------计算孔轴线Y坐标
G90 X#5 Y#6;-----------------------钻孔前定位到目标孔处
G81 Z#26 R#18 F#19 K0;--------钻孔循环
#1=#1+#2;----------------------------计算下一孔的角度
#11=#11-1;---------------------------孔数减一
END 1;
G#3 G80;-----------------------------回复G代码原有状态
M99;
●有关变量的含义
#3:03组G代码的状态
#5:下一孔孔轴线X坐标
#6:下一孔孔轴线Y坐标
#5001:程序段终点的X坐标
#5002:程序段终点的Y坐标
6.2模态调用G66
一旦指令了G66,就指定了一种模态宏调用,即在(G66之后的)程序段中指令的各轴运动执行完后,调用(G66指定的)宏程序。这将持续到指令G67为止,才取消模态宏调用。
解释
●1、调用
在G66后,用地址P为模态调用指定程序号;
当需要重复次数时,可在地址L后指定从1~9999的数字。
和简单调用G65一样,传递给宏程序的数据用实参指定。
●2、取消
当指定G67指令时,后续程序段不再执行模态调用。
●3、调用的嵌套
调用可嵌套四层,包括简单调用G65和模态调用G66,但不包括子程序调用M98。
●4、模态调用的嵌套
在模态调用期间可指令另一个G66代码,而产生模态调用的嵌套。
:
在G66程序段不可调用宏;
G66应在实参之前指令;
在仅含有一个代码的程序段,当该代码与坐标轴运动无关,如M功能,将不产生宏调用。
只需在G66程序段中设置局部变量,注意每次模态调用执行时,不再设置局部变量。
例程
使用自定义宏程序创建与固定循环G81相同的操作,加工程序用模态宏调用。为简化程序,所有钻孔数据用绝对值指定。
该固定循环包含下列基本操作:
操作1:沿X、Y轴的定位;
操作2:快进到R点;
操作3:切削进给至孔底Z点;
操作4:快速回退至R点或起始点I。
●1、调用格式
G65 P9110 Xx Yy Zz Rr Ff Ll;
X:孔轴线的X坐标 ……………….. #24
Y:孔轴线的Y坐标 ……………….. #25
Z:Z点的坐标 ……………………… #26
R:R点的坐标 ……………………… #18
F:进给速率 ………………………… #9
L:重复次数
●2、主程序
O0001;
G28 G91 X0 Y0 Z0;
G92 X0 Y0 Z50.0;
G00 G90 X100.0 Y50.0;
G66 P9110 Z-20.0 R5.0 F500;
G90 X20.0 Y20.0;
X50.0;
Y50.0;
X70.0 Y80.0;
G67;
M30;
●3、宏程序
O9110;
#1=#4001; ………………………………贮存G00/G01
#3=#4003; ………………………………贮存G90/G91
#4=#4109; ………………………………贮存进给速率
#5=#5003; ………………………………贮存钻孔起始Z坐标
G00 G90 Z#18; …………………………定位至R点
G01 Z#26 F#9; …………………………切削至Z点
IF [#4010 EQ 98] GOTO 1; ……………返回至I点
G00 Z#18; ………………………………返回至Z点
GOTO 2;
N1 G00 Z#5; ……………………………返回至I点
N2 G#1 G#3 F#4; ………………………恢复模态信息
M99;
6.3 使用G代码的宏调用
通过在系统参数中设置G代码数字可用于调用宏程序,该宏程序就像简单调用G65一样被调用。
解释
通过在系统通信参数(220~229)中设置G代码数字(1~255),可调用自定义宏程序(9010~9019),该宏程序以和简单调用G65一样的方式调用。
例如,当系统参数如上设置时,可使用G81调用自定义宏程序O9010,通过调用使用宏程序定制的用户专有循环(user-specific cycle),从而无需修改加工程序。
1、系统参数号与程序号间的对应关系
程序号 | 参数号 |
O9010 O9011 O9012 O9013 O9014 O9015 O9016 O9017 O9018 O9019 | 220 221 222 223 224 225 226 227 228 229 |
与简单调用一样,可在地址L后指定从1~9999的重复次数。
3、参数指定
与简单调用一样,有两种类型的参数指定方式:参数指定类型I和参数指定类型II。参数指定类型自动根据地址的使用进行判断。
●
用G代码调用的嵌套:
在被G代码调用的程序中,不能有用G代码调用的宏程序。在这样的程序中,G代码被当作普通G代码对待。在被M或T代码调用的子程序中,不能有用G代码调用的宏程序。在这样的程序中,G代码也被当作普通G代码对待。
6.4 使用M代码的宏调用
通过在系统参数中设置M代码数字可用于调用宏程序,该宏程序就像简单调用G65一样被调用。
解释
通过在系统通信参数(230~239)中设置M代码数字(1~255),可调用自定义宏程序(9020~9029),该宏程序以和简单调用G65一样的方式调用。
1、系统参数号与程序号间的对应关系
程序号 | 参数号 |
O9020 O9021 O9022 O9023 O9024 O9025 O9026 O9027 O9028 O9029 | 230 231 232 233 234 235 236 237 238 239 |
与简单调用一样,可在地址L后指定从1~9999的重复次数。
3、参数指定
与简单调用一样,有两种类型的参数指定方式:参数指定类型I和参数指定类型II。参数指定类型自动根据地址的使用进行判断。
用于调用宏程序的M代码必须在程序段的开头指令。
在被G代码调用的宏程序中,或在被M或T代码调用的子程序中,不能有用M代码调用的宏程序。在这样的程序中,M代码被当作普通M代码对待。
6.5 使用M代码的子程序调用
通过在系统参数中设置M代码数字可用于调用子程序(宏程序),该宏程序就像子程序调用M98一样被调用。
解释
通过在系统通信(corresponding)参数(240~242)中设置M代码数字(1~255),可调用自定义宏程序(9001~9003),该宏程序以和子程序调用M98一样的方式调用。
1、系统参数号与程序号间的对应关系
程序号 | 参数号 |
O9001 O9002 O9003 | 240 241 242 |
与简单调用一样,可在地址L后指定从1~9999的重复次数。
3、参数指定
不允许指定参数。
在被G代码调用的宏程序中,或在被M或T代码调用的子程序中,不能有用M代码调用的子程序。在这样的程序中,M代码被当作普通M代码对待。
6.6 使用T代码的子程序调用
通过系统参数中设置,可允许使用T代码调用子程序(宏程序),当加工程序中每次指令该T代码时,对应宏程序被调用。
解释――调用
通过将系统参数040的第5位置1,可在加工程序中指令T代码调用宏程序O9000。在加工程序中指令的T代码用公用(全局)变量#149指定。
在被G代码调用的宏程序中,或在被M或T代码调用的子程序中,不能有用T代码调用的子程序。在这样的程序中,T代码被当作普通T代码对待。