技术论坛

 NC程序编程点滴

返回主题列表
作者 主题
工控一阳指King
侠士

经验值:1533
发帖数:185
精华帖:2
楼主    2022-02-20 18:06:06
主题:NC程序编程点滴

NC程序的编写,讲究结构简单明了,易读性强,从今天起,打算将个人编程方面的点滴做个记录,在此留存个笔记。

本链接分享一个CTAB曲线表编程方面的实例:

https://mp.weixin.qq.com/s/qOXhAU7rWTqb7Y4kL5DGMw

工控一阳指King
侠士

经验值:1533
发帖数:185
精华帖:2
22楼    2022-03-02 22:32:29
精华帖  主题:回复:NC程序编程点滴

数控编程实例

——在通用机床上加工齿轮


众所周知,齿轮的加工方法一般有成型法和范成法,成型法是指用成型刀具加工精度较低的齿轮,如在普通铣床上铣齿,一般只在单件小批量或者修配时使用。范成法是运用齿轮啮合的范成运动来加工齿轮,加工精度和加工效率都比较高,是齿轮加工的最主要的方法。一般需要专用的设备和刀具,如插齿机、滚齿机、齿条刀具、滚齿刀等。

在现代制造技术高速发展的今天,产品开发阶段或者设备维修时,常常需要小批量加工较高精度要求的齿轮,以满足产品开发、设备维修或者实验的需求。本实例将介绍如何通过数控程序构造范成运动,在没有专用设备的情况下,运用通用机床,加工接近或者达到专用机床加工精度等级的满足实际需要的齿轮。

本实例编程环境为SinuTrain机床模板Vertical milling machine with swivel table。根据机床模板的结构,毛坯应该这样安装,齿轮的中心线与C轴重合,即可通过旋转C轴来转动齿轮毛坯。在A轴旋转90度后,齿轮端面平行于XZ平面,即齿廓渐开线需通过对X、Z和C轴编程来构造范成运动,并通过Y轴的切削运动来完成齿廓的切削。整个加工过程类似于插齿机,区别在于插齿机可用同时切削多个齿廓,而本例中每次进刀只能对一个齿廓进行加工。

首先介绍如何通过数控程序构成范成运动。

 


如上图所示,O点为齿轮的中心,渐开线AK为齿轮的一个齿廓,BK为渐开线的发生线,Rb为渐开线的基圆半径,Rk为渐开线上任意K点的半径,CK为渐开线的切线,根据渐开线的定义和性质,BK⊥CK。∠KOB为K点的压力角αk,∠AOK为K点的展角θk,根据渐开线的性质和齿轮的相关知识,我们可以知道,渐开线AK可以看成是无数多条CK形成的包络线。如果把CK当成铣刀的侧母线,铣削渐开线齿廓的编程工作就变成了求解CK位置。

由于我们所选用的机床为通用机床,刀具的中心线与机床的Z轴重合,不能发生偏转,即刀具始终垂直于XY平面,假设上图中AO与机床的Z轴平行,即A0垂直于XY平面,那么,当工件旋转αk+θk使得渐开线AK旋转到A'K'位置时,我们很容易发现,此时从C'K'与AO平行,即C'K'与机床Z轴平行。因此, K点从齿顶圆到运动到齿根圆的过程中,分n齿进刀,我们只要求解出每次进刀时K'所对应的∠A'OB',即αk+θk,和B'K'的长度,并分别对机床的C轴和X轴进行编程,并将Z轴编程到与齿根圆相切的加工深度,即把铣刀的端面当成插齿刀的齿顶,这样就可以构造出齿轮端面上的渐开线齿廓加工所需的范成运动。再赋予Y轴方向的切削运动,就可以实现类似插齿的齿轮铣削加工。并且,齿廓的轮廓度精度完全可以通过增加进刀次数来提高。

本例的相关齿轮参数及运算如下:

模数m = 2.5

齿数Z = 25

分度圆压力角α = 20

齿顶高系数ha = 1

齿根高系数hf = 1.25

分度圆直径D = mZ = 2.5 X 25 = 62.5

齿顶圆直径Da = m(Z + 2ha) = 2.5(25  + 2 X 1) = 67.5

齿根圆直径Df = m(Z - 2hf) =2.5(25 – 2 X 1.25) = 56.25

基圆直径Db = Dcos(α)= 62.5 X cos(20) = 58.731

齿顶圆压力角 αa = acos(Db/Da)=acos(58.731/67.5)=29.531

齿顶圆展角θa = 180(tanαa – αa)/π = 180(tan(29.531) - 29.531π/180)/π = 2.926

