机床数控课设插补.docx
《机床数控课设插补.docx》由会员分享,可在线阅读,更多相关《机床数控课设插补.docx(12页珍藏版)》请在冰豆网上搜索。
机床数控课设插补
一、课设任务
用DDA法插补第二象限直线。
用逐点比较法插补第三到第二象限顺圆弧。
二、课设要求
1、具有数据输入界面,有起点、终点、半径及插补步长等;
2、具有单步插补过程的动态显示功能;
3、插补的步长可调;
三、编程语言
VisualBasic
四、功能说明
本程序用逐点比较法插补第二象限的直线,及第三二象限的顺圆弧,可进行连续插补或单步插补。
1、直线插补:
用逐点比较法实现第二象限任意直线的插补,需要输入起点、终点坐标及步长。
2、圆弧插补:
用逐点比较法实现第三二象限的顺圆弧段的插补,需要输入起点、终点坐标、半径和步长。
3、插补步长可调。
4、可以单步执行所有插补动作,单击一次按钮执行一次插补。
五、程序容
DDA法插补第二象限直线
1、源程序:
DimA,B,C,D,E,F,G,I,J,E,FAsSingle
**************连续直线插补**************
PrivateSubCommand1_Click()
If(-C+A)>(D-B)ThenF=-C+AElse:
F=D-B
G=1
DoWhile(2^G)<=F
G=G+1
Loop
ForH=0To(2^G)Step1
I=I+(-C+A)
x1=x2
If(I/(2^G))>=EThenI=I-E*(2^G):
x2=x2-E
J=J+(D-B)
y1=y2
If(J/(2^G))>=EThenJ=J-E*(2^G):
y2=y2-E
Picture1.Line(x2*Text6.Text,y2*Text6.Text)-(x1*Text6.Text,y1*Text6.Text),vbGreen
NextH
Picture1.Line(C*Text6.Text,-D*Text6.Text)-(A*Text6.Text,-B*Text6.Text),vbRed
EndSub
****************单步直线插补*************
PrivateSubCommand2_Click()
If(-C+A)>(D-B)ThenF=-C+AElse:
F=D-B
G=1
DoWhile(2^G)<=F
G=G+1
Picture1.Line(C*Text6.Text,-D*Text6.Text)-(A*Text6.Text,-B*Text6.Text),vbRed
Loop
I=I+(-C+A)
J=J+(D-B)
If(I/(2^G))>=EAnd(J/(2^G))>=EThen
Picture1.Line((x2-E)*Text6.Text,(y2-E)*Text6.Text)-(x2*Text6.Text,y2*Text6.Text),vbGreen
I=I-E*(2^G)
J=J-E*(2^G)
x2=x2-E
y2=y2-E
ElseIf(I/(2^G))>=EAnd(J/(2^G))Picture1.Line((x2-E)*Text6.Text,y2*Text6.Text)-(x2*Text6.Text,y2*Text6.Text),vbGreen
I=I-E*(2^G)
x2=x2-E
ElseIf(I/(2^G))=EThen
Picture1.Line(x2*Text6.Text,(y2-E)*Text6.Text)-(x2*Text6.Text,y2*Text6.Text),vbGreen
J=J-E*(2^G)
y2=y2-E
EndIf
EndSub
3.DDA法插补第二象限直线的流程图:
Y
N
Y
N
Y
N
M
←
m
-1
Σ
X
e
←Σ
X
e
X
e
Σ
Y
e
←Σ
Y
e
Y
e
初始化
x
e
→
X
e
,
y
e
→
Y
e
,
累加次数
m
→
M
,
Σ
X
e、
Σ
Y
e
清零
M=0
吗?
∑
Y
e
有溢出吗?
∑
X
e
有溢出吗?
+
Y
向走一步
-
X
向走一步
结束
逐点比较法插补第三到第二象限顺圆弧
1.源程序:
DimX0,Y0,CXY,CD,CX1,CY1,CX2,CY2,CX11,CY11,CX22,CY22,ci,R,a1,b1,c1,d1,e1,x1,y1,x2,y2AsSingle
CONSTPi=3.1415926
***************连续圆弧插补************
PrivateSubCommand6_Click()
d1=1/2*(CX22^2+CY22^2-CX11^2-CY11^2)/(CY22-CY11)
e1=(CX11-CX22)/(CY22-CY11)
a1=1+e1^2
b1=2*d1*e1-2*CX11-2*CY11*e1
c1=CX11^2+CY11^2+d1^2-2*d1*CY11-R^2
X0=(-b1+Sqr(b1^2-4*a1*c1))/(2*a1)
Y0=d1+e1*X0***********************求得圆心
IfCX1<>X0AndCX2<>X0Then
o=Atn((CY1-Y0)/(CX1-X0))+Pi**************起始角
o1=Atn((CY2-Y0)/(CX2-X0))+Pi**************终止角
Picture2.Circle(X0,Y0),R,vbRed,o1,o
Else
Picture2.Circle(X0,Y0),R,vbRed,2/Pi,3*Pi/2
EndIf**************画圆
again:
**************开始插补过程
IfCY1If(CX1-X0)^2+(CY1-Y0)^2<=R^2Then
Picture2.Line(CX1,CY1)-(CX1-ci,CY1)
CX1=CX1-ci
Else
Picture2.Line(CX1,CY1)-(CX1,CY1+ci)
CY1=CY1+ci
EndIf
Else
If(CX1-X0)^2+(CY1-Y0)^2<=R^2Then
Picture2.Line(CX1,CY1)-(CX1,CY1+ci)
CY1=CY1+ci
Else
Picture2.Line(CX1,CY1)-(CX1+ci,CY1)
CX1=CX1+ci
EndIf
EndIf
If(CX1-CX2)^2+(CY1-CY2)^2>(CX1-CX2+ci)^2+(CY1-CY2)^2Or(CX1-CX2)^2+(CY1-CY2)^2>(CX1-CX2-ci)^2+(CY1-CY2)^2Or(CX1-CX2)^2+(CY1-CY2)^2>(CX1-CX2)^2+(CY1-CY2+ci)^2Or(CX1-CX2)^2+(CY1-CY2)^2>(CX1-CX2)^2+(CY1-CY2-ci)^2Then
GoToagain
Else
EndIf
EndSub
*************单步圆弧插补*************
PrivateSubCommand7_Click()
d1=1/2*(CX22^2+CY22^2-CX11^2-CY11^2)/(CY22-CY11)
e1=(CX11-CX22)/(CY22-CY11)
a1=1+e1^2
b1=2*d1*e1-2*CX11-2*CY11*e1
c1=CX11^2+CY11^2+d1^2-2*d1*CY11-R^2
X0=(-b1+Sqr(b1^2-4*a1*c1))/(2*a1)
Y0=d1+e1*X0***********************求得圆心
IfCX1<>X0AndCX2<>X0Then
o=Atn((CY1-Y0)/(CX1-X0))+Pi**************终止角
o1=Atn((CY2-Y0)/(CX2-X0))+Pi**************终止角
Picture2.Circle(X0,Y0),R,vbRed,o1,o
Else
Picture2.Circle(X0,Y0),R,vbRed,2/Pi,3*Pi/2
EndIf**************画圆
If(CX1-CX2)^2+(CY1-CY2)^2>(CX1-CX2+ci)^2+(CY1-CY2)^2Or(CX1-CX2)^2+(CY1-CY2)^2>(CX1-CX2-ci)^2+(CY1-CY2)^2Or(CX1-CX2)^2+(CY1-CY2)^2>(CX1-CX2)^2+(CY1-CY2+ci)^2Or(CX1-CX2)^2+(CY1-CY2)^2>(CX1-CX2)^2+(CY1-CY2-ci)^2Then
Else
GoTocover**************开始插补过程
EndIf
IfCY1If(CX1-X0)^2+(CY1-Y0)^2<=R^2Then
Picture2.Line(CX1,CY1)-(CX1-ci,CY1)
CX1=CX1-ci
Else
Picture2.Line(CX1,CY1)-(CX1,CY1+ci)
CY1=CY1+ci
EndIf
Else
If(CX1-X0)^2+(CY1-Y0)^2<=R^2Then
Picture2.Line(CX1,CY1)-(CX1,CY1+ci)
CY1=CY1+ci
Else
Picture2.Line(CX1,CY1)-(CX1+ci,CY1)
CX1=CX1+ci
EndIf
EndIf
cover:
EndSub
2.变量说明:
CX1=圆弧起点的横坐标值,CY1=圆弧起点的纵坐标值
CX2=圆弧终点的横坐标值,CY2=圆弧终点的纵坐标值
X0=圆弧半径的横坐标值,Y0=圆弧半径的纵坐标值
R=圆弧半径,ci=圆弧插补的步长
a1,b1,c1,d1为计算圆点的中间变量
3.逐点比较法插补第三象限顺圆弧程序流程图
逐点比较法插补第二象限顺圆弧程序流程图:
六、程序界面及运行结果
DDA插补第二象限直线运行界面
DDA插补第二象限直线运行结果
逐点比较法插补二三象限顺圆弧运行界面
逐点比较法插补二三象限顺圆弧运行结果
七、课设中遇到的问题及解决办法
1、在进行单步插补时出现问题,单步插补出不来?
定义的变量应为全局变量,通过按钮来实现单步操作。
按第一次按钮,程序执行一步,按第二次时,程序执行两步,及将第一步做的覆盖后在多做一步。
依此,每次按下按钮都比前一次多做一步,这样,作图时就表现为单步运行。
2、在圆弧插补是画出的圆跟圆弧的插补在起点和终点处不重合?
在画图的pitcure属性中的scaletop和scalewidth的值应相等,否则画出的横纵坐标不等,导致在横坐标和纵坐标上的长对不等使得与圆弧不重合。
3、如何解决起点不是原点的直线的插补
若是起点不是原点的话,可以将起点平移到原点位置,而终点也相应的平移即可,这样就解决了起点不是原点的问题。
根据这个思想在判断象限时就拿终点坐标和起点坐标比较来判断终点属于哪个象限。
和插补直线一样,当圆心不是原点时,可以将圆心平移到原点位置,圆上各点相应的平移即可。
八、心得体会
通过这次的机床数控课程设计,使我加深了对数控机床的插补的了解,更好的掌握了逐点比较法的插补原理。
这次课程设计选择了VisualBasic作为编程语言,由于是初次接触,不能熟练得掌握,所以使用起来不是很顺利,对整体进度有一些影响。
通过这次课程设计,增加了知识,锻炼了自己的实际动手和操作能力,对以后的学习有着深远的影响。
九、参考资料
陆慰民.2000.VisualBasic程序设计教程(6.0版).:
高等教育
勇.2002.VisualBasic课程设计案例精编.:
中国水利水电
段兴.2002.VisualBasic实用程序100例.:
人民邮电