VB软件_模拟逐点比较法逆圆弧插补的程序设计

合集下载

逐点比较算法圆弧插补

逐点比较算法圆弧插补

XXX学院学生课程设计(论文)题目:逐点比较法圆弧插补的连续轨迹控制设计学生姓名: XXX 学号:2006XXXXXXXX 所在院(系):机电工程学院专业:机械设计制造及其自动化班级: 06机制6班指导教师: XXX 职称:教授2009年12月8 日XXX学院本科学生课程设计任务书题目逐点比较法插补的连续轨迹控制设计(圆弧插补)1、课程设计的目的专业课程综合训练目的是本使学生通过对所学主要专业课的综合应用,基本掌握一般机电控制系统的设计方法及步骤。

综合运用所学的基础知识和技能,进一步提高学生的设计能力,培养学生创新意识和创新能力,提高控制系统分析设计的总体意识和工程实践能力。

2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)设计内容要求:(1)铣床CNC系统硬件原理图及其说明;(2)推导完整的插补公式;(3)设计出插补软件流程图;(4)用高级语言编写插补程序清单;(4)画出插补轨迹模拟图形;(5)将上述内容整理成设计说明书及图纸。

设计结束后提交4000字左右的课程设计论文;包含上述全部内容。

3、主要参考文献[1]、张建民等,《机电一体化系统设计》,北京:高等教育出版社,2002年[2]、赵先仲,《机电系统设计》,北京:机械工业出版社,2004年[3]、吴圣庄,《金属切削机床概论》,北京:机械工业出版社,1993[4]、杨有君,《数控技术》,北京:机械工业出版社,20054、课程设计工作进度计划内容学时总体方案设计8CNC系统硬件设计8插补系统原理及公式设计16插补系统软件设计48软件验证 4绘制所需的各类图及编制技术文件20合计3周指导教师(签字)日期2008年12 月1 日教研室意见:年月日学生(签字):接受任务时间:年月日注:任务书由指导教师填写。

课程设计(论文)指导教师成绩评定表题目名称评分项目分值得分评价内涵工作表现20% 01 学习态度 6 遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。

vb圆弧插补程序(可编辑修改word版)

vb圆弧插补程序(可编辑修改word版)

Private Sub Command1_Click()Const pi = 3.14159265Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 500)-(50, 5500)Picture1.Line (50, 5500)-(6500, 5500)Picture1.Line (80, 600)-(50, 500)Picture1.Line (20, 600)-(50, 500)Picture1.Line (6400, 5450)-(6500, 5500) Picture1.Line (6400, 5550)-(6500, 5500) Picture1.ForeColor = vbRedPicture1.DrawWidth = 3If Int(Text1) = 0 ThenPicture1.Circle (50, 5500), Sqr(Int(Text1) *Int(Text1) + Int(Text2) * Int(Text2)) * 400, , Atn(Int(Text4) / Int(Text3)), pi / 2ElsePicture1.Circle (50, 5500), Sqr(Int(Text1) *Int(Text1) + Int(Text2) * Int(Text2)) * 400, , Atn(Int(Text4) / Int(Text3)), Atn(Int(Text2) /Int(Text1))End IfEnd SubPrivate Sub Command2_Click()Dim k, m, j, l, n, F(20) As Integerm = 0l = Text1.Textk = Text2.TextF(m) = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(Int(Text1) - Int(Text3)) + Abs(Int(Text2) - Int(Text4))Form1.CurrentX = 200Form1.CurrentY = 200 Print "初始:进给方向" & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑= " & jFor n = 1 To jIf F(m) >= 0 And j > 0 Thenm = m + 1k = k - 1F(m) = F(m - 1) - 2 * Abs(k + 1) + 1Picture1.Line (50 + 400 * l, 5500 - k * 400)-(50 + 400 * l, 5500 - (k + 1) * 400)Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " -△y F(" & m & ")= " & F(m) & " " & "x=" & l & " " & "y="; k & " ∑=" & j - nElsel = l + 1m = m + 1Picture1.Line (50 + 400 * l, 5500 - k * 400)-(50 + 400 * (l - 1), 5500 - k * 400)F(m) = F(m - 1) + 2 * Abs(l - 1) + 1Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " +△x F(" & m & ")= " & F(m) & " " & "x="; l & " " & "y="; k & " ∑=" & j - nEnd IfNext nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text3.Text = ""End SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Command1_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (7500, 8500)-(7500, 500)Picture1.Line (7500, 500)-(500, 500)Picture1.Line (7500, 8500)-(7400, 8400)Picture1.Line (7500, 8500)-(7600, 8400)Picture1.Line (500, 500)-(600, 600)Picture1.Line (500, 500)-(600, 400)Picture1.ForeColor = vbRedPicture1.DrawWidth = 5Picture1.Line (7500, 500)-(7500 + 400 *Int(Text3), 500 - 400 * Int(Text4))End SubPrivate Sub Command2_Click()Form1.ClsDim k, m, j, l, n, F(20) As Integerm = 0l = 0k = 0F(m) = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(Int(Text3)) + Abs(Int(Text4))Form1.CurrentX = 200Form1.CurrentY = 200Print "初始:进给方向" & "F(m)=0" & " Xe=" & Int(Text3) & " Ye=" & Int(Text4) & " ∑= " & jFor n = 1 To jIf F(m) >= 0 And j > 0 Thenm = m + 1l = l - 1F(m) = F(m - 1) - Abs(Int(Text4))Picture1.Line (7500 + 400 * (l + 1), 500 - k * 400)-(7500 + 400 * (l), 500 - k * 400)Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " △x F(" & m & ")= " & F(m) & " " & "x=" & l & " " & "y="; k & " ∑=" & j - nElsek = k - 1m = m + 1Picture1.Line (7500 + 400 * l, 500 - (k + 1) * 400)-(7500 + 400 * l, 500 - k * 400)F(m) = F(m - 1) + Abs(Int(Text3))Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " △y F(" & m & ")= " & F(m) & " " & "x="; l & " " & "y="; k & " ∑=" & j - nEnd IfNext nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Form_Load()End SubPrivate Sub Command1_Click()Const pi = 3.14159265Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 500)-(50, 5500)Picture1.Line (50, 5500)-(6500, 5500)Picture1.Line (80, 600)-(50, 500)Picture1.Line (20, 600)-(50, 500)Picture1.Line (6400, 5450)-(6500, 5500) Picture1.Line (6400, 5550)-(6500, 5500) Picture1.ForeColor = vbRedPicture1.DrawWidth = 3Picture1.Line (50, 5500)-(50 + 400 * Int(Text3), 5500 - 400 * Int(Text4))End SubPrivate Sub Command2_Click()Dim k, m, j, l, n, F, G As Integerl = 0 k = 0 F = 0 G = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3n = Int(Text5)j = 2 ^ nm = 2 ^ nForm1.CurrentX = 200Form1.CurrentY = 200Print "累加次数" & "F= F + int (text3)" & "+△X " & " G=G +int(text4)" & " +△Y "; ∑ = " & j"Print " n " & " 0 " & " 0 " & " 0 " & " 0 " & jFor n = 1 To mF = F + Int(Text3)G = G + Int(Text4) If F >= m And G >= m Thenl = l + 1 k = k + 1Picture1.Line (50 + 400 * (l - 1), 5500 - (k - 1) * 400)-(50 + 400 * (l), 5500 - k * 400)F = F - mG = G - mPrint " "; n & " " & F & " " & 1 & " " & G & "j - 1" & 1 & " " & ElseIf F >= m And G < m Thenl = l + 1F = F - mPrint " "; n & " " & F & " " & 1 & " " & G & "j - 1" & 0 & " " &Picture1.Line (50 + 400 * (l - 1), 5500 - k * 400)-(50 + 400 * (l), 5500 - k * 400)ElseIf F < m And G >= m Thenk = k + 1 G = G - mPicture1.Line (50 + 400 * l, 5500 - (k - 1) * 400)-(50 + 400 * (l), 5500 - k * 400)Print " "; n & " " & F & " " & 0 & " " & G & " " & 1 & " " & j - 1ElseIf F < m And G < m ThenPrint " "; n & " " & F & " " & 0 & " " & G & " " & 0 & " " & j - 1End Ifj = j - 1Next nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command4_Click()End End Sub。

实验一 逐点比较法圆弧和直线插补实验

实验一 逐点比较法圆弧和直线插补实验

Y B(xe,ye)
M(xm,ym)
Rm R
A(x0,y0)
O 图3 圆弧插补原理图 X
圆弧插补原理参见上图,对于第一象限逆圆,设圆弧的起点为 A(x0,y0),终点为 B(xe,ye), 圆弧半径为 R。加工点为 M(xm,ym),它与圆心的距离为 Rm,则
(1)偏差计算
Fm
=
Rm2
− R2
=
xm2
p102=p102-p104 p101=p101+1 x-0.1 else p102=p102+p103 p101=p101+1 y0.1
;计算新的偏差值(Fi+1=Fi-ya) ;步数计数器加一 ;X方向进分别是(-0.1 -0.5 -1.0) ;偏差判别(若P102小于0表示刀具在直线下方) ;计算新的偏差值(Fi+1=Fi+xa) ;步数计数器加一 ;Y方向进给分别是(0.1 0.5 1.0)
endif
endwhile
close
(3)根据直线插补编成格式,编写所给圆弧插补程序。 各组的圆弧的插补任务是: u 第一组:圆弧半径 50,第二象限顺圆;
第二组:圆弧半径 50,第二象限逆圆; 第三组:圆弧半径 60,第三象限顺圆; 第四组:圆弧半径 60,第三象限逆圆; 第五组:圆弧半径 70,第四象限顺圆; 第六组:圆弧半径 70,第四象限逆圆; open prog7 clear linear inc p101=0 p102=0 p103=0 p104=50 while(p101!>100) if(p102!<0) y0.5 p101=p101+1 p102=p102-2*p104+1 p104=p104-1 else -x0.5 p101=p101+1 p102=p102-2*p103+1 p103=103-1 endif endwhile close

(完整版)vb圆弧插补程序

(完整版)vb圆弧插补程序

