From 70cdf78c65d3f46f55043d24d33f40fd9aec8fce Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <quaritsch@ivt.tugraz.at> Date: Wed, 18 Jan 2023 08:29:18 +0100 Subject: [PATCH] remove initialize method in gearbox that takes a gear as argument and issues a dry-run request with a different gear. this approach caused errors because the internal 'previous state' of components might be modified. instead, a separate simple test-powertrain is used to calculate the necessary values without altering the state of the actual powertrain --- .../SimulationComponent/Impl/APTNGearbox.cs | 34 ---------- .../SimulationComponent/Impl/Gearbox.cs | 58 ----------------- .../Impl/HybridController.cs | 62 +++++++++++++++++-- .../SimulationComponent/Impl/PEVGearbox.cs | 36 ----------- .../Impl/Shiftstrategies/AMTShiftStrategy.cs | 33 +++++++++- .../Shiftstrategies/PEVAMTShiftStrategy.cs | 40 +++++++++--- 6 files changed, 119 insertions(+), 144 deletions(-) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/APTNGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/APTNGearbox.cs index fd345f22f0..e2b03d87e9 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/APTNGearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/APTNGearbox.cs @@ -53,39 +53,5 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return response; } - protected internal override ResponseDryRun Initialize(Second absTime, GearshiftPosition gear, - NewtonMeter outTorque, PerSecond outAngularVelocity) - { - var oldGear = Gear; - Gear = gear; - var inAngularVelocity = outAngularVelocity * ModelData.Gears[gear.Gear].Ratio; - var torqueLossResult = ModelData.Gears[gear.Gear].LossMap.GetTorqueLoss(outAngularVelocity, outTorque); - CurrentState.TorqueLossResult = torqueLossResult; - var inTorque = outTorque / ModelData.Gears[gear.Gear].Ratio + torqueLossResult.Value; - - if (!inAngularVelocity.IsEqual(0)) { - var alpha = ModelData.Inertia.IsEqual(0) ? 0.SI<PerSquareSecond>() : outTorque / ModelData.Inertia; - var inertiaPowerLoss = Formulas.InertiaPower(inAngularVelocity, alpha, ModelData.Inertia, Constants.SimulationSettings.TargetTimeInterval); - inTorque += inertiaPowerLoss / inAngularVelocity; - } - - var response = NextComponent.Request(absTime, Constants.SimulationSettings.TargetTimeInterval, inTorque, inAngularVelocity, true); - - var eMotor = DataBus.ElectricMotorInfo(DataBus.PowertrainInfo.ElectricMotorPositions[0]); - var fullLoad = -eMotor.MaxPowerDrive(DataBus.BatteryInfo.InternalVoltage, inAngularVelocity, gear); - - Gear = oldGear; - return new ResponseDryRun(this, response) { - ElectricMotor = { PowerRequest = response.ElectricMotor.PowerRequest }, - Gearbox = { - PowerRequest = outTorque * outAngularVelocity, - InputSpeed = inAngularVelocity, - InputTorque = inTorque, - OutputTorque = outTorque, - OutputSpeed = outAngularVelocity, - }, - DeltaFullLoad = response.ElectricMotor.PowerRequest - fullLoad - }; - } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs index dce15f1907..fdba784629 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs @@ -135,64 +135,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public override bool TCLocked => true; - protected internal virtual ResponseDryRun Initialize(Second absTime, GearshiftPosition gear, NewtonMeter outTorque, PerSecond outAngularVelocity) - { - var oldGear = Gear; - Gear = gear; - var inAngularVelocity = outAngularVelocity * ModelData.Gears[gear.Gear].Ratio; - var torqueLossResult = ModelData.Gears[gear.Gear].LossMap.GetTorqueLoss(outAngularVelocity, outTorque); - - CurrentState.TorqueLossResult = torqueLossResult; - var inTorque = outTorque / ModelData.Gears[gear.Gear].Ratio + torqueLossResult.Value; - - if (DataBus.PowertrainInfo.ElectricMotorPositions.Any(x => x.IsOneOf(PowertrainPosition.HybridP2, PowertrainPosition.HybridP2_5))) { - // if there is an electric motor after the transmission, initialize the EM first - NextComponent.Initialize(inTorque, inAngularVelocity); - } - - if (!inAngularVelocity.IsEqual(0)) { - var alpha = ModelData.Inertia.IsEqual(0) - ? 0.SI<PerSquareSecond>() - : outTorque / ModelData.Inertia; - - var inertiaPowerLoss = Formulas.InertiaPower(inAngularVelocity, alpha, ModelData.Inertia, - Constants.SimulationSettings.TargetTimeInterval); - inTorque += inertiaPowerLoss / inAngularVelocity; - } - - var response = NextComponent.Request(absTime, Constants.SimulationSettings.TargetTimeInterval, - inTorque, inAngularVelocity, true); - //NextComponent.Initialize(inTorque, inAngularVelocity); - //response.Switch(). - // Case<ResponseSuccess>(). - // Case<ResponseOverload>(). - // Case<ResponseUnderload>(). - // Default(r => { throw new UnexpectedResponseException("Gearbox.Initialize", r); }); - - var fullLoad = DataBus.EngineInfo.EngineStationaryFullPower(inAngularVelocity); - - Gear = oldGear; - return new ResponseDryRun(this) { - Engine = { - PowerRequest = response.Engine.PowerRequest, - EngineSpeed = response.Engine.EngineSpeed, - DynamicFullLoadPower = response.Engine.DynamicFullLoadPower, - TorqueOutDemand = response.Engine.TorqueOutDemand, - DynamicFullLoadTorque = response.Engine.DynamicFullLoadTorque - }, - Clutch = { - PowerRequest = response.Clutch.PowerRequest, - }, - Gearbox = { - PowerRequest = outTorque * outAngularVelocity, - InputSpeed = inAngularVelocity, - InputTorque = inTorque, - OutputTorque = outTorque, - OutputSpeed = outAngularVelocity, - }, - DeltaFullLoad = response.Engine.PowerRequest - fullLoad - }; - } /// <summary> /// Requests the Gearbox to deliver torque and angularVelocity diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs index 167bf5bf84..8a2ec15079 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs @@ -11,10 +11,12 @@ using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies; +using TUGraz.VectoCore.Models.SimulationComponent.Strategies; using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.Utils; @@ -307,6 +309,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected readonly GearList GearList; protected readonly VectoRunData _runData; + protected TestPowertrain<Gearbox> TestPowertrain; + public HybridCtlShiftStrategy(HybridController hybridController, IVehicleContainer container) : base( container) { @@ -334,6 +338,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl MaxStartGear = gear; break; } + + // create testcontainer + var testContainer = new SimplePowertrainContainer(_runData); + PowertrainBuilder.BuildSimpleHybridPowertrain(_runData, testContainer); + + TestPowertrain = new TestPowertrain<Gearbox>(testContainer, DataBus); } public override ShiftPolygon ComputeDeclarationShiftPolygon(GearboxType gearboxType, int i, @@ -378,10 +388,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl foreach (var entry in GearList.Reverse()) { var gear = entry; //for (var gear = (uint)GearboxModelData.Gears.Count; gear > 1; gear--) { - var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = gear; + TestPowertrain.Gearbox._nextGear = gear; + if (_controller.CurrentStrategySettings != null) { + TestPowertrain.HybridController.ApplyStrategySettings(_controller.CurrentStrategySettings); + } + var response = TestPowertrain.Gearbox.Initialize(outTorque, outAngularVelocity); + response = TestPowertrain.Gearbox.Request(absTime, + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval, outTorque, outAngularVelocity, + true); var inAngularSpeed = outAngularVelocity * GearboxModelData.Gears[gear.Gear].Ratio; - var fullLoadPower = response.Engine.PowerRequest - response.DeltaFullLoad; + var fullLoadPower = DataBus.EngineInfo.EngineStationaryFullPower(response.Engine.EngineSpeed); var reserve = 1 - response.Engine.PowerRequest / fullLoadPower; var inTorque = response.Clutch.PowerRequest / inAngularSpeed; @@ -426,7 +446,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl continue; } - var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + //var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = gear; + TestPowertrain.Gearbox._nextGear = gear; + if (_controller.CurrentStrategySettings != null) { + TestPowertrain.HybridController.ApplyStrategySettings(_controller.CurrentStrategySettings); + } + + var response = TestPowertrain.Gearbox.Initialize(outTorque, outAngularVelocity); + response = TestPowertrain.Gearbox.Request(absTime, + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval, outTorque, outAngularVelocity, + true); var fullLoadPower = response.Engine.DynamicFullLoadTorque; //EnginePowerRequest - response.DeltaFullLoad; @@ -599,8 +630,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } foreach (var gear in Gears.Reverse()) { - var response = _gearbox.Initialize(absTime, gear, torque, outAngularVelocity); + //var response = _gearbox.Initialize(absTime, gear, torque, outAngularVelocity); + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = gear; + TestPowertrain.Gearbox._nextGear = gear; + if (_controller.CurrentStrategySettings != null) { + TestPowertrain.HybridController.ApplyStrategySettings(_controller.CurrentStrategySettings); + } + var response = TestPowertrain.Gearbox.Initialize(torque, outAngularVelocity); + response = TestPowertrain.Gearbox.Request(absTime, + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval, torque, outAngularVelocity, + true); if (response.Engine.EngineSpeed > DataBus.EngineInfo.EngineRatedSpeed || response.Engine.EngineSpeed < DataBus.EngineInfo.EngineIdleSpeed) { continue; } @@ -633,7 +674,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl continue; } - var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + //var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = gear; + TestPowertrain.Gearbox._nextGear = gear; + if (_controller.CurrentStrategySettings != null) { + TestPowertrain.HybridController.ApplyStrategySettings(_controller.CurrentStrategySettings); + } + + var response = TestPowertrain.Gearbox.Initialize(outTorque, outAngularVelocity); + response = TestPowertrain.Gearbox.Request(absTime, + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval, outTorque, outAngularVelocity, + true); var fullLoadPower = response.Engine.DynamicFullLoadTorque; //EnginePowerRequest - response.DeltaFullLoad; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVGearbox.cs index 772ce783ee..cc2209f43f 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVGearbox.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/PEVGearbox.cs @@ -11,41 +11,5 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { public PEVGearbox(IVehicleContainer container, IShiftStrategy strategy) : base(container, strategy) { } - protected internal override ResponseDryRun Initialize(Second absTime, GearshiftPosition gear, NewtonMeter outTorque, PerSecond outAngularVelocity) - { - var oldGear = Gear; - Gear = gear; - var inAngularVelocity = outAngularVelocity * ModelData.Gears[gear.Gear].Ratio; - var torqueLossResult = ModelData.Gears[gear.Gear].LossMap.GetTorqueLoss(outAngularVelocity, outTorque); - CurrentState.TorqueLossResult = torqueLossResult; - var inTorque = outTorque / ModelData.Gears[gear.Gear].Ratio + torqueLossResult.Value; - - if (!inAngularVelocity.IsEqual(0)) { - var alpha = ModelData.Inertia.IsEqual(0) - ? 0.SI<PerSquareSecond>() - : outTorque / ModelData.Inertia; - - var inertiaPowerLoss = Formulas.InertiaPower(inAngularVelocity, alpha, ModelData.Inertia, - Constants.SimulationSettings.TargetTimeInterval); - inTorque += inertiaPowerLoss / inAngularVelocity; - } - - var response = - NextComponent.Request(absTime, Constants.SimulationSettings.TargetTimeInterval, inTorque, - inAngularVelocity, true); //NextComponent.Initialize(inTorque, inAngularVelocity); - - var fullLoad = -DataBus.ElectricMotorInfo(PowertrainPosition.BatteryElectricE2).MaxPowerDrive(DataBus.BatteryInfo.InternalVoltage, inAngularVelocity, Gear); - - Gear = oldGear; - return new ResponseDryRun(this, response) { - ElectricMotor = { - PowerRequest = response.ElectricMotor.PowerRequest - }, - Gearbox = { - PowerRequest = outTorque * outAngularVelocity, - }, - DeltaFullLoad = response.ElectricMotor.PowerRequest - fullLoad - }; - } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/AMTShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/AMTShiftStrategy.cs index d20f4a2f9f..4471dd5e06 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/AMTShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/AMTShiftStrategy.cs @@ -40,10 +40,12 @@ using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.DataBus; +using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies; +using TUGraz.VectoCore.Models.SimulationComponent.Strategies; namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { @@ -68,6 +70,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl private GearshiftPosition DesiredGearRoadsweeping; private readonly IShiftPolygonCalculator _shiftPolygonCalculator; + protected TestPowertrain<Gearbox> TestPowertrain; + public AMTShiftStrategy(IVehicleContainer dataBus) : base(dataBus) { var runData = dataBus.RunData; @@ -95,6 +99,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl break; } } + + // create testcontainer + var testContainer = new SimplePowertrainContainer(runData); + PowertrainBuilder.BuildSimplePowertrain(runData, testContainer); + + TestPowertrain = new TestPowertrain<Gearbox>(testContainer, DataBus); } private bool SpeedTooLowForEngine(GearshiftPosition gear, PerSecond outAngularSpeed) @@ -143,10 +153,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl foreach (var gear in Gears.Reverse()) { var selected = gear; - var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + //var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = gear; + TestPowertrain.Gearbox._nextGear = gear; + + var response = TestPowertrain.Gearbox.Initialize(outTorque, outAngularVelocity); + response = TestPowertrain.Gearbox.Request(absTime, + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval, outTorque, outAngularVelocity, + true); var inAngularSpeed = outAngularVelocity * GearboxModelData.Gears[gear.Gear].Ratio; - var fullLoadPower = response.Engine.PowerRequest - response.DeltaFullLoad; + var fullLoadPower = DataBus.EngineInfo.EngineStationaryFullPower(response.Engine.EngineSpeed); var reserve = 1 - response.Engine.PowerRequest / fullLoadPower; var inTorque = response.Clutch.PowerRequest / inAngularSpeed; @@ -184,7 +203,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl continue; } - var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + //var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = gear; + TestPowertrain.Gearbox._nextGear = gear; + + var response = TestPowertrain.Gearbox.Initialize(outTorque, outAngularVelocity); + response = TestPowertrain.Gearbox.Request(absTime, + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval, outTorque, outAngularVelocity, + true); var fullLoadPower = response.Engine.DynamicFullLoadPower; //EnginePowerRequest - response.DeltaFullLoad; var reserve = 1 - response.Engine.PowerRequest / fullLoadPower; diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/PEVAMTShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/PEVAMTShiftStrategy.cs index af4eb30b3a..a95252c997 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/PEVAMTShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/PEVAMTShiftStrategy.cs @@ -5,6 +5,7 @@ using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Models.Declaration; @@ -16,6 +17,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor; using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; +using TUGraz.VectoCore.Models.SimulationComponent.Strategies; using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.Utils; @@ -89,14 +91,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies protected bool DriveOffStandstill { get; set; } + protected TestPowertrain<Gearbox> TestPowertrain; + public PEVAMTShiftStrategy(IVehicleContainer dataBus) : this(dataBus, false) { if (dataBus.RunData.VehicleData == null) { return; } - - EMPos = dataBus.RunData.ElectricMachinesData.FirstOrDefault(x => x.Item1 == PowertrainPosition.BatteryElectricE2 || x.Item1 == PowertrainPosition.IEPC)?.Item1 ?? PowertrainPosition.HybridPositionNotSet; SetupVelocityDropPreprocessor(dataBus); @@ -136,6 +138,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies DeRatedShiftpolygons = CalculateDeratedShiftLines(em, runData.GearboxData.InputData.Gears, runData.VehicleData.DynamicTyreRadius, runData.AxleGearData?.AxleGear.Ratio ?? 1.0, runData.GearboxData.Type); + + // create testcontainer + var testContainer = new SimplePowertrainContainer(runData); + PowertrainBuilder.BuildSimplePowertrainElectric(runData, testContainer); + + TestPowertrain = new TestPowertrain<Gearbox>(testContainer, DataBus); } protected void SetupVelocityDropPreprocessor(IVehicleContainer dataBus) @@ -669,10 +677,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies var emCtl = emE2.Control; emE2.Control = new PEVInitControl(DataBus as IVehicleContainer); foreach (var gear in GearList.Reverse()) { - //for (var gear = (uint)GearboxModelData.Gears.Count; gear > 1; gear--) { - var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); - - var inAngularSpeed = outAngularVelocity * GearboxModelData.Gears[gear.Gear].Ratio; + //for (var gear = (uint)GearboxModelData.Gears.Count; gear > 1; gear--) { + //var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = gear; + TestPowertrain.Gearbox._nextGear = gear; + + var response = TestPowertrain.Gearbox.Initialize(outTorque, outAngularVelocity); + response = TestPowertrain.Gearbox.Request(absTime, + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval, outTorque, outAngularVelocity, + true); + + var inAngularSpeed = outAngularVelocity * GearboxModelData.Gears[gear.Gear].Ratio; var inTorque = response.ElectricMotor.PowerRequest / inAngularSpeed; // if in shift curve and torque reserve is provided: return the current gear @@ -710,9 +726,17 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies continue; } - var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + //var response = _gearbox.Initialize(absTime, gear, outTorque, outAngularVelocity); + TestPowertrain.UpdateComponents(); + TestPowertrain.Gearbox.Gear = gear; + TestPowertrain.Gearbox._nextGear = gear; + + var response = TestPowertrain.Gearbox.Initialize(outTorque, outAngularVelocity); + response = TestPowertrain.Gearbox.Request(absTime, + Constants.SimulationSettings.MeasuredSpeedTargetTimeInterval, outTorque, outAngularVelocity, + true); - var fullLoadPower = -(response.ElectricMotor.MaxDriveTorque * response.ElectricMotor.AngularVelocity); + var fullLoadPower = -(response.ElectricMotor.MaxDriveTorque * response.ElectricMotor.AngularVelocity); //.DynamicFullLoadPower; //EnginePowerRequest - response.DeltaFullLoad; var reserve = 1 - (response.ElectricMotor.TorqueRequestEmMap ?? 0.SI<NewtonMeter>()) / response.ElectricMotor.MaxDriveTorqueEM; -- GitLab