数字积分圆弧第一二三四象限顺逆插补计算Word文档下载推荐.docx
《数字积分圆弧第一二三四象限顺逆插补计算Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字积分圆弧第一二三四象限顺逆插补计算Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
若求曲线与坐标轴所包围的面积,求解过程如下:
被积函数寄存器用以存放Y值,每当Δt出现一次,被积函数寄存器中的Y值就与累加器中的数值相加一次,并将累加结果存于累加器中,如果累加器的容量为一个单位面积,则在累加过程中,每超过一个单位面积,累加器就有溢出。
当累加次数达到累加器的容量时,所产生的溢出总数就是要求的总面积,即积分值。
被积函数寄存器与累加器相加的计算方法:
例:
被积函数寄存器与累加器均为3位寄存器,被积函数为5,求累加过程。
101101101101
+)000+)101+)010+)111
101010111100
+)100+)001+)110+)011
001110011000
经过2=8次累加完成积分运算,因为有5次溢出,所以积分值等于5。
5.2数字积分圆弧插补
圆心为坐标原点的圆弧方程式为:
可得圆的参数方程为:
对t微分得、方向上的速度分量为:
用累加器来近似积分为:
如图所示,设加工半径为R的第一象限逆时针圆弧AB,坐标原点定在圆心上,A(Xo,Yo)为圆弧起点,B(Xe,Ye)为圆弧终点,Pi(Xi,Yi)为加工动点。
如下图所示,可以得到:
V/R=Vx/Yi=Vy/Xi=K即Vx=KYi,Vy=KXi
因而可以得到坐标微小位移增量为:
ΔX=VxΔt=KYiΔtΔY=VyΔt=KXiΔt
设Δt=1,K=1/2则有:
可看出,用DDA法进行圆弧插补时,是对加工动点的坐标Xi和Yi的值分别进行累加,若积分累加器有溢出,则相应坐标轴进给一步,则圆弧积分插补器如图所示:
5.3数字积分法圆弧插补程序流程图
DDA法插补不同象限圆弧时,算法也有所不同。
当采用软件插补时,如果参与积分运算的寄存器均采用绝对值数据,则DDA法插补的积分累加过程完全相同,即JR+JV→JR,只是进给脉冲分配方向和圆弧插补动点坐标的修正有所不同。
5.5插补实例
设有第Ⅰ象限逆圆弧SE,起点为S(4,0),终点为E(0,4),且寄存器位数N=3。
试用DDA法对该圆弧进行插补,并画出插补轨迹。
解:
插补开始时,被积函数寄存器初值分别为 JVX=YS=0,JVY=XS=4,终点判别寄存器JSX=|Xe-XS|=4,JSY=|Ye-YS|=4。
该圆弧插补运算过程见下表,插补轨迹如下图所示的折线。
六、程序清单
PrivateSub建立坐标系_Click()
Picture1.ForeColor=vbBlack
Picture1.DrawWidth=2
Picture1.Line(500,4500)-(8500,4500)'
画直线坐标轴
Picture1.Line(4500,500)-(4500,8500)
Picture1.CurrentX=230'
当前位置
Picture1.CurrentY=4400
Picture1.Print"
-X"
'
坐标轴标注
Picture1.CurrentX=4300
Picture1.CurrentY=4300
(0,0)"
Picture1.CurrentX=8650
X"
Picture1.CurrentX=4400
Picture1.CurrentY=8600
-Y"
Picture1.CurrentX=4500
Picture1.CurrentY=400
Y"
EndSub
PrivateSub画圆弧_Click()
Dima,b,c,d,n,mAsInteger
DimrAsSingle
a=Val(Text1.Text)
b=Val(Text2.Text)
c=Val(Text3.Text)
d=Val(Text4.Text)
n=a*a+b*b
m=c*c+d*d
r=Sqr(n)
IfOption1.Value=TrueThen
Ifa<
0Orb<
0Orc<
0Ord<
0Then
ans=MsgBox("
出错了,起点、终点坐标不在同一象限内,请重新输入"
48,"
提示信息"
)
EndIf
EndIf
IfOption2.Value=TrueThen
Ifa>
0Orc>
IfOption3.Value=TrueThen
0Orb>
0Ord>
IfOption4.Value=TrueThen
Picture1.ForeColor=vbRed
Picture1.DrawWidth=4
ConstPI=3.1415926535
cAndb<
dThen
IfOption1.Value=TrueThen
Ifb=0Then
Ifc=0Then
Picture1.Circle(4500,4500),r*300,,0*3.14159,3.14159/2
Else
Picture1.Circle(4500,4500),r*300,,0*3.14159,3.14159/2-Atn(d/c)
ElseIfc=0Then
Picture1.Circle(4500,4500),r*300,,Atn(b/a),3.14159/2
Picture1.Circle(4500,4500),r*300,,Atn(b/a),3.14159/2-Atn(d/c)
ElseIfa<
cAndb>
Ifa=0Then
Ifd=0Then
Picture1.Circle(4500,4500),r*300,,Atn(d/c),3.14159/2
ElseIfd=0Then
Picture1.Circle(4500,4500),r*300,,0*3.14159,Atn(b/a)
Picture1.Circle(4500,4500),r*300,,Atn(d/c),Atn(b/a)
出错了,起点或终点坐标位置错误,请重新输入"
IfOption2.Value=TrueThen
Picture1.Circle(4500,4500),r*300,,3.14159/2,3.14159
Picture1.Circle(4500,4500),r*300,,3.14159/2,3.14159-Atn(-d/c)
Picture1.Circle(4500,4500),r*300,,3.14159/2+Atn(-a/b),3.14159
Picture1.Circle(4500,4500),r*300,,3.14159/2+Atn(-a/b),-Atn(-d/c)+3.14159
Picture1.Circle(4500,4500),r*300,,Atn(-c/d),3.14159
Picture1.Circle(4500,4500),r*300,,3.14159/2,3.14159-Atn(-b/a)
Picture1.Circle(4500,4500),r*300,,Atn(-c/d),3.14159-Atn(-b/a)
IfOption3.Value=TrueThen
Picture1.Circle(4500,4500),r*300,,3.14159,3*3.14159/2
Picture1.Circle(4500,4500),r*300,,3.14159,Atn(d/c)+3.14159
Picture1.Circle(4500,4500),r*300,,Atn(b/a)+3.14159,3*3.14159/2
Picture1.Circle(4500,4500),r*300,,Atn(b/a)+3.14159,Atn(d/c)+3.14159
ElseIfa>
Picture1.Circle(4500,4500),r*300,,3.14159+Atn(d/c),2*3.14159/2
Picture1.Circle(4500,4500),r*300,,3.14159,3*3.14159/2-Atn(a/b)
Picture1.Circle(4500,4500),r*300,,Atn(d/c)+3.14159,3*3.14159/2-Atn(a/b)
IfOption4.Value=TrueThen
Picture1.Circle(4500,4500),r*300,,3*3.14159/2,2*3.14159
Picture1.Circle(4500,4500),r*300,,3*3.14159/2,Atn(d/c)+3.14159*2
Picture1.Circle(4500,4500),r*300,,Atn(b/a)+3.14159*2,2*3.14159
Picture1.Circle(4500,4500),r*300,,Atn(b/a)+3.14159*2,Atn(d/c)+3.14159*2
Picture1.Circle(4500,4500),r*300,,3*3.14159/2+Atn(-c/d),2*3.14159
Picture1.Circle(4500,4500),r*300,,3*3.14159/2,-Atn(-b/a)
Picture1.Circle(4500,4500),r*300,,3*3.14159/2+Atn(-c/d),-Atn(-b/a)
PrivateSub插补计算_Click()
Dima,b,c,d,ni,mi,ai,bi,ci,k,f,g,m,n,l,i,xs,yx,xe,ye,jvx,jvy,xi,yiAsInteger
ni=a*a+b*b
mi=c*c+d*d
r=Sqr(ni)
form2.Cls
ci=2
f=1
g=1
k=0'
正X进给标志1正向-1负向
m=0'
负Y进给标志1正向-1负向
n=0'
累加次数
i=CInt(Text5)'
寄存器位数赋给i
l=2^i
xs=CInt(Text1)
ys=CInt(Text2)
xe=CInt(Text3)
ye=CInt(Text4)
jvx=Abs(CInt(Text2))
jvy=Abs(CInt(Text1))
jrx=0
jry=0
xi=Abs(CInt(Text3)-CInt(Text1))'
X方向总步
yi=Abs(CInt(Text4)-CInt(Text2))'
Y方向总步长
ai=xs
bi=ys
Picture1.ForeColor=vbGreen
Picture1.DrawWidth=3
form1.CurrentX=200
form1.CurrentY=200
Print"
"
&
X积分器"
Y积分器"
form1.CurrentX=100
form1.CurrentY=400
累加次数n"
jvx"
Jrx=Jrx+Jvx"
△X"
J∑x"
Jvy"
Jry=Jry+Jvy"
△Y"
J∑y"
form1.CurrentY=600
开始"
jvx&
jrx&
k&
xi&
jvy&
jry&
m&
yi
wz:
k=0'
X方向进给标志1X正向进给-1负向进给
m=0'
Y方向进给标志1Y正向进给-1负向进给
Ifxi>
0Then'
X方向判断
jrx=jrx+jvx
Ifjrx>
=lThen'
判断寄存器是否溢出
jrx=jrx-l'
溢出修正
寄存器位数判断
GoToww5
k=-1
k=1
xi=xi-1
Ifyi>
Y方向判断
jry=jry+jvy
Ifjry>
jry=jry-l'
m=1
m=-1