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

Skip to content
Snippets Groups Projects
Commit cfae7a86 authored by Franz KOBER josef's avatar Franz KOBER josef
Browse files

Merge branch 'feature/VECTO-1190-declaration-mode-for-heavy-busesQ' into...

Merge branch 'feature/VECTO-1190-declaration-mode-for-heavy-busesQ' into feature/VECTO-1190-declaration-mode-for-heavy-busesK

# Conflicts:
#	VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
parents 8bf26c8b 7c75230b
No related branches found
No related tags found
No related merge requests found
Showing
with 491 additions and 209 deletions
......@@ -114,7 +114,7 @@ Public Class Vehicle
Dim segment As Segment = DeclarationData.TruckSegments.Lookup(vehicle.VehicleCategory, vehicle.AxleConfiguration,
vehicle.GrossVehicleMassRating, vehicle.CurbMassChassis, false)
vehicleData = doa.CreateVehicleData(vehicle, segment.Missions.First(),
segment.Missions.First().Loadings.First().Value)
segment.Missions.First().Loadings.First())
airdragData = doa.CreateAirdragData(vehicle, segment.Missions.First(), segment)
retarderData = doa.CreateRetarderData(vehicle)
angledriveData = doa.CreateAngledriveData(vehicle)
......
......@@ -52,6 +52,7 @@ Namespace IntegrationTests
aux.Signals.PreExistingAuxPower = (6.1 * 1000).SI(Of Watt)()
aux.Signals.Idle = False
aux.Signals.InNeutral = False
aux.Signals.SimulationInterval = 1.SI(of Second)
'aux.Signals.RunningCalc = True
'aux.Signals.InternalEnginePower = (internalPower * 1000).SI(Of Watt)() 'kW
Dim internalEnginePower = (internalPower * 1000).SI(Of Watt)() 'kW
......@@ -88,7 +89,7 @@ Namespace IntegrationTests
aux.Signals.EngineIdleSpeed = 560.RPMtoRad()
Dim auxCfg = BusAuxiliaryInputData.ReadBusAuxiliaries(auxFilePath, Utils.GetDefaultVehicleData(12000.SI(Of Kilogram)()))
CType(auxCfg, AuxiliaryConfig).FuelMap = fuelMap
'CType(auxCfg, AuxiliaryConfig).FuelMap = fuelMap
CType(aux, BusAuxiliaries).Initialise(auxCfg) ', Path.GetDirectoryName(Path.GetFullPath(auxFilePath)) + "\")
......@@ -106,6 +107,7 @@ Namespace IntegrationTests
'aux.Signals.InternalEnginePower = (internalPower * 1000).SI(Of Watt)() 'kW
Dim internalEnginePower = (internalPower * 1000).SI(Of Watt)() 'kW
aux.Signals.ExcessiveDragPower = engineMotoringPower + internalEnginePower
aux.Signals.SimulationInterval = 1.SI(of Second)
'Dim msg As String = String.Empty
For i As Integer = 0 To 9
......
......@@ -55,13 +55,14 @@ Namespace UnitTests
Dim ssm As ISSMTOOL = GetSSM()
signals.EngineSpeed = 2000.RPMtoRad()
Dim auxConfig = Utils.GetAuxTestConfig()
'Dim hvacMap As New HVACMap("testFiles\TestHvacMap.csv")
'hvacMap.Initialise()
CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = 26.3.SI (Of Volt)
Dim m0 As New M00Impl(auxConfig.ElectricalUserInputsConfig, auxConfig.Signals, ssm.ElectricalWAdjusted)
Dim m0 As New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, ssm.ElectricalWAdjusted)
'Results Cards
Dim readings = New List(Of SmartResult)
......@@ -73,7 +74,7 @@ Namespace UnitTests
CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).ResultCardOverrun = New ResultCard(readings)
target = New M0_5Impl(m0, auxConfig.ElectricalUserInputsConfig, auxConfig.Signals)
target = New M0_5Impl(m0, auxConfig.ElectricalUserInputsConfig, signals)
End Sub
<Test()>
......
......@@ -46,7 +46,7 @@ Namespace UnitTests
dim auxConfig = Utils.GetAuxTestConfig()
dim vehicle = auxConfig.VehicleData
CType(vehicle, VehicleData).Height = 0.SI (of Meter)
'CType(vehicle, VehicleData).Height = 0.SI (of Meter)
Dim ssmInput = SSMInputData.ReadFile(_SSMMAP, vehicle, Nothing)
ssm = New SSMTOOL(ssmInput)
......
......@@ -115,6 +115,7 @@ Namespace UnitTests
signals.PreExistingAuxPower = (AUX * 1000).SI(Of Watt)()
signals.EngineDrivelinePower = (EDP * 1000).SI(Of Watt)()
'signals.SmartElectrics = SM
signals.ExcessiveDragPower = ((EMP - EDP) * 1000).SI(of Watt)
Dim target As New M06Impl(GetAuxConfigDummy().ElectricalUserInputsConfig, M1, M2, M3, M4, M5, signals)
......

