diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs index d989c174593d764e93a814b80387383a384cf296..b5073dbdd9b62dc82bd3d22f5fc692e97726c75d 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs @@ -6,7 +6,6 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; -using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation; @@ -162,33 +161,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies TestPowertrain.Gearbox.Gear = PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear; TestPowertrain.Gearbox.Disengaged = !nextGear.Engaged; TestPowertrain.Gearbox.DisengageGearbox = !nextGear.Engaged; + TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); + TestPowertrain.HybridController.ApplyStrategySettings(cfg); + TestPowertrain.HybridController.Initialize(Controller.PreviousState.OutTorque, Controller.PreviousState.OutAngularVelocity); - // TestPowertrain.Clutch.Initialize(DataBus.ClutchInfo.ClutchLosses); - TestPowertrain.Battery?.Initialize(DataBus.BatteryInfo.StateOfCharge); - if (TestPowertrain.Battery != null) { - TestPowertrain.Battery.PreviousState.PulseDuration = - (DataBus.BatteryInfo as Battery).PreviousState.PulseDuration; - } - if (TestPowertrain.BatterySystem != null) { - var batSystem = DataBus.BatteryInfo as BatterySystem; - foreach (var bsKey in batSystem.Batteries.Keys) { - for (var i = 0; i < batSystem.Batteries[bsKey].Batteries.Count; i++) { - TestPowertrain.BatterySystem.Batteries[bsKey].Batteries[i] - .Initialize(batSystem.Batteries[bsKey].Batteries[i].StateOfCharge); - } - } - TestPowertrain.BatterySystem.PreviousState.PulseDuration = - (DataBus.BatteryInfo as BatterySystem).PreviousState.PulseDuration; - } - TestPowertrain.SuperCap?.Initialize(DataBus.BatteryInfo.StateOfCharge); - + + TestPowertrain.Battery.UpdateFrom(DataBus.BatteryInfo); + TestPowertrain.BatterySystem?.UpdateFrom(DataBus.BatteryInfo); + TestPowertrain.SuperCap?.UpdateFrom(DataBus.BatteryInfo); TestPowertrain.Brakes.BrakePower = DataBus.Brakes.BrakePower; var currentGear = PreviousState.GearboxEngaged ? DataBus.GearboxInfo.Gear : Controller.ShiftStrategy.NextGear; - var gearboxInfo = DataBus.GearboxInfo as ATGearbox; if (nextGear.Engaged && !nextGear.Equals(currentGear)) { if (!AllowEmergencyShift && ModelData.GearboxData.Gears[nextGear.Gear].Ratio > ModelData.GearshiftParameters.RatioEarlyUpshiftFC) { return null; @@ -202,11 +188,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies var vehicleSpeedPostShift = (DataBus.VehicleInfo.VehicleSpeed + vDrop * ModelData.GearshiftParameters.VelocityDropFactor).LimitTo( 0.KMPHtoMeterPerSecond(), DataBus.DrivingCycleInfo.CycleData.LeftSample.VehicleTargetSpeed); - //var estimatedVelocityPostShift = VelocityDropData.Interpolate(DataBus.VehicleInfo.VehicleSpeed, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); - //if (!AllowEmergencyShift && !estimatedVelocityPostShift.IsGreater(DeclarationData.GearboxTCU.MIN_SPEED_AFTER_TRACTION_INTERRUPTION)) { - // return null; - //} - if (nextGear.TorqueConverterLocked.HasValue && nextGear.TorqueConverterLocked.Value) { var inAngularVelocity = ModelData.GearboxData.Gears[nextGear.Gear].Ratio * outAngularVelocity; @@ -224,105 +205,35 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies } } - //var vDrop = DataBus.VehicleInfo.VehicleSpeed - estimatedVelocityPostShift; - //var vehicleSpeedPostShift = estimatedVelocityPostShift; // DataBus.VehicleInfo.VehicleSpeed - vDrop * ModelData.GearshiftParameters.VelocityDropFactor; TestPowertrain.Gearbox.Gear = nextGear; TestPowertrain.Gearbox.RequestAfterGearshift = true; - //var init = TestPowertrain.Container.VehiclePort.Initialize( - // vehicleSpeedPostShift, DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>()); - //if (!AllowEmergencyShift && init.Engine.EngineSpeed.IsSmaller(ModelData.EngineData.IdleSpeed)) { - // return null; - //} } else { - TestPowertrain.Gearbox.RequestAfterGearshift = gearboxInfo.RequestAfterGearshift; + TestPowertrain.Gearbox.RequestAfterGearshift = (DataBus.GearboxInfo as ATGearbox).RequestAfterGearshift; } - //TestPowertrain.Gearbox.ShiftToLocked = (DataBus.GearboxInfo as ATGearbox).ShiftToLocked; if (!nextGear.Engaged) { - //TestPowertrain.Gearbox._nextGear = Controller.ShiftStrategy.NextGear; TestPowertrain.Gearbox.Disengaged = !nextGear.Engaged; } - //if (!PreviousState.GearboxEngaged) { - var engineInfo = DataBus.EngineInfo as CombustionEngine; - var enginePrevious = engineInfo.PreviousState; - TestPowertrain.CombustionEngine.Initialize(enginePrevious.EngineTorque, enginePrevious.EngineSpeed); - var testEnginePrevious = TestPowertrain.CombustionEngine.PreviousState; - testEnginePrevious.EngineOn = enginePrevious.EngineOn; - testEnginePrevious.EnginePower = enginePrevious.EnginePower; - testEnginePrevious.dt = enginePrevious.dt; - testEnginePrevious.EngineSpeed = enginePrevious.EngineSpeed; - testEnginePrevious.EngineTorque = enginePrevious.EngineTorque; - testEnginePrevious.EngineTorqueOut = enginePrevious.EngineTorqueOut; - testEnginePrevious.DynamicFullLoadTorque = enginePrevious.DynamicFullLoadTorque; - - switch (TestPowertrain.CombustionEngine.EngineAux) { - case EngineAuxiliary engineAux: - engineAux.PreviousState.AngularSpeed = (engineInfo.EngineAux as EngineAuxiliary).PreviousState.AngularSpeed; - break; - case BusAuxiliariesAdapter busAux: - busAux.PreviousState.AngularSpeed = (engineInfo.EngineAux as BusAuxiliariesAdapter).PreviousState.AngularSpeed; - if (busAux.ElectricStorage is SimpleBattery bat) { - bat.SOC = (engineInfo.EngineAux as BusAuxiliariesAdapter) - .ElectricStorage - .SOC; - } - break; - } - - if (TestPowertrain.DCDCConverter != null) { - TestPowertrain.DCDCConverter.PreviousState.ConsumedEnergy = - (DataBus.DCDCConverter as DCDCConverter).PreviousState.ConsumedEnergy; - } - - if (TestPowertrain.WHRCharger != null) { - TestPowertrain.WHRCharger.PreviousState.GeneratedEnergy = - DataBus.WHRCharger.PreviousState.GeneratedEnergy; - TestPowertrain.WHRCharger.PreviousState.ExcessiveEnergy = - DataBus.WHRCharger.PreviousState.ExcessiveEnergy; - } - - TestPowertrain.Gearbox.PreviousState.OutAngularVelocity = gearboxInfo.PreviousState.OutAngularVelocity; - TestPowertrain.Gearbox.PreviousState.InAngularVelocity = gearboxInfo.PreviousState.InAngularVelocity; - TestPowertrain.Gearbox._powershiftLossEnergy = gearboxInfo._powershiftLossEnergy; - TestPowertrain.Gearbox.PreviousState.PowershiftLossEnergy = gearboxInfo.PreviousState.PowershiftLossEnergy; - TestPowertrain.Gearbox.LastShift = gearboxInfo.LastShift; - TestPowertrain.Gearbox.PreviousState.Gear = gearboxInfo.PreviousState.Gear; + TestPowertrain.CombustionEngine.UpdateFrom(DataBus.EngineInfo); + TestPowertrain.DCDCConverter?.UpdateFrom(DataBus.DCDCConverter); + TestPowertrain.WHRCharger?.UpdateFrom(DataBus.WHRCharger); + TestPowertrain.Gearbox.UpdateFrom(DataBus.GearboxInfo); if (nextGear.TorqueConverterLocked.HasValue && !nextGear.TorqueConverterLocked.Value) { - var dataBusTorqueConverterInfo = DataBus.TorqueConverterInfo as TorqueConverter; - var prev = dataBusTorqueConverterInfo.PreviousState; - var testTCPrevious = TestPowertrain.TorqueConverter.PreviousState; - testTCPrevious.InAngularVelocity = prev.InAngularVelocity; - testTCPrevious.InTorque = prev.InTorque; - testTCPrevious.OutAngularVelocity = prev.OutAngularVelocity; - testTCPrevious.IgnitionOn = prev.IgnitionOn; + TestPowertrain.TorqueConverter.UpdateFrom(DataBus.TorqueConverterInfo); } - - //TestPowertrain.Clutch.PreviousState.InAngularVelocity = - // (DataBus.ClutchInfo as SwitchableClutch).PreviousState.InAngularVelocity; - - //} - + var pos = ModelData.ElectricMachinesData.FirstOrDefault().Item1; - TestPowertrain.ElectricMotor.ThermalBuffer = - (DataBus.ElectricMotorInfo(pos) as ElectricMotor).ThermalBuffer; - TestPowertrain.ElectricMotor.DeRatingActive = - (DataBus.ElectricMotorInfo(pos) as ElectricMotor).DeRatingActive; + TestPowertrain.ElectricMotor.ThermalBuffer = (DataBus.ElectricMotorInfo(pos) as ElectricMotor).ThermalBuffer; + TestPowertrain.ElectricMotor.DeRatingActive = (DataBus.ElectricMotorInfo(pos) as ElectricMotor).DeRatingActive; foreach (var emPos in TestPowertrain.ElectricMotorsUpstreamTransmission.Keys) { - TestPowertrain.ElectricMotorsUpstreamTransmission[pos].PreviousState.EMSpeed = - DataBus.ElectricMotorInfo(emPos).ElectricMotorSpeed; + TestPowertrain.ElectricMotorsUpstreamTransmission[pos].PreviousState.EMSpeed = DataBus.ElectricMotorInfo(emPos).ElectricMotorSpeed; } try { - var retVal = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, - outAngularVelocity, false); - - //if (retVal.Source is TorqueConverter) { - // return null; - //} - + var retVal = TestPowertrain.HybridController.NextComponent.Request(absTime, dt, outTorque, outAngularVelocity, false); retVal.HybridController.StrategySettings = cfg; return retVal; } catch (Exception e) {