Dim Umax As Double, Nmax As Double, V10 As Double, Vminrear As Double
'Umax以最高当速比时最高转速时设定为最高车速度
'V10 为最小稳定车速, Vminrear 为最小倒车速度
Dim Tqudongqiao As Double, Tqufa As Double '驱动桥最大输出扭矩,最大滑动阻力矩
Dim Vmax As Double, Nvmax As Double, Fmxqu As Double, Amxjia As Double, POmx As Double 'POmx最大爬坡度
'Vmax 最高车速 Nvmax 最高车速时对应转速
Dim T60 As Double '60公里加速时间
Dim kai As Integer '用于记录是否为第一次使用。
Dim REV() As Double '对应转速
Dim Torque() As Double '对应扭矩,发动机
Dim Power() As Double '对应功率
Dim Tormax As Double, ntormax As Double '最大扭矩,最大扭矩时对应转速
Dim Pemax As Double, npemax As Double '最大功率,最大功率时对应转速
''**************以上定义类变量********************
Public Function Getnum(strall As String) As String '分解参数字符串,“:”后面的参数是数字返回值
Dim txtA As String
txtA = Trim(strall)
mytxt = Split(txtA, ":")
Getnum = Trim(mytxt(1))
End Function
Public Function T(Ni As Double)
' Pemax = Text2.Text '额定功率 283
' Np = Text3.Text '额定功率时转速 1900
' Te = 9550 * Text2.Text / Text3.Text '额定功率时扭矩 1422.44
' Ntq = Text5.Text '最大扭矩时转速 1200
' Ttqmax = Text4.Text '最大扭矩 1800
' ''以上初始化变量值
' T = (Te - Ttqmax) * (Ni - Ntq) * (Ni - Ntq) / ((Np - Ntq) * (Np - Ntq)) + Ttqmax
' '扭矩函数,二次抛物线拟合得到
Dim Cout
Dim i As Integer, j As Integer
Cout = List1.ListCount - 1
If Ni = REV(Cout) Then
i = Cout
Else
For i = 0 To Cout
If REV(i) > Ni Then Exit For
Next
End If
If i > Cout Then
MsgBox "输入参数有误,请重新输入。"
Else
'根据线性关系来求转速与扭矩有关系,
' Y=(Y2-Y1)(X-X1)/(X2-X1)+Y1 已知(x1,y1),(x2,y2)两个点时,求中间线性点公式
T = (Torque(i) - Torque(i - 1)) * (Ni - REV(i - 1)) / (REV(i) - REV(i - 1)) + Torque(i - 1)
End If
End Function
Public Function P(n)
' Dim a, Np, Pmax, Pt, Nt As Double
' Pt = Text5.Text * Text4.Text / 9550 '最大扭矩时的功率
' Pmax = Text2.Text '额定功率 283
' Np = Text3.Text '额定功率时转速 1900
' Nt = Text5.Text '最大扭矩时转速
' a = (Pt - Pmax) / ((Nt - Np) * (Nt - Np))
' ''以上初始化变量值
' P = a * (n - Np) * (n - Np) + Pmax
'功率函数,二次抛物线顶点法拟合得到,低速时值相对偏大
End Function
Public Function UtoN(U As Double, igi As Double) '已知速度求发动机转速
'2013.9.11 增加
'公式N=2.65258*Un*ig*i0/r
Dim Unow As Double, I0 As Double, r As Double
I0 = Text21.Text: r = Text19.Text
UtoN = 2.65258 * U * igi * I0 / r
End Function
Public Function Fe(Ni As Double, igi As Double) '汽车驱动力函数
'公式 F=Ttq*ig*i0*Nt/r
'Ttq为发动机扭矩 ig变速器传动比 i0主减速比 Nt传动效率 r车轮滚动半径
'text10.text 辅件消耗
Dim Nt As Double
Dim I0 As Double, r As Double
I0 = Text21.Text: r = Text19.Text
If igi = 1 Then
Nt = Text9.Text
Else
Nt = Text8.Text
End If
'单位 为KN
Fe = (1 - 0.01 * Text10.Text) * 0.001 * T(Ni) * igi * I0 * Nt / r
End Function
Public Function Fw(ByVal Ua As Double) '汽车行驶风阻
'公式 Fw=Cd*A*Ua*Ua/21.15 其中A为迎风面积
Fw = (Text20.Text * Text18.Text * Ua * Ua / 21.15) / 1000
'单位KN
End Function
Public Function Fz(Ua As Double) '汽车行驶阻力滚动+风阻
'滚动阻力=Wf
Dim Wg As Double
Wg = Text22.Text * 9.8
f = 0.0076 + 0.000056 * Ua
Fz = (Wg * f + Text20.Text * Text18.Text * Ua * Ua / 21.15) / 1000
'单位KN
End Function
Public Function Un(Ni2, igi) As Double '汽车速度
'Ni2 为转速 igi为对应档位速比
Un = (0.377 * Text19.Text * Ni2) / (Text21.Text * igi)
End Function
Private Sub IniData() '初始化转速,扭矩 及 功率 放到数组中
'扭矩公式Ttq=9550*Pe/n
'转速数组REV() 扭矩数组Torque() 功率Power() 每组对应
Dim MyS() As String
Pemax = 0
Tormax = 0
npemax = 0
ntormax = 0
Dim Cout As Integer, i As Integer
Dim ZB As Integer
Cout = List1.ListCount
If List1.ListCount > 0 Then
ReDim REV(Cout)
ReDim Torque(Cout)
ReDim Power(Cout)
For i = 0 To Cout - 1
' ZB = InStr(List1.List(i), "-")
MyS = Split(List1.List(i), ",")
REV(i) = MyS(0): Power(i) = MyS(1): Torque(i) = MyS(2)
' REV(i) = Left(List1.List(i), ZB - 1)
' Power(i) = Right(List1.List(i), Len(List1.List(i)) - ZB)
' Torque(i) = 9550 * Power(i) / REV(i)
If Power(i) > Pemax Then
Pemax = Power(i)
npemax = REV(i)
End If
If Torque(i) > Tormax Then
Tormax = Torque(i)
ntormax = REV(i)
End If
'Debug.Print "P=" & Power(i) & " T=" & Torque(i) & " n=" & REV(i) & " i=" & i
Next i
Nmax = REV(Cout - 1) + 200
End If
'Debug.Print Pemax & " tmax=" & Tormax
End Sub
Private Sub Command_backword_Click()
frmAbout.Show
' Form1.Hide
form3.Hide
End Sub
Private Sub Command清空_Click()
List1.Clear
End Sub
Private Sub List1_Click() '在列表框中单击一行,可以自动读取到文本框text2中
If List1.ListIndex <> -1 Then
Text2.Text = List1.List(List1.ListIndex)
End If
End Sub
'**************************************************************************
' 以上为公共程序部分 -----------------
'**************************************************************************
Private Sub Text6_Change()
If Text6.Text <> "" Then
If Text6.Text < 16 Then
For i = 1 To Text6.Text - 1
Label7(i).Visible = True
Text7(i).Visible = True
Next
For i = Text6.Text To 14
Label7(i).Visible = False
Text7(i).Visible = False
Next
ElseIf Text6.Text > "15" Then
MsgBox "变速器档位数只支持1-15,其他不支持。"
End If
End If
End Sub
Private Sub CommandExample_Click()
Dim aa As String
Dim bb() As String
Text1.Text = "DCiII385"
Text4.Text = 26000
Text6.Text = 6
Text3.Text = 6.4
Text7(0).Text = 7.04
Text7(1).Text = 4.1
Text7(2).Text = 2.48
Text7(3).Text = 1.56
Text7(4).Text = 1
Text7(5).Text = 0.74
Text8.Text = 0.84
Text9.Text = 0.95
Text18.Text = 6.34
Text19.Text = 0.526
Text20.Text = 0.62
Text21.Text = 4.875
Text22.Text = 32000
aa = "700,95,1250 |800,110,1300|900,130,1360|1000,155,1500|1100,190,1650|1200,212,1700|1300,230,1700|1400,250,1700|1500,268,1680|1600,270,1630|1700,274,1550|1800,273,1510|1900,275,1400|2000,265,1275|2100,250,1150"
bb = Split(aa, "|")
cc = UBound(bb)
List1.Clear
For i = 0 To cc
List1.AddItem bb(i)
Next
Picture1.Cls
End Sub
Private Sub Command_End_Click()
End
End Sub
Private Sub CommandCal_Click()
'' 计算并预览的方法,先把每次计算的结果保存到文件 App.Path & "\" & Text1.Text & "计算结果.txt" 中,
'' 全部计算完成之后,再把文件中的内容逐行读取保存到字符串变量St_b中,输入参数部分按这个方法来做,
'' 计算部分采用计算一次先保存到Form2.Text1.Text 中,然后再分别追加到文件与St_b变量中,最后显示到Form2.Text2.Text
'' TXT文件内容要显示到文件窗口中,需要先读取到字符变量中,再一次性传给文本窗口
Dim AutoSaveExact As String
Dim Str_a As String, St_B As String
AutoSaveExact = App.Path & "\Autoexact.txt" '用于存放每次计算之后的数据输入
' MsgBox AutoSaveExact
form3.Caption = "汽车动力性计算绘图结果"
Dim IGmax As Double, n1 As Double
Dim Cout As Integer
Dim Fpowe As Double, Fallzu As Double
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
IGmax = Text6.Text - 1 '以0为起始,最高档位车速
Cout = List1.ListCount - 1
'以下求最高车速================从扭矩最大时的转速开始递增计算=================================
'Debug.Print "最高转速ntormax=" & ntormax
Nvmax = 0
For i = ntormax To REV(Cout)
n1 = i
Fpowe = Fe(n1, Text7(IGmax).Text)
Fallzu = Fz(Un(n1, Text7(IGmax).Text))
'Debug.Print "i=" & i & " Fe=" & Fpowe & " Fz=" & Fallzu
Vmax = Un(n1, Text7(IGmax).Text)
Nvmax = n1
If Fpowe < Fallzu Then
Vmax = Un(n1 - 1, Text7(IGmax).Text)
Nvmax = n1 - 1
'Debug.Print "i=" & i & " Fe=" & Fe(n1, Text7(IGmax).Text) & " Fz=" & Fz(Un(n1, Text7(IGmax).Text))
Exit For
End If
Next
'Debug.Print "最高转速max=" & Nvmax & " 最高车速=" & Vmax
'=====================================================================================
If Text1.Text = "" Then
Paths = App.Path & "\计算结果.txt"
Else
Paths = App.Path & "\" & Text1.Text & "计算结果.txt"
End If
'MsgBox paths
Call Option5_Click
Picture1.Cls
'''''''''''''''''''''''''以上计算一次''''''''''''''''''''''''''''''''
' If Amxjia = 0 Then Call Option5_Click
' If P0mx = 0 Then Call Option6_Click
' If Fmxqu = 0 Then Call Option3_Click
Open Paths For Output As #1
Print #1, "┌──────────────────┐"
Print #1, "│ *** 以下是计算输入参数内容 *** │"
Print #1, "├─────────┬────────┤"
Print #1, "│发动机或车辆型号:│" & Text1.Text & Space(16 - Len(Text1.Text)) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│迎风面积B*H(M^2):│" & N2Str(Text18.Text, 16) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│空气阻力系数: │" & N2Str(Text20.Text, 16) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│车轮滚动半径(M): │" & N2Str(Text19.Text, 16) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│主减传动比I0: │" & N2Str(Text21.Text, 16) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│满载总质量(kg):│" & N2Str(Text22.Text, 16) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│直接档传动效率: │" & N2Str(Text9.Text, 16) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│其他档传动效率: │" & N2Str(Text8.Text, 16) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│辅件消耗(%): │ " & N2Str(Text10.Text, 15) & "│"
Print #1, "├─────────┼────────┤"
Print #1, "│驱动桥负荷(kg):│ " & N2Str(Text4.Text, 15) & "│"
Print #1, "└─────────┴────────┘"
Print #1, vbCrLf & "┌──────────────────┐" & vbCrLf & "│ -------以下为变速器各档参数------- │"
Print #1, "├─────────┬────────┤"
Print #1, "│" & Space(4) & "R档:" & Space(9) & "│" & Space(5) & N2Str(Text3.Text, 11) & "│"
Print #1, "├─────────┼────────┤"
For i = 0 To Text6.Text - 1
Print #1, "│" & Space(5 - Len(i + 1)) & i + 1 & "档:" & Space(9) & "│" & Space(5) & N2Str(Text7(i).Text, 11) & "│"
If i = Text6.Text - 1 Then
Print #1, "└─────────┴────────┘"
Else
Print #1, "├─────────┼────────┤"
End If
Next
''''''''''''''''''''''以下输出发动机参数''''''''''''''''''''''''''''''''''''''''''''''''
Print #1, vbCrLf & "┌──────────────────────┐"
Print #1, "│ *** 以下为发动机参数内容 *** │"
Print #1, "├──────┬───────┬───────┤"
Print #1, "│ 转速(r/min)│ 功率(kw/h) │ 扭矩(N.m) │ "
Print #1, "├──────┼───────┼───────┤"
For i = 0 To Cout
Print #1, "│ " & REV(i) & Space(8 - Len(Trim(REV(i)))) & "│ " & N2Str(Power(i), 8) & "│ " & N2Str(Torque(i), 10) & " │"
Next
Print #1, "└──────┴───────┴───────┘"
Close #1
' Form2.Show==========================显示预览信息=================================
St_B = ""
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Call Option2_Click '追加速度信息参数
Open Paths For Append As #1
Print #1, "****************以下为各档位 转速-速度 信息*******************"
Print #1, Form2.Text1.Text
Close #1
Call Option3_Click '驱动力信息参数
Open Paths For Append As #1
Print #1, "****************以下为各档位 转速-驱动力 信息*******************"
Print #1, Form2.Text1.Text
Close #1
Call Option6_Click '汽车爬坡度信息参数
Open Paths For Append As #1
Print #1, "****************以下为 各档转速-爬坡度 信息参数*******************"
Print #1, Form2.Text1.Text
Close #1
Call Option4_Click '行驶阻力信息参数
Open Paths For Append As #1
Print #1, "*****以下为 速度km/h-行驶阻力kN(滚动阻力+风阻) 信息*****"
Print #1, Form2.Text1.Text
Close #1
Call Option7_Click '行驶阻功率信息参数
Open Paths For Append As #1
Print #1, "*****以下为 速度km/h-行驶阻功率kW/h 信息*****"
Print #1, Form2.Text1.Text
Close #1
Call Option_AccT_Click '加速时间速度信息参数
Open Paths For Append As #1
Print #1, "****************以下为 加速时间-速度 信息参数*******************"
Print #1, Form2.Text1.Text
Close #1
Call Option8_Click '变速箱输出扭矩信息
Open Paths For Append As #1
Print #1, "*******以下为 发动机转速-变速箱输出扭矩 计算结果*******"
Print #1, Form2.Text1.Text
Close #1
Call Option9_Click '驱动桥输出扭矩信息
Open Paths For Append As #1
Print #1, "*******以下为 发动机转速-驱动桥输出扭矩 计算结果*******"
Print #1, Form2.Text1.Text
Close #1
Open Paths For Append As #1 '计算传动轴转速
Print #1, "*******以下为 速度-传动轴转速关系 计算结果*******"
Print #1, " 车速(km/h) | 传动轴转速(rpm) "
Print #1, String(30, "─")
For j = 1 To 30
S_n = Shaft_n(j * 5)
Print #1, Space(5) & N2Str(j * 5, 8) & "│ " & N2Str(Int(S_n), 8)
If 5 * j > Vmax Then Exit For
Next
Close #1
Open Paths For Append As #1
Print #1, "-------------以下为计算结果信息------------------------------------"
Print #1, "计算所得最高车 速: " & Int(Vmax) & " km/h"
Print #1, "计算所得最大爬坡度: " & Int(POmx) & " %"
Print #1, "计算所得最大驱动力: " & Int(Fmxqu * 100) / 100 & " kN"
Print #1, "1档最小稳定车速: " & N2Str(V10, 6) & " km/h"
Print #1, "倒车时最小稳定速度: " & N2Str(Vminrear, 6) & " km/h"
Print #1, "计算所得最大加速度: " & Int(Amxjia * 100) / 100 & " m/s^2"
Print #1, "驱动桥总输出扭矩可达: " & Int(Tqudongqiao) & " N.m"
If Text4.Text > 0 Then
Print #1, "驱动桥最大滑动阻力矩: " & N2Str(Tqufa, 6) & " N.m"
End If
Print #1, "最小稳定车速加速至60km/h时间:" & Int(T60 * 1000) / 1000 & " s" & vbCrLf
Close #1
Open Paths For Input As #1
Do While Not EOF(1)
Line Input #1, Str_a '-----读取一行-----
St_B = St_B & Space(8) & Chr(13) & Chr(10) & Str_a '把之前保存到文件中的文本全部读入St_B变量中
Loop
Close #1
''''''''''''''''''''''以下读取文件到form2.text2.text中显示'''''''''''''''''''''''''''''''''
Form2.Height = 9090
Form2.Width = 12090
Form2.Text2.Height = 7890: Form2.Text2.Width = 12000
Form2.Command1.Left = 4500: Form2.Command1.Top = 8010
Form2.Show
Form2.Text2.Text = St_B
'''''''''''''''''''''''''''''''''''''''以下部分为自动保存数据用'''''''''''''''''''''''''''''''''''''''''''''''''''''
Open AutoSaveExact For Output As #2
Print #2, "******************以下是计算输入参数内容******************"
Print #2, "发动机或车辆型号: " & Text1.Text
Print #2, "迎风面积B*H(M^2): " & Text18.Text
Print #2, "空气阻力系数: " & Text20.Text
Print #2, "车轮滚动半径(M): " & Text19.Text
Print #2, "主减传动比I0: " & Text21.Text
Print #2, "满载总质量(kg): " & Text22.Text
Print #2, "直接档传动效率: " & Text9.Text
Print #2, "其他档传动效率: " & Text8.Text
Print #2, "辅件消耗(%): " & Text10.Text
Print #2, "驱动桥负荷(kg): " & Text4.Text
Print #2, Chr(13) & Chr(10) & "******************以下为变速器各档参数******************"
For i = 0 To Text6.Text - 1
Print #2, i + 1 & "档:" & Text7(i).Text
Next
Print #2, "R档:" & Text3.Text
'''''''''''''''发动机数据''''''''''''''''''''''''''''
Print #2, Chr(13) & Chr(10) & "发动机转速(r/min) 对应功率(kW/h)"
Print #2, "每组数据中转速与功率之间以中横杠隔开"
Print #2, "******************以下开始为发动机数据********************"
For i = 0 To List1.ListCount - 1
Print #2, List1.List(i)
Next
Close #2
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Option1.Value = True Then
Call Option1_Click
ElseIf Option2.Value = True Then
Call Option2_Click
ElseIf Option3.Value = True Then
Call Option3_Click
ElseIf Option4.Value = True Then
Call Option4_Click
ElseIf Option5.Value = True Then
Call Option5_Click
ElseIf Option6.Value = True Then
Call Option6_Click
ElseIf Option7.Value = True Then
Call Option7_Click
ElseIf Option8.Value = True Then
Call Option8_Click
ElseIf Option9.Value = True Then
Call Option9_Click
ElseIf Option_AccT.Value = True Then
Call Option_AccT_Click
Else
MsgBox "请选择要计算的项目。"
End If
kai = 0
' frmAbout.Hide
End Sub
Private Sub Command保存_Click() '保存所有输入的参数-------------
Dim Paths As String
Dim i As Integer
' Dim TextLine As String
' 设置“CancelError”为 True
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
' 设置标志
CommonDialog1.Filter = "Text Files" & "(*.txt)|*.txt|All Files (*.*)|*.*"
CommonDialog1.FilterIndex = 1
' 显示“保存”对话框
CommonDialog1.ShowSave
Paths = CommonDialog1.FileName
' Open Paths For Output As #1
' Print #1, "发动机转速(r/min) 对应功率(kW/r/min)"
' Print #1, "每组数据中转速与功率之间以中横杠隔开"
' Print #1, "******************以下开始为数据********************"
' For i = 0 To List1.ListCount - 1
' Print #1, List1.List(i)
' Next
' Close
Open Paths For Output As #2
Print #2, "******************以下是计算输入参数内容******************"
Print #2, "发动机或车辆型号: " & Text1.Text
Print #2, "迎风面积B*H(M^2): " & Text18.Text
Print #2, "空气阻力系数: " & Text20.Text
Print #2, "车轮滚动半径(M): " & Text19.Text
Print #2, "主减传动比I0: " & Text21.Text
Print #2, "满载总质量(kg): " & Text22.Text
Print #2, "直接档传动效率: " & Text9.Text
Print #2, "其他档传动效率: " & Text8.Text
Print #2, "辅件消耗(%): " & Text10.Text
Print #2, "驱动桥负荷(kg)选填: " & Text4.Text
Print #2, Chr(13) & Chr(10) & "******************以下为变速器各档参数******************"
For i = 0 To Text6.Text - 1
Print #2, i + 1 & "档:" & Text7(i).Text
Next
Print #2, "R档:" & Text3.Text
'''''''''''''''发动机数据''''''''''''''''''''''''''''
Print #2, Chr(13) & Chr(10) & "发动机转速(r/min) 对应功率(kW/r/min)"
Print #2, "每组数据中转速与功率之间以中横杠隔开"
Print #2, "******************以下开始为发动机数据********************"
For i = 0 To List1.ListCount - 1
Print #2, List1.List(i)
Next
Close #2
ErrHandler:
' 用户按了“取消”按钮
Exit Sub
End Sub
Private Sub Command导入_Click()
Dim Paths As String
Dim TextLine As String
Dim ZB As Integer, i As Integer
Dim ROT As Single, POW As Single, Rota As Single, Tor As Single
' 设置“CancelError”为 True
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
' 设置标志
CommonDialog1.Filter = "Text Files" & "(*.txt)|*.txt|All Files (*.*)|*.*"
CommonDialog1.FilterIndex = 1
' 显示“打开”对话框
CommonDialog1.ShowOpen
Paths = CommonDialog1.FileName
List1.Clear '先清空列表项
'===================以下打开文件导入参数=======================================
Open Paths For Input As #2