Private Sub Command1_Click()Const pi = 3.14159265Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 500)-(50, 5500)Picture1.Line (50, 5500)-(6500, 5500)Picture1.Line (80, 600)-(50, 500)Picture1.Line (20, 600)-(50, 500)Picture1.Line (6400, 5450)-(6500, 5500) Picture1.Line (6400, 5550)-(6500, 5500) Picture1.ForeColor = vbRedPicture1.DrawWidth = 3If Int(Text1) = 0 ThenPicture1.Circle (50, 5500), Sqr(Int(Text1) *Int(Text1) + Int(Text2) * Int(Text2)) * 400, , Atn(Int(Text4) / Int(Text3)), pi / 2ElsePicture1.Circle (50, 5500), Sqr(Int(Text1) *Int(Text1) + Int(Text2) * Int(Text2)) * 400, , Atn(Int(Text4) / Int(Text3)), Atn(Int(Text2) /Int(Text1))End IfEnd SubPrivate Sub Command2_Click()Dim k, m, j, l, n, F(20) As Integerm = 0l = Text1.Textk = Text2.TextF(m) = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(Int(Text1) - Int(Text3)) + Abs(Int(Text2) - Int(Text4))Form1.CurrentX = 200Form1.CurrentY = 200 Print "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 And j > 0 Thenm = m + 1k = k - 1F(m) = F(m - 1) - 2 * Abs(k + 1) + 1Picture1.Line (50 + 400 * l, 5500 - k * 400)-(50 + 400 * l, 5500 - (k + 1) * 400)Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " -△y F(" & m & ")= " & F(m) & " " & "x=" & l & " " & "y="; k & " ∑=" & j - nElsel = l + 1m = m + 1Picture1.Line (50 + 400 * l, 5500 - k * 400)-(50 + 400 * (l - 1), 5500 - k * 400)F(m) = F(m - 1) + 2 * Abs(l - 1) + 1Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " +△x F(" & m & ")= " & F(m) & " " & "x="; l & " " & "y="; k & " ∑=" & j - nEnd IfNext nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text3.Text = ""End SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Command1_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (7500, 8500)-(7500, 500)Picture1.Line (7500, 500)-(500, 500)Picture1.Line (7500, 8500)-(7400, 8400)Picture1.Line (7500, 8500)-(7600, 8400)Picture1.Line (500, 500)-(600, 600)Picture1.Line (500, 500)-(600, 400)Picture1.ForeColor = vbRedPicture1.DrawWidth = 5Picture1.Line (7500, 500)-(7500 + 400 *Int(Text3), 500 - 400 * Int(Text4))End SubPrivate Sub Command2_Click()Form1.ClsDim k, m, j, l, n, F(20) As Integerm = 0l = 0k = 0F(m) = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(Int(Text3)) + Abs(Int(Text4))Form1.CurrentX = 200Form1.CurrentY = 200Print "初始:进给方向 " & "F(m)=0" & " Xe=" & Int(Text3) & " Ye=" & Int(Text4) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 And j > 0 Thenm = m + 1l = l - 1F(m) = F(m - 1) - Abs(Int(Text4)) Picture1.Line (7500 + 400 * (l + 1), 500 - k * 400)-(7500 + 400 * (l), 500 - k * 400)Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " △x F(" & m & ")= "& F(m) & " " & "x=" & l & " " & "y="; k & " ∑=" & j - nElsek = k - 1m = m + 1Picture1.Line (7500 + 400 * l, 500 - (k + 1) * 400)-(7500 + 400 * l, 500 - k * 400)F(m) = F(m - 1) + Abs(Int(Text3))Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " △y F(" & m & ")= " & F(m) & " " & "x="; l & " " & "y="; k & " ∑=" & j - nEnd IfNext nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Form_Load()End SubPrivate Sub Command1_Click()Const pi = 3.14159265Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 500)-(50, 5500)Picture1.Line (50, 5500)-(6500, 5500)Picture1.Line (80, 600)-(50, 500)Picture1.Line (20, 600)-(50, 500)Picture1.Line (6400, 5450)-(6500, 5500)Picture1.Line (6400, 5550)-(6500, 5500)Picture1.ForeColor = vbRedPicture1.DrawWidth = 3Picture1.Line (50, 5500)-(50 + 400 * Int(Text3), 5500 - 400 * Int(Text4))End SubPrivate Sub Command2_Click()Dim k, m, j, l, n, F, G As Integerl = 0 k = 0 F = 0 G = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3n = Int(Text5)j = 2 ^ nm = 2 ^ nForm1.CurrentX = 200Form1.CurrentY = 200Print "累加次数 " & "F= F + int (text3)" & " +△X " & " G=G +int(text4)" & " +△Y "; ∑ = " & j"Print " n " & " 0 " & " 0 " & " 0 " & " 0 " & jFor n = 1 To mF = F + Int(Text3)G = G + Int(Text4) If F >= m And G >= m Thenl = l + 1 k = k + 1Picture1.Line (50 + 400 * (l - 1), 5500 - (k - 1) * 400)-(50 + 400 * (l), 5500 - k * 400)F = F - mG = G - mPrint " "; n & " " & F & " " & 1 & " " & G & " " & 1 & " " & j - 1ElseIf F >= m And G < m Thenl = l + 1F = F - mPrint " "; n & " " & F & " " & 1 & " " & G & " " & 0 & " " & j - 1Picture1.Line (50 + 400 * (l - 1), 5500 - k * 400)-(50 + 400 * (l), 5500 - k * 400)ElseIf F < m And G >= m Thenk = k + 1 G = G - mPicture1.Line (50 + 400 * l, 5500 - (k - 1) * 400)-(50 + 400 * (l), 5500 - k * 400)Print " "; n & " " & F & " " & 0 & " " & G & " " & 1 & " " & j - 1ElseIf F < m And G < m ThenPrint " "; n & " " & F & " " & 0 & " " & G & " " & 0 & " " & j - 1End Ifj = j - 1Next nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command4_Click()End End Sub。

逐点比较法圆弧插补

逐点比较法圆弧插补

逐点比较法圆弧插补逐点比较法圆弧插补过程与直线插补过程类似,每进给一步也都要完成四个工作节拍:偏差判别、坐标进给、偏差计算、终点判别。

但是,逐点比较法圆弧插补以加工点距圆心的距离大于还是小于圆弧半径来作为偏差判别的依据。

如图5-7所示的圆弧AB,其圆心位于原点O(0,0),半径为R,令加工点的坐标为P(xi,yj),则逐点比较法圆弧插补的偏差判别函数为当F=0时,加工点在圆弧上;当F>0时,加工点在圆弧外;当F<0时,加工点在圆弧内。

同插补直线时一样,将Fi,j=0同Fi,j>0归于一类。

下面以第一象限圆弧为例,分别介绍顺时针圆弧和逆时针圆弧插补时的偏差计算和坐标进给情况。

1.插补第一象限逆圆弧1)当Fi,j≥0时,加工点P(xi,yj)在圆弧上或圆弧外,-X方向进给一个脉冲当量,即向趋近圆弧的圆内方向进给,到达新的加工点Pi-1,j,此时xi -1=xi-1,则新加工点Pi-1,j的偏差判别函数Fi-1,j为(2)当Fi,j<0时,加工点P(xi,yj)在圆弧内,+Y方向进给一个脉冲当量,即向趋近圆弧的圆外方向进给,到达新的加工点Pi,j+1,此时yj+1=yj+1,则新加工点Pi,j+1的偏差判别函数Fi,j+12.插补第一象限顺圆弧1)当Fi,j≥0时,加工点P(xi,yj)在圆弧上或圆弧外,-Y方向进给一个脉冲当量,即向趋近圆弧的圆内方向进给,到达新的加工点Pi,,j-1,此时yj-1=yj-1,则新加工点Pi,j-1的偏差判别函数Fi,j-1为2)当Fi,j<0时,加工点P(xi,yj)在圆弧内,+X方向进给一个脉冲当量,即向趋近圆弧的圆外方向进给,到达新的加工点Pi+1,j,此时xi+1=xi +1,则新加工点Pi+1,j的偏差判别函数为Fi+1,j由以上分析可知,新加工点的偏差是由前一个加工点的偏差Fi,j及前一点的坐标值xi、yj递推出来的,如果按式(5-6)、(5-7)、(5-8)、(5-9)计算偏差,则计算大为简化。

逐点比较法插补程序程序设计与运行模拟

逐点比较法插补程序程序设计与运行模拟

大连民族学院本科毕业设计(论文)逐点比较法插补程序程序设计与运行模拟学院(系):机电信息工程学院_____专业:机械设计制造及其自动化__学生姓名: _________学号: 200902220 _________指导教师: _________评阅教师:_________________________完成日期:_________________________大连民族学院摘要在数控编程时,一般仅提供描述该线形所必须的相关参数,但为了满足几何零件尺寸精度要求,必须在刀具(或工件)运动过程中实时计算出满足线形和进给速度要求的在起点和终点之间的若干中间点,所以就有了插补。

本设计主要阐述了逐点比较法的基本原理,在四个象限直线、圆弧插补的插补原理以及如何实现。

重点研究了逐点比较法的基本算法,控制程序的原理框图,对逐点比较法做了详细的研究,掌握基本的G代码的内容与运用,编写插补程序,并且基于vb平台演示插补过程。

从调试结果来看,本文所提供的运算与编程能够通过简洁的“输入/输出”界面,较好的实现了计算机屏幕模拟。

关键词:简易数控;逐点比较法插补;G代码;VB;计算机屏幕模拟AbstractBy-point comparison interpolation program design and run the simulationprogramIn NC programming, generally only provide a description of the relevant parameters necessary for linear, but in order to meet the accuracy requirements of the geometric part size must be in the tool (or workpiece) during exercise to meet the real-time calculation and linear feed rate required at the start and some intermediate point between the endpoints, so there will be interpolated.The design is mainly explained by-point comparison of the basic principles in the four quadrants linear and circular interpolation interpolation theory and how to implement. Focus on a point by point comparison of the basic algorithm, a block diagram of the control program, right by-point comparison method to do a detailed study and master the basic content and the use of G-code, write interpolation procedures, and is based on interpolation vb platform demo process.From the debugging results, provided herein computing and programming through simple "input / output" interface, to achieve a better simulation of the computer screenKeywords:Simple numerical control; interpolation point by point comparison;G code;VB;Computer simulation on the screen目录摘要 (I)ABSTRACT (II)目录 (III)1 绪论................................................................................................................................ - 1 -1.1课题的背景 (1)1.2课题的主要研究内容 (3)1.3课题的研究方案 (3)2 数控加工基本原理............................................................................................................ - 4 -2.1概述 (4)2.2数控编程内容 (4)2.3逐点比较法直线插补原理 (5)2.3.1偏差计算公式............................................................................................... - 6 -2.3.2插补计算过程............................................................................................... - 6 -2.3.3终点判别....................................................................................................... - 6 -2.3.4不同象限的直线插补计算........................................................................... - 7 -2.4逐点比较法圆弧插补原理 (7)2.4.1偏差计算公式............................................................................................... - 7 -2.4.2终点判别法................................................................................................... - 8 -2.5VB基本原理 (8)3 逐点比较法总体方案设计.............................................................................................. - 10 -3.1程序设计简介 (10)3.2逐点比较法直线插补框图 (11)3.3逐点比较法圆弧插补框图 (12)4 逐点比较法方案的程序设计.......................................................................................... - 14 -4.1逐点比较法直线插补运算 (14)4.2逐点比较法圆弧插补运算 (14)4.3准备功能G代码 (16)4.4插补界面设计 (16)5 VB调试............................................................................................................................. - 17 -5.1直线插补VB调试 (17)5.2圆弧插补VB调试 (17)参考文献.............................................................................................................................. - 20 -附录A 直线和圆弧插补象限区分程序............................................................................. - 21 -致谢.............................................................................................................................. - 28 -1 绪论1.1课题的背景数字控制简称数控,是由数字指令控制对象的一种自动控制技术。

插补原理vb程序

