1
0
Fork 0

Many bugfixes

This commit is contained in:
legoboyvdlp R 2019-10-31 18:57:19 +00:00
parent fb5c0e60fc
commit f8f87ed042
10 changed files with 419 additions and 45 deletions

View file

@ -1670,8 +1670,19 @@
</greater-than-equals>
</condition>
<command>nasal</command>
<script>ecam.ECAM_controller.recall();</script>
<script>
ecam.ECAM_controller.recall();
ecam.FWC.Btn.recall.setValue(1);
</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>
ecam.FWC.Btn.recall.setValue(0);
</script>
</binding>
</mod-up>
</action>
</animation>
@ -1690,8 +1701,19 @@
</greater-than-equals>
</condition>
<command>nasal</command>
<script>libraries.LowerECAM.button("clr");</script>
<script>
libraries.LowerECAM.button("clr");
ecam.FWC.Btn.clr.setValue(1);
</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>
ecam.FWC.Btn.clr.setValue(0);
</script>
</binding>
</mod-up>
</action>
</animation>

View file

@ -2844,7 +2844,7 @@
<binding>
<condition>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<property>systems/electrical/bus/dc-service-bus</property>
<value>25</value>
</greater-than-equals>
</condition>

View file

@ -146,6 +146,7 @@ var status = {
};
var ECAM_controller = {
_recallCounter: 0,
init: func() {
ECAMloopTimer.start();
me.reset();
@ -295,12 +296,25 @@ var ECAM_controller = {
}
},
recall: func() {
me._recallCounter = 0;
foreach (var w; warnings.vector) {
if (w.clearFlag == 1) {
w.noRepeat = 0;
w.clearFlag = 0;
me._recallCounter += 1;
}
}
if (me._recallCounter == 0) {
FWC.Btn.recallStsNormal.setValue(1);
settimer(func() {
if (FWC.Btn.recallStsNormal.getValue() == 1) { # catch unexpected error, trying something new here
FWC.Btn.recallStsNormal.setValue(0);
} else {
die("Exception in ECAM-controller.nas, line 316");
}
}, 0.1);
}
},
warningReset: func(warning) {
warning.active = 0;

View file

@ -738,7 +738,7 @@ var messages_priority_3 = func {
}
if (!systems.cargoTestBtn.getBoolValue()) {
if (cargoSmokeFwd.clearFlag == 0 and systems.fwdCargoFireWarn.getBoolValue() and (getprop("/ECAM/warning-phase") <= 3 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") == 6)) {
if (cargoSmokeFwd.clearFlag == 0 and systems.fwdCargoFireWarn.getBoolValue() and (phaseVar <= 3 or phaseVar >= 9 or phaseVar == 6)) {
cargoSmokeFwd.active = 1;
} elsif (cargoSmokeFwd.clearFlag == 1 or systems.cargoTestBtnOff.getBoolValue()) {
ECAM_controller.warningReset(cargoSmokeFwd);
@ -752,7 +752,7 @@ var messages_priority_3 = func {
cargoSmokeFwd.hasSubmsg = 0;
}
if (cargoSmokeAft.clearFlag == 0 and systems.aftCargoFireWarn.getBoolValue() and (getprop("/ECAM/warning-phase") <= 3 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") == 6)) {
if (cargoSmokeAft.clearFlag == 0 and systems.aftCargoFireWarn.getBoolValue() and (phaseVar <= 3 or phaseVar >= 9 or phaseVar == 6)) {
cargoSmokeAft.active = 1;
} elsif (cargoSmokeAft.clearFlag == 1 or systems.cargoTestBtnOff.getBoolValue()) {
ECAM_controller.warningReset(cargoSmokeAft);
@ -781,7 +781,7 @@ var messages_priority_3 = func {
}
# ESS on BAT
if ((!gear.getValue() or !getprop("/controls/gear/gear-down")) and getprop("/systems/electrical/some-electric-thingie/static-inverter-timer") == 1 and getprop("/ECAM/warning-phase") >= 5 and getprop("/ECAM/warning-phase") <= 7) {
if ((!gear.getValue() or !getprop("/controls/gear/gear-down")) and getprop("/systems/electrical/some-electric-thingie/static-inverter-timer") == 1 and phaseVar >= 5 and phaseVar <= 7) {
essBusOnBat.active = 1;
essBusOnBatLGUplock.active = 1;
essBusOnBatManOn.active = 1;
@ -798,7 +798,7 @@ var messages_priority_3 = func {
}
# EMER CONFIG
if (getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !dualFail.active and phaseVar != 4 and phaseVar != 8 and emerconfig.clearFlag == 0) {
if (getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !dualFailNode.getBoolValue() and phaseVar != 4 and phaseVar != 8 and emerconfig.clearFlag == 0) {
emerconfig.active = 1;
if (getprop("/systems/hydraulic/sources/rat/position") != 0 and emerconfigMinRat.clearFlag == 0) {
@ -928,8 +928,9 @@ var messages_priority_3 = func {
}
var messages_priority_2 = func {
phaseVar = phaseNode.getValue();
# DC EMER CONFIG
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.dcEss.getValue() < 25 and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25) {
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.dcEss.getValue() < 25 and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25 and phaseVar != 4 and phaseVar != 8) {
dcEmerconfig.active = 1;
dcEmerconfigManOn.active = 1;
} else {
@ -937,6 +938,114 @@ var messages_priority_2 = func {
ECAM_controller.warningReset(dcEmerconfigManOn);
}
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !dcEmerconfig.active and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25 and phaseVar != 4 and phaseVar != 8) {
dcBus12Fault.active = 1;
dcBus12FaultBlower.active = 1;
dcBus12FaultExtract.active = 1;
dcBus12FaultBaroRef.active = 1;
dcBus12FaultIcing.active = 1;
dcBus12FaultBrking.active = 1;
} else {
ECAM_controller.warningReset(dcBus12Fault);
ECAM_controller.warningReset(dcBus12FaultBlower);
ECAM_controller.warningReset(dcBus12FaultExtract);
ECAM_controller.warningReset(dcBus12FaultBaroRef);
ECAM_controller.warningReset(dcBus12FaultIcing);
ECAM_controller.warningReset(dcBus12FaultBrking);
}
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.acEss.getValue() < 110 and phaseVar != 4 and phaseVar != 8) {
AcBusEssFault.active = 1;
if (!systems.ELEC.Switch.acEssFeed.getBoolValue()) {
AcBusEssFaultFeed.active = 1;
} else {
ECAM_controller.warningReset(AcBusEssFaultFeed);
}
AcBusEssFaultAtc.active = 1;
} else {
ECAM_controller.warningReset(AcBusEssFault);
ECAM_controller.warningReset(AcBusEssFaultFeed);
ECAM_controller.warningReset(AcBusEssFaultAtc);
}
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.ac1.getValue() < 110 and phaseVar != 4 and phaseVar != 8) {
AcBus1Fault.active = 1;
AcBus1FaultBlower.active = 1;
} else {
ECAM_controller.warningReset(AcBus1Fault);
ECAM_controller.warningReset(AcBus1FaultBlower);
}
if (!dcEmerconfig.active and systems.ELEC.Bus.dcEss.getValue() < 25 and phaseVar != 4 and phaseVar != 8) {
DcEssBusFault.active = 1;
DcEssBusFaultRadio.active = 1;
DcEssBusFaultRadio2.active = 1;
DcEssBusFaultBaro.active = 1;
DcEssBusFaultGPWS.active = 1;
} else {
ECAM_controller.warningReset(DcEssBusFault);
ECAM_controller.warningReset(DcEssBusFaultRadio);
ECAM_controller.warningReset(DcEssBusFaultRadio2);
ECAM_controller.warningReset(DcEssBusFaultBaro);
ECAM_controller.warningReset(DcEssBusFaultGPWS);
}
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.ac2.getValue() < 110 and phaseVar != 4 and phaseVar != 8) {
AcBus2Fault.active = 1;
AcBus2FaultExtract.active = 1;
} else {
ECAM_controller.warningReset(AcBus2Fault);
ECAM_controller.warningReset(AcBus2FaultExtract);
}
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() >= 25 and phaseVar != 4 and phaseVar != 8) {
dcBus1Fault.active = 1;
dcBus1FaultBlower.active = 1;
dcBus1FaultExtract.active = 1;
} else {
ECAM_controller.warningReset(dcBus1Fault);
ECAM_controller.warningReset(dcBus1FaultBlower);
ECAM_controller.warningReset(dcBus1FaultExtract);
}
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and systems.ELEC.Bus.dc1.getValue() >= 25 and systems.ELEC.Bus.dc2.getValue() <= 25 and phaseVar != 4 and phaseVar != 8) {
dcBus2Fault.active = 1;
dcBus2FaultAirData.active = 1;
dcBus2FaultBaro.active = 1;
} else {
ECAM_controller.warningReset(dcBus2Fault);
ECAM_controller.warningReset(dcBus2FaultAirData);
ECAM_controller.warningReset(dcBus2FaultBaro);
}
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !dcEmerconfig.active and systems.ELEC.Bus.dcBat.getValue() < 25 and phaseVar != 4 and phaseVar != 5 and phaseVar != 7 and phaseVar != 8) {
dcBusBatFault.active = 1;
} else {
ECAM_controller.warningReset(dcBusBatFault);
}
if (!(getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !getprop("/systems/electrical/relay/emer-glc/contact-pos")) and systems.ELEC.Bus.dcEssShed.getValue() < 25 and systems.ELEC.Bus.dcEss.getValue() >= 25 and phaseVar != 4 and phaseVar != 8) {
dcBusEssShed.active = 1;
dcBusEssShedExtract.active = 1;
dcBusEssShedIcing.active = 1;
} else {
ECAM_controller.warningReset(dcBusEssShed);
ECAM_controller.warningReset(dcBusEssShedExtract);
ECAM_controller.warningReset(dcBusEssShedIcing);
}
if (!(getprop("/systems/electrical/some-electric-thingie/emer-elec-config") and !getprop("/systems/electrical/relay/emer-glc/contact-pos")) and systems.ELEC.Bus.acEssShed.getValue() < 110 and systems.ELEC.Bus.acEss.getValue() >= 110 and phaseVar != 4 and phaseVar != 8) {
acBusEssShed.active = 1;
if (!getprop("/systems/electrical/some-electric-thingie/emer-elec-config")) {
acBusEssShedAtc.active = 1;
} else {
ECAM_controller.warningReset(acBusEssShed);
}
} else {
ECAM_controller.warningReset(acBusEssShed);
ECAM_controller.warningReset(acBusEssShedAtc);
}
if (fcu.FCUController.FCU1.failed and fcu.FCUController.FCU2.failed and systems.ELEC.Bus.dcEss.getValue() >= 25 and systems.ELEC.Bus.dcEss.getValue() >= 25) {
fcuFault.active = 1;
fcuFaultBaro.active = 1;
@ -962,7 +1071,7 @@ var messages_priority_2 = func {
}
# APU EMER SHUT DOWN
if (apuEmerShutdown.clearFlag == 0 and systems.apuEmerShutdown.getBoolValue() and !getprop("/systems/fire/apu/warning-active") and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (apuEmerShutdown.clearFlag == 0 and systems.apuEmerShutdown.getBoolValue() and !getprop("/systems/fire/apu/warning-active") and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
apuEmerShutdown.active = 1;
} elsif (apuEmerShutdown.clearFlag == 1) {
ECAM_controller.warningReset(apuEmerShutdown);
@ -976,90 +1085,103 @@ var messages_priority_2 = func {
apuEmerShutdown.hasSubmsg = 0;
}
if (eng1FireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[0].condition == 0 or (systems.engFireDetectorUnits.vector[0].loopOne == 9 and systems.engFireDetectorUnits.vector[0].loopTwo == 9 and systems.eng1Inop.getBoolValue())) and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (eng1FireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[0].condition == 0 or (systems.engFireDetectorUnits.vector[0].loopOne == 9 and systems.engFireDetectorUnits.vector[0].loopTwo == 9 and systems.eng1Inop.getBoolValue())) and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
eng1FireDetFault.active = 1;
} else {
ECAM_controller.warningReset(eng1FireDetFault);
}
if (eng1LoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[0].loopOne == 9 and systems.engFireDetectorUnits.vector[0].loopTwo != 9 and !systems.eng1Inop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (eng1LoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[0].loopOne == 9 and systems.engFireDetectorUnits.vector[0].loopTwo != 9 and !systems.eng1Inop.getBoolValue() and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
eng1LoopAFault.active = 1;
} else {
ECAM_controller.warningReset(eng1LoopAFault);
}
if (eng1LoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[0].loopOne != 9 and systems.engFireDetectorUnits.vector[0].loopTwo == 9 and !systems.eng1Inop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (eng1LoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[0].loopOne != 9 and systems.engFireDetectorUnits.vector[0].loopTwo == 9 and !systems.eng1Inop.getBoolValue() and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
eng1LoopBFault.active = 1;
} else {
ECAM_controller.warningReset(eng1LoopBFault);
}
if (eng2FireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[1].condition == 0 or (systems.engFireDetectorUnits.vector[1].loopOne == 9 and systems.engFireDetectorUnits.vector[1].loopTwo == 9 and systems.eng2Inop.getBoolValue())) and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (eng2FireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[1].condition == 0 or (systems.engFireDetectorUnits.vector[1].loopOne == 9 and systems.engFireDetectorUnits.vector[1].loopTwo == 9 and systems.eng2Inop.getBoolValue())) and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
eng2FireDetFault.active = 1;
} else {
ECAM_controller.warningReset(eng2FireDetFault);
}
if (eng2LoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[1].loopOne == 9 and systems.engFireDetectorUnits.vector[1].loopTwo != 9 and !systems.eng2Inop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (eng2LoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[1].loopOne == 9 and systems.engFireDetectorUnits.vector[1].loopTwo != 9 and !systems.eng2Inop.getBoolValue() and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
eng2LoopAFault.active = 1;
} else {
ECAM_controller.warningReset(eng2LoopAFault);
}
if (eng2LoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[1].loopOne != 9 and systems.engFireDetectorUnits.vector[1].loopTwo == 9 and !systems.eng2Inop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (eng2LoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[1].loopOne != 9 and systems.engFireDetectorUnits.vector[1].loopTwo == 9 and !systems.eng2Inop.getBoolValue() and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
eng2LoopBFault.active = 1;
} else {
ECAM_controller.warningReset(eng2LoopBFault);
}
if (apuFireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[2].condition == 0 or (systems.engFireDetectorUnits.vector[2].loopOne == 9 and systems.engFireDetectorUnits.vector[2].loopTwo == 9 and systems.apuInop.getBoolValue())) and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (apuFireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[2].condition == 0 or (systems.engFireDetectorUnits.vector[2].loopOne == 9 and systems.engFireDetectorUnits.vector[2].loopTwo == 9 and systems.apuInop.getBoolValue())) and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
apuFireDetFault.active = 1;
} else {
ECAM_controller.warningReset(apuFireDetFault);
}
if (apuLoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[2].loopOne == 9 and systems.engFireDetectorUnits.vector[2].loopTwo != 9 and !systems.apuInop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (apuLoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[2].loopOne == 9 and systems.engFireDetectorUnits.vector[2].loopTwo != 9 and !systems.apuInop.getBoolValue() and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
apuLoopAFault.active = 1;
} else {
ECAM_controller.warningReset(apuLoopAFault);
}
if (apuLoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[2].loopOne != 9 and systems.engFireDetectorUnits.vector[2].loopTwo == 9 and !systems.apuInop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (apuLoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[2].loopOne != 9 and systems.engFireDetectorUnits.vector[2].loopTwo == 9 and !systems.apuInop.getBoolValue() and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
apuLoopBFault.active = 1;
} else {
ECAM_controller.warningReset(apuLoopBFault);
}
if (crgAftFireDetFault.clearFlag == 0 and (systems.cargoSmokeDetectorUnits.vector[0].condition == 0 or systems.cargoSmokeDetectorUnits.vector[1].condition == 0) and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (crgAftFireDetFault.clearFlag == 0 and (systems.cargoSmokeDetectorUnits.vector[0].condition == 0 or systems.cargoSmokeDetectorUnits.vector[1].condition == 0) and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
crgAftFireDetFault.active = 1;
} else {
ECAM_controller.warningReset(crgAftFireDetFault);
}
if (crgFwdFireDetFault.clearFlag == 0 and systems.cargoSmokeDetectorUnits.vector[2].condition == 0 and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
if (crgFwdFireDetFault.clearFlag == 0 and systems.cargoSmokeDetectorUnits.vector[2].condition == 0 and (phaseVar == 6 or phaseVar >= 9 or phaseVar <= 2)) {
crgFwdFireDetFault.active = 1;
} else {
ECAM_controller.warningReset(crgFwdFireDetFault);
}
}
var messages_priority_1 = func {}
var messages_priority_0 = func {}
var messages_priority_1 = func {
}
var messages_priority_0 = func {
if (FWC.Btn.recallStsNormalOutput.getBoolValue()) {
recallNormal.active = 1;
recallNormal1.active = 1;
recallNormal2.active = 1;
} else {
ECAM_controller.warningReset(recallNormal);
ECAM_controller.warningReset(recallNormal1);
ECAM_controller.warningReset(recallNormal2);
}
}
var messages_config_memo = func {
phaseVar = phaseNode.getValue();
if (getprop("/controls/flight/flap-lever") == 0 or getprop("/controls/flight/flap-lever") == 4 or getprop("/controls/flight/speedbrake") != 0 or getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") > 1.75 or getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") < -3.65 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") < -3.55 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") > 3.55) {
setprop("/ECAM/to-config-normal", 0);
} else {
setprop("/ECAM/to-config-normal", 1);
}
if (getprop("/ECAM/to-config-test") and (getprop("/ECAM/warning-phase") == 2 or getprop("/ECAM/warning-phase") == 9)) {
if (getprop("/ECAM/to-config-test") and (phaseVar == 2 or phaseVar == 9)) {
setprop("/ECAM/to-config-set", 1);
} else {
setprop("/ECAM/to-config-set", 0);
}
if (!getprop("/ECAM/to-config-normal") or getprop("/ECAM/warning-phase") == 6) {
if (!getprop("/ECAM/to-config-normal") or phaseVar == 6) {
setprop("/ECAM/to-config-reset", 1);
} else {
setprop("/ECAM/to-config-reset", 0);
@ -1105,19 +1227,19 @@ var messages_config_memo = func {
toMemoLine5.colour = "c";
}
if (getprop("/ECAM/to-config-test") and (getprop("/ECAM/warning-phase") == 2 or getprop("/ECAM/warning-phase") == 9)) {
if (getprop("/ECAM/to-config-test") and (phaseVar == 2 or phaseVar == 9)) {
setprop("/ECAM/to-memo-set", 1);
} else {
setprop("/ECAM/to-memo-set", 0);
}
if (getprop("/ECAM/warning-phase") == 1 or getprop("/ECAM/warning-phase") == 3 or getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") == 10) {
if (phaseVar == 1 or phaseVar == 3 or phaseVar == 6 or phaseVar == 10) {
setprop("/ECAM/to-memo-reset", 1);
} else {
setprop("/ECAM/to-memo-reset", 0);
}
if ((getprop("/ECAM/warning-phase") == 2 and getprop("/ECAM/engine-start-time") != 0 and getprop("/ECAM/engine-start-time") + 120 < getprop("/sim/time/elapsed-sec")) or getprop("/ECAM/to-memo-flipflop")) {
if ((phaseVar == 2 and getprop("/ECAM/engine-start-time") != 0 and getprop("/ECAM/engine-start-time") + 120 < getprop("/sim/time/elapsed-sec")) or getprop("/ECAM/to-memo-flipflop")) {
toMemoLine1.active = 1;
toMemoLine2.active = 1;
toMemoLine3.active = 1;
@ -1192,13 +1314,13 @@ var messages_config_memo = func {
setprop("/ECAM/ldg-memo-2200-set", 0);
}
if (getprop("/ECAM/warning-phase") >= 6 and getprop("/ECAM/warning-phase") <= 8) {
if (phaseVar >= 6 and phaseVar <= 8) {
setprop("/ECAM/ldg-memo-2200-reset", 1);
} else {
setprop("/ECAM/ldg-memo-2200-reset", 0);
}
if ((getprop("/ECAM/warning-phase") == 6 and getprop("/ECAM/ldg-memo-flipflop") and getprop("/ECAM/ldg-memo-2200-flipflop")) or getprop("/ECAM/warning-phase") == 7 or getprop("/ECAM/warning-phase") == 8) {
if ((phaseVar == 6 and getprop("/ECAM/ldg-memo-flipflop") and getprop("/ECAM/ldg-memo-2200-flipflop")) or phaseVar == 7 or phaseVar == 8) {
ldgMemoLine1.active = 1;
ldgMemoLine2.active = 1;
ldgMemoLine3.active = 1;
@ -1213,7 +1335,7 @@ var messages_config_memo = func {
var messages_memo = func {
phaseVar = phaseNode.getValue();
if (getprop("/services/fuel-truck/enable") == 1 and leftMsgNode.getValue() != "TO-MEMO" and leftMsgNode.getValue() != "LDG-MEMO") {
if (getprop("/services/fuel-truck/enable") == 1) {
refuelg.active = 1;
} else {
refuelg.active = 0;
@ -1225,25 +1347,25 @@ var messages_memo = func {
gnd_splrs.active = 0;
}
if (getprop("/controls/lighting/seatbelt-sign") == 1 and leftMsgNode.getValue() != "TO-MEMO" and leftMsgNode.getValue() != "LDG-MEMO") {
if (getprop("/controls/lighting/seatbelt-sign") == 1) {
seatbelts.active = 1;
} else {
seatbelts.active = 0;
}
if (getprop("/controls/lighting/no-smoking-sign") == 1 and leftMsgNode.getValue() != "TO-MEMO" and leftMsgNode.getValue() != "LDG-MEMO") { # should go off after takeoff assuming switch is in auto due to old logic from the days when smoking was allowed!
if (getprop("/controls/lighting/no-smoking-sign") == 1) { # should go off after takeoff assuming switch is in auto due to old logic from the days when smoking was allowed!
nosmoke.active = 1;
} else {
nosmoke.active = 0;
}
if (getprop("/controls/lighting/strobe") == 0 and getprop("/gear/gear[1]/wow") == 0 and leftMsgNode.getValue() != "TO-MEMO" and leftMsgNode.getValue() != "LDG-MEMO") { # todo: use gear branch properties
if (getprop("/controls/lighting/strobe") == 0 and getprop("/gear/gear[1]/wow") == 0) { # todo: use gear branch properties
strobe_lt_off.active = 1;
} else {
strobe_lt_off.active = 0;
}
if (getprop("/consumables/fuel/total-fuel-lbs") < 6000 and leftMsgNode.getValue() != "TO-MEMO" and leftMsgNode.getValue() != "LDG-MEMO") { # assuming US short ton 2000lb
if (getprop("/consumables/fuel/total-fuel-lbs") < 6000) { # assuming US short ton 2000lb
fob_3T.active = 1;
} else {
fob_3T.active = 0;
@ -1259,13 +1381,13 @@ var messages_memo = func {
var messages_right_memo = func {
phaseVar = phaseNode.getValue();
if (phaseVar >= 3 and phaseVar <= 5) {
if (FWC.Timer.toInhibitOutput.getValue() == 1) {
to_inhibit.active = 1;
} else {
to_inhibit.active = 0;
}
if (phaseVar >= 7 and phaseVar <= 7) {
if (FWC.Timer.ldgInhibitOutput.getValue() == 1) {
ldg_inhibit.active = 1;
} else {
ldg_inhibit.active = 0;

View file

@ -162,9 +162,59 @@ var warnings = std.Vector.new([
var emerconfigMaxSpeed = warning.new(msg: " MAX SPEED........320 KT", colour: "c"),
# DC EMER CONFIG
var dcEmerconfig = warning.new(msg: "ELEC DC EMER CONFIG", colour: "a", aural: 1, light: 0, hasSubmsg: 1),
var dcEmerconfig = warning.new(msg: "ELEC DC EMER CONFIG", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var dcEmerconfigManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
# DC BUS 1 OR 2 FAULT
var dcBus12Fault = warning.new(msg: "ELEC DC BUS 1+2 FAULT", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var dcBus12FaultBlower = warning.new(msg: " -BLOWER............OVRD", colour: "c"),
var dcBus12FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
var dcBus12FaultBaroRef = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
var dcBus12FaultIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var dcBus12FaultBrking = warning.new(msg: " MAX BRK........1000 PSI", colour: "c"),
# AC ESS BUS FAULT
var AcBusEssFault = warning.new(msg: "ELEC AC ESS BUS FAULT", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var AcBusEssFaultFeed = warning.new(msg: " -AC ESS FEED.......ALTN", colour: "c"),
var AcBusEssFaultAtc = warning.new(msg: " -ATC..............SYS 2", colour: "c"),
# AC BUS 1 FAULT
var AcBus1Fault = warning.new(msg: "ELEC AC BUS 1 FAULT", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var AcBus1FaultBlower = warning.new(msg: " -BLOWER............OVRD", colour: "c"),
# DC ESS BUS FAULT
var DcEssBusFault = warning.new(msg: "ELEC DC ESS BUS FAULT", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var DcEssBusFaultRadio = warning.new(msg: " -VHF 2 OR 3.........USE", colour: "c"),
var DcEssBusFaultRadio2 = warning.new(msg: " -AUDIO SWTG......SELECT", colour: "c"),
var DcEssBusFaultBaro = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
var DcEssBusFaultGPWS = warning.new(msg: " -GPWS...............OFF", colour: "c"),
# AC BUS 2 FAULT
var AcBus2Fault = warning.new(msg: "ELEC AC BUS 2 FAULT", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var AcBus2FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
# DC BUS 1 FAULT
var dcBus1Fault = warning.new(msg: "ELEC DC BUS 1 FAULT", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var dcBus1FaultBlower = warning.new(msg: " -BLOWER............OVRD", colour: "c"),
var dcBus1FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
# DC BUS 2 FAULT
var dcBus2Fault = warning.new(msg: "ELEC DC BUS 2 FAULT", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var dcBus2FaultAirData = warning.new(msg: " -AIR DATA SWTG......F/O", colour: "c"),
var dcBus2FaultBaro = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
# DC BAT BUS FAULT
var dcBusBatFault = warning.new(msg: "ELEC DC BAT BUS FAULT", colour: "a", aural: 1, light: 1),
# DC ESS BUS SHED
var dcBusEssShed = warning.new(msg: "ELEC DC ESS BUS SHED", colour: "a", aural: 1, light: 1),
var dcBusEssShedExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
var dcBusEssShedIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
# AC ESS BUS SHED
var acBusEssShed = warning.new(msg: "ELEC DC ESS BUS SHED", colour: "a", aural: 1, light: 1),
var acBusEssShedAtc = warning.new(msg: " -ATC..............SYS 2", colour: "c"),
# FCU fault
var fcuFault = warning.new(msg: "AUTO FLT FCU 1+2 FAULT", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var fcuFaultBaro = warning.new(msg: " -PFD BARO REF: STD ONLY", colour: "c"),
@ -189,6 +239,11 @@ var warnings = std.Vector.new([
var apuLoopBFault = warning.new(msg: "APU FIRE LOOP B FAULT", colour: "a"),
var crgFwdFireDetFault = warning.new(msg: "FWD CRG DET FAULT", colour: "a"),
var crgAftFireDetFault = warning.new(msg: "AFT CRG DET FAULT", colour: "a"),
# Recall
var recallNormal = warning.new(msg: " ", colour: "g", hasSubmsg: 1),
var recallNormal1 = warning.new(msg: " ", colour: "g", hasSubmsg: 1),
var recallNormal2 = warning.new(msg: " NORMAL", colour: "g", hasSubmsg: 1),
]);
var configmemos = std.Vector.new([
@ -216,7 +271,7 @@ var leftmemos = std.Vector.new([
var fob_3T = warning.new(msg: "FOB BELOW 3T" ),
var gpws_flap_mode_off = warning.new(msg: "GPWS FLAP MODE OFF" ),
var atc_datalink_stby = warning.new(msg: "ATC DATALINK STBY" ), # Not yet implemented
var company_datalink_stby = warning.new(msg: "COMPANY DATALINK STBY") # Not yet implemented
var company_datalink_stby = warning.new(msg: "COMPANY DATALINK STBY"), # Not yet implemented
]);
# Right E/WD

View file

@ -21,6 +21,12 @@ var n1lim = nil;
var gear_agl_cur = nil;
var FWC = {
Btn: {
clr: props.globals.initNode("/ECAM/buttons/clear-btn", 0, "BOOL"),
recall: props.globals.initNode("/ECAM/buttons/recall-btn", 0, "BOOL"),
recallStsNormal: props.globals.initNode("/ECAM/buttons/recall-status-normal", 0, "BOOL"),
recallStsNormalOutput: props.globals.initNode("/ECAM/buttons/recall-status-normal-output", 0, "BOOL"),
},
Monostable: {
phase1: props.globals.initNode("/ECAM/phases/monostable/phase-1-300", 0, "BOOL"),
phase5: props.globals.initNode("/ECAM/phases/monostable/phase-5", 0, "BOOL"),
@ -43,20 +49,29 @@ var FWC = {
phase10Set: props.globals.initNode("/ECAM/phases/flipflop/phase-10-set", 0, "BOOL"),
phase10Reset: props.globals.initNode("/ECAM/phases/flipflop/phase-10-reset", 0, "BOOL"),
phase10Output: props.globals.initNode("/ECAM/phases/flipflop/phase-10-output", 0, "BOOL"),
recallSet: props.globals.initNode("/ECAM/flipflop/recall-set", 0, "BOOL"),
recallReset: props.globals.initNode("/ECAM/flipflop/recall-reset", 0, "BOOL"),
recallOutput: props.globals.initNode("/ECAM/flipflop/recall-output", 0, "BOOL"),
},
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"),
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"),
toInhibitOutput: props.globals.getNode("/ECAM/phases/timer/to-inhibit-output"),
ldgInhibitOutput: props.globals.getNode("/ECAM/phases/timer/ldg-inhibit-output"),
},
speed80: props.globals.initNode("/ECAM/phases/speed-gt-80", 0, "BOOL"),
toPower: props.globals.initNode("/ECAM/phases/to-power-set", 0, "BOOL"),
};
var phaseLoop = func() {
if (pts.Sim.Replay.replayActive.getBoolValue()) { return; }
gear_agl = pts.Position.gearAglFt.getValue();
gear_comp = pts.Gear.compression[1].getValue();
myPhase = pts.ECAM.fwcWarningPhase.getValue();
@ -115,14 +130,14 @@ var phaseLoop = func() {
if (eng == "IAE") {
eprlim = getprop("/controls/engines/epr-limit");
if ((!getprop("/controls/engines/engine[0]/reverser") and !getprop("/controls/engines/engine[1]/reverser")) and (abs(eng1epr - eprlim) <= 0.005 or abs(eng2epr - eprlim) <= 0.005)) {
if ((!getprop("/controls/engines/engine[0]/reverser") and !getprop("/controls/engines/engine[1]/reverser")) and (((pts.Controls.Engines.Engine1.throttle.getValue() >= 0.8 or pts.Controls.Engines.Engine2.throttle.getValue() >= 0.8) and pts.PTSSystems.Thrust.flex.getBoolValue()) or (pts.Controls.Engines.Engine1.throttle.getValue() == 1.0 or pts.Controls.Engines.Engine2.throttle.getValue() == 1.0))) {
FWC.toPower.setBoolValue(1);
} else {
FWC.toPower.setBoolValue(0);
}
} else {
n1lim = getprop("/controls/engines/n1-limit");
if ((!getprop("/controls/engines/engine[0]/reverser") and !getprop("/controls/engines/engine[1]/reverser")) and (abs(eng1n1 - n1lim) <= 0.1 or abs(eng2n1 - n1lim) <= 0.1)) {
if ((!getprop("/controls/engines/engine[0]/reverser") and !getprop("/controls/engines/engine[1]/reverser")) and (((pts.Controls.Engines.Engine1.throttle.getValue() >= 0.8 or pts.Controls.Engines.Engine2.throttle.getValue() >= 0.8) and pts.PTSSystems.Thrust.flex.getBoolValue()) or (pts.Controls.Engines.Engine1.throttle.getValue() == 1.0 or pts.Controls.Engines.Engine2.throttle.getValue() == 1.0))) {
FWC.toPower.setBoolValue(1);
} else {
FWC.toPower.setBoolValue(0);
@ -229,13 +244,42 @@ var phaseLoop = func() {
if ((gnd and twoEngOff and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) {
setPhase(10);
}
# FWC Inhibiting
myPhase = pts.ECAM.fwcWarningPhase.getValue();
if (myPhase >= 3 and myPhase <= 5 and !FWC.Flipflop.recallOutput.getValue()) {
FWC.Timer.toInhibit.setValue(1);
} else {
FWC.Timer.toInhibit.setValue(0);
}
if (myPhase == 7 or myPhase == 8 and !FWC.Flipflop.recallOutput.getValue()) {
FWC.Timer.ldgInhibit.setValue(1);
} else {
FWC.Timer.ldgInhibit.setValue(0);
}
}
var _lastPhase = nil;
var setPhase = func(newPhase) {
if (newPhase >= 1 and newPhase <= 10 and _lastPhase != newPhase) {
pts.ECAM.fwcWarningPhase.setValue(newPhase);
print("Phase " ~ newPhase);
FWC.Flipflop.recallReset.setValue(1);
settimer(func() {
if (FWC.Flipflop.recallReset.getValue() == 1) { # catch unexpected error, trying something new here
FWC.Flipflop.recallReset.setValue(0);
} else {
die("Exception in ECAM-phases.nas, line 271");
}
}, 0.1);
_lastPhase = newPhase;
}
}
setlistener("/ECAM/buttons/recall-btn", func() {
FWC.Flipflop.recallSet.setValue(FWC.Btn.recall.getBoolValue());
}, 0, 0);
var clrBtn = func(btn) {
FWC.Btn.clr.setValue(btn);
}

View file

@ -10,10 +10,12 @@ var Controls = {
Engine1: {
cutoffSw: props.globals.getNode("/controls/engines/engine[0]/cutoff-switch"),
firePb: props.globals.getNode("/controls/engines/engine[0]/fire-btn"),
throttle: props.globals.getNode("/controls/engines/engine[0]/throttle"),
},
Engine2: {
cutoffSw: props.globals.getNode("/controls/engines/engine[1]/cutoff-switch"),
firePb: props.globals.getNode("/controls/engines/engine[1]/fire-btn"),
throttle: props.globals.getNode("/controls/engines/engine[1]/throttle"),
},
},
};
@ -54,9 +56,18 @@ var Position = {
};
var Sim = {
Replay: {
replayActive: props.globals.getNode("/sim/replay/replay-state"),
},
Time: {
elapsedSec: props.globals.getNode("/sim/time/elapsed-sec"),
},
};
var PTSSystems = {
Thrust: {
flex: props.globals.getNode("/systems/thrust/lim-flex"),
},
};
setprop("/systems/acconfig/property-tree-setup-loaded", 1);

View file

@ -695,6 +695,42 @@
</test>
</switch>
<switch name="/systems/electrical/relay/galley-bus-1-shed-switch/contact-pos">
<default value="1"/>
<test logic="OR" value="0">
/controls/electrical/switches/galley eq 1
<test logic="AND">
/systems/electrical/relay/gen-1-glc/output ne 0
/systems/electrical/relay/gen-2-glc/output ne 0
</test>
</test>
</switch>
<switch name="/systems/electrical/relay/galley-bus-1-shed-switch/output">
<default value="0"/>
<test value="/systems/electrical/bus/ac-1">
/systems/electrical/relay/galley-bus-1-shed-switch/contact-pos eq 1
</test>
</switch>
<switch name="/systems/electrical/relay/galley-bus-2-shed-switch/contact-pos">
<default value="1"/>
<test logic="OR" value="0">
/controls/electrical/switches/galley eq 1
<test logic="AND">
/systems/electrical/relay/gen-1-glc/output ne 0
/systems/electrical/relay/gen-2-glc/output ne 0
</test>
</test>
</switch>
<switch name="/systems/electrical/relay/galley-bus-2-shed-switch/output">
<default value="0"/>
<test value="/systems/electrical/bus/ac-2">
/systems/electrical/relay/galley-bus-2-shed-switch/contact-pos eq 1
</test>
</switch>
<!-- AC Bus 1 -->
<switch name="/systems/electrical/bus/ac-1-src">
<description>Tell which source is being used for priority purpose</description>
@ -1047,6 +1083,29 @@
</test>
</switch>
<!-- DC Service Bus -->
<switch name="/systems/electrical/relay/dc-svc-bus-contactor-tr/contact-pos"> <!-- TODO: via 1PX CB on 124VU -->
<default value="0"/>
</switch>
<switch name="/systems/electrical/relay/dc-svc-bus-contactor-tr/output">
<default value="0"/>
<test value="/systems/electrical/relay/tr-contactor-2/output">
/systems/electrical/relay/dc-svc-bus-contactor-tr/contact-pos eq 1
</test>
</switch>
<switch name="/systems/electrical/relay/dc-svc-bus-contactor-bus-2/contact-pos"> <!-- TODO: via 7PN CB on 124VU -->
<default value="1"/>
</switch>
<switch name="/systems/electrical/relay/dc-svc-bus-contactor-bus-2/output">
<default value="0"/>
<test value="/systems/electrical/bus/dc-2">
/systems/electrical/relay/dc-svc-bus-contactor-bus-2/contact-pos eq 1
</test>
</switch>
<!-- DC Bus 1 -->
<switch name="/systems/electrical/bus/dc-1-src">
<description>Tell which source is being used for priority purpose</description>
@ -1103,6 +1162,15 @@
</function>
</fcs_function>
<fcs_function name="/systems/electrical/bus/dc-service-bus">
<function>
<max>
<property>/systems/electrical/relay/dc-svc-bus-contactor-tr/output</property>
<property>/systems/electrical/relay/dc-svc-bus-contactor-bus-2/output</property>
</max>
</function>
</fcs_function>
<!-- DC Bus Tie DC Bus Relays (continued) -->
<!-- These outputs are from the DC Bus to the DC Bus Tie -->
<switch name="/systems/electrical/relay/dc-bus-tie-dc-1/output-tie">
@ -1392,5 +1460,4 @@
</channel>
<!-- TODO: TR should have a fault which should include failure OR loss of input power. It remains latched at fault and can only be reset on ground. -->
</system>

View file

@ -4,7 +4,7 @@
<system name="A320: FWC">
<channel name="FWC">
<channel name="FWC" execrate="8">
<actuator name="/ECAM/phases/timer/eng1idle-output">
<description>Timer for the ECAM system</description>
@ -26,6 +26,20 @@
<rate_limit sense="decr">100</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>
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.33</rate_limit> <!-- 3 seconds -->
</actuator>
<actuator name="/ECAM/phases/timer/ldg-inhibit-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/phases/timer/ldg-inhibit</input>
<rate_limit sense="decr">100</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.33</rate_limit> <!-- 3 seconds -->
</actuator>
</channel>
</system>

View file

@ -530,6 +530,17 @@
<output>/ECAM/phases/flipflop/phase-10-output</output>
</flipflop>
<flipflop>
<type>RS</type>
<S>
<property>/ECAM/flipflop/recall-set</property>
</S>
<R>
<property>/ECAM/flipflop/recall-reset</property>
</R>
<output>/ECAM/flipflop/recall-output</output>
</flipflop>
<flipflop>
<type>monostable</type>
<time>
@ -576,6 +587,20 @@
<output>/ECAM/phases/monostable/phase-7-output</output>
</flipflop>
<flipflop>
<type>monostable</type>
<time>
<value>5.0</value>
</time>
<S>
<property>/ECAM/buttons/recall-status-normal</property>
</S>
<R>
<property>/ECAM/buttons/clear-btn</property>
</R>
<output>/ECAM/buttons/recall-status-normal-output</output>
</flipflop>
<!-- falling edge detector - take inverse of following -->
<flipflop>
<type>monostable</type>