南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx
- 文档编号:9052358
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:16.27KB
南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx
《南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx》由会员分享,可在线阅读,更多相关《南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx(14页珍藏版)》请在冰豆网上搜索。
南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解
数控122太劣阿昕哥
四、程序设计
PublicX0AsDouble,Y0AsDouble,X1AsDouble,Y1AsDouble,X2AsDouble,Y2AsDouble,RAsDouble
PublicXs1AsDouble,Ys1AsDouble,Xs2AsDouble,Ys2AsDouble
PublicOriAsInteger
PublicXl1AsDouble,Yl1AsDouble,Xl2AsDouble,Yl2AsDouble,dX1AsDouble,dY1AsDouble,dX2AsDouble,dY2AsDouble,d1AsDouble,d2AsDouble
PrivateSubCommand1_Click()
DimX1_FWDAsInteger,Y1_FWDAsInteger,X2_FWDAsInteger,Y2_FWDAsInteger
DimalfaAsDouble,betaAsDouble
CallPaintAxis
'绘制补偿前图像
Picture1.ForeColor=vbBlue
Picture1.DrawWidth=1
Picture1.Line(X0,Y0)-(X1,Y1)
Picture1.Line(X1,Y1)-(X2,Y2)
'算法设计
'计算坐标增量
dX1=X1-X0
dY1=Y1-Y0
dX2=X2-X1
dY2=Y2-Y1
alfa=Atn(dY1/dX1)
beta=Atn(dY2/dX2)
IfdX1>=0Then
X1_FWD=1
Else
X1_FWD=-1
EndIf
IfdX2>=0Then
X2_FWD=1
Else
X2_FWD=-1
EndIf
IfdY1>=0Then
Y1_FWD=1
Else
Y1_FWD=-1
EndIf
IfdY2>=0Then
Y2_FWD=1
Else
Y2_FWD=-1
EndIf
'计算d1,d2
d1=Sqr(dX1^2+dY1^2)
d2=Sqr(dX2^2+dY2^2)
'计算方向矢量投影
Xl1=dX1/d1
Yl1=dY1/d1
Xl2=dX2/d2
Yl2=dY2/d2
'判断缩短型,伸长型,插入型
IfOri*(Yl2*Xl1-Xl2*Yl1)>=0Then'缩短型
'刀补建立
IfCombo1.ListIndex=0AndOri*(Yl2*Xl1-Xl2*Yl1)<>0Then
Xs1=X1-R*Ori*Yl2
Ys1=Y1+R*Ori*Xl2
X_0p.Text=X0
Y_0p.Text=Y0
X_s1.Text=Xs1
Y_s1.Text=Ys1
X_2p.Text=Xs1+dX2
Y_2p.Text=Ys1+dY2
Picture1.ForeColor=vbMagenta
Picture1.Line(X0,Y0)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs1+dX2,Ys1+dY2)
'刀补进行
ElseIfCombo1.ListIndex=1Then
IfYl2*Xl1-Xl2*Yl1=0Then'l1与l2共线
Xs1=X1-R*Ori*Yl1
Ys1=Y1+R*Ori*Xl1
X_0p.Text=Xs1-dX1
Y_0p.Text=Ys1-dY1
X_s1.Text=Xs1
Y_s1.Text=Ys1
X_2p.Text=Xs1+dX2
Y_2p.Text=Ys1+dY2
Picture1.ForeColor=vbMagenta
Picture1.Line(Xs1-dX1,Ys1-dY1)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs1+dX2,Ys1+dY2)
Else'l1与l2不共线
Xs1=X1+(Xl2-Xl1)*Ori*R/(Xl1*Yl2-Xl2*Yl1)
Ys1=Y1+(Yl2-Yl1)*Ori*R/(Xl1*Yl2-Xl2*Yl1)
X_0p.Text=Xs1-dX1
Y_0p.Text=Ys1-dY1
X_s1.Text=Xs1
Y_s1.Text=Ys1
X_2p.Text=Xs1+dX2
Y_2p.Text=Ys1+dY2
Picture1.ForeColor=vbMagenta
Picture1.Line(Xs1-dX1,Ys1-dY1)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs1+dX2,Ys1+dY2)
EndIf
'刀补撤销
ElseIfCombo1.ListIndex=2AndOri*(Yl2*Xl1-Xl2*Yl1)<>0Then
Xs1=X1-R*Ori*Yl1
Ys1=Y1+R*Ori*Xl1
X_0p.Text=Xs1-dX1
Y_0p.Text=Ys1-dY1
X_s1.Text=Xs1
Y_s1.Text=Ys1
X_2p.Text=X2
Y_2p.Text=Y2
Picture1.ForeColor=vbMagenta
Picture1.Line(Xs1-dX1,Ys1-dY1)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(X2,Y2)
EndIf
ElseIfOri*(Yl2*Xl1-Xl2*Yl1)<0And(Yl2*Yl1+Xl2*Xl1)>=0Then'伸长型
'刀补建立
IfCombo1.ListIndex=0Then
'第一对转接点
Xs1=X1-R*Ori*Yl1
Ys1=Y1+R*Ori*Yl1
'第二对转接点
Xs2=X1+(Xl2-Xl1)*R*Ori/(Xl1*Yl2-Xl2*Yl1)
Ys2=Y1+(Yl2-Yl1)*R*Ori/(Xl1*Yl2-Xl2*Yl1)
'输出坐标
'X0',Y0'
X_0p.Text=X0
Y_0p.Text=Y0
'Xs1,Ys1
X_s1.Text=Xs1
Y_s1.Text=Ys1
'Xs2,Ys2
X_s2.Text=Xs2
Y_s2.Text=Ys2
'X2'Y2'
X_2p.Text=Xs2+dX2
Y_2p.Text=Ys2+dY2
'绘图
Picture1.ForeColor=vbMagenta
Picture1.Line(X0,Y0)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs2,Ys2)
Picture1.Line(Xs2,Ys2)-(Xs2+dX2,Ys2+dY2)
'刀补进行
ElseIfCombo1.ListIndex=1Then
Xs1=X1+(Xl2-Xl1)*R*Ori/(Xl1*Yl2-Xl2*Yl1)
Ys1=Y1+(Yl2-Yl1)*R*Ori/(Xl1*Yl2-Xl2*Yl1)
'输出坐标
'X0',Y0'
X_0p.Text=X0
Y_0p.Text=Y0
'Xs1,Ys1
X_s1.Text=Xs1
Y_s1.Text=Ys1
'X2'Y2'
X_2p.Text=Xs2+dX2
Y_2p.Text=Ys2+dY2
'绘图
Picture1.ForeColor=vbMagenta
Picture1.Line(Xs1-dX1,Ys1-dY1)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs1+dX2,Ys1+dY2)
'刀补撤销
ElseIfCombo1.ListIndex=2Then
Xs1=X1+(Xl2-Xl1)*R*Ori/(Xl1*Yl2-Xl2*Yl1)
Ys1=Y1+(Yl2-Yl1)*R*Ori/(Xl1*Yl2-Xl2*Yl1)
Xs2=X1-R*Ori*Yl2
Ys2=Y1+R*Ori*Xl2
'输出坐标
'X0',Y0'
X_0p.Text=Xs1-dX1
Y_0p.Text=Ys1-dY1
'Xs1,Ys1
X_s1.Text=Xs1
Y_s1.Text=Ys1
'Xs2,Ys2
X_s2.Text=Xs2
Y_s2.Text=Ys2
'X2'Y2'
X_2p.Text=X2
Y_2p.Text=Y2
'绘图
Picture1.ForeColor=vbMagenta
Picture1.Line(Xs1-dX1,Ys1-dY1)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs2,Ys2)
Picture1.Line(Xs2,Ys2)-(X2,Y2)
EndIf
ElseIfOri*(Yl2*Xl1-Xl2*Yl1)<0And(Yl2*Yl1+Xl2*Xl1)<0Then'插入型
'刀补建立
IfCombo1.ListIndex=0Then
'第一对转接点
Xs1=X1-R*Ori*Yl1
Ys1=Y1+R*Ori*Xl1
'第二对转接点
Xs2=X1-Ori*R*Yl1+R*Xl1
Ys2=Y1+Ori*R*Xl1+R*Yl1
'第三对转接点
Xs3=X1-R*Ori*Yl2-R*Xl2
Ys3=Y1+R*Ori*Xl2-R*Yl2
'输出坐标
'X0',Y0'
X_0p.Text=X0
Y_0p.Text=Y0
'Xs1,Ys1
X_s1.Text=Xs1
Y_s1.Text=Ys1
'Xs2,Ys2
X_s2.Text=Xs2
Y_s2.Text=Ys2
'Xs3,Ys3
X_s3.Text=Xs3
Y_s3.Text=Ys3
'X2'Y2'
X_2p.Text=Xs3+dX2+Abs(R*Cos(beta))*X2_FWD
Y_2p.Text=Ys3+dY2+Abs(R*Sin(beta))*X2_FWD
'绘图
Picture1.ForeColor=vbMagenta
Picture1.Line(X0,Y0)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs2,Ys2)
Picture1.Line(Xs2,Ys2)-(Xs3,Ys3)
Picture1.Line(Xs3,Ys3)-(Xs3+dX2+Abs(R*Cos(beta))*X2_FWD,Ys3+dY2+Abs(R*Sin(beta))*Y2_FWD)
'刀补进行
ElseIfCombo1.ListIndex=1Then
'第一对转接点
Xs1=X1-R*Ori*Yl1+R*Xl1
Ys1=Y1+R*Ori*Xl1+R*Yl1
'第二对转接点
Xs2=X1-R*Ori*Yl2-R*Xl2
Ys2=Y1+R*Ori*Xl2-R*Yl2
'输出坐标
'X0',Y0'
X_0p.Text=Xs1-dX1-Abs(R*Cos(alfa))*X1_FWD
Y_0p.Text=Ys1-dY1-Abs(R*Sin(alfa))*Y1_FWD
'Xs1,Ys1
X_s1.Text=Xs1
Y_s1.Text=Ys1
'Xs2,Ys2
X_s2.Text=Xs2
Y_s2.Text=Ys2
'X2'Y2'
X_2p.Text=Xs2+dX2+Abs(R*Cos(beta))*X2_FWD
Y_2p.Text=Ys2+dY2+Abs(R*Sin(beta))*Y2_FWD
'绘图
Picture1.ForeColor=vbMagenta
Picture1.Line(Xs1-dX1-Abs(R*Cos(alfa))*X1_FWD,Ys1-dY1-Abs(R*Sin(alfa))*Y1_FWD)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs2,Ys2)
Picture1.Line(Xs2,Ys2)-(Xs2+dX2+Abs(R*Cos(beta))*X2_FWD,Ys2+dY2+Abs(R*Sin(beta))*Y2_FWD)
'刀补撤销
ElseIfCombo1.ListIndex=2Then
'第一对转接点
Xs1=X1-R*Ori*Yl1+R*Xl1
Ys1=Y1+R*Ori*Xl1+R*Yl1
'第二对转接点
Xs2=X1-R*Ori*Yl2-R*Xl2
Ys2=Y1+R*Ori*Xl2-R*Yl2
'第三对转接点
Xs3=X1-R*Ori*Yl2
Ys3=Y1+R*Ori*Xl2
'输出坐标
'X0',Y0'
X_0p.Text=Xs1-dX1-Abs(R*Cos(alfa))*X1_FWD
Y_0p.Text=Ys1-dY1-Abs(R*Sin(alfa))*Y1_FWD
'Xs1,Ys1
X_s1.Text=Xs1
Y_s1.Text=Ys1
'Xs2,Ys2
X_s2.Text=Xs2
Y_s2.Text=Ys2
'Xs3,Ys3
X_s3.Text=Xs3
Y_s3.Text=Ys3
'X2'Y2'
X_2p.Text=X2
Y_2p.Text=Y2
'绘图
Picture1.ForeColor=vbMagenta
Picture1.Line(Xs1-dX1-Abs(R*Cos(alfa))*X1_FWD,Ys1-dY1-Abs(R*Sin(alfa))*Y1_FWD)-(Xs1,Ys1)
Picture1.Line(Xs1,Ys1)-(Xs2,Ys2)
Picture1.Line(Xs2,Ys2)-(Xs3,Ys3)
Picture1.Line(Xs3,Ys3)-(X2,Y2)
EndIf
EndIf
EndSub
PrivateSubCommand2_Click()
CallPaintAxis
EndSub
PrivateSubForm_Load()
'补偿后坐标不可编辑,只读
X_0p.Locked=True
Y_0p.Locked=True
X_s1.Locked=True
Y_s1.Locked=True
X_s2.Locked=True
Y_s2.Locked=True
X_2p.Locked=True
Y_2p.Locked=True
'初始化ComboBox两个
Combo1.AddItem"刀补建立",0
Combo1.AddItem"刀补进行",1
Combo1.AddItem"刀补撤销",2
EndSub
PrivateSubText1_Change()
EndSub
PrivateSubOption1_Click()
Ori=1
EndSub
PrivateSubOption2_Click()
Ori=-1
EndSub
PrivateSubPicture1_Paint()
CallPaintAxis
EndSub
PrivateSubText9_Change()
R=Val(R_K.Text)
EndSub
PrivateSubR_K_Change()
R=Val(R_K.Text)
EndSub
PrivateSubX_0_Change()
'赋值坐标
X0=Val(X_0.Text)
EndSub
PrivateSubX_1_Change()
'赋值坐标
X1=Val(X_1.Text)
EndSub
PrivateSubX_2_Change()
'赋值坐标
X2=Val(X_2.Text)
EndSub
PrivateSubY_0_Change()
'赋值坐标
Y0=Val(Y_0.Text)
EndSub
PrivateSubY_1_Change()
'赋值坐标
Y1=Val(Y_1.Text)
EndSub
PrivateSubY_2_Change()
'赋值坐标
Y2=Val(Y_2.Text)
EndSub
PrivateSubPaintAxis()
Cls
DimiAsInteger
Picture1.BackColor=vbWhite
Picture1.ForeColor=vbBlack
Picture1.Scale(-1000,1000)-(1000,-1000)
Picture1.DrawWidth=2
Picture1.Line(-1000,0)-(1000,0)'画x轴
Picture1.Line(1000,0)-(970,15)'画箭头
Picture1.Line(1000,0)-(970,-15)'画箭头
Picture1.Line(0,-1000)-(0,1000)'画y轴
Picture1.Line(0,1000)-(10,964)'画箭头
Picture1.Line(0,1000)-(-10,964)'画箭头
'画坐标刻度
Fori=-10To9Step1
Ifi<>0Then
Picture1.Line(i*100,0)-(i*100,10)'x轴刻度
Picture1.CurrentX=i*100-52:
Picture1.CurrentY=-10:
Picture1.Printi*100'x轴数字
Picture1.Line(0,i*100)-(10,i*100)'y轴刻度
Picture1.CurrentX=-88:
Picture1.CurrentY=i*100+16:
Picture1.Printi*100'y轴数字
EndIf
Nexti
Picture1.ForeColor=vbRed
Picture1.CurrentX=10:
Picture1.CurrentY=-10:
Picture1.Print0
Picture1.CurrentX=980:
Picture1.CurrentY=-14:
Picture1.Print"X"
Picture1.CurrentX=15:
Picture1.CurrentY=990:
Picture1.Print"Y"
Picture1.ForeColor=vbBlack
'显示框清零
X_0p.Text=""
Y_0p.Text=""
X_s1.Text=""
Y_s1.Text=""
X_s2.Text=""
Y_s2.Text=""
X_s3.Text=""
Y_s3.Text=""
X_2p.Text=""
Y_2p.Text=""
EndSub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南京 工程学院 数控 原理 系统 课程设计 直线 刀具 补偿 程序 源代码 讲解