From 5d4a3a7636bf1137e87eab35f167a1b40ea3b494 Mon Sep 17 00:00:00 2001 From: Joshua Davidson <joshuadavidson2000@gmail.com> Date: Mon, 30 Jan 2017 18:12:19 -0500 Subject: [PATCH] bugfix, itaf 127 --- A320-main.xml | 19 +- Models/FlightDeck/a320.flightdeck.xml | 29 +- Nasal/PFD_FMA.nas | 6 +- Nasal/it-autoflight.nas | 976 ++++++++++++++------------ Nasal/systems.nas | 8 - Systems/autopilot-dlg.xml | 94 ++- Systems/engine-timing.xml | 32 + Systems/it-autoflight.xml | 129 +++- 8 files changed, 784 insertions(+), 509 deletions(-) diff --git a/A320-main.xml b/A320-main.xml index acae4e4e..586d30cc 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -249,6 +249,7 @@ <vorloc>-4.0</vorloc> <alt>0.025</alt> <vs>0.07</vs> + <fpa>0.30</fpa> <flch>-0.35</flch> <gs>0.10</gs> </cmd> @@ -259,16 +260,20 @@ </autoland> </config> <settings> - <enable-cws>0</enable-cws> - <flare-altitude>40</flare-altitude> - <land-enable>1</land-enable> - <land-flap>0.645</land-flap> - <retard-ft>40</retard-ft> - <retard-enable>0</retard-enable> - <toga-pitch>15</toga-pitch> + <enable-cws>0</enable-cws> <!-- Enable/Disable CWS --> + <flare-altitude>40</flare-altitude> <!-- Autoland Flare AGL --> + <land-enable>1</land-enable> <!-- Enable/Disable Autoland --> + <land-flap>0.645</land-flap> <!-- Minimum Flap used for Landing --> + <retard-ft>40</retard-ft> <!-- Enable Thrust Retard --> + <retard-enable>0</retard-enable> <!-- AGL to Thrust Retard --> + <togaspd>157</togaspd> <!-- V2 + 10kts --> + <lat-agl-ft>100</lat-agl-ft> <!-- Set to 999999 if you do not want T/O to change automatically to HDG, or LNAV --> + <reduc-agl-ft>1500</reduc-agl-ft> <!-- Set to 999999 if you do not want TOGA to change automatically to FLCH --> </settings> </it-autoflight> + + <autopilot> <autobrake> <config> diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index afe7300b..baf89f94 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -527,9 +527,14 @@ <button>1</button> <repeatable>false</repeatable> <binding> - <command>property-assign</command> - <property>/it-autoflight/input/vert</property> - <value>1</value> + <command>nasal</command> + <script> + if (getprop("/it-autoflight/settings/use-true-hdg-error") == 0) { + setprop("/it-autoflight/input/vert", 1); + } else if (getprop("/it-autoflight/settings/use-true-hdg-error") == 1) { + setprop("/it-autoflight/input/vert", 5); + } + </script> </binding> </action> <action> @@ -644,9 +649,12 @@ <value>1</value> </binding> <binding> - <command>property-assign</command> - <property>/it-autoflight/settings/use-fpa</property> - <value>1</value> + <command>nasal</command> + <script> + if (getprop("/it-autoflight/output/vert") == 5) { + setprop("/it-autoflight/input/vert", 1); + } + </script> </binding> </action> </animation> @@ -663,9 +671,12 @@ <value>0</value> </binding> <binding> - <command>property-assign</command> - <property>/it-autoflight/settings/use-fpa</property> - <value>0</value> + <command>nasal</command> + <script> + if (getprop("/it-autoflight/output/vert") == 1) { + setprop("/it-autoflight/input/vert", 5); + } + </script> </binding> </action> </animation> diff --git a/Nasal/PFD_FMA.nas b/Nasal/PFD_FMA.nas index 9be5017d..b97aed9c 100644 --- a/Nasal/PFD_FMA.nas +++ b/Nasal/PFD_FMA.nas @@ -43,7 +43,7 @@ setlistener("/it-autoflight/mode/lat", func { } else if (lat == "ALGN") { setprop("/modes/pfd/fma/roll-mode", "ALN"); } else if (lat == "T/O") { - setprop("/modes/pfd/fma/roll-mode", " "); + setprop("/modes/pfd/fma/roll-mode", "RWY"); } }); @@ -117,9 +117,9 @@ var fd = func { if (fd1 and fd2) { setprop("/modes/pfd/fma/fd-mode", "1FD2"); } else if (fd1 and !fd2) { - setprop("/modes/pfd/fma/fd-mode", "FD1"); + setprop("/modes/pfd/fma/fd-mode", "1FD-"); } else if (fd2 and !fd1) { - setprop("/modes/pfd/fma/fd-mode", "FD2"); + setprop("/modes/pfd/fma/fd-mode", "-FD2"); } else { setprop("/modes/pfd/fma/fd-mode", " "); } diff --git a/Nasal/it-autoflight.nas b/Nasal/it-autoflight.nas index f62acbb0..891161c1 100644 --- a/Nasal/it-autoflight.nas +++ b/Nasal/it-autoflight.nas @@ -1,5 +1,5 @@ # IT AUTOFLIGHT System Controller by Joshua Davidson (it0uchpods/411). -# V3.0.0 Build 115 +# V3.0.0 Build 127 # This program is 100% GPL! print("IT-AUTOFLIGHT: Please Wait!"); @@ -12,12 +12,12 @@ var ap_init = func { setprop("/it-autoflight/input/cws", 0); setprop("/it-autoflight/input/fd1", 0); setprop("/it-autoflight/input/fd2", 0); - setprop("/it-autoflight/input/spd-kts", 200); - setprop("/it-autoflight/input/spd-mach", 0.68); setprop("/it-autoflight/input/hdg", 360); setprop("/it-autoflight/input/alt", 10000); setprop("/it-autoflight/input/vs", 0); + setprop("/it-autoflight/input/fpa", 0); setprop("/it-autoflight/input/lat", 5); + setprop("/it-autoflight/input/lat-arm", 0); setprop("/it-autoflight/input/vert", 7); setprop("/it-autoflight/input/bank-limit", 30); setprop("/it-autoflight/input/trk", 0); @@ -32,6 +32,8 @@ var ap_init = func { setprop("/it-autoflight/output/appr-armed", 0); setprop("/it-autoflight/output/thr-mode", 2); setprop("/it-autoflight/output/retard", 0); + setprop("/it-autoflight/output/lat", 5); + setprop("/it-autoflight/output/vert", 7); setprop("/it-autoflight/settings/min-pitch", -8); setprop("/it-autoflight/settings/max-pitch", 8); setprop("/it-autoflight/internal/min-pitch", -8); @@ -39,9 +41,14 @@ var ap_init = func { setprop("/it-autoflight/internal/alt", 10000); setprop("/it-autoflight/internal/cwsr", 0); setprop("/it-autoflight/internal/cwsp", 0); - setprop("/it-autoflight/autoland/target-vs", "-650"); - setprop("/it-autoflight/mode/lat", "T/O"); - setprop("/it-autoflight/mode/vert", "T/O CLB"); + setprop("/it-autoflight/internal/fpa", 0); + setprop("/it-autoflight/autoland/target-vs", "-650"); + setprop("/it-autoflight/mode/thr", "PITCH"); + setprop("/it-autoflight/mode/arm", "HDG"); + setprop("/it-autoflight/mode/lat", "T/O"); + setprop("/it-autoflight/mode/vert", "T/O CLB"); + setprop("/it-autoflight/input/spd-kts", 200); + setprop("/it-autoflight/input/spd-mach", 0.68); thrustmode(); update_arms(); print("IT-AUTOFLIGHT: Done!"); @@ -49,253 +56,313 @@ var ap_init = func { # AP 1 Master System setlistener("/it-autoflight/input/ap1", func { - var apmas = getprop("/it-autoflight/input/ap1"); - if (apmas == 0) { - setprop("/it-autoflight/output/ap1", 0); - setprop("/controls/flight/rudder", 0); - if (getprop("/it-autoflight/sound/enableapoffsound") == 1) { - setprop("/it-autoflight/sound/apoffsound", 1); - setprop("/it-autoflight/sound/enableapoffsound", 0); + var apmas = getprop("/it-autoflight/input/ap1"); + if (apmas == 0) { + setprop("/it-autoflight/output/ap1", 0); + setprop("/controls/flight/rudder", 0); + if (getprop("/it-autoflight/sound/enableapoffsound") == 1) { + setprop("/it-autoflight/sound/apoffsound", 1); + setprop("/it-autoflight/sound/enableapoffsound", 0); + } + } else if (apmas == 1) { + if ((getprop("/gear/gear[1]/wow") == 0) and (getprop("/gear/gear[2]/wow") == 0)) { + setprop("/controls/flight/rudder", 0); + setprop("/it-autoflight/input/cws", 0); + setprop("/it-autoflight/output/ap1", 1); + setprop("/it-autoflight/sound/enableapoffsound", 1); + setprop("/it-autoflight/sound/apoffsound", 0); + } } - } else if (apmas == 1) { - setprop("/controls/flight/rudder", 0); - setprop("/it-autoflight/input/cws", 0); - setprop("/it-autoflight/output/ap1", 1); - setprop("/it-autoflight/sound/enableapoffsound", 1); - setprop("/it-autoflight/sound/apoffsound", 0); - } }); # AP 2 Master System setlistener("/it-autoflight/input/ap2", func { - var apmas = getprop("/it-autoflight/input/ap2"); - if (apmas == 0) { - setprop("/it-autoflight/output/ap2", 0); - setprop("/controls/flight/rudder", 0); - if (getprop("/it-autoflight/sound/enableapoffsound2") == 1) { - setprop("/it-autoflight/sound/apoffsound2", 1); - setprop("/it-autoflight/sound/enableapoffsound2", 0); + var apmas = getprop("/it-autoflight/input/ap2"); + if (apmas == 0) { + setprop("/it-autoflight/output/ap2", 0); + setprop("/controls/flight/rudder", 0); + if (getprop("/it-autoflight/sound/enableapoffsound2") == 1) { + setprop("/it-autoflight/sound/apoffsound2", 1); + setprop("/it-autoflight/sound/enableapoffsound2", 0); + } + } else if (apmas == 1) { + if ((getprop("/gear/gear[1]/wow") == 0) and (getprop("/gear/gear[2]/wow") == 0)) { + setprop("/controls/flight/rudder", 0); + setprop("/it-autoflight/input/cws", 0); + setprop("/it-autoflight/output/ap2", 1); + setprop("/it-autoflight/sound/enableapoffsound2", 1); + setprop("/it-autoflight/sound/apoffsound2", 0); + } } - } else if (apmas == 1) { - setprop("/controls/flight/rudder", 0); - setprop("/it-autoflight/input/cws", 0); - setprop("/it-autoflight/output/ap2", 1); - setprop("/it-autoflight/sound/enableapoffsound2", 1); - setprop("/it-autoflight/sound/apoffsound2", 0); - } }); # AT Master System setlistener("/it-autoflight/input/athr", func { - var atmas = getprop("/it-autoflight/input/athr"); - if (atmas == 0) { - setprop("/it-autoflight/output/athr", 0); - } else if (atmas == 1) { - setprop("/it-autoflight/output/athr", 1); - } + var atmas = getprop("/it-autoflight/input/athr"); + if (atmas == 0) { + setprop("/it-autoflight/output/athr", 0); + } else if (atmas == 1) { + setprop("/it-autoflight/output/athr", 1); + } }); # CWS Master System setlistener("/it-autoflight/input/cws", func { - var cwsmas = getprop("/it-autoflight/input/cws"); - if (cwsmas == 1) { - setprop("/it-autoflight/input/ap1", 0); - setprop("/it-autoflight/input/ap2", 0); - setprop("/it-autoflight/internal/cws-roll-deg", getprop("/orientation/roll-deg")); - setprop("/it-autoflight/internal/cws-pitch-deg", getprop("/orientation/pitch-deg")); - cwsrollt.start(); - cwspitcht.start(); - setprop("/it-autoflight/output/cws", 1); - } else if (cwsmas == 0) { - cwsrollt.stop(); - cwspitcht.stop(); - setprop("/it-autoflight/output/cws", 0); - setprop("/controls/flight/aileron-trim", 0); - } + var cwsmas = getprop("/it-autoflight/input/cws"); + if (cwsmas == 1) { + if ((getprop("/gear/gear[1]/wow") == 0) and (getprop("/gear/gear[2]/wow") == 0)) { + setprop("/it-autoflight/input/ap1", 0); + setprop("/it-autoflight/input/ap2", 0); + setprop("/it-autoflight/internal/cws-roll-deg", getprop("/orientation/roll-deg")); + setprop("/it-autoflight/internal/cws-pitch-deg", getprop("/orientation/pitch-deg")); + cwsrollt.start(); + cwspitcht.start(); + setprop("/it-autoflight/output/cws", 1); + } + } else if (cwsmas == 0) { + cwsrollt.stop(); + cwspitcht.stop(); + setprop("/it-autoflight/output/cws", 0); + setprop("/controls/flight/aileron-trim", 0); + } }); # Flight Director 1 Master System setlistener("/it-autoflight/input/fd1", func { - var fdmas = getprop("/it-autoflight/input/fd1"); - if (fdmas == 0) { - setprop("/it-autoflight/output/fd1", 0); - } else if (fdmas == 1) { - setprop("/it-autoflight/output/fd1", 1); - } + var fdmas = getprop("/it-autoflight/input/fd1"); + if (fdmas == 0) { + setprop("/it-autoflight/output/fd1", 0); + } else if (fdmas == 1) { + setprop("/it-autoflight/output/fd1", 1); + } }); # Flight Director 2 Master System setlistener("/it-autoflight/input/fd2", func { - var fdmas = getprop("/it-autoflight/input/fd2"); - if (fdmas == 0) { - setprop("/it-autoflight/output/fd2", 0); - } else if (fdmas == 1) { - setprop("/it-autoflight/output/fd2", 1); - } + var fdmas = getprop("/it-autoflight/input/fd2"); + if (fdmas == 0) { + setprop("/it-autoflight/output/fd2", 0); + } else if (fdmas == 1) { + setprop("/it-autoflight/output/fd2", 1); + } }); # Master Lateral setlistener("/it-autoflight/input/lat", func { - lateral(); + if ((getprop("/gear/gear[1]/wow") == 0) and (getprop("/gear/gear[2]/wow") == 0)) { + lateral(); + } else { + lat_arm(); + } }); var lateral = func { - var latset = getprop("/it-autoflight/input/lat"); - if (latset == 0) { - alandt.stop(); - alandt1.stop(); - setprop("/it-autoflight/output/loc-armed", 0); - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/lat", 0); - setprop("/it-autoflight/mode/lat", "HDG"); - setprop("/it-autoflight/mode/arm", " "); - } else if (latset == 1) { - alandt.stop(); - alandt1.stop(); - setprop("/it-autoflight/output/loc-armed", 0); - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/lat", 1); - setprop("/it-autoflight/mode/lat", "LNAV"); - setprop("/it-autoflight/mode/arm", " "); - } else if (latset == 2) { - setprop("/instrumentation/nav/signal-quality-norm", 0); - setprop("/it-autoflight/output/loc-armed", 1); - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/mode/arm", "LOC"); - } else if (latset == 3) { - alandt.stop(); - alandt1.stop(); - setprop("/it-autoflight/output/loc-armed", 0); - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/lat", 0); - setprop("/it-autoflight/mode/lat", "HDG"); - setprop("/it-autoflight/mode/arm", " "); - var hdgnow = int(getprop("/orientation/heading-magnetic-deg")+0.5); - setprop("/it-autoflight/input/hdg", hdgnow); - } else if (latset == 4) { - setprop("/it-autoflight/output/lat", 4); - setprop("/it-autoflight/mode/lat", "ALGN"); - } else if (latset == 5) { - setprop("/it-autoflight/output/lat", 5); - } + var latset = getprop("/it-autoflight/input/lat"); + if (latset == 0) { + alandt.stop(); + alandt1.stop(); + setprop("/it-autoflight/output/loc-armed", 0); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/lat", 0); + setprop("/it-autoflight/mode/lat", "HDG"); + setprop("/it-autoflight/mode/arm", " "); + } else if (latset == 1) { + alandt.stop(); + alandt1.stop(); + setprop("/it-autoflight/output/loc-armed", 0); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/lat", 1); + setprop("/it-autoflight/mode/lat", "LNAV"); + setprop("/it-autoflight/mode/arm", " "); + } else if (latset == 2) { + setprop("/instrumentation/nav/signal-quality-norm", 0); + setprop("/it-autoflight/output/loc-armed", 1); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/mode/arm", "LOC"); + } else if (latset == 3) { + alandt.stop(); + alandt1.stop(); + setprop("/it-autoflight/output/loc-armed", 0); + setprop("/it-autoflight/output/appr-armed", 0); + var hdgnow = int(getprop("/orientation/heading-magnetic-deg")+0.5); + setprop("/it-autoflight/input/hdg", hdgnow); + setprop("/it-autoflight/output/lat", 0); + setprop("/it-autoflight/mode/lat", "HDG"); + setprop("/it-autoflight/mode/arm", " "); + } else if (latset == 4) { + setprop("/it-autoflight/output/lat", 4); + setprop("/it-autoflight/mode/lat", "ALGN"); + } else if (latset == 5) { + setprop("/it-autoflight/output/lat", 5); + } +} + +var lat_arm = func { + var latset = getprop("/it-autoflight/input/lat"); + if (latset == 0) { + setprop("/it-autoflight/input/lat-arm", 0); + setprop("/it-autoflight/mode/arm", "HDG"); + } else if (latset == 1) { + setprop("/it-autoflight/input/lat-arm", 1); + setprop("/it-autoflight/mode/arm", "LNV"); + } else if (latset == 3) { + var hdgnow = int(getprop("/orientation/heading-magnetic-deg")+0.5); + setprop("/it-autoflight/input/hdg", hdgnow); + setprop("/it-autoflight/input/lat-arm", 0); + setprop("/it-autoflight/mode/arm", "HDG"); + } } # Master Vertical setlistener("/it-autoflight/input/vert", func { - vertical(); + if ((getprop("/gear/gear[1]/wow") == 0) and (getprop("/gear/gear[2]/wow") == 0)) { + vertical(); + } }); var vertical = func { - var vertset = getprop("/it-autoflight/input/vert"); - if (vertset == 0) { - alandt.stop(); - alandt1.stop(); - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/vert", 0); - setprop("/it-autoflight/mode/vert", "ALT HLD"); - if (getprop("/it-autoflight/output/loc-armed")) { - setprop("/it-autoflight/mode/arm", "LOC"); - } else { - setprop("/it-autoflight/mode/arm", " "); + var vertset = getprop("/it-autoflight/input/vert"); + if (vertset == 0) { + alandt.stop(); + alandt1.stop(); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/vert", 0); + setprop("/it-autoflight/mode/vert", "ALT HLD"); + if (getprop("/it-autoflight/output/loc-armed")) { + setprop("/it-autoflight/mode/arm", "LOC"); + } else { + setprop("/it-autoflight/mode/arm", " "); + } + var altnow = int((getprop("/instrumentation/altimeter/indicated-altitude-ft")+50)/100)*100; + setprop("/it-autoflight/input/alt", altnow); + setprop("/it-autoflight/internal/alt", altnow); + thrustmode(); + } else if (vertset == 1) { + alandt.stop(); + alandt1.stop(); + var altinput = getprop("/it-autoflight/input/alt"); + setprop("/it-autoflight/internal/alt", altinput); + var vsnow = int(getprop("/velocities/vertical-speed-fps")*0.6)*100; + setprop("/it-autoflight/input/vs", vsnow); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/vert", 1); + setprop("/it-autoflight/mode/vert", "V/S"); + if (getprop("/it-autoflight/output/loc-armed")) { + setprop("/it-autoflight/mode/arm", "LOC"); + } else { + setprop("/it-autoflight/mode/arm", " "); + } + thrustmode(); + } else if (vertset == 2) { + if (getprop("/it-autoflight/output/lat") == 2) { + # Do nothing because VORLOC is active + } else { + setprop("/instrumentation/nav/signal-quality-norm", 0); + setprop("/it-autoflight/output/loc-armed", 1); + } + setprop("/instrumentation/nav/gs-rate-of-climb", 0); + setprop("/it-autoflight/output/appr-armed", 1); + setprop("/it-autoflight/mode/arm", "ILS"); + setprop("/it-autoflight/autoland/target-vs", "-650"); + } else if (vertset == 3) { + alandt.stop(); + alandt1.stop(); + var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); + var alt = getprop("/it-autoflight/internal/alt"); + var dif = calt - alt; + var pitchdeg = getprop("/orientation/pitch-deg"); + if (calt < alt) { + setprop("/it-autoflight/internal/max-pitch", pitchdeg); + } else if (calt > alt) { + setprop("/it-autoflight/internal/min-pitch", pitchdeg); + } + minmaxtimer.start(); + thrustmode(); + setprop("/it-autoflight/output/vert", 0); + setprop("/it-autoflight/mode/vert", "ALT CAP"); + } else if (vertset == 4) { + alandt.stop(); + alandt1.stop(); + var altinput = getprop("/it-autoflight/input/alt"); + setprop("/it-autoflight/internal/alt", altinput); + var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); + var alt = getprop("/it-autoflight/internal/alt"); + var dif = calt - alt; + if (dif < 550 and dif > -550) { + alt_on(); + } else { + flch_on(); + } + if (getprop("/it-autoflight/output/loc-armed")) { + setprop("/it-autoflight/mode/arm", "LOC"); + } else { + setprop("/it-autoflight/mode/arm", " "); + } + } else if (vertset == 5) { + alandt.stop(); + alandt1.stop(); + fpa_calct.start(); + var altinput = getprop("/it-autoflight/input/alt"); + setprop("/it-autoflight/internal/alt", altinput); + var fpanow = (int(10*getprop("/it-autoflight/internal/fpa")))*0.1; + if (fpanow < 9.9 and fpanow > -9.9) { + setprop("/it-autoflight/input/fpa", fpanow); + } else if (fpanow >= 9.9) { + setprop("/it-autoflight/input/fpa", 9.9); + } else if (fpanow <= -9.9) { + setprop("/it-autoflight/input/fpa", -9.9); + } + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/vert", 5); + setprop("/it-autoflight/mode/vert", "FPA"); + if (getprop("/it-autoflight/output/loc-armed")) { + setprop("/it-autoflight/mode/arm", "LOC"); + } else { + setprop("/it-autoflight/mode/arm", " "); + } + thrustmode(); + } else if (vertset == 6) { + setprop("/it-autoflight/output/vert", 6); + setprop("/it-autoflight/mode/vert", "LAND 3"); + setprop("/it-autoflight/mode/arm", " "); + thrustmode(); + alandt.stop(); + alandt1.start(); + setprop("/it-autoflight/autoland/target-vs", "-650"); + } else if (vertset == 7) { + setprop("/it-autoflight/output/vert", 7); + setprop("/it-autoflight/mode/arm", " "); + var altinput = getprop("/it-autoflight/input/alt"); + setprop("/it-autoflight/internal/alt", altinput); + thrustmode(); + alandt.stop(); + alandt1.stop(); } - var altnow = int((getprop("/instrumentation/altimeter/indicated-altitude-ft")+50)/100)*100; - setprop("/it-autoflight/input/alt", altnow); - setprop("/it-autoflight/internal/alt", altnow); - thrustmode(); - } else if (vertset == 1) { - alandt.stop(); - alandt1.stop(); - var altinput = getprop("/it-autoflight/input/alt"); - setprop("/it-autoflight/internal/alt", altinput); - var vsnow = int(getprop("/velocities/vertical-speed-fps")*0.6)*100; - setprop("/it-autoflight/input/vs", vsnow); - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/vert", 1); - setprop("/it-autoflight/mode/vert", "V/S"); - if (getprop("/it-autoflight/output/loc-armed")) { - setprop("/it-autoflight/mode/arm", "LOC"); - } else { - setprop("/it-autoflight/mode/arm", " "); - } - thrustmode(); - } else if (vertset == 2) { - if (getprop("/it-autoflight/output/lat") == 2) { - # Do nothing because VORLOC is active - } else { - setprop("/instrumentation/nav/signal-quality-norm", 0); - setprop("/it-autoflight/output/loc-armed", 1); - } - setprop("/instrumentation/nav/gs-rate-of-climb", 0); - setprop("/it-autoflight/output/appr-armed", 1); - setprop("/it-autoflight/mode/arm", "ILS"); - setprop("/it-autoflight/autoland/target-vs", "-650"); - } else if (vertset == 3) { - alandt.stop(); - alandt1.stop(); - var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); - var alt = getprop("/it-autoflight/internal/alt"); - var dif = calt - alt; - var pitchdeg = getprop("/orientation/pitch-deg"); - if (calt < alt) { - setprop("/it-autoflight/internal/max-pitch", pitchdeg); - } else if (calt > alt) { - setprop("/it-autoflight/internal/min-pitch", pitchdeg); - } - minmaxtimer.start(); - thrustmode(); - setprop("/it-autoflight/output/vert", 0); - setprop("/it-autoflight/mode/vert", "ALT CAP"); - } else if (vertset == 4) { - alandt.stop(); - alandt1.stop(); - var altinput = getprop("/it-autoflight/input/alt"); - setprop("/it-autoflight/internal/alt", altinput); - var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); - var alt = getprop("/it-autoflight/internal/alt"); - var dif = calt - alt; - if (dif < 550 and dif > -550) { - alt_on(); - } else { - flch_on(); - } - if (getprop("/it-autoflight/output/loc-armed")) { - setprop("/it-autoflight/mode/arm", "LOC"); - } else { - setprop("/it-autoflight/mode/arm", " "); - } - } else if (vertset == 5) { - # FPA not ready yet, so do nothing - } else if (vertset == 6) { - setprop("/it-autoflight/output/vert", 6); - setprop("/it-autoflight/mode/vert", "LAND 3"); - setprop("/it-autoflight/mode/arm", " "); - thrustmode(); - alandt.stop(); - alandt1.start(); - setprop("/it-autoflight/autoland/target-vs", "-650"); - } else if (vertset == 7) { - setprop("/it-autoflight/output/vert", 7); - setprop("/it-autoflight/mode/arm", " "); - var altinput = getprop("/it-autoflight/input/alt"); - setprop("/it-autoflight/internal/alt", altinput); - togasel(); - thrustmode(); - alandt.stop(); - alandt1.stop(); - } } var flch_on = func { - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/vert", 4); - thrustmodet.start(); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/vert", 4); + thrustmodet.start(); } var alt_on = func { - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/vert", 0); - setprop("/it-autoflight/mode/vert", "ALT CAP"); - setprop("/it-autoflight/internal/max-pitch", 8); - setprop("/it-autoflight/internal/min-pitch", -8); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/vert", 0); + setprop("/it-autoflight/mode/vert", "ALT CAP"); + setprop("/it-autoflight/internal/max-pitch", 8); + setprop("/it-autoflight/internal/min-pitch", -8); +} + +var fpa_calc = func { + var VS = getprop("/velocities/vertical-speed-fps"); + var TAS = getprop("/velocities/uBody-fps"); + if(TAS < 10) TAS = 10; + if(VS < -200) VS =-200; + if (abs(VS/TAS) <= 1) { + var FPangle = math.asin(VS/TAS); + FPangle *=90; + setprop("/it-autoflight/internal/fpa", FPangle); + } } setlistener("/it-autoflight/input/kts-mach", func { @@ -309,281 +376,311 @@ setlistener("/it-autoflight/input/kts-mach", func { } }); -# Capture Logic -setlistener("/it-autoflight/output/vert", func { - var vertm = getprop("/it-autoflight/output/vert"); - if (vertm == 1) { - altcaptt.start(); - } else if (vertm == 4) { - altcaptt.start(); - } else if (vertm == 5) { - altcaptt.start(); - } else if (vertm == 7) { - altcaptt.start(); - } else { - altcaptt.stop(); - } +# TOGA +setlistener("/it-autoflight/input/toga", func { + if (getprop("/it-autoflight/input/toga") == 1) { + setprop("/it-autoflight/input/vert", 7); + setprop("/it-autoflight/output/loc-armed", 0); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/input/toga", 0); + togasel(); + } }); +var togasel = func { + if ((getprop("/gear/gear[1]/wow") == 0) and (getprop("/gear/gear[2]/wow") == 0)) { + var iasnow = int(getprop("/instrumentation/airspeed-indicator/indicated-speed-kt")+0.5); + setprop("/it-autoflight/input/spd-kts", iasnow); + setprop("/it-autoflight/input/kts-mach", 0); + setprop("/it-autoflight/mode/vert", "G/A CLB"); + } else { + setprop("/it-autoflight/input/lat", 5); + setprop("/it-autoflight/mode/lat", "T/O"); + setprop("/it-autoflight/mode/vert", "T/O CLB"); + } +} + +setlistener("/it-autoflight/mode/vert", func { + var vertm = getprop("/it-autoflight/mode/vert"); + if (vertm == "T/O CLB") { + reduct.start(); + latarmt.start(); + } else { + reduct.stop(); + latarmt.stop(); + } +}); + +var toga_reduc = func { + if (getprop("/position/gear-agl-ft") >= getprop("/it-autoflight/settings/reduc-agl-ft")) { + setprop("/it-autoflight/input/vert", 4); + } +} + +var latarms = func { + if (getprop("/position/gear-agl-ft") >= getprop("/it-autoflight/settings/lat-agl-ft")) { + setprop("/it-autoflight/input/lat", getprop("/it-autoflight/input/lat-arm")); + } +} + +# Altitude Capture and FPA Timer Logic +setlistener("/it-autoflight/output/vert", func { + var vertm = getprop("/it-autoflight/output/vert"); + if (vertm == 1) { + altcaptt.start(); + fpa_calct.stop(); + } else if (vertm == 4) { + altcaptt.start(); + fpa_calct.stop(); + } else if (vertm == 5) { + altcaptt.start(); + } else if (vertm == 7) { + altcaptt.start(); + fpa_calct.stop(); + } else { + altcaptt.stop(); + fpa_calct.stop(); + } +}); + +# Altitude Capture var altcapt = func { - var vsnow = getprop("/it-autoflight/internal/vert-speed-fpm"); - if ((vsnow >= 0 and vsnow < 500) or (vsnow < 0 and vsnow > -500)) { - setprop("/it-autoflight/internal/captvs", 100); - setprop("/it-autoflight/internal/captvsneg", -100); - } else if ((vsnow >= 500 and vsnow < 1000) or (vsnow < -500 and vsnow > -1000)) { - setprop("/it-autoflight/internal/captvs", 150); - setprop("/it-autoflight/internal/captvsneg", -150); - } else if ((vsnow >= 1000 and vsnow < 1500) or (vsnow < -1000 and vsnow > -1500)) { - setprop("/it-autoflight/internal/captvs", 200); - setprop("/it-autoflight/internal/captvsneg", -200); - } else if ((vsnow >= 1500 and vsnow < 2000) or (vsnow < -1500 and vsnow > -2000)) { - setprop("/it-autoflight/internal/captvs", 300); - setprop("/it-autoflight/internal/captvsneg", -300); - } else if ((vsnow >= 2000 and vsnow < 3000) or (vsnow < -2000 and vsnow > -3000)) { - setprop("/it-autoflight/internal/captvs", 450); - setprop("/it-autoflight/internal/captvsneg", -450); - } else if ((vsnow >= 3000 and vsnow < 4000) or (vsnow < -3000 and vsnow > -4000)) { - setprop("/it-autoflight/internal/captvs", 650); - setprop("/it-autoflight/internal/captvsneg", -650); - } else if ((vsnow >= 4000 and vsnow < 5000) or (vsnow < -4000 and vsnow > -5000)) { - setprop("/it-autoflight/internal/captvs", 1000); - setprop("/it-autoflight/internal/captvsneg", -1000); - } else if ((vsnow >= 5000) or (vsnow < -5000)) { - setprop("/it-autoflight/internal/captvs", 1250); - setprop("/it-autoflight/internal/captvsneg", -1250); - } - var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); - var alt = getprop("/it-autoflight/internal/alt"); - var dif = calt - alt; - if (dif < getprop("/it-autoflight/internal/captvs") and dif > getprop("/it-autoflight/internal/captvsneg")) { - setprop("/it-autoflight/input/vert", 3); - setprop("/it-autoflight/output/thr-mode", 0); - } - var altinput = getprop("/it-autoflight/input/alt"); - setprop("/it-autoflight/internal/alt", altinput); + var vsnow = getprop("/it-autoflight/internal/vert-speed-fpm"); + if ((vsnow >= 0 and vsnow < 500) or (vsnow < 0 and vsnow > -500)) { + setprop("/it-autoflight/internal/captvs", 100); + setprop("/it-autoflight/internal/captvsneg", -100); + } else if ((vsnow >= 500 and vsnow < 1000) or (vsnow < -500 and vsnow > -1000)) { + setprop("/it-autoflight/internal/captvs", 150); + setprop("/it-autoflight/internal/captvsneg", -150); + } else if ((vsnow >= 1000 and vsnow < 1500) or (vsnow < -1000 and vsnow > -1500)) { + setprop("/it-autoflight/internal/captvs", 200); + setprop("/it-autoflight/internal/captvsneg", -200); + } else if ((vsnow >= 1500 and vsnow < 2000) or (vsnow < -1500 and vsnow > -2000)) { + setprop("/it-autoflight/internal/captvs", 300); + setprop("/it-autoflight/internal/captvsneg", -300); + } else if ((vsnow >= 2000 and vsnow < 3000) or (vsnow < -2000 and vsnow > -3000)) { + setprop("/it-autoflight/internal/captvs", 450); + setprop("/it-autoflight/internal/captvsneg", -450); + } else if ((vsnow >= 3000 and vsnow < 4000) or (vsnow < -3000 and vsnow > -4000)) { + setprop("/it-autoflight/internal/captvs", 650); + setprop("/it-autoflight/internal/captvsneg", -650); + } else if ((vsnow >= 4000 and vsnow < 5000) or (vsnow < -4000 and vsnow > -5000)) { + setprop("/it-autoflight/internal/captvs", 1000); + setprop("/it-autoflight/internal/captvsneg", -1000); + } else if ((vsnow >= 5000) or (vsnow < -5000)) { + setprop("/it-autoflight/internal/captvs", 1250); + setprop("/it-autoflight/internal/captvsneg", -1250); + } + var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); + var alt = getprop("/it-autoflight/internal/alt"); + var dif = calt - alt; + if (dif < getprop("/it-autoflight/internal/captvs") and dif > getprop("/it-autoflight/internal/captvsneg")) { + setprop("/it-autoflight/input/vert", 3); + setprop("/it-autoflight/output/thr-mode", 0); + } + var altinput = getprop("/it-autoflight/input/alt"); + setprop("/it-autoflight/internal/alt", altinput); } # Thrust Mode Selector var thrustmode = func { - var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); - var alt = getprop("/it-autoflight/internal/alt"); - var vertm = getprop("/it-autoflight/output/vert"); - if (vertm == 4) { - if (calt < alt) { - setprop("/it-autoflight/output/thr-mode", 2); - setprop("/it-autoflight/mode/thr", " PITCH"); - setprop("/it-autoflight/mode/vert", "SPD CLB"); - } else if (calt > alt) { - setprop("/it-autoflight/output/thr-mode", 1); - setprop("/it-autoflight/mode/thr", " PITCH"); - setprop("/it-autoflight/mode/vert", "SPD DES"); - } else { - setprop("/it-autoflight/output/thr-mode", 0); - setprop("/it-autoflight/mode/thr", "THRUST"); - setprop("/it-autoflight/input/vert", 3); + var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); + var alt = getprop("/it-autoflight/internal/alt"); + var vertm = getprop("/it-autoflight/output/vert"); + if (vertm == 4) { + if (calt < alt) { + setprop("/it-autoflight/output/thr-mode", 2); + setprop("/it-autoflight/mode/thr", " PITCH"); + setprop("/it-autoflight/mode/vert", "SPD CLB"); + } else if (calt > alt) { + setprop("/it-autoflight/output/thr-mode", 1); + setprop("/it-autoflight/mode/thr", " PITCH"); + setprop("/it-autoflight/mode/vert", "SPD DES"); + } else { + setprop("/it-autoflight/output/thr-mode", 0); + setprop("/it-autoflight/mode/thr", "THRUST"); + setprop("/it-autoflight/input/vert", 3); + } + } else if (vertm == 7) { + setprop("/it-autoflight/output/thr-mode", 2); + setprop("/it-autoflight/mode/thr", " PITCH"); + } else { + setprop("/it-autoflight/output/thr-mode", 0); + setprop("/it-autoflight/mode/thr", "THRUST"); + thrustmodet.stop(); } - } else if (vertm == 7) { - setprop("/it-autoflight/output/thr-mode", 2); - setprop("/it-autoflight/mode/thr", " PITCH"); - } else { - setprop("/it-autoflight/output/thr-mode", 0); - setprop("/it-autoflight/mode/thr", "THRUST"); - thrustmodet.stop(); - } } # Min and Max Pitch Reset var minmax = func { - var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); - var alt = getprop("/it-autoflight/internal/alt"); - var dif = calt - alt; - if (dif < 100 and dif > -100) { - setprop("/it-autoflight/internal/max-pitch", 8); - setprop("/it-autoflight/internal/min-pitch", -5); - var vertmode = getprop("/it-autoflight/output/vert"); - if (vertmode == 1 or vertmode == 2 or vertmode == 4 or vertmode == 5 or vertmode == 6 or vertmode == 7) { - # Do not change the vertical mode because we are not trying to capture altitude. - } else { - setprop("/it-autoflight/mode/vert", "ALT HLD"); - } - minmaxtimer.stop(); - } + var calt = getprop("/instrumentation/altimeter/indicated-altitude-ft"); + var alt = getprop("/it-autoflight/internal/alt"); + var dif = calt - alt; + if (dif < 100 and dif > -100) { + setprop("/it-autoflight/internal/max-pitch", 8); + setprop("/it-autoflight/internal/min-pitch", -5); + var vertmode = getprop("/it-autoflight/output/vert"); + if (vertmode == 1 or vertmode == 2 or vertmode == 4 or vertmode == 5 or vertmode == 6 or vertmode == 7) { + # Do not change the vertical mode because we are not trying to capture altitude. + } else { + setprop("/it-autoflight/mode/vert", "ALT HLD"); + } + minmaxtimer.stop(); + } } # Retard setlistener("/controls/flight/flaps", func { - var flapc = getprop("/controls/flight/flaps"); - var flapl = getprop("/it-autoflight/settings/land-flap"); - if (flapc >= flapl) { - retardt.start(); - } else { - retardt.stop(); - } + var flapc = getprop("/controls/flight/flaps"); + var flapl = getprop("/it-autoflight/settings/land-flap"); + if (flapc >= flapl) { + retardt.start(); + } else { + retardt.stop(); + } }); var retardchk = func { - if (getprop("/it-autoflight/settings/retard-enable") == 1) { - var altpos = getprop("/position/gear-agl-ft"); - var retardalt = getprop("/it-autoflight/settings/retard-ft"); - var aton = getprop("/it-autoflight/output/athr"); - if (altpos < retardalt) { - if (aton == 1) { - setprop("/it-autoflight/output/retard", 1); - setprop("/it-autoflight/mode/thr", "RETARD"); - atofft.start(); - } else { - setprop("/it-autoflight/output/retard", 0); - thrustmode(); - } - } - } + if (getprop("/it-autoflight/settings/retard-enable") == 1) { + var altpos = getprop("/position/gear-agl-ft"); + var retardalt = getprop("/it-autoflight/settings/retard-ft"); + var aton = getprop("/it-autoflight/output/athr"); + if (altpos < retardalt) { + if (aton == 1) { + setprop("/it-autoflight/output/retard", 1); + setprop("/it-autoflight/mode/thr", "RETARD"); + atofft.start(); + } else { + setprop("/it-autoflight/output/retard", 0); + thrustmode(); + } + } + } } var atoffchk = func{ - var gear1 = getprop("/gear/gear[1]/wow"); - var gear2 = getprop("/gear/gear[2]/wow"); - if (gear1 == 1 or gear2 == 1) { - setprop("/it-autoflight/input/athr", 0); - setprop("/controls/engines/engine[0]/throttle", 0); - setprop("/controls/engines/engine[1]/throttle", 0); - setprop("/controls/engines/engine[2]/throttle", 0); - setprop("/controls/engines/engine[3]/throttle", 0); - setprop("/controls/engines/engine[4]/throttle", 0); - setprop("/controls/engines/engine[5]/throttle", 0); - setprop("/controls/engines/engine[6]/throttle", 0); - setprop("/controls/engines/engine[7]/throttle", 0); - atofft.stop(); - } + var gear1 = getprop("/gear/gear[1]/wow"); + var gear2 = getprop("/gear/gear[2]/wow"); + if (gear1 == 1 or gear2 == 1) { + setprop("/it-autoflight/input/athr", 0); + setprop("/controls/engines/engine[0]/throttle", 0); + setprop("/controls/engines/engine[1]/throttle", 0); + setprop("/controls/engines/engine[2]/throttle", 0); + setprop("/controls/engines/engine[3]/throttle", 0); + setprop("/controls/engines/engine[4]/throttle", 0); + setprop("/controls/engines/engine[5]/throttle", 0); + setprop("/controls/engines/engine[6]/throttle", 0); + setprop("/controls/engines/engine[7]/throttle", 0); + atofft.stop(); + } } # For Canvas Nav Display. setlistener("/it-autoflight/input/hdg", func { - setprop("/autopilot/settings/heading-bug-deg", getprop("/it-autoflight/input/hdg")); + setprop("/autopilot/settings/heading-bug-deg", getprop("/it-autoflight/input/hdg")); }); -# TOGA -setlistener("/it-autoflight/input/toga", func { - if (getprop("/it-autoflight/input/toga") == 1) { - setprop("/it-autoflight/input/vert", 7); - setprop("/it-autoflight/output/loc-armed", 0); - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/input/toga", 0); - } -}); - -var togasel = func { - if ((getprop("/gear/gear[1]/wow") == 0) and (getprop("/gear/gear[2]/wow") == 0)) { - setprop("/it-autoflight/mode/vert", "G/A CLB"); - } else { - setprop("/it-autoflight/input/lat", 5); - setprop("/it-autoflight/mode/lat", "T/O"); - setprop("/it-autoflight/mode/vert", "T/O CLB"); - } -} - # LOC and G/S arming var update_arms = func { - update_locarmelec(); - update_apparmelec(); - - settimer(update_arms, 0.5); + update_locarmelec(); + update_apparmelec(); + settimer(update_arms, 0.5); } var update_locarmelec = func { - var loca = getprop("/it-autoflight/output/loc-armed"); - if (loca) { - locarmcheck(); - } else { - return 0; - } + var loca = getprop("/it-autoflight/output/loc-armed"); + if (loca) { + locarmcheck(); + } else { + return 0; + } } var update_apparmelec = func { - var appra = getprop("/it-autoflight/output/appr-armed"); - if (appra) { - apparmcheck(); - } else { - return 0; - } + var appra = getprop("/it-autoflight/output/appr-armed"); + if (appra) { + apparmcheck(); + } else { + return 0; + } } var locarmcheck = func { - var locdefl = getprop("instrumentation/nav/heading-needle-deflection-norm"); - if ((locdefl < 0.9233) and (getprop("instrumentation/nav/signal-quality-norm") > 0.99)) { - setprop("/it-autoflight/output/loc-armed", 0); - setprop("/it-autoflight/output/lat", 2); - setprop("/it-autoflight/mode/lat", "LOC"); - if (getprop("/it-autoflight/output/appr-armed") == 1) { - # Do nothing because G/S is armed + var locdefl = getprop("instrumentation/nav/heading-needle-deflection-norm"); + if ((locdefl < 0.9233) and (getprop("instrumentation/nav/signal-quality-norm") > 0.99)) { + setprop("/it-autoflight/output/loc-armed", 0); + setprop("/it-autoflight/output/lat", 2); + setprop("/it-autoflight/mode/lat", "LOC"); + if (getprop("/it-autoflight/output/appr-armed") == 1) { + # Do nothing because G/S is armed + } else { + setprop("/it-autoflight/mode/arm", " "); + } } else { - setprop("/it-autoflight/mode/arm", " "); + return 0; } - } else { - return 0; - } } var apparmcheck = func { - var signal = getprop("/instrumentation/nav/gs-needle-deflection-norm"); - if (signal <= -0.000000001) { - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/vert", 2); - setprop("/it-autoflight/mode/vert", "G/S"); - setprop("/it-autoflight/mode/arm", " "); - if (getprop("/it-autoflight/settings/land-enable") == 1){ - alandt.start(); + var signal = getprop("/instrumentation/nav/gs-needle-deflection-norm"); + if (signal <= -0.000000001) { + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/vert", 2); + setprop("/it-autoflight/mode/vert", "G/S"); + setprop("/it-autoflight/mode/arm", " "); + if (getprop("/it-autoflight/settings/land-enable") == 1){ + alandt.start(); + } + thrustmode(); + } else { + return 0; } - thrustmode(); - } else { - return 0; - } } # Autoland Stage 1 Logic (Land) var aland = func { - var ap1 = getprop("/it-autoflight/output/ap1"); - var ap2 = getprop("/it-autoflight/output/ap2"); - if (getprop("/position/gear-agl-ft") <= 100) { - if (ap1 or ap2) { - setprop("/it-autoflight/input/lat", 4); - setprop("/it-autoflight/input/vert", 6); - } else { - alandt.stop(); - alandt1.stop(); - } - } + var ap1 = getprop("/it-autoflight/output/ap1"); + var ap2 = getprop("/it-autoflight/output/ap2"); + if (getprop("/position/gear-agl-ft") <= 100) { + if (ap1 or ap2) { + setprop("/it-autoflight/input/lat", 4); + setprop("/it-autoflight/input/vert", 6); + } else { + alandt.stop(); + alandt1.stop(); + } + } } var aland1 = func { - var aglal = getprop("/position/gear-agl-ft"); - var flarealt = getprop("/it-autoflight/settings/flare-altitude"); - if (aglal <= flarealt and aglal > 5) { - setprop("/it-autoflight/mode/vert", "FLARE"); - setprop("/it-autoflight/autoland/target-vs", "-120"); - } - if ((getprop("/it-autoflight/output/ap1") == 0) and (getprop("/it-autoflight/output/ap2") == 0)) { - alandt.stop(); - alandt1.stop(); - setprop("/it-autoflight/output/loc-armed", 0); - setprop("/it-autoflight/output/lat", 2); - setprop("/it-autoflight/mode/lat", "LOC"); - setprop("/it-autoflight/output/appr-armed", 0); - setprop("/it-autoflight/output/vert", 2); - setprop("/it-autoflight/mode/vert", "G/S"); - setprop("/it-autoflight/mode/arm", " "); - } - var gear1 = getprop("/gear/gear[1]/wow"); - var gear2 = getprop("/gear/gear[2]/wow"); - if (gear1 == 1 or gear2 == 1) { - setprop("/it-autoflight/input/ap1", 0); - setprop("/it-autoflight/input/ap2", 0); - alandt1.stop(); - } + var aglal = getprop("/position/gear-agl-ft"); + var flarealt = getprop("/it-autoflight/settings/flare-altitude"); + if (aglal <= flarealt and aglal > 5) { + setprop("/it-autoflight/mode/vert", "FLARE"); + setprop("/it-autoflight/autoland/target-vs", "-120"); + } + if ((getprop("/it-autoflight/output/ap1") == 0) and (getprop("/it-autoflight/output/ap2") == 0)) { + alandt.stop(); + alandt1.stop(); + setprop("/it-autoflight/output/loc-armed", 0); + setprop("/it-autoflight/output/lat", 2); + setprop("/it-autoflight/mode/lat", "LOC"); + setprop("/it-autoflight/output/appr-armed", 0); + setprop("/it-autoflight/output/vert", 2); + setprop("/it-autoflight/mode/vert", "G/S"); + setprop("/it-autoflight/mode/arm", " "); + } + var gear1 = getprop("/gear/gear[1]/wow"); + var gear2 = getprop("/gear/gear[2]/wow"); + if (gear1 == 1 or gear2 == 1) { + setprop("/it-autoflight/input/ap1", 0); + setprop("/it-autoflight/input/ap2", 0); + alandt1.stop(); + } } # Autoland Stage 2 Logic (Rollout) - # CWS var cwsroll = func { var ail = getprop("/controls/flight/aileron"); @@ -598,15 +695,15 @@ var cwsroll = func { } var cwspitch = func { - var elv = getprop("/controls/flight/elevator"); - if (elv < 0.05 and elv > -0.05) { - if (getprop("/it-autoflight/internal/cwsp") == 0) { - setprop("/it-autoflight/internal/cws-pitch-deg", getprop("/orientation/pitch-deg")); + var elv = getprop("/controls/flight/elevator"); + if (elv < 0.05 and elv > -0.05) { + if (getprop("/it-autoflight/internal/cwsp") == 0) { + setprop("/it-autoflight/internal/cws-pitch-deg", getprop("/orientation/pitch-deg")); + } + setprop("/it-autoflight/internal/cwsp", 1); + } else { + setprop("/it-autoflight/internal/cwsp", 0); } - setprop("/it-autoflight/internal/cwsp", 1); - } else { - setprop("/it-autoflight/internal/cwsp", 0); - } } # Timers @@ -619,3 +716,6 @@ var alandt = maketimer(0.5, aland); var alandt1 = maketimer(0.5, aland1); var cwsrollt = maketimer(0.1, cwsroll); var cwspitcht = maketimer(0.1, cwspitch); +var reduct = maketimer(0.5, toga_reduc); +var latarmt = maketimer(0.5, latarms); +var fpa_calct = maketimer(0.1, fpa_calc); diff --git a/Nasal/systems.nas b/Nasal/systems.nas index d603b7d8..991b6fda 100644 --- a/Nasal/systems.nas +++ b/Nasal/systems.nas @@ -198,14 +198,6 @@ var aglgears = func { aglgears(); -setlistener("/instrumentation/altimeter/indicated-altitude-ft", func { - setprop("/instrumentation/altimeter/indicated-altitude-ft-pfd", getprop("/instrumentation/altimeter/indicated-altitude-ft") / 100); -}); - -setlistener("/instrumentation/vertical-speed-indicator/indicated-speed-fpm", func { - setprop("/instrumentation/vertical-speed-indicator/indicated-speed-fpm-pfd", getprop("/instrumentation/vertical-speed-indicator/indicated-speed-fpm") / 100); -}); - setlistener("/controls/parking-brake", func { if (getprop("/controls/parking-brake") == 1) { setprop("/electrical/switches/ext-pwr", 1); diff --git a/Systems/autopilot-dlg.xml b/Systems/autopilot-dlg.xml index b5834ee0..4aa8ab7d 100644 --- a/Systems/autopilot-dlg.xml +++ b/Systems/autopilot-dlg.xml @@ -757,12 +757,6 @@ <button> <pref-width>40</pref-width> <legend>FPA</legend> - <enable> - <equals> - <property>/it-autoflight/settings/disabled-button</property> - <value>blahblahblahblah</value> - </equals> - </enable> <binding> <command>property-assign</command> <property>/it-autoflight/input/vert</property> @@ -787,7 +781,7 @@ <text> <row>0</row> <col>0</col> - <label>ALT:</label> + <label>ALT: </label> </text> <button> @@ -871,7 +865,7 @@ <text> <row>0</row> <col>0</col> - <label>V/S:</label> + <label>V/S: </label> </text> <button> @@ -949,6 +943,90 @@ </button> </group> + <group> + <layout>table</layout> + + <text> + <row>0</row> + <col>0</col> + <label>FPA:</label> + </text> + + <button> + <row>0</row> + <col>1</col> + <pref-width>25</pref-width> + <pref-height>25</pref-height> + <legend><<</legend> + <binding> + <command>property-adjust</command> + <property>/it-autoflight/input/fpa</property> + <min>-9.9</min> + <max>9.9</max> + <step>-1</step> + <wrap>false</wrap> + </binding> + </button> + <button> + <row>0</row> + <col>2</col> + <pref-width>25</pref-width> + <pref-height>25</pref-height> + <legend><</legend> + <binding> + <command>property-adjust</command> + <property>/it-autoflight/input/fpa</property> + <min>-9.9</min> + <max>9.9</max> + <step>-0.1</step> + <wrap>false</wrap> + </binding> + </button> + + <input> + <row>0</row> + <col>3</col> + <pref-width>55</pref-width> + <property>/it-autoflight/input/fpa</property> + <live type="bool">true</live> + <binding> + <command>dialog-apply</command> + </binding> + </input> + + <button> + <row>0</row> + <col>4</col> + <pref-width>25</pref-width> + <pref-height>25</pref-height> + <legend>></legend> + <binding> + <command>property-adjust</command> + <property>/it-autoflight/input/fpa</property> + <min>-9.9</min> + <max>9.9</max> + <step>0.1</step> + <wrap>false</wrap> + </binding> + </button> + <button> + <row>0</row> + <col>5</col> + <halign>left</halign> + <pref-width>25</pref-width> + <pref-height>25</pref-height> + <legend>>></legend> + <binding> + <command>property-adjust</command> + <property>/it-autoflight/input/fpa</property> + <min>-9.9</min> + <max>9.9</max> + <step>1</step> + <wrap>false</wrap> + </binding> + </button> + </group> + </group> </PropertyList> diff --git a/Systems/engine-timing.xml b/Systems/engine-timing.xml index b7999f9d..d4828f52 100644 --- a/Systems/engine-timing.xml +++ b/Systems/engine-timing.xml @@ -115,5 +115,37 @@ </input> <output>/engines/engine[1]/fuel-flow_actual</output> </filter> + + <filter> + <name>Altitude PFD</name> + <type>gain</type> + <gain>1</gain> + <update-interval-secs type="double">0.05</update-interval-secs> + <input> + <expression> + <div> + <property>/instrumentation/altimeter/indicated-altitude-ft</property> + <value>100</value> + </div> + </expression> + </input> + <output>/instrumentation/altimeter/indicated-altitude-ft-pfd</output> + </filter> + + <filter> + <name>V/S PFD</name> + <type>gain</type> + <gain>1</gain> + <update-interval-secs type="double">0.05</update-interval-secs> + <input> + <expression> + <div> + <property>/instrumentation/vertical-speed-indicator/indicated-speed-fpm</property> + <value>100</value> + </div> + </expression> + </input> + <output>/instrumentation/vertical-speed-indicator/indicated-speed-fpm-pfd</output> + </filter> </PropertyList> diff --git a/Systems/it-autoflight.xml b/Systems/it-autoflight.xml index 81a1778f..16021bf0 100644 --- a/Systems/it-autoflight.xml +++ b/Systems/it-autoflight.xml @@ -77,7 +77,6 @@ </period> <gain>1.0</gain> </filter> - <filter> <name>LNAV HDG ERROR DEG</name> @@ -550,6 +549,44 @@ </config> </pid-controller> + <pid-controller> + <name>FPA HOLD</name> + <debug>false</debug> + <enable> + <condition> + <equals> + <property>/it-autoflight/output/vert</property> + <value>5</value> + </equals> + </condition> + </enable> + <input> + <property>/it-autoflight/internal/fpa</property> + </input> + <reference> + <property>/it-autoflight/input/fpa</property> + </reference> + <output> + <property>/it-autoflight/internal/target-pitch-deg</property> + </output> + <config> + <Kp> + <property>/it-autoflight/config/cmd/fpa</property> + </Kp> + <beta>1.0</beta> + <alpha>0.1</alpha> + <gamma>0.0</gamma> + <Ti>1.0</Ti> + <Td>0.00001</Td> + <u_min> + <value>-10</value> + </u_min> + <u_max> + <value>30</value> + </u_max> + </config> + </pid-controller> + <pi-simple-controller> <name>AUTOLAND VS HOLD</name> <debug>false</debug> @@ -726,6 +763,61 @@ </u_max> </config> </pid-controller> + + <pid-controller> + <name>TOGA SPEED BY PITCH</name> + <debug>false</debug> + <enable> + <condition> + <or> + <equals> + <property>/it-autoflight/output/vert</property> + <value>7</value> + </equals> + </or> + </condition> + </enable> + <input> + <property>/it-autoflight/internal/lookahead-10-sec-airspeed-kt</property> + </input> + <reference> + <condition> + <equals> + <property>/it-autoflight/mode/vert</property> + <value>T/O CLB</value> + </equals> + </condition> + <property>/it-autoflight/settings/togaspd</property> + </reference> + <reference> + <condition> + <equals> + <property>/it-autoflight/mode/vert</property> + <value>G/A CLB</value> + </equals> + </condition> + <property>/it-autoflight/input/spd-kts</property> + </reference> + <output> + <property>/it-autoflight/internal/target-pitch-deg</property> + </output> + <config> + <Kp> + <property>/it-autoflight/config/cmd/flch</property> + </Kp> + <beta>1.0</beta> + <alpha>0.1</alpha> + <gamma>0.0</gamma> + <Ti>10.0</Ti> + <Td>0.00001</Td> + <u_min> + <value>1.5</value> + </u_min> + <u_max> + <value>25.0</value> + </u_max> + </config> + </pid-controller> <pid-controller> <name>IT-CONTROLLER: PITCH</name> @@ -748,23 +840,8 @@ <property>/orientation/pitch-deg</property> </input> <reference> - <condition> - <not-equals> - <property>/it-autoflight/output/vert</property> - <value>7</value> - </not-equals> - </condition> <property>/it-autoflight/internal/target-pitch-deg</property> </reference> - <reference> - <condition> - <equals> - <property>/it-autoflight/output/vert</property> - <value>7</value> - </equals> - </condition> - <property>/it-autoflight/settings/toga-pitch</property> - </reference> <output> <property>/it-autoflight/internal/elevator-cmd</property> </output> @@ -1198,12 +1275,6 @@ <type>gain</type> <gain>1.0</gain> <input> - <condition> - <not-equals> - <property>/it-autoflight/output/vert</property> - <value>7</value> - </not-equals> - </condition> <expression> <dif> <property>/it-autoflight/internal/target-pitch-deg</property> @@ -1211,20 +1282,6 @@ </dif> </expression> </input> - <input> - <condition> - <equals> - <property>/it-autoflight/output/vert</property> - <value>7</value> - </equals> - </condition> - <expression> - <dif> - <property>/it-autoflight/settings/toga-pitch</property> - <property>/orientation/pitch-deg</property> - </dif> - </expression> - </input> <output>/it-autoflight/fd/pitch-bar</output> </filter>