From 767916b4dac46e0f83d846e401dca7fece229775 Mon Sep 17 00:00:00 2001 From: Joshua Davidson Date: Thu, 6 Apr 2017 15:06:35 -0400 Subject: [PATCH] Prerequisites for Fly By Wire --- A319-100-IAE-set.xml | 3 + A319-100-IAE.xml | 4 +- A320-200-IAE-set.xml | 3 + A320-200-IAE.xml | 4 +- A320-main.xml | 9 + A321-200-IAE-set.xml | 3 + A321-200-IAE.xml | 4 +- ACJ-IAE-set.xml | 3 + ACJ-IAE.xml | 4 +- Nasal/it-fbw.nas | 170 +++++++++++++++++ Systems/it-fbw.xml | 438 +++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 637 insertions(+), 8 deletions(-) create mode 100644 Nasal/it-fbw.nas create mode 100644 Systems/it-fbw.xml diff --git a/A319-100-IAE-set.xml b/A319-100-IAE-set.xml index 8d0e3078..fa296d1b 100644 --- a/A319-100-IAE-set.xml +++ b/A319-100-IAE-set.xml @@ -90,6 +90,9 @@ Aircraft/A320Family/Nasal/electrical.nas Aircraft/A320Family/Nasal/engines.nas + + Aircraft/A320Family/Nasal/it-fbw.nas + Aircraft/A320Family/Nasal/it-autoflight.nas diff --git a/A319-100-IAE.xml b/A319-100-IAE.xml index da01216f..c456e678 100644 --- a/A319-100-IAE.xml +++ b/A319-100-IAE.xml @@ -565,7 +565,7 @@ YAW MOI_________3950000______23089847_______24848934 - /controls/flight/elevator + /controls/flight/elevator-fbw /controls/flight/elevator-trim -1 @@ -598,7 +598,7 @@ YAW MOI_________3950000______23089847_______24848934 - /controls/flight/aileron + /controls/flight/aileron-fbw /controls/flight/aileron-trim -1 diff --git a/A320-200-IAE-set.xml b/A320-200-IAE-set.xml index cbd3b338..cb8d392b 100644 --- a/A320-200-IAE-set.xml +++ b/A320-200-IAE-set.xml @@ -83,6 +83,9 @@ Aircraft/A320Family/Nasal/electrical.nas Aircraft/A320Family/Nasal/engines.nas + + Aircraft/A320Family/Nasal/it-fbw.nas + Aircraft/A320Family/Nasal/it-autoflight.nas diff --git a/A320-200-IAE.xml b/A320-200-IAE.xml index 627d5e32..5f6a4063 100644 --- a/A320-200-IAE.xml +++ b/A320-200-IAE.xml @@ -565,7 +565,7 @@ YAW MOI_________3950000______23089847_______24848934 - /controls/flight/elevator + /controls/flight/elevator-fbw /controls/flight/elevator-trim -1 @@ -598,7 +598,7 @@ YAW MOI_________3950000______23089847_______24848934 - /controls/flight/aileron + /controls/flight/aileron-fbw /controls/flight/aileron-trim -1 diff --git a/A320-main.xml b/A320-main.xml index 4db7926e..a9777d8c 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -33,6 +33,10 @@ + + + Aircraft/A320Family/Systems/it-fbw.xml + Aircraft/A320Family/Systems/it-autoflight.xml @@ -265,6 +269,11 @@ + + 0 + 0 + + 0 diff --git a/A321-200-IAE-set.xml b/A321-200-IAE-set.xml index a6e24a31..f10e3ce7 100644 --- a/A321-200-IAE-set.xml +++ b/A321-200-IAE-set.xml @@ -83,6 +83,9 @@ Aircraft/A320Family/Nasal/electrical.nas Aircraft/A320Family/Nasal/engines.nas + + Aircraft/A320Family/Nasal/it-fbw.nas + Aircraft/A320Family/Nasal/it-autoflight.nas diff --git a/A321-200-IAE.xml b/A321-200-IAE.xml index c23c22e0..9dd4b6e7 100644 --- a/A321-200-IAE.xml +++ b/A321-200-IAE.xml @@ -578,7 +578,7 @@ YAW MOI_________3950000______23089847_______24848934 - /controls/flight/elevator + /controls/flight/elevator-fbw /controls/flight/elevator-trim -1 @@ -611,7 +611,7 @@ YAW MOI_________3950000______23089847_______24848934 - /controls/flight/aileron + /controls/flight/aileron-fbw /controls/flight/aileron-trim -1 diff --git a/ACJ-IAE-set.xml b/ACJ-IAE-set.xml index 32933902..6d5c0237 100644 --- a/ACJ-IAE-set.xml +++ b/ACJ-IAE-set.xml @@ -89,6 +89,9 @@ Aircraft/A320Family/Nasal/electrical.nas Aircraft/A320Family/Nasal/engines.nas + + Aircraft/A320Family/Nasal/it-fbw.nas + Aircraft/A320Family/Nasal/it-autoflight.nas diff --git a/ACJ-IAE.xml b/ACJ-IAE.xml index e0bc1e36..25f7f0e2 100644 --- a/ACJ-IAE.xml +++ b/ACJ-IAE.xml @@ -578,7 +578,7 @@ YAW MOI_________3950000______23089847_______24848934 - /controls/flight/elevator + /controls/flight/elevator-fbw /controls/flight/elevator-trim -1 @@ -611,7 +611,7 @@ YAW MOI_________3950000______23089847_______24848934 - /controls/flight/aileron + /controls/flight/aileron-fbw /controls/flight/aileron-trim -1 diff --git a/Nasal/it-fbw.nas b/Nasal/it-fbw.nas new file mode 100644 index 00000000..8cdbd4b1 --- /dev/null +++ b/Nasal/it-fbw.nas @@ -0,0 +1,170 @@ +# A320 FBW System by Joshua Davidson (it0uchpods/411) +# V0.8 + +var roll_input = func { + + if (getprop("/it-autoflight/output/ap1") == 0 and getprop("/it-autoflight/output/ap2") == 0 and ((getprop("/it-fbw/law") == "NORMAL") or (getprop("/it-fbw/law") == "ALTERNATE"))) { + var ail = getprop("/controls/flight/aileron"); + + if (ail >= 0.05 and ail < 0.15) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw + "0.01"); + } else if (ail >= 0.15 and ail < 0.3) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw + "0.05"); + } else if (ail >= 0.3 and ail < 0.5) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw + "0.1"); + } else if (ail >= 0.5 and ail < 0.7) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw + "0.2"); + } else if (ail >= 0.7 and ail <= 1) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw + "0.3"); + } + + if (ail <= -0.05 and ail > -0.15) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw - "0.01"); + } else if (ail <= -0.15 and ail > -0.3) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw - "0.05"); + } else if (ail <= -0.3 and ail > -0.5) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw - "0.1"); + } else if (ail <= -0.5 and ail > -0.7) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw - "0.2"); + } else if (ail <= -0.7 and ail >= -1) { + var rfbw = getprop("/it-fbw/roll-deg"); + setprop("/it-fbw/roll-deg", rfbw - "0.3"); + } + } + + if (getprop("/it-fbw/roll-deg") >= 30) { + if (getprop("/it-fbw/law") == "NORMAL") { + if (ail > 0.4) { + if (getprop("/it-fbw/roll-deg") >= 65) { + setprop("/it-fbw/roll-deg", "65"); + } + } else { + setprop("/it-fbw/roll-deg", "30"); + } + } + } + + if (getprop("/it-fbw/roll-deg") <= -30) { + if (getprop("/it-fbw/law") == "NORMAL") { + if (ail < -0.4) { + if (getprop("/it-fbw/roll-deg") <= -65) { + setprop("/it-fbw/roll-deg", "-65"); + } + } else { + setprop("/it-fbw/roll-deg", "-30"); + } + } + } + + if (getprop("/gear/gear[0]/wow") == 1) { + setprop("/it-fbw/roll-deg", "0"); + } + + settimer(roll_input, 0.01); +} + +var pitch_input = func { + + if (getprop("/it-autoflight/output/ap1") == 0 and getprop("/it-autoflight/output/ap2") == 0 and ((getprop("/it-fbw/law") == "NORMAL") or (getprop("/it-fbw/law") == "ALTERNATE"))) { + var elev = getprop("/controls/flight/elevator"); + + if (elev >= 0.05 and elev < 0.15) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw - "0.005"); + } else if (elev >= 0.15 and elev < 0.3) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw - "0.01"); + } else if (elev >= 0.3 and elev < 0.5) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw - "0.05"); + } else if (elev >= 0.5 and elev < 0.7) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw - "0.1"); + } else if (elev >= 0.7 and elev <= 1) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw - "0.15"); + } + + if (elev <= -0.05 and elev > -0.15) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw + "0.005"); + } else if (elev <= -0.15 and elev > -0.3) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw + "0.01"); + } else if (elev <= -0.3 and elev > -0.5) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw + "0.05"); + } else if (elev <= -0.5 and elev > -0.7) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw + "0.1"); + } else if (elev <= -0.7 and elev >= -1) { + var pfbw = getprop("/it-fbw/pitch-deg"); + setprop("/it-fbw/pitch-deg", pfbw + "0.15"); + } + } + + if (getprop("/it-fbw/pitch-deg") >= 15) { + if (getprop("/position/gear-agl-ft") <= 30) { + setprop("/it-fbw/pitch-deg", "15"); + } + if (getprop("/it-fbw/pitch-deg") >= 30) { + if (getprop("/it-fbw/law") == "NORMAL") { + setprop("/it-fbw/pitch-deg", "30"); + } + } + } + + if (getprop("/it-fbw/pitch-deg") <= -15) { + if (getprop("/it-fbw/law") == "NORMAL") { + setprop("/it-fbw/pitch-deg", "-15"); + } + } + + if (getprop("/gear/gear[0]/wow") == 1) { + if (elev > -0.1 and elev < 0.1) { + setprop("/it-fbw/pitch-deg", getprop("/orientation/pitch-deg")); + } + } + + settimer(pitch_input, 0.01); +} + +setlistener("/it-autoflight/output/ap1", func { + if (getprop("/it-autoflight/output/ap1") == 0) { + setprop("/it-fbw/roll-deg", getprop("/orientation/roll-deg")); + setprop("/it-fbw/pitch-deg", getprop("/orientation/pitch-deg")); + } +}); + +setlistener("/it-autoflight/output/ap2", func { + if (getprop("/it-autoflight/output/ap2") == 0) { + setprop("/it-fbw/roll-deg", getprop("/orientation/roll-deg")); + setprop("/it-fbw/pitch-deg", getprop("/orientation/pitch-deg")); + } +}); + +setlistener("/it-fbw/law", func { + if (getprop("/it-fbw/law") == "NORMAL") { + setprop("/it-fbw/roll-deg", getprop("/orientation/roll-deg")); + setprop("/it-fbw/pitch-deg", getprop("/orientation/pitch-deg")); + } else if (getprop("/it-fbw/law") == "ALTERNATE") { + setprop("/it-fbw/roll-deg", getprop("/orientation/roll-deg")); + setprop("/it-fbw/pitch-deg", getprop("/orientation/pitch-deg")); + } +}); + +setlistener("/sim/signals/fdm-initialized", func { + setprop("/it-fbw/law", "DIRECT"); # Will be changed to NORMAL when electric system powers up, as soon as I get the FBW/FDM stable + roll_input(); + pitch_input(); +# print("AIRBUS FBW ... OK!") # Don't advertise until it's working! ;) +}); diff --git a/Systems/it-fbw.xml b/Systems/it-fbw.xml new file mode 100644 index 00000000..7d763480 --- /dev/null +++ b/Systems/it-fbw.xml @@ -0,0 +1,438 @@ + + + + + + + + + + + + IT-FBW: ROLL + false + + + + + /it-autoflight/output/ap1 + 0 + + + /it-autoflight/output/ap2 + 0 + + + + /it-fbw/law + NORMAL + + + /it-fbw/law + ALTERNATE + + + + + + + /orientation/roll-deg + + + /it-fbw/roll-deg + + + /controls/flight/aileron-fbw-cmd + + + + /it-autoflight/config/roll/kp + + 1.0 + 0.1 + 0.0 + + /it-autoflight/config/roll/ti + + + /it-autoflight/config/roll/td + + + /it-autoflight/config/roll/umin + + + /it-autoflight/config/roll/umax + + + + + + IT-FBW: ROLL OPTION + false + true + output + + + + + /it-autoflight/output/ap1 + 0 + + + /it-autoflight/output/ap2 + 0 + + + /position/gear-agl-ft + 1 + + + + /it-fbw/law + NORMAL + + + /it-fbw/law + ALTERNATE + + + + + /controls/flight/aileron-fbw-cmd + + + + + + /it-autoflight/output/ap1 + 1 + + + /it-autoflight/output/ap2 + 1 + + + /position/gear-agl-ft + 1 + + + /it-fbw/law + DIRECT + + + + /controls/flight/aileron + + + + + /it-fbw/law + BACKUP + + + 0 + + /controls/flight/aileron-fbw + noise-spike + 10 + + + + + + + + IT-FBW: PITCH + false + + + + + /it-autoflight/output/ap1 + 0 + + + /it-autoflight/output/ap2 + 0 + + + + /it-fbw/law + NORMAL + + + /it-fbw/law + ALTERNATE + + + + + + + /orientation/pitch-deg + + + /it-fbw/pitch-deg + + + /controls/flight/elevator-fbw-cmd + + + + /it-autoflight/config/pitch/kp + + 1.0 + 0.1 + 0.0 + + /it-autoflight/config/pitch/ti + + + /it-autoflight/config/pitch/td + + + /it-autoflight/config/pitch/umin + + + /it-autoflight/config/pitch/umax + + + + + + IT-FBW: PITCH OPTION + false + true + output + + + + + /it-autoflight/output/ap1 + 0 + + + /it-autoflight/output/ap2 + 0 + + + /position/gear-agl-ft + 1 + + + + /it-fbw/law + NORMAL + + + /it-fbw/law + ALTERNATE + + + + + /controls/flight/elevator-fbw-cmd + + + + + + /it-autoflight/output/ap1 + 1 + + + /it-autoflight/output/ap2 + 1 + + + /position/gear-agl-ft + 1 + + + /it-fbw/law + DIRECT + + + + /controls/flight/elevator + + + + + /it-fbw/law + BACKUP + + + 0 + + /controls/flight/elevator-fbw + noise-spike + 10 + + + + AP PITCH HELPER PLUS + false + + + + + /controls/flight/elevator-fbw + 0.1 + + + /it-autoflight/output/ap1 + 0 + + + /it-autoflight/output/ap2 + 0 + + + + /it-fbw/law + NORMAL + + + /it-fbw/law + ALTERNATE + + + + /position/gear-agl-ft + 50 + + + + + + 0 + + + 1 + + + /controls/flight/elevator-trim-cmd + + + 0.08 + 1.0 + 0.1 + 0.0 + 10 + 0.00001 + -1.00 + 1.00 + + + + + FBW PITCH HELPER MINUS + false + + + + + /controls/flight/elevator-fbw + -0.1 + + + /it-autoflight/output/ap1 + 0 + + + /it-autoflight/output/ap2 + 0 + + + + /it-fbw/law + NORMAL + + + /it-fbw/law + ALTERNATE + + + + /position/gear-agl-ft + 50 + + + + + + 0 + + + 1 + + + /controls/flight/elevator-trim-cmd + + + -0.08 + 1.0 + 0.1 + 0.0 + 10 + 0.00001 + -1.00 + 1.00 + + + + + IT-FBW: PITCH TRIM FILTER + false + true + output + + + + + + /it-autoflight/output/ap1 + 0 + + + /it-autoflight/output/ap2 + 0 + + + + /it-fbw/law + NORMAL + + + /it-fbw/law + ALTERNATE + + + + /position/gear-agl-ft + 50 + + + + + /controls/flight/elevator-fbw + 0.05 + + + /controls/flight/elevator-fbw + -0.05 + + + + + + + /controls/flight/elevator-trim-cmd + + /controls/flight/elevator-trim + noise-spike + 0.01 + + +