Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit bbcd291d authored by Harald Martini's avatar Harald Martini
Browse files

disabled iterative runs for serial hybrids, added epto to s-hev

parent 0d04d38f
No related branches found
No related tags found
No related merge requests found
Showing
with 97 additions and 31 deletions
......@@ -314,9 +314,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
private SerialHybridStrategyParameterDataAdapter _hybridStrategyParameterData =
new SerialHybridStrategyParameterDataAdapter();
//protected ElectricStorageAdapter _electricStorageAdapter = new ElectricStorageAdapter();
private readonly ElectricPTODataAdapter _ptoDataAdapter = new ElectricPTODataAdapter();
public override HybridStrategyParameters CreateHybridStrategy(BatterySystemData runDataBatteryData,
SuperCapData runDataSuperCapData, Kilogram vehicleMass, VectoRunData.OvcHevMode ovcMode, LoadingType loading, VehicleClass vehicleClass, MissionType missionType)
......@@ -331,15 +329,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.HeavyLorry
public override PTOData CreatePTOCycleData(IGearboxDeclarationInputData gbx, IPTOTransmissionInputData pto)
{
//throw new NotImplementedException();
return null;
return _ptoDataAdapter.CreateDefaultPTOData(pto, gbx);
}
public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData,
IGearboxDeclarationInputData gbx)
{
//throw new NotImplementedException();
return null;
return _ptoDataAdapter.CreatePTOTransmissionData(ptoData, gbx);
}
public override void CreateREESSData(IElectricStorageSystemDeclarationInputData componentsElectricStorage,
VectoSimulationJobType jobType, bool ovc, Action<BatterySystemData> setBatteryData, Action<SuperCapData> setSuperCapData)
......
......@@ -28,6 +28,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
DrivingCycleDataReader.ReadFromStream(RessourceHelper.ReadStream(DeclarationData.PTO.DefaultPTOActivationCycle),
CycleType.PTO, "PTO", false),
TransmissionPowerDemand = DeclarationData.PTOTransmission.Lookup(DeclarationData.PTO.DefaultPTOTechnology).PowerDemand,
ConsumerType = PTOConsumerType.mechanical,
};
}
public virtual PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto, IGearboxDeclarationInputData gbx)
......@@ -39,6 +40,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
TransmissionPowerDemand = powerDemand,
TransmissionType = pto.PTOTransmissionType,
LossMap = PTOIdleLossMapReader.GetZeroLossMap(),
ConsumerType = PTOConsumerType.mechanical,
};
}
return null;
......@@ -66,6 +68,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
DrivingCycleDataReader.ReadFromStream(RessourceHelper.ReadStream(DeclarationData.PTO.DefaultE_PTOActivationCycle),
CycleType.EPTO, "PTO", false),
TransmissionPowerDemand = powerDemand,
ConsumerType = PTOConsumerType.electrical,
};
}
......@@ -84,6 +87,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
TransmissionPowerDemand = powerDemand,
TransmissionType = pto.PTOTransmissionType,
LossMap = PTOIdleLossMapReader.GetZeroLossMap(),
ConsumerType = PTOConsumerType.electrical,
};
}
......
......@@ -49,11 +49,9 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
{
if (vehicle.OvcHev) {
yield return CreateVectoRunData(vehicle, mission, loading, modeIdx, VectoRunData.OvcHevMode.ChargeDepleting);
yield return CreateVectoRunData(vehicle, mission, loading, modeIdx, VectoRunData.OvcHevMode.ChargeSustaining);
} else {
yield return CreateVectoRunData(vehicle, mission, loading, modeIdx);
yield return CreateVectoRunData(vehicle, mission, loading, modeIdx, VectoRunData.OvcHevMode.ChargeSustaining);
}
}
}
......@@ -140,10 +138,10 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl.DeclarationMode.HeavyLorryRunDa
var ptoTransmissionData = DataAdapter.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData, vehicle.Components.GearboxInputData);
var municipalPtoTransmissionData = DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData);
var municipalPtoData = DataAdapter.CreatePTOCycleData(vehicle.Components.GearboxInputData, vehicle.Components.PTOTransmissionInputData);
runData.PTO = mission.MissionType == MissionType.MunicipalUtility
? municipalPtoTransmissionData
? municipalPtoData
: ptoTransmissionData;
......
......@@ -46,7 +46,7 @@ public class NoFollowUpRunCreator : LoggingObject, IFollowUpRunCreator
public bool RunAgain(Action<VectoRunData> runAgainAction, IVectoRun run, Action beforeNextRun)
{
throw new NotImplementedException();
return false;
}
#endregion
......@@ -79,6 +79,9 @@ public class NoFollowUpRunCreator : LoggingObject, IFollowUpRunCreator
/// <return>true if the run is executed again, false otherwise</return>
public bool RunAgain(Action<VectoRunData> runAgainAction, IVectoRun run, Action beforeNextRun)
{
if (run.GetContainer().RunData.OVCMode == VectoRunData.OvcHevMode.ChargeSustaining) {
return false;
}
#pragma warning disable IDE0054 // Verbundzuweisung verwenden
original_modfile_suffix = original_modfile_suffix ?? (original_modfile_suffix = run.GetContainer().RunData.ModFileSuffix);
#pragma warning restore IDE0054 // Verbundzuweisung verwenden
......
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.Models.Simulation.Data;
namespace TUGraz.VectoCore.Models.Simulation.Impl
{
......@@ -12,7 +13,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
public IFollowUpRunCreator CreateFollowUpRunCreator(VectoRunData runData)
{
if (runData.VehicleData.InputData.OvcHev)
if (runData.OVCMode == VectoRunData.OvcHevMode.ChargeSustaining && runData.JobType == VectoSimulationJobType.ParallelHybridVehicle)
{
return new FollowUpOvcRunCreator();
}
......
......@@ -413,6 +413,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
/// </summary>
private static IVehicleContainer BuildFullPowertrainParallelHybrid(VectoRunData data, IModalDataContainer modData, ISumData _sumWriter)
{
if (data.SavedInDeclarationMode) {
throw new NotImplementedException();
}
if (_sumWriter == null)
throw new ArgumentNullException(nameof(_sumWriter));
if (data.Cycle.CycleType != CycleType.DistanceBased) {
......@@ -661,7 +664,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
IEPTO epto = null;
if (data.PTO?.PTOCycle != null)
{
var pevPTOController = GetPEVIdleController(data.PTO, container);
var pevPTOController = GetPEV_SHEVIdleController(data.PTO, container);
cycle.IdleController = pevPTOController;
var eptoAux = new EPTO(pevPTOController);
elAux.AddAuxiliary(eptoAux);
......@@ -807,7 +810,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
IEPTO epto = null;
if (data.PTO?.PTOCycle != null)
{
var pevPTOController = GetPEVIdleController(data.PTO, container);
var pevPTOController = GetPEV_SHEVIdleController(data.PTO, container);
cycle.IdleController = pevPTOController;
var eptoAux = new EPTO(pevPTOController);
elAux.AddAuxiliary(eptoAux);
......@@ -1492,7 +1495,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
? engine.IdleController
: new IdleControllerSwitcher(engine.IdleController, new PTOCycleController(container, pto.PTOCycle));
private static IIdleControllerSwitcher GetPEVIdleController(PTOData pto,
private static IIdleControllerSwitcher GetPEV_SHEVIdleController(PTOData pto,
IVehicleContainer container) => pto?.PTOCycle is null ? null : new EPTOCycleController(container, pto?.PTOCycle);
......
......@@ -53,6 +53,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
{
public class VehicleContainer : LoggingObject, IVehicleContainer, IPowertainInfo
{
private List<Tuple<int, VectoSimulationComponent>> _components =
new List<Tuple<int, VectoSimulationComponent>>();
......@@ -111,7 +112,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
ExecutionMode = executionMode;
}
#region IVehicleContainer
#region IVehicleContainer
public virtual IModalDataContainer ModalData => ModData;
......
......@@ -33,7 +33,7 @@ using TUGraz.VectoCommon.Utils;
namespace TUGraz.VectoCore.Models.SimulationComponent.Data
{
enum PTOConsumerType
public enum PTOConsumerType
{
mechanical,
electrical
......@@ -53,5 +53,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
public ILossMap LossMap;
public DrivingCycleData PTOCycle;
public PTOConsumerType ConsumerType = PTOConsumerType.mechanical;
}
}
\ No newline at end of file
......@@ -57,7 +57,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
public EngineAuxiliary(IVehicleContainer container) : base(container)
{
EngineStopStartUtilityFactor = 1; // container.RunData?.DriverData?.EngineStopStart?.UtilityFactorStandstill ?? double.NaN;
_writePTO = container.RunData?.PTO != null;
_writePTO = container.RunData?.PTO?.ConsumerType == PTOConsumerType.mechanical;
}
public IAuxPort Port()
......
......@@ -5,12 +5,16 @@
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Ninject;
using NUnit.Framework;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.InputData.FileIO.XML;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
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.Simulation.Impl.SimulatorFactory;
using TUGraz.VectoCore.OutputData;
......@@ -27,6 +31,10 @@ public class HeavyLorrySimulation
private const string BASE_DIR = @"TestData\Integration\DeclarationMode\V24_DeclarationMode\";
private const string HeavylorryGroup2HevS2XML = @"HeavyLorry\Group2_HEV_S2.xml";
private const string HeavylorryGroup2HevS4XML = @"HeavyLorry\Group2_HEV_S4.xml";
private StandardKernel _kernel;
private IXMLInputDataReader _xmlReader;
......@@ -44,7 +52,8 @@ public class HeavyLorrySimulation
TestCase(@"HeavyLorry\PEV_heavyLorry_E3_realistic_municipal.xml"),
TestCase(@"HeavyLorry\PEV_heavyLorry_AMT_E2_pto_transm.xml"),
TestCase(@"HeavyLorry\PEV_heavyLorry_E4.xml"),
TestCase(@"HeavyLorry\Group2_HEV_S2.xml"),
TestCase(HeavylorryGroup2HevS2XML),
TestCase(HeavylorryGroup2HevS4XML),
TestCase(@"HeavyLorry\Group5_HEV_P2_.xml"),
TestCase(@"HeavyLorry\Group5_HEV_P3_ovc.xml")]
[TestCase(@"HeavyLorry\HEV_heavy_lorry_S4_ovc.xml")]
......@@ -60,12 +69,9 @@ public class HeavyLorrySimulation
public void RunSimulation(string jobFile, bool multiThreaded = true)
{
var filePath = Path.Combine(BASE_DIR, jobFile);
var dataProvider = _xmlReader.CreateDeclaration(filePath);
var fileWriter = new FileOutputWriter(filePath);
var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
var runsFactory = GetSimulatorFactory(filePath, out var dataProvider, out var fileWriter, out var summaryDataContainer);
runsFactory.WriteModalResults = true;
var jobContainer = new JobContainer(new MockSumWriter()){};
//var jobContainer = new JobContainer(new MockSumWriter()) { };
var jobContainer = new JobContainer(summaryDataContainer){};
jobContainer.AddRuns(runsFactory);
PrintRuns(jobContainer, null);
......@@ -81,7 +87,58 @@ public class HeavyLorrySimulation
PrintFiles(fileWriter);
}
private ISimulatorFactory GetSimulatorFactory(string filePath, out IDeclarationInputDataProvider dataProvider,
out FileOutputWriter fileWriter, out SummaryDataContainer sumWriter)
{
dataProvider = _xmlReader.CreateDeclaration(filePath);
fileWriter = new FileOutputWriter(filePath);
var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter);
sumWriter = new MockSumWriter();
runsFactory.SumData = sumWriter;
return runsFactory;
}
[Test]
public void HEVS4()
{
var simFactory = GetSimulatorFactory(Path.Combine(BASE_DIR, HeavylorryGroup2HevS4XML), out var dataProvider,
out var fileWriter, out var mockSumWriter);
var runs = simFactory.SimulationRuns();
foreach (var vectoRun in runs) {
var rd = vectoRun.GetContainer().RunData;
}
var container = runs.First().GetContainer();
var runData = container.RunData;
//Pneumatic system data test
var ps = runData.Aux.Where(x => x.ID == Constants.Auxiliaries.IDs.PneumaticSystem).Single();
Assume.That(ps.IsFullyElectric);
//Fully electric aux have a seperate electric power table
//Assume.That(ps.PowerDemandMech != ps.PowerDemandElectric * DeclarationData.AlternatorEfficiency);
Assert.That(ps.ConnectToREESS);
}
[TestCase(@"HeavyLorry\HEV_heavy_lorry_S4_ovc.xml", 12)]
[TestCase(HeavylorryGroup2HevS2XML, 6)]
[TestCase(@"HeavyLorry\Group5_HEV_P3_ovc.xml", 20)]
public void OVCHevSimulationSingleRun(string jobFile, int nrRuns)
{
......@@ -95,6 +152,8 @@ public class HeavyLorrySimulation
runsFactory.SumData = sumWriter;
var runs = runsFactory.SimulationRuns().ToList();
Assert.AreEqual(nrRuns, runs.Count);
jobContainer.AddRun(runs.First(r => r.GetContainer().RunData.BatteryData.Batteries.Any(tuple => !tuple.Item2.ChargeSustainingBattery)));
Assert.AreEqual(1, jobContainer.Runs.Count);
jobContainer.Execute(false);
......@@ -105,6 +164,8 @@ public class HeavyLorrySimulation
Assert.IsTrue(jobContainer.Runs.TrueForAll(runEntry => runEntry.Success));
PrintRuns(jobContainer, fileWriter);
PrintFiles(fileWriter);
}
......
......@@ -34,9 +34,7 @@ public class AuxiliaryDataAdapterTest
Assert.That(ps.ConnectToREESS == fullyElectric);
Assert.That(ps.IsFullyElectric == fullyElectric);
}
}
[TestCase("Small + AMS", "", true, 0.0f, true, TestName = "PEV Fail 2")]
[TestCase("Small + ESS", "", true, 0.0f, true, TestName = "PEV Fail 3")]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment