diff --git a/Models/Instruments/PFD/PFD.nas b/Models/Instruments/PFD/PFD.nas index 24d86731..4835a9f8 100644 --- a/Models/Instruments/PFD/PFD.nas +++ b/Models/Instruments/PFD/PFD.nas @@ -513,7 +513,7 @@ var canvas_PFD_base = { me["FMA_Middle1"].hide(); me["FMA_Middle2"].hide(); - if (fbw_curlaw == 2 and wow1.getValue() == 0) { + if (ecam.directLaw.active) { me["FMA_ctr_msg"].setText("USE MAN PITCH TRIM"); me["FMA_ctr_msg"].setColor(0.7333,0.3803,0); me["FMA_ctr_msg"].show(); @@ -534,7 +534,7 @@ var canvas_PFD_base = { } else { me["FMA_combined"].hide(); me["FMA_combined_box"].hide(); - if (fbw_curlaw == 2 and wow1.getValue() == 0) { + if (ecam.directLaw.active) { me["FMA_ctr_msg"].setText("USE MAN PITCH TRIM"); me["FMA_ctr_msg"].setColor(0.7333,0.3803,0); me["FMA_Middle1"].hide(); diff --git a/Nasal/ECAM/ECAM-controller.nas b/Nasal/ECAM/ECAM-controller.nas index 85dadb04..6461b5e7 100644 --- a/Nasal/ECAM/ECAM-controller.nas +++ b/Nasal/ECAM/ECAM-controller.nas @@ -74,6 +74,8 @@ var warningNodes = { blueYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/blue-yellow-fuel-consumpt"), greenYellow: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-failure"), greenYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-fuel-consumpt"), + leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault"), + rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault"), }, Timers: { apuFaultOutput: props.globals.initNode("/ECAM/warnings/timer/apu-fault-output"), @@ -94,6 +96,8 @@ var warningNodes = { eng1AiceNotOpen: props.globals.initNode("/ECAM/warnings/timer/eng-aice-1-closed-output"), eng2AiceNotOpen: props.globals.initNode("/ECAM/warnings/timer/eng-aice-2-closed-output"), LRElevFault: props.globals.initNode("/ECAM/warnings/fctl/lrElevFault-output"), + altnLaw: props.globals.initNode("/ECAM/warnings/fctl/altn-law-output"), + directLaw: props.globals.initNode("/ECAM/warnings/fctl/direct-law-output"), waiLhiPr: props.globals.initNode("/ECAM/warnings/timer/wing-hi-pr-left"), waiRhiPr: props.globals.initNode("/ECAM/warnings/timer/wing-hi-pr-right"), pack1Fault: props.globals.initNode("/ECAM/warnings/timer/pack-1-fault-2"), @@ -104,6 +108,8 @@ var warningNodes = { yawDamper1Fault: props.globals.initNode("/ECAM/warnings/timer/yaw-damper-1-fault"), yawDamper2Fault: props.globals.initNode("/ECAM/warnings/timer/yaw-damper-2-fault"), navTerrFault: props.globals.initNode("/ECAM/warnings/timer/nav-gpws-terr-fault"), + leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault-output"), + rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault-output"), }, Flipflops: { apuGenFault: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault"), diff --git a/Nasal/ECAM/ECAM-logic.nas b/Nasal/ECAM/ECAM-logic.nas index 6c08e655..5a3ce8d8 100644 --- a/Nasal/ECAM/ECAM-logic.nas +++ b/Nasal/ECAM/ECAM-logic.nas @@ -875,23 +875,6 @@ var messages_priority_3 = func { ECAM_controller.warningReset(emerconfigVent); } - if (emerconfigAltn.clearFlag == 0) { - emerconfigAltn.active = 1; - } else { - ECAM_controller.warningReset(emerconfigAltn); - } - - if (emerconfigProt.clearFlag == 0) { - emerconfigProt.active = 1; - } else { - ECAM_controller.warningReset(emerconfigProt); - } - - if (emerconfigMaxSpeed.clearFlag == 0) { - emerconfigMaxSpeed.active = 1; - } else { - ECAM_controller.warningReset(emerconfigMaxSpeed); - } } else { ECAM_controller.warningReset(emerconfig); ECAM_controller.warningReset(emerconfigMinRat); @@ -909,9 +892,6 @@ var messages_priority_3 = func { ECAM_controller.warningReset(emerconfigBusTie2); ECAM_controller.warningReset(emerconfigAPU); ECAM_controller.warningReset(emerconfigVent); - ECAM_controller.warningReset(emerconfigAltn); - ECAM_controller.warningReset(emerconfigProt); - ECAM_controller.warningReset(emerconfigMaxSpeed); } if (hydBYloPr.clearFlag == 0 and phaseVar3 != 4 and phaseVar3 != 5 and warningNodes.Logic.blueYellow.getValue()) { @@ -1290,6 +1270,109 @@ var messages_priority_2 = func { ECAM_controller.warningReset(apuGenfaultGen3); } + if (lElevFault.clearFlag == 0 and warningNodes.Timers.leftElevFail.getValue() and phaseVar2 != 4 and phaseVar2 != 5) { + lElevFault.active = 1; + if (lElevFaultCare.clearFlag == 0) { + lElevFaultCare.active = 1; + } else { + ECAM_controller.warningReset(lElevFaultCare); + } + if (lElevFaultPitch.clearFlag == 0) { + lElevFaultPitch.active = 1; + } else { + ECAM_controller.warningReset(lElevFaultPitch); + } + } else { + ECAM_controller.warningReset(lElevFault); + ECAM_controller.warningReset(lElevFaultCare); + ECAM_controller.warningReset(lElevFaultPitch); + } + + if (rElevFault.clearFlag == 0 and warningNodes.Timers.rightElevFail.getValue() and phaseVar2 != 4 and phaseVar2 != 5) { + rElevFault.active = 1; + if (rElevFaultCare.clearFlag == 0) { + rElevFaultCare.active = 1; + } else { + ECAM_controller.warningReset(rElevFaultCare); + } + if (rElevFaultPitch.clearFlag == 0) { + rElevFaultPitch.active = 1; + } else { + ECAM_controller.warningReset(rElevFaultPitch); + } + } else { + ECAM_controller.warningReset(rElevFault); + ECAM_controller.warningReset(rElevFaultCare); + ECAM_controller.warningReset(rElevFaultPitch); + } + + if (directLaw.clearFlag == 0 and warningNodes.Timers.directLaw.getValue() and phaseVar2 != 4 and phaseVar2 != 5 and phaseVar2 != 7 and phaseVar2 != 8) { + directLaw.active = 1; + directLawProt.active = 1; + if (directLawMaxSpeed.clearFlag == 0 and !fbw.tripleADRFail and pts.Gear.position[1].getValue() == 1) { + directLawMaxSpeed.active = 1; + } else { + ECAM_controller.warningReset(directLawMaxSpeed); + } + if (directLawTrim.clearFlag == 0 and (systems.HYD.Psi.green.getValue() >= 1500 or systems.HYD.Psi.yellow.getValue() >= 1500) and !fbw.FBW.Failures.ths.getValue()) { + directLawTrim.active = 1; + } else { + ECAM_controller.warningReset(directLawTrim); + } + if (directLawCare.clearFlag == 0 and (fbw.tripleADRFail or pts.Gear.position[1].getValue() == 1)) { + directLawCare.active = 1; + } else { + ECAM_controller.warningReset(directLawCare); + } + if (directLawSpdBrk.clearFlag == 0 and !fbw.tripleADRFail and pts.Gear.position[1].getValue() == 1) { + directLawSpdBrk.active = 1; + } else { + ECAM_controller.warningReset(directLawSpdBrk); + } + if (directLawSpdBrk2.clearFlag == 0 and fbw.tripleADRFail) { + directLawSpdBrk2.active = 1; + } else { + ECAM_controller.warningReset(directLawSpdBrk2); + } + } else { + ECAM_controller.warningReset(directLaw); + ECAM_controller.warningReset(directLawProt); + ECAM_controller.warningReset(directLawMaxSpeed); + ECAM_controller.warningReset(directLawTrim); + ECAM_controller.warningReset(directLawCare); + ECAM_controller.warningReset(directLawSpdBrk); + ECAM_controller.warningReset(directLawSpdBrk2); + } + + if (altnLaw.clearFlag == 0 and warningNodes.Timers.altnLaw.getValue() and phaseVar2 != 4 and phaseVar2 != 5 and phaseVar2 != 7 and phaseVar2 != 8) { + altnLaw.active = 1; + altnLawProt.active = 1; + if (altnLawMaxSpeed.clearFlag == 0 and altnLawMaxSpeed2.clearFlag == 0 and !fbw.tripleADRFail) { + if (!(getprop("/ECAM/warnings/hyd/green-abnorm-lo-pr") and (getprop("/ECAM/warnings/hyd/blue-abnorm-lo-pr") or getprop("/ECAM/warnings/hyd/yellow-abnorm-lo-pr")))) { + altnLawMaxSpeed.active = 1; + ECAM_controller.warningReset(altnLawMaxSpeed2); + } else { + altnLawMaxSpeed2.active = 1; + ECAM_controller.warningReset(altnLawMaxSpeed); + } + } else { + ECAM_controller.warningReset(altnLawMaxSpeed); + ECAM_controller.warningReset(altnLawMaxSpeed2); + } + + if (altnLawMaxSpdBrk.clearFlag == 0 and (fbw.tripleADRFail or warningNodes.Logic.leftElevFail.getValue() or warningNodes.Logic.rightElevFail.getValue())) { + altnLawMaxSpdBrk.active = 1; + } else { + ECAM_controller.warningReset(altnLawMaxSpdBrk); + } + } else { + ECAM_controller.warningReset(altnLaw); + ECAM_controller.warningReset(altnLawProt); + ECAM_controller.warningReset(altnLawMaxSpeed); + ECAM_controller.warningReset(altnLawMaxSpeed2); + ECAM_controller.warningReset(altnLawMaxSpdBrk); + } + if ((athr_offw.clearFlag == 0) and athrWarn.getValue() == 2 and phaseVar2 != 4 and phaseVar2 != 8 and phaseVar2 != 10) { athr_offw.active = 1; athr_offw_1.active = 1; diff --git a/Nasal/ECAM/ECAM-messages.nas b/Nasal/ECAM/ECAM-messages.nas index 7edc9e76..5354529c 100644 --- a/Nasal/ECAM/ECAM-messages.nas +++ b/Nasal/ECAM/ECAM-messages.nas @@ -155,9 +155,6 @@ var warnings = std.Vector.new([ var emerconfigBusTie2 = warning.new(msg: " -BUS TIE...........AUTO", colour: "c"), var emerconfigAPU = warning.new(msg: " -APU (IF AVAIL)...START", colour: "c"), var emerconfigVent = warning.new(msg: " -BLOWER + EXTRACT..OVRD", colour: "c"), - var emerconfigAltn = warning.new(msg: "F/CTL ALTN LAW", colour: "a"), - var emerconfigProt = warning.new(msg: " (PROT LOST)", colour: "a"), - var emerconfigMaxSpeed = warning.new(msg: " MAX SPEED........320 KT", colour: "c"), # B + Y LO PR var hydBYloPr = warning.new(msg: "HYD B+Y SYS LO PR", colour: "r", aural: 0, light: 0, isMainMsg: 1), @@ -260,10 +257,36 @@ var warnings = std.Vector.new([ var gen2faultGen3 = warning.new(msg: "-GEN 2..............OFF", colour: "c"), # APU GEN FAULT - var apuGenfault = warning.new(msg: "ELEC APU GEN FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), - var apuGenfaultGen = warning.new(msg: "-APU GEN....OFF THEN ON", colour: "c"), - var apuGenfaultGen2 = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"), - var apuGenfaultGen3 = warning.new(msg: "-APU GEN............OFF", colour: "c"), + var apuGenfault = warning.new(msg: "ELEC APU GEN FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var apuGenfaultGen = warning.new(msg: "-APU GEN....OFF THEN ON", colour: "c"), + var apuGenfaultGen2 = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"), + var apuGenfaultGen3 = warning.new(msg: "-APU GEN............OFF", colour: "c"), + + # L ELEV FAULT + var lElevFault = warning.new(msg: "F/CTL L ELEV FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var lElevFaultCare = warning.new(msg: " MANEUVER WITH CARE", colour: "c"), + var lElevFaultPitch = warning.new(msg: " FOR GA:MAX PITCH 15 DEG", colour: "c"), + + # R ELEV FAULT + var rElevFault = warning.new(msg: "F/CTL R ELEV FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var rElevFaultCare = warning.new(msg: " MANEUVER WITH CARE", colour: "c"), + var rElevFaultPitch = warning.new(msg: " FOR GA:MAX PITCH 15 DEG", colour: "c"), + + # DIRECT LAW + var directLaw = warning.new(msg: "F/CTL DIRECT LAW", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var directLawProt = warning.new(msg: " (PROT LOST)", colour: "a"), + var directLawMaxSpeed = warning.new(msg: " MAX SPEED........320/.77", colour: "c"), + var directLawTrim = warning.new(msg: " -MAN PITCH TRIM.....USE", colour: "c"), + var directLawCare = warning.new(msg: " MANEUVER WITH CARE", colour: "c"), + var directLawSpdBrk = warning.new(msg: " USE SPD BRK WITH CARE", colour: "c"), + var directLawSpdBrk2 = warning.new(msg: " SPD BRK.......DO NOT USE", colour: "c"), + + # ALTN LAW + var altnLaw = warning.new(msg: "F/CTL ALTN LAW", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var altnLawProt = warning.new(msg: " (PROT LOST)", colour: "a"), + var altnLawMaxSpeed = warning.new(msg: " MAX SPEED........320 KT", colour: "c"), + var altnLawMaxSpeed2 = warning.new(msg: " MAX SPEED........320/.77", colour: "c"), + var altnLawMaxSpdBrk = warning.new(msg: " SPD BRK.......DO NOT USE", colour: "c"), # Autothrust var athr_offw = warning.new(msg: "AUTO FLT A/THR OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1), @@ -275,7 +298,7 @@ var warnings = std.Vector.new([ # TCAS FAULT var tcasFault = warning.new(msg: "NAV TCAS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), - var tcasStby = warning.new(msg: "NAV TCAS STBY", colour: "a", aural: 1, light: 1, isMainMsg: 1), + var tcasStby = warning.new(msg: "NAV TCAS STBY", colour: "a", aural: 1, light: 1, isMainMsg: 1), var gpwsFault = warning.new(msg: "NAV GPWS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), var gpwsFaultOff = warning.new(msg: "-GPWS...............OFF", colour: "c"), var gpwsTerrFault = warning.new(msg: "NAV GPWS TERR DET FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1), diff --git a/Systems/a320-fwc.xml b/Systems/a320-fwc.xml index c2282eaa..c56a936b 100644 --- a/Systems/a320-fwc.xml +++ b/Systems/a320-fwc.xml @@ -2025,7 +2025,7 @@ - + @@ -2048,6 +2048,117 @@ 3.33333333333 + + + + + + /systems/fctl/elac1 eq 0 + /systems/fctl/sec1 eq 0 + + /systems/hydraulic/blue-psi lt 1500 + + + + /systems/fctl/elac2 eq 0 + /systems/fctl/sec2 eq 0 + + /systems/hydraulic/green-psi lt 1500 + + + + + + + + /systems/hydraulic/blue-psi ge 1500 + /systems/hydraulic/green-psi ge 1500 + /systems/electrical/bus/dc-2 ge 25 + /ECAM/warnings/fctl/lrElevFault ne 1 + + /controls/fctl/switches/elac1 eq 1 + /controls/fctl/switches/elac2 eq 1 + /controls/fctl/switches/sec1 eq 1 + /controls/fctl/switches/sec2 eq 1 + + /ECAM/warnings/fctl/leftElevFault-cond eq 1 + + + + + /ECAM/warnings/fctl/leftElevFault + 120 + 3.33333333333 + + + + + + + + /systems/fctl/elac1 eq 0 + /systems/fctl/sec1 eq 0 + + /systems/hydraulic/blue-psi lt 1500 + + + + /systems/fctl/elac2 eq 0 + /systems/fctl/sec2 eq 0 + + /systems/hydraulic/yellow-psi lt 1500 + + + + + + + + /systems/hydraulic/blue-psi ge 1500 + /systems/hydraulic/yellow-psi ge 1500 + /systems/electrical/bus/dc-2 ge 25 + /ECAM/warnings/fctl/lrElevFault ne 1 + + /controls/fctl/switches/elac1 eq 1 + /controls/fctl/switches/elac2 eq 1 + /controls/fctl/switches/sec1 eq 1 + /controls/fctl/switches/sec2 eq 1 + + /ECAM/warnings/fctl/rightElevFault-cond eq 1 + + + + + /ECAM/warnings/fctl/rightElevFault + 120 + 3.33333333333 + + + + + + /ECAM/warning-phase ne 1 + /ECAM/warning-phase ne 10 + /it-fbw/law eq 1 + + + + + /ECAM/warnings/fctl/altn-law + 120 + 3.33333333333 + + + + + + + /ECAM/warning-phase ne 1 + /ECAM/warning-phase ne 10 + /it-fbw/law eq 2 + + +