源程序清单-汽车动力性计算图表软件V1.0
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
Debug.Print "open seek=" & Seek(2)
Do While Not EOF(2)
' Line Input #2, textA '-------------------------以下是计算输入参数内容--------------------------
Line Input #2, textA '发动机型号: DCiII385
' Debug.Print textA
If InStr(textA, "发动机或车辆型号:") > 0 Then
Text1.Text = Getnum((textA))
Exit Do
End If
Loop
Seek #2, 1
Do While Not EOF(2)
Line Input #2, textA '迎风面积:B*H(M^2):6.34
'Debug.Print "dmtk=" & textA
If InStr(textA, "迎风面积") > 0 Then
Text18.Text = Getnum((textA))
Exit Do
End If
Loop
Line Input #2, textA '空气阻力系数: .62
Text20.Text = Getnum((textA))
Line Input #2, textA '车轮滚动半径(M): .546
Text19.Text = Getnum((textA))
Line Input #2, textA '主减传动比I0: 4.44
Text21.Text = Getnum((textA))
Line Input #2, textA '满载总质量(kg): 46000
Text22.Text = Getnum((textA))
Line Input #2, textA '直接档传动效率: .95
Text9.Text = Getnum((textA))
Line Input #2, textA '间接档传动效率: .85
Text8.Text = Getnum((textA))
Line Input #2, textA '辅件消耗(%): 5
Text10.Text = Getnum((textA))
Line Input #2, TextLine '驱动桥负荷(kg): 5
If InStr(TextLine, "驱动桥负荷") > 0 Then
Text4.Text = Getnum((TextLine))
End If
Seek #2, 1
i = 0
Do While Not EOF(2)
Line Input #2, textA
If InStr(textA, "档:") > 0 And InStr(textA, "R档:") = 0 Then
Text7(i).Text = Getnum((textA))
i = i + 1
ElseIf InStr(textA, "R档:") > 0 Then
Text3.Text = Getnum((textA))
End If
Loop
Text6.Text = i
Seek #2, 1 ''''''''''''''读取发动机参数
Do While Not EOF(2)
Line Input #2, TextLine
If InStr(TextLine, "以下开始为发动机数据") > 0 Then Exit Do
Loop
' Debug.Print "文件号位置:" & Seek(2)
Dim MyS() As String
Do While Not EOF(2) ' 循环至文件尾。
Line Input #2, TextLine ' 读入一行数据并将其赋予某变量。
If InStr(TextLine, ",") > 0 Then
MyS = Split(TextLine, ",")
ROT = CSng(Trim(MyS(0))) '取出转速
POW = CSng(Trim(MyS(1))) '取出功率
Tor = CSng(Trim(MyS(2))) '取出扭矩
TextLine = ROT & "," & POW & "," & Tor
'========去除项目中的空格,按转速从小到大排序============
If List1.ListCount > 0 Then
For i = List1.ListCount - 1 To 0 Step -1
MyS = Split(List1.List(i), ",")
Rota = CSng(MyS(0))
If Rota < ROT Then
List1.AddItem TextLine, i + 1
Exit For
End If
Next i
If i = -1 Then '条件不满足时插入到第一条上
List1.AddItem TextLine, 0
End If
Else
List1.AddItem TextLine
End If
End If
'Text1.Text = Text1.Text & TextLine ' 在立即窗口中显示数据。
Loop
Close #2
ErrHandler:
' 用户按了“取消”按钮
Close
Exit Sub
End Sub
Private Sub Command删除_Click()
Dim i As Integer
i = List1.ListIndex
On Error Resume Next
List1.RemoveItem List1.ListIndex
If i <> 0 Then
List1.ListIndex = i - 1
End If
End Sub
Private Sub Command添加_Click() '增加一行发动机参数
Dim TextLine As String
Dim ZB As Integer, i As Integer
Dim ROT As Single, POW As Single, Rota As Single, Tor As Single
Dim MyS() As String
TextLine = Text2.Text
If Text2.Text <> "" And InStr(Text2.Text, ",") > 1 And InStr(Text2.Text, "转速,功率") = 0 Then
MyS = Split(TextLine, ",")
ROT = CSng(Trim(MyS(0)))
POW = CSng(Trim(MyS(1)))
Tor = CSng(Trim(MyS(2)))
On Error Resume Next
TextLine = ROT & "," & POW & "," & Tor
'========去除项目中的空格,按转速从小到大排序============
If List1.ListCount > 0 Then
For i = List1.ListCount - 1 To 0 Step -1
MyS = Split(List1.List(i), ",")
Rota = CSng(MyS(0))
If Rota < ROT Then '当输入行转速大于逐行搜索的转速时插入行
List1.AddItem TextLine, i + 1
Exit For
End If
Next i
If i = -1 Then '条件不满足时插入到第一条上
List1.AddItem TextLine, 0
End If
Else
List1.AddItem TextLine
End If
ElseIf Text2.Text = "" Then
Text2.Text = ""
Else
Text2.Text = "转速,功率,扭矩之间以“,”隔开"
End If
End Sub
Private Sub Option_AccT_Click()
'2013-9-10 10:59 改进,增加速度-加速时间曲线功能,来求加速时间
'根据F=ma 来求得加速度 a ,转动惯量加速采用系数量来简化,delta为系数,低速时,系数大,速度高时系数相对小
'从一档换至六档总加速时间,一档时以最低稳定车速行驶
Dim k As Integer, i As Integer, j As Integer
Dim delta As Double
Dim IGmax As Double, Iginow As Double
Dim Acc0 As Double, Acc1 As Double, Accn As Double '存放加速度倒数用
Dim Vnow As Double, V0 As Double, V1 As Double, V2 As Double '加速度倒数最大值设值,V0 V1 V2为速度
Dim Cout, Cout1, mall, X0, Y0, Nmid As Double
Dim Time_all As Double, T00 As Double, T01 As Double '使用时间
Dim Nroll As Double '换档时 次档位转速
Dim T59 As Double, T61 As Double, V59 As Double, V61 As Double
Dim Vmin As Double, Nvmin As Double, n1 As Double '最低车速以及对应转速
k = 0
IGmax = Text6.Text - 1
Cout = List1.ListCount - 1
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B
Picture1.CurrentX = 100
Picture1.CurrentY = 200
Picture1.Print "T(s)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "V(km/h)"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
V0 = Un(REV(0), Text7(0).Text) '最低车速
Picture1.Print Text1.Text & "汽车加速时间-速度曲线" & " 最小稳定车速:" & N2Str(V0, 5) & " km/h"
Picture1.CurrentX = 1000
Picture1.CurrentY = 570
V0 = Un(REV(0), 1)
Picture1.ForeColor = RGB(0, 0, 255) '设置蓝色
Picture1.Print "蓝线为直接档加速时间曲线,初始车速:" & N2Str(V0, 5) & " km/h"
Picture1.ForeColor = RGB(0, 0, 0) '设置黑色
'===以转速为基本变量,求得对应速度,驱动力,根据速度可以求得行驶阻力
' Nmax = Int((Text3.Text - 500) / 100) '转速最大分度,每100转为一分度
'REV() 转速存放数据
'---------以下计算1档时最低车速======================================================================
For i = REV(0) To REV(Cout)
n1 = i
If Fe(n1, Text7(0).Text) > Fz(Un(n1, Text7(0).Text)) Then '当驱动力>行驶阻力时,就有车速
Vmin = Un(n1, Text7(0).Text)
V10 = Vmin
Nvmin = n1
' MsgBox "速度max=" & Vmax & " | 转速=" & Nvmax
'Debug.Print "1档最小车速Vmin=" & Vmin & " Nvmin=" & Nvmin
Exit For
End If
Next '=====================================================================================
Umax = Un(REV(Cout), Text7(IGmax).Text)
femax = Fe(ntormax, Text7(0).Text) '最大扭矩时驱动力最大
kdx = (6915 - 600) / Umax
mall = Text22.Text '总质量
' amax = Femax / mall * 1000 '最大加速度
kdy = (4755 - 300) / 150 '缇与Y坐标之比,每刻度对应多少缇,时间最大值设置为150秒
Time_all = 0 '总用时置0
' V0 = Un(REV(0), Text7(0).Text) '最低车速,以输入最小转速为最小车速
V0 = Vmin
Form2.Text1.Text = "I档起步加速到最高档-速度时间参数:" & vbCrLf
Form2.Text1.Text = Form2.Text1.Text & Space(2) & "I档最小稳定车速:" & N2Str(V0, 8) & "km/h" & vbCrLf
Form2.Text1.Text = Form2.Text1.Text & Space(5) & "时间(s) 速度(km/h)" & vbCrLf
Form2.Text1.Text = Form2.Text1.Text & String(15, "─") & vbCrLf '│
For i = 0 To IGmax '每档位计算开始循环,
Iginow = Text7(i).Text
If i = 0 Then
delta = 1.4
ElseIf i = 1 Then
delta = 1.3
ElseIf i = 2 Then
delta = 1.2
Else
delta = 1.1
End If
If i = 0 Then
V0 = Un(REV(0), Iginow) '当前档位初始车速
Nmid = (REV(0) + REV(1)) / 2
V1 = Un((REV(0) + REV(1)) / 2, Iginow) '中间转速速度
X0 = V0 * kdx + 510
Acc0 = 1 / (1000 * (Fe(REV(0), Iginow) - Fz(V0)) / mall / delta) '加速度倒数
Acc1 = 1 / (1000 * (Fe(Nmid, Iginow) - Fz(V1)) / mall / delta)
If Acc0 < 0 Then Acc0 = Acc1 '启动力不足时
T00 = 5 * (Acc0 + Acc1) * (V1 - V0) / 36 '计算单位要统一,速度需要换算为m/s计算才行
Time_all = Time_all + T00 '累积时间一次,
Form2.Text1.Text = Form2.Text1.Text & Space(5) & N2Str(Time_all, 8) & "│ " & N2Str(V1, 8) & vbCrLf
Y0 = kdy * Time_all
End If
'Debug.Print "加速度倒数Acc0=" & Acc0 & " acc1=" & Acc1 & " 时间T00=" & T00 & " V1=" & V1 & " V0=" & V0
'Debug.Print "y0=" & Y0
'********************************************************************************************************************
' If Y0 > 100 Then Y0 = 100
If i > 0 Then '进行换档位速度判断,确定新进档位转速所处位置
For j = 1 To Cout
Nroll = UtoN(V1, Iginow)
If Nroll < REV(j) Then
Cout1 = j: Exit For
End If
Next
Else
Cout1 = 1
End If
'Debug.Print "nroll=" & Nroll & " cout1=" & Cout1
''''''''''''''''''''''''''''''以上确定次档位转速及起始速度----------------
For j = Cout1 To Cout '二层循环,计算各输入点位情况
V2 = Un(REV(j), Iginow)
X1 = V2 * kdx + 510
Acc0 = Acc1
Acc1 = 1 / (1000 * (Fe(REV(j), Iginow) - Fz(V2)) / mall / delta) '第一点加速度倒数
If Acc1 < 0 Then Exit For
T01 = 5 * (Acc0 + Acc1) * (V2 - V1) / 36
If Acc0 < 0 Or Acc1 < 0 Or (Time_all + T01) > 150 Or Acc0 > 40 Or Acc1 > 40 Then Exit For '没有加速能力时退出循环
If i < IGmax Then '判断换档加速度相等时间情况,换档时机,次档位加速度>当前档位加速度时,换进下一档
Nroll = UtoN(V2, Text7(i + 1).Text)
If Nroll > REV(0) And Nroll < REV(Cout) Then
Accn = 1 / (1000 * (Fe(Nroll, Text7(i + 1).Text) - Fz(V2)) / mall / delta)
If Acc1 > Accn Then Exit For
End If
End If
Time_all = Time_all + T01 '累计时间2次
Form2.Text1.Text = Form2.Text1.Text & Space(5) & N2Str(Time_all, 8) & "│ " & N2Str(V2, 8) & vbCrLf
Y1 = kdy * Time_all
'''''''''''''''''''''''''''求60公里加速时间'''''''''''''''''''''''''''''''''''''''''''''''''
If k = 0 And V2 > 60 Then
V59 = V1: V61 = V2
T59 = Time_all - T01
T61 = Time_all
k = 1
T60 = Y_Line(60, V59, T59, V61, T61)
' Debug.Print "T60=" & T60
End If
' If i = 0 And Y1 > Y0 And k = 0 Then
' k = 1: Amxjia = Y0 / kdy
' ''''''''''''画最大加速度横线''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Picture1.DrawStyle = 2
' Picture1.CurrentX = 810
' Picture1.CurrentY = 5265 - Y0 - 210
' Picture1.Print "Min:" & Int(Amxjia * 100) / 100
' Picture1.Line (X1, 5265 - Y0)-Step(-X1 + 510, 0), RGB(255, 100, 0)
' Picture1.DrawStyle = 0
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' End If
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(255, 0, 0) '画速度-加速时间曲线(后半周期)
' If j = 1 Then
' Picture1.CurrentX = X1 - 150 - i * 15
' Picture1.CurrentY = 5235 - Y1 - i * 15
' Picture1.Print "I" & i + 1
' End If
X0 = X1: Y0 = Y1 '记录后点位置到前点,
'====================以下开始前半周期================================
If j < Cout Then
V0 = V2
Nmid = (REV(j) + REV(j + 1)) / 2
V1 = Un(Nmid, Iginow)
Acc0 = 1 / (1000 * (Fe(REV(j), Iginow) - Fz(V0)) / mall / delta)
Acc1 = 1 / (1000 * (Fe(Nmid, Iginow) - Fz(V1)) / mall / delta)
' Debug.Print "j=" & N2Str(j) & " v1=" & N2Str(V1, 8) & " v0=" & N2Str(V0, 8) & " t00=" & N2Str(T00) & " Time=" & Time_all & " acc0=" & N2Str(Acc0)
T00 = 5 * (Acc0 + Acc1) * (V1 - V0) / 36
If Acc0 < 0 Or Acc1 < 0 Or (Time_all + T00) > 150 Or Acc0 > 40 Or Acc1 > 40 Then Exit For '没有加速能力时退出循环
Time_all = Time_all + T00
' Form2.Text1.Text = Form2.Text1.Text & Space(5) & N2Str(Time_all, 18) & N2Str(V1, 8) & vbCrLf
X1 = V1 * kdx + 510
Y1 = kdy * Time_all
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(255, 0, 0) '画速度-加速时间曲线(前半周期)
X0 = X1: Y0 = Y1
Else
V0 = V1: V1 = V2
End If
Next
Next
'''''''''''''''''''''''''''直接档加速时间曲线'''''''''''''''''''''''''''''''''''
V0 = Un(REV(0), 1) '直接档初始速度
delta = 1.1
Time_all = 0
T00 = 0
X0 = V0 * kdx + 510
Y0 = kdy * Time_all
Form2.Text1.Text = Form2.Text1.Text & vbCrLf & Space(2) & "直接档初始速度:" & N2Str(V0, 8) & "km/h" & vbCrLf
Form2.Text1.Text = Form2.Text1.Text & Space(5) & "时间(s) 速度(km/h)" & vbCrLf
Form2.Text1.Text = Form2.Text1.Text & String(15, "─") & vbCrLf '│
Form2.Text1.Text = Form2.Text1.Text & Space(5) & N2Str(Time_all, 8) & "│ " & N2Str(V0, 8) & vbCrLf
For j = 0 To Cout - 1
V0 = Un(REV(j), 1)
V1 = Un(REV(j + 1), 1)
Acc0 = 1 / (1000 * (Fe(REV(j), 1) - Fz(V0)) / mall / delta)
Acc1 = 1 / (1000 * (Fe(REV(j + 1), 1) - Fz(V1)) / mall / delta)
If Acc0 > 0 And Acc1 > 0 Then
T00 = 5 * (Acc0 + Acc1) * (V1 - V0) / 36
Time_all = Time_all + T00
X1 = V1 * kdx + 510
Y1 = Time_all * kdy
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(0, 0, 255) '画直接档,速度-加速时间曲线
X0 = X1: Y0 = Y1
Form2.Text1.Text = Form2.Text1.Text & Space(5) & N2Str(Time_all, 8) & "│ " & N2Str(V1, 8) & vbCrLf
End If
'Debug.Print "加速度倒数Acc0=" & Acc0 & " acc1=" & Acc1 & " 时间T00=" & T00 & " V1=" & V1 & " V0=" & V0
Next
' Form2.Show
' Form2.Text1.Width = 12000: Form2.Text1.Height = 7500: Form2.Text2.Visible = False
'========以上画各档位的加速度曲线图===========================
Xfen = Int((Umax / 8) / 5) * 5
Yfen = 10
If Xfen = 0 Then Xfen = 5
'MsgBox "Yfen=" & yfen & "| Femax=" & Femax & "| amax=" & amax
For i = 0 To 16
If 510 + Xfen * i * kdx > 7425 Then Exit For
Picture1.CurrentY = 5295
Picture1.CurrentX = 300 + kdx * i * Xfen
Picture1.Print Xfen * i
Picture1.Line (510 + kdx * i * Xfen, 5265)-(510 + kdx * i * Xfen, 5190)
Picture1.DrawStyle = 2 '画点线
Picture1.Line (510 + kdx * i * Xfen, 5265)-Step(0, -4500)
Picture1.DrawStyle = 0 '画实线
Next
''====================以上画速度V刻度线==============================
For i = 1 To 15
Picture1.CurrentX = 100
Picture1.CurrentY = 5190 - kdy * Yfen * i
If 5265 - kdy * Yfen * i < 510 Then Exit For
Picture1.Print Yfen * i
'MsgBox yfen * i
Picture1.Line (510, 5265 - kdy * Yfen * i)-(610, 5265 - kdy * Yfen * i), RGB(255, 0, 0)
Picture1.DrawStyle = 2 '画点线
Picture1.Line (610, 5265 - kdy * Yfen * i)-Step(6800, 0), RGB(0, 0, 0)
Picture1.DrawStyle = 0
Next
''====================以上画加速度 Y 刻度线 时间====================================
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "汽车加速度时间与速度曲线.bmp"
' If kai = 0 Then Picture1.Cls
End Sub
Private Sub Form_Load()
Dim Autopath As String, SavePath As String
Dim TextLine As String
Dim ROT As Single, POW As String, Tor As Single, Rota As Single
Autopath = App.Path & "\Autoexact.txt"
SavePath = App.Path & "\Save"
'Debug.Print "dir=" & Dir(SavePath, vbDirectory)
For i = 0 To 14
Text7(i).Text = ""
Next
Text3.Text = "" '倒档置空参数
Text2.Text = "" '发动机参数输入置空
If Dir(Autopath) <> "" Then
Open Autopath For Input As #2
'Debug.Print "open seek=" & Seek(2)
Do While Not EOF(2)
' Line Input #2, TextLine '-------------------------以下是计算输入参数内容--------------------------
Line Input #2, TextLine '发动机型号: DCiII385
' Debug.Print TextLine
If InStr(TextLine, "发动机或车辆型号:") > 0 Then
Text1.Text = Getnum((TextLine))
Exit Do
End If
Loop
Seek #2, 1
Do While Not EOF(2)
Line Input #2, TextLine '迎风面积:B*H(M^2):6.34
'Debug.Print "dmtk=" & TextLine
If InStr(TextLine, "迎风面积") > 0 Then
Text18.Text = Getnum((TextLine))
Exit Do
End If
Loop
Line Input #2, TextLine '空气阻力系数: .62
Text20.Text = Getnum((TextLine))
Line Input #2, TextLine '车轮滚动半径(M): .546
Text19.Text = Getnum((TextLine))
Line Input #2, TextLine '主减传动比I0: 4.44
Text21.Text = Getnum((TextLine))
Line Input #2, TextLine '满载总质量(kg): 46000
Text22.Text = Getnum((TextLine))
Line Input #2, TextLine '直接档传动效率: .95
Text9.Text = Getnum((TextLine))
Line Input #2, TextLine '间接档传动效率: .85
Text8.Text = Getnum((TextLine))
Line Input #2, TextLine '辅件消耗(%): 5
Text10.Text = Getnum((TextLine))
Line Input #2, TextLine '驱动桥负荷(kg): 5
If InStr(TextLine, "驱动桥负荷") > 0 Then
Text4.Text = Getnum((TextLine))
End If
Seek #2, 1
i = 0
Do While Not EOF(2)
Line Input #2, TextLine
If InStr(TextLine, "档:") > 0 And InStr(TextLine, "R档:") = 0 Then
Text7(i).Text = Getnum((TextLine))
i = i + 1
ElseIf InStr(TextLine, "R档:") > 0 Then
Text3.Text = Getnum((TextLine))
End If
' Debug.Print "当前text :" & TextLine
Loop
Text6.Text = i
Seek #2, 1 ''''''''''''''读取发动机参数
Do While Not EOF(2)
Line Input #2, TextLine
If InStr(TextLine, "以下开始为发动机数据") > 0 Then Exit Do
Loop
' Debug.Print "文件号位置:" & Seek(2)
Do While Not EOF(2) ' 循环至文件尾。
Line Input #2, TextLine ' 读入一行数据并将其赋予某变量。
If InStr(TextLine, ",") > 0 Then
MyS = Split(TextLine, ",")
ROT = CSng(Trim(MyS(0)))
POW = CSng(Trim(MyS(1)))
Tor = CSng(Trim(MyS(2)))
TextLine = ROT & "," & POW & "," & Tor
'========去除项目中的空格,按转速从小到大排序============
If List1.ListCount > 0 Then
For i = List1.ListCount - 1 To 0 Step -1
MyS = Split(List1.List(i), ",")
Rota = CSng(MyS(0))
If Rota < ROT Then
List1.AddItem TextLine, i + 1
Exit For
End If
Next i
If i = -1 Then '条件不满足时插入到第一条上
List1.AddItem TextLine, 0
End If
Else
List1.AddItem TextLine
End If
End If
'Text1.Text = Text1.Text & TextLine ' 在立即窗口中显示数据。
Loop
Close #2
Else
' Form3.Hide
' frmAbout.Show
Text1.Text = ""
Text2.Text = ""
' Text3.Text = ""
Text4.Text = ""
' Text5.Text = ""
Text6.Text = ""
For i = 0 To 14
Text7(i).Text = ""
Next
Text8.Text = 0.84
Text9.Text = 0.95
Text10.Text = 5
Text18.Text = 6.34
Text19.Text = 0.526
Text20.Text = 0.62
Text21.Text = ""
Text22.Text = ""
kai = 0
End If
Fmxqu = 0: Amxjia = 0: POmx = 0
If Dir(SavePath, vbDirectory) = "" Then
MkDir (SavePath)
End If
'Fmxqu 最大驱动力 Amxjia最大加速度 POmx最大功率
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Command添加_Click
Text2.Text = ""
End If
End Sub
'******************************************************************************************************'
'‘’‘’‘’‘’‘’以下为计算程序
'
'******************************************************************************************************
Private Sub Option1_Click() '发动机特性曲线
Dim kdx As Double, kdy As Double
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B
Picture1.CurrentX = 180
Picture1.CurrentY = 270
Picture1.Print "T(N.M)"
Picture1.CurrentX = 30
Picture1.CurrentY = 5265
'Picture1.Print "原点O"
Picture1.CurrentX = 7125
Picture1.CurrentY = 270
Picture1.Print "Pe";
Picture1.Print "(kW)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "N(rpm )"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "发动机功率-扭矩曲线图"
'==================================================================================
'VB中画图原点在左上角,原点要移到左下角,Y坐标要根据总高度来取负值。
'画两框留510*2缇,上下也各510缇
''转速数组REV() 扭矩数组Torque() 功率Power() 每组对应
'==================================================================================
Nmax = REV(List1.ListCount - 1) '额定转速减500转,每100转为单位刻度
kdx = 6915 / REV(List1.ListCount - 1) '单位转速对应缇值
kdy = (4755 - 900) / Tormax '单位扭矩对应缇值,预留600缇为上当空隙 4155
X0 = 300 + 510: Y0 = 5265 - Torque(0) * kdy '设定rev(0)转为最低转速,X坐标从300+510转开始
Picture1.ForeColor = RGB(255, 0, 0) '设置红色
Picture1.CurrentX = X0 - 120
Picture1.CurrentY = Y0 - 180
Picture1.Print "T"
Picture1.ForeColor = RGB(0, 0, 0) '设置黑色
'=========画“T”字=============================
For i = 1 To List1.ListCount - 1
X1 = 300 + 510 + (REV(i) - REV(0)) * kdx
Y1 = 5265 - Torque(i) * kdy
Picture1.Line (X0, Y0)-(X1, Y1), RGB(255, 0, 0)
X0 = X1: Y0 = Y1
Next
'Tormax 最大扭矩,ntormax最大扭矩时转速====以上画扭矩曲线====================================
X1 = (ntormax - REV(0)) * kdx '转速对应缇值
Y1 = Tormax * kdy '扭矩对应缇值
Picture1.DrawStyle = 2 '画点线
Picture1.Line (810 + X1, 4755 + 510)-Step(0, -Y1), RGB(255, 0, 0) '画Y竖虚线,STEP表示相对坐标
Picture1.Line (510, 5265 - Y1)-Step(X1, 0), RGB(255, 0, 0) '画X横虚线
Picture1.CurrentX = 810 + X1 - 500
Picture1.CurrentY = 5265 - Y1 - 200
Picture1.Print "(" & ntormax & "," & Int(Tormax + 0.5) & ")" '写坐标值
Picture1.DrawStyle = 0
'以上画扭矩曲线最大值====起至坐标 ==================================================
Nkd = Int((REV(List1.ListCount - 1)) / 10 / 50) * 50 '最大转速,转速分度,50的倍数
For i = 0 To 30
Picture1.CurrentY = 5265 + 30
Picture1.CurrentX = 610 + kdx * i * Nkd '设置写转速值字的起点
If 810 + Nkd * i * kdx > 7425 Then Exit For
Picture1.Print REV(0) + Nkd * i '写转速值
Picture1.Line (810 + Nkd * i * kdx, 5265)-Step(0, -100) '画刻度
Next
'以上循环画X坐标刻度及写转速值====800转为起始点,右平移300缇=============================================
Tfen = Int((Tormax / 10) / 50) * 50
For i = 1 To 30
Picture1.CurrentX = 45
Picture1.CurrentY = 5175 - kdy * i * Tfen
If 5265 - kdy * Tfen * i < 510 Then Exit For
Picture1.Print Tfen * i
Picture1.Line (510, 5265 - kdy * Tfen * i)-Step(100, 0), RGB(255, 0, 0)
Next
'以上画左侧Y坐标刻度,扭矩刻度==========================================================
kdy = (4755 - 300) / Pemax 'pemax 最功率,单位功率对应缇值 区间以 4755-300 来计算
X0 = 300 + 510: Y0 = 5265 - Power(0) * kdy '计算起点坐标
For i = 0 To List1.ListCount - 1
X1 = 810 + (REV(i) - REV(0)) * kdx
Y1 = 5265 - Power(i) * kdy
Picture1.Line (X0, Y0)-(X1, Y1)
X0 = X1: Y0 = Y1
Next
Picture1.CurrentX = X0 + 45
Picture1.CurrentY = Y0 - 180
Picture1.Print "Pe"
'==========以上画功率曲线图==============================================
X1 = (npemax - REV(0)) * kdx '转速对应缇值
Y1 = Pemax * kdy '扭矩对应缇值
Picture1.DrawStyle = 2
Picture1.Line (810 + X1, 5265)-Step(0, -Y1) '画Y虚线
Picture1.Line (810 + X1, 5265 - Y1)-Step(6915 - 300 - X1, 0) '画X横虚线
Picture1.CurrentX = 510 + X1
Picture1.CurrentY = 5265 - Y1 - 200
Picture1.Print "(" & npemax & "," & Pemax & ")" '写坐标值
Picture1.DrawStyle = 0
'================以上画功率最大值坐标对应线===============================================
Yfen = Int(Pemax / 10 / 20) * 20
If Yfen = 0 Then Yfen = 20
For i = 1 To 20
Picture1.CurrentX = 7390
Picture1.CurrentY = 5175 - kdy * i * Yfen
If 5265 - kdy * Yfen * i < 510 Then Exit For
Picture1.Print Yfen * i
Picture1.Line (7325, 5265 - kdy * Yfen * i)-Step(100, 0)
Next
' 以上画功率刻度线=================================================================
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "发动机特性曲线.bmp"
' If kai = 0 Then Picture1.Cls
End Sub
Private Sub Option2_Click() '汽车速度-转速曲线
'2013.12.16 修正转速与车速度图表显示问题,原来当转速相隔不是100时可能会不正常显示,现采用输入点直接计算缇值方法,精确计算。
'2015.12.02 修正最高车速计算,当驱动力一直大于阻力时,最高车速不正确问题,转速刻度与车速对应出错问题
Dim IGmax As Double, n1 As Double, Vt As Double, Nstr As String, S_v As String, S_i As String, Lens As Integer
Dim Cout
Dim Xmax As Double, Ymax As Double '最高车速时 X Y 缇值
Dim VmaxL As Boolean '设置画最高车速开关
VmaxL = False
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
IGmax = Text6.Text - 1 '以0为起始
Cout = List1.ListCount - 1
'---------以下计算1档时最低车速=============================================================================
For i = REV(0) To REV(Cout)
n1 = i
If Fe(n1, Text7(0).Text) > Fz(Un(n1, Text7(0).Text)) Then
V10 = Un(n1, Text7(0).Text)
'Debug.Print "最好小车速:" & V10
Exit For
End If
Next
'---------以下计算1档时最小倒车稳定车速======================================================================
For i = REV(0) To REV(Cout)
n1 = i
If Fe(n1, Text3.Text) > Fz(Un(n1, Text3.Text)) Then
Vminrear = Un(n1, Text3.Text)
'Debug.Print "最小倒车车速:" & Vminrear
Exit For
End If
Next
'---------以下求最高车速=============最高档位置时的最大速===从扭矩最大时的转速开始计算=======================
For i = ntormax To REV(Cout)
n1 = i
Vmax = Un(n1, Text7(IGmax).Text) '如果转速到达 最高设定还没有出现驱动力小于行驶阻力的情况,则最高设定转速时就是最大车速
Nvmax = n1
If Fe(n1, Text7(IGmax).Text) < Fz(Un(n1, Text7(IGmax).Text)) Then '当驱动力小于行驶阻力时得到最高车速
Vmax = Un(n1 - 1, Text7(IGmax).Text)
Nvmax = n1 - 1
Exit For
End If
Next
'=============================================================================================================
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B '画方框,起点510,510 左上角为0点,长6915,高4755
Picture1.CurrentX = 180
Picture1.CurrentY = 200
Picture1.Print "V(km/h)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "N(rpm )"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "汽车各档速度-转速曲线图"
' Nmax = Int((Text3.Text - 500) / 100) '以比怠速小两个刻度为最大值 转速刻度最大格数,每100转取一个画点
Umax = Un(REV(Cout), Text7(IGmax).Text) '最高车速,以最高档,最高转速运行时产生最高车速(虚)
kdx = 6915 / REV(Cout) '单位转速对应缇值,text3.text 额定功率转速
'Debug.Print " 转速值=" & REV(Cout) & " kdx=" & kdx
kdy = (4755 - 600) / Umax '单位速度对应多少缇值
'Debug.Print "cout=" & Cout & " igmax=" & IGmax & " umax=" & Umax & " kdx=" & kdx & " rev(cout)=" & REV(Cout)
Nkd = Int((REV(Cout)) / 10 / 50) * 50 'text3 额定功率时转速,转速分度,50的倍数
If Nkd = 0 Then Nkd = 50
'为了显示需要,将转速左移一单元刻度
'''----------以下为转速每一转为基数求得各参数的方法,-----------------------------------------
For i = 0 To IGmax
X0 = 510 + (REV(0) - Nkd) * kdx: Y0 = 5265 - Un(REV(0), Text7(i).Text) * kdy
For j = REV(0) To REV(Cout) Step 10
X1 = 510 + kdx * (j - Nkd)
Y1 = 5265 - kdy * Un(j, Text7(i).Text)
If Un(j, Text7(i).Text) < Vmax Then
Picture1.Line (X0, Y0)-(X1, Y1)
Else
'''''''''''''''''''''''''画最高车速度对应值'''''''''''''''''''''''''''''''''''''''''''
If VmaxL = False Then
Xmax = 510 + (Nvmax - Nkd) * kdx
Ymax = 5265 - Vmax * kdy
Picture1.DrawStyle = 2
Picture1.CurrentX = 810
Picture1.CurrentY = Ymax - 210
Picture1.Print "最高车速:"; Int(Vmax) & " km/h" & " 对应转速:" & Nvmax & " rpm"
Picture1.Line (Xmax, Ymax)-Step(-Xmax + 510, 0), RGB(255, 100, 0)
Picture1.DrawStyle = 0
VmaxL = True
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Picture1.Line (X0, Y0)-(X1, Y1), RGB(255, 0, 0)
End If
If j = REV(Cout) Then
If (i Mod 2 = 0) Then Picture1.CurrentX = X1 + 100
If (i Mod 2 = 1) Then Picture1.CurrentX = X1 - 100
Picture1.CurrentY = Y1 - 120
Picture1.Print "i" & i + 1
End If
X0 = X1: Y0 = Y1
Next
Next
'==============================================================================================
Nkd = Int((REV(Cout)) / 10 / 50) * 50 'text3 额定功率时转速,转速分度,50的倍数
If Nkd = 0 Then Nkd = 50
For i = 1 To 30
Picture1.CurrentY = 5265 + 30
Picture1.CurrentX = 210 + kdx * i * Nkd '设置写转速值字的起点
If Nkd * i * kdx > 6915 Then Exit For
' Picture1.Print REV(0) + nkd * i '写转速值
Picture1.Print Nkd * (i + 1) '写转速值
Picture1.Line (510 + Nkd * i * kdx, 5265)-Step(0, -100) '画刻度
Next
'以上循环画X坐标刻度及写值============================================================
Tfen = Int((Un(REV(Cout), Text7(IGmax).Text) * 1.2 / 6) / 5) * 5
For i = 1 To 10
Picture1.CurrentX = 60
Picture1.CurrentY = 5165 - kdy * i * Tfen
If 5265 - kdy * Tfen * i < 510 Then Exit For
Picture1.Print Tfen * i
Picture1.Line (510, 5265 - kdy * Tfen * i)-(610, 5265 - kdy * Tfen * i), RGB(255, 0, 0)
Next
' MsgBox i
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "汽车速度曲线.bmp"
' If kai = 0 Then Picture1.Cls
'''''''''''''''以下输出显示各档位,转速与速度关系参数,显示在form2.text1.text中'''''''''''''''''''''''''''''''''
Nstr = "": S_i = ""
Form2.Text1.Text = "" 'form2的文本框text1,设置表头
Form2.Text1.Text = " 各档位的转速(r/min)以及车速(km/h)关系如下: " & vbCrLf
For j = 0 To Cout
S_v = Space(2)
For i = 0 To IGmax
If j = 0 Then S_i = S_i & N2Str(i + 1, 2) & "档" & Space(6) '档位行
Vt = Un(REV(j), Text7(i).Text)
S_v = S_v & N2Str(Vt, 10)
Next
S_v = Space(2) & N2Str(REV(j), 6) & " | " & S_v '合拼行
If j = 0 Then
Form2.Text1.Text = Form2.Text1.Text & " 转速\档位 " & S_i & vbCrLf
Lens = Int((Len(S_i) + 24) / 2)
Form2.Text1.Text = Form2.Text1.Text & String(Lens, "─") & vbCrLf
End If
Form2.Text1.Text = Form2.Text1.Text & S_v & "(km/h)" & vbCrLf
Next
' Form2.Show
' Form2.Text1.Width = 12000: Form2.Text1.Height = 7500: Form2.Text2.Visible = False
End Sub
Private Sub Option3_Click() '汽车驱动力曲线
Dim Xfen, Yfen As Integer
Dim IGmax As Double
Dim Vfmax As Double
Dim Cout
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
IGmax = Text6.Text - 1 '以0为起始
Cout = List1.ListCount - 1
'==============================以上初始化数据====================================
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B
Picture1.CurrentX = 180
Picture1.CurrentY = 200
Picture1.Print "Fe(kN)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "V(km/h)"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "汽车驱动力曲线"
'==============================以上画图框====================================
' Nmax = Int((Text3.Text - 500) / 100) '转速最大分度,每100转为一分度
Umax = Un(REV(Cout), Text7(IGmax).Text)
femax = Fe(ntormax, Text7(0).Text) '最大扭矩时驱动力最大
kdx = (6915 - 900) / Umax
kdy = (4755 - 600) / femax '缇与坐标之比,每刻度对应多少缇
k = 0
For i = 0 To IGmax
X0 = Un(REV(0), Text7(i).Text) * kdx + 510: Y0 = Fe(REV(0), Text7(i).Text) * kdy
For j = 1 To Cout
X1 = Un(REV(j), Text7(i).Text) * kdx + 510
Y1 = Fe(REV(j), Text7(i).Text) * kdy
''''''''''''''求最大驱动力'''''''''''''''''''''''''''Tormax = Torque(j)''''''''''''''''''
If i = 0 And Tormax = Torque(j) And k = 0 Then
k = 1: Fmxqu = Int(Fe(REV(j), Text7(i).Text) * 100) / 100
Vfmax = Int(Un(REV(j), Text7(i).Text) * 100) / 100 '驱动力最大时对应速度
Picture1.DrawStyle = 2 '画点线
Picture1.Line (X1, 5265)-(X1, 5265 - Y1) '画Y竖虚线,STEP表示相对坐标
Picture1.Line (510, 5265 - Y1)-(X1 + 1210, 5265 - Y1) '画X横虚线
Picture1.CurrentX = X1 + 210 '设置文字的X
Picture1.CurrentY = 5265 - Y1 - 210 '设置文字的Y
Picture1.Print "最大输出驱动力:"; Fmxqu & " kN,对应速度:" & Vfmax & "km/h"
Picture1.DrawStyle = 0 '画实线
End If
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(255, 0, 0)
'红色线画曲线=========================================================
If j = 1 Then
Picture1.CurrentX = X1 - 200
Picture1.CurrentY = 5175 - Y1
Picture1.Print "I" & i + 1
End If
'写每档位=============================================================
X0 = X1: Y0 = Y1
Next
Next
''=================以上画驱动力曲线=========================================
Xfen = Int((Umax / 8) / 5) * 5
Yfen = Int((femax / 6) / 5) * 5
If Xfen = 0 Then Xfen = 5
If Yfen = 0 Then Yfen = 5
For i = 0 To 20
If 510 + Xfen * i * kdx > 7425 Then Exit For
Picture1.CurrentY = 5295
Picture1.CurrentX = 300 + kdx * i * Xfen
Picture1.Print Xfen * i
Picture1.Line (510 + kdx * i * Xfen, 5265)-(510 + kdx * i * Xfen, 5165)
Next
''====================以上画速度V刻度线====================================
For i = 1 To 20
Picture1.CurrentX = 100
Picture1.CurrentY = 5190 - kdy * Yfen * i
If 5265 - kdy * Yfen * i < 510 Then Exit For
Picture1.Print Yfen * i
Picture1.Line (510, 5265 - kdy * Yfen * i)-Step(100, 0), RGB(255, 0, 0)
Next
''====================以上画驱动力Fe刻度线====================================
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "汽车驱动力曲线.bmp"
' If kai = 0 Then Picture1.Cls
'''''''''''''''以下输出显示各档位,转速与驱动力关系参数,显示在form2.text1.text中'''''''''''''''''''''''''''''''''
Dim Nstr As String, S_i As String, S_F As String
Dim Fnt As Double
Nstr = "": S_i = ""
Form2.Text1.Text = "" 'form2的文本框text1,设置表头
Form2.Text1.Text = " 各档位的转速(r/min)以及驱动力(kN)关系如下: " & vbCrLf
For j = 0 To Cout
S_F = Space(2)
For i = 0 To IGmax
If j = 0 Then S_i = S_i & N2Str(i + 1, 2) & "档" & Space(6) '档位行
Fnt = Fe(REV(j), Text7(i).Text)
S_F = S_F & N2Str(Fnt, 10) '驱动力字符串
Next
S_F = Space(2) & N2Str(REV(j), 6) & " | " & S_F '合拼转速以及驱动力字符串
If j = 0 Then
Form2.Text1.Text = Form2.Text1.Text & " 转速\档位 " & S_i & vbCrLf '第一行
Lens = Int((Len(S_i) + 24) / 2)
Form2.Text1.Text = Form2.Text1.Text & String(Lens, "─") & vbCrLf '横线行
End If
Form2.Text1.Text = Form2.Text1.Text & S_F & "(kN)" & vbCrLf '驱动力行
Next
End Sub
Private Sub Option4_Click() '驱动力,行驶阻力曲线
Dim kdx As Double, kdy As Double
Dim Ffa As Double ''滑动阻力
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call Option3_Click
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "汽车驱动力曲线-行驶阻力曲线"
'Umax Femax 在之前引用Option3时已经计算过,=========================
' Umax = Un(REV(Cout), Text7(IGmax).Text)
femax = Fe(ntormax, Text7(0).Text) '最大扭矩时驱动力最大
kdx = (6915 - 600) / Umax
kdy = (4755 - 600) / femax '缇与坐标之比,每刻度对应多少缇
dx = Umax / 50
X0 = 510: Y0 = Fz(0) * kdy
' Debug.Print Fz(0)
For j = 1 To 51
X1 = j * dx * kdx + 510
Y1 = Fz(j * dx) * kdy
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(0, 0, 255)
If j = 51 Then
Picture1.CurrentX = X1 - 200
Picture1.CurrentY = 5065 - Y1
Picture1.Print "Ff+Fw"
End If
X0 = X1: Y0 = Y1
Next
'''''''''''滑动阻力=后桥轴荷*9.8*0.7----滑动阻力系数按0.7计算----------------------------
Ffa = Text4.Text * 9.8 * 0.7 / 1000
If Text4.Text > 0 And Ffa < femax Then
Debug.Print "最大滑动阻力=" & Ffa
X1 = 7000
Y1 = 5265 - Ffa * kdy
Picture1.DrawStyle = 2 '画点线
Picture1.Line (510, Y1)-(X1, Y1), RGB(0, 200, 255) '画X横虚线
Picture1.CurrentX = 2100 '设置文字的X
Picture1.CurrentY = Y1 '设置文字的Y
Picture1.Print "驱动桥最大打滑阻力:"; Ffa & " kN"
Picture1.DrawStyle = 0 '画实线
End If
''''以下显示参数用==========================================
Dim Fzv As Double, Vtz As Double, Lens As Integer
dx = Int(Umax / 15) '显示15行
' Form2.Text1.Text = "" 'form2的文本框text1,设置表头
' Debug.Print "umax="; Umax
Form2.Text1.Text = " 汽车速度(km/h) 行驶阻力(kN) " & vbCrLf
' Lens = Int((Len(Form2.Text1.Text) + 10) / 2)
Form2.Text1.Text = Form2.Text1.Text & String(16, "─") & vbCrLf
For j = 0 To 17
Vtz = dx * j
Fzv = Fz(Vtz)
Form2.Text1.Text = Form2.Text1.Text & Space(7) & N2Str(Vtz, 6) & "│ " & N2Str(Fzv, 10) & vbCrLf '合拼车速与行驶阻力行
Next
' Form2.Show
' Form2.Text1.Width = 12000: Form2.Text1.Height = 7500: Form2.Text2.Visible = False
''''''''''''''''''''''''''''显示部分完成'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "汽车驱动力-行驶阻力曲线.bmp"
' If kai = 0 Then Picture1.Cls
End Sub
Private Sub Option5_Click() '加速性能曲线
Dim k As Integer
Dim delta As Double
Dim IGmax As Double
Dim Cout, mall, amax, X0, Y0
k = 0
IGmax = Text6.Text - 1
Cout = List1.ListCount - 1
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B
Picture1.CurrentX = 100
Picture1.CurrentY = 200
Picture1.Print "a(m/s^2)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "V(km/h)"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "汽车行驶加速度曲线"
'===以转速为基本变量,求得对应速度,驱动力,根据速度可以求得行驶阻力
' Nmax = Int((Text3.Text - 500) / 100) '转速最大分度,每100转为一分度
'REV() 转速存放数据
Umax = Un(REV(Cout), Text7(IGmax).Text)
femax = Fe(ntormax, Text7(0).Text) '最大扭矩时驱动力最大
kdx = (6915 - 600) / Umax
mall = Text22.Text '总质量
amax = femax / mall * 1000 '最大加速度
kdy = (4755 - 300) / amax '缇与坐标之比,每刻度对应多少缇
For i = 0 To IGmax
If i = 0 Then
delta = 1.4
ElseIf i = 1 Then
delta = 1.3
ElseIf i = 2 Then
delta = 1.2
Else
delta = 1.1
End If
X0 = Un(REV(0), Text7(i).Text) * kdx + 510
Y0 = kdy * 1000 * (Fe(REV(0), Text7(i).Text) - Fz(Un(REV(0), Text7(i).Text))) / mall / delta
'Debug.Print "y0=" & Y0
If Y0 < 0 Then Y0 = 0
For j = 1 To Cout
X1 = Un(REV(j), Text7(i).Text) * kdx + 510
Y1 = kdy * 1000 * (Fe(REV(j), Text7(i).Text) - Fz(Un(REV(j), Text7(i).Text))) / mall / delta
If i = 0 And Y1 < Y0 And k = 0 Then
k = 1: Amxjia = Y0 / kdy
''''''''''''画最大加速度横线''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Picture1.DrawStyle = 2
Picture1.CurrentX = 810
Picture1.CurrentY = 5265 - Y0 - 210
Picture1.Print "Max:" & Int(Amxjia * 100) / 100 & " m/s^2"
Picture1.Line (X1, 5265 - Y0)-Step(-X1 + 510, 0), RGB(255, 100, 0)
Picture1.DrawStyle = 0
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End If
If Y1 < 0 Then Exit For
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(255, 0, 0)
If j = 1 Then
Picture1.CurrentX = X1 - 150 - i * 15
Picture1.CurrentY = 5235 - Y1 - i * 15
Picture1.Print "I" & i + 1
End If
X0 = X1: Y0 = Y1
Next
Next
'========以上画各档位的加速度曲线图===========================
Xfen = Int((Umax / 8) / 5) * 5
Yfen = Int((amax * 1.2 / 7) / 0.2) * 0.2
If Xfen = 0 Then Xfen = 5
If Yfen = 0 Then Yfen = 0.5
'MsgBox "Yfen=" & yfen & "| Femax=" & Femax & "| amax=" & amax
For i = 0 To 16
If 510 + Xfen * i * kdx > 7425 Then Exit For
Picture1.CurrentY = 5295
Picture1.CurrentX = 300 + kdx * i * Xfen
Picture1.Print Xfen * i
Picture1.Line (510 + kdx * i * Xfen, 5265)-(510 + kdx * i * Xfen, 5190)
Next
''====================以上画速度V刻度线====================================
For i = 1 To 10
Picture1.CurrentX = 100
Picture1.CurrentY = 5190 - kdy * Yfen * i
If 5265 - kdy * Yfen * i < 510 Then Exit For
Picture1.Print Yfen * i
'MsgBox yfen * i
Picture1.Line (510, 5265 - kdy * Yfen * i)-(610, 5265 - kdy * Yfen * i), RGB(255, 0, 0)
Next
''====================以上画加速度 a 刻度线====================================
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "汽车行驶加速度曲线.bmp"
' If kai = 0 Then Picture1.Cls
End Sub
Private Sub Option6_Click() '汽车爬坡性能曲线
Dim imax As Double, Da As Double, Va As Double, fa As Double
Dim k As Integer
Dim Papo As Double '爬坡度变量
Dim X0, Y0, X1, Y1
Dim IGmax As Double
Dim Cout
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
IGmax = Text6.Text - 1 '以0为起始
Cout = List1.ListCount - 1
k = 0
'==============================以上初始化数据====================================
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B
Picture1.CurrentX = 100
Picture1.CurrentY = 200
Picture1.Print "i(%)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "V(km/h)"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "汽车各档爬坡度曲线"
'===以转速为基本变量,求得对应速度,驱动力,根据速度可以求得行驶阻力
' Nmax = Int((Text3.Text - 500) / 100) '转速最大分度,每100转为一分度
Umax = Un(REV(Cout), Text7(IGmax).Text)
femax = Fe(ntormax, Text7(0).Text) '最大扭矩时驱动力最大
kdx = (6915 - 600) / Umax
mall = Text22.Text '总质量
amax = femax / mall * 1000 '最大加速度
imax = 100 * Tan(Arcsin(femax / mall * 1000 / 9.8)) '最大驱动力能发出的最大爬坡度
If imax > 80 Then imax = 85
kdy = (4755 - 300) / imax '每单位刻度加速度对应缇值
For i = 0 To IGmax
Va = Un(REV(0), Text7(i).Text)
X0 = Va * kdx + 510
Da = (1000 * (Fe(REV(0), Text7(i).Text) - Fw(Va)) / mall) / 9.8 '动力因数
fa = 0.0076 + 0.000056 * Va '滚动阻力系数
Papo = 100 * Tan(Arcsin((Da - fa * Sqr(1 - Da * Da + fa)) / (1 + fa * fa)))
If Papo > 80 Then Papo = 80
Y0 = Papo * kdy
If Y0 < 0 Then Y0 = 0
For j = 1 To Cout
Va = Un(REV(j), Text7(i).Text)
X1 = Va * kdx + 510
Da = 1000 * (Fe(REV(j), Text7(i).Text) - Fw(Va)) / mall / 9.8
fa = 0.0076 + 0.000056 * Va
Papo = 100 * Tan(Arcsin((Da - fa * Sqr(1 - Da * Da + fa)) / (1 + fa * fa)))
If Papo > 80 Then Papo = 80
Y1 = Papo * kdy
If i = 0 And Y1 < Y0 And k = 0 Then
k = 1: POmx = Y0 / kdy
''''''''''''画最大爬坡横线''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Picture1.DrawStyle = 2
Picture1.CurrentX = 810
Picture1.CurrentY = 5265 - Y0 - 210
Picture1.Print "Max:" & Int(POmx * 10) / 10 & " %"
Picture1.Line (X1, 5265 - Y0)-Step(-X1 + 510, 0), RGB(255, 100, 0)
Picture1.DrawStyle = 0
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End If
If Y1 < 0 Then Exit For
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(255, 0, 0)
If j = 1 Then
Picture1.CurrentX = X1 - 150 - i * 15
Picture1.CurrentY = 5235 - Y1 - i * 15
Picture1.Print "I" & i + 1
End If
X0 = X1: Y0 = Y1
Next
Next
'========以上画各档位爬坡度曲线图===========================
'''''''''''''''以下输出显示各档位,转速与驱动力关系参数,显示在form2.text1.text中'''''''''''''''''''''''''''''''''
Dim Nstr As String, S_i As String, S_P As String
Dim Pnt As Double
Nstr = "": S_i = ""
Form2.Text1.Text = "" 'form2的文本框text1,设置表头
Form2.Text1.Text = " 各档位的转速(r/min)以及爬坡能力(%)关系如下: " & vbCrLf
For j = 0 To Cout
S_P = Space(2)
For i = 0 To IGmax
If j = 0 Then S_i = S_i & N2Str(i + 1, 2) & "档" & Space(6) '档位行
Va = Un(REV(j), Text7(i).Text)
Da = 1000 * (Fe(REV(j), Text7(i).Text) - Fw(Va)) / mall / 9.8
fa = 0.0076 + 0.000056 * Va
Pnt = 100 * Tan(Arcsin((Da - fa * Sqr(1 - Da * Da + fa)) / (1 + fa * fa)))
S_P = S_P & N2Str(Pnt, 10) '爬坡字符串
Next
S_P = Space(2) & N2Str(REV(j), 6) & " | " & S_P '合拼转速以及爬坡字符串
If j = 0 Then
Form2.Text1.Text = Form2.Text1.Text & " 转速\档位 " & S_i & vbCrLf '第一行
Lens = Int((Len(S_i) + 24) / 2)
Form2.Text1.Text = Form2.Text1.Text & String(Lens, "─") & vbCrLf '横线行
End If
Form2.Text1.Text = Form2.Text1.Text & S_P & "(%)" & vbCrLf '爬坡度行
Next
' Form2.Show
' Form2.Text1.Width = 12000: Form2.Text1.Height = 7500: Form2.Text2.Visible = False
'''----------------------------------------------------------------------------------------------------------------------
Xfen = Int((Umax / 8) / 5) * 5
If Xfen = 0 Then Xfen = 5
Yfen = Int((imax * 1.2 / 7) / 5) * 5
If Yfen = 0 Then Yfen = 5
'MsgBox "Yfen=" & Yfen & "| Femax=" & Femax
For i = 0 To 16
If 510 + Xfen * i * kdx > 7425 Then Exit For
Picture1.CurrentY = 5295
Picture1.CurrentX = 300 + kdx * i * Xfen
Picture1.Print Xfen * i
Picture1.Line (510 + kdx * i * Xfen, 5265)-Step(0, -100)
Next
''====================以上画速度V刻度线====================================
For i = 1 To 10
Picture1.CurrentX = 100
Picture1.CurrentY = 5190 - kdy * Yfen * i
If 5265 - kdy * Yfen * i < 510 Then Exit For
Picture1.Print Yfen * i
Picture1.Line (510, 5265 - kdy * Yfen * i)-(610, 5265 - kdy * Yfen * i), RGB(255, 0, 0)
Next
''====================以上画爬坡度刻度线====================================
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "汽车爬坡度曲线.bmp"
' If kai = 0 Then Picture1.Cls
End Sub
Private Sub Option7_Click() '汽车功率平衡图
Dim Yita As Double
Dim n1 As Double
Dim X0, Y0, X1, Y1
Dim IGmax As Double
Dim Cout, i, j
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
IGmax = Text6.Text - 1 '以0为起始
Cout = List1.ListCount - 1
'以下求最高车速======================================================================
For i = ntormax To REV(Cout)
n1 = i
If Fe(n1, Text7(IGmax).Text) < Fz(Un(n1, Text7(IGmax).Text)) Then
Vmax = Un(n1 - 1, Text7(IGmax).Text)
Nvmax = n1 - 1
' MsgBox "速度max=" & Vmax & " | 转速=" & Nvmax
Exit For
End If
Next
If Nvmax < 1 Then
Vmax = Un(npemax, Text7(IGmax).Text)
Nvmax = npemax
End If '=====================================================================================
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B
Picture1.CurrentX = 100
Picture1.CurrentY = 200
Picture1.Print "P(kW)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "V(km/h)"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "汽车功率平衡图(除辅件消耗)"
'===以转速为基本变量,求得对应速度,驱动力,根据速度可以求得行驶阻力
' Nmax = Int((Text3.Text - 200) / 100) '转速最大分度,每100转为一分度
Umax = Un(REV(Cout), Text7(IGmax).Text) '以最高当比额定功率转速时+200转定为最高车速度
kdx = (6915 - 600) / Umax 'X坐标,每对应单位速度对应的缇值
kdy = (4755 - 600) / Pemax '每单位功率对应缇值
'MsgBox Fe(800, Text7(i).Text) * Un(800, Text7(i).Text) * kdy / 3.6
For i = 0 To IGmax
If Text7(i).Text = 1 Then
Yita = Text9.Text '其他档传动效率
Else
Yita = Text8.Text '直接档传动效率
End If
X0 = Un(REV(0), Text7(i).Text) * kdx + 510
Y0 = Fe(REV(0), Text7(i).Text) * Un(REV(0), Text7(i).Text) * kdy / Yita / 3.6
For j = 1 To Cout
X1 = Un(REV(j), Text7(i).Text) * kdx + 510
Y1 = Fe(REV(j), Text7(i).Text) * Un(REV(j), Text7(i).Text) * kdy / Yita / 3.6
'MsgBox Y1
If Y1 < 0 Then Exit For
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(255, 0, 0)
If j = Cout Then
Picture1.CurrentX = X1 - 90
Picture1.CurrentY = 5235 - Y1
Picture1.Print "I" & i + 1
End If
X0 = X1: Y0 = Y1
Next
Next
'========以上画各档位的功率曲线图===========================
dx = Umax / 50
X0 = 0 * kdx + 510
Y0 = 0 * Fz(0) * kdy / 3.6 / Text8.Text
'MsgBox Fz(0)
For j = 1 To 54
X1 = j * dx * kdx + 510
Y1 = j * dx * Fz(j * dx) / 3.6 / Yita * kdy
Picture1.Line (X0, 5265 - Y0)-(X1, 5265 - Y1), RGB(0, 0, 255)
If (Y1 / kdy) > Pemax Or X1 > 7325 Then Exit For
X0 = X1: Y0 = Y1
Next
'MsgBox Y1 / kdy & " |pmax=" & Text2.Text
Picture1.CurrentX = X1 - 600
Picture1.CurrentY = 5000 - Y1
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.Print "(Pf+Pw)/η"
Picture1.ForeColor = RGB(0, 0, 0)
'========以上画行驶阻力功率(Pf+Pw)/η曲线=================================
''''以下显示参数用把计算内容放到=Form2.Text1.Text======================================================================
Dim Fzv As Double, Vtz As Double, Lens As Integer
dx = Int(Umax / 15) '显示15行
Form2.Text1.Text = " 汽车速度(km/h) 行驶阻功率(kW/h) " & vbCrLf
Form2.Text1.Text = Form2.Text1.Text & String(18, "─") & vbCrLf
For j = 0 To 17
Vtz = dx * j
Fzv = Fz(Vtz) * Vtz / Yita / 3.6
Form2.Text1.Text = Form2.Text1.Text & Space(7) & N2Str(Vtz, 6) & "│ " & N2Str(Fzv, 10) & vbCrLf '合拼车速与行驶阻功率
Next
''''========================================================================================================================
Xfen = Int((Un(REV(Cout), Text7(IGmax).Text) * 1.2 / 9) / 5) * 5
Yfen = Int((Pemax * 1.2 / 8) / 5) * 5
'MsgBox "Yfen=" & Yfen & "| Femax=" & Femax
For i = 0 To 16
If 510 + Xfen * i * kdx > 7425 Then Exit For
Picture1.CurrentY = 5295
Picture1.CurrentX = 330 + kdx * i * Xfen
Picture1.Print Xfen * i
Picture1.Line (510 + kdx * i * Xfen, 5265)-Step(0, -100)
Next
''====================以上画速度V刻度线====================================
For i = 1 To 15
Picture1.CurrentX = 100
Picture1.CurrentY = 5190 - kdy * Yfen * i
If 5265 - kdy * Yfen * i < 201 Then Exit For
Picture1.Print Yfen * i
Picture1.Line (510, 5265 - kdy * Yfen * i)-Step(100, 0), RGB(255, 0, 0)
Next
''====================以上画功率刻度线====================================
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "汽车功率平衡曲线图.bmp"
' If kai = 0 Then Picture1.Cls
End Sub
Private Sub Option8_Click() '变速箱输出扭矩计算
Dim Tboxmax As Double, Yita As Double 'Tboxmax用于存变速箱输出最大扭矩,Yita为传动效率
Dim n1 As Double, T1 As Double '临时转速n1,扭矩临时T1
Dim Nkd, Tfen '设定刻度值
Dim X0, Y0, X1, Y1
Dim IGmax As Double '前进档的档位数,
Dim Cout, i, j
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
IGmax = Text6.Text - 1 '以0为起始
Cout = List1.ListCount - 1 '发动机原始数据的项目数,数组的上标值
'''''发动机 REV()'对应转速,全局变量' Torque() '对应扭矩,全局变量' Power() '对应功率,全局变量
'------------------------------初始化画图框------------------------------------------------------------------
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B '画方框,起点510,510 左上角为0点,长6915,高4755
Picture1.CurrentX = 180
Picture1.CurrentY = 200
Picture1.Print "T(N.m)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "N(rpm )"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "汽车各档转速-变速箱输出扭矩曲线图"
'------------------------------------------------------------------------------------------------------------------
Yita = (Text8.Text + 1) / 2
Tboxmax = Tormax * Text7(0).Text * Yita '最大输出扭矩,,变速箱输出扭矩 = 发动机扭矩 * 变速箱速比 * 传动效率
kdx = 6915 / REV(Cout) '单位转速对应缇值,REV(cout)为发动机最大设定转速
kdy = (4755 - 600) / Tboxmax '单位扭矩 T 对应多少缇值
Nkd = Int((REV(Cout)) / 10 / 50) * 50 ' 最高设定转速,转速分度,50的倍数
If Nkd = 0 Then Nkd = 50
For i = 0 To 30
Picture1.CurrentY = 5265 + 30
Picture1.CurrentX = 210 + kdx * i * Nkd '设置写转速值字的起点
If Nkd * i * kdx > 6915 Then Exit For
Picture1.Print Nkd * (i) '写转速值
Picture1.Line (510 + Nkd * i * kdx, 5265)-Step(0, -100) '画刻度
Next
'----以上循环画X坐标刻度及写值=========================================================
n1 = Int(Tboxmax / 120) * 10
Tfen = Int(n1 / 100) * 100
' Debug.Print "kdy=" & kdy & " Tfen=" & Tfen
For i = 1 To 20
Picture1.CurrentX = 0
Picture1.CurrentY = 5165 - kdy * i * Tfen
If 5265 - kdy * Tfen * i < 510 Then Exit For
Picture1.Print Tfen * i
Picture1.Line (510, 5265 - kdy * Tfen * i)-(610, 5265 - kdy * Tfen * i), RGB(255, 0, 0)
Next
'----以上画Y坐标刻度及写值=================================================================
''以下采用扭矩方法与功率方法求得变速箱输出扭矩,1档情况
'''''发动机 REV()'对应转速,全局变量' Torque() '对应扭矩,全局变量' Power() '对应功率,全局变量
'''----------以下为转速每一转为基数求得各参数的方法,-----------------------------------------
For i = 0 To IGmax
If Text7(i).Text = 1 Then
Yita = (Text9.Text + 1) / 2 '其他档传动效率,变速箱输出端取一半的传动率损失
Else
Yita = (Text8.Text + 1) / 2 '直接档传动效率,变速箱输出端取一半的传动率损失
End If
X0 = 510 + (REV(0)) * kdx
Y0 = 5265 - Torque(0) * Text7(i).Text * Yita * kdy '计算绘画第一点的值
For j = 0 To Cout - 1
X1 = 510 + kdx * REV(j)
T1 = Torque(j) * Text7(i).Text * Yita '变速箱输出扭矩
Y1 = 5265 - T1 * kdy
Picture1.Line (X0, Y0)-(X1, Y1) '画扭矩曲线
If Torque(j) = Tormax And (i < 2 Or i = IGmax) Then
Picture1.DrawStyle = 2 '画点线
Picture1.Line (X1, 5265)-(X1, Y1), RGB(255, 0, 0) '画Y竖虚线,STEP表示相对坐标
Picture1.Line (510, Y1)-(X1, Y1), RGB(255, 0, 0) '画X横虚线
Picture1.CurrentX = 810 '设置文字的X
Picture1.CurrentY = Y1 - 210 '设置文字的Y
Picture1.Print i + 1 & "档时最大输出扭矩:"; Int(T1) & " N.m"
Picture1.DrawStyle = 0 '画实线
End If
If j = Cout - 1 Then
If (i Mod 2 = 0) Then Picture1.CurrentX = X1 + 100
If (i Mod 2 = 1) Then Picture1.CurrentX = X1 - 100
Picture1.CurrentY = Y1 - 120
Picture1.Print "i" & i + 1
End If
X0 = X1: Y0 = Y1
Next
Next
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "变速箱输出扭矩.bmp"
' If kai = 0 Then Picture1.Cls
'''''''''''''''以下输出显示各档位,转速与速度关系参数,显示在form2.text1.text中'''''''''''''''''''''''''''''''''
Dim Nstr As String, S_i As String
Nstr = ""
S_i = ""
Form2.Text1.Text = "" 'form2的文本框text1,设置表头
Form2.Text1.Text = " 各档位的发动机转速(r/min)以及变速箱输出扭矩(km/h)关系如下: " & vbCrLf
For j = 0 To Cout
S_v = Space(2)
For i = 0 To IGmax
If Text7(i).Text = 1 Then
Yita = (Text9.Text + 1) / 2 '其他档传动效率,变速箱输出端取一半的传动率损失
Else
Yita = (Text8.Text + 1) / 2 '直接档传动效率,变速箱输出端取一半的传动率损失
End If
If j = 0 Then S_i = S_i & N2Str(i + 1, 2) & "档" & Space(6) '档位行
T1 = Torque(j) * Text7(i).Text * Yita '变速箱输出扭矩
S_v = S_v & N2Str(Int(T1), 10) '把扭矩取整之后再转换为行长字符串
Next
S_v = Space(2) & N2Str(REV(j), 6) & " | " & S_v '合拼列,发动机转速 + 各档时对应的扭矩
If j = 0 Then
Form2.Text1.Text = Form2.Text1.Text & " 转速\档位 " & S_i & vbCrLf
Lens = Int((Len(S_i) + 24) / 2)
Form2.Text1.Text = Form2.Text1.Text & String(Lens, "─") & vbCrLf
End If
Form2.Text1.Text = Form2.Text1.Text & S_v & "(N.m)" & vbCrLf
Next
End Sub
Private Sub Option9_Click()
Dim Tboxmax As Double, Yita As Double 'Tboxmax用于存驱动桥输出最大扭矩,Yita为传动效率
Dim I0 As Double, Tf As Double, Tm As Double '主减速比,滑动力矩,最大扭矩
Dim n1 As Double, T1 As Double '临时转速n1,扭矩临时T1
Dim Nkd, Tfen '设定刻度值
Dim X0, Y0, X1, Y1
Dim IGmax As Double '前进档的档位数,
Dim Cout, i, j
If Text6.Text = "" Or List1.ListCount < 2 Then
MsgBox "参数不完整,请重新输入!"
Exit Sub
End If
Call IniData '初始化数据 转速 功率 扭矩
IGmax = Text6.Text - 1 '以0为起始
I0 = Text21.Text
Tf = 0
Cout = List1.ListCount - 1 '发动机原始数据的项目数,数组的上标值
'''''发动机 REV()'对应转速,全局变量' Torque() '对应扭矩,全局变量' Power() '对应功率,全局变量
'------------------------------初始化画图框------------------------------------------------------------------
Picture1.Cls
Picture1.ScaleMode = 1 ' 设置比例模型为缇。
Picture1.Line (510, 510)-Step(6915, 4755), , B '画方框,起点510,510 左上角为0点,长6915,高4755
Picture1.CurrentX = 180
Picture1.CurrentY = 200
Picture1.Print "T(N.m)"
Picture1.CurrentX = 7125
Picture1.CurrentY = 5465
Picture1.Print "N(rpm )"
Picture1.CurrentX = 2000
Picture1.CurrentY = 240
Picture1.Print Text1.Text & "汽车各档转速-驱动桥输出扭矩曲线图"
'-----------------------------------------------------------------------------------------------------------------
'-------------------------------------------滑动T=W*g*f*r=后桥轴荷*9.8*0.75*车轮半径--------------------------------------
If Text4.Text > 0 Then
Tf = Text4.Text * 9.8 * 0.7 * Text19.Text
End If
'-------------------------------------以上计算驱动桥轴荷阻力矩,按滑动系数0.75计算---------------------------------------
If Text7(i).Text = 1 Then
Yita = Text9.Text '其他档传动效率,变速箱输出端取一半的传动率损失
Else
Yita = Text8.Text '直接档传动效率,变速箱输出端取一半的传动率损失
End If
' Yita = 1
Tboxmax = Tormax * Text7(0).Text * Yita * I0 '最大输出扭矩,,变速箱输出扭矩 = 发动机扭矩 * 变速箱速比 * 传动效率
Tqudongqiao = Tboxmax '传递最大驱动力矩到全局变量
' Debug.Print "tqudongqiao=" & Tqudongqiao
kdx = 6915 / REV(Cout) '单位转速对应缇值,REV(cout)为发动机最大设定转速
If Tf > Tboxmax Then
Tm = Tf
Else
Tm = Tboxmax
End If
kdy = (4755 - 600) / Tm '单位扭矩 T 对应多少缇值
Nkd = Int((REV(Cout)) / 10 / 50) * 50 ' 最高设定转速,转速分度,50的倍数
If Nkd = 0 Then Nkd = 50
For i = 0 To 30
Picture1.CurrentY = 5265 + 30
Picture1.CurrentX = 210 + kdx * i * Nkd '设置写转速值字的起点
If Nkd * i * kdx > 6915 Then Exit For
Picture1.Print Nkd * (i) '写转速值
Picture1.Line (510 + Nkd * i * kdx, 5265)-Step(0, -100) '画刻度
Next
'----以上循环画X坐标刻度及写值============================================================
n1 = Int(Tboxmax / 120) * 10
Tfen = Int(n1 / 100) * 100
' Debug.Print "kdy=" & kdy & " Tfen=" & Tfen
For i = 1 To 20
Picture1.CurrentX = 0
Picture1.CurrentY = 5165 - kdy * i * Tfen
Picture1.Line (510, 5265 - kdy * Tfen * i)-(610, 5265 - kdy * Tfen * i), RGB(255, 0, 0)
Next
'----以上画Y坐标刻度及写值=================================================================
If Tf > 0 Then
X1 = 7000
Y1 = 5265 - Tf * kdy
Tqufa = Tf '传递驱动桥最大滑动阻力矩到全局变量
Picture1.DrawStyle = 2 '画点线
Picture1.Line (510, Y1)-(X1, Y1), RGB(0, 200, 255) '画X横虚线
Picture1.CurrentX = 3810 '设置文字的X
Picture1.CurrentY = Y1 - 210 '设置文字的Y
Picture1.Print "驱动桥最大滑动扭矩:"; Int(Tf) & " N.m"
Picture1.DrawStyle = 0 '画实线
End If
'------------------------------以上如果有驱动桥轴荷的话,计算滑动扭矩-------------------------------
'''''''''
''以下采用扭矩方法与功率方法求得变速箱输出扭矩,1档情况
'''''发动机 REV()'对应转速,全局变量' Torque() '对应扭矩,全局变量' Power() '对应功率,全局变量
'''----------以下为转速每一转为基数求得各参数的方法,-----------------------------------------
For i = 0 To IGmax
If Text7(i).Text = 1 Then
Yita = Text9.Text '其他档传动效率,变速箱输出端取一半的传动率损失
Else
Yita = Text8.Text '直接档传动效率,变速箱输出端取一半的传动率损失
End If
' Yita = 1
X0 = 510 + (REV(0)) * kdx
Y0 = 5265 - Torque(0) * Text7(i).Text * Yita * I0 * kdy '计算绘画第一点的值
For j = 0 To Cout - 1
X1 = 510 + kdx * REV(j)
T1 = Torque(j) * Text7(i).Text * I0 * Yita '驱动桥输出扭矩
Y1 = 5265 - T1 * kdy
Picture1.Line (X0, Y0)-(X1, Y1) '画扭矩曲线
If Torque(j) = Tormax And (i < 2 Or i = IGmax) Then
Picture1.DrawStyle = 2 '画点线
Picture1.Line (X1, 5265)-(X1, Y1), RGB(255, 0, 0) '画Y竖虚线,STEP表示相对坐标
Picture1.Line (510, Y1)-(X1, Y1), RGB(255, 0, 0) '画X横虚线
Picture1.CurrentX = 810 '设置文字的X
Picture1.CurrentY = Y1 - 210 '设置文字的Y
Picture1.Print i + 1 & "档时最大总输出扭矩:"; Int(T1) & " N.m"
Picture1.DrawStyle = 0 '画实线
End If
If j = Cout - 1 Then
If (i Mod 2 = 0) Then Picture1.CurrentX = X1 + 100
If (i Mod 2 = 1) Then Picture1.CurrentX = X1 - 100
Picture1.CurrentY = Y1 - 120
Picture1.Print "i" & i + 1
End If
X0 = X1: Y0 = Y1
Next
Next
Picture1.ScaleMode = vbPixels ' 设置比例模型为像素。
Picture1.AutoRedraw = True ' 打开 AutoRedraw。
SavePicture Picture1.Image, App.Path & "\Save\" & Text1.Text & "驱动桥输出扭矩.bmp"
' If kai = 0 Then Picture1.Cls
'''''''''''''''以下输出显示各档位,转速与速度关系参数,显示在form2.text1.text中'''''''''''''''''''''''''''''''''
Dim Nstr As String, S_i As String
Nstr = ""
S_i = ""
Form2.Text1.Text = "" 'form2的文本框text1,设置表头
Form2.Text1.Text = " 各档位的发动机转速(r/min)以及驱动桥输出扭矩(km/h)关系如下: " & vbCrLf
For j = 0 To Cout
S_v = Space(2)
For i = 0 To IGmax
If Text7(i).Text = 1 Then
Yita = Text9.Text '其他档传动效率,变速箱输出端取一半的传动率损失
Else
Yita = Text8.Text '直接档传动效率,变速箱输出端取一半的传动率损失
End If
If j = 0 Then S_i = S_i & N2Str(i + 1, 2) & "档" & Space(6) '档位行
T1 = Torque(j) * Text7(i).Text * I0 * Yita '变速箱输出扭矩
S_v = S_v & N2Str(Int(T1), 10) '把扭矩取整之后再转换为行长字符串
Next
S_v = Space(2) & N2Str(REV(j), 6) & " | " & S_v '合拼列,发动机转速 + 各档时对应的扭矩
If j = 0 Then
Form2.Text1.Text = Form2.Text1.Text & " 转速\档位 " & S_i & vbCrLf
Lens = Int((Len(S_i) + 24) / 2)
Form2.Text1.Text = Form2.Text1.Text & String(Lens, "─") & vbCrLf
End If
Form2.Text1.Text = Form2.Text1.Text & S_v & "(N.m)" & vbCrLf
Next
End Sub
Private Sub TtoP_Click()
TconverP.Show
End Sub
Private Function Shaft_n(Va As Double)
'主减速比 text21.text 滚动半径text19.text
Dim I0 As Double, Ro As Double 'I0为主减,Ro为滚动半径
'公式 n=25*Va*I0/(3*3.1415926*Ro) 转速单位RPM,速度km/h,半径m
I0 = Text21.Text
Ro = Text19.Text
Shaft_n = 25 * Va * I0 / (3 * 3.1415926 * Ro)
End Function
'''''''====================优化记录======================================
''2017.1.4 V1.0.2.4
''1 、增加计算汽车速度与传动轴转速对应列表?
''2016.11.24 V1.0.2.3
''1 、当驱动力大于最大滑动阻力时在图上显示最大滑动阻力?
''2 、驱动桥增加最大阻力矩显示?
''3 、增加计算结果输出保存位置提示?
''2016.11.8 V1.0.2.2
''1、增加功率扭矩转速换算;
''2、修正参数导入的BUG?
''2016.11.4 V1.0.2.1
''1、修正最小车速输出到文件为0的问题;
''2、增加倒车最小稳定车速的计算,默认从怠速转速开始计算;
''3、增加各档位变速箱输出扭矩的计算,用于传动轴与主减许允扭矩的核算。
''2015.12.6 V1.0.2.0
''1、修正爬坡度大于100的问题,设置最高值为80.
''2、修正最小车速在怠速时,计算加速时间可能会变负值问题。
''2015.12.2 V1.0.1.9
''1、修正最高车速计算出错问题,速度图表绘制不正确问题。
''2014.4.2 V1.0.18
''1、自动保存时,模拟输入与精确计算两种模式下车型可能互相混淆的BUG。
''2014.3.12 V1.0.17
''1、修正最高档位最高车速图上绘制可能不在最高档的错误;
''2、最小稳定车速计算为0的错误;
''3、计算结果窗口没有关闭再度计算会出错的BUG?
''2013.9.29 V1.0.15
''1、发动机参数输入采用“转速,功率,扭矩”格式,以此来增加计算精度。
''2、保留发动机拟合方法,功率与扭矩分别采用自身二次函数拟合。
''2013.9.28 V1.1.0.4
''1 、合拼模拟与精确两种计算方法为同一平台计算?
''2 、增加计算结果参数预览?
''3 、简化参数输入功能?
''4 、自动保存上次计算输入参数为默认?
''5 、保存计算结果图表到SAVE目录?
''2013.5.3
''1 、增加最大加速度以及最大爬坡度值在图上显示?
''2 、修复拟合计算时点关闭程序没有退出的问题?
''3 、计算得到最大加速度?爬坡度自动保存到文件?
''2013.5.2
''1、增加软件图标;
''2、计算界面设置可以返回到启动界面?
''2013.1
''1、增加轿车计算的适用性;
''2、增加精确计算功能,发动机各功率点可以采用手动输入,扭矩通过功率来转换。
''3、各点之间功率采用线性拟合计算?
''3、对多轴汽车(半挂车)计算适用性未作试验验证。
Private Sub Form_Load()
'Me.Caption = "关于 " & App.Title
'lblVersion.Caption = "版本 " & App.Major & "." & App.Minor & "." & App.Revision
'lblTitle.Caption = App.Title
lblDescription.Caption = " 本程序可用于汽车动力性计算,分10个图表,包括:" & vbCrLf _
& "1.发动机特性拟合曲线;" & vbCrLf _
& "2.汽车速度曲线;" & vbCrLf _
& "3.汽车驱动力曲线;" & vbCrLf _
& "4.汽车驱动力曲线-行驶阻力曲线;" & vbCrLf _
& "5.汽车加速度曲线;" & vbCrLf _
& "6.汽车加速时间-速度曲线;" & vbCrLf _
& "7.汽车爬坡性能曲线;" & vbCrLf _
& "8.汽车功率平衡图等等" & vbCrLf _
& " 注:拟合计算需要输入的发动机参数比较少,特性曲线是采用二阶拟合得到,计算绘制的图表存在一定的误差。" & vbCrLf _
& "精确计算需要输入发动机特性曲线点,计算精度比较高。"
' Form2.Text2 = lblDescription.Caption
' Form2.Show
End Sub
Public Sub StartSysInfo()
On Error GoTo SysInfoErr
Dim rc As Long
Dim SysInfoPath As String
' 试图从注册表中获得系统信息程序的路径及名称...
If GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFO, gREGVALSYSINFO, SysInfoPath) Then
' 试图仅从注册表中获得系统信息程序的路径...
ElseIf GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFOLOC, gREGVALSYSINFOLOC, SysInfoPath) Then
' 已知32位文件版本的有效位置
If (Dir(SysInfoPath & "\MSINFO32.EXE") <> "") Then
SysInfoPath = SysInfoPath & "\MSINFO32.EXE"
' 错误 - 文件不能被找到...
Else
GoTo SysInfoErr
End If
' 错误 - 注册表相应条目不能被找到...
Else
GoTo SysInfoErr
End If
Call Shell(SysInfoPath, vbNormalFocus)
Exit Sub
SysInfoErr:
MsgBox "此时系统信息不可用", vbOKOnly
End Sub
Public Function GetKeyValue(KeyRoot As Long, KeyName As String, SubKeyRef As String, ByRef KeyVal As String) As Boolean
Dim i As Long ' 循环计数器
Dim rc As Long ' 返回代码
Dim hKey As Long ' 打开的注册表关键字句柄
Dim hDepth As Long '
Dim KeyValType As Long ' 注册表关键字数据类型
Dim tmpVal As String ' 注册表关键字值的临时存储器
Dim KeyValSize As Long ' 注册表关键自变量的尺寸
'------------------------------------------------------------
' 打开 {HKEY_LOCAL_MACHINE...} 下的 RegKey
'------------------------------------------------------------
rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' 打开注册表关键字
If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' 处理错误...
tmpVal = String$(1024, 0) ' 分配变量空间
KeyValSize = 1024 ' 标记变量尺寸
'------------------------------------------------------------
' 检索注册表关键字的值...
'------------------------------------------------------------
rc = RegQueryValueEx(hKey, SubKeyRef, 0, _
KeyValType, tmpVal, KeyValSize) ' 获得/创建关键字值
If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' 处理错误
If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then ' Win95 外接程序空终结字符串...
tmpVal = Left(tmpVal, KeyValSize - 1) ' Null 被找到,从字符串中分离出来
Else ' WinNT 没有空终结字符串...
tmpVal = Left(tmpVal, KeyValSize) ' Null 没有被找到, 分离字符串
End If
'------------------------------------------------------------
' 决定转换的关键字的值类型...
'------------------------------------------------------------
Select Case KeyValType ' 搜索数据类型...
Case REG_SZ ' 字符串注册关键字数据类型
KeyVal = tmpVal ' 复制字符串的值
Case REG_DWORD ' 四字节的注册表关键字数据类型
For i = Len(tmpVal) To 1 Step -1 ' 将每位进行转换
KeyVal = KeyVal + Hex(Asc(Mid(tmpVal, i, 1))) ' 生成值字符。 By Char。
Next
KeyVal = Format$("&h" + KeyVal) ' 转换四字节的字符为字符串
End Select
GetKeyValue = True ' 返回成功
rc = RegCloseKey(hKey) ' 关闭注册表关键字
Exit Function ' 退出
GetKeyError: ' 错误发生后将其清除...
KeyVal = "" ' 设置返回值到空字符串
GetKeyValue = False ' 返回失败
rc = RegCloseKey(hKey) ' 关闭注册表关键字
End Function
Private Sub Form_Unload(Cancel As Integer)
If Option1.Value = True Then
' Form1.Show
Form4.Show
frmAbout.Hide
ElseIf Option2.Value = True Then
form3.Show
frmAbout.Hide
End If
End Sub
Private Sub Convert_Click()
Dim T As Double, P As Double, n As Double
Dim Num As Double
If Text1.Text <> "" And Text2.Text <> "" And Text3.Text = "" Then
T = Text1.Text
n = Text2.Text
P = T * n / 9550
Num = Int(P * 1000 + 0.5) / 1000 '取小数后面三位
Text3.Text = Trim(Str(Num)) '把数字转换成字符串,去掉前后空格
ElseIf Text1.Text = "" And Text2.Text <> "" And Text3.Text <> "" Then
n = Text2.Text
P = Text3.Text
T = 9550 * P / n
Num = Int(T * 1000 + 0.5) / 1000
Text1.Text = Trim(Str(Num))
ElseIf Text1.Text <> "" And Text2.Text = "" And Text3.Text <> "" Then
T = Text1.Text
P = Text3.Text
n = 9550 * P / T
Num = Int(n + 0.5)
Text2.Text = Trim(Str(Num))
Else
Text3.Text = ""
End If
End Sub
Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
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) 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
'扭矩函数,二次抛物线拟合得到
End Function
Public Function P(n) As Double
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
Private Sub Command1_Click()
Dim Nmax As Double, Nx As Double, Pe As Double, Te As Double
Dim Ndai As Double
Dim NP_eng As String
Dim AutoFit As String
AutoFit = App.Path & "\AutoEng.txt"
If Text2.Text <> "" And Text3.Text <> "" And Text4.Text <> "" And Text5.Text <> "" And Text11.Text <> "" Then
If CInt(Text3.Text) > 1000 And CInt(Text5.Text) > 800 And CInt(Text11.Text) > 300 Then
form3.Text1.Text = Form4.Text1.Text '置计算窗口车辆名称信息
Ndai = CDbl(Text11.Text)
Umax = CDbl(Text3.Text) + 200
Nx = Ndai
form3.List1.Clear
Do While Nx <= Umax
Pe = P(Nx)
Te = T(Nx)
If Pe < 0 Or Te < 0 Then
MsgBox "参数输入有误。"
GoTo ErrHandler
End If
NP_eng = Nx & "," & N2Str(Pe, 8) & "," & N2Str(Te, 8)
form3.List1.AddItem NP_eng
Debug.Print "np=" & NP_eng & " NX=" & Nx & " pe=" & P(Nx)
Nx = Nx + 100
Loop
Open AutoFit For Output As #1
Print #1, "****************************以下是计算输入参数内容****************************"
Print #1, "发动机或车辆型号: " & Text1.Text
Print #1, "额定功率(kW): " & Text2.Text & " | 额定功率转速(r/min): " & Text3.Text
Print #1, "最大扭矩(N.M): " & Text4.Text & " | 最大扭矩转速(r/min): " & Text5.Text
Print #1, "发动机怠速(r/min): " & Text11.Text
Close #1
Form4.Hide
form3.Show
Else
' Form4.Hide
' form3.Show
MsgBox "参数输入有误,请重新输入!", vbOKOnly, "发动机参数"
End If
ElseIf Text2.Text = "" And Text3.Text = "" And Text4.Text = "" And Text5.Text = "" And Text11.Text = "" Then
Form4.Hide
form3.Show
Else
MsgBox "参数输入有误,请重新输入!", vbOKOnly, "发动机参数"
End If
ErrHandler:
' 用户按了“取消”按钮
Close
Exit Sub
End Sub
Private Sub Form_Load()
Dim AutoFit As String, Autosave As String
AutoFit = App.Path & "\AutoEng.txt"
Autosave = App.Path & "\Save"
''''''''''''''''建自动保存目录'''''''''''''''''''''''''''''''''''
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text11.Text = ""
If Dir(Autosave, vbDirectory) = "" Then
MkDir (Autosave)
End If
' '''''''''''''''自动读取上次使用过的参数''''''''''''''''''''''''''
' For i = 0 To 14
' Text7(i).Text = ""
' Next
If Dir(AutoFit) <> "" Then
Open AutoFit For Input As #2
Do While Not EOF(2)
' Line Input #2, textA '-------------------------以下是计算输入参数内容--------------------------
Line Input #2, textA '发动机型号: DCiII385
If InStr(textA, "发动机或车辆型号:") > 0 Then
Text1.Text = Getnum((textA))
Exit Do
End If
Loop
Seek #2, 1
Do While Not EOF(2)
Line Input #2, textA '额定功率(kW): 283 | 额定功率转速(r/min): 1900
If InStr(textA, "额定功率") > 0 Then
mystr = Split(textA, "|")
Text2.Text = Getnum((mystr(0)))
Text3.Text = Getnum((mystr(1)))
Exit Do
End If
Loop
Seek #2, 1
Do While Not EOF(2)
Line Input #2, textA '最大扭矩(N.M): 1800 | 最大扭矩转速(r/min): 1200
'Debug.Print "最大扭矩(N.M): =" & textA
If InStr(textA, "最大扭矩") > 0 Then
mystr = Split(textA, "|")
Text4.Text = Getnum((mystr(0)))
Text5.Text = Getnum((mystr(1)))
Exit Do
End If
Loop
Seek #2, 1
Do While Not EOF(2)
Line Input #2, textA '发动机怠速(r/min): 800
If InStr(textA, "怠速") > 0 Then
Text11.Text = Getnum((textA))
Exit Do
End If
Loop
Close #2
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
源程序清单-汽车动力性计算图表软件V1.0相关推荐
- 汽车动力性计算图表软件
一.引言 目的 汽车工程师在做整车系统配置时,需要对动力总成.传动系统进行详细的计算校核,比较,筛选方案.动力性能的计算与分析,是一个重复计算.作图与比较的过程.本软件就是针对这一特点,来针对性的开发 ...
- 搞一个win7下能运行的免费财务软件 快马财务软件 v1.0
一直想找一个免费的财务软件,能在win7或者win10下运行的. 在网上找了一圈,发现主要的免费的财务软件都是在xp下运行,而且只支持老古董的SQLServer2000数据库,那个数据库可是很容易被病 ...
- 效率源希捷自校准配套专修软件 v1.0 绿色
Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...
- 税务UKey开票软件 V1.0.22_ZS_20221231 版本数据库分析
税控盘版开票软件V1.0.22_ZS_20221231 继2022220630版本之后数据库又发生了变化,业务上的变化在于小规模纳税人,征收率调整减按1%征收.在技术上数据库的加密机制发生变化,经过一 ...
- 食蔬宝收银称重软件V1.0
一食蔬宝收银称重软件V1.0 单机版 免费使用 可以免费对接各大厂商的驱动,也欢迎各大称厂来合作对接驱动 下载地址:http://sdkjt.kjtcn.net/CrossBorderKcy/Down ...
- 食蔬宝分拣称重软件V1.0
农产生鲜配送分拣系统 支持电子称称重 进销存管理 按配送路线分拣 按汇总订单分拣 按客户店铺分拣 食蔬宝分拣软件V1.0.rar-互联网文档类资源-CSDN下载
- 一点换机软件 v1.0.5
类型:系统工具 版本:v1.0.5 大小:10.2M 更新:2019/3/6 语言:简体 等级: 平台:安卓, 4.4以上 下载地址: 一点换机软件 v1.0.5(1) 一点换机软件 v1.0.5(2 ...
- EasyMoney 绿色免费 家庭财务软件v1.0 新鲜出炉~~~
EasyMoney 家庭财务软件v1.0 新鲜出炉~~~ EasyMoney 财务软件使用帮助 前言:系统概述 EasyMoney是一款专为家庭或个人量身打造的在线账务管理系统.帮助个 ...
- 百分百财富管理软件V1.0
根据网友的反馈,打算在<4W家庭理财>V2.5的基础上开发适用于中小企业和网店的理财软件,软件名称暂定为<百分百财富管理>V1.0. 如果说<4W家庭理财>侧重于节 ...
最新文章
- 18 个 Java8 日期处理的实践,太有用了!
- openlayers5之完整文档v5.1.3.zip下载
- 一段TCP socket和WebSocket互相交互的调试代码
- SAP CRM里使用BAdI阻止产品主数据保存的一种办法
- 单片机涡轮流量传感器_青天仪表为您介绍安装涡轮流量计需要注意问题
- 蓝桥杯试题java_java蓝桥杯试题
- Unity3D常用知识点总结
- 《Total Commander:万能文件管理器》——第7.2节.比较和同步文件夹
- 多线程相关知识点详解
- echarts 直方图加正态_直方图和正态分布图(只需填入待分析数据_自动分析_自动生成图)...
- Rhino6.25软件安装教程|兼容WIN10
- TrinityCore魔兽世界服务器-环境搭建(Debian11)
- 电子产品“使用”和“放置”哪个寿命更长??
- 【Web项目】点餐系统
- 【linux】web服务器
- JS - 11 - 原型、继承 -
- 制定新的计划,走起(r13笔记第1天)
- Open3D键盘切换上下帧显示点云
- Vulnhub_HACKSUDO: THOR
- 全国职业技能计算机考试教案,内江职业技术学院2017年中职类—信息技术二类技能测试大纲...