1
0
Fork 0

Merge branch 'dev' into 3D

This commit is contained in:
legoboyvdlp R 2020-07-10 19:31:17 +01:00
commit a62cc291de
17 changed files with 758 additions and 852 deletions

View file

@ -4323,7 +4323,7 @@
<axis-alignment>xy-plane</axis-alignment> <axis-alignment>xy-plane</axis-alignment>
<type type="string">number-value</type> <type type="string">number-value</type>
<format type="string">%3.0f</format> <format type="string">%3.0f</format>
<property>it-autoflight/input/spd-kts</property> <property>it-autoflight/input/kts</property>
<truncate>false</truncate> <truncate>false</truncate>
<font type="string">led.txf</font> <font type="string">led.txf</font>
<draw-text>true</draw-text> <draw-text>true</draw-text>
@ -4349,7 +4349,7 @@
<axis-alignment>xy-plane</axis-alignment> <axis-alignment>xy-plane</axis-alignment>
<type type="string">number-value</type> <type type="string">number-value</type>
<format type="string">%0.3f</format> <format type="string">%0.3f</format>
<property>it-autoflight/input/spd-mach</property> <property>it-autoflight/input/mach</property>
<truncate>false</truncate> <truncate>false</truncate>
<font type="string">led.txf</font> <font type="string">led.txf</font>
<draw-text>true</draw-text> <draw-text>true</draw-text>

View file

@ -178,13 +178,6 @@ var cruiseFL_prog = props.globals.getNode("/FMGC/internal/cruise-fl-prog", 1);
var altitude = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1); var altitude = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1);
# TO PERF # TO PERF
var v1 = props.globals.getNode("/FMGC/internal/v1", 1);
var v1Set = props.globals.getNode("/FMGC/internal/v1-set", 1);
var vr = props.globals.getNode("/FMGC/internal/vr", 1);
var vrSet = props.globals.getNode("/FMGC/internal/vr-set", 1);
var v2 = props.globals.getNode("/FMGC/internal/v2", 1);
var v2Set = props.globals.getNode("/FMGC/internal/v2-set", 1);
var clbReducFt = props.globals.getNode("/systems/thrust/clbreduc-ft", 1); var clbReducFt = props.globals.getNode("/systems/thrust/clbreduc-ft", 1);
var reducFt = props.globals.getNode("/FMGC/internal/accel-agl-ft", 1); # It's not AGL anymore var reducFt = props.globals.getNode("/FMGC/internal/accel-agl-ft", 1); # It's not AGL anymore
var thrAccSet = props.globals.getNode("/MCDUC/thracc-set", 1); var thrAccSet = props.globals.getNode("/MCDUC/thracc-set", 1);
@ -2288,9 +2281,6 @@ var canvas_MCDU_base = {
pageSwitch[i].setBoolValue(1); pageSwitch[i].setBoolValue(1);
} }
me["Simple_L1"].setText(sprintf("%3.0f", v1.getValue()));
me["Simple_L2"].setText(sprintf("%3.0f", vr.getValue()));
me["Simple_L3"].setText(sprintf("%3.0f", v2.getValue()));
me["Simple_L4"].setText(sprintf("%3.0f", fmgc.FMGCInternal.transAlt)); me["Simple_L4"].setText(sprintf("%3.0f", fmgc.FMGCInternal.transAlt));
me["Simple_L5"].setText(sprintf("%3.0f", clbReducFt.getValue()) ~ sprintf("/%3.0f", reducFt.getValue())); me["Simple_L5"].setText(sprintf("%3.0f", clbReducFt.getValue()) ~ sprintf("/%3.0f", reducFt.getValue()));
me["Simple_L6"].setText(" TO DATA"); me["Simple_L6"].setText(" TO DATA");
@ -2338,27 +2328,33 @@ var canvas_MCDU_base = {
me["Simple_Title"].setText("TAKE OFF"); me["Simple_Title"].setText("TAKE OFF");
} }
if (v1Set.getValue() == 1) { if (fmgc.FMGCInternal.v1set) {
me["PERFTO_V1"].hide(); me["PERFTO_V1"].hide();
me["Simple_L1"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v1));
me["Simple_L1"].show(); me["Simple_L1"].show();
} else { } else {
me["PERFTO_V1"].show(); me["PERFTO_V1"].show();
me["Simple_L1"].hide(); me["Simple_L1"].hide();
} }
if (vrSet.getValue() == 1) {
if (fmgc.FMGCInternal.vrset) {
me["PERFTO_VR"].hide(); me["PERFTO_VR"].hide();
me["Simple_L2"].setText(sprintf("%3.0f", fmgc.FMGCInternal.vr));
me["Simple_L2"].show(); me["Simple_L2"].show();
} else { } else {
me["PERFTO_VR"].show(); me["PERFTO_VR"].show();
me["Simple_L2"].hide(); me["Simple_L2"].hide();
} }
if (v2Set.getValue() == 1) {
if (fmgc.FMGCInternal.v2set) {
me["PERFTO_V2"].hide(); me["PERFTO_V2"].hide();
me["Simple_L3"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
me["Simple_L3"].show(); me["Simple_L3"].show();
} else { } else {
me["PERFTO_V2"].show(); me["PERFTO_V2"].show();
me["Simple_L3"].hide(); me["Simple_L3"].hide();
} }
if (thrAccSet.getValue() == 1) { if (thrAccSet.getValue() == 1) {
me["Simple_L5"].setFontSize(normal); me["Simple_L5"].setFontSize(normal);
} else { } else {
@ -2531,9 +2527,9 @@ var canvas_MCDU_base = {
} else { } else {
me["Simple_L1"].setText("SELECTED"); me["Simple_L1"].setText("SELECTED");
if (getprop("/it-autoflight/input/kts-mach")) { if (getprop("/it-autoflight/input/kts-mach")) {
me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/spd-mach"))); me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/mach")));
} else { } else {
me["Simple_L4"].setText(sprintf(" %s", int(getprop("/it-autoflight/input/spd-kts")))); me["Simple_L4"].setText(sprintf(" %s", int(getprop("/it-autoflight/input/kts"))));
} }
me.fontLeft(0, 0, 0, default, 0, 0); me.fontLeft(0, 0, 0, default, 0, 0);
} }
@ -2685,9 +2681,9 @@ var canvas_MCDU_base = {
} else { } else {
me["Simple_L1"].setText("SELECTED"); me["Simple_L1"].setText("SELECTED");
if (getprop("/it-autoflight/input/kts-mach")) { if (getprop("/it-autoflight/input/kts-mach")) {
me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/spd-mach"))); me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/mach")));
} else { } else {
me["Simple_L4"].setText(sprintf(" %s", int(getprop("/it-autoflight/input/spd-kts")))); me["Simple_L4"].setText(sprintf(" %s", int(getprop("/it-autoflight/input/kts"))));
} }
me.fontLeft(0, 0, 0, default, 0, 0); me.fontLeft(0, 0, 0, default, 0, 0);
} }
@ -2846,9 +2842,9 @@ var canvas_MCDU_base = {
} else { } else {
me["Simple_L1"].setText("SELECTED"); me["Simple_L1"].setText("SELECTED");
if (getprop("/it-autoflight/input/kts-mach")) { if (getprop("/it-autoflight/input/kts-mach")) {
me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/spd-mach"))); me["Simple_L4"].setText(sprintf(" %3.3f", getprop("/it-autoflight/input/mach")));
} else { } else {
me["Simple_L4"].setText(sprintf(" %3.0f", getprop("/it-autoflight/input/spd-kts"))); me["Simple_L4"].setText(sprintf(" %3.0f", getprop("/it-autoflight/input/kts")));
} }
me.fontLeft(0, 0, 0, default, 0, 0); me.fontLeft(0, 0, 0, default, 0, 0);
} }

View file

