Merge branch 'dev' into 3D
This commit is contained in:
commit
dcbc72b2a7
21 changed files with 1690 additions and 1120 deletions
114
A320-main.xml
114
A320-main.xml
|
@ -12,9 +12,48 @@
|
|||
|
||||
<author>Josh Davidson/Octal450 (Flight Dynamics, Systems, Displays), Jonathan Redpath/legoboyvdlp, merspieler, Matthew Maring/mattmaring (Systems, Displays), Thorsten Herrmann/TH-555, Semir Gebran/CaptB (3D, Textures)</author>
|
||||
|
||||
<authors>
|
||||
<author>
|
||||
<name>Josh Davidson</name>
|
||||
<description>Flight Dynamics, Systems, Displays</description>
|
||||
<nick>Octal450</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>Jonathan Redpath</name>
|
||||
<description>Systems, Displays, FMGC</description>
|
||||
<nick>legoboyvdlp</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>merspieler</name>
|
||||
<description>Systems, Displays</description>
|
||||
</author>
|
||||
<author>
|
||||
<name>Matthew Maring</name>
|
||||
<description>Fuel predictions, FMGC</description>
|
||||
<nick>mattmaring</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>Thorsten Herrmann</name>
|
||||
<description>Cockpit 3D model</description>
|
||||
<nick>TH-555</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>Semir Gebran</name>
|
||||
<description>3D model</description>
|
||||
<nick>CaptB</nick>
|
||||
</author>
|
||||
<author>
|
||||
<name>vezza</name>
|
||||
<description>Systems, Displays</description>
|
||||
</author>
|
||||
</authors>
|
||||
|
||||
<checklists include="A32X-Checklists.xml"/>
|
||||
|
||||
<status>Pre V1.0</status>
|
||||
<description>Airbus A320</description>
|
||||
<long-description>The Airbus A320 is a family of narrow body airliners built by Airbus Industrie. First flown in 1987,
|
||||
the aircraft is the most produced airliner ever, with over 9,500 built to date. It was one of the first airliners
|
||||
to use digital flight controls and fly by wire, and a fully glass cockpit.</long-description>
|
||||
|
||||
<hud n="0">
|
||||
<enable3d n="0">false</enable3d>
|
||||
|
@ -157,6 +196,8 @@
|
|||
<model type="int">4</model>
|
||||
</rating>
|
||||
|
||||
<status>Pre V1.0</status>
|
||||
|
||||
<tags>
|
||||
<tag>transport</tag>
|
||||
<tag>airbus</tag>
|
||||
|
@ -172,6 +213,13 @@
|
|||
<tag>2-engine</tag>
|
||||
</tags>
|
||||
|
||||
<urls>
|
||||
<home-page>http://wiki.flightgear.org/Airbus_A320_Family</home-page>
|
||||
<support>https://forum.flightgear.org</support>
|
||||
<wikipedia>https://en.wikipedia.org/wiki/Airbus_A320_family</wikipedia>
|
||||
<code-repository>https://github.com/legoboyvdlp/A320-family</code-repository>
|
||||
</urls>
|
||||
|
||||
<systems n="0">
|
||||
<electrical>
|
||||
<path></path>
|
||||
|
@ -534,8 +582,33 @@
|
|||
</current-view>
|
||||
|
||||
<minimum-fg-version>2019.2.0</minimum-fg-version>
|
||||
|
||||
<navdb>
|
||||
<min-runway-length-ft>3000</min-runway-length-ft>
|
||||
</navdb>
|
||||
|
||||
</sim>
|
||||
|
||||
<aircraft>
|
||||
<icao>
|
||||
<wake-turbulence-category>M</wake-turbulence-category>
|
||||
<type type="string">A320</type>
|
||||
<equipment type="string">SDE2FGHIRWXY</equipment>
|
||||
<surveillance type="string">S</surveillance>
|
||||
</icao>
|
||||
<performance>
|
||||
<minimum>
|
||||
<takeoff-length-ft type="int">4500</takeoff-length-ft>
|
||||
<landing-length-ft type="int">4500</landing-length-ft>
|
||||
</minimum>
|
||||
<maximum>
|
||||
<altitude-ft type="int">41000</altitude-ft>
|
||||
<mach type="double">0.82</mach>
|
||||
<airspeed-knots type="int">350</airspeed-knots>
|
||||
</maximum>
|
||||
</performance>
|
||||
</aircraft>
|
||||
|
||||
<consumables>
|
||||
<fuel>
|
||||
<tank n="0">
|
||||
|
@ -565,6 +638,39 @@
|
|||
</fuel>
|
||||
</consumables>
|
||||
|
||||
<ECAM>
|
||||
<Upper>
|
||||
<FlapX type="double">0</FlapX>
|
||||
<FlapY type="double">0</FlapY>
|
||||
<SlatX type="double">0</SlatX>
|
||||
<SlatY type="double">0</SlatY>
|
||||
<FlapXtrans type="double">0</FlapXtrans>
|
||||
<FlapYtrans type="double">0</FlapYtrans>
|
||||
<SlatXtrans type="double">0</SlatXtrans>
|
||||
<SlatYtrans type="double">0</SlatYtrans>
|
||||
</Upper>
|
||||
<msg>
|
||||
<line1 type="string"></line1>
|
||||
<line2 type="string"></line2>
|
||||
<line3 type="string"></line3>
|
||||
<line4 type="string"></line4>
|
||||
<line5 type="string"></line5>
|
||||
<line6 type="string"></line6>
|
||||
<line7 type="string"></line7>
|
||||
<line8 type="string"></line8>
|
||||
</msg>
|
||||
<rightmsg>
|
||||
<line1 type="string"></line1>
|
||||
<line2 type="string"></line2>
|
||||
<line3 type="string"></line3>
|
||||
<line4 type="string"></line4>
|
||||
<line5 type="string"></line5>
|
||||
<line6 type="string"></line6>
|
||||
<line7 type="string"></line7>
|
||||
<line8 type="string"></line8>
|
||||
</rightmsg>
|
||||
</ECAM>
|
||||
|
||||
<environment>
|
||||
<aircraft-effects>
|
||||
<frost-inch type="double">0</frost-inch>
|
||||
|
@ -1145,6 +1251,7 @@
|
|||
</comm>
|
||||
<electrical n="0">
|
||||
<bus>
|
||||
<ac-ess type="double">0</ac-ess>
|
||||
<dc-1 type="double">0</dc-1>
|
||||
<dc-2 type="double">0</dc-2>
|
||||
</bus>
|
||||
|
@ -1417,6 +1524,7 @@
|
|||
</pneumatics>
|
||||
|
||||
<pressurization>
|
||||
<cabinalt-norm type="double">0</cabinalt-norm>
|
||||
<cabinpsi type="double">14.7</cabinpsi>
|
||||
<ditchingpb type="double">14.7</ditchingpb>
|
||||
</pressurization>
|
||||
|
@ -4304,6 +4412,9 @@
|
|||
</options>
|
||||
|
||||
<nasal>
|
||||
<notifications>
|
||||
<file>Aircraft/A320-family/Nasal/emesary/M_frame_notification.nas</file>
|
||||
</notifications>
|
||||
<pts>
|
||||
<file>Aircraft/A320-family/Nasal/Libraries/property-tree-setup.nas</file>
|
||||
</pts>
|
||||
|
@ -4411,6 +4522,7 @@
|
|||
<file>Aircraft/A320-family/Models/Instruments/ND/canvas/ND.nas</file>
|
||||
</canvas_nd>
|
||||
<canvas_ecam>
|
||||
<file>Aircraft/A320-family/Nasal/emesary/exec.nas</file>
|
||||
<file>Aircraft/A320-family/Models/Instruments/Upper-ECAM/Upper-ECAM.nas</file>
|
||||
<file>Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM.nas</file>
|
||||
</canvas_ecam>
|
||||
|
|
|
@ -30,6 +30,8 @@ var altimeter_mode = props.globals.getNode("/instrumentation/altimeter[0]/std",
|
|||
var qnh_hpa = props.globals.getNode("/instrumentation/altimeter/setting-hpa", 1);
|
||||
var qnh_inhg = props.globals.getNode("/instrumentation/altimeter/setting-inhg", 1);
|
||||
|
||||
var _showIESI = 0;
|
||||
var _fast = 0;
|
||||
var _IESITime = 0;
|
||||
|
||||
var canvas_IESI_base = {
|
||||
|
@ -68,8 +70,8 @@ var canvas_IESI_base = {
|
|||
me.AI_horizon_trans = me["AI_horizon"].createTransform();
|
||||
me.AI_horizon_rot = me["AI_horizon"].createTransform();
|
||||
|
||||
me._showIESI = 0;
|
||||
me._fast = 0;
|
||||
_showIESI = 0;
|
||||
_fast = 0;
|
||||
_IESITime = 0.0;
|
||||
|
||||
me.page = canvas_group;
|
||||
|
@ -86,22 +88,22 @@ var canvas_IESI_base = {
|
|||
# todo 20W power consumption
|
||||
if (iesi_reset.getValue() == 1) {
|
||||
if (iesi_init.getBoolValue() and _IESITime + 90 >= et.getValue()) {
|
||||
me._fast = 1;
|
||||
_fast = 1;
|
||||
} else {
|
||||
me._fast = 0;
|
||||
_fast = 0;
|
||||
}
|
||||
iesi_init.setBoolValue(0);
|
||||
}
|
||||
|
||||
if (systems.ELEC.Bus.dcEss.getValue() >= 25 or (systems.ELEC.Bus.dcHot1.getValue() >= 25 and airspeed.getValue() >= 50 and cur_time >= 5)) {
|
||||
me._showIESI = 1;
|
||||
_showIESI = 1;
|
||||
IESI.update();
|
||||
|
||||
if (aconfig.getValue() != 1 and iesi_init.getValue() != 1) {
|
||||
iesi_init.setBoolValue(1);
|
||||
if (me._fast) {
|
||||
if (_fast) {
|
||||
_IESITime = cur_time - 80;
|
||||
me._fast = 0;
|
||||
_fast = 0;
|
||||
} else {
|
||||
_IESITime = cur_time;
|
||||
}
|
||||
|
@ -110,11 +112,11 @@ var canvas_IESI_base = {
|
|||
_IESITime = cur_time - 87;
|
||||
}
|
||||
} else {
|
||||
me._showIESI = 0;
|
||||
_showIESI = 0;
|
||||
iesi_init.setBoolValue(0);
|
||||
}
|
||||
|
||||
if (me._showIESI and iesi_brt.getValue() > 0.01) {
|
||||
if (_showIESI and iesi_brt.getValue() > 0.01) {
|
||||
IESI.page.show();
|
||||
} else {
|
||||
IESI.page.hide();
|
||||
|
|
|
@ -37,13 +37,13 @@
|
|||
units="pt"
|
||||
inkscape:snap-global="false"
|
||||
showguides="true"
|
||||
inkscape:current-layer="AI_group"
|
||||
inkscape:current-layer="svg2"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:cy="0.92547661"
|
||||
inkscape:cx="575.94271"
|
||||
inkscape:zoom="1.0773413"
|
||||
inkscape:cy="259.23779"
|
||||
inkscape:cx="201.84998"
|
||||
inkscape:zoom="2.56"
|
||||
showgrid="true"
|
||||
id="namedview371"
|
||||
inkscape:window-height="705"
|
||||
|
@ -5780,8 +5780,8 @@
|
|||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path922"
|
||||
d="M 13.167811,790.62913 H 154.46853"
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3.19995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
|
||||
d="M 13.167811,790.62913 H 121.24725"
|
||||
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3.19994998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
|
|
Before Width: | Height: | Size: 339 KiB After Width: | Height: | Size: 339 KiB |
File diff suppressed because it is too large
Load diff
|
@ -41,9 +41,9 @@
|
|||
inkscape:window-height="705"
|
||||
id="namedview371"
|
||||
showgrid="true"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="718.57047"
|
||||
inkscape:cy="505.8628"
|
||||
inkscape:zoom="0.25"
|
||||
inkscape:cx="971.41703"
|
||||
inkscape:cy="1420.8195"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
|
@ -1428,4 +1428,43 @@
|
|||
width="137.63597"
|
||||
id="SlatLine_clip"
|
||||
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:3.34691048;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.71383667px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.7928459"
|
||||
x="38.122616"
|
||||
y="47.904297"
|
||||
id="aFloor"
|
||||
transform="scale(0.94595932,1.0571279)"
|
||||
inkscape:label="#text1027"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1025"
|
||||
x="38.122616"
|
||||
y="47.904297"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.99999902px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#c56100;fill-opacity:1;stroke-width:0.7928459">A FLOOR</tspan></text>
|
||||
<text
|
||||
transform="scale(0.97051272,1.0303832)"
|
||||
inkscape:label="#text4314"
|
||||
id="FlxLimTemp"
|
||||
y="122.78025"
|
||||
x="919.25299"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.71494293px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;"
|
||||
y="122.78025"
|
||||
x="919.25299"
|
||||
id="tspan1029"
|
||||
sodipodi:role="line">00</tspan></text>
|
||||
<text
|
||||
inkscape:label="#text4443"
|
||||
id="FlxLimDegreesC"
|
||||
y="108.14707"
|
||||
x="1061.88"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"
|
||||
transform="scale(0.87983286,1.1365795)"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.25978088px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#179ab7;fill-opacity:1"
|
||||
y="108.14707"
|
||||
x="1061.88"
|
||||
id="tspan1033"
|
||||
sodipodi:role="line">°C</tspan></text>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 89 KiB |
|
@ -42,8 +42,8 @@
|
|||
id="namedview371"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.43942712"
|
||||
inkscape:cx="180.81625"
|
||||
inkscape:cy="433.53356"
|
||||
inkscape:cx="623.25944"
|
||||
inkscape:cy="936.15332"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
|
@ -1796,4 +1796,43 @@
|
|||
width="137.63597"
|
||||
id="SlatLine_clip"
|
||||
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:3.34691048;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.71383667px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.7928459"
|
||||
x="38.122616"
|
||||
y="47.904297"
|
||||
id="aFloor"
|
||||
transform="scale(0.94595932,1.0571279)"
|
||||
inkscape:label="#text1027"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1025"
|
||||
x="38.122616"
|
||||
y="47.904297"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.99999902px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#c56100;fill-opacity:1;stroke-width:0.7928459">A FLOOR</tspan></text>
|
||||
<text
|
||||
transform="scale(0.97051272,1.0303832)"
|
||||
inkscape:label="#text4314"
|
||||
id="FlxLimTemp"
|
||||
y="122.78025"
|
||||
x="919.25299"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40.71494293px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;"
|
||||
y="122.78025"
|
||||
x="919.25299"
|
||||
id="tspan1029"
|
||||
sodipodi:role="line">00</tspan></text>
|
||||
<text
|
||||
inkscape:label="#text4443"
|
||||
id="FlxLimDegreesC"
|
||||
y="108.14707"
|
||||
x="1061.88"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"
|
||||
transform="scale(0.87983286,1.1365795)"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.25978088px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#179ab7;fill-opacity:1"
|
||||
y="108.14707"
|
||||
x="1061.88"
|
||||
id="tspan1033"
|
||||
sodipodi:role="line">°C</tspan></text>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 112 KiB |
|
@ -15,7 +15,7 @@ var overflow = props.globals.initNode("/ECAM/warnings/overflow", 0, "BOOL");
|
|||
var dc_ess = props.globals.getNode("/systems/electrical/bus/dc-ess", 1);
|
||||
|
||||
var lights = [props.globals.initNode("/ECAM/warnings/master-warning-light", 0, "BOOL"), props.globals.initNode("/ECAM/warnings/master-caution-light", 0, "BOOL")];
|
||||
var aural = [props.globals.initNode("/sim/sound/warnings/crc", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/chime", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cricket", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/retard", 0, "BOOL")];
|
||||
var aural = [props.globals.initNode("/sim/sound/warnings/crc", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/chime", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cricket", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/retard", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cchord", 0, "BOOL")];
|
||||
var warningFlash = props.globals.initNode("/ECAM/warnings/master-warning-flash", 0, "BOOL");
|
||||
|
||||
var lineIndex = 0;
|
||||
|
@ -31,6 +31,9 @@ var storeFirstWarning = nil;
|
|||
|
||||
var warningNodes = {
|
||||
Logic: {
|
||||
altitudeAlert: props.globals.initNode("/ECAM/warnings/altitude-alert/c-chord"),
|
||||
altitudeAlertSteady: props.globals.initNode("/ECAM/warnings/altitude-alert/altitude-alert-steady"),
|
||||
altitudeAlertFlash: props.globals.initNode("/ECAM/warnings/altitude-alert/altitude-alert-flash"),
|
||||
crossbleedFault: props.globals.initNode("/ECAM/warnings/logic/crossbleed-fault"),
|
||||
crossbleedWai: props.globals.initNode("/ECAM/warnings/logic/crossbleed-wai"),
|
||||
bleed1LoTempUnsuc: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-unsucc"),
|
||||
|
|
|
@ -696,78 +696,24 @@ var messages_priority_3 = func {
|
|||
}
|
||||
|
||||
# C-Chord
|
||||
if ((pts.Instrumentation.Altimeter.std.getValue() and abs(fcu.altSet.getValue() - getprop("/systems/navigation/adr/output/baro-alt-1-capt")) < 200) or !pts.Instrumentation.Altimeter.std.getValue() and abs(fcu.altSet.getValue() - getprop("/systems/navigation/adr/output/baro-alt-corrected-1-capt")) < 200) {
|
||||
alt200 = 1;
|
||||
} else {
|
||||
alt200 = 0;
|
||||
}
|
||||
|
||||
if ((pts.Instrumentation.Altimeter.std.getValue() and abs(fcu.altSet.getValue() - getprop("/systems/navigation/adr/output/baro-alt-1-capt")) < 750) or !pts.Instrumentation.Altimeter.std.getValue() and abs(fcu.altSet.getValue() - getprop("/systems/navigation/adr/output/baro-alt-corrected-1-capt")) < 750) {
|
||||
alt750 = 1;
|
||||
} else {
|
||||
alt750 = 0;
|
||||
}
|
||||
|
||||
if (FWC.altChg.getValue() or pts.Gear.position[0].getValue() == 1 or (pts.Controls.Gear.gearDown.getValue() and pts.Fdm.JSBsim.Fcs.slatDeg.getValue() > 4) or fmgc.Output.vert.getValue() == 2) {
|
||||
altAlertInhibit = 1;
|
||||
} else {
|
||||
altAlertInhibit = 0;
|
||||
}
|
||||
|
||||
if (alt750 and !alt200 and !altAlertInhibit) {
|
||||
FWC.Monostable.altAlert2.setValue(1);
|
||||
} else {
|
||||
FWC.Monostable.altAlert2.setValue(0);
|
||||
}
|
||||
|
||||
if ((!fcu.ap1.getBoolValue() and !fcu.ap2.getBoolValue()) and FWC.Monostable.altAlert2.getValue()) {
|
||||
FWC.Monostable.altAlert1.setValue(1);
|
||||
} else {
|
||||
FWC.Monostable.altAlert1.setValue(0);
|
||||
}
|
||||
|
||||
if (alt750 and alt200 and !altAlertInhibit) {
|
||||
setprop("/ECAM/flipflop/alt-alert-2-rs-set", 1);
|
||||
} else {
|
||||
setprop("/ECAM/flipflop/alt-alert-2-rs-set", 0);
|
||||
}
|
||||
|
||||
if (getprop("/ECAM/flipflop/alt-alert-rs-reset") or (!alt750 and !alt200 and !altAlertInhibit)) {
|
||||
setprop("/ECAM/flipflop/alt-alert-2-rs-reset", 1);
|
||||
} else {
|
||||
setprop("/ECAM/flipflop/alt-alert-2-rs-reset", 0);
|
||||
}
|
||||
|
||||
if (alt750 and !alt200 and !altAlertInhibit and getprop("/ECAM/flipflop/alt-alert-2-rs-output")) {
|
||||
setprop("/ECAM/flipflop/alt-alert-3-rs-set", 1);
|
||||
} else {
|
||||
setprop("/ECAM/flipflop/alt-alert-3-rs-set", 0);
|
||||
}
|
||||
|
||||
if ((!alt750 and !alt200 and !altAlertInhibit and getprop("/ECAM/flipflop/alt-alert-rs-output")) or (!alt750 and !alt200 and !altAlertInhibit and getprop("/ECAM/flipflop/alt-alert-3-rs-output")) or getprop("/ECAM/flipflop/alt-alert-3-rs-set")) {
|
||||
bigThree = 1;
|
||||
} else {
|
||||
bigThree = 0;
|
||||
}
|
||||
|
||||
if (FWC.Timer.gnd.getValue() != 1 and (FWC.Monostable.altAlert1Output.getValue() or bigThree)) {
|
||||
if (warningNodes.Logic.altitudeAlert.getValue()) {
|
||||
if (!getprop("/sim/sound/warnings/cchord-inhibit")) {
|
||||
setprop("/sim/sound/warnings/cchord", 1);
|
||||
aural[4].setValue(1);
|
||||
} else {
|
||||
setprop("/sim/sound/warnings/cchord", 0);
|
||||
aural[4].setValue(0);
|
||||
}
|
||||
} else {
|
||||
setprop("/sim/sound/warnings/cchord", 0);
|
||||
aural[4].setValue(0);
|
||||
setprop("/sim/sound/warnings/cchord-inhibit", 0);
|
||||
}
|
||||
|
||||
if (FWC.Timer.gnd.getValue() != 1 and getprop("/ECAM/flipflop/alt-alert-3-rs-set") != 1 and alt750 and !alt200 and !altAlertInhibit) {
|
||||
if (warningNodes.Logic.altitudeAlertSteady.getValue()) {
|
||||
altAlertSteady = 1;
|
||||
} else {
|
||||
altAlertSteady = 0;
|
||||
}
|
||||
|
||||
if (FWC.Timer.gnd.getValue() != 1 and bigThree) {
|
||||
if (warningNodes.Logic.altitudeAlertFlash.getValue()) {
|
||||
altAlertFlash = 1;
|
||||
} else {
|
||||
altAlertFlash = 0;
|
||||
|
@ -1374,10 +1320,10 @@ var messages_priority_2 = func {
|
|||
ECAM_controller.warningReset(tcasFault);
|
||||
}
|
||||
|
||||
if (warningNodes.Timers.navTerrFault.getValue() == 1 and (phaseVar2 == 2 or phaseVar2 == 6 or phaseVar2 == 7 or phaseVar2 == 9)) {
|
||||
if (gpwsTerrFault.clearFlag == 0 and warningNodes.Timers.navTerrFault.getValue() == 1 and (phaseVar2 == 2 or phaseVar2 == 6 or phaseVar2 == 7 or phaseVar2 == 9)) {
|
||||
gpwsTerrFault.active = 1;
|
||||
|
||||
if (!getprop("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit")) {
|
||||
if (gpwsTerrFaultOff.clearFlag == 0 and !getprop("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit")) {
|
||||
gpwsTerrFaultOff.active = 1;
|
||||
} else {
|
||||
ECAM_controller.warningReset(gpwsTerrFaultOff);
|
||||
|
@ -2409,7 +2355,7 @@ var messages_memo = func {
|
|||
|
||||
if ((phaseVarMemo2 == 1 or phaseVarMemo2 == 2) and toMemoLine1.active != 1 and ldgMemoLine1.active != 1 and (systems.ADIRS.ADIRunits[0].inAlign == 1 or systems.ADIRS.ADIRunits[1].inAlign == 1 or systems.ADIRS.ADIRunits[2].inAlign == 1)) {
|
||||
irs_in_align.active = 1;
|
||||
if (getprop("/ECAM/phases/timer/eng1or2-output")) {
|
||||
if (FWC.Timer.eng1or2Output.getValue()) {
|
||||
irs_in_align.colour = "a";
|
||||
} else {
|
||||
irs_in_align.colour = "g";
|
||||
|
|
|
@ -2,19 +2,14 @@
|
|||
|
||||
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
|
||||
|
||||
var twoEngOff = 0;
|
||||
var myPhase = nil;
|
||||
var eng = nil;
|
||||
var eng1epr = nil;
|
||||
var eng2epr = nil;
|
||||
var eng1n1 = nil;
|
||||
var eng2n1 = nil;
|
||||
var eng1n2 = nil;
|
||||
var eng2n2 = nil;
|
||||
var eprlim = nil;
|
||||
var master1 = nil;
|
||||
var master2 = nil;
|
||||
var n1lim = nil;
|
||||
var gear_agl_cur = nil;
|
||||
|
||||
var FWC = {
|
||||
|
@ -53,24 +48,28 @@ var FWC = {
|
|||
Logic: {
|
||||
gnd: props.globals.getNode("/ECAM/ground-calc-immediate"),
|
||||
IRSinAlign: props.globals.initNode("/ECAM/irs-in-align", 0, "BOOL"),
|
||||
feet1500: props.globals.getNode("/ECAM/phases/phase-calculation/altitude-ge-1500"),
|
||||
feet800: props.globals.getNode("/ECAM/phases/phase-calculation/altitude-ge-800"),
|
||||
},
|
||||
Timer: {
|
||||
eng1idle: props.globals.initNode("/ECAM/phases/timer/eng1idle", 0, "INT"),
|
||||
eng2idle: props.globals.initNode("/ECAM/phases/timer/eng2idle", 0, "INT"),
|
||||
eng1or2: props.globals.initNode("/ECAM/phases/timer/eng1or2", 0, "INT"),
|
||||
eng1idle: props.globals.getNode("/ECAM/phases/timer/eng1idle"),
|
||||
eng2idle: props.globals.getNode("/ECAM/phases/timer/eng2idle"),
|
||||
eng1or2: props.globals.getNode("/ECAM/phases/phase-calculation/one-engine-running"),
|
||||
toInhibit: props.globals.initNode("/ECAM/phases/timer/to-inhibit", 0, "INT"),
|
||||
ldgInhibit: props.globals.initNode("/ECAM/phases/timer/ldg-inhibit", 0, "INT"),
|
||||
eng1idleOutput: props.globals.getNode("/ECAM/phases/timer/eng1idle-output"),
|
||||
eng2idleOutput: props.globals.getNode("/ECAM/phases/timer/eng2idle-output"),
|
||||
eng1or2Output: props.globals.initNode("/ECAM/phases/timer/eng1or2-output", 0, "INT"),
|
||||
eng1and2Off: props.globals.getNode("/ECAM/phases/phase-calculation/engines-1-2-not-running"),
|
||||
eng1or2Output: props.globals.getNode("/ECAM/phases/phase-calculation/engine-1-or-2-running"),
|
||||
toInhibitOutput: props.globals.getNode("/ECAM/phases/timer/to-inhibit-output"),
|
||||
ldgInhibitOutput: props.globals.getNode("/ECAM/phases/timer/ldg-inhibit-output"),
|
||||
gnd: props.globals.getNode("/ECAM/timer/ground-calc"),
|
||||
gnd: props.globals.getNode("/ECAM/timer/ground-calc"), # ZGND
|
||||
gnd2Sec: props.globals.getNode("/ECAM/phases/monostable/gnd-output"),
|
||||
gnd2SecHalf: props.globals.getNode("/ECAM/phases/monostable/gnd-output-2"), # hack to prevent getting confused between phase 5 / 6
|
||||
},
|
||||
speed80: props.globals.initNode("/ECAM/phases/speed-gt-80", 0, "BOOL"),
|
||||
toPower: props.globals.initNode("/ECAM/phases/to-power-set", 0, "BOOL"),
|
||||
altChg: props.globals.getNode("it-autoflight/input/alt-is-changing", 1),
|
||||
toPower: props.globals.getNode("/ECAM/phases/phase-calculation/takeoff-power"),
|
||||
altChg: props.globals.getNode("/it-autoflight/input/alt-is-changing", 1),
|
||||
};
|
||||
|
||||
var phaseLoop = func() {
|
||||
|
@ -82,53 +81,12 @@ var phaseLoop = func() {
|
|||
eng2epr = pts.Engines.Engine.eprActual[1].getValue();
|
||||
eng1n1 = pts.Engines.Engine.n1Actual[0].getValue();
|
||||
eng2n1 = pts.Engines.Engine.n1Actual[1].getValue();
|
||||
eng1n2 = pts.Engines.Engine.n2Actual[0].getValue();
|
||||
eng2n2 = pts.Engines.Engine.n2Actual[1].getValue();
|
||||
master1 = pts.Controls.Engines.Engine.cutoffSw[0].getBoolValue();
|
||||
master2 = pts.Controls.Engines.Engine.cutoffSw[1].getBoolValue();
|
||||
|
||||
FWC.Flipflop.recallReset.setValue(0);
|
||||
|
||||
# Various things
|
||||
if (eng1n2 >= 59.4 and !master1) {
|
||||
FWC.Timer.eng1idle.setValue(1);
|
||||
} else {
|
||||
FWC.Timer.eng1idle.setValue(0);
|
||||
}
|
||||
|
||||
if (eng2n2 >= 59.4 and !master2) {
|
||||
FWC.Timer.eng2idle.setValue(1);
|
||||
} else {
|
||||
FWC.Timer.eng2idle.setValue(0);
|
||||
}
|
||||
|
||||
if (eng1n2 >= 59.4 or eng2n2 >= 59.4) {
|
||||
FWC.Timer.eng1or2.setValue(1);
|
||||
} else {
|
||||
FWC.Timer.eng1or2.setValue(0);
|
||||
}
|
||||
|
||||
if ((FWC.Timer.eng1idleOutput.getBoolValue() == 0 or master1) and (FWC.Timer.eng2idleOutput.getBoolValue() == 0 or master2)) {
|
||||
twoEngOff = 1;
|
||||
} else {
|
||||
twoEngOff = 0;
|
||||
}
|
||||
|
||||
if (eng == "IAE") {
|
||||
eprlim = getprop("/controls/engines/epr-limit");
|
||||
if ((!pts.Controls.Engines.Engine.reverser[0].getBoolValue() and !pts.Controls.Engines.Engine.reverser[1].getBoolValue()) and (((pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.78 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.779) and fadec.Thrust.limFlex.getBoolValue()) or (pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.99 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.99))) {
|
||||
FWC.toPower.setBoolValue(1);
|
||||
} else {
|
||||
FWC.toPower.setBoolValue(0);
|
||||
}
|
||||
} else {
|
||||
n1lim = getprop("/controls/engines/n1-limit");
|
||||
if ((!pts.Controls.Engines.Engine.reverser[0].getBoolValue() and !pts.Controls.Engines.Engine.reverser[1].getBoolValue()) and (((pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.78 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.779) and fadec.Thrust.limFlex.getBoolValue()) or (pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.99 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.99))) {
|
||||
FWC.toPower.setBoolValue(1);
|
||||
} else {
|
||||
FWC.toPower.setBoolValue(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (myPhase == 9) {
|
||||
FWC.Monostable.phase9.setBoolValue(1);
|
||||
|
@ -149,7 +107,7 @@ var phaseLoop = func() {
|
|||
FWC.Flipflop.phase10Reset.setBoolValue(0);
|
||||
}
|
||||
|
||||
if ((FWC.Logic.gnd.getBoolValue() and twoEngOff and myPhase == 9) and FWC.Flipflop.phase10Output.getBoolValue()) {
|
||||
if ((FWC.Logic.gnd.getBoolValue() and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Flipflop.phase10Output.getBoolValue()) {
|
||||
FWC.Monostable.phase1.setBoolValue(1); # true for 300 sec then false
|
||||
} else {
|
||||
FWC.Monostable.phase1.setBoolValue(0);
|
||||
|
@ -171,21 +129,21 @@ var phaseLoop = func() {
|
|||
gear_agl_cur = pts.Position.gearAglFt.getValue();
|
||||
|
||||
# Phase 5 monostable
|
||||
if (FWC.toPower.getBoolValue() and (gear_agl_cur <= 1500 and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1)) {
|
||||
if (FWC.toPower.getBoolValue() and (!FWC.Logic.feet1500.getBoolValue() and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1)) {
|
||||
FWC.Monostable.phase5.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Monostable.phase5.setBoolValue(0);
|
||||
}
|
||||
|
||||
# Phase 7 monostable
|
||||
if (!FWC.toPower.getBoolValue() and gear_agl_cur <= 1500 and gear_agl_cur <= 800 and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1) {
|
||||
if (!FWC.toPower.getBoolValue() and !FWC.Logic.feet1500.getBoolValue() and !FWC.Logic.feet800.getBoolValue() and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1) {
|
||||
FWC.Monostable.phase7.setBoolValue(1);
|
||||
} else {
|
||||
FWC.Monostable.phase7.setBoolValue(0);
|
||||
}
|
||||
|
||||
# Actual Phases
|
||||
if ((!FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1 and twoEngOff and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
if ((!FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1 and FWC.Timer.eng1and2Off.getValue() and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
setPhase(1);
|
||||
}
|
||||
|
||||
|
@ -205,7 +163,7 @@ var phaseLoop = func() {
|
|||
setPhase(5);
|
||||
}
|
||||
|
||||
if (!FWC.Logic.gnd.getValue() and FWC.Timer.gnd2Sec.getValue() != 1 and !(FWC.Monostable.phase5.getBoolValue() and FWC.Monostable.phase5Output.getBoolValue()) and !(FWC.Monostable.phase7.getBoolValue() and FWC.Monostable.phase7Output.getBoolValue())) {
|
||||
if (!FWC.Logic.gnd.getValue() and FWC.Timer.gnd2SecHalf.getValue() != 1 and (!FWC.Monostable.phase5.getBoolValue() or !FWC.Monostable.phase5Output.getBoolValue()) and (!FWC.Monostable.phase7.getBoolValue() or !FWC.Monostable.phase7Output.getBoolValue())) {
|
||||
setPhase(6);
|
||||
}
|
||||
|
||||
|
@ -221,7 +179,7 @@ var phaseLoop = func() {
|
|||
setPhase(9);
|
||||
}
|
||||
|
||||
if ((FWC.Logic.gnd.getBoolValue() and twoEngOff and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
if ((FWC.Logic.gnd.getBoolValue() and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) {
|
||||
setPhase(10);
|
||||
}
|
||||
|
||||
|
|
|
@ -245,6 +245,7 @@ var postInit = func() {
|
|||
var FMGCNodes = {
|
||||
costIndex: props.globals.initNode("/FMGC/internal/cost-index", 0, "DOUBLE"),
|
||||
flexSet: props.globals.initNode("/FMGC/internal/flex-set", 0, "BOOL"),
|
||||
flexTemp: props.globals.initNode("/FMGC/internal/flex", 0, "INT"),
|
||||
mngSpdAlt: props.globals.getNode("/FMGC/internal/mng-alt-spd"),
|
||||
mngMachAlt: props.globals.getNode("/FMGC/internal/mng-alt-mach"),
|
||||
toFromSet: props.globals.initNode("/FMGC/internal/tofrom-set", 0, "BOOL"),
|
||||
|
|
|
@ -80,8 +80,11 @@ var SimbriefParser = {
|
|||
if (departures != nil and size(departures) != 0 and destinations != nil and size(destinations) != 0) {
|
||||
fmgc.flightPlanController.flightplans[3].departure = departures[0];
|
||||
fmgc.flightPlanController.flightplans[3].destination = destinations[0];
|
||||
fmgc.FMGCInternal.arrApt = destinationID;
|
||||
fmgc.FMGCInternal.depApt = departureID;
|
||||
fmgc.FMGCInternal.arrApt = destinationID;
|
||||
|
||||
atsu.ATISInstances[0].newStation(departureID);
|
||||
atsu.ATISInstances[1].newStation(destinationID);
|
||||
|
||||
fmgc.FMGCInternal.toFromSet = 1;
|
||||
fmgc.FMGCNodes.toFromSet.setValue(1);
|
||||
|
@ -107,6 +110,7 @@ var SimbriefParser = {
|
|||
var alternates = findAirportsByICAO(alternateID);
|
||||
if (alternates != nil and size(alternates) != 0) {
|
||||
fmgc.FMGCInternal.altAirport = alternateID;
|
||||
atsu.ATISInstances[2].newStation(alternateID);
|
||||
fmgc.FMGCInternal.altAirportSet = 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ var createCanvasQRH = func() {
|
|||
qrhCanvas.setLayout(myHBox);
|
||||
|
||||
QRH = canvas.gui.widgets.Label.new(root, canvas.style, {} )
|
||||
.setImage("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg")
|
||||
.setImage(resolvepath("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg"))
|
||||
.move(0,-25)
|
||||
.setSize(400,625);
|
||||
myHBox.addItem(QRH);
|
||||
|
@ -78,11 +78,11 @@ var createCanvasQRH = func() {
|
|||
});
|
||||
buttonPrev.listen("clicked", func {
|
||||
prevPage();
|
||||
QRH.setImage("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg");
|
||||
QRH.setImage(resolvepath("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg"));
|
||||
});
|
||||
buttonNext.listen("clicked", func {
|
||||
nextPage();
|
||||
QRH.setImage("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg");
|
||||
QRH.setImage(resolvepath("Aircraft/A320-family/Models/FlightDeck/QRH/" ~ QRHpageNo.getValue() ~ ".jpeg"));
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -330,7 +330,7 @@ var ATIS = {
|
|||
},
|
||||
processATIS: func(r, i) {
|
||||
var raw = r.response;
|
||||
if (r.response == "FBW_ERROR: D-ATIS not available at this airport") {
|
||||
if (r.response == "FBW_ERROR: D-ATIS not available at this airport" or find("atis not avail",r.response) != -1) {
|
||||
me.received = 0;
|
||||
me.sent = 0;
|
||||
mcdu.mcdu_message(i,"NO D-ATIS AVAILABLE");
|
||||
|
|
|
@ -28,9 +28,9 @@ var FADEC = {
|
|||
eng1Time: props.globals.initNode("/systems/fadec/eng1-master-time", -300, "DOUBLE"),
|
||||
eng1Off: props.globals.initNode("/systems/fadec/eng1-off-power", 0, "BOOL"),
|
||||
eng1Counting: 0,
|
||||
epr: 0,
|
||||
epr: props.globals.initNode("/systems/fadec/eng1/epr", 0, "BOOL"),
|
||||
egt: 0,
|
||||
n1: 0,
|
||||
n1: props.globals.initNode("/systems/fadec/eng1/n1", 0, "BOOL"),
|
||||
n2: 0,
|
||||
ff: 0,
|
||||
},
|
||||
|
@ -38,9 +38,9 @@ var FADEC = {
|
|||
eng2Time: props.globals.initNode("/systems/fadec/eng2-master-time", -300, "DOUBLE"),
|
||||
eng2Off: props.globals.initNode("/systems/fadec/eng2-off-power", 0, "BOOL"),
|
||||
eng2Counting: 0,
|
||||
epr: 0,
|
||||
epr: props.globals.initNode("/systems/fadec/eng2/epr", 0, "BOOL"),
|
||||
egt: 0,
|
||||
n1: 0,
|
||||
n1: props.globals.initNode("/systems/fadec/eng2/n1", 0, "BOOL"),
|
||||
n2: 0,
|
||||
ff: 0,
|
||||
},
|
||||
|
@ -147,24 +147,24 @@ var FADEC = {
|
|||
powerup = me.Power.powerup.getValue();
|
||||
|
||||
if (powered1 or powerup or me.Eng1.eng1Off.getValue()) {
|
||||
me.Eng1.n1 = 1;
|
||||
me.Eng1.n1.setValue(1);
|
||||
me.Eng1.n2 = 1;
|
||||
me.Eng1.egt = 1;
|
||||
me.Eng1.ff = 1;
|
||||
} else {
|
||||
me.Eng1.n1 = 0;
|
||||
me.Eng1.n1.setValue(0);
|
||||
me.Eng1.n2 = 0;
|
||||
me.Eng1.egt = 0;
|
||||
me.Eng1.ff = 0;
|
||||
}
|
||||
|
||||
if (powered2 or powerup or me.Eng2.eng2Off.getValue()) {
|
||||
me.Eng2.n1 = 1;
|
||||
me.Eng2.n1.setValue(1);
|
||||
me.Eng2.n2 = 1;
|
||||
me.Eng2.egt = 1;
|
||||
me.Eng2.ff = 1;
|
||||
} else {
|
||||
me.Eng2.n1 = 0;
|
||||
me.Eng2.n1.setValue(0);
|
||||
me.Eng2.n2 = 0;
|
||||
me.Eng2.egt = 0;
|
||||
me.Eng2.ff = 0;
|
||||
|
|
|
@ -25,9 +25,9 @@ var FADEC = {
|
|||
eng1Time: props.globals.initNode("/systems/fadec/eng1-master-time", -300, "DOUBLE"),
|
||||
eng1Off: props.globals.initNode("/systems/fadec/eng1-off-power", 0, "BOOL"),
|
||||
eng1Counting: 0,
|
||||
epr: 0,
|
||||
epr: props.globals.initNode("/systems/fadec/eng1/epr", 0, "BOOL"),
|
||||
egt: 0,
|
||||
n1: 0,
|
||||
n1: props.globals.initNode("/systems/fadec/eng1/n1", 0, "BOOL"),
|
||||
n2: 0,
|
||||
ff: 0,
|
||||
},
|
||||
|
@ -35,9 +35,9 @@ var FADEC = {
|
|||
eng2Time: props.globals.initNode("/systems/fadec/eng2-master-time", -300, "DOUBLE"),
|
||||
eng2Off: props.globals.initNode("/systems/fadec/eng2-off-power", 0, "BOOL"),
|
||||
eng2Counting: 0,
|
||||
epr: 0,
|
||||
epr: props.globals.initNode("/systems/fadec/eng2/epr", 0, "BOOL"),
|
||||
egt: 0,
|
||||
n1: 0,
|
||||
n1: props.globals.initNode("/systems/fadec/eng2/n1", 0, "BOOL"),
|
||||
n2: 0,
|
||||
ff: 0,
|
||||
},
|
||||
|
@ -148,28 +148,28 @@ var FADEC = {
|
|||
|
||||
if (powered1 or powerup or me.Eng1.eng1Off.getValue()) {
|
||||
if (me.Modes.n1Mode1.getValue() == 0) {
|
||||
me.Eng1.epr = 1;
|
||||
me.Eng1.epr.setValue(1);
|
||||
} else {
|
||||
me.Eng1.epr = 0;
|
||||
me.Eng1.epr.setValue(0);
|
||||
}
|
||||
me.Eng1.egt = 1;
|
||||
me.Eng1.ff = 1;
|
||||
} else {
|
||||
me.Eng1.epr = 0;
|
||||
me.Eng1.epr.setValue(0);
|
||||
me.Eng1.egt = 0;
|
||||
me.Eng1.ff = 0;
|
||||
}
|
||||
|
||||
if (powered2 or powerup or me.Eng2.eng2Off.getValue()) {
|
||||
if (me.Modes.n1Mode2.getValue() == 0) {
|
||||
me.Eng2.epr = 1;
|
||||
me.Eng2.epr.setValue(1);
|
||||
} else {
|
||||
me.Eng2.epr = 0;
|
||||
me.Eng2.epr.setValue(0);
|
||||
}
|
||||
me.Eng2.egt = 1;
|
||||
me.Eng2.ff = 1;
|
||||
} else {
|
||||
me.Eng2.epr = 0;
|
||||
me.Eng2.epr.setValue(0);
|
||||
me.Eng2.egt = 0;
|
||||
me.Eng2.ff = 0;
|
||||
}
|
||||
|
@ -180,15 +180,15 @@ var FADEC = {
|
|||
N22 = pts.Engines.Engine.n2Actual[1].getValue();
|
||||
|
||||
if (powered1 and N11 >= 3.5) {
|
||||
me.Eng1.n1 = 1;
|
||||
me.Eng1.n1.setValue(1);
|
||||
} else {
|
||||
me.Eng1.n1 = 0;
|
||||
me.Eng1.n1.setValue(0);
|
||||
}
|
||||
|
||||
if (powered2 and N12 >= 3.5) {
|
||||
me.Eng2.n1 = 1;
|
||||
me.Eng2.n1.setValue(1);
|
||||
} else {
|
||||
me.Eng2.n1 = 0;
|
||||
me.Eng2.n1.setValue(0);
|
||||
}
|
||||
|
||||
if (powered1 and N21 >= 3.5) {
|
||||
|
|
98
Nasal/emesary/M_frame_notification.nas
Normal file
98
Nasal/emesary/M_frame_notification.nas
Normal file
|
@ -0,0 +1,98 @@
|
|||
#---------------------------------------------------------------------------
|
||||
#
|
||||
# Title : Emesary based rt exec frame notifications
|
||||
#
|
||||
# File Type : Implementation File
|
||||
#
|
||||
# Description : Uses emesary notifications to permit nasal subsystems to be notified each frame.
|
||||
# : A frame is defined by the timer rate; which is usually the maximum rate as determined by the FPS.
|
||||
# : This is an alternative to the timer based or explicit function calling way of invoking
|
||||
# : aircraft systems.
|
||||
# : It has the advantage of using less timers and remaining modular, as each aircraft subsytem
|
||||
# : can simply register itself with the global transmitter to receive the frame notification.
|
||||
#
|
||||
# Author : Richard Harrison (richard@zaretto.com)
|
||||
#
|
||||
# Creation Date : 4 June 2018
|
||||
#
|
||||
# Version : 1.0
|
||||
#
|
||||
# Copyright (C) 2018 Richard Harrison Released under GPL V2
|
||||
#
|
||||
#---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
var FrameNotification =
|
||||
{
|
||||
debug: 0,
|
||||
new: func(_rate)
|
||||
{
|
||||
var new_class = emesary.Notification.new("FrameNotification", _rate);
|
||||
new_class.Rate = _rate;
|
||||
new_class.FrameRate = 60;
|
||||
new_class.FrameCount = 0;
|
||||
new_class.ElapsedSeconds = 0;
|
||||
new_class.monitored = {};
|
||||
new_class.properties = {};
|
||||
|
||||
#
|
||||
# embed a recipient within this notification to allow the monitored property
|
||||
# mapping list to be modified.
|
||||
new_class.Recipient = emesary.Recipient.new("FrameNotification");
|
||||
new_class.Recipient.Receive = func(notification)
|
||||
{
|
||||
if (notification.NotificationType == "FrameNotificationAddProperty")
|
||||
{
|
||||
var root_node = props.globals;
|
||||
if (notification.root_node != nil) {
|
||||
root_node = notification.root_node;
|
||||
}
|
||||
if (new_class.properties[notification.property] != nil
|
||||
and new_class.properties[notification.property] != notification.variable)
|
||||
print("[WARNING]: (",notification.module,") FrameNotification: already have variable ",new_class.properties[notification.property]," for ",notification.variable, " referencing property ",notification.property);
|
||||
|
||||
if (new_class.monitored[notification.variable] != nil
|
||||
and new_class.monitored[notification.variable].getPath() != notification.property
|
||||
and new_class.monitored[notification.variable].getPath() != "/"~notification.property)
|
||||
print("[WARNING]: (",notification.module,") FrameNotification: already have variable ",notification.variable,"=",new_class.monitored[notification.variable].getPath(), " using different property ",notification.property);
|
||||
# else if (new_class.monitored[notification.variable] == nil)
|
||||
# print("[INFO]: (",notification.module,") FrameNotification.",notification.variable, " = ",notification.property);
|
||||
|
||||
new_class.monitored[notification.variable] = root_node.getNode(notification.property,1);
|
||||
new_class.properties[notification.property] = notification.variable;
|
||||
|
||||
return emesary.Transmitter.ReceiptStatus_OK;
|
||||
}
|
||||
return emesary.Transmitter.ReceiptStatus_NotProcessed;
|
||||
};
|
||||
new_class.fetchvars = func() {
|
||||
foreach (var mp; keys(new_class.monitored)){
|
||||
if(new_class.monitored[mp] != nil){
|
||||
if (FrameNotification.debug > 1)
|
||||
print(" ",mp, " = ",new_class.monitored[mp].getValue());
|
||||
new_class[mp] = new_class.monitored[mp].getValue();
|
||||
}
|
||||
}
|
||||
};
|
||||
emesary.GlobalTransmitter.Register(new_class.Recipient);
|
||||
return new_class;
|
||||
},
|
||||
};
|
||||
|
||||
var FrameNotificationAddProperty =
|
||||
{
|
||||
new: func(module, variable, property, root_node=nil)
|
||||
{
|
||||
var new_class = emesary.Notification.new("FrameNotificationAddProperty", variable);
|
||||
if (root_node == nil)
|
||||
root_node = props.globals;
|
||||
new_class.module = module ;
|
||||
new_class.variable = variable;
|
||||
new_class.property = property;
|
||||
new_class.root_node = root_node;
|
||||
return new_class;
|
||||
},
|
||||
};
|
||||
#
|
||||
var frameNotification = FrameNotification.new(1);
|
||||
|
71
Nasal/emesary/exec.nas
Normal file
71
Nasal/emesary/exec.nas
Normal file
|
@ -0,0 +1,71 @@
|
|||
#---------------------------------------------------------------------------
|
||||
#
|
||||
# Title : Emesary based real time executive
|
||||
#
|
||||
# File Type : Implementation File
|
||||
#
|
||||
# Description : Uses emesary notifications to permit nasal subsystems to
|
||||
# : be invoked in a controlled manner.
|
||||
#
|
||||
# Author : Richard Harrison (richard@zaretto.com)
|
||||
#
|
||||
# Creation Date : 4 June 2018
|
||||
#
|
||||
# Version : 1.0
|
||||
#
|
||||
# Copyright (C) 2018 Richard Harrison Released under GPL V2
|
||||
#
|
||||
#---------------------------------------------------------------------------*/
|
||||
|
||||
#
|
||||
# real time exec loop.
|
||||
var frame_inc = 0;
|
||||
var cur_frame_inc = 0.05;
|
||||
var execLoop = func
|
||||
{
|
||||
#
|
||||
notifications.frameNotification.fetchvars();
|
||||
if (notifications.frameNotification.FrameCount >= 4) {
|
||||
notifications.frameNotification.FrameCount = 0;
|
||||
}
|
||||
emesary.GlobalTransmitter.NotifyAll(notifications.frameNotification);
|
||||
#
|
||||
|
||||
notifications.frameNotification.FrameCount = notifications.frameNotification.FrameCount + 1;
|
||||
|
||||
if (notifications.frameNotification.frame_rate < 5) {
|
||||
frame_inc = 0.25;#4 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 10) {
|
||||
frame_inc = 0.125;#8 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 15) {
|
||||
frame_inc = 0.10;#10 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 20) {
|
||||
frame_inc = 0.075;#13.3 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 25) {
|
||||
frame_inc = 0.05;#20 Hz
|
||||
} elsif (notifications.frameNotification.frame_rate < 40) {
|
||||
frame_inc = 0.0333;#30 Hz
|
||||
} else {
|
||||
frame_inc = 0.02;#50 Hz
|
||||
}
|
||||
|
||||
if (frame_inc != cur_frame_inc) {
|
||||
cur_frame_inc = frame_inc;
|
||||
}
|
||||
settimer(execLoop, cur_frame_inc);
|
||||
}
|
||||
|
||||
# setup the properties to monitor for this system
|
||||
input = {
|
||||
frame_rate : "/sim/frame-rate",
|
||||
elapsed_seconds : "/sim/time/elapsed-sec",
|
||||
};
|
||||
|
||||
foreach (var name; keys(input)) {
|
||||
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("EXEC", name, input[name]));
|
||||
}
|
||||
emesary.GlobalTransmitter.OverrunDetection(9);
|
||||
|
||||
setlistener("/sim/signals/fdm-initialized", func() {
|
||||
execLoop();
|
||||
}, 0, 0);
|
|
@ -466,7 +466,7 @@
|
|||
/gear/gear[1]/wow eq 1
|
||||
/systems/air-conditioning/landing-switch eq 1
|
||||
/velocities/airspeed-kt lt 70
|
||||
/ECAM/phases/to-power-set ne 1
|
||||
/ECAM/phases/phase-calculation/takeoff-power ne 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
|
@ -474,7 +474,7 @@
|
|||
<default value="/systems/air-conditioning/packs/pack-flow-1-norm"/>
|
||||
<test logic="AND" value="0">
|
||||
/gear/gear[1]/wow eq 1
|
||||
/ECAM/phases/to-power-set eq 1
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 1
|
||||
</test>
|
||||
<test logic="AND" value="0">
|
||||
/gear/gear[1]/wow eq 1
|
||||
|
@ -507,7 +507,7 @@
|
|||
<default value="/systems/air-conditioning/packs/pack-flow-2-norm"/>
|
||||
<test logic="AND" value="0">
|
||||
/gear/gear[1]/wow eq 1
|
||||
/ECAM/phases/to-power-set eq 1
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 1
|
||||
</test>
|
||||
<test logic="AND" value="0">
|
||||
/gear/gear[1]/wow eq 1
|
||||
|
|
|
@ -12,6 +12,19 @@
|
|||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/phase-calculation/engine-1-or-2-running">
|
||||
<input>/ECAM/phases/phase-calculation/one-engine-running</input>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
<rate_limit sense="incr">0.03333333333</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/monostable/phase-1-300-output">
|
||||
<input>/ECAM/phases/monostable/phase-1-300</input>
|
||||
<rate_limit sense="incr">0.00333333333</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
</channel>
|
||||
|
||||
<channel name="FWC Phase Logic and Switches" execrate="4">
|
||||
|
@ -80,12 +93,6 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<actuator name="/ECAM/phases/monostable/phase-1-300-output">
|
||||
<input>/ECAM/phases/monostable/phase-1-300</input>
|
||||
<rate_limit sense="incr">0.00333333333</rate_limit>
|
||||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/ECAM/phases/monostable/phase-1-300-output">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
|
@ -93,6 +100,135 @@
|
|||
/ECAM/phases/monostable/phase-1-300 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/altitude-ge-1500">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/position/gear-agl-ft ge 1500
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/altitude-flipflop-set">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/phase-calculation/altitude-ge-1500 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/altitude-flipflop-reset">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/position/gear-agl-ft lt 800
|
||||
</test>
|
||||
</switch>
|
||||
</channel>
|
||||
|
||||
<channel name="Phase Calcs" execrate="4">
|
||||
|
||||
<switch name="/ECAM/phases/timer/eng1idle">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/engines/engine[0]/n2 ge 59.4
|
||||
/controls/engines/engine[0]/cutoff-switch eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/timer/eng2idle">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/engines/engine[1]/n2 ge 59.4
|
||||
/controls/engines/engine[1]/cutoff-switch eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/engine-1-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
<test logic="OR">
|
||||
/ECAM/phases/timer/eng1idle-output eq 0
|
||||
/controls/engines/engine[0]/cutoff-switch eq 1
|
||||
</test>
|
||||
<test logic="OR">
|
||||
/ECAM/timer/ground-calc eq 1
|
||||
/ECAM/phases/timer/eng1idle eq 0
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/engine-2-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
<test logic="OR">
|
||||
/ECAM/phases/timer/eng2idle-output eq 0
|
||||
/controls/engines/engine[1]/cutoff-switch eq 1
|
||||
</test>
|
||||
<test logic="OR">
|
||||
/ECAM/timer/ground-calc eq 1
|
||||
/ECAM/phases/timer/eng2idle eq 0
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/engines-1-2-not-running">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/phases/phase-calculation/engine-1-off eq 1
|
||||
/ECAM/phases/phase-calculation/engine-2-off eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/one-engine-running">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/engines/engine[0]/state eq 3
|
||||
/engines/engine[1]/state eq 3
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/takeoff-power-logic">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
<test logic="OR">
|
||||
<test logic="AND">
|
||||
/controls/engines/engine[0]/throttle ge 0.779
|
||||
/systems/thrust/lim-flex eq 1
|
||||
</test>
|
||||
<test logic="AND">
|
||||
/controls/engines/engine[0]/throttle ge 0.99
|
||||
/systems/thrust/lim-flex eq 0
|
||||
</test>
|
||||
</test>
|
||||
<test logic="OR">
|
||||
<test logic="AND">
|
||||
/controls/engines/engine[1]/throttle ge 0.779
|
||||
/systems/thrust/lim-flex eq 1
|
||||
</test>
|
||||
<test logic="AND">
|
||||
/controls/engines/engine[1]/throttle ge 0.99
|
||||
/systems/thrust/lim-flex eq 0
|
||||
</test>
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<actuator name="/ECAM/phases/phase-calculation/takeoff-power-timer">
|
||||
<input>/ECAM/phases/phase-calculation/takeoff-power-logic</input>
|
||||
<rate_limit sense="incr">120</rate_limit>
|
||||
<rate_limit sense="decr">0.01666666666</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/ECAM/phases/phase-calculation/takeoff-power">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/phases/phase-calculation/takeoff-power-logic eq 1
|
||||
<test logic="AND">
|
||||
/ECAM/phases/phase-calculation/takeoff-power-timer ne 0
|
||||
/ECAM/phases/phase-calculation/altitude-ge-1500 eq 0
|
||||
/controls/engines/engine[0]/throttle ge 0.599
|
||||
/controls/engines/engine[1]/throttle ge 0.599
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
</channel>
|
||||
|
||||
</system>
|
||||
|
|
|
@ -21,13 +21,6 @@
|
|||
<rate_limit sense="incr">0.033</rate_limit> <!-- 30 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/timer/eng1or2-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/phases/timer/eng1or2</input>
|
||||
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
|
||||
<rate_limit sense="incr">0.033</rate_limit> <!-- 30 seconds -->
|
||||
</actuator>
|
||||
|
||||
<actuator name="/ECAM/phases/timer/to-inhibit-output">
|
||||
<description>Timer for the ECAM system</description>
|
||||
<input>/ECAM/phases/timer/to-inhibit</input>
|
||||
|
@ -1805,7 +1798,7 @@
|
|||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/controls/engines/engine[0]/throttle-lever ge 0.13333333333
|
||||
/ECAM/phases/to-power-set eq 0
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
|
@ -1858,7 +1851,7 @@
|
|||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/controls/engines/engine[1]/throttle-lever ge 0.13333333333
|
||||
/ECAM/phases/to-power-set eq 0
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
|
@ -2063,7 +2056,7 @@
|
|||
/instrumentation/radar-altimeter[0]/radar-altitude-ft lt 750
|
||||
/instrumentation/radar-altimeter[1]/radar-altitude-ft lt 750
|
||||
</test>
|
||||
/ECAM/phases/to-power-set eq 0
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
<test logic="OR">
|
||||
fcs/slat-pos-deg gt 16
|
||||
fcs/flap-pos-deg gt 18
|
||||
|
@ -2099,7 +2092,7 @@
|
|||
/instrumentation/radar-altimeter[0]/radar-altitude-ft lt 750
|
||||
/instrumentation/radar-altimeter[1]/radar-altitude-ft lt 750
|
||||
</test>
|
||||
/ECAM/phases/to-power-set eq 0
|
||||
/ECAM/phases/phase-calculation/takeoff-power eq 0
|
||||
<test logic="OR">
|
||||
/gear/gear[0]/position-norm ne 1
|
||||
/gear/gear[1]/position-norm ne 1
|
||||
|
@ -2379,4 +2372,188 @@
|
|||
|
||||
</channel>
|
||||
|
||||
<channel name="Altitude Alerter" execrate="8">
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/altInhibit">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/it-autoflight/input/alt-is-changing eq 1
|
||||
<test logic="OR">
|
||||
<test logic="AND">
|
||||
/gear/gear[1]/position-norm ge 0.99
|
||||
/gear/gear[2]/position-norm ge 0.99
|
||||
</test>
|
||||
<test logic="AND">
|
||||
/controls/gear/gear-down eq 1
|
||||
/fdm/jsbsim/fcs/slat-pos-deg ge 4
|
||||
</test>
|
||||
</test>
|
||||
/it-autoflight/output/lat eq 4
|
||||
/it-autoflight/output/vert eq 2
|
||||
/it-autoflight/output/vert eq 6
|
||||
<!-- /it-autoflight/output/vert eq 7 check -->
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<fcs_function name="/ECAM/warnings/altitude-alert/altitude-difference">
|
||||
<function>
|
||||
<ifthen>
|
||||
<not><property>/instrumentation/altimeter[0]/std</property></not>
|
||||
<abs>
|
||||
<difference>
|
||||
<property>/systems/navigation/adr/output/baro-alt-corrected-1-capt</property>
|
||||
<property>/it-autoflight/input/alt</property>
|
||||
</difference>
|
||||
</abs>
|
||||
<abs>
|
||||
<difference>
|
||||
<property>/systems/navigation/adr/output/baro-alt-1-capt</property>
|
||||
<property>/it-autoflight/input/alt</property>
|
||||
</difference>
|
||||
</abs>
|
||||
</ifthen>
|
||||
</function>
|
||||
</fcs_function>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/alt200">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/altitude-difference le 200
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/alt750">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/altitude-difference le 750
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/big-3-1-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/altInhibit eq 0
|
||||
/ECAM/warnings/altitude-alert/alt200 eq 1
|
||||
/ECAM/warnings/altitude-alert/alt750 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/big-3-2-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/altInhibit eq 0
|
||||
/ECAM/warnings/altitude-alert/alt200 eq 0
|
||||
/ECAM/warnings/altitude-alert/alt750 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/big-3-all-off">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/altInhibit eq 0
|
||||
/ECAM/warnings/altitude-alert/alt200 eq 0
|
||||
/ECAM/warnings/altitude-alert/alt750 eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-1-set">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-1-off eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-1-reset">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-all-off eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-2-reset eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-2-set">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-2-off eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-2-reset">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
<test logic="AND">
|
||||
/ECAM/warnings/altitude-alert/gear-downlocked-set eq 1
|
||||
/ECAM/warnings/altitude-alert/gear-downlocked-output eq 1
|
||||
</test>
|
||||
/ECAM/warnings/altitude-alert/alt-is-changing eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-or-1">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-2-off eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-1 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-or-2">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/warnings/altitude-alert/big-3-all-off eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-2 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/flipflop-or">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warnings/altitude-alert/flipflop-or-1 eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-or-2 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/monostable-autopilot">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/it-autoflight/output/ap1 eq 0
|
||||
/it-autoflight/output/ap2 eq 0
|
||||
/ECAM/warnings/altitude-alert/big-3-2-off eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/c-chord">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/timer/ground-calc ne 1
|
||||
<test logic="OR">
|
||||
<test logic="AND">
|
||||
/ECAM/warnings/altitude-alert/monostable-autopilot eq 1
|
||||
/ECAM/warnings/altitude-alert/monostable-autopilot-output eq 1
|
||||
</test>
|
||||
/ECAM/warnings/altitude-alert/flipflop-or eq 1
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/altitude-alert-steady">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/timer/ground-calc ne 1
|
||||
/ECAM/warnings/altitude-alert/big-3-2-off eq 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-or-1 eq 0
|
||||
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/warnings/altitude-alert/altitude-alert-flash">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/ECAM/timer/ground-calc ne 1
|
||||
/ECAM/warnings/altitude-alert/flipflop-or eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
</channel>
|
||||
|
||||
</system>
|
||||
|
|
|
@ -203,6 +203,17 @@
|
|||
<output>ECAM/phases/monostable/gnd-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<time>
|
||||
<value>2.5</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/ECAM/ground-calc-immediate</property>
|
||||
</S>
|
||||
<output>ECAM/phases/monostable/gnd-output-2</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<time>
|
||||
|
@ -239,44 +250,6 @@
|
|||
<output>ECAM/buttons/recall-status-normal-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
<property>ECAM/altitude-alert-monostable-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>ECAM/altitude-alert-monostable-intermediate-output</property>
|
||||
</R>
|
||||
<output>ECAM/altitude-alert-monostable-flipflop-intermediate</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
<time>
|
||||
<value>1.5</value>
|
||||
</time>
|
||||
<S>
|
||||
<not><property>ECAM/altitude-alert-monostable-flipflop-intermediate</property></not>
|
||||
</S>
|
||||
<output>ECAM/altitude-alert-monostable-intermediate-output</output>
|
||||
</flipflop>
|
||||
|
||||
<filter>
|
||||
<type>gain</type>
|
||||
<gain>1.0</gain>
|
||||
<input>
|
||||
<condition>
|
||||
<and>
|
||||
<property>ECAM/altitude-alert-monostable-flipflop-intermediate</property>
|
||||
<not><property>ECAM/altitude-alert-monostable-intermediate-output</property></not>
|
||||
</and>
|
||||
</condition>
|
||||
<value>1</value>
|
||||
</input>
|
||||
<output>ECAM/altitude-alert-monostable-output</output>
|
||||
</filter>
|
||||
|
||||
<filter>
|
||||
<type>derivative</type>
|
||||
<input>it-autoflight/input/alt</input>
|
||||
|
@ -292,10 +265,12 @@
|
|||
<S>
|
||||
<property>it-autoflight/input/alt-is-changing</property>
|
||||
</S>
|
||||
<output>ECAM/alt-is-changing</output>
|
||||
<output>ECAM/warnings/altitude-alert/alt-is-changing</output>
|
||||
</flipflop>
|
||||
|
||||
<filter>
|
||||
<type>gain</type>
|
||||
<gain>1</gain>
|
||||
<input>
|
||||
<condition>
|
||||
<equals>
|
||||
|
@ -314,7 +289,7 @@
|
|||
</condition>
|
||||
<value>0</value>
|
||||
</input>
|
||||
<output>ECAM/gear-downlocked-set</output>
|
||||
<output>ECAM/warnings/altitude-alert/gear-downlocked-set</output>
|
||||
</filter>
|
||||
|
||||
<flipflop>
|
||||
|
@ -323,67 +298,9 @@
|
|||
<value>1</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>ECAM/gear-downlocked-set</property>
|
||||
<not><property>ECAM/warnings/altitude-alert/gear-downlocked-set</property></not>
|
||||
</S>
|
||||
<output>ECAM/gear-downlocked-output</output>
|
||||
</flipflop>
|
||||
|
||||
|
||||
<filter>
|
||||
<type>gain</type>
|
||||
<gain>1.0</gain>
|
||||
<input>
|
||||
<condition>
|
||||
<or>
|
||||
<equals><property>ECAM/gear-downlocked-output</property><value>1</value></equals>
|
||||
<equals><property>ECAM/alt-is-changing</property><value>1</value></equals>
|
||||
</or>
|
||||
</condition>
|
||||
<value>1</value>
|
||||
</input>
|
||||
<input>
|
||||
<condition>
|
||||
<and>
|
||||
<equals><property>ECAM/gear-downlocked-output</property><value>0</value></equals>
|
||||
<equals><property>ECAM/alt-is-changing</property><value>0</value></equals>
|
||||
</and>
|
||||
</condition>
|
||||
<value>0</value>
|
||||
</input>
|
||||
<output>ECAM/flipflop/alt-alert-rs-reset</output>
|
||||
</filter>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>ECAM/flipflop/altitude-alert-rs-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>ECAM/flipflop/alt-alert-rs-reset</property>
|
||||
</R>
|
||||
<output>ECAM/flipflop/alt-alert-rs-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>ECAM/flipflop/alt-alert-2-rs-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>ECAM/flipflop/alt-alert-2-rs-reset</property>
|
||||
</R>
|
||||
<output>ECAM/flipflop/alt-alert-2-rs-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>ECAM/flipflop/alt-alert-3-rs-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>ECAM/flipflop/alt-alert-rs-reset</property>
|
||||
</R>
|
||||
<output>ECAM/flipflop/alt-alert-3-rs-output</output>
|
||||
<output>ECAM/warnings/altitude-alert/gear-downlocked-output</output>
|
||||
</flipflop>
|
||||
|
||||
<!-- falling edge detector - take inverse of following -->
|
||||
|
@ -466,7 +383,7 @@
|
|||
<value>1.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>ECAM/phases/to-power-set</property>
|
||||
<property>ECAM/phases/phase-calculation/takeoff-power</property>
|
||||
</S>
|
||||
<output>ECAM/phases/monostable/to-power-set-output</output>
|
||||
</flipflop>
|
||||
|
@ -1069,4 +986,47 @@
|
|||
<output>/ECAM/warnings/logic/green-yellow-press-on-monostable</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/altitude-alert/flipflop-1-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/altitude-alert/flipflop-1-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/altitude-alert/flipflop-1</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/altitude-alert/flipflop-2-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/altitude-alert/flipflop-2-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/altitude-alert/flipflop-2</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<time>
|
||||
<value>1.5</value>
|
||||
</time>
|
||||
<S>
|
||||
<not><property>/ECAM/warnings/altitude-alert/monostable-autopilot</property></not>
|
||||
</S>
|
||||
<output>/ECAM/warnings/altitude-alert/monostable-autopilot-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/phases/phase-calculation/altitude-flipflop-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/phases/phase-calculation/altitude-flipflop-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/phases/phase-calculation/altitude-ge-800</output>
|
||||
</flipflop>
|
||||
</PropertyList>
|
||||
|
|
Loading…
Reference in a new issue