插补原理vb程序
Interpolation
第二章 插补原理
——轮廓加工的数学基础
Numerical Control
Date: File:
2006-04 interpolation.1
MECHINCAL ENGINEERING, TUST
Interpolation
数控二维工作台
y 0,0
x
Numerical Control
语法 object.Scale (x1, y1) - (x2, y2) (x1, y1)左上角的水平(x-轴)和垂直(y-轴)坐标。 左上角的水平( 轴 和垂直( 轴 坐标。 左上角的水平 (x2, y2)右下角的水平(x-轴)和垂直(y-轴)坐标。 右下角的水平( 轴 和垂直( 轴 坐标。 右下角的水平
2.1 Cls 方法 清除运行时 所生成的图形和文本。 清除运行时 PictureBox 所生成的图形和文本。 语法 object.Cls 2.2 Line 方法 在对象上画直线和矩形。 在对象上画直线和矩形。 语法 object.Line [Step] (x1, 1) [Step] (x2, y2), [color], [B][F]
建立VB程序的第一步是创见界面, 建立 程序的第一步是创见界面,它是用户与应用程序进行 程序的第一步是创见界面 交互操作的可视部分。 交互操作的可视部分。 窗体和控件是创见界面的基本构造模块。 窗体和控件是创见界面的基本构造模块。也是创见应用程序 是创见界面的基本构造模块 所使用的对象。 所使用的对象。 窗体是一种对象,控件是包含在窗体对象内的对象。它们均 窗体是一种对象,控件是包含在窗体对象内的对象。 对象 对象 是具有自己属性 方法和事件的对象 由属性定义其外关, 属性、 的对象。 是具有自己属性、方法和事件的对象。由属性定义其外关, 由方法定义其行为,由事件定义其与用户的交互。 由方法定义其行为,由事件定义其与用户的交互。

#VB软件_模拟逐点比较法逆圆弧插补的程序设计

#VB软件_模拟逐点比较法逆圆弧插补的程序设计

宿迁学院课程设计说明书设计题目:基于VB数字积分法一、二象限逆圆插补计算与仿真系(部):机电工程系专业:自动化(数控技术)班级:09数控本(2)姓名:李伟学号:200907052指导老师(签名):刘萍起止时间:20 12年12月3 日至20 12年12月7 日共 1 周20 12 年12 月6 日正文:数控原理与系统课程设计说明书一、课程设计的目的1)了解连续轨迹控制数控系统的组成原理。

2) 掌握逐点比较法插补的基本原理。

3)握逐点比较法插补的软件实现方法。

二.课程设计的任务逐点比较法插补是最简单的脉冲增量式插补算法之一,其过程清晰,速度平稳,但一般只用于一个平面内两个坐标轴的插补运算。

其基本原理是在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀具向减小偏差的方向进给,且只有一个方向的进给。

也就是说,逐点比较法每一步均要比较加工点瞬时坐标与规定零件轮廓之间的距离,依此决定下一步的走向。

如果加工点走到轮廓外面去了,则下一步要朝着轮廓内部走;如果加工点处在轮廓的内部,则下一步要向轮廓外面走,以缩小偏差,这样周而复始,直至全部结束,从而获得一个非常接近于数控加工程序规定轮廓的轨迹。

逐点比较法插补过程中的每进给一步都要经过偏差判别、坐标进给、偏差计算和终点判别四个节拍的处理,其工作流程图如图所示。

三.逐点比较法基本原理逐点比较法I 象限逆圆插补在加工圆弧过程中,人们很容易联想到使用动点到圆心的距离与该圆弧的名义半径进行比较来反映加工偏差。

假设被加工零件的轮廓为第Ⅰ象限逆走向圆弧SE ,,圆心在O (0,0),半径为R ,起点为S (XS ,YS ),终点为E (Xe ,Ye ),圆弧上任意加工动点为N (Xi ,Yi )。

当比较该加工动点到圆心的距离ON 与圆弧半径R 的大小时,可获得刀具与圆弧轮廓之间的相对位置关系。

当动点N (Xi ,Yi )正好落在圆弧上时,则有下式成立22222R Y X Y X e e i i =+=+当动点N (Xi ,Yi )落在圆弧外侧时,则有下式成立22222R Y X Y X e e i i =+>+当动点N (Xi ,Yi )落在圆弧内侧时,则有下式成立22222R Y X Y X e e i i =+<+由此可见,取逐点比较法圆弧插补的偏差函数表达式为222R Y X F i i -+=当动点落在圆外时,为了减小加工误差,应向圆内进给,即向(-X)轴方向走一步;当动点落在圆内时,应向圆外进给,即向(+Y)轴方向走一步。

基于vb的直线插补与圆弧插补实验

基于vb的直线插补与圆弧插补实验

主界面面板逐点比较圆弧插补程序如下:Private Sub Command1_Click()Xe = Val(Text1.Text)Ye = Val(Text2.Text)Picture1.Scale (-20, 20)-(20, -20)Picture1.ClsPicture1.Line (-20, 0)-(20, 0), vbBluePicture1.Line (19, 1)-(20, 0), vbbiuePicture1.Line -(19, -1), vbBluePicture1.Print "X"Picture1.Line (0, -20)-(0, 20), vbBluePicture1.Line (1, 19)-(0, 20), vbBluePicture1.Line -(-1, 19), vbBluePicture1.Print "Y"Picture1.Line (0, 0)-(Xe, Ye), vbBluePicture1.Print "("; Xe; ","; Ye; ")"If Text1.Text = none Or Text2.Text = none Then MsgBox "请输入加工终点坐标值。

"Text3.Text = 0Text4.Text = 0Text5.Text = 0End SubPrivate Sub Command2_Click()Dim sum As IntegerXe = Val(Text1.Text)Ye = Val(Text2.Text)Xm = Val(Text3.Text)Ym = Val(Text4.Text)m = Val(Text5.Text)sum = Xe * Ym - Xm * Ye'第一象限开始If Xe > 0 And Ye > 0 And sum >= 0 Then Picture1.Line (Xm, Ym)-(Xm + 1, Ym), vbRed: Text3.Text = Xm + 1If Xe > 0 And Ye > 0 And sum < 0 Then Picture1.Line (Xm, Ym)-(Xm, Ym + 1), vbRed: Text4.Text = Ym + 1If Abs(Xm) + Abs(Ym) >= Abs(Xe) + Abs(Ye) - 1 Then MsgBox "加工完毕!"'第二象限开始If Xe < 0 And Ye > 0 And sum >= 0 Then Picture1.Line (Xm, Ym)-(Xm, Ym + 1), vbRed: Text4.Text = Ym + 1If Xe < 0 And Ye > 0 And sum < 0 Then Picture1.Line (Xm, Ym)-(Xm - 1, Ym), vbRed: Text3.Text = Xm - 1If Abs(Xm) + Abs(Ym) >= Abs(Xe) + Abs(Ye) + 1 Then MsgBox "加工完毕!"'第三象限开始If Xe < 0 And Ye < 0 And sum >= 0 Then Picture1.Line (Xm, Ym)-(Xm - 1, Ym), vbRed:Text3.Text = Xm - 1If Xe < 0 And Ye < 0 And sum < 0 Then Picture1.Line (Xm, Ym)-(Xm, Ym - 1), vbRed: Text4.Text = Ym - 1If Abs(Xm) + Abs(Ym) >= Abs(Xe) + Abs(Ye) Then MsgBox "加工完毕!"'第四象限开始If Xe > 0 And Ye < 0 And sum >= 0 Then Picture1.Line (Xm, Ym)-(Xm, Ym - 1), vbRed: Text4.Text = Ym - 1If Xe > 0 And Ye < 0 And sum < 0 Then Picture1.Line (Xm, Ym)-(Xm + 1, Ym), vbRed: Text3.Text = Xm + 1If Abs(Xm) + Abs(Ym) >= Abs(Xe) + Abs(Ye) Then MsgBox "加工完毕!"Text5.Text = Abs(Val(Text3.Text)) + Abs(Val(Text4.Text))End SubPrivate Sub Command3_Click()Form2.HideForm1.ShowEnd Sub数字积分器法圆弧插补程序如下:Private Sub Command1_Click()Xe = Val(Text1.Text)Ye = Val(Text2.Text)Picture1.Scale (-20, 20)-(20, -20)Picture1.ClsPicture1.Line (-20, 0)-(20, 0), vbBluePicture1.Line (19, 1)-(20, 0), vbbiuePicture1.Line -(19, -1), vbBluePicture1.Print "X"Picture1.Line (0, -20)-(0, 20), vbBluePicture1.Line (1, 19)-(0, 20), vbBluePicture1.Line -(-1, 19), vbBluePicture1.Print "Y"Picture1.Line (0, 0)-(Xe, Ye), vbBluePicture1.Print "("; Xe; ","; Ye; ")"Text3.Text = 0Text4.Text = 0Text5.Text = 0Text6.Text = 0Text7.Text = 0End SubPrivate Sub Command2_Click()Xe = Val(Text1.Text)Ye = Val(Text2.Text)ax = V al(Text3.Text)ay = Val(Text4.Text)n = Val(Text7.Text)Xm = Val(Text5.Text)Ym = Val(Text6.Text)If Text1.Text = none Or Text2.Text = none Then MsgBox "请输入加工终点坐标值。

数控插补的VB实现

数控插补的VB实现

第24卷第4期2006年7月北京工商大学学报(自然科学版)Journal of Beijing Techno logy and Business U niversity (N atural Science Editi on )V o l 124N o 14Ju l .2006 文章编号:167121513(2006)0420019204数控插补的VB 实现聂学俊, 高 峰(北京工商大学机械自动化学院,北京 100037)摘 要:插补算法是数控系统控制软件的核心Λ介绍了利用V isual B asic 610编程,对插补算法执行结果进行动态仿真的方法Λ关键词:插补;V isual B asic 610;仿真中图分类号:TH 164;T P 273 文献标识码:A 收稿日期:20060328作者简介:聂学俊(1965-),女,湖南湘乡人,副教授,硕士,主要从事CAD CAM 的教学和研究工作Ζ 在数控系统中,插补的任务是根据数控机床进给速度的要求,在被加工零件轮廓的起点和终点之间计算出若干个中间点的坐标值Ζ由于每个中间点计算所需的时间直接影响数控系统的控制速度,而插补中间点的计算精度又影响到整个数控系统的精度,所以插补算法对整个数控系统的性能指标至关重要,可以说插补是整个数控系统控制软件的核心[1]Ζ目前常用的插补算法有脉冲增量插补和数据采样插补Ζ为了分析各种插补方法的性能好坏,本文以脉冲增量插补中的算法之一——逐点比较法为例,利用可视化对象语言V isual B asic 610进行编程,将插补执行结果在屏幕上动态仿真显示出来,直接观察插补结果Ζ1 插补方法——逐点比较法简介逐点比较法的基本思想是被控制对象在数控系统的控制下,按要求的轨迹运动时,每走一步都要和规定的轨迹比较,根据比较的结果决定下一步移动的方向Ζ其插补步骤分为4步:偏差判别、坐标进给、偏差计算和终点判别Ζ111 逐点比较法直线插补的偏差计算如图1,被加工直线轮廓为OA ,P 点代表加工过程中的动点Ζ根据P 点与被加工直线轮廓OA 的位置关系,得到偏差函数为:F =X e Y i -X i Y e(1)式(1)中,X e 、Y e 为被加工轮廓的终点坐标;X i 、Y i 为加工动点P 的坐标,F 为偏差Ζ图1 逐点比较法直线一象限插补112 逐点比较法圆弧插补的偏差计算如图2,被加工逆圆弧轮廓为A B ,P 点代表加工过程中的动点Ζ根据P 点与被加工逆圆弧轮廓A B 的位置关系,得到偏差函数为:F =X 2i +Y 2i -R 2(2)式(2)中,X i 、Y i 为加工动点坐标,R 为被加工轮廓A B 的半径,F 为偏差Ζ图2 逐点比较法逆圆弧一象限插补将上述一象限直线和逆圆弧的插补方法推广至914个象限,得到直线和圆弧在不同象限的进给方向和偏差的关系分别如图3和图4Ζ图中,X -Y 为计算机屏幕坐标系,X ′-Y ′为工件坐标系,L 1到L 4和C 1到C 4分别为被加工直线和圆弧的理想轮廓,各箭头方向表示对应的坐标轴插补进给方向Ζ图3 逐点比较法直线插补进给方向和偏差的关系图4 逐点比较法逆圆弧插补进给方向和偏差的关系2 插补算法的VB 实现211 V isua l Ba sic 简介M icro soft V isual B asic 是可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言,是一套完全独立的开发系统,它提供了开发M i 2cro soft W indow s 应用程序的最迅速、最简捷的方法[2]Λ在本程序实现中,应用了V isual B asic 提供的如下对象:fo rm (窗体)、comm and (命令按钮)、tex t (文本框)、p ictu re (图像对象)、label (标签)等及它们的属性和方法Λ212 插补算法的流程图根据图3和图4,可以方便地得到直线和逆圆弧的逐点比较法四象限插补流程图分别如图5和图6Λ图中,x 0、y 0和x e 、y e 分别为被加工轮廓的起点和终点坐标,n 为插补总步数Λ图5 逐点比较法直线四象限插补流程图6 逐点比较法逆圆弧四象限插补流程213 插补算法的VB 实现应用VB 编程,逐点比较法直线插补的程序如下Λ逐点比较法圆弧插补程序的编写与直线插补的程序类似,不再赘述ΛP rivate Sub Comm and 1-C lick () ’逐点比较法直线插补D i m x e ,y e ,n ,i A s In teger D i m f ,q ,x ,y A s In tegerCall Comm and 3-C lick ’画坐标系x e =In t (V al (T ex t 1.T ex t )) ’输入直线的终点坐标,画直线y e =In t (V al (T ex t 2.T ex t ))2北京工商大学学报(自然科学版)2006年7月 P ictu re1.D rawW idth=1P ictu re1.L ine(0,0)-(x e,y e),vbR edP ictu re1.Cu rren tX=0P ictu re1.Cu rren tY=0If(x e>=0)A nd(y e>=0)T hen ’判断象限 q=1E lse If(x e<0)A nd(y e>=0)T hen q=2E lse If(x e<=0)A nd(y e<0)T hen q=3E lse q=4End Ifn=In t(A b s(x e)+A b s(y e)) ’确定插补次数f=0Fo r i=1To n ’插补开始’ If f>=0T hen ’X方向进给 select case q case1 x=x+1 P ictu re1.L ine-(x,y),vbB lack Call arrow E(x,y) case2 x=x-1 P ictu re1.L ine-(x,y),vbB lack Call arrow W(x,y) case3 x=x-1 P ictu re1.L ine-(x,y),vbB lack Call arrow W(x,y) case4 x=x+1 P ictu re1.L ine-(x,y),vbB lack Call arrow E(x,y) End select f=f-ab s(y e) else ’Y方向进给 select case q case1 y=y+1 P ictu re1.L ine-(x,y),vbB lack Call arrow N(x,y) case2 y=y+1 P ictu re1.L ine-(x,y),vbB lack Call arrow N(x,y) case3 y=y-1 P ictu re1.L ine-(x,y),vbB lack Call arrow S(x,y) case4 y=y-1 P ictu re1.L ine-(x,y),vbB lack Call arrow S(x,y) End select f=f+ab s(x e) End If N ex t i End Sub逐点比较法直线插补和逆圆弧插补的执行结果分别如图7和图8Λ图7 逐点比较法直线四象限插补结果图8 逐点比较法圆弧四象限插补结果在编写程序时,必须注意几个问题:1)由于计算12 第24卷第4期聂学俊等:数控插补的VB实现机屏幕坐标系和工件坐标系不相一致,故在屏幕上显示插补轨迹时,应注意进给方向和屏幕坐标的转换;2)对于跨越不同象限的圆弧,应考虑插补自动过象限问题Λ3 结论数控插补方法有多种,通过在屏幕上动态显示插补轨迹,可以对比各种插补方法的优劣,对已有的插补方法进行改进和创新,有利于数控插补技术的提高Λ参考文献:[1] 任玉田,焦振学,王宏甫.机床计算机数控技术[M].北京:北京理工大学出版社,1996.[2] 希望图书创作室.V isual Basic610教程[M].北京:北京希望电子出版社,1999.VB REAL IZ ING OF INTERPOLATI ONAL G OR ITH M IN NU M ER I CAL CONTROL S Y STE MN IE Xue2jun, GAO Feng(Colleg e of M echan ica l E ng ineering and A u to m a tion,B eij ing T echnology andB usiness U n iversity,B eij ing100037,Ch ina)Abstract:In terpo lati on algo rithm is a co re of the con tro l softw are in num erical con tro l system.A m ethod si m u lating the in terpo lati on resu lt th rough p rogramm ing u sing the V isual B asic610is in2 troduced.Key words:in terpo lati on;V isual B asic610;si m u lating(责任编辑:檀彩莲) (上接第18页)ANALY SE AND OPTI M U M ON THE STRUCTUREOF TESTING SUPPORT PLATFOR MON ANTENNA PREC ISI ON M EASURE M ENTJ I AO Hong2jie1, ZHAN G Y i2du1, X I AN G H u i2yu2, YAN G Zhao1, RON G Zh i2yang1(11R esea rch Cen ter of P recision T rans m ission T echnology,B eij ing U n iversity of A eronau tics andA stronau tics,B eij ing100083,Ch ina;21Colleg e of M echan ica l E ng ineering and A u to m a tion,B eij ing T echnology and B usiness U n iversity,B eij ing100037,Ch ina)Abstract:It is very i m po rtan t that an tenna target suppo rt structu re and rigidity du ring an tenna p recisi on is m easu red in com p act testing fields.B ased on the p recisi on requ irem en t,u sing sub sec2 ti on design,a novel testing suppo rt p latfo rm w h ich satisfies RCS m easu rem en t requ irem en ts is designed.B esides,structu re disto rti on analysis is carried ou t in detail.F inal,structu re di m en2 si on is calcu lated acco rding to target rigidity w eigh t rati o and to tal m ass m in i m izing m ethod.Key words:an tenna;m easu rem en t;suppo rt p latfo rm;p recisi on(责任编辑:檀彩莲) 22北京工商大学学报(自然科学版)2006年7月 。

