数字积分圆弧第一二三四象限顺逆插补计算

更新时间:2024-05-06 22:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数 控 技 术 课 程 设 计 说 明 书

设计题目:数字积分法圆弧插补计软件设计

指导老师:

专 业: 机械设计制造及其自动化 班 级: 机 姓 名: 学 号:

目录

一、课程设计题目 .................................... 1 二、课程设计的目的 .................................. 1 三、课程设计使用的主要仪器设备 ...................... 1 四、课程设计的任务题目描述和要求 .................... 1 五、数字积分法插补原理 .............................. 2 5.1从几何角度来看积分运算 ......................... 2 5.2数字积分圆弧插补 ............................... 3 5.3数字积分法圆弧插补程序流程图 ................... 5 5.4插补实例 ....................................... 6 六、程序清单 ........................................ 7 七、软件运行效果仿真 ............................... 18 八、课程小节 ....................................... 21 九、参考文献 ....................................... 22

一、课程设计题目

数字积分法第一、二、三、四象限顺、逆圆插补计算

二、课程设计的目的

《数控原理与系统》是自动化(数控)专业的一门主要专业课程,安排课程设计的目的是通过课程设计方式使学生进一步掌握和消化数控原理基本内容,了解数控系统的组成,掌握系统控制原理和方法,通过设计与调试,掌握各种功能实的现方法,为今后从事数控领域的工作打下扎实的基础。 1)了解连续轨迹控制数控系统的组成原理。 2) 掌握数字积分法(DDA)插补的基本原理。 3)掌握数字积分法(DDA)插补的软件实现方法。

三、课程设计使用的主要仪器设备

1、PC计算机一台 2、数控机床实验装置一台 3、支持软件若干(选用VB环境)

四、课程设计的任务题目描述和要求

数字积分法又称数字微分分析法DDA(Digital Differential Analyzer)。数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。其缺点是速度调节不便,插补精度需要采取一定措施才能满足要求。由于计算机有较强的计算功能和灵活性,采用软件插补时,上述缺点易于克服。

本次课程设计具体要求如下: (1)掌握数字积分插补法基本原理

(2)设计出数字积分(DDA)插补法插补软件流程图

(3)编写出算法程序清单算法描述(数字积分法算法在VB中的具体实现) (4)要求软件能够实现第一、二、三、四象限顺、逆圆插补计算 (5)软件运行仿真效果 插补结果要求能够以图形模式进行输出

五、数字积分法插补原理

数字积分法又称数字积分分析法DDA(Digital differential Analyzer),简称积分器,是在数字积分器的基础上建立起来的一种插补算法。具有逻辑能力强的特点,可实现一次、两次甚至高次曲线插补,易于实现多坐标联动。只需输入不多的几个数据,就能加工圆弧等形状较为复杂的轮廓曲线。直线插补时脉冲较均匀。并具有运算速度快,应用广泛等特点。

5.1从几何角度来看积分运算

如下图所示,从时刻到t求函数曲线所包围的面积时,可用积分公式表示,如果将0~t的时间划分成时间间隔为的有限区间,当足够小时,可得近似公式 :

ntt

S??f(t)dt??y(t)dt??yi?t00 i?1S??yii?1n

若△t 取“1”,上式简化为: nnt?t?1 S??y(t)dt??yi?t?????yi0i?1i?1

这种累加求和运算,即积分运算可用数字积分器来实现,

若求曲线与坐标轴所包围的面积,求解过程如下:

被积函数寄存器用以存放Y值,每当Δt 出现一次,被积函数寄存器中的Y值就与累加器中的数值相加一次,并将累加结果存于累加器中,如果累加器的容量为一个单位面积,则在累加过程中,每超过一个单位面积,累加器就有溢出。当累加次数达到累加器的容量时,所产生的溢出总数就是要求的总面积,即积分值。

被积函数寄存器与累加器相加的计算方法: 例:被积函数寄存器与累加器均为3位寄存器,被积函数为5,求累加过程。

101 101 101 101 +)000 +)101 +)010 +)111 101 010 111 100

101 101 101 101 +) 100 +)001 +)110 +) 011 001 110 011 000

经过2 = 8次累加完成积分运算,因为有5次溢出,所以积分值等于5。

5.2数字积分圆弧插补 222圆心为坐标原点的圆弧方程式为: x?y?r可得圆的参数方程为:

dx对t 微分得、方向上的速度分量为: vx???rsint??y dt dyvy??rcost?x

dtnn

y?x?ti?y?ti用累加器来近似积分为: x?i?1i?1

