VB软件_模拟逐点比较法逆圆弧插补的程序设计
宿迁学院课程设计说明书设计题目:基于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年。
逐点比较算法圆弧插补
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版)
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圆弧插补程序
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程序
第二章 插补原理
——轮廓加工的数学基础
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数字积分法一、二象限逆圆插补计算与仿真系(部):机电工程系专业:自动化(数控技术)班级: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的直线插补与圆弧插补实验
主界面面板逐点比较圆弧插补程序如下: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实现
第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月 。
