机械设计上机设计
班级:
姓名:
学号:
目录
1.数表和线图的程序化处理 (1)
1.1数表的程序化 (1)
1.1.1查表检索法 (1)
1.1.2数表解析法 (12)
1.2线图的程序化 (15)
1.3有关数据处理 (16)
2.典型零部件的程序设计 (18)
2.1 V带传动的程序设计 (18)
2.2 齿轮传动的程序设计 (19)
2.3 滚动轴承的程序设计 (21)
3.课后习题计算 (22)
一、表和线图的程序化处理
1.1数表程序化
数表程序化有两种方法:一是查表检索法;二是数表解析法1.1.1 查表检索法
1)一元数表的存取
表1-1 普通V带型号及有关参数
运行界面:
程序代码:
Private Sub Command1_Click()
Dim s As Integer
Dim q1 As Single, dm As Single, kb As Single
s = Val(Txt_s.Text)
Select Case s
Case 0
q1 = 0.02: dm = 20: kb = 0.00006
Case 1
q1 = 0.06: dm = 50: kb = 0.00039
Case 2
q1 = 0.1: dm = 75: kb = 0.00103
Case 4
q1 = 0.17: dm = 125: kb = 0.00265
Case 5
q1 = 0.3: dm = 200: kb = 0.0075
Case 6
q1 = 0.62: dm = 355: kb = 0.0266
Case 7
q1 = 0.9: dm = 500: kb = 0.0498
End Select
Txt_q1.Text = Str(q1)
Txt_dmin.Text = Str(dm)
Txt_kb.Text = Str(kb)
End Sub
Private Sub Command2_Click()
End
End Sub
2)二元数表的存取
表1-2齿轮传动工作状况系数K
运行界面:
程序代码:
Option Explicit
Dim ii As Integer
Dim jj As Integer
Public appdir As String Private Sub Check1_Click() If Check1.Value = 1 Then Check2.Value = 0
Check3.Value = 0
ii = 0
End If
End Sub
Private Sub Check2_Click() If Check2.Value = 1 Then Check1.Value = 0
Check3.Value = 0
ii = 1
End If
End Sub
Private Sub Check3_Click() If Check3.Value = 1 Then Check1.Value = 0
Check2.Value = 0
ii = 2
End If
End Sub
Private Sub Check4_Click()
If Check4.Value = 1 Then
Check5.Value = 0
Check6.Value = 0
jj = 0
End If
End Sub
Private Sub Check5_Click()
If Check5.Value = 1 Then
Check4.Value = 0
Check6.Value = 0
jj = 1
End If
End Sub
Private Sub Check6_Click()
If Check6.Value = 1 Then
Check4.Value = 0
Check5.Value = 0
jj = 2
End If
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim ka(0 To 2, 0 To 2) As Single
ka(0, 0) = 1
ka(0, 1) = 1.25
ka(0, 2) = 1.75
ka(1, 0) = 1.25
ka(1, 1) = 1.5
ka(1, 2) = 2
ka(2, 0) = 1.5
ka(2, 1) = 1.75
ka(2, 2) = 2.25
txt_ka.Text = Str(ka(ii, jj))
End Sub
Private Sub Command1_Click()
End
End Sub
表1-3V工作状况系数K
运行界面:
程序代码:
Private Sub Command1_Click()
If (Combo1.Text = Combo1.List(0) And Option1.Value) Then Text_ka.Text = 1 If (Combo1.Text = Combo1.List(0) And Option2.Value) Then Text_ka.Text = 1.1 If (Combo1.Text = Combo1.List(0) And Option3.Value) Then Text_ka.Text = 1.2 If (Combo1.Text = Combo1.List(1) And Option1.Value) Then Text_ka.Text = 1.1 If (Combo1.Text = Combo1.List(1) And Option2.Value) Then Text_ka.Text = 1.2 If (Combo1.Text = Combo1.List(1) And Option3.Value) Then Text_ka.Text = 1.3 If (Combo1.Text = Combo1.List(2) And Option1.Value) Then Text_ka.Text = 1.2 If (Combo1.Text = Combo1.List(2) And Option2.Value) Then Text_ka.Text = 1.3 If (Combo1.Text = Combo1.List(2) And Option3.Value) Then Text_ka.Text = 1.4 If (Combo1.Text = Combo1.List(3) And Option1.Value) Then Text_ka.Text = 1.3 If (Combo1.Text = Combo1.List(3) And Option2.Value) Then Text_ka.Text = 1.4 If (Combo1.Text = Combo1.List(3) And Option3.Value) Then Text_ka.Text = 1.5 Text_pc.Text = Str(Text_ka) * Str(Text_p)
End Sub
Private Sub Command2_Click()
End
End Sub
3)区间检索
运行界面:
程序代码:
Private Sub Command1_Click()
Dim i As Integer, d As Integer
Dim dd As Variant, b As Variant, h As Variant
dd = Array(0, 6, 8, 10, 12, 17, 22, 30, 38, 44, 50, 58)
b = Array(0, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18)
h = Array(0, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11)
d = Val(Txt_d.Text)
For i = 0 To 10
If d <= dd(i + 1) Then
End If
Next i
Txt_b.Text = Str(b(i))
Txt_h.Text = Str(h(i))
End Sub
Private Sub Command2_Click()
End
End Sub
4)复杂表格程序化(含插值处理)
①一元数表的线性插值
α
运行界面:
程序代码:
Private Sub Command1_Click()
Dim i As Integer
Dim t As Single, u As Single, f As Single
Dim kf As Single, af As Single
Dim x As Variant, y As Variant
x = Array(120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185) y = Array(0.82, 0.84, 0.86, 0.88, 0.89, 0.91, 0.92, 0.93, 0.95, 0.96, 0.98, 0.99, 1, 1) t = Val(Txt_t.Text)
If t < x(0) Then
i = 0
ElseIf t >= x(12) Then
i = 12
Else
For i = 1 To 12
If t <= x(i) Then
Exit For
End If
Next i
End If
u = (t - x(i)) / (x(i + 1) - x(i))
f = y(i) + u * (y(i + 1) - y(i))
kf = f: af = t
Txt_af.Text = Str(af)
Txt_kf.Text = Str(kf)
End Sub
Private Sub Command2_Click()
Txt_t.Text = ""
Txt_af.Text = ""
Txt_kf.Text = ""
End Sub
②二元数表的线性插值
表1-6轴的圆角处应力集中系数Kσ
运行界面:
Dim Appdir As String
Dim i As Integer, j As Integer
Dim ii As Integer, jj As Integer
Private Sub Cmdstart_Click()
Dim ki As Integer, kj As Integer
Dim ax As Single, ay As Single, ap As Single
Dim bt As Single, f As Single
Dim x As Variant, y As Variant
Dim z(8, 6) As Single
x = Array(0, 0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.15, 0.2)
y = Array(0, 500, 600, 700, 800, 900, 1000)
z(1, 1) = 2.32
z(1, 2) = 2.5
z(1, 3) = 2.71
z(1, 4) = 0
z(1, 5) = 0
z(1, 6) = 0
z(2, 1) = 1.84
z(2, 2) = 1.96
z(2, 3) = 2.08
z(2, 4) = 2.2
z(2, 5) = 2.35
z(2, 6) = 2.5
z(3, 1) = 1.6
z(3, 2) = 1.66
z(3, 3) = 1.69
z(3, 4) = 1.75
z(3, 5) = 1.81
z(3, 6) = 1.87
z(4, 1) = 1.51
z(4, 2) = 1.51
z(4, 3) = 1.54
z(4, 4) = 1.54
z(4, 5) = 1.6
z(4, 6) = 1.6
z(5, 1) = 1.4
z(5, 2) = 1.4
z(5, 3) = 1.42
z(5, 4) = 1.42
z(5, 5) = 1.46
z(5, 6) = 1.46
z(6, 1) = 1.34
z(6, 3) = 1.37
z(6, 4) = 1.37
z(6, 5) = 1.39
z(6, 6) = 1.39
z(7, 1) = 1.25
z(7, 2) = 1.25
z(7, 3) = 1.27
z(7, 4) = 1.27
z(7, 5) = 1.3
z(7, 6) = 1.3
z(8, 1) = 1.19
z(8, 2) = 1.19
z(8, 3) = 1.22
z(8, 4) = 1.22
z(8, 5) = 1.24
z(8, 6) = 1.24
ax = Val(txt_rd.Text)
ay = Val(txt_cb.Text)
For i = 1 To 8
If ax <= x(i + 1) Then
ki = i
Exit For
Else
ki = 8
End If
Next i
For j = 1 To 6
If ay <= y(j + 1) Then
kj = j
Exit For
Else
kj = 6
End If
Next j
ap = (ax - x(ki)) / (x(ki + 1) - x(ki))
bt = (ay - y(kj)) / (y(kj + 1) - y(kj))
f = (1 - ap) * (1 - bt) * z(ki, kj) + bt * (1 - ap) * z(ki, kj + 1) + ap * (1 - bt) * z(ki + 1, kj) + ap * bt * z(ki + 1, kj + 1)
txt_kc.Text = Str(f)
End Sub
Private Sub Command2_Click()
End
End Sub
③非线性插值
表1-7蜗轮齿形系数Y
运行界面:
程序代码:
Private Sub Command1_Click()
Dim i As Integer, z As Integer, hi As Integer
Dim x1 As Single, x2 As Single, x3 As Single
Dim u As Single, v As Single, w As Single, yf As Single
Dim x As Variant, y As Variant
x = Array(0, 20, 24, 26, 28, 30, 32, 35, 37, 40, 45, 50, 60, 80, 100, 150, 300)
y = Array(0, 1.98, 1.88, 1.85, 1.8, 1.76, 1.71, 1.64, 1.61, 1.55, 1.48, 1.45, 1.4, 1.34, 1.3, 1.27, 1.24) z = Val(Txt_z.Text)
For i = 1 To 14
If z - x(i + 1) <= 0 Then
hi = i
Exit For
Else
hi = 14
End If
Next i
If hi > 1 And z - x(hi) < x(hi + 1) - z Then hi = hi - 1
x1 = x(hi): x2 = x(hi + 1): x3 = x(hi + 2)
u = (z - x2) * (z - x3) / ((x1 - x2) * (x1 - x3))
v = (z - x1) * (z - x3) / ((x2 - x1) * (x2 - x3))
w = (z - x1) * (z - x2) / ((x3 - x1) * (x3 - x2))
yf = u * y(hi) + v * y(hi + 1) + w * y(hi + 2)
Txt_zv.Text = Str(z)
Txt_yf.Text = Str(yf)
End Sub
Private Sub Command2_Click()
Txt_zv.Text = ""
Txt_yf.Text = ""
Txt_z.Text = ""
End Sub
1.1.2 数表解析法
表1-8圆弧齿锥齿轮几何系数
运行界面:
程序代码:
Private Sub Command1_Click()
Dim YY As Variant
m = 2: n = 9
X = Array(0, 16, 20, 24, 28, 32, 36, 40, 45, 50)
Y = Array(0, 0.171, 0.186, 0.201, 0.214, 0.226, 0.234, 0.245, 0.263, 0.28) YY = Array(0, 0.171, 0.186, 0.201, 0.214, 0.226, 0.234, 0.245, 0.263, 0.28) Call 最小二乘法程序
txt_a0 = A(1, JJ)
txt_a1 = A(2, JJ)
txt_a2 = A(3, JJ)
For j = 1 To n
'将计算结果写入到表格中
MSHFlexGrid1.TextMatrix(j, 0) = Str(j)
MSHFlexGrid1.TextMatrix(j, 1) = Str(X(j))
MSHFlexGrid1.TextMatrix(j, 2) = Str(YY(j))
MSHFlexGrid1.TextMatrix(j, 3) = Str(Y(j))
Next j
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
'设置各行的宽度
MSHFlexGrid1.ColWidth(0) = 500: MSHFlexGrid1.ColWidth(1) = 600 MSHFlexGrid1.ColWidth(2) = 800: MSHFlexGrid1.ColWidth(3) = 1600 '设置表头
MSHFlexGrid1.TextMatrix(0, 0) = "组数"
MSHFlexGrid1.TextMatrix(0, 1) = "齿数Z1"
MSHFlexGrid1.TextMatrix(0, 2) = "J原始值"
MSHFlexGrid1.TextMatrix(0, 3) = "几何系数J拟合值"
End Sub
Public X As Variant, Y As Variant
Public A(10, 11) As Single, S(10) As Single, T(10) As Single
Public i As Integer, j As Integer, k As Integer, m As Integer
Public n As Integer, l As Integer, LL As Integer, KK As Integer Public JJ As Integer, KP1 As Integer
Public b As Single, p As Single, TEMP As Single
Public Sub 最小二乘法程序()
LL = 2 * m + 1
KK = m + 1
JJ = KK + 1
For l = 2 To LL
S(l) = 0
Next l
S(1) = n
For k = 1 To KK
T(k) = 0
Next k
For i = 1 To n
b = 1: T(1) = T(1) + Y(i)
For j = 2 To KK
b = X(i) * b: S(j) = S(j) + b
T(j) = T(j) + Y(i) * b
Next j
For j = JJ To LL
b = X(i) * b: S(j) = S(j) + b
Next j
Next i
For i = 1 To KK
For j = 1 To KK
k = i + j: A(j, i) = S(k - 1)
Next j
Next i
For i = 1 To KK
A(i, JJ) = T(i)
Next i
For k = 1 To KK
p = 0
For i = k To KK
If p < Abs(A(i, k)) Then
p = Abs(A(i, k))
l = i
End If
Next i
If p <= 0.0000000001 Then
Exit For '线性方程组无解
End If
For j = k To JJ
TEMP = A(k, j)
A(k, j) = A(l, j)
A(l, j) = TEMP
Next j
KP1 = k + 1
For j = KP1 To JJ
A(k, j) = A(k, j) / A(k, k)
Next j
For i = 1 To KK
If (i - k) <> 0 Then
For j = KP1 To JJ
A(i, j) = A(i, j) - A(i, k) * A(k, j)
Next j
End If
Next i
Next k
For j = 1 To n
Y(j) = 0
For i = 1 To KK
Y(j) = Y(j) + A(i, JJ) * X(j) ^ (i - 1)
Next i
Next j
End Sub
1.2线图的程序化
1.2.1 查表检索法
图1-1普通V带选型图
运行界面:
程序代码:
Dim i As Integer
Private Sub Cmdstart_Click()
Dim pc As Double, n1 As Double, c(5) As Double
Dim xh As String
pc = Val(txt_pc.Text)
n1 = Val(txt_n1.Text)
c(0) = (Log(365) + (Log(2500) -Log(365)) * (Log(pc) -Log(0.8)) / (Log(5) -Log(0.8))) / Log(10)
c(1) = (Log(100) + (Log(1250) - Log(100)) * (Log(pc) - Log(1)) / (Log(10) - Log(1))) / Log(10) c(2) = (Log(100) + (Log(870) - Log(100)) * (Log(pc) - Log(3.15)) / (Log(18) - Log(3.15))) / Log(10)
c(3) = (Log(100) + (Log(700) - Log(100)) * (Log(pc) - Log(9)) / (Log(40) - Log(9))) / Log(10)
c(4) = (Log(100) + (Log(500) -Log(100)) * (Log(pc) -Log(50)) / (Log(200) -Log(50))) / Log(10)
For i = 0 To 4
If n1 >= 10 ^ c(i) Then
Exit For
End If
Next i
Select Case i
Case 0: xh = "Z"
Case 1: xh = "A"
Case 2: xh = "B"
Case 3: xh = "C"
Case 4: xh = "D"
Case 5: xh = "E"
End Select
txt_xh.Text = xh
End Sub
Private Sub Command2_Click()
End
End Sub
1.3有关数据处理
1.3.1标准值圆整
表1-9圆柱齿轮标准模数
运行界面:
程序代码:
Private Sub Command1_Click()
Dim i As Integer
Dim mm As Single, md As Single, mj As Single
Dim m As Variant
m = Array(1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.5, 4, 4.5, 5, 5.5, _ 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 22, 25, 28, 32, 36, 40, 45, 50) mm = Val(txt_mm.Text)
For i = 0 To 31
If mm <= m(i) Then
Exit For
End If
Next i
md = m(i)
For i = 1 To 31
If mm <= m(i) Then
Exit For
End If
Next i
If (m(i) - mm) <= (mm - m(i - 1)) Then
mj = m(i)
Else
mj = m(i - 1)
End If
txt_md.Text = Str(md)
txt_mj.Text = Str(mj)
End Sub
二、典型机械零部件的程序设计
2.1V带传动的程序设计
运行界面: