数控课程设计(VB编程)

数控课程设计(VB编程)

数控课程设计(VB编程)

课程设计

课程名称___ 数控技术课程设计 _题目名称仿真数控装置的刀具补偿功能的程序实现学生学院______ _ 机电学院________ _ 专业班级__

学号

学生姓名______ __ _

指导教师 ____ _ ____ _

2012年7月 3 日

广东工业大学数控技术课程设计任务书

题目名称仿真数控装置的刀具补偿功能的程序实现

学生学院

专业班级化

姓名

学号

一、课程设计的内容

用计算机高级编程语言(如VB,VC++等)来实现数控装置中的一个基本的功能——刀具补偿功能(亦即仿真数控装置的刀具补偿功能),要求对任意给定的某一由直线与圆弧组成的平面几何轮廓:

二、课程设计的要求与数据

具体的要求如下:

(1)能实现四种转接(直线—直线、直线—圆弧、圆弧—直线、圆弧—圆弧);

(2)能实现三种过渡方式(伸长型、缩短型、插入型);

(3)能实现左、右刀补(即G41,G42)。

(4)在屏幕上绘出刀具的中心轨迹。

三、课程设计应完成的工作

每个学生应在规定时间内,独立完成所选题目。运用VB编程语言,编写计算机软件在WINDOWS实现数控装置的计算机仿真。要求清楚地分析问题、提出算法、确定人机界面、列出流程图,最后用程序验证,完成软件测试,并且提交程序说明书。

对选择典型零件编程题目的学生,要求用编写计算机软件的方法解决数控过程的一个问题。可以任选用本人熟悉的一种编程语言,要求清楚地分析问题、提出算法、列出流程图,最后用程序验证,并且提交程序说明书。

四、课程设计进程安排

数控课程设计(VB编程)

目录

一、内容提要 (2)

二、软件功能介绍 (2)

2.1软件窗口界面 (2)

2.2软件功能简介 (2)

三、刀具半径补偿知识 (3)

3.1概念 (3)

3.2主要用途 (3)

3.3常用方法 (3)

四、刀具半径补偿算法 (4)

4.1转接点算法说明 (4)

4.2刀具补偿算法 (6)

五、仿真结果图 (8)

六、设计总结 (9)

七、参考文献 (10)

八、附录(部分代码) (11)

一、内容提要

本文介绍了以Visual Basic 6.0为开发工具,制作程序来实现数控装置中的一个基本的功能--刀具补偿功能(亦即仿真数控装置的刀具补偿功能),要求对任意给定的某一由直线与圆弧组成的平面几何轮廓;

(1)能实现四种转接(直线--直线,直线--圆弧,圆弧--直线,圆弧--圆弧);(2)能实现三中过渡方式(伸长型,缩短型,插入型);

(3)能实现左,右刀补(即G41,G42)。

(4)在屏幕上绘出刀具的中心轨迹。

在程序中讨论了刀具半径补偿的原理,并介绍了如何判断缩短型,伸长型和插入型,如何实现直线与直线,直线与圆弧,圆弧与直线,圆弧与圆弧的转接

二、软件功能介绍

2.1.本模拟软件有一个窗口,图形界面如下:

数控课程设计(VB编程)

2.2、软件功能简介:

(1)软件能实现任何直线、圆弧交叉多段线段的连接刀具插补加工;

(2)能实现直线—直线、直线—圆弧、圆弧—直线、圆弧—圆弧刀具补偿;

(3)可以实时在窗体中输入图形参数,实现加工;

(4)刀具半径可以变换大小

三、刀具半径补偿知识

3.1概念:

根据按零件轮廓编制的程序和预先设定的偏置参数,数控装置能实时自动生成刀具中心轨迹的功能称为刀具半径补偿功能。

根据ISO标准,当刀具中心轨迹在编程轨迹(零件轮廓)前进方向的右边时,称为右刀补,用G42指令实现;反之称为左刀补,用G41指令实现。

3.2主要用途

数控装置大都具有刀具半径补偿功能,这为程序编制提供了方便。当编制零件加工程序时,可利用刀具半径补偿功能,直接按零件轮廓进行编程,而不需要进行大量的刀具中心运动轨迹的计算。采用刀具半径补偿后,数控系统能自动计算出刀具中心的偏移向量,进而得到偏移后的刀具中心轨迹,并使系统按中心轨迹运行。

