南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx

上传人:b****7 文档编号:9052358 上传时间:2023-02-03 格式:DOCX 页数:14 大小:16.27KB
下载 相关 举报
南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx_第1页
第1页 / 共14页
南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx_第2页
第2页 / 共14页
南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx_第3页
第3页 / 共14页
南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx_第4页
第4页 / 共14页
南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx

《南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx》由会员分享,可在线阅读,更多相关《南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx(14页珍藏版)》请在冰豆网上搜索。

南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解.docx

南京工程学院数控原理与系统课程设计直线直线刀具补偿刀补程序源代码讲解

数控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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1