逐点比较法课程设计报告.docx
- 文档编号:11433348
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:18
- 大小:301.19KB
逐点比较法课程设计报告.docx
《逐点比较法课程设计报告.docx》由会员分享,可在线阅读,更多相关《逐点比较法课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
逐点比较法课程设计报告
****学院
课程设计说明书
设计题目:
逐点比较法第一二象限的顺圆插补
系部:
机电工程系
专业:
自动化(数控技术)
班级:
姓名:
学号:
指导老师:
起止时间:
年月日至年月日共周
年月日
目录
一、课程设计的目的.......................................3
二、课程设计的任务.......................................3
三、逐点比较法基本原理...................................4
四、逐点比较法插补软件流程图.............................8
五、算法描述(在VB中的具体实现)........................9
六、编写算法程序清单.....................................9
七、软件运行仿真效果.....................................12
八、参考文献.............................................15
九、设计小结.............................................15
逐点比较法第一二象限的顺圆插补
一、课程设计的目的
1)了解连续轨迹控制数控系统的组成原理。
2)掌握逐点比较法插补的基本原理。
3)掌握逐点比较法插补的软件实现方法。
二、课程设计的任务
逐点比较法插补是最简单的脉冲增量式插补算法之一,其过程清晰,速度平稳,但一般只用于一个平面内两个坐标轴的插补运算。
其基本原理是在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀具向减小偏差的方向进给,且只有一个方向的进给。
也就是说,逐点比较法每一步均要比较加工点瞬时坐标与规定零件轮廓之间的距离,依此决定下一步的走向。
如果加工点走到轮廓外面去了,则下一步要朝着轮廓内部走;如果加工点处在轮廓的内部,则下一步要向轮廓外面走,以缩小偏差,这样周而复始,直至全部结束,从而获得一个非常接近于数控加工程序规定轮廓的轨迹。
逐点比较法插补过程中的每进给一步都要经过偏差判别、坐标进给、偏差计算和终点判别四个节拍的处理,其工作流程图如图所示。
三、基本原理
(1)逐点比较法I象限顺圆插补
基本原理
在加工圆弧过程中,人们很容易联想到使用动点到圆心的距离与该圆弧的名义半径进行比较来反映加工偏差。
假设被加工零件的轮廓为第Ⅰ象限顺走向圆弧SE,,圆心在O(0,0),半径为R,起点为S(XS,YS),终点为E(Xe,Ye),圆弧上任意加工动点为N(Xi,Yi)。
当比较该加工动点到圆心的距离
与圆弧半径R的大小时,可获得刀具与圆弧轮廓之间的相对位置关系。
当动点N(Xi,Yi)正好落在圆弧上时,则有下式成立
当动点N(Xi,Yi)落在圆弧外侧时,则有下式成立
当动点N(Xi,Yi)落在圆弧内侧时,则有下式成立
由此可见,取逐点比较法圆弧插补的偏差函数表达式为
当动点落在圆外时,为了减小加工误差,应向圆内进给,即向(-X)轴方向走一步;当动点落在圆内时,应向圆外进给,即向(+Y)轴方向走一步。
当动点正好落在圆弧上且尚未到达终点时,为了使加工继续下去,理论上向(+Y)轴或(-X)轴方向进给均可以,但一般情况下约定向(-X)轴方向进给。
综上所述,现将逐点比较法第Ⅰ象限顺圆插补规则概括如下:
当F>0时,即
>0,动点落在圆外,则向(-Y)轴方向进给一步;
当F=0时,即
=0,动点正好落在圆上,约定向(-Y)轴方向进给一步;
当F<0时,即
<0,动点落在圆内,则向(+X)轴方向进给一步。
由偏差函数表达式可知,计算偏差F值,就必须进行动点坐标、圆弧半径的平方运算。
显然,在用硬件或汇编语言实现时不太方便。
为了简化这些计算,按逐点比较法直线插补的思路,也可以推导出逐点比较法圆弧插补过程中偏差函数计算的递推公式。
假设第i次插补后,动点坐标为N(Xi,Yi),其对应偏差函数为
当Fi≥0,向(-Y)轴方向进给一步,则新的动点坐标值为
Xi+1=Xi,Yi+1=Yi-1
因此,新的偏差函数为
Fi+1=Xi+1^2+Yi+1^2-R^2=Xi^2+(Yi-1)^2
∴Fi+1=Fi-2Yi+1
同理,当Fi<0,则向(+Y)轴方向进给一步,则新的动点坐标值为
Xi+1=Xi+1,Yi+1=Yi
因此,可求得新的偏差函数为
Fi+1=Xi+1^2+Yi+1^2-R^2=(Xi+1)^2+Yi^2
∴Fi+1=Fi+2Xi+1
将上式进行比较,可以看出两点不同:
第一,递推形式的偏差计算公式中仅有加/减法以及乘2运算,而乘2可等效成该二进制数左移一位,这显然比平方运算来得简单。
第二,进给后新的偏差函数值与前一点的偏差值以及动点坐标N(Xi,Yi)均有关系。
由于动点坐标值随着插补过程的进行而不断变化,因此,每插补一次,动点坐标就必须修正一次,以便为下一步的偏差计算作好准备。
至此,将第Ⅰ象限顺圆弧插补的规则和计算公式汇总,见表(表2-1)
第Ⅰ象限顺圆弧插补计算公式
偏差函数
动点位置
进给方向
新偏差计算
动点坐标修正
Fi≥0
在圆上或圆外
-Y
Fi+1=Fi-2Yi+1
Xi+1=Xi,Yi+1=Y-1i
Fi<0
在圆内
+X
Fi+1=Fi+2Xi+1
Xi+1=Xi+1,Yi+1=Yi
表2-1
和直线插补一样,圆弧插补过程也有终点判别问题。
当圆弧轮廓仅在一个象限区域内,其终点判别仍可借用直线终点判别的三种方法进行,只是计算公式略不同。
Σ=|Xe-Xs|+|Ye-Ys|
Σ=max{|Xe-Xs|,|Ye-Ys|}
Σ1=|Xe-Xs|,Σ2=|Ye-Ys|
式中XS、Ys——被插补圆弧轮廓的起点坐标;
Xe、Ye——被插补圆弧轮廓的终点坐标。
b、插补象限和圆弧走向
前面所讨论的逐点比较法直线和圆弧插补,均是针对第一象限直线和顺圆插补这种特定情况进行的。
然而,任何数控机床都应具备处理不同象限、不同走向曲线的能力。
(2)四个象限中圆弧插补
圆弧插补情况比较复杂,不仅有象限问题,而且还有圆弧走向问题。
现以第Ⅰ象限顺圆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
新动点的偏差函数为
∴Fi+1=Fi-2Yi+1
当Fi<0时,向+X)轴方向进给一步,则新的动点坐标为
Xi+1=Xi+1,Yi+1=Yi
新动点的偏差函数为
∴Fi+1=Fi+2Xi+1
现将上式比较,可以看出它们有两点不同:
1)当Fi≥0或Fi<0时,对应的进给方向不同;
2)插补计算公式中动点坐标的修正也不同,以至于偏差计算公式也不相同。
进一步还可根据上述方法推导出其他象限不同走向圆弧的插补公式。
现将各种相应偏差计算见表(表2-2)
四个象限圆弧插补偏差计算与进给方向
线型
F≥0
F<0
偏差计算
坐标进给
偏差计算
坐标进给
SR1
NR2
SR3
NR4
F-2|Y|+1→F
|Y|-1→|Y|
-ΔY
-ΔY
+ΔY
+ΔY
F+2|X|+1→F
|X|+1→|X|
+ΔX
-ΔX
-ΔX
+ΔX
NR1
SR2
NR3
SR4
F-2|X|+1→F
|X|-1→|X|
-ΔX
+ΔX
+ΔX
-ΔX
F+2|Y|+1→F
|Y|+1→|Y|
+ΔY
+ΔY
-ΔY
-ΔY
表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修正,直到为零,表明该坐标已到终点,并停止其坐标的累加运算。
只有当两个坐标轴均到达终点时,圆弧插补才结束。
六、编写算法程序清单
第一二象限的逐点比较法顺圆插补
PrivateSubCommand1_Click()
DimrAsSingle,XAsInteger,YAsInteger,aAsInteger,bAsInteger,cAsSingle,dAsSingle,piAsSingle,mAsInteger,nAsInteger
X=Int(Text1)
Y=Int(Text2)
a=Int(Text3)
b=Int(Text4)
c=Atn(Abs(Y/X))
d=Atn(Abs(b/a))
pi=3.14159265
m=X*X+Y*Y
n=a*a+b*b
Picture1.ForeColor=vbBlack
Picture1.DrawWidth=2
IfOption1.Value=TrueThen
IfX<=0OrY<0Ora<=0Orb<0Orm<>norX>aThen
PrintMsgBox("错误!
",48,"提示信息")
Else
Picture1.Line(500,500)-(500,6500)
Picture1.Line(500,6500)-(5500,6500)
Picture1.Line(5450,6450)-(5500,6500)
Picture1.Line(5450,6550)-(5500,6500)
Picture1.Line(550,550)-(500,500)
Picture1.Line(450,550)-(500,500)
Picture1.ForeColor=vbRed
Picture1.DrawWidth=5
r=Sqr(X*X+Y*Y)*700
Picture1.Circle(500,6500),r,,d,c
EndIf
ElseIfOption2.Value=TrueThen
IfX>=0OrY<0Ora>=0Orb<0Orm<>norX>aThen
PrintMsgBox("错误!
",48,"提示信息")
Else
Picture1.Line(5500,500)-(5500,6500)
Picture1.Line(500,6500)-(5500,6500)
Picture1.Line(560,6530)-(500,6500)
Picture1.Line(560,6470)-(500,6500)
Picture1.Line(5530,600)-(5500,500)
Picture1.Line(5470,600)-(5500,500)
Picture1.ForeColor=vbRed
Picture1.DrawWidth=5
r=Sqr(X*X+Y*Y)*700
Picture1.Circle(5500,6500),r,,pi-d,pi-c
EndIf
EndIf
EndSub
PrivateSubCommand2_Click()
Dimk,m,j,l,n,F(30),X(30),Y(30)AsInteger,aAsInteger,bAsInteger,cAsInteger,dAsInteger
a=Int(Text1)
b=Int(Text2)
c=Int(Text3)
d=Int(Text4)
m=0
l=0
k=0
F(m)=0
X(m)=a
Y(m)=b
Picture1.ForeColor=vbGreen
Picture1.DrawWidth=3
j=Abs(Abs(a)-Abs(c))+Abs(Abs(b)-Abs(d))
Form1.CurrentX=200
Form1.CurrentY=200
Print"初始","进给方向","F(0)=0","X(0)="&Int(Text1),"Y(0)="&Int(Text2),"Xe="&Int(Text4),"Ye="&Int(Text3),"∑="&j
IfOption1.Value=TrueThen
Forn=1Toj
IfF(m)>=0Andj>0Then
m=m+1
k=k+1
F(m)=F(m-1)-2*Abs(Y(m-1))+1
X(m)=X(m-1)
Y(m)=Y(m-1)-1
Picture1.Line(500+700*(a+l),6500-700*(b-k+1))-(500+700*(a+l),6500-700*(b-k))
Form1.CurrentX=200
Form1.CurrentY=200+m*300
Print"第"&m&"步","-△Y","F("&m&")="&F(m),"X("&m&")="&X(m),"Y("&m&")="&Y(m),"Xe="&Int(Text4),"Ye="&Int(Text3),"∑="&j-n
Else
l=l+1
m=m+1
F(m)=F(m-1)+2*Abs(X(m-1))+1
Y(m)=Y(m-1)
X(m)=X(m-1)+1
Picture1.Line(500+700*(a+l),6500-700*(b-k))-(500+700*(a+l-1),6500-700*(b-k))
Form1.CurrentX=200
Form1.CurrentY=200+m*300
Print"第"&m&"步","+△X","F("&m&")="&F(m),"X("&m&")="&X(m),"Y("&m&")="&Y(m),"Xe="&Int(Text4),"Ye="&Int(Text3),"∑="&j-n;""
EndIf
Nextn
ElseIfOption2.Value=TrueThen
Forn=1Toj
IfF(m)>=0Andj>0Then
m=m+1
l=l+1
F(m)=F(m-1)-2*Abs(X(m-1))+1
X(m)=X(m-1)+1
Y(m)=Y(m-1)
Picture1.Line(5500+700*(a+l),6500-700*(b+k))-(5500+700*(a+l-1),6500-700*(b+k))
Form1.CurrentX=200
Form1.CurrentY=200+m*300
Print"第"&m&"步","+△Y","F("&m&")="&F(m),"X("&m&")="&X(m),"Y("&m&")="&Y(m),"Xe="&Int(Text4),"Ye="&Int(Text3),"∑="&j-n
Else
k=k+1
m=m+1
F(m)=F(m-1)+2*Abs(Y(m-1))+1
Y(m)=Y(m-1)+1
X(m)=X(m-1)
Picture1.Line(5500+700*(a+l),6500-700*(b+k))-(5500+700*(a+l),6500-700*(b+k-1))
Form1.CurrentX=200
Form1.CurrentY=200+m*300
Print"第"&m&"步","+△X","F("&m&")="&F(m),"X("&m&")="&X(m),"Y("&m&")="&Y(m),"Xe="&Int(Text4),"Ye="&Int(Text3),"∑="&j-n
EndIf
Nextn
EndIf
EndSub
PrivateSubCommand3_Click()
Text1.Text=""
Text2.Text=""
Text3.Text=""
Text4.Text=""
Picture1.Cls
Form1.Cls
EndSub
七、软件运行仿真效果
八、参考文献
《宿迁学院课程设计指导书》
《数控原理与系统》
《计算机编程VB》
九、设计小结
在本次设计中,我们重点分析了逐点比较法的基本原理,这是实现软件插补的基础,有了这个基础,我们可以画出逐点比较法插补软件的流程图,然后根据流程图再对逐点比较法在软件中的插补算法进行描述,由此找出其中的规律,最后在VB软件中设计出一个小巧的软件,并在其中添加插补算法程序,最后导出软件。
这次课程设计,帮我们回顾了以前所学的知识,加深了和巩固了对这些知识的印象,
对于这次的设计来说,很多东西都具有难度,但在我们不懈的努力下,虽然辛苦,但最终还是完成了,同时我们也在这次设计中掌握了许多平时已经淡忘了的东西,感觉很有成就感,也收获了很多,同时也体会了一个人的力量是有限的,团队的力量是强大的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 比较法 课程设计 报告