diff --git a/CHANGES.md b/CHANGES.md index b20eb772f631c374493b47010b94f1857734a6f0..e79296ce3f29271703647d9b7b252f99b297f120 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,28 @@ ### VECTO x.x (current source) +* Alternative engine inertia power calculation (due to Torque converter calculation) + + + +### VECTO 2.0.1-beta1-hotfix.VECTO-33 +* Fixed VECTO-34 +* Updated .vsum(.json) + * Added l/100km and CO2 results. (Fixed VECTO-33) + * Added FC-Final. + * Added Loading. (json) + * Added missing fuel parameters. (json) +* Updated README.md + +### VECTO 2.0.1-beta1 +* Updated Segment Table header +* Fixed Eco Roll (VECTO-30) +* Fixed Cycles in VECTO Editor being overwritten in Engineering Mode (VECTO-31) + +### VECTO 2.0.1-beta0 +* Update Notes > Release Notes +* Segment Table header + ### VECTO 2.0 * Updated CSV file format. Now only one header with units included. * Changed input file comment symbol form "c" to "#". diff --git a/Declaration/DefaultTC.vtcc b/Declaration/DefaultTC.vtcc new file mode 100644 index 0000000000000000000000000000000000000000..3676a37ec28628517e45e6567f4d9bc516766ca2 --- /dev/null +++ b/Declaration/DefaultTC.vtcc @@ -0,0 +1,12 @@ +nue,mue,MP1000 (1000/rpm)^2*Nm +1.000,1.000,0.00 +1.005,1.000,0.00 +1.100,1.000,-40.34 +1.222,1.000,-80.34 +1.375,1.000,-136.11 +1.571,1.000,-216.52 +1.833,1.000,-335.19 +2.200,1.000,-528.77 +2.750,1.000,-883.40 +4.400,1.000,-2462.17 +11.000,1.000,-16540.98 diff --git a/VECTO/Input Files/cGBX.vb b/VECTO/Input Files/cGBX.vb index 99fdbde0bd8c4a233f13c98039e429d8cb4bae11..49f57f324c1bdb8baa42f04ebbf44bb2c890d7c8 100644 --- a/VECTO/Input Files/cGBX.vb +++ b/VECTO/Input Files/cGBX.vb @@ -62,8 +62,10 @@ Public Class cGBX Public TCnUin As Single Public TC_PeBrake As Single Public TCMout As Single - Public TCnout As Single - Public TCmustReduce As Boolean + Public TCnUout As Single + Public TCReduce As Boolean + Public TCNeutral As Boolean + Private TCnuMax As Single Private MyFileList As List(Of String) @@ -169,7 +171,7 @@ Public Class cGBX dic0.Add("TCactive", IsTCgear(i)) dic0.Add("ShiftPolygon", gs_files(i).PathOrDummy) End If - + ls.Add(dic0) Next dic.Add("Gears", ls) @@ -335,10 +337,12 @@ Public Class cGBX Try Do While Not file.EndOfFile line = file.ReadLine - TCnu.Add(CSng(line(0))) - TCmu.Add(CSng(line(1))) - TCtorque.Add(CSng(line(2))) - TCdim += 1 + If CSng(line(0)) < 1 Then + TCnu.Add(CSng(line(0))) + TCmu.Add(CSng(line(1))) + TCtorque.Add(CSng(line(2))) + TCdim += 1 + End If Loop Catch ex As Exception WorkerMsg(tMsgID.Err, "Error while reading Torque Converter file! (" & ex.Message & ")", MsgSrc) @@ -353,177 +357,226 @@ Public Class cGBX Return False End If + TCnuMax = TCnu(TCdim) + + + 'Add default values for nu>1 + If Not file.OpenRead(MyDeclPath & "DefaultTC.vtcc") Then + WorkerMsg(tMsgID.Err, "Default Torque Converter file not found!", MsgSrc) + Return False + End If + + 'Skip Header + file.ReadLine() + + Try + Do While Not file.EndOfFile + line = file.ReadLine + TCnu.Add(CSng(line(0))) + TCmu.Add(CSng(line(1))) + TCtorque.Add(CSng(line(2))) + TCdim += 1 + Loop + Catch ex As Exception + WorkerMsg(tMsgID.Err, "Error while reading Default Torque Converter file! (" & ex.Message & ")", MsgSrc) + Return False + End Try + + file.Close() + Return True End Function - Public Function TCiteration(ByVal Gear As Integer, ByVal nUout As Single, ByVal PeOut As Single, ByVal t As Integer) As Boolean + Public Function TCiterationV2(ByVal Gear As Integer, ByVal nUout As Single, ByVal PeOut As Single, ByVal t As Integer, Optional ByVal LastnU As Single? = Nothing, Optional ByVal LastPe As Single? = Nothing) As Boolean + + Dim i As Integer + Dim iDim As Integer Dim nUin As Single Dim Mout As Single Dim Min As Single - Dim VZ As Integer - Dim nUstep As Single - Dim lastErr As Single + Dim MinMax As Single + Dim nuStep As Single + Dim nuMin As Single + Dim nuMax As Single Dim nu As Single Dim mu As Single Dim MoutCalc As Single - Dim nUup As Single - Dim nUdown As Single + Dim Paux As Single + Dim PaMot As Single + Dim Pfull As Single + Dim PinMax As Single + + Dim nuList As New List(Of Single) + Dim McalcRatio As New List(Of Single) + + Dim McalcRatMax As Single + Dim ErrMin As Single + Dim iMin As Integer + + Dim Brake As Boolean + Dim FirstDone As Boolean Dim MsgSrc As String MsgSrc = "GBX/TCiteration/t= " & t TC_PeBrake = 0 - TCmustReduce = False + TCReduce = False + nuStep = 0.001 + Brake = False + TCNeutral = False - 'Dim nUmin As Single - 'Dim nUmax As Single 'Power to torque Mout = nPeToM(nUout, PeOut) - 'rpm-limits - 'nUmin = nnormTonU(GBX.fGSnnDown(Mout)) - 'nUmax = nnormTonU(GBX.fGSnnUp(Mout)) - 'Start values: Estimate torque converter state - 'nUin = Math.Min(VEH.nNenn, nUout * 2) - If t = 0 Then - nUin = nUout - Else - nUin = MODdata.nU(t - 1) - End If + 'Set nu boundaries + nuMin = Math.Max(nUout / ENG.Nrated, TCnu(0)) + nuMax = Math.Min(TCnuMax, nUout / ENG.Nidle) - 'If nUin > nUmax Then nUin = nUmax - 'If nUin < nUmin Then nUin = nUmin + If Mout < 0 Then - nu = nUout / nUin - - If nu > TCnu(TCdim) Then - nu = TCnu(TCdim) - nUin = nUout / nu - ElseIf nu < TCnu(0) Then - nu = TCnu(0) - nUin = nUout / nu - End If - - mu = fTCmu(nu) - MoutCalc = fTCtorque(nu, nUin) * mu + 'Speed too low in motoring(check if nu=1 allows enough engine speed) + If nUout < ENG.Nidle Then + TCNeutral = True + Return True + End If - nUstep = DEV.TCnUstep + nu = 1 - If MoutCalc > Mout Then - VZ = -1 Else - VZ = 1 + nu = nuMin End If + FirstDone = False + nu -= nuStep + iDim = -1 + Do While nu + nuStep <= nuMax + 'nu + nu += nuStep - lastErr = 99999 - - 'Iteration - Do While Math.Abs(1 - MoutCalc / Mout) > DEV.TCiterPrec And nUstep > DEV.TCnUstepMin - nUin += VZ * nUstep - nu = nUout / nUin - - If nu > TCnu(TCdim) Or nu < TCnu(0) Then - nUin -= VZ * nUstep - nUstep /= 2 - VZ *= -1 - Continue Do - End If + 'Abort if nu<=0 + If nu <= 0 Then Continue Do + 'mu mu = fTCmu(nu) - Min = Mout / mu - 'Up/Downshift rpms - nUup = GBX.Shiftpolygons(Gear).fGSnUup(Min) - nUdown = GBX.Shiftpolygons(Gear).fGSnUdown(Min) - - 'If nUin > 1.05 * nUup - 0.0001 Then - If nUin > ENG.Nrated - 0.0001 Then - 'nUin = 1.05 * nUup - nUin = ENG.Nrated - nUstep /= 2 - VZ *= -1 - Continue Do - ElseIf nUin < 0.95 * nUdown + 0.0001 Then - nUin = 0.95 * nUdown - nUstep /= 2 - VZ *= -1 - Continue Do - End If + 'Abort if mu<=0 + If mu <= 0 Then Continue Do + 'nIn + nUin = nUout / nu - MoutCalc = fTCtorque(nu, nUin) * mu - If Math.Abs(1 - MoutCalc / Mout) > lastErr Then - nUstep /= 2 - VZ *= -1 + 'MinMax + Paux = MODdata.Px.fPaux(t, Math.Max(nUin, ENG.Nidle)) + If LastnU Is Nothing Then + PaMot = 0 + Else + PaMot = (ENG.I_mot * (nUin - LastnU) * 0.01096 * nUin) * 0.001 End If - lastErr = Math.Abs(1 - MoutCalc / Mout) - Loop - - 'Calc nu again because nUin might have changed - nu = nUout / nUin - - If nUin < ENG.Nidle Then + If LastPe Is Nothing Then + Pfull = FLD(Gear).Pfull(nUin) + Else + Pfull = FLD(Gear).Pfull(nUin, LastPe) + End If + PinMax = 0.999 * (Pfull - Paux - PaMot) + MinMax = nPeToM(nUin, PinMax) - MODdata.ModErrors.TCextrapol = "" + 'Min + Min = Mout / mu - nUin = ENG.Nidle - nu = nUout / nUin + 'Correct Min if too high + If Min > MinMax Then Continue Do - If nu > TCnu(TCdim) Then - nu = TCnu(TCdim) - nUin = nUout / nu - ElseIf nu < TCnu(0) Then + 'Calculated output torque for given mu + MoutCalc = fTCtorque(nu, nUin) * mu - WorkerMsg(tMsgID.Err, "Torque converter creeping not possible with current TC characteristics!", MsgSrc) - Return False + 'Add to lists + nuList.Add(nu) + McalcRatio.Add(MoutCalc / Mout) + iDim += 1 - 'nu = TCnu(0) - 'nUin = nUout / nu + 'Calc smallest error for each mu value + If FirstDone Then + If Math.Abs(1 - McalcRatio(i)) < ErrMin Then + ErrMin = Math.Abs(1 - McalcRatio(i)) + iMin = i + End If + If McalcRatio(i) > McalcRatMax Then McalcRatMax = McalcRatio(i) + Else + FirstDone = True + ErrMin = Math.Abs(1 - McalcRatio(i)) + iMin = i + McalcRatMax = McalcRatio(i) End If - mu = fTCmu(nu) - MoutCalc = fTCtorque(nu, nUin) * mu - - End If + 'Abort if error is small enough + If ErrMin <= DEV.TCiterPrec Then Exit Do + Loop + If iDim = -1 Then + TCReduce = True + Return True + End If - If Math.Abs(1 - MoutCalc / Mout) > DEV.TCiterPrec Then + If ErrMin > DEV.TCiterPrec Then - If MoutCalc < Mout Then + If McalcRatMax >= 1 Then + 'Creeping... + FirstDone = False + For i = 0 To iDim + If McalcRatio(i) > 1 Then + If FirstDone Then + If Math.Abs(1 - McalcRatio(i)) < ErrMin Then + ErrMin = Math.Abs(1 - McalcRatio(i)) + iMin = i + End If + Else + FirstDone = True + ErrMin = Math.Abs(1 - McalcRatio(i)) + iMin = i + End If + End If + Next - If MoutCalc > 0 Then TCmustReduce = True + Brake = True Else - TC_PeBrake = nMtoPe(nUout, Mout - MoutCalc) + If MoutCalc > 0 Then + TCReduce = True + Return True + End If End If End If - TCMin = MoutCalc / mu - TCnUin = nUin + nu = nuList(iMin) + mu = fTCmu(nu) + TCnUin = nUout / nu + TCMout = fTCtorque(nu, TCnUin) * mu + TCMin = TCMout / mu + TCnUout = nUout + + If Brake Then TC_PeBrake = nMtoPe(TCnUout, Mout - TCMout) - TCMout = MoutCalc - TCnout = nUout Return True End Function + Private Function fTCmu(ByVal nu As Single) As Single Dim i As Int32 diff --git a/VECTO/Input Files/cVECTO.vb b/VECTO/Input Files/cVECTO.vb index 2dce015aab15bb50a7550a97086609f87ff2a558..859b4a590d4578dd03e94c19cd86b0e19d715515 100644 --- a/VECTO/Input Files/cVECTO.vb +++ b/VECTO/Input Files/cVECTO.vb @@ -498,7 +498,7 @@ Public Class cVECTO Catch ex As Exception file.Close() - WorkerMsg(tMsgID.Err, "Error in .vacc file. " & ex.Message & " (" & stDesMaxFile.FullPath & ")", MsgSrc) + WorkerMsg(tMsgID.Err, "Error in .vacc file. " & ex.Message & " (" & stDesMaxFile.FullPath & ")", MsgSrc, stDesMaxFile.FullPath) Return False End Try diff --git a/VECTO/Input Files/cVEH.vb b/VECTO/Input Files/cVEH.vb index 7d8b771d4a6cd74d5786bdddfb0bcb26a378613e..505edf03dca892532d5e43af50bf23fb3e174b58 100644 --- a/VECTO/Input Files/cVEH.vb +++ b/VECTO/Input Files/cVEH.vb @@ -494,6 +494,11 @@ Public Class cVEH Return False End If + If rdyn <= 0 Then + WorkerMsg(tMsgID.Err, "rdyn is invalid!", MsgSrc, "<GUI>" & sFilePath) + Return False + End If + RRC = 0 m_red0 = 0 For Each a0 In Axles diff --git a/VECTO/MODcalc/cMOD.vb b/VECTO/MODcalc/cMOD.vb index 0d763dc418ae6a0c41a463fd54c539fe58bf0842..1e1142be562f05cba3ccf25bdafb1f73326792dc 100644 --- a/VECTO/MODcalc/cMOD.vb +++ b/VECTO/MODcalc/cMOD.vb @@ -15,7 +15,6 @@ Public Class cMOD Public Pe As List(Of Single) Public nU As List(Of Single) Public nUvorg As List(Of Single) - Public dnUvorg As List(Of Single) Public tDim As Integer Public tDimOgl As Integer Public Px As cPower @@ -167,7 +166,6 @@ Public Class cMOD If DRI.Nvorg Then nUvorg.Insert(t, nUvorg(t)) - dnUvorg.Insert(t, dnUvorg(t)) End If If DRI.AuxDef Then @@ -183,7 +181,6 @@ Public Class cMOD If DRI.Nvorg Then nUvorg.RemoveAt(t) - dnUvorg.RemoveAt(t) End If If DRI.AuxDef Then @@ -224,7 +221,6 @@ Public Class cMOD If DRI.Nvorg Then MODdata.nUvorg = New List(Of Single) - MODdata.dnUvorg = New List(Of Single) L = DRI.Values(tDriComp.nU) @@ -233,11 +229,6 @@ Public Class cMOD MODdata.nUvorg.Add(((L(s + 1) + L(s)) / 2)) Next - 'Angular acceleration - For s = 0 To tDim - MODdata.dnUvorg.Add(L(s + 1) - L(s)) - Next - End If 'Specify average Aux and Aux-lists, when Aux present in DRI and VEH @@ -282,7 +273,6 @@ Public Class cMOD If DRI.Nvorg Then MODdata.nUvorg = New List(Of Single) - MODdata.dnUvorg = New List(Of Single) L = DRI.Values(tDriComp.nU) @@ -291,13 +281,6 @@ Public Class cMOD MODdata.nUvorg.Add(L(s)) Next - 'Angular acceleration - MODdata.dnUvorg.Add(L(1) - L(0)) - For s = 1 To MODdata.tDim - 1 - MODdata.dnUvorg.Add((L(s + 1) - L(s - 1)) / 2) - Next - MODdata.dnUvorg.Add(L(MODdata.tDim) - L(MODdata.tDim - 1)) - End If End Sub diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb index 24b0c2997a7de0ef2c0f51602891aaea50eeb18c..53efc2745f093afe4919377c3ddf08a1eaea9665 100644 --- a/VECTO/MODcalc/cPower.vb +++ b/VECTO/MODcalc/cPower.vb @@ -75,6 +75,7 @@ Public Class cPower Dim ProgBarShare As Int16 Dim ProgBarLACpart As Int16 Dim dist As New List(Of Double) + Dim LastnU As Single = 0 Dim MsgSrc As String @@ -178,22 +179,36 @@ Public Class cPower 'Gear If VehState0 = tVehState.Stopped Then Gear = 0 + + 'Engine Speed + If Nvorg Then + nU = MODdata.nUvorg(i) + Else + nU = ENG.Nidle + End If + Else + If Gvorg Then Gear = Math.Min(Vh.GearVorg(i), GBX.GearCount) Else Gear = fFastGearCalc(Vist, Pwheel) End If + + 'Engine Speed + If Nvorg Then + nU = MODdata.nUvorg(i) + Else + nU = fnU(Vist, Gear, False) + End If + End If - 'Engine Speed 'ICE-inertia - If Nvorg Then - nU = MODdata.nUvorg(i) - PaMot = (ENG.I_mot * MODdata.dnUvorg(i) * 0.01096 * MODdata.nUvorg(i)) * 0.001 + If i = 0 Then + PaMot = 0 Else - nU = fnU(Vist, Gear, False) - PaMot = ((ENG.I_mot * (GBX.Igetr(0) * GBX.Igetr(Gear) / (VEH.rdyn / 1000)) ^ 2) * aist * Vist) * 0.001 + PaMot = (ENG.I_mot * (nU - LastnU) * 0.01096 * nU) * 0.001 End If 'Aux Demand @@ -310,6 +325,7 @@ Public Class cPower End If + LastnU = nU Gears.Add(Gear) @@ -639,15 +655,6 @@ 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 Vist > MODdata.Vh.Vsoll(jz) - VEC.UnderSpeed / 3.6 AndAlso Not VehState0 = tVehState.Stopped AndAlso Pplus Then - - - - - ' If Declaration.CurrentMission.MissionID = tMission.RegionalDelivery And Declaration.CurrentLoading = tLoading.FullLoaded Then Stop - - - - Vh.ReduceSpeed(jz, 0.9999) FirstSecItar = False GoTo lbGschw @@ -851,12 +858,25 @@ lbCheck: PaGetr = fPaG(Vist, aist) Pkup = Pwheel + PlossGB + PlossDiff + PaGetr + PlossRt - If Not GBX.TCiteration(Gear, fnUout(Vist, Gear), Pkup, jz) Then - WorkerMsg(tMsgID.Err, "TC Iteration failed!", MsgSrc & "/t= " & jz + 1) - Return False + If jz = 0 Then + If Not GBX.TCiterationV2(Gear, fnUout(Vist, Gear), Pkup, jz) Then + WorkerMsg(tMsgID.Err, "TC Iteration failed!", MsgSrc & "/t= " & jz + 1) + Return False + End If + Else + If Not GBX.TCiterationV2(Gear, fnUout(Vist, Gear), Pkup, jz, MODdata.nU(jz - 1), MODdata.Pe(jz - 1)) Then + WorkerMsg(tMsgID.Err, "TC Iteration failed!", MsgSrc & "/t= " & jz + 1) + Return False + End If End If - If GBX.TCmustReduce Then + If GBX.TCNeutral Then + Gear = 0 + Clutch = tEngClutch.Opened + GoTo lbCheck + End If + + If GBX.TCReduce Then Vh.ReduceSpeed(jz, 0.999) FirstSecItar = False GoTo lbGschw @@ -870,8 +890,8 @@ lbCheck: '*** Start: Revolutions Check - 'Check whether Revolutions too high! => Upshift - Do While nU > 1.2 * (ENG.Nrated - ENG.Nidle) + ENG.Nidle And Gear < GBX.GearCount + 'Check whether Revolutions too high! => Speed Reduction + Do While nU > 1.2 * (ENG.Nrated - ENG.Nidle) + ENG.Nidle Gear += 1 nU = fnU(Vist, Gear, Clutch = tEngClutch.Slipping) Loop @@ -901,21 +921,15 @@ lb_nOK: Paux = fPaux(jz, Math.Max(nU, ENG.Nidle)) 'ICE-inertia - If Clutch = tEngClutch.Opened Then - If jz = 0 Then - PaMot = 0 - Else - 'Not optimal since jz-1 to jz not the right interval - PaMot = (ENG.I_mot * (nU - MODdata.nU(jz - 1)) * 0.01096 * nU) * 0.001 - End If + If jz = 0 Then + PaMot = 0 Else - If Nvorg Then - PaMot = (ENG.I_mot * MODdata.dnUvorg(jz) * 0.01096 * MODdata.nUvorg(jz)) * 0.001 - Else - PaMot = ((ENG.I_mot * (GBX.Igetr(0) * GBX.Igetr(Gear) / (VEH.rdyn / 1000)) ^ 2) * aist * Vist) * 0.001 - End If + 'Not optimal since jz-1 to jz not the right interval + PaMot = (ENG.I_mot * (nU - MODdata.nU(jz - 1)) * 0.01096 * nU) * 0.001 End If + + 'Total Engine-power ' => Pantr ' => P @@ -1202,7 +1216,7 @@ lb_nOK: If nU = 0 Then MODdata.TCnu.Add(0) Else - MODdata.TCnu.Add(GBX.TCnout / nU) + MODdata.TCnu.Add(GBX.TCnUout / nU) End If If GBX.TCMin = 0 Then MODdata.TCmu.Add(0) @@ -1210,7 +1224,7 @@ lb_nOK: MODdata.TCmu.Add(GBX.TCMout / GBX.TCMin) End If MODdata.TCMout.Add(GBX.TCMout) - MODdata.TCnOut.Add(GBX.TCnout) + MODdata.TCnOut.Add(GBX.TCnUout) Else If Clutch = tEngClutch.Opened Then MODdata.TCnu.Add(0) @@ -1568,7 +1582,7 @@ lb_nOK: PvD = fPwheel(t, v, a, Grad) - Pe = PvD + fPlossGB(PvD, v, Gear, True) + fPlossDiff(PvD, v, True) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMot(t, Gear, v, a) + Pe = PvD + fPlossGB(PvD, v, Gear, True) + fPlossDiff(PvD, v, True) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMotSimple(t, Gear, v, a) Diff = Math.Abs(Pdrag - Pe) @@ -1604,7 +1618,7 @@ lb_nOK: LastDiff = Diff PvD = fPwheel(t, v, a, Grad) - Pe = PvD + fPlossGB(PvD, v, Gear, True) + fPlossDiff(PvD, v, True) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMot(t, Gear, v, a) + Pe = PvD + fPlossGB(PvD, v, Gear, True) + fPlossDiff(PvD, v, True) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMotSimple(t, Gear, v, a) Diff = Math.Abs(Pdrag - Pe) @@ -1614,7 +1628,6 @@ lb_nOK: End Function - Private Function fCoastingSpeed(ByVal t As Integer, ByVal s As Double, ByVal Gear As Integer, ByVal dt As Integer) As Single Dim a As Single Dim v As Single @@ -1691,6 +1704,8 @@ lb_nOK: MsgSrc = "StartGear" + If GBX.TCon Then Return 1 + If t = 0 AndAlso VehState0 <> tVehState.Stopped Then 'Calculate gear when cycle starts with speed > 0 @@ -1769,9 +1784,12 @@ lb_nOK: Dim nUdown As Single Dim Md As Single Dim Pe As Single + Dim nUnext As Single Dim OutOfRpmRange As Boolean + Dim PlusGearLockUp As Boolean + Dim MinusGearTC As Boolean - 'First time step OR first time step after stand still + 'First time step (for vehicles with TC always the first gear is used) If t = 0 Then Return fStartGear(0, Grad) If MODdata.VehState(t - 1) = tVehState.Stopped Then Return 1 @@ -1787,17 +1805,39 @@ lb_nOK: 'If idling (but no vehicle stop...?) then If LastGear = 0 Then Return 1 - 'If lockup-clutch already closed then goto normal shift model - If Not GBX.IsTCgear(LastGear) Then Return fGearVECTO(t, Grad) + If LastGear < GBX.GearCount Then + PlusGearLockUp = Not GBX.IsTCgear(LastGear + 1) + Else + PlusGearLockUp = False + End If + + If LastGear > 1 Then + MinusGearTC = GBX.IsTCgear(LastGear - 1) + Else + MinusGearTC = False + End If 'Rpm nU = MODdata.nU(t - 1) - OutOfRpmRange = (nU >= 1.2 * (ENG.Nrated - ENG.Nidle) + ENG.Nidle Or nU < ENG.Nidle) + If LastGear < GBX.GearCount AndAlso Not GBX.IsTCgear(LastGear + 1) Then + nUnext = Vist * 60.0 * GBX.Igetr(0) * GBX.Igetr(LastGear + 1) / (2 * VEH.rdyn * Math.PI / 1000) + Else + nUnext = 0 + End If - 'No gear change 3s after last one -except rpm out of range - If Not OutOfRpmRange AndAlso t - LastGearChange <= GBX.gs_ShiftTime And t > GBX.gs_ShiftTime - 1 Then Return LastGear + OutOfRpmRange = (nU >= 1.2 * (ENG.Nrated - ENG.Nidle) + ENG.Nidle) + If MinusGearTC Then + If Vist * 60.0 * GBX.Igetr(0) * GBX.Igetr(LastGear) / (2 * VEH.rdyn * Math.PI / 1000) <= ENG.Nidle Then + Return LastGear - 1 + End If + End If + + 'No gear change 3s after last one -except rpm out of range + If Not PlusGearLockUp Then + If Not OutOfRpmRange AndAlso t - LastGearChange <= GBX.gs_ShiftTime And t > GBX.gs_ShiftTime - 1 Then Return LastGear + End If 'previous power demand @@ -1810,21 +1850,31 @@ lb_nOK: nUup = GBX.Shiftpolygons(LastGear).fGSnUup(Md) nUdown = GBX.Shiftpolygons(LastGear).fGSnUdown(Md) - If nU > nUup Then - - If fnn(Vist, LastGear + 1, False) > nUdown Then + 'Upshift + If PlusGearLockUp Then + If nUnext > nUup AndAlso Pe <= FLD(LastGear + 1).Pfull(nUnext) Then Return LastGear + 1 - Else - Return LastGear End If + Else + 'TODO: 1C > 2C + End If + - ElseIf nU < nUdown Then - Return LastGear - 1 + 'Downshift + If MinusGearTC Then + If nU < ENG.Nidle Then + Return LastGear - 1 + End If Else - Return LastGear + If nU < nUdown Then + Return LastGear - 1 + End If End If + + Return LastGear + End Function Private Function fGearVECTO(ByVal t As Integer, ByVal Grad As Single) As Integer @@ -2096,12 +2146,14 @@ lb10: nU = fnU(V, Gear, False) - If Nvorg Then - 'Drehzahlvorgabe - PaM = (ENG.I_mot * MODdata.dnUvorg(t) * 0.01096 * MODdata.nUvorg(t)) * 0.001 + If t = 0 Then + PaM = 0 Else - PaM = ((ENG.I_mot * (GBX.Igetr(0) * GBX.Igetr(Gear) / (VEH.rdyn / 1000)) ^ 2) * a * V) * 0.001 + PaM = (ENG.I_mot * (nU - MODdata.nU(t - 1)) * 0.01096 * nU) * 0.001 End If + + + If Clutch = tEngClutch.Closed Then Return (PvD + fPlossGB(PvD, V, Gear, True) + fPlossDiff(PvD, V, True) + fPaG(V, a) + fPaux(t, nU) + PaM) Else 'Clutch = tEngClutch.Slipping @@ -2188,12 +2240,8 @@ lb10: Return CSng(((VEH.Mass + VEH.MassExtra + VEH.m_red + VEH.Loading) * a * v) * 0.001) End Function - Private Function fPaMot(ByVal t As Integer, ByVal Gear As Integer, ByVal v As Single, ByVal a As Single) As Single - If Nvorg Then - Return (ENG.I_mot * MODdata.dnUvorg(t) * 0.01096 * MODdata.nUvorg(t)) * 0.001 - Else - Return ((ENG.I_mot * (GBX.Igetr(0) * GBX.Igetr(Gear) / (VEH.rdyn / 1000)) ^ 2) * a * v) * 0.001 - End If + Private Function fPaMotSimple(ByVal t As Integer, ByVal Gear As Integer, ByVal v As Single, ByVal a As Single) As Single + Return ((ENG.I_mot * (GBX.Igetr(0) * GBX.Igetr(Gear) / (VEH.rdyn / 1000)) ^ 2) * a * v) * 0.001 End Function '----------------Slope resistance ---------------- @@ -2202,7 +2250,7 @@ lb10: End Function '----------------Ancillaries(Nebenaggregate) ---------------- - Private Function fPaux(ByVal t As Integer, ByVal nU As Single) As Single + Public Function fPaux(ByVal t As Integer, ByVal nU As Single) As Single Return CSng(MODdata.Vh.Padd(t) + VEC.PauxSum(t, nU)) End Function diff --git a/VECTO/VECTO_Global.vb b/VECTO/VECTO_Global.vb index b85778fbe41df2aa5756bcd9cd0778d24073bc8d..74c31d86c7ff5ea5ecb1d42b097966f8eb3420f3 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.1-beta1-hotfix.VECTO-33" + Public Const VECTOvers As String = "2.0.2-beta1" Public Const LicSigAppCode As String = "VECTO-Release-0093C61E0A2E4BFA9A7ED7E729C56AE4" Public MyAppPath As String Public MyConfPath As String diff --git a/VECTO/cVSUM.vb b/VECTO/cVSUM.vb index 002c77a92f59b01ea23737434f9976ce605cee55..73491b6619430e586591bc23b4473bd82a79f039 100644 --- a/VECTO/cVSUM.vb +++ b/VECTO/cVSUM.vb @@ -598,7 +598,7 @@ Class cVSUM MAP0.FilePath = ENG0.PathMAP Try - If Not MAP0.ReadFile(False) Then Return False 'Fehlermeldungen werden auch bei "MsgOutput = False" ausgegeben + If Not MAP0.ReadFile(True) Then Return False Catch ex As Exception WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc) Return False