DDA直线插补和圆弧插补VB程序

DDA直线插补和圆弧插补VB程序
y = y + p * Di
ElseIf f * Di = 0 Then
If Di = 1 Then
f = f + 2 * y * Di + p
y = y + p
Else
f = f - 2 * x * Di + p
End If
f = f + Abs(xe - x0)
End If
obj.Line -(x, y), vbRed '画折线
n = n - 1
DoEvents
For i = 1 To 2000000 * p
'延时
Next i
Exit Sub
End If
pic.Cls '清屏
axis pic '画坐标轴
p = Val(Combo1.Text) '读取脉冲当量
cmdShow.Enabled = False
If Option1.Value Then '演示直线插补
Text1(2) <> "" And Text1(3) <> "" Then
x1 = Val(Text1(0)): y1 = Val(Text1(1))
x2 = Val(Text1(2)): y2 = Val(Text1(3))
Else
MsgBox "输入坐标不完整!"
Private Sub Text1_Change(Index As Integer)
If Abs(Val(Text1(Index).Text)) > 9 Then

VB软件 模拟逐点比较法逆圆弧插补的程序设计 程序

VB软件 模拟逐点比较法逆圆弧插补的程序设计 程序

五、算法程序Private Sub Command1_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (0, 4000)-(9000, 4000)Picture1.Line (4500, 0)-(4500, 8000)End SubPrivate Sub Command2_Click()Picture1.ForeColor = vbBluePicture1.DrawWidth = 2If Val(Text1.Text) * Val(Text1.Text) + Val(Text2.Text) * Val(Text2.Text) <> Val(Text3.Text) * Val(Text3.Text) + Val(Text4.Text) * Val(Text4.Text) Thenans = MsgBox("出错了,该象限所绘圆弧不以原点为圆心", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""ElseIf Option1.Value = True ThenIf Val(Text1) >= 0 And Val(Text2) >= 0 And Val(Text3) >= 0 And Val(Text4) >= 0 And Val(Text1) >= Val(Text3) Then If Int(Text2) = 0 ThenIf Int(Text3) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 0, 3.14159 / 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text2) / Val(Text1)), 3.14159 / 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseIf Int(Text4) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 0, Atn(Val(Text2) / Val(Text1))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text2) / Val(Text1)), Atn(Val(Text4) / Val(Text3))Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseans = MsgBox("坐标象限错误或预定圆弧将为顺时针", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""End IfElseIf Option4.Value = True ThenIf Val(Text1) >= 0 And Val(Text2) <= 0 And Val(Text3) >= 0 And Val(Text4) <= 0 And Val(Text1) <= Val(Text3) Then If Int(Text2) = 0 ThenIf Val(Text3) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3 * 3.14159 / 2, 0Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text4) / Val(Text3)) + 3.14159 * 2, 0Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseIf Val(Text3) <> 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text2) / Val(Text1)) + 3.14159 * 2, Atn(Val(Text4) / Val(Text3)) + 3.14159 * 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3 * 3.14159 / 2, Atn(Val(Text2) / Val(Text1)) + 3.14159 * 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseans = MsgBox("坐标象限错误或预定圆弧将为顺时针", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""End IfElseIf Option2.Value = True ThenIf Val(Text1) <= 0 And Val(Text2) >= 0 And Val(Text3) <= 0 And Val(Text4) >= 0 And Val(Text1) >= Val(Text3) Then If Int(Text2) = 0 ThenIf Val(Text3) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3.14159 / 2, 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text4) / Val(Text3)) + 3.14159, 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseIf Val(Text3) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3.14159 / 2, Atn(Val(Text4) / Val(Text3)) + 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text2) / Val(Text1)) + 3.14159, Atn(Val(Text4) / Val(Text3)) + 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseans = MsgBox("坐标象限错误或预定圆弧将为顺时针", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""End IfElseIf Option3.Value = True ThenIf Val(Text1) <= 0 And Val(Text2) <= 0 And Val(Text3) <= 0 And Val(Text4) <= 0 And Val(Text1) <= Val(Text3) ThenIf Int(Text1) = 0 ThenIf Int(Text4) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3.14159, 3 * 3.14159 / 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Int(Text4) / Int(Text3)) + 3.14159, 3 * 3.14159 / 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseIf Int(Text4) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3.14159, Atn(Int(Text2) / Int(Text1)) + 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Int(Text2) / Int(Text1)) + 3.14159, Atn(Int(Text4) / Int(Text3)) + 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseans = MsgBox("坐标象限错误或预定圆弧将为顺时针", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""End IfEnd IfEnd IfEnd SubPrivate Sub Command3_Click()If Val(Text1.Text) * Val(Text1.Text) + Val(Text2.Text) * Val(Text2.Text) <> Val(Text3.Text) * Val(Text3.Text) + Val(Text4.Text) * Val(Text4.Text) Thenans = MsgBox("出错了", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""ElseDim k, m, j, l, n, F(20) As IntegerDim a, b, c, d, e As Integerm = 0l = 0k = 0F(m) = 0a = Int(Text1)b = Int(Text2)c = Int(Text3)d = Int(Text4)e = Int(Text6)Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(c - a) + Abs(d - b)Form1.CurrentX = 15000Form1.CurrentY = 200If Option1.Value = True ThenIf Val(Text1) >= 0 And Val(Text2) >= 0 And Val(Text3) >= 0 And Val(Text4) >= 0 And Option1.Value = True ThenPrint "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 Thenm = m + 1k = k + 1F(m) = F(m - 1) - 2 * a + 1Picture1.Line (4500 + Int(Text1) * e - e * (k - 1), 4000 - Int(Text2) * e - l * e)-(4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e - l * e)a = a - 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " -△x F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nElsel = l + 1m = m + 1Picture1.Line (4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e - (l - 1) * e)-(4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e - l * e)F(m) = F(m - 1) + 2 * b + 1b = b + 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " +△y F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nEnd IfNext nElseans = MsgBox("出错", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Form1.ClsEnd IfElseIf Option4.Value = True ThenIf Val(Text1) >= 0 And Val(Text2) <= 0 And Val(Text3) >= 0 And Val(Text4) <= 0 And Option4.Value = True ThenPrint "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 Thenm = m + 1l = l + 1F(m) = F(m - 1) - 2 * Abs(b) + 1Picture1.Line (4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e - (l - 1) * e)-(4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e - l * e)b = b + 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " +△y F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nElsek = k + 1m = m + 1Picture1.Line (4500 + Int(Text1) * e + e * (k - 1), 4000 - Int(Text2) * e - l * e)-(4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e - l * e)F(m) = F(m - 1) + 2 * Abs(a) + 1a = a + 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " +△x F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nEnd IfNext nElseans = MsgBox("出错", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Form1.ClsEnd IfElseIf Option2.Value = True ThenIf Val(Text1) <= 0 And Val(Text2) >= 0 And Val(Text3) <= 0 And Val(Text4) >= 0 And Option2.Value = True ThenPrint "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 Thenm = m + 1l = l + 1F(m) = F(m - 1) - 2 * Abs(b) + 1Picture1.Line (4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e + (l - 1) * e)-(4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e + l * e)b = b - 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " -△y F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nElsek = k + 1m = m + 1Picture1.Line (4500 + Int(Text1) * e - e * (k - 1), 4000 - Int(Text2) * e + l * e)-(4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e + l * e)F(m) = F(m - 1) + 2 * Abs(a) + 1a = a - 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " -△x F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nEnd IfNext nElseans = MsgBox("出错", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Form1.ClsEnd IfElseIf Option3.Value = True ThenIf Val(Text1) <= 0 And Val(Text2) <= 0 And Val(Text3) <= 0 And Val(Text4) <= 0 And Option3.Value = True ThenPrint "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 Thenm = m + 1k = k + 1F(m) = F(m - 1) - 2 * Abs(a) + 1Picture1.Line (4500 + Int(Text1) * e + e * (k - 1), 4000 - Int(Text2) * e + l * e)-(4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e + l * e)a = a + 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " +△x F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - n Elsel = l + 1m = m + 1F(m) = F(m - 1) + 2 * Abs(b) + 1Picture1.Line (4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e + (l - 1) * e)-(4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e + l * e)b = b - 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " -△y F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nEnd IfNext nElseans = MsgBox("出错", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Form1.ClsEnd IfEnd IfEnd IfEnd SubPrivate Sub Command4_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Picture1.ClsForm1.ClsPicture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (0, 4000)-(9000, 4000)Picture1.Line (4500, 0)-(4500, 8000)End SubPrivate Sub Command5_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command6_Click()EndEnd SubPrivate Sub Command7_Click()End Sub。

(二)逐点比较法圆弧插补

(二)逐点比较法圆弧插补

(二)逐点比较法圆弧插补
逐点比较法圆弧插补是数控加工中常用的一种圆弧插补方法,其原理是通过逐点比较给定的圆弧路径与机床实际移动轨迹的差异,不断调整目标点的加工速度和轨迹实现精细的加工。

1.将给定的圆弧路径分割成若干个目标点,通常每隔一定距离取一个目标点。

2.根据目标点之间的距离和已知的转速,计算每个目标点的加工速度。

3.将目标点逐个输入数控系统,根据当前位置和目标点的位置计算运动轨迹和加工速度。

4.在运动过程中不断比较实际轨迹和目标轨迹之间的误差,根据误差大小调整加工速度,保证加工精度。

5.重复步骤3和4,直到完成整个圆弧的加工。

逐点比较法圆弧插补的优点是在加工过程中能够动态地调整加工速度,避免加工误差的累积。

同时,它对系统精度要求不高,能够适应各种数控系统。

不过,逐点比较法圆弧插补的缺点也是比较明显的。

由于每个目标点的加工速度独立计算,导致加工过程中产生了较大的速度变化,容易引起加工表面的纹路和不良的表面质量。

因此,在实际应用中,需要根据加工要求和机床精度选择合适的加工方法,并进行适当的加工优化。

逐点比较法第一象限直线圆弧插补

逐点比较法第一象限直线圆弧插补

逐点比较法第一象限直线,圆弧插补编程逐点比较法是以折线来逼近给定的轨迹,就是每走一步控制系统都要将加工点与给定的图形轨迹相比较,以决定下一步进给的方向,使之逼近加工轨迹。

逐点比较法以折线来逼近直线或圆弧,其最大的偏差不超过一个最小设定单位。

只要将脉冲当量取得足够小,就可以达到精度要求。

逐点比较插补法在脉冲当量为0.01mm,系统进给速度小于3000mm/min时,能很好的满足要求。

一、逐点比较法直线插补如下图所示设直线 oA 为第一象限的直线,起点为坐标原点o (0 , 0) ,终点坐标为, A( ) , P() 为加工点。

若 P 点正好处在直线 oA 上,由相似三角形关系则有即点在直线 oA 上方 ( 严格为直线 oA 与 y 轴正向所包围的区域 ) ,则有即若 P 点在直线 oA 下方 ( 严格为直线 oA 与 x 轴正向所包围的区域 ) ,则有图 3 — 1 逐点比较法第一象限直线插补即令则有:①如,则点 P 在直线 oA 上,既可向 +x 方向进给一步,也可向 +y 方向进给一步;②如,则点 P 在直线 oA 上方,应向 +x 方向进给一步,以逼近oA 直线;③如,则点 P 在直线 oA 下方,应向 +y 方向进给一步,以逼近 oA 直线一般将及视为一类情况,即时,都向 +x 方向进给一步。

当两方向所走的步数与终点坐标相等时,停止插补。

这即逐点比较法直线插补的原理。

对第一象限直线 oA 从起点 ( 即坐标原点 ) 出发,当 F 时, +x 向走一步;当 F<0 时,y 向走一步。

特点:每一步都需计算偏差,这样的计算比较麻烦。

递推的方法计算偏差:每走一步后新的加工点的偏差用前一点的加工偏差递推出来。

采用递推方法,必须知道开始加工点的偏差,而开始加工点正是直线的起点,故。

下面推导其递推公式。

设在加工点 P( ) 处,,则应沿 +x 方向进给一步,此时新加工点的坐标值为新加工点的偏差为即若在加工点 P( ) 处,,则应沿 +y 方向进给一步,此时新加工点的坐标值为,新加工点的偏差为即综上所述,逐点比较法直线插补每走一步都要完成四个步骤 ( 节拍 ) ,即:(1) 位置判别根据偏差值大于零、等于零、小于零确定当前加工点的位置。

VB在逐点比较法直线插补原理中的应用

VB在逐点比较法直线插补原理中的应用

Label2. Visible = False
Text1. Visible = False
Text2. Visible = False
Text3. Visible = False
Text4. Visible = False
x(0) = Val (Text1. Text)
y(0) = Val (Text2. Text)
SHI Minchnical College , Lianyungang 222006 , China)
Abstract : Comparison teat point by point - straight line plugging is a typical plugging method in processing of numerical control , manufacturing parts by controlling error function between the position the cutting tool moves to and the perfect position. VB program is simple and visual , which can visualize the programming and processing of comparison test point by point - straight line plugging principle. Key Words : plugging ; comparison test point by point ; error function
End If ElseIf (x(0) > = 0) And (y(0) < = 0) And (xa > = 0) And (ya < = 0) Then If f (i) > = 0 Then For j = y(i) To y(i) - 1 Step - 0. 0001 PSet (x(i) , j) Next j y(i + 1) = y(i) - 1 x(i + 1) = x(i) f (i + 1) = f (i) - Abs(xa) Else For j = x(i) To x(i) + 1 Step 0. 0001 PSet (j , y(i) ) Next j x(i + 1) = x(i) + 1 y(i + 1) = y(i) f (i + 1) = f (i) + Abs(ya) End If End If Next i End Sub Private Sub Command2- Click() End End Sub 3 结束语 本文提出了一种用计算机来模拟数控插补的方法 ,在充 分利用 VB 设计语言简单 、直观的基础上 ,使数控插补原理的 实现更为形象化 。

数控原理VB圆弧接圆弧课程设计

数控原理VB圆弧接圆弧课程设计

四、调试分析1.缩短型2.伸长型3.插入型附录:程序如下:Option ExplicitDim X0 As Single '圆弧三点坐标Dim Y0 As SingleDim X1 As SingleDim Y1 As SingleDim X2 As SingleDim Y2 As SingleDim I1 As Single ' 两个圆心相对圆弧起点坐标Dim J1 As SingleDim I2 As SingleDim J2 As SingleDim R1 As Single '两个圆弧半径Dim R2 As SingleDim r As Single '刀具半径Dim OX1 As Single '两圆心实际坐标Dim OY1 As SingleDim OX2 As SingleDim OY2 As SingleDim Xx1 As SingleDim Yy1 As SingleDim Start1 As Single '第一段圆弧起始弧度Dim End1 As Single '第一段圆弧结束弧度Dim Start2 As Single '第二段圆弧起始弧度Dim End2 As Single '第二段圆弧结束弧度Const Pi = 3.1415926Private Sub Command1_Click()Picture1.Cls '清除picturebox控件中的内容Picture1.DrawWidth = 1X0 = Val(Split(Text1.Text, ",")(0)) '将文本框中的文本从逗号分离并转化成数值Y0 = Val(Split(Text1.Text, ",")(1))X1 = Val(Split(Text2.Text, ",")(0))Y1 = Val(Split(Text2.Text, ",")(1))X2 = Val(Split(Text3.Text, ",")(0))Y2 = Val(Split(Text3.Text, ",")(1))I1 = Val(Itext1.Text) '取圆心相对圆弧起点坐标J1 = Val(Jtext1.Text)I2 = Val(Itext2.Text)J2 = Val(Jtext2.Text)R1 = Sqr(I1 * I1 + J1 * J1) '计算第一段圆弧半径If Not Option1.Value Then R1 = -R1 '通过确定顺圆逆圆判断半径符号R2 = Sqr(I2 * I2 + J2 * J2) '计算第二段圆弧半径If Not Option3.Value Then R2 = -R2 '通过确定顺圆逆圆判断半径符号r = Val(rText.Text) '取刀具半径If Not Option5.Value Then r = -r '通过确定左刀补右刀补判断刀具半径符号'=======================画动态坐标系====================== Dim t1 As Single '取出X最大值Dim t2 As Single '取出X最小值Dim t3 As Single '取出Y最大值Dim t4 As Single '取出Y最小值t1 = X0t2 = X0t3 = Y0t4 = Y0If t1 < X1 Then t1 = X1 '求坐标中最大值与最小值If t1 < X2 Then t1 = X2If t2 > X1 Then t2 = X1If t2 > X2 Then t2 = X2If t3 < Y1 Then t3 = Y1If t3 < Y2 Then t3 = Y2If t4 > Y1 Then t4 = Y1If t4 > Y2 Then t4 = Y2If t1 < t3 Then t1 = t3If t2 > t4 Then t2 = t4Dim m As SingleIf Abs(R1) < Abs(R2) Thenm = Abs(R2)Elsem = Abs(R1)End Ift1 = t1 + Abs(r) + m '坐标轴对圆弧和刀补轨迹留有余量t2 = t2 - Abs(r) - mPicture1.Scale (t2, t1)-(t1, t2) '设定picturebox左上角右下角坐标值Picture1.Line (t2, 0)-(t1, 0), vbRed '画X轴Picture1.Line (0, t2)-(0, t1), vbRed '画Y轴Dim I As IntegerDim Ts1 As IntegerDim Ts2 As IntegerTs1 = Fix(t2)Ts2 = Fix(t1)For I = Ts1 To Ts2 Step 1Picture1.Line (I, -0.2)-(I, 0.2), vbRed '画X轴竖线Picture1.CurrentY = -0.2Picture1.Print I '打印刻度值Picture1.Line (-0.2, I)-(0.2, I), vbRed '画Y轴横线Picture1.CurrentX = -0.5Picture1.Print I '打印刻度值Next IPicture1.CurrentX = Ts2 - 1Picture1.CurrentY = -1Picture1.Print "X" '标上XPicture1.CurrentX = -1Picture1.CurrentY = Ts2 - 1Picture1.Print "Y" '标上YPicture1.Line (t1 - 0.3, -0.3)-(t1, 0), vbRed '画箭头Picture1.Line (t1 - 0.3, 0.3)-(t1, 0), vbRedPicture1.Line (-0.3, t1 - 0.3)-(0, t1), vbRedPicture1.Line (0.3, t1 - 0.3)-(0, t1), vbRed'================================================ End SubPrivate Sub Command2_Click()Picture1.DrawWidth = 2 '线宽OX1 = I1 + X0 '圆心实际坐标OY1 = J1 + Y0OX2 = I2 + X1OY2 = J2 + Y1Dim tt As SingleXx1 = -I1 '圆弧起点相对圆心坐标Yy1 = -J1Start1 = hudu(Xx1, Yy1) '第一段圆弧起点对应弧度Xx1 = X1 - OX1 '圆弧终点相对圆心坐标Yy1 = Y1 - OY1End1 = hudu(Xx1, Yy1) '第一段圆弧终点对应弧度If Option1.Value Then '画图时如果是顺圆,起点与终点弧度调换tt = Start1Start1 = End1End1 = ttEnd IfIf End1 < Start1 Then '圆弧经过X轴正方向Picture1.Circle (OX1, OY1), Abs(R1), , Start1, 2 * Pi, 624 / 697 Picture1.Circle (OX1, OY1), Abs(R1), , 0, End1, 624 / 697Else '圆弧不经过X轴正方向Picture1.Circle (OX1, OY1), Abs(R1), , Start1, End1, 624 / 697End IfXx1 = -I2 '圆弧起点相对圆心坐标Yy1 = -J2 '圆弧终点相对圆心坐标Start2 = hudu(Xx1, Yy1) '第二段圆弧起点对应弧度Xx1 = X2 - OX2Yy1 = Y2 - OY2End2 = hudu(Xx1, Yy1) '第二段圆弧终点对应弧度If Option3.Value Then '画图时如果是顺圆,起点与终点弧度调换tt = Start2Start2 = End2End2 = ttEnd IfIf End2 < Start2 Then '圆弧经过X轴正方向Picture1.Circle (OX2, OY2), Abs(R2), , Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2), , 0, End2, 624 / 697Else '圆弧不经过X轴正方向Picture1.Circle (OX2, OY2), Abs(R2), , Start2, End2, 624 / 697End If'Picture1.Circle (3, 4), 5End Sub'=======================弧度计算函数===================== Function hudu(ByVal m As Single, ByVal n As Single) As SingleDim k As SingleIf m <> 0 Then '斜率存在时k = n / mIf m >= 0 And n >= 0 Then hudu = Atn(k)If m >= 0 And n < 0 Then hudu = Atn(k) + 2 * PiIf m < 0 And n >= 0 Then hudu = Atn(k) + PiIf m < 0 And n < 0 Then hudu = Atn(k) + PiElse '斜率不存在时If n >= 0 Thenhudu = Pi / 2Elsehudu = Pi / 2 + PiEnd IfEnd IfEnd Function'=============刀补运算=======================Private Sub Command3_Click()Picture1.DrawWidth = 1Dim X01 As Single '圆心相对圆弧交接点坐标Dim Y01 As SingleDim X02 As SingleDim Y02 As SingleDim Xl1 As Single '圆弧在交接点处的方向矢量Dim Yl1 As SingleDim Xl2 As SingleDim Yl2 As SingleX01 = X0 + I1 - X1Y01 = Y0 + J1 - Y1X02 = I2Y02 = J2Xl1 = -Y01 / R1Yl1 = X01 / R1Xl2 = -Y02 / R2Yl2 = X02 / R2Dim Cases As SingleDim Xs1 As Single '转接点坐标Dim Ys1 As SingleDim Xs2 As SingleDim Ys2 As SingleDim Xs3 As SingleDim Ys3 As SingleDim Xs4 As SingleDim Ys4 As SingleDim Xl As Single '书上公式中的变量Dim Yl As SingleDim D1 As SingleDim D2 As SingleDim Fs As SingleDim k As Single '中间变量Dim s As SingleDim Ss As SingleDim Mmx As SingleDim Mmy As SingleDim Mma As SingleDim Flag1 As BooleanDim Flag2 As BooleanDim tt As Single '中间变量Cases = Sgn(r) * (Yl2 * Xl1 - Xl2 * Yl1)If Cases > 0 Then'======================================缩短型====================================== 'MATLAB中得到的两圆交点公式k = (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)s = (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2)Ss = -2 * OY2 * OY1 * OX2 ^ 2 + OX2 ^ 2 * OY2 ^ 2 + OY1 * (-(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2) * (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)) ^ (1 / 2) + 2 * OY2 * OX1 ^ 2 * OY1 + 2 * OX2 * OX1 * R2 ^ 2 - 2 * OX2 * OX1 * R1 ^ 2 - 2 * OX2 ^ 2 * R2 * r + 2 * R1 * r * OX2 ^ 2 - 2 * OX1 ^ 2 * R2 * r + 2 * OX1 ^ 2 * R1 * r - 4 * OX2 * OX1 * R1 * r + 4 * OX2 * OX1 * R2 * r + R1 ^ 2 * OX1 ^ 2 + R1 ^ 2 * OX2 ^ 2 - OX1 ^ 2 * OY1 ^ 2 - OX1 ^ 2 * R2 ^ 2 - OX1 ^ 2 * OY2 ^ 2 + OY1 ^ 2 * OX2 ^ 2 - R2 ^ 2 * OX2 ^ 2 - OX1 ^ 4 + OX2 ^ 4 + 2 * OX2 * OX1 ^ 3 - 2 * OX2 ^ 3 * OX1 - OY2 * (-(OX1 - OX2) ^ 2 * s * k) ^ (1 / 2)Mmx = -1 / 2 * Ss / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 ^ 2 + OY1 ^ 2 + OX2 ^ 2 + OY2 ^ 2) / (OX1 - OX2)Mmy = -1 / 2 * (-R1 ^ 2 * OY2 - OY1 ^ 3 - OX1 ^ 2 * OY2 + 2 * OY2 * R2 * r + 2 * OX2 * OX1 * OY1 + 2 * OX2 * OX1 * OY2 - 2 * OY2 * R1 * r - 2 * OY1 * R2 * r + 2 * OY1 * R1 * r + R1 ^ 2 * OY1 - OY1 * OX2 ^ 2 - OX1 ^ 2 * OY1 + OY1 ^ 2 * OY2 - OY1 * R2 ^ 2 - OY2 * OX2 ^ 2 + OY1 * OY2 ^ 2 + OY2 * R2 ^ 2 - OY2 ^ 3 - (-(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2) * (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)) ^ (1 / 2)) / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 ^ 2 + OY1 ^ 2 + OX2 ^ 2 + OY2 ^ 2)Xx1 = Mmx - OX1Yy1 = Mmy - OY1Mma = hudu(Xx1, Yy1)If End1 < Start1 Then '判断该点是否满足第一段圆弧If Mma < Start1 And Mma > End1 ThenFlag1 = FalseElseFlag1 = TrueEnd IfElseIf Mma > Start1 And Mma < End1 ThenFlag1 = TrueElseFlag1 = FalseEnd IfEnd IfXx1 = Mmx - OX2Yy1 = Mmy - OY2Mma = hudu(Xx1, Yy1)If End2 < Start2 Then '判断该点是否满足第二段圆弧If Mma < Start2 And Mma > End2 ThenFlag2 = FalseElseFlag2 = TrueEnd IfElseIf Mma > Start2 And Mma < End2 ThenFlag2 = TrueElseFlag2 = FalseEnd IfEnd IfIf Flag1 And Flag2 Then '判断得到的点是否满足条件Xs1 = MmxYs1 = MmyEnd Ifk = R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1s = -(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2)Ss = (-2 * OY2 * OY1 * OX2 ^ 2 + OX2 ^ 2 * OY2 ^ 2 - OY1 * (-(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2) * (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)) ^ (1 / 2) + 2 * OY2 * OX1 ^ 2 * OY1 + 2 * OX2 * OX1 * R2 ^ 2 - 2 * OX2 * OX1 * R1 ^ 2 - 2 * OX2 ^ 2 * R2 * r + 2 * R1 * r * OX2 ^ 2 - 2 * OX1 ^ 2 * R2 * r + 2 * OX1 ^ 2 * R1 * r - 4 * OX2 * OX1 * R1 * r + 4 * OX2 * OX1 * R2 * r + R1 ^ 2 * OX1 ^ 2 + R1 ^ 2 * OX2 ^ 2 - OX1 ^ 2 * OY1 ^ 2 - OX1 ^ 2 * R2 ^ 2 - OX1 ^ 2 * OY2 ^ 2 + OY1 ^ 2 * OX2 ^ 2 - R2 ^ 2 * OX2 ^ 2 - OX1 ^ 4 + OX2 ^ 4 + 2 * OX2 * OX1 ^ 3 - 2 * OX2 ^ 3 * OX1 + OY2 * (s * k) ^ (1 / 2))Mmx = -1 / 2 * Ss / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 ^ 2 + OY1 ^ 2 + OX2 ^ 2 + OY2 ^ 2) / (OX1 - OX2)Mmy = -1 / 2 * (-R1 ^ 2 * OY2 - OY1 ^ 3 - OX1 ^ 2 * OY2 + 2 * OY2 * R2 * r + 2 * OX2 * OX1 * OY1 + 2 * OX2 * OX1 * OY2 - 2 * OY2 * R1 * r - 2 * OY1 * R2 * r + 2 * OY1 * R1 * r + R1 ^ 2 * OY1 - OY1 * OX2 ^ 2 - OX1 ^ 2 * OY1 + OY1 ^ 2 * OY2 - OY1 * R2 ^ 2 - OY2 * OX2 ^ 2 + OY1 * OY2 ^ 2 + OY2 * R2 ^ 2 - OY2 ^ 3 + (-(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2) * (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)) ^ (1 / 2)) / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 ^ 2 + OY1 ^ 2 + OX2 ^ 2 + OY2 ^ 2)Xx1 = Mmx - OX1Yy1 = Mmy - OY1Mma = hudu(Xx1, Yy1)If End1 < Start1 Then '判断该点是否满足第一段圆弧If Mma < Start1 And Mma > End1 ThenFlag1 = FalseElseFlag1 = TrueEnd IfElseIf Mma > Start1 And Mma < End1 ThenFlag1 = TrueElseFlag1 = FalseEnd IfEnd IfXx1 = Mmx - OX2Yy1 = Mmy - OY2Mma = hudu(Xx1, Yy1)If End2 < Start2 Then '判断该点是否满足第二段圆弧If Mma < Start2 And Mma > End2 ThenFlag2 = FalseElseFlag2 = TrueEnd IfElseIf Mma > Start2 And Mma < End2 ThenFlag2 = TrueElseFlag2 = FalseEnd IfEnd IfIf Flag1 And Flag2 Then '判断得到的点是否满足条件Xs1 = MmxYs1 = MmyEnd IfPicture1.DrawWidth = 3 '线宽Picture1.PSet (Xs1, Ys1) '画点Picture1.Print "(" & Xs1 & "," & Ys1 & ")" '打印坐标Picture1.DrawWidth = 1 '线宽' '---------------------------------画刀补轨迹--------------------------------- Xx1 = -I1Yy1 = -J1Start1 = hudu(Xx1, Yy1)Xx1 = Xs1 - OX1Yy1 = Ys1 - OY1End1 = hudu(Xx1, Yy1)If Option1.Value Thentt = Start1Start1 = End1End1 = ttEnd IfIf End1 < Start1 Then '画第一段圆弧Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, 2 * Pi, 624 / 697Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, 0, End1, 624 / 697 ElsePicture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, End1, 624 / 697 End IfXx1 = Xs1 - X1 - I2Yy1 = Ys1 - Y1 - J2Start2 = hudu(Xx1, Yy1)Xx1 = X2 - OX2Yy1 = Y2 - OY2End2 = hudu(Xx1, Yy1)If Option3.Value Thentt = Start2Start2 = End2End2 = ttEnd IfIf End2 < Start2 Then '画第二段圆弧Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, 0, End2, 624 / 697ElsePicture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, End2, 624 / 697End IfElseIf Yl2 * Yl1 + Xl2 * Xl1 >= 0 Then'======================================伸长型====================================== Xs1 = X1 - r * Yl1Ys1 = Y1 + r * Xl1Xs2 = X1 + (Xl2 - Xl1) * r / (Xl1 * Yl2 - Xl2 * Yl1)Ys2 = Y1 + (Yl2 - Yl1) * r / (Xl1 * Yl2 - Xl2 * Yl1)Xs3 = X1 - r * Yl2Ys3 = Y1 + r * Xl2If End1 < Start1 Then '画第一段圆弧Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, 2 * Pi, 624 / 697Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, 0, End1, 624 / 697ElsePicture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, End1, 624 / 697End IfIf End2 < Start2 Then '画第二段圆弧Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, 0, End2, 624 / 697ElsePicture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, End2, 624 / 697End IfPicture1.Line (Xs1, Ys1)-(Xs2, Ys2), vbGreen '画两段直线Picture1.Line (Xs2, Ys2)-(Xs3, Ys3), vbGreenPicture1.DrawWidth = 3 '线宽Picture1.PSet (Xs1, Ys1) '画点Picture1.Print "(" & Xs1 & "," & Ys1 & ")" '打印坐标值Picture1.PSet (Xs2, Ys2)Picture1.Print "(" & Xs2 & "," & Ys2 & ")"Picture1.PSet (Xs3, Ys3)Picture1.Print "(" & Xs3 & "," & Ys3 & ")"Else'======================================插入型====================================== Xs1 = X1 - r * Yl1Ys1 = Y1 + r * Xl1Xs2 = Xs1 + Abs(r) * Xl1Ys2 = Ys1 + Abs(r) * Yl1Xs3 = X1 - r * Yl2 - Abs(r) * Xl2Ys3 = Y1 + r * Xl2 - Abs(r) * Yl2Xs4 = X1 - r * Yl2Ys4 = Y1 + r * Xl2If End1 < Start1 Then '画第一段圆弧Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, 2 * Pi, 624 / 697Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, 0, End1, 624 / 697ElsePicture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, End1, 624 / 697End IfIf End2 < Start2 Then '画第二段圆弧Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, 0, End2, 624 / 697ElsePicture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, End2, 624 / 697End IfPicture1.Line (Xs1, Ys1)-(Xs2, Ys2), vbGreen '画三段直线Picture1.Line (Xs2, Ys2)-(Xs3, Ys3), vbGreenPicture1.Line (Xs3, Ys3)-(Xs4, Ys4), vbGreenPicture1.DrawWidth = 3Picture1.PSet (Xs1, Ys1)Picture1.Print "(" & Xs1 & "," & Ys1 & ")"Picture1.PSet (Xs2, Ys2)Picture1.Print "(" & Xs2 & "," & Ys2 & ")"Picture1.PSet (Xs3, Ys3)Picture1.Print "(" & Xs3 & "," & Ys3 & ")"Picture1.PSet (Xs4, Ys4)Picture1.Print "(" & Xs4 & "," & Ys4 & ")"End IfEnd IfEnd SubPrivate Sub Form_Load()Command1.Enabled = TrueCommand2.Enabled = TrueCommand3.Enabled = TrueEnd Sub。

VB软件模拟逐点比较法逆圆弧插补的程序设计说明书

VB软件模拟逐点比较法逆圆弧插补的程序设计说明书

xxxx 学院课程设计说明书设计题目:逐点比较法逆圆弧插补的程序设计系 (部):机电工程系专业:自动化(数控技术)班级: 08数控本(1)班姓名:学号:指导老师(签名):起止时间:20 11年 12月 5 日至20 11年 12月 9 日共 1 周20 11 年 12 月 11 日目录一.课程设计的目的 (1)二.课程设计的任务 (1)三.逐点比较法基本原理 (1)四.算法描述 (6)五.具体算法程序 (10)六.各象限选例展示 (17)七.心得体会 (19)八.参考文献 (19)正文:数控原理与系统课程设计说明书一、课程设计的目的1)了解连续轨迹控制数控系统的组成原理。