@ -82,8 +82,8 @@ var FMGC_max_spd = props.globals.getNode("/FMGC/internal/maxspeed", 1);
var ind_spd_kt = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1); var ind_spd_kt = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1);
var ind_spd_mach = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1); var ind_spd_mach = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1);
var at_mach_mode = props.globals.getNode("/it-autoflight/input/kts-mach", 1); var at_mach_mode = props.globals.getNode("/it-autoflight/input/kts-mach", 1);
var at_input_spd_mach = props.globals.getNode("/it-autoflight/input/spd-mach", 1); var at_input_spd_mach = props.globals.getNode("/it-autoflight/input/mach", 1);
var at_input_spd_kts = props.globals.getNode("/it-autoflight/input/spd-kts", 1); var at_input_spd_kts = props.globals.getNode("/it-autoflight/input/kts", 1);
var fd_roll = props.globals.getNode("/it-autoflight/fd/roll-bar", 1); var fd_roll = props.globals.getNode("/it-autoflight/fd/roll-bar", 1);
var fd_pitch = props.globals.getNode("/it-autoflight/fd/pitch-bar", 1); var fd_pitch = props.globals.getNode("/it-autoflight/fd/pitch-bar", 1);
var decision = props.globals.getNode("/instrumentation/mk-viii/inputs/arinc429/decision-height", 1); var decision = props.globals.getNode("/instrumentation/mk-viii/inputs/arinc429/decision-height", 1);
@ -128,12 +128,6 @@ var ils1_crs_set = props.globals.getNode("/FMGC/internal/ils1crs-set/", 1);
var outer_marker = props.globals.getNode("/instrumentation/marker-beacon/outer", 1); var outer_marker = props.globals.getNode("/instrumentation/marker-beacon/outer", 1);
var middle_marker = props.globals.getNode("/instrumentation/marker-beacon/middle", 1); var middle_marker = props.globals.getNode("/instrumentation/marker-beacon/middle", 1);
var inner_marker = props.globals.getNode("/instrumentation/marker-beacon/inner", 1); var inner_marker = props.globals.getNode("/instrumentation/marker-beacon/inner", 1);
var v1 = props.globals.getNode("/FMGC/internal/v1", 1);
var v1_set = props.globals.getNode("/FMGC/internal/v1-set", 1);
var vr = props.globals.getNode("/FMGC/internal/vr", 1);
var vr_set = props.globals.getNode("/FMGC/internal/vr-set", 1);
var v2 = props.globals.getNode("/FMGC/internal/v2", 1);
var v2_set = props.globals.getNode("/FMGC/internal/v2-set", 1);
var flap_config = props.globals.getNode("/controls/flight/flaps-input", 1); var flap_config = props.globals.getNode("/controls/flight/flaps-input", 1);
var hundredAbove = props.globals.getNode("/instrumentation/pfd/hundred-above", 1); var hundredAbove = props.globals.getNode("/instrumentation/pfd/hundred-above", 1);
var minimum = props.globals.getNode("/instrumentation/pfd/minimums", 1); var minimum = props.globals.getNode("/instrumentation/pfd/minimums", 1);
@ -1331,8 +1325,8 @@ var canvas_PFD_1 = {
me["ASI_target"].hide(); me["ASI_target"].hide();
} }
if (v1_set.getValue() == '1') { if (fmgc.FMGCInternal.v1set) {
tgt_v1 = v1.getValue(); tgt_v1 = fmgc.FMGCInternal.v1;
if (tgt_v1 <= 30) { if (tgt_v1 <= 30) {
me.V1trgt = 0 - me.ASI; me.V1trgt = 0 - me.ASI;
} else if (tgt_v1 >= 420) { } else if (tgt_v1 >= 420) {
@ -1350,7 +1344,7 @@ var canvas_PFD_1 = {
} else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) { } else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) {
me["v1_group"].hide(); me["v1_group"].hide();
me["v1_text"].show(); me["v1_text"].show();
me["v1_text"].setText(sprintf("%3.0f", v1.getValue())); me["v1_text"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v1));
} else { } else {
me["v1_group"].hide(); me["v1_group"].hide();
me["v1_text"].hide(); me["v1_text"].hide();
@ -1360,8 +1354,8 @@ var canvas_PFD_1 = {
me["v1_text"].hide(); me["v1_text"].hide();
} }
if (vr_set.getValue() == '1') { if (fmgc.FMGCInternal.vrset) {
tgt_vr = vr.getValue(); tgt_vr = fmgc.FMGCInternal.vr;
if (tgt_vr <= 30) { if (tgt_vr <= 30) {
me.VRtrgt = 0 - me.ASI; me.VRtrgt = 0 - me.ASI;
} else if (tgt_vr >= 420) { } else if (tgt_vr >= 420) {
@ -1382,8 +1376,8 @@ var canvas_PFD_1 = {
me["vr_speed"].hide(); me["vr_speed"].hide();
} }
if (v2_set.getValue() == '1') { if (fmgc.FMGCInternal.v2set) {
tgt_v2 = v2.getValue(); tgt_v2 = fmgc.FMGCInternal.v2;
if (tgt_v2 <= 30) { if (tgt_v2 <= 30) {
me.V2trgt = 0 - me.ASI; me.V2trgt = 0 - me.ASI;
} else if (tgt_v2 >= 420) { } else if (tgt_v2 >= 420) {
@ -1397,10 +1391,10 @@ var canvas_PFD_1 = {
if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDv2trgtdiff >= -42 and me.SPDv2trgtdiff <= 42) { if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDv2trgtdiff >= -42 and me.SPDv2trgtdiff <= 42) {
me["ASI_target"].show(); me["ASI_target"].show();
me["ASI_target"].setTranslation(0, me.V2trgt * -6.6); me["ASI_target"].setTranslation(0, me.V2trgt * -6.6);
me["ASI_digit_UP"].setText(sprintf("%3.0f", v2.getValue())); me["ASI_digit_UP"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
} else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) { } else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) {
me["ASI_target"].hide(); me["ASI_target"].hide();
me["ASI_digit_UP"].setText(sprintf("%3.0f", v2.getValue())); me["ASI_digit_UP"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
} }
} }
@ -2070,8 +2064,8 @@ var canvas_PFD_2 = {
me["ASI_target"].hide(); me["ASI_target"].hide();
} }
if (v1_set.getValue() == '1') { if (fmgc.FMGCInternal.v1set) {
tgt_v1 = v1.getValue(); tgt_v1 = fmgc.FMGCInternal.v1;
if (tgt_v1 <= 30) { if (tgt_v1 <= 30) {
me.V1trgt = 0 - me.ASI; me.V1trgt = 0 - me.ASI;
} else if (tgt_v1 >= 420) { } else if (tgt_v1 >= 420) {
@ -2089,7 +2083,7 @@ var canvas_PFD_2 = {
} else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) { } else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) {
me["v1_group"].hide(); me["v1_group"].hide();
me["v1_text"].show(); me["v1_text"].show();
me["v1_text"].setText(sprintf("%3.0f", v1.getValue())); me["v1_text"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v1));
} else { } else {
me["v1_group"].hide(); me["v1_group"].hide();
me["v1_text"].hide(); me["v1_text"].hide();
@ -2099,8 +2093,8 @@ var canvas_PFD_2 = {
me["v1_text"].hide(); me["v1_text"].hide();
} }
if (vr_set.getValue() == '1') { if (fmgc.FMGCInternal.vrset) {
tgt_vr = vr.getValue(); tgt_vr = fmgc.FMGCInternal.vr;
if (tgt_vr <= 30) { if (tgt_vr <= 30) {
me.VRtrgt = 0 - me.ASI; me.VRtrgt = 0 - me.ASI;
} else if (tgt_vr >= 420) { } else if (tgt_vr >= 420) {
@ -2121,8 +2115,8 @@ var canvas_PFD_2 = {
me["vr_speed"].hide(); me["vr_speed"].hide();
} }
if (v2_set.getValue() == '1') { if (fmgc.FMGCInternal.v2set) {
tgt_v2 = v2.getValue(); tgt_v2 = fmgc.FMGCInternal.v2;
if (tgt_v2 <= 30) { if (tgt_v2 <= 30) {
me.V2trgt = 0 - me.ASI; me.V2trgt = 0 - me.ASI;
} else if (tgt_v2 >= 420) { } else if (tgt_v2 >= 420) {
@ -2136,10 +2130,10 @@ var canvas_PFD_2 = {
if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDv2trgtdiff >= -42 and me.SPDv2trgtdiff <= 42) { if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDv2trgtdiff >= -42 and me.SPDv2trgtdiff <= 42) {
me["ASI_target"].show(); me["ASI_target"].show();
me["ASI_target"].setTranslation(0, me.V2trgt * -6.6); me["ASI_target"].setTranslation(0, me.V2trgt * -6.6);
me["ASI_digit_UP"].setText(sprintf("%3.0f", v2.getValue())); me["ASI_digit_UP"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
} else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) { } else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) {
me["ASI_target"].hide(); me["ASI_target"].hide();
me["ASI_digit_UP"].setText(sprintf("%3.0f", v2.getValue())); me["ASI_digit_UP"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
} }
} }

View file

@ -2,37 +2,37 @@
# Copyright (c) 2020 Josh Davidson (Octal450), Jonathan Redpath (legoboyvdlp) # Copyright (c) 2020 Josh Davidson (Octal450), Jonathan Redpath (legoboyvdlp)
# Nodes # Nodes
var fd1 = props.globals.getNode("it-autoflight/output/fd1", 1); var fd1 = props.globals.getNode("/it-autoflight/output/fd1", 1);
var fd2 = props.globals.getNode("it-autoflight/output/fd2", 1); var fd2 = props.globals.getNode("/it-autoflight/output/fd2", 1);
var ap1 = props.globals.getNode("it-autoflight/output/ap1", 1); var ap1 = props.globals.getNode("/it-autoflight/output/ap1", 1);
var ap2 = props.globals.getNode("it-autoflight/output/ap2", 1); var ap2 = props.globals.getNode("/it-autoflight/output/ap2", 1);
var athr = props.globals.getNode("it-autoflight/output/athr", 1); var athr = props.globals.getNode("/it-autoflight/output/athr", 1);
var fd1Input = props.globals.getNode("it-autoflight/input/fd1", 1); var fd1Input = props.globals.getNode("/it-autoflight/input/fd1", 1);
var fd2Input = props.globals.getNode("it-autoflight/input/fd2", 1); var fd2Input = props.globals.getNode("/it-autoflight/input/fd2", 1);
var ap1Input = props.globals.getNode("it-autoflight/input/ap1", 1); var ap1Input = props.globals.getNode("/it-autoflight/input/ap1", 1);
var ap2Input = props.globals.getNode("it-autoflight/input/ap2", 1); var ap2Input = props.globals.getNode("/it-autoflight/input/ap2", 1);
var athrInput = props.globals.getNode("it-autoflight/input/athr", 1); var athrInput = props.globals.getNode("/it-autoflight/input/athr", 1);
var ktsMach = props.globals.getNode("it-autoflight/input/kts-mach", 1); var ktsMach = props.globals.getNode("/it-autoflight/input/kts-mach", 1);
var iasSet = props.globals.getNode("it-autoflight/input/spd-kts", 1); var iasSet = props.globals.getNode("/it-autoflight/input/kts", 1);
var machSet = props.globals.getNode("it-autoflight/input/spd-mach", 1); var machSet = props.globals.getNode("/it-autoflight/input/mach", 1);
var hdgSet = props.globals.getNode("it-autoflight/input/hdg", 1); var hdgSet = props.globals.getNode("/it-autoflight/input/hdg", 1);
var altSet = props.globals.getNode("it-autoflight/input/alt", 1); var altSet = props.globals.getNode("/it-autoflight/input/alt", 1);
var altSetMode = props.globals.getNode("it-autoflight/config/altitude-dial-mode", 1); var altSetMode = props.globals.getNode("/it-autoflight/config/altitude-dial-mode", 1);
var vsSet = props.globals.getNode("it-autoflight/input/vs", 1); var vsSet = props.globals.getNode("/it-autoflight/input/vs", 1);
var fpaSet = props.globals.getNode("it-autoflight/input/fpa", 1); var fpaSet = props.globals.getNode("/it-autoflight/input/fpa", 1);
var iasNow = props.globals.getNode("instrumentation/airspeed-indicator/indicated-speed-kt", 1); var iasNow = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1);
var machNow = props.globals.getNode("instrumentation/airspeed-indicator/indicated-mach", 1); var machNow = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1);
var spdManaged = props.globals.getNode("it-autoflight/input/spd-managed", 1); var spdManaged = props.globals.getNode("/it-autoflight/input/spd-managed", 1);
var showHDG = props.globals.getNode("it-autoflight/custom/show-hdg", 1); var showHDG = props.globals.getNode("/it-autoflight/custom/show-hdg", 1);
var trkFpaSW = props.globals.getNode("it-autoflight/custom/trk-fpa", 1); var trkFpaSW = props.globals.getNode("/it-autoflight/custom/trk-fpa", 1);
var latMode = props.globals.getNode("it-autoflight/output/lat", 1); var latMode = props.globals.getNode("/it-autoflight/output/lat", 1);
var vertMode = props.globals.getNode("it-autoflight/output/vert", 1); var vertMode = props.globals.getNode("/it-autoflight/output/vert", 1);
var fpaModeInput = props.globals.getNode("it-autoflight/input/fpa", 1); var fpaModeInput = props.globals.getNode("/it-autoflight/input/fpa", 1);
var latModeInput = props.globals.getNode("it-autoflight/input/lat", 1); var latModeInput = props.globals.getNode("/it-autoflight/input/lat", 1);
var vertModeInput = props.globals.getNode("it-autoflight/input/vert", 1); var vertModeInput = props.globals.getNode("/it-autoflight/input/vert", 1);
var vsModeInput = props.globals.getNode("it-autoflight/input/vs", 1); var vsModeInput = props.globals.getNode("/it-autoflight/input/vs", 1);
var locArm = props.globals.getNode("it-autoflight/output/loc-armed", 1); var locArm = props.globals.getNode("/it-autoflight/output/loc-armed", 1);
var apprArm = props.globals.getNode("it-autoflight/output/appr-armed", 1); var apprArm = props.globals.getNode("/it-autoflight/output/appr-armed", 1);
var FCUworkingNode = props.globals.initNode("/FMGC/FCU-working", 0, "BOOL"); var FCUworkingNode = props.globals.initNode("/FMGC/FCU-working", 0, "BOOL");
var FCU = { var FCU = {

View file

@ -4,55 +4,18 @@
# Initialize all used variables and property nodes # Initialize all used variables and property nodes
# Sim # Sim
var Velocities = { var Controls = {
airspeedKt: props.globals.getNode("velocities/airspeed-kt", 1), # Only used for gain scheduling aileron: props.globals.getNode("/controls/flight/aileron", 1),
groundspeedKt: props.globals.getNode("velocities/groundspeed-kt", 1), elevator: props.globals.getNode("/controls/flight/elevator", 1),
groundspeedMps: 0, rudder: props.globals.getNode("/controls/flight/rudder", 1),
indicatedAirspeedKt: props.globals.getNode("instrumentation/airspeed-indicator/indicated-speed-kt", 1),
indicatedMach: props.globals.getNode("instrumentation/airspeed-indicator/indicated-mach", 1),
trueAirspeedKt: props.globals.getNode("instrumentation/airspeed-indicator/true-speed-kt", 1),
trueAirspeedKtTemp: 0,
};
var Position = {
gearAglFtTemp: 0,
gearAglFt: props.globals.getNode("position/gear-agl-ft", 1),
indicatedAltitudeFt: props.globals.getNode("instrumentation/altimeter/indicated-altitude-ft", 1),
indicatedAltitudeFtTemp: 0,
};
var Gear = {
wow0: props.globals.getNode("gear/gear[0]/wow", 1),
wow1: props.globals.getNode("gear/gear[1]/wow", 1),
wow1Temp: 1,
wow2: props.globals.getNode("gear/gear[2]/wow", 1),
wow2Temp: 1,
};
var Control = {
aileron: props.globals.getNode("controls/flight/aileron", 1),
elevator: props.globals.getNode("controls/flight/elevator", 1),
rudder: props.globals.getNode("controls/flight/rudder", 1),
};
var Radio = {
gsDefl: [props.globals.getNode("instrumentation/nav[0]/gs-needle-deflection-norm", 1), props.globals.getNode("instrumentation/nav[1]/gs-needle-deflection-norm", 1)],
gsDeflTemp: 0,
inRange: [props.globals.getNode("instrumentation/nav[0]/in-range", 1), props.globals.getNode("instrumentation/nav[1]/in-range", 1)],
inRangeTemp: 0,
locDefl: [props.globals.getNode("instrumentation/nav[0]/heading-needle-deflection-norm", 1), props.globals.getNode("instrumentation/nav[1]/heading-needle-deflection-norm", 1)],
locDeflTemp: 0,
radioSel: 0,
signalQuality: [props.globals.getNode("instrumentation/nav[0]/signal-quality-norm", 1), props.globals.getNode("instrumentation/nav[1]/signal-quality-norm", 1)],
signalQualityTemp: 0,
}; };
var FPLN = { var FPLN = {
active: props.globals.getNode("/FMGC/flightplan[2]/active", 1), active: props.globals.getNode("/FMGC/flightplan[2]/active", 1),
activeTemp: 0, activeTemp: 0,
currentCourse: 0, currentCourse: 0,
currentWP: props.globals.getNode("/FMGC/flightplan[2]/current-wp", 1), currentWp: props.globals.getNode("/FMGC/flightplan[2]/current-wp", 1),
currentWPTemp: 0, currentWpTemp: 0,
deltaAngle: 0, deltaAngle: 0,
deltaAngleRad: 0, deltaAngleRad: 0,
distCoeff: 0, distCoeff: 0,
@ -67,12 +30,49 @@ var FPLN = {
wpFlyTo: 0, wpFlyTo: 0,
}; };
var Gear = {
wow0: props.globals.getNode("/gear/gear[0]/wow", 1),
wow1: props.globals.getNode("/gear/gear[1]/wow", 1),
wow1Temp: 1,
wow2: props.globals.getNode("/gear/gear[2]/wow", 1),
wow2Temp: 1,
};
var Misc = { var Misc = {
acEss: props.globals.getNode("systems/electrical/bus/ac-ess", 1), acEss: props.globals.getNode("/systems/electrical/bus/ac-ess", 1),
elapsedSec: props.globals.getNode("sim/time/elapsed-sec", 1), elapsedSec: props.globals.getNode("/sim/time/elapsed-sec", 1),
fbwLaw: props.globals.getNode("it-fbw/law", 1), fbwLaw: props.globals.getNode("/it-fbw/law", 1),
flapNorm: props.globals.getNode("surface-positions/flap-pos-norm", 1), flapNorm: props.globals.getNode("/surface-positions/flap-pos-norm", 1),
pfdHeadingScale: props.globals.getNode("instrumentation/pfd/heading-scale", 1), pfdHeadingScale: props.globals.getNode("/instrumentation/pfd/heading-scale", 1),
};
var Position = {
gearAglFtTemp: 0,
gearAglFt: props.globals.getNode("/position/gear-agl-ft", 1),
indicatedAltitudeFt: props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1),
indicatedAltitudeFtTemp: 0,
};
var Radio = {
gsDefl: [props.globals.getNode("/instrumentation/nav[0]/gs-needle-deflection-norm", 1), props.globals.getNode("instrumentation/nav[1]/gs-needle-deflection-norm", 1)],
gsDeflTemp: 0,
inRange: [props.globals.getNode("/instrumentation/nav[0]/in-range", 1), props.globals.getNode("instrumentation/nav[1]/in-range", 1)],
inRangeTemp: 0,
locDefl: [props.globals.getNode("/instrumentation/nav[0]/heading-needle-deflection-norm", 1), props.globals.getNode("instrumentation/nav[1]/heading-needle-deflection-norm", 1)],
locDeflTemp: 0,
radioSel: 0,
signalQuality: [props.globals.getNode("/instrumentation/nav[0]/signal-quality-norm", 1), props.globals.getNode("instrumentation/nav[1]/signal-quality-norm", 1)],
signalQualityTemp: 0,
};
var Velocities = {
airspeedKt: props.globals.getNode("/velocities/airspeed-kt", 1), # Only used for gain scheduling
groundspeedKt: props.globals.getNode("/velocities/groundspeed-kt", 1),
groundspeedMps: 0,
indicatedAirspeedKt: props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1),
indicatedMach: props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1),
trueAirspeedKt: props.globals.getNode("/instrumentation/airspeed-indicator/true-speed-kt", 1),
trueAirspeedKtTemp: 0,
}; };
# IT-AUTOFLIGHT # IT-AUTOFLIGHT
@ -87,17 +87,19 @@ var Input = {
fd1: props.globals.initNode("/it-autoflight/input/fd1", 1, "BOOL"), fd1: props.globals.initNode("/it-autoflight/input/fd1", 1, "BOOL"),
fd2: props.globals.initNode("/it-autoflight/input/fd2", 1, "BOOL"), fd2: props.globals.initNode("/it-autoflight/input/fd2", 1, "BOOL"),
fpa: props.globals.initNode("/it-autoflight/input/fpa", 0, "DOUBLE"), fpa: props.globals.initNode("/it-autoflight/input/fpa", 0, "DOUBLE"),
fpaAbs: props.globals.initNode("/it-autoflight/input/fpa-abs", 0, "DOUBLE"), # Set by property rule
hdg: props.globals.initNode("/it-autoflight/input/hdg", 0, "INT"), hdg: props.globals.initNode("/it-autoflight/input/hdg", 0, "INT"),
hdgCalc: 0, hdgCalc: 0,
ias: props.globals.initNode("/it-autoflight/input/spd-kts", 250, "INT"), kts: props.globals.initNode("/it-autoflight/input/kts", 100, "INT"),
ktsMach: props.globals.initNode("/it-autoflight/input/kts-mach", 0, "BOOL"), ktsMach: props.globals.initNode("/it-autoflight/input/kts-mach", 0, "BOOL"),
lat: props.globals.initNode("/it-autoflight/input/lat", 5, "INT"), lat: props.globals.initNode("/it-autoflight/input/lat", 5, "INT"),
latTemp: 5, latTemp: 5,
mach: props.globals.initNode("/it-autoflight/input/spd-mach", 0.5, "DOUBLE"), mach: props.globals.initNode("/it-autoflight/input/mach", 0.5, "DOUBLE"),
toga: props.globals.initNode("/it-autoflight/input/toga", 0, "BOOL"), toga: props.globals.initNode("/it-autoflight/input/toga", 0, "BOOL"),
trk: props.globals.initNode("/it-autoflight/input/trk", 0, "BOOL"), trk: props.globals.initNode("/it-autoflight/input/trk", 0, "BOOL"),
trueCourse: props.globals.initNode("/it-autoflight/input/true-course", 0, "BOOL"), trueCourse: props.globals.initNode("/it-autoflight/input/true-course", 0, "BOOL"),
vs: props.globals.initNode("/it-autoflight/input/vs", 0, "INT"), vs: props.globals.initNode("/it-autoflight/input/vs", 0, "INT"),
vsAbs: props.globals.initNode("/it-autoflight/input/vs-abs", 0, "INT"), # Set by property rule
vert: props.globals.initNode("/it-autoflight/input/vert", 7, "INT"), vert: props.globals.initNode("/it-autoflight/input/vert", 7, "INT"),
vertTemp: 7, vertTemp: 7,
}; };
@ -110,17 +112,15 @@ var Internal = {
altPredicted: props.globals.initNode("/it-autoflight/internal/altitude-predicted", 0, "DOUBLE"), altPredicted: props.globals.initNode("/it-autoflight/internal/altitude-predicted", 0, "DOUBLE"),
bankLimit: props.globals.initNode("/it-autoflight/internal/bank-limit", 30, "INT"), bankLimit: props.globals.initNode("/it-autoflight/internal/bank-limit", 30, "INT"),
bankLimitAuto: 30, bankLimitAuto: 30,
captVS: 0, captVs: 0,
driftAngle: props.globals.initNode("/it-autoflight/internal/drift-angle-deg", 0, "DOUBLE"), driftAngle: props.globals.initNode("/it-autoflight/internal/drift-angle-deg", 0, "DOUBLE"),
flchActive: 0, flchActive: 0,
fpa: props.globals.initNode("/it-autoflight/internal/fpa", 0, "DOUBLE"), fpa: props.globals.initNode("/it-autoflight/internal/fpa", 0, "DOUBLE"),
hdg: props.globals.initNode("/it-autoflight/internal/heading-deg", 0, "DOUBLE"),
hdgErrorDeg: props.globals.initNode("/it-autoflight/internal/heading-error-deg", 0, "DOUBLE"), hdgErrorDeg: props.globals.initNode("/it-autoflight/internal/heading-error-deg", 0, "DOUBLE"),
hdgPredicted: props.globals.initNode("/it-autoflight/internal/heading-predicted", 0, "DOUBLE"), hdgPredicted: props.globals.initNode("/it-autoflight/internal/heading-predicted", 0, "DOUBLE"),
lnavAdvanceNm: props.globals.initNode("/it-autoflight/internal/lnav-advance-nm", 0, "DOUBLE"), lnavAdvanceNm: props.globals.initNode("/it-autoflight/internal/lnav-advance-nm", 0, "DOUBLE"),
minVS: props.globals.initNode("/it-autoflight/internal/min-vs", -500, "INT"), minVs: props.globals.initNode("/it-autoflight/internal/min-vs", -500, "INT"),
maxVS: props.globals.initNode("/it-autoflight/internal/max-vs", 500, "INT"), maxVs: props.globals.initNode("/it-autoflight/internal/max-vs", 500, "INT"),
trk: props.globals.initNode("/it-autoflight/internal/track-deg", 0, "DOUBLE"),
vs: props.globals.initNode("/it-autoflight/internal/vert-speed-fpm", 0, "DOUBLE"), vs: props.globals.initNode("/it-autoflight/internal/vert-speed-fpm", 0, "DOUBLE"),
vsTemp: 0, vsTemp: 0,
}; };
@ -155,7 +155,7 @@ var Text = {
}; };
var Setting = { var Setting = {
reducAglFt: props.globals.initNode("/it-autoflight/settings/accel-agl-ft", 1500, "INT"), # Changable from MCDU #eventually set to 1500 above runway reducAglFt: props.globals.initNode("/it-autoflight/settings/accel-agl-ft", 1500, "INT"), # Changable from MCDU, eventually set to 1500 above runway
}; };
var Sound = { var Sound = {
@ -166,12 +166,12 @@ var Sound = {
# A3XX Custom # A3XX Custom
var Custom = { var Custom = {
apFdOn: 0, apFdOn: 0,
hdgTime: props.globals.getNode("modes/fcu/hdg-time", 1), hdgTime: props.globals.getNode("/modes/fcu/hdg-time", 1),
ndTrkSel: [props.globals.getNode("instrumentation/efis[0]/trk-selected", 1), props.globals.getNode("instrumentation/efis[1]/trk-selected", 1)], ndTrkSel: [props.globals.getNode("/instrumentation/efis[0]/trk-selected", 1), props.globals.getNode("/instrumentation/efis[1]/trk-selected", 1)],
showHdg: props.globals.initNode("/it-autoflight/custom/show-hdg", 1, "BOOL"), showHdg: props.globals.initNode("/it-autoflight/custom/show-hdg", 1, "BOOL"),
trkFpa: props.globals.initNode("/it-autoflight/custom/trk-fpa", 0, "BOOL"), trkFpa: props.globals.initNode("/it-autoflight/custom/trk-fpa", 0, "BOOL"),
Input: { Input: {
spdManaged: props.globals.getNode("it-autoflight/input/spd-managed", 1), spdManaged: props.globals.getNode("/it-autoflight/input/spd-managed", 1),
}, },
Output: { Output: {
fmaPower: props.globals.initNode("/it-autoflight/output/fma-pwr", 0, "BOOL"), fmaPower: props.globals.initNode("/it-autoflight/output/fma-pwr", 0, "BOOL"),
@ -180,7 +180,7 @@ var Custom = {
athrOff: props.globals.initNode("/it-autoflight/sound/athrsound", 0, "BOOL"), athrOff: props.globals.initNode("/it-autoflight/sound/athrsound", 0, "BOOL"),
enableAthrOff: 0, enableAthrOff: 0,
}, },
ThrLock: props.globals.getNode("systems/thrust/thr-locked", 1) ThrLock: props.globals.getNode("/systems/thrust/thr-locked", 1)
}; };
var ITAF = { var ITAF = {
@ -215,13 +215,13 @@ var ITAF = {
Output.thrMode.setValue(0); Output.thrMode.setValue(0);
Output.lat.setValue(9); Output.lat.setValue(9);
Output.vert.setValue(9); Output.vert.setValue(9);
Internal.minVS.setValue(-500); Internal.minVs.setValue(-500);
Internal.maxVS.setValue(500); Internal.maxVs.setValue(500);
Internal.bankLimit.setValue(30); Internal.bankLimit.setValue(30);
Internal.bankLimitAuto = 30; Internal.bankLimitAuto = 30;
Internal.alt.setValue(10000); Internal.alt.setValue(10000);
Internal.altCaptureActive = 0; Internal.altCaptureActive = 0;
Input.ias.setValue(100); Input.kts.setValue(100);
Input.mach.setValue(0.5); Input.mach.setValue(0.5);
Text.thr.setValue("THRUST"); Text.thr.setValue("THRUST");
Text.arm.setValue(" "); Text.arm.setValue(" ");
@ -304,9 +304,9 @@ var ITAF = {
Internal.altDiff = Internal.altTemp - Position.indicatedAltitudeFtTemp; Internal.altDiff = Internal.altTemp - Position.indicatedAltitudeFtTemp;
if (Output.vertTemp != 0 and Output.vertTemp != 2 and Output.vertTemp != 6 and Output.vertTemp != 9) { if (Output.vertTemp != 0 and Output.vertTemp != 2 and Output.vertTemp != 6 and Output.vertTemp != 9) {
Internal.captVS = math.clamp(math.round(abs(Internal.vs.getValue()) / 5, 100), 50, 2500); # Capture limits Internal.captVs = math.clamp(math.round(abs(Internal.vs.getValue()) / 5, 100), 50, 2500); # Capture limits
Custom.apFdOn = Output.ap1Temp or Output.ap2Temp or Output.fd1.getBoolValue() or Output.fd2.getBoolValue(); Custom.apFdOn = Output.ap1Temp or Output.ap2Temp or Output.fd1.getBoolValue() or Output.fd2.getBoolValue();
if (abs(Internal.altDiff) <= Internal.captVS and !Gear.wow1Temp and !Gear.wow2Temp and Custom.apFdOn) { if (abs(Internal.altDiff) <= Internal.captVs and !Gear.wow1Temp and !Gear.wow2Temp and Custom.apFdOn) {
if (Internal.altTemp >= Position.indicatedAltitudeFtTemp and Internal.vsTemp >= -25) { # Don't capture if we are going the wrong way if (Internal.altTemp >= Position.indicatedAltitudeFtTemp and Internal.vsTemp >= -25) { # Don't capture if we are going the wrong way
me.setVertMode(3); me.setVertMode(3);
} else if (Internal.altTemp < Position.indicatedAltitudeFtTemp and Internal.vsTemp <= 25) { # Don't capture if we are going the wrong way } else if (Internal.altTemp < Position.indicatedAltitudeFtTemp and Internal.vsTemp <= 25) { # Don't capture if we are going the wrong way
@ -366,7 +366,7 @@ var ITAF = {
# Misc # Misc
if (Output.ap1Temp == 1 or Output.ap2Temp == 1) { # Trip AP off if (Output.ap1Temp == 1 or Output.ap2Temp == 1) { # Trip AP off
if (abs(Control.aileron.getValue()) >= 0.2 or abs(Control.elevator.getValue()) >= 0.2 or abs(Control.rudder.getValue()) >= 0.2) { if (abs(Controls.aileron.getValue()) >= 0.2 or abs(Controls.elevator.getValue()) >= 0.2 or abs(Controls.rudder.getValue()) >= 0.2) {
fcu.apOff("hard", 0); fcu.apOff("hard", 0);
} }
} }
@ -375,7 +375,7 @@ var ITAF = {
Input.bankLimitSWTemp = Input.bankLimitSW.getValue(); Input.bankLimitSWTemp = Input.bankLimitSW.getValue();
Velocities.trueAirspeedKtTemp = Velocities.trueAirspeedKt.getValue(); Velocities.trueAirspeedKtTemp = Velocities.trueAirspeedKt.getValue();
FPLN.activeTemp = FPLN.active.getValue(); FPLN.activeTemp = FPLN.active.getValue();
FPLN.currentWPTemp = FPLN.currentWP.getValue(); FPLN.currentWpTemp = FPLN.currentWp.getValue();
# Bank Limit # Bank Limit
if (Velocities.trueAirspeedKtTemp >= 420) { if (Velocities.trueAirspeedKtTemp >= 420) {
@ -397,14 +397,14 @@ var ITAF = {
# Waypoint Advance Logic # Waypoint Advance Logic
if (flightPlanController.num[2].getValue() > 0 and FPLN.activeTemp == 1) { if (flightPlanController.num[2].getValue() > 0 and FPLN.activeTemp == 1) {
if ((FPLN.currentWPTemp + 1) < flightPlanController.num[2].getValue()) { if ((FPLN.currentWpTemp + 1) < flightPlanController.num[2].getValue()) {
Velocities.groundspeedMps = Velocities.groundspeedKt.getValue() * 0.5144444444444; Velocities.groundspeedMps = Velocities.groundspeedKt.getValue() * 0.5144444444444;
FPLN.wpFlyFrom = FPLN.currentWPTemp; FPLN.wpFlyFrom = FPLN.currentWpTemp;
if (FPLN.wpFlyFrom < 0) { if (FPLN.wpFlyFrom < 0) {
FPLN.wpFlyFrom = 0; FPLN.wpFlyFrom = 0;
} }
FPLN.currentCourse = fmgc.wpCourse[2][FPLN.wpFlyFrom].getValue(); FPLN.currentCourse = fmgc.wpCourse[2][FPLN.wpFlyFrom].getValue();
FPLN.wpFlyTo = FPLN.currentWPTemp + 1; FPLN.wpFlyTo = FPLN.currentWpTemp + 1;
FPLN.nextCourse = fmgc.wpCourse[2][FPLN.wpFlyTo].getValue(); FPLN.nextCourse = fmgc.wpCourse[2][FPLN.wpFlyTo].getValue();
FPLN.maxBankLimit = Internal.bankLimit.getValue(); FPLN.maxBankLimit = Internal.bankLimit.getValue();
@ -431,7 +431,7 @@ var ITAF = {
flightPlanController.autoSequencing(); flightPlanController.autoSequencing();
} }
#if (FPLN.wp0Dist.getValue() <= FPLN.turnDist and !Gear.wow1.getBoolValue() and fmgc.flightPlanController.flightplans[2].getWP(FPLN.currentWPTemp).fly_type == "flyBy") { #if (FPLN.wp0Dist.getValue() <= FPLN.turnDist and !Gear.wow1.getBoolValue() and fmgc.flightPlanController.flightplans[2].getWP(FPLN.currentWpTemp).fly_type == "flyBy") {
# flightPlanController.autoSequencing(); # flightPlanController.autoSequencing();
#} elsif (FPLN.wp0Dist.getValue() <= 0.1) { #} elsif (FPLN.wp0Dist.getValue() <= 0.1) {
# flightPlanController.autoSequencing(); # flightPlanController.autoSequencing();
@ -564,7 +564,7 @@ var ITAF = {
Output.lnavArm.setBoolValue(0); Output.lnavArm.setBoolValue(0);
Output.locArm.setBoolValue(0); Output.locArm.setBoolValue(0);
Output.apprArm.setBoolValue(0); Output.apprArm.setBoolValue(0);
me.syncHDG(); me.syncHdg();
Output.lat.setValue(0); Output.lat.setValue(0);
Custom.showHdg.setBoolValue(1); Custom.showHdg.setBoolValue(1);
Text.lat.setValue("HDG"); Text.lat.setValue("HDG");
@ -609,7 +609,7 @@ var ITAF = {
me.armTextCheck(); me.armTextCheck();
} }
} else if (n == 3) { } else if (n == 3) {
me.syncHDG(); me.syncHdg();
Output.lnavArm.setBoolValue(0); Output.lnavArm.setBoolValue(0);
Custom.showHdg.setBoolValue(1); Custom.showHdg.setBoolValue(1);
me.armTextCheck(); me.armTextCheck();
@ -624,7 +624,7 @@ var ITAF = {
Output.vert.setValue(0); Output.vert.setValue(0);
me.resetClimbRateLim(); me.resetClimbRateLim();
Text.vert.setValue("ALT HLD"); Text.vert.setValue("ALT HLD");
me.syncALT(); me.syncAlt();
me.armTextCheck(); me.armTextCheck();
} else if (n == 1) { # V/S } else if (n == 1) { # V/S
if (abs(Input.altDiff) >= 25) { if (abs(Input.altDiff) >= 25) {
@ -633,7 +633,7 @@ var ITAF = {
Output.apprArm.setBoolValue(0); Output.apprArm.setBoolValue(0);
Output.vert.setValue(1); Output.vert.setValue(1);
Text.vert.setValue("V/S"); Text.vert.setValue("V/S");
me.syncVS(); me.syncVs();
me.armTextCheck(); me.armTextCheck();
} else { } else {
Output.apprArm.setBoolValue(0); Output.apprArm.setBoolValue(0);
@ -677,7 +677,7 @@ var ITAF = {
Output.apprArm.setBoolValue(0); Output.apprArm.setBoolValue(0);
Output.vert.setValue(5); Output.vert.setValue(5);
Text.vert.setValue("FPA"); Text.vert.setValue("FPA");
me.syncFPA(); me.syncFpa();
me.armTextCheck(); me.armTextCheck();
} else { } else {
Output.apprArm.setBoolValue(0); Output.apprArm.setBoolValue(0);
@ -802,29 +802,29 @@ var ITAF = {
setClimbRateLim: func() { setClimbRateLim: func() {
Internal.vsTemp = Internal.vs.getValue(); Internal.vsTemp = Internal.vs.getValue();
if (Internal.alt.getValue() >= Position.indicatedAltitudeFt.getValue()) { if (Internal.alt.getValue() >= Position.indicatedAltitudeFt.getValue()) {
Internal.maxVS.setValue(math.round(Internal.vsTemp)); Internal.maxVs.setValue(math.round(Internal.vsTemp));
Internal.minVS.setValue(-500); Internal.minVs.setValue(-500);
} else { } else {
Internal.maxVS.setValue(500); Internal.maxVs.setValue(500);
Internal.minVS.setValue(math.round(Internal.vsTemp)); Internal.minVs.setValue(math.round(Internal.vsTemp));
} }
}, },
resetClimbRateLim: func() { resetClimbRateLim: func() {
Internal.minVS.setValue(-500); Internal.minVs.setValue(-500);
Internal.maxVS.setValue(500); Internal.maxVs.setValue(500);
}, },
takeoffGoAround: func() { takeoffGoAround: func() {
Output.vertTemp = Output.vert.getValue(); Output.vertTemp = Output.vert.getValue();
if ((Output.vertTemp == 2 or Output.vertTemp == 6) and Velocities.indicatedAirspeedKt.getValue() >= 80) { if ((Output.vertTemp == 2 or Output.vertTemp == 6) and Velocities.indicatedAirspeedKt.getValue() >= 80) {
me.setLatMode(3);
me.setVertMode(7); # Must be before kicking AP off
Text.vert.setValue("G/A CLB");
Input.ktsMach.setBoolValue(0);
me.syncKtsGa();
if (Gear.wow1.getBoolValue() or Gear.wow2.getBoolValue()) { if (Gear.wow1.getBoolValue() or Gear.wow2.getBoolValue()) {
me.ap1Master(0); me.ap1Master(0);
me.ap2Master(0); me.ap2Master(0);
} }
me.setLatMode(3);
me.setVertMode(7);
Text.vert.setValue("G/A CLB");
Input.ktsMach.setBoolValue(0);
me.syncIAS();
} else if (Gear.wow1Temp or Gear.wow2Temp) { } else if (Gear.wow1Temp or Gear.wow2Temp) {
me.athrMaster(1); me.athrMaster(1);
if (Output.lat.getValue() != 5) { # Don't accidently disarm LNAV if (Output.lat.getValue() != 5) { # Don't accidently disarm LNAV
@ -845,23 +845,26 @@ var ITAF = {
Text.arm.setValue(" "); Text.arm.setValue(" ");
} }
}, },
syncIAS: func() { syncKts: func() {
Input.ias.setValue(math.clamp(math.round(Velocities.indicatedAirspeedKt.getValue()), 100, 350)); Input.kts.setValue(math.clamp(math.round(Velocities.indicatedAirspeedKt.getValue()), 100, 350));
},
syncKtsGa: func() { # Same as syncKts, except doesn't go below V2
Input.kts.setValue(math.clamp(math.round(Velocities.indicatedAirspeedKt.getValue()), FMGCInternal.v2, 350));
}, },
syncMach: func() { syncMach: func() {
Input.mach.setValue(math.clamp(math.round(Velocities.indicatedMach.getValue(), 0.001), 0.5, 0.82)); Input.mach.setValue(math.clamp(math.round(Velocities.indicatedMach.getValue(), 0.001), 0.5, 0.82));
}, },
syncHDG: func() { syncHdg: func() {
Input.hdg.setValue(math.round(Internal.hdgPredicted.getValue())); # Switches to track automatically Input.hdg.setValue(math.round(Internal.hdgPredicted.getValue())); # Switches to track automatically
}, },
syncALT: func() { syncAlt: func() {
Input.alt.setValue(math.clamp(math.round(Internal.altPredicted.getValue(), 100), 0, 50000)); Input.alt.setValue(math.clamp(math.round(Internal.altPredicted.getValue(), 100), 0, 50000));
Internal.alt.setValue(math.clamp(math.round(Internal.altPredicted.getValue(), 100), 0, 50000)); Internal.alt.setValue(math.clamp(math.round(Internal.altPredicted.getValue(), 100), 0, 50000));
}, },
syncVS: func() { syncVs: func() {
Input.vs.setValue(math.clamp(math.round(Internal.vs.getValue(), 100), -6000, 6000)); Input.vs.setValue(math.clamp(math.round(Internal.vs.getValue(), 100), -6000, 6000));
}, },
syncFPA: func() { syncFpa: func() {
Input.fpa.setValue(math.clamp(math.round(Internal.fpa.getValue(), 0.1), -9.9, 9.9)); Input.fpa.setValue(math.clamp(math.round(Internal.fpa.getValue(), 0.1), -9.9, 9.9));
}, },
# Custom Stuff Below # Custom Stuff Below
@ -978,7 +981,7 @@ setlistener("/it-autoflight/input/kts-mach", func {
if (Input.ktsMach.getBoolValue()) { if (Input.ktsMach.getBoolValue()) {
ITAF.syncMach(); ITAF.syncMach();
} else { } else {
ITAF.syncIAS(); ITAF.syncKts();
} }
}, 0, 0); }, 0, 0);

View file

@ -125,7 +125,7 @@ var loopFMA = maketimer(0.05, func {
var engstate2 = getprop("engines/engine[1]/state"); var engstate2 = getprop("engines/engine[1]/state");
if (((state1 == "TOGA" or state2 == "TOGA") or (flx == 1 and (state1 == "MCT" or state2 == "MCT")) or (flx == 1 and ((state1 == "MAN THR" and thr1 >= 0.83) or (state2 == "MAN THR" and thr2 >= 0.83)))) and (engstate1 == 3 or engstate2 == 3)) { if (((state1 == "TOGA" or state2 == "TOGA") or (flx == 1 and (state1 == "MCT" or state2 == "MCT")) or (flx == 1 and ((state1 == "MAN THR" and thr1 >= 0.83) or (state2 == "MAN THR" and thr2 >= 0.83)))) and (engstate1 == 3 or engstate2 == 3)) {
# RWY Engagement would go here, but automatic ILS selection is not simulated yet. # RWY Engagement would go here, but automatic ILS selection is not simulated yet.
if (wow and getprop("FMGC/internal/v2-set") == 1 and getprop("it-autoflight/output/vert") != 7) { if (wow and FMGCInternal.v2set and getprop("it-autoflight/output/vert") != 7) {
ITAF.setVertMode(7); ITAF.setVertMode(7);
setprop("it-autoflight/mode/vert", "T/O CLB"); setprop("it-autoflight/mode/vert", "T/O CLB");
} }
@ -343,15 +343,11 @@ setlistener("/it-autoflight/mode/vert", func {
altvert(); altvert();
}); });
setlistener("/FMGC/internal/v2-set", func {
updatePitchArm2();
});
var updatePitchArm2 = func { var updatePitchArm2 = func {
var newvertarm = getprop("modes/pfd/fma/pitch-mode2-armed"); var newvertarm = getprop("modes/pfd/fma/pitch-mode2-armed");
if (newvertarm != "CLB" and getprop("FMGC/internal/v2-set") == 1) { if (newvertarm != "CLB" and FMGCInternal.v2set) {
setprop("modes/pfd/fma/pitch-mode2-armed", "CLB"); setprop("modes/pfd/fma/pitch-mode2-armed", "CLB");
} else if (newvertarm != " " and getprop("FMGC/internal/v2-set") != 1) { } else if (newvertarm != " " and FMGCInternal.v2set != 1) {
setprop("modes/pfd/fma/pitch-mode2-armed", " "); setprop("modes/pfd/fma/pitch-mode2-armed", " ");
} }
} }

View file

@ -1,7 +1,5 @@
# A3XX FMGC/Autoflight # A3XX FMGC/Autoflight
# Joshua Davidson (Octal450) and Jonathan Redpath (legoboyvdlp) # Copyright (c) 2020 Josh Davidson (Octal450), Jonathan Redpath (legoboyvdlp), and Matthew Maring (mattmaring)
# Copyright (c) 2020 Josh Davidson (Octal450) and Matthew Maring (mattmaring)
################## ##################
# Init Functions # # Init Functions #
@ -104,9 +102,9 @@ setprop("/FMGC/internal/mng-spd", 157);
setprop("/FMGC/internal/mng-spd-cmd", 157); setprop("/FMGC/internal/mng-spd-cmd", 157);
setprop("/FMGC/internal/mng-kts-mach", 0); setprop("/FMGC/internal/mng-kts-mach", 0);
setprop("/FMGC/internal/mach-switchover", 0); setprop("/FMGC/internal/mach-switchover", 0);
setprop("it-autoflight/settings/accel-agl-ft", 1500); #eventually set to 1500 above runway setprop("/it-autoflight/settings/accel-agl-ft", 1500); #eventually set to 1500 above runway
setprop("it-autoflight/internal/vert-speed-fpm", 0); setprop("/it-autoflight/internal/vert-speed-fpm", 0);
setprop("it-autoflight/output/fma-pwr", 0); setprop("/it-autoflight/output/fma-pwr", 0);
setprop("instrumentation/nav[0]/nav-id", "XXX"); setprop("instrumentation/nav[0]/nav-id", "XXX");
setprop("instrumentation/nav[1]/nav-id", "XXX"); setprop("instrumentation/nav[1]/nav-id", "XXX");
setprop("/FMGC/internal/ils1-mcdu", "XXX/999.99"); setprop("/FMGC/internal/ils1-mcdu", "XXX/999.99");
@ -125,8 +123,7 @@ var FMGCinit = func {
setprop("/FMGC/internal/mng-spd-cmd", 157); setprop("/FMGC/internal/mng-spd-cmd", 157);
setprop("/FMGC/internal/mng-kts-mach", 0); setprop("/FMGC/internal/mng-kts-mach", 0);
setprop("/FMGC/internal/mach-switchover", 0); setprop("/FMGC/internal/mach-switchover", 0);
setprop("it-autoflight/settings/accel-agl-ft", 1500); #eventually set to 1500 above runway setprop("/it-autoflight/settings/accel-agl-ft", 1500); #eventually set to 1500 above runway
setprop("/FMGC/internal/decel", 0);
setprop("/FMGC/internal/loc-source", "NAV0"); setprop("/FMGC/internal/loc-source", "NAV0");
setprop("/FMGC/internal/optalt", 0); setprop("/FMGC/internal/optalt", 0);
setprop("/FMGC/internal/landing-time", -99); setprop("/FMGC/internal/landing-time", -99);
@ -141,10 +138,21 @@ var FMGCinit = func {
} }
var FMGCInternal = { var FMGCInternal = {
v1: 0,
v1set: 0,
vr: 0,
vrset: 0,
v2: 0,
v2set: 0,
transAlt: 18000, transAlt: 18000,
transAltSet: 0, transAltSet: 0,
}; };
var FMGCNodes = {
v1: props.globals.initNode("/FMGC/internal/v1", 0, "DOUBLE"),
v1set: props.globals.initNode("/FMGC/internal/v1-set", 0, "BOOL"),
};
############ ############
# FBW Trim # # FBW Trim #
############ ############
@ -456,7 +464,7 @@ var masterFMGC = maketimer(0.2, func {
if (phase == 4 and getprop("/FMGC/internal/decel")) { if (phase == 4 and getprop("/FMGC/internal/decel")) {
setprop("/FMGC/status/phase", 5); setprop("/FMGC/status/phase", 5);
} }
if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and aglalt < 9500) { #todo decel pseudo waypoint if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and aglalt < 9500) { #todo decel pseudo waypoint
setprop("/FMGC/internal/decel", 1); setprop("/FMGC/internal/decel", 1);
} else if (getprop("/FMGC/internal/decel") == 1 and (phase == 0 or phase == 6)) { } else if (getprop("/FMGC/internal/decel") == 1 and (phase == 0 or phase == 6)) {
@ -466,7 +474,7 @@ var masterFMGC = maketimer(0.2, func {
if ((phase == "5") and state1 == "TOGA" and state2 == "TOGA") { if ((phase == "5") and state1 == "TOGA" and state2 == "TOGA") {
setprop("/FMGC/status/phase", 6); setprop("/FMGC/status/phase", 6);
setprop("systems/pressurization/mode", "TO"); setprop("systems/pressurization/mode", "TO");
setprop("it-autoflight/input/toga", 1); setprop("/it-autoflight/input/toga", 1);
} }
if (phase == "6" and alt >= accel_agl_ft) { # todo when insert altn or new dest if (phase == "6" and alt >= accel_agl_ft) { # todo when insert altn or new dest
@ -716,7 +724,7 @@ var reset_FMGC = func {
setprop("/FMGC/status/phase", 0); setprop("/FMGC/status/phase", 0);
fd1 = getprop("/it-autoflight/input/fd1"); fd1 = getprop("/it-autoflight/input/fd1");
fd2 = getprop("/it-autoflight/input/fd2"); fd2 = getprop("/it-autoflight/input/fd2");
spd = getprop("/it-autoflight/input/spd-kts"); spd = getprop("/it-autoflight/input/kts");
hdg = getprop("/it-autoflight/input/hdg"); hdg = getprop("/it-autoflight/input/hdg");
alt = getprop("/it-autoflight/input/alt"); alt = getprop("/it-autoflight/input/alt");
ITAF.init(); ITAF.init();
@ -728,7 +736,7 @@ var reset_FMGC = func {
mcdu.MCDU_reset(1); mcdu.MCDU_reset(1);
setprop("it-autoflight/input/fd1", fd1); setprop("it-autoflight/input/fd1", fd1);
setprop("it-autoflight/input/fd2", fd2); setprop("it-autoflight/input/fd2", fd2);
setprop("it-autoflight/input/spd-kts", spd); setprop("it-autoflight/input/kts", spd);
setprop("it-autoflight/input/hdg", hdg); setprop("it-autoflight/input/hdg", hdg);
setprop("it-autoflight/input/alt", alt); setprop("it-autoflight/input/alt", alt);
setprop("systems/pressurization/mode", "GN"); setprop("systems/pressurization/mode", "GN");
@ -758,11 +766,11 @@ var reset_FMGC = func {
var various = maketimer(1, func { var various = maketimer(1, func {
if (getprop("/engines/engine[0]/state") == 3 and getprop("/engines/engine[1]/state") != 3) { if (getprop("/engines/engine[0]/state") == 3 and getprop("/engines/engine[1]/state") != 3) {
setprop("it-autoflight/settings/accel-agl-ft", getprop("/FMGC/internal/eng-out-reduc")); setprop("/it-autoflight/settings/accel-agl-ft", getprop("/FMGC/internal/eng-out-reduc"));
} else if (getprop("/engines/engine[0]/state") != 3 and getprop("/engines/engine[1]/state") == 3) { } else if (getprop("/engines/engine[0]/state") != 3 and getprop("/engines/engine[1]/state") == 3) {
setprop("it-autoflight/settings/accel-agl-ft", getprop("/FMGC/internal/eng-out-reduc")); setprop("/it-autoflight/settings/accel-agl-ft", getprop("/FMGC/internal/eng-out-reduc"));
} else { } else {
setprop("it-autoflight/settings/accel-agl-ft", getprop("/FMGC/internal/accel-agl-ft")); setprop("/it-autoflight/settings/accel-agl-ft", getprop("/FMGC/internal/accel-agl-ft"));
} }
setprop("/FMGC/internal/gw", math.round(getprop("/fdm/jsbsim/inertia/weight-lbs"), 100)); setprop("/FMGC/internal/gw", math.round(getprop("/fdm/jsbsim/inertia/weight-lbs"), 100));
@ -870,8 +878,8 @@ var ManagedSPD = maketimer(0.25, func {
mngktsmach = getprop("/FMGC/internal/mng-kts-mach"); mngktsmach = getprop("/FMGC/internal/mng-kts-mach");
mng_spd = getprop("/FMGC/internal/mng-spd"); mng_spd = getprop("/FMGC/internal/mng-spd");
mng_spd_cmd = getprop("/FMGC/internal/mng-spd-cmd"); mng_spd_cmd = getprop("/FMGC/internal/mng-spd-cmd");
kts_sel = getprop("/it-autoflight/input/spd-kts"); kts_sel = getprop("/it-autoflight/input/kts");
mach_sel = getprop("/it-autoflight/input/spd-mach"); mach_sel = getprop("/it-autoflight/input/mach");
srsSPD = getprop("/it-autoflight/settings/togaspd"); srsSPD = getprop("/it-autoflight/settings/togaspd");
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 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
flap = getprop("/controls/flight/flaps-pos"); flap = getprop("/controls/flight/flaps-pos");
@ -967,17 +975,17 @@ var ManagedSPD = maketimer(0.25, func {
} }
if (ktsmach and !mngktsmach) { if (ktsmach and !mngktsmach) {
setprop("it-autoflight/input/kts-mach", 0); setprop("/it-autoflight/input/kts-mach", 0);
} else if (!ktsmach and mngktsmach) { } else if (!ktsmach and mngktsmach) {
setprop("it-autoflight/input/kts-mach", 1); setprop("/it-autoflight/input/kts-mach", 1);
} }
mng_spd = getprop("/FMGC/internal/mng-spd"); mng_spd = getprop("/FMGC/internal/mng-spd");
if (kts_sel != mng_spd and !ktsmach) { if (kts_sel != mng_spd and !ktsmach) {
setprop("it-autoflight/input/spd-kts", mng_spd); setprop("/it-autoflight/input/kts", mng_spd);
} else if (mach_sel != mng_spd and ktsmach) { } else if (mach_sel != mng_spd and ktsmach) {
setprop("it-autoflight/input/spd-mach", mng_spd); setprop("/it-autoflight/input/mach", mng_spd);
} }
} else { } else {
ManagedSPD.stop(); ManagedSPD.stop();

View file

@ -94,8 +94,8 @@ var fplnItem = {
return sprintf("%03.0f", math.round(me.trk)); return sprintf("%03.0f", math.round(me.trk));
}, },
getSpd: func() { getSpd: func() {
if (me.index == 0 and getprop("FMGC/internal/v1-set")) { if (me.index == 0 and fmgc.FMGCInternal.v1set) {
return [sprintf("%3.0f", math.round(getprop("FMGC/internal/v1"))), "mag"]; return [sprintf("%3.0f", math.round(fmgc.FMGCInternal.v1)), "mag"];
} elsif (me.wp.speed_cstr != nil and me.wp.speed_cstr != 0) { } elsif (me.wp.speed_cstr != nil and me.wp.speed_cstr != 0) {
return [sprintf("%3.0f", me.wp.speed_cstr), "mag"]; return [sprintf("%3.0f", me.wp.speed_cstr), "mag"];
} else { } else {

View file

@ -136,12 +136,13 @@ var MCDU_reset = func(i) {
# PERF # PERF
#PERF TO #PERF TO
setprop("/FMGC/internal/v1", 0); fmgc.FMGCInternal.v1 = 0;
setprop("/FMGC/internal/v1-set", 0); fmgc.FMGCInternal.v1set = 0;
setprop("/FMGC/internal/vr", 0); fmgc.FMGCInternal.vr = 0;
setprop("/FMGC/internal/vr-set", 0); fmgc.FMGCInternal.vrset = 0;
setprop("/FMGC/internal/v2", 0); fmgc.FMGCInternal.v2 = 0;
setprop("/FMGC/internal/v2-set", 0); fmgc.FMGCInternal.v2set = 0;
setprop("FMGC/internal/accel-agl-ft", "1500"); #eventually set to 1500 above runway setprop("FMGC/internal/accel-agl-ft", "1500"); #eventually set to 1500 above runway
setprop("/MCDUC/thracc-set", 0); setprop("/MCDUC/thracc-set", 0);
setprop("FMGC/internal/to-flap", 0); setprop("FMGC/internal/to-flap", 0);

View file

@ -8,15 +8,21 @@ var perfTOInput = func(key, i) {
if (key == "L1") { if (key == "L1") {
if (getprop("/FMGC/status/phase") != 1) { if (getprop("/FMGC/status/phase") != 1) {
if (scratchpad == "CLR") { if (scratchpad == "CLR") {
setprop("/FMGC/internal/v1", 0); fmgc.FMGCInternal.v1 = 0;
setprop("/FMGC/internal/v1-set", 0); fmgc.FMGCInternal.v1set = 0;
fmgc.FMGCNodes.v1.setValue(0);
fmgc.FMGCNodes.v1set.setValue(0);
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
} else { } else {
var tfs = size(scratchpad); var tfs = size(scratchpad);
if (tfs == 3) { if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) { if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
setprop("/FMGC/internal/v1", scratchpad); fmgc.FMGCInternal.v1 = scratchpad;
setprop("/FMGC/internal/v1-set", 1); fmgc.FMGCInternal.v1set = 1;
# for sounds:
fmgc.FMGCNodes.v1.setValue(scratchpad);
fmgc.FMGCNodes.v1set.setValue(1);
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
@ -31,15 +37,15 @@ var perfTOInput = func(key, i) {
} else if (key == "L2") { } else if (key == "L2") {
if (getprop("/FMGC/status/phase") != 1) { if (getprop("/FMGC/status/phase") != 1) {
if (scratchpad == "CLR") { if (scratchpad == "CLR") {
setprop("/FMGC/internal/vr", 0); fmgc.FMGCInternal.vr = 0;
setprop("/FMGC/internal/vr-set", 0); fmgc.FMGCInternal.vrset = 0;
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
} else { } else {
var tfs = size(scratchpad); var tfs = size(scratchpad);
if (tfs == 3) { if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) { if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
setprop("/FMGC/internal/vr", scratchpad); fmgc.FMGCInternal.vr = scratchpad;
setprop("/FMGC/internal/vr-set", 1); fmgc.FMGCInternal.vrset = 1;
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");
@ -54,17 +60,18 @@ var perfTOInput = func(key, i) {
} else if (key == "L3") { } else if (key == "L3") {
if (getprop("/FMGC/status/phase") != 1) { if (getprop("/FMGC/status/phase") != 1) {
if (scratchpad == "CLR") { if (scratchpad == "CLR") {
setprop("/FMGC/internal/v2", 0); fmgc.FMGCInternal.v2 = 0;
setprop("/FMGC/internal/v2-set", 0); fmgc.FMGCInternal.v2set = 0;
setprop("it-autoflight/settings/togaspd", 157); setprop("/it-autoflight/settings/togaspd", 157);
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
} else { } else {
var tfs = size(scratchpad); var tfs = size(scratchpad);
if (tfs == 3) { if (tfs == 3) {
if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) { if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
setprop("/FMGC/internal/v2", scratchpad); fmgc.FMGCInternal.v2 = scratchpad;
setprop("/FMGC/internal/v2-set", 1); fmgc.FMGCInternal.v2set = 1;
setprop("it-autoflight/settings/togaspd", scratchpad); fmgc.updatePitchArm2();
setprop("/it-autoflight/settings/togaspd", scratchpad);
mcdu_scratchpad.scratchpads[i].empty(); mcdu_scratchpad.scratchpads[i].empty();
} else { } else {
mcdu_message(i, "NOT ALLOWED"); mcdu_message(i, "NOT ALLOWED");

View file

@ -788,7 +788,7 @@
<summer name="/systems/fuel/internal/apu-flow-rate"> <summer name="/systems/fuel/internal/apu-flow-rate">
<input>/systems/fuel/internal/left-wing-tank-apu</input> <input>/systems/fuel/internal/left-wing-tank-apu</input>
<input>/systems/fuel/internal/center-tank-apu</input> <input>/systems/fuel/internal/center-tank-apu</input>
<input>//systems/fuel/internal/right-wing-tank-apu</input> <input>/systems/fuel/internal/right-wing-tank-apu</input>
<output>propulsion/tank[7]/external-flow-rate-pps</output> <output>propulsion/tank[7]/external-flow-rate-pps</output>
</summer> </summer>
</channel> </channel>

View file

@ -1,109 +1,50 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<!-- IT-AUTOFLIGHT --> <!-- IT-AUTOFLIGHT -->
<!-- Copyright (c) 2020 Joshua Davidson (Octal450) -->
<PropertyList> <PropertyList>
<!-- Predictors --> <!-- Predictors -->
<predict-simple> <predict-simple>
<name>IAS 5 SECOND PREDICTOR</name> <name>IAS 5 Second Predictor</name>
<debug>false</debug> <debug>false</debug>
<input>/instrumentation/airspeed-indicator/indicated-speed-kt</input> <input>/instrumentation/airspeed-indicator/indicated-speed-kt</input>
<output>/it-autoflight/internal/lookahead-5-sec-airspeed-kt</output> <output>/it-autoflight/internal/kts-predicted-5</output>
<seconds>5.0</seconds> <seconds>5</seconds>
<filter-gain>0.0</filter-gain> <filter-gain>0</filter-gain>
</predict-simple> </predict-simple>
<predict-simple> <predict-simple>
<name>IAS 10 SECOND PREDICTOR</name> <name>MACH 5 Second Predictor</name>
<debug>false</debug>
<input>/instrumentation/airspeed-indicator/indicated-mach</input>
<output>/it-autoflight/internal/mach-predicted-5</output>
<seconds>5</seconds>
<filter-gain>0</filter-gain>
</predict-simple>
<predict-simple>
<name>IAS 15 Second Predictor</name>
<debug>false</debug> <debug>false</debug>
<input>/instrumentation/airspeed-indicator/indicated-speed-kt</input> <input>/instrumentation/airspeed-indicator/indicated-speed-kt</input>
<output>/it-autoflight/internal/lookahead-10-sec-airspeed-kt</output> <output>/it-autoflight/internal/kts-predicted-15</output>
<seconds>10.0</seconds> <seconds>15</seconds>
<filter-gain>0.0</filter-gain> <filter-gain>0</filter-gain>
</predict-simple> </predict-simple>
<predict-simple> <predict-simple>
<name>IAS 15 SECOND PREDICTOR</name> <name>MACH 15 Second Predictor</name>
<debug>false</debug>
<input>/instrumentation/airspeed-indicator/indicated-speed-kt</input>
<output>/it-autoflight/internal/lookahead-15-sec-airspeed-kt</output>
<seconds>15.0</seconds>
<filter-gain>0.0</filter-gain>
</predict-simple>
<predict-simple>
<name>MACH 5 SECOND PREDICTOR</name>
<debug>false</debug> <debug>false</debug>
<input>/instrumentation/airspeed-indicator/indicated-mach</input> <input>/instrumentation/airspeed-indicator/indicated-mach</input>
<output>/it-autoflight/internal/lookahead-5-sec-mach</output> <output>/it-autoflight/internal/mach-predicted-15</output>
<seconds>5.0</seconds> <seconds>15</seconds>
<filter-gain>0.0</filter-gain> <filter-gain>0</filter-gain>
</predict-simple>
<predict-simple>
<name>MACH 10 SECOND PREDICTOR</name>
<debug>false</debug>
<input>/instrumentation/airspeed-indicator/indicated-mach</input>
<output>/it-autoflight/internal/lookahead-10-sec-mach</output>
<seconds>10.0</seconds>
<filter-gain>0.0</filter-gain>
</predict-simple>
<predict-simple>
<name>MACH 15 SECOND PREDICTOR</name>
<debug>false</debug>
<input>/instrumentation/airspeed-indicator/indicated-mach</input>
<output>/it-autoflight/internal/lookahead-15-sec-mach</output>
<seconds>15.0</seconds>
<filter-gain>0.0</filter-gain>
</predict-simple> </predict-simple>
<!-- Autopilot Helpers/Calculators --> <!-- Autopilot Helpers/Calculators -->
<filter> <filter>
<name>AUTOLAND FD FPM</name> <name>FMGC Managed Knots</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<expression>
<table>
<property>/position/gear-agl-ft</property>
<entry><ind>100</ind><dep>-650</dep></entry>
<entry><ind> 50</ind><dep>-500</dep></entry>
<entry><ind> 45</ind><dep> -70</dep></entry>
</table>
</expression>
</input>
<output>/it-autoflight/internal/target-fpm-c2</output>
</filter>
<filter>
<name>AUTOLAND FPM</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<expression>
<table>
<property>/position/gear-agl-ft</property>
<entry><ind>100</ind><dep>-650</dep></entry>
<entry><ind> 50</ind><dep>-500</dep></entry>
<entry><ind> 40</ind><dep>-400</dep></entry>
<entry><ind> 30</ind><dep>-300</dep></entry>
<entry><ind> 20</ind><dep>-180</dep></entry>
<entry><ind> 10</ind><dep>-100</dep></entry>
<entry><ind> 5</ind><dep> -70</dep></entry>
</table>
</expression>
</input>
<output>/it-autoflight/internal/target-fpm-c</output>
</filter>
<filter>
<name>FMGC MNG SPD</name>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<input> <input>
@ -124,7 +65,7 @@
</filter> </filter>
<filter> <filter>
<name>FMGC MNG MACH</name> <name>FMGC Managed Mach</name>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<input> <input>
@ -149,7 +90,7 @@
</filter> </filter>
<filter> <filter>
<name>FMGC Target IAS PFD</name> <name>FMGC Target Knots PFD</name>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<input> <input>
@ -159,7 +100,7 @@
<value>0</value> <value>0</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/input/spd-kts</property> <property>/it-autoflight/input/kts</property>
</input> </input>
<input> <input>
<condition> <condition>
@ -174,7 +115,7 @@
<property>/instrumentation/airspeed-indicator/indicated-speed-kt</property> <property>/instrumentation/airspeed-indicator/indicated-speed-kt</property>
<property>/instrumentation/airspeed-indicator/indicated-mach</property> <property>/instrumentation/airspeed-indicator/indicated-mach</property>
</div> </div>
<property>/it-autoflight/input/spd-mach</property> <property>/it-autoflight/input/mach</property>
</product> </product>
</expression> </expression>
</input> </input>
@ -182,20 +123,11 @@
</filter> </filter>
<filter> <filter>
<name>KTS INPUT FILTER</name> <name>Knots Input Filter</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<feedback-if-disabled>true</feedback-if-disabled> <feedback-if-disabled>true</feedback-if-disabled>
<initialize-to>output</initialize-to> <initialize-to>output</initialize-to>
<input>
<condition>
<not-equals>
<property>/it-autoflight/mode/vert</property>
<value>T/O CLB</value>
</not-equals>
</condition>
<property>/it-autoflight/input/spd-kts</property>
</input>
<input> <input>
<condition> <condition>
<equals> <equals>
@ -203,9 +135,31 @@
<value>T/O CLB</value> <value>T/O CLB</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/settings/togaspd</property> <expression>
<sum>
<property>/it-autoflight/settings/togaspd</property>
<value>10</value>
</sum>
</expression>
</input> </input>
<input>/it-autoflight/input/kts</input>
<output>/it-autoflight/internal/flch-kts</output> <output>/it-autoflight/internal/flch-kts</output>
<min>
<expression>
<difference>
<property>/instrumentation/airspeed-indicator/indicated-speed-kt</property>
<value>25</value>
</difference>
</expression>
</min>
<max>
<expression>
<sum>
<property>/instrumentation/airspeed-indicator/indicated-speed-kt</property>
<value>25</value>
</sum>
</expression>
</max>
<max-rate-of-change> <max-rate-of-change>
<condition> <condition>
<and> <and>
@ -239,13 +193,29 @@
</filter> </filter>
<filter> <filter>
<name>MACH INPUT FILTER</name> <name>Mach Input Filter</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<feedback-if-disabled>true</feedback-if-disabled> <feedback-if-disabled>true</feedback-if-disabled>
<initialize-to>output</initialize-to> <initialize-to>output</initialize-to>
<input>/it-autoflight/input/spd-mach</input> <input>/it-autoflight/input/mach</input>
<output>/it-autoflight/internal/flch-mach</output> <output>/it-autoflight/internal/flch-mach</output>
<min>
<expression>
<difference>
<property>/instrumentation/airspeed-indicator/indicated-mach</property>
<value>0.045</value>
</difference>
</expression>
</min>
<max>
<expression>
<sum>
<property>/instrumentation/airspeed-indicator/indicated-mach</property>
<value>0.045</value>
</sum>
</expression>
</max>
<max-rate-of-change> <max-rate-of-change>
<condition> <condition>
<and> <and>
@ -273,13 +243,13 @@
</equals> </equals>
</and> </and>
</condition> </condition>
<value>0.05</value> <value>0.04</value>
</max-rate-of-change> </max-rate-of-change>
<max-rate-of-change>1</max-rate-of-change> <max-rate-of-change>1</max-rate-of-change>
</filter> </filter>
<filter> <filter>
<name>IAS SYNC</name> <name>Knots Sync</name>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<enable> <enable>
@ -300,11 +270,11 @@
</floor> </floor>
</expression> </expression>
</input> </input>
<output>/it-autoflight/input/spd-kts</output> <output>/it-autoflight/input/kts</output>
</filter> </filter>
<filter> <filter>
<name>MACH SYNC</name> <name>Mach Sync</name>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<enable> <enable>
@ -331,11 +301,11 @@
</div> </div>
</expression> </expression>
</input> </input>
<output>/it-autoflight/input/spd-mach</output> <output>/it-autoflight/input/mach</output>
</filter> </filter>
<filter> <filter>
<name>HEADING DEG</name> <name>Heading Deg</name>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<input> <input>
@ -351,7 +321,7 @@
</filter> </filter>
<filter> <filter>
<name>TRACK DEG</name> <name>Track Deg</name>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<input> <input>
@ -385,7 +355,7 @@
</filter> </filter>
<filter> <filter>
<name>DRIFT ANGLE</name> <name>Drift Angle</name>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<input> <input>
@ -407,7 +377,7 @@
</filter> </filter>
<filter> <filter>
<name>HEADING ERROR DEG</name> <name>Heading Error Deg</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -479,7 +449,7 @@
</filter> </filter>
<filter> <filter>
<name>VERT SPEED SYNC</name> <name>Vertical Speed Sync</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -505,7 +475,7 @@
</filter> </filter>
<filter> <filter>
<name>VERT SPEED FILTER</name> <name>Vertical Speed Filter</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<feedback-if-disabled>true</feedback-if-disabled> <feedback-if-disabled>true</feedback-if-disabled>
@ -545,7 +515,37 @@
</filter> </filter>
<filter> <filter>
<name>NAV ERROR DEG</name> <name>VS Abs</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.02</update-interval-secs>
<input>
<expression>
<abs>
<property>/it-autoflight/input/vs</property>
</abs>
</expression>
</input>
<output>/it-autoflight/input/vs-abs</output>
</filter>
<filter>
<name>FPA Abs</name>
<type>gain</type>
<gain>1.0</gain>
<update-interval-secs type="double">0.02</update-interval-secs>
<input>
<expression>
<abs>
<property>/it-autoflight/input/fpa</property>
</abs>
</expression>
</input>
<output>/it-autoflight/input/fpa-abs</output>
</filter>
<filter>
<name>Nav Error Deg</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -564,7 +564,7 @@
</filter> </filter>
<filter> <filter>
<name>INTERNAL VERTICAL SPEED COMPUTER</name> <name>Internal Vertical Speed</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -573,92 +573,12 @@
</filter> </filter>
<filter> <filter>
<name>INTERNAL VERTICAL SPEED COMPUTER SYNC 4</name> <name>Nav G/S FPM Calc</name>
<debug>false</debug>
<type>gain</type>
<gain>1.0</gain>
<enable>
<condition>
<not>
<or>
<equals>
<property>/it-autoflight/output/vert</property>
<value>4</value>
</equals>
<equals>
<property>/it-autoflight/output/vert</property>
<value>7</value>
</equals>
</or>
<or>
<equals>
<property>/it-autoflight/output/ap1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/ap2</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/fd1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/fd2</property>
<value>1</value>
</equals>
</or>
</not>
</condition>
</enable>
<input>/it-autoflight/internal/vert-speed-fpm</input>
<output>/it-autoflight/internal/target-fpm-b</output>
</filter>
<filter>
<name>INTERNAL VERTICAL SPEED COMPUTER SYNC 5</name>
<debug>false</debug>
<type>gain</type>
<gain>1.0</gain>
<enable>
<condition>
<not>
<equals>
<property>/it-autoflight/output/vert</property>
<value>5</value>
</equals>
<or>
<equals>
<property>/it-autoflight/output/ap1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/ap2</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/fd1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/fd2</property>
<value>1</value>
</equals>
</or>
</not>
</condition>
</enable>
<input>/it-autoflight/internal/vert-speed-fpm</input>
<output>/it-autoflight/internal/target-fpm-d</output>
</filter>
<filter>
<name>NAV1 G/S FPM Calc</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<input>/instrumentation/nav[0]/gs-rate-of-climb-fpm</input> <input>/instrumentation/nav[0]/gs-rate-of-climb-fpm</input>
<output>/it-autoflight/internal/nav1-rate-of-climb-fpm</output> <output>/it-autoflight/internal/nav-rate-of-climb-fpm</output>
<min> <min>
<condition> <condition>
<not-equals> <not-equals>
@ -681,7 +601,7 @@
</filter> </filter>
<filter> <filter>
<name>HEADING PREDICTOR STAGE 1</name> <name>Heading Predictor Stage 1</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -731,7 +651,7 @@
</filter> </filter>
<filter> <filter>
<name>HEADING PREDICTOR STAGE 2</name> <name>Heading Predictor Stage 2</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -768,7 +688,7 @@
</filter> </filter>
<filter> <filter>
<name>ALTITUDE PREDICTOR</name> <name>Altitude Predictor</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -787,7 +707,7 @@
</filter> </filter>
<filter> <filter>
<name>INTERNAL FPA COMPUTER</name> <name>Internal FPA Computer</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -803,26 +723,10 @@
</filter> </filter>
<!-- Flight Director --> <!-- Flight Director -->
<filter> <filter>
<name>IT-CONTROLLER: TARGET ROLL CMD</name> <name>FD Target Roll Filter</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<input>
<condition>
<or>
<equals>
<property>/it-autoflight/output/lat</property>
<value>4</value>
</equals>
<equals>
<property>/it-autoflight/output/lat</property>
<value>5</value>
</equals>
</or>
</condition>
<value>0</value>
</input>
<input>/it-autoflight/internal/target-roll-deg</input> <input>/it-autoflight/internal/target-roll-deg</input>
<output>/it-autoflight/internal/target-roll-fd</output> <output>/it-autoflight/internal/target-roll-fd</output>
<max-rate-of-change> <max-rate-of-change>
@ -844,16 +748,16 @@
</filter> </filter>
<filter> <filter>
<name>FD: ROLL</name> <name>FD Roll</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<input> <input>
<expression> <expression>
<dif> <difference>
<property>/it-autoflight/internal/target-roll-fd</property> <property>/it-autoflight/internal/target-roll-fd</property>
<property>/orientation/roll-deg</property> <property>/orientation/roll-deg</property>
</dif> </difference>
</expression> </expression>
</input> </input>
<output>/it-autoflight/fd/roll-bar</output> <output>/it-autoflight/fd/roll-bar</output>
@ -862,16 +766,16 @@
</filter> </filter>
<filter> <filter>
<name>FD: PITCH</name> <name>FD Pitch</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<input> <input>
<expression> <expression>
<product> <product>
<dif> <difference>
<property>/it-autoflight/internal/target-common-fpm</property> <property>/it-autoflight/internal/target-common-fpm</property>
<property>/it-autoflight/internal/vert-speed-fpm</property> <property>/it-autoflight/internal/vert-speed-fpm</property>
</dif> </difference>
<table> <table>
<property>/instrumentation/airspeed-indicator/indicated-mach</property> <property>/instrumentation/airspeed-indicator/indicated-mach</property>
<entry><ind>0.20</ind><dep>0.004</dep></entry> <entry><ind>0.20</ind><dep>0.004</dep></entry>
@ -882,21 +786,8 @@
</input> </input>
<output>/it-autoflight/fd/pitch-bar</output> <output>/it-autoflight/fd/pitch-bar</output>
<min>-15</min> <min>-15</min>
<max>30</max> <max>15</max>
<max-rate-of-change>10</max-rate-of-change> <max-rate-of-change>10</max-rate-of-change>
</filter> </filter>
<logic>
<!-- somewhat confusing : this input is not 'are the flaps in landing configration', but rather,
'are the flaps NOT in a landing configuration'. There is a configuration bit to flip
the sense of this, if required. -->
<input>
<less-than>
<property>/controls/flight/flaps</property>
<value>0.8</value>
</less-than>
</input>
<output>/instrumentation/mk-viii/inputs/discretes/landing-flaps</output>
</logic>
</PropertyList> </PropertyList>

View file

@ -1,15 +1,13 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<!-- IT-AUTOFLIGHT --> <!-- IT-AUTOFLIGHT -->
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<PropertyList> <PropertyList>
<!-- Pitch Axis --> <!-- Pitch Axis -->
<filter> <filter>
<name>ALTITUDE CAPTURE/HOLD</name> <name>IT-CONTROLLER: Altitude Capture/Hold</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>-5</gain> <gain>-5</gain>
@ -21,148 +19,54 @@
</sum> </sum>
</expression> </expression>
</input> </input>
<reference>
<condition>
<equals>
<property>/it-autoflight/output/vert</property>
<value>8</value>
</equals>
</condition>
<property>/it-autoflight/internal/mng-alt</property>
</reference>
<reference>/it-autoflight/internal/alt</reference> <reference>/it-autoflight/internal/alt</reference>
<output>/it-autoflight/internal/target-fpm</output> <output>/it-autoflight/internal/target-fpm-alt</output>
<min>/it-autoflight/internal/min-vs</min> <min>/it-autoflight/internal/min-vs</min>
<max>/it-autoflight/internal/max-vs</max> <max>/it-autoflight/internal/max-vs</max>
</filter> </filter>
<filter> <logic>
<name>FPA ERROR</name> <input>
<debug>false</debug> <and>
<type>gain</type> <or>
<gain>1.0</gain>
<input>/it-autoflight/internal/fpa</input>
<reference>/it-autoflight/input/fpa</reference>
<output>/it-autoflight/internal/fpa-error</output>
<min>-1.5</min>
<max>1.5</max>
</filter>
<pid-controller>
<name>FPA HOLD</name>
<debug>false</debug>
<enable>
<condition>
<and>
<equals> <equals>
<property>/it-autoflight/output/vert</property> <property>/it-autoflight/output/vert</property>
<value>5</value> <value>4</value>
</equals> </equals>
<or> <equals>
<equals> <property>/it-autoflight/output/vert</property>
<property>/it-autoflight/output/ap1</property> <value>7</value>
<value>1</value> </equals>
</equals> </or>
<equals> <or>
<property>/it-autoflight/output/ap2</property> <equals>
<value>1</value> <property>/it-autoflight/output/ap1</property>
</equals> <value>1</value>
<equals> </equals>
<property>/it-autoflight/output/fd1</property> <equals>
<value>1</value> <property>/it-autoflight/output/ap2</property>
</equals> <value>1</value>
<equals> </equals>
<property>/it-autoflight/output/fd2</property> <equals>
<value>1</value> <property>/it-autoflight/output/fd1</property>
</equals> <value>1</value>
</or> </equals>
</and> <equals>
</condition> <property>/it-autoflight/output/fd2</property>
</enable> <value>1</value>
<input>/it-autoflight/internal/fpa-error</input> </equals>
<reference>0</reference> </or>
<output>/it-autoflight/internal/target-fpm-d</output> </and>
<config> </input>
<Kp> <output>/it-autoflight/internal/flch-active</output>
<expression> </logic>
<table>
<property>/fdm/jsbsim/velocities/vc-kts</property>
<entry><ind>140</ind><dep>120</dep></entry>
<entry><ind>360</ind><dep>340</dep></entry>
</table>
</expression>
</Kp>
<Ti>
<condition>
<or>
<equals>
<property>/it-autoflight/output/ap1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/ap2</property>
<value>1</value>
</equals>
</or>
</condition>
<value>2.0</value>
</Ti>
<Ti>10.0</Ti>
<Td>0.002</Td>
<u_min>
<expression>
<dif>
<property>/it-autoflight/internal/vert-speed-fpm</property>
<value>2500</value>
</dif>
</expression>
</u_min>
<u_max>
<expression>
<sum>
<property>/it-autoflight/internal/vert-speed-fpm</property>
<value>2500</value>
</sum>
</expression>
</u_max>
</config>
</pid-controller>
<pid-controller> <pid-controller>
<name>FLCH SPEED BY PITCH</name> <name>IT-CONTROLLER: Speed By Pitch</name>
<debug>false</debug> <debug>false</debug>
<enable> <enable>
<condition> <condition>
<and> <property>/it-autoflight/internal/flch-active</property>
<or>
<equals>
<property>/it-autoflight/output/vert</property>
<value>4</value>
</equals>
<equals>
<property>/it-autoflight/output/vert</property>
<value>7</value>
</equals>
</or>
<or>
<equals>
<property>/it-autoflight/output/ap1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/ap2</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/fd1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/fd2</property>
<value>1</value>
</equals>
</or>
</and>
</condition> </condition>
</enable> </enable>
<input> <input>
@ -172,7 +76,7 @@
<value>0</value> <value>0</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/lookahead-15-sec-airspeed-kt</property> <property>/it-autoflight/internal/kts-predicted-15</property>
</input> </input>
<input> <input>
<condition> <condition>
@ -181,8 +85,8 @@
<value>1</value> <value>1</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/lookahead-15-sec-mach</property> <property>/it-autoflight/internal/mach-predicted-15</property>
<scale>750.0</scale> <scale>750</scale>
</input> </input>
<reference> <reference>
<condition> <condition>
@ -201,28 +105,11 @@
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/flch-mach</property> <property>/it-autoflight/internal/flch-mach</property>
<scale>750.0</scale> <scale>750</scale>
</reference> </reference>
<output>/it-autoflight/internal/target-fpm-b</output> <output>/it-autoflight/internal/target-fpm-flch</output>
<config> <config>
<Kp> <Kp>-55</Kp>
<condition>
<not-equals>
<property>/it-autoflight/output/vert</property>
<value>7</value>
</not-equals>
</condition>
<value>-55</value>
</Kp>
<Kp>
<condition>
<equals>
<property>/it-autoflight/output/vert</property>
<value>7</value>
</equals>
</condition>
<value>-60</value>
</Kp>
<Ti>2.5</Ti> <Ti>2.5</Ti>
<Td>0.001</Td> <Td>0.001</Td>
<u_min> <u_min>
@ -232,48 +119,16 @@
<value>2</value> <value>2</value>
</equals> </equals>
</condition> </condition>
<value>150</value> <value>120</value>
</u_min> </u_min>
<u_min> <u_min>
<condition>
<equals>
<property>/it-autoflight/output/thr-mode</property>
<value>1</value>
</equals>
</condition>
<expression> <expression>
<dif> <difference>
<property>/it-autoflight/internal/vert-speed-fpm</property> <property>/it-autoflight/internal/vert-speed-fpm</property>
<value>2500</value> <value>2500</value>
</dif> </difference>
</expression> </expression>
</u_min> </u_min>
<u_max>
<condition>
<and>
<equals>
<property>/it-autoflight/output/thr-mode</property>
<value>2</value>
</equals>
<and>
<equals>
<property>/gear/gear[1]/wow</property>
<value>0</value>
</equals>
<equals>
<property>/gear/gear[2]/wow</property>
<value>0</value>
</equals>
</and>
</and>
</condition>
<expression>
<sum>
<property>/it-autoflight/internal/vert-speed-fpm</property>
<value>2500</value>
</sum>
</expression>
</u_max>
<u_max> <u_max>
<condition> <condition>
<and> <and>
@ -302,29 +157,9 @@
<value>1</value> <value>1</value>
</equals> </equals>
</condition> </condition>
<value>-150</value> <value>-120</value>
</u_max> </u_max>
<u_min>
<condition>
<equals>
<property>/it-autoflight/output/thr-mode</property>
<value>0</value>
</equals>
</condition>
<expression>
<dif>
<property>/it-autoflight/internal/vert-speed-fpm</property>
<value>2500</value>
</dif>
</expression>
</u_min>
<u_max> <u_max>
<condition>
<equals>
<property>/it-autoflight/output/thr-mode</property>
<value>0</value>
</equals>
</condition>
<expression> <expression>
<sum> <sum>
<property>/it-autoflight/internal/vert-speed-fpm</property> <property>/it-autoflight/internal/vert-speed-fpm</property>
@ -335,6 +170,190 @@
</config> </config>
</pid-controller> </pid-controller>
<filter>
<name>Speed By Pitch Inactive Sync</name>
<debug>false</debug>
<type>gain</type>
<gain>1.0</gain>
<enable>
<condition>
<not><property>/it-autoflight/internal/flch-active</property></not>
</condition>
</enable>
<input>/it-autoflight/internal/vert-speed-fpm</input>
<output>/it-autoflight/internal/target-fpm-flch</output>
</filter>
<logic>
<input>
<and>
<equals>
<property>/it-autoflight/output/vert</property>
<value>5</value>
</equals>
<or>
<equals>
<property>/it-autoflight/output/ap1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/ap2</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/fd1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/fd2</property>
<value>1</value>
</equals>
</or>
</and>
</input>
<output>/it-autoflight/internal/fpa-active</output>
</logic>
<filter>
<name>IT-CONTROLLER: FPA</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<condition>
<not><property>/it-autoflight/internal/fpa-active</property></not>
</condition>
<property>/it-autoflight/internal/vert-speed-fpm</property>
</input>
<input>
<expression>
<sum>
<difference> <!-- Fix an issue with the calculation -->
<property>/it-autoflight/internal/vert-speed-fpm</property>
<product>
<property>/velocities/vertical-speed-fps</property>
<value>60</value>
</product>
</difference>
<product>
<sin>
<deg2rad>
<property>/it-autoflight/input/fpa</property>
</deg2rad>
</sin>
<property>/instrumentation/airspeed-indicator/true-speed-kt</property>
<value>101.26859142607174</value> <!-- FPM to Knot -->
</product>
</sum>
</expression>
</input>
<output>/it-autoflight/internal/target-fpm-fpa-raw</output>
<min>
<expression>
<difference>
<property>/it-autoflight/internal/vert-speed-fpm</property>
<value>2500</value>
</difference>
</expression>
</min>
<max>
<expression>
<sum>
<property>/it-autoflight/internal/vert-speed-fpm</property>
<value>2500</value>
</sum>
</expression>
</max>
</filter>
<filter>
<name>FPA FPM Filter</name>
<type>noise-spike</type>
<input>/it-autoflight/internal/target-fpm-fpa-raw</input>
<output>/it-autoflight/internal/target-fpm-fpa</output>
<max-rate-of-change>
<condition>
<not><property>/it-autoflight/internal/fpa-active</property></not>
</condition>
<value>10000</value>
</max-rate-of-change>
<max-rate-of-change>300</max-rate-of-change>
</filter>
<filter>
<name>IT-CONTROLLER: Flare FD</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<expression>
<sum>
<difference> <!-- Fix an issue with the calculation -->
<property>/it-autoflight/internal/vert-speed-fpm</property>
<product>
<property>/velocities/vertical-speed-fps</property>
<value>60</value>
</product>
</difference>
<product>
<sin>
<deg2rad>
<table>
<property>/position/gear-agl-ft</property>
<entry><ind>100</ind><dep>-2.80</dep></entry>
<entry><ind> 50</ind><dep>-2.12</dep></entry>
<entry><ind> 45</ind><dep>-0.61</dep></entry>
</table>
</deg2rad>
</sin>
<property>/instrumentation/airspeed-indicator/true-speed-kt</property>
<value>101.26859142607174</value> <!-- FPM to Knot -->
</product>
</sum>
</expression>
</input>
<output>/it-autoflight/internal/target-fpm-land-fd</output>
<min>-1200</min>
<max>0</max>
</filter>
<filter>
<name>IT-CONTROLLER: Flare</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<expression>
<sum>
<difference> <!-- Fix an issue with the calculation -->
<property>/it-autoflight/internal/vert-speed-fpm</property>
<product>
<property>/velocities/vertical-speed-fps</property>
<value>60</value>
</product>
</difference>
<product>
<sin>
<deg2rad>
<table>
<property>/position/gear-agl-ft</property>
<entry><ind>100</ind><dep>-2.80</dep></entry>
<entry><ind> 50</ind><dep>-2.12</dep></entry>
<entry><ind> 40</ind><dep>-1.58</dep></entry>
<entry><ind> 30</ind><dep>-1.23</dep></entry>
<entry><ind> 20</ind><dep>-0.92</dep></entry>
<entry><ind> 10</ind><dep>-0.61</dep></entry>
</table>
</deg2rad>
</sin>
<property>/instrumentation/airspeed-indicator/true-speed-kt</property>
<value>101.26859142607174</value> <!-- FPM to Knot -->
</product>
</sum>
</expression>
</input>
<output>/it-autoflight/internal/target-fpm-land</output>
<min>-1200</min>
<max>0</max>
</filter>
<filter> <filter>
<name>TARGET FPM</name> <name>TARGET FPM</name>
<debug>false</debug> <debug>false</debug>
@ -347,7 +366,7 @@
<value>0</value> <value>0</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/target-fpm</property> <property>/it-autoflight/internal/target-fpm-alt</property>
</input> </input>
<input> <input>
<condition> <condition>
@ -371,7 +390,7 @@
</equals> </equals>
</or> </or>
</condition> </condition>
<property>/it-autoflight/internal/target-fpm-b</property> <property>/it-autoflight/internal/target-fpm-flch</property>
</input> </input>
<input> <input>
<condition> <condition>
@ -380,7 +399,7 @@
<value>6</value> <value>6</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/target-fpm-c2</property> <property>/it-autoflight/internal/target-fpm-land-fd</property>
</input> </input>
<input> <input>
<condition> <condition>
@ -389,7 +408,7 @@
<value>5</value> <value>5</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/target-fpm-d</property> <property>/it-autoflight/internal/target-fpm-fpa-raw</property>
</input> </input>
<input> <input>
<condition> <condition>
@ -398,61 +417,25 @@
<value>2</value> <value>2</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/nav1-rate-of-climb-fpm</property> <property>/it-autoflight/internal/nav-rate-of-climb-fpm</property>
</input> </input>
<output>/it-autoflight/internal/target-common-fpm</output> <output>/it-autoflight/internal/target-common-fpm</output>
</filter> </filter>
<pid-controller> <pid-controller>
<name>FPM HOLD</name> <name>IT-CONTROLLER: FPM Hold</name>
<debug>false</debug> <debug>false</debug>
<enable> <enable>
<condition> <condition>
<and> <and>
<or> <equals>
<equals> <property>/gear/gear[1]/wow</property>
<property>/it-autoflight/output/vert</property> <value>0</value>
<value>0</value> </equals>
</equals> <equals>
<equals> <property>/gear/gear[2]/wow</property>
<property>/it-autoflight/output/vert</property> <value>0</value>
<value>1</value> </equals>
</equals>
<equals>
<property>/it-autoflight/output/vert</property>
<value>2</value>
</equals>
<equals>
<property>/it-autoflight/output/vert</property>
<value>4</value>
</equals>
<equals>
<property>/it-autoflight/output/vert</property>
<value>5</value>
</equals>
<and>
<equals>
<property>/it-autoflight/output/vert</property>
<value>6</value>
</equals>
<equals>
<property>/gear/gear[1]/wow</property>
<value>0</value>
</equals>
<equals>
<property>/gear/gear[2]/wow</property>
<value>0</value>
</equals>
</and>
<equals>
<property>/it-autoflight/output/vert</property>
<value>7</value>
</equals>
<equals>
<property>/it-autoflight/output/vert</property>
<value>8</value>
</equals>
</or>
<or> <or>
<equals> <equals>
<property>/it-autoflight/output/ap1</property> <property>/it-autoflight/output/ap1</property>
@ -467,15 +450,6 @@
</condition> </condition>
</enable> </enable>
<input>/it-autoflight/internal/vert-speed-fpm</input> <input>/it-autoflight/internal/vert-speed-fpm</input>
<reference>
<condition>
<equals>
<property>/it-autoflight/output/vert</property>
<value>0</value>
</equals>
</condition>
<property>/it-autoflight/internal/target-fpm</property>
</reference>
<reference> <reference>
<condition> <condition>
<equals> <equals>
@ -485,30 +459,6 @@
</condition> </condition>
<property>/it-autoflight/internal/vs</property> <property>/it-autoflight/internal/vs</property>
</reference> </reference>
<reference>
<condition>
<or>
<equals>
<property>/it-autoflight/output/vert</property>
<value>4</value>
</equals>
<equals>
<property>/it-autoflight/output/vert</property>
<value>7</value>
</equals>
</or>
</condition>
<property>/it-autoflight/internal/target-fpm-b</property>
</reference>
<reference>
<condition>
<equals>
<property>/it-autoflight/output/vert</property>
<value>6</value>
</equals>
</condition>
<property>/it-autoflight/internal/target-fpm-c</property>
</reference>
<reference> <reference>
<condition> <condition>
<equals> <equals>
@ -516,17 +466,18 @@
<value>5</value> <value>5</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/target-fpm-d</property> <property>/it-autoflight/internal/target-fpm-fpa</property>
</reference> </reference>
<reference> <reference>
<condition> <condition>
<equals> <equals>
<property>/it-autoflight/output/vert</property> <property>/it-autoflight/output/vert</property>
<value>2</value> <value>6</value>
</equals> </equals>
</condition> </condition>
<property>/it-autoflight/internal/nav1-rate-of-climb-fpm</property> <property>/it-autoflight/internal/target-fpm-land</property>
</reference> </reference>
<reference>/it-autoflight/internal/target-common-fpm</reference>
<output>/it-autoflight/internal/target-pitch-deg</output> <output>/it-autoflight/internal/target-pitch-deg</output>
<config> <config>
<Kp> <Kp>
@ -555,23 +506,6 @@
</Kp> </Kp>
<Ti>2.5</Ti> <Ti>2.5</Ti>
<Td>0.0001</Td> <Td>0.0001</Td>
<u_min>
<condition>
<not-equals>
<property>/it-autoflight/output/vert</property>
<value>6</value>
</not-equals>
</condition>
<expression>
<max>
<dif>
<property>/orientation/pitch-deg</property>
<value>5</value>
</dif>
<value>-10</value>
</max>
</expression>
</u_min>
<u_min> <u_min>
<condition> <condition>
<equals> <equals>
@ -581,29 +515,17 @@
</condition> </condition>
<value>0</value> <value>0</value>
</u_min> </u_min>
<u_max> <u_min>
<condition>
<and>
<equals>
<property>/gear/gear[1]/wow</property>
<value>0</value>
</equals>
<equals>
<property>/gear/gear[2]/wow</property>
<value>0</value>
</equals>
</and>
</condition>
<expression> <expression>
<min> <max>
<sum> <dif>
<property>/orientation/pitch-deg</property> <property>/orientation/pitch-deg</property>
<value>5</value> <value>5</value>
</sum> </dif>
<value>30</value> <value>-15</value>
</min> </max>
</expression> </expression>
</u_max> </u_min>
<u_max> <u_max>
<condition> <condition>
<or> <or>
@ -619,26 +541,66 @@
</condition> </condition>
<value>10</value> <value>10</value>
</u_max> </u_max>
<u_max>
<condition>
<equals>
<property>/it-autoflight/output/vert</property>
<value>7</value>
</equals>
</condition>
<expression>
<min>
<sum>
<property>/orientation/pitch-deg</property>
<value>5</value>
</sum>
<value>18</value>
</min>
</expression>
</u_max>
<u_max>
<expression>
<min>
<sum>
<property>/orientation/pitch-deg</property>
<value>5</value>
</sum>
<value>30</value>
</min>
</expression>
</u_max>
</config> </config>
</pid-controller> </pid-controller>
<filter> <filter>
<name>PITCH DEG SYNC</name> <name>System Command: Pitch Target Inactive Sync</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
<enable> <enable>
<condition> <condition>
<and> <not>
<not-equals> <and>
<property>/it-autoflight/output/ap1</property> <equals>
<value>1</value> <property>/gear/gear[1]/wow</property>
</not-equals> <value>0</value>
<not-equals> </equals>
<property>/it-autoflight/output/ap2</property> <equals>
<value>1</value> <property>/gear/gear[2]/wow</property>
</not-equals> <value>0</value>
</and> </equals>
<or>
<equals>
<property>/it-autoflight/output/ap1</property>
<value>1</value>
</equals>
<equals>
<property>/it-autoflight/output/ap2</property>
<value>1</value>
</equals>
</or>
</and>
</not>
</condition> </condition>
</enable> </enable>
<input>/orientation/pitch-deg</input> <input>/orientation/pitch-deg</input>
@ -648,10 +610,10 @@
</filter> </filter>
<filter> <filter>
<name>System Command: Pitch Rate</name> <name>System Command: Pitch Rate Target</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>0.15</gain> <gain>0.125</gain>
<input>/orientation/pitch-deg</input> <input>/orientation/pitch-deg</input>
<reference>/it-autoflight/internal/target-pitch-deg</reference> <reference>/it-autoflight/internal/target-pitch-deg</reference>
<output>/fdm/jsbsim/fbw/fmgc/pitch-cmd</output> <!-- Inputs to the FBW Pitch --> <output>/fdm/jsbsim/fbw/fmgc/pitch-cmd</output> <!-- Inputs to the FBW Pitch -->

View file

@ -1,15 +1,13 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<!-- IT-AUTOFLIGHT --> <!-- IT-AUTOFLIGHT -->
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<PropertyList> <PropertyList>
<!-- Roll Axis --> <!-- Roll Axis -->
<filter> <filter>
<name>IT-CONTROLLER: HDG/LNAV ROLL</name> <name>IT-CONTROLLER: Heading/LNAV</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain> <gain>
@ -66,7 +64,7 @@
</filter> </filter>
<filter> <filter>
<name>IT-CONTROLLER: VORLOC ROLL</name> <name>IT-CONTROLLER: VOR/LOC</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain> <gain>
@ -117,7 +115,29 @@
</filter> </filter>
<filter> <filter>
<name>ROLL DEG SYNC</name> <name>IT-CONTROLLER: Align/Rollout/Takeoff</name>
<debug>false</debug>
<type>noise-spike</type>
<enable>
<condition>
<or>
<equals>
<property>/it-autoflight/output/lat</property>
<value>4</value>
</equals>
<equals>
<property>/it-autoflight/output/lat</property>
<value>5</value>
</equals>
</or>
</condition>
</enable>
<input>0</input>
<output>/it-autoflight/internal/target-roll-deg</output>
</filter>
<filter>
<name>System Command: Roll Target Inactive Sync</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -153,24 +173,9 @@
</filter> </filter>
<filter> <filter>
<name>IT-CONTROLLER: TARGET ROLL CMD</name> <name>System Command: Target Roll Filter</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<input>
<condition>
<or>
<equals>
<property>/it-autoflight/output/lat</property>
<value>4</value>
</equals>
<equals>
<property>/it-autoflight/output/lat</property>
<value>5</value>
</equals>
</or>
</condition>
<value>0</value>
</input>
<input>/it-autoflight/internal/target-roll-deg</input> <input>/it-autoflight/internal/target-roll-deg</input>
<output>/it-autoflight/internal/target-roll</output> <output>/it-autoflight/internal/target-roll</output>
<max-rate-of-change> <max-rate-of-change>
@ -215,7 +220,7 @@
</filter> </filter>
<filter> <filter>
<name>System Command: Roll Rate</name> <name>System Command: Roll Rate Target</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>-0.1</gain> <gain>-0.1</gain>
@ -227,9 +232,8 @@
</filter> </filter>
<!-- Yaw Axis --> <!-- Yaw Axis -->
<pi-simple-controller> <pi-simple-controller>
<name>RUDDER VORLOC TRK</name> <name>IT-CONTROLLER: Yaw VOR/LOC</name>
<debug>false</debug> <debug>false</debug>
<enable> <enable>
<condition> <condition>
@ -266,7 +270,7 @@
</pi-simple-controller> </pi-simple-controller>
<filter> <filter>
<name>IT-CONTROLLER: RUDDER CMD</name> <name>System Command: Rudder</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<input> <input>

View file

@ -5,15 +5,30 @@
<PropertyList> <PropertyList>
<!-- Thrust Axis --> <!-- Thrust Axis -->
<filter> <filter>
<name>KTS INPUT FILTER</name> <name>A/THR Knots Input Filter</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<feedback-if-disabled>true</feedback-if-disabled> <feedback-if-disabled>true</feedback-if-disabled>
<initialize-to>output</initialize-to> <initialize-to>output</initialize-to>
<input>/it-autoflight/input/spd-kts</input> <input>/it-autoflight/input/kts</input>
<output>/it-autoflight/internal/kts</output> <output>/it-autoflight/internal/athr-kts</output>
<min>
<expression>
<difference>
<property>/instrumentation/airspeed-indicator/indicated-speed-kt</property>
<value>25</value>
</difference>
</expression>
</min>
<max>
<expression>
<sum>
<property>/instrumentation/airspeed-indicator/indicated-speed-kt</property>
<value>25</value>
</sum>
</expression>
</max>
<max-rate-of-change> <max-rate-of-change>
<condition> <condition>
<and> <and>
@ -49,13 +64,29 @@
</filter> </filter>
<filter> <filter>
<name>MACH INPUT FILTER</name> <name>A/THR Mach Input Filter</name>
<debug>false</debug> <debug>false</debug>
<type>noise-spike</type> <type>noise-spike</type>
<feedback-if-disabled>true</feedback-if-disabled> <feedback-if-disabled>true</feedback-if-disabled>
<initialize-to>output</initialize-to> <initialize-to>output</initialize-to>
<input>/it-autoflight/input/spd-mach</input> <input>/it-autoflight/input/mach</input>
<output>/it-autoflight/internal/mach</output> <output>/it-autoflight/internal/athr-mach</output>
<min>
<expression>
<difference>
<property>/instrumentation/airspeed-indicator/indicated-mach</property>
<value>0.045</value>
</difference>
</expression>
</min>
<max>
<expression>
<sum>
<property>/instrumentation/airspeed-indicator/indicated-mach</property>
<value>0.045</value>
</sum>
</expression>
</max>
<max-rate-of-change> <max-rate-of-change>
<condition> <condition>
<and> <and>
@ -85,7 +116,7 @@
</not-equals> </not-equals>
</and> </and>
</condition> </condition>
<value>0.1</value> <value>0.08</value>
</max-rate-of-change> </max-rate-of-change>
<max-rate-of-change>2</max-rate-of-change> <max-rate-of-change>2</max-rate-of-change>
</filter> </filter>
@ -106,7 +137,7 @@
</filter> </filter>
<pid-controller> <pid-controller>
<name>IT-CONTROLLER: IAS THRUST</name> <name>IT-CONTROLLER: Knots</name>
<debug>false</debug> <debug>false</debug>
<enable> <enable>
<condition> <condition>
@ -217,7 +248,7 @@
</condition> </condition>
</enable> </enable>
<input>/it-autoflight/internal/current-speed-input</input> <input>/it-autoflight/internal/current-speed-input</input>
<reference>/it-autoflight/internal/kts</reference> <reference>/it-autoflight/internal/athr-kts</reference>
<output>/controls/engines/throttle-cmd-pid</output> <output>/controls/engines/throttle-cmd-pid</output>
<config> <config>
<Kp>0.055</Kp> <Kp>0.055</Kp>
@ -229,7 +260,7 @@
</pid-controller> </pid-controller>
<pid-controller> <pid-controller>
<name>IT-CONTROLLER: MACH THRUST</name> <name>IT-CONTROLLER: Mach</name>
<debug>false</debug> <debug>false</debug>
<enable> <enable>
<condition> <condition>
@ -341,11 +372,11 @@
</enable> </enable>
<input> <input>
<property>/it-autoflight/internal/current-mach-input</property> <property>/it-autoflight/internal/current-mach-input</property>
<scale>1000.0</scale> <scale>1000</scale>
</input> </input>
<reference> <reference>
<property>/it-autoflight/internal/mach</property> <property>/it-autoflight/internal/athr-mach</property>
<scale>1000.0</scale> <scale>1000</scale>
</reference> </reference>
<output>/controls/engines/throttle-cmd-pid</output> <output>/controls/engines/throttle-cmd-pid</output>
<config> <config>
@ -358,7 +389,7 @@
</pid-controller> </pid-controller>
<filter> <filter>
<name>IT-CONTROLLER: IDLE THRUST</name> <name>IT-CONTROLLER: Idle Limit</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -464,12 +495,12 @@
</and> </and>
</condition> </condition>
</enable> </enable>
<input>0.0</input> <input>0</input>
<output>/controls/engines/throttle-cmd-pid</output> <output>/controls/engines/throttle-cmd-pid</output>
</filter> </filter>
<filter> <filter>
<name>IT-CONTROLLER: LIMIT THRUST</name> <name>IT-CONTROLLER: Thrust Limit</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>
@ -575,12 +606,12 @@
</and> </and>
</condition> </condition>
</enable> </enable>
<input>1.0</input> <input>1</input>
<output>/controls/engines/throttle-cmd-pid</output> <output>/controls/engines/throttle-cmd-pid</output>
</filter> </filter>
<filter> <filter>
<name>IT-CONTROLLER: FEEDBACK IF DISABLED</name> <name>IT-CONTROLLER: Throttle Inactive Sync</name>
<debug>false</debug> <debug>false</debug>
<type>gain</type> <type>gain</type>
<gain>1.0</gain> <gain>1.0</gain>

View file

@ -1322,5 +1322,18 @@
</input> </input>
<output>/instrumentation/pfd/minimums-plus-100</output> <output>/instrumentation/pfd/minimums-plus-100</output>
</filter> </filter>
<logic>
<!-- somewhat confusing : this input is not 'are the flaps in landing configration', but rather,
'are the flaps NOT in a landing configuration'. There is a configuration bit to flip
the sense of this, if required. -->
<input>
<less-than>
<property>/controls/flight/flaps</property>
<value>0.8</value>
</less-than>
</input>
<output>/instrumentation/mk-viii/inputs/discretes/landing-flaps</output>
</logic>
</PropertyList> </PropertyList>

View file

@ -403,7 +403,7 @@
<row>0</row> <row>0</row>
<col>3</col> <col>3</col>
<pref-width>50</pref-width> <pref-width>50</pref-width>
<property>/it-autoflight/input/spd-kts</property> <property>/it-autoflight/input/kts</property>
<live type="bool">true</live> <live type="bool">true</live>
<enable> <enable>
<and> <and>
@ -529,7 +529,7 @@
<row>0</row> <row>0</row>
<col>3</col> <col>3</col>
<pref-width>50</pref-width> <pref-width>50</pref-width>
<property>/it-autoflight/input/spd-mach</property> <property>/it-autoflight/input/mach</property>
<live type="bool">true</live> <live type="bool">true</live>
<enable> <enable>
<and> <and>