diff --git a/VECTOAux/VectoAuxiliariesTests/IntegrationTests/AuxDemandTest.vb b/VECTOAux/VectoAuxiliariesTests/IntegrationTests/AuxDemandTest.vb index 743a29669be3df965dd2b8a83014b22a5eb0b54f..54f4fe5a771f4434b1f0d424e040b31c11c21ff4 100644 --- a/VECTOAux/VectoAuxiliariesTests/IntegrationTests/AuxDemandTest.vb +++ b/VECTOAux/VectoAuxiliariesTests/IntegrationTests/AuxDemandTest.vb @@ -113,7 +113,7 @@ Namespace IntegrationTests For i As Integer = 0 To 9 aux.ResetCalculations() Assert.AreEqual(6087.0317, aux.AuxiliaryPowerAtCrankWatts().Value(), 0.001) - aux.CycleStep(1.SI(Of Second)) + aux.CycleStep(1.SI(Of Second), 1.0) 'Console.WriteLine("{0}", aux.AA_TotalCycleFC_Grams) Next @@ -128,7 +128,7 @@ Namespace IntegrationTests For i As Integer = 0 To 9 aux.ResetCalculations() Assert.AreEqual(8954.1435, aux.AuxiliaryPowerAtCrankWatts().Value(), 0.001) - aux.CycleStep(1.SI(Of Second)) + aux.CycleStep(1.SI(Of Second), 1.0) 'Console.WriteLine("{0}", aux.AA_TotalCycleFC_Grams) Next @@ -143,7 +143,7 @@ Namespace IntegrationTests For i As Integer = 0 To 9 aux.ResetCalculations() Assert.AreEqual(6087.0317, aux.AuxiliaryPowerAtCrankWatts().Value(), 0.001) - aux.CycleStep(1.SI(Of Second)) + aux.CycleStep(1.SI(Of Second), 1.0) 'Console.WriteLine("{0}", aux.AA_TotalCycleFC_Grams) Next diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs index dfad83254cb589ff025301e38e50a4cebd4e71d7..eb60207f4049016ee70dbdfd06c8794d5272729f 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs @@ -274,7 +274,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries } - public void CycleStep(Second seconds) + public void CycleStep(Second seconds, double essFactor) { try { //M9.CycleStep(seconds); @@ -282,11 +282,11 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries //M11.CycleStep(seconds); if (auxConfig.ElectricalUserInputsConfig.SmartElectrical) { var generatedElPower = - (auxConfig.ElectricalUserInputsConfig.SmartElectrical && auxConfig.PneumaticUserInputsConfig.SmartAirCompression + (auxConfig.PneumaticUserInputsConfig.SmartAirCompression ? M7.SmartElectricalAndPneumaticAuxAltPowerGenAtCrank : M7.SmartElectricalOnlyAuxAltPowerGenAtCrank) * M0.AlternatorsEfficiency * auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency; - ElectricStorage.Request(generatedElPower - ElectricPowerConsumerSum, seconds); + ElectricStorage.Request((generatedElPower - ElectricPowerConsumerSum) * essFactor, seconds); } Signals.CurrentCycleTimeInSeconds += seconds.Value(); } catch (Exception ex) { diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/M08Impl.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/M08Impl.cs index a9b54f4f2f7b0d9f7f385a06b02f24bcf747126a..b5a8cfa29234e56022db1b6e30c3099eb45d0927 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/M08Impl.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/M08Impl.cs @@ -40,7 +40,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl var sw5 = _smartElectrics ? sw1 : sw2; var sw6 = !_signals.EngineStopped; var sum5 = _m1.AveragePowerDemandAtCrankFromHVACMechanicals + sw5; - var sum6 = sw6 ? sum5 : 0.SI<Watt>(); + var sum6 = sum5; // sw6 ? sum5 : 0.SI<Watt>(); var sw3 = _smartPneumatics ? _m7.SmartElectricalAndPneumaticAuxAltPowerGenAtCrank : _m7.SmartElectricalOnlyAuxAltPowerGenAtCrank; diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs index d53e3ed8097add1fc2c59c90b9f0ef99b4887f9a..300772b270eda0cb238923752faa0c199e23a0d0 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs @@ -131,9 +131,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces /// Cycle Step - Used to calculate fuelling /// </summary> /// <param name="seconds"></param> + /// <param name="essFactor"></param> /// <returns></returns> /// <remarks></remarks> - void CycleStep(Second seconds); + void CycleStep(Second seconds, double essFactor); ///// <summary> ///// Initialises AAUX Environment ( Begin Processs ) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs index efee667b4bc0a034b21f5d0ea379350ee3261c2d..3d83f90df5bec6c576ee1c445c06fafdface4cce 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs @@ -38,7 +38,6 @@ using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces; using TUGraz.VectoCore.Models.Simulation; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.DataBus; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; using TUGraz.VectoCore.OutputData; namespace TUGraz.VectoCore.Models.SimulationComponent.Impl @@ -107,6 +106,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { CurrentState.AngularSpeed = angularSpeed; CurrentState.dt = dt; + + var signals = Auxiliaries.Signals; + // trick bus auxiliaries that ice is on - all auxiliaries are considered. ESS is corrected in post-processing + signals.EngineStopped = false; + signals.VehicleStopped = false; + CurrentState.PowerDemand = GetBusAuxPowerDemand(absTime, dt, torquePowerTrain, torqueEngine, angularSpeed, dryRun); var avgAngularSpeed = (CurrentState.AngularSpeed + PreviousState.AngularSpeed) / 2.0; @@ -115,6 +120,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl public Watt PowerDemandEngineOn(Second time, Second simulationInterval, PerSecond engineSpeed) { + var signals = Auxiliaries.Signals; + signals.EngineStopped = false; + signals.VehicleStopped = false; return GetBusAuxPowerDemand(time, simulationInterval, 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>(), engineSpeed, true); } @@ -124,6 +132,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl AdditionalAux = null; CurrentState.AngularSpeed = DataBus.EngineIdleSpeed; CurrentState.dt = dt; + + var signals = Auxiliaries.Signals; + + // set internal state of power demand as if ICE is on - multiplied by (1-ESS_UF) + signals.EngineStopped = false; + signals.VehicleStopped = false; + var busAuxPowerDemand = GetBusAuxPowerDemand( absTime, dt, 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>(), DataBus.EngineIdleSpeed); AdditionalAux = conventionalAux; @@ -131,27 +146,34 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl CurrentState.PowerDemand = ((AdditionalAux?.PowerDemandEngineOn(absTime, dt, DataBus.EngineIdleSpeed) ?? 0.SI<Watt>()) + busAuxPowerDemand) * (1 - EngineStopStartUtilityFactor); - return EngineStopStartUtilityFactor * busAuxPowerDemand + AdditionalAux?.PowerDemandEngineOff(absTime, dt); + // + signals.EngineStopped = !DataBus.IgnitionOn; + signals.VehicleStopped = DataBus.VehicleStopped; + + busAuxPowerDemand = GetBusAuxPowerDemand( + absTime, dt, 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>(), DataBus.EngineIdleSpeed); + AdditionalAux = conventionalAux; + + return EngineStopStartUtilityFactor * (busAuxPowerDemand + AdditionalAux?.PowerDemandEngineOff(absTime, dt)); } protected internal virtual void DoWriteModalResults(IModalDataContainer container) { - - // cycleStep has to be called here and not in DoCommit, write is called before Commit! - Auxiliaries.CycleStep(CurrentState.dt); - var essUtilityFactor = 1.0; if (!DataBus.IgnitionOn) { essUtilityFactor = 1 - EngineStopStartUtilityFactor; } + // cycleStep has to be called here and not in DoCommit, write is called before Commit! + Auxiliaries.CycleStep(CurrentState.dt, essUtilityFactor); + //CurrentState.TotalFuelConsumption = Auxiliaries.TotalFuel; container[ModalResultField.P_aux] = CurrentState.PowerDemand; - container[ModalResultField.P_busAux_ES_HVAC] = Auxiliaries.HVACElectricalPowerConsumer; - container[ModalResultField.P_busAux_ES_other] = Auxiliaries.ElectricPowerConsumer; - container[ModalResultField.P_busAux_ES_consumer_sum] = Auxiliaries.ElectricPowerConsumerSum; + container[ModalResultField.P_busAux_ES_HVAC] = essUtilityFactor * Auxiliaries.HVACElectricalPowerConsumer; + container[ModalResultField.P_busAux_ES_other] = essUtilityFactor * Auxiliaries.ElectricPowerConsumer; + container[ModalResultField.P_busAux_ES_consumer_sum] = essUtilityFactor * Auxiliaries.ElectricPowerConsumerSum; container[ModalResultField.P_busAux_ES_sum_mech] = essUtilityFactor * Auxiliaries.ElectricPowerDemandMech; container[ModalResultField.P_busAux_ES_generated] = essUtilityFactor * Auxiliaries.ElectricPowerGenerated; @@ -167,7 +189,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl container[ModalResultField.P_busAux_PS_generated_alwaysOn] = essUtilityFactor * Auxiliaries.PSPowerCompressorAlwaysOn; container[ModalResultField.P_busAux_PS_generated_dragOnly] = essUtilityFactor * Auxiliaries.PSPowerCompressorDragOnly; - container[ModalResultField.P_busAux_HVACmech_consumer] = Auxiliaries.HVACMechanicalPowerConsumer; + container[ModalResultField.P_busAux_HVACmech_consumer] = essUtilityFactor * Auxiliaries.HVACMechanicalPowerConsumer; container[ModalResultField.P_busAux_HVACmech_gen] = essUtilityFactor * Auxiliaries.HVACMechanicalPowerGenerated; } @@ -211,24 +233,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl signals.Idle = DataBus.VehicleStopped; signals.InNeutral = DataBus.Gear == 0; - signals.EngineStopped = !DataBus.IgnitionOn; - signals.VehicleStopped = DataBus.VehicleStopped; + return Auxiliaries.AuxiliaryPowerAtCrankWatts + signals.PreExistingAuxPower; } - protected class FuelConsumptionAdapter : IFuelConsumptionMap - { - protected internal FuelConsumptionMap FcMap; - - public bool AllowExtrapolation { get; set; } - - public KilogramPerSecond GetFuelConsumptionValue(NewtonMeter torque, PerSecond angularVelocity) - { - return FcMap.GetFuelConsumption(torque, angularVelocity, AllowExtrapolation).Value; - } - } - public class BusAuxState { public Second dt;