数控技术课程设计说明书设计题目:数字积分法圆弧插补计软件设计指导老师:专业:机械设计制造及其自动化班级:机姓名:学号:目录一、课程设计题目 (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 的时间划分成时间间隔为的有限区间,当足够小时,可得近似公式 :若△t 取“1”,上式简化为:这种累加求和运算,即积分运算可用数字积分器来实现,∑⎰⎰=∆===n i i t t ty dt t y dt t f S 100)()(∑==ni iy S 1∑∑⎰===∆−−→−∆==n i in i t i ty t y dt t y S 111)(若求曲线与坐标轴所包围的面积,求解过程如下:被积函数寄存器用以存放Y值,每当Δt 出现一次,被积函数寄存器中的Y 值就与累加器中的数值相加一次,并将累加结果存于累加器中,如果累加器的容量为一个单位面积,则在累加过程中,每超过一个单位面积,累加器就有溢出。
当累加次数达到累加器的容量时,所产生的溢出总数就是要求的总面积,即积分值。
被积函数寄存器与累加器相加的计算方法:例:被积函数寄存器与累加器均为3位寄存器,被积函数为5,求累加过程。
101 101 101 101 +)000 +)101 +)010 +)111101 010 111 100101 101 101 101 +) 100 +)001 +)110 +) 011001 110 011 000经过2 = 8次累加完成积分运算,因为有5次溢出,所以积分值等于5。
5.2对t如图所示,设加工半径为R的第一象限逆时针圆弧AB,坐标原点定在圆心上,A(Xo,Yo)为圆弧起点,B(Xe,Ye)为圆弧终点,Pi(Xi,Yi)为加工动点。
如下图所示,可以得到:V/R = Vx/Yi = Vy/Xi = K即Vx=K Yi,Vy=K Xi因而可以得到坐标微小位移增量为:ΔX=VxΔt = KYiΔt ΔY=VyΔt = KXiΔt设Δt=1,K=1/2 则有:可看出,用DDA法进行圆弧插补时,是对加工动点的坐标Xi和Yi的值分别进行累加,若积分累加器有溢出,则相应坐标轴进给一步,则圆弧积分插补器如图所示:5.3数字积分法圆弧插补程序流程图DDA法插补不同象限圆弧时,算法也有所不同。
当采用软件插补时,如果参与积分运算的寄存器均采用绝对值数据,则DDA法插补的积分累加过程完全相同,即JR+JV→JR,只是进给脉冲分配方向和圆弧插补动点坐标的修正有所不同。
5.5插补实例设有第Ⅰ象限逆圆弧SE,起点为S(4,0),终点为E(0,4),且寄存器位数N=3。
试用DDA法对该圆弧进行插补,并画出插补轨迹。
解:插补开始时,被积函数寄存器初值分别为JVX=YS=0,JVY=XS=4,终点判别寄存器JSX=|Xe-XS|=4,JSY=|Ye-YS|=4。
该圆弧插补运算过程见下表,插补轨迹如下图所示的折线。
六、程序清单Private Sub 建立坐标系_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (500, 4500)-(8500, 4500) '画直线坐标轴Picture1.Line (4500, 500)-(4500, 8500)Picture1.CurrentX = 230 '当前位置Picture1.CurrentY = 4400Picture1.Print "-X" '坐标轴标注Picture1.CurrentX = 4300Picture1.CurrentY = 4300Picture1.Print "(0,0)"Picture1.CurrentX = 8650Picture1.CurrentY = 4400Picture1.Print "X"Picture1.CurrentX = 4400Picture1.CurrentY = 8600Picture1.Print "-Y"Picture1.CurrentX = 4500Picture1.CurrentY = 400Picture1.Print "Y"End SubPrivate Sub 画圆弧_Click()Dim a, b, c, d, n, m As IntegerDim r As Singlea = Val(Text1.Text)b = Val(Text2.Text)c = Val(Text3.Text)d = Val(Text4.Text)n = a * a + b * bm = c * c + d * dr = Sqr(n)If Option1.Value = True ThenIf a < 0 Or b < 0 Or c < 0 Or d < 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option2.Value = True ThenIf a > 0 Or b < 0 Or c > 0 Or d < 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option3.Value = True ThenIf a > 0 Or b > 0 Or c > 0 Or d > 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option4.Value = True ThenIf a < 0 Or b > 0 Or c < 0 Or d > 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfPicture1.ForeColor = vbRedPicture1.DrawWidth = 4Const PI = 3.1415926535If Option1.Value = True ThenIf a > c And b < d ThenIf Option1.Value = True ThenIf b = 0 ThenIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2 - Atn(d / c) End IfElseIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , Atn(b / a), 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , Atn(b / a), 3.14159 / 2 - Atn(d / c) End IfEnd IfElseIf a < c And b > d ThenIf Option1.Value = True ThenIf a = 0 ThenIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , Atn(d / c), 3.14159 / 2End IfElseIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, Atn(b / a)ElsePicture1.Circle (4500, 4500), r * 300, , Atn(d / c), Atn(b / a)End IfEnd IfElseans = MsgBox("出错了,起点或终点坐标位置错误,请重新输入", 48, "提示信息")End IfEnd IfIf Option2.Value = True ThenIf a > c And b > d ThenIf Option2.Value = True ThenIf a = 0 ThenIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159ElsePicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159 - Atn(-d / c)End IfElseIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2 + Atn(-a / b), 3.14159 ElsePicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2 + Atn(-a / b), -Atn(-d / c) + 3.14159End IfEnd IfElseIf a < c And b < d ThenIf Option2.Value = True ThenIf b = 0 ThenIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159ElsePicture1.Circle (4500, 4500), r * 300, , Atn(-c / d), 3.14159End IfElseIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159 - Atn(-b / a) ElsePicture1.Circle (4500, 4500), r * 300, , Atn(-c / d), 3.14159 - Atn(-b / a) End IfEnd IfElseans = MsgBox("出错了,起点或终点坐标位置错误,请重新输入", 48, "提示信息")End IfEnd IfIf Option3.Value = True ThenIf a < c And b > d ThenIf Option3.Value = True ThenIf b = 0 ThenIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , 3.14159, Atn(d / c) + 3.14159End IfElseIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159, 3 * 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159, Atn(d / c) + 3.14159End IfEnd IfElseIf a > c And b < d ThenIf Option3.Value = True ThenIf a = 0 ThenIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , 3.14159 + Atn(d / c), 2 * 3.14159 / 2End IfElseIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2 - Atn(a / b)ElsePicture1.Circle (4500, 4500), r * 300, , Atn(d / c) + 3.14159, 3 * 3.14159 / 2 - Atn(a / b)End IfEnd IfElseans = MsgBox("出错了,起点或终点坐标位置错误,请重新输入", 48, "提示信息")End IfEnd IfIf Option4.Value = True ThenIf a < c And b < d ThenIf Option4.Value = True ThenIf a = 0 ThenIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, 2 * 3.14159ElsePicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, Atn(d / c) + 3.14159 * 2End IfElseIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159 * 2, 2 * 3.14159 ElsePicture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159 * 2, Atn(d / c) + 3.14159 * 2End IfEnd IfElseIf a > c And b > d ThenIf Option4.Value = True ThenIf b = 0 ThenIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, 2 * 3.14159ElsePicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2 + Atn(-c / d), 2 * 3.14159 End IfElseIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, -Atn(-b / a)ElsePicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2 + Atn(-c / d), -Atn(-b / a)End IfEnd IfElseans = MsgBox("出错了,起点或终点坐标位置错误,请重新输入", 48, "提示信息")End IfEnd IfEnd SubPrivate 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 IntegerDim r As Singlea = Val(Text1.Text)b = Val(Text2.Text)c = Val(Text3.Text)d = Val(Text4.Text)ni = a * a + b * bmi = c * c + d * dr = Sqr(ni)form2.ClsIf Option1.Value = True ThenIf a < 0 Or b < 0 Or c < 0 Or d < 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option2.Value = True ThenIf a > 0 Or b < 0 Or c > 0 Or d < 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option3.Value = True ThenIf a > 0 Or b > 0 Or c > 0 Or d > 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option4.Value = True ThenIf a < 0 Or b > 0 Or c < 0 Or d > 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd Ifci = 2f = 1g = 1k = 0 '正X进给标志 1 正向 -1负向m = 0 '负Y进给标志 1 正向 -1负向n = 0 '累加次数i = CInt(Text5) '寄存器位数赋给il = 2 ^ ixs = CInt(Text1)ys = CInt(Text2)xe = CInt(Text3)ye = CInt(Text4)jvx = Abs(CInt(Text2))jvy = Abs(CInt(Text1))jrx = 0jry = 0xi = Abs(CInt(Text3) - CInt(Text1)) 'X方向总步yi = Abs(CInt(Text4) - CInt(Text2)) 'Y方向总步长ai = xsbi = ysPicture1.ForeColor = vbGreenPicture1.DrawWidth = 3form1.CurrentX = 200form1.CurrentY = 200Print " " & " X积分器 " & " Y 积分器 "form1.CurrentX = 100form1.CurrentY = 400Print "累加次数 n" & " jvx " & "Jrx=Jrx+Jvx" & " △X " & "J∑x" & " Jvy" & " Jry=Jry+Jvy" & " △Y " & " J∑y "form1.CurrentX = 100form1.CurrentY = 600Print " 开始 " & " " & jvx & " " & jrx & " " & k & " " & xi & " " & jvy & " " & jry & " " & m & " " & yiwz: k = 0 'X方向进给标志 1 X正向进给 -1负向进给m = 0 'Y方向进给标志 1 Y正向进给 -1负向进给If xi > 0 Then 'X方向判断jrx = jrx + jvxIf jrx >= l Then '判断寄存器是否溢出jrx = jrx - l '溢出修正If jrx >= l Then '寄存器位数判断GoTo ww5End IfIf Option1.Value = True ThenIf a > c And b < d Thenk = -1Elsek = 1End IfEnd IfIf Option2.Value = True ThenIf a > c And b > d Thenk = -1ElseEnd IfEnd IfIf Option3.Value = True ThenIf a > c And b < d Thenk = -1Elsek = 1End IfEnd IfIf Option4.Value = True ThenIf a > c And b > d Thenk = -1Elsek = 1End IfEnd Ifxi = xi - 1End IfEnd IfIf yi > 0 Then 'Y方向判断jry = jry + jvyIf jry >= l Then '判断寄存器是否溢出 jry = jry - l '溢出修正If jry >= l Then '寄存器位数判断GoTo ww5End IfIf Option1.Value = True ThenIf a > c And b < d Thenm = 1Elsem = -1End IfEnd IfIf Option2.Value = True ThenIf a < c And b < d Thenm = 1Elsem = -1End IfEnd IfIf Option3.Value = True ThenIf a > c And b < d ThenElsem = -1End IfEnd IfIf Option4.Value = True ThenIf a < c And b < d Thenm = 1Elsem = -1End IfEnd Ifyi = yi - 1 'Y方向总步长减1End IfEnd Ifn = n + 1 '累加次数加1form1.CurrentX = 100form1.CurrentY = 600 + n * 200If xi = 0 Or yi = 0 ThenIf xi = 0 And yi <> 0 And f = 0 ThenPrint " " & n & " " & jvx & " " & "停止" & " " & "" & " " & "" & " " & jvy & " " & jry & " " & m & " " & yiGoTo wz2End IfIf xi = 0 And yi <> 0 And f < 0 ThenPrint " " & n & " " & jvx & " " & " " & " " & "" & " " & "" & " " & jvy & " " & jry & " " & m & " " & yiGoTo wz2End IfIf xi <> 0 And yi = 0 And g = 0 ThenPrint " " & n & " " & jvx & " " & jrx & " " & k & " " & xi & " " & jvy & " " & "停止"GoTo wz2End IfIf xi <> 0 And yi = 0 And g < 0 ThenPrint " " & n & " " & jvx & " " & jrx & " " & k & " " & xi & " " & jvyGoTo wz2End IfIf xi = 0 And yi = 0 And f = 1 And g < 0 ThenPrint " " & n & " " & jvx & " " & jry & " " & k & " " & xi & " " & jvyGoTo wz2End IfIf xi = 0 And yi = 0 And f < 0 And g = 1 ThenPrint " " & n & " " & jvx & " " & " " & " " & "" & " " & "" & " " & jvy & " " & jry & " " & m & " " & yiGoTo wz2End IfIf xi = 0 And yi = 0 And f = 0 And g = 0 ThenPrint " " & n & " " & jvx & " " & "停止" & " " & "" & " " & "" & " " & jvy & " " & "停止"GoTo wz2End IfIf xi = 0 And yi = 0 And f = 0 And g < 0 ThenPrint " " & n & " " & jvx & " " & "停止" & " " & k & " " & xi & " " & jvy & " "GoTo wz2End IfIf xi = 0 And yi = 0 And f < 0 And g = 0 ThenPrint " " & n & " " & jvx & " " & " " & " " & "" & " " & "" & " " & jvy & " " & "停止"GoTo wz2End IfEnd IfPrint " " & n & " " & jvx & " " & jrx & " " & k & " " & xi & " " & jvy & " " & jry & " " & m & " " & yiwz2: If xi = 0 Thenf = f - 1End IfIf yi = 0 Theng = g - 1End IfIf xi = 0 And yi = 0 Thenci = ci - 1If ci = 0 ThenGoTo wz3End IfEnd IfIf Option1.Value = True ThenIf a > c And b < d And k = -1 Thenjvy = jvy - 1ElseIf a > c And b < d And m = 1 Thenjvx = jvx + 1ElseIf a < c And b > d And k = 1 Thenjvy = jvy + 1ElseIf a < c And b > d And m = -1 Thenjvx = jvx - 1End IfEnd IfIf Option2.Value = True ThenIf a > c And b > d And k = -1 Thenjvy = jvy + 1ElseIf a > c And b > d And m = -1 Thenjvx = jvx - 1ElseIf a < c And b < d And k = 1 Thenjvy = jvy - 1ElseIf a < c And b < d And m = 1 Thenjvx = jvx + 1End IfEnd IfIf Option3.Value = True ThenIf a > c And b < d And k = -1 Thenjvy = jvy + 1ElseIf a > c And b < d And m = 1 Thenjvx = jvx - 1ElseIf a < c And b > d And k = 1 Thenjvy = jvy - 1ElseIf a < c And b > d And m = -1 Thenjvx = jvx + 1End IfEnd IfIf Option4.Value = True ThenIf a > c And b > d And k = -1 Thenjvy = jvy - 1ElseIf a > c And b > d And m = -1 Thenjvx = jvx + 1ElseIf a < c And b < d And k = 1 Thenjvy = jvy + 1ElseIf a < c And b < d And m = 1 Thenjvx = jvx - 1End IfEnd IfPicture1.Line (4500 + 300 * ai, 4500 - bi * 300)-(4500 + 300 * (ai + k), 4500 - (bi + m) * 300) ai = ai + kbi = bi + mGoTo wzww3: Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text1.SetFocusww5: form1.Clsans = MsgBox("出错了,寄存器位数偏小,请输入", 48, "提示信息") Text5.Text = ""Text5.SetFocusww4:wz3:End SubPrivate Sub 清除_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Option1.Value = FalseOption2.Value = FalseOption3.Value = FalseOption4.Value = FalsePicture1.Clsform2.ClsEnd SubPrivate Sub 退出_Click()EndEnd Sub七、软件运行效果仿真1 进入2 第三象限3第二象限4 第四象限5 第一象限及错误提示八、课程小节通过此次课程设计,使我更好的掌握了有关数字积分法一二三四象限顺、逆圆插补计算方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考和询问,终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。