1
0
Fork 0

Further improve bleed fault

This commit is contained in:
legoboyvdlp R 2020-05-11 13:08:55 +01:00
parent 5afaf5c4a3
commit 37c7ee320e
5 changed files with 176 additions and 50 deletions

View file

@ -1150,6 +1150,8 @@
</hydraulic>
<pneumatics>
<egt-1-factor type="double">0.36</egt-1-factor>
<egt-2-factor type="double">0.36</egt-2-factor>
<indicating>
<bmc1-working type="bool">0</bmc1-working>
<bmc2-working type="bool">0</bmc2-working>

View file

@ -808,10 +808,10 @@ var canvas_lowerECAM_bleed = {
# ENG BLEED valve 1
var eng_valve_state = eng_valve1_state.getValue();
if (eng_valve_state == 1) {
me["BLEED-ENG-1"].setRotation(90 * D2R);
} else {
if (eng_valve_state == 0) {
me["BLEED-ENG-1"].setRotation(0);
} else {
me["BLEED-ENG-1"].setRotation(90 * D2R);
}
if (eng_valve_state == eng_valve1.getValue()) {
@ -856,10 +856,10 @@ var canvas_lowerECAM_bleed = {
# ENG BLEED valve 2
var eng_valve_state = eng_valve2_state.getValue();
if (eng_valve_state == 1) {
me["BLEED-ENG-2"].setRotation(90 * D2R);
} else {
if (eng_valve_state == 0) {
me["BLEED-ENG-2"].setRotation(0);
} else {
me["BLEED-ENG-2"].setRotation(90 * D2R);
}
if (eng_valve_state == eng_valve2.getValue()) {

View file

@ -1230,20 +1230,20 @@ var messages_priority_2 = func {
# Bleed
# BLEED 1 FAULT
if ((FWC.Timer.eng1idleOutput.getBoolValue() and !pts.Controls.Engines.Engine.cutoffSw[0].getValue()) and (systems.PNEU.Psi.engine1.getValue() >= 57 or systems.PNEU.Ovht.ovht1.getValue())) {
if ((FWC.Timer.eng1idleOutput.getBoolValue() and !pts.Controls.Engines.Engine.cutoffSw[0].getValue()) and (systems.PNEU.Warnings.overpress1.getValue() or systems.PNEU.Warnings.ovht1.getValue())) {
warningNodes.Timers.bleed1Fault.setValue(1);
} else {
warningNodes.Timers.bleed1Fault.setValue(0);
}
if (bleed1Fault.clearFlag == 0 and (phaseVar == 2 or phaseVar == 6 or phaseVar == 9) and warningNodes.Timers.bleed1FaultOutput.getValue() == 1 and (!systems.PNEU.Switch.pack1.getBoolValue() or !systems.PNEU.Switch.pack2.getBoolValue() or getprop("/ECAM/phases/wing-anti-ice-pulse"))) { # inverse pulse
if (bleed1Fault.clearFlag == 0 and (phaseVar == 2 or phaseVar == 6 or phaseVar == 9) and warningNodes.Timers.bleed1FaultOutput.getValue() == 1 and (!systems.PNEU.Switch.pack1.getBoolValue() or !systems.PNEU.Switch.pack2.getBoolValue() or !(getprop("/ECAM/phases/wing-anti-ice-pulse") and getprop("/controls/switches/wing")))) { # inverse pulse
bleed1Fault.active = 1;
} else {
ECAM_controller.warningReset(bleed1Fault);
}
if (bleed1Fault.active) {
if (bleed1FaultOff.clearFlag == 0 and (systems.PNEU.Switch.bleed1.getBoolValue() or systems.PNEU.Switch.bleed2.getBoolValue()) and (systems.PNEU.Warnings.prv1Disag.getValue() or systems.PNEU.Warnings.prv2Disag.getValue())) {
if (bleed1FaultOff.clearFlag == 0 and systems.PNEU.Switch.bleed1.getBoolValue() and systems.PNEU.Warnings.prv1Disag.getValue()) {
bleed1FaultOff.active = 1;
} else {
ECAM_controller.warningReset(bleed1FaultOff);
@ -1267,7 +1267,7 @@ var messages_priority_2 = func {
}
# BLEED 2 FAULT
if ((FWC.Timer.eng2idleOutput.getBoolValue() and !pts.Controls.Engines.Engine.cutoffSw[1].getValue()) and (systems.PNEU.Psi.engine2.getValue() >= 57 or systems.PNEU.Ovht.ovht2.getValue())) {
if ((FWC.Timer.eng2idleOutput.getBoolValue() and !pts.Controls.Engines.Engine.cutoffSw[1].getValue()) and (systems.PNEU.Warnings.overpress2.getValue() or systems.PNEU.Warnings.ovht2.getValue())) {
warningNodes.Timers.bleed2Fault.setValue(1);
} else {
warningNodes.Timers.bleed2Fault.setValue(0);
@ -1280,7 +1280,7 @@ var messages_priority_2 = func {
}
if (bleed2Fault.active) {
if (bleed2FaultOff.clearFlag == 0 and (systems.PNEU.Switch.bleed1.getBoolValue() or systems.PNEU.Switch.bleed2.getBoolValue()) and (systems.PNEU.Warnings.prv1Disag.getValue() or systems.PNEU.Warnings.prv2Disag.getValue())) {
if (bleed2FaultOff.clearFlag == 0 and systems.PNEU.Switch.bleed2.getBoolValue() and systems.PNEU.Warnings.prv2Disag.getValue()) {
bleed2FaultOff.active = 1;
} else {
ECAM_controller.warningReset(bleed2FaultOff);

View file

@ -27,10 +27,6 @@ var PNEU = {
engine1: props.globals.getNode("/systems/pneumatics/psi/engine-1-psi"),
engine2: props.globals.getNode("/systems/pneumatics/psi/engine-2-psi"),
},
Ovht: {
ovht1: props.globals.getNode("/systems/pneumatics/precooler/ovht-1"),
ovht2: props.globals.getNode("/systems/pneumatics/precooler/ovht-2"),
},
Switch: {
apu: props.globals.getNode("/controls/pneumatics/switches/apu"),
bleed1: props.globals.getNode("/controls/pneumatics/switches/bleed-1"),
@ -51,6 +47,10 @@ var PNEU = {
Warnings: {
prv1Disag: props.globals.getNode("/systems/pneumatics/valves/engine-1-prv-valve-disag"),
prv2Disag: props.globals.getNode("/systems/pneumatics/valves/engine-2-prv-valve-disag"),
ovht1: props.globals.getNode("/systems/pneumatics/warnings/ovht-1-mem"),
ovht2: props.globals.getNode("/systems/pneumatics/warnings/ovht-2-mem"),
overpress1: props.globals.getNode("/systems/pneumatics/warnings/overpress-1-mem"),
overpress2: props.globals.getNode("/systems/pneumatics/warnings/overpress-2-mem"),
},
Valves: {
apu: props.globals.getNode("/systems/pneumatics/valves/apu-bleed-valve"),

View file

@ -166,24 +166,53 @@
</actuator>
<!-- Pressure regulation valve -->
<switch name="/systems/pneumatics/valves/engine-1-prv-valve-autoclose-cmd">
<switch name="/systems/pneumatics/valves/engine-1-prv-valve-autoclose-psi-cmd">
<default value="0"/>
<test logic="OR" value="1">
/systems/pneumatics/psi/engine-1-upstream-src gt 85
/systems/pneumatics/precooler/ovht-1 eq 1
/systems/pneumatics/valves/apu-bleed-valve eq 1
/systems/pneumatics/valves/starter-valve-1 eq 1
<test value="1">
/systems/pneumatics/psi/engine-1-downstream-prv gt 57
</test>
</switch>
<actuator name="/systems/pneumatics/valves/engine-1-prv-valve-autoclose-psi">
<input>/systems/pneumatics/valves/engine-1-prv-valve-autoclose-psi-cmd</input>
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.0666</rate_limit> <!-- 15 seconds -->
</actuator>
<switch name="/systems/pneumatics/valves/engine-1-prv-valve-autoclose-cmd">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/valves/engine-1-prv-valve-autoclose-cmd eq 1
/controls/pneumatics/switches/bleed-1 eq 1
</test>
<test logic="OR" value="1">
/systems/pneumatics/valves/engine-1-prv-valve-autoclose-psi eq 1
/systems/pneumatics/precooler/ovht-1 eq 1
</test>
</switch>
<fcs_function name="/systems/pneumatics/valves/engine-1-prv-valve-temp-gain">
<function>
<table>
<independentVar lookup="row">/systems/pneumatics/precooler/temp-1</independentVar>
<tableData>
235 1.0
245 0.397
</tableData>
</table>
</function>
</fcs_function>
<switch name="/systems/pneumatics/valves/engine-1-prv-valve-cmd">
<default value="0"/>
<test logic="OR" value="0">
/controls/engines/engine[0]/fire-btn eq 1
/controls/pneumatics/switches/bleed-1 eq 0
/systems/pneumatics/valves/apu-bleed-valve ne 0
/systems/pneumatics/valves/starter-valve-1 ne 0
/systems/pneumatics/valves/engine-1-prv-valve-autoclose-cmd eq 1
</test>
<test logic="AND" value="1">
<test logic="AND" value="/systems/pneumatics/valves/engine-1-prv-valve-temp-gain">
/controls/pneumatics/switches/bleed-1 eq 1
</test>
</switch>
@ -214,29 +243,57 @@
</test>
</switch>
<switch name="/systems/pneumatics/valves/engine-2-prv-valve-autoclose-cmd">
<switch name="/systems/pneumatics/valves/engine-2-prv-valve-autoclose-psi-cmd">
<default value="0"/>
<test logic="OR" value="1">
/systems/pneumatics/psi/engine-2-upstream-src gt 85
/systems/pneumatics/precooler/ovht-2 eq 1
/systems/pneumatics/valves/apu-bleed-valve eq 1
/systems/pneumatics/valves/starter-valve-2 eq 1
<test value="1">
/systems/pneumatics/psi/engine-2-downstream-prv gt 57
</test>
</switch>
<actuator name="/systems/pneumatics/valves/engine-2-prv-valve-autoclose-psi">
<input>/systems/pneumatics/valves/engine-2-prv-valve-autoclose-psi-cmd</input>
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.0666</rate_limit> <!-- 15 seconds -->
</actuator>
<switch name="/systems/pneumatics/valves/engine-2-prv-valve-autoclose-cmd">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/valves/engine-2-prv-valve-autoclose-cmd eq 1
/controls/pneumatics/switches/bleed-2 eq 1
</test>
<test logic="OR" value="1">
/systems/pneumatics/valves/engine-2-prv-valve-autoclose-psi eq 1
/systems/pneumatics/precooler/ovht-2 eq 1
</test>
</switch>
<fcs_function name="/systems/pneumatics/valves/engine-2-prv-valve-temp-gain">
<function>
<table>
<independentVar lookup="row">/systems/pneumatics/precooler/temp-2</independentVar>
<tableData>
235 1.0
245 0.397
</tableData>
</table>
</function>
</fcs_function>
<switch name="/systems/pneumatics/valves/engine-2-prv-valve-cmd">
<default value="0"/>
<test logic="OR" value="0">
/controls/engines/engine[1]/fire-btn eq 1
/controls/pneumatics/switches/bleed-2 eq 0
/systems/pneumatics/valves/apu-bleed-valve ne 0
/systems/pneumatics/valves/starter-valve-2 ne 0
/systems/pneumatics/valves/engine-2-prv-valve-autoclose-cmd eq 1
</test>
<test logic="AND" value="1">
<test logic="AND" value="/systems/pneumatics/valves/engine-2-prv-valve-temp-gain">
/controls/pneumatics/switches/bleed-2 eq 1
</test>
</switch>
<switch name="/systems/pneumatics/valves/engine-2-prv-valve-power">
<default value="0"/>
<test logic="AND" value="5.0">
@ -569,9 +626,6 @@
<switch name="/systems/pneumatics/psi/crossbleed-duct-left-src">
<default value="0"/>
<test logic="AND" value="1"> <!-- gnd -->
/systems/pneumatics/source/gnd-psi ne 0
</test>
<test logic="AND" value="2"> <!-- apu -->
/systems/pneumatics/source/apu-psi ne 0
</test>
@ -582,14 +636,13 @@
/systems/pneumatics/valves/crossbleed-valve ne 0
/systems/pneumatics/psi/crossbleed-duct-right ge /systems/pneumatics/psi/engine-1-downstream-opv
</test>
<test logic="AND" value="1"> <!-- gnd -->
/systems/pneumatics/source/gnd-psi ne 0
</test>
</switch>
<switch name="/systems/pneumatics/psi/crossbleed-duct-right-src">
<default value="0"/>
<test logic="AND" value="1"> <!-- gnd -->
/systems/pneumatics/valves/crossbleed-valve ne 0
/systems/pneumatics/source/gnd-psi ne 0
</test>
<test logic="AND" value="2"> <!-- apu -->
/systems/pneumatics/valves/crossbleed-valve ne 0
/systems/pneumatics/source/apu-psi ne 0
@ -602,12 +655,23 @@
/systems/pneumatics/valves/crossbleed-valve ne 0
/systems/pneumatics/psi/crossbleed-duct-left ge /systems/pneumatics/psi/engine-2-downstream-opv
</test>
<test logic="AND" value="1"> <!-- gnd -->
/systems/pneumatics/valves/crossbleed-valve ne 0
/systems/pneumatics/source/gnd-psi ne 0
</test>
</switch>
<fcs_function name="/systems/pneumatics/psi/crossbleed-duct-left">
<function>
<max>
<property>/systems/pneumatics/source/gnd-psi</property>
<ifthen>
<eq>
<property>/systems/pneumatics/psi/crossbleed-duct-left-src</property>
<value>1</value>
</eq>
<property>/systems/pneumatics/source/gnd-psi</property>
<v>-9999</v> <!-- ignore -->
</ifthen>
<product>
<property>/systems/pneumatics/source/apu-psi</property>
<property>/systems/pneumatics/valves/apu-bleed-valve</property>
@ -631,10 +695,17 @@
<fcs_function name="/systems/pneumatics/psi/crossbleed-duct-right">
<function>
<max>
<product>
<property>/systems/pneumatics/valves/crossbleed-valve</property>
<property>/systems/pneumatics/source/gnd-psi</property>
</product>
<ifthen>
<eq>
<property>/systems/pneumatics/psi/crossbleed-duct-right-src</property>
<value>1</value>
</eq>
<product>
<property>/systems/pneumatics/valves/crossbleed-valve</property>
<property>/systems/pneumatics/source/gnd-psi</property>
</product>
<v>-9999</v> <!-- ignore -->
</ifthen>
<product>
<property>/systems/pneumatics/valves/crossbleed-valve</property>
<property>/systems/pneumatics/source/apu-psi</property>
@ -660,7 +731,7 @@
<channel name="Precooler Left" execute="/systems/pneumatics/indicating/bmc1-working"> <!-- These values come from BMC, so makes sense to not have them when BMC lacks power -->
<fcs_function name="/systems/pneumatics/precooler/temp-1">
<fcs_function name="/systems/pneumatics/precooler/calc/temp-1">
<function>
<sum>
<value>15</value>
@ -673,10 +744,8 @@
<value>0</value>
</nq>
<product>
<property>/systems/pneumatics/valves/engine-1-prv-valve</property>
<property>/systems/pneumatics/valves/engine-1-opv-valve</property>
<property>/engines/engine[0]/egt-actual</property>
<value>0.36</value>
<property>/systems/pneumatics/egt-1-factor</property>
</product>
<product>
<property>/systems/pneumatics/valves/apu-bleed-valve</property>
@ -688,6 +757,11 @@
</function>
</fcs_function>
<lag_filter name="/systems/pneumatics/precooler/temp-1">
<input>/systems/pneumatics/precooler/calc/temp-1</input>
<c1>0.8</c1>
</lag_filter>
<switch name="/systems/pneumatics/precooler/calc/ovht-5-true">
<default value="0"/>
<test value="1">
@ -736,6 +810,17 @@
</test>
</switch>
<switch name="/systems/pneumatics/warnings/ovht-1-mem">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/warnings/ovht-1-mem eq 1
/controls/pneumatics/switches/bleed-1 eq 1
</test>
<test logic="AND" value="1">
/systems/pneumatics/precooler/ovht-1 eq 1
</test>
</switch>
<switch name="/systems/pneumatics/warnings/lowtemp-1">
<default value="0"/>
<test logic="AND" value="1">
@ -749,9 +834,10 @@
<channel name="Precooler Right" execute="/systems/pneumatics/indicating/bmc2-working"> <!-- These values come from BMC, so makes sense to not have them when BMC lacks power -->
<fcs_function name="/systems/pneumatics/precooler/temp-2">
<fcs_function name="/systems/pneumatics/precooler/calc/temp-2">
<function>
<sum>
<value>15</value>
<ifthen>
<nq>
<product>
@ -761,10 +847,8 @@
<value>0</value>
</nq>
<product>
<property>/systems/pneumatics/valves/engine-2-prv-valve</property>
<property>/systems/pneumatics/valves/engine-2-opv-valve</property>
<property>/engines/engine[1]/egt-actual</property>
<value>2.45</value>
<property>/systems/pneumatics/egt-2-factor</property>
</product>
<product>
<property>/systems/pneumatics/valves/apu-bleed-valve</property>
@ -776,6 +860,11 @@
</function>
</fcs_function>
<lag_filter name="/systems/pneumatics/precooler/temp-2">
<input>/systems/pneumatics/precooler/calc/temp-2</input>
<c1>0.8</c1>
</lag_filter>
<switch name="/systems/pneumatics/precooler/calc/ovht-5-true-2">
<default value="0"/>
<test value="1">
@ -824,6 +913,17 @@
</test>
</switch>
<switch name="/systems/pneumatics/warnings/ovht-2-mem">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/warnings/ovht-2-mem eq 1
/controls/pneumatics/switches/bleed-2 eq 1
</test>
<test logic="AND" value="1">
/systems/pneumatics/precooler/ovht-2 eq 1
</test>
</switch>
<switch name="/systems/pneumatics/warnings/lowtemp-2">
<default value="0"/>
<test logic="AND" value="1">
@ -908,6 +1008,7 @@
<test logic="OR" value="1">
/ECAM/warnings/timer/bleed-1-fault-output eq 1
/ECAM/warnings/timer/prv-1-not-shut-output eq 1
/systems/pneumatics/warnings/ovht-1-mem eq 1
</test>
</switch>
@ -926,6 +1027,29 @@
<test logic="OR" value="1">
/ECAM/warnings/timer/bleed-2-fault-output eq 1
/ECAM/warnings/timer/prv-2-not-shut-output eq 1
/systems/pneumatics/warnings/ovht-2-mem eq 1
</test>
</switch>
<switch name="/systems/pneumatics/warnings/overpress-1-mem">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/warnings/overpress-1-mem eq 1
/controls/pneumatics/switches/bleed-1 eq 1
</test>
<test logic="AND" value="1">
/systems/pneumatics/psi/engine-1-downstream-prv gt 57
</test>
</switch>
<switch name="/systems/pneumatics/warnings/overpress-2-mem">
<default value="0"/>
<test logic="AND" value="1">
/systems/pneumatics/warnings/overpress-2-mem eq 1
/controls/pneumatics/switches/bleed-2 eq 1
</test>
<test logic="AND" value="1">
/systems/pneumatics/psi/engine-2-downstream-prv gt 57
</test>
</switch>
</channel>