diff --git a/Models/Instruments/PFD/res/spd-tape.png b/Models/Instruments/PFD/res/spd-tape.png index 920d9b52..f60c7f92 100644 Binary files a/Models/Instruments/PFD/res/spd-tape.png and b/Models/Instruments/PFD/res/spd-tape.png differ diff --git a/Models/Liveries/A321/CFM/USAirways.xml b/Models/Liveries/A321/CFM/USAirways.xml index 8a040660..54cf1afa 100644 --- a/Models/Liveries/A321/CFM/USAirways.xml +++ b/Models/Liveries/A321/CFM/USAirways.xml @@ -11,7 +11,7 @@ - 1 + 0 0 diff --git a/Nasal/FMGC.nas b/Nasal/FMGC.nas index 5e109d6c..ba4020b6 100644 --- a/Nasal/FMGC.nas +++ b/Nasal/FMGC.nas @@ -6,6 +6,7 @@ ################## setprop("/FMGC/internal/overspeed", 338); +setprop("/FMGC/internal/minspeed", 204); setprop("/position/gear-agl-ft", 0); setprop("/FMGC/internal/mng-spd", 157); setprop("/FMGC/internal/mng-spd-cmd", 157); @@ -16,7 +17,7 @@ setprop("/it-autoflight/internal/vert-speed-fpm", 0); var FMGCinit = func { setprop("/FMGC/status/to-state", 0); - setprop("/FMGC/status/phase", "0"); # 0 is preflight 1 takeoff 2 climb 3 cruise 4 descent 5 approach 6 go around 7 done + setprop("/FMGC/status/phase", "0"); # 0 is Preflight 1 is Takeoff 2 is Climb 3 is Cruise 4 is Descent 5 is Decel/Approach 6 is Go Around 7 is Done setprop("/FMGC/internal/tropo", 36090); setprop("/FMGC/internal/overspeed", 338); setprop("/FMGC/internal/mng-spd", 157); @@ -24,6 +25,7 @@ var FMGCinit = func { setprop("/FMGC/internal/mng-kts-mach", 0); setprop("/FMGC/internal/mach-switchover", 0); setprop("/it-autoflight/settings/reduc-agl-ft", 3000); + setprop("/FMGC/internal/decel", 0); phasecheck.start(); various.start(); } @@ -80,6 +82,7 @@ var phasecheck = maketimer(0.2, func { var n1_left = getprop("/engines/engine[0]/n1"); var n1_right = getprop("/engines/engine[1]/n1"); var flaps = getprop("/controls/flight/flap-pos"); + var modelat = getprop("/modes/pfd/fma/roll-mode"); var mode = getprop("/modes/pfd/fma/pitch-mode"); var gs = getprop("/velocities/groundspeed-kt"); var alt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); @@ -97,32 +100,41 @@ var phasecheck = maketimer(0.2, func { var targetfpa = getprop("/it-autoflight/input/fpa"); var vertmode = getprop("/modes/pfd/fma/pitch-mode"); var reduc_agl_ft = getprop("/it-autoflight/settings/reduc-agl-ft"); + var locarm = getprop("/it-autopilot/output/loc-armed"); + var apprarm = getprop("/it-autopilot/output/appr-armed"); + if ((((n1_left >= 85) and (n1_right >= 85)) or (gs > 90 )) and flaps < 4 and (mode == "SRS")) { setprop("/FMGC/status/phase", "1"); setprop("/systems/pressurization/mode", "TO"); } + if ((aglalt >= reduc_agl_ft) and (alt <= cruiseft) and (phase == "1") and (phase != "4") and (mode != "SRS")) { setprop("/FMGC/status/phase", "2"); } + if (alt >= cruiseft_b and phase == "2" and (mode == "ALT" or mode == "ALT CRZ")) { setprop("/FMGC/status/phase", "3"); setprop("/systems/pressurization/mode", "CR"); } + if (alt <= cruiseft and (mode == "DES" or mode == "OP DES") and phase == "3") { setprop("/FMGC/status/phase", "4"); setprop("/systems/pressurization/mode", "DE"); } - if (getprop("/FMGC/status/to-state") == 0 and flaps >= 4 and ((phase == "4") or (phase == "2"))) { # add man activation of approach phase in MCDU or DECEL when those things are simulated + + if (getprop("/FMGC/status/to-state") == 0 and flaps >= 3 and ((phase == "2") or (phase == "4"))) { setprop("/FMGC/status/phase", "5"); } - if ((phase == "5") and (state1 == "TOGA") and (state2 == "TOGA")) { # this is the only fully correct one to FCOM + + if ((phase == "5") and (state1 == "TOGA") and (state2 == "TOGA")) { setprop("/FMGC/status/phase", "6"); setprop("/it-autoflight/input/toga", 1); } - # forget transition from APP to climb for now because it would be too complex + if ((phase == "6") and ((vertmode == "G/A CLB") or (vertmode == "SPD CLB") or (vertmode == "CLB") or ((vertmode == "V/S") and (targetvs > 0)) or ((vertmode == "FPA") and (targetfpa > 0))) and (alt <= targetalt)) { - setprop("/FMGC/status/phase", "2"); # going to CLIMB mode from GA + setprop("/FMGC/status/phase", "2"); } + if ((wowl and wowr) and (gs < 20) and (phase == "5")) { setprop("/FMGC/status/phase", "7"); var fd1 = getprop("/it-autoflight/input/fd1"); @@ -135,6 +147,27 @@ var phasecheck = maketimer(0.2, func { setprop("/it-autoflight/input/fd2", fd2); press_init(); } + + var flap = getprop("/controls/flight/flap-pos"); + if (flap == 0) { + setprop("/FMGC/internal/overspeed", 338); + setprop("/FMGC/internal/minspeed", 204); + } else if (flap == 1) { + setprop("/FMGC/internal/overspeed", 216); + setprop("/FMGC/internal/minspeed", 188); + } else if (flap == 2) { + setprop("/FMGC/internal/overspeed", 207); + setprop("/FMGC/internal/minspeed", 171); + } else if (flap == 3) { + setprop("/FMGC/internal/overspeed", 189); + setprop("/FMGC/internal/minspeed", 159); + } else if (flap == 4) { + setprop("/FMGC/internal/overspeed", 174); + setprop("/FMGC/internal/minspeed", 146); + } else if (flap == 5) { + setprop("/FMGC/internal/overspeed", 163); + setprop("/FMGC/internal/minspeed", 136); + } }); var various = maketimer(1, func { @@ -145,21 +178,6 @@ var various = maketimer(1, func { } else { setprop("/it-autoflight/settings/reduc-agl-ft", getprop("/FMGC/internal/reduc-agl-ft")); } - - var flap = getprop("/controls/flight/flap-pos"); - if (flap == 0) { - setprop("/FMGC/internal/overspeed", 338); - } else if (flap == 1) { - setprop("/FMGC/internal/overspeed", 216); - } else if (flap == 2) { - setprop("/FMGC/internal/overspeed", 207); - } else if (flap == 3) { - setprop("/FMGC/internal/overspeed", 189); - } else if (flap == 4) { - setprop("/FMGC/internal/overspeed", 174); - } else if (flap == 5) { - setprop("/FMGC/internal/overspeed", 163); - } }); ################# @@ -171,6 +189,7 @@ var ManagedSPD = maketimer(0.25, func { if (getprop("/it-autoflight/input/spd-managed") == 1) { var alt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); var mode = getprop("/modes/pfd/fma/pitch-mode"); + var ias = getprop("/instrumentation/airspeed-indicator/indicated-speed-kt"); var mach = getprop("/instrumentation/airspeed-indicator/indicated-mach"); var ktsmach = getprop("/it-autoflight/input/kts-mach"); var mngktsmach = getprop("/FMGC/internal/mng-kts-mach"); @@ -179,10 +198,12 @@ var ManagedSPD = maketimer(0.25, func { var kts_sel = getprop("/it-autoflight/input/spd-kts"); var mach_sel = getprop("/it-autoflight/input/spd-mach"); var srsSPD = getprop("/it-autoflight/settings/togaspd"); - var phase = getprop("/FMGC/status/phase"); # 0 is preflight 1 takeoff 2 climb 3 cruise 4 descent 5 approach 6 go around 7 done + var phase = getprop("/FMGC/status/phase"); # 0 is Preflight 1 is Takeoff 2 is Climb 3 is Cruise 4 is Descent 5 is Decel/Approach 6 is Go Around 7 is Done var flap = getprop("/controls/flight/flap-pos"); var overspeed = getprop("/FMGC/internal/overspeed"); + var minspeed = getprop("/FMGC/internal/minspeed"); var mach_switchover = getprop("/FMGC/internal/mach-switchover"); + var decel = getprop("/FMGC/internal/decel"); var mng_alt_spd_cmd = getprop("/FMGC/internal/mng-alt-spd"); var mng_alt_spd = math.round(mng_alt_spd_cmd, 1); @@ -190,6 +211,14 @@ var ManagedSPD = maketimer(0.25, func { var mng_alt_mach_cmd = getprop("/FMGC/internal/mng-alt-mach"); var mng_alt_mach = math.round(mng_alt_mach_cmd, 0.001); + if (mach > mng_alt_mach and phase == 2) { + setprop("/FMGC/internal/mach-switchover", 1); + } + + if (ias > mng_alt_spd and (phase == 4 or phase == 5)) { + setprop("/FMGC/internal/mach-switchover", 0); + } + if (mode == "SRS" and phase == 0 or phase == 1) { if (mngktsmach) { setprop("/FMGC/internal/mng-kts-mach", 0); @@ -218,8 +247,29 @@ var ManagedSPD = maketimer(0.25, func { if (mng_spd_cmd != mng_alt_mach) { setprop("/FMGC/internal/mng-spd-cmd", mng_alt_mach); } - } else if (phase == 4 or phase == 5 or phase == 6 or phase == 7) { - libraries.mcpSPDKnbPull(); + } else if (phase == 4 and alt > 11100 and !mach_switchover) { + if (mngktsmach) { + setprop("/FMGC/internal/mng-kts-mach", 0); + } + if (mng_spd_cmd != mng_alt_spd) { + setprop("/FMGC/internal/mng-spd-cmd", mng_alt_spd); + } + } else if (phase == 4 and alt > 11100 and mach_switchover) { + if (!mngktsmach) { + setprop("/FMGC/internal/mng-kts-mach", 1); + } + if (mng_spd_cmd != mng_alt_mach) { + setprop("/FMGC/internal/mng-spd-cmd", mng_alt_mach); + } + } else if ((phase == 4 or phase == 5 or phase == 6) and alt <= 11050) { + if (mngktsmach) { + setprop("/FMGC/internal/mng-kts-mach", 0); + } + if (mng_spd_cmd != 250 and !decel) { + setprop("/FMGC/internal/mng-spd-cmd", 250); + } else if (mng_spd_cmd != minspeed and decel) { + setprop("/FMGC/internal/mng-spd-cmd", minspeed); + } } var mng_spd_cmd = getprop("/FMGC/internal/mng-spd-cmd"); @@ -243,10 +293,6 @@ var ManagedSPD = maketimer(0.25, func { } else if (mach_sel != mng_spd and ktsmach) { setprop("/it-autoflight/input/spd-mach", mng_spd); } - - if (mach >= mng_alt_mach and phase == 2) { - setprop("/FMGC/internal/mach-switchover", 1); - } } else { ManagedSPD.stop(); } diff --git a/Nasal/MCDU/MCDU1.nas b/Nasal/MCDU/MCDU1.nas index 3769b281..e2c92040 100644 --- a/Nasal/MCDU/MCDU1.nas +++ b/Nasal/MCDU/MCDU1.nas @@ -10,7 +10,7 @@ var MCDU_init = func { var MCDU_reset = func { setprop("/it-autoflight/settings/togaspd", 157); setprop("/MCDU[0]/last-fmgc-page", "STATUS"); - setprop("/MCDU[0]/page", "STATUS"); + setprop("/MCDU[0]/page", "MCDU"); setprop("/MCDU[0]/scratchpad", ""); setprop("/MCDUC/flight-num", ""); setprop("/MCDUC/thracc-set", 0); @@ -46,6 +46,8 @@ var lskbutton = func(btn) { if (btn == "1") { if (getprop("/MCDU[0]/page") == "MCDU") { setprop("/MCDU[0]/page", getprop("/MCDU[0]/last-fmgc-page")); + setprop("/MCDU[0]/scratchpad-msg", "1"); + setprop("/MCDU[0]/scratchpad", "GPS PRIMARY"); } else if (getprop("/MCDU[0]/page") == "TO") { PerfTOInput("L1"); } @@ -214,8 +216,6 @@ var initInputA = func(key) { setprop("/FMGC/internal/arr-arpt", fromto[1]); setprop("/FMGC/internal/tofrom-set", 1); fmgc.updateARPT(); - setprop("/MCDU[0]/scratchpad-msg", "1"); - setprop("/MCDU[0]/scratchpad", "GPS PRIMARY"); } else { setprop("/MCDU[0]/scratchpad-msg", "1"); setprop("/MCDU[0]/scratchpad", "NOT ALLOWED"); diff --git a/Nasal/MCDU/MCDU2.nas b/Nasal/MCDU/MCDU2.nas index f4cb61b6..e6a88fa7 100644 --- a/Nasal/MCDU/MCDU2.nas +++ b/Nasal/MCDU/MCDU2.nas @@ -10,7 +10,7 @@ var MCDU_init = func { var MCDU_reset = func { setprop("/it-autoflight/settings/togaspd", 157); setprop("/MCDU[1]/last-fmgc-page", "STATUS"); - setprop("/MCDU[1]/page", "STATUS"); + setprop("/MCDU[1]/page", "MCDU"); setprop("/MCDU[1]/scratchpad", ""); setprop("/MCDUC/flight-num", ""); setprop("/MCDUC/thracc-set", 0); @@ -46,6 +46,8 @@ var lskbutton = func(btn) { if (btn == "1") { if (getprop("/MCDU[1]/page") == "MCDU") { setprop("/MCDU[1]/page", getprop("/MCDU[1]/last-fmgc-page")); + setprop("/MCDU[1]/scratchpad-msg", "1"); + setprop("/MCDU[1]/scratchpad", "GPS PRIMARY"); } else if (getprop("/MCDU[1]/page") == "TO") { PerfTOInput("L1"); } @@ -214,8 +216,6 @@ var initInputA = func(key) { setprop("/FMGC/internal/arr-arpt", fromto[1]); setprop("/FMGC/internal/tofrom-set", 1); fmgc.updateARPT(); - setprop("/MCDU[1]/scratchpad-msg", "1"); - setprop("/MCDU[1]/scratchpad", "GPS PRIMARY"); } else { setprop("/MCDU[1]/scratchpad-msg", "1"); setprop("/MCDU[1]/scratchpad", "NOT ALLOWED"); diff --git a/Systems/fmgc-c.xml b/Systems/fmgc-c.xml index dadd4c54..b590a98a 100644 --- a/Systems/fmgc-c.xml +++ b/Systems/fmgc-c.xml @@ -72,15 +72,13 @@ - - -
- /instrumentation/airspeed-indicator/indicated-speed-kt - /instrumentation/airspeed-indicator/indicated-mach -
- /it-autoflight/input/spd-mach -
-
+ +
+ /instrumentation/airspeed-indicator/indicated-speed-kt + /instrumentation/airspeed-indicator/indicated-mach +
+ /it-autoflight/input/spd-mach +
/FMGC/internal/target-ias-pfd