Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 11438029 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

adding bus aux model parameters, refactoring bus model parameters in mission to separate class

parent 2c8f0a51
No related branches found
No related tags found
No related merge requests found
Showing
with 112 additions and 35 deletions
......@@ -71,8 +71,16 @@ Namespace UnitTests
<TestCase("AuxHeater")>
Public Sub InstantiateDefaultSSMGenInputsTest(section As String)
Dim mission As New Mission With{
.BusParameter = New BusParameters() with {
.HVACCompressorType = ACCompressorType.TwoStage,
.HVACAuxHeaterPower = 18e3.SI(Of Watt),
.HVACConfiguration = BusHVACSystemConfiguration.Configuration6
}
}
Dim dao = New DeclarationDataAdapterPrimaryBus()
Dim target As ISSMInputs = dao.CreateSSMModelParameters(Utils.GetDefaultVehicleData(), FuelData.Diesel)
Dim target As ISSMInputs = dao.CreateSSMModelParameters(Utils.GetDefaultVehicleData(), mission, FuelData.Diesel)
If section = "BusParameterisation" Then
'BUS Parameterisation
......@@ -560,8 +568,17 @@ Namespace UnitTests
Const filePath As String = "SSMTOOLTestSaveRetreive.json"
Dim success As Boolean
Dim mission As New Mission With{
.BusParameter = New BusParameters() with {
.HVACCompressorType = ACCompressorType.TwoStage,
.HVACAuxHeaterPower = 18e3.SI(Of Watt),
.HVACConfiguration = BusHVACSystemConfiguration.Configuration6
}
}
Dim dao = New DeclarationDataAdapterPrimaryBus()
Dim target As SSMTOOL = New SSMTOOL(dao.CreateSSMModelParameters(Utils.GetDefaultVehicleData(),
Dim target As SSMTOOL = New SSMTOOL(dao.CreateSSMModelParameters(Utils.GetDefaultVehicleData(), mission,
FuelData.Diesel))
success = BusAuxWriter.SaveSSMConfig(target.SSMInputs, filePath)
......
namespace TUGraz.VectoCommon.BusAuxiliaries {
using TUGraz.VectoCommon.Utils;
namespace TUGraz.VectoCommon.BusAuxiliaries {
public enum BusHVACSystemConfiguration
{
Unknown,
......@@ -12,4 +14,14 @@
Configuration8,
Configuration9,
}
public static class BusHVACSystemConfigurationHelper
{
private const string Prefix = "Configuration";
public static BusHVACSystemConfiguration Parse(string text)
{
return (Prefix + text).ParseEnum<BusHVACSystemConfiguration>();
}
}
}
\ No newline at end of file
......@@ -1215,4 +1215,16 @@
<data name="BusAux_PneumaticSystem_DoorDriveTechnology" xml:space="preserve">
<value>DoorDriveTechnology</value>
</data>
<data name="BusAux_PneumaticSystem_CompressorRatio" xml:space="preserve">
<value>CompressorRatio</value>
</data>
<data name="BusAux_PneumaticSystem_CompressorSize" xml:space="preserve">
<value>SizeOfAirSupply</value>
</data>
<data name="BusAux_PneumaticSystem_SmartcompressionSystem" xml:space="preserve">
<value>SmartCompressionSystem</value>
</data>
<data name="BusAux_PneumaticSystem_SmartRegenerationSystem" xml:space="preserve">
<value>SmartRegenerationSystem</value>
</data>
</root>
\ No newline at end of file
......@@ -106,6 +106,8 @@ namespace TUGraz.VectoCore.Configuration
{
public static readonly Volt PowernetVoltage = 28.3.SI<Volt>();
public const double AlternatorGearEfficiency = 0.92;
public const double StoredEnergyEfficiency = 0.935;
}
......@@ -167,6 +169,7 @@ namespace TUGraz.VectoCore.Configuration
public static class PneumaticUserConfig
{
public static readonly Meter DefaultKneelingHeight = 80.SI(Unit.SI.Milli.Meter).Cast<Meter>();
public const double CompressorGearRatio = 1.0;
public const double CompressorGearEfficiency = 0.97;
......
......@@ -149,6 +149,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
return Body["Aux"]?["PneumaticSupply"]?.GetEx<string>("CompressorSize");
} }
public bool SmartAirCompression { get; }
public bool SmartRegeneration { get; }
#endregion
#region Implementation of IPneumaticConsumersDeclarationData
......
......@@ -32,8 +32,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
{
var retVal = base.CreateVehicleData(data, mission, loading);
retVal.CurbMass = mission.CurbMass;
retVal.Length = mission.VehicleLength;
retVal.Width = mission.VehicleWidth;
retVal.Length = mission.BusParameter.VehicleLength;
retVal.Width = mission.BusParameter.VehicleWidth;
retVal.Height = mission.VehicleHeight;
return retVal;
}
......@@ -81,10 +81,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
var retVal = new AuxiliaryConfig {
InputData = vehicleData.Components.BusAuxiliaries,
ElectricalUserInputsConfig = GetElectricalUserConfig(mission, vehicleData, actuations),
PneumaticUserInputsConfig = GetPneumaticUserConfig(vehicleData),
PneumaticUserInputsConfig = GetPneumaticUserConfig(vehicleData, mission),
PneumaticAuxillariesConfig = CreatePneumaticAuxConfig(runData.Retarder.Type),
Actuations = actuations,
SSMInputs = CreateSSMModelParameters(runData.VehicleData, FuelData.Diesel),
SSMInputs = CreateSSMModelParameters(runData.VehicleData, mission, FuelData.Diesel),
VehicleData = runData.VehicleData,
FuelMap = runData.EngineData.Fuels.First().ConsumptionMap
};
......@@ -115,7 +115,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
ResultCardTraction = busAux.ElectricSupply.ResultCards != null
? new ResultCard(
busAux.ElectricSupply.ResultCards.Traction.Select(x => new SmartResult(x.Current, x.SmartCurrent)).ToList())
: (IResultCard) new DummyResultCard(),
: (IResultCard)new DummyResultCard(),
AlternatorGearEfficiency = Constants.BusAuxiliaries.ElectricSystem.AlternatorGearEfficiency,
};
}
......@@ -168,32 +168,33 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
switch (consumerName) {
case "Day running lights LED bonus":
case "Position lights LED bonus":
case "Brake lights LED bonus":
return false;
case "Interior lights LED bonus":
case "Headlights LED bonus":
return true;
default:
return false;
case "Brake lights LED bonus": return false;
case "Interior lights LED bonus":
case "Headlights LED bonus": return true;
default: return false;
}
}
private double CalcNumberInVehicle(string nbr, Mission mission)
{
if ("f_IntLight(L_CoC)".Equals(nbr, StringComparison.InvariantCultureIgnoreCase)) {
var busParams = mission.BusParameter;
return DeclarationData.BusAuxiliaries.CalculateLengthInteriorLights(
mission.VehicleLength, mission.DoubleDecker, mission.FloorType, mission.NumberPassengersLowerDeck).Value();
busParams.VehicleLength, busParams.DoubleDecker, busParams.FloorType, busParams.NumberPassengersLowerDeck).Value();
}
return nbr.ToDouble();
}
private IPneumaticUserInputsConfig GetPneumaticUserConfig(IVehicleDeclarationInputData vehicleData)
private IPneumaticUserInputsConfig GetPneumaticUserConfig(IVehicleDeclarationInputData vehicleData, Mission mission)
{
var busAux = vehicleData.Components.BusAuxiliaries;
//throw new NotImplementedException();
return new PneumaticUserInputsConfig() {
KneelingHeight = 0.SI<Meter>(),
KneelingHeight = mission.BusParameter.FloorType == FloorType.LowFloor
? Constants.BusAuxiliaries.PneumaticUserConfig.DefaultKneelingHeight
: 0.SI<Meter>(),
CompressorGearEfficiency = Constants.BusAuxiliaries.PneumaticUserConfig.CompressorGearEfficiency,
CompressorGearRatio = busAux.PneumaticSupply.Ratio,
CompressorMap = GetCompressorMap(busAux.PneumaticSupply.CompressorSize),
......@@ -238,7 +239,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
RessourceHelper.ReadStream(DeclarationData.DeclarationDataResourcePrefix + ".VAUXBuses." + resource));
}
public virtual ISSMInputs CreateSSMModelParameters(IVehicleData vehicleData, IFuelProperties heatingFuel)
public virtual ISSMInputs CreateSSMModelParameters(IVehicleData vehicleData, Mission mission, IFuelProperties heatingFuel)
{
var retVal = new SSMInputs(vehicleData, null, heatingFuel) {
Technologies = DeclarationData.BusAuxiliaries.SSMTechnologyList,
......@@ -255,11 +256,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
SpecificVentilationPower = Constants.BusAuxiliaries.SteadyStateModel.SpecificVentilationPower,
// TODO! MQ 2019-19-29 Compressor Type and CompressorCapacity from input data?
HVACCompressorType = ACCompressorType.TwoStage, // "2-stage",
HVACMaxCoolingPower = 18.SI(Unit.SI.Kilo.Watt).Cast<Watt>(),
HVACCompressorType = mission.BusParameter.HVACCompressorType,
AuxHeaterEfficiency = Constants.BusAuxiliaries.SteadyStateModel.AuxHeaterEfficiency,
FuelFiredHeaterPower = Constants.BusAuxiliaries.SteadyStateModel.FuelFiredHeaterPower,
FuelFiredHeaterPower = mission.BusParameter.HVACAuxHeaterPower,
FuelEnergyToHeatToCoolant = Constants.BusAuxiliaries.Heater.FuelEnergyToHeatToCoolant,
CoolantHeatTransferredToAirCabinHeater = Constants.BusAuxiliaries.Heater.CoolantHeatTransferredToAirCabinHeater,
GFactor = Constants.BusAuxiliaries.SteadyStateModel.GFactor,
......@@ -272,9 +273,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
//VentilationFlowSettingWhenHeatingAndACInactive = VentilationLevel.High,
MaxPossibleBenefitFromTechnologyList =
Constants.BusAuxiliaries.SteadyStateModel.MaxPossibleBenefitFromTechnologyList,
};
DeclarationData.BusAuxiliaries.SetHVACParameters(retVal, BusHVACSystemConfiguration.Configuration6);
DeclarationData.BusAuxiliaries.SetHVACParameters(retVal, mission.BusParameter.HVACConfiguration);
return retVal;
}
......
......@@ -93,7 +93,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
AxleGearData = _axlegearData,
AngledriveData = _angledriveData,
Aux = DataAdapter.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData,
vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, vehicle.Length ?? mission.VehicleLength),
vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, vehicle.Length ?? mission.BusParameter.VehicleLength),
Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()),
Retarder = _retarderData,
DriverData = _driverdata,
......
......@@ -35,7 +35,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
throw new ArgumentException("Steady State model was not supplied");
}
if (compressorGearEfficiency < 0 || altGearEfficiency > 1) {
if (compressorGearEfficiency <= 0 || altGearEfficiency > 1) {
throw new ArgumentException(String.Format("Compressor Gear efficiency must be between {0} and {1}", 0, 1));
}
......
......@@ -67,16 +67,12 @@ namespace TUGraz.VectoCore.Models.Declaration
public Kilogram MaxPayload { get; internal set; }
public SquareMeter DefaultCDxA { get; internal set; }
public CubicMeter TotalCargoVolume { get; internal set; }
public Meter VehicleHeight { get; internal set; }
public Meter VehicleWidth { get; internal set; }
public Meter VehicleLength { get; internal set; }
public SquareMeter DefaultCDxA { get; internal set; }
public CubicMeter TotalCargoVolume { get; internal set; }
public Dictionary<LoadingType, Kilogram> Loadings
{
get {
......@@ -90,10 +86,38 @@ namespace TUGraz.VectoCore.Models.Declaration
}
}
public BusParameters BusParameter { get; internal set; }
}
public class BusParameters
{
public Meter VehicleWidth { get; internal set; }
public Meter VehicleLength { get; internal set; }
public double NumberPassengersLowerDeck { get; internal set; }
public double NumberPassengersUpperDeck { get; internal set; }
public bool DoubleDecker { get; set; }
public FloorType FloorType { get; set; }
public bool DoubleDecker { get; internal set; }
public FloorType FloorType { get; internal set; }
// #### HVAC Model Parameters
public BusHVACSystemConfiguration HVACConfiguration { get; internal set; }
public Watt HVACAuxHeaterPower { get; internal set; }
public ACCompressorType HVACCompressorType { get; internal set; }
public bool HVACDoubleGlasing { get; internal set; }
public bool HVACHeatpump { get; internal set; }
public bool HVACAdjustableAuxHeater { get; internal set; }
public bool HVACSeparateAirDistributionDucts { get; internal set; }
}
public class MissionTrailer
......
......@@ -91,6 +91,10 @@ namespace TUGraz.VectoCore.Models.Declaration
return "Interurban";
case MissionType.Coach:
return "Coach";
case MissionType.VerificationTest:
return "Verirication Test";
case MissionType.ExemptedMission:
return "Exempted";
default:
throw new ArgumentOutOfRangeException("MissionType", self, null);
}
......
......@@ -597,8 +597,8 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
{
Assert.AreEqual(missionType, m.MissionType);
Assert.AreEqual(cdxA, m.DefaultCDxA.Value(), 1e-9);
Assert.AreEqual(length, m.VehicleLength.Value(), 1e-9);
Assert.AreEqual(width, m.VehicleWidth.Value(), 1e-9);
Assert.AreEqual(length, m.BusParameter.VehicleLength.Value(), 1e-9);
Assert.AreEqual(width, m.BusParameter.VehicleWidth.Value(), 1e-9);
Assert.AreEqual(height, m.VehicleHeight.Value(), 1e-9);
Assert.AreEqual(curbMass, m.CurbMass.Value(), 1e-9);
Assert.AreEqual(refLoad, m.RefLoad.Value(), 1e-9);
......
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