具体体现在以下两个方面:

1)由于刀具的磨损或因换刀引起的刀具半径变化时,不必重新编程,只须修改相应得

偏置参数即可。

2)由于轮廓加工往往不是一道工序能完成的,在粗加工时,要为精加工工序预留加工

余量。加工余量的预留可通过修改偏置参数实现,而不必为粗、精加工各编制一个

程序。

3.3常用方法

刀具半径补偿分为B类补偿和C类补偿。B刀补的特点是刀具中心轨迹的段间连接都是以圆弧进行的;C刀补的特点是相邻两段轮廓的刀具中心轨迹之间用直线进行连接。B类补偿只能实现在本程序段内的刀具半径补偿,而对程序段间的过渡不予处理。只有B类刀具半径补偿功能的数控系统,使用时,对有外轮廓(外拐角)部分,必须增加尖角过渡辅助程序段;对内轮廓(内拐角),会产生过切现象。刀具半径C类补偿功能可实现自动尖角过渡,只要给出零件轮廓的程序数据,数控系统就能自动地进行拐角处的刀具中心轨迹交点的计算,采用的算法是一次进行两段直线的处理,C类补偿功能可用于内、外拐角轮廓的加工。

四、刀具半径补偿计算

4.1转接点算法说明

数控课程设计(VB编程)

数控课程设计(VB编程)

数控课程设计(VB编程)

数控课程设计(VB编程)

数控课程设计(VB编程)

数控课程设计(VB编程)

4.2刀具补偿算法

刀具算法即计算各种转接类型的转接点的坐标值,下属刀补算法中,假设刀具半径d ,圆弧半径R

4.2.1直线接直线的情况

假设第一段直线L1的起点为(1x ,1y ),终点为(2x ,2y ),第二段直线L2的起点为(2x ,

2y ),(3x ,3y )。

第一段直线L1的方向矢量为

()()

()()2212120,112,121y y x x y y x x -+-?--=

β

第二段直线L2的方向矢量为

()()()()2

223230,123,232y y x x y y x x -+-?--=

β

缩短型

直线1与直线2终点采用角度计算 刀具半径矢量的计算:

以rd 表示刀具半径矢量,α1表示对应的直线编程矢量与X 轴正向的夹角,则可求出:

G41: rdx=rd*(-sin β1) rdy=rd*(cos β1) G42: rdx=rd*(sin β1) rdy=rd*(-cos β1)

对刀具中心轨迹起点的计算:

通过对左、右刀补及各种线型的转接分析,得出其通用的计算公式:

Jx=Ox+rdx Jy=Oy+rdy

对刀具中心轨迹终点的计算:左刀补时:c=1;右刀补时:c=-1;

Kx=Fx-c*rd*sin β2 Ky=Fy+c*rd*cos β2

因此,只要配合直线的斜率就能计算出转接点的坐标,从而完成刀具补偿。 伸长型

其计算方法与缩短型一样。 插入型

刀补进行有两个转接点,采用角度判别计算,其坐标值的计算公式如下:

对左刀补(G41)kk=1; 对右刀补 (G42)kk=-1 插入点计算公式为:

C1x=Ax+rd*(cos β1-kk*sin β1) C1y=Ay+rd*(sin β1+kk*cos β1) C2x=Ax+rd*(-cos β2-kk*sin β2) C2y=Ay+rd*(-sin β2+kk*cos β2)

4.2直线接圆弧的情况

假设直线L 的起点为(1x ,1y ),终点为(2x ,2y ),圆弧C 的起点为(2x ,2y ),终点为(3x ,3y ),圆心相对于圆弧起点的坐标为(I ,K )。 刀补圆弧的半径为:r=rd*kc+

()()2

222K y I x -+- 顺圆时kc=1,逆圆时为-1。

直线接圆弧的伸长型刀补进行转接点求法如图所示,其中有两个转接点,首先求出两切线夹角的平均数,利用求出的角度计算过渡直线的斜率,从而得出直线与过渡直线的交点与直线与圆弧的交点。 4.3.圆弧接直线的情况 其原理与直线接圆弧相同。 4.4.圆弧接圆弧的情况 缩短型

