南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx
《南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx》由会员分享,可在线阅读,更多相关《南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx(12页珍藏版)》请在冰豆网上搜索。
![南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx](https://file1.bdocx.com/fileroot1/2022-10/22/4b7ee835-c55a-40fc-a5f2-5ea4ef92b467/4b7ee835-c55a-40fc-a5f2-5ea4ef92b4671.gif)
南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解
数控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-X0dY1=Y1-Y0dX2=X2-X1dY2=Y2-Y1alfa=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,d2d1=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'11与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'11与12不共线
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)<>0ThenXs1=X1-R*Ori*Yl1
Ys1=Y1+R*Ori*Xl1X_0p.Text=Xs1-dX1Y_0p.Text=Ys1-dY1X_s1.Text=Xs1Y_s1.Text=Ys1X_2p.Text=X2Y_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=X0Y_0p.Text=Y0'Xs1,Ys1X_s1.Text=Xs1Y_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
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=X0Y_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