diff --git a/Nasal/ECAM/ECAM-controller.nas b/Nasal/ECAM/ECAM-controller.nas index 22dadf2e..9375bb14 100644 --- a/Nasal/ECAM/ECAM-controller.nas +++ b/Nasal/ECAM/ECAM-controller.nas @@ -89,6 +89,11 @@ var warningNodes = { rudTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-range"), dc2FuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-2-fuel-consumption-increased"), dc2FMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-2-fms-predictions-unreliable"), + thrLeversNotSet: props.globals.initNode("/ECAM/warnings/logic/eng/thr-lever-not-set"), + revSet: props.globals.initNode("/ECAM/warnings/logic/eng/reverse-set"), + eng1Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-fail"), + eng2Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-fail"), + phase5Trans: props.globals.initNode("/ECAM/warnings/logic/eng/phase-5-output"), }, Timers: { apuFaultOutput: props.globals.initNode("/ECAM/warnings/timer/apu-fault-output"), diff --git a/Nasal/ECAM/ECAM-logic.nas b/Nasal/ECAM/ECAM-logic.nas index 32185ee9..ebba38ce 100644 --- a/Nasal/ECAM/ECAM-logic.nas +++ b/Nasal/ECAM/ECAM-logic.nas @@ -1160,6 +1160,240 @@ var messages_priority_3 = func { var messages_priority_2 = func { phaseVar2 = phaseNode.getValue(); + + if ((phaseVar2 == 2 or phaseVar2 == 3 or phaseVar2 == 9) and warningNodes.Logic.thrLeversNotSet.getValue() and engThrustLvrNotSet.clearFlag == 0) { + engThrustLvrNotSet.active = 1; + + if (fadec.Thrust.limFlex.getValue()) { + engThrustLvrNotSetMCT.active = 1; + ECAM_controller.warningReset(engThrustLvrNotSetMCT); + } else { + engThrustLvrNotSetTO.active = 1; + ECAM_controller.warningReset(engThrustLvrNotSetTO); + } + } else { + ECAM_controller.warningReset(engThrustLvrNotSet); + ECAM_controller.warningReset(engThrustLvrNotSetMCT); + ECAM_controller.warningReset(engThrustLvrNotSetTO); + } + + if ((phaseVar2 >= 5 and phaseVar2 <= 7) and warningNodes.Logic.revSet.getValue() and engRevSet.clearFlag == 0) { + engRevSet.active = 1; + + if (engRevSetLevers.clearFlag == 0) { + engRevSetLevers.active = 1; + } else { + ECAM_controller.warningReset(engRevSetLevers); + } + } else { + ECAM_controller.warningReset(engRevSet); + ECAM_controller.warningReset(engRevSetLevers); + } + + if (warningNodes.Logic.eng1Fail.getValue() and eng1Fail.clearFlag == 0) { + eng1Fail.active = 1; + + if (0 == 1 and thrustMalfunction1.clearFlag == 0) { # OVER THR PROTECT + thrustMalfunction1.active = 1; + } else { + ECAM_controller.warningReset(thrustMalfunction1); + } + + if (0 == 1 and shaftFailure1.clearFlag == 0) { # PW ONLY + shaftFailure1.active = 1; + } else { + ECAM_controller.warningReset(shaftFailure1); + } + + if (phaseVar2 != 2 and phaseVar2 != 9 and pts.Controls.Engines.startSw.getValue() != 2 and eng1FailModeSel.clearFlag == 0) { # and not stall and not EGT protect + eng1FailModeSel.active = 1; + } else { + ECAM_controller.warningReset(eng1FailModeSel); + } + + if (phaseVar2 != 4 and warningNodes.Logic.phase5Trans.getValue() == 1) { + if (eng1FailThrLvrIdle.clearFlag == 0 and pts.Controls.Engines.Engine.throttleLever[0].getValue() > 0.01) { + eng1FailThrLvrIdle.active = 1; + } else { + ECAM_controller.warningReset(eng1FailThrLvrIdle); + } + + if (eng1FailNoRelight.clearFlag == 0 and phaseVar2 != 2 and phaseVar2 != 9 and pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) { + eng1FailNoRelight.active = 1; + } else { + ECAM_controller.warningReset(eng1FailNoRelight); + } + + if (eng1FailMasterOff.clearFlag == 0 and pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) { + eng1FailMasterOff.active = 1; + } else { + ECAM_controller.warningReset(eng1FailMasterOff); + } + + if (eng1FailDamage.clearFlag == 0 and systems.fireButtons[0].getValue() == 0) { + eng1FailDamage.active = 1; + } else { + ECAM_controller.warningReset(eng1FailDamage); + } + + if (eng1FailFirePB.clearFlag == 0 and systems.fireButtons[0].getValue() == 0) { + eng1FailFirePB.active = 1; + } else { + ECAM_controller.warningReset(eng1FailFirePB); + } + + if (eng1FailAgent1DischT.clearFlag == 0 and !systems.extinguisherBottles.vector[0].lightProp.getValue()) { + eng1FailAgent1DischT.active = 1; + } else { + ECAM_controller.warningReset(eng1FailAgent1DischT); + } + + if (eng1FailAgent1Disch.clearFlag == 0 and !systems.extinguisherBottles.vector[0].lightProp.getValue()) { + eng1FailAgent1Disch.active = 1; + } else { + ECAM_controller.warningReset(eng1FailAgent1Disch); + } + + if (eng1FailNoDamage.clearFlag == 0) { + eng1FailNoDamage.active = 1; + } else { + ECAM_controller.warningReset(eng1FailNoDamage); + } + + if (eng1FailRelight.clearFlag == 0) { + eng1FailRelight.active = 1; + } else { + ECAM_controller.warningReset(eng1FailRelight); + } + } else { + ECAM_controller.warningReset(eng1FailThrLvrIdle); + ECAM_controller.warningReset(eng1FailNoRelight); + ECAM_controller.warningReset(eng1FailMasterOff); + ECAM_controller.warningReset(eng1FailDamage); + ECAM_controller.warningReset(eng1FailFirePB); + ECAM_controller.warningReset(eng1FailAgent1DischT); + ECAM_controller.warningReset(eng1FailAgent1Disch); + ECAM_controller.warningReset(eng1FailNoDamage); + ECAM_controller.warningReset(eng1FailRelight); + } + } else { + ECAM_controller.warningReset(eng1Fail); + ECAM_controller.warningReset(thrustMalfunction1); + ECAM_controller.warningReset(shaftFailure1); + ECAM_controller.warningReset(eng1FailModeSel); + ECAM_controller.warningReset(eng1FailThrLvrIdle); + ECAM_controller.warningReset(eng1FailNoRelight); + ECAM_controller.warningReset(eng1FailMasterOff); + ECAM_controller.warningReset(eng1FailDamage); + ECAM_controller.warningReset(eng1FailFirePB); + ECAM_controller.warningReset(eng1FailAgent1DischT); + ECAM_controller.warningReset(eng1FailAgent1Disch); + ECAM_controller.warningReset(eng1FailNoDamage); + ECAM_controller.warningReset(eng1FailRelight); + } + + if (warningNodes.Logic.eng2Fail.getValue() and eng2Fail.clearFlag == 0) { + eng2Fail.active = 1; + + if (0 == 1 and thrustMalfunction2.clearFlag == 0) { # OVER THR PROTECT + thrustMalfunction2.active = 1; + } else { + ECAM_controller.warningReset(thrustMalfunction2); + } + + if (0 == 1 and shaftFailure2.clearFlag == 0) { # PW ONLY + shaftFailure2.active = 1; + } else { + ECAM_controller.warningReset(shaftFailure2); + } + + if (phaseVar2 != 2 and phaseVar2 != 9 and pts.Controls.Engines.startSw.getValue() != 2 and eng2FailModeSel.clearFlag == 0) { # and not stall and not EGT protect + eng2FailModeSel.active = 1; + } else { + ECAM_controller.warningReset(eng2FailModeSel); + } + + if (phaseVar2 != 4 and warningNodes.Logic.phase5Trans.getValue() == 1) { + if (eng2FailThrLvrIdle.clearFlag == 0 and pts.Controls.Engines.Engine.throttleLever[1].getValue() > 0.01) { + eng2FailThrLvrIdle.active = 1; + } else { + ECAM_controller.warningReset(eng2FailThrLvrIdle); + } + + if (eng2FailNoRelight.clearFlag == 0 and phaseVar2 != 2 and phaseVar2 != 9 and pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) { + eng2FailNoRelight.active = 1; + } else { + ECAM_controller.warningReset(eng2FailNoRelight); + } + + if (eng2FailMasterOff.clearFlag == 0 and pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) { + eng2FailMasterOff.active = 1; + } else { + ECAM_controller.warningReset(eng2FailMasterOff); + } + + if (eng2FailDamage.clearFlag == 0 and systems.fireButtons[1].getValue() == 0) { + eng2FailDamage.active = 1; + } else { + ECAM_controller.warningReset(eng2FailDamage); + } + + if (eng2FailFirePB.clearFlag == 0 and systems.fireButtons[1].getValue() == 0) { + eng2FailFirePB.active = 1; + } else { + ECAM_controller.warningReset(eng2FailFirePB); + } + + if (eng2FailAgent1DischT.clearFlag == 0 and !systems.extinguisherBottles.vector[2].lightProp.getValue()) { + eng2FailAgent1DischT.active = 1; + } else { + ECAM_controller.warningReset(eng2FailAgent1DischT); + } + + if (eng2FailAgent1Disch.clearFlag == 0 and !systems.extinguisherBottles.vector[2].lightProp.getValue()) { + eng2FailAgent1Disch.active = 1; + } else { + ECAM_controller.warningReset(eng2FailAgent1Disch); + } + + if (eng2FailNoDamage.clearFlag == 0) { + eng2FailNoDamage.active = 1; + } else { + ECAM_controller.warningReset(eng2FailNoDamage); + } + + if (eng2FailRelight.clearFlag == 0) { + eng2FailRelight.active = 1; + } else { + ECAM_controller.warningReset(eng2FailRelight); + } + } else { + ECAM_controller.warningReset(eng2FailThrLvrIdle); + ECAM_controller.warningReset(eng2FailNoRelight); + ECAM_controller.warningReset(eng2FailMasterOff); + ECAM_controller.warningReset(eng2FailDamage); + ECAM_controller.warningReset(eng2FailFirePB); + ECAM_controller.warningReset(eng2FailAgent1DischT); + ECAM_controller.warningReset(eng2FailAgent1Disch); + ECAM_controller.warningReset(eng2FailNoDamage); + ECAM_controller.warningReset(eng2FailRelight); + } + } else { + ECAM_controller.warningReset(eng2Fail); + ECAM_controller.warningReset(thrustMalfunction2); + ECAM_controller.warningReset(shaftFailure2); + ECAM_controller.warningReset(eng2FailModeSel); + ECAM_controller.warningReset(eng2FailThrLvrIdle); + ECAM_controller.warningReset(eng2FailNoRelight); + ECAM_controller.warningReset(eng2FailMasterOff); + ECAM_controller.warningReset(eng2FailDamage); + ECAM_controller.warningReset(eng2FailFirePB); + ECAM_controller.warningReset(eng2FailAgent1DischT); + ECAM_controller.warningReset(eng2FailAgent1Disch); + ECAM_controller.warningReset(eng2FailNoDamage); + ECAM_controller.warningReset(eng2FailRelight); + } + # DC EMER CONFIG if (!systems.ELEC.EmerElec.getValue() and systems.ELEC.Bus.dcEss.getValue() < 25 and systems.ELEC.Bus.dc1.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25 and phaseVar2 != 4 and phaseVar2 != 8 and dcEmerconfig.clearFlag == 0) { dcEmerconfig.active = 1; diff --git a/Nasal/ECAM/ECAM-messages.nas b/Nasal/ECAM/ECAM-messages.nas index f87ba9f4..41df8920 100644 --- a/Nasal/ECAM/ECAM-messages.nas +++ b/Nasal/ECAM/ECAM-messages.nas @@ -10,6 +10,7 @@ # Left E/WD var warnings = std.Vector.new([ + # LEVEL 3 WARN var stall = warning.new(msg: "", aural: 2), var flap_not_zero = warning.new(msg: "F/CTL FLAP LVR NOT ZERO", colour: "r", aural: 0, light: 0, isMainMsg: 1), @@ -47,12 +48,12 @@ var warnings = std.Vector.new([ var eng1FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"), var eng1FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"), var eng1FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"), - var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", isMainMsg: 1), + var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w"), var eng1FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"), # ENG 1 FIRE (ground) var eng1FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"), - var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", isMainMsg: 1), + var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"), var eng1FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"), var eng1FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"), var eng1FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"), @@ -70,12 +71,12 @@ var warnings = std.Vector.new([ var eng2FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"), var eng2FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"), var eng2FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"), - var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", isMainMsg: 1), + var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w"), var eng2FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"), # ENG 2 FIRE (ground) var eng2FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"), - var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", isMainMsg: 1), + var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"), var eng2FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"), var eng2FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"), var eng2FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"), @@ -94,7 +95,7 @@ var warnings = std.Vector.new([ var ADR123FaultBUSSF = warning.new(msg: " -FO BKUP SPD/ALT.....ON", colour: "c"), var ADR123FaultADRPB = warning.new(msg: " -ADR 1+2+3 P/B......OFF", colour: "c"), var ADR123FaultSPD = warning.new(msg: " -SPD......FLY THE GREEN", colour: "c"), - var ADR123FaultAOADISAG = warning.new(msg: " •IF AOA DISAGREE: ", colour: "w", isMainMsg: 1), + var ADR123FaultAOADISAG = warning.new(msg: " •IF AOA DISAGREE: ", colour: "w"), var ADR123FaultBUSSINOP = warning.new(msg: " BKUP SPD/ALT.DO NOT USE", colour: "c"), var ADR123FaultSTBY = warning.new(msg: " -STBY INST.MAY BE UNREL", colour: "c"), var ADR123FaultPROC = warning.new(msg: " -ALL ADR OFF PROC.APPLY", colour: "c"), @@ -123,7 +124,7 @@ var warnings = std.Vector.new([ var excessCabAlt = warning.new(msg: "CAB PR EXCESS CAB ALT", colour: "r", aural: 0, light: 0, isMainMsg: 1), var excessCabAltMask = warning.new(msg: " -CREW OXY MASKS.....USE", colour: "c"), var excessCabAltSigns = warning.new(msg: " -SIGNS...............ON", colour: "c"), - var excessCabAltEmerD = warning.new(msg: " •EMER DESCENT:", colour: "w", isMainMsg: 1), + var excessCabAltEmerD = warning.new(msg: " •EMER DESCENT:", colour: "w"), var excessCabAltDES = warning.new(msg: " -DESCENT.......INITIATE", colour: "c"), var excessCabAltTHRLVR = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"), var excessCabAltSPDBRK = warning.new(msg: " -SPD BRK...........FULL", colour: "c"), @@ -133,20 +134,20 @@ var warnings = std.Vector.new([ var excessCabAltPA = warning.new(msg: " -EMER DES (PA).ANNOUNCE", colour: "c"), var excessCabAltXPDR = warning.new(msg: " -XPDR 7700.....CONSIDER", colour: "c"), var excessCabAltMEA = warning.new(msg: " MAX FL.....100/MEA-MORA", colour: "c"), - var excessCabAltCabAlt = warning.new(msg: " •IF CAB ALT>14000 FT:", colour: "w", isMainMsg: 1), + var excessCabAltCabAlt = warning.new(msg: " •IF CAB ALT>14000 FT:", colour: "w"), var excessCabAltMasks = warning.new(msg: " -PAX OXY MASKS...MAN ON", colour: "c"), # ENG 1 OIL LO PR var eng1OilLoPr = warning.new(msg: "ENG 1 OIL LO PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1), - var eng1OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w", isMainMsg: 1), - var eng1OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w", isMainMsg: 1), + var eng1OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w"), + var eng1OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w"), var eng1OilLoPrThrot = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"), var eng1OilLoPrMaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"), # ENG 2 OIL LO PR var eng2OilLoPr = warning.new(msg: "ENG 2 OIL LO PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1), - var eng2OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w", isMainMsg: 1), - var eng2OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w", isMainMsg: 1), + var eng2OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w"), + var eng2OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w"), var eng2OilLoPrThrot = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"), var eng2OilLoPrMaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"), @@ -161,7 +162,7 @@ var warnings = std.Vector.new([ var gearNotDownLocked = warning.new(msg: "L/G GEAR NOT DOWNLOCKED", colour: "r", aural: 0, light: 0, isMainMsg: 1), var gearNotDownLockedRec = warning.new(msg: " -L/G LEVER......RECYCLE", colour: "c"), - var gearNotDownLockedWork = warning.new(msg: " •IF UNSUCCESSFUL:", colour: "w", isMainMsg: 1), + var gearNotDownLockedWork = warning.new(msg: " •IF UNSUCCESSFUL:", colour: "w"), var gearNotDownLocked120 = warning.new(msg: " AFTER 120S:", colour: "w"), var gearNotDownLockedGrav = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"), @@ -171,17 +172,17 @@ var warnings = std.Vector.new([ # Cargo smoke var cargoSmokeFwd = warning.new(msg: "SMOKE FWD CARGO SMOKE", colour: "r", aural: 0, light: 0, isMainMsg: 1), var cargoSmokeFwdFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"), - var cargoSmokeFwdGrdClsd = warning.new(msg: " •IF FWD CRG CLSD:", colour: "w", isMainMsg: 1), + var cargoSmokeFwdGrdClsd = warning.new(msg: " •IF FWD CRG CLSD:", colour: "w"), var cargoSmokeFwdAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"), - var cargoSmokeFwdGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w", isMainMsg: 1), - var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w", isMainMsg: 1), + var cargoSmokeFwdGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w"), + var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"), var cargoSmokeFwdDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"), var cargoSmokeAft = warning.new(msg: "SMOKE AFT CARGO SMOKE", colour: "r", aural: 0, light: 0, isMainMsg: 1), var cargoSmokeAftFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"), - var cargoSmokeAftGrdClsd = warning.new(msg: " •IF AFT CRG CLSD:", colour: "w", isMainMsg: 1), + var cargoSmokeAftGrdClsd = warning.new(msg: " •IF AFT CRG CLSD:", colour: "w"), var cargoSmokeAftAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"), - var cargoSmokeAftGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w", isMainMsg: 1), - var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w", isMainMsg: 1), + var cargoSmokeAftGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w"), + var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"), var cargoSmokeAftDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"), # Lavatory SMOKE @@ -256,6 +257,46 @@ var warnings = std.Vector.new([ var airBleedLeak = warning.new(msg: "AIR BLEED LEAK ", colour: "r", aural: 0, light: 0, isMainMsg: 1), var airBleedLeakShut = warning.new(msg: " -X BLEED..........SHUT", colour: "c"), + # LEVEL 2 WARN + # THR LEVERS NOT SET + var engThrustLvrNotSet = warning.new(msg: "ENG THR LEVERS NOT SET ", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var engThrustLvrNotSetMCT = warning.new(msg: " -THR LEVERS ....MCT/FLX", colour: "c"), + var engThrustLvrNotSetTO = warning.new(msg: " -THR LEVERS.......TO/GA", colour: "c"), + + # REV SET + var engRevSet = warning.new(msg: "ENG REV SET ", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var engRevSetLevers = warning.new(msg: " -THR LEVER......FWD THR", colour: "c"), + + # ENG 1 FAIL + var eng1Fail = warning.new(msg: "ENG 1 FAIL ", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var thrustMalfunction1 = warning.new(msg: " THRUST MALFUNCTION ", colour: "a"), + var shaftFailure1 = warning.new(msg: " SHAFT FAILURE ", colour: "a"), + var eng1FailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"), + var eng1FailThrLvrIdle = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"), + var eng1FailNoRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w"), + var eng1FailMasterOff = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"), + var eng1FailDamage = warning.new(msg: " IF DAMAGE : ", colour: "w"), + var eng1FailFirePB = warning.new(msg: " -ENG 1 FIRE P/B....PUSH", colour: "c"), + var eng1FailAgent1DischT = warning.new(msg: " -AGENT1 AFTER 10S.DISCH", colour: "c"), + var eng1FailAgent1Disch = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"), + var eng1FailNoDamage = warning.new(msg: " IF NO DAMAGE : ", colour: "w"), + var eng1FailRelight = warning.new(msg: " -ENG 1 RELIGHT.CONSIDER", colour: "c"), + + # ENG 2 FAIL + var eng2Fail = warning.new(msg: "ENG 2 FAIL ", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var thrustMalfunction2 = warning.new(msg: " THRUST MALFUNCTION ", colour: "a"), + var shaftFailure2 = warning.new(msg: " SHAFT FAILURE ", colour: "a"), + var eng2FailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"), + var eng2FailThrLvrIdle = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"), + var eng2FailNoRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w"), + var eng2FailMasterOff = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"), + var eng2FailDamage = warning.new(msg: " IF DAMAGE : ", colour: "w"), + var eng2FailFirePB = warning.new(msg: " -ENG 2 FIRE P/B....PUSH", colour: "c"), + var eng2FailAgent1DischT = warning.new(msg: " -AGENT2 AFTER 10S.DISCH", colour: "c"), + var eng2FailAgent1Disch = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"), + var eng2FailNoDamage = warning.new(msg: " IF NO DAMAGE : ", colour: "w"), + var eng2FailRelight = warning.new(msg: " -ENG 2 RELIGHT.CONSIDER", colour: "c"), + # DC EMER CONFIG var dcEmerconfig = warning.new(msg: "ELEC DC EMER CONFIG", colour: "a", aural: 1, light: 1, isMainMsg: 1), var dcEmerconfigManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"), diff --git a/Systems/a320-fwc.xml b/Systems/a320-fwc.xml index 655814bc..0f633b54 100644 --- a/Systems/a320-fwc.xml +++ b/Systems/a320-fwc.xml @@ -2183,6 +2183,245 @@ + + + + /ECAM/warnings/logic/eng/eng-1-thr-lvr-abv-idle eq 1 + /ECAM/warnings/logic/eng/eng-2-thr-lvr-abv-idle eq 1 + + + + + + + /engines/engine[0]/n2-actual ge 59.4 + /controls/engines/engine[0]/throttle-pos ge 0.60 + /controls/engines/engine[0]/throttle-pos lt 0.78 + + + + + /ECAM/warnings/logic/eng/thr-lever-1-mcl-mct + 120 + 0.25 + + + + + + /engines/engine[0]/n2-actual ge 59.4 + /controls/engines/engine[0]/throttle-pos ge 0.60 + /controls/engines/engine[0]/throttle-pos lt 0.83 + + + + + /ECAM/warnings/logic/eng/thr-lever-1-mct + 120 + 0.25 + + + + + + /engines/engine[1]/n2-actual ge 59.4 + /controls/engines/engine[1]/throttle-pos ge 0.60 + /controls/engines/engine[1]/throttle-pos lt 0.78 + + + + + /ECAM/warnings/logic/eng/thr-lever-2-mcl-mct + 120 + 0.25 + + + + + + /engines/engine[1]/n2-actual ge 59.4 + /controls/engines/engine[1]/throttle-pos ge 0.60 + /controls/engines/engine[1]/throttle-pos lt 0.83 + + + + + /ECAM/warnings/logic/eng/thr-lever-2-mct + 120 + 0.25 + + + + + + /ECAM/warnings/logic/eng/new-retard-logic ne 1 + + + /systems/thrust/lim-flex eq 0 + + /ECAM/warnings/logic/eng/thr-lever-2-mct-output eq 1 + /ECAM/warnings/logic/eng/thr-lever-2-mcl-mct-output eq 1 + + + + /systems/thrust/lim-flex eq 1 + /ECAM/warnings/logic/eng/thr-lever-2-mcl-mct-output eq 1 + + + /systems/thrust/lim-flex eq 0 + + /ECAM/warnings/logic/eng/thr-lever-1-mct-output eq 1 + /ECAM/warnings/logic/eng/thr-lever-1-mcl-mct-output eq 1 + + + + /systems/thrust/lim-flex eq 1 + /ECAM/warnings/logic/eng/thr-lever-1-mcl-mct-output eq 1 + + + + + + + + + /ECAM/timer/ground-calc eq 0 + + /gear/gear[1]/rollspeed-ms lt 36 + /ECAM/warning-phase ne 7 + + + /controls/engines/engine[0]/throttle-rev gt 0.0 + /controls/engines/engine[1]/throttle-rev gt 0.0 + + + + + + + + /engines/engine[0]/n2-actual ge 59.4 + + + + + /ECAM/warnings/logic/eng/eng-1-fail-cond-set-input + 120 + 0.3333 + + + + + + /controls/engines/engine[0]/cutoff-switch eq 1 + /controls/engines/engine[0]/fire-btn eq 1 + + + + + + + /engines/engine[1]/n2-actual ge 59.4 + + + + + /ECAM/warnings/logic/eng/eng-2-fail-cond-set-input + 120 + 0.3333 + + + + + + /controls/engines/engine[1]/cutoff-switch eq 1 + /controls/engines/engine[1]/fire-btn eq 1 + + + + + + + /controls/engines/engine[0]/cutoff-switch eq 0 + /controls/engines/engine[0]/fire-btn eq 0 + /engines/engine[0]/n2-actual lt 59.4 + /ECAM/warnings/logic/eng/eng-1-fail-cond eq 1 + + + + + + + /controls/engines/engine[1]/cutoff-switch eq 0 + /controls/engines/engine[1]/fire-btn eq 0 + /engines/engine[1]/n2-actual lt 59.4 + /ECAM/warnings/logic/eng/eng-2-fail-cond eq 1 + + + + + + + /engines/engine[0]/n2-actual ge 59.4 + /ECAM/dual-failure-enabled eq 1 + + + + + + + /engines/engine[1]/n2-actual ge 59.4 + /ECAM/dual-failure-enabled eq 1 + + + + + /controls/engines/engine[0]/cutoff-switch + 120 + 0.01666666666 + + + + /controls/engines/engine[1]/cutoff-switch + 120 + 0.01666666666 + + + + + + + /ECAM/warnings/logic/stall/phase-4-output eq 0 + /ECAM/warnings/logic/stall/phase-4 eq 0 + /ECAM/warning-phase eq 5 + + + + + + + + + /ECAM/warnings/logic/eng/phase-5-output eq 1 + /ECAM/warnings/logic/eng/phase-5-output-2 eq 1 + /ECAM/warnings/logic/eng/eng-1-master-60-sec eq 0 + + /ECAM/warnings/logic/eng/eng-1-fail-output eq 1 + + + + + + + + /ECAM/warnings/logic/eng/phase-5-output eq 1 + /ECAM/warnings/logic/eng/phase-5-output-2 eq 1 + /ECAM/warnings/logic/eng/eng-2-master-60-sec eq 0 + + /ECAM/warnings/logic/eng/eng-2-fail-output eq 1 + + + diff --git a/Systems/ecam-proprules.xml b/Systems/ecam-proprules.xml index d5a55c1a..0cc0f736 100644 --- a/Systems/ecam-proprules.xml +++ b/Systems/ecam-proprules.xml @@ -1081,4 +1081,73 @@ /ECAM/warnings/fctl/park-brk-config-output + + + RS + + /ECAM/warnings/logic/eng/eng-1-fail-cond-set + + + /ECAM/warnings/logic/eng/eng-1-fail-cond-reset + + /ECAM/warnings/logic/eng/eng-1-fail-cond + + + + RS + + /ECAM/warnings/logic/eng/eng-2-fail-cond-set + + + /ECAM/warnings/logic/eng/eng-2-fail-cond-reset + + /ECAM/warnings/logic/eng/eng-2-fail-cond + + + + RS + + /ECAM/warnings/logic/eng/eng-1-fail-set + + + /ECAM/warnings/logic/eng/eng-1-fail-reset + + /ECAM/warnings/logic/eng/eng-1-fail-output + + + + RS + + /ECAM/warnings/logic/eng/eng-2-fail-set + + + /ECAM/warnings/logic/eng/eng-2-fail-reset + + /ECAM/warnings/logic/eng/eng-2-fail-output + + + + monostable + true + + + /ECAM/warnings/logic/eng/phase-5 + + /ECAM/warnings/logic/eng/phase-5-output + + + + + monostable + true + + + /ECAM/warnings/logic/eng/phase-5-output + + /ECAM/warnings/logic/eng/phase-5-output-2 +