刀补进行:圆弧接圆弧的缩短型刀补进行转接点求法很简单,只要求出其刀补圆弧的交点就可以画出刀补情况。 伸长型

刀补进行:圆弧接圆弧的伸长型刀补进行转接点求法与缩短型相类似。 插入型

刀补进行:圆弧接圆弧的插入型刀补进行转接点求法与直线圆弧相类似。

五、仿真结果图

5.1直线与直线

数控课程设计(VB编程)

5.2直线与圆弧

数控课程设计(VB编程)

5.3圆弧与圆弧

数控课程设计(VB编程)

六、设计总结

这个基于VB的刀补程序是用几何方法编写的,以矢量夹角为判断标准.程序分为直线—直线;直线—圆弧;圆弧--直线;圆弧—圆弧四大类。我这次编写的程序所用的方法是很基本的几何逻辑原理,都是高中的几何知识,十分浅显.但比较冗长。

通过本次课程设计我受益良多,不仅巩固了数控技术的知识,另外,在编程实现所需功能的时候,需运用数学知识,而且需考虑各种可能出现的情况。因此,这次课程设计也提高了个人分析问题的能力。

经过这次独立地编写这个刀具半径补偿程序,使我对VB有了更为深刻认识. 由于能力有限,本软件有一定的局限性,仿真不具有通用性,程序编写的过程中,有很多地方想的不周密而令到程序不是很严谨,请见谅! 今后我会继续努力,做得更好。

最后感谢高院长的指导,指导了我们这个课程设计,谢谢老师的辛苦劳动!

七参考文献

1《机床设计手册》第三分册

2廖效果.数字控制机床.武汉:华中理工大学出版社.1992.9

3廖效果.数控技术. 武汉:湖北科学技术出版社.2000.7

4刘又午.数字控制机床.北京:机械工业出版社

5龚浦泉.机床电气控制.重庆:重庆大学出版社

6 谭浩强.Basic语言结构化程序设计教程.北京:中国科学技术出版社.1990

7 杨林,李继良. Visual Basic编程高手.北京:北京大学出版社.2000

八、附录(部分代码)

Dim ax As Double, ay As Double, cx As Double, cy As Double, dx As Double, dy As Double, ex As Double, ey As Double, rx As Double

Dim ry As Double, bx As Double, by As Double, a1 As Double, a2 As Double, a3 As Double, a4 As Double, c1 As Integer, c2 As Integer

Dim r1 As Double, r2 As Double, x1 As Double, x2 As Double, x3 As Double, x4 As Double, y1 As Double, y2 As Double, y3 As Double

Dim y4 As Double, d As Integer, db As Double, term As Integer, l1 As Double, l2 As Double, w1 As Double, w2 As Double

Dim j11 As Double, j1 As Double, j2 As Double, j3 As Double, jj As Double, jjs As Double, jjs1 As Double, hx As Double

Dim hy As Double, kx As Double, ky As Double, fx As Double, fy As Double, pd As Double, jx As Double, jy As Double, jx1 As Double

Dim jy1 As Double, jx2 As Double, jy2 As Double, tana1 As Double, tana2 As Double, b1 As Double, b2 As Double, bj1 As Double

Dim bj2 As Double, ka As Integer, kb As Integer, kc As Integer, kd As Integer, we As Integer, zzqx As Double, zzqy As Double, lx As Double

Dim ly As Double, zya As Double, zyb As Double, zyc As Double, rr1 As Double, rr2 As Double, aa1 As Double, aa2 As Double, kc1 As Integer

Dim kc2 As Integer, zj As Double, jxx1 As Double, jxx2 As Double, jyy1 As Double, jyy2 As Double, zzj As Double

.

.

.

. '当非加工角大于90度时

Select Case p

Case 12

rr1 = r1 + kc1 * db

rr2 = r2 + kc2 * db

q = (r1 + db * kc1) * (r1 + db * kc1) - (r2 + db * kc2) * (r2 + db * kc2)

w = rx - ex

e = q + w * w - ry * ry + ey * ey

a11 = 4 * (ry - ey) * (ry - ey) + 4 * w * w

b11 = 4 * e * (ry - ey) - 8 * w * w * ry

c11 = e * e - 4 * w * w * (r1 + kc1 * db) * (r1 + kc1 * db) + 4 * w * w * ry * ry

Call jec(a11, b11, c11, jy1, jy2)

jy11 = jy1

jy12 = jy1

jy13 = jy2

jy14 = jy2

jx11 = rx + Sqr((r1 + kc1 * db) * (r1 + kc1 * db) - (ry - jy1) * (ry - jy1))

jx12 = rx - Sqr((r1 + kc1 * db) * (r1 + kc1 * db) - (ry - jy1) * (ry - jy1)) jx13 = rx + Sqr((r1 + kc1 * db) * (r1 + kc1 * db) - (ry - jy2) * (ry - jy2)) jx14 = rx - Sqr((r1 + kc1 * db) * (r1 + kc1 * db) - (ry - jy2) * (ry - jy2)) Call huayuan(jx11, jy11, ex, ey, rr5, aa5)

Call huayuan(jx12, jy12, ex, ey, rr6, aa6)

Call huayuan(jx13, jy13, ex, ey, rr7, aa7)

Call huayuan(jx14, jy14, ex, ey, rr8, aa8)

m = 0

If rr5 = rr2 Then

jx1 = jx11

jy1 = jy11

aaa1 = aa5

m = 1

Else

If rr6 = rr2 Then

If m = 0 Then

jx1 = jx12

jy1 = jy12

aaa1 = aa6

m = 1

Else

jx2 = jx12

jy2 = jy12

aaa2 = aa6

End If

Else

If rr7 = rr2 Then

If m = 0 Then

jx1 = jx13

jy1 = jy13

aaa1 = aa7

m = 1

Else

jx2 = jx13

jy2 = jy13

aaa2 = aa7

End If

Else

If rr8 = rr2 Then

jx2 = jx14

jy2 = jy14

aaa2 = aa6

End If

End If

End If

End If

If (a1 - aaa1) * Sgn(a1 - aaa1) < (a1 - aaa2) * Sgn(a1 - aaa2) Then

jx = jx1

jy = jy1

Else

jx = jx2

jy = jy2

End If

Call huayuan(jx, jy, rx, ry, rr1, aa1)

If c1 = 0 Then

Picture1.Circle (rx, ry), rr1, RGB(255, 0, 0), a1, aa1

Else

Picture1.Circle (rx, ry), rr1, RGB(255, 0, 0), aa1, a1

End If

Call huayuan(jx, jy, ex, ey, rr2, aa2)

If c2 = 0 Then

Picture1.Circle (ex, ey), rr2, RGB(255, 0, 0), aa2, a4

Else

Picture1.Circle (ex, ey), rr2, RGB(255, 0, 0), a4, aa2

End If

Case 13

zj = pd / 2 + j1

If zj > 8 * Atn(1) Then

zj = zj - 8 * Atn(1)

End If

If zj <> 0 And zj <> 2 * Atn(1) And zj <> 4 * Atn(1) And zj <> 6 * Atn(1) And zj <> 8 * Atn(1) Then

b1 = by - bx * Tan(zj)

axx = (1 + Tan(zj) * Tan(zj))

bxx = (2 * (b1 - by) * Tan(zj) - 2 * bx)

cxx = bx * bx + (b1 - by) * (b1 - by) - db * db

Call jec(axx, bxx, cxx, jzx1, jzx2)

jzy1 = jzx1 * Tan(zj) + b1

jzy2 = jzx2 * Tan(zj) + b1

Call pp(jzx1, jzy1, jzx2, jzy2, rx, ry, jzxx, jzyy)

bzj = jzyy + jzxx / Tan(zj)

aax = (1 + 1 / (Tan(zj) * Tan(zj)))

bbx = ((-1) * 2 * (bzj - ry) / Tan(zj) - 2 * rx)

ccx = rx * rx + (bzj - ry) * (bzj - ry) - (r1 + kc1 * db) * (r1 + kc1 * db) Call jec(aax, bbx, ccx, jx11, jx12)

jy11 = (-1) * jx11 / Tan(zj) + bzj

jy12 = (-1) * jx12 / Tan(zj) + bzj

Call pp(jx11, jy11, jx12, jy12, bx, by, jx1, jy1)

