本课题是刀具半径补偿的直线-直线软件实现,是南京工程学院数控专业的数控原理与系统的课程设计,整个工程都是自己随便弄弄的,作为课设作业还算比较严谨吧。题目不难,具体的直线-直线的刀具补偿原理,见机械工业出版社出版的汪木兰主编的《数控原理与系统》的P56~P59,这里不再赘述,具体的代码贴在下边,另外附件中有zip包附带整个工程文件(界面、工程、代码)。具体实现都很简单,因为学期末了,找工作的找工作,考研复试的复试,大多都没兴趣好好弄了,在这里贴上来方便大家交差把。
具体思路稍微一提,对给定的直线的3个点,首先在界面中选择刀补阶段,到底是刀补建立,还是刀补进行,还是刀补撤销,进一步通过直线投影判断两直线夹角,分为伸长型,缩短型,插入型三种情况,分别予以讨论,计算出补偿后的刀具轨迹,然后加以在PICTUREbox中显示。
VB工程代码:
Public X0 As Double, Y0 As Double, X1 As Double, Y1 As Double, X2 As Double, Y2 As Double, R As Double
Public Xs1 As Double, Ys1 As Double, Xs2 As Double, Ys2 As Double
Public Ori As Integer
Public Xl1 As Double, Yl1 As Double, Xl2 As Double, Yl2 As Double, dX1 As Double, dY1 As Double, dX2 As Double, dY2 As Double, d1 As Double, d2 As Double
Private Sub Command1_Click()
Dim X1_FWD As Integer, Y1_FWD As Integer, X2_FWD As Integer, Y2_FWD As Integer
Dim alfa As Double, beta As Double
Call PaintAxis
'绘制补偿前图像
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)
If dX1 >= 0 Then
X1_FWD = 1
Else
X1_FWD = -1
End If
If dX2 >= 0 Then
X2_FWD = 1
Else
X2_FWD = -1
End If
If dY1 >= 0 Then
Y1_FWD = 1
Else
Y1_FWD = -1
End If
If dY2 >= 0 Then
Y2_FWD = 1
Else
Y2_FWD = -1
End If
'计算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
'判断缩短型,伸长型,插入型
If Ori * (Yl2 * Xl1 - Xl2 * Yl1) >= 0 Then '缩短型
'刀补建立
If Combo1.ListIndex = 0 And Ori * (Yl2 * Xl1 - Xl2 * Yl1) <> 0 Then
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)
'刀补进行
ElseIf Combo1.ListIndex = 1 Then
If Yl2 * Xl1 - Xl2 * Yl1 = 0 Then 'l1与l2共线
Xs1 = X1 - R * Ori * Yl1
Ys1 = Y1 + R * Ori * Xl1
X_0p.Text = Xs1 - dX1