diff --git a/A320-main.xml b/A320-main.xml index e61b898f..9d8cc622 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -1020,7 +1020,7 @@ - + 16.582 diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas index 8d6cbd12..7c7dcee5 100644 --- a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas @@ -8,6 +8,7 @@ var lowerECAM_apu = nil; var lowerECAM_eng1 = nil; var lowerECAM_eng = nil; +var lowerECAM_fctl = nil; var lowerECAM_display = nil; var page = "eng"; setprop("/systems/electrical/extra/apu-load", 0); @@ -22,8 +23,21 @@ setprop("/ECAM/Lower/Oil-QT[0]", 0); setprop("/ECAM/Lower/Oil-QT[1]", 0); setprop("/ECAM/Lower/Oil-PSI[0]", 0); setprop("/ECAM/Lower/Oil-PSI[1]", 0); +setprop("/ECAM/Lower/elevator-ind-left", 0); +setprop("/ECAM/Lower/elevator-ind-right", 0); +setprop("/ECAM/Lower/elevator-trim-deg", 0); setprop("/environment/temperature-degc", 0); setprop("/FMGC/internal/gw", 0); +setprop("/controls/flight/spoiler-l1-failed", 0); +setprop("/controls/flight/spoiler-l2-failed", 0); +setprop("/controls/flight/spoiler-l3-failed", 0); +setprop("/controls/flight/spoiler-l4-failed", 0); +setprop("/controls/flight/spoiler-l5-failed", 0); +setprop("/controls/flight/spoiler-r1-failed", 0); +setprop("/controls/flight/spoiler-r2-failed", 0); +setprop("/controls/flight/spoiler-r3-failed", 0); +setprop("/controls/flight/spoiler-r4-failed", 0); +setprop("/controls/flight/spoiler-r5-failed", 0); var canvas_lowerECAM_base = { init: func(canvas_group, file) { @@ -52,6 +66,7 @@ var canvas_lowerECAM_base = { lowerECAM_apu.page.show(); lowerECAM_eng1.page.hide(); lowerECAM_eng.page.hide(); + lowerECAM_fctl.page.hide(); } else if (page == "eng") { lowerECAM_apu.page.hide(); if (getprop("/options/EIS2") == 1) { @@ -61,15 +76,23 @@ var canvas_lowerECAM_base = { lowerECAM_eng1.page.show(); lowerECAM_eng.page.hide(); } + lowerECAM_fctl.page.hide(); + } else if (page == "fctl") { + lowerECAM_eng1.page.hide(); + lowerECAM_eng.page.hide(); + lowerECAM_apu.page.hide(); + lowerECAM_fctl.page.show(); } else { lowerECAM_apu.page.hide(); lowerECAM_eng1.page.hide(); lowerECAM_eng.page.hide(); + lowerECAM_fctl.page.hide(); } } else { lowerECAM_apu.page.hide(); lowerECAM_eng1.page.hide(); lowerECAM_eng.page.hide(); + lowerECAM_fctl.page.hide(); } settimer(func me.update(), 0.02); @@ -249,6 +272,383 @@ var canvas_lowerECAM_eng = { }, }; + +var canvas_lowerECAM_fctl = { + new: func(canvas_group, file) { + var m = { parents: [canvas_lowerECAM_fctl , canvas_lowerECAM_base] }; + m.init(canvas_group, file); + + return m; + }, + getKeys: func() { + return ["ailL","ailR","elevL","elevR","PTcc","PT","PTupdn","GW","TAT","SAT","elac1","elac2","sec1","sec2","sec3","ailLblue","ailRblue","elevLblue","elevRblue","rudderblue","ailLgreen","ailRgreen","elevLgreen","ruddergreen","PTgreen","elevRyellow","rudderyellow","PTyellow","rudder","spdbrkblue","spdbrkgreen","spdbrkyellow","spoiler1Rex","spoiler1Rrt","spoiler2Rex","spoiler2Rrt","spoiler3Rex","spoiler3Rrt","spoiler4Rex","spoiler4Rrt","spoiler5Rex","spoiler5Rrt","spoiler1Lex","spoiler1Lrt","spoiler2Lex","spoiler2Lrt","spoiler3Lex","spoiler3Lrt","spoiler4Lex","spoiler4Lrt","spoiler5Lex","spoiler5Lrt" + ,"spoiler1Rf","spoiler2Rf","spoiler3Rf","spoiler4Rf","spoiler5Rf","spoiler1Lf","spoiler2Lf","spoiler3Lf","spoiler4Lf","spoiler5Lf","ailLscale","ailRscale"]; + }, + update: func() { + var blue_psi=getprop("/systems/hydraulic/blue-psi"); + var green_psi=getprop("/systems/hydraulic/green-psi"); + var yellow_psi=getprop("/systems/hydraulic/yellow-psi"); + + + #PITCH TRIM + me["PT"].setText(sprintf("%2.1f", getprop("/ECAM/Lower/elevator-trim-deg"))); + #me["PT-decimal"].setText(sprintf("%s", int(10*math.mod(getprop("/ECAM/Lower/elevator-trim-deg"),1)))); + if(getprop("/controls/flight/elevator-trim")<0){ + me["PTupdn"].setText(sprintf("UP")); + }else if(getprop("/controls/flight/elevator-trim")>0){ + me["PTupdn"].setText(sprintf("DN")); + }else{ + me["PTupdn"].setText(sprintf("")); + } + #Pitch Trim numbers become amber if green+yellow hydraulic pressure decreases + if(green_psi<2900 and yellow_psi<2900){ + me["PT"].setColor(1,1,0); + me["PTupdn"].setColor(1,1,0); + me["PTcc"].setColor(1,1,0); + }else{ + me["PT"].setColor(0,1,0); + me["PTupdn"].setColor(0,1,0); + me["PTcc"].setColor(0,1,0); + } + + #AILERONS + me["ailL"].setTranslation(0,getprop("/controls/flight/aileron-left")*(-100)); + me["ailR"].setTranslation(0,getprop("/controls/flight/aileron-right")*100); + #Becomes amber if no green and blue servojack + if(blue_psi<2900 and green_psi<2900){ + me["ailL"].setColor(1,1,0); + me["ailR"].setColor(1,1,0); + me["ailLscale"].setColor(1,1,0); + me["ailRscale"].setColor(1,1,0); + }else{ + me["ailL"].setColor(0,1,0); + me["ailR"].setColor(0,1,0); + me["ailLscale"].setColor(1,1,1); + me["ailRscale"].setColor(1,1,1); + } + + #ELEVATORS + me["elevL"].setTranslation(0,getprop("/ECAM/Lower/elevator-ind-left")*100); + me["elevR"].setTranslation(0,getprop("/ECAM/Lower/elevator-ind-right")*100); + #Index becomes amber when both actuators don't work + if(blue_psi<2900 and green_psi<2900){ + me["elevL"].setColor(1,1,0); + }else{ + me["elevL"].setColor(0,1,0); + } + + if(blue_psi<2900 and yellow_psi<2900){ + me["elevR"].setColor(1,1,0); + }else{ + me["elevR"].setColor(0,1,0); + } + + #RUDDER + me["rudder"].setRotation(getprop("/controls/flight/rudder")*(-0.6)); + #Indicator becomes amber if green yellow and blue hydraulic pressure is low + if(blue_psi<2900 and yellow_psi<2900 and green_psi<2900){ + me["rudder"].setColor(1,1,0); + }else{ + me["rudder"].setColor(0,1,0); + } + + #SPOILERS + if(getprop("/controls/flight/spoiler-r1")<0.083){ + me["spoiler1Rex"].hide(); + me["spoiler1Rrt"].show(); + }else{ + me["spoiler1Rrt"].hide(); + me["spoiler1Rex"].show(); + } + if(getprop("/controls/flight/spoiler-r2")<0.083){ + me["spoiler2Rex"].hide(); + me["spoiler2Rrt"].show(); + }else{ + me["spoiler2Rrt"].hide(); + me["spoiler2Rex"].show(); + } + if(getprop("/controls/flight/spoiler-r3")<0.083){ + me["spoiler3Rex"].hide(); + me["spoiler3Rrt"].show(); + }else{ + me["spoiler3Rrt"].hide(); + me["spoiler3Rex"].show(); + } + if(getprop("/controls/flight/spoiler-r4")<0.083){ + me["spoiler4Rex"].hide(); + me["spoiler4Rrt"].show(); + }else{ + me["spoiler4Rrt"].hide(); + me["spoiler4Rex"].show(); + } + if(getprop("/controls/flight/spoiler-r5")<0.083){ + me["spoiler5Rex"].hide(); + me["spoiler5Rrt"].show(); + }else{ + me["spoiler5Rrt"].hide(); + me["spoiler5Rex"].show(); + } + + + + if(getprop("/controls/flight/spoiler-l1")<0.083){ + me["spoiler1Lex"].hide(); + me["spoiler1Lrt"].show(); + }else{ + me["spoiler1Lrt"].hide(); + me["spoiler1Lex"].show(); + } + if(getprop("/controls/flight/spoiler-l2")<0.083){ + me["spoiler2Lex"].hide(); + me["spoiler2Lrt"].show(); + }else{ + me["spoiler2Lrt"].hide(); + me["spoiler2Lex"].show(); + } + if(getprop("/controls/flight/spoiler-l3")<0.083){ + me["spoiler3Lex"].hide(); + me["spoiler3Lrt"].show(); + }else{ + me["spoiler3Lrt"].hide(); + me["spoiler3Lex"].show(); + } + if(getprop("/controls/flight/spoiler-l4")<0.083){ + me["spoiler4Lex"].hide(); + me["spoiler4Lrt"].show(); + }else{ + me["spoiler4Lrt"].hide(); + me["spoiler4Lex"].show(); + } + if(getprop("/controls/flight/spoiler-l5")<0.083){ + me["spoiler5Lex"].hide(); + me["spoiler5Lrt"].show(); + }else{ + me["spoiler5Lrt"].hide(); + me["spoiler5Lex"].show(); + } + + #STBY CODE - SPOILER FAIL + if(getprop("/controls/flight/spoiler-r1-failed")){ + me["spoiler1Rex"].setColor(1,1,0); + me["spoiler1Rrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-r1")<0.083){ + me["spoiler1Rf"].show(); + }else{ + me["spoiler1Rf"].hide(); + } + + }else{ + me["spoiler1Rex"].setColor(0,1,0); + me["spoiler1Rrt"].setColor(0,1,0); + me["spoiler1Rf"].hide(); + } + if(getprop("/controls/flight/spoiler-r2-failed")){ + me["spoiler2Rex"].setColor(1,1,0); + me["spoiler2Rrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-r2")<0.083){ + me["spoiler2Rf"].show(); + }else{ + me["spoiler2Rf"].hide(); + } + + }else{ + me["spoiler2Rex"].setColor(0,1,0); + me["spoiler2Rrt"].setColor(0,1,0); + me["spoiler2Rf"].hide(); + } + if(getprop("/controls/flight/spoiler-r3-failed")){ + me["spoiler3Rex"].setColor(1,1,0); + me["spoiler3Rrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-r3")<0.083){ + me["spoiler3Rf"].show(); + }else{ + me["spoiler3Rf"].hide(); + } + + }else{ + me["spoiler3Rex"].setColor(0,1,0); + me["spoiler3Rrt"].setColor(0,1,0); + me["spoiler3Rf"].hide(); + } + if(getprop("/controls/flight/spoiler-r4-failed")){ + me["spoiler4Rex"].setColor(1,1,0); + me["spoiler4Rrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-r4")<0.083){ + me["spoiler4Rf"].show(); + }else{ + me["spoiler4Rf"].hide(); + } + + }else{ + me["spoiler4Rex"].setColor(0,1,0); + me["spoiler4Rrt"].setColor(0,1,0); + me["spoiler4Rf"].hide(); + } + if(getprop("/controls/flight/spoiler-r5-failed")){ + me["spoiler5Rex"].setColor(1,1,0); + me["spoiler5Rrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-r5")<0.083){ + me["spoiler5Rf"].show(); + }else{ + me["spoiler5Rf"].hide(); + } + + }else{ + me["spoiler5Rex"].setColor(0,1,0); + me["spoiler5Rrt"].setColor(0,1,0); + me["spoiler5Rf"].hide(); + } + + if(getprop("/controls/flight/spoiler-l1-failed")){ + me["spoiler1Lex"].setColor(1,1,0); + me["spoiler1Lrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-l1")<0.083){ + me["spoiler1Lf"].show(); + }else{ + me["spoiler1Lf"].hide(); + } + + }else{ + me["spoiler1Lex"].setColor(0,1,0); + me["spoiler1Lrt"].setColor(0,1,0); + me["spoiler1Lf"].hide(); + } + if(getprop("/controls/flight/spoiler-l2-failed")){ + me["spoiler2Lex"].setColor(1,1,0); + me["spoiler2Lrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-l2")<0.083){ + me["spoiler2Lf"].show(); + }else{ + me["spoiler2Lf"].hide(); + } + + }else{ + me["spoiler2Lex"].setColor(0,1,0); + me["spoiler2Lrt"].setColor(0,1,0); + me["spoiler2Lf"].hide(); + } + if(getprop("/controls/flight/spoiler-l3-failed")){ + me["spoiler3Lex"].setColor(1,1,0); + me["spoiler3Lrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-l3")<0.083){ + me["spoiler3Lf"].show(); + }else{ + me["spoiler3Lf"].hide(); + } + + }else{ + me["spoiler3Lex"].setColor(0,1,0); + me["spoiler3Lrt"].setColor(0,1,0); + me["spoiler3Lf"].hide(); + } + if(getprop("/controls/flight/spoiler-l4-failed")){ + me["spoiler4Lex"].setColor(1,1,0); + me["spoiler4Lrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-l4")<0.083){ + me["spoiler4Lf"].show(); + }else{ + me["spoiler4Lf"].hide(); + } + + }else{ + me["spoiler4Lex"].setColor(0,1,0); + me["spoiler4Lrt"].setColor(0,1,0); + me["spoiler4Lf"].hide(); + } + if(getprop("/controls/flight/spoiler-l5-failed")){ + me["spoiler5Lex"].setColor(1,1,0); + me["spoiler5Lrt"].setColor(1,1,0); + if(getprop("/controls/flight/spoiler-l5")<0.083){ + me["spoiler5Lf"].show(); + }else{ + me["spoiler5Lf"].hide(); + } + + }else{ + me["spoiler5Lex"].setColor(0,1,0); + me["spoiler5Lrt"].setColor(0,1,0); + me["spoiler5Lf"].hide(); + } + + #FLIGHT COMPUTERS + if(getprop("/systems/fctl/elac1")){ + me["elac1"].setColor(0,1,0); + }else{ + me["elac1"].setColor(1,1,0); + } + if(getprop("/systems/fctl/elac2")){ + me["elac2"].setColor(0,1,0); + }else{ + me["elac2"].setColor(1,1,0); + } + if(getprop("/systems/fctl/sec1")){ + me["sec1"].setColor(0,1,0); + }else{ + me["sec1"].setColor(1,1,0); + } + if(getprop("/systems/fctl/sec2")){ + me["sec2"].setColor(0,1,0); + }else{ + me["sec2"].setColor(1,1,0); + } + if(getprop("/systems/fctl/sec3")){ + me["sec3"].setColor(0,1,0); + }else{ + me["sec3"].setColor(1,1,0); + } + + #HYDRAULIC INDICATORS + if(getprop("/systems/hydraulic/blue-psi")>2900){ + me["ailLblue"].setColor(0,1,0); + me["ailRblue"].setColor(0,1,0); + me["elevLblue"].setColor(0,1,0); + me["elevRblue"].setColor(0,1,0); + me["rudderblue"].setColor(0,1,0); + me["spdbrkblue"].setColor(0,1,0); + }else{ + me["ailLblue"].setColor(1,1,0); + me["ailRblue"].setColor(1,1,0); + me["elevLblue"].setColor(1,1,0); + me["elevRblue"].setColor(1,1,0); + me["rudderblue"].setColor(1,1,0); + me["spdbrkblue"].setColor(1,1,0); + } + if(getprop("/systems/hydraulic/green-psi")>2900){ + me["ailLgreen"].setColor(0,1,0); + me["ailRgreen"].setColor(0,1,0); + me["elevLgreen"].setColor(0,1,0); + me["ruddergreen"].setColor(0,1,0); + me["PTgreen"].setColor(0,1,0); + me["spdbrkgreen"].setColor(0,1,0); + }else{ + me["ailLgreen"].setColor(1,1,0); + me["ailRgreen"].setColor(1,1,0); + me["elevLgreen"].setColor(1,1,0); + me["ruddergreen"].setColor(1,1,0); + me["PTgreen"].setColor(1,1,0); + me["spdbrkgreen"].setColor(1,1,0); + } + if(getprop("/systems/hydraulic/yellow-psi")>2900){ + me["elevRyellow"].setColor(0,1,0); + me["rudderyellow"].setColor(0,1,0); + me["PTyellow"].setColor(0,1,0); + me["spdbrkyellow"].setColor(0,1,0); + }else{ + me["elevRyellow"].setColor(1,1,0); + me["rudderyellow"].setColor(1,1,0); + me["PTyellow"].setColor(1,1,0); + me["spdbrkyellow"].setColor(1,1,0); + } + + + + me.updateBottomStatus(); + + settimer(func me.update(), 0.02); + }, +}; + + setlistener("sim/signals/fdm-initialized", func { lowerECAM_display = canvas.new({ "name": "lowerECAM", @@ -258,14 +658,17 @@ setlistener("sim/signals/fdm-initialized", func { }); lowerECAM_display.addPlacement({"node": "lecam.screen"}); var groupApu = lowerECAM_display.createGroup(); + var groupFctl = lowerECAM_display.createGroup(); var groupEng1 = lowerECAM_display.createGroup(); var groupEng = lowerECAM_display.createGroup(); lowerECAM_apu = canvas_lowerECAM_apu.new(groupApu, "Aircraft/A320Family/Models/Instruments/Lower-ECAM/res/apu.svg"); + lowerECAM_fctl = canvas_lowerECAM_fctl.new(groupFctl, "Aircraft/A320Family/Models/Instruments/Lower-ECAM/res/fctl.svg"); lowerECAM_eng1 = canvas_lowerECAM_eng1.new(groupEng1, "Aircraft/A320Family/Models/Instruments/Lower-ECAM/res/eng-eis1.svg"); lowerECAM_eng = canvas_lowerECAM_eng.new(groupEng, "Aircraft/A320Family/Models/Instruments/Lower-ECAM/res/eng-eis2.svg"); lowerECAM_apu.update(); + lowerECAM_fctl.update(); lowerECAM_eng1.update(); lowerECAM_eng.update(); canvas_lowerECAM_base.update(); diff --git a/Models/Instruments/Lower-ECAM/res/fctl.svg b/Models/Instruments/Lower-ECAM/res/fctl.svg new file mode 100644 index 00000000..1fe75874 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/res/fctl.svg @@ -0,0 +1,1257 @@ + + + + + + image/svg+xml + + + + + + + + + + °C + H + °C + LBS + GW + TAT + SAT + + + + + + 25 + 25 + 120000 + F/CTL + + + + + + + + + + + + ELAC + 1 + 2 + 3 + 1 + 2 + + + + + + + + + + + + + + + + + SEC + SPD BRK + PITCH TRIM + + G + + Y + DN + ° + + B + + Y + RUD + AIL + L + AIL + R + + G + + G + B + + B + + G + L + R + + B + + B + + G + + B + + Y + ELEV + ELEV + + + + + 000 + + G + + B + + Y + + + + + + + + + + + + + + + + + + + + + 1 + 1 + 2 + 2 + 3 + 3 + 4 + 4 + 5 + 5 + diff --git a/Systems/lower-ecam.xml b/Systems/lower-ecam.xml index 233922b7..0903640e 100644 --- a/Systems/lower-ecam.xml +++ b/Systems/lower-ecam.xml @@ -170,5 +170,55 @@ /ECAM/Lower/Oil-PSI[1] + + + ELEV L Indication + gain + 1 + + + + /controls/flight/elevator-left + -0.5-1 + 0 0 + 0.5 0.66 +
+
+ + /ECAM/Lower/elevator-ind-left +
+ + ELEV R Indication + gain + 1 + + + + /controls/flight/elevator-right + -0.5-1 + 0 0 + 0.5 0.66 +
+
+ + /ECAM/Lower/elevator-ind-right +
+ + + ELEV Trim Deg + gain + 1 + + + + /controls/flight/elevator-trim + 14 + 0 0 + -1 13.5 +
+
+ + /ECAM/Lower/elevator-trim-deg +