From 711ff9e35f8e632c8262c7b2436738fa85d11715 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Wed, 10 May 2017 13:56:21 +0200 Subject: [PATCH] remove 'old' gearbox maxTorque limitation, add gbx. max speed limitation --- VECTO/GUI/GearboxGearDialog.vb | 4 +-- .../DeclarationDataAdapter.cs | 2 +- .../EngineeringDataAdapter.cs | 2 +- .../Models/Simulation/Data/VectoRunData.cs | 4 --- .../Models/Simulation/DataBus/IGearboxInfo.cs | 2 -- .../Simulation/Impl/VehicleContainer.cs | 5 ---- .../Data/Gearbox/GearData.cs | 2 +- .../Impl/AMTShiftStrategy.cs | 2 +- .../Impl/ATShiftStrategy.cs | 13 +++++----- .../Impl/AbstractGearbox.cs | 5 ---- .../Impl/CombustionEngine.cs | 25 ++++++------------- .../SimulationComponent/Impl/Gearbox.cs | 4 --- .../SimulationRuns/FullPowertrain.cs | 3 +-- .../Simulation/LossMapRangeValidationTest.cs | 16 ++++++------ .../Models/SimulationComponent/GearboxTest.cs | 2 +- 15 files changed, 29 insertions(+), 62 deletions(-) diff --git a/VECTO/GUI/GearboxGearDialog.vb b/VECTO/GUI/GearboxGearDialog.vb index e4b2381f3d..c3f8789340 100644 --- a/VECTO/GUI/GearboxGearDialog.vb +++ b/VECTO/GUI/GearboxGearDialog.vb @@ -68,9 +68,7 @@ Public Class GearboxGearDialog Dim gearData As GearData = New GearData() With { .Ratio = TbRatio.Text.ToDouble(0), .LossMap = lossmap, - .ShiftPolygon = shiftPolygon, - .MaxTorque = - If(String.IsNullOrWhiteSpace(TbMaxTorque.Text), Nothing, TbMaxTorque.Text.ToDouble().SI(Of NewtonMeter)) + .ShiftPolygon = shiftPolygon } Dim results As IList(Of ValidationResult) = gearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), GearboxType, False) diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index 62edaf670a..5ec459f13e 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -220,7 +220,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter new GearData { LossMap = gearLossMap, ShiftPolygon = shiftPolygon, - MaxTorque = gear.MaxTorque, + MaxSpeed = gear.MaxInputSpeed, Ratio = gear.Ratio, }); }).ToDictionary(kv => kv.Key, kv => kv.Value); diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index 149aaf79ed..9f6a5c08f2 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -188,7 +188,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter dynamicTyreRadius); var gearData = new GearData { ShiftPolygon = shiftPolygon, - MaxTorque = gear.MaxTorque, + MaxSpeed = gear.MaxInputSpeed, Ratio = gear.Ratio, LossMap = lossMap, }; diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index 45554f3d5e..b56c36fd50 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -150,10 +150,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Data for (var inTorque = engineData.FullLoadCurve.FullLoadStationaryTorque(angularVelocity) / 3; inTorque < engineData.FullLoadCurve.FullLoadStationaryTorque(angularVelocity); inTorque += 2.0 / 3.0 * engineData.FullLoadCurve.FullLoadStationaryTorque(angularVelocity) / 10.0) { - if (gear.Value.MaxTorque != null && inTorque > gear.Value.MaxTorque) { - continue; - } - NewtonMeter angledriveTorque; try { angledriveTorque = gear.Value.LossMap.GetOutTorque(angularVelocity, inTorque); diff --git a/VectoCore/VectoCore/Models/Simulation/DataBus/IGearboxInfo.cs b/VectoCore/VectoCore/Models/Simulation/DataBus/IGearboxInfo.cs index d50bab2bdd..4781b613aa 100644 --- a/VectoCore/VectoCore/Models/Simulation/DataBus/IGearboxInfo.cs +++ b/VectoCore/VectoCore/Models/Simulation/DataBus/IGearboxInfo.cs @@ -53,8 +53,6 @@ namespace TUGraz.VectoCore.Models.Simulation.DataBus MeterPerSquareSecond StartAcceleration { get; } - NewtonMeter GearMaxTorque { get; } - Watt GearboxLoss(); Second LastShift { get; } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs index cb1f4ecb75..17a34bbcf6 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs @@ -116,11 +116,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl } } - public NewtonMeter GearMaxTorque - { - get { return Gearbox != null ? Gearbox.GearMaxTorque : null; } - } - public Watt GearboxLoss() { return Gearbox.GearboxLoss(); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs index 2f0f733297..2dfc3f7668 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs @@ -70,7 +70,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox public TransmissionLossMap TorqueConverterGearLossMap { get; internal set; } - public NewtonMeter MaxTorque { get; internal set; } + public PerSecond MaxSpeed { get; internal set; } public ShiftPolygon TorqueConverterShiftPolygon { get; set; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs index 92b0c3d694..55e58e1d61 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AMTShiftStrategy.cs @@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl private bool SpeedTooHighForEngine(uint gear, PerSecond outAngularSpeed) { return - (outAngularSpeed * ModelData.Gears[gear].Ratio).IsGreaterOrEqual(DataBus.EngineN95hSpeed); + (outAngularSpeed * ModelData.Gears[gear].Ratio).IsGreaterOrEqual(ModelData.Gears[gear].MaxSpeed ?? DataBus.EngineN95hSpeed); } public override GearInfo NextGear diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs index db37ce5e6c..3b0feaae82 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs @@ -47,8 +47,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public override IGearbox Gearbox { get { return _gearbox; } - set - { + set { _gearbox = value as ATGearbox; if (_gearbox == null) { throw new VectoException("AT Shift strategy can only handle AT gearboxes, given: {0}", value.GetType()); @@ -135,7 +134,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl // 3) 1C -> 0: disengange when negative T_out and positive T_in var gear1C = gear == 1 && !_gearbox.TorqueConverterLocked; - var disengageTOutNegativeAndTInPositive = DataBus.DriverAcceleration <= 0 && gear1C && outTorque.IsSmaller(0) && inTorque.IsGreater(0); + var disengageTOutNegativeAndTInPositive = DataBus.DriverAcceleration <= 0 && gear1C && outTorque.IsSmaller(0) && + inTorque.IsGreater(0); var disengageTCEngineSpeedLowerIdle = braking && torqueNegative && gear1C && inAngularVelocity.IsSmallerOrEqual(DataBus.EngineIdleSpeed); @@ -154,12 +154,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return true; } // Emergency Upshift: if higher than engine rated speed - if (inAngularVelocity.IsGreaterOrEqual(DataBus.EngineRatedSpeed)) { + if (inAngularVelocity.IsGreaterOrEqual(ModelData.Gears[gear].MaxSpeed ?? DataBus.EngineRatedSpeed)) { // check if upshift is possible if (!ModelData.Gears.ContainsKey(gear + 1)) { return false; } - Log.Debug("engine speed would be above rated speed - shift up"); + Log.Debug("engine speed would be above max speed / rated speed - shift up"); Upshift(absTime, gear); return true; } @@ -184,8 +184,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl NewtonMeter inTorque, PerSecond inAngularVelocity, uint gear, Second lastShiftTime) { var shiftTimeReached = (absTime - lastShiftTime).IsGreaterOrEqual(ModelData.ShiftTime); - if (!shiftTimeReached) + if (!shiftTimeReached) { return false; + } var currentGear = ModelData.Gears[gear]; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs index c3c2fb3477..c1194b4181 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs @@ -95,11 +95,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl get { return ModelData.StartAcceleration; } } - public NewtonMeter GearMaxTorque - { - get { return Gear == 0 || !ModelData.Gears.ContainsKey(Gear) ? null : ModelData.Gears[Gear].MaxTorque; } - } - public Watt GearboxLoss() { var ratio = ModelData.Gears[PreviousState.Gear].HasLockedGear diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs index e35060782f..7d58da8dc8 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs @@ -206,11 +206,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl //ValidatePowerDemand(totalTorqueDemand, dynamicFullLoadTorque, fullDragTorque); // get max. torque as limited by gearbox. gearbox only limits torqueOut! - var gearboxFullLoad = DataBus.GearMaxTorque; - var deltaFull = ComputeDelta(torqueOut, totalTorqueDemand, dynamicFullLoadTorque, gearboxFullLoad, true); - var deltaDrag = ComputeDelta(torqueOut, totalTorqueDemand, fullDragTorque, - gearboxFullLoad != null ? -gearboxFullLoad : null, false); + var deltaFull = totalTorqueDemand - dynamicFullLoadTorque; + //ComputeDelta(torqueOut, totalTorqueDemand, dynamicFullLoadTorque, gearboxFullLoad, true); + var deltaDrag = totalTorqueDemand - fullDragTorque; //ComputeDelta(torqueOut, totalTorqueDemand, fullDragTorque, + //gearboxFullLoad != null ? -gearboxFullLoad : null, false); if (dryRun) { return new ResponseDryRun { @@ -231,8 +231,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl CurrentState.DynamicFullLoadTorque = dynamicFullLoadTorque; CurrentState.InertiaTorqueLoss = inertiaTorqueLoss; - if ( - (deltaFull * avgEngineSpeed).IsGreater(0.SI<Watt>(), Constants.SimulationSettings.LineSearchTolerance) && + if ((deltaFull * avgEngineSpeed).IsGreater(0.SI<Watt>(), Constants.SimulationSettings.LineSearchTolerance) && (deltaDrag * avgEngineSpeed).IsSmaller(0.SI<Watt>(), Constants.SimulationSettings.LineSearchTolerance)) { //throw new VectoSimulationException( Log.Error( @@ -242,10 +241,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl var minTorque = CurrentState.FullDragTorque; var maxTorque = CurrentState.DynamicFullLoadTorque; - if (gearboxFullLoad != null) { - minTorque = VectoMath.Max(minTorque, -gearboxFullLoad); - maxTorque = VectoMath.Min(maxTorque, gearboxFullLoad); - } CurrentState.EngineTorque = totalTorqueDemand.LimitTo(minTorque, maxTorque); CurrentState.EnginePower = CurrentState.EngineTorque * avgEngineSpeed; @@ -292,16 +287,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl }; } - private NewtonMeter ComputeDelta(NewtonMeter torqueOut, NewtonMeter totalTorqueDemand, NewtonMeter maxEngineTorque, - NewtonMeter maxGbxtorque, bool motoring) + private NewtonMeter ComputeDelta(NewtonMeter torqueOut, NewtonMeter totalTorqueDemand, NewtonMeter maxEngineTorque) { - var deltaGbx = maxGbxtorque != null ? torqueOut - maxGbxtorque : null; var deltaEngine = totalTorqueDemand - maxEngineTorque; - - if (deltaGbx == null) { - return deltaEngine; - } - return motoring ? VectoMath.Max(deltaGbx, deltaEngine) : VectoMath.Min(deltaGbx, deltaEngine); + return deltaEngine; } public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs index ca7fb234f0..e93fb37e67 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs @@ -138,10 +138,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl // Default(r => { throw new UnexpectedResponseException("Gearbox.Initialize", r); }); var fullLoad = DataBus.EngineStationaryFullPower(inAngularVelocity); - if (ModelData.Gears[gear].MaxTorque != null) { - var fullLoadGearbox = ModelData.Gears[gear].MaxTorque * inAngularVelocity; - fullLoad = VectoMath.Min(fullLoadGearbox, fullLoad); - } return new ResponseDryRun { Source = this, diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs index 2cd72e1fb4..3e8fa4dce3 100644 --- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs +++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs @@ -316,7 +316,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns Gears = ratios.Select((ratio, i) => Tuple.Create((uint)i, new GearData { - MaxTorque = ratio > 5 ? 2300.SI<NewtonMeter>() : null, +// MaxTorque = ratio > 5 ? 2300.SI<NewtonMeter>() : null, LossMap = TransmissionLossMapReader.ReadFromFile(GearboxLossMap, ratio, string.Format("Gear {0}", i)), Ratio = ratio, ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile) @@ -353,7 +353,6 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns Gears = new Dictionary<uint, GearData> { { 1, new GearData { - MaxTorque = null, LossMap = TransmissionLossMapReader.ReadFromFile(GearboxLossMap, ratio, "Gear 1"), Ratio = ratio, ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile) diff --git a/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs index 7b07eea317..26dc14cd50 100644 --- a/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs +++ b/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs @@ -185,14 +185,14 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation var ratios = new[] { 14.93, 11.64, 9.02, 7.04, 5.64, 4.4, 3.39, 2.65, 2.05, 1.6, 1.28, 1.0 }; return new GearboxData { Gears = ratios.Select((ratio, i) => - Tuple.Create((uint)i, - new GearData { - MaxTorque = 2300.SI<NewtonMeter>(), - LossMap = TransmissionLossMapReader.ReadFromFile(!ratio.IsEqual(1.0) ? directlossMap : indirectLossMap, ratio, - string.Format("Gear {0}", i)), - Ratio = ratio, - ShiftPolygon = ShiftPolygonReader.ReadFromFile(ShiftPolygonFile) - })) + Tuple.Create((uint)i, + new GearData { +// MaxTorque = 2300.SI<NewtonMeter>(), + LossMap = TransmissionLossMapReader.ReadFromFile(!ratio.IsEqual(1.0) ? directlossMap : indirectLossMap, ratio, + string.Format("Gear {0}", i)), + Ratio = ratio, + ShiftPolygon = ShiftPolygonReader.ReadFromFile(ShiftPolygonFile) + })) .ToDictionary(k => k.Item1 + 1, v => v.Item2) }; } diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs index 94482431b6..21edf9ef5d 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs @@ -87,7 +87,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent Gears = ratios.Select((ratio, i) => Tuple.Create((uint)i, new GearData { - MaxTorque = 2300.SI<NewtonMeter>(), +// MaxTorque = 2300.SI<NewtonMeter>(), LossMap = TransmissionLossMapReader.ReadFromFile(i != 6 ? IndirectLossMap : DirectLossMap, ratio, string.Format("Gear {0}", i)), Ratio = ratio, -- GitLab