diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs index 1c926f3c4886e7daa2a7315ccf7695f8fba981f4..329a280050db05b17c83e686ac1a8b658313bf49 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs @@ -89,9 +89,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl UpdateDrivingAction(currentDistance, ds); if (NextDrivingAction != null) { var remainingDistance = NextDrivingAction.ActionDistance - currentDistance; - var estimatedNextTimestep = remainingDistance / Driver.DataBus.VehicleSpeed; - if (remainingDistance.IsEqual(0.SI<Meter>(), Constants.SimulationSettings.DriverActionDistanceTolerance) || - estimatedNextTimestep.IsSmaller(Constants.SimulationSettings.LowerBoundTimeInterval)) { + var estimatedTimestep = remainingDistance / Driver.DataBus.VehicleSpeed; + + var atTriggerTistance = remainingDistance.IsEqual( + 0.SI<Meter>(), Constants.SimulationSettings.DriverActionDistanceTolerance); + var closeBeforeBraking = estimatedTimestep.IsSmaller(Constants.SimulationSettings.LowerBoundTimeInterval); + var brakingIntervalTooShort = NextDrivingAction.Action == DrivingBehavior.Braking && + ((NextDrivingAction.TriggerDistance - NextDrivingAction.ActionDistance) / Driver.DataBus.VehicleSpeed) + .IsSmaller( + Constants.SimulationSettings.LowerBoundTimeInterval / 20) && !Driver.DataBus.ClutchClosed(absTime); + if ( atTriggerTistance || closeBeforeBraking || brakingIntervalTooShort) { CurrentDrivingMode = DrivingMode.DrivingModeBrake; DrivingModes[CurrentDrivingMode].ResetMode(); Log.Debug("Switching to DrivingMode BRAKE"); diff --git a/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.xsd b/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.xsd new file mode 100644 index 0000000000000000000000000000000000000000..5e1d0dd58c3670393a6e14fab078230606e7e5b9 --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoMonitoring.xsd @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v0.7" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vmrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" targetNamespace="urn:tugraz:ivt:VectoAPI:MonitoringOutput:v0.7" elementFormDefault="qualified" attributeFormDefault="unqualified"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" schemaLocation="VectoOutputManufacturer.0.7.xsd"/> + <xs:element name="VectoMonitoring"> + <xs:complexType> + <xs:sequence> + <xs:element name="ManufacturerRecord" type="vmrf:VectoOutputManufacturerType"/> + <xs:element name="AdditionalData"> + <xs:complexType> + <xs:sequence> + <xs:element name="Vehicle"> + <xs:complexType> + <xs:sequence> + <xs:element name="Make" type="xs:string"> + <xs:annotation> + <xs:documentation>#15</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:sequence minOccurs="0"> + <xs:element name="Engine"> + <xs:complexType> + <xs:sequence> + <xs:element name="WHTC"> + <xs:complexType> + <xs:sequence> + <xs:element name="CO2"> + <xs:annotation> + <xs:documentation>#75</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelConsumption"> + <xs:annotation> + <xs:documentation>#76</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="WHSC"> + <xs:complexType> + <xs:sequence> + <xs:element name="CO2"> + <xs:annotation> + <xs:documentation>#77</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="FuelConsumption"> + <xs:annotation> + <xs:documentation>#78</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="g/kWh"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="Gearbox"> + <xs:complexType> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"> + <xs:annotation> + <xs:documentation>#24</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="xs:string"> + <xs:annotation> + <xs:documentation>#24</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Make" type="xs:string"> + <xs:annotation> + <xs:documentation>#25</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="Axlegear"> + <xs:complexType> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"> + <xs:annotation> + <xs:documentation>#32</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="xs:string"> + <xs:annotation> + <xs:documentation>#32</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Make" type="xs:string"> + <xs:annotation> + <xs:documentation>#33</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="AxleWheels"> + <xs:complexType> + <xs:sequence> + <xs:element name="Axle" minOccurs="2" maxOccurs="4"> + <xs:complexType> + <xs:sequence> + <xs:element name="Tyre"> + <xs:complexType> + <xs:sequence> + <xs:element name="Manufacturer" type="xs:string"> + <xs:annotation> + <xs:documentation>#39</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="xs:string"> + <xs:annotation> + <xs:documentation>#39</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Make" type="xs:string"> + <xs:annotation> + <xs:documentation>#40</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="axleNumber" use="required"> + <xs:simpleType> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1"/> + <xs:maxInclusive value="4"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:element name="AdvancedReducingTechnologies"> + <xs:annotation> + <xs:documentation>#74</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:sequence> + <xs:element name="Entry" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="category" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="advanced aerodynamic measures"/> + <xs:enumeration value="advanced rolling resistance measures"/> + <xs:enumeration value="advanced drivetrain technologies"/> + <xs:enumeration value="advanced engine technologies"/> + <xs:enumeration value="advanced auxiliary technologies"/> + <xs:enumeration value="additional ADAS technologies"/> + <xs:enumeration value="advanced powertrain integration and hybridisation"/> + <xs:enumeration value="other"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="VectoLicenseNbr" type="xs:string"> + <xs:annotation> + <xs:documentation>#72</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + <xs:attribute name="schemaVersion" type="xs:decimal" use="required"/> + </xs:complexType> + </xs:element> +</xs:schema> diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index ae5ba4cbdf283b1384c69c983afb8354af830bd1..9a0c77e859011e33b99e3a530e1bbd0996e91a7d 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -680,6 +680,9 @@ <EmbeddedResource Include="Resources\XSD\VectoEngineeringJob.xsd"> <SubType>Designer</SubType> </EmbeddedResource> + <EmbeddedResource Include="Resources\XSD\VectoMonitoring.xsd"> + <SubType>Designer</SubType> + </EmbeddedResource> <None Include="Utils\VectoVersionCore.tt"> <Generator>TextTemplatingFileGenerator</Generator> <LastGenOutput>VectoVersionCore.cs</LastGenOutput> diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs index 94f308f06f801301bda6ba2f1871c0dbd6cc8925..32150285bb1d8c30b17b4bdf2e84682c2bca2aa0 100644 --- a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs @@ -117,7 +117,7 @@ namespace TUGraz.VectoCore.Tests.Integration var val2 = new XMLValidator(XmlReader.Create(customerFile)); Assert.IsTrue(val2.ValidateXML(XmlDocumentType.CustomerReport)); - var val3 = new XMLValidator(XmlReader.Create(customerFile)); + var val3 = new XMLValidator(XmlReader.Create(monitoringFile)); Assert.IsTrue(val3.ValidateXML(XmlDocumentType.MonitoringReport)); }