当前位置:文档之家› VB软件_模拟逐点比较法逆圆弧插补的程序设计

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年。

相关主题