数控实验指导书逐点比较法直线插补程序.docx
- 文档编号:11743622
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:18
- 大小:67.54KB
数控实验指导书逐点比较法直线插补程序.docx
《数控实验指导书逐点比较法直线插补程序.docx》由会员分享,可在线阅读,更多相关《数控实验指导书逐点比较法直线插补程序.docx(18页珍藏版)》请在冰豆网上搜索。
数控实验指导书逐点比较法直线插补程序
数控技术课程
实验指导书
于滨
南京工程学院
机电教研室
2012-4-9
逐点比较法直线插补程序
一、实验目的
1、进一步理解逐点比较法直线插补的原理
2、掌握在计算机环境中完成直线逐点比较法插补的软件实现方法。
二、实验设备
1、计算机及其操作系统
2、VB6.0软件
三、实验原理
机床数控系统依据一定方法确定刀具运动轨迹,进而产生基本廓形曲线,如直线、圆弧等。
其它需要加工的复杂曲线由基本廓形逼近,这种拟合方式称为“插补”(Interpolation)。
“插补”实质是数控系统根据零件轮廓线型的有限信息(如直线的起点、终点,圆弧的起点、终点和圆心等),在轮廓的已知点之间确定一些中间点,完成所谓的“数据密化”工作。
四、实验方法
本次实验是在VB6.0环境下完成了直线逐点比较法插补的软件实现。
软件中实现,主要分为两部分,一是人际交互,用户采集数据和演示其插补过程;二是插补的计算过程,此为这次实验的核心。
逐点比较法的插补有四个工作节拍:
偏差判别、进给、偏差计算和终点判别,第一象限直线插补的偏差判别公式如下:
Fi=XeYi-YeXi
Fi≥0时,偏差判别公式为Fi+1=Fi-Ye,向X正方向进给
Fi<0时,偏差判别公式为Fi+1=Fi+Xe,向Y正方向进给
其工作流程图如下所示:
根据流程编写合理的界面和控制主程序代码。
五、实验结果和总结
(作结果图)
图1逐点比较法插补主界面示意图
附
*******chabu.frm*****************
VERSION5.00
BeginVB.FormForm1
AutoRedraw=-1'True
BorderStyle=1'FixedSingle
Caption="插补"
ClientHeight=7755
ClientLeft=90
ClientTop=480
ClientWidth=9630
LinkTopic="Form1"
MaxButton=0'False
MinButton=0'False
ScaleHeight=517
ScaleMode=3'Pixel
ScaleWidth=642
StartUpPosition=2'屏幕中心
BeginVB.FrameFrame5
Height=975
Left=7320
TabIndex=15
Top=4440
Width=2175
BeginVB.LineLine5
BorderColor=&H000000FF&
X1=120
X2=1080
Y1=360
Y2=360
End
BeginVB.LineLine6
BorderColor=&H00FF0000&
X1=120
X2=1080
Y1=720
Y2=720
End
BeginVB.LabelLabel2
Caption="插补路线"
Height=255
Left=1200
TabIndex=17
Top=240
Width=855
End
BeginVB.LabelLabel3
Caption="理想路线"
Height=255
Left=1200
TabIndex=16
Top=600
Width=855
End
End
BeginVB.FrameFrame4
Caption="插补选择"
Height=735
Left=7320
TabIndex=5
Top=3480
Width=2175
BeginVB.OptionButtonOption2
Caption="圆弧"
Height=180
Left=1200
TabIndex=7
Top=360
Width=735
End
BeginVB.OptionButtonOption1
Caption="直线"
Height=180
Left=240
TabIndex=6
Top=360
Value=-1'True
Width=855
End
End
BeginVB.ComboBoxCombo1
Height=300
Left=8400
Style=2'DropdownList
TabIndex=13
Top=5760
Width=1095
End
BeginVB.PictureBoxpic
AutoRedraw=-1'True
BackColor=&H00FFFFFF&
BorderStyle=0'None
FillStyle=0'Solid
Height=6750
Left=240
ScaleHeight=450
ScaleMode=3'Pixel
ScaleWidth=450
TabIndex=9
Top=840
Width=6750
End
BeginVB.FrameFrame3
Height=2415
Left=7320
TabIndex=1
Top=840
Width=2175
BeginVB.FrameFrame2
Caption="终点坐标"
Height=855
Left=120
TabIndex=4
Top=1320
Width=1935
BeginVB.TextBoxText1
Height=375
Index=3
Left=1080
MaxLength=2
TabIndex=12
Text="0"
Top=360
Width=615
End
BeginVB.TextBoxText1
Height=375
Index=2
Left=120
MaxLength=2
TabIndex=11
Text="0"
Top=360
Width=615
End
End
BeginVB.FrameFrame1
Caption="起点坐标"
Height=855
Left=120
TabIndex=2
Top=240
Width=1935
BeginVB.TextBoxText1
Height=375
Index=1
Left=1080
MaxLength=2
TabIndex=10
Text="0"
Top=360
Width=615
End
BeginVB.TextBoxText1
Height=375
Index=0
Left=120
MaxLength=2
TabIndex=3
Text="0"
Top=360
Width=615
End
End
End
BeginVB.CommandButtoncmdShow
Caption="开始演示"
Height=375
Left=7680
TabIndex=0
Top=6720
Width=1095
End
BeginVB.LabelLabel4
Caption="脉冲当量:
"
Height=255
Left=7320
TabIndex=14
Top=5880
Width=1095
End
BeginVB.LabelLabel1
Caption="逐点比较插补法演示程序"
BeginPropertyFont
Name="宋体"
Size=18
Charset=134
Weight=400
Underline=0'False
Italic=0'False
Strikethrough=0'False
EndProperty
Height=375
Left=1920
TabIndex=8
Top=240
Visible=0'False
Width=3975
End
End
AttributeVB_Name="Form1"
AttributeVB_GlobalNameSpace=False
AttributeVB_Creatable=False
AttributeVB_PredeclaredId=True
AttributeVB_Exposed=False
'OptionExplicit
'起点坐标,终点坐标,脉冲当量
Dimx1%,y1%,x2%,y2%,p!
DimDiAsInteger'-1为顺时针,1为逆时针
ConstPI=3.14159
PrivateSubcmdShow_Click()
IfText1(0)<>""AndText1
(1)<>""And_
Text1
(2)<>""AndText1(3)<>""Then
x1=Val(Text1(0)):
y1=Val(Text1
(1))
x2=Val(Text1
(2)):
y2=Val(Text1(3))
Else
MsgBox"输入坐标不完整!
"
ExitSub
EndIf
pic.Cls'清屏
axispic'画坐标轴
p=Val(Combo1.Text)'读取脉冲当量
cmdShow.Enabled=False
IfOption1.ValueThen'演示直线插补
pic.Circle(x1,y1),0.1,vbBlack
pic.Circle(x2,y2),0.1,vbBlack
chabu_lpic,x1,y1,x2,y2
ElseIfOption2.ValueThen'圆弧插补
pic.Circle(x1,y1),0.1,vbBlack
pic.Circle(x2,y2),0.1,vbBlack
Ifx1^2+y1^2=x2^2+y2^2Then
chabu_c1pic,x1,y1,x2,y2
Else
MsgBox"输入坐标错误!
请重新输入!
",vbCritical
EndIf
EndIf
cmdShow.Enabled=True
EndSub
PrivateSubchabu_l(objAsObject,x0%,y0%,xe%,ye%)'直线插补
Dimx!
y!
f=0
x=x0:
y=y0
obj.Line(x0,y0)-(xe,ye),vbBlue
obj.CurrentX=x
obj.CurrentY=y
n=(Abs(xe-x0)+Abs(ye-y0))/p'总步数
Whilen<>0
Iff>=0Then
Ifxe<>x0Then
x=x+Sgn(xe-x0)*p
Else'xe=0时,应该先向y轴运动
y=y+Sgn(ye-y0)*p
EndIf
f=f-Abs(ye-y0)
Else
Ifye<>y0Then
y=y+Sgn(ye-y0)*p
EndIf
f=f+Abs(xe-x0)
EndIf
obj.Line-(x,y),vbRed'画折线
n=n-1
DoEvents
Fori=1To2000000*p
'延时
Nexti
Wend
EndSub
PrivateSubForm_Load()
IfApp.PrevInstanceThenEnd'禁止两个程序同时运行
Combo1.AddItem"0.01"
Combo1.AddItem"0.02"
Combo1.AddItem"0.05"
Combo1.AddItem"0.1"
Combo1.AddItem"0.2"
Combo1.AddItem"0.5"
Combo1.AddItem"1"
Show
st="逐点比较插补法演示程序"
Me.Font.Size=24
x=(Me.ScaleWidth-Me.TextWidth(st))/2
y=10'(pic.Top-Me.TextWidth(St))/2
Randomize
Fori=1To10
CurrentX=x:
CurrentY=y
Me.ForeColor=Rnd*65535
Printst
x=x+0.6
y=y+0.4
Nexti
Combo1.Text=Combo1.List(5)
pic.Height=450
pic.Width=450
pic.Scale(-10,10)-(10,-10)
axispic'画坐标轴
EndSub
'**********************************************************************
PrivateSubaxis(objAsObject)
'画x轴
obj.Line(-obj.ScaleWidth/2+0.5,0)-(obj.ScaleWidth/2-0.5,0)
obj.Line-(obj.ScaleWidth/2-1,0.2)
obj.Line(obj.ScaleWidth/2-0.5,0)-(obj.ScaleWidth/2-1,-0.2)
'画y轴
obj.Line(0,obj.ScaleHeight/2+0.5)-(0,-obj.ScaleHeight/2-0.5)
obj.Line-(-0.2,-obj.ScaleHeight/2-1)
obj.Line(0,-obj.ScaleHeight/2-0.5)-(0.2,-obj.ScaleHeight/2-1)
obj.Font.Size=9
'画刻度
Forcx=-9To9Step3
obj.Line(cx,0)-(cx,0.2)
Ifcx<>0Then
obj.CurrentX=cx-0.3
obj.CurrentY=-0.2
obj.Printcx
EndIf
Next
Forcy=-9To9Step3
obj.Line(0,cy)-(0.2,cy)
Ifcy<>0Then
obj.CurrentX=-0.8
obj.CurrentY=cy+0.2
obj.Printcy
EndIf
Next
obj.CurrentX=-0.5
obj.CurrentY=-0.2
obj.Font.Size=12
obj.Print"O"'坐标原点
EndSub
'*********************************************************************
PrivateSubchabu_c1(objAsObject,x0%,y0%,xe%,ye%)
'第一象限圆弧插补
n=Abs(xe-x0)+Abs(ye-y0):
n=n/p'总步数
f=0
r=Sqr(x0^2+y0^2)
Ifx0<>0Then
startP=Atn(y0/x0)
Else
startP=PI/2
EndIf
Ifxe<>0Then
endP=Atn(ye/xe)
Else
endP=PI/2
EndIf
Ifx0<=xeThen
Di=-1'顺时针
obj.Circle(0,0),r,vbBlue,endP,startP
Else
Di=1
obj.Circle(0,0),r,vbBlue,startP,endP
EndIf
obj.CurrentX=x0
obj.CurrentY=y0
x=x0:
y=y0
Whilen<>0
Iff*Di>0Then
f=f-2*x*Di+p
x=x-p*Di
ElseIff*Di<0Then
f=f+2*y*Di+p
y=y+p*Di
ElseIff*Di=0Then
IfDi=1Then
f=f+2*y*Di+p
y=y+p
Else
f=f-2*x*Di+p
x=x-p*Di
EndIf
EndIf
n=n-1
obj.Line-(x,y),vbRed
DoEvents
Fori=1To2000000*p
'延时
Nexti
Wend
EndSub
PrivateSubText1_Change(IndexAsInteger)
IfAbs(Val(Text1(Index).Text))>9Then
MsgBox"输入数值过大,屏幕内不能完全显示!
"
Text1(Index).Text=""
EndIf
IfLeft(Text1(Index),1)="0"AndLen(Text1(Index))=2Then
Text1(Index)=Right(Text1(Index),1)
EndIf
IfRight(Text1(Index),1)="-"AndLen(Text1(Index))=2Then
Text1(Index)=Left(Text1(Index),1)
EndIf
EndSub
'PrivateSubText1_Click(IndexAsInteger)
'Text1(Index).SelStart=0
'Text1(Index).SelLength=Len(Text1(Index))
'EndSub
PrivateSubText1_KeyPress(IndexAsInteger,KeyAsciiAsInteger)
'只能输入数字,负号
If(KeyAscii<48OrKeyAscii>57)AndKeyAscii<>45_
AndKeyAscii<>8Then
KeyAscii=0
EndIf
EndSub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数控 实验 指导书 比较法 直线 程序