注:在计算展角θ是,渐开线方程中的α单位为弧度,后同。

在进行完基础计算,我们就可以开始计算编程需要的相关参数,前面说到,我们说需要分n次进刀,分别计算K点对应的∠A'OK'大小和B'K'长度,并给C轴和X轴编程。因此,我们需要分别计算出K点位于齿顶圆和齿根圆上是对应的∠A'OK'a和∠A'OK'f,将∠A'OK'a - ∠A'OK'f 平均分n次(本例中n=20)进刀,并计算对应的B'K'。

齿顶圆上时对应的∠A'OK'a = αa + θa = 29.531 + 2.926 = 32.457

因齿根圆Df小于基圆Db,故编程过程中,只对基圆以外的部分齿廓进行编程,基圆到齿根圆之间的部分齿廓由刀具自然形成。因此,不需要对∠A'OK'f进行计算,只需要将∠A'OK'从∠A'OK'a(32.457)开始分步进给到0°即可。

为了实现编程,还需要渐开线的起先点旋转到X轴上,本例采用设置零偏的方式,将工件旋转基圆齿槽宽的一半,使渐开线的起点位于X轴上。

基圆上的齿槽宽对应的圆心角

βb = 360/Z/2-2(tanα - α) X 180/π = 360/25/2 – 2( tan(20) - 20 X π/180) X 180 / π = 5.492    

因此,编程是需要进行βb /2 = 2.746零偏设置。

因采用半径编程,我们还需计算:

基圆半径Rb = Db/2 = 58.731 / 2 = 29.366

齿顶圆半径Ra = Da/2 = 67.5 / 2 = 33.75

齿根圆半径Rf = Df/2 = 56.25 / 2 = 28.125

从上面的图中,我们很容易得出:

B'K' = Rbtan∠A'OK'k

因Ra=33.75,取齿顶安全位置为35(世界生产中可能需要更大的安全距离)

下面是具体的编程代码:

毛坯开粗子程序ROUGH.SPF如下:

N100 PROC ROUGH(REAL _Y1,REAL _Y2,REAL _Z1,REAL _Z2)

N110 G54                                                ;重新激活零偏,使新的设置生效

N120 G90 G0 C0                                     ;C轴转到工件坐标0

N130 G90 G0 Y=_Y1                                ;Y轴移动到齿轮上表面

N140 G90 G1 Z=_Z1                                ;Z轴进给到铣削深度

N150 G90 G1 Y=_Y2                                ;Y轴切削运动

N160 G91 G0 Z=_Z2                                ;Z轴退刀至安全距离

N170 M17                                               ;子程序结束

为了重复调用,减少程序代码,毛坯开粗子程序采用带参数传递的子程序,程序机构简单,不做详细分析。

齿廓加工范成运动子程序FINISH.SPF如下:

N100 PROC FINISH(REAL _ST,REAL _INC,REAL _TL)

N110 DEF INT _I                                      ;循环控制变量

N120 DEF REAL _X                                  ;X轴位置中间变量

N130 DEF REAL _C                                  ;C轴绝对位置中间变量

N140 G54                                                ;重新激活零偏,使新的设置生效

N150 G90 G0 Z35                                    ;逼近齿顶圆安全位置

N160 IF _ST<0                                         ;当_ST小于0时,需要将其换算到0-360

N170 G90 G0 C=_ST+360

N180 ELSE

N190 G90 G0 C=_ST                                ;旋转齿顶圆的齿廓平行刀具

N200 ENDIF

N210 _C=_ST                                            ;给C轴绝对位置中间变量赋值

N220 FOR _I=0 TO 19                               ;开始循环

N230 _C=_C+_INC                                   ;下一次进刀的C轴绝对位置

N240 _X=-29.366*_C*3.14159/180+_TL ;下一次进刀的X轴位置

N250 G91 G0 C=_INC                               ;旋转工件到下一次进刀点

N260 G90 G0 X=_X Y2                              ;移动X轴到轮廓位置,Y轴到齿轮上表面

N270 G90 G1 Z28.125                             ;Z向进给到与齿根圆相切的深度

N280 G90 G1 Y-22                                  ;Y想切削运动

N290 G90 G0 Z35                                    ;Z向退刀至安全距离

N300 ENDFOR                                         ;循环结束

N310 M17                                               ;子程序结束

为了统一程序结构,减少出差,齿廓加工范成运动子程序采用带参数传递子程序,通过调用时设置形参变量来完成左右齿廓的加工。这里需要说明的是,N190行是用来计算每次进刀是C轴的绝对位置,是为了便于N200行按照C轴的绝对位置计算X轴的位置,而N210行未采用绝对坐标编程,是为了避免C轴的编程角度小于0或者大于360情况出现,采用相对坐标编程的好处在于,当C轴的编程角度小于0或者大于360,系统会自动换算到0到360的范围。关于程序的理解,参加程序中的注释。

主程序结构如下:

N100 DEF INT _N                                                            ;循环控制变量

N110 EXTERN ROUGH(REAL,REAL,REAL,REAL)              ;声明外部调用子程序

N120 EXTERN FINISH(REAL,REAL,REAL)                         ;声明外部调用子程序

N130 $P_UIFR[1,MC1,TR]=0                                           ;设置G54的C轴零偏

N140 G90 G54 G17 G94                                                  ;程序准备指令

N150 G0 X0 Y0 Z500 A0 C0                                             ;换刀前的安全位置

N160 T="CUTTER 2"M6                                                   ;换刀

N170 M3 S3000                                                               ;启动主轴

N180 WORKPIECE(,"",,"CYLINDER",0,0,-20,-80,67.5)     ;设置毛坯

N190 G0 X0 Y2 Z35 A90                                                  ;Z轴逼近齿顶圆,A转到90°

N200 FOR _N=0 TO 24                                                     ;开粗循环开始

N210 F5000                                                                      ;设置进给速度F

N220 $P_UIFR[1,MC1,TR]=_N*14.4-1.4   ;设置零偏

N230 ROUGH(2,-22,31,4)                                                 ;开粗分度圆以外齿面

N240 $P_UIFR[1,MC1,TR]=_N*14.4+1.4                          ;设置零偏

N250 ROUGH(2,-22,31,4)                                                 ;开粗分度圆以外齿面

N260 $P_UIFR[1,MC1,TR]=_N*14.4                                 ;设置零偏

N270 ROUGH(2,-22,28.2,6.8)                                           ;开粗分度圆以内齿面

N280 STOPRE                                                                    ;停止预读

N290 ENDFOR                                                                   ;循环结束

N300 FOR _N=0 TO 24                                                      ;齿廓第一面循环开始

N310 $P_UIFR[1,MC1,TR]=_N*14.4+2.746                      ;设置零偏

N320 FINISH(32.457,-32.457/20,-1)                                  ;调用子程序

N330 ENDFOR                                                                   ;循环结束

N340 FOR _N=0 TO 24                                                      ;齿廓第二面循环开始

N350 $P_UIFR[1,MC1,TR]=_N*14.4-2.746                        ;设置零偏

N360 FINISH(-32.457,32.457/20,1)                                     ;调用子程序

N370 ENDFOR                                                                   ;循环结束

N380 M30                                                                         ;程序结束

主程序主要分成2个部分,第一部分是对圆形毛坯进行简单的开粗成下图所示的形状:




第二个部为轮廓的加工,为了节省加工时间,先加工逆时针方向的齿面,顺时针方向的齿面。加工完成后的齿轮如下图所示:



本例旨在说明如果构建范成运动,在通用机床上采用类似插齿的方式加工齿轮。如果要实际运用,程序还需进一步的优化。

这里的通用机床需要满足齿轮毛坯可以任意旋转,即机床的工作台至少安装一个选择轴。在具体的机床上运用此方法,各编程轴可能需要做响应的调整。


工控一阳指King
侠士

经验值:1533
发帖数:185
精华帖:2
32楼    2022-05-20 19:03:40
精编帖  主题:回复:NC程序编程点滴

WinSCP传输程序

“WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。”这是WinSCP官网上对WindSPC的介绍,我自己的理解是,WinSCP是一个可以跨操作系统进行文件传输的开源软件,常常用于Windows和Linux两个操作系统之间的文件交换。本文将如何通过WinSCP将NC程序从Windows系统的电脑上传到NCU的NC程序存储器上,即系统CF卡上。

首先需要下载和安装WinSCP,官方下载地址为:https://winscp.net/eng/download.php,具体下载和安装不在这里重述。

其次,需将电脑通过网线连接的NUC的X120或X127端口, X120默认的IP地址192.168.214.1,连接到X120的电脑需要将其IP地址设置成与X120同网段的IP地址。 X127自带DHCP服务器,其IP地址为192.168.215.1,可以自动进行IP地址分配,接入X127的电脑的需设置为自动获取IP地址。

打开运行WinSCP的界面如下: 

在传输前,需要进行如下的通讯设置:

File protocol:可以设置成SFTP,也可以设置成SCP

Host name:填入X120或者X127的IP地址

User name:manufact,全部小写

Password:SUNRISE,密码全部大写

