1
0
Fork 0
A320-family/Systems/a320-fbw.xml

2084 lines
53 KiB
XML

<?xml version="1.0"?>
<!-- Airbus A320 FBW -->
<!-- Copyright (c) 2022 Josh Davidson (Octal450) -->
<system name="A320: FBW">
<property value="0">fbw/detent-1-feedback</property>
<property value="0">fbw/detent-2-feedback</property>
<property value="0">fbw/roll/pid</property>
<property value="0">fbw/pitch/load-factor-pi</property>
<property value="0">fbw/pitch/pid</property>
<property value="0">fbw/yaw/tc-pd</property>
<property value="1">fbw/pitch/mixer/sidestick-gain-feedback</property>
<property value="0">fbw/spoiler-output</property>
<property value="3">fbw/rate-c1</property>
<property value="0">fbw/pitch/ias-input</property>
<!-- Default gains for tuning -->
<property value="0">fbw/roll/p-gain</property>
<property value="0">fbw/roll/i-gain</property>
<property value="0">fbw/roll/d-gain</property>
<property value="0">fbw/pitch/p-gain</property>
<property value="0">fbw/pitch/i-gain</property>
<property value="0">fbw/pitch/d-gain</property>
<property value="0">fbw/yaw/yd-p-gain</property>
<property value="0">fbw/yaw/tc-p-gain</property>
<property value="0">fbw/yaw/tc-d-gain</property>
<!-- FMGC stuff -->
<property value="0">fbw/fmgc/roll-cmd</property>
<property value="0">fbw/fmgc/pitch-cmd</property>
<property value="0">fbw/fmgc/yaw-cmd</property>
<channel name="Libraries">
<switch name="fbw/roll/gain-switch">
<default value="0"/>
<test logic="OR" value="1">
position/wow eq 1
/it-fbw/law ne 0
</test>
</switch>
<switch name="fbw/pitch/gain-switch">
<default value="0"/>
<test logic="OR" value="1">
position/wow eq 1
/it-fbw/law eq 2
/it-fbw/law eq 3
</test>
</switch>
<switch name="fbw/yaw/gain-switch"> <!-- disable auto-trim -->
<default value="0"/>
<test logic="OR" value="1">
position/wow eq 1
<test logic="AND">
/it-fbw/yaw-law eq 2
/it-fbw/law ne 0
</test>
</test>
</switch>
<switch name="fbw/fmgc/enabled">
<default value="0"/>
<test logic="OR" value="1">
/it-autoflight/output/ap1 eq 1
/it-autoflight/output/ap2 eq 1
</test>
</switch>
<fcs_function name="fbw/alpha-stall-deg">
<function>
<table>
<independentVar lookup="row">atmosphere/density-altitude</independentVar>
<tableData>
0 15.5
43000 8.3
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/alpha-prot-deg">
<function>
<table>
<independentVar lookup="row">atmosphere/density-altitude</independentVar>
<independentVar lookup="column">fcs/flap-pos-deg</independentVar>
<independentVar lookup="table">fcs/slat-pos-deg</independentVar>
<tableData breakPoint="0">
0 10 15
0 9.0 11.0 10.5
43000 6.5 7.0 7.0
</tableData>
<tableData breakPoint="18">
0 10 15
0 10.0 11.0 10.5
43000 7.0 7.0 7.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/alpha-max-deg">
<function>
<table>
<independentVar lookup="row">atmosphere/density-altitude</independentVar>
<independentVar lookup="column">fcs/flap-pos-deg</independentVar>
<independentVar lookup="table">fcs/slat-pos-deg</independentVar>
<tableData breakPoint="0">
0 10 15
0 12.0 15.0 14.5
43000 7.4 7.7 7.7
</tableData>
<tableData breakPoint="18">
0 10 15
0 15.0 15.0 14.5
43000 7.7 7.7 7.7
</tableData>
</table>
</function>
</fcs_function>
<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
aero/alpha-deg-damped ge fbw/alpha-stall-deg
</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>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/roll/gain-switch</independentVar>
<tableData>
0 1
140 -20.0 0.0
350 -5.0 0.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/roll/i-gain">
<function>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/roll/gain-switch</independentVar>
<tableData>
0 1
140 -35.0 0.0
350 -10.0 0.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/roll/d-gain">
<function>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/roll/gain-switch</independentVar>
<tableData>
0 1
140 -1.9 0.0
350 -0.4 0.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/pitch/p-gain">
<function>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/pitch/gain-switch</independentVar>
<tableData>
0 1
140 28 0
350 20 0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/pitch/i-gain">
<function>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/pitch/gain-switch</independentVar>
<tableData>
0 1
140 60 0
350 40 0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/pitch/d-gain">
<function>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/pitch/gain-switch</independentVar>
<tableData>
0 1
140 2.0 0.0
350 0.3 0.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/yaw/yd-p-gain">
<function>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/yaw/gain-switch</independentVar>
<tableData>
0 1
140 -7.0 0.0
350 -1.2 0.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/yaw/tc-p-gain">
<function>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/yaw/gain-switch</independentVar>
<tableData>
0 1
140 3.0 0.0
350 1.5 0.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/yaw/tc-d-gain">
<function>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">fbw/yaw/gain-switch</independentVar>
<tableData>
0 1
140 6.0 0.0
350 3.0 0.0
</tableData>
</table>
</function>
</fcs_function>
<pure_gain name="fbw/pitch/g-instrumented">
<input>/accelerations/pilot-g</input>
<gain>1.0</gain>
</pure_gain>
<actuator name="fbw/roll/mixer/sidestick-gain">
<input>position/wow</input>
<rate_limit>2</rate_limit> <!-- 0.5 seconds -->
<output>fbw/roll/mixer/sidestick-gain-feedback</output>
</actuator>
<fcs_function name="fbw/roll/mixer/computer-gain">
<function>
<table>
<independentVar lookup="row">fbw/roll/mixer/sidestick-gain</independentVar>
<tableData>
0 1
1 0
</tableData>
</table>
</function>
</fcs_function>
<actuator name="fbw/pitch/mixer/sidestick-gain-linear">
<input>position/wow</input>
<rate_limit>0.2</rate_limit> <!-- 5 seconds -->
<output>fbw/pitch/mixer/sidestick-gain-feedback</output>
</actuator>
<fcs_function name="fbw/pitch/mixer/sidestick-gain">
<function>
<table>
<independentVar lookup="row">fbw/pitch/mixer/sidestick-gain-linear</independentVar>
<independentVar lookup="column">position/wow</independentVar>
<tableData>
0 1
0.0 0.0 0.0
0.4 0.2 0.7
0.6 0.3 0.8
1.0 1.0 1.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/pitch/mixer/computer-gain">
<function>
<table>
<independentVar lookup="row">fbw/pitch/mixer/sidestick-gain</independentVar>
<tableData>
0 1
1 0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/sidestick/roll-input-cmd">
<function>
<sum>
<product>
<property>/controls/flight/aileron[0]</property>
<property>fbw/sidestick/active[0]</property>
</product>
<product>
<property>/controls/flight/aileron[1]</property>
<property>fbw/sidestick/active[1]</property>
</product>
</sum>
</function>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</fcs_function>
<fcs_function name="fbw/sidestick/roll-input">
<function>
<table>
<independentVar lookup="row">fbw/sidestick/roll-input-cmd</independentVar>
<tableData>
-1.00 -1
-0.02 0
0.02 0
1.00 1
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/sidestick/pitch-input-cmd">
<function>
<sum>
<product>
<property>/controls/flight/elevator[0]</property>
<property>fbw/sidestick/active[0]</property>
</product>
<product>
<property>/controls/flight/elevator[1]</property>
<property>fbw/sidestick/active[1]</property>
</product>
</sum>
</function>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</fcs_function>
<fcs_function name="fbw/sidestick/pitch-input">
<function>
<table>
<independentVar lookup="row">fbw/sidestick/pitch-input-cmd</independentVar>
<tableData>
-1.00 -1
-0.02 0
0.02 0
1.00 1
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/sidestick/yaw-input-cmd">
<function>
<sum>
<product>
<property>/controls/flight/rudder[0]</property>
<property>fbw/sidestick/active[0]</property>
</product>
<product>
<property>/controls/flight/rudder[1]</property>
<property>fbw/sidestick/active[1]</property>
</product>
</sum>
</function>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</fcs_function>
<fcs_function name="fbw/sidestick/yaw-input">
<function>
<table>
<independentVar lookup="row">fbw/sidestick/yaw-input-cmd</independentVar>
<independentVar lookup="column">fbw/fmgc/enabled</independentVar>
<tableData>
0 1
-1.00 -1 0
-0.02 0 0
0.02 0 0
1.00 1 0
</tableData>
</table>
</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>10</c1>
</lag_filter>
<!-- Because we want to be attitude stable -->
<fcs_function name="fbw/roll/p-rad_sec">
<function>
<toradians>
<property>/orientation/roll-rate-degps</property>
</toradians>
</function>
</fcs_function>
<fcs_function name="fbw/pitch/thetadot-rad_sec">
<function>
<toradians>
<property>/orientation/pitch-rate-degps</property>
</toradians>
</function>
</fcs_function>
<!-- Custom Load Factor Calculation -->
<fcs_function name="fbw/pitch/load-factor-computed">
<function>
<ifthen>
<eq>
<property>position/wow</property>
<value>0</value>
</eq>
<sum>
<quotient>
<sum>
<product>
<property>velocities/q-rad_sec</property>
<property>velocities/u-fps</property>
</product>
<product>
<value>-1</value>
<property>velocities/p-rad_sec</property>
<property>velocities/v-fps</property>
</product>
<product>
<value>32.174</value>
<cos>
<property>attitude/theta-rad</property>
</cos>
<cos>
<property>attitude/phi-rad</property>
</cos>
</product>
<product>
<value>-1</value>
<property>accelerations/wdot-ft_sec2</property>
</product>
</sum>
<value>32.174</value>
</quotient>
<quotient>
<value>-1</value>
<cos>
<property>attitude/roll-rad</property>
</cos>
</quotient>
<value>1</value>
</sum>
<value>1</value>
</ifthen>
</function>
</fcs_function>
<lag_filter name="fbw/pitch/load-factor">
<input>fbw/pitch/load-factor-computed</input>
<c1>7.5</c1>
</lag_filter>
</channel>
<channel name="ELAC Power Supply">
<switch name="/systems/fctl/power-supply/elac1/relay-condition">
<default value="0"/>
<test logic="OR" value="1">
/systems/hydraulic/blue-psi ge 1500
/systems/hydraulic/green-psi ge 1500
/systems/hydraulic/yellow-psi ge 1500
</test>
</switch>
<!-- if ELAC1 is not powered, then the timer does not run - this makes behaviour with cold + dark OK -->
<switch name="/systems/fctl/power-supply/elac1/relay-rate">
<default value="100"/>
<test logic="OR" value="0.03333333333">
/systems/fctl/elac1 eq 1
</test>
</switch>
<actuator name="/systems/fctl/power-supply/elac1/relay-timer">
<input>/systems/fctl/power-supply/elac1/relay-condition</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">0.03333333333</rate_limit> <!-- 30s -->
</actuator>
<switch name="/systems/fctl/power-supply/elac1/relay">
<default value="0"/>
<test logic="AND" value="/systems/electrical/bus/sub-bus/dc-hot-1-703">
/systems/electrical/bus/sub-bus/dc-hot-1-703 ge 25
/systems/fctl/power-supply/elac1/relay-timer ne 0
</test>
</switch>
<switch name="/systems/fctl/power-supply/elac2/relay-power">
<default value="0"/>
<test logic="AND" value="1"> <!-- latch as long as power is lost -->
/systems/fctl/power-supply/elac2/relay-power eq 1
/systems/electrical/bus/sub-bus/dc-2-202 lt 25
</test>
<test logic="AND" value="1"> <!-- only trigger if the ELAC is on -->
/systems/fctl/elac2 eq 1
/systems/electrical/bus/sub-bus/dc-2-202 lt 25
</test>
</switch>
<!-- Only if the relay has already gone on -
if blue is low or gear is not extended, it will go permanently rather than for just 30 seconds
in addition this will happen even if the timer has already reached 30 seconds
however, it will not trigger if the relay is not yet triggered
and it should not trigger unless the ELAC has already gained and then lost power -->
<switch name="/systems/fctl/power-supply/elac2/relay-power-override">
<default value="0"/>
<test logic="AND" value="1">
<test logic="OR">
/systems/hydraulic/blue-psi lt 1500
/gear/gear[1]/position-norm ne 0
</test>
/systems/electrical/some-electric-thingie/speed-abv-100 eq 1
/systems/fctl/power-supply/elac2/relay-power eq 1
</test>
</switch>
<actuator name="/systems/fctl/power-supply/elac2/relay-timer">
<input>/systems/fctl/power-supply/elac2/relay-power</input>
<rate_limit sense="incr">0.03333333333</rate_limit>
<rate_limit sense="decr">100</rate_limit>
</actuator>
<switch name="/systems/fctl/power-supply/elac2/relay">
<default value="0"/>
<test logic="AND" value="/systems/electrical/bus/sub-bus/dc-hot-2-704">
/systems/electrical/bus/sub-bus/dc-hot-2-704 ge 25
/systems/fctl/power-supply/elac2/relay-power eq 1
<test logic="OR">
/systems/fctl/power-supply/elac2/relay-power-override eq 1
/systems/fctl/power-supply/elac2/relay-timer ne 1
</test>
</test>
</switch>
</channel>
<channel name="SEC Power Supply">
<switch name="/systems/fctl/power-supply/sec1/relay-condition">
<default value="0"/>
<test logic="OR" value="1">
/systems/hydraulic/blue-psi ge 1500
/systems/hydraulic/green-psi ge 1500
/systems/hydraulic/yellow-psi ge 1500
</test>
</switch>
<!-- if SEC1 is not powered, then the timer does not run - this makes behaviour with cold + dark OK -->
<switch name="/systems/fctl/power-supply/sec1/relay-rate">
<default value="100"/>
<test logic="OR" value="0.03333333333">
/systems/fctl/sec1 eq 1
</test>
</switch>
<actuator name="/systems/fctl/power-supply/sec1/relay-timer">
<input>/systems/fctl/power-supply/sec1/relay-condition</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">0.03333333333</rate_limit> <!-- 30s -->
</actuator>
<switch name="/systems/fctl/power-supply/sec1/relay">
<default value="0"/>
<test logic="AND" value="/systems/electrical/bus/sub-bus/dc-hot-1-703">
/systems/electrical/bus/sub-bus/dc-hot-1-703 ge 25
/systems/fctl/power-supply/sec1/relay-timer ne 0
</test>
</switch>
</channel>
<channel name="Computers">
<switch name="/systems/fctl/lights/elac1-fault">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/elac1 eq 1
/systems/fctl/elac1 eq 0
</test>
</switch>
<switch name="/systems/fctl/power-supply/elac1/has-power">
<default value="0"/>
<test logic="OR" value="1">
/systems/electrical/bus/dc-ess ge 25
/systems/fctl/power-supply/elac1/relay ge 25
</test>
</switch>
<actuator name="/systems/fctl/power-supply/elac1/has-power-output">
<input>/systems/fctl/power-supply/elac1/has-power</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">10</rate_limit> <!-- 100ms -->
</actuator>
<switch name="/systems/fctl/elac1">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/elac1 eq 1
/systems/failures/fctl/elac1 eq 0
/systems/fctl/power-supply/elac1/has-power-output ne 0
</test>
</switch>
<switch name="/systems/fctl/lights/elac2-fault">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/elac2 eq 1
/systems/fctl/elac2 eq 0
</test>
</switch>
<switch name="/systems/fctl/power-supply/elac2/has-power">
<default value="0"/>
<test logic="OR" value="1">
/systems/electrical/bus/sub-bus/dc-2-202 ge 25
/systems/fctl/power-supply/elac2/relay ge 25
</test>
</switch>
<actuator name="/systems/fctl/power-supply/elac2/has-power-output">
<input>/systems/fctl/power-supply/elac2/has-power</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">10</rate_limit> <!-- 100ms -->
</actuator>
<switch name="/systems/fctl/elac2">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/elac2 eq 1
/systems/failures/fctl/elac2 eq 0
/systems/fctl/power-supply/elac2/has-power-output ne 0
</test>
</switch>
<switch name="/systems/fctl/lights/sec1-fault">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/sec1 eq 1
/systems/fctl/sec1 eq 0
</test>
</switch>
<switch name="/systems/fctl/power-supply/sec1/has-power">
<default value="0"/>
<test logic="OR" value="1">
/systems/electrical/bus/dc-ess ge 25
/systems/fctl/power-supply/sec1/relay ge 25
</test>
</switch>
<actuator name="/systems/fctl/power-supply/sec1/has-power-output">
<input>/systems/fctl/power-supply/sec1/has-power</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">10</rate_limit> <!-- 100ms -->
</actuator>
<switch name="/systems/fctl/sec1">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/sec1 eq 1
/systems/failures/fctl/sec1 eq 0
/systems/fctl/power-supply/sec1/has-power-output ne 0
</test>
</switch>
<switch name="/systems/fctl/lights/sec2-fault">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/sec2 eq 1
/systems/fctl/sec2 eq 0
</test>
</switch>
<switch name="/systems/fctl/power-supply/sec2/has-power">
<default value="0"/>
<test logic="OR" value="1">
/systems/electrical/bus/sub-bus/dc-2-204 ge 25
</test>
</switch>
<actuator name="/systems/fctl/power-supply/sec2/has-power-output">
<input>/systems/fctl/power-supply/sec2/has-power</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">10</rate_limit> <!-- 100ms -->
</actuator>
<switch name="/systems/fctl/sec2">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/sec2 eq 1
/systems/failures/fctl/sec2 eq 0
/systems/fctl/power-supply/sec2/has-power-output ne 0
</test>
</switch>
<switch name="/systems/fctl/lights/sec3-fault">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/sec3 eq 1
/systems/fctl/sec3 eq 0
</test>
</switch>
<switch name="/systems/fctl/power-supply/sec3/has-power">
<default value="0"/>
<test logic="OR" value="1">
/systems/electrical/bus/sub-bus/dc-2-204 ge 25
</test>
</switch>
<actuator name="/systems/fctl/power-supply/sec3/has-power-output">
<input>/systems/fctl/power-supply/sec3/has-power</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">10</rate_limit> <!-- 100ms -->
</actuator>
<switch name="/systems/fctl/sec3">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/sec3 eq 1
/systems/failures/fctl/sec3 eq 0
/systems/fctl/power-supply/sec3/has-power-output ne 0
</test>
</switch>
<switch name="/systems/fctl/fac1-healthy-inp">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac1 eq 1
/systems/failures/fctl/fac1 eq 0
<test logic="OR">
/systems/electrical/bus/ac-ess ge 110
/systems/electrical/bus/dc-ess-shed ge 25
</test>
</test>
</switch>
<actuator name="/systems/fctl/fac1-healthy">
<input>/systems/fctl/fac1-healthy-inp</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">10</rate_limit>
</actuator>
<switch name="/systems/fctl/fac1-healthy-latch-set">
<default value="0"/>
<test logic="AND" value="1">
/gear/gear[0]/wow eq 0
/controls/fctl/switches/fac1 eq 1
/systems/fctl/fac1-healthy eq 0
</test>
</switch>
<switch name="/systems/fctl/fac1-healthy-latch-reset">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac1 eq 0
</test>
</switch>
<switch name="/systems/fctl/fac1-healthy-latch">
<default value="/systems/fctl/fac1-healthy-latch"/>
<test value="1">
/systems/fctl/fac1-healthy-latch-set eq 1
</test>
<test value="0">
/systems/fctl/fac1-healthy-latch-reset eq 1
</test>
</switch>
<switch name="/systems/fctl/fac1-healthy-signal">
<default value="0"/>
<test logic="AND" value="1">
/systems/fctl/fac1-healthy eq 1
<test logic="OR">
/systems/fctl/fac1-healthy-latch eq 0
/gear/gear[0]/wow eq 1
</test>
</test>
</switch>
<switch name="/systems/fctl/lights/fac1-fault">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac1 eq 1
/systems/fctl/fac1-healthy-signal eq 0
</test>
</switch>
<switch name="/systems/fctl/fac1">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac1 eq 1
/systems/fctl/fac1-healthy-signal eq 1
</test>
</switch>
<switch name="/systems/fctl/fac2-healthy-inp">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac2 eq 1
/systems/failures/fctl/fac2 eq 0
<test logic="OR">
/systems/electrical/bus/ac-2 ge 110
/systems/electrical/bus/dc-2 ge 25
</test>
</test>
</switch>
<actuator name="/systems/fctl/fac2-healthy">
<input>/systems/fctl/fac2-healthy-inp</input>
<rate_limit sense="incr">100</rate_limit>
<rate_limit sense="decr">10</rate_limit>
</actuator>
<switch name="/systems/fctl/fac2-healthy-latch-set">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac2 eq 1
/systems/fctl/fac2-healthy eq 0
</test>
</switch>
<switch name="/systems/fctl/fac2-healthy-latch-reset">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac2 eq 0
</test>
</switch>
<switch name="/systems/fctl/fac2-healthy-latch">
<default value="/systems/fctl/fac2-healthy-latch"/>
<test value="1">
/gear/gear[0]/wow eq 0
/systems/fctl/fac2-healthy-latch-set eq 1
</test>
<test value="0">
/systems/fctl/fac2-healthy-latch-reset eq 1
</test>
</switch>
<switch name="/systems/fctl/fac2-healthy-signal">
<default value="0"/>
<test logic="AND" value="1">
/systems/fctl/fac2-healthy eq 1
<test logic="OR">
/systems/fctl/fac2-healthy-latch eq 0
/gear/gear[0]/wow eq 1
</test>
</test>
</switch>
<switch name="/systems/fctl/lights/fac2-fault">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac2 eq 1
/systems/fctl/fac2-healthy-signal eq 0
</test>
</switch>
<switch name="/systems/fctl/fac2">
<default value="0"/>
<test logic="AND" value="1">
/controls/fctl/switches/fac2 eq 1
/systems/fctl/fac2-healthy-signal eq 1
</test>
</switch>
</channel>
<channel name="FBW: Roll">
<switch name="fbw/roll/a-i-f">
<default value="fbw/sidestick/roll-input"/>
<test value="0">
fbw/fmgc/enabled eq 1
</test>
</switch>
<actuator name="fbw/roll/a-i-m">
<input>fbw/roll/a-i-f</input>
<rate_limit>3.0</rate_limit>
</actuator>
<lag_filter name="fbw/roll/a-i-pfd">
<input>fbw/roll/a-i-m</input>
<c1>20</c1>
</lag_filter>
<fcs_function name="fbw/roll/max-rad-i-n">
<function>
<abs>
<table>
<independentVar lookup="row">fbw/roll/a-i-f</independentVar>
<tableData>
-1.00 -1
-0.25 0
0.25 0
1.00 1
</tableData>
</table>
</abs>
</function>
</fcs_function>
<fcs_function name="fbw/roll/max-rad-i-o">
<function>
<abs>
<property>fbw/roll/a-i-f</property>
</abs>
</function>
</fcs_function>
<lag_filter name="fbw/roll/max-rad-l-n">
<input>fbw/roll/max-rad-i-n</input>
<c1>fbw/rate-c1</c1>
</lag_filter>
<lag_filter name="fbw/roll/max-rad-l-o">
<input>fbw/roll/max-rad-i-o</input>
<c1>fbw/rate-c1</c1>
</lag_filter>
<switch name="fbw/roll/overspeed-overbank">
<default value="0"/>
<test value="0">
fbw/protections/overspeed ne 1
</test>
<test logic="OR" value="1">
attitude/roll-rad lt -0.584685
attitude/roll-rad gt 0.584685
</test>
</switch>
<fcs_function name="fbw/roll/max-rad">
<function>
<ifthen>
<eq>
<property>fbw/protections/overspeed</property>
<value>1</value>
</eq>
<table>
<independentVar lookup="row">fbw/roll/max-rad-l-o</independentVar>
<tableData>
0 0.000000
1 0.785398
</tableData>
</table>
<table>
<independentVar lookup="row">fbw/roll/max-rad-l-n</independentVar>
<tableData>
0 0.575959
1 1.169370
</tableData>
</table>
</ifthen>
</function>
</fcs_function>
<pure_gain name="fbw/roll/min-rad">
<input>fbw/roll/max-rad</input>
<gain>-1.0</gain>
</pure_gain>
<summer name="fbw/roll/max-rad-error">
<input>attitude/roll-rad</input>
<input>-fbw/roll/max-rad</input>
</summer>
<summer name="fbw/roll/min-rad-error">
<input>attitude/roll-rad</input>
<input>-fbw/roll/min-rad</input>
</summer>
<fcs_function name="fbw/roll/a-i-max">
<function>
<table>
<independentVar lookup="row">fbw/roll/max-rad-error</independentVar>
<tableData>
-0.087266 1.0
-0.034907 0.1
0.000000 0.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/roll/a-i-min">
<function>
<table>
<independentVar lookup="row">fbw/roll/min-rad-error</independentVar>
<tableData>
0.000000 0.0
0.034907 -0.1
0.087266 -1.0
</tableData>
</table>
</function>
</fcs_function>
<switch name="fbw/roll/a-i-cmd">
<default value="0"/>
<test logic="AND" value="fbw/sidestick/roll-input">
fbw/fmgc/enabled eq 0
</test>
<test logic="AND" value="fbw/fmgc/roll-cmd">
position/wow eq 0
fbw/fmgc/enabled eq 1
</test>
<clipto>
<min>fbw/roll/a-i-min</min>
<max>fbw/roll/a-i-max</max>
</clipto>
</switch>
<fcs_function name="fbw/roll/over-max">
<function>
<table>
<independentVar lookup="row">fbw/roll/max-rad-error</independentVar>
<independentVar lookup="column">fbw/roll/overspeed-overbank</independentVar>
<tableData>
0 1
0.000000 0.00 0.00
0.034907 -0.10 -0.10
0.087266 -0.67 -1.00
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/roll/over-min">
<function>
<table>
<independentVar lookup="row">fbw/roll/min-rad-error</independentVar>
<independentVar lookup="column">fbw/roll/overspeed-overbank</independentVar>
<tableData>
0 1
-0.087266 0.67 1.00
-0.034907 0.10 0.10
0.000000 0.00 0.00
</tableData>
</table>
</function>
</fcs_function>
<summer name="fbw/roll/a-i-sum">
<input>fbw/roll/a-i-cmd</input>
<input>fbw/roll/over-max</input>
<input>fbw/roll/over-min</input>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</summer>
<lag_filter name="fbw/roll/a-i">
<input>fbw/roll/a-i-sum</input>
<c1>fbw/rate-c1</c1>
</lag_filter>
<pure_gain name="fbw/roll/rate-demand">
<input>fbw/roll/a-i</input>
<gain>0.261799</gain>
</pure_gain>
<switch name="fbw/roll/p-r_s-s">
<default value="fbw/roll/p-rad_sec"/>
<test value="0">
gear/unit[0]/WOW eq 1
</test>
</switch>
<summer name="fbw/roll/rate-error">
<input>fbw/roll/p-r_s-s</input>
<input>-fbw/roll/rate-demand</input>
</summer>
<switch name="fbw/roll/trigger">
<default value="0"/>
<test value="-1">
fbw/roll/gain-switch gt 0
</test>
<test logic="OR" value="1">
fbw/roll/pid le -0.999
fbw/roll/pid ge 0.999
</test>
</switch>
<pid name="fbw/roll/pid-v">
<input>fbw/roll/rate-error</input>
<kp>fbw/roll/p-gain</kp>
<ki>fbw/roll/i-gain</ki>
<kd>fbw/roll/d-gain</kd>
<trigger>fbw/roll/trigger</trigger>
<output>fbw/roll/pid</output>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</pid>
<switch name="fbw/roll/gear-law-switch">
<default value="0"/>
<test logic="OR" value="1">
position/wow eq 1
/it-fbw/law eq 1
/it-fbw/law eq 2
</test>
</switch>
<pure_gain name="fbw/roll/rollout-cmd">
<input>/orientation/roll-deg</input>
<gain>-0.1</gain>
</pure_gain>
<pure_gain name="fbw/roll/mixer/computer-demand">
<input>fbw/roll/pid</input>
<gain>fbw/roll/mixer/computer-gain</gain>
</pure_gain>
<pure_gain name="fbw/roll/mixer/sidestick-demand">
<input>fbw/roll/a-i-f</input>
<gain>fbw/roll/mixer/sidestick-gain</gain>
</pure_gain>
<summer name="fbw/roll/mixer/output">
<input>fbw/roll/mixer/computer-demand</input>
<input>fbw/roll/mixer/sidestick-demand</input>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</summer>
<switch name="fbw/aileron-output">
<default value="0"/>
<test logic="AND" value="fbw/roll/mixer/output"> <!-- Mix stick and control law for transition -->
position/wow eq 0
/it-fbw/law eq 0
</test>
<test logic="AND" value="fbw/roll/a-i-f">
fbw/fmgc/enabled eq 0
fbw/roll/gear-law-switch eq 1
</test>
<test logic="AND" value="fbw/roll/rollout-cmd">
fbw/fmgc/enabled eq 1
position/wow eq 1
/it-fbw/law eq 0
</test>
<test logic="AND" value="0">
/it-fbw/law eq 3
</test>
</switch>
<switch name="fbw/roll/s-i-f-i">
<default value="0"/>
<test logic="AND" value="fbw/roll/a-i">
position/wow eq 0
/it-fbw/law eq 0
</test>
<test value="fbw/roll/a-i-f">
fbw/roll/gear-law-switch eq 1
</test>
<test logic="AND" value="0">
/it-fbw/law eq 3
</test>
</switch>
<fcs_function name="fbw/roll/s-i-f-cmd">
<function>
<table>
<independentVar lookup="row">fbw/roll/s-i-f-i</independentVar>
<tableData>
-1.00 -1.0
-0.05 0.0
0.05 0.0
1.00 1.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/roll/s-i-f">
<function>
<product>
<pow>
<abs><property>fbw/roll/s-i-f-i</property></abs>
<value>1.7</value>
</pow>
<ifthen>
<lt>
<property>fbw/roll/s-i-f-i</property>
<value>0</value>
</lt>
<value>-1</value>
<value>1</value>
</ifthen>
<table>
<independentVar lookup="row">velocities/vc-kts</independentVar>
<independentVar lookup="column">position/wow</independentVar>
<tableData>
0 1
140 0.7 1.0
350 0.3 1.0
</tableData>
</table>
</product>
</function>
</fcs_function>
<switch name="fbw/roll/s-i">
<default value="0"/>
<test value="fbw/roll/s-i-f">
/it-fbw/roll-back eq 0
</test>
</switch>
<switch name="fbw/roll/s-l-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-left eq 1
</test>
</switch>
<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
</test>
</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/e-i-f">
<default value="fbw/sidestick/pitch-input"/>
<test value="0">
fbw/fmgc/enabled eq 1
</test>
</switch>
<actuator name="fbw/pitch/e-i-m">
<input>fbw/pitch/e-i-f</input>
<rate_limit>3.0</rate_limit>
</actuator>
<lag_filter name="fbw/pitch/e-i-pfd">
<input>fbw/pitch/e-i-m</input>
<c1>20</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-normal">
<function>
<sum>
<property>fbw/sidestick/pitch-input</property>
<table>
<independentVar lookup="row">attitude/roll-rad</independentVar>
<tableData>
-1.1693700 0.4
-0.5846853 0.0
0.5846853 0.0
1.1693700 0.4
</tableData>
</table>
</sum>
</function>
</fcs_function>
<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>
<switch name="fbw/pitch/flare-active">
<default value="0"/>
<test logic="AND" value="1">
fbw/fmgc/enabled eq 0
/position/gear-agl-ft le 30
/controls/flight/flaps-pos ge 4
/FMGC/internal/to-state eq 0
/it-fbw/law eq 0
gear/unit[0]/WOW eq 0
fbw/detent-1-feedback le 2
fbw/detent-2-feedback le 2
fadec/eng-out ne 1
</test>
<test logic="AND" value="1">
fbw/fmgc/enabled eq 0
/position/gear-agl-ft le 30
/controls/flight/flaps-pos ge 4
/FMGC/internal/to-state eq 0
/it-fbw/law eq 0
gear/unit[0]/WOW eq 0
fbw/detent-1-feedback le 4
fbw/detent-2-feedback le 4
fadec/eng-out eq 1
</test>
</switch>
<switch name="fbw/pitch/flare-decr">
<default value="1"/>
<test logic="AND" value="100"> <!-- Instant -->
fbw/fmgc/enabled eq 1
</test>
</switch>
<actuator name="fbw/pitch/flare-gain">
<input>fbw/pitch/flare-active</input>
<rate_limit sense="incr">1</rate_limit>
<rate_limit sense="decr">fbw/pitch/flare-decr</rate_limit>
</actuator>
<fcs_function name="fbw/pitch/e-i-flare">
<function>
<product>
<property>fbw/pitch/flare-gain</property>
<table>
<independentVar lookup="row">/position/gear-agl-ft</independentVar>
<tableData>
5 0.2
30 0.1
</tableData>
</table>
</product>
</function>
</fcs_function>
<switch name="fbw/pitch/max-rad">
<default value="0.523599"/>
<test value="3.14159"> <!-- So its irrelevant -->
/it-fbw/law gt 0
</test>
</switch>
<switch name="fbw/pitch/min-rad">
<default value="-0.261799"/>
<test value="-3.14159"> <!-- So its irrelevant -->
/it-fbw/law gt 0
</test>
</switch>
<summer name="fbw/pitch/max-rad-error">
<input>attitude/pitch-rad</input>
<input>-fbw/pitch/max-rad</input>
</summer>
<summer name="fbw/pitch/min-rad-error">
<input>attitude/pitch-rad</input>
<input>-fbw/pitch/min-rad</input>
</summer>
<fcs_function name="fbw/pitch/e-i-max">
<function>
<table>
<independentVar lookup="row">fbw/pitch/min-rad-error</independentVar>
<tableData>
0.000000 0.0
0.034907 0.1
0.087266 1.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/pitch/e-i-min">
<function>
<max>
<table>
<independentVar lookup="row">fbw/pitch/max-rad-error</independentVar>
<tableData>
-0.087266 -1.0
-0.034907 -0.1
0.000000 0.0
</tableData>
</table>
</max>
</function>
</fcs_function>
<switch name="fbw/pitch/e-i-cmd">
<default value="fbw/pitch/e-i-normal"/>
<test logic="AND" value="fbw/pitch/e-i-overspeed">
fbw/protections/overspeed eq 1
position/wow eq 0
</test>
<test logic="AND" value="fbw/fmgc/pitch-cmd">
fbw/fmgc/enabled eq 1
position/wow eq 0
</test>
<test logic="AND" value="0">
fbw/fmgc/enabled eq 1
position/wow eq 1
</test>
<clipto>
<min>fbw/pitch/e-i-min</min>
<max>fbw/pitch/e-i-max</max>
</clipto>
</switch>
<fcs_function name="fbw/pitch/over-max">
<function>
<table>
<independentVar lookup="row">fbw/pitch/max-rad-error</independentVar>
<tableData>
0.000000 0.0
0.034907 0.1
0.087266 1.0
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/pitch/over-min">
<function>
<table>
<independentVar lookup="row">fbw/pitch/min-rad-error</independentVar>
<tableData>
-0.087266 -1.0
-0.034907 -0.1
0.000000 0.0
</tableData>
</table>
</function>
</fcs_function>
<summer name="fbw/pitch/e-i-sum">
<input>fbw/pitch/e-i-cmd</input>
<input>fbw/pitch/e-i-flare</input>
<input>fbw/pitch/over-max</input>
<input>fbw/pitch/over-min</input>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</summer>
<switch name="fbw/pitch/load-factor-min">
<default value="-1.0"/>
<test value="0.0">
/controls/flight/flaps-input-out ne 0
</test>
</switch>
<switch name="fbw/pitch/load-factor-max">
<default value="2.5"/>
<test value="2.0">
/controls/flight/flaps-input-out ne 0
</test>
</switch>
<lag_filter name="fbw/pitch/e-i-sum-lag">
<input>fbw/pitch/e-i-sum</input>
<c1>20</c1>
</lag_filter>
<fcs_function name="fbw/pitch/load-factor-demand">
<function>
<table>
<independentVar lookup="row">fbw/pitch/e-i-sum-lag</independentVar>
<tableData>
-1 2.5
0 1.0
1 -0.5
</tableData>
</table>
</function>
<clipto>
<min>fbw/pitch/load-factor-min</min>
<max>fbw/pitch/load-factor-max</max>
</clipto>
</fcs_function>
<summer name="fbw/pitch/load-factor-error">
<input>fbw/pitch/load-factor</input>
<input>-fbw/pitch/load-factor-demand</input>
</summer>
<lag_filter name="fbw/pitch/e-i">
<input>fbw/pitch/load-factor-pi</input> <!-- From a320-fbw-rules.xml -->
<c1>fbw/rate-c1</c1>
</lag_filter>
<switch name="fbw/pitch/rate-demand-gain">
<default value="-0.087266"/>
<test logic="OR" value="0.087266">
attitude/roll-rad lt -1.5708
attitude/roll-rad gt 1.5708
</test>
</switch>
<pure_gain name="fbw/pitch/rate-demand">
<input>fbw/pitch/e-i</input>
<gain>fbw/pitch/rate-demand-gain</gain>
</pure_gain>
<switch name="fbw/pitch/t-r_s-s">
<default value="fbw/pitch/thetadot-rad_sec"/>
<test value="0">
gear/unit[0]/WOW eq 1
</test>
</switch>
<summer name="fbw/pitch/rate-error">
<input>fbw/pitch/t-r_s-s</input>
<input>-fbw/pitch/rate-demand</input>
</summer>
<switch name="fbw/pitch/trigger">
<default value="0"/>
<test value="-1">
fbw/pitch/gain-switch gt 0
</test>
<test logic="OR" value="1">
fbw/pitch/pid le -0.999
fbw/pitch/pid ge 0.999
</test>
</switch>
<pid name="fbw/pitch/pid-v">
<input>fbw/pitch/rate-error</input>
<kp>fbw/pitch/p-gain</kp>
<ki>fbw/pitch/i-gain</ki>
<kd>fbw/pitch/d-gain</kd>
<trigger>fbw/pitch/trigger</trigger>
<output>fbw/pitch/pid</output>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</pid>
<pure_gain name="fbw/pitch/pid-inv">
<input>fbw/pitch/pid</input>
<gain>-1.0</gain>
</pure_gain>
<switch name="fbw/pitch/pid-switched">
<default value="fbw/pitch/pid"/>
<test logic="OR" value="fbw/pitch/pid-inv">
attitude/roll-rad lt -1.5708
attitude/roll-rad gt 1.5708
</test>
</switch>
<switch name="fbw/pitch/law-switch">
<default value="0"/>
<test logic="OR" value="1">
/it-fbw/law eq 0
/it-fbw/law eq 1
</test>
</switch>
<switch name="fbw/pitch/law-gear-switch">
<default value="0"/>
<test logic="OR" value="1">
gear/unit[1]/WOW eq 1
gear/unit[2]/WOW eq 1
/it-fbw/law eq 2
</test>
</switch>
<pure_gain name="fbw/pitch/mixer/computer-demand">
<input>fbw/pitch/pid-switched</input>
<gain>fbw/pitch/mixer/computer-gain</gain>
</pure_gain>
<pure_gain name="fbw/pitch/mixer/sidestick-demand">
<input>fbw/pitch/e-i-f</input>
<gain>fbw/pitch/mixer/sidestick-gain</gain>
</pure_gain>
<summer name="fbw/pitch/mixer/output">
<input>fbw/pitch/mixer/computer-demand</input>
<input>fbw/pitch/mixer/sidestick-demand</input>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</summer>
<switch name="fbw/elevator-output">
<default value="0"/>
<test logic="AND" value="fbw/pitch/mixer/output"> <!-- Mix stick and control law for transition -->
position/wow eq 0
fbw/pitch/law-switch eq 1
</test>
<test logic="AND" value="fbw/pitch/e-i-f">
fbw/fmgc/enabled eq 0
fbw/pitch/law-gear-switch eq 1
</test>
<test logic="AND" value="0.1">
fbw/fmgc/enabled eq 1
position/wow eq 1
gear/unit[0]/WOW eq 0
</test>
<test logic="AND" value="0.05">
fbw/fmgc/enabled eq 1
position/wow eq 1
</test>
<test logic="AND" value="0">
/it-fbw/law eq 3
</test>
</switch>
<switch name="fbw/pitch/autotrim-height">
<default value="50"/>
<test logic="AND" value="100">
fbw/fmgc/enabled eq 1
</test>
</switch>
<switch name="fbw/pitch/autotrim-switch">
<default value="0"/>
<test logic="AND" value="1">
fbw/pitch/gain-switch eq 0
/position/gear-agl-ft ge fbw/pitch/autotrim-height
attitude/roll-rad lt 0.628319
attitude/roll-rad gt -0.628319
fbw/pitch/pid-switched ge 0.01
fbw/pitch/g-instrumented ge 0.5
fbw/protections/overspeed ne 1
/controls/flight/elevator-trim le 0.32
position/wow eq 0
</test>
<test logic="AND" value="2">
fbw/pitch/gain-switch eq 0
/position/gear-agl-ft ge fbw/pitch/autotrim-height
attitude/roll-rad lt 0.628319
attitude/roll-rad gt -0.628319
fbw/pitch/pid-switched le -0.01
fbw/pitch/g-instrumented ge 0.5
fbw/protections/overspeed ne 1
/controls/flight/elevator-trim ge -1.0
position/wow eq 0
</test>
</switch>
<fcs_function name="fbw/pitch/autotrim-offset">
<function>
<sum>
<ifthen>
<eq>
<property>fbw/pitch/autotrim-switch</property>
<value>1</value>
</eq>
<table>
<independentVar lookup="row">fbw/pitch/pid-switched</independentVar>
<tableData>
0.05 0.00001
0.30 0.00015
</tableData>
</table>
<value>0.0</value>
</ifthen>
<ifthen>
<eq>
<property>fbw/pitch/autotrim-switch</property>
<value>2</value>
</eq>
<table>
<independentVar lookup="row">fbw/pitch/pid-switched</independentVar>
<tableData>
-0.30 -0.00015
-0.05 -0.00001
</tableData>
</table>
<value>0.0</value>
</ifthen>
</sum>
</function>
</fcs_function>
<fcs_function name="fbw/elevator-trim-output">
<function>
<sum>
<property>/controls/flight/elevator-trim</property>
<property>fbw/pitch/autotrim-offset</property>
</sum>
</function>
<clipto>
<min>-1.0</min>
<max>0.32</max>
</clipto>
<output>/controls/flight/elevator-trim</output>
</fcs_function>
</channel>
<channel name="FBW: Yaw">
<fcs_function name="fbw/yaw/max-deg-fac-1">
<function>
<table>
<independentVar lookup="row">/systems/fmgc/active-airspeed-1</independentVar>
<tableData>
160 25.0
410 3.5
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="fbw/yaw/max-deg-fac-2">
<function>
<table>
<independentVar lookup="row">/systems/fmgc/active-airspeed-2</independentVar>
<tableData>
160 25.0
410 3.5
</tableData>
</table>
</function>
</fcs_function>
<switch name="/systems/fctl/fac1-rtlu-avail">
<default value="0"/>
<test logic="AND" value="1">
/systems/failures/fctl/rtlu-1 eq 0
/systems/electrical/bus/dc-ess ge 25
/systems/fctl/fac1-healthy-signal eq 1
<test logic="OR">
<test logic="AND">
/systems/fmgc/cas-compare/cas-reject-1 eq 0
/systems/navigation/adr/operating-1 eq 1
</test>
<test logic="AND">
/systems/fmgc/cas-compare/cas-reject-3 eq 0
/systems/navigation/adr/operating-3 eq 1
</test>
</test>
</test>
</switch>
<switch name="/systems/fctl/fac2-rtlu-avail">
<default value="0"/>
<test logic="AND" value="1">
/systems/failures/fctl/rtlu-2 eq 0
/systems/electrical/bus/dc-2 ge 25
/systems/fctl/fac2-healthy-signal eq 1
<test logic="OR">
<test logic="AND">
/systems/fmgc/cas-compare/cas-reject-2 eq 0
/systems/navigation/adr/operating-2 eq 1
</test>
<test logic="AND">
/systems/fmgc/cas-compare/cas-reject-3 eq 0
/systems/navigation/adr/operating-3 eq 1
</test>
</test>
</test>
</switch>
<switch name="fbw/yaw/rtlu-emergency">
<default value="0"/>
<test logic="AND" value="1">
/systems/fctl/fac1-rtlu-avail eq 0
/systems/fctl/fac2-rtlu-avail eq 0
fcs/slat-pos-deg ne 0
</test>
</switch>
<switch name="fbw/yaw/max-deg-switch-cmd">
<default value="25"/>
<test logic="AND" value="fbw/yaw/max-deg-switch"> <!-- RTLU frozen with FAC 1 / 2 failure -->
/systems/fctl/fac1-rtlu-avail eq 0
/systems/fctl/fac2-rtlu-avail eq 0
fcs/slat-pos-deg eq 0
</test>
<test logic="AND" value="25"> <!-- Return to low speed control with slats extended -->
fbw/yaw/rtlu-emergency eq 1
</test>
<test logic="AND" value="fbw/yaw/max-deg-fac-1"> <!-- Side 1 has priority -->
/systems/fctl/fac1-rtlu-avail eq 1
</test>
<test logic="AND" value="fbw/yaw/max-deg-fac-2">
/systems/fctl/fac2-rtlu-avail eq 1
</test>
</switch>
<switch name="fbw/yaw/rtlu-power">
<default value="0"/>
<test logic="AND" value="25"> <!-- Main motor control -->
<test logic="OR">
/systems/electrical/bus/dc-ess-shed ge 25
/systems/electrical/bus/dc-2 ge 25
</test>
fbw/yaw/rtlu-emergency ne 1
</test>
<test logic="AND" value="3"> <!-- Emergency motor is slower -->
/systems/electrical/bus/ac-ess-26v ge 24.8
/systems/fctl/fac1-rtlu-avail eq 0
/systems/fctl/fac2-rtlu-avail eq 0
fcs/slat-pos-deg ne 0
fbw/yaw/max-deg-switch ne fbw/yaw/max-deg-switch-cmd
</test>
</switch>
<actuator name="rubbish/rudder-travel-limiter">
<input>fbw/yaw/max-deg-switch-cmd</input>
<rate_limit>fbw/yaw/rtlu-power</rate_limit>
<output>fbw/yaw/max-deg-switch</output>
</actuator>
<aerosurface_scale name="fbw/yaw/max-deg-scale">
<input>fbw/yaw/max-deg-switch</input>
<domain>
<min>-25</min>
<max>25</max>
</domain>
<range>
<min>-1</min>
<max>1</max>
</range>
</aerosurface_scale>
<pure_gain name="fbw/yaw/max-deg-scale-neg">
<input>fbw/yaw/max-deg-scale</input>
<gain>-1.0</gain>
</pure_gain>
<fcs_function name="fbw/sidestick/yaw-input-scheduled">
<function>
<quotient>
<product>
<property>fbw/sidestick/yaw-input</property>
<property>fbw/yaw/max-deg-switch</property>
</product>
<value>25.0</value>
</quotient>
</function>
</fcs_function>
<switch name="fbw/yaw/autoland-switch">
<default value="0"/>
<test logic="AND" value="1">
fbw/fmgc/enabled eq 1
/it-autoflight/output/lat eq 4
</test>
</switch>
<washout_filter name="fbw/yaw/r-washout">
<input>velocities/r-rad_sec</input>
<c1>0.5</c1>
</washout_filter>
<switch name="fbw/yaw/r-r_s-s">
<default value="fbw/yaw/r-washout"/>
<test logic="OR" value="0">
position/wow eq 1
/position/gear-agl-ft lt 50
fbw/yaw/autoland-switch eq 1
</test>
</switch>
<pure_gain name="fbw/yaw/yd-f">
<input>fbw/yaw/r-r_s-s</input>
<gain>fbw/yaw/yd-p-gain</gain>
<clipto>
<min>-0.5</min>
<max>0.5</max>
</clipto>
</pure_gain>
<switch name="fbw/yaw/slip-skid">
<default value="aero/beta-rad"/>
<test value="0">
position/wow eq 1
</test>
</switch>
<pid name="fbw/yaw/tc-pd-v">
<input>fbw/yaw/slip-skid</input>
<kp>fbw/yaw/tc-p-gain</kp>
<ki>0.0</ki>
<kd>fbw/yaw/tc-d-gain</kd>
<output>fbw/yaw/tc-pd</output>
<clipto>
<min>-0.4</min>
<max>0.4</max>
</clipto>
</pid>
<switch name="fbw/yaw/tc-pd-s">
<default value="fbw/yaw/tc-pd"/>
<test value="0">
position/wow eq 1
</test>
</switch>
<switch name="fbw/yaw/fmgc-cmd">
<default value="0"/>
<test value="fbw/fmgc/yaw-cmd">
fbw/yaw/autoland-switch eq 1
</test>
</switch>
<summer name="fbw/yaw/output-sum">
<input>fbw/yaw/yd-f</input>
<input>fbw/yaw/tc-pd-s</input>
<input>fbw/yaw/fmgc-cmd</input>
</summer>
<switch name="fbw/yaw/law-switch">
<default value="0"/>
<test logic="AND" value="1">
/it-fbw/law ne 3
<test logic="OR">
/it-fbw/yaw-law eq 0
/it-fbw/yaw-law eq 1
</test>
</test>
</switch>
<switch name="fbw/yaw/output-switch">
<default value="fbw/yaw/fmgc-cmd"/> <!-- FMGC keeps working even if YD is unavail -->
<test value="fbw/yaw/output-sum">
fbw/yaw/law-switch eq 1
</test>
</switch>
<summer name="fbw/rudder-output">
<input>fbw/sidestick/yaw-input-scheduled</input>
<input>fbw/yaw/output-switch</input>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
</summer>
</channel>
</system>