From 692c36083137a998f79497b2a04c88d79866d1ab Mon Sep 17 00:00:00 2001 From: Harald Martini <harald.martini@student.tugraz.at> Date: Thu, 2 Jun 2022 16:01:10 +0200 Subject: [PATCH] implemented conventional completed bus mockup functionality --- .../Models/Simulation/Impl/JobContainer.cs | 2 +- .../Impl/SimulatorFactory/SimulatorFactory.cs | 1 + .../OutputData/ModalDataContainer.cs | 5 +- .../XMLDeclarationReportCompletedVehicle.cs | 14 +++++ .../Multistage/MultistageMultipleRunsTest.cs | 12 ++--- .../VectoMockup/MockupModalDataContainer.cs | 11 +++- VectoMockup/VectoMockup/MockupResultReader.cs | 14 ++++- ...DeclarationMockupReportCompletedVehicle.cs | 30 ++++++++--- .../CompletedBusRunDataFactory.cs | 53 +++++++++++-------- .../MockupDeclarationSimulatorFactory.cs | 22 +++++++- 10 files changed, 123 insertions(+), 41 deletions(-) diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs index ad2dc8c984..a4c1640859 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/JobContainer.cs @@ -110,7 +110,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl return _simulatorFactory.FollowUpSimulatorFactory; } catch (Exception e){ LogManager.GetLogger(typeof(JobContainer).FullName).Error(e); - throw e; + throw; }finally { } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs index 19481c6d04..5078ec8586 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs @@ -293,6 +293,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory data.Report.AddResult(data.Loading, data.Mission, data.EngineData?.FuelMode ?? 0, data, modData); } }; + return addReportResult; } } diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs index 7690c5d72e..07d483372e 100644 --- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs @@ -647,7 +647,10 @@ namespace TUGraz.VectoCore.OutputData } } - _addReportResult(this); + if (_addReportResult != null) { + _addReportResult(this); + } + } private IList<string> GetOutputColumns() diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs index 18d8a1e85e..f2539057dd 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs @@ -19,6 +19,11 @@ namespace TUGraz.VectoCore.OutputData.XML { #region Overrides of XMLDeclarationReport + protected override void DoStoreResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData) + { + //base.DoStoreResult(entry, runData, modData); + } + protected override void InstantiateReports(VectoRunData modelData) { ManufacturerRpt = modelData.Exempted @@ -101,5 +106,14 @@ namespace TUGraz.VectoCore.OutputData.XML { OutputReports(); } } + + #region Overrides of XMLDeclarationReport + + protected override void WriteResult(ResultEntry result) + { + base.WriteResult(result); + } + + #endregion } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs index 62a554a0c8..88e1d37ba5 100644 --- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageMultipleRunsTest.cs @@ -129,9 +129,10 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage //SpecialCase II [Test, Timeout(1000 * 20 * 60)] + [NonParallelizable] public void PrimaryAndCompletedTest() { - StartSimulation(CompletedDiesel); + StartSimulation(CompletedDiesel, false); var writtenFiles = GetWrittenFiles(); ShowWrittenFiles(writtenFiles); @@ -160,7 +161,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage } //SpecialCase I - [Test, Timeout(1000 * 10 * 60)] + [Test]//, Timeout(1000 * 10 * 60)] public void PrimaryAndInterimTest() { StartSimulation(InterimDiesel); @@ -168,14 +169,13 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage var writtenFiles = GetWrittenFiles(); ShowWrittenFiles(writtenFiles); - Assert.IsTrue(writtenFiles.Contains(_tempFileOutputWriter.XMLFullReportName)); Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLFullReportName)); Assert.IsFalse(writtenFiles.Contains(_fileoutputWriter.XMLCustomerReportName)); Assert.IsTrue(writtenFiles.Contains(_fileoutputWriter.XMLMultistageReportFileName)); } - private void StartSimulation(string path) + private void StartSimulation(string path, bool multithreaded = true) { var inputFile = Path.GetFullPath(path); var input = JSONInputDataFactory.ReadJsonJob(inputFile); @@ -187,7 +187,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage } - private void StartSimulation(IInputDataProvider input) + private void StartSimulation(IInputDataProvider input, bool multithreaded = true) { _fileoutputWriter = new FileOutputWriter(_outputDirectory); _tempFileOutputWriter = new TempFileOutputWriter(_fileoutputWriter); @@ -202,7 +202,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage _jobContainer.AddRuns(runsFactory); - _jobContainer.Execute(); + _jobContainer.Execute(multithreaded); } private void ShowWrittenFiles(IList<string> writtenFiles) diff --git a/VectoMockup/VectoMockup/MockupModalDataContainer.cs b/VectoMockup/VectoMockup/MockupModalDataContainer.cs index 1cebce4a3d..859eed4b48 100644 --- a/VectoMockup/VectoMockup/MockupModalDataContainer.cs +++ b/VectoMockup/VectoMockup/MockupModalDataContainer.cs @@ -42,11 +42,14 @@ namespace TUGraz.VectoMockup internal class MockupModalDataContainer : IModalDataContainer { private IModalDataContainer _modalDataContainerImplementation; + private readonly Action<IModalDataContainer> _addReportResult; - public MockupModalDataContainer(IModalDataContainer modalDataContainer) + public MockupModalDataContainer(IModalDataContainer modalDataContainer, + Action<IModalDataContainer> addReportResult) { _modalDataContainerImplementation = modalDataContainer; - + _addReportResult = addReportResult; + } #region MockupImplementation @@ -143,6 +146,10 @@ namespace TUGraz.VectoMockup public void Finish(VectoRun.Status runStatus, Exception exception = null) { _modalDataContainerImplementation.Finish(runStatus, exception); + if (_addReportResult != null) { + _addReportResult(this); + } + } public void FinishSimulation() diff --git a/VectoMockup/VectoMockup/MockupResultReader.cs b/VectoMockup/VectoMockup/MockupResultReader.cs index 654c6302f5..344fe5ea0a 100644 --- a/VectoMockup/VectoMockup/MockupResultReader.cs +++ b/VectoMockup/VectoMockup/MockupResultReader.cs @@ -11,6 +11,7 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.OutputData.XML; @@ -106,8 +107,17 @@ namespace TUGraz.VectoMockup private static string GetArch(string xmlName, VectoRunData runData) { - var ovc = runData.InputData.JobInputData.Vehicle.OvcHev; - var jobType = runData.InputData.JobInputData.JobType; + + bool ovc = false; + var jobType = VectoSimulationJobType.ConventionalVehicle; + if (runData.InputData is IXMLMultistageInputDataProvider) { + ovc = false; //TODO implement + } else { + ovc = runData.InputData.JobInputData.Vehicle.OvcHev; + jobType = runData.InputData.JobInputData.JobType; + } + + if (jobType == VectoSimulationJobType.ConventionalVehicle) { return "Conv"; } diff --git a/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupReportCompletedVehicle.cs b/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupReportCompletedVehicle.cs index 42cacdedc8..c04214e043 100644 --- a/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupReportCompletedVehicle.cs +++ b/VectoMockup/VectoMockup/Reports/XMLDeclarationMockupReportCompletedVehicle.cs @@ -14,7 +14,7 @@ using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.Manu namespace TUGraz.VectoMockup.Reports { - internal class XMLDeclarationMockupReportCompletedVehicle : XMLDeclarationReportCompletedVehicle + public class XMLDeclarationMockupReportCompletedVehicle : XMLDeclarationReportCompletedVehicle { private readonly IManufacturerReportFactory _mrfFactory; private readonly ICustomerInformationFileFactory _cifFactory; @@ -57,15 +57,25 @@ namespace TUGraz.VectoMockup.Reports base.InitializeReport(modelData, fuelModes); } + #endregion + + #region Overrides of XMLDeclarationReport + + #region Overrides of XMLDeclarationReportCompletedVehicle + protected internal override void DoWriteReport() { - base.DoWriteReport(); + (ManufacturerRpt as IXMLMockupReport).WriteMockupSummary(Results.First()); + (CustomerRpt as IXMLMockupReport).WriteMockupSummary(Results.First()); + GenerateReports(); + if (Writer != null) + { + OutputReports(); + } } #endregion - #region Overrides of XMLDeclarationReport - protected override void DoStoreResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData) { base.DoStoreResult(entry, runData, modData); @@ -73,14 +83,22 @@ namespace TUGraz.VectoMockup.Reports protected override void WriteResult(ResultEntry result) { - base.WriteResult(result); + (ManufacturerRpt as IXMLMockupReport).WriteMockupResult(result); + (CustomerRpt as IXMLMockupReport).WriteMockupResult(result); } protected override void GenerateReports() { - base.GenerateReports(); + base.GenerateReports(); + } + + protected override void OutputReports() + { + base.OutputReports(); } + + #endregion } } diff --git a/VectoMockup/VectoMockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs b/VectoMockup/VectoMockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs index 4038435aef..d09f52d067 100644 --- a/VectoMockup/VectoMockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs +++ b/VectoMockup/VectoMockup/Simulation/RundataFactories/CompletedBusRunDataFactory.cs @@ -23,6 +23,7 @@ namespace TUGraz.VectoMockup.Simulation.RundataFactories } + #region Overrides of DeclarationModeCompletedMultistageBusVectoRunDataFactory protected override void Initialize() @@ -58,30 +59,34 @@ namespace TUGraz.VectoMockup.Simulation.RundataFactories Mission = mission, GearboxData = PrimaryBusMockupRunDataFactory.CreateMockupGearboxData(PrimaryVehicle), InputData = InputDataProvider, + SimulationType = SimulationType.DistanceCycle, + ExecutionMode = ExecutionMode.Declaration, + JobName = InputDataProvider.JobInputData.ManufacturingStages.Last().Vehicle.Identifier, + Report = Report, //Aux = PrimaryBusMockupRunDataFactory.CreateMockupBusAux(CompletedVehicle), - // //AirdragData = DataAdapterSpecific.CreateAirdragData(CompletedVehicle, mission), - // //EngineData = DataAdapterSpecific.CreateEngineData(PrimaryVehicle, modeIdx, mission), - // //ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), - // //GearboxData = _gearboxData, - // //AxleGearData = _axlegearData, - // //AngledriveData = _angledriveData, - // Aux = DataAdapterSpecific.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData, - // PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segmentCompletedBus.VehicleClass, CompletedVehicle.Length, - // PrimaryVehicle.Components.AxleWheels.NumSteeredAxles), - //Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), - //Retarder = _retarderData, - ////DriverData = _driverData, - //ExecutionMode = ExecutionMode.Declaration, - //JobName = InputDataProvider.JobInputData.ManufacturingStages.Last().Vehicle.Identifier,//?!? Jobname - //ModFileSuffix = $"_{_segmentCompletedBus.VehicleClass.GetClassNumber()}-Specific_{loading.Key}", - //Report = Report, - //Mission = mission, - //InputDataHash = InputDataProvider.XMLHash,// right hash?!? - //SimulationType = SimulationType.DistanceCycle, - //VehicleDesignSpeed = _segmentCompletedBus.DesignSpeed, - //GearshiftParameters = _gearshiftData, - }; + // //AirdragData = DataAdapterSpecific.CreateAirdragData(CompletedVehicle, mission), + // //EngineData = DataAdapterSpecific.CreateEngineData(PrimaryVehicle, modeIdx, mission), + // //ElectricMachinesData = new List<Tuple<PowertrainPosition, ElectricMotorData>>(), + // //GearboxData = _gearboxData, + // //AxleGearData = _axlegearData, + // //AngledriveData = _angledriveData, + // Aux = DataAdapterSpecific.CreateAuxiliaryData(PrimaryVehicle.Components.AuxiliaryInputData, + // PrimaryVehicle.Components.BusAuxiliaries, mission.MissionType, _segmentCompletedBus.VehicleClass, CompletedVehicle.Length, + // PrimaryVehicle.Components.AxleWheels.NumSteeredAxles), + //Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), + //Retarder = _retarderData, + ////DriverData = _driverData, + //ExecutionMode = ExecutionMode.Declaration, + //JobName = InputDataProvider.JobInputData.ManufacturingStages.Last().Vehicle.Identifier,//?!? Jobname + //ModFileSuffix = $"_{_segmentCompletedBus.VehicleClass.GetClassNumber()}-Specific_{loading.Key}", + //Report = Report, + //Mission = mission, + //InputDataHash = InputDataProvider.XMLHash,// right hash?!? + //SimulationType = SimulationType.DistanceCycle, + //VehicleDesignSpeed = _segmentCompletedBus.DesignSpeed, + //GearshiftParameters = _gearshiftData, + }; simulationRunData.EngineData.FuelMode = 0; simulationRunData.VehicleData.VehicleClass = _segmentCompletedBus.VehicleClass; simulationRunData.BusAuxiliaries = DataAdapterSpecific.CreateBusAuxiliariesData(mission, PrimaryVehicle, CompletedVehicle, simulationRunData); @@ -100,7 +105,11 @@ namespace TUGraz.VectoMockup.Simulation.RundataFactories Loading = loading.Value.Item1, }, + JobName = InputDataProvider.JobInputData.ManufacturingStages.Last().Vehicle.Identifier, + ExecutionMode = ExecutionMode.Declaration, + SimulationType = SimulationType.DistanceCycle, Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()), + Report = Report, }; return base.CreateVectoRunDataGeneric(mission, loading, primarySegment, modeIdx); } diff --git a/VectoMockup/VectoMockup/Simulation/SimulatorFactory/MockupDeclarationSimulatorFactory.cs b/VectoMockup/VectoMockup/Simulation/SimulatorFactory/MockupDeclarationSimulatorFactory.cs index ff38379ff0..4f4997bdbc 100644 --- a/VectoMockup/VectoMockup/Simulation/SimulatorFactory/MockupDeclarationSimulatorFactory.cs +++ b/VectoMockup/VectoMockup/Simulation/SimulatorFactory/MockupDeclarationSimulatorFactory.cs @@ -50,10 +50,30 @@ namespace TUGraz.VectoMockup.Simulation.SimulatorFactory { var addReportResult = PrepareReport(data); return new MockupRun(new VehicleContainer(ExecutionMode.Declaration, - new ModalDataContainer(data, ReportWriter, addReportResult)) + new MockupModalDataContainer(new ModalDataContainer(data, ReportWriter, null), addReportResult)) { RunData = data }); } + protected new static Action<IModalDataContainer> PrepareReport(VectoRunData data) + { + if (data.Report != null) + { + data.Report.PrepareResult(data.Loading, data.Mission, data.EngineData?.FuelMode ?? 0, data); + } + Action<IModalDataContainer> addReportResult = modData => { + if (modData is MockupModalDataContainer && data.Report != null) { + data.Report.AddResult(data.Loading, data.Mission, data.EngineData?.FuelMode ?? 0, data, modData); + } + + return; + //if (data.Report != null) + //{ + // data.Report.AddResult(data.Loading, data.Mission, data.EngineData?.FuelMode ?? 0, data, modData); + //} + }; + + return addReportResult; + } #region Overrides of SimulatorFactoryDeclaration -- GitLab