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,