点击Login登录,就可以在电脑和NCU直接建立通讯。登录后的界面如下:

WinSCP界面分成两个文件浏览器,左边是本地文件浏览器,右边是远程文件浏览器,即NCU的CF卡文件系统。

如下图,想将manufact目录切换到root目录,并在root目录找到nckfs文件夹。

双击打开nckfs文件夹,就可在nckfs文件夹目录下面找到我们常用的零件程序文件夹_N_MPF_DIR,子程序文件夹_N_SPF_DIR和工件文件夹_N_WKS_DIR。

如下图所示,在左侧的本地文件浏览器中找到需要传到机床上的程序的文件,就可以直接将其拖拽到希望的NC程序目录中。

这里需要强调一下,本地文件和文件夹需要按NC程序的命名规则进行命名,命名规则如下:

主程序:_N_程序名_MPF

子程序:_N_程序名_SPF

工件目录:_N_文件夹名_WPD

工控一阳指King
侠士

经验值:1533
发帖数:185
精华帖:2
39楼    2022-06-04 20:28:07
精编帖  主题:回复:NC程序编程点滴

神奇的G641连续路径模式

——再谈椭圆加工

 

前段时间应网友的提问编写的一个关于加工椭圆的程序。当再次查看当时写的程序时,发现该程序还有很多需要改进和提高的地方。本文将介绍,通过IF条件区分出空行程和增加G641连续路径模式对前面编写的程序进行改进和提高。

为了方便问题的讲解,我们先来看看上次编写的程序。

N100 DEF INT _I, _J ; 定义循环控制变量

N110 DEF REAL _A, _B ; 定义椭圆长轴和短轴变量

N120 G90G54G94 ; 初始化程序代码

N130 G0 X0 Y0 Z500 ; 安全位置

N140 T="CUTTER 10" M6 M3 S1000 ; 换刀

N150 WORKPIECE(,"",,"RECTANGLE",0,0,-100,-80,170,110) ; 设置毛坯

N160 G0 Z5 ; 逼近工件

N170 FOR _I=0 TO 4 ; 分5次循环铣削

N180    _A=80+(5-_I)*5 _B=50+(5-_i)*5 ; 椭圆长轴短轴

N190    G1 X=_A+10 F3000 ; 运动到加工起点

N200    G42 Z-2 ; Z向下刀, 刀具半径右补偿

N210    FOR _J=0 TO 360 ; 通过循环每度计算一次X轴和Y轴的坐标

N220       X=_A*COS(_J) Y=_B*SIN(_J)

N230    ENDFOR ; 内循环结束

N240    G0 Z5 ;加工完一刀抬刀

N250    G40 ; 取消刀具补偿

N260 ENDFOR ; 外循环结束

N270 X0 Y0 Z500 ; 加工完成退刀

N280 M30

图1

上述程序在N210到N230行运用了一个FOR循环,用直线插补G1加工360条足够短直线段来达到加工椭圆的目的,这是数控编程中常用的直线段带代替曲线的加工方法。上述程序从N170到N260行,再用一个FOR循环,通过不断改变椭圆长轴和短轴的方法,分5次去除椭圆以外的所有加工余量。这是比较典型的循环编程的思路。当笔者再次模拟上述程序时,发现运行上述程序循环时间是10分23秒(图1所示),直觉告知笔者,这个这样的程序加工效率太低。

因此,笔者试着通过IF条件,将原程序做如下的修改:

N100 DEF INT _I, _J ; 定义循环控制变量

N110 DEF REAL _A, _B, _X, _Y  ; 定义椭圆长轴和短轴变量, X和Y轴坐标变量

N120 G90G54G94 ; 初始化程序代码

N130 G0 X0 Y0 Z500 ; 安全位置

N140 T="CUTTER 10" M6 M3 S1000 ; 换刀

N150 WORKPIECE(,"",,"RECTANGLE",0,0,-100,-80,170,110)  ; 设置毛坯

N160 G0 Z5 ; 逼近工件

N170 FOR _I=0 TO 4 ; 分5次循环铣削

N180    _A=80+(5-_I)*5 _B=50+(5-_i)*5 ; 椭圆长轴短轴

N190    G1 X=_A+10 F3000 ; 运动到加工起点

N200    G42 Z-2 ; Z向下刀, 刀具半径右补偿

N210    FOR _J=0 TO 360  ; 通过循环每度计算一次X轴和Y轴的坐标

N220       _X=_A*COS(_J) _Y=_B*SIN(_J)

N230       IF (_X<-86) OR (_X>86) OR (_Y<-56) OR (_Y>56) ; 判断是否是空行程

