您现在所在的是:

数控论坛

回帖:116个,阅读:27946 [上一页] [1] ... [10] [11] [12] [下一页]
3479
EEbeginner 版主
文章数:1818
年度积分:50
历史总积分:3479
注册时间:2009/11/19
发站内信
发表于:2010/1/30 15:21:44
#90楼
HNC-21T车削循环宏程序
HNC-21T车削循环宏程序
(1) 车削循环指令的实现及子程序调用的参数传递
HNC-21T的固定循环指令采用宏程序方法实现,这些宏程序调用具有模态功能。
由于各数控公司定义的固定循环含义不尽一致,采用宏程序实现固定循环,用户可按自己的要求定制固定循环,十分方便。华中数控随售出的数控装置赠送固定循环宏程序的源代码staticcy。
为便于用户阅读下面固定循环宏程序的源代码,先介绍一下HNC-21T宏程序/子程序调用的参数传递规则。
G代码在调用宏(子程序或固定循环,下同)时,系统会将当前程序段各字段(A~Z共26字段,如果没有定义则为零)的内容拷贝到宏执行时的局部变量#0-#25,同时拷贝调用宏时当前通道九个轴的绝对位置(机床绝对坐标)到宏执行时的局部变量#30-#38。
调用一般子程序时,不保存系统模态值,即子程序可修改系统模态并保持有效;而调用固定循环时,保存系统模态值,即固定循环子程序不修改系统模态。
下表列出了宏当前局部变量#0~#38所对应的宏调用者传递的字段参数名。

