From f412d3069e3296170638ebf5702c2abb44b4a881 Mon Sep 17 00:00:00 2001 From: Josh Davidson <joshuadavidson2000@gmail.com> Date: Mon, 20 Sep 2021 18:23:46 -0500 Subject: [PATCH] Control: Add overspeed pitch law with VD, VMO, and rework/fix spoilers, Aero: Fix aileron authority for proper roll rates as per FCOM --- A320-main.xml | 2 +- Nasal/FMGC/FMGC.nas | 4 +- Nasal/{FBW/it-fbw.nas => Systems/fbw.nas} | 20 +- Systems/a320-aerodynamics.xml | 8 +- Systems/a320-fbw.xml | 229 +++++++++++++++------- Systems/a320-fmgc.xml | 38 +++- Systems/a320-spoiler.xml | 44 ++--- Systems/fbw-pitch.xml | 77 -------- Systems/libraries.xml | 9 + 9 files changed, 239 insertions(+), 192 deletions(-) rename Nasal/{FBW/it-fbw.nas => Systems/fbw.nas} (94%) delete mode 100644 Systems/fbw-pitch.xml diff --git a/A320-main.xml b/A320-main.xml index 0f17726f..056dc846 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -4698,7 +4698,7 @@ <file>Aircraft/A320-family/Nasal/ECAM/ECAM-phases.nas</file> </ecam> <fbw> - <file>Aircraft/A320-family/Nasal/FBW/it-fbw.nas</file> + <file>Aircraft/A320-family/Nasal/Systems/fbw.nas</file> </fbw> <fcu> <file>Aircraft/A320-family/Nasal/FMGC/FCU.nas</file> diff --git a/Nasal/FMGC/FMGC.nas b/Nasal/FMGC/FMGC.nas index 83527ba4..7e627df5 100644 --- a/Nasal/FMGC/FMGC.nas +++ b/Nasal/FMGC/FMGC.nas @@ -115,7 +115,7 @@ var FMGCInternal = { # speeds alpha_prot: 0, alpha_max: 0, - vmo_mmo: 0, + vmo_mmo: props.globals.getNode("/FMGC/internal/vmo-mmo"), vsw: 0, vls_min: 0, clean: 0, @@ -688,7 +688,7 @@ var masterFMGC = maketimer(0.2, func { } elsif (pts.Gear.position[0].getValue() != 0 or pts.Gear.position[1].getValue() != 0 or pts.Gear.position[2].getValue() != 0) { FMGCInternal.maxspeed = 284; } else { - FMGCInternal.maxspeed = fmgc.FMGCInternal.vmo_mmo; + FMGCInternal.maxspeed = fmgc.FMGCInternal.vmo_mmo.getValue(); } if (newphase != FMGCInternal.phase) { # phase changed diff --git a/Nasal/FBW/it-fbw.nas b/Nasal/Systems/fbw.nas similarity index 94% rename from Nasal/FBW/it-fbw.nas rename to Nasal/Systems/fbw.nas index 53436637..adeed76e 100644 --- a/Nasal/FBW/it-fbw.nas +++ b/Nasal/Systems/fbw.nas @@ -87,7 +87,7 @@ var FBW = { fac2: props.globals.getNode("/systems/fctl/lights/fac2-fault"), }, Protections: { - overspeed: props.globals.getNode("/it-fbw/protections/overspeed"), + overspeed: props.globals.getNode("/fdm/jsbsim/fbw/protections/overspeed"), }, Sidestick: { active: [props.globals.getNode("/fdm/jsbsim/fbw/sidestick/active[0]"), props.globals.getNode("/fdm/jsbsim/fbw/sidestick/active[1]")], @@ -240,26 +240,10 @@ var update_loop = func { } } - - cas = pts.Instrumentation.AirspeedIndicator.indicatedSpdKt.getValue(); - mmoIAS = (cas / pts.Instrumentation.AirspeedIndicator.indicatedMach.getValue()) * 0.82; - if (mmoIAS < 350) { - fmgc.FMGCInternal.vmo_mmo = mmoIAS; - } else { - fmgc.FMGCInternal.vmo_mmo = 350; - } - - if (cas > (fmgc.FMGCInternal.vmo_mmo + 6) and (law == 0 or law == 1)) { + if (FBW.Protections.overspeed.getBoolValue()) { if (fmgc.Input.ap1.getBoolValue() or fmgc.Input.ap2.getBoolValue()) { fcu.apOff("hard", 0); } - if (!FBW.Protections.overspeed.getBoolValue()) { - FBW.Protections.overspeed.setBoolValue(1); - } - } else { - if (FBW.Protections.overspeed.getBoolValue()) { - FBW.Protections.overspeed.setBoolValue(0); - } } } diff --git a/Systems/a320-aerodynamics.xml b/Systems/a320-aerodynamics.xml index 842dc582..2d831705 100644 --- a/Systems/a320-aerodynamics.xml +++ b/Systems/a320-aerodynamics.xml @@ -596,7 +596,7 @@ <property>metrics/Sw-sqft</property> <property>metrics/bw-ft</property> <toradians><property>hydraulics/aileron-l/final-deg</property></toradians> - <value>0.035</value> + <value>0.043</value> </product> </function> @@ -607,7 +607,7 @@ <property>metrics/Sw-sqft</property> <property>metrics/bw-ft</property> <toradians><property>hydraulics/aileron-r/final-deg</property></toradians> - <value>-0.035</value> + <value>-0.043</value> </product> </function> @@ -618,7 +618,7 @@ <property>metrics/Sw-sqft</property> <property>metrics/bw-ft</property> <toradians><property>fcs/spoiler-left-deg</property></toradians> - <value>-0.023</value> + <value>-0.027</value> </product> </function> @@ -629,7 +629,7 @@ <property>metrics/Sw-sqft</property> <property>metrics/bw-ft</property> <toradians><property>fcs/spoiler-right-deg</property></toradians> - <value>0.023</value> + <value>0.027</value> </product> </function> diff --git a/Systems/a320-fbw.xml b/Systems/a320-fbw.xml index e61482a6..35225b9e 100644 --- a/Systems/a320-fbw.xml +++ b/Systems/a320-fbw.xml @@ -14,6 +14,7 @@ <property value="1">fbw/mixer/sidestick-gain-feedback</property> <property value="0">fbw/spoiler-output</property> <property value="3.5">fbw/rate-c1</property> + <property value="0">fbw/pitch/ias-input</property> <!-- Default gains for tuning --> <property value="0">fbw/roll/p-gain</property> @@ -69,6 +70,18 @@ </test> </switch> + <switch name="fbw/protections/overspeed"> + <default value="fbw/protections/overspeed"/> + <test logic="OR" value="0"> + position/wow eq 1 + /it-fbw/law ne 0 + /instrumentation/airspeed-indicator/indicated-speed-kt le /FMGC/internal/vmo-mmo + </test> + <test value="1"> + /instrumentation/airspeed-indicator/indicated-speed-kt ge /FMGC/internal/vmo-mmo-plus-6 + </test> + </switch> + <fcs_function name="fbw/roll/p-gain"> <function> <table> @@ -105,7 +118,7 @@ <tableData> 0 1 140 -2.5 0.0 - 350 -0.5 0.0 + 350 -0.4 0.0 </tableData> </table> </function> @@ -147,7 +160,7 @@ <tableData> 0 1 140 2.0 0.0 - 350 0.4 0.0 + 350 0.3 0.0 </tableData> </table> </function> @@ -215,19 +228,6 @@ </function> </fcs_function> - <pid name="fbw/pitch/vc-kts-rate"> - <descripton>Use D only to calculate rate of IAS</descripton> - <input>velocities/vc-kts</input> - <kp>0.0</kp> - <ki>0.0</ki> - <kd>1.0</kd> - </pid> - - <lag_filter name="fbw/pitch/vc-kts-rate-lag"> - <input>fbw/pitch/vc-kts-rate</input> - <c1>1.0</c1> - </lag_filter> - <switch name="fbw/mixer/rate-limit"> <default value="fbw/mixer/rate-limit"/> <test logic="AND" value="0.5"> <!-- 2 seconds --> @@ -661,7 +661,7 @@ <switch name="fbw/roll/overspeed-overbank"> <default value="0"/> <test value="0"> - /it-fbw/protections/overspeed ne 1 + fbw/protections/overspeed ne 1 </test> <test logic="OR" value="1"> attitude/roll-rad lt -0.584685 @@ -673,7 +673,7 @@ <function> <ifthen> <eq> - <property>/it-fbw/protections/overspeed</property> + <property>fbw/protections/overspeed</property> <value>1</value> </eq> <table> @@ -714,9 +714,9 @@ <table> <independentVar lookup="row">fbw/roll/max-rad-error</independentVar> <tableData> - -0.174533 1.00 - -0.043633 0.25 - 0.000000 0.00 + -0.087266 1.0 + -0.034907 0.1 + 0.000000 0.0 </tableData> </table> </function> @@ -727,9 +727,9 @@ <table> <independentVar lookup="row">fbw/roll/min-rad-error</independentVar> <tableData> - 0.000000 0.00 - 0.043633 -0.25 - 0.174533 -1.00 + 0.000000 0.0 + 0.034907 -0.1 + 0.087266 -1.0 </tableData> </table> </function> @@ -758,8 +758,8 @@ <tableData> 0 1 0.000000 0.00 0.00 - 0.043633 -0.25 -0.25 - 0.174533 -0.67 -1.00 + 0.034907 -0.10 -0.10 + 0.087266 -0.67 -1.00 </tableData> </table> </function> @@ -772,8 +772,8 @@ <independentVar lookup="column">fbw/roll/overspeed-overbank</independentVar> <tableData> 0 1 - -0.174533 0.67 1.00 - -0.043633 0.25 0.25 + -0.087266 0.67 1.00 + -0.034907 0.10 0.10 0.000000 0.00 0.00 </tableData> </table> @@ -926,7 +926,7 @@ <product> <pow> <abs><property>fbw/roll/s-i-f-i</property></abs> - <value>1.625</value> + <value>1.7</value> </pow> <ifthen> <lt> @@ -956,51 +956,93 @@ </test> </switch> - <switch name="fbw/roll/s-l"> + <switch name="fbw/roll/s-l-2"> <default value="0"/> - <test value="fbw/roll/s-i"> - /it-fbw/law ne 3 - /systems/failures/aileron-left eq 0 + <test logic="OR" value="0"> + /it-fbw/law eq 3 </test> - <test value="fbw/aileron-output"> - /it-fbw/law ne 3 + <test logic="OR" value="fbw/roll/s-i"> + /it-fbw/law eq 0 + position/wow eq 1 /systems/failures/aileron-left eq 1 </test> </switch> - <switch name="fbw/roll/s-r"> + <switch name="fbw/roll/s-l-3"> + <default value="0"/> + <test logic="OR" value="0"> + /it-fbw/law eq 3 + </test> + <test logic="OR" value="fbw/roll/s-i"> + /it-fbw/law eq 0 + position/wow eq 1 + /systems/failures/aileron-left eq 1 + /systems/failures/spoilers/spoiler-l4 eq 1 + </test> + </switch> + + <switch name="fbw/roll/s-l-4"> <default value="0"/> <test value="fbw/roll/s-i"> /it-fbw/law ne 3 - /systems/failures/aileron-right eq 0 </test> - <test value="fbw/aileron-output"> + </switch> + + <switch name="fbw/roll/s-l-5"> + <default value="0"/> + <test value="fbw/roll/s-i"> /it-fbw/law ne 3 + </test> + </switch> + + <switch name="fbw/roll/s-r-2"> + <default value="0"/> + <test logic="OR" value="0"> + /it-fbw/law eq 3 + </test> + <test logic="OR" value="fbw/roll/s-i"> + /it-fbw/law eq 0 + position/wow eq 1 /systems/failures/aileron-right eq 1 </test> </switch> + + <switch name="fbw/roll/s-r-3"> + <default value="0"/> + <test logic="OR" value="0"> + /it-fbw/law eq 3 + </test> + <test logic="OR" value="fbw/roll/s-i"> + /it-fbw/law eq 0 + position/wow eq 1 + /systems/failures/aileron-right eq 1 + /systems/failures/spoilers/spoiler-r4 eq 1 + </test> + </switch> + + <switch name="fbw/roll/s-r-4"> + <default value="0"/> + <test value="fbw/roll/s-i"> + /it-fbw/law ne 3 + </test> + </switch> + + <switch name="fbw/roll/s-r-5"> + <default value="0"/> + <test value="fbw/roll/s-i"> + /it-fbw/law ne 3 + </test> + </switch> </channel> <channel name="FBW: Pitch"> - <switch name="fbw/pitch/elevator-max"> <!-- Prevent pitch down --> - <default value="1"/> - <test logic="AND" value="0"> - /it-fbw/law eq 0 - /it-fbw/protections/overspeed eq 1 - </test> - </switch> - <switch name="fbw/pitch/e-i-f"> <default value="fbw/sidestick/pitch-input"/> <test value="0"> fbw/fmgc/enabled eq 1 </test> - <clipto> - <min>-1.0</min> - <max>fbw/pitch/elevator-max</max> - </clipto> </switch> <actuator name="fbw/pitch/e-i-m"> @@ -1013,7 +1055,58 @@ <c1>20.0</c1> </lag_filter> - <fcs_function name="fbw/pitch/e-f-air"> + <pid name="fbw/pitch/vc-kts-rate"> + <descripton>Use D only to calculate rate of IAS</descripton> + <input>velocities/vc-kts</input> + <kp>0.0</kp> + <ki>0.0</ki> + <kd>1.0</kd> + </pid> + + <lag_filter name="fbw/pitch/vc-kts-rate-lag"> + <input>fbw/pitch/vc-kts-rate</input> + <c1>10.0</c1> + </lag_filter> + + <summer name="fbw/pitch/vmo-mmo-error"> + <input>fbw/pitch/ias-input</input> + <input>-/FMGC/internal/vmo-mmo</input> + </summer> + + <fcs_function name="fbw/pitch/e-i-overspeed"> + <function> + <table> + <independentVar lookup="row">fbw/sidestick/pitch-input</independentVar> + <independentVar lookup="column">fbw/pitch/vc-kts-rate</independentVar> + <independentVar lookup="table">fbw/pitch/vmo-mmo-error</independentVar> + <tableData breakPoint="6"> <!-- Engage point, reduced forwards authority --> + -1 1 3 + -1 -1.0 -1.0 -1.0 + 0 0.0 -0.5 -0.7 + 1 0.3 0.3 0.3 + </tableData> + <tableData breakPoint="16"> <!-- VMO + 16, no forwards authority allowed --> + -2 0 2 + -1 -1.0 -1.0 -1.0 + 0 0.0 -0.5 -0.7 + 1 0.0 0.0 0.0 + </tableData> + <tableData breakPoint="31"> <!-- Full forward stabilizes just below VD --> + -3 -1 0 2 4 + -1 -1.0 -1.0 -1.0 -1.0 -1.0 + 0 0.0 -0.5 -0.5 -1.0 -1.0 + 1 0.0 0.0 0.0 -0.5 -1.0 + </tableData> + <tableData breakPoint="36"> <!-- Get under VD at all costs --> + -3 1 + -1 -1.0 -1.0 + 0 0.0 -1.0 + </tableData> + </table> + </function> + </fcs_function> + + <fcs_function name="fbw/pitch/e-i-flare"> <function> <sum> <property>fbw/sidestick/pitch-input</property> @@ -1065,9 +1158,9 @@ <table> <independentVar lookup="row">fbw/pitch/min-rad-error</independentVar> <tableData> - 0.000000 0.00 - 0.021817 0.25 - 0.087266 1.00 + 0.000000 0.0 + 0.034907 0.1 + 0.087266 1.0 </tableData> </table> </function> @@ -1078,9 +1171,9 @@ <table> <independentVar lookup="row">fbw/pitch/max-rad-error</independentVar> <tableData> - -0.087266 -1.00 - -0.021817 -0.25 - 0.000000 0.00 + -0.087266 -1.0 + -0.034907 -0.1 + 0.000000 0.0 </tableData> </table> </function> @@ -1088,7 +1181,11 @@ <switch name="fbw/pitch/e-i-cmd"> <default value="fbw/sidestick/pitch-input"/> - <test logic="AND" value="fbw/pitch/e-f-air"> + <test logic="AND" value="fbw/pitch/e-i-overspeed"> + fbw/protections/overspeed eq 1 + position/wow eq 0 + </test> + <test logic="AND" value="fbw/pitch/e-i-flare"> fbw/fmgc/enabled eq 0 /position/gear-agl-ft le 30 /controls/flight/flaps-pos ge 4 @@ -1099,7 +1196,7 @@ fbw/detent-2-feedback le 2 fadec/eng-out ne 1 </test> - <test logic="AND" value="fbw/pitch/e-f-air"> + <test logic="AND" value="fbw/pitch/e-i-flare"> fbw/fmgc/enabled eq 0 /position/gear-agl-ft le 30 /controls/flight/flaps-pos ge 4 @@ -1129,9 +1226,9 @@ <table> <independentVar lookup="row">fbw/pitch/max-rad-error</independentVar> <tableData> - 0.000000 0.00 - 0.021817 0.25 - 0.087266 1.00 + 0.000000 0.0 + 0.034907 0.1 + 0.087266 1.0 </tableData> </table> </function> @@ -1142,9 +1239,9 @@ <table> <independentVar lookup="row">fbw/pitch/min-rad-error</independentVar> <tableData> - -0.087266 -1.00 - -0.021817 -0.25 - 0.000000 0.00 + -0.087266 -1.0 + -0.034907 -0.1 + 0.000000 0.0 </tableData> </table> </function> @@ -1295,7 +1392,7 @@ attitude/roll-rad gt -0.628319 fbw/pitch/pid-switched ge 0.01 fbw/pitch/g-instrumented ge 0.5 - /it-fbw/protections/overspeed ne 1 + fbw/protections/overspeed ne 1 /controls/flight/elevator-trim le 0.32 position/wow eq 0 </test> @@ -1306,7 +1403,7 @@ attitude/roll-rad gt -0.628319 fbw/pitch/pid-switched le -0.01 fbw/pitch/g-instrumented ge 0.5 - /it-fbw/protections/overspeed ne 1 + fbw/protections/overspeed ne 1 /controls/flight/elevator-trim ge -1.0 position/wow eq 0 </test> diff --git a/Systems/a320-fmgc.xml b/Systems/a320-fmgc.xml index 15ecbd1c..ce9124fe 100644 --- a/Systems/a320-fmgc.xml +++ b/Systems/a320-fmgc.xml @@ -1,12 +1,46 @@ <?xml version="1.0"?> <!-- Airbus A320 FMGC --> -<!-- Copyright (c) 2019 Jonathan Redpath --> +<!-- Copyright (c) 2021 Josh Davidson and Jonathan Redpath --> <system name="A320: FMGC"> - + + <property value="350">/FMGC/internal/vmo-kts</property> + <channel name="FMGC" execrate="8"> + <fcs_function name="/FMGC/internal/mmo-kts"> + <function> + <product> + <quotient> + <property>/instrumentation/airspeed-indicator/indicated-speed-kt</property> + <max> <!-- Prevent divide by 0 --> + <property>/instrumentation/airspeed-indicator/indicated-mach</property> + <value>0.0000001</value> + </max> + </quotient> + <value>0.82</value> + </product> + </function> + </fcs_function> + + <switch name="/FMGC/internal/vmo-mmo"> + <default value="/FMGC/internal/vmo-kts"/> + <test logic="AND" value="/FMGC/internal/mmo-kts"> + /FMGC/internal/mmo-kts lt /FMGC/internal/vmo-kts + position/wow eq 0 + </test> + </switch> + + <fcs_function name="/FMGC/internal/vmo-mmo-plus-6"> + <function> + <sum> + <property>/FMGC/internal/vmo-mmo</property> + <value>6</value> + </sum> + </function> + </fcs_function> + <fcs_function name="/systems/fmgc/cas-compare/cas-1-to-3"> <function> <abs> diff --git a/Systems/a320-spoiler.xml b/Systems/a320-spoiler.xml index 7658d70b..4c787c78 100644 --- a/Systems/a320-spoiler.xml +++ b/Systems/a320-spoiler.xml @@ -188,7 +188,7 @@ <value>0.5</value> </product> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-2</independentVar> <tableData> 0.0 0.0 1.0 -0.55 @@ -203,7 +203,7 @@ <sum> <property>spoilers/main-cmd</property> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-2</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -216,7 +216,7 @@ <fcs_function name="hydraulics/spoiler-l2/retracted"> <function> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-2</independentVar> <tableData> -1.0 0.7 0.0 0.0 @@ -281,7 +281,7 @@ <sum> <property>spoilers/main-cmd</property> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-3</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -299,7 +299,7 @@ <value>0.8</value> </product> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-3</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -312,7 +312,7 @@ <fcs_function name="hydraulics/spoiler-l3/retracted"> <function> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-3</independentVar> <tableData> -1.0 0.7 0.0 0.0 @@ -377,7 +377,7 @@ <sum> <property>spoilers/main-cmd</property> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-4</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -395,7 +395,7 @@ <value>0.8</value> </product> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-4</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -408,7 +408,7 @@ <fcs_function name="hydraulics/spoiler-l4/retracted"> <function> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-4</independentVar> <tableData> -1.0 0.7 0.0 0.0 @@ -473,7 +473,7 @@ <sum> <property>spoilers/main-cmd</property> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-5</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -486,7 +486,7 @@ <fcs_function name="hydraulics/spoiler-l5/retracted"> <function> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-l-5</independentVar> <tableData> -1.0 0.7 0.0 0.0 @@ -609,7 +609,7 @@ <value>0.5</value> </product> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-2</independentVar> <tableData> -1.0 -0.55 0.0 0.0 @@ -624,7 +624,7 @@ <sum> <property>spoilers/main-cmd</property> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-2</independentVar> <tableData> -1.0 -0.7 0.0 0.0 @@ -637,7 +637,7 @@ <fcs_function name="hydraulics/spoiler-r2/retracted"> <function> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-2</independentVar> <tableData> 0.0 0.0 1.0 0.7 @@ -702,7 +702,7 @@ <sum> <property>spoilers/main-cmd</property> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-3</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -720,7 +720,7 @@ <value>0.8</value> </product> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-3</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -733,7 +733,7 @@ <fcs_function name="hydraulics/spoiler-r3/retracted"> <function> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-3</independentVar> <tableData> 0.0 0.0 1.0 0.7 @@ -798,7 +798,7 @@ <sum> <property>spoilers/main-cmd</property> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-4</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -816,7 +816,7 @@ <value>0.8</value> </product> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-4</independentVar> <tableData> 0.0 0.0 1.0 -0.7 @@ -829,7 +829,7 @@ <fcs_function name="hydraulics/spoiler-r4/retracted"> <function> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-4</independentVar> <tableData> 0.0 0.0 1.0 0.7 @@ -894,7 +894,7 @@ <sum> <property>spoilers/main-cmd</property> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-5</independentVar> <tableData> -1.0 -0.7 0.0 0.0 @@ -907,7 +907,7 @@ <fcs_function name="hydraulics/spoiler-r5/retracted"> <function> <table> - <independentVar lookup="row">fbw/roll/s-l</independentVar> + <independentVar lookup="row">fbw/roll/s-r-5</independentVar> <tableData> 0.0 0.0 1.0 0.7 diff --git a/Systems/fbw-pitch.xml b/Systems/fbw-pitch.xml deleted file mode 100644 index 6f7dca58..00000000 --- a/Systems/fbw-pitch.xml +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0"?> - -<!-- Copyright (c) 2021 Josh Davidson (Octal450) --> - -<!-- Airbus A3XX FBW System --> -<!-- I didn't see an easy way to do this controller in JSBsim, so I keep it here --> - -<PropertyList> - - <pi-simple-controller> - <name>FBW PITCH G PI</name> - <debug>false</debug> - <input>/fdm/jsbsim/fbw/pitch/g-error</input> - <reference>0</reference> - <output>/fdm/jsbsim/fbw/pitch/g-pi</output> - <config> - <Kp> - <expression> - <table> - <property>/fdm/jsbsim/velocities/vc-kts</property> - <entry><ind>140</ind><dep>-1.0</dep></entry> - <entry><ind>350</ind><dep>-0.5</dep></entry> - </table> - </expression> - </Kp> - <Ki> - <condition> - <and> - <equals> - <property>/fdm/jsbsim/position/wow</property> - <value>0</value> - </equals> - <or> - <equals> - <property>/it-fbw/law</property> - <value>0</value> - </equals> - <equals> - <property>/it-fbw/law</property> - <value>1</value> - </equals> - </or> - </and> - </condition> - <expression> - <table> - <property>/fdm/jsbsim/velocities/vc-kts</property> - <entry><ind>140</ind><dep>-1.0</dep></entry> - <entry><ind>350</ind><dep>-0.5</dep></entry> - </table> - </expression> - </Ki> - <Ki>0.0</Ki> - <min> - <condition> - <less-than> - <property>/fdm/jsbsim/fbw/pitch/e-i</property> - <value>0</value> - </less-than> - </condition> - <property>/fdm/jsbsim/fbw/pitch/e-i</property> - </min> - <min>0.0</min> - <max> - <condition> - <greater-than> - <property>/fdm/jsbsim/fbw/pitch/e-i</property> - <value>0</value> - </greater-than> - </condition> - <property>/fdm/jsbsim/fbw/pitch/e-i</property> - </max> - <max>0.0</max> - </config> - </pi-simple-controller> - -</PropertyList> diff --git a/Systems/libraries.xml b/Systems/libraries.xml index a8888794..518b49c5 100644 --- a/Systems/libraries.xml +++ b/Systems/libraries.xml @@ -1727,5 +1727,14 @@ </input> <output>/instrumentation/dcdu/lcd-contrast</output> </filter> + + <predict-simple> + <name>FBW Pitch IAS Predictor</name> + <debug>false</debug> + <input>/instrumentation/airspeed-indicator/indicated-speed-kt</input> + <output>/fdm/jsbsim/fbw/pitch/ias-input</output> + <seconds>1.0</seconds> + <filter-gain>0</filter-gain> + </predict-simple> </PropertyList>