基于VB的数字积分法插补软件设计.docx
- 文档编号:9174522
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:25
- 大小:295.64KB
基于VB的数字积分法插补软件设计.docx
《基于VB的数字积分法插补软件设计.docx》由会员分享,可在线阅读,更多相关《基于VB的数字积分法插补软件设计.docx(25页珍藏版)》请在冰点文库上搜索。
基于VB的数字积分法插补软件设计
课程名称:
设计题目:
基于VB的数字积分法插补软件设计
院系:
专业:
年级:
姓名:
指导教师:
西南交通大学峨眉校区
2011年2月9日
课程设计任务书
专业姓名学号
开题日期:
2010年12月16日完成日期:
2011年2月9日
题目:
基于VB的数字积分法插补软件设计
一、设计的目的
通过本次课程设计,使学生进一步掌握数字积分法插补直线和圆弧的基本原理,增强学生《数控原理与系统》所学知识的应用能力;结合VB的使用技术,进一步掌握数字积分法插补软件的实现方法。
二、设计的内容及要求
阐述数字积分插补法的基本原理,构建数字积分插补法插补软件流程图;利用VB编写简易程序界面,以实现对给定数据进行插补类型、插补象限、插补方向和改进插补算法的多重选择,并将软件运行的仿真结果以列表的形式呈现在读者面前。
三、指导教师评语
四、成绩
指导教师(签章)
年月日
目录
摘要……………………………………………………
第一章引言……………………………………………1
第二章插补原理概述…………………………………2
2.1数字积分法基本原理………………………………2
2.2数字积分法直线插补………………………………3
2.3数字积分法圆弧插补………………………………4
第三章插补算法的VB实现…………………………6
3.1VisualBasic简介…………………………………6
3.2系统流程图简介^…………………………………6
3.3DDA直线插补软件流程图及算法描述……………7
3.4DDA圆弧插补软件流程图及算法描述……………9
结语……………………………………………………12
参考文献………………………………………………13
附录……………………………………………………14
摘要
针对目前《数控原理与系统》教学中实验设备昂贵、实验课时有限和插补算法理论教学抽象枯燥的具体情况,讨论了如何运用VB技术实现数控插补仿真教学。
具体分析了数字积分法插补全象限直线、顺逆圆的算法,给出了插补流程图,编制了插补软件,提供了程序代码,列出了仿真结果。
本方法通过交互、可视化的形象手段,提高了授课的质量和效率,具有低成本和易操作性的优点。
关键词:
插补;数字积分法;VB;仿真
第一章引言
数控技术是一门既具有理论性又具有实践性的多学科融合技术,实践教学非常重要。
插补技术是数控技术教学中的一个重点内容,也是一个难点内容,但数控技术实验设备非常昂贵,无法大量购进,不能满足学生亲自动手的实验要求[1]。
而在传统的插补技术教学中,通常是教师在黑板上列出插补的计算方法流程图和具体例子,但由于算法的表达形式比较抽象,学生的掌握程度并不高。
而高级编程语言VisualBasic应用广泛,是通用的可视化编程软件[2],编程易于上手。
因此结合VB编程语言来实现数控插补的仿真教学具有低成本和易操作的优点。
第二章插补原理概述
插补一般是指已知曲线上的某些数据,按照某种
算法计算已知点之间的中间点的方法,也称为“数据点的密化”。
在数控系统中,插补过程是根据曲线段已知的几何数据以及相应工艺数据中的速度信息,计算出曲线起、终点之间的一系列中间点,分别向各个坐标轴发出方向、大小和速度都确定的协调的运动序列命令,通过各个轴运动的合成,产生数控加工程序要求的工件轮廓的刀具运动轨迹。
插补方法主要分为基准脉冲插补法和数据采样插补法两大类,逐点比较法和数字积分法均属于基准脉冲插补法。
逐点比较法的基本思路是每走一步都要将加工点的瞬间坐标与规定的图形轨迹相比较,判断其偏差,然后决定下一步的走向。
逐点比较法运算直观,插补误差最大不超过一个脉冲当量,而且输出脉冲均匀,在两坐标数控系统应用较为普遍。
数字积分法又称DDA法,是利用数字积分的方法,计算刀具沿各坐标轴的位移,使得刀具沿着所加工的曲线运动。
数字积分法运算速度快,脉冲分配均匀,易于实现多坐标联动,在轮廓控制数控系统中有着广泛的应用[3]。
本文主要针对数字积分插补方法的插补仿真系统进行设计。
2.1数字积分法基本原理
图1
如图1,从时刻t=0到t,函数Y=f(t)曲线所包围的面积可表示为S=。
若将0~t的时间划分成时间间隔为Δt的有限区间,当Δt足够小时,可得公式:
S=
=
,即积分运算可用一系列微小矩形面积累加求和来近似。
若Δt取最小基本单位“1”,则上式可简化为:
S=
2.2数字积分法直线插补
图2
如图2,直线段OA,起点O(0,0),终点A(Xe,Ye),
动点沿X、Y坐标移动的速度分别为Vx、Vy,则动点沿X、Y坐标移动的微小增量为:
ΔX=VxΔt,ΔY=VyΔt。
若动点沿OA匀速移动,V、Vx、Vy均为常数,则有:
成立。
因而得到坐标微小位移增量ΔX=VxΔt=KXeΔt,
ΔY=VyΔt=KYeΔt。
故可以把动点从原点走向终点的过程看作X、Y坐标每经过一个单位时间间隔以KXe、KYe进行累加的过程,则可得直线积分插补近似表达式为:
X=,Y=。
由此可以得到直线插补的数字积分插补器,如图3
图3
设经过m次累加,X、Y坐标分别达到终点,则有:
X=∑(KXe)Δt=KmXe=Xe,Y=∑(KYe)Δt=KmYe=Ye。
由该式可知mK=1,即m=1/K。
这样,经过m次累加后,X、Y坐标分别到达终点,而溢出脉冲总数即为:
X=Xe,Y=Ye。
根据每次增量ΔX、ΔY均不大于1,以保证每次分配的进给脉冲不超过1,即需满足:
ΔX=KXe≤1,
ΔY=KYe≤1,其中Xe、Ye的最大允许值受被积函数寄存器容量的限制。
假定寄存器有n位,则Xe、Ye的最大允许值为-1。
若取K=1/2,则必定满足:
KXe=(
-1)/2<1,KYe=(
-1)/2<1。
由此可知,动点从原点到达终点的累加次数为:
m=1/K=2。
2.3数字积分法圆弧插补
图4
如图4所示,设半径为R的第一象限逆时针圆弧AB,坐标原点定在圆心上,A(Xo,Yo)为圆弧起点,B(Xe,Ye)为圆弧终点,Pi(Xi,Yi)为加工动点。
列方程得Vx=KYi,Vy=KXi,故可得到坐标微小位移ΔX=VxΔt=KYiΔt,
ΔY=VyΔt=KXiΔt。
设Δt=1,K=1/
则有X=K,Y=K.
由此可得,用DDA法进行圆弧插补时,是对加工动点的坐标Xi和Yi的值分别进行累加,若积分累加器有溢出,则相应坐标轴进给一步。
圆弧积分插补器如图5所示:
图5
第三章插补算法的VB实现
3.1VisualBasic简介
MicrosoftVisualBasic是可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言,是一套完全独立的开发系统,它提供了开发Microsoft
Windows应用程序的最迅速、最简捷的方法。
在本程序中,应用了VisualBasic提供的如下对象:
Form(窗体)、Command(命令按钮)、Text(文本框)、OptionButton(单选按钮)、Frame(框架)等及它们的属性和方法[4]。
3.2系统流程图简介
系统以VisualBasic语言进行设计,系统主要包括参数输入、坐标平移、过象限判断、插补类型判断和插补计算及仿真等主要模块[5]。
(1)参数输入用于输入直线或者圆弧的有关参数,如直线的起点及终点坐标,圆弧的起点、终点、圆心或者半径等数据,另外还有插补方向(如顺逆圆插补)、插补精度(如全加载或半加载)和插补时间间隔(即对插补仿真的速度进行设置)等参数。
由于本系统中圆弧的圆心指定为坐标原点,因此,在给出圆弧的起点、终点、或者半径等数据后,就能唯一确定需要进行插补计算的圆弧对象。
(2)坐标平移本系统插补计算中,直线的起点或者圆弧的圆心均为坐标原点,故可免去坐标平移这一步骤。
有时,为了使所设计的系统具有一定的通用性,系统中直线的起点和圆弧的圆心是任意给定的,并非一定与坐标原点重合,因此为了方便计算,就需采用坐标平移的方法。
即在判断直线起点和圆弧的圆心为非坐标原点后,在插补计算前将坐标原点移到需要进行插补计算的直线的起点或者圆弧的圆心处,这也为下一步的插补类型判断和圆弧的过象限判断提供了方便。
(3)过象限判断当插补对象为圆弧时,存在过象限问题,而不同象限圆弧的插补计算方法也不同,因此需要对圆弧进行过象限判断[6]。
(4)插补类型判断无论插补对象是直线还是圆弧,不同象限的插补对象存在不同的插补计算方法。
直线存在四个象限的不同插补情况,而圆弧存在四个象限八种不同插补情况。
在系统中将直线或者圆弧的不同插补计算方法设置为不同的子模块,对插补类型进行判断后,直接调用相应的插补子模块进行计算。
(5)插补计算及仿真该模块除完成相应的插补计算外,还完成对插补轨迹的仿真显示。
3.3DDA直线插补软件流程图及算法描述
‘象限判断’
If((Xe-Xo)>0And(Ye-Yo)>0)Then‘第一象限判断’
Iquad=1
If((Xe-Xo)<0And(Ye-Yo)>0)Then‘第二象限判断’
Iquad=1
If((Xe-Xo)<0And(Ye-Yo)<0)Then‘第三象限判断’
Iquad=1
If((Xe-Xo)>0And(Ye-Yo)<0)Then‘第四象限判断’
Iquad=1
‘终点判断’
DoUntil插补记录=寄存器值8(默认为3为寄存器)
Call插补运算
IfX标志=1ThenX动点=X动点+1Else
IfY标志=1ThenY动点=Y动点-1Else
Loop
EndSub
Sub插补运算()
X寄存器=X寄存器+Abs(X终点)
Y寄存器=Y寄存器+Abs(Y终点)
X标志=0
Y标志=0
IfX寄存器>=寄存器值Then
X寄存器=X寄存器Mod寄存器值
X标志=1
EndIf
IfY寄存器>=寄存器值Then
Y寄存器=Y寄存器Mod寄存器值
Y标志=1
EndIf
插补记录=插补记录+1
EndSub
3.4DDA圆弧插补软件流程图及算法描述
Sub 插补X()
标志X=0
If 余数X>=Q Then
余数X=余数XModQ
x动点=x动点+1:
标志X=1
End If
End Sub
Sub 插补Y()
标志Y=0
If 余数Y>=Q Then
余数Y=余数YModQ
y动点=y动点+1:
标志Y=1
End If
End Sub
Sub 插补Z()
标志Z = 0
If 余数Z>=Q Then
余数Z=余数ZModQ
z动点=z动点+1:
标志Z=1
End If
End Sub
Sub 插补公共()
余数X=余数X+ x终点
余数Y=余数Y+ y终点
余数Z=余数Z+ z终点
插补X
插补Y
插补Z
插补记录=插补记录+1
End Sub
Sub 插补()
Dim c As Integer
插补记录=0:
余数X=0:
余数Y=0:
余数Z=0:
‘划轮廓线’
PSet (z原点, x原点), vbRed
Select Case 象限标志
Case1:
’第一象限插补
DoUntil 插补记录=Q
插补公共
Line-Step(z步长×标志Z,x步长×标志X),vbRed
Loop
Case2:
’第二象限插补
c=x终点:
x终点=z终点:
z终点=-c
c=x步长:
x步长=z步长:
z步长=-c
DoUntil 插补记录=Q
插补公共
Line-Step(x步长×标志X,z步长×标志Z), vbRed
Loop
Case3:
’第三象限插补
x终点=-x终点:
z终点=-z终点
x步长=-x步长:
z步长=-z步长
DoUntil 插补记录=Q
插补公共
Line-Step(z步长×标志Z,x步长×标志X),vbRed
Loop
Case4:
’第四象限插补
c=x终点:
x终点=-z终点:
z终点=c
c=x步长:
x步长=-z步长:
z步长=c
DoUntil 插补记录=Q
插补公共
Line-Step(x步长×标志X,z步长×标志Z), vbRed
Loop
End Select
End Sub
结语
本文提出了一种用计算机来模拟数控插补的方法,在充分利用VB设计语言简单、直观的基础上,使数控插补原理的实现更为形象化。
采用本方法,通过可视化的形象手段,可以给读者动态的演示插补过程,可以帮助读者更加直观的理解数控插补的原理。
本软件具有界面友好、操作简单、可视性好等特点,有助于读者学习和理解数控技术,提高学习兴趣。
参考文献:
[1]徐开芸,汪木兰.机床数控原理与系统实验装置研制[J].实验技术与管理,2002.5.
[2]网冠科技.VisualBasic6.0程序设计工程师.北京:
机械工业出版社,2002.
[3]王润孝.机床数控原理与系统.西安:
西北工业大学出版社,2002.
[4]王晓敏等.VisualBasic程序设计.北京:
中国铁道出版社,2003.
[5]刘志雄,樊仁才.基于VisualBasic的数控插补仿真教学系统[J].机械制造,2004,(04).
[6]邢建国,谭建荣.数字积分插补法编程中的几个技巧[J].机电工程,1998,(04).
附录
DimnAsInteger
DimmAsInteger
DimaAsInteger
DimbAsInteger
DimcAsInteger
DimdAsInteger
DimeAsInteger
DimfAsInteger
DimiAsInteger
DimjAsInteger
Dimu(10001,9)AsInteger
PrivateSubCommand1_Click()
Cls
'插补直线'
IfOption1.Value=TrueThen
a=0
u(0,1)=Text3.Text
u(0,5)=Text4.Text
u(0,2)=0
u(0,3)=0
u(0,6)=0
u(0,7)=0
u(0,4)=0
u(0,8)=0
IfOption9.Value=TrueThen
f=1
EndIf
IfOption10.Value=TrueThen
u(0,2)=4
u(0,6)=4
f=1
EndIf
IfOption11.Value=TrueThen
u(0,2)=7
u(0,6)=7
f=1
EndIf
Fori=0To1000
u(i,1)=Text3.Text*f
u(i,5)=Text4.Text*f
IfOption3.Value=TrueThen
b=u(i,4)
c=u(i,8)
d=Text3.Text
e=Text4.Text
m=0
n=0
EndIf
IfOption4.Value=TrueThen
b=Text3.Text
c=u(i,8)
d=u(i,4)
e=Text4.Text
m=0
n=1
EndIf
IfOption5.Value=TrueThen
b=Text3.Text
c=Text4.Text
d=u(i,4)
e=u(i,8)
m=1
n=1
EndIf
IfOption6.Value=TrueThen
b=u(i,4)
c=Text4.Text
d=Text3.Text
e=u(i,8)
m=1
n=0
EndIf
Ifb u(i+1,2)=u(i,1)+u(i,2) IfAbs(u(i+1,2))>=2^3Then u(i+1,2)=u(i+1,2)Mod2^3 u(i+1,3)=1 u(i+1,4)=u(i,4)+(-1)^n Else u(i+1,3)=0 u(i+1,4)=u(i,4) EndIf Else u(i+1,4)=u(i,4) u(i+1,3)=0 u(i+1,2)=0 EndIf Ifc u(i+1,6)=u(i,5)+u(i,6) IfAbs(u(i+1,6))>=2^3Then u(i+1,6)=u(i+1,6)Mod2^3 u(i+1,7)=1 u(i+1,8)=u(i,8)+(-1)^m Else u(i+1,7)=0 u(i+1,8)=u(i,8) EndIf Else u(i+1,8)=u(i,8) u(i+1,7)=0 u(i+1,6)=0 EndIf Ifb>=dAndc>=eThen GoToout1 Else a=a+1 EndIf Next out1: Print"tJvxJrx&xxJvyJry&yy" Fori=0Toa Forj=0To8 Printu(i,j); Print""; Nextj Print Nexti EndIf '插补圆弧' IfOption2.Value=TrueThen a=0 u(0,1)=Text2.Text u(0,5)=Text1.Text u(0,2)=0 u(0,3)=0 u(0,6)=0 u(0,7)=0 u(0,4)=Text1.Text u(0,8)=Text2.Text IfOption9.Value=TrueThen u(0,1)=u(0,1) u(0,5)=u(0,5) f=1 EndIf IfOption10.Value=TrueThen u(0,2)=4 u(0,6)=4 f=1 EndIf IfOption11.Value=TrueThen u(0,2)=7 u(0,6)=7 f=1 EndIf Fori=0To1000 If(Option8.Value=TrueAndOption3.Value=True)Or(Option7.Value=TrueAndOption5.Value=True)Then b=u(i,4) c=u(i,8) d=Text3.Text e=Text4.Text m=0 n=1 EndIf If(Option7.Value=TrueAndOption3.Value=True)Or(Option8.Value=TrueAndOption5.Value=True)Then b=Text3.Text c=Text4.Text d=u(i,4) e=u(i,8) m=1 n=0 EndIf If(Option8.Value=TrueAndOption4.Value=True)Or(Option7.Value=TrueAndOption6.Value=True)Then b=u(i,4) c=Text4.Text d=Text3.Text e=u(i,8) m=1 n=1 EndIf If(Option7.Value=TrueAndOption4.Value=True)Or(Option8.Value=TrueAndOption6.Value=True)Then b=Text3.Text c=u(i,8) d=u(i,4) e=Text4.Text m=0 n=0 EndIf Ifb>dThen u(i+1,2)=u(i,1)+u(i,2) IfAbs(u(i+1,2))>=2^3Then u(i+1,3)=1 u(i+1,4)=u(i,4)+(-1)^n u(i+1,2)=u(i+1,2)Mod8 u(i+1,5)=u(i+1,4)*f Else u(i+1,3)=0 u(i+1,4)=u(i,4) u(i+1,5)=u(i+1,4)*f EndIf Else u(i+1,4)=u(i,4) u(i+1,3)=0 u(i+1,2)=0 u(i+1,1)=u(i,1) u(i+1,5)=u(i+1,4) EndIf Ifc u(i+1,6)=u(i,5)+u(i,6) IfAbs(u(i+1,6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VB 数字 积分 法插补 软件设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)