宏当前局部变量 宏调用时所传递的字段名或系统变量
#0 A
#1 B
#2 C
#3 D
#4 E
#5 F
#6 G
#7 H
#8 I
#9 J
#10 K
#11 L
#12 M
#13 N
#14 O
#15 P
#16 Q
#17 R
#18 S
#19 T
#20 U
#21 V
#22 W
#23 X
#24 Y
#25 Z
#26 固定循环指令初始平面Z模态值
#27 不用
#28 不用
#29 不用
#30 调用子程序时轴0的绝对坐标
#31 调用子程序时轴1的绝对坐标
#32 调用子程序时轴2的绝对坐标
#33 调用子程序时轴3的绝对坐标
#34 调用子程序时轴4的绝对坐标
#35 调用子程序时轴5的绝对坐标
#36 调用子程序时轴6的绝对坐标
#37 调用子程序时轴7的绝对坐标
#38 调用子程序时轴8的绝对坐标
对于每个局部变量,都可用系统宏AR[]来判别该变量是否被定义,是被定义为增量或绝对方式。该系统宏的调用格式如下:
AR[#变量号]
返回:
0: 表示该变量没有被定义;
90:表示该变量被定义为绝对方式G90;
91:表示该变量被定义为相对方式G91。
例:下面的主程序O1000在调用子程序O9990时,设置了I、K之值,子程序O9990可分别通过当前局部变量#8、#10来访问主程序的I、K之值。
%1000
G92 X0 Z0
M98 P9990 I20 K40
M30
%9990
IF [AR[#8] EQ 0] OR [AR[#10] EQ 0]
; 如果没有定义I、K值,
M99 ; 则返回
ENDIF
N10 G91 ; 用增量方式编写宏程序
IF AR[#8] EQ 90 ; 如果I值是绝对方式G90
#8=#8-#30 ;将I值转换为增量方式, #30为X的绝对坐标
ENDIF

M99
HNC-21/22T子程序嵌套调用的深度最多可以有九层,每一层子程序都有自己独立的局部变量(变量个数为50)。当前局部变量为#0-#49,第一层局部变量为#200-#249,第二层局部变量为#250-#299,第三层局部变量#300-#349,依此类推。
在子程序中如何确定上层的局部变量,要依上层的层数而定,例:
o0099
g92 X0 Z0
N100 #10=98
M98 P100
M30

o100
N200 #10=100 ;此时N100所在段的局部变量#10为第一层#210
M98 P110
M99

o110
N300 #10=200 ;此时N200所在段的局部变量为第二层#260
; N100所在段的局部变量#10为第一层#210
M99

为了更深入地了解HNC-21/22T宏程序,这里给出一个利用小直线段逼近整园的数控加工程序:
O1000
G92 X0 Z0
M98 P2 X-50 Z0 R50 ;宏程序调用,加工整圆
M30

O2
; 加工整圆子程序,园心为(X,Z),半径为R
; X -> #23 Z -> #25 R -> #17
IF [AR[#17] EQ 0] OR [#17 EQ 0] ;如果没有定义R
   M99
ENDIF
IF [ AR[#23] EQ 0 ] OR [ AR[#25] EQ 0 ] ;如果没有定义圆心
   M99
ENDIF
#46=#1163    ; 记录模态码#1163,是G90 OR G91?
G91 ;用相对编程G91
IF [ AR[#23] EQ 90 ] ;如果X为绝对编程方式
   #23=#23-#30 ; 则转为相对编程方式
ENDIF
IF [ AR[#25] EQ 90 ] ; 如果Z为绝对编程方式
   #25 = #25-#32 ; 则转为相对编程方式
ENDIF
#0=#23+#17*COS[0];
#1=#25+#17*SIN[0];
G01 X[#0] Z[#1];
#10=1
WHILE [#10 LE 100] ;用100段小直线逼近圆
   #0 = #17*[ COS[#10*2*PI/100]-COS[[#10-1]*2*PI/100] ]
   #1 = #17*[ SIN[#10*2*PI/100]-SIN[[#10-1]*2*PI/100] ]
   G01 X[#0] Z[#1]
   #10=#10+1
ENDW
G[#46] ; 恢复模态
M99
3479
EEbeginner 版主
文章数:1818
年度积分:50
历史总积分:3479
注册时间:2009/11/19
发站内信
发表于:2010/1/30 15:22:25
#91楼
车削循环指令的宏程序实现
车削循环指令的宏程序实现
下面是HNC-21/22T的固定循环宏程序源代码的内容。
%0000
;"Macro Subroutine definition for static cycle G76,G80,G81,G82
; _______________________________________________________________________
%0180
; 内(外)径切削循环G80宏程序实现源代码,调用本程序之前,必须转动主轴M03或M04
#40 = #1152
IF [AR[#25] EQ 0] OR [AR[#23] EQ 0]
; 如果没有定义Z值和X值,则返回
M99 ; 返回
ENDIF
N10 G90 ; 我们用绝对方式编写宏程序
IF #1009 EQ 0           ;
#49 = 2 ;半径编程
ELSE
#49 = 1 ;直径编程
ENDIF
#30=#30*2/#49
IF AR[#23] EQ 91 ; 如果X值是增量方式G91
#23=#23+#30 ; 则将X值转换为绝对方式, #30为调用本程序时X的绝对坐标
ENDIF
IF AR[#25] EQ 91 ; 如果Z值是增量方式G91
#25=#25+#32 ; 则将Z值转换为绝对方式, #32为调用本程序时Z的绝对坐标
ENDIF
IF AR[#8] EQ 0          ; 如果I值没有定义
#8 = 0;
ELSE
       #8=#8*2/#49
ENDIF
N10 G01 X[#30] Z[#32]
N20 G00 X[#23+#8] Z[#32] ;移到加工点
N30 G01 X[#23] Z[#25] ;加工
N40 G01 X[#30]
N50 G00 Z[#32] ;返回初始点
G[#40]
M99

; _______________________________________________________________________
%0181
; 端面切削循环G81宏程序实现源代码,调用本程序之前,必须转动主轴M03或M04
#40=#1152
IF [AR[#25] EQ 0] OR [AR[#23] EQ 0]
; 如果没有定义Z值和X值,则返回
M99 ; 返回
ENDIF
N10 G90 ; 我们用绝对方式编写宏程序
IF #1009 EQ 0 ;
#49 = 2 ;半径编程
ELSE
#49 = 1 ;直径编程
ENDIF
#30=#30*2/#49
IF AR[#23] EQ 91 ; 如果X值是增量方式G91
#23=#23+#30 ; 则将X值转换为绝对方式, #30为调用本程序时X的绝对坐标
ENDIF
IF AR[#25] EQ 91 ; 如果Z值是增量方式G91
#25=#25+#32 ; 则将Z值转换为绝对方式, #32为调用本程序时Z的绝对坐标
ENDIF
IF AR[#10] EQ 0 ; 如果K值没有定义
#10 = 0;
ENDIF
N10 G01 X[#30] Z[#32]
N20 G00 X[#30] Z[#25+#10] ;移到加工点
N30 G01 X[#23] Z[#25] ;加工
N40 G01 Z[#32]                  
N50 G00 X[#30] ;返回初始点
G[#40]
M99

; _______________________________________________________________________
%0182
;螺纹切削循环G82宏程序实现源代码,调用本程序之前,必须转动主轴M03或M04
#40=#1152
IF [AR[#25] EQ 0] OR [AR[#23] EQ 0]
; 如果没有定义Z值和X值,则返回  
M99 ; 返回
ENDIF
IF AR[#8] EQ 0
#8=#1128 ;I模态
ENDIF
IF AR[#17] EQ 0
#17=#1137 ;R模态
ENDIF
IF AR[#4] EQ 0
#4=#1124 ;E模态
ENDIF
IF AR[#2] EQ 0
#2=#1122 ;C模态
ENDIF
IF AR[#15] EQ 0
#15=#1135 ;P模态
ENDIF
IF AR[#5] EQ 0
#5=#1125 ;F模态
ENDIF
IF AR[#8] EQ 0
#8=0 ;I
ENDIF
IF AR[#17] EQ 0
#17=0 ;R
ENDIF
IF AR[#4] EQ 0
#4=0 ;E
ENDIF
IF [[AR[#2] EQ 0] OR [#2 LT 2] OR [#2 GT 99]]
#2=1 ;C
ENDIF
IF AR[#15] EQ 0
#15=0 ;P
ENDIF
IF AR[#5] EQ 0 ; 如果螺距F值没有定义
M99 ; 返回
ENDIF
N10 G90 ; 我们用绝对方式编写宏程序
IF #1009 EQ 0 ;
#49 = 2 ;半径编程
ELSE
#49 = 1 ;直径编程
ENDIF
#30=#30*2/#49
IF AR[#23] EQ 91 ; 如果X值是增量方式G91
#23=#23+#30 ; 则将X值转换为绝对方式, #30为调用本程序时X的绝对坐标
ENDIF
IF AR[#25] EQ 91 ; 如果Z值是增量方式G91
#25=#25+#32 ; 则将Z值转换为绝对方式, #32为调用本程序时Z的绝对坐标
ENDIF
#28 = 0;
IF [#2 LE 1]
#28 = #15 ;起始角度
#15 = 0
ENDIF
G01 X[#30] Z[#32]
WHILE [#2 GE 1]
N20 G00 X[#23+#8] Z[#32] ;移到加工点
N30 G32 X[#23] Z[#25] E[#4] R[#17] P[#28] F[#5]
N40 G01 X[#30] Z[#25+#17] ;加工
N50 G00 Z[#32] ;返回初始点
#2 = #2 -1
#28 = #28 +#15;
ENDW
G[#40]
M99

; _______________________________________________________________________
%0176
;螺纹切削复合循环G76宏程序实现源代码,调用本程序之前,必须转动主轴M03或M04
IF [#1009 EQ 0]
#49 = 2 ;半径编程
ELSE
#49 = 1 ;直径编程
ENDIF
IF [AR[#0] EQ 0] ;如果没有定义刀尖角度A值则返回
M99 ;返回
ENDIF
IF [AR[#23] EQ 0] OR [AR[#25] EQ 0] ;如果没有定义X值和Z值,则返回
M99 ;返回
ENDIF
IF [AR[#10] EQ 0] ;如果没有定义K值,则返回
M99 ;返回
ENDIF
IF [AR[#20] EQ 0] OR [AR[#21] EQ 0] OR [AR[#16] EQ 0] ;如果没有定义U值、V值和Q值,则返回
M99 ;返回
ENDIF
IF [AR[#5] EQ 0] ;如果没有定义F值,则返回
M99
ENDIF
IF [AR[#17] EQ 0] ;如果没有定义退尾长度R值
#17 = 0 ;退尾长度为零
ENDIF
IF [#16 GT #10 ]   ;
#16=#10  
ENDIF
IF [AR[#2] EQ 0] ;如果没有定义精整次数C值
#2 = 1 ;精整次数为零
ENDIF
IF [#2 GT 99] OR [#2 LT 0] ;如果精整次数R大于99或小于0则返回
M99
ENDIF
IF [AR[#8] EQ 0] ;如果没有定义螺纹锥度I值
#8 = 0 ;则I=0
ELSE
#8 = #8*2/#49
ENDIF
IF [#0 LT 10] OR [#0 GT 80]
M99 ;如果刀尖角度A小于10或大于80,则返回
ENDIF
IF AR[#4] EQ 0 ; 如果X向退尾量E值没有定义
#4 = 0
ENDIF
#10 = #10*2/#49
#16 = #16*2/#49
#20 = #20*2/#49
#21 = #21*2/#49
IF AR[#15] EQ 0 ; 如果多头螺纹间距角没有定义,则为0
#15 = 0;
ENDIF
#30=#30*2/#49
N10 G90G01 X[#30] Z[#32]
IF AR[#23] EQ 91 ;如果是增量方式, 则转换为绝对方式
#23=#23+#30 ;螺纹终点 X
ENDIF
IF AR[#25] EQ 91 ;如果是增量方式, 则转换为绝对方式
#25=#25+#32 ;螺纹终点 Z
ENDIF
IF[#30 GT #23] ;进给方向确定
#27 = -1
ELSE
#27 = 1
ENDIF
IF[#32 GT #25]
#28 = -1
ELSE
#28 = 1
ENDIF
;加工起点 X=#30
;加工起点 Z=#32
#44=#23+#8 ;螺纹起点 X=#44
;螺纹起点 Z=#32
;螺纹终点 X=#23
;螺纹终点 Z=#25
#1=#0/2*PI/180 ;刀尖角度/2
#48=TAN[#1]

#40=#10 ;当前剩余进刀量 X=#40
;当前剩余进刀量 Z=#41
#43=1 ;当前进刀次数

WHILE [#40 GT 0] OR [#2 GT 0] ;当前剩余进刀量 X=#40大于0或剩余精整次数大于0
IF [#40 LE 0] ;当前剩余进刀量 X=#40小于等于0表示开始精整
IF #2 GT 0
#2=#2-1 ;精整减1
ENDIF
ELSE
IF #40 LE #20 ;粗加工完成?剩余进刀量小于等于精加工余量
#40=0 ;精加工螺纹深度到位
ELSE ;否则,粗加工
#42=#16*[SQRT[#43]-SQRT[#43-1]] ;计算当前进刀量
#43=#43+1
IF #42 LT #21 ;当前进刀量小于最小切削深度
#42=#21 ;最小切削深度
ENDIF
#40=#40-#42
IF #40 LT #20 ;剩余进刀量小于精加工余量
#40=#20 ;最后一刀粗加工剩下精加工余量
ENDIF
ENDIF
ENDIF
#41=#40*#49/2*#48 ;Z方向剩余进刀量
#35=#30-#27*#40 ;此次X轴的A点坐标
#36=#32-#28*#41 ;此次Z轴的A点坐标
#37=#23-#27*#40 ;本次螺纹终点X
#38=#25-#28*#41 ;本次螺纹终点Z
#39=#44-#27*#40 ;本次螺纹起点X
G00 X[#35] Z[#36] ;移动到A点
G00 X[#39] ;移动到起点
G32 X[#37] Z[#38] E[#4] P[#15] R[#17] F[#5]
G00 X[#35]
G00 Z[#36]
ENDW
M99
3479
EEbeginner 版主
文章数:1818
年度积分:50
历史总积分:3479
注册时间:2009/11/19
发站内信
发表于:2010/1/30 15:29:39
#92楼
【华中宏程序培训课件】厂家制作
共7部分,全部下完解压,无解压密码。
附件:
[本地下载]
附件:
[本地下载]
附件:
[本地下载]
3479
EEbeginner 版主
文章数:1818
年度积分:50
历史总积分:3479
注册时间:2009/11/19
发站内信
发表于:2010/1/30 15:31:16
#93楼
附件:
[本地下载]
附件:
[本地下载]
附件:
[本地下载]
3479
EEbeginner 版主
文章数:1818
年度积分:50
历史总积分:3479
注册时间:2009/11/19
发站内信
发表于:2010/1/30 15:32:38
#94楼
附件:
[本地下载]
注意:密码1111是解压后,是课件文档的打开密码,不是解压用的密码。
1027
liu1977hong
文章数:22
年度积分:50
历史总积分:1027
注册时间:2007/10/25
发站内信
发表于:2010/1/30 20:12:02
#95楼
感谢了,数控不是几句话就讲清楚的。楼主辛苦了。
3479
EEbeginner 版主
文章数:1818
年度积分:50
历史总积分:3479
注册时间:2009/11/19
发站内信
发表于:2010/1/31 14:13:12
#96楼
水平有限,希望大家多提意见。
925
ouyamg_2006
文章数:22
年度积分:50
历史总积分:925
注册时间:2009/11/27
发站内信
发表于:2010/1/31 21:49:18
#97楼
谢谢!
16117
xilinxue
文章数:2441
年度积分:50
历史总积分:16117
注册时间:2007/12/27
发站内信
发表于:2010/2/16 16:47:05
#98楼
好资料,不错,学习了
918
sdmh
文章数:18
年度积分:50
历史总积分:918
注册时间:2003/2/21
发站内信
发表于:2010/2/27 7:02:37
#99楼
因为是初学,所以不是很懂。不过还是要感谢,辛苦了。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

109.2007