2) 掌握逐点比较法插补的基本原理。

3)握逐点比较法插补的软件实现方法。

二.课程设计的任务逐点比较法插补是最简单的脉冲增量式插补算法之一,其过程清晰,速度平稳,但一般只用于一个平面内两个坐标轴的插补运算。

其基本原理是在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀具向减小偏差的方向进给,且只有一个方向的进给。

也就是说,逐点比较法每一步均要比较加工点瞬时坐标与规定零件轮廓之间的距离,依此决定下一步的走向。

如果加工点走到轮廓外面去了,则下一步要朝着轮廓内部走;如果加工点处在轮廓的内部,则下一步要向轮廓外面走,以缩小偏差,这样周而复始,直至全部结束,从而获得一个非常接近于数控加工程序规定轮廓的轨迹。

逐点比较法插补过程中的每进给一步都要经过偏差判别、坐标进给、偏差计算和终点判别四个节拍的处理,其工作流程图如图所示。

三.逐点比较法基本原理逐点比较法I象限逆圆插补在加工圆弧过程中,人们很容易联想到使用动点到圆心的距离与该圆弧的名义半径进行比较来反映加工偏差。

假设被加工零件的轮廓为第Ⅰ象限逆走向圆弧SE ,,圆心在O (0,0),半径为R ,起点为S (XS ,YS ),终点为E (Xe ,Ye ),圆弧上任意加工动点为N (Xi ,Yi )。

