diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 6f4bdfbba8c..8f7a725c382 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -49,6 +49,7 @@ 1. [FMGC] Fix unnatural turn direction for path capture transition - @tracernz (Mike) 1. [FMGC] Fix unnatural turn direction for course capture transition - @tracernz (Mike) 1. [FMGC] Update spoiler CD for MSFS SDK clarification - @donstim (donbikes#4084) +1. [HYD] Actuators damping chambers can be asymetrical - @Crocket63 (crocket) 1. [FMGC] Implement procedure turns (PI leg) - @tracernz (Mike) 1. [ECAM] Move EWD to correct AC bus - @tracernz (Mike) 1. [FMGC] Fix inbound leg time for holds - @tracernz (Mike) @@ -56,6 +57,7 @@ 1. [MODEL] Added new animated gear gravity extension handle- @tyler58546 (tyler58546), @MoreRightRudder (Mike), @Crocket63 (crocket), @Lantarius 1. [MCDU] Hide stored elements on A/C Status when there are none - @tracernz (Mike) 1. [FMGC] Fix ident for CD legs - @tracernz (Mike) +1. [RMP] Fixed the behavior of the RMPs and ACPs (VHFs only) - Julian Sebline (Julian Sebline#8476 on Discord) ## 0.8.0 @@ -306,6 +308,7 @@ 1. [ATSU] Add FANS-C simulation for CPDLC - @Sven [de en] - (Sven Czarnian) 1. [ATSU] Add VDL3-simulation of datalink transport protocol - @Sven [de en] - (Sven Czarnian) 1. [FMGC] Improve robustness of ILS auto-tuning - @tracernz (Mike) +1. [OVHD] Fixed fire push button not being able to be stowed - Julian Sebline (Julian Sebline#8476 on Discord) ## 0.7.0 diff --git a/flybywire-aircraft-a320-neo/ModelBehaviorDefs/A32NX/AirlinerCommon.xml b/flybywire-aircraft-a320-neo/ModelBehaviorDefs/A32NX/AirlinerCommon.xml index 32cd2d4f678..8f363542e08 100644 --- a/flybywire-aircraft-a320-neo/ModelBehaviorDefs/A32NX/AirlinerCommon.xml +++ b/flybywire-aircraft-a320-neo/ModelBehaviorDefs/A32NX/AirlinerCommon.xml @@ -352,9 +352,7 @@ #NODE_ID_BUTTON_SEQ1_VHF_L# #NODE_ID_BUTTON_SEQ2_VHF_L# VHF_L - 1 - 1 - 1 + 0 TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_L_VOLUME_DEC TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_L_VOLUME_INC TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_L_AUDIO_TOGGLE @@ -374,9 +372,7 @@ #NODE_ID_BUTTON_SEQ1_VHF_C# #NODE_ID_BUTTON_SEQ2_VHF_C# VHF_C - 2 - 2 - 2 + 1 TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_C_VOLUME_DEC TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_C_VOLUME_INC TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_C_AUDIO_TOGGLE @@ -396,9 +392,7 @@ #NODE_ID_BUTTON_SEQ1_VHF_R# #NODE_ID_BUTTON_SEQ2_VHF_R# VHF_R - 3 - 3 - 3 + 2 TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_R_VOLUME_DEC TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_R_VOLUME_INC TT:COCKPIT.TOOLTIPS.TRANSMITTER_VHF_R_AUDIO_TOGGLE @@ -691,22 +685,6 @@ } - - - - 3 - - - - - (A:COM TRANSMIT:#Radio_ID#, Bool) if{ - - } - - - - - @@ -715,26 +693,45 @@ #ANIM_NAME_BUTTON# #NODE_ID_BUTTON_SEQ1# #NODE_ID_BUTTON_SEQ2# - + + #SEQ1_POWERED# if{ - (A:COM TRANSMIT:#Radio_ID#, Bool) ! (>K:COM#Radio_ID#_TRANSMIT_SELECT) - #Button_ID# (L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) == if{ - 0 (>L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) + let valueCopilot=(L:XMLVAR_COM_PANEL2_Transmit_Channel); + + #TRANSMIT_ID# (L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) == if{ + 4 (>L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) } els{ - #Button_ID# (>L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) + #TRANSMIT_ID# (>L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) + } + + #ID# 1 == if{ + (A:PILOT TRANSMITTER TYPE, Enum) #TRANSMIT_ID# == if{ + 4 (>K:PILOT_TRANSMITTER_SET) + } els{ + #TRANSMIT_ID# (>K:PILOT_TRANSMITTER_SET) + } + valueCopilot (>K:COPILOT_TRANSMITTER_SET) + } els{ + (A:COPILOT TRANSMITTER TYPE, Enum) #TRANSMIT_ID# == if{ + 4 (>K:COPILOT_TRANSMITTER_SET) + } els{ + #TRANSMIT_ID# (>K:COPILOT_TRANSMITTER_SET) + } } } #SEQ1_POWERED# if{ - #Button_ID# (L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) == (L:A32NX_OVHD_INTLT_ANN) 0 == or #EMISSIVE_DIM# * + #TRANSMIT_ID# (L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) == (L:A32NX_OVHD_INTLT_ANN) 0 == or #EMISSIVE_DIM# * } #SEQ1_POWERED# if{ - #Button_ID# (L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) == (L:A32NX_OVHD_INTLT_ANN) 0 == or #EMISSIVE_DIM# * + #TRANSMIT_ID# (L:XMLVAR_COM_PANEL#ID#_Transmit_Channel) == (L:A32NX_OVHD_INTLT_ANN) 0 == or #EMISSIVE_DIM# * } fcubutton @@ -776,13 +773,7 @@ (L:XMLVAR_COM_#ID#_Volume_#FREQ_ID#) #VOLUME_INCREMENT# - 0 max (>L:XMLVAR_COM_#ID#_Volume_#FREQ_ID#) } - - - - - - - + (L:XMLVAR_COM_#ID#_#FREQ_ID#_Switch_Down) 100 * #ANIM_NAME_SWITCH# #SEQ1_POWERED# if{ diff --git a/flybywire-aircraft-a320-neo/SimObjects/AirPlanes/FlyByWire_A320_NEO/model/A320_NEO_INTERIOR.xml b/flybywire-aircraft-a320-neo/SimObjects/AirPlanes/FlyByWire_A320_NEO/model/A320_NEO_INTERIOR.xml index 86f6b10d518..cfdee41221b 100644 --- a/flybywire-aircraft-a320-neo/SimObjects/AirPlanes/FlyByWire_A320_NEO/model/A320_NEO_INTERIOR.xml +++ b/flybywire-aircraft-a320-neo/SimObjects/AirPlanes/FlyByWire_A320_NEO/model/A320_NEO_INTERIOR.xml @@ -4061,13 +4061,11 @@ - 1 (>L:XMLVAR_COM_PANEL1_Transmit_Channel) - 1 (>L:XMLVAR_COM_PANEL2_Transmit_Channel) + 0 (>L:XMLVAR_COM_PANEL1_Transmit_Channel) + 0 (>K:PILOT_TRANSMITTER_SET) 1 (>L:XMLVAR_COM_1_VHF_L_Switch_Down) 1 (>L:XMLVAR_COM_1_VHF_C_Switch_Down) - 1 (>L:XMLVAR_COM_2_VHF_L_Switch_Down) - 1 (>L:XMLVAR_COM_2_VHF_C_Switch_Down) 1 (>K:COM1_RECEIVE_SELECT) 1 (>K:COM2_RECEIVE_SELECT) @@ -4075,8 +4073,8 @@ 0.8 (>L:XMLVAR_COM_1_Volume_VHF_L) 0.4 (>L:XMLVAR_COM_1_Volume_VHF_C) - 0.8 (>L:XMLVAR_COM_2_Volume_VHF_L) - 0.4 (>L:XMLVAR_COM_2_Volume_VHF_C) + 0 (>L:XMLVAR_COM_1_Volume_VHF_R) + 0 (>K:COM3_VOLUME_SET) 1 @@ -4224,6 +4222,17 @@ + + 0 (>L:XMLVAR_COM_PANEL2_Transmit_Channel) + 0 (>K:COPILOT_TRANSMITTER_SET) + + 1 (>L:XMLVAR_COM_2_VHF_L_Switch_Down) + 1 (>L:XMLVAR_COM_2_VHF_C_Switch_Down) + + 0.8 (>L:XMLVAR_COM_2_Volume_VHF_L) + 0.4 (>L:XMLVAR_COM_2_Volume_VHF_C) + 0 (>L:XMLVAR_COM_2_Volume_VHF_R) + 2 R diff --git a/src/systems/a320_systems/src/hydraulic/mod.rs b/src/systems/a320_systems/src/hydraulic/mod.rs index dbab98bed60..88b0dccd438 100644 --- a/src/systems/a320_systems/src/hydraulic/mod.rs +++ b/src/systems/a320_systems/src/hydraulic/mod.rs @@ -220,6 +220,7 @@ impl A320CargoDoorFactory { 1000000., Duration::from_millis(100), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], Self::FLOW_CONTROL_PROPORTIONAL_GAIN, Self::FLOW_CONTROL_INTEGRAL_GAIN, @@ -314,6 +315,7 @@ impl A320AileronFactory { randomized_damping, Duration::from_millis(300), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], Self::FLOW_CONTROL_PROPORTIONAL_GAIN, Self::FLOW_CONTROL_INTEGRAL_GAIN, @@ -426,6 +428,7 @@ impl A320SpoilerFactory { randomized_damping, Duration::from_millis(300), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], Self::FLOW_CONTROL_PROPORTIONAL_GAIN, Self::FLOW_CONTROL_INTEGRAL_GAIN, @@ -535,6 +538,7 @@ impl A320ElevatorFactory { randomized_damping, Duration::from_millis(300), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], Self::FLOW_CONTROL_PROPORTIONAL_GAIN, Self::FLOW_CONTROL_INTEGRAL_GAIN, @@ -632,6 +636,7 @@ impl A320RudderFactory { randomized_damping, Duration::from_millis(300), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], Self::FLOW_CONTROL_PROPORTIONAL_GAIN, Self::FLOW_CONTROL_INTEGRAL_GAIN, @@ -731,7 +736,8 @@ impl A320GearDoorFactory { 2000., 28000., Duration::from_millis(100), - [0.5, 0.5, 1., 1., 0.5, 0.5], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], [0., 0.15, 0.16, 0.84, 0.85, 1.], FLOW_CONTROL_PROPORTIONAL_GAIN, FLOW_CONTROL_INTEGRAL_GAIN, @@ -753,13 +759,14 @@ impl A320GearDoorFactory { Length::new::(0.055), Length::new::(0.03), VolumeRate::new::(0.09), - 20000., - 5000., + 200000., + 2500., 2000., 9000., Duration::from_millis(100), - [0.5, 0.5, 1., 1., 0.5, 0.5], - [0., 0.15, 0.16, 0.84, 0.85, 1.], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], + [0., 0.09, 0.1, 0.9, 0.91, 1.], FLOW_CONTROL_PROPORTIONAL_GAIN, FLOW_CONTROL_INTEGRAL_GAIN, FLOW_CONTROL_FORCE_GAIN, @@ -871,7 +878,8 @@ impl A320GearFactory { 50000., 1000000., Duration::from_millis(100), - [0.5, 0.5, 1., 1., 0.5, 0.5], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], [0., 0.1, 0.11, 0.89, 0.9, 1.], FLOW_CONTROL_PROPORTIONAL_GAIN, FLOW_CONTROL_INTEGRAL_GAIN, @@ -896,8 +904,9 @@ impl A320GearFactory { 50000., 2500000., Duration::from_millis(100), - [0.5, 0.5, 1., 1., 0.5, 0.5], - [0., 0.1, 0.11, 0.89, 0.9, 1.], + [1., 1., 1., 1., 0.5, 0.5], + [0.2, 0.4, 1., 1., 1., 1.], + [0., 0.13, 0.17, 0.95, 0.96, 1.], FLOW_CONTROL_PROPORTIONAL_GAIN, FLOW_CONTROL_INTEGRAL_GAIN, FLOW_CONTROL_FORCE_GAIN, @@ -10596,14 +10605,14 @@ mod tests { test_bed = test_bed .stow_emergency_gear_extension() - .run_waiting_for(Duration::from_secs_f64(10.)); + .run_waiting_for(Duration::from_secs_f64(5.)); - // // After 10 seconds we expect gear being retracted and doors still down + // After 5 seconds we expect gear being retracted and doors still down assert!(test_bed.gear_system_state() == GearSystemState::Retracting); assert!(test_bed.is_all_doors_really_down()); assert!(!test_bed.is_all_gears_really_down()); - test_bed = test_bed.run_waiting_for(Duration::from_secs_f64(10.)); + test_bed = test_bed.run_waiting_for(Duration::from_secs_f64(15.)); assert!(test_bed.gear_system_state() == GearSystemState::AllUpLocked); assert!(test_bed.is_all_doors_really_up()); diff --git a/src/systems/systems/src/hydraulic/landing_gear.rs b/src/systems/systems/src/hydraulic/landing_gear.rs index cf466b46429..71a1407a692 100644 --- a/src/systems/systems/src/hydraulic/landing_gear.rs +++ b/src/systems/systems/src/hydraulic/landing_gear.rs @@ -1432,14 +1432,15 @@ mod tests { 1, Length::new::(0.055), Length::new::(0.03), - VolumeRate::new::(0.08), + VolumeRate::new::(0.09), 20000., 5000., 2000., - 28000., + 9000., Duration::from_millis(100), - [0.5, 1., 1., 1., 1., 0.5], - [0., 0.2, 0.21, 0.79, 0.8, 1.], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], + [0., 0.15, 0.16, 0.84, 0.85, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, DEFAULT_FORCE_GAIN, @@ -1487,14 +1488,15 @@ mod tests { 1, Length::new::(0.145), Length::new::(0.105), - VolumeRate::new::(0.15), + VolumeRate::new::(0.17), 800000., 15000., 50000., 1200000., Duration::from_millis(100), - [1., 1., 1., 1., 1., 1.], - [0., 0.2, 0.21, 0.79, 0.8, 1.], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], + [0., 0.1, 0.11, 0.89, 0.9, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, DEFAULT_FORCE_GAIN, diff --git a/src/systems/systems/src/hydraulic/linear_actuator.rs b/src/systems/systems/src/hydraulic/linear_actuator.rs index 5df096316ba..0da9e32cbb2 100644 --- a/src/systems/systems/src/hydraulic/linear_actuator.rs +++ b/src/systems/systems/src/hydraulic/linear_actuator.rs @@ -79,7 +79,8 @@ struct CoreHydraulicForce { fluid_compression_spring_constant: f64, fluid_compression_damping_constant: f64, - flow_open_loop_modifier_map: [f64; 6], + flow_open_loop_modifier_extension_map: [f64; 6], + flow_open_loop_modifier_retraction_map: [f64; 6], flow_open_loop_position_breakpoints: [f64; 6], max_flow: VolumeRate, @@ -123,7 +124,8 @@ impl CoreHydraulicForce { min_flow: VolumeRate, bore_side_area: Area, rod_side_area: Area, - flow_open_loop_modifier_map: [f64; 6], + flow_open_loop_modifier_extension_map: [f64; 6], + flow_open_loop_modifier_retraction_map: [f64; 6], flow_open_loop_position_breakpoints: [f64; 6], flow_control_proportional_gain: f64, flow_control_integral_gain: f64, @@ -141,7 +143,8 @@ impl CoreHydraulicForce { fluid_compression_spring_constant, fluid_compression_damping_constant, - flow_open_loop_modifier_map, + flow_open_loop_modifier_extension_map, + flow_open_loop_modifier_retraction_map, flow_open_loop_position_breakpoints, max_flow, @@ -401,11 +404,19 @@ impl CoreHydraulicForce { ) }; - let open_loop_modifier_from_position = interpolation( - &self.flow_open_loop_position_breakpoints, - &self.flow_open_loop_modifier_map, - position_normalized.get::(), - ); + let open_loop_modifier_from_position = if position_error.get::() > 0. { + interpolation( + &self.flow_open_loop_position_breakpoints, + &self.flow_open_loop_modifier_extension_map, + position_normalized.get::(), + ) + } else { + interpolation( + &self.flow_open_loop_position_breakpoints, + &self.flow_open_loop_modifier_retraction_map, + position_normalized.get::(), + ) + }; (open_loop_flow_target.min(self.max_flow).max(self.min_flow)) * open_loop_modifier_from_position @@ -531,7 +542,8 @@ impl LinearActuator { active_hydraulic_damping_constant: f64, slow_hydraulic_damping_constant: f64, slow_hydraulic_damping_filtering_constant: Duration, - flow_open_loop_modifier_map: [f64; 6], + flow_open_loop_modifier_extension_map: [f64; 6], + flow_open_loop_modifier_retraction_map: [f64; 6], flow_open_loop_position_breakpoints: [f64; 6], flow_control_proportional_gain: f64, flow_control_integral_gain: f64, @@ -615,7 +627,8 @@ impl LinearActuator { actual_min_flow, total_bore_side_area, total_rod_side_area, - flow_open_loop_modifier_map, + flow_open_loop_modifier_extension_map, + flow_open_loop_modifier_retraction_map, flow_open_loop_position_breakpoints, flow_control_proportional_gain, flow_control_integral_gain, @@ -2630,6 +2643,7 @@ mod tests { 1200000., Duration::from_millis(100), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, @@ -2705,7 +2719,8 @@ mod tests { 2000., 9000., Duration::from_millis(100), - [0.5, 0.5, 1., 1., 0.5, 0.5], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], [0., 0.15, 0.16, 0.84, 0.85, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, @@ -2727,6 +2742,7 @@ mod tests { 0., Duration::from_millis(100), [0.5, 1., 1., 1., 1., 0.5], + [0.5, 1., 1., 1., 1., 0.5], [0., 0.2, 0.21, 0.79, 0.8, 1.], 0., 0., @@ -2811,7 +2827,8 @@ mod tests { 50000., 1200000., Duration::from_millis(100), - [0.5, 0.5, 1., 1., 0.5, 0.5], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], [0., 0.1, 0.11, 0.89, 0.9, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, @@ -2889,7 +2906,8 @@ mod tests { 50000., 2200000., Duration::from_millis(100), - [0.5, 0.5, 1., 1., 0.5, 0.5], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], [0., 0.1, 0.11, 0.89, 0.9, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, @@ -2944,7 +2962,8 @@ mod tests { 2000., 28000., Duration::from_millis(100), - [0.5, 0.5, 1., 1., 0.5, 0.5], + [1., 1., 1., 1., 0.5, 0.5], + [0.5, 0.5, 1., 1., 1., 1.], [0., 0.15, 0.16, 0.84, 0.85, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, @@ -3000,6 +3019,7 @@ mod tests { 800000., Duration::from_millis(300), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, @@ -3062,6 +3082,7 @@ mod tests { 10000000., Duration::from_millis(300), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN, @@ -3118,6 +3139,7 @@ mod tests { 800000., Duration::from_millis(300), [1., 1., 1., 1., 1., 1.], + [1., 1., 1., 1., 1., 1.], [0., 0.2, 0.21, 0.79, 0.8, 1.], DEFAULT_P_GAIN, DEFAULT_I_GAIN,