




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机床数控技术课程设计 说明书班级:0506106学号:060610411姓名:王 鹏指导教师:王宏涛时间:2010年1月地点:明故宫校区计算中心目录一、 课程设计要求2二、 DDA法直线插补21. 算法描述22. 变量说明23. 插补流程图24. 实现情况4三、 逐点比较法圆弧插补41. 算法描述42. 变量说明43. 插补流程图44. 实现情况6四、 程序界面6五、 总结与体会7六、 附录程序源代码7七、 参考文献23一、 课程设计要求1. DDA法插补第二象限直线;2. 逐点比较法插补34象限逆圆弧;3. 具有数据输入界面,如起点、终点、圆心、半径及插补步长等;4. 具有插补过程的动态显示功能,如单步插补、连续插补;5. 插补的步长可调;6. 编程语言任选;7. 详细程序设计流程图;8. 变量说明、源程序;二、 DDA法直线插补1. 算法描述利用数字积分原理,将函数积分运算变成对变量的求和运算。设置一个累加器和一个被积函数寄存器。插补开始前,累加器清零,被积函数寄存器分别寄存xe和ye;插补开始后,每来一个累加脉冲,被积函数寄存器里的坐标值在相应的累加器中累加一次,累加后的溢出作为相应坐标轴的进给脉冲,而余数仍寄存在累加器中;当脉冲源发出的累加脉冲数恰好等于被积函数的容量时,溢出的脉冲数等于以脉冲当量为最小单位的终点坐标,表明到达终点。2. 变量说明Xl0,Yl0直线起点Xle,Yle直线终点Xl,Yl插补过程中实时坐标点N寄存器位数M累加脉冲当量数Ll插补步长Jvx,Jvy被积函数寄存器Jrx,Jry积分累加器3. 插补流程图25开始初始化Abs(Xle - Xl0)Jvx , Abs(Yle - Yl0)Jvy, 2NM, Jrx ,Jry清零Jrx=Jrx+Jvx Jry=Jry+Jvy右上方左上方左下方右下方Jrx溢出+X向走一步Jry溢出+Y向走一步Jrx溢出-X向走一步Jry溢出+Y向走一步Jrx溢出-X向走一步Jry溢出-Y向走一步Jrx溢出+X向走一步Jry溢出-Y向走一步M-1MM=0YN结束YYYYYYYYNNNNNNNN4. 实现情况本程序是DDA法的直线插补程序,不仅实现了第三象限的插补,同时可以实现所有象限(包括跨象限的情况)的直线插补过程。实现过程中,积分累加器溢出时,判断直线走向,进而确定坐标轴的进给方向。可实现步长的更改。通过减少进给脉冲的大小,同时累加次数同比例增大,实现步长的调整。5. 程序源代码见附录三、 逐点比较法圆弧插补1. 算法描述算法的基本原理是每次向坐标轴输出一个进给脉冲,每走一步,都要讲瞬时坐标与理论坐标相比较,判断实际坐标与理论坐标的偏移位置,通过偏差函数计算二者的偏差,从而决定下一步的进给方向。每进给一步都要完成偏差判别、坐标进给、偏差计算和终点判别。2. 变量说明X,Y圆弧起点Xe,Ye圆弧终点X0,Y0圆心坐标L插补步长F偏差值3. 插补流程图准备F0YNF=F-2Ly+1F=F+2Lx+1Y向-Ly走一步X向Lx走一步到终点距离小于一个步长结束二四象限顺圆、一三象限逆圆一三象限顺圆、二四象限逆圆象限四Lx=LLy=L象限一象限二象限三Lx=-LLy=LLx=-LLy=-LLx=LLy=-LF0YNF=F-2Lx+1F=F+2Ly+1X向-Lx走一步Y向Ly走一步YN4. 实现情况程序最终能实现非整圆的任意象限(包括跨象限),任意圆弧(包括优弧和劣弧)的插补过程。插补方式有起点-终点-圆心和起点-终点-半径两种可选方式。程序对输入过程中可能会出现的错误,如参数输入不完整,参数格式不正确等情况进行处理。具有一定的容错功能。5. 程序源代码见附录四、 程序界面五、 总结与体会本次课设采用Visual Basic6.0作为编程语言。通过几天的编程练习,不仅加深了对两种插补方法的理解,同时也熟练了对编程平台的使用。由于时间仓促,在提高数字积分法插补质量上,如左移规格化方法的使用未能实现。初步设想,该方法的算法实现是判断是否为“规格化数”,若不是,将被积函数寄存器做乘2处理,并继续判断。虽然程序算法不算复杂,但在编程过程中,也遇到了一些障碍。而往往是一些不起眼的小错误,使整个程序无法进行下去。在解决这些小细节上,耗费了不少时间。通过本次课设,加深了对机床数控技术这门课的理解,尤其是在插补进给这方面受益颇丰,对于日后的学习和工作也将大有裨益。六、 附录程序源代码窗体1程序Private Sub Command1_Click() 圆弧连续插补If (cspx.Text = Or cspy.Text = Or cepx.Text = Or cepy.Text = Or sl.Text = ) Then MsgBox 参数输入不完整!, , 提示! GoTo fini1End IfIf (ccx.Text = Or ccy.Text = ) And banjing.Text = ) Then MsgBox 参数输入不完整!, , 提示! GoTo fini1End IfX = cspx.TextY = cspy.TextXe = cepx.TextYe = cepy.TextL = sl.TextF = 0If Option2(0).Value = True Then 选择插补方式:半径?圆心? X0 = ccx.Text Y0 = ccy.Text If (X - X0) 2 + (Y - Y0) 2) (Xe - X0) 2 + (Ye - Y0) 2) Then MsgBox 输入参数无法构成一个圆!请重新输入! GoTo fini1 End If Else R = banjing.Text Call Circle_Center(X, Y, Xe, Ye, R)End IfForm2.Command3.Visible = FalseForm2.Command2.Visible = FalseForm2.ShowForm2.PSet (X, Y)Do XR = X - X0 YR = Y - Y0 If (XR = 0) And (YR = 0) And (Option1(0).Value = True) Then 判断插补轨迹象限及转向 H = 1 Lx = L Ly = L ElseIf (XR = 0) And (Option1(0).Value = True) Then H = 2 Lx = -L Ly = L ElseIf (XR 0) And (YR = 0) And (YR = 0) And (YR = 0) And (Option1(0).Value = False) Then H = 5 Lx = L Ly = L ElseIf (XR = 0) And (Option1(0).Value = False) Then H = 6 Lx = -L Ly = L ElseIf (XR 0) And (YR = 0) And (YR = 0 Then F = F - 2 * Ly * (Y - Y0) + Ly * Ly Y = Y - Ly Else F = F + 2 * Lx * (X - X0) + Lx * Lx X = X + Lx End If Case 2, 4, 5, 7 If F = 0 Then F = F - 2 * Lx * (X - X0) + Lx * Lx X = X - Lx Else F = F + 2 * Ly * (Y - Y0) + Ly * Ly Y = Y + Ly End If End Select Form2.Line -(X, Y)Loop While (X - Xe) 2 + (Y - Ye) 2) = (L 2)fini1: End SubPublic Sub Command2_Click() 圆弧单步插补If (cspx.Text = Or cspy.Text = Or cepx.Text = Or cepy.Text = Or sl.Text = ) Then MsgBox 参数输入不完整!, , 提示! GoTo fini2End IfIf (ccx.Text = Or ccy.Text = ) And banjing.Text = ) Then MsgBox 参数输入不完整!, , 提示! GoTo fini2End If If (X - Xe) 2 + (Y - Ye) 2) (L 2) Or SYM1 = 1 Then X = cspx.Text Y = cspy.Text Xe = cepx.Text Ye = cepy.Text L = sl.Text F = 0If Option2(0).Value = True Then X0 = ccx.Text Y0 = ccy.Text If (X - X0) 2 + (Y - Y0) 2) (Xe - X0) 2 + (Ye - Y0) 2) Then MsgBox 输入参数无法构成一个圆!请重新输入! GoTo fini2 End If Else R = banjing.Text Call Circle_Center(X, Y, Xe, Ye, R)End If Form2.PSet (X, Y) If SYM1 = 1 Then Form2.Show End If SYM1 = SYM1 + 1 End If XR = X - X0 YR = Y - Y0 If (XR = 0) And (YR = 0) And (Option1(0).Value = True) Then H = 1 Lx = L Ly = L ElseIf (XR = 0) And (Option1(0).Value = True) Then H = 2 Lx = -L Ly = L ElseIf (XR 0) And (YR = 0) And (YR = 0) And (YR = 0) And (Option1(0).Value = False) Then H = 5 Lx = L Ly = L ElseIf (XR = 0) And (Option1(0).Value = False) Then H = 6 Lx = -L Ly = L ElseIf (XR 0) And (YR = 0) And (YR = 0 Then F = F - 2 * Ly * (Y - Y0) + Ly * Ly Y = Y - Ly Else F = F + 2 * Lx * (X - X0) + Lx * Lx X = X + Lx End If Case 2, 4, 5, 7 If F = 0 Then F = F - 2 * Lx * (X - X0) + Lx * Lx X = X - Lx Else F = F + 2 * Ly * (Y - Y0) + Ly * Ly Y = Y + Ly End If End Select Form2.Line -(X, Y)fini2: End SubPrivate Sub Command3_Click() 直线连续插补If (lsx.Text = Or lsy.Text = Or lex.Text = Or ley.Text = Or rp.Text = Or Ll.Text = ) Then MsgBox 参数输入不完整!, , 提示! GoTo finiEnd IfXl0 = lsx.TextYl0 = lsy.TextXle = lex.TextYle = ley.TextN = rp.TextLl = Ll.TextM = 2 NJvx = Abs(Xle - Xl0)Jvy = Abs(Yle - Yl0)Xl = Xl0Yl = Yl0Jrx = 0Jry = 0If (Jvx M - 1) Or (Jvy M - 1) Then MsgBox 插补位数设置太小!请重新设置! GoTo finiEnd IfForm3.ShowForm3.Command1.Visible = FalseForm3.Command3.Visible = FalseForm3.PSet (Xl, Yl)For I = Ll To M Step Ll 寄存器累加及溢出判别、坐标进给 Jrx = Jrx + Jvx If Jrx = M Then Jrx = Jrx - M If Xle = Xl0 Then Xl = Xl + Ll Else Xl = Xl - Ll End If End If Jry = Jry + Jvy If Jry = M Then Jry = Jry - M If Yle = Yl0 Then Yl = Yl + Ll Else Yl = Yl - Ll End If End IfForm3.Line -(Xl, Yl)Next Ifini: End SubPublic Sub Command4_Click() 直线单步插补If (lsx.Text = Or lsy.Text = Or lex.Text = Or ley.Text = Or rp.Text = Or Ll.Text = ) Then MsgBox 参数输入不完整!, , 提示! GoTo finiEnd IfIf (SYM2 = 1) Or (I M - 1) Or (Jvy M - 1) Then MsgBox 插补位数设置太小!请重新设置! GoTo fini End If Form3.Show Form3.PSet (Xl, Yl) SYM2 = SYM2 + 1 I = M / LlEnd IfDo Jrx = Jrx + Jvx Xm = Xl Xm用于判断循环结束 If Jrx = M Then Jrx = Jrx - M If Xle = Xl0 Then Xl = Xl + Ll Else Xl = Xl - Ll End If End If Jry = Jry + Jvy Ym = Yl If Jry = M Then Jry = Jry - M If Yle = Yl0 Then Yl = Yl + Ll Else Yl = Yl - Ll End If End If I = I - 1Loop Until (Xl Xm) Or (Yl Ym)Form3.Line -(Xl, Yl)fini: End SubPrivate Sub Form_Load() 打开窗口时参数初始化SYM1 = 1SYM2 = 1End SubPrivate Sub Option2_Click(Index As Integer)Label9.Enabled = TrueLabel10.Enabled = Trueccx.Enabled = Trueccy.Enabled = Truebanjing.Enabled = FalseOption3(0).Enabled = FalseOption3(1).Enabled = FalseEnd SubPrivate Sub Option4_Click()banjing.Enabled = TrueOption3(0).Enabled = TrueOption3(1).Enabled = TrueLabel9.Enabled = FalseLabel10.Enabled = Falseccx.Enabled = Falseccy.Enabled = FalseEnd SubPrivate Sub lsx_Change() 以下判断输入参数的合法性If lsx.Text And lsx.Text - ThenIf Not IsNumeric(lsx.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 lsx.Text = End IfEnd IfEnd SubPrivate Sub lsy_Change()If lsy.Text And lsy.Text - ThenIf Not IsNumeric(lsy.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 lsy.Text = End IfEnd IfEnd SubPrivate Sub lex_Change()If lex.Text And lex.Text - ThenIf Not IsNumeric(lex.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 lex.Text = End IfEnd IfEnd SubPrivate Sub ley_Change()If ley.Text And ley.Text - ThenIf Not IsNumeric(ley.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 ley.Text = End IfEnd IfEnd SubPrivate Sub rp_Change()If rp.Text ThenIf Not IsNumeric(rp.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 rp.Text = End IfEnd IfEnd SubPrivate Sub Text1_Change()If Ll.Text ThenIf Not IsNumeric(Ll.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 Ll.Text = End IfEnd IfEnd SubPrivate Sub cspx_Change()If cspx.Text And cspx.Text - ThenIf Not IsNumeric(cspx.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 cspx.Text = End IfEnd IfEnd SubPrivate Sub cspy_Change()If cspy.Text And cspy.Text - ThenIf Not IsNumeric(cspy.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 cspy.Text = End IfEnd IfEnd SubPrivate Sub cepx_Change()If cepx.Text And cepx.Text - ThenIf Not IsNumeric(cepx.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 cepx.Text = End IfEnd IfEnd SubPrivate Sub cepy_Change()If cepy.Text And cepy.Text - ThenIf Not IsNumeric(cepy.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 cepy.Text = End IfEnd IfEnd SubPrivate Sub ccx_Change()If ccx.Text And ccx.Text - ThenIf Not IsNumeric(ccx.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 ccx.Text = End IfEnd IfEnd SubPrivate Sub ccy_Change()If ccy.Text And ccy.Text - ThenIf Not IsNumeric(ccy.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 ccy.Text = End IfEnd IfEnd SubPrivate Sub banjing_Change()If banjing.Text ThenIf Not IsNumeric(banjing.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 banjing.Text = End IfEnd IfEnd SubPrivate Sub sl_Change()If sl.Text ThenIf Not IsNumeric(sl.Text) Then MsgBox 参数输入不合法!请重新输入!, , 消息框 sl.Text = End IfEnd IfEnd SubPrivate Sub Command5_Click() 退出程序EndEnd Sub窗体2程序Private Sub Command1_Click()Command1.Enabled = FalseF0 = FL0 = LP = XQ = Y 保存点位置X = Form1.cspx.TextY = Form1.cspy.TextXe = Form1.cepx.TextYe = Form1.cepy.TextL = 0.01F = 0If Form1.Option2(0).Value = True Then X0 = Form1.ccx.Text Y0 = Form1.ccy.Text Else Call Circle_Center(X, Y, Xe, Ye, R)End IfForm2.PSet (X, Y)Do XR = X - X0 YR = Y - Y0 If (XR = 0) And (YR = 0) And (Form1.Option1(0).Value = True) Then H = 1 Lx = L Ly = L ElseIf (XR = 0) And (Form1.Option1(0).Value = True) Then H = 2 Lx = -L Ly = L ElseIf (XR 0) And (YR = 0) And (YR = 0) And (YR = 0) And (Form1.Option1(0).Value = False) Then H = 5 Lx = L Ly = L ElseIf (XR = 0) And (Form1.Option1(0).Value = False) Then H = 6 Lx = -L Ly = L ElseIf (XR 0) And (YR = 0) And (YR = 0 Then F = F - 2 * Ly * (Y - Y0) + Ly * Ly Y = Y - Ly Else F = F + 2 * Lx * (X - X0) + Lx * Lx X = X + Lx End If Case 2, 4, 5, 7 If F = 0 Then F = F - 2 * Lx * (X - X0) + Lx * Lx X = X - Lx Else F = F + 2 * Ly * (Y - Y0) + Ly * Ly Y = Y + Ly End If End Select Form2.Line -(X, Y)Loop While (X - Xe) 2 + (Y - Ye) 2) = (L 2)X = PY = QL = L0F = F0PSet (X, Y)End SubPrivate Sub Command2_Click()Form2.ClsCall Form_LoadCommand1.Enabled = TrueSYM1 = 1End SubPrivate Sub Command3_Click() Call Form1.Command2_ClickEnd SubPrivate Sub Form_Load()Form2.Height = Form2.WidthForm2.AutoRedraw = TrueForm2.Scale (-20, 20)-(20, -20)Form2.DrawWidth = 2Line (-20, 0)-(20, 0), vbRedLine (0, -20)-(0, 20), vbRedPSet (0, 0)For I = -20 To 20Line (-0.1, I)-(0, I), vbRedIf I 0 Then CurrentY = CurrentY + 0.1 Else CurrentY = CurrentY End If CurrentX = -1.2 Print (I)NextFor I = -20 To 20Line (I, 0)-(I, -0.1), vbRed CurrentY = -0.2 CurrentX = CurrentX - 0.3 If I 0 Then Print (I) End IfNextEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)SYM1 = 1End SubPrivate Sub Command4_Click()Unload Form2End Sub窗体3程序Private Sub Command1_Click()Call Form1.Command4_ClickEnd SubPrivate Sub Command2_Click()Line (Xl0, Yl0)-(Xle, Yle)Command2.Enabled = FalsePSet (Xl, Yl)End SubPrivate Sub Command3_Click()Form3.ClsCall Form_LoadCommand2.Enabled = TrueSYM2 = 1End SubPrivate Sub Form_Load()Form3.Height = Form3.WidthForm3.AutoRedraw = TrueForm3.Scale (-20, 20)-(20, -20)Form3.DrawWidth = 2Line (-20, 0)-(20, 0), vbRedLine (0, -20)-(0, 20), vbRedPSet (0, 0)For I = -20 To 20Line (-0.1, I)-(0, I), vbRedIf I 0 Then CurrentY = CurrentY + 0.1 Else CurrentY = CurrentY End If CurrentX = -1.2 Print (I)NextFor I = -20 To 20Line (I, 0)-(I, -0.1), vbRed CurrentY = -0.2 CurrentX = CurrentX - 0.3 If I 0 Then Print (I) End IfNextEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)SYM2 = 1End SubPrivate Sub Command4_Click()Unload Form3End Sub公共模块程序Public X As Double, Y As Double, X0 As Double, Y0 As Double, Xe As Double, Ye As Double, L As Double, F As Double, SYM1 As Integer, R As DoublePublic Xl As Double, Yl As Double, Xl0 As Double, Yl0 As Double, Xle As Double, Yle As Double, Jvx As Double, Jvy As Double, Jrx As Double, Jry As Double, M As Do
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论