1
0
Fork 0

Experimental cockpit oxygen system

This commit is contained in:
legoboyvdlp R 2021-07-29 13:19:27 +01:00
parent 55c2e17d55
commit 80a299831f
10 changed files with 380 additions and 8 deletions

View file

@ -212,6 +212,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -211,6 +211,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -211,6 +211,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -1058,6 +1058,16 @@
<ratman type="bool">0</ratman>
</protectors>
</OH>
<oxygen>
<cockpit-mask-1-on type="bool">0</cockpit-mask-1-on>
<cockpit-mask-2-on type="bool">0</cockpit-mask-2-on>
<cockpit-mask-3-on type="bool">0</cockpit-mask-3-on>
<cockpit-mask-4-on type="bool">0</cockpit-mask-4-on>
<cockpit-mask-1-selector type="bool">0</cockpit-mask-1-selector>
<cockpit-mask-2-selector type="bool">0</cockpit-mask-2-selector>
<cockpit-mask-3-selector type="bool">0</cockpit-mask-3-selector>
<cockpit-mask-4-selector type="bool">0</cockpit-mask-4-selector>
</oxygen>
<pneumatics n="0">
<switches n="0">
<apu type="bool">0</apu>
@ -1580,6 +1590,7 @@
<operating-3 type="bool">0</operating-3>
</adr>
</navigation>
</systems>
<options n="0">

View file

@ -211,6 +211,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -211,6 +211,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -342,6 +342,42 @@
<value>1</value>
</binding>
</button>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>Oxygen</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<text>
<x>10</x>
<y>200</y>
<label>8888 litres</label><!-- placeholder for width -->
<format>%4.0f litres</format>
<property>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<live>true</live>
</text>
<button>
<legend>Replace Oxygen Bottle</legend>
<halign>center</halign>
<padding>5</padding>
<enable>
<property>/gear/gear[1]/wow</property>
</enable>
<binding>
<command>property-assign</command>
<property>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<value>2183</value>
</binding>
</button>
</group>
</PropertyList>

View file

@ -26,7 +26,6 @@ var canvas_lowerECAMPageDoor =
obj["Cabin3LeftSlide"].hide();
obj["Cabin3RightSlide"].hide();
obj["DOOROXY-REGUL-LO-PR"].hide();
obj["AvionicsLine1"].hide();
obj["AvionicsLine2"].hide();
obj["AvionicsLbl1"].hide();
@ -153,16 +152,23 @@ var canvas_lowerECAMPageDoor =
obj["Cargo1Line"].hide();
}
}),
props.UpdateManager.FromHashValue("oxyPB", nil, func(val) {
if (val) {
obj["DOOROXY-OxyIndicator"].setColor(0.8078,0.8039,0.8078);
obj["DOOROXY-PR"].setColor(0.0509,0.7529,0.2941);
obj["DOOROXY-PR"].setText("1300");
props.UpdateManager.FromHashList(["oxyPB","oxyBottlePress","oxyBottleRegulLoPr"], nil, func(val) {
if (val.oxyPB) {
if (val.oxyBottlePress < 300 or val.oxyBottleRegulLoPr) {
obj["DOOROXY-OxyIndicator"].setColor(0.7333,0.3803,0);
} else {
obj["DOOROXY-OxyIndicator"].setColor(0.8078,0.8039,0.8078);
}
} else {
obj["DOOROXY-OxyIndicator"].setColor(0.7333,0.3803,0);
obj["DOOROXY-PR"].setColor(0.7333,0.3803,0);
obj["DOOROXY-PR"].setText("0");
}
if (val.oxyBottlePress < 300) {
obj["DOOROXY-PR"].setColor(0.7333,0.3803,0);
} else {
obj["DOOROXY-PR"].setColor(0.0509,0.7529,0.2941);
}
obj["DOOROXY-PR"].setText(sprintf("%4.0f", math.round(val.oxyBottlePress, 10)));
}),
props.UpdateManager.FromHashValue("pressVS", nil, func(val) {
if (val > 9950) {
@ -186,6 +192,13 @@ var canvas_lowerECAMPageDoor =
obj["DOOR-VS-Container"].hide();
}
}),
props.UpdateManager.FromHashValue("oxyBottleRegulLoPr", nil, func(val) {
if (val) {
obj["DOOROXY-REGUL-LO-PR"].show();
} else {
obj["DOOROXY-REGUL-LO-PR"].hide();
}
}),
];
obj.displayedGForce = 0;
@ -327,6 +340,8 @@ var input = {
cargoBulk: "/sim/model/door-positions/cargobulk/position-norm",
cargoFwd: "/sim/model/door-positions/cargofwd/position-norm",
oxyPB: "/controls/oxygen/crewOxyPB",
oxyBottlePress: "/systems/oxygen/cockpit-oxygen/bottle-psi",
oxyBottleRegulLoPr: "/systems/oxygen/cockpit-oxygen/regul-lo-pr",
};
foreach (var name; keys(input)) {

Binary file not shown.

305
Systems/a320-oxygen.xml Normal file
View file

@ -0,0 +1,305 @@
<!-- Airbus A320 Fuel -->
<!-- Copyright (c) 2019 Jonathan Redpath -->
<system name="A320: Oxygen">
<property value="2183">/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<property value="15">/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<channel name="Cockpit Oxygen" execrate="8">
<!-- Bottle: 2183L @ 1850 psi NTPD -->
<!-- Regulator:
HP - transducer to ECAM
LP - 65 to 94 psi
flow: 0 to 300 L / min
Cyl PSI: 100 to 2030 psi
-->
<switch name="/systems/oxygen/cockpit-oxygen/supply-valve-cmd">
<default value="0"/>
<test logic="AND" value="1"> <!-- solenoid valve; when not energized, it shuts -->
/controls/oxygen/crewOxyPB eq 1
/systems/electrical/bus/dc-ess-shed ge 25
</test>
</switch>
<actuator name="/systems/oxygen/cockpit-oxygen/supply-valve">
<input>/systems/oxygen/cockpit-oxygen/supply-valve-cmd</input>
<rate_limit>10</rate_limit>
</actuator>
<fcs_function name="/systems/oxygen/cockpit-oxygen/mask-1-flow-rate">
<function>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>15</value>
</quotient>
<property>/controls/oxygen/cockpit-mask-1-on</property>
<table>
<independentVar lookup="row">/systems/pressurization/cabinalt</independentVar>
<independentVar lookup="column">/controls/oxygen/cockpit-mask-1-selector</independentVar>
<tableData>
0 1
0 0 29.5
5000 0.0 31.0
8000 0.17 36.4
10000 0.71 36.9
15000 5.60 37.9
20000 15.9 38.9
30000 30.4 39.9
35000 40.9 40.9
40000 41.9 41.9
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/mask-2-flow-rate">
<function>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>15</value>
</quotient>
<property>/controls/oxygen/cockpit-mask-2-on</property>
<table>
<independentVar lookup="row">/systems/pressurization/cabinalt</independentVar>
<independentVar lookup="column">/controls/oxygen/cockpit-mask-2-selector</independentVar>
<tableData>
0 1
0 0 29.5
5000 0.0 31.0
8000 0.17 36.4
10000 0.71 36.9
15000 5.60 37.9
20000 15.9 38.9
30000 30.4 39.9
35000 40.9 40.9
40000 41.9 41.9
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/mask-3-flow-rate">
<function>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>15</value>
</quotient>
<property>/controls/oxygen/cockpit-mask-3-on</property>
<table>
<independentVar lookup="row">/systems/pressurization/cabinalt</independentVar>
<independentVar lookup="column">/controls/oxygen/cockpit-mask-3-selector</independentVar>
<tableData>
0 1
0 0 29.5
5000 0.0 31.0
8000 0.17 36.4
10000 0.71 36.9
15000 5.60 37.9
20000 15.9 38.9
30000 30.4 39.9
35000 40.9 40.9
40000 41.9 41.9
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/mask-4-flow-rate">
<function>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>15</value>
</quotient>
<property>/controls/oxygen/cockpit-mask-4-on</property>
<table>
<independentVar lookup="row">/systems/pressurization/cabinalt</independentVar>
<independentVar lookup="column">/controls/oxygen/cockpit-mask-4-selector</independentVar>
<tableData>
0 1
0 0 29.5
5000 0.0 31.0
8000 0.17 36.4
10000 0.71 36.9
15000 5.60 37.9
20000 15.9 38.9
30000 30.4 39.9
35000 40.9 40.9
40000 41.9 41.9
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="Cockpit Oxygen Bottle">
<function>
<sum>
<property>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<product>
<quotient>
<property>-/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate</property>
<value>60</value>
</quotient>
<property>simulation/channel-dt</property>
</product>
</sum>
</function>
<output>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</output>
<clipto>
<min>0.0</min>
<max>2183.0</max>
</clipto>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/bottle-psi">
<function>
<product>
<value>58.58145</value>
<pow>
<property>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<value>0.4512568</value>
</pow>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/bottle-flow-rate">
<function>
<table>
<independentVar lookup="row">/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</independentVar>
<tableData>
0 0
500 200
1000 275
2000 300
2183 300
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/distributor-fill-rate">
<function>
<product>
<property>/systems/oxygen/cockpit-oxygen/supply-valve</property>
<table>
<independentVar lookup="row">/systems/oxygen/cockpit-oxygen/distributor-manifold-L</independentVar>
<tableData>
0 300
14.5 170
15 0
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate-calc">
<function>
<product>
<property>/systems/oxygen/cockpit-oxygen/bottle-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/supply-valve</property>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate">
<function>
<sum>
<property>/systems/oxygen/cockpit-oxygen/mask-1-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/mask-2-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/mask-3-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/mask-4-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/distributor-fill-rate</property>
</sum>
</function>
<clipto>
<min>0.0</min>
<max>/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate-calc</max>
</clipto>
</fcs_function>
<!-- Distributor -->
<fcs_function name="/systems/oxygen/cockpit-oxygen/distributor-manifold-rate">
<function>
<sum>
<property>-/systems/oxygen/cockpit-oxygen/mask-1-flow-rate</property>
<property>-/systems/oxygen/cockpit-oxygen/mask-2-flow-rate</property>
<property>-/systems/oxygen/cockpit-oxygen/mask-3-flow-rate</property>
<property>-/systems/oxygen/cockpit-oxygen/mask-4-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate</property>
</sum>
</function>
</fcs_function>
<fcs_function name="Cockpit Oxygen Distributor">
<function>
<sum>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-rate</property>
<value>60</value>
</quotient>
<property>simulation/channel-dt</property>
</product>
</sum>
</function>
<output>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</output>
<clipto>
<min>0.0</min>
<max>15.0</max>
</clipto>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/distributor-psi">
<function>
<product>
<value>75</value>
<log10>
<sum>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>1</value>
</sum>
</log10>
</product>
</function>
</fcs_function>
<switch name="/systems/oxygen/cockpit-oxygen/regul-lo-pr">
<default value="0"/>
<test logic="OR" value="1">
/systems/oxygen/cockpit-oxygen/distributor-psi lt 50
</test>
</switch>
</channel>
<channel name="Passenger Oxygen" execrate="8">
<!-- Chemical generators
Masks drop automatically if altitude > 14000 or 16000 if HI ALT
or MAN ON button
Taped message + SYS ON comes online
15 minutes supply
SYS ON goes off only when TIMER RESET
Door actuators AC ESS SHED 801PP
Pressure switch for 14K feet powered by 401PP (DC ESS)
Reset + taped msg + sys on light powred by 401PP
Regulators: below 10k zero flow
-->
</channel>
</system>