diff --git a/Generic Vehicles/Engineering Mode/24t Coach/24t Coach.vmap b/Generic Vehicles/Engineering Mode/24t Coach/24t Coach.vmap index 26c035cad9373137a6be4195e75a204b3625a22c..7d0a7db55c476ef578732cda54676cb10c5a6371 100644 --- a/Generic Vehicles/Engineering Mode/24t Coach/24t Coach.vmap +++ b/Generic Vehicles/Engineering Mode/24t Coach/24t Coach.vmap @@ -16,6 +16,7 @@ 600,1000,12071 600,1200,14201 600,1282,15304 +600,1400,15304 800,-149,0 800,0,1879 800,200,4286 @@ -27,6 +28,7 @@ 800,1400,22426 800,1600,25483 800,1791,28905 +800,2000,28905 1000,-160,0 1000,0,2865 1000,200,5963 @@ -41,6 +43,7 @@ 1000,2000,39360 1000,2200,44120 1000,2300,46836 +1000,2500,46836 1200,-179,0 1200,0,3307 1200,200,6897 @@ -55,6 +58,7 @@ 1200,2000,46915 1200,2200,51783 1200,2300,54932 +1200,2500,54932 1400,-203,0 1400,0,4306 1400,200,8143 @@ -69,6 +73,7 @@ 1400,2000,55830 1400,2200,61072 1400,2300,64377 +1400,2500,64377 1600,-235,0 1600,0,5209 1600,200,9669 @@ -82,6 +87,7 @@ 1600,1800,57020 1600,2000,63914 1600,2079,66520 +1600,2200,66520 1800,-264,0 1800,0,6409 1800,200,11777 @@ -94,6 +100,7 @@ 1800,1600,57436 1800,1800,65157 1800,1857,67574 +1800,2000,67574 2000,-301,0 2000,0,9127 2000,200,14822 @@ -103,6 +110,7 @@ 2000,1000,42837 2000,1200,51018 2000,1352,56618 +2000,1500,56618 2100,-320,0 2100,0,10470 2100,200,16332 @@ -111,3 +119,4 @@ 2100,800,35717 2100,1000,45643 2100,1100,50653 +2100,1300,50653 \ No newline at end of file diff --git a/VECTOAux/VectoAuxiliaries/UI/frmAuxiliaryConfig.vb b/VECTOAux/VectoAuxiliaries/UI/frmAuxiliaryConfig.vb index 3e825e0fefa890a96c1f10d0d6e3127eb0c2ad1c..ae3392a325355fcd0e6753ac645ba1a7eab57d32 100644 --- a/VECTOAux/VectoAuxiliaries/UI/frmAuxiliaryConfig.vb +++ b/VECTOAux/VectoAuxiliaries/UI/frmAuxiliaryConfig.vb @@ -611,7 +611,7 @@ Public Class frmAuxiliaryConfig Dim s As Single - If e.ColumnIndex = - 1 Then + If e.ColumnIndex = -1 Then e.Cancel = True Exit Sub @@ -840,7 +840,7 @@ Public Class frmAuxiliaryConfig Private Sub btnAlternatorMapPath_Click(sender As Object, e As EventArgs) Handles btnAlternatorMapPath.Click - Dim fbAux As New cFileBrowser("AAUXALT", True, False) + Dim fbAux As New cFileBrowser("AAUXALT", False, False) fbAux.Extensions = New String() {"AALT"} Dim suppliedAALTPath As String = txtAlternatorMapPath.Text @@ -907,7 +907,7 @@ Public Class frmAuxiliaryConfig Return End If End Using - + BindingContext(auxConfig.ElectricalUserInputsConfig).EndCurrentEdit() Validate_Electrics() End If @@ -935,6 +935,10 @@ Public Class frmAuxiliaryConfig txtCompressorMap.Focus() End Sub + Private Sub btnActuationsMap_BindingContextChanged(sender As Object, e As EventArgs) _ + Handles btnActuationsMap.BindingContextChanged + End Sub + Private Sub btnActuationsMap_Click(sender As Object, e As EventArgs) Handles btnActuationsMap.Click Dim fbAux As New cFileBrowser("AAUXPneuAct", True, False) @@ -987,9 +991,13 @@ Public Class frmAuxiliaryConfig End If End Sub + Private Sub btnSSMBSource_BindingContextChanged(sender As Object, e As EventArgs) _ + Handles btnSSMBSource.BindingContextChanged + End Sub + Private Sub btnSSMBSource_Click(sender As Object, e As EventArgs) Handles btnSSMBSource.Click - Dim fbAux As New cFileBrowser("AAUXSSM", True, False) + Dim fbAux As New cFileBrowser("AAUXSSM", False, False) fbAux.Extensions = New String() {"AHSM"} Dim suppliedSSMPath As String = txtSSMFilePath.Text.Trim() @@ -1058,7 +1066,7 @@ Public Class frmAuxiliaryConfig Return End If End Using - + BindingContext(auxConfig.HvacUserInputsConfig).EndCurrentEdit() Validate_HVAC() End If @@ -1188,10 +1196,10 @@ Public Class frmAuxiliaryConfig e.Graphics.FillRectangle(br, e.Bounds) Dim sz As SizeF = e.Graphics.MeasureString(tabMain.TabPages(e.Index).Text, e.Font) e.Graphics.DrawString(tabMain.TabPages(e.Index).Text, e.Font, Brushes.Black, - e.Bounds.Left + (e.Bounds.Width - sz.Width)/2, e.Bounds.Top + (e.Bounds.Height - sz.Height)/2 + 1) + e.Bounds.Left + (e.Bounds.Width - sz.Width) / 2, e.Bounds.Top + (e.Bounds.Height - sz.Height) / 2 + 1) Dim rect As Rectangle = e.Bounds - rect.Offset(- 1, - 1) + rect.Offset(-1, -1) rect.Inflate(1, 1) ' e.Graphics.DrawRectangle(Pens.DarkGray, rect) 'e.DrawFocusRectangle() diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index 1a84dd10c4438513171acb7accb113ecd4a7aade..7420c8f028a4777f80b6befd69c25509ae5492db 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -291,7 +291,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl // connect aux --> engine if (data.AdvancedAux != null && data.AdvancedAux.AuxiliaryAssembly == AuxiliaryModel.Advanced) { - engine.Connect(CreateBusAuxiliaries(data, container).Port()); + engine.Connect(CreateAdvancedAuxiliaries(data, container).Port()); } else { if (data.Aux != null) { engine.Connect(CreateAuxiliaries(data, container).Port()); @@ -303,10 +303,11 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl return container; } - private IEngineAuxInProvider CreateBusAuxiliaries(VectoRunData data, VehicleContainer container) + private IEngineAuxInProvider CreateAdvancedAuxiliaries(VectoRunData data, VehicleContainer container) { + var conventionalAux = CreateAuxiliaries(data, container); var busAux = new BusAuxiliariesAdapter(container, data.AdvancedAux.AdvancedAuxiliaryFilePath, data.Cycle.Name, - data.VehicleData.TotalVehicleWeight(), data.EngineData.ConsumptionMap, data.EngineData.IdleSpeed); + data.VehicleData.TotalVehicleWeight(), data.EngineData.ConsumptionMap, data.EngineData.IdleSpeed, conventionalAux); return busAux; } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs index e581628d9c8ad66c4c29a953d0eadbc6352d0cd7..c4aed9a98105c0b48518f2a7343005aa51cf94e5 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs @@ -52,18 +52,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected internal BusAuxState CurrentState; protected internal BusAuxState PreviousState; + protected internal IEngineAuxPort AdditionalAux; + protected IAdvancedAuxiliaries Auxiliaries; private readonly FuelConsumptionAdapter _fcMapAdapter; - public BusAuxiliariesAdapter(IDataBus container, string aauxFile, string cycleName, Kilogram vehicleWeight, - FuelConsumptionMap fcMap, PerSecond engineIdleSpeed) + FuelConsumptionMap fcMap, PerSecond engineIdleSpeed, IEngineAuxPort additionalAux = null) { // mAAUX_Global.advancedAuxModel.Signals.DeclarationMode = Cfg.DeclMode // mAAUX_Global.advancedAuxModel.Signals.WHTC = Declaration.WHTCcorrFactor CurrentState = new BusAuxState(); PreviousState = new BusAuxState(); + AdditionalAux = additionalAux; + DataBus = container; var tmpAux = new AdvancedAuxiliaries(); @@ -129,6 +132,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { PreviousState.TotalFuelConsumption = 0.SI<Kilogram>(); PreviousState.AngularSpeed = angularSpeed; + CurrentState.AngularSpeed = angularSpeed; + if (AdditionalAux != null) { + AdditionalAux.Initialize(torque, angularSpeed); + } PreviousState.PowerDemand = GetBusAuxPowerDemand(0.SI<Second>(), 1.SI<Second>(), torque, torque, angularSpeed); return PreviousState.PowerDemand / angularSpeed; } @@ -245,7 +252,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } Auxiliaries.Signals.EngineMotoringPower = -DataBus.EngineDragPower(angularSpeed); Auxiliaries.Signals.EngineSpeed = angularSpeed; - Auxiliaries.Signals.PreExistingAuxPower = 0.SI<Watt>(); //mAAUX_Global.PreExistingAuxPower; + var avgAngularSpeed = (PreviousState.AngularSpeed + CurrentState.AngularSpeed) / 2; + Auxiliaries.Signals.PreExistingAuxPower = AdditionalAux != null + ? AdditionalAux.PowerDemand(absTime, dt, torquePowerTrain, torqueEngine, angularSpeed, dryRun) * avgAngularSpeed + : 0.SI<Watt>(); + ; //mAAUX_Global.PreExistingAuxPower; Auxiliaries.Signals.Idle = DataBus.VehicleStopped; Auxiliaries.Signals.InNeutral = DataBus.Gear == 0; Auxiliaries.Signals.RunningCalc = true; @@ -253,7 +264,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl //mAAUX_Global.Internal_Engine_Power; //'Power coming out of Advanced Model is in Watts. - return Auxiliaries.AuxiliaryPowerAtCrankWatts; + return Auxiliaries.AuxiliaryPowerAtCrankWatts + Auxiliaries.Signals.PreExistingAuxPower; } protected class FuelConsumptionAdapter : IFuelConsumptionMap diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs index 1dbbacea8f4c7830489dadb5d62d078dad8c443c..dccb11799781a4bf6c6b73a3e524a18323b883c2 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/DefaultDriverStrategy.cs @@ -439,7 +439,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } var newOperatingPoint = VectoMath.ComputeTimeInterval(DataBus.VehicleSpeed, response.Acceleration, DataBus.Distance, - ds); + newds); if (newOperatingPoint.SimulationInterval.IsSmaller(Constants.SimulationSettings.LowerBoundTimeInterval)) { // the next time interval will be too short, this may lead to issues with inertia etc. // instead of accelerating, drive at constant speed. @@ -536,31 +536,31 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return response; } var v2 = Driver.DataBus.VehicleSpeed + response.Acceleration * response.SimulationInterval; - var brakingDistance = Driver.DriverData.AccelerationCurve.ComputeAccelerationDistance(v2, + var newBrakingDistance = Driver.DriverData.AccelerationCurve.ComputeAccelerationDistance(v2, nextAction.NextTargetSpeed) + DefaultDriverStrategy.BrakingSafetyMargin; switch (DriverStrategy.NextDrivingAction.Action) { case DrivingBehavior.Coasting: var coastingDistance = DriverStrategy.ComputeCoastingDistance(v2, nextAction.CycleEntry); - var nextActionDistance = coastingDistance; + var newActionDistance = coastingDistance; var safetyFactor = 4.0; - if (brakingDistance > coastingDistance) { - nextActionDistance = brakingDistance; + if (newBrakingDistance > coastingDistance) { + newActionDistance = newBrakingDistance; safetyFactor = 0.5; } // if the distance at the end of the simulation interval is smaller than the new ActionDistance // we are safe - go ahead... - if ((Driver.DataBus.Distance + ds).IsSmallerOrEqual(nextAction.TriggerDistance - nextActionDistance, + if ((Driver.DataBus.Distance + ds).IsSmallerOrEqual(nextAction.TriggerDistance - newActionDistance, Constants.SimulationSettings.DriverActionDistanceTolerance * safetyFactor) && - (Driver.DataBus.Distance + ds).IsSmallerOrEqual(nextAction.TriggerDistance - brakingDistance)) { + (Driver.DataBus.Distance + ds).IsSmallerOrEqual(nextAction.TriggerDistance - newBrakingDistance)) { return response; } newds = ds / 2; //EstimateAccelerationDistanceBeforeBrake(response, nextAction) ?? ds; break; case DrivingBehavior.Braking: - if ((Driver.DataBus.Distance + ds).IsSmaller(nextAction.TriggerDistance - brakingDistance)) { + if ((Driver.DataBus.Distance + ds).IsSmaller(nextAction.TriggerDistance - newBrakingDistance)) { return response; } - newds = (nextAction.TriggerDistance - brakingDistance) - Driver.DataBus.Distance - + newds = (nextAction.TriggerDistance - newBrakingDistance) - Driver.DataBus.Distance - Constants.SimulationSettings.DriverActionDistanceTolerance / 2; break; default: @@ -629,31 +629,31 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } var currentDistance = DataBus.Distance; + var brakingDistance = Driver.ComputeDecelerationDistance(DriverStrategy.BrakeTrigger.NextTargetSpeed) + + DefaultDriverStrategy.BrakingSafetyMargin; + DriverStrategy.BrakeTrigger.BrakingStartDistance = DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance; if (Phase == BrakingPhase.Coast) { - var brakingDistance = Driver.ComputeDecelerationDistance(DriverStrategy.BrakeTrigger.NextTargetSpeed) + - DefaultDriverStrategy.BrakingSafetyMargin; - DriverStrategy.BrakeTrigger.BrakingStartDistance = DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance; - var nextBrakeAction = DriverStrategy.GetNextDrivingAction(DataBus.Distance, ds); if (nextBrakeAction != null && !DriverStrategy.BrakeTrigger.TriggerDistance.IsEqual(nextBrakeAction.TriggerDistance) && - nextBrakeAction.BrakingStartDistance.IsSmaller( DriverStrategy.BrakeTrigger.BrakingStartDistance)) { + nextBrakeAction.BrakingStartDistance.IsSmaller(DriverStrategy.BrakeTrigger.BrakingStartDistance)) { DriverStrategy.BrakeTrigger = nextBrakeAction; - Log.Debug("setting brake trigger to new trigger: trigger distance: {0}, start braking @ {1}", nextBrakeAction.TriggerDistance, nextBrakeAction.BrakingStartDistance); + Log.Debug("setting brake trigger to new trigger: trigger distance: {0}, start braking @ {1}", + nextBrakeAction.TriggerDistance, nextBrakeAction.BrakingStartDistance); } - - Log.Debug("start braking @ {0}", DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance); - var remainingDistanceToBrake = DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance - currentDistance; + + Log.Debug("start braking @ {0}", DriverStrategy.BrakeTrigger.BrakingStartDistance); + var remainingDistanceToBrake = DriverStrategy.BrakeTrigger.BrakingStartDistance - currentDistance; var estimatedTimeInterval = remainingDistanceToBrake / DataBus.VehicleSpeed; if (estimatedTimeInterval.IsSmaller(Constants.SimulationSettings.LowerBoundTimeInterval) || currentDistance + Constants.SimulationSettings.DriverActionDistanceTolerance > - DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance) { + DriverStrategy.BrakeTrigger.BrakingStartDistance) { Phase = BrakingPhase.Brake; Log.Debug("Switching to BRAKE Phase. currentDistance: {0}", currentDistance); } else { - if ((currentDistance + ds).IsGreater(DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance)) { + if ((currentDistance + ds).IsGreater(DriverStrategy.BrakeTrigger.BrakingStartDistance)) { return new ResponseDrivingCycleDistanceExceeded() { //Source = this, - MaxDistance = DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance - currentDistance + MaxDistance = DriverStrategy.BrakeTrigger.BrakingStartDistance - currentDistance }; } } @@ -704,13 +704,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl }); break; case BrakingPhase.Brake: - var brakingDistance = Driver.ComputeDecelerationDistance(DriverStrategy.BrakeTrigger.NextTargetSpeed) + - DefaultDriverStrategy.BrakingSafetyMargin; + Log.Debug("Phase: BRAKE. breaking distance: {0} start braking @ {1}", brakingDistance, - DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance); - if (DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance < currentDistance) { + DriverStrategy.BrakeTrigger.BrakingStartDistance); + if (DriverStrategy.BrakeTrigger.BrakingStartDistance < currentDistance) { Log.Info("Expected Braking Deceleration could not be reached! {0}", - DriverStrategy.BrakeTrigger.TriggerDistance - brakingDistance - currentDistance); + DriverStrategy.BrakeTrigger.BrakingStartDistance - currentDistance); } var targetDistance = DataBus.VehicleSpeed < Constants.SimulationSettings.MinVelocityForCoast ? DriverStrategy.BrakeTrigger.TriggerDistance @@ -751,7 +750,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected override IResponse CheckRequestDoesNotExceedNextAction(Second absTime, Meter ds, MeterPerSecond targetVelocity, Radian gradient, IResponse response, out Meter newds) { - var nextAction = DriverStrategy.NextDrivingAction; + var nextAction = DriverStrategy.BrakeTrigger; newds = ds; if (nextAction == null) { return response; @@ -760,12 +759,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl switch (nextAction.Action) { case DrivingBehavior.Coasting: var v2 = Driver.DataBus.VehicleSpeed + response.Acceleration * response.SimulationInterval; - var brakingDistance = Driver.DriverData.AccelerationCurve.ComputeAccelerationDistance(v2, + var newBrakingDistance = Driver.DriverData.AccelerationCurve.ComputeAccelerationDistance(v2, nextAction.NextTargetSpeed); - if ((Driver.DataBus.Distance + ds).IsSmaller(nextAction.TriggerDistance - brakingDistance)) { + if ((Driver.DataBus.Distance + ds).IsSmaller(nextAction.TriggerDistance - newBrakingDistance)) { return response; } - newds = (nextAction.TriggerDistance - brakingDistance) - Driver.DataBus.Distance - + newds = nextAction.TriggerDistance - newBrakingDistance - Driver.DataBus.Distance - Constants.SimulationSettings.DriverActionDistanceTolerance / 2; break; default: diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs index 52003ba556f8e36fd7abf67df733baa762d3a5be..dc7739b3f9a0d952ed71b77f9befe8cdbbb7ba9c 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/EngineAuxiliary.cs @@ -81,7 +81,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl foreach (var kv in _powerDemands.Where(kv => !string.IsNullOrWhiteSpace(kv.Key))) { container[kv.Key] = kv.Value; } - container[ModalResultField.P_aux] = _powerDemands.Values.Sum(p => p); + if (container[ModalResultField.P_aux] == null) { + // don't overwrite if someone else already wrote the total aux power + container[ModalResultField.P_aux] = _powerDemands.Values.Sum(p => p); + } } protected override void DoCommitSimulationStep()