如图所示,设加工半径为R的第一象限逆时针圆弧AB,坐标原点定在圆心上,

x?rcosty?rsint??

c = Val(Text3.Text) d = Val(Text4.Text) n = a * a + b * b m = c * c + d * d r = Sqr(n)

If Option1.Value = True Then

If a < 0 Or b < 0 Or c < 0 Or d < 0 Then

ans = MsgBox(\出错了,起点、终点坐标不在同一象限内,请重新输入\提示信息\ End If End If

If Option2.Value = True Then

If a > 0 Or b < 0 Or c > 0 Or d < 0 Then

ans = MsgBox(\出错了,起点、终点坐标不在同一象限内,请重新输入\提示信息\ End If End If

If Option3.Value = True Then

If a > 0 Or b > 0 Or c > 0 Or d > 0 Then

ans = MsgBox(\出错了,起点、终点坐标不在同一象限内,请重新输入\提示信息\ End If End If

If Option4.Value = True Then

If a < 0 Or b > 0 Or c < 0 Or d > 0 Then

ans = MsgBox(\出错了,起点、终点坐标不在同一象限内,请重新输入\提示信息\ End If End If

Picture1.ForeColor = vbRed Picture1.DrawWidth = 4 Const PI = 3.1415926535

If Option1.Value = True Then If a > c And b < d Then

If Option1.Value = True Then If b = 0 Then If c = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2 Else

Picture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2 - Atn(d / c) End If

ElseIf c = 0 Then

Picture1.Circle (4500, 4500), r * 300, , Atn(b / a), 3.14159 / 2 Else

Picture1.Circle (4500, 4500), r * 300, , Atn(b / a), 3.14159 / 2 - Atn(d / c) End If End If

ElseIf a < c And b > d Then

If Option1.Value = True Then If a = 0 Then If d = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2 Else

Picture1.Circle (4500, 4500), r * 300, , Atn(d / c), 3.14159 / 2 End If

ElseIf d = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, Atn(b / a) Else

Picture1.Circle (4500, 4500), r * 300, , Atn(d / c), Atn(b / a) End If End If Else

ans = MsgBox(\出错了,起点或终点坐标位置错误,请重新输入\提示信息\ End If End If

If Option2.Value = True Then If a > c And b > d Then

If Option2.Value = True Then If a = 0 Then If d = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159 Else

Picture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159 - Atn(-d / c)

End If

ElseIf d = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3.14159 / 2 + Atn(-a / b), 3.14159 Else

Picture1.Circle (4500, 4500), r * 300, , 3.14159 / 2 + Atn(-a / b), -Atn(-d / c) + 3.14159 End If End If

ElseIf a < c And b < d Then If Option2.Value = True Then If b = 0 Then If c = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159 Else

Picture1.Circle (4500, 4500), r * 300, , Atn(-c / d), 3.14159 End If

ElseIf c = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159 - Atn(-b / a) Else

Picture1.Circle (4500, 4500), r * 300, , Atn(-c / d), 3.14159 - Atn(-b / a) End If End If Else

ans = MsgBox(\出错了,起点或终点坐标位置错误,请重新输入\提示信息\ End If End If

If Option3.Value = True Then If a < c And b > d Then

If Option3.Value = True Then If b = 0 Then If c = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2 Else

Picture1.Circle (4500, 4500), r * 300, , 3.14159, Atn(d / c) + 3.14159 End If

ElseIf c = 0 Then

Picture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159, 3 * 3.14159 / 2

Else

Picture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159, Atn(d / c) + 3.14159

End If End If

ElseIf a > c And b < d Then If Option3.Value = True Then If a = 0 Then If d = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2 Else

Picture1.Circle (4500, 4500), r * 300, , 3.14159 + Atn(d / c), 2 * 3.14159 / 2

End If

ElseIf d = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2 - Atn(a / b)

Else

Picture1.Circle (4500, 4500), r * 300, , Atn(d / c) + 3.14159, 3 * 3.14159 / 2 - Atn(a / b)

End If End If Else

ans = MsgBox(\出错了,起点或终点坐标位置错误,请重新输入\提示信息\ End If End If

If Option4.Value = True Then If a < c And b < d Then

If Option4.Value = True Then If a = 0 Then If d = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, 2 * 3.14159 Else

Picture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, Atn(d / c) + 3.14159 * 2

End If

ElseIf d = 0 Then Picture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159 * 2, 2 * 3.14159 Else

Picture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159 * 2, Atn(d / c) + 3.14159 * 2 End If End If

ElseIf a > c And b > d Then If Option4.Value = True Then If b = 0 Then If c = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, 2 * 3.14159 Else

Picture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2 + Atn(-c / d), 2 * 3.14159 End If

ElseIf c = 0 Then

Picture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, -Atn(-b / a) Else

Picture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2 + Atn(-c / d), -Atn(-b / a)

End If End If Else

ans = MsgBox(\出错了,起点或终点坐标位置错误,请重新输入\提示信息\ End If End If

End Sub

Private Sub 插补计算_Click()

Dim a, b, c, d, ni, mi, ai, bi, ci, k, f, g, m, n, l, i, xs, yx, xe, ye, jvx, jvy, xi, yi As Integer

Dim r As Single

a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) d = Val(Text4.Text) ni = a * a + b * b mi = c * c + d * d r = Sqr(ni) form2.Cls

If Option1.Value = True Then

If a < 0 Or b < 0 Or c < 0 Or d < 0 Then

ans = MsgBox(\出错了,起点、终点坐标不在同一象限内,请重新输入\提示信息\ End If End If

If Option2.Value = True Then

If a > 0 Or b < 0 Or c > 0 Or d < 0 Then

ans = MsgBox(\出错了,起点、终点坐标不在同一象限内,请重新输入\提示信息\ End If End If

If Option3.Value = True Then

If a > 0 Or b > 0 Or c > 0 Or d > 0 Then

ans = MsgBox(\出错了,起点、终点坐标不在同一象限内,请重新输入\提示信息\ End If End If

If Option4.Value = True Then

If a < 0 Or b > 0 Or c < 0 Or d > 0 Then

ans = MsgBox(\出错了,起点、终点坐标不在同一象限内,请重新输入\提示信息\ End If End If ci = 2 f = 1 g = 1

k = 0 '正X进给标志 1 正向 -1负向 m = 0 '负Y进给标志 1 正向 -1负向 n = 0 '累加次数

i = CInt(Text5) '寄存器位数赋给i l = 2 ^ i

xs = CInt(Text1)

ys = CInt(Text2) xe = CInt(Text3) ye = CInt(Text4)

jvx = Abs(CInt(Text2)) jvy = Abs(CInt(Text1)) jrx = 0 jry = 0

xi = Abs(CInt(Text3) - CInt(Text1)) 'X方向总步 yi = Abs(CInt(Text4) - CInt(Text2)) 'Y方向总步长 ai = xs bi = ys

Picture1.ForeColor = vbGreen Picture1.DrawWidth = 3 form1.CurrentX = 200 form1.CurrentY = 200

Print \积分器 \积分器 \form1.CurrentX = 100 form1.CurrentY = 400

Print \累加次数 n\△X \∑x\Jry=Jry+Jvy\△Y \∑y \form1.CurrentX = 100 form1.CurrentY = 600

Print \开始 \& jvy & \

wz: k = 0 'X方向进给标志 1 X正向进给 -1负向进给 m = 0 'Y方向进给标志 1 Y正向进给 -1负向进给 If xi > 0 Then 'X方向判断 jrx = jrx + jvx

If jrx >= l Then '判断寄存器是否溢出 jrx = jrx - l '溢出修正

If jrx >= l Then '寄存器位数判断 GoTo ww5 End If

If Option1.Value = True Then If a > c And b < d Then k = -1 Else k = 1 End If End If

If Option2.Value = True Then If a > c And b > d Then k = -1 Else

k = 1 End If End If

If Option3.Value = True Then If a > c And b < d Then k = -1 Else k = 1 End If End If

If Option4.Value = True Then If a > c And b > d Then k = -1 Else k = 1 End If End If

xi = xi - 1 End If End If

If yi > 0 Then 'Y方向判断 jry = jry + jvy

If jry >= l Then '判断寄存器是否溢出 jry = jry - l '溢出修正

If jry >= l Then '寄存器位数判断 GoTo ww5 End If

If Option1.Value = True Then If a > c And b < d Then m = 1 Else m = -1 End If End If

If Option2.Value = True Then If a < c And b < d Then m = 1 Else m = -1 End If End If

If Option3.Value = True Then If a > c And b < d Then

m = 1 Else m = -1 End If End If

If Option4.Value = True Then If a < c And b < d Then m = 1 Else m = -1 End If End If

yi = yi - 1 'Y方向总步长减1 End If End If

n = n + 1 '累加次数加1 form1.CurrentX = 100

form1.CurrentY = 600 + n * 200 If xi = 0 Or yi = 0 Then

If xi = 0 And yi <> 0 And f = 0 Then

Print \\ GoTo wz2 End If

If xi = 0 And yi <> 0 And f < 0 Then

Print \\ GoTo wz2 End If

If xi <> 0 And yi = 0 And g = 0 Then

Print \& \停止\ GoTo wz2 End If

If xi <> 0 And yi = 0 And g < 0 Then

Print \& \ GoTo wz2 End If

If xi = 0 And yi = 0 And f = 1 And g < 0 Then

Print \& \ GoTo wz2 End If

停止\ If xi = 0 And yi = 0 And f < 0 And g = 1 Then

Print \\ GoTo wz2 End If

If xi = 0 And yi = 0 And f = 0 And g = 0 Then

Print \停止\\停止\ GoTo wz2 End If

If xi = 0 And yi = 0 And f = 0 And g < 0 Then

Print \停止\& \GoTo wz2 End If

If xi = 0 And yi = 0 And f < 0 And g = 0 Then

Print \\停止\GoTo wz2 End If End If

Print \& n & \& jvx & \& jrx & \& k & \& xi & \& jvy & \wz2: If xi = 0 Then f = f - 1 End If

If yi = 0 Then g = g - 1 End If

If xi = 0 And yi = 0 Then ci = ci - 1 If ci = 0 Then GoTo wz3 End If End If

If Option1.Value = True Then

If a > c And b < d And k = -1 Then jvy = jvy - 1

ElseIf a > c And b < d And m = 1 Then jvx = jvx + 1

ElseIf a < c And b > d And k = 1 Then jvy = jvy + 1

ElseIf a < c And b > d And m = -1 Then jvx = jvx - 1

End If End If

If Option2.Value = True Then

If a > c And b > d And k = -1 Then jvy = jvy + 1

ElseIf a > c And b > d And m = -1 Then jvx = jvx - 1

ElseIf a < c And b < d And k = 1 Then jvy = jvy - 1

ElseIf a < c And b < d And m = 1 Then jvx = jvx + 1 End If End If

If Option3.Value = True Then

If a > c And b < d And k = -1 Then jvy = jvy + 1

ElseIf a > c And b < d And m = 1 Then jvx = jvx - 1

ElseIf a < c And b > d And k = 1 Then jvy = jvy - 1

ElseIf a < c And b > d And m = -1 Then jvx = jvx + 1 End If End If

If Option4.Value = True Then

If a > c And b > d And k = -1 Then jvy = jvy - 1

ElseIf a > c And b > d And m = -1 Then jvx = jvx + 1

ElseIf a < c And b < d And k = 1 Then jvy = jvy + 1

ElseIf a < c And b < d And m = 1 Then jvx = jvx - 1 End If End If

Picture1.Line (4500 + 300 * ai, 4500 - bi * 300)-(4500 + 300 * (ai + k), 4500 - (bi + m) * 300) ai = ai + k bi = bi + m GoTo wz

ww3: Text1.Text = \ Text2.Text = \ Text3.Text = \ Text4.Text = \ Text5.Text = \

Text1.SetFocus ww5: form1.Cls

ans = MsgBox(\出错了,寄存器位数偏小,请输入\提示信息\ Text5.Text = \ Text5.SetFocus ww4: wz3: End Sub

Private Sub 清除_Click() Text1.Text = \Text2.Text = \Text3.Text = \Text4.Text = \Text5.Text = \

Option1.Value = False Option2.Value = False Option3.Value = False Option4.Value = False Picture1.Cls form2.Cls End Sub

Private Sub 退出_Click() End

End Sub

七、软件运行效果仿真

1 进入

2 第三象限

3第 二象限

4 第四象限

5 第一象限 及错误提示

八、课程小节

通过此次课程设计,使我更好的掌握了有关数字积分法一二三四象限顺、逆圆插补计算方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考和询问,终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在同组的伙伴们的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!

课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了数字积分法插补的基本原理,运算过程,特点及其应用,并了解改进数字积分插补质量的措施。

九、参考文献

[1] 《数控技术》 赵玉刚,宋现春 主编,北京,机械工业出版社,2010

[2] 《机床数控技术》 杜国臣,王士军 主编,北京,北京大学出版社,2010 [3] 《Visual Basic软件设计教程》 江志文 主编,广州,中山大学出版社,2003 [4] 《深入浅出Visual Basic 6软件设计》 松桥工作室,北京,中国铁道工业出版社,2004

[5] 《算法分析与设计技术》 马绍汉 主编,北京,科学出版社,2001

[6] 《数字控制机床》 廖效果,朱启逑 主编,湖北,华中理工大学出版社,2003

本文来源:https://www.bwwdw.com/article/qy5g.html

Top