From 2498b6a41002a31f440d796062fe1d03447a4e34 Mon Sep 17 00:00:00 2001 From: Raphael Luz <luz@ivt.tugraz.at> Date: Tue, 9 Jun 2015 13:07:00 +0200 Subject: [PATCH] - Updated cross wind correction parameters - Updated gear shift model --- Declaration/VCDV/paramerters.csv | 3 +- VECTO/MODcalc/cPower.vb | 67 ++++++++++++++++---------------- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/Declaration/VCDV/paramerters.csv b/Declaration/VCDV/paramerters.csv index 99ddf04bd3..7a6e9b270e 100644 --- a/Declaration/VCDV/paramerters.csv +++ b/Declaration/VCDV/paramerters.csv @@ -1,5 +1,6 @@ Parameters,a1,a2,a3 RigidSolo,0.013526,0.017746,-0.000666 RigidTrailer,0.017125,0.072275,-0.004148 -TractorSemitrailer,0.030042,0.040817,-0.00213 +TractorSemitrailer,0.034767,0.039367,-0.001897 CoachBus,-0.000794,0.02109,-0.00109 + diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb index a885e9dd08..a195233669 100644 --- a/VECTO/MODcalc/cPower.vb +++ b/VECTO/MODcalc/cPower.vb @@ -1798,6 +1798,7 @@ lb_nOK: Dim nUdown As Single Dim Tq As Single Dim Pe As Single + Dim TqX As Single Dim MdMax As Single Dim Pmax As Single @@ -1847,6 +1848,8 @@ lb_nOK: 'rpm at StartSpeed [m/s] nU = GBX.gs_StartSpeed * 60.0 * GBX.Igetr(0) * GBX.Igetr(Gear) / (2 * VEH.rdyn * Math.PI / 1000) + If nU > FLD(Gear).fnUrated Then Continue For + 'full load Pmax = FLD(Gear).Pfull(nU) @@ -1854,20 +1857,24 @@ lb_nOK: MdMax = Pmax * 1000 / (nU * 2 * Math.PI / 60) 'power demand - Pe = Math.Min(fPeGearMod(Gear, t, GBX.gs_StartSpeed, GBX.gs_StartAcc, Grad), Pmax) - Pe = Math.Max(Pe, FLD(Gear).Pdrag(nU)) + Pe = fPeGearMod(Gear, t, GBX.gs_StartSpeed, GBX.gs_StartAcc, Grad) 'torque demand Tq = Pe * 1000 / (nU * 2 * Math.PI / 60) + 'torque (limited to max) + TqX = Math.Min(Tq, FLD(Gear).Tmax) + 'Up/Downshift rpms - nUup = GBX.Shiftpolygons(Gear).fGSnUup(Tq) - nUdown = GBX.Shiftpolygons(Gear).fGSnUdown(Tq) + nUup = GBX.Shiftpolygons(Gear).fGSnUup(TqX) + nUdown = GBX.Shiftpolygons(Gear).fGSnUdown(TqX) If nU > nUdown And nU >= ENG.Nidle And (1 - Tq / MdMax >= GBX.gs_TorqueResvStart / 100 Or Tq < 0) Then Exit For Next + Gear=1 + End If Return Gear @@ -2036,7 +2043,8 @@ lb_nOK: Dim LastPeNorm As Single Dim tx As Int16 - Dim OutOfRpmRange As Boolean + Dim RpmTooHigh As Boolean + Dim RpmTooLow As Boolean 'First time step OR first time step after stand still If t = 0 OrElse MODdata.VehState(t - 1) = tVehState.Stopped Then Return fStartGear(t, Grad) @@ -2058,47 +2066,40 @@ lb_nOK: '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)) + nU = fnUout(Vact, LastGear) - OutOfRpmRange = ((nU - ENG.Nidle) / (ENG.Nrated - ENG.Nidle) >= 1.2 Or nU < ENG.Nidle) + RpmTooLow = (nU < ENG.Nidle) + RpmTooHigh = ((nU - ENG.Nidle) / (ENG.Nrated - ENG.Nidle) >= 1.2) '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 + If Not (RpmTooHigh Or RpmTooLow) AndAlso t - LastGearChange <= GBX.gs_ShiftTime And t > GBX.gs_ShiftTime - 1 Then Return LastGear 'During start (clutch slipping) no gear shift If LastClutch = tEngClutch.Slipping And VehState0 = tVehState.Acc Then Return LastGear - ''Search for last Gear-change - 'itgangw = 0 - 'For i = t - 1 To 1 Step -1 - ' If MODdata.Gear(i) <> MODdata.Gear(i - 1) Then - ' itgangw = i - ' Exit For - ' End If - 'Next + + If Not (RpmTooHigh Or RpmTooLow) Then - ''Maximum permissible Gear-shifts every 3 seconds: - 'If t - itgangw <= 3 And t > 2 Then - ' Return LastGear '<<< no further checks!!! - 'End If + 'Current rpm with previous gear + nU = fnU(Vact, LastGear, Clutch = tEngClutch.Slipping) - 'Current rpm with previous gear - nU = fnU(Vact, LastGear, Clutch = tEngClutch.Slipping) + 'Current power demand with previous gear + Pe = Math.Min(fPeGearMod(LastGear, t, Grad), FLD(LastGear).Pfull(nU)) + Pe = Math.Max(Pe, FLD(LastGear).Pdrag(nU)) - 'Current power demand with previous gear - Pe = Math.Min(fPeGearMod(LastGear, t, Grad), FLD(LastGear).Pfull(nU)) - Pe = Math.Max(Pe, FLD(LastGear).Pdrag(nU)) + 'Current torque demand with previous gear + Tq = Pe * 1000 / (nU * 2 * Math.PI / 60) + MdMax = FLD(LastGear).Pfull(nU, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60) - 'Current torque demand with previous gear - Tq = Pe * 1000 / (nU * 2 * Math.PI / 60) - MdMax = FLD(LastGear).Pfull(nU, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60) + 'Up/Downshift rpms + nnUp = GBX.Shiftpolygons(LastGear).fGSnUup(Tq) + nnDown = GBX.Shiftpolygons(LastGear).fGSnUdown(Tq) + + End If - 'Up/Downshift rpms - nnUp = GBX.Shiftpolygons(LastGear).fGSnUup(Tq) - nnDown = GBX.Shiftpolygons(LastGear).fGSnUdown(Tq) 'Compare rpm with Up/Downshift rpms - If nU <= nnDown And LastGear > 1 Then + If (RpmTooLow OrElse nU <= nnDown) And LastGear > 1 Then 'Shift DOWN Gear = LastGear - 1 @@ -2144,7 +2145,7 @@ lb_nOK: End If - ElseIf LastGear < GBX.GearCount And nU > nnUp Then + ElseIf (RpmTooHigh OrElse nU > nnUp) And LastGear < GBX.GearCount Then 'Shift UP Gear = LastGear + 1 -- GitLab