数字积分圆弧第一二三四象限顺逆插补计算.docx
《数字积分圆弧第一二三四象限顺逆插补计算.docx》由会员分享,可在线阅读,更多相关《数字积分圆弧第一二三四象限顺逆插补计算.docx(28页珍藏版)》请在冰豆网上搜索。
数字积分圆弧第一二三四象限顺逆插补计算
数控技术课程设计说明书
设计题目:
数字积分法圆弧插补计软件设计
指导老师:
专业:
机械设计制造及其自动化
班级:
机
姓名:
学号:
一、课程设计题目1
二、课程设计的目的1
三、课程设计使用的主要仪器设备1
四、课程设计的任务题目描述和要求1
五、数字积分法插补原理2
5.1从几何角度来看积分运算2
5.2数字积分圆弧插补3
5.3数字积分法圆弧插补程序流程图5
5.4插补实例6
六、程序清单7
七、软件运行效果仿真18
八、课程小节21
九、参考文献22
一、课程设计题目
数字积分法第一、二、三、四象限顺、逆圆插补计算
二、课程设计的目的
《数控原理与系统》是自动化〔数控〕专业的一门主要专业课程,安排课程设计的目的是通过课程设计方式使学生进一步掌握和消化数控原理基本内容,了解数控系统的组成,掌握系统控制原理和方法,通过设计与调试,掌握各种功能实的现方法,为今后从事数控领域的工作打下扎实的基础。
1)了解连续轨迹控制数控系统的组成原理。
2)掌握数字积分法〔DDA〕插补的基本原理。
3〕掌握数字积分法〔DDA〕插补的软件实现方法。
三、课程设计使用的主要仪器设备
1、PC电脑一台
2、数控机床实验装置一台
3、支持软件假设干〔选用VB环境〕
四、课程设计的任务题目描述和要求
数字积分法又称数字微分分析法DDA(DigitalDifferentialAnalyzer)。
数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。
其缺点是速度调节不便,插补精度需要采取一定措施才能满足要求。
由于电脑有较强的计算功能和灵活性,采用软件插补时,上述缺点易于克服。
本次课程设计具体要求如下:
〔1〕掌握数字积分插补法基本原理
〔2〕设计出数字积分〔DDA〕插补法插补软件流程图
〔3〕编写出算法程序清单算法描述〔数字积分法算法在VB中的具体实现〕
〔4〕要求软件能够实现第一、二、三、四象限顺、逆圆插补计算
〔5〕软件运行仿真效果插补结果要求能够以图形模式进行输出
五、数字积分法插补原理
数字积分法又称数字积分分析法DDA(DigitaldifferentialAnalyzer),简称积分器,是在数字积分器的基础上建立起来的一种插补算法。
具有逻辑能力强的特点,可实现一次、两次甚至高次曲线插补,易于实现多坐标联动。
只需输入不多的几个数据,就能加工圆弧等形状较为复杂的轮廓曲线。
直线插补时脉冲较均匀。
并具有运算速度快,应用广泛等特点。
5.1从几何角度来看积分运算
如下列图所示,从时刻到t求函数曲线所包围的面积时,可用积分公式表示,如果将0~t的时间划分成时间间隔为的有限区间,当足够小时,可得近似公式:
假设△t取“1”,上式简化为:
这种累加求和运算,即积分运算可用数字积分器来实现,
假设求曲线与坐标轴所包围的面积,求解过程如下:
被积函数寄存器用以存放Y值,每当Δt出现一次,被积函数寄存器中的Y值就与累加器中的数值相加一次,并将累加结果存于累加器中,如果累加器的容量为一个单位面积,则在累加过程中,每超过一个单位面积,累加器就有溢出。
当累加次数到达累加器的容量时,所产生的溢出总数就是要求的总面积,即积分值。
被积函数寄存器与累加器相加的计算方法:
例:
被积函数寄存器与累加器均为3位寄存器,被积函数为5,求累加过程。
101101101101
+〕000+〕101+〕010+〕111
101010111100
101101101101
+〕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,只是进给脉冲分配方向和圆弧插补动点坐标的修正有所不同。
设有第Ⅰ象限逆圆弧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
Picture1.Print"(0,0)"
Picture1.CurrentX=8650
Picture1.CurrentY=4400
Picture1.Print"X"
Picture1.CurrentX=4400
Picture1.CurrentY=8600
Picture1.Print"-Y"
Picture1.CurrentX=4500
Picture1.CurrentY=400
Picture1.Print"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>0Orb<0Orc>0Ord<0Then
ans=MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入",48,"提示信息")
EndIf
EndIf
IfOption3.Value=TrueThen
Ifa>0Orb>0Orc>0Ord>0Then
ans=MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入",48,"提示信息")
EndIf
EndIf
IfOption4.Value=TrueThen
Ifa<0Orb>0Orc<0Ord>0Then
ans=MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入",48,"提示信息")
EndIf
EndIf
Picture1.ForeColor=vbRed
Picture1.DrawWidth=4
IfOption1.Value=TrueThen
Ifa>cAndbIfOption1.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)
EndIf
ElseIfc=0Then
Picture1.Circle(4500,4500),r*300,,Atn(b/a),3.14159/2
Else
Picture1.Circle(4500,4500),r*300,,Atn(b/a),3.14159/2-Atn(d/c)
EndIf
EndIf
ElseIfadThen
IfOption1.Value=TrueThen
Ifa=0Then
Ifd=0Then
Picture1.Circle(4500,4500),r*300,,0*3.14159,3.14159/2
Else
Picture1.Circle(4500,4500),r*300,,Atn(d/c),3.14159/2
EndIf
ElseIfd=0Then
Picture1.Circle(4500,4500),r*300,,0*3.14159,Atn(b/a)
Else
Picture1.Circle(4500,4500),r*300,,Atn(d/c),Atn(b/a)
EndIf
EndIf
Else
ans=MsgBox("出错了,起点或终点坐标位置错误,请重新输入",48,"提示信息")
EndIf
EndIf
IfOption2.Value=TrueThen
Ifa>cAndb>dThen
IfOption2.Value=TrueThen
Ifa=0Then
Ifd=0Then
Else
Picture1.Circle(4500,4500),r*300,,3.14159/2,3.14159-Atn(-d/c)
EndIf
ElseIfd=0Then
Else
EndIf
EndIf
ElseIfaIfOption2.Value=TrueThen
Ifb=0Then
Ifc=0Then
Else
EndIf
ElseIfc=0Then
Picture1.Circle(4500,4500),r*300,,3.14159/2,3.14159-Atn(-b/a)
Else
Picture1.Circle(4500,4500),r*300,,Atn(-c/d),3.14159-Atn(-b/a)
EndIf
EndIf
Else
ans=MsgBox("出错了,起点或终点坐标位置错误,请重新输入",48,"提示信息")
EndIf
EndIf
IfOption3.Value=TrueThen
IfadThen
IfOption3.Value=TrueThen
Ifb=0Then
Ifc=0Then
Picture1.Circle(4500,4500),r*300,,3.14159,3*3.14159/2
Else
EndIf
ElseIfc=0Then
Picture1.Circle(4500,4500),r*300,,Atn(b/a)+3.14159,3*3.14159/2
Else
EndIf
EndIf
ElseIfa>cAndbIfOption3.Value=TrueThen
Ifa=0Then
Ifd=0Then
Picture1.Circle(4500,4500),r*300,,3.14159,3*3.14159/2
Else
Picture1.Circle(4500,4500),r*300,,3.14159+Atn(d/c),2*3.14159/2
EndIf
ElseIfd=0Then
Picture1.Circle(4500,4500),r*300,,3.14159,3*3.14159/2-Atn(a/b)
Else
Picture1.Circle(4500,4500),r*300,,Atn(d/c)+3.14159,3*3.14159/2-Atn(a/b)
EndIf
EndIf
Else
ans=MsgBox("出错了,起点或终点坐标位置错误,请重新输入",48,"提示信息")
EndIf
EndIf
IfOption4.Value=TrueThen
IfaIfOption4.Value=TrueThen
Ifa=0Then
Ifd=0Then
Else
Picture1.Circle(4500,4500),r*300,,3*3.14159/2,Atn(d/c)+3.14159*2
EndIf
ElseIfd=0Then
Else
Picture1.Circle(4500,4500),r*300,,Atn(b/a)+3.14159*2,Atn(d/c)+3.14159*2
EndIf
EndIf
ElseIfa>cAndb>dThen
IfOption4.Value=TrueThen
Ifb=0Then
Ifc=0Then
Else
EndIf
ElseIfc=0Then
Picture1.Circle(4500,4500),r*300,,3*3.14159/2,-Atn(-b/a)
Else
Picture1.Circle(4500,4500),r*300,,3*3.14159/2+Atn(-c/d),-Atn(-b/a)
EndIf
EndIf
Else
ans=MsgBox("出错了,起点或终点坐标位置错误,请重新输入",48,"提示信息")
EndIf
EndIf
EndSub
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
DimrAsSingle
a=Val(Text1.Text)
b=Val(Text2.Text)
c=Val(Text3.Text)
d=Val(Text4.Text)
ni=a*a+b*b
mi=c*c+d*d
r=Sqr(ni)
IfOption1.Value=TrueThen
Ifa<0Orb<0Orc<0Ord<0Then
ans=MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入",48,"提示信息")
EndIf
EndIf
IfOption2.Value=TrueThen
Ifa>0Orb<0Orc>0Ord<0Then
ans=MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入",48,"提示信息")
EndIf
EndIf
IfOption3.Value=TrueThen
Ifa>0Orb>0Orc>0Ord>0Then
ans=MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入",48,"提示信息")
EndIf
EndIf
IfOption4.Value=TrueThen
Ifa<0Orb>0Orc<0Ord>0Then
ans=MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入",48,"提示信息")
EndIf
EndIf
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
Print"累加次数n"&"jvx"&"Jrx=Jrx+Jvx"&"△X"&"J∑x"&"Jvy"&"Jry=Jry+Jvy"&"△Y"&"J∑y"
form1.CurrentX=100
form1.CurrentY=600
Print"开始"&""&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'溢出修正
Ifjrx>=lThen'寄存器位数判断
GoToww5
EndIf
IfOption1.Value=TrueThen
Ifa>cAndbk=-1
Else
k=1
EndIf
EndIf
IfOption2.Value=TrueThen
Ifa>cAndb>dThen
k=-1
Else
k=1
EndIf
EndIf
IfOption3.Value=TrueThen
Ifa>cAndbk=-1
Else
k=1
EndIf
EndIf
IfOption4.Value=TrueThen
Ifa>cAndb>dThen
k=-1
Else
k=1
EndIf
EndIf
xi=xi-1
EndIf
EndIf
Ifyi>0Then'Y方向判断
jry=jry+jvy
Ifjry>=lThen'判断寄存器是否溢出
jry=jry-l'溢出修正
Ifjry>=lThen'寄存器位数判断
GoToww5
EndIf
IfOption1.Value=TrueThen
Ifa>cAndbm=1
Else
m=-1
EndIf
EndIf
IfOption2.Value=TrueThen
Ifam=1
Else
m=-1
EndIf
EndIf
IfOption3.Value=TrueThen
Ifa>cAndbm=1
Else
m=-1
EndIf
EndIf
IfOption4.Value=TrueThen
Ifam=1
Else
m=-1
EndIf
EndIf
yi=yi-1'Y方向总步长减1
EndIf
EndIf
n=n+1'累加次数加1
form1.CurrentX=10