aaa = (1 + 1 / (Tan(zj) * Tan(zj)))

bbb = ((-1) * 2 * (bzj - ey) / Tan(zj) - 2 * ex)

ccc = ex * ex + (bzj - ey) * (bzj - ey) - (r2 + kc2 * db) * (r2 + kc2 * db) Call jec(aaa, bbb, ccc, jx21, jx22)

jy21 = (-1) * jx21 / Tan(zj) + bzj

jy22 = (-1) * jx22 / Tan(zj) + bzj

Call pp(jx21, jy21, jx22, jy22, bx, by, jx2, jy2)

Call huayuan(jx1, jy1, rx, ry, rr1, aa1)

If c1 = 0 Then

Picture1.Circle (rx, ry), rr1, RGB(255, 0, 0), a1, aa1

Else

Picture1.Circle (rx, ry), rr1, RGB(255, 0, 0), aa1, a1

End If

Call huayuan(jx2, jy2, ex, ey, rr2, aa2)

If c2 = 0 Then

Picture1.Circle (ex, ey), rr2, RGB(255, 0, 0), aa2, a4

Else

Picture1.Circle (ex, ey), rr2, RGB(255, 0, 0), a4, aa2

End If

Picture1.Line (jx1, jy1)-(jx2, jy2), RGB(255, 0, 0)

End If

End Select

Case 2

pd = 8 * Atn(1) - pd

zj = j1 - pd / 2

If zj > 8 * Atn(1) Then

zj = zj - 8 * Atn(1)

End If

If pd > 2 * Atn(1) Then

p = 12

Else

p = 13

End If

If c1 = 0 Then

kc1 = 1

Else

kc1 = (-1)

End If

If c2 = 0 Then

kc2 = 1

Else

kc2 = (-1)

End If

If pd > 2 * Atn(1) Then

p = 12

Else

p = 13

End If

'当非加工角大于90度时

Select Case p

Case 12

rr1 = r1 + kc1 * db

rr2 = r2 + kc2 * db

q = (r1 + db * kc1) * (r1 + db * kc1) - (r2 + db * kc2) * (r2 + db * kc2)

w = rx - ex

e = q + w * w - ry * ry + ey * ey

a11 = 4 * (ry - ey) * (ry - ey) + 4 * w * w

b11 = 4 * e * (ry - ey) - 8 * w * w * ry

c11 = e * e - 4 * w * w * (r1 + kc1 * db) * (r1 + kc1 * db) + 4 * w * w * ry * ry

Call jec(a11, b11, c11, jy1, jy2)

jy11 = jy1

jy12 = jy1

jy13 = jy2

jy14 = jy2

jx11 = rx + Sqr((r1 + kc1 * db) * (r1 + kc1 * db) - (ry - jy1) * (ry - jy1)) jx12 = rx - Sqr((r1 + kc1 * db) * (r1 + kc1 * db) - (ry - jy1) * (ry - jy1))

jx13 = rx + Sqr((r1 + kc1 * db) * (r1 + kc1 * db) - (ry - jy2) * (ry - jy2)) jx14 = rx - Sqr((r1 + kc1 * db) * (r1 + kc1 * db) - (ry - jy2) * (ry - jy2)) Call huayuan(jx11, jy11, ex, ey, rr5, aa5)

Call huayuan(jx12, jy12, ex, ey, rr6, aa6)

Call huayuan(jx13, jy13, ex, ey, rr7, aa7)

Call huayuan(jx14, jy14, ex, ey, rr8, aa8)

m = 0

If rr5 = rr2 Then

jx1 = jx11

jy1 = jy11

aaa1 = aa5

m = 1

Else

If rr6 = rr2 Then

If m = 0 Then

jx1 = jx12

jy1 = jy12

aaa1 = aa6

m = 1

Else

jx2 = jx12

jy2 = jy12

aaa2 = aa6

End If

Else

If rr7 = rr2 Then

If m = 0 Then

jx1 = jx13

jy1 = jy13

aaa1 = aa7

m = 1

Else

jx2 = jx13

jy2 = jy13

aaa2 = aa7

End If

Else

If rr8 = rr2 Then

jx2 = jx14

jy2 = jy14

aaa2 = aa6

End If

End If

相关推荐
相关主题
热门推荐