N240          G0 X=_X Y=_Y ; 空行程快速移动

N250       ELSE

N260          G1 X=_X Y=_Y ; 切削行程

N270       ENDIF

N280    ENDFOR ; 内循环结束

N290    G0 Z5 ; 加工完一刀抬刀

N300    G40 ; 取消刀具补偿

N310 ENDFOR ; 外循环结束

N320 X0 Y0 Z500 ; 加工完成退刀

N330 M30

上述程序中,高亮显示部分通过IF条件,判断坐标点是否处于毛坯外,在毛坯外就是空行程,否则是正常加工行程。但是修改后,笔者并未得到预想的效果,加工时间不但没有明显缩短,反而多了1秒,即循环时间为10分24秒。

笔者再次将程序做如下修改:

N100 DEF INT _I, _J ; 定义循环控制变量

N110 DEF REAL _A, _B, _X, _Y  ; 定义椭圆长轴和短轴变量, X和Y轴坐标变量

N120 G90G54G94 ; 初始化程序代码

N130 G0 X0 Y0 Z500 ; 安全位置

N140 T="CUTTER 10" M6 M3 S1000 ; 换刀

N150 WORKPIECE(,"",,"RECTANGLE",0,0,-100,-80,170,110)  ; 设置毛坯

N160 G0 Z5 ; 逼近工件

N170 FOR _I=0 TO 4 ; 分5次循环铣削

N180    _A=80+(5-_I)*5 _B=50+(5-_i)*5 ; 椭圆长轴短轴

N190    G1 X=_A+10 F3000 ; 运动到加工起点

N200    G42 Z-2 ; Z向下刀, 刀具半径右补偿

N210    G641 ; 连续路径模式

N220    FOR _J=0 TO 360  ; 通过循环每度计算一次X轴和Y轴的坐标

N230       _X=_A*COS(_J) _Y=_B*SIN(_J)

N240       IF (_X<-86) OR (_X>86) OR (_Y<-56) OR (_Y>56) ; 判断是否是空行程

N250          G0 X=_X Y=_Y ; 空行程快速移动

N260       ELSE

N270          G1 X=_X Y=_Y ; 切削行程

N280       ENDIF

N290    ENDFOR ; 内循环结束

N300    G0 G60 Z5 ; 加工完一刀抬刀, 准停模式

N310    G40 ; 取消刀具补偿

N320 ENDFOR ; 外循环结束

N330 X0 Y0 Z500 ; 加工完成退刀

N340 M30

高亮显示的N210行开启连续路径模式,而N300行在走完一个椭圆周后,回到准停模式。修改后的程序的循环时间有原来的10分23秒减少到了50秒(图2所示)。

图2

初一看来,这太神奇了,有些不可思议。其实,在我们未条件N210行的G641时,机床为准停模式,即每走一段编程的线段,机床都会准确的停到编程的坐标点再运行下一段线段,这样,X轴和Y轴不停的处于加速和加速的状态,并未达到编程的进给速度F3000,更未达到快速移动的G0的速度。因此,分开空行程走刀和非空行程走刀并未达到预想的效果。当我们增加N210行的G641后,机床开启了连续路径模式,即机床尽可能保持相同的运行速度,并会将线段之间的角度进行适当的圆滑,这样不但提高了加工效率,同时也会提高表面粗糙度。

工控一阳指King
侠士

经验值:1533
发帖数:185
精华帖:2
54楼    2023-01-24 18:21:46
精编帖  主题:回复:NC程序编程点滴

用Visual Studio 中编辑和阅读NC程序

工欲善其事,必先利其器。CNC编程也是如此,一个功能丰富的文本编辑器对编写和阅读复杂结构的NC程序,会起到事半功倍的效果。

Visual Studio作为微软公司开发的一个强大的计算机编程IDE平台,有着强大的代码编辑和显示功能,如指令作色,代码折叠等,大大提高的编程的效率和程序的可读性。

楼主近期在处理一些进口机床的复杂结构NC程序的过程中,为了便于理解原始程序的结构和提高工作效率,开发了一个Visual Studio 2022的针对SINUMERIK CNC程序语法的扩展,对主要的G指令和所有M指令等进行作色,使其在Visual Studio中的显示和实际机床上的颜色相同。并可以对控制结构的程序进行代码折叠和展开,方便理清程序的逻辑关系。

下图是相关功能的简单展示:

原计划将所开发的扩展在Visual Studio的Marketplace上发布,但是由于在国内无法将软件上传。只能暂时放弃发布的计划,不过有想要试试的朋友,欢迎留言。

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。