diff --git a/VECTO/GUI/VehicleForm.Designer.vb b/VECTO/GUI/VehicleForm.Designer.vb index 16326c203b1a018eb878b3f18cad9ad57f7b5368..2e827d7fe65b57c2852d3b7f62e01121f96897b4 100644 --- a/VECTO/GUI/VehicleForm.Designer.vb +++ b/VECTO/GUI/VehicleForm.Designer.vb @@ -138,6 +138,9 @@ Partial Class VehicleForm Me.Label18 = New System.Windows.Forms.Label() Me.Label19 = New System.Windows.Forms.Label() Me.TabPage2 = New System.Windows.Forms.TabPage() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.cbTankSystem = New System.Windows.Forms.ComboBox() + Me.Label23 = New System.Windows.Forms.Label() Me.TabPage3 = New System.Windows.Forms.TabPage() Me.lvTorqueLimits = New System.Windows.Forms.ListView() Me.ColumnHeader5 = CType(New System.Windows.Forms.ColumnHeader(),System.Windows.Forms.ColumnHeader) @@ -154,9 +157,7 @@ Partial Class VehicleForm Me.lblPCC = New System.Windows.Forms.Label() Me.cbLegislativeClass = New System.Windows.Forms.ComboBox() Me.Label21 = New System.Windows.Forms.Label() - Me.GroupBox9 = New System.Windows.Forms.GroupBox() - Me.Label23 = New System.Windows.Forms.Label() - Me.cbTankSystem = New System.Windows.Forms.ComboBox() + Me.cbAtEcoRollReleaseLockupClutch = New System.Windows.Forms.CheckBox() Me.GroupBox6.SuspendLayout Me.ToolStrip1.SuspendLayout Me.GroupBox7.SuspendLayout @@ -181,10 +182,10 @@ Partial Class VehicleForm Me.GroupBox4.SuspendLayout Me.Panel1.SuspendLayout Me.TabPage2.SuspendLayout + Me.GroupBox9.SuspendLayout Me.TabPage3.SuspendLayout Me.tpADAS.SuspendLayout Me.GroupBox5.SuspendLayout - Me.GroupBox9.SuspendLayout Me.SuspendLayout ' 'Label1 @@ -1146,6 +1147,35 @@ Partial Class VehicleForm Me.TabPage2.Text = "Powertrain" Me.TabPage2.UseVisualStyleBackColor = true ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.cbTankSystem) + Me.GroupBox9.Controls.Add(Me.Label23) + Me.GroupBox9.Location = New System.Drawing.Point(306, 7) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(264, 63) + Me.GroupBox9.TabIndex = 5 + Me.GroupBox9.TabStop = false + Me.GroupBox9.Text = "Tank System" + ' + 'cbTankSystem + ' + Me.cbTankSystem.FormattingEnabled = true + Me.cbTankSystem.Location = New System.Drawing.Point(9, 33) + Me.cbTankSystem.Name = "cbTankSystem" + Me.cbTankSystem.Size = New System.Drawing.Size(247, 21) + Me.cbTankSystem.TabIndex = 1 + ' + 'Label23 + ' + Me.Label23.AutoSize = true + Me.Label23.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) + Me.Label23.Location = New System.Drawing.Point(6, 16) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(187, 13) + Me.Label23.TabIndex = 0 + Me.Label23.Text = "Only applicable for NG engines!" + ' 'TabPage3 ' Me.TabPage3.Controls.Add(Me.lvTorqueLimits) @@ -1226,6 +1256,7 @@ Partial Class VehicleForm ' 'GroupBox5 ' + Me.GroupBox5.Controls.Add(Me.cbAtEcoRollReleaseLockupClutch) Me.GroupBox5.Controls.Add(Me.cbPcc) Me.GroupBox5.Controls.Add(Me.cbEcoRoll) Me.GroupBox5.Controls.Add(Me.Label22) @@ -1300,34 +1331,15 @@ Partial Class VehicleForm Me.Label21.TabIndex = 42 Me.Label21.Text = "Maximum Laden Mass" ' - 'GroupBox9 - ' - Me.GroupBox9.Controls.Add(Me.cbTankSystem) - Me.GroupBox9.Controls.Add(Me.Label23) - Me.GroupBox9.Location = New System.Drawing.Point(306, 7) - Me.GroupBox9.Name = "GroupBox9" - Me.GroupBox9.Size = New System.Drawing.Size(264, 63) - Me.GroupBox9.TabIndex = 5 - Me.GroupBox9.TabStop = false - Me.GroupBox9.Text = "Tank System" - ' - 'Label23 - ' - Me.Label23.AutoSize = true - Me.Label23.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte)) - Me.Label23.Location = New System.Drawing.Point(6, 16) - Me.Label23.Name = "Label23" - Me.Label23.Size = New System.Drawing.Size(187, 13) - Me.Label23.TabIndex = 0 - Me.Label23.Text = "Only applicable for NG engines!" - ' - 'cbTankSystem + 'cbAtEcoRollReleaseLockupClutch ' - Me.cbTankSystem.FormattingEnabled = true - Me.cbTankSystem.Location = New System.Drawing.Point(9, 33) - Me.cbTankSystem.Name = "cbTankSystem" - Me.cbTankSystem.Size = New System.Drawing.Size(247, 21) - Me.cbTankSystem.TabIndex = 1 + Me.cbAtEcoRollReleaseLockupClutch.AutoSize = true + Me.cbAtEcoRollReleaseLockupClutch.Location = New System.Drawing.Point(265, 19) + Me.cbAtEcoRollReleaseLockupClutch.Name = "cbAtEcoRollReleaseLockupClutch" + Me.cbAtEcoRollReleaseLockupClutch.Size = New System.Drawing.Size(243, 17) + Me.cbAtEcoRollReleaseLockupClutch.TabIndex = 9 + Me.cbAtEcoRollReleaseLockupClutch.Text = "AT Gearbox: Eco-Roll Release Lockup Clutch" + Me.cbAtEcoRollReleaseLockupClutch.UseVisualStyleBackColor = true ' 'VehicleForm ' @@ -1394,13 +1406,13 @@ Partial Class VehicleForm Me.Panel1.ResumeLayout(false) Me.Panel1.PerformLayout Me.TabPage2.ResumeLayout(false) + Me.GroupBox9.ResumeLayout(false) + Me.GroupBox9.PerformLayout Me.TabPage3.ResumeLayout(false) Me.TabPage3.PerformLayout Me.tpADAS.ResumeLayout(false) Me.GroupBox5.ResumeLayout(false) Me.GroupBox5.PerformLayout - Me.GroupBox9.ResumeLayout(false) - Me.GroupBox9.PerformLayout Me.ResumeLayout(false) Me.PerformLayout @@ -1528,4 +1540,5 @@ End Sub Friend WithEvents GroupBox9 As GroupBox Friend WithEvents cbTankSystem As ComboBox Friend WithEvents Label23 As Label + Friend WithEvents cbAtEcoRollReleaseLockupClutch As CheckBox End Class diff --git a/VECTO/GUI/VehicleForm.vb b/VECTO/GUI/VehicleForm.vb index 5196c87017264674d8d6d7423fbd0140fc7f3b1b..33208fce7ef48a41db1f2802becf2001f0b694c9 100644 --- a/VECTO/GUI/VehicleForm.vb +++ b/VECTO/GUI/VehicleForm.vb @@ -402,6 +402,8 @@ Public Class VehicleForm cbPcc.SelectedValue = vehicle.ADAS.PredictiveCruiseControl cbEcoRoll.SelectedValue = vehicle.ADAS.EcoRoll cbEngineStopStart.Checked = vehicle.ADAS.EngineStopStart + cbAtEcoRollReleaseLockupClutch.Checked = If(vehicle.ADAS.ATEcoRollReleaseLockupClutch , false) + if (vehicle.SavedInDeclarationMode) then Dim declVehicle as IVehicleDeclarationInputData = vehicle @@ -539,6 +541,7 @@ Public Class VehicleForm veh.EcoRollType = CType(cbEcoRoll.SelectedValue, EcoRollType) veh.PCC = CType(cbPcc.SelectedValue, PredictiveCruiseControlType) veh.EngineStop = cbEngineStopStart.Checked + veh.EcoRollReleaseLockupClutch = cbAtEcoRollReleaseLockupClutch.Checked veh.VehicleTankSystem = CType(If(cbTankSystem.SelectedIndex > 0, cbTankSystem.SelectedValue, nothing), TankSystem?) @@ -961,5 +964,9 @@ Public Class VehicleForm Private Sub tbVehIdlingSpeed_TextChanged(sender As Object, e As EventArgs) Handles tbVehIdlingSpeed.TextChanged End Sub + + Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles cbAtEcoRollReleaseLockupClutch.CheckedChanged + + End Sub End Class diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index d0b43249bf75938d808c67746b71bcdf0f5d549d..0c91759b4ca0095e239ce9bca3d4dfcd4c09e6b3 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -220,7 +220,7 @@ Public Class Gearbox End Try axlegearData = doa.CreateAxleGearData(gearbox) - gearboxData = doa.CreateGearboxData(gearbox, engine, axlegearData.AxleGear.Ratio, rdyn, vehiclecategory, gearbox) + gearboxData = doa.CreateGearboxData(gearbox, engine, axlegearData.AxleGear.Ratio, rdyn, vehiclecategory, gearbox, false) Else Dim doa As EngineeringDataAdapter = New EngineeringDataAdapter() Try @@ -230,7 +230,7 @@ Public Class Gearbox End Try axlegearData = doa.CreateAxleGearData(gearbox) - gearboxData = doa.CreateGearboxData(gearbox, engine, gearbox, axlegearData.AxleGear.Ratio, rdyn, vehiclecategory, gearbox) + gearboxData = doa.CreateGearboxData(gearbox, engine, gearbox, axlegearData.AxleGear.Ratio, rdyn, vehiclecategory, gearbox, false) End If Dim result As IList(Of ValidationResult) = diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index c872a4181b63836d77cb7312150092e8ed7602bd..3618c868a21d465d79622a3d27405056c721cdec 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -765,6 +765,12 @@ Public Class Vehicle End Get End Property + Public ReadOnly Property ATEcoRollReleaseLockupClutch As Boolean? Implements IAdvancedDriverAssistantSystemDeclarationInputData.ATEcoRollReleaseLockupClutch + get + Return EcoRollReleaseLockupClutch + End Get + End Property + Public ReadOnly Property IAdvancedDriverAssistantSystemsEngineering_DataSource As DataSource Implements IAdvancedDriverAssistantSystemsEngineering.DataSource get Return New DataSource() With {.SourceType = DataSourceType.JSONFile} @@ -778,5 +784,6 @@ Public Class Vehicle End Get End Property - + Public Property EcoRollReleaseLockupClutch As Boolean + End Class diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 710b0ad52f04af49ff10a3396662f4aca2b7949d..8041728e2f10f4ec02984ee1080d6b304111f7d1 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -204,6 +204,8 @@ namespace TUGraz.VectoCommon.InputData EcoRollType EcoRoll { get; } PredictiveCruiseControlType PredictiveCruiseControl { get; } + + bool? ATEcoRollReleaseLockupClutch { get; } } public enum PredictiveCruiseControlType diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index 4da2a5e537f85dc1fc3ca0a9ed98d0b1fbc232e5..5d4c2f66d0d9958ec0f54a694683437010d44649 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -216,6 +216,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return VehicleData.Height; } } + public bool? ATEcoRollReleaseLockupClutch { get { return VehicleData.ADAS.ATEcoRollReleaseLockupClutch; } } + IVehicleComponentsEngineering IVehicleEngineeringInputData.Components { get { return this; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index ac8292e9e5dffd1aaf1eb2f70d36844df42146f6..0575db66c9b84cd156b192b8281b18dc4b355da5 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -54,6 +54,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public override bool EngineStopStart { get { return Body.GetEx<bool>("EngineStopStart"); } } public override EcoRollType EcoRoll { get { return EcorollTypeHelper.Parse(Body.GetEx<string>("EcoRoll")); } } + public override bool? ATEcoRollReleaseLockupClutch { get { + return Body["ATEcoRollReleaseLockupClutch"]?.Value<bool>(); + } } public override PredictiveCruiseControlType PredictiveCruiseControl { get { @@ -161,6 +164,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return Body["VehicleHeight"] == null ? null : Body.GetEx<double>("VehicleHeight").SI<Meter>(); } } + public virtual bool? ATEcoRollReleaseLockupClutch + { + get { return null; } + } + IVehicleComponentsEngineering IVehicleEngineeringInputData.Components { get { return this; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs index d3079bbbe9b8fe31255af8608c9237b7467a9c4f..70de2322d2c841a72295ca5c0e8af8a89f36b404 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationADASDataProvider.cs @@ -55,6 +55,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return PredictiveCruiseControlTypeHelper.Parse(GetString(XMLNames.Vehicle_ADAS_PCC)); } } + public virtual bool? ATEcoRollReleaseLockupClutch { get { return null; } } + #endregion } @@ -81,4 +83,43 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + public class XMLDeclarationADASDataProviderV23 : XMLDeclarationADASDataProviderV21 + { + /* + * new field added in version 2.3 + */ + + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V23; + + public new const string XSD_TYPE = "AdvancedDriverAssistantSystemsType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationADASDataProviderV23(IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) + : base(vehicle, componentNode, sourceFile) { } + + #region Overrides of XMLDeclarationADASDataProviderV10 + + public override bool? ATEcoRollReleaseLockupClutch + { + get { + var node = GetNode("ATEcoRollReleaseLockupClutch", required:false); + if (node == null) { + return null; + } + + return XmlConvert.ToBoolean(node.InnerText); + } + } + + #endregion + + protected override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 6db977c721951a882b9e3bc74d7553f69f85a625..7f73ef6bf60001340588a681bce5587cd0b182f5 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -375,6 +375,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return PredictiveCruiseControlType.None; } } + public bool? ATEcoRollReleaseLockupClutch { get { return null; } } + #endregion } } @@ -555,4 +557,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion } + + } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV23InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV23InjectModule.cs index d2aff2bbb38eaf8f1eb452ba1cda38e0e4be490b..95434a01e8ad30d707c32a58c43954c7ea47556b 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV23InjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV23InjectModule.cs @@ -12,6 +12,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules { Bind<IXMLEngineDeclarationInputData>().To<XMLDeclarationEngineDataProviderV23>() .Named(XMLDeclarationEngineDataProviderV23.QUALIFIED_XSD_TYPE); + + Bind<IXMLAdvancedDriverAssistantSystemDeclarationInputData>() + .To<XMLDeclarationADASDataProviderV23>().Named(XMLDeclarationADASDataProviderV23.QUALIFIED_XSD_TYPE); } #endregion diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLADASReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLADASReader.cs index 84ae862987a8ea976649f75256bb572a7bb047f1..2f5a869ca66256e7fe3c9825805845839ce9e528 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLADASReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLADASReader.cs @@ -97,4 +97,24 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl get { return NAMESPACE_URI; } } } + + // --------------------------------------------------------------------------------------- + + public class XMLADASReaderV23 : XMLADASReaderV10 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V23; + + public new const string XSD_TYPE = "AdvancedDriverAssistantSystemsType"; + + public new static readonly string QUALIFIED_XSD_TYPE = XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLADASReaderV23(IXMLDeclarationVehicleData vehicle, XmlNode vehicleNode) : base( + vehicle, vehicleNode) + { } + + public override XNamespace SchemaNamespace + { + get { return NAMESPACE_URI; } + } + } } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index 77ef483d51bd6189f9e7b031a9b7c23a66c9bf33..9a7a61def09fd62b82e45a640e1123f7f6c071f7 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -305,13 +305,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter internal GearboxData CreateGearboxData( IGearboxDeclarationInputData gearbox, CombustionEngineData engine, double axlegearRatio, Meter dynamicTyreRadius, - VehicleCategory vehicleCategory, ITorqueConverterDeclarationInputData torqueConverter) + VehicleCategory vehicleCategory, ITorqueConverterDeclarationInputData torqueConverter, bool? atEcoRollReleaseLockupClutch) { if (!gearbox.SavedInDeclarationMode) { WarnDeclarationMode("GearboxData"); } var retVal = SetCommonGearboxData(gearbox); + if (retVal.Type.AutomaticTransmission() && !atEcoRollReleaseLockupClutch.HasValue) { + throw new VectoException("Input parameter ATEcoRollReleaseLockupClutch required for AT transmission"); + } + retVal.ATEcoRollReleaseLockupClutch = retVal.Type.AutomaticTransmission() ? atEcoRollReleaseLockupClutch.Value : false; + if (!SupportedGearboxTypes.Contains(gearbox.Type)) { throw new VectoSimulationException("Unsupported gearbox type: {0}!", retVal.Type); } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index 25073f7b3d5b632b49603fdad754a46164120a9a..4e6c2c62789a316f94b41e9986c820f753dc165c 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -260,7 +260,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter internal GearboxData CreateGearboxData( IGearboxEngineeringInputData gearbox, CombustionEngineData engineData, IGearshiftEngineeringInputData gearshiftData, double axlegearRatio, Meter dynamicTyreRadius, VehicleCategory vehicleCategory, - ITorqueConverterEngineeringInputData torqueConverter) + ITorqueConverterEngineeringInputData torqueConverter, bool? atEcoRollReleaseLockupClutch) { if (gearbox.SavedInDeclarationMode) { WarnEngineeringMode("GearboxData"); @@ -268,6 +268,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter var retVal = SetCommonGearboxData(gearbox); + if (retVal.Type.AutomaticTransmission() && !atEcoRollReleaseLockupClutch.HasValue) { + throw new VectoException("Parameter ATEcoRollReleaseLockupClutch required for AT gearbox"); + } + retVal.ATEcoRollReleaseLockupClutch = retVal.Type.AutomaticTransmission() ? atEcoRollReleaseLockupClutch.Value : false; + //var gears = gearbox.Gears; if (gearbox.Gears.Count < 2) { throw new VectoSimulationException("At least two Gear-Entries must be defined in Gearbox!"); diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs index 53961372ca9a51b5ef4a7d2cf536449a6c57cb56..6947f9f96c48567e54e67bb6d5943fc55a327b09 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs @@ -114,7 +114,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl vehicle, vehicle.Components.EngineInputData.EngineModes[0], _segment.Missions.First()); _gearboxData = _dao.CreateGearboxData(vehicle.Components.GearboxInputData, tmpEngine, _axlegearData.AxleGear.Ratio, - tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, vehicle.Components.TorqueConverterInputData); + tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, vehicle.Components.TorqueConverterInputData, vehicle.ADAS.ATEcoRollReleaseLockupClutch); _retarderData = _dao.CreateRetarderData(vehicle.Components.RetarderInputData); _ptoTransmissionData = _dao.CreatePTOTransmissionData(vehicle.Components.PTOTransmissionInputData); diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs index 89be51f0dac1d41d5537933c45a50c7c5f498500..1bbff88a8ad6cce0533379e7e01f418a187c13a3 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationVTPModeVectoRunDataFactory.cs @@ -135,7 +135,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl GearboxData = Dao.CreateGearboxData( vehicle.Components.GearboxInputData, EngineData, AxlegearData.AxleGear.Ratio, - tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, vehicle.Components.TorqueConverterInputData); + tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, vehicle.Components.TorqueConverterInputData, vehicle.ADAS.ATEcoRollReleaseLockupClutch); RetarderData = Dao.CreateRetarderData(vehicle.Components.RetarderInputData); PTOTransmissionData = diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs index aeb35bc788d812352b2f454577b50966f6d1fb35..0379148b0a80cc5fa456c222b963afb057ee59f7 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/EngineeringModeVectoRunDataFactory.cs @@ -77,7 +77,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl var gearboxData = dao.CreateGearboxData( vehicle.Components.GearboxInputData, engineData, InputDataProvider.DriverInputData.GearshiftInputData, axlegearData.AxleGear.Ratio, tempVehicle.DynamicTyreRadius, tempVehicle.VehicleCategory, - vehicle.Components.TorqueConverterInputData); + vehicle.Components.TorqueConverterInputData, vehicle.ADAS.ATEcoRollReleaseLockupClutch); var crossWindRequired = vehicle.Components.AirdragInputData.CrossWindCorrectionMode == CrossWindCorrectionMode.VAirBetaLookupTable; var angledriveData = dao.CreateAngledriveData(vehicle.Components.AngledriveInputData); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs index 1adc388915c79f2882e7b55c430b6f266209a7f3..8dc4a7f849d42ff6f423e7361241419928fec1d3 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs @@ -29,108 +29,111 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Diagnostics; -using System.Linq; -using System.Runtime.Serialization; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; - -namespace TUGraz.VectoCore.Models.SimulationComponent.Data -{ - /// <summary> - /// Class for Gearbox Data. Gears can be accessed via Gears-Dictionary and range from 1 upwards. - /// </summary> - /// <remarks>The Axle Gear has its own Property "AxleGearData" and is *not included* in the Gears-Dictionary.</remarks> - [DataContract, CustomValidation(typeof(GearboxData), "ValidateGearboxData")] - [DebuggerDisplay("GearboxData({Type}, #Gears: {Gears.Count}, ...)")] - public class GearboxData : SimulationComponentData - { - public GearboxType Type { get; internal set; } - - [Required, ValidateObject] public Dictionary<uint, GearData> Gears = new Dictionary<uint, GearData>(); - - public TorqueConverterData TorqueConverterData { get; internal set; } - - [Required, SIRange(0, 10)] - public KilogramSquareMeter Inertia { get; internal set; } - - [Required, SIRange(0, 5)] - public Second TractionInterruption { get; internal set; } - - /// <summary> - /// [%] (0-1) The torque reserve for shift strategy (early upshift, skipgears) - /// </summary> - [Required, Range(0, 0.5)] - public double TorqueReserve { get; internal set; } - - /// <summary> - /// Gets the minimum time between shifts. - /// </summary> - [Required, SIRange(0, 5)] - public Second ShiftTime { get; internal set; } - - /// <summary> - /// [%] (0-1) The starting torque reserve for finding the starting gear after standstill. - /// </summary> - [Required, Range(0, 0.5)] - public double StartTorqueReserve { get; internal set; } - - // MQ: TODO: move to Driver Data ? - [Required, SIRange(double.Epsilon, 5)] - public MeterPerSecond StartSpeed { get; internal set; } - - // MQ: TODO: move to Driver Data ? - [Required, SIRange(double.Epsilon, 2)] - public MeterPerSquareSecond StartAcceleration { get; internal set; } - - [Required, SIRange(0, double.MaxValue)] - public Second UpshiftAfterDownshiftDelay { get; internal set; } - - [Required, SIRange(0, double.MaxValue)] - public Second DownshiftAfterUpshiftDelay { get; internal set; } - - [Required, SIRange(0, double.MaxValue)] - public MeterPerSquareSecond UpshiftMinAcceleration { get; internal set; } - - [SIRange(0.5, 1)] - public Second PowershiftShiftTime { get; internal set; } - - // ReSharper disable once UnusedMember.Global -- used via Validation - public static ValidationResult ValidateGearboxData(GearboxData gearboxData, ValidationContext validationContext) - { - var mode = GetExecutionMode(validationContext); - //var gbxType = GetGearboxType(validationContext); - var emsMission = GetEmsMode(validationContext); - - var result = new List<ValidationResult>(); - - if (gearboxData.Gears.Any(g => g.Value.HasTorqueConverter)) { - if (!gearboxData.Type.AutomaticTransmission()) { - return new ValidationResult("Torque Converter can only be used with AT gearbox model"); - } - } else { - if (gearboxData.Type.AutomaticTransmission()) { - return new ValidationResult("AT gearbox model requires torque converter"); - } - } - if (gearboxData.Type.AutomaticTransmission()) { - gearboxData.TorqueConverterData.RequiredSpeedRatio = - Math.Round(gearboxData.Gears[1].TorqueConverterRatio / gearboxData.Gears[1].Ratio, 4) * 0.95; - result.AddRange(gearboxData.TorqueConverterData.Validate(mode, gearboxData.Type, emsMission)); - //result.AddRange(gearboxData.PowershiftShiftTime.Validate(mode, gearboxData.Type)); - //result.AddRange(gearboxData.PowershiftInertiaFactor.Validate(mode, gearboxData.Type)); - validationContext.MemberName = "PowershiftShiftTime"; - Validator.TryValidateProperty(gearboxData.PowershiftShiftTime, validationContext, result); - } - - if (result.Any()) { - return new ValidationResult("Validation of Gearbox Data failed", result.Select(x => x.ErrorMessage)); - } - return ValidationResult.Success; - } - } +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Diagnostics; +using System.Linq; +using System.Runtime.Serialization; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; + +namespace TUGraz.VectoCore.Models.SimulationComponent.Data +{ + /// <summary> + /// Class for Gearbox Data. Gears can be accessed via Gears-Dictionary and range from 1 upwards. + /// </summary> + /// <remarks>The Axle Gear has its own Property "AxleGearData" and is *not included* in the Gears-Dictionary.</remarks> + [DataContract, CustomValidation(typeof(GearboxData), "ValidateGearboxData")] + [DebuggerDisplay("GearboxData({Type}, #Gears: {Gears.Count}, ...)")] + public class GearboxData : SimulationComponentData + { + public GearboxType Type { get; internal set; } + + [Required, ValidateObject] public Dictionary<uint, GearData> Gears = new Dictionary<uint, GearData>(); + + public TorqueConverterData TorqueConverterData { get; internal set; } + + [Required, SIRange(0, 10)] + public KilogramSquareMeter Inertia { get; internal set; } + + [Required, SIRange(0, 5)] + public Second TractionInterruption { get; internal set; } + + /// <summary> + /// [%] (0-1) The torque reserve for shift strategy (early upshift, skipgears) + /// </summary> + [Required, Range(0, 0.5)] + public double TorqueReserve { get; internal set; } + + /// <summary> + /// Gets the minimum time between shifts. + /// </summary> + [Required, SIRange(0, 5)] + public Second ShiftTime { get; internal set; } + + /// <summary> + /// [%] (0-1) The starting torque reserve for finding the starting gear after standstill. + /// </summary> + [Required, Range(0, 0.5)] + public double StartTorqueReserve { get; internal set; } + + // MQ: TODO: move to Driver Data ? + [Required, SIRange(double.Epsilon, 5)] + public MeterPerSecond StartSpeed { get; internal set; } + + // MQ: TODO: move to Driver Data ? + [Required, SIRange(double.Epsilon, 2)] + public MeterPerSquareSecond StartAcceleration { get; internal set; } + + [Required, SIRange(0, double.MaxValue)] + public Second UpshiftAfterDownshiftDelay { get; internal set; } + + [Required, SIRange(0, double.MaxValue)] + public Second DownshiftAfterUpshiftDelay { get; internal set; } + + [Required, SIRange(0, double.MaxValue)] + public MeterPerSquareSecond UpshiftMinAcceleration { get; internal set; } + + [SIRange(0.5, 1)] + public Second PowershiftShiftTime { get; internal set; } + + public bool ATEcoRollReleaseLockupClutch { get; internal set; } + + + // ReSharper disable once UnusedMember.Global -- used via Validation + public static ValidationResult ValidateGearboxData(GearboxData gearboxData, ValidationContext validationContext) + { + var mode = GetExecutionMode(validationContext); + //var gbxType = GetGearboxType(validationContext); + var emsMission = GetEmsMode(validationContext); + + var result = new List<ValidationResult>(); + + if (gearboxData.Gears.Any(g => g.Value.HasTorqueConverter)) { + if (!gearboxData.Type.AutomaticTransmission()) { + return new ValidationResult("Torque Converter can only be used with AT gearbox model"); + } + } else { + if (gearboxData.Type.AutomaticTransmission()) { + return new ValidationResult("AT gearbox model requires torque converter"); + } + } + if (gearboxData.Type.AutomaticTransmission()) { + gearboxData.TorqueConverterData.RequiredSpeedRatio = + Math.Round(gearboxData.Gears[1].TorqueConverterRatio / gearboxData.Gears[1].Ratio, 4) * 0.95; + result.AddRange(gearboxData.TorqueConverterData.Validate(mode, gearboxData.Type, emsMission)); + //result.AddRange(gearboxData.PowershiftShiftTime.Validate(mode, gearboxData.Type)); + //result.AddRange(gearboxData.PowershiftInertiaFactor.Validate(mode, gearboxData.Type)); + validationContext.MemberName = "PowershiftShiftTime"; + Validator.TryValidateProperty(gearboxData.PowershiftShiftTime, validationContext, result); + } + + if (result.Any()) { + return new ValidationResult("Validation of Gearbox Data failed", result.Select(x => x.ErrorMessage)); + } + return ValidationResult.Success; + } + } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs b/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs index 46d0de9ca12d48eb7fbc35dd57584a1093debd94..e6a4d50aac37d52e4d80cdd80fc4814d35348a99 100644 --- a/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs +++ b/VectoCore/VectoCoreTest/FileIO/JsonReadTest.cs @@ -174,7 +174,7 @@ namespace TUGraz.VectoCore.Tests.FileIO var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), (IGearshiftEngineeringInputData)inputProvider, 2.1, - 0.5.SI<Meter>(), VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)inputProvider); + 0.5.SI<Meter>(), VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)inputProvider, false); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); // interpreted as gearbox with first and second gear using TC (due to gear ratios) @@ -199,7 +199,7 @@ namespace TUGraz.VectoCore.Tests.FileIO var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), (IGearshiftEngineeringInputData)inputProvider, 2.1, - 0.5.SI<Meter>(), VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)inputProvider); + 0.5.SI<Meter>(), VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)inputProvider, false); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); Assert.IsTrue(gbxData.Gears[1].HasLockedGear); @@ -226,7 +226,7 @@ namespace TUGraz.VectoCore.Tests.FileIO var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), (IGearshiftEngineeringInputData)inputProvider, 2.1, - 0.5.SI<Meter>(), VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)inputProvider); + 0.5.SI<Meter>(), VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)inputProvider, false); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); Assert.IsTrue(gbxData.Gears[1].HasLockedGear); @@ -252,7 +252,7 @@ namespace TUGraz.VectoCore.Tests.FileIO var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), (IGearshiftEngineeringInputData)inputProvider, 2.1, - 0.5.SI<Meter>(), VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)inputProvider); + 0.5.SI<Meter>(), VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)inputProvider,false); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); Assert.IsFalse(gbxData.Gears[1].HasLockedGear); @@ -280,7 +280,7 @@ namespace TUGraz.VectoCore.Tests.FileIO var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), (IGearshiftEngineeringInputData)inputProvider, 2.1, - 0.5.SI<Meter>(), VehicleCategory.InterurbanBus, (ITorqueConverterEngineeringInputData)inputProvider); + 0.5.SI<Meter>(), VehicleCategory.InterurbanBus, (ITorqueConverterEngineeringInputData)inputProvider,false); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); Assert.IsTrue(gbxData.Gears[1].HasLockedGear); @@ -308,7 +308,7 @@ namespace TUGraz.VectoCore.Tests.FileIO var gbxData = new EngineeringDataAdapter().CreateGearboxData(inputProvider, MockSimulationDataFactory.CreateEngineDataFromFile(@"TestData\Components\AT_GBX\Engine.veng", 0), (IGearshiftEngineeringInputData)inputProvider, 2.1, - 0.5.SI<Meter>(), VehicleCategory.InterurbanBus, (ITorqueConverterEngineeringInputData)inputProvider); + 0.5.SI<Meter>(), VehicleCategory.InterurbanBus, (ITorqueConverterEngineeringInputData)inputProvider, false); Assert.AreEqual(ratios.Length, gbxData.Gears.Count); Assert.IsFalse(gbxData.Gears[1].HasLockedGear); diff --git a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs index 72f668e951174c342194f2255c814afca0ce24e6..646cf77d37fee517d4155f6aa8893583c485afea 100644 --- a/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs +++ b/VectoCore/VectoCoreTest/Utils/MockSimulationDataFactory.cs @@ -67,7 +67,7 @@ namespace TUGraz.VectoCore.Tests.Utils }; var engineData = dao.CreateEngineData(vehicleInput, engineInput.EngineModes.First(), mission);//(engineInput, null, gearboxInput, new List<ITorqueLimitInputData>()); return dao.CreateGearboxData(gearboxInput, engineData, ((IAxleGearInputData)gearboxInput).Ratio, 0.5.SI<Meter>(), - VehicleCategory.RigidTruck, (ITorqueConverterDeclarationInputData)gearboxInput); + VehicleCategory.RigidTruck, (ITorqueConverterDeclarationInputData)gearboxInput, false); } else { var dao = new EngineeringDataAdapter(); var runData = new MockEngineeringVehicleInputData() { @@ -78,7 +78,7 @@ namespace TUGraz.VectoCore.Tests.Utils var engineData = dao.CreateEngineData(runData, engineInput.EngineModes.First()); return dao.CreateGearboxData(gearboxInput, engineData, (IGearshiftEngineeringInputData)gearboxInput, ((IAxleGearInputData)gearboxInput).Ratio, 0.5.SI<Meter>(), - VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)gearboxInput); + VehicleCategory.RigidTruck, (ITorqueConverterEngineeringInputData)gearboxInput, false); } }