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

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

remove selection of shift strategy

parent 5e58b583
No related branches found
No related tags found
No related merge requests found
Showing
with 546 additions and 505 deletions
......@@ -837,7 +837,7 @@ Public Class GearboxForm
'Dim fullLoadCurve As FullLoadCurve = ConvertToFullLoadCurve(FLD0.LnU, FLD0.LTq)
Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
Dim shiftLines As ShiftPolygon = GetShiftLines(engine.EngineModes.First().IdleSpeed, engineFld, vehicle, gears, gear, inputData.JobInputData.ShiftStrategy)
Dim shiftLines As ShiftPolygon = GetShiftLines(engine.EngineModes.First().IdleSpeed, engineFld, vehicle, gears, gear)
If (Not IsNothing(shiftLines)) Then
......@@ -906,7 +906,7 @@ Public Class GearboxForm
End Sub
Private Function GetShiftLines(idleSpeed As PerSecond, engineFullLoadCurve As EngineFullLoadCurve, vehicle As IVehicleEngineeringInputData, gears As IList(Of ITransmissionInputData), gear As Integer, shiftStrategy As String) _
Private Function GetShiftLines(idleSpeed As PerSecond, engineFullLoadCurve As EngineFullLoadCurve, vehicle As IVehicleEngineeringInputData, gears As IList(Of ITransmissionInputData), gear As Integer) _
As ShiftPolygon
Dim maxTqStr As String = LvGears.Items(gear).SubItems(GearboxTbl.MaxTorque).Text
Dim engine As CombustionEngineData = ConvertToEngineData(engineFullLoadCurve, idleSpeed, gear,
......@@ -928,7 +928,6 @@ Public Class GearboxForm
End If
Dim tmpRunData as VectoRunData = New VectoRunData() With {
.ShiftStrategy = shiftStrategy,
.GearboxData = New GearboxData() with {
.Type = CType(CbGStype.SelectedValue, GearboxType)
}
......@@ -1085,7 +1084,7 @@ Public Class GearboxForm
If VectoJobForm.Visible AndAlso engine.EngineModes.First().IdleSpeed > 0 Then
Dim gears As IList(Of ITransmissionInputData) = ConvertToGears(LvGears.Items)
Dim shiftLines As ShiftPolygon = GetShiftLines(engine.EngineModes.First().IdleSpeed, engineFld, vehicle, gears, gear, inputData.JobInputData.ShiftStrategy)
Dim shiftLines As ShiftPolygon = GetShiftLines(engine.EngineModes.First().IdleSpeed, engineFld, vehicle, gears, gear)
If (Not IsNothing(shiftLines)) Then
ShiftPolygonExport.WriteShiftPolygon(shiftLines, jobFile & "_Gear " & gear & ".vgbs")
End If
......
This diff is collapsed.
......@@ -88,10 +88,6 @@ Public Class VectoJobForm
_changed = False
cbGearshiftStrategy.DataSource = PowertrainBuilder.GetRegisteredShiftStrategies(Nothing).Select(Function(entry) New With {.Value = entry.Item1, .Label = entry.Item2}).ToList()
cbGearshiftStrategy.DisplayMember = "Label"
cbGearshiftStrategy.ValueMember = "Value"
'Attempt to select that found in Config
UpdateEnabledControls()
......@@ -570,17 +566,6 @@ Public Class VectoJobForm
'-------------------------------------------------------------
If (JobType <> VectoSimulationJobType.BatteryElectricVehicle OrElse Not IsNothing(inputData.JobInputData.Vehicle.Components.GearboxInputData)) Then
cbGearshiftStrategy.DataSource = PowertrainBuilder.GetRegisteredShiftStrategies(inputData.JobInputData.Vehicle.Components.GearboxInputData.Type) _
.Concat({Tuple.Create("", "Not specified - use default")}) _
.Select(Function(entry) New With {.Value = entry.Item1, .Label = entry.Item2}).ToList()
cbGearshiftStrategy.DisplayMember = "Label"
cbGearshiftStrategy.ValueMember = "Value"
End If
If (Not inputData.JobInputData.ShiftStrategy Is Nothing) Then
cbGearshiftStrategy.SelectedValue = inputData.JobInputData.ShiftStrategy
End If
if (Not inputData.JobInputData.Vehicle.Components.AuxiliaryInputData.BusAuxiliariesData Is nothing) Then
cbEnableBusAux.Checked = True
tbBusAuxParams.Text = GetRelativePath(inputData.JobInputData.Vehicle.Components.AuxiliaryInputData.BusAuxiliariesData.DataSource.SourceFile, _basePath)
......@@ -641,7 +626,6 @@ Public Class VectoJobForm
vectoJob.PathGbx = TbGBX.Text
vectoJob.PathShiftParams = TbShiftStrategyParams.Text
vectoJob.ShiftStrategy = cbGearshiftStrategy.SelectedValue?.ToString()
vectoJob.PathHybridStrategyParams = tbHybridStrategyParams.Text
'a_DesMax
vectoJob.DesMaxFile = TbDesMaxFile.Text
......
......@@ -923,7 +923,6 @@ Public Class MockJobInputData
Public Property JobType As VectoSimulationJobType Implements IEngineeringJobInputData.JobType
Public Property EngineOnly As IEngineEngineeringInputData Implements IEngineeringJobInputData.EngineOnly
Public Property JobName As String Implements IDeclarationJobInputData.JobName
Public Property ShiftStrategy As String Implements IDeclarationJobInputData.ShiftStrategy
End Class
Public Class MockDriverInputData
......
......@@ -72,7 +72,6 @@ Public Class VectoJob
Public LookAheadMinSpeed As Double
Public EngineStopStartActivationThreshold As Double
Private _shiftStrategy As String
public EngineOffTimeLimit As double
public EngineStStUtilityFactor As Double
public EngineStStUtilityFactorDriving as Double
......@@ -698,15 +697,7 @@ Public Class VectoJob
End Get
End Property
Public Property ShiftStrategy As String Implements IDeclarationJobInputData.ShiftStrategy
Get
Return _shiftStrategy
End Get
set (value as string)
_shiftStrategy = value
End set
End Property
Public Property AuxPwrICEOn As Double
Public ReadOnly Property IAuxiliariesDeclarationInputData_SavedInDeclarationMode As Boolean _
......
......@@ -50,8 +50,6 @@ namespace TUGraz.VectoCommon.InputData
string JobName { get; }
string ShiftStrategy { get; }
VectoSimulationJobType JobType { get; }
}
......
......@@ -175,8 +175,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public string JobName => "";
public string ShiftStrategy => "";
public string Identifier => Vehicle.Identifier;
public bool ExemptedVehicle => false;
......
......@@ -327,18 +327,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public virtual VectoSimulationJobType JobType => Body.GetEx(JsonKeys.Job_EngineOnlyMode).Value<bool>() ? VectoSimulationJobType.EngineOnlySimulation : VectoSimulationJobType.ConventionalVehicle;
public virtual string JobName => _jobname;
public string ShiftStrategy
{
get {
if (Body["ShiftStrategy"] == null) {
return "";
}
return Body.GetEx<string>("ShiftStrategy");
}
}
#endregion
#region DriverInputData
......@@ -1018,8 +1007,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public IVehicleDeclarationInputData Vehicle => PrimaryVehicle;
public string JobName { get; }
public string ShiftStrategy => "";
public VectoSimulationJobType JobType => VectoSimulationJobType.ConventionalVehicle;
#endregion
......@@ -1076,8 +1064,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
public IVehicleDeclarationInputData Vehicle { get; }
public string JobName { get; }
public string ShiftStrategy => "";
public VectoSimulationJobType JobType => VectoSimulationJobType.ConventionalVehicle;
#endregion
......
......@@ -71,8 +71,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
public virtual string JobName => Vehicle.Identifier;
public virtual string ShiftStrategy => null;
public VectoSimulationJobType JobType => VectoSimulationJobType.ConventionalVehicle;
#endregion
......@@ -126,8 +124,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
protected override DataSourceType SourceType { get; }
public bool SavedInDeclarationMode { get; }
public string JobName { get; }
public string ShiftStrategy => null;
public VectoSimulationJobType JobType => VectoSimulationJobType.ConventionalVehicle;
public IXMLJobDataReader Reader { protected get; set; }
public IXMLPrimaryVehicleBusInputData InputData { get; }
......
......@@ -79,8 +79,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider
public virtual TableData PTOCycleWhileDrive => null;
public string ShiftStrategy => null;
public virtual VectoSimulationJobType JobType { get; }
......
......@@ -88,7 +88,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl {
}
_angledriveData = DataAdapter.CreateAngledriveData(InputDataProvider.JobInputData.Vehicle.Components.AngledriveInputData);
var tmpRunData = new VectoRunData() {
ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy,
GearboxData = new GearboxData() {
Type = vehicle.Components.GearboxInputData.Type,
}
......
......@@ -101,7 +101,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
_angledriveData = DataAdapterGeneric.CreateAngledriveData(PrimaryVehicle.Components.AngledriveInputData);
var tmpRunData = new VectoRunData() {
ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy,
GearboxData = new GearboxData() {
Type = PrimaryVehicle.Components.GearboxInputData.Type,
}
......
......@@ -178,7 +178,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
InputDataHash = InputDataProvider.XMLHash,
SimulationType = SimulationType.DistanceCycle,
GearshiftParameters = _gearshiftData,
ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy
};
simulationRunData.EngineData.FuelMode = modeIdx;
simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
......
......@@ -132,7 +132,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
InputDataHash = InputDataProvider.XMLHash,
SimulationType = SimulationType.DistanceCycle,
GearshiftParameters = _gearshiftData,
ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy
};
simulationRunData.EngineData.FuelMode = modeIdx;
simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
......
......@@ -102,7 +102,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
axlegearData.AxleGear.Ratio * (angledriveData?.Angledrive.Ratio ?? 1.0), null);
var tmpRunData = new VectoRunData() {
JobType = VectoSimulationJobType.BatteryElectricVehicle,
ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy,
GearboxData = new GearboxData() {
Type = vehicle.Components.GearboxInputData.Type,
},
......@@ -157,7 +156,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
SuperCapData = dao.CreateSuperCapData(vehicle.Components.ElectricStorage, vehicle.InitialSOC),
SimulationType = SimulationType.DistanceCycle | SimulationType.MeasuredSpeedCycle | SimulationType.PWheel,
GearshiftParameters = gearshiftParams,
ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy,
ElectricAuxDemand = InputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData.Auxiliaries.ElectricPowerDemand,
};
}
......@@ -183,7 +181,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
var axlegearData = dao.CreateAxleGearData(vehicle.Components.AxleGearInputData);
var tmpRunData = new VectoRunData() {
ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy,
GearboxData = new GearboxData() {
Type = vehicle.Components.GearboxInputData.Type,
}
......@@ -281,7 +278,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
SimulationType = SimulationType.DistanceCycle | SimulationType.MeasuredSpeedCycle |
SimulationType.PWheel,
GearshiftParameters = gearshiftParams,
ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy,
ElectricAuxDemand = InputDataProvider.JobInputData.Vehicle.Components.AuxiliaryInputData
.Auxiliaries.ElectricPowerDemand,
};
......
......@@ -482,7 +482,6 @@ namespace TUGraz.VectoCore.Models.Declaration
public const double DownhillSlope = -5;
public const double UphillSlope = 5;
public static string DefaultShiftStrategy = "";
public const double DragMarginFactor = 0.7;
......@@ -531,10 +530,6 @@ namespace TUGraz.VectoCore.Models.Declaration
if (tcuData.MinEngineSpeedPostUpshift != null) {
MinEngineSpeedPostUpshift = tcuData.MinEngineSpeedPostUpshift;
}
var tmp = tcuData as JSONFile;
if (tmp != null && tmp.Body["ShiftStrategy"] != null) {
DefaultShiftStrategy = tmp.Body["ShiftStrategy"].Value<string>();
}
//#endif
}
}
......
......@@ -69,30 +69,30 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
private readonly IModalDataContainer _modData;
private readonly WriteSumData _sumWriter;
private static List<Tuple<GbxTypeList, string, string, StrategyCreator>> ShiftStrategies =
new List<Tuple<GbxTypeList, string, string, StrategyCreator>> {
Tuple.Create<GbxTypeList, string, string, StrategyCreator>(new GbxTypeList { GearboxType.MT },
typeof(MTShiftStrategy).FullName, MTShiftStrategy.Name, c => new MTShiftStrategy(c)),
Tuple.Create<GbxTypeList, string, string, StrategyCreator>(new GbxTypeList { GearboxType.AMT },
typeof(AMTShiftStrategy).FullName, AMTShiftStrategy.Name, c => new AMTShiftStrategy(c)),
Tuple.Create<GbxTypeList, string, string, StrategyCreator>(new GbxTypeList { GearboxType.AMT },
typeof(AMTShiftStrategyOptimized).FullName, AMTShiftStrategyOptimized.Name,
c => new AMTShiftStrategyOptimized(c)),
//Tuple.Create<GbxTypeList, string, string, StrategyCreator>(new GbxTypeList { GearboxType.AMT },
// typeof(AMTShiftStrategyACEA).FullName, AMTShiftStrategyACEA.Name,
// c => new AMTShiftStrategyACEA(c)),
Tuple.Create<GbxTypeList, string, string, StrategyCreator>(
new GbxTypeList { GearboxType.ATPowerSplit, GearboxType.ATSerial },
typeof(ATShiftStrategy).FullName, ATShiftStrategy.Name, c => new ATShiftStrategy(c)),
//Tuple.Create<GbxTypeList, string, string, StrategyCreator>(
// new GbxTypeList { GearboxType.ATPowerSplit, GearboxType.ATSerial },
// typeof(ATShiftStrategyVoith).FullName, ATShiftStrategyVoith.Name,
// c => new ATShiftStrategyVoith(c)),
Tuple.Create<GbxTypeList, string, string, StrategyCreator>(
new GbxTypeList { GearboxType.ATPowerSplit, GearboxType.ATSerial },
typeof(ATShiftStrategyOptimized).FullName, ATShiftStrategyOptimized.Name,
c => new ATShiftStrategyOptimized(c)),
};
//private static List<Tuple<GbxTypeList, string, string, StrategyCreator>> ShiftStrategies =
// new List<Tuple<GbxTypeList, string, string, StrategyCreator>> {
// Tuple.Create<GbxTypeList, string, string, StrategyCreator>(new GbxTypeList { GearboxType.MT },
// typeof(MTShiftStrategy).FullName, MTShiftStrategy.Name, c => new MTShiftStrategy(c)),
// Tuple.Create<GbxTypeList, string, string, StrategyCreator>(new GbxTypeList { GearboxType.AMT },
// typeof(AMTShiftStrategy).FullName, AMTShiftStrategy.Name, c => new AMTShiftStrategy(c)),
// Tuple.Create<GbxTypeList, string, string, StrategyCreator>(new GbxTypeList { GearboxType.AMT },
// typeof(AMTShiftStrategyOptimized).FullName, AMTShiftStrategyOptimized.Name,
// c => new AMTShiftStrategyOptimized(c)),
// //Tuple.Create<GbxTypeList, string, string, StrategyCreator>(new GbxTypeList { GearboxType.AMT },
// // typeof(AMTShiftStrategyACEA).FullName, AMTShiftStrategyACEA.Name,
// // c => new AMTShiftStrategyACEA(c)),
// Tuple.Create<GbxTypeList, string, string, StrategyCreator>(
// new GbxTypeList { GearboxType.ATPowerSplit, GearboxType.ATSerial },
// typeof(ATShiftStrategy).FullName, ATShiftStrategy.Name, c => new ATShiftStrategy(c)),
// //Tuple.Create<GbxTypeList, string, string, StrategyCreator>(
// // new GbxTypeList { GearboxType.ATPowerSplit, GearboxType.ATSerial },
// // typeof(ATShiftStrategyVoith).FullName, ATShiftStrategyVoith.Name,
// // c => new ATShiftStrategyVoith(c)),
// Tuple.Create<GbxTypeList, string, string, StrategyCreator>(
// new GbxTypeList { GearboxType.ATPowerSplit, GearboxType.ATSerial },
// typeof(ATShiftStrategyOptimized).FullName, ATShiftStrategyOptimized.Name,
// c => new ATShiftStrategyOptimized(c)),
// };
public PowertrainBuilder(IModalDataContainer modData, WriteSumData sumWriter = null)
......@@ -1001,49 +1001,35 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
public static IShiftStrategy GetShiftStrategy(IVehicleContainer container)
{
var runData = container.RunData;
var shiftStrategy = runData.ShiftStrategy;
if (string.IsNullOrWhiteSpace(shiftStrategy)) {
shiftStrategy = DeclarationData.GearboxTCU.DefaultShiftStrategy;
}
if (string.IsNullOrWhiteSpace(shiftStrategy)) {
switch (runData.GearboxData.Type) {
case GearboxType.AMT:
if (runData.JobType == VectoSimulationJobType.ConventionalVehicle) {
runData.ShiftStrategy = AMTShiftStrategyOptimized.Name;
return new AMTShiftStrategyOptimized(container);
}
switch (runData.GearboxData.Type) {
case GearboxType.AMT:
if (runData.JobType == VectoSimulationJobType.ConventionalVehicle) {
runData.ShiftStrategy = AMTShiftStrategyOptimized.Name;
return new AMTShiftStrategyOptimized(container);
}
if (runData.JobType == VectoSimulationJobType.BatteryElectricVehicle) {
runData.ShiftStrategy = PEVAMTShiftStrategy.Name;
return new PEVAMTShiftStrategy(container);
}
throw new VectoException("no default gearshift strategy available for gearbox type {0} and job type {1}", runData.GearboxData.Type, runData.JobType);
//return new AMTShiftStrategy(runData, container);
case GearboxType.MT:
runData.ShiftStrategy = MTShiftStrategy.Name;
return new MTShiftStrategy(container);
case GearboxType.ATPowerSplit:
case GearboxType.ATSerial:
runData.ShiftStrategy = ATShiftStrategyOptimized.Name;
return new ATShiftStrategyOptimized(container);
//return new ATShiftStrategy(runData, container);
default:
throw new ArgumentOutOfRangeException("GearboxType",
$"Unknown Gearbox Type {runData.GearboxData.Type.ToString()}");
}
}
if (runData.JobType == VectoSimulationJobType.BatteryElectricVehicle) {
runData.ShiftStrategy = PEVAMTShiftStrategy.Name;
return new PEVAMTShiftStrategy(container);
}
var selected = ShiftStrategies.FirstOrDefault(x =>
x.Item1.Contains(runData.GearboxData.Type) &&
x.Item2.Equals(shiftStrategy, StringComparison.InvariantCultureIgnoreCase));
if (selected == null) {
throw new ArgumentOutOfRangeException("ShiftStrategy",
$"Unknown Shiftstrategy {shiftStrategy} for Gearbox Type {runData.GearboxData.Type.ToString()}");
throw new VectoException(
"no default gearshift strategy available for gearbox type {0} and job type {1}",
runData.GearboxData.Type, runData.JobType);
//return new AMTShiftStrategy(runData, container);
case GearboxType.MT:
runData.ShiftStrategy = MTShiftStrategy.Name;
return new MTShiftStrategy(container);
case GearboxType.ATPowerSplit:
case GearboxType.ATSerial:
runData.ShiftStrategy = ATShiftStrategyOptimized.Name;
return new ATShiftStrategyOptimized(container);
//return new ATShiftStrategy(runData, container);
default:
throw new ArgumentOutOfRangeException("GearboxType",
$"Unknown Gearbox Type {runData.GearboxData.Type.ToString()}");
}
runData.ShiftStrategy = selected.Item3;
return selected.Item4(container);
}
private static IGearbox GetSimpleGearbox(IVehicleContainer container, VectoRunData runData)
......@@ -1056,16 +1042,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
}
public static IEnumerable<Tuple<string, string>> GetRegisteredShiftStrategies(GearboxType? type)
{
if (!type.HasValue) {
return new List<Tuple<string, string>>();
}
return ShiftStrategies.Where(x => x.Item1.Contains(type.Value)).Select(x => Tuple.Create(x.Item2, x.Item3))
.ToList();
}
}
}
internal class DummyEngineInfo : VectoSimulationComponent, IEngineInfo, IEngineControl
{
......
......@@ -664,7 +664,6 @@ public class JSONFileWriter : IOutputFileWriter
body.Add("TCU", GetRelativePath(input.DriverInputData.GearshiftInputData.Source, basePath));
}
body.Add("ShiftStrategy", input.JobInputData.ShiftStrategy);
body.Add("HybridStrategyParams", GetRelativePath(input.JobInputData.HybridStrategyParameters.Source, basePath));
var auxList = new List<object>();
......@@ -980,9 +979,7 @@ public class JSONFileWriter : IOutputFileWriter
body.Add("TCU", GetRelativePath(input.DriverInputData.GearshiftInputData.Source, basePath));
}
body.Add("ShiftStrategy", input.JobInputData.ShiftStrategy);
if (job.SavedInDeclarationMode && job.Vehicle is IVehicleDeclarationInputData declVehicle) {
var aux = declVehicle.Components.AuxiliaryInputData;
var auxList = new List<object>();
......
......@@ -541,8 +541,7 @@ namespace TUGraz.VectoCore.Tests.FileIO
IVehicleDeclarationInputData IDeclarationJobInputData.Vehicle => Vehicle;
public string JobName { get; set; }
public string ShiftStrategy { get; set; }
#endregion
}
......
......@@ -376,7 +376,6 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
Assert.AreEqual(6, genericGearbox.Gears.Count);
Assert.AreEqual(genericGearbox.Gears.Count, specificGearbox.Gears.Count);
AssertGearShiftParameters(relatedRun);
AssertGears(genericGearbox.Gears.Values.ToList());
AssertGears(specificGearbox.Gears.Values.ToList());
AssertGearsLossmap(
......@@ -410,12 +409,7 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
}
}
private void AssertGearShiftParameters(RelatedRun relatedRun)
{
Assert.AreEqual(relatedRun.VectoRunDataGenericBody.ShiftStrategy, relatedRun.VectoRunDataSpezificBody.ShiftStrategy);
}
#endregion
#region Torque Converter Asserts
......@@ -1272,7 +1266,6 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus
public bool SavedInDeclarationMode => true;
public IVehicleDeclarationInputData Vehicle => PrimaryVehicle;
public string JobName { get; }
public string ShiftStrategy => "";
public VectoSimulationJobType JobType => VectoSimulationJobType.ConventionalVehicle;
#endregion
......
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