Imports Moq
Imports NUnit.Framework
Imports TUGraz.VectoCommon.BusAuxiliaries
Imports TUGraz.VectoCommon.Utils
......@@ -6,6 +7,7 @@ Imports TUGraz.VectoCore.BusAuxiliaries.Interfaces.DownstreamModules
Imports TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl
Imports TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces
Imports TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules
Imports TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics
Namespace UnitTests
<TestFixture()>
......@@ -13,17 +15,34 @@ Namespace UnitTests
Private M5 As M5_Mock
Private M6 As M6_Mock
Private Signals As ISignals
Private M0 As Mock(Of IM0_NonSmart_AlternatorsSetEfficiency)
Private M1 As Mock(Of IM1_AverageHVACLoadDemand)
Private M2 As Mock(Of IM2_AverageElectricalLoadDemand)
Private Bat As Mock(Of ISimpleBattery)
Public Sub New()
Public Sub New()
M5 = New M5_Mock(100, 110, 120)
M0 = New Mock(Of IM0_NonSmart_AlternatorsSetEfficiency)
M0.Setup(Function(x) x.AlternatorsEfficiency).Returns(0.7)
M1 = New Mock(Of IM1_AverageHVACLoadDemand)
M1.Setup(Function(x) x.AveragePowerDemandAtAlternatorFromHVACElectrics).Returns(500.SI(Of Watt))
M2 = New Mock(Of IM2_AverageElectricalLoadDemand)
M2.Setup(Function(x) x.AveragePowerDemandAtAlternatorFromElectrics).Returns(500.SI(Of Watt))
bat = New Mock(of ISimpleBattery)
bat.Setup(Function(x) x.SOC).Returns(0.0)
bat.Setup(Function(x) x.Capacity).Returns(400.SI(Unit.SI.Watt.Hour).Cast(Of WattSecond))
M5 = New M5_Mock(100, 110, 120)
M6 = New M6_Mock(100, 0, false, 110, 120, false, 130, 140, True)
Signals = New Signals()
End Sub
<TestCase()>
Public Sub CreateNew_M7InstanceTest()
Dim target As IM7 = New M07Impl(M5, M6, Signals)
Dim target As IM7 = New M07Impl(M0.Object, M1.Object, M2.Object, M5, M6, bat.Object, 0.92, Signals)
Assert.IsNotNull(target)
End Sub
......@@ -43,13 +62,13 @@ Namespace UnitTests
'OP3 OP3 :Smart Electrical Aux : Alternator Power Gen @ Crank
'OP4 OP4 :Smart Electrical Aux : Ait Compressor Power Gen @ Crank
<Test()> _
<TestCase(100, 200, False, 0, False, True, 300, 400, 500, 600, 700, 200, 600, 200, 600)> _
<TestCase(100, 200, True, 0, False, True, 300, 400, 500, 600, 700, 200, 600, 200, 600)> _
<TestCase(100, 200, False, 1, True, False, 300, 400, 500, 600, 700, 300, 400, 500, 700)>
<TestCase(100, 200, False, false, False, True, 300, 400, 500, 600, 700, 1552.79500, 600, 1552.79500, 600)> _
<TestCase(100, 200, True, false, False, True, 300, 400, 500, 600, 700, 1552.79500, 600, 1552.79500, 600)> _
<TestCase(100, 200, False, true, True, False, 300, 400, 500, 600, 700, 300, 400, 500, 700)>
Public Sub InputOutputTests(ByVal IP1 As Double,
ByVal IP2 As Double,
ByVal IP3 As Boolean,
ByVal IP4 As Double,
ByVal IP4 As Boolean,
ByVal IP5 As Boolean,
ByVal IP6 As Boolean,
ByVal IP7 As Double,
......@@ -71,11 +90,12 @@ Namespace UnitTests
M5._AlternatorsGenerationPowerAtCrankTractionOnWatts = IP1.SI(Of Watt)()
M5._AlternatorsGenerationPowerAtCrankIdleWatts = IP2.SI(Of Watt)()
Signals.Idle = IP3
M6._OverrunFlag = IP4 <> 0
M6._OverrunFlag = IP4
Signals.ClutchEngaged = IP5
Signals.InNeutral = IP6
Signals.EngineSpeed = 0.RPMtoRad()
Signals.EngineIdleSpeed = 0.RPMtoRad()
Signals.SimulationInterval = 1.SI(of Second)
M6._SmartElecAndPneumaticAltPowerGenAtCrank = IP7.SI(Of Watt)()
M6._SmartElecAndPneumaticAirCompPowerGenAtCrank = IP8.SI(Of Watt)()
M6._SmartElecOnlyAltPowerGenAtCrank = IP9.SI(Of Watt)()
......@@ -84,7 +104,7 @@ Namespace UnitTests
'Create Instance of M7 from
Dim target As IM7 = New M07Impl(M5, M6, Signals)
Dim target As IM7 = New M07Impl(M0.Object, M1.Object, M2.Object, M5, M6, bat.Object, 0.92, Signals)
Dim OP1act As Double = target.SmartElectricalAndPneumaticAuxAltPowerGenAtCrank().Value()
Dim OP2act As Double = target.SmartElectricalAndPneumaticAuxAirCompPowerGenAtCrank().Value()
......
......@@ -47,14 +47,15 @@ Public Class Utils
Public Shared Function GetDefaultVehicleData(optional vehicleWeight As Kilogram = Nothing) as VehicleData
Return New VehicleData With {
.CurbMass = If(vehicleWeight, 0.si (of Kilogram)),
.Length = 10.655.SI (Of Meter)(),
.Width = 2.55.SI (Of Meter)(),
.Height = 2.275.SI (of Meter)(),
.FloorType = FloorType.HighFloor,
.PassengerCount = 47,
.DoubleDecker = False
.CurbMass = If(vehicleWeight, 0.si (of Kilogram))
}
'.Length = 10.655.SI (Of Meter)(),
'.Width = 2.55.SI (Of Meter)(),
'.Height = 2.275.SI (of Meter)(),
'.FloorType = FloorType.HighFloor,
'.PassengerCount = 47,
'.DoubleDecker = False
'}
End Function
public shared Function CreatePneumaticAuxConfig(retarder As boolean) As IPneumaticsConsumersDemand
......@@ -83,9 +84,6 @@ Public Class Utils
public Shared Function GetAuxTestConfig(Optional retarder As boolean = true) as AuxiliaryConfig
Dim signals = New Signals()
signals.EngineSpeed = 2000.RPMtoRad()
dim vehicleData = GetDefaultVehicleData()
Dim heatingFuel As FuelData.Entry = New FuelData.Entry(FuelType.DieselCI, Nothing, Nothing, 1,
11.8.SI(Unit.SI.Kilo.Watt.Hour.Per.kilo.Gramm).Cast _
......@@ -153,7 +151,6 @@ Public Class Utils
Constants.BusAuxiliaries.SteadyStateModel.MaxPossibleBenefitFromTechnologyList
},
.VehicleData = vehicleData,
.Signals = signals,
.Actuations = New Actuations() With {
.Braking = 153,
.ParkBrakeAndDoors = 24,
......
......@@ -41,7 +41,6 @@ using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.Declaration;
namespace TUGraz.VectoCommon.InputData
{
public interface IDeclarationJobInputData
......@@ -53,13 +52,12 @@ namespace TUGraz.VectoCommon.InputData
string JobName { get; }
string ShiftStrategy { get; }
}
public interface IComponentInputData
{
DataSource DataSource { get; }
bool SavedInDeclarationMode { get; }
string Manufacturer { get; }
......@@ -191,8 +189,7 @@ namespace TUGraz.VectoCommon.InputData
}
public interface IVehicleComponentsDeclaration
{
{
IAirdragDeclarationInputData AirdragInputData { get; }
IGearboxDeclarationInputData GearboxInputData { get; }
......@@ -214,7 +211,6 @@ namespace TUGraz.VectoCommon.InputData
IAxlesDeclarationInputData AxleWheels { get; }
IBusAuxiliariesDeclarationData BusAuxiliaries { get; }
}
public interface IAxlesDeclarationInputData
......@@ -245,7 +241,7 @@ namespace TUGraz.VectoCommon.InputData
{
None,
Option_1_2,
Option_1_2_3
Option_1_2_3
}
public static class PredictiveCruiseControlTypeHelper
......@@ -259,6 +255,7 @@ namespace TUGraz.VectoCommon.InputData
if (PredictiveCruiseControlType.None.ToString().Equals(value, StringComparison.InvariantCultureIgnoreCase)) {
return PredictiveCruiseControlType.None;
}
return (Prefix + value.Replace(SeparatorXML, SeparatorEnum)).ParseEnum<PredictiveCruiseControlType>();
}
......@@ -528,7 +525,7 @@ namespace TUGraz.VectoCommon.InputData
/// cf. VECTO Input Parameters.xlsx
/// </summary>
CubicMeter Displacement { get; }
Watt RatedPowerDeclared { get; }
PerSecond RatedSpeedDeclared { get; }
......@@ -537,8 +534,7 @@ namespace TUGraz.VectoCommon.InputData
IList<IEngineModeDeclarationInputData> EngineModes { get; }
WHRType WHRType{ get; }
WHRType WHRType { get; }
}
public interface IEngineModeDeclarationInputData
......@@ -561,13 +557,12 @@ namespace TUGraz.VectoCommon.InputData
IWHRData WasteHeatRecoveryDataElectrical { get; }
IWHRData WasteHeatRecoveryDataMechanical { get; }
}
public interface IWHRData
{
double UrbanCorrectionFactor { get; }
double RuralCorrectionFactor { get; }
double MotorwayCorrectionFactor { get; }
......@@ -579,12 +574,10 @@ namespace TUGraz.VectoCommon.InputData
double EngineeringCorrectionFactor { get; }
TableData GeneratedPower { get; }
}
public interface IEngineFuelDelcarationInputData
{
FuelType FuelType { get; }
/// <summary>
......@@ -619,7 +612,6 @@ namespace TUGraz.VectoCommon.InputData
/// engine speed in rpm, torque in NM, fuel consumption in g/h
/// </summary>
TableData FuelConsumptionMap { get; }
}
......@@ -699,7 +691,7 @@ namespace TUGraz.VectoCommon.InputData
public interface IElectricSupplyDeclarationData
{
IList<IAlternatorDeclarationInputData> Alternators { get; }
bool SmartElectrics { get; }
Watt MaxAlternatorPower { get; }
......@@ -718,7 +710,6 @@ namespace TUGraz.VectoCommon.InputData
bool HeadlightsLED { get; }
bool BrakelightsLED { get; }
}
public interface IAlternatorDeclarationInputData
......@@ -728,7 +719,7 @@ namespace TUGraz.VectoCommon.InputData
double Ratio { get; }
}
public interface IPneumaticSupplyDeclarationData
{
string Clutch { get; }
......@@ -770,7 +761,7 @@ namespace TUGraz.VectoCommon.InputData
bool SeparateAirDistributionDucts { get; }
}
public interface IResultsInputData
{
string Status { get; }
......@@ -792,12 +783,12 @@ namespace TUGraz.VectoCommon.InputData
public interface ISimulationParameter
{
Kilogram TotalVehicleMass { get; }
Kilogram Payload { get; }
Kilogram TotalVehicleMass { get; }
Kilogram Payload { get; }
int PassengerCount { get; }
string FuelMode { get; }
}
public interface IApplicationInformation
{
......
......@@ -66,4 +66,12 @@ namespace TUGraz.VectoCommon.InputData
DigestData ManufacturerHash { get; }
}
public interface ISingleBusInputDataProvider : IDeclarationInputDataProvider
{
IVehicleDeclarationInputData PrimaryVehicle { get; }
IVehicleDeclarationInputData CompletedVehicle { get; }
}
}
......@@ -196,6 +196,7 @@ namespace TUGraz.VectoCore.Configuration
public static readonly Meter InternalHeightDoubleDecker = 1.8.SI<Meter>();
public static readonly Meter HeightLuggageCompartment = 0.5.SI<Meter>();
public static readonly SIBase<Meter> EntranceHeight = 0.27.SI<Meter>();
public static class Auxiliaries
{
......
......@@ -965,9 +965,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
#endregion
}
public class JSONInputDataSingleBusV6 : JSONFile
public class JSONInputDataSingleBusV6 : JSONFile, ISingleBusInputDataProvider, IDeclarationJobInputData
{
private readonly IXMLInputDataReader _xmlInputReader;
......@@ -981,7 +980,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
var completedInputData = Path.Combine(BasePath, Body.GetEx<string>("CompletedVehicle"));
PrimaryVehicle = CreateReader(primaryInputData);
CompletedVehidle = CreateReader(completedInputData);
CompletedVehicle = CreateReader(completedInputData);
JobName = CompletedVehicle.VIN;
}
private IVehicleDeclarationInputData CreateReader(string vehicleFileName)
......@@ -997,7 +998,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
#region Implementation of ISingleBusInputDataProvider
public IVehicleDeclarationInputData PrimaryVehicle { get; }
public IVehicleDeclarationInputData CompletedVehidle { get; }
public IVehicleDeclarationInputData CompletedVehicle { get; }
#endregion
#region Implementation of IDeclarationInputDataProvider
public IDeclarationJobInputData JobInputData { get { return this; } }
public XElement XMLHash { get { return new XElement(XMLNames.DI_Signature); } }
#endregion
#region Implementation of IDeclarationJobInputData
public IVehicleDeclarationInputData Vehicle { get { return PrimaryVehicle; } }
public string JobName { get; }
public string ShiftStrategy { get { return ""; } }
#endregion
}
......
......@@ -93,6 +93,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
return new JSONInputDataV4(json, filename, tolerateMissing);
case 5:
return new JSONInputDataV5(json, filename, tolerateMissing);
case 6:
return new JSONInputDataSingleBusV6(json, filename, tolerateMissing);
default:
throw new VectoException("Job-File: Unsupported FileVersion. Got: {0} ", version);
}
......
......@@ -253,7 +253,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public override IPneumaticSupplyDeclarationData PneumaticSupply { get { return null; } }
public override IPneumaticConsumersDeclarationData PneumaticConsumers { get { return null; } }
//public override IPneumaticConsumersDeclarationData PneumaticConsumers { get { return null; } }
public override BusHVACSystemConfiguration SystemConfiguration
{
......
......@@ -90,6 +90,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
if (ExemptedVehicle) {
return null;
}
return _ptoNode ?? (_ptoNode = GetNode(XMLNames.Vehicle_PTO) as XmlElement);
}
}
......@@ -271,17 +272,55 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
}
}
public virtual string RegisteredClass { get { return string.Empty; } }
public virtual int NuberOfPassengersUpperDeck { get { return 0; } }
public virtual int NumberOfPassengersLowerDeck { get { return 0; } }
public virtual VehicleCode VehicleCode { get { return VehicleCode.NOT_APPLICABLE; } }
public virtual FloorType FloorType { get { return FloorType.Unknown; } }
public virtual bool Articulated { get { return false; } }
public virtual Meter Height { get { return null; } }
public virtual Meter Length { get { return null; } }
public virtual Meter Width { get { return null; } }
public virtual Meter EntranceHeight { get { return null; } }
public virtual string RegisteredClass
{
get { return string.Empty; }
}
public virtual int NuberOfPassengersUpperDeck
{
get { return 0; }
}
public virtual int NumberOfPassengersLowerDeck
{
get { return 0; }
}
public virtual VehicleCode VehicleCode
{
get { return VehicleCode.NOT_APPLICABLE; }
}
public virtual FloorType FloorType
{
get { return FloorType.Unknown; }
}
public virtual bool Articulated
{
get { return false; }
}
public virtual Meter Height
{
get { return null; }
}
public virtual Meter Length
{
get { return null; }
}
public virtual Meter Width
{
get { return null; }
}
public virtual Meter EntranceHeight
{
get { return null; }
}
public virtual IVehicleComponentsDeclaration Components
{
......@@ -391,8 +430,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
get { return PredictiveCruiseControlType.None; }
}
public bool? ATEcoRollReleaseLockupClutch { get { return null; } }
public XmlNode XMLSource { get { return null; } }
public bool? ATEcoRollReleaseLockupClutch
{
get { return null; }
}
public XmlNode XMLSource
{
get { return null; }
}
#endregion
}
......@@ -419,7 +465,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
#region Overrides of XMLDeclarationVehicleDataProviderV10
#endregion
public override VehicleCategory VehicleCategory
......@@ -602,9 +647,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
#region Overrides of AbstractCommonComponentType
public override string Manufacturer { get { return GetString(XMLNames.ManufacturerPrimaryVehicle); } }
public override string Manufacturer
{
get { return GetString(XMLNames.ManufacturerPrimaryVehicle); }
}
public override string ManufacturerAddress { get { return GetString(XMLNames.ManufacturerAddressPrimaryVehicle); } }
public override string ManufacturerAddress
{
get { return GetString(XMLNames.ManufacturerAddressPrimaryVehicle); }
}
#endregion
......@@ -616,18 +667,35 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
get { return ADASReader.ADASInputData; }
}
public override XmlElement PTONode { get { return null; } }
public override IPTOTransmissionInputData PTOTransmissionInputData { get { return null; } }
public override XmlElement PTONode
{
get { return null; }
}
public override VehicleCategory VehicleCategory { get { return VehicleCategory.HeavyBusPrimaryVehicle; } }
public override IPTOTransmissionInputData PTOTransmissionInputData
{
get { return null; }
}
public override Kilogram CurbMassChassis { get { return null; } }
public override VehicleCategory VehicleCategory
{
get { return VehicleCategory.HeavyBusPrimaryVehicle; }
}
public override Kilogram GrossVehicleMassRating { get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); } }
public override Kilogram CurbMassChassis
{
get { return null; }
}
public override Meter EntranceHeight { get { return null; } }
public override Kilogram GrossVehicleMassRating
{
get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); }
}
public override Meter EntranceHeight
{
get { return null; }
}
#endregion
......@@ -652,21 +720,37 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public new static readonly string QUALIFIED_XSD_TYPE =
XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
public XMLDeclarationMediumLorryVehicleDataProviderV26(IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { }
public XMLDeclarationMediumLorryVehicleDataProviderV26(
IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) { }
#region Overrides of XMLDeclarationVehicleDataProviderV10
public override bool SleeperCab { get { return false; } }
public override bool SleeperCab
{
get { return false; }
}
public override bool VocationalVehicle { get { return false; } }
public override bool VocationalVehicle
{
get { return false; }
}
public override IPTOTransmissionInputData PTOTransmissionInputData { get { return null; } }
public override IPTOTransmissionInputData PTOTransmissionInputData
{
get { return null; }
}
public override XmlElement PTONode { get { return null; } }
public override XmlElement PTONode
{
get { return null; }
}
#region Overrides of XMLDeclarationVehicleDataProviderV10
public override Kilogram GrossVehicleMassRating { get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); } }
public override Kilogram GrossVehicleMassRating
{
get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); }
}
#endregion
......@@ -683,6 +767,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
#endregion
}
public class XMLDeclarationCompletedBusDataProviderV26 : XMLDeclarationVehicleDataProviderV20
{
public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26;
......@@ -701,34 +786,45 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
#region Overrides of AbstractCommonComponentType
public override string Manufacturer { get { return GetString(XMLNames.ManufacturerCompletedVehicle); } }
public override string Manufacturer
{
get { return GetString(XMLNames.ManufacturerCompletedVehicle); }
}
public override string ManufacturerAddress { get { return GetString(XMLNames.ManufacturerAddressCompletedVehicle); } }
public override string ManufacturerAddress
{
get { return GetString(XMLNames.ManufacturerAddressCompletedVehicle); }
}
#endregion
#region Overrides of XMLDeclarationVehicleDataProviderV10
public override string RegisteredClass { get { return GetString(XMLNames.Vehicle_RegisteredClass); } }
public override string RegisteredClass
{
get { return GetString(XMLNames.Vehicle_RegisteredClass); }
}
public override VehicleCode VehicleCode { get { return GetString(XMLNames.Vehicle_VehicleCode).ParseEnum<VehicleCode>(); } }
public override VehicleCode VehicleCode
{
get { return GetString(XMLNames.Vehicle_VehicleCode).ParseEnum<VehicleCode>(); }
}
//TechnicalPermissibleMaximumLadenMass
public override Kilogram GrossVehicleMassRating { get { return GetDouble(XMLNames.TPMLM).SI<Kilogram>(); } }
public override Kilogram GrossVehicleMassRating
{
get { return GetDouble(XMLNames.TPMLM).SI<Kilogram>(); }
}
public override TankSystem? TankSystem
{
get
{
return GetString(XMLNames.Vehicle_NgTankSystem).ParseEnum<TankSystem>();
}
get { return GetString(XMLNames.Vehicle_NgTankSystem).ParseEnum<TankSystem>(); }
}
public override int NumberOfPassengersLowerDeck
{
get
{
get {
var node = GetNode(XMLNames.Bus_LowerDeck);
return XmlConvert.ToInt32(node.InnerText);
}
......@@ -736,34 +832,51 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public override int NuberOfPassengersUpperDeck
{
get
{
get {
var node = GetNode(XMLNames.Bus_UpperDeck);
return XmlConvert.ToInt32(node.InnerText);
}
}
//HeightIntegratedBody
public override Meter Height { get { return GetDouble(XMLNames.Bus_HeighIntegratedBody).SI<Meter>(); }}
public override Meter Height
{
get { return GetDouble(XMLNames.Bus_HeighIntegratedBody).SI<Meter>(); }
}
//VehicleLength
public override Meter Length { get { return GetDouble(XMLNames.Bus_VehicleLength).SI<Meter>(); } }
public override Meter Length
{
get { return GetDouble(XMLNames.Bus_VehicleLength).SI<Meter>(); }
}
//VehicleWidth
public override Meter Width { get { return GetDouble(XMLNames.Bus_VehicleWidth).SI<Meter>(); } }
public override Meter Width
{
get { return GetDouble(XMLNames.Bus_VehicleWidth).SI<Meter>(); }
}
public override XmlElement PTONode
{
get { return null; }
}
#endregion
public bool LowEntry { get { return GetBool(XMLNames.Bus_LowEntry); } }
public override FloorType FloorType
{
get { return GetBool(XMLNames.Bus_LowEntry) ? FloorType.LowFloor : FloorType.HighFloor; }
}
public override Meter EntranceHeight { get { return GetDouble(XMLNames.Bus_EntranceHeight).SI<Meter>(); } }
public override Meter EntranceHeight
{
get { return GetDouble(XMLNames.Bus_EntranceHeight).SI<Meter>(); }
}
public virtual string DoorDriveTechnology { get { return GetString(XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology); } }
public virtual string DoorDriveTechnology
{
get { return GetString(XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology); }
}
#region Overrides of AbstractXMLResource
......@@ -783,21 +896,21 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public class XMLDeclarationPrimaryVehicleBusDataProviderV01 : AbstractCommonComponentType, IXMLDeclarationVehicleData
{
public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01;
public static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_PRIMARY_BUS_VEHICLE_URI_V01;
public const string XSD_TYPE = "VehiclePIFType";
public const string XSD_TYPE = "VehiclePIFType";
public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
public static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE);
protected IXMLPrimaryVehicleBusJobInputData BusJobData;
private XmlElement _adasNode;
private IAdvancedDriverAssistantSystemDeclarationInputData _adas;
private XmlElement _componentNode;
private IVehicleComponentsDeclaration _components;
public XMLDeclarationPrimaryVehicleBusDataProviderV01(IXMLPrimaryVehicleBusJobInputData busJobData, XmlNode xmlNode, string sourceFile)
public XMLDeclarationPrimaryVehicleBusDataProviderV01(
IXMLPrimaryVehicleBusJobInputData busJobData, XmlNode xmlNode, string sourceFile)
: base(xmlNode, sourceFile)
{
BusJobData = busJobData;
......@@ -817,14 +930,17 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
#endregion
#region IXMLDeclarationVehicleData interface
public string VIN { get { return GetString(XMLNames.Vehicle_VIN); } }
public string VIN
{
get { return GetString(XMLNames.Vehicle_VIN); }
}
public VehicleCategory VehicleCategory
{
get { return VehicleCategoryHelper.Parse(GetString(XMLNames.Vehicle_VehicleCategory)); }
get { return VehicleCategoryHelper.Parse(GetString(XMLNames.Vehicle_VehicleCategory)); }
}
public AxleConfiguration AxleConfiguration
......@@ -835,13 +951,13 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
//TechnicalPermissibleMaximumLadenMass
public Kilogram GrossVehicleMassRating
{
get { return GetDouble(XMLNames.TPMLM).SI<Kilogram>(); }
get { return GetDouble(XMLNames.TPMLM).SI<Kilogram>(); }
}
//IdlingSpeed
public PerSecond EngineIdleSpeed
{
get { return GetDouble(XMLNames.Engine_IdlingSpeed).SI<PerSecond>(); }
get { return GetDouble(XMLNames.Engine_IdlingSpeed).SI<PerSecond>(); }
}
public RetarderType RetarderType
......@@ -853,7 +969,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
{
get { return GetDouble(XMLNames.Vehicle_RetarderRatio); }
}
public AngledriveType AngledriveType
{
get { return GetString(XMLNames.Vehicle_AngledriveType).ParseEnum<AngledriveType>(); }
......@@ -866,17 +982,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public XmlElement ADASNode
{
get
{
return _adasNode ?? (_adasNode = GetNode(XMLNames.Vehicle_ADAS, required: false) as XmlElement);
}
get { return _adasNode ?? (_adasNode = GetNode(XMLNames.Vehicle_ADAS, required: false) as XmlElement); }
}
public IXMLADASReader ADASReader { get; set; }
public IAdvancedDriverAssistantSystemDeclarationInputData ADAS
{
get { return _adas ?? (_adas = ADASReader.ADASInputData); }
get { return _adas ?? (_adas = ADASReader.ADASInputData); }
}
......@@ -884,29 +997,25 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
{
get { return ReadTorqueLimits(); }
}
public XmlElement ComponentNode
{
get
{
if (ExemptedVehicle)
{
get {
if (ExemptedVehicle) {
return null;
}
return _componentNode ?? (_componentNode = GetNode(XMLNames.Vehicle_Components) as XmlElement);
}
}
public IXMLComponentReader ComponentReader { get; set; }
public Meter EntranceHeight { get; }
public IVehicleComponentsDeclaration Components
{
get
{
return _components ?? (_components = ComponentReader.ComponentInputData);
}
get { return _components ?? (_components = ComponentReader.ComponentInputData); }
}
......@@ -938,12 +1047,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public IXMLPTOReader PTOReader { get; set; }
public IPTOTransmissionInputData PTOTransmissionInputData { get; }
#endregion
#endregion
#region Overrides of AbstractXMLResource
protected override XNamespace SchemaNamespace
......@@ -963,13 +1070,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
{
var torqueLimits = new List<ITorqueLimitInputData>();
var limits = GetNodes(new[] { XMLNames.Vehicle_TorqueLimits, XMLNames.Vehicle_TorqueLimits_Entry });
foreach (XmlNode current in limits)
{
if (current.Attributes != null)
{
foreach (XmlNode current in limits) {
if (current.Attributes != null) {
torqueLimits.Add(
new TorqueLimitInputData()
{
new TorqueLimitInputData() {
Gear = GetAttribute(current, XMLNames.Vehicle_TorqueLimits_Entry_Gear_Attr).ToInt(),
MaxTorque = GetAttribute(current, XMLNames.Vehicle_TorqueLimits_Entry_MaxTorque_Attr)
.ToDouble().SI<NewtonMeter>()
......@@ -980,5 +1084,4 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
return torqueLimits;
}
}
}
......@@ -101,14 +101,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return retVal;
}
public virtual VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Mission mission, Kilogram loading)
public virtual VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Mission mission, KeyValuePair<LoadingType, Kilogram> loading)
{
if (!data.SavedInDeclarationMode) {
WarnDeclarationMode("VehicleData");
}
return data.ExemptedVehicle
? CreateExemptedVehicleData(data)
: CreateNonExemptedVehicleData(data, mission, loading);
: CreateNonExemptedVehicleData(data, mission, loading.Value);
}
protected virtual VehicleData CreateNonExemptedVehicleData(IVehicleDeclarationInputData data, Mission mission, Kilogram loading)
......@@ -308,7 +308,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return null;
}
public GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
public virtual GearboxData CreateGearboxData(IVehicleDeclarationInputData inputData, VectoRunData runData,
IShiftPolygonCalculator shiftPolygonCalc)
{
var gearbox = inputData.Components.GearboxInputData;
......@@ -657,7 +657,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
};
}
public ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
public virtual ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
{
var retVal = new ShiftStrategyParameters {
StartVelocity = DeclarationData.GearboxTCU.StartSpeed,
......
......@@ -28,13 +28,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
#region Overrides of DeclarationDataAdapterTruck
public override VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Mission mission, Kilogram loading)
public override VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Mission mission, KeyValuePair<LoadingType, Kilogram> loading)
{
var retVal = base.CreateVehicleData(data, mission, loading);
retVal.CurbMass = mission.CurbMass;
retVal.Length = mission.BusParameter.VehicleLength;
retVal.Width = mission.BusParameter.VehicleWidth;
retVal.Height = mission.VehicleHeight;
//retVal.Length = mission.BusParameter.VehicleLength;
//retVal.Width = mission.BusParameter.VehicleWidth;
//retVal.Height = mission.VehicleHeight;
return retVal;
}
......@@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
#endregion
public IAuxiliaryConfig CreateBusAuxiliariesData(
public virtual IAuxiliaryConfig CreateBusAuxiliariesData(
Mission mission, IVehicleDeclarationInputData vehicleData, VectoRunData runData)
{
var actuations = DeclarationData.BusAuxiliaries.ActuationsMap.Lookup(runData.Mission.MissionType);
......@@ -87,13 +87,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
SSMInputs = CreateSSMModelParameters(
vehicleData.Components.BusAuxiliaries, mission, FuelData.Diesel),
VehicleData = runData.VehicleData,
FuelMap = runData.EngineData.Fuels.First().ConsumptionMap
};
return retVal;
}
private IElectricsUserInputsConfig GetElectricalUserConfig(
protected virtual ElectricsUserInputsConfig GetElectricalUserConfig(
Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations)
{
var currentDemand = CalculateAverageCurrent(mission, vehicleData, actuations);
......@@ -115,7 +114,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
};
}
private double CalculateAlternatorEfficiency(IList<IAlternatorDeclarationInputData> alternators)
protected virtual double CalculateAlternatorEfficiency(IList<IAlternatorDeclarationInputData> alternators)
{
var sum = 0.0;
foreach (var entry in alternators) {
......@@ -125,7 +124,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return sum / alternators.Count;
}
private Tuple<Ampere, Ampere> CalculateAverageCurrent(
protected virtual Tuple<Ampere, Ampere> CalculateAverageCurrent(
Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations)
{
var avgInclBase = 0.SI<Ampere>();
......@@ -134,10 +133,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
(actuations.ParkBrakeAndDoors * Constants.BusAuxiliaries.ElectricalConsumers.DoorActuationTimeSecond) /
actuations.CycleTime;
var busAux = vehicleData.Components.BusAuxiliaries;
var electricDoors = busAux.PneumaticConsumers.DoorDriveTechnology ==
ConsumerTechnology.Electrically;
var electricDoors = false;
foreach (var consumer in DeclarationData.BusAuxiliaries.DefaultElectricConsumerList.Items) {
var nbr = CalcNumberInVehicle(consumer.NumberInActualVehicle, mission);
var nbr = GetNumberOfElectricalConsumersInVehicle(consumer.NumberInActualVehicle, mission);
var dutyCycle = electricDoors && consumer.ConsumerName.Equals(
Constants.BusAuxiliaries.ElectricalConsumers.DoorsPerVehicleConsumer,
StringComparison.CurrentCultureIgnoreCase)
......@@ -145,7 +143,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
: consumer.PhaseIdleTractionOn;
var current = consumer.NominalCurrent(mission.MissionType) * dutyCycle * nbr;
if (consumer.Bonus && !VehicleHasConsumer(consumer.ConsumerName, busAux)) {
if (consumer.Bonus && !VehicleHasElectricalConsumer(consumer.ConsumerName, busAux)) {
current = 0.SI<Ampere>();
}
......@@ -158,7 +156,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return Tuple.Create(avgInclBase, avgWithoutBase);
}
private bool VehicleHasConsumer(string consumerName, IBusAuxiliariesDeclarationData busAux)
protected virtual bool VehicleHasElectricalConsumer(string consumerName, IBusAuxiliariesDeclarationData busAux)
{
switch (consumerName) {
case "Day running lights LED bonus":
......@@ -170,7 +168,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
}
private double CalcNumberInVehicle(string nbr, Mission mission)
protected virtual double GetNumberOfElectricalConsumersInVehicle(string nbr, Mission mission)
{
if ("f_IntLight(L_CoC)".Equals(nbr, StringComparison.InvariantCultureIgnoreCase)) {
var busParams = mission.BusParameter;
......@@ -182,7 +180,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return nbr.ToDouble();
}
private IPneumaticUserInputsConfig GetPneumaticUserConfig(IVehicleDeclarationInputData vehicleData, Mission mission)
protected virtual PneumaticUserInputsConfig GetPneumaticUserConfig(IVehicleDeclarationInputData vehicleData, Mission mission)
{
var busAux = vehicleData.Components.BusAuxiliaries;
......@@ -202,7 +200,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
};
}
private ICompressorMap GetCompressorMap(string compressorSize)
protected virtual ICompressorMap GetCompressorMap(string compressorSize)
{
var resource = "";
switch (compressorSize) {
......@@ -298,7 +296,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return retVal;
}
private ISSMTechnologyBenefits GetSSMTechnologyBenefits(IBusAuxiliariesDeclarationData inputData, FloorType floorType)
protected virtual TechnologyBenefits GetSSMTechnologyBenefits(IBusAuxiliariesDeclarationData inputData, FloorType floorType)
{
var onVehicle = new List<SSMTechnology>();
foreach (var item in DeclarationData.BusAuxiliaries.SSMTechnologyList) {
......@@ -313,7 +311,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
}
var retVal = new TechnologyBenefits();
return SelectBenefitForFloorType(floorType, onVehicle);
}
protected virtual TechnologyBenefits SelectBenefitForFloorType(FloorType floorType, List<SSMTechnology> onVehicle)
{
var retVal = new TechnologyBenefits();
switch (floorType) {
case FloorType.LowFloor:
......@@ -338,13 +341,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
retVal.VVValueVariation = onVehicle.Sum(x => x.ActiveVV ? x.SemiLowFloorV : 0);
break;
}
return retVal;
}
private Tuple<Watt, Watt> CalculateMaxCoolingPower(Mission mission)
protected virtual Tuple<Watt, Watt> CalculateMaxCoolingPower(Mission mission)
{
var busParams = mission.BusParameter;
......@@ -362,7 +364,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return Tuple.Create(driver, passenger);
}
public virtual IPneumaticsConsumersDemand CreatePneumaticAuxConfig(RetarderType retarderType)
protected internal virtual IPneumaticsConsumersDemand CreatePneumaticAuxConfig(RetarderType retarderType)
{
return new PneumaticsConsumersDemand() {
AdBlueInjection = Constants.BusAuxiliaries.PneumaticConsumersDemands.AdBlueInjection,
......
using System;
using System.Collections.Generic;
using TUGraz.VectoCommon.BusAuxiliaries;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics;
using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.SimulationComponent;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter {
public class DeclarationDataAdapterSingleBus : IDeclarationDataAdapter {
namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
{
public class DeclarationDataAdapterSingleBus : DeclarationDataAdapterPrimaryBus
{
#region Implementation of IDeclarationDataAdapter
public DriverData CreateDriverData()
public override VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Mission mission, KeyValuePair<LoadingType, Kilogram> loading)
{
throw new NotImplementedException();
var busFloorArea = DeclarationData.BusAuxiliaries.CalculateBusFloorSurfaceArea(CompletedVehicle.Length,
CompletedVehicle.Width);
var passengerCount = VectoMath.Min(
busFloorArea * mission.BusParameter.PassengerDensity,
CompletedVehicle.NuberOfPassengersUpperDeck + CompletedVehicle.NumberOfPassengersLowerDeck);
var refLoad = passengerCount * mission.MissionType.GetAveragePassengerMass();
if (loading.Key != LoadingType.ReferenceLoad && loading.Key != LoadingType.LowLoading) {
throw new VectoException("Unhandled loading type: {0}", loading.Key);
}
var payload = loading.Key == LoadingType.ReferenceLoad ? refLoad : refLoad * 0.2;
var retVal = base.CreateNonExemptedVehicleData(vehicle, mission, payload);
retVal.CurbMass = CompletedVehicle.CurbMassChassis;
//retVal.Length = CompletedVehicle.Length;
//retVal.Width = CompletedVehicle.Width;
//retVal.Height = CompletedVehicle.Height;
return retVal;
}
public VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Mission mission, Kilogram loading)
public override AirdragData CreateAirdragData(
IAirdragDeclarationInputData airdragData, Mission mission, Segment segment)
{
throw new NotImplementedException();
if (CompletedVehicle.Components.AirdragInputData == null ||
CompletedVehicle.Components.AirdragInputData.AirDragArea == null) {
return DefaultAirdragData(mission);
}
var aerodynamicDragArea = CompletedVehicle.Components.AirdragInputData.AirDragArea;
var retVal = SetCommonAirdragData(CompletedVehicle.Components.AirdragInputData);
retVal.CrossWindCorrectionCurve = new CrosswindCorrectionCdxALookup(
aerodynamicDragArea,
GetDeclarationAirResistanceCurve(mission.CrossWindCorrectionParameters, aerodynamicDragArea, mission.VehicleHeight),
CrossWindCorrectionMode.DeclarationModeCorrection);
return retVal;
}
public AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment)
{
throw new NotImplementedException();
}
#endregion
public AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData)
{
throw new NotImplementedException();
}
public AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData)
public ISingleBusInputDataProvider SingleBusInputData { get; set; }
protected IVehicleDeclarationInputData CompletedVehicle
{
throw new NotImplementedException();
get { return SingleBusInputData?.CompletedVehicle; }
}
public CombustionEngineData CreateEngineData(
IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, Mission mission)
#region Overrides of DeclarationDataAdapterPrimaryBus
protected override double CalculateAlternatorEfficiency(IList<IAlternatorDeclarationInputData> alternators)
{
throw new NotImplementedException();
var sum = 0.0;
foreach (var entry in alternators) {
sum += DeclarationData.BusAuxiliaries.AlternatorTechnologies.Lookup(entry.Technology);
}
foreach (var entry in CompletedVehicle.Components.BusAuxiliaries.ElectricSupply.Alternators) {
sum += DeclarationData.BusAuxiliaries.AlternatorTechnologies.Lookup(entry.Technology);
}
return sum / (alternators.Count + CompletedVehicle.Components.BusAuxiliaries.ElectricSupply.Alternators.Count);
}
public GearboxData CreateGearboxData(
IVehicleDeclarationInputData inputData, VectoRunData runData, IShiftPolygonCalculator shiftPolygonCalc)
protected override bool VehicleHasElectricalConsumer(string consumerName, IBusAuxiliariesDeclarationData busAux)
{
throw new NotImplementedException();
var elConsumer = CompletedVehicle.Components.BusAuxiliaries.ElectricConsumers;
switch (consumerName) {
case "Day running lights LED bonus": return elConsumer.DayrunninglightsLED;
case "Position lights LED bonus": return elConsumer.PositionlightsLED;
case "Brake lights LED bonus": return elConsumer.BrakelightsLED;
case "Interior lights LED bonus": return elConsumer.InteriorLightsLED;
case "Headlights LED bonus": return elConsumer.HeadlightsLED;
default: return false;
}
}
public ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
protected override double GetNumberOfElectricalConsumersInVehicle(string nbr, Mission mission)
{
throw new NotImplementedException();
if ("f_IntLight(L_CoC)".Equals(nbr, StringComparison.InvariantCultureIgnoreCase)) {
return DeclarationData.BusAuxiliaries.CalculateLengthInteriorLights(
CompletedVehicle.Length, IsDoubleDecker, CompletedVehicle.FloorType,
CompletedVehicle.NumberOfPassengersLowerDeck)
.Value();
}
return nbr.ToDouble();
}
public RetarderData CreateRetarderData(IRetarderInputData retarderData)
protected override PneumaticUserInputsConfig GetPneumaticUserConfig(
IVehicleDeclarationInputData vehicleData, Mission mission)
{
throw new NotImplementedException();
var retVal = base.GetPneumaticUserConfig(vehicleData, mission);
retVal.Doors = CompletedVehicle.Components.BusAuxiliaries.PneumaticConsumers.DoorDriveTechnology;
retVal.KneelingHeight = VectoMath.Max(0.SI<Meter>(), CompletedVehicle.EntranceHeight - Constants.BusParameters.EntranceHeight);
return retVal;
}
public PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
public override ISSMInputs CreateSSMModelParameters(
IBusAuxiliariesDeclarationData busAuxInputData, Mission mission, IFuelProperties heatingFuel)
{
throw new NotImplementedException();
var retVal = base.CreateSSMModelParameters(busAuxInputData, mission, heatingFuel) as SSMInputs;
if (retVal == null) {
throw new VectoException("Unknonw SSMInput Instance");
}
var busAux = CompletedVehicle.Components.BusAuxiliaries;
var hvacBusLength = busAux.HVACAux.SystemConfiguration == BusHVACSystemConfiguration.Configuration2
? 2 * Constants.BusParameters.DriverCompartmentLength
: CompletedVehicle.Length;
var hvacBusheight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(CompletedVehicle.FloorType,
IsDoubleDecker, CompletedVehicle.Height);
var coolingPower = CalculateMaxCoolingPower(mission);
retVal.BusFloorType = CompletedVehicle.FloorType;
retVal.Technologies = GetSSMTechnologyBenefits(busAuxInputData, CompletedVehicle.FloorType);
retVal.FuelFiredHeaterPower = busAux.HVACAux.AuxHeaterPower;
retVal.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(IsDoubleDecker) * hvacBusLength +
DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(IsDoubleDecker);
retVal.BusSurfaceArea = 2 * (hvacBusLength * CompletedVehicle.Width + hvacBusLength * CompletedVehicle.Height +
CompletedVehicle.Width * CompletedVehicle.Height);
retVal.BusVolume = hvacBusLength * CompletedVehicle.Width * hvacBusheight;
retVal.UValue = DeclarationData.BusAuxiliaries.UValue(CompletedVehicle.FloorType);
retVal.NumberOfPassengers =
(DeclarationData.BusAuxiliaries.CalculateBusFloorSurfaceArea(hvacBusLength, CompletedVehicle.Width) *
mission.BusParameter.PassengerDensity).LimitTo(0, CompletedVehicle.NuberOfPassengersUpperDeck + CompletedVehicle.NumberOfPassengersLowerDeck) + 1; // add driver for 'heat input'
retVal.VentilationRate = DeclarationData.BusAuxiliaries.VentilationRate(busAux.HVACAux.SystemConfiguration, false);
retVal.VentilationRateHeating = DeclarationData.BusAuxiliaries.VentilationRate(busAux.HVACAux.SystemConfiguration, true);
retVal.HVACMaxCoolingPower = coolingPower.Item1 + coolingPower.Item2;
retVal.HVACCompressorType = busAux.HVACAux.CompressorTypePassenger; // use passenger compartment
retVal.COP = DeclarationData.BusAuxiliaries.CalculateCOP(
coolingPower.Item1, busAux.HVACAux.CompressorTypeDriver, coolingPower.Item2, busAux.HVACAux.CompressorTypePassenger,
CompletedVehicle.FloorType);
return retVal;
}
public IList<VectoRunData.AuxData> CreateAuxiliaryData(
IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType,
VehicleClass vehicleClass, Meter vehicleLength)
protected override Tuple<Watt, Watt> CalculateMaxCoolingPower(Mission mission)
{
throw new NotImplementedException();
var length = DeclarationData.BusAuxiliaries.CalculateInternalLength(
CompletedVehicle.Length, IsDoubleDecker, CompletedVehicle.FloorType,
CompletedVehicle.NumberOfPassengersLowerDeck);
var height = DeclarationData.BusAuxiliaries.CalculateInternalHeight(CompletedVehicle.FloorType,
IsDoubleDecker, CompletedVehicle.Height);
var volume = length * height * CompletedVehicle.Width;
var hvacConfiguration = CompletedVehicle.Components.BusAuxiliaries.HVACAux.SystemConfiguration;
var driver = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.DriverMaxCoolingPower(
hvacConfiguration, mission.MissionType);
var passenger = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.PassengerMaxCoolingPower(
hvacConfiguration, mission.MissionType, volume);
return Tuple.Create(driver, passenger);
}
public AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData)
protected override TechnologyBenefits GetSSMTechnologyBenefits(IBusAuxiliariesDeclarationData inputData, FloorType floorType)
{
throw new NotImplementedException();
var onVehicle = new List<SSMTechnology>();
var hvacTech = CompletedVehicle.Components.BusAuxiliaries.HVACAux;
foreach (var item in DeclarationData.BusAuxiliaries.SSMTechnologyList) {
if ("Adjustable coolant thermostat".Equals(item.BenefitName, StringComparison.InvariantCultureIgnoreCase) &&
(inputData?.HVACAux.AdjustableCoolantThermostat ?? false)) {
onVehicle.Add(item);
}
if ("Engine waste gas heat exchanger".Equals(item.BenefitName, StringComparison.InvariantCultureIgnoreCase) &&
(inputData?.HVACAux.EngineWasteGasHeatExchanger ?? false)) {
onVehicle.Add(item);
}
if ("Separate air distribution ducts".Equals(item.BenefitName, StringComparison.InvariantCultureIgnoreCase) &&
hvacTech.SeparateAirDistributionDucts) {
onVehicle.Add(item);
}
if ("Adjustable auxiliary heater".Equals(item.BenefitName, StringComparison.InvariantCultureIgnoreCase) &&
hvacTech.AdjustableAuxiliaryHeater) {
onVehicle.Add(item);
}
if ("Heat pump systems".Equals(item.BenefitName, StringComparison.InvariantCultureIgnoreCase) &&
hvacTech.HeatPump) {
onVehicle.Add(item);
}
if ("Double-glazing".Equals(item.BenefitName, StringComparison.InvariantCultureIgnoreCase) &&
hvacTech.DoubleGlasing) {
onVehicle.Add(item);
}
}
return SelectBenefitForFloorType(floorType, onVehicle);
}
#endregion
public IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, IVehicleDeclarationInputData completedVehicle, VectoRunData runData)
{
throw new NotImplementedException();
}
protected bool IsDoubleDecker { get { return CompletedVehicle.NuberOfPassengersUpperDeck > 0; } }
}
}
\ No newline at end of file
}
......@@ -11,7 +11,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter {
public interface IDeclarationDataAdapter
{
DriverData CreateDriverData();
VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Mission mission, Kilogram loading);
VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Mission mission, KeyValuePair<LoadingType, Kilogram> loading);
AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment);
AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData);
AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData);
......
......@@ -78,7 +78,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
_driverdata = DataAdapter.CreateDriverData();
_driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(_segment.AccelerationFile);
var tempVehicle = DataAdapter.CreateVehicleData(vehicle, _segment.Missions.First(),
_segment.Missions.First().Loadings.First().Value);
_segment.Missions.First().Loadings.First());
_airdragData = DataAdapter.CreateAirdragData(vehicle.Components.AirdragInputData,
_segment.Missions.First(), _segment);
if (InputDataProvider.JobInputData.Vehicle.Components.GearboxInputData.DifferentialIncluded) {
......
......@@ -86,7 +86,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
}
var simulationRunData = new VectoRunData {
Loading = loading.Key,
VehicleData = DataAdapter.CreateVehicleData(vehicle, mission, loading.Value),
VehicleData = DataAdapter.CreateVehicleData(vehicle, mission, loading),
AirdragData = _dao.CreateAirdragData(mission),
EngineData = DataAdapter.CreateEngineData(InputDataProvider.JobInputData.Vehicle, engineMode, mission),
GearboxData = _gearboxData,
......
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