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 d4f5f848 authored by Michael KRISPER's avatar Michael KRISPER
Browse files

AbstractSimulationDataAdapter: Added check for correct retarder positions

parent 5fc0e2f1
No related branches found
No related tags found
No related merge requests found
......@@ -132,7 +132,7 @@ Public Class Vehicle
Dim vehicleData As VehicleData
Dim airdragData As AirdragData
Dim retarderData As RetarderData
Dim ptoData As PTOData = Nothing
Dim ptoData As PTOData
Dim angledriveData As AngledriveData
Dim modeService As VectoValidationModeServiceContainer =
......@@ -142,8 +142,7 @@ Public Class Vehicle
Dim emsCycle As Boolean = (modeService IsNot Nothing) AndAlso modeService.IsEMSCycle
Dim gbxType As GearboxType? = If(modeService Is Nothing, Nothing, modeService.GearboxType)
Dim jobType As VectoSimulationJobType = If(modeService Is Nothing, VectoSimulationJobType.ConventionalVehicle, modeService.JobType)
Dim emPos As PowertrainPosition? = If(modeService Is Nothing, PowertrainPosition.HybridPositionNotSet, modeService.EMPowertrainPosition)
Dim emPos = If(modeService Is Nothing, modeService.EMPowertrainPosition, PowertrainPosition.HybridPositionNotSet)
Try
If mode = ExecutionMode.Declaration Then
......@@ -160,7 +159,7 @@ Public Class Vehicle
Dim doa As EngineeringDataAdapter = New EngineeringDataAdapter()
vehicleData = doa.CreateVehicleData(vehicle)
airdragData = doa.CreateAirdragData(vehicle, vehicle)
retarderData = doa.CreateRetarderData(vehicle)
retarderData = doa.CreateRetarderData(vehicle, emPos)
angledriveData = doa.CreateAngledriveData(vehicle)
ptoData = doa.CreatePTOTransmissionData(vehicle)
End If
......
......@@ -37,7 +37,6 @@ using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.InputData.Reader.ComponentData;
using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor;
using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
......@@ -93,17 +92,26 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
return retVal;
}
internal RetarderData SetCommonRetarderData(IRetarderInputData data)
internal RetarderData SetCommonRetarderData(IRetarderInputData retarderInputData,
PowertrainPosition position = PowertrainPosition.HybridPositionNotSet)
{
try {
var retarder = new RetarderData { Type = data.Type };
var retarder = new RetarderData { Type = retarderInputData.Type, Ratio = retarderInputData.Ratio};
switch (retarder.Type) {
case RetarderType.TransmissionInputRetarder:
case RetarderType.TransmissionOutputRetarder:
if (position.IsParallelHybrid() || position.IsOneOf(PowertrainPosition.HybridPositionNotSet,
PowertrainPosition.BatteryElectricE2))
throw new ArgumentException("Transmission retarder is only allowed in powertrains that " +
"contain a gearbox: Conventional, P-HEV and PEV-E2.", nameof(retarder));
retarder.LossMap = RetarderLossMapReader.Create(retarderInputData.LossMap);
break;
case RetarderType.AxlegearInputRetarder:
retarder.LossMap = RetarderLossMapReader.Create(data.LossMap);
retarder.Ratio = data.Ratio;
if (position != PowertrainPosition.BatteryElectricE3)
throw new ArgumentException("AxlegearInputRetarder is only allowed for PEV-E3, S-HEV-S3, S-IEPC, E-IEPC. " +
$"But engine position was: {position}", nameof(retarder));
retarder.LossMap = RetarderLossMapReader.Create(retarderInputData.LossMap);
break;
case RetarderType.None:
case RetarderType.LossesIncludedInTransmission:
......@@ -111,19 +119,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
retarder.Ratio = 1;
break;
default:
throw new ArgumentOutOfRangeException("retarder", retarder.Type, "RetarderType unknown");
throw new ArgumentOutOfRangeException(nameof(retarder), retarder.Type, "RetarderType unknown");
}
if (!retarder.Type.IsDedicatedComponent()) {
return retarder;
if (retarder.Type.IsDedicatedComponent()) {
retarder.SavedInDeclarationMode = retarderInputData.SavedInDeclarationMode;
retarder.Manufacturer = retarderInputData.Manufacturer;
retarder.ModelName = retarderInputData.Model;
retarder.Date = retarderInputData.Date;
retarder.CertificationMethod = retarderInputData.CertificationMethod;
retarder.CertificationNumber = retarderInputData.CertificationNumber;
retarder.DigestValueInput = retarderInputData.DigestValue != null ? retarderInputData.DigestValue.DigestValue : "";
}
retarder.SavedInDeclarationMode = data.SavedInDeclarationMode;
retarder.Manufacturer = data.Manufacturer;
retarder.ModelName = data.Model;
retarder.Date = data.Date;
retarder.CertificationMethod = data.CertificationMethod;
retarder.CertificationNumber = data.CertificationNumber;
retarder.DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "";
return retarder;
} catch (Exception e) {
......@@ -171,7 +178,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
};
}
protected virtual TransmissionLossMap CreateGearLossMap(ITransmissionInputData gear, uint i, bool useEfficiencyFallback, VehicleCategory vehicleCategory, GearboxType gearboxType)
protected virtual TransmissionLossMap CreateGearLossMap(ITransmissionInputData gear, uint i,
bool useEfficiencyFallback, VehicleCategory vehicleCategory, GearboxType gearboxType)
{
if (gear.LossMap != null) {
return TransmissionLossMapReader.Create(gear.LossMap, gear.Ratio, $"Gear {i + 1}", true);
......@@ -282,7 +290,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
return angledriveData;
default:
throw new ArgumentOutOfRangeException("data", "Unknown Angledrive Type.");
throw new ArgumentOutOfRangeException(nameof(data), "Unknown Angledrive Type.");
}
} catch (Exception e) {
throw new VectoException("Error while reading Angledrive data: {0}", e.Message, e);
......
......@@ -521,9 +521,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
}
//=================================
public RetarderData CreateRetarderData(IRetarderInputData retarder)
public RetarderData CreateRetarderData(IRetarderInputData retarder, PowertrainPosition powertrainPosition)
{
return SetCommonRetarderData(retarder);
return SetCommonRetarderData(retarder, powertrainPosition);
}
public PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto)
......
......@@ -187,13 +187,12 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
dao.CreateElectricMachines(vehicle.Components.ElectricMachines,
vehicle.ElectricMotorTorqueLimits, averageVoltage) ??
new List<Tuple<PowertrainPosition, ElectricMotorData>>();
var powertrainPosition = electricMachines.First(e => e.Item1 != PowertrainPosition.GEN).Item1;
var jobType = VectoSimulationJobType.SerialHybridVehicle;
var vehicleData = dao.CreateVehicleData(vehicle);
var hybridParameters = dao.CreateHybridStrategyParameters(InputDataProvider.JobInputData,
engineData, gearboxData);
yield return new VectoRunData {
JobName = InputDataProvider.JobInputData.JobName,
JobType = jobType,
......@@ -205,20 +204,20 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
AirdragData = dao.CreateAirdragData(vehicle.Components.AirdragInputData, vehicle),
DriverData = driver,
Aux = dao.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData),
BusAuxiliaries =
dao.CreateBusAuxiliariesData(vehicle.Components.AuxiliaryInputData, vehicleData, jobType),
Retarder = dao.CreateRetarderData(vehicle.Components.RetarderInputData),
BusAuxiliaries = dao.CreateBusAuxiliariesData(vehicle.Components.AuxiliaryInputData,
vehicleData, jobType),
Retarder = dao.CreateRetarderData(vehicle.Components.RetarderInputData, powertrainPosition),
PTO = ptoTransmissionData,
Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name),
ExecutionMode = ExecutionMode.Engineering,
PTOCycleWhileDrive = ptoCycleWhileDrive,
ElectricMachinesData = electricMachines,
HybridStrategyParameters = hybridParameters,
BatteryData = battery,
SuperCapData = superCap,
SimulationType = SimulationType.DistanceCycle | SimulationType.MeasuredSpeedCycle |
SimulationType.PWheel,
SimulationType = SimulationType.DistanceCycle
| SimulationType.MeasuredSpeedCycle
| SimulationType.PWheel,
GearshiftParameters = gearshiftParams,
ElectricAuxDemand = InputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData
.Auxiliaries.ElectricPowerDemand,
......@@ -262,7 +261,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
var averageVoltage = batteryData != null ? CalculateAverageVoltage(batteryData) : null;
var electricMachinesData = dao.CreateElectricMachines(vehicle.Components.ElectricMachines, vehicle.ElectricMotorTorqueLimits, averageVoltage);
var powertrainPosition = electricMachinesData.First(e => e.Item1 != PowertrainPosition.GEN).Item1;
GearboxData gearboxData = null;
ShiftStrategyParameters gearshiftParams = null;
var angledriveData = dao.CreateAngledriveData(vehicle.Components.AngledriveInputData);
......@@ -319,7 +318,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
DriverData = driver,
Aux = dao.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData),
BusAuxiliaries = dao.CreateBusAuxiliariesData(vehicle.Components.AuxiliaryInputData, vehicleData, VectoSimulationJobType.BatteryElectricVehicle),
Retarder = dao.CreateRetarderData(vehicle.Components.RetarderInputData),
Retarder = dao.CreateRetarderData(vehicle.Components.RetarderInputData, powertrainPosition),
//PTO = ptoTransmissionData,
Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name),
ExecutionMode = ExecutionMode.Engineering,
......@@ -405,8 +404,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
dao.CreateElectricMachines(vehicle.Components.ElectricMachines,
vehicle.ElectricMotorTorqueLimits, averageVoltage) ??
new List<Tuple<PowertrainPosition, ElectricMotorData>>();
var powertrainPosition = electricMachines.First(e => e.Item1 != PowertrainPosition.GEN).Item1;
var jobType = electricMachines.Count > 0 && (battery != null || superCap != null)
? VectoSimulationJobType.ParallelHybridVehicle
......@@ -445,7 +443,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
Aux = dao.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData),
BusAuxiliaries =
dao.CreateBusAuxiliariesData(vehicle.Components.AuxiliaryInputData, vehicleData, jobType),
Retarder = dao.CreateRetarderData(vehicle.Components.RetarderInputData),
Retarder = dao.CreateRetarderData(vehicle.Components.RetarderInputData, powertrainPosition),
PTO = ptoTransmissionData,
Cycle = new DrivingCycleProxy(drivingCycle, cycle.Name),
ExecutionMode = ExecutionMode.Engineering,
......
using System;
using System.Data;
using System.ServiceModel;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
......@@ -13,22 +12,14 @@ namespace TUGraz.VectoCore.Models.Declaration
public class GenericBusRetarderData
{
public RetarderData CreateGenericBusRetarderData(IRetarderInputData retarderInput)
{
if (retarderInput == null || !retarderInput.Type.IsDedicatedComponent()) {
return new RetarderData {Type = retarderInput?.Type ?? RetarderType.None, Ratio = 1.0};
}
var retarder = new RetarderData
{
Ratio = retarderInput.Ratio,
Type = retarderInput.Type,
LossMap = GenerateGenericLossMap(retarderInput.Ratio)
public RetarderData CreateGenericBusRetarderData(IRetarderInputData retarderInput) =>
new RetarderData {
Type = retarderInput?.Type ?? RetarderType.None,
Ratio = retarderInput?.Ratio ?? 1.0,
LossMap = retarderInput?.Type.IsDedicatedComponent() ?? false
? GenerateGenericLossMap(retarderInput.Ratio) : null
};
return retarder;
}
private RetarderLossMap GenerateGenericLossMap(double stepUpRatio)
{
var retarderSpeeds = new double[] {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment