JSBSim apu
This commit is contained in:
parent
d3fb74ef6f
commit
107ba3ed4f
20 changed files with 748 additions and 344 deletions
|
@ -70,6 +70,32 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
|
||||||
</thruster>
|
</thruster>
|
||||||
</engine>
|
</engine>
|
||||||
|
|
||||||
|
<engine file="APS3200">
|
||||||
|
<location unit="M">
|
||||||
|
<x> 38.9 </x>
|
||||||
|
<y> 0 </y>
|
||||||
|
<z> 0.95 </z>
|
||||||
|
</location>
|
||||||
|
<orient unit="DEG">
|
||||||
|
<roll> 0.0 </roll>
|
||||||
|
<pitch> 0.0 </pitch>
|
||||||
|
<yaw> 0.0 </yaw>
|
||||||
|
</orient>
|
||||||
|
<feed>6</feed>
|
||||||
|
<thruster file="direct">
|
||||||
|
<location unit="M">
|
||||||
|
<x> 38.9 </x>
|
||||||
|
<y> 0 </y>
|
||||||
|
<z> 0.95 </z>
|
||||||
|
</location>
|
||||||
|
<orient unit="DEG">
|
||||||
|
<roll> 0.0 </roll>
|
||||||
|
<pitch> 0.0 </pitch>
|
||||||
|
<yaw> 0.0 </yaw>
|
||||||
|
</orient>
|
||||||
|
</thruster>
|
||||||
|
</engine>
|
||||||
|
|
||||||
<tank type="FUEL"> <!-- Outer Left Wing Tank -->
|
<tank type="FUEL"> <!-- Outer Left Wing Tank -->
|
||||||
<location unit="M">
|
<location unit="M">
|
||||||
<x> 18.9231 </x>
|
<x> 18.9231 </x>
|
||||||
|
@ -169,6 +195,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
|
||||||
<system file="a320-lights"/>
|
<system file="a320-lights"/>
|
||||||
<system file="a320-engine-fire"/>
|
<system file="a320-engine-fire"/>
|
||||||
<system file="a320-adr"/>
|
<system file="a320-adr"/>
|
||||||
|
<system file="a320-apu"/>
|
||||||
<system file="a320-fmgc"/>
|
<system file="a320-fmgc"/>
|
||||||
|
|
||||||
<flight_control name="none"/>
|
<flight_control name="none"/>
|
||||||
|
|
|
@ -554,11 +554,6 @@
|
||||||
</speeds>
|
</speeds>
|
||||||
</it-fbw>
|
</it-fbw>
|
||||||
|
|
||||||
<apu>
|
|
||||||
<rpm type="float">0</rpm>
|
|
||||||
<egt type="float">0</egt>
|
|
||||||
</apu>
|
|
||||||
|
|
||||||
<FMGC n="0">
|
<FMGC n="0">
|
||||||
<active-fmgc-channel type="int">0</active-fmgc-channel>
|
<active-fmgc-channel type="int">0</active-fmgc-channel>
|
||||||
<internal>
|
<internal>
|
||||||
|
@ -614,14 +609,15 @@
|
||||||
<system-knob type="int">0</system-knob>
|
<system-knob type="int">0</system-knob>
|
||||||
<mode-knob type="int">0</mode-knob>
|
<mode-knob type="int">0</mode-knob>
|
||||||
</atc>
|
</atc>
|
||||||
<APU>
|
<apu>
|
||||||
|
<agent-btn type="bool">0</agent-btn>
|
||||||
<fire-btn type="bool">0</fire-btn>
|
<fire-btn type="bool">0</fire-btn>
|
||||||
<fire-btn-cover type="bool">0</fire-btn-cover>
|
<fire-btn-cover type="bool">0</fire-btn-cover>
|
||||||
<fire-light type="bool">0</fire-light>
|
<fire-light type="bool">0</fire-light>
|
||||||
<master type="bool">0</master>
|
<master type="bool">0</master>
|
||||||
<start type="bool">0</start>
|
<start type="bool">0</start>
|
||||||
<bleed type="bool">0</bleed>
|
<bleed type="bool">0</bleed>
|
||||||
</APU>
|
</apu>
|
||||||
<autobrake>
|
<autobrake>
|
||||||
<active type="bool">0</active>
|
<active type="bool">0</active>
|
||||||
<brake-left type="double">0</brake-left>
|
<brake-left type="double">0</brake-left>
|
||||||
|
@ -679,6 +675,12 @@
|
||||||
<throttle-output type="double">0</throttle-output>
|
<throttle-output type="double">0</throttle-output>
|
||||||
<throttle-fdm type="double">0</throttle-fdm>
|
<throttle-fdm type="double">0</throttle-fdm>
|
||||||
</engine>
|
</engine>
|
||||||
|
<engine n="2">
|
||||||
|
<cutoff type="bool">true</cutoff>
|
||||||
|
<starter type="bool">0</starter>
|
||||||
|
<throttle-output type="double">0</throttle-output>
|
||||||
|
<throttle-fdm type="double">0</throttle-fdm>
|
||||||
|
</engine>
|
||||||
</engines>
|
</engines>
|
||||||
<fctl>
|
<fctl>
|
||||||
<lights>
|
<lights>
|
||||||
|
@ -867,12 +869,6 @@
|
||||||
</controls>
|
</controls>
|
||||||
|
|
||||||
<engines>
|
<engines>
|
||||||
<apu>
|
|
||||||
<rpm type="double">0</rpm>
|
|
||||||
<on-fire type="bool">0</on-fire>
|
|
||||||
<running type="bool">0</running>
|
|
||||||
<serviceable type="bool">true</serviceable>
|
|
||||||
</apu>
|
|
||||||
<engine n="0">
|
<engine n="0">
|
||||||
<egt-actual type="double">0</egt-actual>
|
<egt-actual type="double">0</egt-actual>
|
||||||
<epr-actual type="double">1</epr-actual>
|
<epr-actual type="double">1</epr-actual>
|
||||||
|
@ -893,6 +889,13 @@
|
||||||
<running type="bool">0</running>
|
<running type="bool">0</running>
|
||||||
<state type="int">0</state>
|
<state type="int">0</state>
|
||||||
</engine>
|
</engine>
|
||||||
|
<engine n="2">
|
||||||
|
<egt-actual type="double">0</egt-actual>
|
||||||
|
<n1 type="double">0</n1>
|
||||||
|
<n-actual type="double">0</n-actual>
|
||||||
|
<running type="bool">0</running>
|
||||||
|
<servicable type="bool">1</servicable>
|
||||||
|
</engine>
|
||||||
</engines>
|
</engines>
|
||||||
|
|
||||||
<gear>
|
<gear>
|
||||||
|
@ -939,9 +942,13 @@
|
||||||
<transponder-code type="string">2000</transponder-code>
|
<transponder-code type="string">2000</transponder-code>
|
||||||
<failed type="bool">0</failed>
|
<failed type="bool">0</failed>
|
||||||
</atc>
|
</atc>
|
||||||
<apu n="0">
|
<apu>
|
||||||
<n2 type="double">0</n2>
|
<oil>
|
||||||
<emer-shutdown type="bool">false</emer-shutdown>
|
<level-l type="double">5.4</level-l>
|
||||||
|
</oil>
|
||||||
|
<available type="bool">0</available>
|
||||||
|
<dc-bat-three-minutes type="bool">0</dc-bat-three-minutes>
|
||||||
|
<start type="bool">0</start>
|
||||||
</apu>
|
</apu>
|
||||||
<electrical n="0">
|
<electrical n="0">
|
||||||
<bus>
|
<bus>
|
||||||
|
@ -3878,6 +3885,7 @@
|
||||||
<file>Aircraft/A320-family/AircraftConfig/acconfig.nas</file>
|
<file>Aircraft/A320-family/AircraftConfig/acconfig.nas</file>
|
||||||
</acconfig>
|
</acconfig>
|
||||||
<systems>
|
<systems>
|
||||||
|
<file>Aircraft/A320-family/Nasal/Systems/APU.nas</file>
|
||||||
<file>Aircraft/A320-family/Nasal/Effects/effects.nas</file>
|
<file>Aircraft/A320-family/Nasal/Effects/effects.nas</file>
|
||||||
<file>Aircraft/A320-family/Nasal/Systems/electrical.nas</file>
|
<file>Aircraft/A320-family/Nasal/Systems/electrical.nas</file>
|
||||||
<file>Aircraft/A320-family/Nasal/Systems/pneumatics.nas</file>
|
<file>Aircraft/A320-family/Nasal/Systems/pneumatics.nas</file>
|
||||||
|
|
|
@ -305,8 +305,8 @@ var colddark = func {
|
||||||
}
|
}
|
||||||
var colddark_b = func {
|
var colddark_b = func {
|
||||||
# Continues the Cold and Dark script, after engines fully shutdown.
|
# Continues the Cold and Dark script, after engines fully shutdown.
|
||||||
setprop("controls/APU/master", 0);
|
setprop("controls/apu/master", 0);
|
||||||
setprop("controls/APU/start", 0);
|
setprop("controls/apu/start", 0);
|
||||||
settimer(func {
|
settimer(func {
|
||||||
setprop("controls/gear/brake-left", 0);
|
setprop("controls/gear/brake-left", 0);
|
||||||
setprop("controls/gear/brake-right", 0);
|
setprop("controls/gear/brake-right", 0);
|
||||||
|
@ -342,14 +342,14 @@ var beforestart = func {
|
||||||
setprop("controls/flight/elevator-trim", 0);
|
setprop("controls/flight/elevator-trim", 0);
|
||||||
libraries.systemsInit();
|
libraries.systemsInit();
|
||||||
failResetOld();
|
failResetOld();
|
||||||
setprop("controls/APU/master", 0);
|
setprop("controls/apu/master", 0);
|
||||||
setprop("controls/APU/start", 0);
|
setprop("controls/apu/start", 0);
|
||||||
|
|
||||||
# Now the Startup!
|
# Now the Startup!
|
||||||
props.globals.getNode("controls/electrical/switches/bat-1").setValue(1);
|
props.globals.getNode("controls/electrical/switches/bat-1").setValue(1);
|
||||||
props.globals.getNode("controls/electrical/switches/bat-2").setValue(1);
|
props.globals.getNode("controls/electrical/switches/bat-2").setValue(1);
|
||||||
setprop("controls/APU/master", 1);
|
setprop("controls/apu/master", 1);
|
||||||
setprop("controls/APU/start", 1);
|
setprop("controls/apu/start", 1);
|
||||||
var apu_rpm_chk = setlistener("/systems/apu/rpm", func {
|
var apu_rpm_chk = setlistener("/systems/apu/rpm", func {
|
||||||
if (getprop("systems/apu/rpm") >= 98) {
|
if (getprop("systems/apu/rpm") >= 98) {
|
||||||
removelistener(apu_rpm_chk);
|
removelistener(apu_rpm_chk);
|
||||||
|
@ -433,14 +433,14 @@ var taxi = func {
|
||||||
setprop("controls/flight/elevator-trim", 0);
|
setprop("controls/flight/elevator-trim", 0);
|
||||||
libraries.systemsInit();
|
libraries.systemsInit();
|
||||||
failResetOld();
|
failResetOld();
|
||||||
setprop("controls/APU/master", 0);
|
setprop("controls/apu/master", 0);
|
||||||
setprop("controls/APU/start", 0);
|
setprop("controls/apu/start", 0);
|
||||||
|
|
||||||
# Now the Startup!
|
# Now the Startup!
|
||||||
props.globals.getNode("controls/electrical/switches/bat-1").setValue(1);
|
props.globals.getNode("controls/electrical/switches/bat-1").setValue(1);
|
||||||
props.globals.getNode("controls/electrical/switches/bat-2").setValue(1);
|
props.globals.getNode("controls/electrical/switches/bat-2").setValue(1);
|
||||||
setprop("controls/APU/master", 1);
|
setprop("controls/apu/master", 1);
|
||||||
setprop("controls/APU/start", 1);
|
setprop("controls/apu/start", 1);
|
||||||
var apu_rpm_chk = setlistener("/systems/apu/rpm", func {
|
var apu_rpm_chk = setlistener("/systems/apu/rpm", func {
|
||||||
if (getprop("systems/apu/rpm") >= 98) {
|
if (getprop("systems/apu/rpm") >= 98) {
|
||||||
removelistener(apu_rpm_chk);
|
removelistener(apu_rpm_chk);
|
||||||
|
@ -510,8 +510,8 @@ var taxi_c = func {
|
||||||
var taxi_d = func {
|
var taxi_d = func {
|
||||||
# After Start items.
|
# After Start items.
|
||||||
setprop("controls/engines/engine-start-switch", 1);
|
setprop("controls/engines/engine-start-switch", 1);
|
||||||
setprop("controls/APU/master", 0);
|
setprop("controls/apu/master", 0);
|
||||||
setprop("controls/APU/start", 0);
|
setprop("controls/apu/start", 0);
|
||||||
setprop("controls/pneumatic/switches/bleedapu", 0);
|
setprop("controls/pneumatic/switches/bleedapu", 0);
|
||||||
setprop("controls/gear/brake-left", 0);
|
setprop("controls/gear/brake-left", 0);
|
||||||
setprop("controls/gear/brake-right", 0);
|
setprop("controls/gear/brake-right", 0);
|
||||||
|
|
80
Engines/APS3200.xml
Normal file
80
Engines/APS3200.xml
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
File: APS3200.xml
|
||||||
|
Author: AeromatiC++ v 3.3.10
|
||||||
|
|
||||||
|
See: http://wiki.flightgear.org/JSBSim_Engines#FGTurbine
|
||||||
|
|
||||||
|
Inputs:
|
||||||
|
name: APS3200
|
||||||
|
type: Turbine Engine
|
||||||
|
thrust: 2.6 lbf
|
||||||
|
bypass ratio: 0.070:1
|
||||||
|
overall pressure ratio: 8.0:1
|
||||||
|
augmented? no
|
||||||
|
injected? no
|
||||||
|
|
||||||
|
Outputs
|
||||||
|
tsfc: 0.8
|
||||||
|
engine weight: 1.0 lbs
|
||||||
|
engine length: 0.3 ft
|
||||||
|
engine diameter: 0.1 ft
|
||||||
|
-->
|
||||||
|
|
||||||
|
<turbine_engine name="APS3200">
|
||||||
|
<milthrust> 2.6 </milthrust>
|
||||||
|
<bypassratio> 0.000 </bypassratio>
|
||||||
|
<tsfc> 0.820 </tsfc>
|
||||||
|
<bleed> 0.96</bleed> <!-- 16 / 400 KW exhaust energy -->
|
||||||
|
|
||||||
|
<!-- self sustaining speed is 55.0 -->
|
||||||
|
<ignitionn1> 5.0</ignitionn1>
|
||||||
|
<ignitionn2> 26</ignitionn2> <!-- hack to make work -->
|
||||||
|
<n1spinup> 3.0</n1spinup>
|
||||||
|
<n2spinup> 8.666</n2spinup> <!-- hack to make work -->
|
||||||
|
<n1startrate> 1.8222</n1startrate>
|
||||||
|
<n2startrate> 1.8222</n2startrate>
|
||||||
|
<idlen1> 99.9 </idlen1>
|
||||||
|
<idlen2> 99.9 </idlen2>
|
||||||
|
|
||||||
|
<maxn1> 100.0 </maxn1>
|
||||||
|
<maxn2> 100.0 </maxn2>
|
||||||
|
<augmented> 0 </augmented>
|
||||||
|
<injected> 0 </injected>
|
||||||
|
|
||||||
|
<function name="IdleThrust">
|
||||||
|
<table>
|
||||||
|
<independentVar lookup="row">velocities/mach</independentVar>
|
||||||
|
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
|
||||||
|
<tableData>
|
||||||
|
-10000 0 10000 20000 30000 40000 50000 90000
|
||||||
|
0.0 0.0430 0.0488 0.0528 0.0694 0.0899 0.1183 0.1467 0
|
||||||
|
0.2 0.0500 0.0501 0.0335 0.0544 0.0797 0.1049 0.1342 0
|
||||||
|
0.4 0.0040 0.0047 0.0020 0.0272 0.0595 0.0891 0.1203 0
|
||||||
|
0.6 -0.0804 -0.0804 -0.0560 -0.0237 0.0276 0.0718 0.1073 0
|
||||||
|
0.8 -0.2129 -0.2129 -0.1498 -0.1025 0.0474 0.0868 0.0900 0
|
||||||
|
1.0 -0.2839 -0.2839 -0.1104 -0.0469 -0.0270 0.0552 0.0800 0
|
||||||
|
</tableData>
|
||||||
|
</table>
|
||||||
|
</function>
|
||||||
|
|
||||||
|
<function name="MilThrust">
|
||||||
|
<table>
|
||||||
|
<independentVar lookup="row">velocities/mach</independentVar>
|
||||||
|
<independentVar lookup="column">atmosphere/density-altitude</independentVar>
|
||||||
|
<tableData>
|
||||||
|
-10000 0 10000 20000 30000 40000 50000 60000 90000
|
||||||
|
0.0 1.2600 1.0000 0.7400 0.5340 0.3720 0.2410 0.1490 0.0580 0
|
||||||
|
0.2 1.1692 0.9326 0.6959 0.5052 0.3545 0.2306 0.1428 0.0399 0
|
||||||
|
0.4 1.1465 0.9182 0.6899 0.5044 0.3559 0.2323 0.1446 0.0429 0
|
||||||
|
0.6 1.1755 0.9466 0.7177 0.5295 0.3763 0.2469 0.1533 0.0468 0
|
||||||
|
0.8 1.2503 1.0137 0.7772 0.5784 0.4144 0.2733 0.1690 0.0527 0
|
||||||
|
1.0 1.3585 1.1114 0.8643 0.6460 0.4713 0.3126 0.1935 0.0625 0
|
||||||
|
1.2 1.4713 1.2186 0.9660 0.7371 0.5400 0.3606 0.2229 0.0733 0
|
||||||
|
1.4 1.5769 1.3256 1.0743 0.8359 0.6212 0.4194 0.2602 0.0890 0
|
||||||
|
</tableData>
|
||||||
|
</table>
|
||||||
|
</function>
|
||||||
|
|
||||||
|
</turbine_engine>
|
|
@ -52,9 +52,9 @@ var lighting_du4 = props.globals.getNode("controls/lighting/DU/du4", 1);
|
||||||
var ecam_page = props.globals.getNode("ECAM/Lower/page", 1);
|
var ecam_page = props.globals.getNode("ECAM/Lower/page", 1);
|
||||||
var hour = props.globals.getNode("sim/time/utc/hour", 1);
|
var hour = props.globals.getNode("sim/time/utc/hour", 1);
|
||||||
var minute = props.globals.getNode("sim/time/utc/minute", 1);
|
var minute = props.globals.getNode("sim/time/utc/minute", 1);
|
||||||
var apu_flap = props.globals.getNode("systems/apu/flap", 1);
|
var apu_flap = props.globals.getNode("controls/apu/inlet-flap/position-norm", 1);
|
||||||
var apu_rpm = props.globals.getNode("systems/apu/rpm", 1);
|
var apu_rpm = props.globals.getNode("engines/engine[2]/n1", 1);
|
||||||
var apu_egt = props.globals.getNode("systems/apu/egt", 1);
|
var apu_egt = props.globals.getNode("systems/apu/egt-degC", 1);
|
||||||
var door_left = props.globals.getNode("ECAM/Lower/door-left", 1);
|
var door_left = props.globals.getNode("ECAM/Lower/door-left", 1);
|
||||||
var door_right = props.globals.getNode("ECAM/Lower/door-right", 1);
|
var door_right = props.globals.getNode("ECAM/Lower/door-right", 1);
|
||||||
var door_nose_left = props.globals.getNode("ECAM/Lower/door-nose-left", 1);
|
var door_nose_left = props.globals.getNode("ECAM/Lower/door-nose-left", 1);
|
||||||
|
@ -77,7 +77,7 @@ var final_deg = props.globals.getNode("fdm/jsbsim/hydraulics/rudder/final-deg",
|
||||||
var temperature_degc = props.globals.getNode("environment/temperature-degc", 1);
|
var temperature_degc = props.globals.getNode("environment/temperature-degc", 1);
|
||||||
var gw = props.globals.getNode("FMGC/internal/gw", 1);
|
var gw = props.globals.getNode("FMGC/internal/gw", 1);
|
||||||
var tank3_content_lbs = props.globals.getNode("fdm/jsbsim/propulsion/tank[2]/contents-lbs", 1);
|
var tank3_content_lbs = props.globals.getNode("fdm/jsbsim/propulsion/tank[2]/contents-lbs", 1);
|
||||||
var apu_master = props.globals.getNode("controls/APU/master", 1);
|
var apu_master = props.globals.getNode("controls/apu/master", 1);
|
||||||
var ir2_knob = props.globals.getNode("controls/adirs/ir[1]/knob", 1);
|
var ir2_knob = props.globals.getNode("controls/adirs/ir[1]/knob", 1);
|
||||||
var switch_bleedapu = props.globals.getNode("controls/pneumatic/switches/bleedapu", 1);
|
var switch_bleedapu = props.globals.getNode("controls/pneumatic/switches/bleedapu", 1);
|
||||||
var pneumatic_xbleed_state = props.globals.getNode("systems/pneumatic/xbleed-state", 1);
|
var pneumatic_xbleed_state = props.globals.getNode("systems/pneumatic/xbleed-state", 1);
|
||||||
|
|
|
@ -344,7 +344,7 @@
|
||||||
<repeatable type="bool">false</repeatable>
|
<repeatable type="bool">false</repeatable>
|
||||||
<binding>
|
<binding>
|
||||||
<command>property-toggle</command>
|
<command>property-toggle</command>
|
||||||
<property>controls/APU/fire-switch</property>
|
<property>controls/apu/fire-switch</property>
|
||||||
</binding>
|
</binding>
|
||||||
<binding>
|
<binding>
|
||||||
<command>nasal</command>
|
<command>nasal</command>
|
||||||
|
@ -360,7 +360,7 @@
|
||||||
<red>0.9</red>
|
<red>0.9</red>
|
||||||
<green>0.7</green>
|
<green>0.7</green>
|
||||||
<blue>0.7</blue>
|
<blue>0.7</blue>
|
||||||
<factor-prop>controls/APU/fire-switch</factor-prop>
|
<factor-prop>controls/apu/fire-switch</factor-prop>
|
||||||
</emission>
|
</emission>
|
||||||
</animation>
|
</animation>
|
||||||
|
|
||||||
|
@ -1515,7 +1515,7 @@
|
||||||
<repeatable type="bool">false</repeatable>
|
<repeatable type="bool">false</repeatable>
|
||||||
<binding>
|
<binding>
|
||||||
<command>property-toggle</command>
|
<command>property-toggle</command>
|
||||||
<property>controls/APU/master-switch</property>
|
<property>controls/apu/master-switch</property>
|
||||||
</binding>
|
</binding>
|
||||||
<binding>
|
<binding>
|
||||||
<command>nasal</command>
|
<command>nasal</command>
|
||||||
|
@ -1541,7 +1541,7 @@
|
||||||
<name>APU master switch on</name>
|
<name>APU master switch on</name>
|
||||||
<type>textranslate</type>
|
<type>textranslate</type>
|
||||||
<object-name>APUMasterBtn2</object-name>
|
<object-name>APUMasterBtn2</object-name>
|
||||||
<property>controls/APU/master-switch</property>
|
<property>controls/apu/master-switch</property>
|
||||||
<factor>0.5</factor>
|
<factor>0.5</factor>
|
||||||
<axis>
|
<axis>
|
||||||
<x>1</x>
|
<x>1</x>
|
||||||
|
@ -1559,7 +1559,7 @@
|
||||||
<repeatable type="bool">false</repeatable>
|
<repeatable type="bool">false</repeatable>
|
||||||
<binding>
|
<binding>
|
||||||
<command>property-toggle</command>
|
<command>property-toggle</command>
|
||||||
<property>controls/APU/starter</property>
|
<property>controls/apu/starter</property>
|
||||||
</binding>
|
</binding>
|
||||||
<binding>
|
<binding>
|
||||||
<command>nasal</command>
|
<command>nasal</command>
|
||||||
|
@ -1571,7 +1571,7 @@
|
||||||
<name>APU starter on</name>
|
<name>APU starter on</name>
|
||||||
<type>textranslate</type>
|
<type>textranslate</type>
|
||||||
<object-name>APUStartBtn2</object-name>
|
<object-name>APUStartBtn2</object-name>
|
||||||
<property>controls/APU/starter</property>
|
<property>controls/apu/starter</property>
|
||||||
<factor>0.5</factor>
|
<factor>0.5</factor>
|
||||||
<axis>
|
<axis>
|
||||||
<x>1</x>
|
<x>1</x>
|
||||||
|
|
|
@ -23,16 +23,8 @@
|
||||||
<object-name>ADR2Btn2O</object-name>
|
<object-name>ADR2Btn2O</object-name>
|
||||||
<object-name>ADR3Btn1F</object-name>
|
<object-name>ADR3Btn1F</object-name>
|
||||||
<object-name>ADR3Btn2O</object-name>
|
<object-name>ADR3Btn2O</object-name>
|
||||||
<object-name>APUBleedBtn1F</object-name>
|
|
||||||
<object-name>APUBleedBtn2O</object-name>
|
|
||||||
<object-name>APUFireAgtBtn1S</object-name>
|
<object-name>APUFireAgtBtn1S</object-name>
|
||||||
<object-name>APUFireAgtBtn2D</object-name>
|
<object-name>APUFireAgtBtn2D</object-name>
|
||||||
<object-name>APUGenBtn1F</object-name>
|
|
||||||
<object-name>APUGenBtn2O</object-name>
|
|
||||||
<object-name>APUMasterBtn1F</object-name>
|
|
||||||
<object-name>APUMasterBtn2O</object-name>
|
|
||||||
<object-name>APUStartBtn1A</object-name>
|
|
||||||
<object-name>APUStartBtn2O</object-name>
|
|
||||||
<object-name>BatteryBtn11F</object-name>
|
<object-name>BatteryBtn11F</object-name>
|
||||||
<object-name>BatteryBtn21F</object-name>
|
<object-name>BatteryBtn21F</object-name>
|
||||||
<object-name>BusTieBtn2O</object-name>
|
<object-name>BusTieBtn2O</object-name>
|
||||||
|
@ -43,10 +35,6 @@
|
||||||
<object-name>ExtPwrBtn2O</object-name>
|
<object-name>ExtPwrBtn2O</object-name>
|
||||||
<object-name>FAC1Btn1F</object-name>
|
<object-name>FAC1Btn1F</object-name>
|
||||||
<object-name>FAC1Btn2O</object-name>
|
<object-name>FAC1Btn2O</object-name>
|
||||||
<object-name>Gen1Btn1F</object-name>
|
|
||||||
<object-name>Gen1Btn2O</object-name>
|
|
||||||
<object-name>Gen2Btn1F</object-name>
|
|
||||||
<object-name>Gen2Btn2O</object-name>
|
|
||||||
<object-name>IR1Btn1F</object-name>
|
<object-name>IR1Btn1F</object-name>
|
||||||
<object-name>IR1Btn2A</object-name>
|
<object-name>IR1Btn2A</object-name>
|
||||||
<object-name>IR2Btn1F</object-name>
|
<object-name>IR2Btn1F</object-name>
|
||||||
|
@ -73,6 +61,34 @@
|
||||||
</condition>
|
</condition>
|
||||||
</animation>
|
</animation>
|
||||||
|
|
||||||
|
<animation>
|
||||||
|
<type>select</type>
|
||||||
|
<object-name>APUBleedBtn1F</object-name>
|
||||||
|
<object-name>APUBleedBtn2O</object-name>
|
||||||
|
<object-name>APUGenBtn1F</object-name>
|
||||||
|
<object-name>APUGenBtn2O</object-name>
|
||||||
|
<object-name>APUMasterBtn1F</object-name>
|
||||||
|
<object-name>APUMasterBtn2O</object-name>
|
||||||
|
<object-name>APUStartBtn1A</object-name>
|
||||||
|
<object-name>APUStartBtn2O</object-name>
|
||||||
|
<object-name>Gen1Btn1F</object-name>
|
||||||
|
<object-name>Gen1Btn2O</object-name>
|
||||||
|
<object-name>Gen2Btn1F</object-name>
|
||||||
|
<object-name>Gen2Btn2O</object-name>
|
||||||
|
<condition>
|
||||||
|
<or>
|
||||||
|
<greater-than-equals>
|
||||||
|
<property>systems/electrical/bus/ac-si-bus</property>
|
||||||
|
<value>5</value>
|
||||||
|
</greater-than-equals>
|
||||||
|
<greater-than-equals>
|
||||||
|
<property>systems/electrical/bus/ac-ess</property>
|
||||||
|
<value>5</value>
|
||||||
|
</greater-than-equals>
|
||||||
|
</or>
|
||||||
|
</condition>
|
||||||
|
</animation>
|
||||||
|
|
||||||
<animation>
|
<animation>
|
||||||
<type>select</type>
|
<type>select</type>
|
||||||
<object-name>AftCargoIsoBtn1F</object-name>
|
<object-name>AftCargoIsoBtn1F</object-name>
|
||||||
|
@ -3251,7 +3267,7 @@
|
||||||
<greater-than-equals>
|
<greater-than-equals>
|
||||||
<property>systems/electrical/bus/dc-bat</property>
|
<property>systems/electrical/bus/dc-bat</property>
|
||||||
<value>25</value>
|
<value>25</value>
|
||||||
</greater-than-equals> <!-- control is on DC BAT bus - so if you enter EMER ELEC with it turned off, too bad -->
|
</greater-than-equals> <!-- control is on DC BAT bus 301PP via 11 PB - so if you enter EMER ELEC with it turned off, too bad -->
|
||||||
</condition>
|
</condition>
|
||||||
<command>property-toggle</command>
|
<command>property-toggle</command>
|
||||||
<property>controls/electrical/switches/apu</property>
|
<property>controls/electrical/switches/apu</property>
|
||||||
|
@ -5577,7 +5593,7 @@
|
||||||
</or>
|
</or>
|
||||||
</condition>
|
</condition>
|
||||||
<command>property-toggle</command>
|
<command>property-toggle</command>
|
||||||
<property>controls/APU/master</property>
|
<property>controls/apu/master</property>
|
||||||
</binding>
|
</binding>
|
||||||
<binding>
|
<binding>
|
||||||
<command>nasal</command>
|
<command>nasal</command>
|
||||||
|
@ -5606,7 +5622,7 @@
|
||||||
<condition>
|
<condition>
|
||||||
<or>
|
<or>
|
||||||
<equals>
|
<equals>
|
||||||
<property>controls/APU/master</property>
|
<property>controls/apu/master</property>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</equals>
|
</equals>
|
||||||
<equals>
|
<equals>
|
||||||
|
@ -5634,16 +5650,12 @@
|
||||||
<property>systems/electrical/bus/dc-bat</property>
|
<property>systems/electrical/bus/dc-bat</property>
|
||||||
<value>25</value>
|
<value>25</value>
|
||||||
</greater-than-equals>
|
</greater-than-equals>
|
||||||
<greater-than-equals>
|
|
||||||
<property>systems/electrical/bus/dc-ess</property>
|
|
||||||
<value>25</value>
|
|
||||||
</greater-than-equals>
|
|
||||||
</or>
|
</or>
|
||||||
</condition>
|
</condition>
|
||||||
<command>nasal</command>
|
<command>nasal</command>
|
||||||
<script>
|
<script>
|
||||||
if (getprop("controls/APU/master") == 1 and getprop("controls/APU/start") != 1) {
|
if (getprop("controls/apu/master") == 1) {
|
||||||
setprop("controls/APU/start", 1);
|
systems.APUController.APU.startCommand();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</binding>
|
</binding>
|
||||||
|
@ -5659,10 +5671,10 @@
|
||||||
<object-name>APUStartBtn1A</object-name>
|
<object-name>APUStartBtn1A</object-name>
|
||||||
<condition>
|
<condition>
|
||||||
<or>
|
<or>
|
||||||
<greater-than>
|
<equals>
|
||||||
<property>systems/apu/rpm</property>
|
<property>systems/apu/available</property>
|
||||||
<value>94.9</value>
|
<value>1</value>
|
||||||
</greater-than>
|
</equals>
|
||||||
<equals>
|
<equals>
|
||||||
<property>controls/switches/annun-test</property>
|
<property>controls/switches/annun-test</property>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
|
@ -5676,16 +5688,10 @@
|
||||||
<object-name>APUStartBtn2O</object-name>
|
<object-name>APUStartBtn2O</object-name>
|
||||||
<condition>
|
<condition>
|
||||||
<or>
|
<or>
|
||||||
<and>
|
|
||||||
<equals>
|
<equals>
|
||||||
<property>controls/APU/start</property>
|
<property>systems/apu/start</property>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</equals>
|
</equals>
|
||||||
<less-than-equals>
|
|
||||||
<property>systems/apu/rpm</property>
|
|
||||||
<value>94.9</value>
|
|
||||||
</less-than-equals>
|
|
||||||
</and>
|
|
||||||
<equals>
|
<equals>
|
||||||
<property>controls/switches/annun-test</property>
|
<property>controls/switches/annun-test</property>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
|
@ -6740,13 +6746,13 @@
|
||||||
<binding>
|
<binding>
|
||||||
<command>nasal</command>
|
<command>nasal</command>
|
||||||
<script>
|
<script>
|
||||||
if (getprop("controls/APU/fire-btn") == 1) {
|
if (getprop("controls/apu/fire-btn") == 1) {
|
||||||
setprop("controls/APU/fire-btn", 0);
|
setprop("controls/apu/fire-btn", 0);
|
||||||
setprop("controls/APU/fire-btn-cover", 0);
|
setprop("controls/apu/fire-btn-cover", 0);
|
||||||
} else if (getprop("controls/APU/fire-btn-cover") == 1) {
|
} else if (getprop("controls/apu/fire-btn-cover") == 1) {
|
||||||
setprop("controls/APU/fire-btn", 1);
|
setprop("controls/apu/fire-btn", 1);
|
||||||
} else {
|
} else {
|
||||||
setprop("controls/APU/fire-btn-cover", 1);
|
setprop("controls/apu/fire-btn-cover", 1);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</binding>
|
</binding>
|
||||||
|
@ -6763,13 +6769,13 @@
|
||||||
<binding>
|
<binding>
|
||||||
<command>nasal</command>
|
<command>nasal</command>
|
||||||
<script>
|
<script>
|
||||||
if (getprop("controls/APU/fire-btn") == 1) {
|
if (getprop("controls/apu/fire-btn") == 1) {
|
||||||
setprop("controls/APU/fire-btn", 0);
|
setprop("controls/apu/fire-btn", 0);
|
||||||
setprop("controls/APU/fire-btn-cover", 0);
|
setprop("controls/apu/fire-btn-cover", 0);
|
||||||
} else if (getprop("controls/APU/fire-btn-cover") == 1) {
|
} else if (getprop("controls/apu/fire-btn-cover") == 1) {
|
||||||
setprop("controls/APU/fire-btn-cover", 0);
|
setprop("controls/apu/fire-btn-cover", 0);
|
||||||
} else {
|
} else {
|
||||||
setprop("controls/APU/fire-btn-cover", 1);
|
setprop("controls/apu/fire-btn-cover", 1);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</binding>
|
</binding>
|
||||||
|
@ -6779,7 +6785,7 @@
|
||||||
<animation>
|
<animation>
|
||||||
<type>rotate</type>
|
<type>rotate</type>
|
||||||
<object-name>APUFireCover</object-name>
|
<object-name>APUFireCover</object-name>
|
||||||
<property>controls/APU/fire-btn-cover</property>
|
<property>controls/apu/fire-btn-cover</property>
|
||||||
<factor>-110</factor>
|
<factor>-110</factor>
|
||||||
<axis>
|
<axis>
|
||||||
<x1-m>-0.00583</x1-m>
|
<x1-m>-0.00583</x1-m>
|
||||||
|
@ -6794,7 +6800,7 @@
|
||||||
<animation>
|
<animation>
|
||||||
<type>translate</type>
|
<type>translate</type>
|
||||||
<object-name>APUFireBtn</object-name>
|
<object-name>APUFireBtn</object-name>
|
||||||
<property>controls/APU/fire-btn</property>
|
<property>controls/apu/fire-btn</property>
|
||||||
<factor>0.025</factor>
|
<factor>0.025</factor>
|
||||||
<axis>
|
<axis>
|
||||||
<x>1</x>
|
<x>1</x>
|
||||||
|
@ -6829,7 +6835,7 @@
|
||||||
<repeatable>false</repeatable>
|
<repeatable>false</repeatable>
|
||||||
<binding>
|
<binding>
|
||||||
<command>property-assign</command>
|
<command>property-assign</command>
|
||||||
<property>controls/APU/agent-btn</property>
|
<property>controls/apu/agent-btn</property>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
<condition>
|
<condition>
|
||||||
<or>
|
<or>
|
||||||
|
@ -6857,7 +6863,7 @@
|
||||||
<condition>
|
<condition>
|
||||||
<or>
|
<or>
|
||||||
<equals>
|
<equals>
|
||||||
<property>controls/APU/fire-btn</property>
|
<property>controls/apu/fire-btn</property>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</equals>
|
</equals>
|
||||||
<equals>
|
<equals>
|
||||||
|
|
|
@ -16,7 +16,7 @@ var state2Node = props.globals.getNode("engines/engine[1]/state", 1);
|
||||||
var wowNode = props.globals.getNode("fdm/jsbsim/position/wow", 1);
|
var wowNode = props.globals.getNode("fdm/jsbsim/position/wow", 1);
|
||||||
var apu_rpm = props.globals.getNode("systems/apu/rpm", 1);
|
var apu_rpm = props.globals.getNode("systems/apu/rpm", 1);
|
||||||
var wing_pb = props.globals.getNode("controls/switches/wing", 1);
|
var wing_pb = props.globals.getNode("controls/switches/wing", 1);
|
||||||
var apumaster = props.globals.getNode("controls/APU/master", 1);
|
var apumaster = props.globals.getNode("controls/apu/master", 1);
|
||||||
var apu_bleedSw = props.globals.getNode("controls/pneumatic/switches/bleedapu", 1);
|
var apu_bleedSw = props.globals.getNode("controls/pneumatic/switches/bleedapu", 1);
|
||||||
var gear = props.globals.getNode("gear/gear-pos-norm", 1);
|
var gear = props.globals.getNode("gear/gear-pos-norm", 1);
|
||||||
var cutoff1 = props.globals.getNode("controls/engines/engine[0]/cutoff-switch", 1);
|
var cutoff1 = props.globals.getNode("controls/engines/engine[0]/cutoff-switch", 1);
|
||||||
|
@ -424,7 +424,7 @@ var messages_priority_3 = func {
|
||||||
ECAM_controller.warningReset(eng1FireGnevacSw);
|
ECAM_controller.warningReset(eng1FireGnevacSw);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eng1FireGnevacApu.clearFlag == 0 and getprop("controls/APU/master") and getprop("systems/apu/rpm") > 99) {
|
if (eng1FireGnevacApu.clearFlag == 0 and getprop("controls/apu/master") and getprop("systems/apu/rpm") > 99) {
|
||||||
eng1FireGnevacApu.active = 1;
|
eng1FireGnevacApu.active = 1;
|
||||||
} else {
|
} else {
|
||||||
ECAM_controller.warningReset(eng1FireGnevacApu);
|
ECAM_controller.warningReset(eng1FireGnevacApu);
|
||||||
|
@ -607,7 +607,7 @@ var messages_priority_3 = func {
|
||||||
ECAM_controller.warningReset(eng2FireGnevacSw);
|
ECAM_controller.warningReset(eng2FireGnevacSw);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eng2FireGnevacApu.clearFlag == 0 and getprop("controls/APU/master") and getprop("systems/apu/rpm") > 99) {
|
if (eng2FireGnevacApu.clearFlag == 0 and getprop("controls/apu/master") and getprop("systems/apu/rpm") > 99) {
|
||||||
eng2FireGnevacApu.active = 1;
|
eng2FireGnevacApu.active = 1;
|
||||||
} else {
|
} else {
|
||||||
ECAM_controller.warningReset(eng2FireGnevacApu);
|
ECAM_controller.warningReset(eng2FireGnevacApu);
|
||||||
|
@ -660,7 +660,7 @@ var messages_priority_3 = func {
|
||||||
|
|
||||||
# APU Fire
|
# APU Fire
|
||||||
if (apuFire.active == 1) {
|
if (apuFire.active == 1) {
|
||||||
if (apuFirePB.clearFlag == 0 and !getprop("controls/APU/fire-btn")) {
|
if (apuFirePB.clearFlag == 0 and !getprop("controls/apu/fire-btn")) {
|
||||||
apuFirePB.active = 1;
|
apuFirePB.active = 1;
|
||||||
} else {
|
} else {
|
||||||
ECAM_controller.warningReset(apuFirePB);
|
ECAM_controller.warningReset(apuFirePB);
|
||||||
|
@ -670,19 +670,19 @@ var messages_priority_3 = func {
|
||||||
apuFireAgentTimer.msg = " -AGENT AFT " ~ getprop("systems/fire/apu/agent-timer") ~ " S...DISCH";
|
apuFireAgentTimer.msg = " -AGENT AFT " ~ getprop("systems/fire/apu/agent-timer") ~ " S...DISCH";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (apuFireAgent.clearFlag == 0 and getprop("controls/APU/fire-btn") and !getprop("systems/fire/apu/disch") and getprop("systems/fire/apu/agent-timer") != 0) {
|
if (apuFireAgent.clearFlag == 0 and getprop("controls/apu/fire-btn") and !getprop("systems/fire/apu/disch") and getprop("systems/fire/apu/agent-timer") != 0) {
|
||||||
apuFireAgentTimer.active = 1;
|
apuFireAgentTimer.active = 1;
|
||||||
} else {
|
} else {
|
||||||
ECAM_controller.warningReset(apuFireAgentTimer);
|
ECAM_controller.warningReset(apuFireAgentTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (apuFireAgent.clearFlag == 0 and getprop("controls/APU/fire-btn") and !getprop("systems/fire/apu/disch") and getprop("systems/fire/apu/agent-timer") == 0) {
|
if (apuFireAgent.clearFlag == 0 and getprop("controls/apu/fire-btn") and !getprop("systems/fire/apu/disch") and getprop("systems/fire/apu/agent-timer") == 0) {
|
||||||
apuFireAgent.active = 1;
|
apuFireAgent.active = 1;
|
||||||
} else {
|
} else {
|
||||||
ECAM_controller.warningReset(apuFireAgent);
|
ECAM_controller.warningReset(apuFireAgent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (apuFireMaster.clearFlag == 0 and getprop("controls/APU/master")) {
|
if (apuFireMaster.clearFlag == 0 and getprop("controls/apu/master")) {
|
||||||
apuFireMaster.active = 1;
|
apuFireMaster.active = 1;
|
||||||
} else {
|
} else {
|
||||||
ECAM_controller.warningReset(apuFireMaster);
|
ECAM_controller.warningReset(apuFireMaster);
|
||||||
|
@ -1204,7 +1204,7 @@ var messages_priority_2 = func {
|
||||||
apuEmerShutdown.isMainMsg = 1;
|
apuEmerShutdown.isMainMsg = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (apuEmerShutdownMast.clearFlag == 0 and getprop("controls/APU/master") and apuEmerShutdown.active == 1) {
|
if (apuEmerShutdownMast.clearFlag == 0 and getprop("controls/apu/master") and apuEmerShutdown.active == 1) {
|
||||||
apuEmerShutdownMast.active = 1;
|
apuEmerShutdownMast.active = 1;
|
||||||
} else {
|
} else {
|
||||||
ECAM_controller.warningReset(apuEmerShutdownMast);
|
ECAM_controller.warningReset(apuEmerShutdownMast);
|
||||||
|
|
|
@ -164,8 +164,8 @@ var CVR_test = func {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setlistener("/controls/APU/master", func() {
|
setlistener("/controls/apu/master", func() {
|
||||||
if (!getprop("controls/APU/master") and systems.apuEmerShutdown.getBoolValue()) {
|
if (!getprop("controls/apu/master") and systems.apuEmerShutdown.getBoolValue()) {
|
||||||
systems.apuEmerShutdown.setBoolValue(0);
|
systems.apuEmerShutdown.setBoolValue(0);
|
||||||
}
|
}
|
||||||
}, 0, 0);
|
}, 0, 0);
|
|
@ -203,6 +203,7 @@ var systemsInit = func {
|
||||||
systems.ADIRS.init();
|
systems.ADIRS.init();
|
||||||
systems.ADIRSnew.init();
|
systems.ADIRSnew.init();
|
||||||
systems.eng_init();
|
systems.eng_init();
|
||||||
|
systems.APUController.init();
|
||||||
systems.fire_init();
|
systems.fire_init();
|
||||||
systems.autobrake_init();
|
systems.autobrake_init();
|
||||||
fmgc.flightPlanController.reset();
|
fmgc.flightPlanController.reset();
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
# Usage Example: pts.Class.SubClass.node.getValue()
|
# Usage Example: pts.Class.SubClass.node.getValue()
|
||||||
|
|
||||||
var APU = {
|
var APU = {
|
||||||
masterSw: props.globals.getNode("controls/APU/master"),
|
masterSw: props.globals.getNode("controls/apu/master"),
|
||||||
rpm: props.globals.getNode("systems/apu/rpm"),
|
rpm: props.globals.getNode("engines/engine[2]/n1"),
|
||||||
};
|
};
|
||||||
|
|
||||||
var Consumables = {
|
var Consumables = {
|
||||||
|
|
|
@ -3,51 +3,217 @@
|
||||||
|
|
||||||
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
|
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
|
||||||
|
|
||||||
|
var APUNodes = {
|
||||||
|
Controls: {
|
||||||
|
master: props.globals.getNode("controls/apu/master"),
|
||||||
|
bleed: props.globals.getNode("controls/pneumatic/switches/bleedapu"),
|
||||||
|
},
|
||||||
|
Oil: {
|
||||||
|
level: props.globals.getNode("systems/apu/oil/level-l"),
|
||||||
|
},
|
||||||
|
masterElecThreeMin: props.globals.getNode("systems/apu/dc-bat-three-minutes"),
|
||||||
|
};
|
||||||
|
|
||||||
var APU = {
|
var APU = {
|
||||||
state: 0, # power up, watch, starting, run, cooldown, shutdown
|
state: 0, # off, power up, watch, starting preparation, starting, run, cooldown, shutdown
|
||||||
nRpm: 0,
|
fuelValve: aircraft.door.new("controls/apu/fuel-valve", 1),
|
||||||
fuelValve: aircraft.door.new("/controls/apu/fuel-valve", 1),
|
inletFlap: aircraft.door.new("controls/apu/inlet-flap", 12),
|
||||||
inletFlap: aircraft.door.new("/controls/apu/inlet-flap", 12),
|
fuelValvePos: props.globals.getNode("controls/apu/fuel-valve/position-norm"),
|
||||||
|
inletFlapPos: props.globals.getNode("controls/apu/inlet-flap/position-norm"),
|
||||||
|
oilLevel: props.globals.getNode("systems/apu/oil/level-l"),
|
||||||
listenSignals: 0,
|
listenSignals: 0,
|
||||||
start: 0,
|
listenStopSignal: 0,
|
||||||
cancelCheckFlap: 0,
|
bleedTime: 0,
|
||||||
new: func() {
|
cooldownEndTime: 0,
|
||||||
var a = { parents:[APU] };
|
warnings: {
|
||||||
return a;
|
lowOilLevel: 0,
|
||||||
|
},
|
||||||
|
GenericControls: {
|
||||||
|
starter: props.globals.getNode("controls/engines/engine[2]/starter"),
|
||||||
|
cutoff: props.globals.getNode("controls/engines/engine[2]/cutoff"),
|
||||||
|
throttle: props.globals.getNode("controls/engines/engine[2]/throttle"),
|
||||||
|
},
|
||||||
|
signals: {
|
||||||
|
startInProgress: props.globals.getNode("systems/apu/start"),
|
||||||
|
oilTestComplete: 0,
|
||||||
|
available: props.globals.getNode("systems/apu/available"),
|
||||||
|
bleedWasUsed: 0,
|
||||||
|
fault: 0,
|
||||||
|
autoshutdown: 0,
|
||||||
},
|
},
|
||||||
setState: func(num) {
|
setState: func(num) {
|
||||||
me.state = num;
|
me.state = num;
|
||||||
},
|
},
|
||||||
|
resetStuff: func() {
|
||||||
|
me.setState(0);
|
||||||
|
me.warnings.lowOilLevel = 0;
|
||||||
|
me.listenSignals = 0;
|
||||||
|
me.listenStopSignal = 0;
|
||||||
|
me.bleedTime = 0;
|
||||||
|
me.cooldownEndTime = 0;
|
||||||
|
me.signals.oilTestComplete = 0;
|
||||||
|
me.signals.bleedWasUsed = 0;
|
||||||
|
me.signals.fault = 0;
|
||||||
|
me.signals.autoshutdown = 0;
|
||||||
|
},
|
||||||
|
new: func() {
|
||||||
|
var a = { parents:[APU] };
|
||||||
|
return a;
|
||||||
|
me.GenericControls.throttle.setValue(1);
|
||||||
|
},
|
||||||
|
# Tests
|
||||||
|
checkOil: func() {
|
||||||
|
if (me.oilLevel.getValue() < 3.69) {
|
||||||
|
me.warnings.lowOilLevel = 1;
|
||||||
|
} else {
|
||||||
|
me.warnings.lowOilLevel = 0;
|
||||||
|
}
|
||||||
|
me.signals.oilTestComplete = 1;
|
||||||
|
},
|
||||||
|
|
||||||
|
# Routines to do with state
|
||||||
powerOn: func() {
|
powerOn: func() {
|
||||||
# apu able to receive emergency stop or start signals
|
# apu able to receive emergency stop or start signals
|
||||||
|
me.setState(1);
|
||||||
me.fuelValve.open();
|
me.fuelValve.open();
|
||||||
me.inletFlap.open();
|
me.inletFlap.open();
|
||||||
|
me.checkOil();
|
||||||
me.listenSignals = 1;
|
me.listenSignals = 1;
|
||||||
settimer(me.setState(1), 3);
|
settimer(func() { me.setState(2)}, 3);
|
||||||
|
settimer(func() { me.checkOil }, 8);
|
||||||
},
|
},
|
||||||
getStartSignal: func() {
|
startCommand: func() {
|
||||||
if (me.listenSignals and me.state < 2 and me.nRpm < 7) {
|
if (me.listenSignals and (me.state == 1 or me.state == 2)) {
|
||||||
me.start = 1;
|
me.signals.startInProgress.setValue(1);
|
||||||
me.startCheckFlap();
|
me.setState(3);
|
||||||
} elsif (me.listenSignals) {
|
checkApuStartTimer.start();
|
||||||
settimer(me.getStartSignal(), 0);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
startCheckFlap: func() {
|
checkApuStart: func() {
|
||||||
if (me.inletFlap.getpos() != 1 and me.cancelCheckFlap == 0 and me.state == 1) {
|
if (pts.APU.rpm.getValue() < 7 and me.fuelValvePos.getValue() and me.inletFlapPos.getValue() == 1 and me.signals.oilTestComplete and !me.warnings.lowOilLevel) {
|
||||||
settimer(me.startCheckFlap(), 0);
|
me.setState(4);
|
||||||
} elsif (me.cancelCheckFlap) {
|
me.listenStopSignal = 1;
|
||||||
me.cancelCheckFlap = 0;
|
checkApuStartTimer.stop();
|
||||||
} else {
|
me.startSequence();
|
||||||
me.setState(2);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getStopSignal: func() {
|
startSequence: func() {
|
||||||
if (me.listenSignals) {
|
me.GenericControls.starter.setValue(1);
|
||||||
me.cancelCheckFlap = 1;
|
apuStartTimer.start();
|
||||||
|
},
|
||||||
|
waitStart: func() {
|
||||||
|
if (pts.APU.rpm.getValue() >= 4.9) {
|
||||||
|
me.GenericControls.cutoff.setValue(0);
|
||||||
|
apuStartTimer.stop();
|
||||||
|
apuStartTimer2.start();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
waitStart2: func() {
|
||||||
|
if (pts.APU.rpm.getValue() >= 99.9) {
|
||||||
|
me.GenericControls.starter.setValue(0);
|
||||||
|
me.signals.startInProgress.setValue(0);
|
||||||
|
me.signals.available.setValue(1);
|
||||||
|
me.setState(5);
|
||||||
|
apuStartTimer2.stop();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cooldown: func() {
|
||||||
|
if (APUNodes.Controls.master.getValue()) {
|
||||||
|
cooldownTimer.stop();
|
||||||
|
me.setState(5);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (pts.Sim.Time.elapsedSec.getValue() >= me.cooldownEndTime) {
|
||||||
|
cooldownTimer.stop();
|
||||||
|
me.stopAPU();
|
||||||
|
me.setState(7);
|
||||||
|
shutdownTimer.start();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
shutdown: func() {
|
||||||
|
if (!me.signals.autoshutdown and APUNodes.Controls.master.getValue()) {
|
||||||
|
me.powerOn();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
me.GenericControls.cutoff.setValue(1);
|
||||||
|
me.GenericControls.starter.setValue(0);
|
||||||
|
|
||||||
|
if (!me.signals.autoshutdown and pts.APU.rpm.getValue() < 95 and me.signals.available.getValue()) {
|
||||||
|
me.signals.available.setValue(0);
|
||||||
|
}
|
||||||
|
if (me.signals.autoshutdown and (me.signals.available.getValue() or !me.signals.fault)) {
|
||||||
|
me.signals.available.setValue(0);
|
||||||
|
me.signals.fault = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pts.APU.rpm.getValue() < 7) {
|
||||||
me.inletFlap.close();
|
me.inletFlap.close();
|
||||||
# wait for flap close --> power down relay output
|
me.fuelValve.close();
|
||||||
|
if (!APUNodes.Controls.master.getValue()) {
|
||||||
|
me.setState(0);
|
||||||
|
me.resetStuff();
|
||||||
|
shutdownTimer.stop();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
# Signal generators / receivers
|
||||||
|
stop: func() {
|
||||||
|
if (me.listenStopSignal and me.state == 4) {
|
||||||
|
me.signals.startInProgress.setValue(0);
|
||||||
|
me.stopAPU();
|
||||||
|
me.setState(7);
|
||||||
|
shutdownTimer.start();
|
||||||
|
} else {
|
||||||
|
if (me.signals.bleedWasUsed) {
|
||||||
|
if (120 - (pts.Sim.Time.elapsedSec.getValue() - me.bleedTime) > 0) {
|
||||||
|
me.cooldownEndTime = me.bleedTime + 120;
|
||||||
|
me.setState(6);
|
||||||
|
cooldownTimer.start();
|
||||||
|
} else {
|
||||||
|
me.stopAPU();
|
||||||
|
me.setState(7);
|
||||||
|
shutdownTimer.start();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
me.stopAPU();
|
||||||
|
me.setState(7);
|
||||||
|
shutdownTimer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
autoStop: func() {
|
||||||
|
if (me.state >= 4) {
|
||||||
|
checkApuStartTimer.stop();
|
||||||
|
apuStartTimer.stop();
|
||||||
|
apuStartTimer2.stop();
|
||||||
|
apuStartTimer3.stop();
|
||||||
|
cooldownTimer.stop();
|
||||||
|
me.stopAPU();
|
||||||
|
me.setState(7);
|
||||||
|
shutdownTimer.start();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emergencyStop: func() {
|
||||||
|
if (me.listenSignals and (me.state < 4)) {
|
||||||
|
checkApuStartTimer.stop();
|
||||||
|
me.inletFlap.close();
|
||||||
|
me.fuelValve.close();
|
||||||
|
me.signals.fault = 1;
|
||||||
|
me.setState(0);
|
||||||
|
} elsif (me.state >= 4) {
|
||||||
|
me.autoStop();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
# Functions
|
||||||
|
stopAPU: func() {
|
||||||
|
me.GenericControls.cutoff.setValue(1);
|
||||||
|
},
|
||||||
|
shutBleed: func() {
|
||||||
|
APUNodes.Controls.bleed.setValue(0);
|
||||||
|
me.bleedTime.setValue(pts.Sim.Time.elapsedSec.getValue());
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,9 +225,48 @@ var APUController = {
|
||||||
me.APU = APU.new();
|
me.APU = APU.new();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
loop: func() {
|
|
||||||
if (me.APU != nil) {
|
|
||||||
APU.update();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var _masterTime = 0;
|
||||||
|
setlistener("controls/apu/master", func() {
|
||||||
|
if (APUNodes.Controls.master.getValue() and APUController.APU.state == 0) {
|
||||||
|
APUNodes.masterElecThreeMin.setValue(1);
|
||||||
|
checkMasterThreeMinTimer.start();
|
||||||
|
_masterTime = pts.Sim.Time.elapsedSec.getValue();
|
||||||
|
APUController.APU.powerOn();
|
||||||
|
} elsif (!APUNodes.Controls.master.getValue()) {
|
||||||
|
APUController.APU.stop();
|
||||||
|
}
|
||||||
|
}, 0, 0);
|
||||||
|
|
||||||
|
setlistener("controls/pneumatic/switches/bleedapu", func() {
|
||||||
|
APUController.APU.signals.bleedWasUsed = 1;
|
||||||
|
}, 0, 0);
|
||||||
|
|
||||||
|
var checkMasterThreeMinTimer = maketimer(0.1, func() {
|
||||||
|
if (!APUNodes.Controls.master.getValue()) {
|
||||||
|
APUNodes.masterElecThreeMin.setValue(0);
|
||||||
|
checkMasterThreeMinTimer.stop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pts.Sim.Time.elapsedSec.getValue() >= _masterTime + 180) {
|
||||||
|
APUNodes.masterElecThreeMin.setValue(0);
|
||||||
|
checkMasterThreeMinTimer.stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var checkApuStartTimer = maketimer(0.1, func() {
|
||||||
|
APUController.APU.checkApuStart();
|
||||||
|
});
|
||||||
|
var apuStartTimer = maketimer(0.1, func() {
|
||||||
|
APUController.APU.waitStart();
|
||||||
|
});
|
||||||
|
var apuStartTimer2 = maketimer(0.1, func() {
|
||||||
|
APUController.APU.waitStart2();
|
||||||
|
});
|
||||||
|
var cooldownTimer = maketimer(0.1, func() {
|
||||||
|
APUController.APU.cooldown();
|
||||||
|
});
|
||||||
|
var shutdownTimer = maketimer(0.1, func() {
|
||||||
|
APUController.APU.shutdown();
|
||||||
|
});
|
|
@ -24,8 +24,8 @@ var eng_common_init = func {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Start APU
|
# Start APU
|
||||||
setlistener("/controls/APU/start", func {
|
setlistener("/controls/apu/start", func {
|
||||||
if (getprop("controls/APU/master") == 1 and getprop("controls/APU/start") == 1) {
|
if (getprop("controls/apu/master") == 1 and getprop("controls/apu/start") == 1) {
|
||||||
apuBleedChk.stop();
|
apuBleedChk.stop();
|
||||||
setprop("systems/apu/bleed-counting", 0);
|
setprop("systems/apu/bleed-counting", 0);
|
||||||
if (getprop("systems/acconfig/autoconfig-running") == 0) {
|
if (getprop("systems/acconfig/autoconfig-running") == 0) {
|
||||||
|
@ -35,7 +35,7 @@ setlistener("/controls/APU/start", func {
|
||||||
interpolate("/systems/apu/rpm", apu_max, 5);
|
interpolate("/systems/apu/rpm", apu_max, 5);
|
||||||
interpolate("/systems/apu/egt", apu_egt_min, 5);
|
interpolate("/systems/apu/egt", apu_egt_min, 5);
|
||||||
}
|
}
|
||||||
} else if (getprop("controls/APU/master") == 0) {
|
} else if (getprop("controls/apu/master") == 0) {
|
||||||
apu_egt_check.stop();
|
apu_egt_check.stop();
|
||||||
apu_stop();
|
apu_stop();
|
||||||
}
|
}
|
||||||
|
@ -57,13 +57,13 @@ var apu_egt2_check = maketimer(0.5, func {
|
||||||
});
|
});
|
||||||
|
|
||||||
# Stop APU
|
# Stop APU
|
||||||
setlistener("/controls/APU/master", func {
|
setlistener("/controls/apu/master", func {
|
||||||
if (getprop("controls/APU/master") == 0) {
|
if (getprop("controls/apu/master") == 0) {
|
||||||
setprop("controls/APU/start", 0);
|
setprop("controls/apu/start", 0);
|
||||||
apu_egt_check.stop();
|
apu_egt_check.stop();
|
||||||
apu_egt2_check.stop();
|
apu_egt2_check.stop();
|
||||||
apu_stop();
|
apu_stop();
|
||||||
} else if (getprop("controls/APU/master") == 1) {
|
} else if (getprop("controls/apu/master") == 1) {
|
||||||
apuBleedChk.stop();
|
apuBleedChk.stop();
|
||||||
setprop("systems/apu/bleed-counting", 0);
|
setprop("systems/apu/bleed-counting", 0);
|
||||||
setprop("systems/apu/bleed-used", 0);
|
setprop("systems/apu/bleed-used", 0);
|
||||||
|
|
|
@ -37,7 +37,7 @@ var wow = props.globals.getNode("fdm/jsbsim/position/wow", 1);
|
||||||
var dcbatNode = props.globals.getNode("systems/electrical/bus/dc-bat", 1);
|
var dcbatNode = props.globals.getNode("systems/electrical/bus/dc-bat", 1);
|
||||||
var dcessNode = props.globals.getNode("systems/electrical/bus/dc-ess", 1);
|
var dcessNode = props.globals.getNode("systems/electrical/bus/dc-ess", 1);
|
||||||
var apuBleedNode = props.globals.getNode("systems/apu/bleed-used", 1);
|
var apuBleedNode = props.globals.getNode("systems/apu/bleed-used", 1);
|
||||||
var apuMaster = props.globals.getNode("controls/APU/master", 1);
|
var apuMaster = props.globals.getNode("controls/apu/master", 1);
|
||||||
|
|
||||||
var fire_init = func {
|
var fire_init = func {
|
||||||
setprop("controls/OH/protectors/fwddisch", 0);
|
setprop("controls/OH/protectors/fwddisch", 0);
|
||||||
|
@ -645,8 +645,8 @@ eng2Agent2TimerMakeTimerFunc = func() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setlistener("/controls/APU/fire-btn", func() {
|
setlistener("/controls/apu/fire-btn", func() {
|
||||||
if (getprop("controls/APU/fire-btn") == 1) {
|
if (getprop("controls/apu/fire-btn") == 1) {
|
||||||
ecam.shutUpYou();
|
ecam.shutUpYou();
|
||||||
apuAgentTimerMakeTimer.stop();
|
apuAgentTimerMakeTimer.stop();
|
||||||
apuAgentTimer.setValue(10);
|
apuAgentTimer.setValue(10);
|
||||||
|
@ -790,7 +790,7 @@ createFireBottleListener("/controls/engines/engine[0]/agent1-btn", "/controls/en
|
||||||
createFireBottleListener("/controls/engines/engine[0]/agent2-btn", "/controls/engines/engine[0]/fire-btn", 1);
|
createFireBottleListener("/controls/engines/engine[0]/agent2-btn", "/controls/engines/engine[0]/fire-btn", 1);
|
||||||
createFireBottleListener("/controls/engines/engine[1]/agent1-btn", "/controls/engines/engine[1]/fire-btn", 2);
|
createFireBottleListener("/controls/engines/engine[1]/agent1-btn", "/controls/engines/engine[1]/fire-btn", 2);
|
||||||
createFireBottleListener("/controls/engines/engine[1]/agent2-btn", "/controls/engines/engine[1]/fire-btn", 3);
|
createFireBottleListener("/controls/engines/engine[1]/agent2-btn", "/controls/engines/engine[1]/fire-btn", 3);
|
||||||
createFireBottleListener("/controls/APU/agent-btn", "/controls/APU/fire-btn", 4);
|
createFireBottleListener("/controls/apu/agent-btn", "/controls/apu/fire-btn", 4);
|
||||||
createCargoFireBottleListener("/controls/fire/cargo/aftdisch", 0);
|
createCargoFireBottleListener("/controls/fire/cargo/aftdisch", 0);
|
||||||
createCargoFireBottleListener("/controls/fire/cargo/fwddisch", 1);
|
createCargoFireBottleListener("/controls/fire/cargo/fwddisch", 1);
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,7 @@ var PNEU = {
|
||||||
eng2_starter = getprop("systems/pneumatic/eng2-starter");
|
eng2_starter = getprop("systems/pneumatic/eng2-starter");
|
||||||
groundair = getprop("systems/pneumatic/groundair");
|
groundair = getprop("systems/pneumatic/groundair");
|
||||||
groundair_supp = getprop("controls/pneumatic/switches/groundair");
|
groundair_supp = getprop("controls/pneumatic/switches/groundair");
|
||||||
rpmapu = getprop("systems/apu/rpm");
|
rpmapu = getprop("engines/engine[2]/n1");
|
||||||
stateL = getprop("engines/engine[0]/state");
|
stateL = getprop("engines/engine[0]/state");
|
||||||
stateR = getprop("engines/engine[1]/state");
|
stateR = getprop("engines/engine[1]/state");
|
||||||
bleedapu_fail = getprop("systems/failures/bleed-apu");
|
bleedapu_fail = getprop("systems/failures/bleed-apu");
|
||||||
|
@ -196,7 +196,7 @@ var PNEU = {
|
||||||
# Air Sources/PSI
|
# Air Sources/PSI
|
||||||
if (rpmapu >= 94.9 and bleedapu_sw and !bleedapu_fail) {
|
if (rpmapu >= 94.9 and bleedapu_sw and !bleedapu_fail) {
|
||||||
setprop("systems/pneumatic/bleedapu", 34);
|
setprop("systems/pneumatic/bleedapu", 34);
|
||||||
if (getprop("controls/APU/master") == 1) {
|
if (getprop("controls/apu/master") == 1) {
|
||||||
setprop("systems/apu/bleed-used", 1);
|
setprop("systems/apu/bleed-used", 1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -10,12 +10,12 @@
|
||||||
<property>/sim/current-view/internal</property>
|
<property>/sim/current-view/internal</property>
|
||||||
</condition>
|
</condition>
|
||||||
<volume>
|
<volume>
|
||||||
<property>/systems/apu/rpm</property>
|
<property>/engines/engine[2]/n1</property>
|
||||||
<factor>0.005</factor>
|
<factor>0.005</factor>
|
||||||
<max>0.25</max>
|
<max>0.25</max>
|
||||||
</volume>
|
</volume>
|
||||||
<pitch>
|
<pitch>
|
||||||
<property>/systems/apu/rpm</property>
|
<property>/engines/engine[2]/n1</property>
|
||||||
<factor>0.05</factor>
|
<factor>0.05</factor>
|
||||||
<offset>-2</offset>
|
<offset>-2</offset>
|
||||||
</pitch>
|
</pitch>
|
||||||
|
@ -29,11 +29,11 @@
|
||||||
<not><property>/sim/current-view/internal</property></not>
|
<not><property>/sim/current-view/internal</property></not>
|
||||||
</condition>
|
</condition>
|
||||||
<volume>
|
<volume>
|
||||||
<property>/systems/apu/rpm</property>
|
<property>/engines/engine[2]/n1</property>
|
||||||
<factor>0.005</factor>
|
<factor>0.005</factor>
|
||||||
</volume>
|
</volume>
|
||||||
<pitch>
|
<pitch>
|
||||||
<property>/systems/apu/rpm</property>
|
<property>/engines/engine[2]/n1</property>
|
||||||
<factor>0.01</factor>
|
<factor>0.01</factor>
|
||||||
</pitch>
|
</pitch>
|
||||||
<reference-dist>60</reference-dist>
|
<reference-dist>60</reference-dist>
|
||||||
|
|
52
Systems/a320-apu.xml
Normal file
52
Systems/a320-apu.xml
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
<!-- Airbus A320 APU -->
|
||||||
|
|
||||||
|
<!-- Copyright (c) 2020 Jonathan Redpath -->
|
||||||
|
|
||||||
|
<system name="A320: APU">
|
||||||
|
|
||||||
|
<channel name="Inlet Flap">
|
||||||
|
<!-- 100% RPM = 49300 -->
|
||||||
|
<!-- bleed 1.8 kg / sec @ 42 psig -->
|
||||||
|
<!-- fuel 148 kg/hr -->
|
||||||
|
<!-- 0% 427°C (800°F)
|
||||||
|
10% 788°C (1450°F)
|
||||||
|
20% 899°C (1650°F)
|
||||||
|
30% 899°C (1650°F)
|
||||||
|
50% 853°C (1567°F)
|
||||||
|
80% 788°C (1450°F)
|
||||||
|
100% 670°C (1238°F) (start)
|
||||||
|
100% 722°C (1332°F) -->
|
||||||
|
<!-- oil psi min 35, normal 50 - 60 -->
|
||||||
|
<!-- oil temp 135 max, 185 @ generator -->
|
||||||
|
<!-- generator 24034 rpm, 10129 rpm fuel ctl, 32045 rpm starter, 51965 rpm cooling, 4137rpm oil pump -->
|
||||||
|
<!-- power 400kw, 132 elec, 252 pneumatic -->
|
||||||
|
|
||||||
|
<fcs_function name="/systems/apu/egt-degC">
|
||||||
|
<function>
|
||||||
|
<!-- SIC Dry motoring already accounted for: the table is zero for its RPM (~25%) -->
|
||||||
|
<table>
|
||||||
|
<independentVar lookup="row">/engines/engine[2]/n1</independentVar>
|
||||||
|
<tableData>
|
||||||
|
5.0 20.0
|
||||||
|
8.0 45.0
|
||||||
|
10.0 120.0
|
||||||
|
12.0 225.0
|
||||||
|
18.0 430.0
|
||||||
|
25.0 500.0
|
||||||
|
27.0 560.0
|
||||||
|
30.0 720.0
|
||||||
|
35.0 785.0
|
||||||
|
40.0 800.0
|
||||||
|
45.0 795.0
|
||||||
|
50.0 785.0
|
||||||
|
60.0 755.0
|
||||||
|
75.0 645.0
|
||||||
|
90.0 520.0
|
||||||
|
100.0 415.0
|
||||||
|
</tableData>
|
||||||
|
</table>
|
||||||
|
</function>
|
||||||
|
</fcs_function>
|
||||||
|
</channel>
|
||||||
|
|
||||||
|
</system>
|
|
@ -232,14 +232,14 @@
|
||||||
|
|
||||||
<!-- APU gen -->
|
<!-- APU gen -->
|
||||||
<pure_gain name="/systems/electrical/sources/apu/drive-rpm-input">
|
<pure_gain name="/systems/electrical/sources/apu/drive-rpm-input">
|
||||||
<input>/systems/apu/rpm</input>
|
<input>/engines/engine[2]/n1</input>
|
||||||
<gain>240</gain>
|
<gain>240.34</gain>
|
||||||
</pure_gain>
|
</pure_gain>
|
||||||
|
|
||||||
<switch name="/systems/electrical/sources/apu/working">
|
<switch name="/systems/electrical/sources/apu/working">
|
||||||
<default value="1"/>
|
<default value="1"/>
|
||||||
<test logic="OR" value="0">
|
<test logic="OR" value="0">
|
||||||
/controls/APU/fire-btn eq 1
|
/controls/apu/fire-btn eq 1
|
||||||
</test>
|
</test>
|
||||||
</switch>
|
</switch>
|
||||||
|
|
||||||
|
@ -525,7 +525,7 @@
|
||||||
<switch name="/systems/electrical/relay/apu-glc/contact-pos">
|
<switch name="/systems/electrical/relay/apu-glc/contact-pos">
|
||||||
<default value="0"/>
|
<default value="0"/>
|
||||||
<test logic="AND" value="1">
|
<test logic="AND" value="1">
|
||||||
/controls/APU/master eq 1
|
/controls/apu/master eq 1
|
||||||
/controls/electrical/switches/apu eq 1
|
/controls/electrical/switches/apu eq 1
|
||||||
/systems/electrical/sources/apu/output-volt ge 110
|
/systems/electrical/sources/apu/output-volt ge 110
|
||||||
/systems/electrical/sources/apu/output-volt lt 130
|
/systems/electrical/sources/apu/output-volt lt 130
|
||||||
|
@ -1205,7 +1205,8 @@
|
||||||
/systems/electrical/relay/dc-bus-tie-dc-2/contact-pos eq 1
|
/systems/electrical/relay/dc-bus-tie-dc-2/contact-pos eq 1
|
||||||
/systems/electrical/bus/dc-2-src ne 2
|
/systems/electrical/bus/dc-2-src ne 2
|
||||||
</test>
|
</test>
|
||||||
<test value="3"> <!-- BAT -->
|
<test logic="OR" value="3"> <!-- BAT -->
|
||||||
|
<test logic="AND">
|
||||||
/instrumentation/airspeed-indicator/indicated-speed-kt lt 50
|
/instrumentation/airspeed-indicator/indicated-speed-kt lt 50
|
||||||
<test logic="OR">
|
<test logic="OR">
|
||||||
/controls/electrical/switches/bat-1 eq 1
|
/controls/electrical/switches/bat-1 eq 1
|
||||||
|
@ -1213,6 +1214,14 @@
|
||||||
</test>
|
</test>
|
||||||
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
||||||
</test>
|
</test>
|
||||||
|
<test logic="AND">
|
||||||
|
<test logic="OR">
|
||||||
|
/controls/electrical/switches/bat-1 eq 1
|
||||||
|
/controls/electrical/switches/bat-2 eq 1
|
||||||
|
</test>
|
||||||
|
/systems/apu/dc-bat-three-minutes eq 1
|
||||||
|
</test>
|
||||||
|
</test>
|
||||||
</switch>
|
</switch>
|
||||||
|
|
||||||
<switch name="/systems/electrical/bus/dc-bat">
|
<switch name="/systems/electrical/bus/dc-bat">
|
||||||
|
@ -1228,20 +1237,36 @@
|
||||||
/systems/electrical/relay/dc-bus-tie-dc-2/contact-pos eq 1
|
/systems/electrical/relay/dc-bus-tie-dc-2/contact-pos eq 1
|
||||||
/systems/electrical/bus/dc-2-src ne 2
|
/systems/electrical/bus/dc-2-src ne 2
|
||||||
</test>
|
</test>
|
||||||
<test logic="AND" value="/systems/electrical/sources/bat-1/volt">
|
<test logic="OR" value="/systems/electrical/sources/bat-1/volt">
|
||||||
|
<test logic="AND">
|
||||||
/instrumentation/airspeed-indicator/indicated-speed-kt lt 50
|
/instrumentation/airspeed-indicator/indicated-speed-kt lt 50
|
||||||
/controls/electrical/switches/bat-1 eq 1
|
/controls/electrical/switches/bat-1 eq 1
|
||||||
/systems/electrical/bus/dc-bat-src eq 3
|
/systems/electrical/bus/dc-bat-src eq 3
|
||||||
/systems/electrical/sources/bat-1/volt ge 25
|
/systems/electrical/sources/bat-1/volt ge 25
|
||||||
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
||||||
</test>
|
</test>
|
||||||
<test logic="AND" value="/systems/electrical/sources/bat-2/volt">
|
<test logic="AND">
|
||||||
|
/systems/apu/dc-bat-three-minutes eq 1
|
||||||
|
/controls/electrical/switches/bat-1 eq 1
|
||||||
|
/systems/electrical/bus/dc-bat-src eq 3
|
||||||
|
/systems/electrical/sources/bat-1/volt ge 25
|
||||||
|
</test>
|
||||||
|
</test>
|
||||||
|
<test logic="OR" value="/systems/electrical/sources/bat-2/volt">
|
||||||
|
<test logic="AND">
|
||||||
/instrumentation/airspeed-indicator/indicated-speed-kt lt 50
|
/instrumentation/airspeed-indicator/indicated-speed-kt lt 50
|
||||||
/controls/electrical/switches/bat-2 eq 1
|
/controls/electrical/switches/bat-2 eq 1
|
||||||
/systems/electrical/bus/dc-bat-src eq 3
|
/systems/electrical/bus/dc-bat-src eq 3
|
||||||
/systems/electrical/sources/bat-2/volt ge 25
|
/systems/electrical/sources/bat-2/volt ge 25
|
||||||
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
||||||
</test>
|
</test>
|
||||||
|
<test logic="AND">
|
||||||
|
/systems/apu/dc-bat-three-minutes eq 1
|
||||||
|
/controls/electrical/switches/bat-2 eq 1
|
||||||
|
/systems/electrical/bus/dc-bat-src eq 3
|
||||||
|
/systems/electrical/sources/bat-2/volt ge 25
|
||||||
|
</test>
|
||||||
|
</test>
|
||||||
</switch>
|
</switch>
|
||||||
|
|
||||||
<!-- DC ESS Bus -->
|
<!-- DC ESS Bus -->
|
||||||
|
|
|
@ -312,8 +312,8 @@
|
||||||
<switch name="/systems/fuel/valves/apu-lp-valve-cmd">
|
<switch name="/systems/fuel/valves/apu-lp-valve-cmd">
|
||||||
<default value="0"/>
|
<default value="0"/>
|
||||||
<test logic="AND" value="1">
|
<test logic="AND" value="1">
|
||||||
/controls/APU/master eq 1
|
/controls/apu/master eq 1
|
||||||
/controls/APU/fire-btn eq 0
|
/controls/apu/fire-btn eq 0
|
||||||
</test>
|
</test>
|
||||||
</switch>
|
</switch>
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<input>
|
<input>
|
||||||
<expression>
|
<expression>
|
||||||
<table>
|
<table>
|
||||||
<property>/systems/apu/rpm</property>
|
<property>/engines/engine[2]/n1</property>
|
||||||
<entry><ind> 0</ind><dep>-127</dep></entry>
|
<entry><ind> 0</ind><dep>-127</dep></entry>
|
||||||
<entry><ind>100</ind><dep> 53</dep></entry>
|
<entry><ind>100</ind><dep> 53</dep></entry>
|
||||||
<entry><ind>110</ind><dep> 70</dep></entry>
|
<entry><ind>110</ind><dep> 70</dep></entry>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
<input>
|
<input>
|
||||||
<expression>
|
<expression>
|
||||||
<table>
|
<table>
|
||||||
<property>/systems/apu/egt</property>
|
<property>/systems/apu/egt-degC</property>
|
||||||
<entry><ind> 0</ind><dep>-115</dep></entry>
|
<entry><ind> 0</ind><dep>-115</dep></entry>
|
||||||
<entry><ind> 275</ind><dep>-115</dep></entry>
|
<entry><ind> 275</ind><dep>-115</dep></entry>
|
||||||
<entry><ind> 300</ind><dep>-108</dep></entry>
|
<entry><ind> 300</ind><dep>-108</dep></entry>
|
||||||
|
|
Loading…
Reference in a new issue