逐点比较法圆弧插补

逐点比较法圆弧插补

数控技术课程讲课方案 / 讲稿逐点比较法圆弧插补教师姓名:杨丽梅学院(部、中心):机电工程学院教研室∕实验室:机电教研室联系电话:2009年7月长春工业大学课程教案∕讲稿用纸讲授内容讲课方案∕备注逐点比较法圆弧插补重点内容:掌握什么是逐点比较法及逐点比较法在圆弧插补中的应用。

难点内容:逐点比较法插补在顺圆弧和逆圆弧插补中的差异。

讲课内容共分为四部分:一、逐点比较法1、逐点比较法的基根源理:每次仅向一个坐标轴输出一个进给脉冲,而每走一步都要经过误差函数计算,判断误差点的瞬时坐标同规定加工轨迹之间的误差,今后决定下一步的进给方向。

逐点比较法又称为代数运算法或醉步法,是我国早期数控机床中广泛采用的一种方法。

2、逐点比较法的应用:可用于直线插补、圆弧插补和其他曲线的插补。

3、逐点比较法的特点:运算直观、插补误差不大于一个脉冲当量,脉冲输出均匀,调治方便。

二、逐点比较法圆弧插补1、加工点与圆弧之间的关系(1)点在圆弧上;(2)点位于圆弧外;(3)点位于圆弧内。

