Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

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

Merge pull request #14 in VECTO/vecto-dev from...

Merge pull request #14 in VECTO/vecto-dev from ~EMQUARIMA/vecto-dev:bugfix/VECTO-1253-aux-stp-handling-of-electric-steering-pump to DevReleases/v0.6.0.1884

* commit 'b5c54c95':
  busaux: consider electric fan as electric consumer
parents e2daa6be b5c54c95
No related branches found
No related tags found
No related merge requests found
......@@ -491,7 +491,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
mission = mission.GetNonEMSMissionType();
switch (auxType) {
case AuxiliaryType.Fan:
aux.PowerDemand = DeclarationData.Fan.Lookup(hvdClass, mission, auxData.Technology.FirstOrDefault()).PowerDemand;
aux.PowerDemand = DeclarationData.Fan.LookupPowerDemand(hvdClass, mission, auxData.Technology.FirstOrDefault());
aux.ID = Constants.Auxiliaries.IDs.Fan;
break;
case AuxiliaryType.SteeringPump:
......
......@@ -58,7 +58,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
DemandType = AuxiliaryDemandType.Constant,
Technology = new List<string>() { busAuxData.FanTechnology },
ID = Constants.Auxiliaries.IDs.Fan,
PowerDemand = DeclarationData.Fan.Lookup(hdvClass, mission, busAuxData.FanTechnology).PowerDemand
PowerDemand = DeclarationData.Fan.LookupMechanicalPowerDemand(hdvClass, mission, busAuxData.FanTechnology)
});
retVal.Add(
new VectoRunData.AuxData() {
......@@ -80,7 +80,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
var retVal = new AuxiliaryConfig {
InputData = vehicleData.Components.BusAuxiliaries,
ElectricalUserInputsConfig = GetElectricalUserConfig(mission, vehicleData, actuations),
ElectricalUserInputsConfig = GetElectricalUserConfig(mission, vehicleData, actuations, runData.VehicleData.VehicleClass),
PneumaticUserInputsConfig = GetPneumaticUserConfig(vehicleData, mission),
PneumaticAuxillariesConfig = CreatePneumaticAuxConfig(runData.Retarder.Type),
Actuations = actuations,
......@@ -93,9 +93,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
protected virtual ElectricsUserInputsConfig GetElectricalUserConfig(
Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations)
Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations, VehicleClass vehicleClass)
{
var currentDemand = CalculateAverageCurrent(mission, vehicleData, actuations);
var currentDemand = CalculateAverageCurrent(mission, vehicleData, actuations, vehicleClass);
var busAux = vehicleData.Components.BusAuxiliaries;
return new ElectricsUserInputsConfig() {
......@@ -125,7 +125,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
protected virtual Tuple<Ampere, Ampere> CalculateAverageCurrent(
Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations)
Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations, VehicleClass vehicleClass)
{
var avgInclBase = 0.SI<Ampere>();
var avgWithoutBase = 0.SI<Ampere>();
......@@ -155,10 +155,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
var spPower = DeclarationData.SteeringPumpBus.LookupElectricalPowerDemand(
mission.MissionType, vehicleData.Components.BusAuxiliaries.SteeringPumpTechnology, vehicleData.Length ?? mission.BusParameter.VehicleLength);
mission.MissionType, busAux.SteeringPumpTechnology, vehicleData.Length ?? mission.BusParameter.VehicleLength);
avgInclBase += spPower / Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage;
avgWithoutBase += spPower / Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage;
var fanPower = DeclarationData.Fan.LookupElectricalPowerDemand(vehicleClass, mission.MissionType, busAux.FanTechnology);
avgInclBase += (spPower + fanPower) / Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage;
avgWithoutBase += (spPower + fanPower) / Constants.BusAuxiliaries.ElectricSystem.PowernetVoltage;
return Tuple.Create(avgInclBase, avgWithoutBase);
......
......@@ -91,9 +91,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
protected override ElectricsUserInputsConfig GetElectricalUserConfig(
Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations)
Mission mission, IVehicleDeclarationInputData vehicleData, IActuations actuations, VehicleClass vehicleClass)
{
var currentDemand = CalculateAverageCurrent(mission, vehicleData, actuations);
var currentDemand = CalculateAverageCurrent(mission, vehicleData, actuations, vehicleClass);
var busAux = vehicleData.Components.BusAuxiliaries;
return new ElectricsUserInputsConfig() {
......
......@@ -33,6 +33,7 @@ using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Utils;
......@@ -45,11 +46,35 @@ namespace TUGraz.VectoCore.Models.Declaration
readonly FanMediumLorries fanMediumLorries=new FanMediumLorries();
readonly FanHeavyLorries fanHeavyLorries=new FanHeavyLorries();
public AuxDemandEntry Lookup(VehicleClass vehicleClass, MissionType mission, string technology = null)
public Watt LookupPowerDemand(VehicleClass vehicleClass, MissionType mission, string technology)
{
return vehicleClass.IsMediumLorry() ? fanMediumLorries.Lookup(mission, technology) : fanHeavyLorries.Lookup(mission, technology);
if (!GetTechnologies().Contains(technology)) {
throw new VectoException($"Auxiliary Lookup Error: Unknown Fan technology: '{technology}'");
}
return vehicleClass.IsMediumLorry()
? fanMediumLorries.Lookup(mission, technology, false).PowerDemand + fanMediumLorries.Lookup(mission, technology, true).PowerDemand
: fanHeavyLorries.Lookup(mission, technology, false).PowerDemand + fanHeavyLorries.Lookup(mission, technology, true).PowerDemand;
}
public Watt LookupMechanicalPowerDemand(VehicleClass vehicleClass, MissionType mission, string technology)
{
if (!GetTechnologies().Contains(technology)) {
throw new VectoException($"Auxiliary Lookup Error: Unknown Fan technology: '{technology}'");
}
return (vehicleClass.IsMediumLorry()
? fanMediumLorries.Lookup(mission, technology, false)
: fanHeavyLorries.Lookup(mission, technology, false)).PowerDemand;
}
public Watt LookupElectricalPowerDemand(VehicleClass vehicleClass, MissionType mission, string technology)
{
if (!GetTechnologies().Contains(technology)) {
throw new VectoException($"Auxiliary Lookup Error: Unknown Fan technology: '{technology}'");
}
return (vehicleClass.IsMediumLorry()
? fanMediumLorries.Lookup(mission, technology, true)
: fanHeavyLorries.Lookup(mission, technology, true)).PowerDemand;
}
//protected override string ResourceId { get; }
public string[] FullyElectricTechnologies()
......@@ -63,9 +88,9 @@ namespace TUGraz.VectoCore.Models.Declaration
}
}
public abstract class AbstractFan : LookupData<MissionType, string, AuxDemandEntry>, IDeclarationAuxiliaryTable
public abstract class AbstractFan : LookupData<MissionType, string, bool, AuxDemandEntry>, IDeclarationAuxiliaryTable
{
private readonly List<string> FullyElectricFanTechnologies = new List<string>();
//private readonly List<string> FullyElectricFanTechnologies = new List<string>();
protected override string ErrorMessage
{
......@@ -78,15 +103,12 @@ namespace TUGraz.VectoCore.Models.Declaration
{
var name = row.Field<string>("technology");
var electric = row.ParseBoolean("fullyelectric");
if (electric)
{
FullyElectricFanTechnologies.Add(name);
}
foreach (DataColumn col in table.Columns)
{
if (col.Caption != "technology" && col.Caption != "fullyelectric")
{
Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), name)] = new AuxDemandEntry
Data[Tuple.Create(col.Caption.ParseEnum<MissionType>(), name, electric)] = new AuxDemandEntry
{
PowerDemand = row.ParseDouble(col).SI<Watt>(),
};
......@@ -95,20 +117,24 @@ namespace TUGraz.VectoCore.Models.Declaration
}
}
public override AuxDemandEntry Lookup(MissionType mission, string technology = null)
public override AuxDemandEntry Lookup(MissionType mission, string technology, bool electrical)
{
if (string.IsNullOrWhiteSpace(technology))
{
technology = "Crankshaft mounted - Electronically controlled visco clutch";
}
return base.Lookup(mission, technology);
var lookup = Tuple.Create(mission, technology, electrical);
if (Data.ContainsKey(lookup)) {
return Data[lookup];
}
return new AuxDemandEntry() { PowerDemand = 0.SI<Watt>()};
}
public string[] FullyElectricTechnologies()
{
return FullyElectricFanTechnologies.ToArray();
return Data.Keys.Where(x => x.Item3).Select(x => x.Item2).Distinct().ToArray();
}
public string[] GetTechnologies()
......
......@@ -391,8 +391,8 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
{
if (expected[i] == 0)
continue;
var lookup = DeclarationData.Fan.Lookup(vehicleClass, _missions[i], technology);
Assert.AreEqual(expected[i], lookup.PowerDemand.Value(), Tolerance);
var lookup = DeclarationData.Fan.LookupPowerDemand(vehicleClass, _missions[i], technology);
Assert.AreEqual(expected[i], lookup.Value(), Tolerance);
}
}
......@@ -402,7 +402,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
]
public void AuxFanTechError(VehicleClass vehicleClass, string technology, MissionType missionType)
{
AssertHelper.Exception<VectoException>(() => DeclarationData.Fan.Lookup(vehicleClass, missionType, technology));
AssertHelper.Exception<VectoException>(() => DeclarationData.Fan.LookupPowerDemand(vehicleClass, missionType, technology));
}
[TestCase(VehicleClass.ClassML2r, new[] { 200, 150, 150, -1, -1 }),
......
......@@ -90,7 +90,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
var mission = MissionType.LongHaul;
aux.AddConstant("FAN",
DeclarationData.Fan.Lookup(hdvClass,MissionType.LongHaul, "Hydraulic driven - Constant displacement pump").PowerDemand);
DeclarationData.Fan.LookupPowerDemand(hdvClass,MissionType.LongHaul, "Hydraulic driven - Constant displacement pump"));
aux.AddConstant("PS", DeclarationData.PneumaticSystem.Lookup(mission, "Medium Supply 1-stage").PowerDemand);
aux.AddConstant("STP",
DeclarationData.SteeringPump.Lookup(MissionType.LongHaul, hdvClass,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment