diff --git a/CHANGES.md b/CHANGES.md index eeacd373b08a5c6b0895f0926cf970ecb18cad4c..1bba9672b06db4713db40e5e2357ca3d8ec44759 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,11 @@ +### VECTO 2.0.4-beta2 +* Bugfix: VECTO freezed if torque converter creeping was not possible due to low full load torque. Now it will abort with error message. +* Bugfix: Small fixes in torque converter model + + ### VECTO 2.0.4-beta1 * Updated CSV format of some declaration config files * Various bugfixes in AT model diff --git a/User Manual/usermanual.html b/User Manual/usermanual.html index 27890a575768a0bc4b955c7a599da46fa838f5ca..cc996d43b4832632a049e9f67745acc9b98e73b3 100644 --- a/User Manual/usermanual.html +++ b/User Manual/usermanual.html @@ -4,7 +4,7 @@ <HEAD> <TITLE>VECTO User Manual</TITLE> </HEAD> - <FRAMESET rows="82,*,50" frameborder=0> + <FRAMESET rows="82,*,50" frameborder="0"> <FRAME src="main/head.html"> <FRAMESET cols="25%, *" > <FRAME src="main/index.html"> diff --git a/VECTO/GUI/F_ENG.vb b/VECTO/GUI/F_ENG.vb index 06262fa82a7c631a7b657ec4d5fc32bb975b2d72..abe0dc0bc0a6fd84b62df76baa67c69029ef2e2d 100644 --- a/VECTO/GUI/F_ENG.vb +++ b/VECTO/GUI/F_ENG.vb @@ -555,26 +555,27 @@ Public Class F_ENG If IsNumeric(Me.TbNleerl.Text) AndAlso Me.TbNleerl.Text > 0 Then - FLD0.Init(CSng(Me.TbNleerl.Text)) - - Shiftpoly = New cGBX.cShiftPolygon("", 0) - Shiftpoly.SetGenericShiftPoly(FLD0, Me.TbNleerl.Text) - - s = New System.Windows.Forms.DataVisualization.Charting.Series - s.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp) - s.ChartType = DataVisualization.Charting.SeriesChartType.FastLine - s.BorderWidth = 2 - s.Color = Color.DarkRed - s.Name = "Upshift curve" - MyChart.Series.Add(s) - - s = New System.Windows.Forms.DataVisualization.Charting.Series - s.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown) - s.ChartType = DataVisualization.Charting.SeriesChartType.FastLine - s.BorderWidth = 2 - s.Color = Color.DarkRed - s.Name = "Downshift curve" - MyChart.Series.Add(s) + If FLD0.Init(CSng(Me.TbNleerl.Text)) Then + + Shiftpoly = New cGBX.cShiftPolygon("", 0) + Shiftpoly.SetGenericShiftPoly(FLD0, Me.TbNleerl.Text) + + s = New System.Windows.Forms.DataVisualization.Charting.Series + s.Points.DataBindXY(Shiftpoly.gs_nUup, Shiftpoly.gs_TqUp) + s.ChartType = DataVisualization.Charting.SeriesChartType.FastLine + s.BorderWidth = 2 + s.Color = Color.DarkRed + s.Name = "Upshift curve" + MyChart.Series.Add(s) + + s = New System.Windows.Forms.DataVisualization.Charting.Series + s.Points.DataBindXY(Shiftpoly.gs_nUdown, Shiftpoly.gs_TqDown) + s.ChartType = DataVisualization.Charting.SeriesChartType.FastLine + s.BorderWidth = 2 + s.Color = Color.DarkRed + s.Name = "Downshift curve" + MyChart.Series.Add(s) + End If End If diff --git a/VECTO/GUI/F_VECTO.vb b/VECTO/GUI/F_VECTO.vb index 96b28e36db05b49b76e21c52b0d0feea63259ef3..75dcedfd43425ffb62477c4ccb08f9a8c6f3be3c 100644 --- a/VECTO/GUI/F_VECTO.vb +++ b/VECTO/GUI/F_VECTO.vb @@ -1130,8 +1130,8 @@ Public Sub UpdatePic() MyChart.Series.Add(s) If Cfg.DeclMode Then - FLD0.Init(ENG0.Nidle) + If FLD0.Init(ENG0.Nidle) Then Shiftpoly = New cGBX.cShiftPolygon("", 0) Shiftpoly.SetGenericShiftPoly(FLD0, ENG0.Nidle) @@ -1150,6 +1150,7 @@ Public Sub UpdatePic() s.Color = Color.DarkRed s.Name = "Downshift curve" MyChart.Series.Add(s) + End If End If diff --git a/VECTO/Input Files/cDRI.vb b/VECTO/Input Files/cDRI.vb index d6ecf6fe1093479b4184b57d427e73bcb470cb76..f18bd6d4a01c440b9dd154668eb59757db3db972 100644 --- a/VECTO/Input Files/cDRI.vb +++ b/VECTO/Input Files/cDRI.vb @@ -694,6 +694,11 @@ lbEr: If AuxDef Then AuxComponents = hzAuxValues tDim = Values(tDriComp.V).Count - 1 + For i = 0 To tDim + If Values(tDriComp.V)(i) < 0.5 Then Values(tDriComp.V)(i) = 0 + Next + + Return True End Function diff --git a/VECTO/Input Files/cENG.vb b/VECTO/Input Files/cENG.vb index 3db09eab295eb97abc66d5e6a4b6f8c4b37fd508..1d1be37069767552d482a08867bd2b3c1dd3c251 100644 --- a/VECTO/Input Files/cENG.vb +++ b/VECTO/Input Files/cENG.vb @@ -387,7 +387,7 @@ End Property Return False End Try - FLD(i).Init(Nidle) + If Not FLD(i).Init(Nidle) Then Return False Next diff --git a/VECTO/Input Files/cFLD.vb b/VECTO/Input Files/cFLD.vb index 00b72ca34815482de352ff5ab93b2a2b794cfd3f..37d858a9607461a0cf00be0684145eb85c4c7f0b 100644 --- a/VECTO/Input Files/cFLD.vb +++ b/VECTO/Input Files/cFLD.vb @@ -330,6 +330,8 @@ lbInt: N95h = fnUofPfull(0.95 * Pfull(fnUrated), False) + If N95h < 0 Then Return -1 + Amax = Area(Nidle, N95h) For i = 0 To iDim - 1 @@ -465,6 +467,8 @@ lbInt: LastPe = nMtoPe(nU, Tq(nU)) nUtarget = nU + If LastPe > PeTarget Then Return -1 + Do Pe = nMtoPe(nU, Tq(nU)) @@ -486,6 +490,8 @@ lbInt: LastPe = nMtoPe(nU, Tq(nU)) nUtarget = nU + If LastPe > PeTarget Then Return -1 + Do Pe = nMtoPe(nU, Tq(nU)) @@ -525,20 +531,45 @@ lbInt: End Function - Public Sub Init(ByVal Nidle As Single) + Public Function Init(ByVal Nidle As Single) As Boolean Dim Pmax As Single + Dim MsgSrc As String + + MsgSrc = "Main/ReadInp/Eng.Init" Pmax = Pfull(fnUrated) Nlo = fnUofPfull(0.55 * Pmax, True) + If Nlo < 0 Then + WorkerMsg(tMsgID.Err, "Failed to calculate Nlo! Check full load curve!", MsgSrc) + Return False + End If + N95h = fnUofPfull(0.95 * Pmax, False) + If N95h < 0 Then + WorkerMsg(tMsgID.Err, "Failed to calculate N95h! Check full load curve!", MsgSrc) + Return False + End If + Npref = fNpref(Nidle) + If Npref < 0 Then + WorkerMsg(tMsgID.Err, "Failed to calculate Npref! Check full load curve!", MsgSrc) + Return False + End If + Nhi = fnUofPfull(0.7 * Pmax, False) - End Sub + If Nhi < 0 Then + WorkerMsg(tMsgID.Err, "Failed to calculate Nhi! Check full load curve!", MsgSrc) + Return False + End If + + Return True + + End Function Public Sub DeclInit() Dim i As Integer diff --git a/VECTO/Input Files/cGBX.vb b/VECTO/Input Files/cGBX.vb index 2572a14173f5a5fad40d88a543ceb336d4cba4b2..7ce091a5489e4a4d799146323da53e9a0cb5e92e 100644 --- a/VECTO/Input Files/cGBX.vb +++ b/VECTO/Input Files/cGBX.vb @@ -66,6 +66,8 @@ Public Class cGBX Public TCnUout As Single Public TCReduce As Boolean Public TCNeutral As Boolean + Public TC_mu As Single + Public TC_nu As Single Private TCnuMax As Single @@ -465,10 +467,20 @@ Public Class cGBX nuMax = Math.Min(TCnu(TCdim), nUout / ENG.Nidle) Else - nuMin = Math.Max(nUout / ENG.Nrated, TCnu(0)) + nuMin = Math.Max(nUout / FLD(Gear).N95h, TCnu(0)) nuMax = Math.Min(TCnuMax, nUout / ENG.Nidle) End If + If nuMax <= nuMin Then + TCReduce = True + Return True + End If + + 'Reduce step size if nu-range is too low + Do While (nuMax - nuMin) / nuStep < 10 + nuStep *= 0.1 + Loop + FirstDone = False nu = nuMin - nuStep iDim = -1 @@ -539,7 +551,7 @@ Public Class cGBX 'Min Min = Mout / mu - 'Correct Min if too high + 'Check if Min is too high If Min > MinMax Then Continue Do 'Calculated output torque for given mu @@ -617,6 +629,9 @@ Public Class cGBX TCMin = TCMout / mu TCnUout = nUout + TC_mu = mu + TC_nu = nu + If Brake Then TC_PeBrake = nMtoPe(TCnUout, Mout - TCMout) diff --git a/VECTO/MODcalc/cMOD.vb b/VECTO/MODcalc/cMOD.vb index 3bee33e8ee00568bd2c454ac3067840a88887610..4a7757976cfa56d72d7d1e432f20bfa2d56d9107 100644 --- a/VECTO/MODcalc/cMOD.vb +++ b/VECTO/MODcalc/cMOD.vb @@ -34,6 +34,7 @@ Public Class cMOD Public PlossGB As List(Of Single) Public PlossDiff As List(Of Single) Public PlossRt As List(Of Single) + Public PlossTC As List(Of Single) Public PaEng As List(Of Single) Public PaGB As List(Of Single) Public Paux As Dictionary(Of String, List(Of Single)) @@ -146,6 +147,7 @@ Public Class cMOD PlossGB = New List(Of Single) PlossDiff = New List(Of Single) PlossRt = New List(Of Single) + PlossTC = New List(Of Single) PaEng = New List(Of Single) PaGB = New List(Of Single) Paux = New Dictionary(Of String, List(Of Single)) @@ -199,6 +201,7 @@ Public Class cMOD PlossGB = Nothing PlossDiff = Nothing PlossRt = Nothing + PlossTC = Nothing PaEng = Nothing PaGB = Nothing Paux = Nothing @@ -503,6 +506,7 @@ Public Class cMOD Dim f As cFile_V3 Dim s As System.Text.StringBuilder + Dim su As System.Text.StringBuilder Dim t As Integer Dim t1 As Integer @@ -516,6 +520,8 @@ Public Class cMOD Dim AuxList As New List(Of String) + Dim HeaderList As New List(Of String()) + Dim Gear As Integer MsgSrc = "MOD/Output" @@ -553,40 +559,68 @@ Public Class cMOD Next - 'f.WriteLine("VECTO modal results") - 'f.WriteLine("VECTO " & VECTOvers) - 'f.WriteLine(Now.ToString) - 'f.WriteLine("Input File: " & JobFile) + If DEV.AdvFormat Then + f.WriteLine("VECTO " & VECTOvers) + f.WriteLine(Now.ToString) + f.WriteLine("Input File: " & JobFile) + End If '*********************************************************************************************** '*********************************************************************************************** '*********************************************************************************************** '*** Header & Units **************************************************************************** + s.Length = 0 - s.Append("time [s]") - If Not VEC.EngOnly Then + HeaderList.Add(New String() {"time", "s"}) - s.Append(",dist [m],v_act [km/h],v_targ [km/h],acc [m/s^2],grad [%]") + If Not VEC.EngOnly Then + HeaderList.Add(New String() {"dist", "m"}) + HeaderList.Add(New String() {"v_act", "km/h"}) + HeaderList.Add(New String() {"v_targ", "km/h"}) + HeaderList.Add(New String() {"acc", "m/s²"}) + HeaderList.Add(New String() {"grad", "%"}) dist = 0 - End If - s.Append(",n [1/min],Tq_eng [Nm],Tq_clutch [Nm],Tq_full [Nm],Tq_drag [Nm],Pe_eng [kW],Pe_full [kW],Pe_drag [kW],Pe_clutch [kW],Pa Eng [kW],Paux [kW]") + HeaderList.Add(New String() {"n", "1/min"}) + HeaderList.Add(New String() {"Tq_eng", "Nm"}) + HeaderList.Add(New String() {"Tq_clutch", "Nm"}) + HeaderList.Add(New String() {"Tq_full", "Nm"}) + HeaderList.Add(New String() {"Tq_drag", "Nm"}) + HeaderList.Add(New String() {"Pe_eng", "kW"}) + HeaderList.Add(New String() {"Pe_full", "kW"}) + HeaderList.Add(New String() {"Pe_drag", "kW"}) + HeaderList.Add(New String() {"Pe_clutch", "kW"}) + HeaderList.Add(New String() {"Pa", "Eng", "kW"}) + HeaderList.Add(New String() {"Paux", "kW"}) If Not VEC.EngOnly Then - s.Append(",Gear [-],Ploss GB [kW],Ploss Diff [kW],Ploss Retarder [kW],Pa GB [kW],Pa Veh [kW],Proll [kW],Pair [kW],Pgrad [kW],Pwheel [kW],Pbrake [kW]") + HeaderList.Add(New String() {"Gear", "-"}) + HeaderList.Add(New String() {"Ploss GB", "kW"}) + HeaderList.Add(New String() {"Ploss Diff", "kW"}) + HeaderList.Add(New String() {"Ploss Retarder", "kW"}) + HeaderList.Add(New String() {"Pa GB", "kW"}) + HeaderList.Add(New String() {"Pa Veh", "kW"}) + HeaderList.Add(New String() {"Proll", "kW"}) + HeaderList.Add(New String() {"Pair", "kW"}) + HeaderList.Add(New String() {"Pgrad", "kW"}) + HeaderList.Add(New String() {"Pwheel", "kW"}) + HeaderList.Add(New String() {"Pbrake", "kW"}) If GBX.TCon Then - s.Append(",TCν [-],TCμ [-],TC_T_Out [Nm],TC_n_Out [1/min]") + HeaderList.Add(New String() {"TCν", "-"}) + HeaderList.Add(New String() {"TCµ", "-"}) + HeaderList.Add(New String() {"TC_T_Out", "Nm"}) + HeaderList.Add(New String() {"TC_n_Out", "1/min"}) End If 'Auxiliaries For Each StrKey In AuxList - s.Append(",Paux_" & StrKey & " [kW]") + HeaderList.Add(New String() {"Paux_" & StrKey, "kW"}) Next 'AA-TB @@ -621,18 +655,33 @@ Public Class cMOD End If + HeaderList.Add(New String() {"FC", "g/h"}) + HeaderList.Add(New String() {"FC-AUXc", "g/h"}) + HeaderList.Add(New String() {"FC-WHTCc", "g/h"}) - 'FC - s.Append(Sepp & "FC [g/h]") - s.Append(Sepp & "FC-AUXc [g/h]") + 'Write to File + If DEV.AdvFormat Then + su = New System.Text.StringBuilder + s.Append(HeaderList(0)(0)) + su.Append("[" & HeaderList(0)(1) & "]") + For t = 1 To HeaderList.Count - 1 + s.Append(Sepp & HeaderList(t)(0)) + su.Append(Sepp & "[" & HeaderList(t)(1) & "]") + Next + f.WriteLine(s.ToString) + f.WriteLine(su.ToString) + Else + s.Append(HeaderList(0)(0) & " [" & HeaderList(0)(1) & "]") + For t = 1 To HeaderList.Count - 1 + s.Append(Sepp & HeaderList(t)(0) & " [" & HeaderList(t)(1) & "]") + Next + f.WriteLine(s.ToString) + End If + - s.Append(Sepp & "FC-WHTCc [g/h]") - 'Write to File - ' Header - f.WriteLine(s.ToString) '*********************************************************************************************** diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb index 90ee8acb8d509b6e3072443fab2134286e4acd02..bc3c05bae5dfe828bcc92f9a319a3ff55020bcee 100644 --- a/VECTO/MODcalc/cPower.vb +++ b/VECTO/MODcalc/cPower.vb @@ -11,7 +11,7 @@ Imports System.Collections.Generic Public Class cPower - + Private ClutchNorm As Single 'Normalized clutch speed Private ClutchEta As Single 'clutch efficiency @@ -71,7 +71,6 @@ Public Class cPower Dim adec As Single Dim LookAheadDone As Boolean Dim aCoasting As Single - Dim aRollout As Single Dim Gears As New List(Of Integer) Dim vRollout As Single Dim ProgBarShare As Int16 @@ -93,7 +92,7 @@ Public Class cPower 'AA-TB 'Try and Initialise the Advanced Aux Model if selected. - If VEC.AuxiliaryAssembly<>"CLASSIC" then + If VEC.AuxiliaryAssembly<>"CLASSIC" then WorkerMsg(tMsgID.Normal,"Initialising Advanced Auxiliaries Model", MsgSrc) If mAAUX_Global.InitialiseAdvancedAuxModel(VEC.AdvancedAuxiliaryFilePath) then 'Setting Mode / WHTC for fueling in model. @@ -105,7 +104,7 @@ Public Class cPower return false End If End If - + 'Check Input If VEC.LookAheadOn AndAlso VEC.a_lookahead >= 0 Then @@ -155,6 +154,7 @@ Public Class cPower dist.Add(dist(i - 1) + Vh.V(i)) Next + 'Generate Positions List For i = 0 To MODdata.tDim Positions.Add(0) @@ -172,7 +172,7 @@ Public Class cPower Do i += 1 - 'Check if cancellation pending + 'Check if cancellation pending If VECTOworker.CancellationPending Then Return True Vact = Vh.V(i) @@ -194,6 +194,7 @@ Public Class cPower End If End If + 'Wheel-Power Pwheel = fPwheel(i, Vh.fGrad(dist(i))) @@ -234,7 +235,7 @@ Public Class cPower End If - 'ICE-inertia + 'ICE-inertia If i = 0 Then PaMot = 0 Else @@ -303,24 +304,26 @@ Public Class cPower 'AA-TB REMOVED ' Paux = fPaux(i, nU) - 'Engine Power (at Clutch) - If Pplus Or Pminus Then + 'Calculate powertrain losses => power at clutch + If Pplus Or Pminus Then PlossGB = fPlossGB(Pwheel, Vact, Gear, True) PlossDiff = fPlossDiff(Pwheel, Vact, True) PlossRt = fPlossRt(Vact, Gear) PaGetr = fPaG(Vact, aact) - Pkup = Pwheel + PlossGB + PlossDiff + PaGetr + PlossRt - P = Pkup + Paux + PaMot - Else - Pkup = 0 - P = Paux + PaMot - End If + 'Total aux power + '[kW] + Paux = fPaux(i, nU) + + 'Internal Engine Power (Pclutch plus Aux plus Inertia) + P = Pkup + Paux + PaMot + + 'Full load / motoring Pmin = FLD(Gear).Pdrag(nU) @@ -336,7 +339,6 @@ Public Class cPower Vmax = MODdata.Vh.Vsoll(i) + VEC.OverSpeed / 3.6 Vmin = Math.Max(0, MODdata.Vh.Vsoll(i) - VEC.UnderSpeed / 3.6) vRollout = fRolloutSpeed(i, 1, Vh.fGrad(dist(i))) - aRollout = (2 * vRollout - Vh.V0(i)) - Vh.V0(i) If vRollout < Vmin Then @@ -436,7 +438,7 @@ Public Class cPower 'Secondary Progressbar If ProgBarLACpart > 0 Then ProgBarCtrl.ProgJobInt = CInt((100 / ProgBarShare) * (MODdata.tDim - i) / MODdata.tDim + (ProgBarLACpart - 1) * (100 / ProgBarShare)) - 'Check if cancellation pending + 'Check if cancellation pending If VECTOworker.CancellationPending Then Return True If Positions(i) = 1 Then @@ -562,16 +564,14 @@ Public Class cPower Dim PlossGB As Single Dim PlossDiff As Single Dim PlossRt As Single + Dim PlossTC As Single Dim GVset As Boolean Dim Vrollout As Single Dim SecSpeedRed As Integer Dim FirstSecItar As Boolean Dim TracIntrIs As Single - Dim amax As Single - Dim ProgBarShare As Int16 - Dim LastPmax As Single Dim dist As Double Dim dist0 As Double @@ -677,7 +677,7 @@ lbGschw: Vact = Vh.V(jz) aact = Vh.a(jz) - 'distance + 'distance dist = dist0 + Vact StStPossible = False @@ -760,11 +760,15 @@ lbGschw: 'Eco-Roll Speed Correction (because PreRun speed profile might still be too high or speed might generally be too low) If Vh.EcoRoll(jz) AndAlso Vact > MODdata.Vh.Vsoll(jz) - VEC.UnderSpeed / 3.6 AndAlso Not VehState0 = tVehState.Stopped AndAlso Pplus Then - Vh.ReduceSpeed(jz, 0.9999) + If Not Vh.ReduceSpeed(jz, 0.9999) Then + WorkerMsg(tMsgID.Err, "Engine full load too low for vehicle start (speed reduction failed) !", MsgSrc & "/t= " & jz + 1) + Return False + End If FirstSecItar = False GoTo lbGschw End If + '************************************ Gear selection ************************************ If VehState0 = tVehState.Stopped Or TracIntrOn Then @@ -979,7 +983,10 @@ lbCheck: End If If GBX.TCReduce Then - Vh.ReduceSpeed(jz, 0.999) + If Not Vh.ReduceSpeed(jz, 0.999) Then + WorkerMsg(tMsgID.Err, "Engine full load too low for vehicle start (speed reduction failed) !", MsgSrc & "/t= " & jz + 1) + Return False + End If FirstSecItar = False GoTo lbGschw End If @@ -1002,7 +1009,9 @@ lbCheck: If Clutch = tEngClutch.Closed Then If nU < ENG.Nidle + 0.0001 Then Gear -= 1 - nU = fnU(Vact, Gear, Clutch = tEngClutch.Slipping) + If Gear = 0 Then Clutch = tEngClutch.Opened + GoTo lbCheck + 'nU = fnU(Vact, Gear, Clutch = tEngClutch.Slipping) End If End If @@ -1074,39 +1083,64 @@ lb_nOK: ' => Pantr ' => P ' => Pkup + 'Power at clutch Select Case Clutch Case tEngClutch.Opened - P = Paux + PaMot Pclutch = 0 PlossGB = 0 PlossDiff = 0 PlossRt = 0 + PlossTC = 0 PaGbx = 0 Case tEngClutch.Closed If GBX.TCon And GBX.IsTCgear(Gear) Then - P = nMtoPe(nU, GBX.TCMin) + Paux + PaMot + Pclutch = nMtoPe(nU, GBX.TCMin) + + If P >= 0 Then + PlossTC = Math.Abs(nMtoPe(GBX.TCnUin, GBX.TCMin) * (1 - GBX.TC_mu * GBX.TC_nu)) + Else + PlossTC = Math.Abs(nMtoPe(GBX.TCnUout, GBX.TCMout) * (1 - GBX.TC_mu * GBX.TC_nu)) + End If Else PlossGB = fPlossGB(Pwheel, Vact, Gear, False) PlossDiff = fPlossDiff(Pwheel, Vact, False) PlossRt = fPlossRt(Vact, Gear) + PlossTC = 0 PaGbx = fPaG(Vact, aact) Pclutch = Pwheel + PlossGB + PlossDiff + PaGbx + PlossRt - P = Pclutch + Paux + PaMot End If Case Else 'tEngClutch.Slipping: never in AT mode! PlossGB = fPlossGB(Pwheel, Vact, Gear, False) PlossDiff = fPlossDiff(Pwheel, Vact, False) PlossRt = fPlossRt(Vact, Gear) + PlossTC = 0 PaGbx = fPaG(Vact, aact) Pclutch = (Pwheel + PlossGB + PlossDiff + PaGbx + PlossRt) / ClutchEta - P = Pclutch + Paux + PaMot End Select + + 'Total aux power + '[kW] + Paux = fPaux(jz, Math.Max(nU, ENG.Nidle)) + + + 'ICE-inertia + If jz = 0 Then + PaMot = 0 + Else + 'Not optimal since jz-1 to jz not the right interval + PaMot = fPaMot(nU, MODdata.nU(jz - 1)) + End If + + 'Internal Engine Power (Pclutch plus Aux plus Inertia) + P = Pclutch + Paux + PaMot + + 'EngState If Clutch = tEngClutch.Opened Then @@ -1189,12 +1223,12 @@ lb_nOK: If P < Pmin Then P = Pmin - 'AA-TB + 'AA-TB mAAUX_Global.Internal_Engine_Power = P Else - 'AA-TB + 'AA-TB mAAUX_Global.Internal_Engine_Power = P If EngState0 = tEngState.Load Then @@ -1305,7 +1339,7 @@ lb_nOK: '-------------------------------------------------------------------------------------------------- ' Finish Second - 'distance + 'distance dist0 += Vact 'Start / Stop - Activation-Speed Control @@ -1350,6 +1384,7 @@ lb_nOK: MODdata.PlossGB.Add(PlossGB) MODdata.PlossDiff.Add(PlossDiff) MODdata.PlossRt.Add(PlossRt) + MODdata.PlossTC.Add(PlossTC) MODdata.PaEng.Add(PaMot) MODdata.PaGB.Add(PaGbx) MODdata.Pclutch.Add(Pclutch) @@ -1412,7 +1447,7 @@ lb_nOK: End If Vrollout = fRolloutSpeed(jz + 1, TracIntrIs, Vh.fGrad(dist)) - If Vrollout < Vact Or VehState0 <> tVehState.Dec Then Vh.SetSpeed(jz + 1, Vrollout) + If Vrollout < Vh.V(jz + 1) Or VehState0 <> tVehState.Dec Then Vh.SetSpeed(jz + 1, Vrollout) End If @@ -1445,8 +1480,8 @@ lb_nOK: LastPmax = Pmax - 'AA-TB - 'Aggregate Fuel On Last Known Signals. + 'AA-TB + 'Aggregate Fuel On Last Known Signals. If Not mAAUX_Global.advancedAuxModel is nothing 'EngineState ( used for start stop fueling adjustment ) @@ -1480,7 +1515,7 @@ lb_nOK: ModData.AA_CompressorFlag .Add( advancedAuxModel.AA_CompressorFlag) ModData.AA_TotalCycleFC_Grams .Add( advancedAuxModel.AA_TotalCycleFC_Grams) ModData.AA_TotalCycleFC_Litres .Add( advancedAuxModel.AA_TotalCycleFC_Litres) - + 'TODO:DIAGNOSTICS - REMOVE WHEN TESTED 'ModData.AA_D_M12_P1X .Add( advancedAuxModel.AA_D_M12_P1X) @@ -1497,7 +1532,7 @@ lb_nOK: Catch ex as Exception Dim dummy As Single=0 - + End try @@ -1509,7 +1544,7 @@ lb_nOK: Loop Until jz >= MODdata.tDim - + '*********************************************************************************************** '*********************************** Time loop END *********************************** '*********************************************************************************************** @@ -1575,9 +1610,9 @@ lb_nOK: 'Reset the second-by-second Errors MODdata.ModErrors.ResetAll() - 'OLD and wrong because not time shifted: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnrom) * nnrom * (n(jz) - n(jz - 1))) + 'OLD and wrong because not time shifted: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnrom) * nnrom * (n(jz) - n(jz - 1))) If t > 0 And t < t1 Then - Pmr = 0.001 * (ENG.I_mot * (2 * Math.PI / 60) ^ 2 * MODdata.nU(t) * 0.5 * (MODdata.nU(t + 1) - MODdata.nU(t - 1))) + Pmr = 0.001 * (ENG.I_mot * (2 * Math.PI / 60) ^ 2 * ((MODdata.nU(t + 1) + MODdata.nU(t - 1)) / 2) * 0.5 * (MODdata.nU(t + 1) - MODdata.nU(t - 1))) Else Pmr = 0 End If @@ -1787,10 +1822,10 @@ lb_nOK: nU = fnU(v, Gear, False) Pdrag = FLD(Gear).Pdrag(nU) - 'Do not allow positive road gradients + 'Do not allow positive road gradients Grad = MODdata.Vh.fGrad(s) - + Pwheel = fPwheel(t, v, a, Grad) Pe = Pwheel + fPlossGB(Pwheel, v, Gear, True) + fPlossDiff(Pwheel, v, True) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMotSimple(t, Gear, v, a) @@ -2003,7 +2038,7 @@ lb_nOK: 'Max torque MdMax = Pmax * 1000 / (nU * 2 * Math.PI / 60) - 'Find highest gear with rpm below Upshift-rpm and with enough torque reserve + 'Find highest gear with rpm below Upshift-rpm and with enough torque reserve If nU < nUup And nU > nUdown And 1 - Tq / MdMax >= GBX.gs_TorqueResv / 100 Then Exit For ElseIf nU > nUup And Gear < GBX.GearCount Then @@ -2014,7 +2049,7 @@ lb_nOK: Else - 'Calculate Start Gear + 'Calculate Start Gear For Gear = GBX.GearCount To 1 Step -1 'rpm at StartSpeed [m/s] @@ -2177,7 +2212,7 @@ lb_nOK: If t = 0 OrElse MODdata.VehState(t - 1) = tVehState.Stopped Then Return fStartGear(t, Grad) - '********* Gear Shift Polygon Model ********* + '********* Gear Shift Polygon Model ********* 'Previous normalized engine power LastPeNorm = MODdata.Pe(t - 1) @@ -2190,6 +2225,9 @@ lb_nOK: tx += 1 Loop + 'First time step after stand still + If LastGear = 0 Then Return fStartGear(t, Grad) + nU = CSng(Vact * 60.0 * GBX.Igetr(0) * GBX.Igetr(LastGear) / (2 * VEH.rdyn * Math.PI / 1000)) OutOfRpmRange = ((nU - ENG.Nidle) / (ENG.Nrated - ENG.Nidle) >= 1.2 Or nU < ENG.Nidle) @@ -2229,7 +2267,7 @@ lb_nOK: nnUp = GBX.Shiftpolygons(LastGear).fGSnUup(Tq) nnDown = GBX.Shiftpolygons(LastGear).fGSnUdown(Tq) - 'Compare rpm with Up/Downshift rpms + 'Compare rpm with Up/Downshift rpms If nU <= nnDown And LastGear > 1 Then 'Shift DOWN @@ -2385,7 +2423,7 @@ lb_nOK: lb10: '*** Error-Msg-Check *** - 'Current rpm + 'Current rpm nU = fnU(Vact, Gear, Clutch = tEngClutch.Slipping) 'Current power demand Pe = Math.Min(fPeGearMod(Gear, t, Grad), FLD(Gear).Pfull(nU)) @@ -2526,9 +2564,9 @@ lb10: Public Function fPaMot(ByVal nU As Single, ByVal nUBefore As Single) As Single If GBX.TCon Then - Return ((ENG.I_mot + GBX.TCinertia) * (nU - nUBefore) * 0.01096 * nU) * 0.001 + Return ((ENG.I_mot + GBX.TCinertia) * (nU - nUBefore) * 0.01096 * ((nU + nUBefore) / 2)) * 0.001 Else - Return (ENG.I_mot * (nU - nUBefore) * 0.01096 * nU) * 0.001 + Return (ENG.I_mot * (nU - nUBefore) * 0.01096 * ((nU + nUBefore) / 2)) * 0.001 End If End Function @@ -2542,7 +2580,7 @@ lb10: 'NOTES TO SELF FOR MONDAY 'IF WE HANDLE THE MODEL HERE, THEN WE NEED TO DISCRIMINATE IF TO SINGLE STEP OR NOT BECAUSE WE DONT NEED IT IN PREP - + 'ALSO NEED TO GET VEHICLE MASS AND OTHER THINGS WHEN WE GENERATE THE auxModel in AAUX GLOBAL, DONT HAVE THEM YET 'ENSURE WE ARE ALSO CREATING THIS MODEL IN CYCLE OR AT LEAST CHECK TO SEE IF WE NEED TO, PERHAPS NOT AS POWER @@ -2570,8 +2608,8 @@ lb10: Else try - - mAAUX_Global.advancedAuxModel.Signals.ClutchEngaged = mAAUX_Global.ClutchEngaged + + mAAUX_Global.advancedAuxModel.Signals.ClutchEngaged = mAAUX_Global.ClutchEngaged mAAUX_Global.advancedAuxModel.Signals.EngineDrivelinePower = mAAUX_Global.EngineDrivelinePower mAAUX_Global.advancedAuxModel.Signals.EngineDrivelineTorque =mAAUX_Global.EngineDrivelineTorque mAAUX_Global.advancedAuxModel.Signals.EngineMotoringPower = mAAUX_Global.EngineMotoringPower @@ -2597,7 +2635,7 @@ lb10: End Try Return power - + End If diff --git a/VECTO/MODcalc/cVh.vb b/VECTO/MODcalc/cVh.vb index 49bd8d01dfdd5dc6d3efb2a94bc903e2caf4dd2c..a7b25d09ac0be85b139184a9eb4ce252e0d16021 100644 --- a/VECTO/MODcalc/cVh.vb +++ b/VECTO/MODcalc/cVh.vb @@ -270,7 +270,10 @@ Public Class cVh End If End Sub - Public Sub ReduceSpeed(ByVal t As Integer, ByVal p As Single) + Public Function ReduceSpeed(ByVal t As Integer, ByVal p As Single) As Boolean + + If lV0(t + 1) = 0 Then Return False + lV0(t + 1) *= p lV(t) = (lV0(t + 1) + lV0(t)) / 2 la(t) = lV0(t + 1) - lV0(t) @@ -278,7 +281,10 @@ Public Class cVh lV(t + 1) = (lV0(t + 2) + lV0(t + 1)) / 2 la(t + 1) = lV0(t + 2) - lV0(t + 1) End If - End Sub + + Return True + + End Function Public Sub SetMaxAcc(ByVal t As Integer) diff --git a/VECTO/M_MAIN.vb b/VECTO/M_MAIN.vb index cf5ac31552621e4c2a598d395fbca99273666680..662002205781757e95a690d6964b9446e7aee5d6 100644 --- a/VECTO/M_MAIN.vb +++ b/VECTO/M_MAIN.vb @@ -793,7 +793,7 @@ lbExit: End If 'Must be called after cGBX.ReadFile because cGBX.GearCount is needed - ENG.Init() + If Not ENG.Init() Then Return False 'Must be called after cENG.Init because FLD must be loaded If Cfg.DeclMode Then diff --git a/VECTO/VECTO_Global.vb b/VECTO/VECTO_Global.vb index bc23031d2acee61c31c9fb06ed69eeea9bdf6fd9..1d035281f382306d7bc95b0713b11cff8dee7497 100644 --- a/VECTO/VECTO_Global.vb +++ b/VECTO/VECTO_Global.vb @@ -12,7 +12,7 @@ Imports System.Collections.Generic Module VECTO_Global - Public Const VECTOvers As String = "2.0.4-beta1-AUX.Alpha.3" + Public Const VECTOvers As String = "2.0.4-beta2-AUX.Alpha.3" Public Const LicSigAppCode As String = "VECTO-Release-0093C61E0A2E4BFA9A7ED7E729C56AE4" Public MyAppPath As String Public MyConfPath As String diff --git a/VECTO/cDEV.vb b/VECTO/cDEV.vb index 0fe8d9afad509f982308e1fae40bb916c2f61f71..06525a91e681f73289e2f987e19093231e6bfe30 100644 --- a/VECTO/cDEV.vb +++ b/VECTO/cDEV.vb @@ -21,7 +21,7 @@ Public Class cDEV Public TCnUstep As Single Public TCnUstepMin As Single - + Public AdvFormat As Boolean '************************************************************************************************************** @@ -132,6 +132,10 @@ Public Class cDEV Conf0.SingleVal = 0.01 MyOptions.Add("TCnUstepMin", Conf0) + Conf0 = New cDEVoption(tDEVconfType.tBoolean, "Better output files format") + Conf0.BoolVal = False + MyOptions.Add("AdvFormat", Conf0) + '**************************** END: Parameters Configuration '***************************** '***************************************************************************************** '***************************************************************************************** @@ -145,6 +149,7 @@ Public Class cDEV TCiterPrec = MyOptions("TCiterPrec").SingleVal TCnUstep = MyOptions("TCnUstep").SingleVal TCnUstepMin = MyOptions("TCnUstepMin").SingleVal + AdvFormat = MyOptions("AdvFormat").BoolVal End Sub 'Demo for Delegate Function diff --git a/VECTO/cVSUM.vb b/VECTO/cVSUM.vb index 079dc686c2e92dc2bbcdac01df65e837bdfc1947..b5849d2b5a2a529382e11842ba77405d64f814f2 100644 --- a/VECTO/cVSUM.vb +++ b/VECTO/cVSUM.vb @@ -39,7 +39,27 @@ Class cVSUM First = True For Each key In VSUMentryList If Not First Then s.Append(",") + If DEV.AdvFormat Then + s.Append(VSUMentries(key).Head) + Else s.Append(VSUMentries(key).Head & " " & VSUMentries(key).Unit) + End If + First = False + Next + + Return s.ToString + + End Function + + Public Function VSUMunit() As String + Dim s As New System.Text.StringBuilder + Dim key As String + Dim First As Boolean + + First = True + For Each key In VSUMentryList + If Not First Then s.Append(",") + s.Append(VSUMentries(key).Unit) First = False Next @@ -271,6 +291,15 @@ Class cVSUM Next VSUMentries("\\Eretarder").ValueString = (-sum / 3600) + 'TC Losses + sum = 0 + For t = 0 To t1 + sum += MODdata.PlossTC(t) + Next + VSUMentries("\\Etorqueconv").ValueString = (-sum / 3600) + + + 'Masse, Loading VSUMentries("\\Mass").ValueString = (VEH.Mass + VEH.MassExtra) VSUMentries("\\Loading").ValueString = VEH.Loading @@ -324,7 +353,12 @@ Class cVSUM End Try '*** Header / Units + If DEV.AdvFormat Then + Fvsum.WriteLine("Job,Input File,Cycle," & VSUMhead()) + Fvsum.WriteLine("[-],[-],[-]," & VSUMunit()) + Else Fvsum.WriteLine("Job [-],Input File [-],Cycle [-]," & VSUMhead()) + End If 'Close file (will open after each job) Fvsum.Close() @@ -521,15 +555,11 @@ Class cVSUM ResList = New List(Of Dictionary(Of String, Object)) 'Info - 'Fvsum.WriteLine("VECTO results") - 'Fvsum.WriteLine("VECTO " & VECTOvers) - 'Fvsum.WriteLine(Now.ToString) - 'Fvsum.WriteLine("air density [kg/m3]: " & Cfg.AirDensity) - 'If Cfg.DistCorr Then - ' Fvsum.WriteLine("Distance Correction ON") - 'Else - ' Fvsum.WriteLine("Distance Correction OFF") - 'End If + If DEV.AdvFormat Then + Fvsum.WriteLine("VECTO " & VECTOvers) + Fvsum.WriteLine(Now.ToString) + Fvsum.WriteLine("Input File: " & JobFile) + End If 'Close file (will open after each job) Fvsum.Close() @@ -613,7 +643,10 @@ Class cVSUM ENG0.FilePath = VEC0.PathENG Try - If Not ENG0.ReadFile Then Return False + If Not ENG0.ReadFile Then + WorkerMsg(tMsgID.Err, "File read error! (" & VEC0.PathENG & ")", MsgSrc) + Return False + End If Catch ex As Exception WorkerMsg(tMsgID.Err, "File read error! (" & VEC0.PathENG & ")", MsgSrc) Return False @@ -623,7 +656,10 @@ Class cVSUM MAP0.FilePath = ENG0.PathMAP Try - If Not MAP0.ReadFile(True) Then Return False + If Not MAP0.ReadFile(True) Then + WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc) + Return False + End If Catch ex As Exception WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc) Return False @@ -670,6 +706,7 @@ Class cVSUM AddToVSUM("\\Ebrake", "Ebrake", "[kWh]") AddToVSUM("\\Etransm", "Etransm", "[kWh]") AddToVSUM("\\Eretarder", "Eretarder", "[kWh]") + AddToVSUM("\\Etorqueconv", "Etorqueconv", "[kWh]") AddToVSUM("\\Mass", "Mass", "[kg]") AddToVSUM("\\Loading", "Loading", "[kg]")