图 1 加工点与圆弧的关系加工点与圆弧的关系如图 1 所示。

2、误差函数构造如图 1 所示,若加工半径为R 的圆弧 AB ,将坐标原点定在圆心上,如右图所示。

对于任意加工点P i ( X i ,Y i ) ,其误差函数 F i可表示为:F i X i2Y i2R2(1)(1)若F i0 ,表示加工点位于圆上;(2)若(3)若F i0 ,表示加工点位于圆内;F i0 ,表示加工点位于圆外;3、误差函数的递推计算为了对( 1)式进行简化计算,需采用递推式(或迭代式)。

以第一象限圆弧为例,对误差函数进行推导。

第一象限的圆弧分为顺圆弧和逆圆弧,即有顺圆弧和逆圆弧插补两种方式。

(1)逆圆弧插补若 F i0 ,规定向X 方向走一步,有X i1X i1(2)F i 1 ( X i 1) 2Y i2R2F i 2 X i 1若 F i 0,规定向Y方向走一步,有Y i 1 Y i1(3)Fi 1X2(Y 1)2R2Fi2Y 1i i i(2)顺圆弧插补若 F i0 ,规定向Y 方向走一步,有Y i1Y i 1(4)F i 1 X i2(Y i1)2R2F i 2Y i 1若 F i 0,规定向X方向走一步,有X i1X i1(5)Fi 1( Xi1) 2Y2R2Fi2 Xi1i4、终点鉴识终点鉴识可采用以下两种方法:(1)判断插补或进给的总步数:N X a X b Y a Y b(6)(2)分别判断各坐标轴的进給步数:N x X a X b(7)N Y Y a Y b三、逐点比较法圆弧插补举例已知第一象限内的圆弧AB ,起点 A(4,0) ,终点 B(0,4) ,如图2所示。

基于VB的比较积分法圆弧插补仿真设计

基于VB的比较积分法圆弧插补仿真设计
出版社,2005. [4]乘方工作室. Visual Basic6.X 程序设计[M]. 西安:西安电子科
技大学出版社,2004. [5]曾祥光,张玲玲. 基于 VB 的数控插补原理仿真研究[J]. 北京:
机械工程师,2006,(5):41-42. [6]周 虹. 圆弧插补算法的探讨[J]. 机械制造与自动化,2006,35
关键词: 数控; 插补; 仿真; 圆弧
中图分类号: TP391.9
文献标识码: A
文 章 编 号 :1672-0547 (2008)06-0077-02
1. 引言 随着微电子技术、计算机技术的发展,数 控机床的性能不断完善,其应用范围也不断 增大。而数控技术作为数控机床的关键技术, 越来越得到更多高校的重视,国内许多高校 在机械类和自动化类等专业都开设了数控技 术课程。作为数控技术教学中的一个重要组 成,数控插补算法的教学显得既重要也难掌 握,因此在教学中必须重视数控插补的实验 教学,但由于插补模拟设备价格昂贵,难以从 数量上满足教学的要求,如何较好地讲解数 控插补原理并直观地显示数控机床刀具的走 刀轨迹,是各个高校必须面对的一个问题。作 为数控机床教学型仿真软件的一个模块,作 者开发了用于教学的数控插补原理仿真软 件,较好地解决了数控插补过程的讲解及走 刀轨迹的显示等问题。 目前数控插补算法有多种,且大多数数 控系统都具有直线和圆弧的插补功能。由于 圆弧插补较直线插补复杂得多,本文以脉冲 增量插补法中的一种— — —比较积分法为例, 介绍其圆弧插补算法的仿真实现过程。该模 块是在 Visual Basic 6.0 的环境下利用 Win- dows 技术和面向对象的程序设计方法开发的 一个可视化仿真系统。 2. 比较积分法圆弧插补原理 脉冲增量插补算法主要为各坐标轴进行 脉冲分配计算。其特点是每次插补的结束仅 产生一个行程增量,以一个个脉冲的形式输出 给各进给轴的伺服电动机。目前常用的脉冲 增量插补算法有逐点比较法、数字积分法和比 较积分法。由于数字积分法溢出脉冲频率与 被积函数值大小有关,存在着速度调节不便的 缺点,逐点比较法在使用的方便性上不如数字 积分法插补,而比较积分法插补集数字积分法 插补和逐点比较法插补于一身,能够实现各种 函数和多坐标插补,且插补精度高,直线插补
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

宿迁学院课程设计说明书设计题目:基于VB数字积分法一、二象限逆圆插补计算与仿真系(部):机电工程系专业:自动化(数控技术)班级: 09数控本(2)姓名:李伟学号: 200907052指导老师(签名):刘萍起止时间:20 12年12月3日至2012年12月7 日共1周20 12年12 月6 日正文:数控原理与系统课程设计说明书一、课程设计的目的1)了解连续轨迹控制数控系统的组成原理。

2) 掌握逐点比较法插补的基本原理。

3)握逐点比较法插补的软件实现方法。

二.课程设计的任务逐点比较法插补是最简单的脉冲增量式插补算法之一,其过程清晰,速度平稳,但一般只用于一个平面内两个坐标轴的插补运算。

其基本原理是在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀具向减小偏差的方向进给,且只有一个方向的进给。

也就是说,逐点比较法每一步均要比较加工点瞬时坐标与规定零件轮廓之间的距离,依此决定下一步的走向。

如果加工点走到轮廓外面去了,则下一步要朝着轮廓内部走;如果加工点处在轮廓的内部,则下一步要向轮廓外面走,以缩小偏差,这样周而复始,直至全部结束,从而获得一个非常接近于数控加工程序规定轮廓的轨迹。

逐点比较法插补过程中的每进给一步都要经过偏差判别、坐标进给、偏差计算和终点判别四个节拍的处理,其工作流程图如图所示。

三.逐点比较法基本原理逐点比较法I象限逆圆插补在加工圆弧过程中,人们很容易联想到使用动点到圆心的距离与该圆弧的名义半径进行比较来反映加工偏差。

假设被加工零件的轮廓为第Ⅰ象限逆走向圆弧SE,,圆心在O(0,0),半径为R,起点为S(XS,YS ),终点为E(Xe,Ye),圆弧上任意加工动点为N (X i,Yi)。

当比较该加工动点到圆心的距离ON 与圆弧半径R的大小时,可获得刀具与圆弧轮廓之间的相对位置关系。

当动点N(Xi,Yi )正好落在圆弧上时,则有下式成立22222R Y X Y X e e i i =+=+当动点N(Xi ,Y i)落在圆弧外侧时,则有下式成立22222R Y X Y X e e i i =+>+当动点N (X i,Y i)落在圆弧内侧时,则有下式成立22222R Y X Y X e e i i =+<+由此可见,取逐点比较法圆弧插补的偏差函数表达式为222R Y X F i i -+=当动点落在圆外时,为了减小加工误差,应向圆内进给,即向(-X )轴方向走一步;当动点落在圆内时,应向圆外进给,即向(+Y )轴方向走一步。

当动点正好落在圆弧上且尚未到达终点时,为了使加工继续下去,理论上向(+Y)轴或(-X)轴方向进给均可以,但一般情况下约定向(-X )轴方向进给。

综上所述,现将逐点比较法第Ⅰ象限逆圆插补规则概括如下:当F>0时,即222R Y X F i i -+=>0,动点落在圆外,则向(-X )轴方向进给一步;当F=0时,即222R Y X F i i -+==0,动点正好落在圆上,约定向(-X)轴方向进给一步;当F <0时,即222R Y X F i i -+=<0,动点落在圆内,则向(+Y)轴方向进给一步。

由偏差函数表达式可知,计算偏差F值,就必须进行动点坐标、圆弧半径的平方运算。

显然,在用硬件或汇编语言实现时不太方便。

为了简化这些计算,按逐点比较法直线插补的思路,也可以推导出逐点比较法圆弧插补过程中偏差函数计算的递推公式。

假设第i次插补后,动点坐标为N (Xi,Yi ),其对应偏差函数为222R Y X F i i i -+=当Fi ≥0,向(-X)轴方向进给一步,则新的动点坐标值为 X i+1=Xi-1, Yi +1=Yi 因此,新的偏差函数为()2222212111R Y X R Y X F i i i i i -+-=-+=+++∴ ﻩﻩ Fi+1=Fi -2X i+1 同理,当F i<0,则向(+Y)轴方向进给一步,则新的动点坐标值为 X i+1=Xi , Yi +1=Yi +1 因此,可求得新的偏差函数为()2222212111R Y X R Y X F i i i i i -++=-+=+++∴ Fi+1=Fi+2Yi +1将上式进行比较,可以看出两点不同:第一,递推形式的偏差计算公式中仅有加/减法以及乘2运算,而乘2可等效成该二进制数左移一位,这显然比平方运算来得简单。

第二,进给后新的偏差函数值与前一点的偏差值以及动点坐标N(Xi,Yi)均有关系。

由于动点坐标值随着插补过程的进行而不断变化,因此,每插补一次,动点坐标就必须修正一次,以便为下一步的偏差计算作好准备。

至此,将第Ⅰ象限逆圆弧插补的规则和计算公式汇总,见表(表2-1)第Ⅰ象限逆圆弧插补计算公式表2-1和直线插补一样,圆弧插补过程也有终点判别问题。

当圆弧轮廓仅在一个象限区域内,其终点判别仍可借用直线终点判别的三种方法进行,只是计算公式略不同。

Σ=|Xe-Xs|+|Ye-Ys|ﻩΣ=max{|Xe-Xs|,|Ye-Ys|}Σ1=|Xe-Xs| ,Σ2=|Ye-Ys|式中XS、Ys ——被插补圆弧轮廓的起点坐标;Xe、Ye ——被插补圆弧轮廓的终点坐标。

b、插补象限和圆弧走向前面所讨论的逐点比较法直线和圆弧插补,均是针对第一象限直线和逆圆插补这种特定情况进行的。

然而,任何数控机床都应具备处理不同象限、不同走向曲线的能力。

四个象限中圆弧插补圆弧插补情况比直线插补复杂,不仅有象限问题,而且还有圆弧走向问题。

现以第Ⅰ象限顺圆SR1插补为例,介绍圆弧插补的特性。

假设圆弧SE 起点为S (XS ,YS),终点为E(Xe ,Ye),圆心在坐标原点上。

与逆圆插补相似,当某一时刻动点N(Xi ,Yi )在圆弧的外侧时,有F ≥0成立,应向-Y)轴方向进给一步,以减小误差;若动点N(Xi,Yi )在圆弧内侧,则应向+X )轴方向进给一步。

由此可推导出第Ⅰ象限顺圆插补偏差函数的递推公式如下:当Fi ≥0时,向-Y )轴方向进给一步,则新的动点坐标为Xi+1=Xi , Yi +1=Yi-1 新动点的偏差函数为()2222212111R Y X R Y X F i i i i i --+=-+=+++∴ Fi +1=Fi -2Yi +1 当Fi <0时,向+X)轴方向进给一步,则新的动点坐标为Xi +1=Xi +1, Yi +1=Yi新动点的偏差函数为()2222212111R Y X R Y X F i i i i i -++=-+=+++∴ Fi +1=Fi+2X i+1现将上式比较,可以看出它们有两点不同: ﻩ1)当Fi ≥0或Fi<0时,对应的进给方向不同;2)插补计算公式中动点坐标的修正也不同,以至于偏差计算公式也不相同。

进一步还可根据上述方法推导出其他象限不同走向圆弧的插补公式。

现将各种相应偏差计算见表(表2-2)四个象限圆弧插补偏差计算与进给方向表2-2从表可以看出,当按第Ⅰ象限逆圆NR1进行插补运算时,现若有意将X轴进给反向,则可以走出第Ⅱ象限顺圆SR2来;或者若将Y轴进给反向,则可以走出SR4来;或者将X轴和Y轴的进给均反向,则可以走出NR3来;并且这四种线型(NR1、SR2、NR3、SR4)使用的偏差计算公式都相同,无须改变。

进一步还可以看出,当按第Ⅰ象限逆圆NR1线型插补时,现若将计算公式坐标X与Y对调,即把X当作Y,把Y当作X,那么就可得到SR1的走向。

类似地通过改变进给方向,利用SR1的公式就可获得其余三种线型(NR2、SR3、NR4)的走向。

下面,我们对圆弧逐点比较法作一个简要的介绍。

四.算法描述(逐点比较法在VB中的具体实现)根据上述基本原理,我们可以知道逐点比较法圆弧插补需要设置两个终点计器J∑X=|Xe – Xs|和J∑Y=|Ye-Ys|,分别对X轴和Y轴进行终点监控。

每当X轴或Y轴产生一个溢出脉冲,相应的终点计数器就作减1修正,直到为零,表明该坐标已到终点,并停止其坐标的累加运算。

只有当两个坐标轴均到达终点时,圆弧插补才结束。

如下图所示,圆弧起点S(4,-1),终点(-1,4),且寄存器位数N=3,当插补开始时,被积函数寄存器初值分别为JVX=Ys=-1和JVY=Xs=4,终点判别寄存器J∑X=|Xe–Xs|=-1和J∑Y=|Ye-Ys|=5.该圆弧插补运算过程如下表所示,插补轨迹如下图折线所示。

根据上述基本原理以及对预VB软件编程的掌握,查阅参考相关文献资料,编制了本课程设计的程序。

Private Sub Command1_Click()DimrAs Single,XAsInteger, YAs Integer, c AsInteger, d AsInteger, a AsSingle,b As Single, pi As Single,mAs Integer,n As IntegerX= Int(Text1)Y= Int(Text2)c= Int(Text3)d = Int(Text4)a=Atn(Abs(Y /X))b= Atn(Abs(d / c))pi = 3.14159265m= X* X + Y* Yn = c * c +d* dPicture1.ForeColor =vbBlackPicture1.DrawWidth = 2IfOption1.Value = True ThenIf X <= 0 OrY< 0Or c <= 0 Or d< 0 Or m <>n ThenPrint MsgBox("非法数据!",48, "提示信息")ElsePicture1.Line(500,500)-(500, 6500)Picture1.Line(500, 6500)-(5500, 6500)Picture1.Line (5400, 6530)-(5500,6500)Picture1.Line(5400,6470)-(5500, 6500)Picture1.Line (530,600)-(500,500)Picture1.Line (470, 600)-(500,500)Picture1.ForeColor= vbRedPicture1.DrawWidth =5r=Sqr(X *X +Y * Y) * 400Picture1.Circle (500, 6500), r, , a, bEndIfElseIf Option2.Value=True ThenIfX >= 0 Or Y < 0Or c >= 0Or d<0Or m <>n ThenPrintMsgBox("非法数据!", 48, "提示信息")ElsePicture1.Line(5500, 500)-(5500, 6500)Picture1.Line(500, 6500)-(5700,6500)Picture1.Line (5600,6530)-(5700, 6500)Picture1.Line (5600, 6470)-(5700, 6500)Picture1.Line(5530,600)-(5500, 500)Picture1.Line(5470,600)-(5500, 500)Picture1.ForeColor = vbRedPicture1.DrawWidth= 5r = Sqr(X *X+Y *Y) *400Picture1.Circle (5500,6500),r,,pi-a,pi-bEnd IfEnd IfEnd SubPrivateSub Command2_Click()Dim k,m, j,l,n, F(30), X(30), Y(30)As Integer,a As Integer,b As Integer, c As Integer,dAs Integera =Int(Text1)b = Int(Text2)c = Int(Text3)d =Int(Text4)m =0l = 0k= 0F(m)=0X(m)= aY(m) = bPicture1.ForeColor = vbGreenPicture1.DrawWidth = 3j= Abs(Abs(a) - Abs(c))+Abs(Abs(b)-Abs(d))Form1.CurrentX = 200Form1.CurrentY= 200Print "初始", "进给方向","F(0)=0","X(0) =" &Int(Text1), "Y(0)=" & Int(Text2), " Xe ="& Int(Text3), " Ye =" & Int(Text4)," ∑=" & jIfOption1.Value =True ThenFor n = 1 TojIfF(m) >= 0Andj>0Thenm= m + 1l = l+1F(m) =F(m- 1) - 2 * Abs(X(m - 1)) + 1X(m) =X(m - 1)- 1Y(m) = Y(m- 1)Picture1.Line(500 + 400 *(a- l), 6500 - 400 * (b+k))-(500+ 400 *(a - l+1), 6500 -400 *(b +k))Form1.CurrentX = 200Form1.CurrentY= 200+ m* 300Print "第" &m&"步","-△X", "F(" &m & ")="& F(m),"X(" & m & ")=" & X(m), "Y(" & m &")=" &Y(m), " Xe = " &Int(Text3)," Ye = " &Int(Text4)," ∑="&j - nElsek=k+1m= m +1F(m) = F(m -1) + 2* Abs(Y(m - 1))+1Y(m) = Y(m - 1) + 1X(m) =X(m-1)Picture1.Line (500+400 *(a- l),6500- 400 *(b + k))-(500+ 400* (a-l),6500 - 400*(b +k - 1))Form1.CurrentX = 200Form1.CurrentY = 200+m * 300Print "第" & m&"步", "+△Y ", "F(" & m& ")="& F(m)," X("& m&")=" & X(m)," Y(" & m&")=" & Y(m)," Xe ="& Int(Text 3), "Ye =" &Int(Text4),"∑= " & j -n;""EndIfNext nElseIf Option2.Value =TrueThenForn =1To jIf F(m) >=0And j >0 Thenm =m+1k=k + 1F(m)=F(m- 1) - 2 * Abs(Y(m- 1))+ 1X(m) = X(m- 1)Y(m)= Y(m - 1)- 1Picture1.Line (5500 +400*(a - l),6500-400 * (b - k +1))-(5500 +400 * (a -l),6500 - 400* (b - k))Form1.CurrentX = 200Form1.CurrentY =200+ m * 300Print "第"& m& "步", " -△Y","F(" &m & ")=" &F(m), "X(" &m&")=" &X(m)," Y(" &m & ")="&Y(m), "Xe ="& Int(Text3),"Ye=" & Int(Text4), " ∑=" & j- nElsel =l+ 1m= m +1F(m) = F(m -1) + 2 * Abs(X(m -1)) + 1Y(m)=Y(m - 1)X(m) =X(m - 1) -1Picture1.Line(5500+400 *(a -l), 6500- 400 * (b - k))-(5500+400 * (a- l +1), 6500 - 400*(b-k))Form1.CurrentX = 200Form1.CurrentY = 200+m* 300Print"第" & m&"步", "-△X ", "F(" & m &")=" & F(m), " X("&m& ")=" & X(m), " Y(" & m& ")="& Y(m),"Xe= " & Int(Text3), "Ye = "&Int(Text4)," ∑="&j - nEnd IfNext nEnd IfEnd SubPrivate Sub Command3_Click()Text1.Text= ""Text2.Text =""Text3.Text=""Text4.Text= ""Picture1.ClsForm1.ClsEndSub六、各象限选例展示一.参考文献【1】汪木兰主编.数控原理与系统.机械工业出版社,2004【2】李金泽主编.基于VisualBasic编程软件的数控插补计算与设计方法.机械工业出版社,2007年。

相关文档
最新文档