diff --git a/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs b/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs index 952236e912c1410ecdb362b594388d9d8042b10b..30faa78b2b29dd4ffb9160db75584115a5be4639 100644 --- a/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs +++ b/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs @@ -29,107 +29,107 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.Linq; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; - -namespace TUGraz.VectoCore.Models.Connector.Ports.Impl -{ - public abstract class AbstractResponse : IResponse - { - public object Source { get; set; } - - public Second AbsTime { get; set; } - public Second SimulationInterval { get; set; } - public Meter SimulationDistance { get; set; } - public MeterPerSquareSecond Acceleration { get; set; } - public OperatingPoint OperatingPoint { get; set; } - public PerSecond EngineSpeed { get; set; } - - public Watt EnginePowerRequest { get; set; } - public Watt DynamicFullLoadPower { get; set; } - public Watt DragPower { get; set; } - - public Watt AngledrivePowerRequest { get; set; } - public Watt ClutchPowerRequest { get; set; } - public Watt GearboxPowerRequest { get; set; } - public Watt AxlegearPowerRequest { get; set; } - public Watt WheelsPowerRequest { get; set; } - public Watt VehiclePowerRequest { get; set; } - public Watt BrakePower { get; set; } - public Watt AuxiliariesPowerDemand { get; set; } - - public TorqueConverterOperatingPoint TorqueConverterOperatingPoint { get; set; } - - public override string ToString() - { - var t = GetType(); - return string.Format("{0}{{{1}}}", t.Name, - string.Join(", ", t.GetProperties().Select(p => string.Format("{0}: {1}", p.Name, p.GetValue(this))))); - } - } - - /// <summary> - /// Response when the Cycle is finished. - /// </summary> - public class ResponseCycleFinished : AbstractResponse {} - - /// <summary> - /// Response when a request was successful. - /// </summary> - public class ResponseSuccess : AbstractResponse {} - - /// <summary> - /// Response when the request resulted in an engine or gearbox overload. - /// </summary> - public class ResponseOverload : AbstractResponse - { - public Watt Delta { get; set; } - } - - /// <summary> - /// Response when the request resulted in an engine under-load. - /// </summary> - public class ResponseUnderload : AbstractResponse - { - public Watt Delta { get; set; } - } - - /// <summary> - /// Response when the Speed Limit was exceeded. - /// </summary> - public class ResponseSpeedLimitExceeded : AbstractResponse {} - - /// <summary> - /// Response when the request should have another time interval. - /// </summary> - public class ResponseFailTimeInterval : AbstractResponse - { - public Second DeltaT { get; set; } - } - - public class ResponseDrivingCycleDistanceExceeded : AbstractResponse - { - public Meter MaxDistance { get; set; } - } - - internal class ResponseDryRun : AbstractResponse - { - public Watt DeltaFullLoad { get; set; } - public Watt DeltaDragLoad { get; set; } - public PerSecond DeltaEngineSpeed { get; set; } - } - - internal class ResponseGearShift : AbstractResponse - {} - -/* - internal class ResponseEngineSpeedTooLow : ResponseDryRun {} -*/ - - internal class ResponseEngineSpeedTooHigh : AbstractResponse - { - public PerSecond DeltaEngineSpeed { get; set; } - } +using System.Linq; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; + +namespace TUGraz.VectoCore.Models.Connector.Ports.Impl +{ + public abstract class AbstractResponse : IResponse + { + public object Source { get; set; } + + public Second AbsTime { get; set; } + public Second SimulationInterval { get; set; } + public Meter SimulationDistance { get; set; } + public MeterPerSquareSecond Acceleration { get; set; } + public OperatingPoint OperatingPoint { get; set; } + public PerSecond EngineSpeed { get; set; } + + public Watt EnginePowerRequest { get; set; } + public Watt DynamicFullLoadPower { get; set; } + public Watt DragPower { get; set; } + + public Watt AngledrivePowerRequest { get; set; } + public Watt ClutchPowerRequest { get; set; } + public Watt GearboxPowerRequest { get; set; } + public Watt AxlegearPowerRequest { get; set; } + public Watt WheelsPowerRequest { get; set; } + public Watt VehiclePowerRequest { get; set; } + public Watt BrakePower { get; set; } + public Watt AuxiliariesPowerDemand { get; set; } + + public TorqueConverterOperatingPoint TorqueConverterOperatingPoint { get; set; } + + public override string ToString() + { + var t = GetType(); + return string.Format("{0}{{{1}}}", t.Name, + string.Join(", ", t.GetProperties().Select(p => string.Format("{0}: {1}", p.Name, p.GetValue(this))))); + } + } + + /// <summary> + /// Response when the Cycle is finished. + /// </summary> + public class ResponseCycleFinished : AbstractResponse {} + + /// <summary> + /// Response when a request was successful. + /// </summary> + public class ResponseSuccess : AbstractResponse {} + + /// <summary> + /// Response when the request resulted in an engine or gearbox overload. + /// </summary> + public class ResponseOverload : AbstractResponse + { + public Watt Delta { get; set; } + } + + /// <summary> + /// Response when the request resulted in an engine under-load. + /// </summary> + public class ResponseUnderload : AbstractResponse + { + public Watt Delta { get; set; } + } + + /// <summary> + /// Response when the Speed Limit was exceeded. + /// </summary> + public class ResponseSpeedLimitExceeded : AbstractResponse {} + + /// <summary> + /// Response when the request should have another time interval. + /// </summary> + public class ResponseFailTimeInterval : AbstractResponse + { + public Second DeltaT { get; set; } + } + + public class ResponseDrivingCycleDistanceExceeded : AbstractResponse + { + public Meter MaxDistance { get; set; } + } + + internal class ResponseDryRun : AbstractResponse + { + public Watt DeltaFullLoad { get; set; } + public Watt DeltaDragLoad { get; set; } + public PerSecond DeltaEngineSpeed { get; set; } + } + + internal class ResponseGearShift : AbstractResponse + {} + +/* + internal class ResponseEngineSpeedTooLow : ResponseDryRun {} +*/ + + internal class ResponseEngineSpeedTooHigh : AbstractResponse + { + public PerSecond DeltaEngineSpeed { get; set; } + } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs index a48aebc58f697f75ccd0fdcccbd166dc2f7532af..ccb327146c37dad75928cb500a998b2690516157 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs @@ -611,6 +611,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl if (_idleStart == null) { _idleStart = absTime; _lastEnginePower = _engine.PreviousState.EnginePower; + _engineTargetSpeed = _engine.EngineIdleSpeed; } if (_lastEnginePower == null) { _lastEnginePower = _engine.PreviousState.EnginePower; diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index de45436c96a9cb4cb570a0dce3f65afbe80ae00b..2ed40fbeaef749294c4aef5a848ff2ee2610cbf3 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -175,6 +175,7 @@ <Compile Include="XML\XMLDeclarationInputTest.cs" /> <Compile Include="XML\XMLEngineeringInputRefTest.cs" /> <Compile Include="XML\XMLEngineeringInputSingleTest.cs" /> + <Compile Include="XML\XMLReportTest.cs" /> <Compile Include="XML\XMLWritingTest.cs" /> </ItemGroup> <ItemGroup> diff --git a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..a2f515f466b38755ace16ed6f4c7fbdc3dec6107 --- /dev/null +++ b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs @@ -0,0 +1,85 @@ +using System; +using System.IO; +using System.Xml; +using System.Xml.Schema; +using NUnit.Framework; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Tests.XML +{ + public class XMLReportTest + { + const string SampleVehicleDecl = "TestData/XML/XMLReaderDeclaration/vecto_vehicle-sample.xml"; + + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + + [TestCase(SampleVehicleDecl)] + public void RunDeclarationJob(string filename) + { + var fileWriter = new FileOutputWriter(filename); + var sumWriter = new SummaryDataContainer(fileWriter); + var jobContainer = new JobContainer(sumWriter); + var dataProvider = new XMLDeclarationInputDataProvider(XmlReader.Create(filename), true); + var runsFactory = new SimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter) { + ModalResults1Hz = false, + WriteModalResults = false, + ActualModalData = false, + Validate = false, + }; + jobContainer.AddRuns(runsFactory); + jobContainer.Execute(); + jobContainer.WaitFinished(); + + var customerRecord = fileWriter.XMLCustomerReportName; + var manufacturerRecord = fileWriter.XMLFullReportName; + + Assert.IsTrue(DoValidation(XmlReader.Create(customerRecord))); + Assert.IsTrue(DoValidation(XmlReader.Create(manufacturerRecord))); + } + + private bool DoValidation(XmlReader hashedComponent) + { + var settings = new XmlReaderSettings { + ValidationType = ValidationType.Schema, + ValidationFlags = //XmlSchemaValidationFlags.ProcessInlineSchema | + //XmlSchemaValidationFlags.ProcessSchemaLocation | + XmlSchemaValidationFlags.ReportValidationWarnings + }; + //settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); + settings.Schemas.Add(GetXMLSchema("")); + + var vreader = XmlReader.Create(hashedComponent, settings); + var doc = new XmlDocument(); + doc.Load(vreader); + doc.Validate(ValidationCallBack); + return true; + } + + private void ValidationCallBack(object sender, ValidationEventArgs args) + { + throw new Exception("Validation failed"); + } + + private static XmlSchemaSet GetXMLSchema(string version) + { + var xset = new XmlSchemaSet() { XmlResolver = new XmlResourceResolver() }; + foreach (var schema in new[] { "VectoComponent.xsd", "VectoInput.xsd", "VectoOutputManufacturer.xsd", "VectoOutputCustomer.xsd" }) { + var resource = RessourceHelper.LoadResourceAsStream(RessourceHelper.ResourceType.XMLSchema, schema); + + var reader = XmlReader.Create(resource, new XmlReaderSettings(), "schema://"); + xset.Add(XmlSchema.Read(reader, null)); + } + xset.Compile(); + return xset; + } + } +} \ No newline at end of file