From 86c0a4f06df811b9db115c94227be052aa75ea45 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Wed, 16 Sep 2020 16:59:17 +0100 Subject: [PATCH 1/4] Restore TOO LOW GEAR --- Sounds/GPWS/too-low-gear.wav | Bin 44 -> 129398 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Sounds/GPWS/too-low-gear.wav b/Sounds/GPWS/too-low-gear.wav index 8dbde9545c9f3bc0f0edf6804a28471e5c5cc00f..1d28c9d5eb9018648bbce1907bc20970b2af3571 100644 GIT binary patch literal 129398 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 z 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 delta 20 acmezNiCu?1$kWYDg@IuryCMq%5C8x_-2^KD From 3d613905bee895637a4a52b43af561b9ccca9ff7 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Wed, 16 Sep 2020 19:07:45 +0100 Subject: [PATCH 2/4] Improve Nasal for brake system. Use PTS + more efficient loop. --- A320-main.xml | 13 +- Nasal/Libraries/libraries.nas | 2 + Nasal/Libraries/property-tree-setup.nas | 11 ++ Nasal/Systems/brakesystem.nas | 217 ++++++++++++------------ 4 files changed, 129 insertions(+), 114 deletions(-) diff --git a/A320-main.xml b/A320-main.xml index cf54b960..16a4be3f 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -5,7 +5,11 @@ - + + + 0 + + Josh Davidson/Octal450 (Flight Dynamics, Systems, Displays), Jonathan Redpath/legoboyvdlp, merspieler, Matthew Maring/mattmaring (Systems, Displays), Thorsten Herrmann/TH-555, Semir Gebran/CaptB (3D, Textures) @@ -799,6 +803,7 @@ + 0 0 0 0 @@ -997,12 +1002,18 @@ 0 + 0 + 15 + 15 0 0 0 0 + 0 + 15 + 15 0 0 0 diff --git a/Nasal/Libraries/libraries.nas b/Nasal/Libraries/libraries.nas index 45086eaf..cfd910db 100644 --- a/Nasal/Libraries/libraries.nas +++ b/Nasal/Libraries/libraries.nas @@ -210,6 +210,7 @@ var systemsInit = func { systems.ADIRS.init(); systems.eng_init(); systems.APUController.init(); + systems.BrakeSys.reset(); systems.Autobrake.init(); systems.fire_init(); fmgc.flightPlanController.reset(); @@ -258,6 +259,7 @@ var systemsLoop = maketimer(0.1, func { systems.HYD.loop(); systems.ADIRS.loop(); systems.APUController.loop(); + systems.BrakeSys.update(); ecam.ECAM.loop(); fadec.FADEC.loop(); rmp.rmpUpdate(); diff --git a/Nasal/Libraries/property-tree-setup.nas b/Nasal/Libraries/property-tree-setup.nas index 5dfa8ccd..83109c2f 100644 --- a/Nasal/Libraries/property-tree-setup.nas +++ b/Nasal/Libraries/property-tree-setup.nas @@ -45,6 +45,7 @@ var Controls = { brake: [props.globals.getNode("/controls/gear/brake-left"),props.globals.getNode("/controls/gear/brake-right")], gearDown: props.globals.getNode("/controls/gear/gear-down"), parkingBrake: props.globals.getNode("/controls/gear/brake-parking"), + chocks: props.globals.getNode("/services/chocks/enable"), }, }; @@ -57,17 +58,20 @@ var Engines = { eprActual: [props.globals.getNode("/engines/engine[0]/epr-actual"), props.globals.getNode("/engines/engine[1]/epr-actual")], n1Actual: [props.globals.getNode("/engines/engine[0]/n1-actual"), props.globals.getNode("/engines/engine[1]/n1-actual")], n2Actual: [props.globals.getNode("/engines/engine[0]/n2-actual"), props.globals.getNode("/engines/engine[1]/n2-actual")], + thrust: [props.globals.getNode("/engines/engine[0]/thrust-lb"), props.globals.getNode("/engines/engine[1]/thrust-lb")], state: [props.globals.getNode("/engines/engine[0]/state"), props.globals.getNode("/engines/engine[1]/state")], }, }; var Environment = { magVar: props.globals.getNode("/environment/magnetic-variation-deg"), + tempDegC: props.globals.getNode("/environment/temperature-degc"), }; var Fdm = { JSBsim: { Fcs: { + brake: [props.globals.getNode("/fdm/jsbsim/fcs/left-brake-cmd-norm"),props.globals.getNode("/fdm/jsbsim/fcs/right-brake-cmd-norm")], flapDeg: props.globals.getNode("/fdm/jsbsim/fcs/flap-pos-deg"), slatDeg: props.globals.getNode("/fdm/jsbsim/fcs/slat-pos-deg"), }, @@ -75,10 +79,14 @@ var Fdm = { aileron: props.globals.getNode("/fdm/jsbsim/fbw/aileron-sidestick"), elevator: props.globals.getNode("/fdm/jsbsim/fbw/elevator-sidestick"), }, + Inertia: { + weightLbs: props.globals.getNode("/fdm/jsbsim/inertia/weight-lbs"), + }, Position: { wow: props.globals.getNode("/fdm/jsbsim/position/wow"), }, Propulsion: { + tatC: props.globals.getNode("/fdm/jsbsim/propulsion/tat-c"), Engine: { fuelUsed: [props.globals.getNode("/fdm/jsbsim/propulsion/engine[0]/fuel-used-lbs"), props.globals.getNode("/fdm/jsbsim/propulsion/engine[1]/fuel-used-lbs")], reverserAngle: [props.globals.getNode("/fdm/jsbsim/propulsion/engine[0]/reverser-angle-rad"), props.globals.getNode("/fdm/jsbsim/propulsion/engine[1]/reverser-angle-rad")], @@ -163,6 +171,7 @@ var Sim = { online: props.globals.getNode("/sim/multiplay/online"), }, pause: props.globals.getNode("/sim/freeze/master"), + replayState: props.globals.getNode("/sim/freeze/replay-state"), Replay: { replayActive: props.globals.getNode("/sim/replay/replay-state"), }, @@ -179,7 +188,9 @@ var Systems = { }; var Velocities = { + airspeed: props.globals.getNode("/velocities/airspeed-kt"), groundspeed: props.globals.getNode("/velocities/groundspeed-kt"), + mach: props.globals.getNode("/velocities/mach"), }; setprop("/systems/acconfig/property-tree-setup-loaded", 1); diff --git a/Nasal/Systems/brakesystem.nas b/Nasal/Systems/brakesystem.nas index 344436ca..3b98f390 100755 --- a/Nasal/Systems/brakesystem.nas +++ b/Nasal/Systems/brakesystem.nas @@ -33,8 +33,20 @@ # # Added brakes temp calculations and adapted for A320-family # 2020, Andrea Vezzali -# +# Updated Nasal to project standards +# 2020, Jonathan Redpath ########################################################################## + +var LThermalEnergy = 0; +var RThermalEnergy = 0; +var dt = 0; +var LBrakeLevel = 0; +var RBrakeLevel = 0; +var tatdegc = 0; +var L_thrust = 0; +var R_thrust = 0; +var airspeed = 0; + var BrakeSystem = { new : func() @@ -56,9 +68,17 @@ var BrakeSystem = m.LSmokeToggle = 0; m.RSmokeActive = 0; m.RSmokeToggle = 0; -# m.LnCoolFactor = math.ln(1-m.CoolingFactor); - - m.reset(); + m.thermalEnergy = [0.0, 0.0]; + m.brakeFans = props.globals.getNode("/controls/gear/brake-fans"); + m.fireServices = props.globals.getNode("/sim/animation/fire-services"); + m.gearSmoke = [props.globals.getNode("/gear/gear[1]/Lbrake-smoke"), props.globals.getNode("/gear/gear[2]/Rbrake-smoke")]; + m.lBrakeTemp = [props.globals.getNode("/gear/gear[1]/L1brake-temp-degc"),props.globals.getNode("/gear/gear[1]/L2brake-temp-degc")]; + m.rBrakeTemp = [props.globals.getNode("/gear/gear[2]/R3brake-temp-degc"),props.globals.getNode("/gear/gear[2]/R4brake-temp-degc")]; + m.L1error = 0; + m.L2error = 0; + m.R3error = 0; + m.R4error = 0; + m.counter = 0; return m; }, @@ -66,73 +86,68 @@ var BrakeSystem = reset : func() { # Initial thermal energy - setprop("gear/gear[1]/Lbrake-thermal-energy",0.0); - setprop("gear/gear[2]/Rbrake-thermal-energy",0.0); + me.thermalEnergy[0] = 0.0; + me.thermalEnergy[1] = 0.0; - setprop("/controls/gear/brake-fans",0); - setprop("gear/gear[1]/Lbrake-smoke",0); - setprop("gear/gear[2]/Rbrake-smoke",0); - setprop("gear/gear[1]/L-Thrust",0); - setprop("gear/gear[2]/R-Thrust",0); + me.brakeFans.setValue(0); + me.gearSmoke[0].setValue(0); + me.gearSmoke[1].setValue(0); + me.fireServices.setValue(0); #Introducing a random error on temp sensors (max 5°C) - setprop("gear/gear[1]/L1error-temp-degc", math.round(rand()*(5))); - setprop("gear/gear[1]/L2error-temp-degc", math.round(rand()*(5))); - setprop("gear/gear[2]/R3error-temp-degc", math.round(rand()*(5))); - setprop("gear/gear[2]/R4error-temp-degc", math.round(rand()*(5))); + me.L1error = math.round(rand()*(5)); + me.L2error = math.round(rand()*(5)); + me.R3error = math.round(rand()*(5)); + me.R4error = math.round(rand()*(5)); - #var atemp = getprop("environment/temperature-degc") or 0; - #var vmach = getprop("velocities/mach") or 0; - var tatdegc = getprop("/systems/navigation/probes/tat-1/compute-tat") or 0; - var atemp = getprop("environment/temperature-degc") or 0; - var vmach = getprop("velocities/mach") or 0; - var tatdegc = getprop("/systems/navigation/probes/tat-1/compute-tat"); + var tatdegc = pts.Fdm.JSBsim.Propulsion.tatC.getValue() or 0; - setprop("gear/gear[1]/L1brake-temp-degc",tatdegc+getprop("gear/gear[1]/L1error-temp-degc")); - setprop("gear/gear[1]/L2brake-temp-degc",tatdegc+getprop("gear/gear[1]/L2error-temp-degc")); - setprop("gear/gear[2]/R3brake-temp-degc",tatdegc+getprop("gear/gear[2]/R3error-temp-degc")); - setprop("gear/gear[2]/R4brake-temp-degc",tatdegc+getprop("gear/gear[2]/R4error-temp-degc")); + me.lBrakeTemp[0].setValue(tatdegc+me.L1error); + me.lBrakeTemp[1].setValue(tatdegc+me.L2error); + me.rBrakeTemp[0].setValue(tatdegc+me.R3error); + me.rBrakeTemp[1].setValue(tatdegc+me.R4error); - setprop("/sim/animation/fire-services",0); me.LastSimTime = 0.0; }, - + # update brake energy update : func() { - var CurrentTime = getprop("/sim/time/elapsed-sec"); - var dt = CurrentTime - me.LastSimTime; - var LThermalEnergy = getprop("gear/gear[1]/Lbrake-thermal-energy"); - var RThermalEnergy = getprop("gear/gear[2]/Rbrake-thermal-energy"); - var LBrakeLevel = getprop("fdm/jsbsim/fcs/left-brake-cmd-norm"); - var RBrakeLevel = getprop("fdm/jsbsim/fcs/right-brake-cmd-norm"); - #var atemp = getprop("environment/temperature-degc") or 0; - #var vmach = getprop("velocities/mach") or 0; - #var tatdegc = atemp * (1 + (0.2 * math.pow(vmach, 2))); - var tatdegc = getprop("/systems/navigation/probes/tat-1/compute-tat") or 0; - var L_thrust_lb = getprop("engines/engine[0]/thrust_lb"); - var R_thrust_lb = getprop("engines/engine[1]/thrust_lb"); + if (me.counter == 0) { + me.counter = 1; + } else { + me.counter = 0; + return; + } + + LThermalEnergy = me.thermalEnergy[0]; + RThermalEnergy = me.thermalEnergy[1]; + me.CurrentTime = pts.Sim.Time.elapsedSec.getValue(); + dt = me.CurrentTime - me.LastSimTime; + LBrakeLevel = pts.Fdm.JSBsim.Fcs.brake[0].getValue(); + RBrakeLevel = pts.Fdm.JSBsim.Fcs.brake[1].getValue(); + tatdegc = pts.Fdm.JSBsim.Propulsion.tatC.getValue() or 0; - if (getprop("/sim/freeze/replay-state")==0 and dt<1.0) { - var OnGround = getprop("gear/gear[1]/wow"); + if (pts.Sim.replayState.getValue() == 0 and dt < 1.0) { #cooling effect: adjust cooling factor by a value proportional to the environment temp (m.CoolingFactor + environment temp-degc * 0.00001) var LCoolingRatio = me.CoolingFactor+(tatdegc*0.000001); var RCoolingRatio = me.CoolingFactor+(tatdegc*0.000001); - if (getprop("/controls/gear/brake-fans")) { + if (me.brakeFans.getValue()) { #increase CoolingRatio if Brake Fans are active LCoolingRatio = LCoolingRatio * 3; RCoolingRatio = RCoolingRatio * 3; }; - if (getprop("gear/gear[1]/position-norm")) { + airspeed = pts.Velocities.airspeed.getValue(); + if (pts.Gear.position[1].getValue()) { #increase CoolingRatio if gear down according to airspeed - LCoolingRatio = LCoolingRatio * getprop("velocities/airspeed-kt"); + LCoolingRatio = LCoolingRatio * airspeed; } else { #Reduced CoolingRatio if gear up LCoolingRatio = LCoolingRatio * 0.1; }; - if (getprop("gear/gear[2]/position-norm")) { + if (pts.Gear.position[2].getValue()) { #increase CoolingRatio if gear down according to airspeed - RCoolingRatio = RCoolingRatio * getprop("velocities/airspeed-kt"); + RCoolingRatio = RCoolingRatio * airspeed; } else { #Reduced CoolingRatio if gear up RCoolingRatio = RCoolingRatio * 0.1; @@ -149,34 +164,22 @@ var BrakeSystem = var LnCoolFactor = math.ln(1-LCoolingRatio); var RnCoolFactor = math.ln(1-RCoolingRatio); - L_thrust_lb = math.abs(getprop("engines/engine[0]/thrust_lb")); - if (L_thrust_lb < 1) { - L_thrust_lb = 1 - }; - #Disabling thrust computation on Brakes temperature - #L_Thrust = math.pow((math.log10(L_thrust_lb)),10)*0.0000000002; + # disabled thrust effect L_Thrust = 0; - - R_thrust_lb = math.abs(getprop("engines/engine[1]/thrust_lb")); - if (R_thrust_lb < 1) { - R_thrust_lb = 1 - }; - #Disabling thrust computation on Brakes temperature - #R_Thrust = math.pow((math.log10(R_thrust_lb)),10)*0.0000000002; R_Thrust = 0; - if (OnGround) { - var V1 = getprop("velocities/groundspeed-kt"); - var Mass = getprop("fdm/jsbsim/inertia/weight-lbs")*(me.ScalingDivisor); + if (pts.Gear.wow[1].getValue()) { + var V1 = pts.Velocities.groundspeed.getValue(); + var Mass = pts.Fdm.JSBsim.Inertia.weightLbs.getValue() * me.ScalingDivisor; # absorb some kinetic energy: # dE= 1/2 * m * V1^2 - 1/2 * m * V2^2) var V2_L = V1 - me.BrakeDecel * dt * LBrakeLevel; var V2_R = V1 - me.BrakeDecel * dt * RBrakeLevel; - LThermalEnergy += (Mass * getprop("gear/gear[1]/compression-norm") * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2); - if (getprop("/services/chocks/enable")) { - if (!getprop("/controls/gear/brake-parking")) { + LThermalEnergy += (Mass * pts.Gear.compression[1].getValue() * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2); + if (pts.Controls.Gear.chocks.getValue()) { + if (!pts.Controls.Gear.parkingBrake.getValue()) { # cooling effect: reduce thermal energy by (LnCoolFactor) * dt LThermalEnergy = LThermalEnergy * math.exp(LnCoolFactor * dt); } else { @@ -185,7 +188,7 @@ var BrakeSystem = LThermalEnergy = (LThermalEnergy * math.exp(LnCoolFactor * dt)) + (L_Thrust * dt); }; } else { - if (!getprop("/controls/gear/brake-parking")) { + if (!pts.Controls.Gear.parkingBrake.getValue()) { if (LBrakeLevel>0) { if (V2_L>0) { #LThermalEnergy += (Mass * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2) + L_thrust; @@ -207,9 +210,9 @@ var BrakeSystem = }; }; - RThermalEnergy += (Mass * getprop("gear/gear[2]/compression-norm") * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2); - if (getprop("/services/chocks/enable")) { - if (!getprop("/controls/gear/brake-parking")) { + RThermalEnergy += (Mass * pts.Gear.compression[2].getValue() * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2); + if (pts.Controls.Gear.chocks.getValue()) { + if (!pts.Controls.Gear.parkingBrake.getValue()) { # cooling effect: reduce thermal energy by (RnCoolFactor) * dt RThermalEnergy = RThermalEnergy * math.exp(RnCoolFactor * dt); } else { @@ -218,7 +221,7 @@ var BrakeSystem = RThermalEnergy = (RThermalEnergy * math.exp(RnCoolFactor * dt)) + (R_Thrust * dt); }; } else { - if (!getprop("/controls/gear/brake-parking")) { + if (!pts.Controls.Gear.parkingBrake.getValue()) { if (RBrakeLevel>0) { if (V2_R>0) { #RThermalEnergy += (Mass * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2) + R_thrust; @@ -256,67 +259,62 @@ var BrakeSystem = RThermalEnergy = 3 }; - setprop("gear/gear[1]/L-Thrust",L_Thrust); - setprop("gear/gear[2]/R-Thrust",R_Thrust); - setprop("gear/gear[1]/Lbrake-thermal-energy",LThermalEnergy); - setprop("gear/gear[2]/Rbrake-thermal-energy",RThermalEnergy); + me.thermalEnergy[0] = LThermalEnergy; + me.thermalEnergy[1] = RThermalEnergy; #Calculating Brakes temperature - setprop("gear/gear[1]/L1brake-temp-degc",tatdegc+getprop("gear/gear[1]/L1error-temp-degc")+(LThermalEnergy * (300-tatdegc-getprop("gear/gear[1]/L1error-temp-degc")))); - setprop("gear/gear[1]/L2brake-temp-degc",tatdegc+getprop("gear/gear[1]/L2error-temp-degc")+(LThermalEnergy * (300-tatdegc-getprop("gear/gear[1]/L2error-temp-degc")))); - setprop("gear/gear[2]/R3brake-temp-degc",tatdegc+getprop("gear/gear[2]/R3error-temp-degc")+(RThermalEnergy * (300-tatdegc-getprop("gear/gear[2]/R3error-temp-degc")))); - setprop("gear/gear[2]/R4brake-temp-degc",tatdegc+getprop("gear/gear[2]/R4error-temp-degc")+(RThermalEnergy * (300-tatdegc-getprop("gear/gear[2]/R4error-temp-degc")))); + me.lBrakeTemp[0].setValue(tatdegc+me.L1error+(LThermalEnergy * (300-tatdegc-me.L1error))); + me.lBrakeTemp[1].setValue(tatdegc+me.L2error+(LThermalEnergy * (300-tatdegc-me.L2error))); + me.rBrakeTemp[0].setValue(tatdegc+me.R3error+(RThermalEnergy * (300-tatdegc-me.R3error))); + me.rBrakeTemp[1].setValue(tatdegc+me.R4error+(RThermalEnergy * (300-tatdegc-me.R4error))); - if ((LThermalEnergy>1)and(!me.LSmokeActive)) { + if (LThermalEnergy>1 and !me.LSmokeActive) { # start smoke processing me.LSmokeActive = 1; settimer(func { BrakeSys.Lsmoke(); },0); }; - if ((RThermalEnergy>1)and(!me.RSmokeActive)) { + if (RThermalEnergy>1 and !me.RSmokeActive) { # start smoke processing me.RSmokeActive = 1; settimer(func { BrakeSys.Rsmoke(); },0); }; }; - me.LastSimTime = CurrentTime; - # 5 updates per second are good enough - settimer(func { BrakeSys.update(); },0.2); + me.LastSimTime = me.CurrentTime; }, # smoke processing Lsmoke : func() { - if ((me.LSmokeActive)and(getprop("gear/gear[1]/Lbrake-thermal-energy")>1)) { + if (me.LSmokeActive and me.thermalEnergy[0] > 1) { # make density of smoke effect depend on energy level - var LSmokeDelay=0; - var LThermalEnergy = getprop("gear/gear[1]/Lbrake-thermal-energy"); + var LSmokeDelay = 0; + var LThermalEnergy = me.thermalEnergy[0]; if (LThermalEnergy < 1.5) { - LSmokeDelay=(1.5-LThermalEnergy); + LSmokeDelay = (1.5 - LThermalEnergy); }; # No smoke when gear retracted - var LSmokeValue = (getprop("gear/gear[1]/position-norm")>0.5); + var LSmokeValue = (pts.Gear.position[1].getValue() > 0.5); # toggle smoke to interpolate different densities - if (LSmokeDelay>0.05) { + if (LSmokeDelay > 0.05) { me.LSmokeToggle = !me.LSmokeToggle; if (!me.LSmokeToggle) LSmokeValue = 0; else LSmokeDelay = 0; }; - setprop("gear/gear[1]/Lbrake-smoke",LSmokeValue); + me.gearSmoke[0].setValue(LSmokeValue); settimer(func { BrakeSys.Lsmoke(); },LSmokeDelay); } else { # stop smoke processing - setprop("gear/gear[1]/Lbrake-smoke",0); - setprop("/sim/animation/fire-services",0); + me.gearSmoke[0].setValue(0); me.LSmokeActive = 0; }; - if (getprop("gear/gear[1]/Lbrake-thermal-energy") > 1.5) { - setprop("/sim/animation/fire-services",1); + if (me.thermalEnergy[0] > 1.5) { + me.fireServices.setValue(1); } else { - setprop("/sim/animation/fire-services",0); + me.fireServices.setValue(0); }; }, @@ -324,35 +322,35 @@ var BrakeSystem = # smoke processing Rsmoke : func() { - if ((me.RSmokeActive)and(getprop("gear/gear[2]/Rbrake-thermal-energy")>1)) { + if (me.RSmokeActive and me.thermalEnergy[1] > 1) { # make density of smoke effect depend on energy level - var RSmokeDelay=0; - var RThermalEnergy = getprop("gear/gear[2]/Rbrake-thermal-energy"); + var RSmokeDelay = 0; + var RThermalEnergy = me.thermalEnergy[1]; if (RThermalEnergy < 1.5) { - RSmokeDelay=(1.5-RThermalEnergy); + RSmokeDelay = (1.5 - RThermalEnergy); }; # No smoke when gear retracted - var RSmokeValue = (getprop("gear/gear[2]/position-norm")>0.5); + var RSmokeValue = (pts.Gear.position[2].getValue() > 0.5); # toggle smoke to interpolate different densities - if (RSmokeDelay>0.05) { + if (RSmokeDelay > 0.05) { me.RSmokeToggle = !me.RSmokeToggle; if (!me.RSmokeToggle) RSmokeValue = 0; else RSmokeDelay = 0; }; - setprop("gear/gear[2]/Rbrake-smoke",RSmokeValue); + me.gearSmoke[1].setValue(RSmokeValue); settimer(func { BrakeSys.Rsmoke(); },RSmokeDelay); } else { # stop smoke processing - setprop("gear/gear[2]/Rbrake-smoke",0); + me.gearSmoke[1].setValue(0); me.RSmokeActive = 0; }; - if (getprop("gear/gear[2]/Rbrake-thermal-energy") > 1.5) { - setprop("/sim/animation/fire-services",1); + if (me.thermalEnergy[1] > 1.5) { + me.fireServices.setValue(1); } else { - setprop("/sim/animation/fire-services",0); + me.fireServices.setValue(0); }; }, }; @@ -437,13 +435,6 @@ controls.applyBrakes = func(v, which = 0) { } } } -setlistener("/sim/signals/fdm-initialized", - # executed on _every_ FDM reset (but not installing new listeners) - func(idle) { BrakeSys.reset(); }, -0,0); - -settimer(func() { BrakeSys.update(); }, 5); - # Autobrake loop var absChk = maketimer(0.2, func { From 9300c41fd1c9352946a02ab9fde4b60aa9c76db5 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Thu, 17 Sep 2020 17:40:51 +0100 Subject: [PATCH 3/4] Lower ECAM: cconvert electrical page to ELEC nodes. Remove all instances of getprop. Fix bug in battery display. --- Models/Instruments/Lower-ECAM/Lower-ECAM.nas | 272 ++++++++----------- Nasal/Systems/electrical.nas | 139 ++++++---- 2 files changed, 210 insertions(+), 201 deletions(-) diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas index cc0dc20c..f0786a8b 100644 --- a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas @@ -43,6 +43,7 @@ LBS2KGS = 0.4535924; # Fetch Nodes var acconfig_weight_kgs = props.globals.getNode("/systems/acconfig/options/weight-kgs", 1); var elapsed_sec = props.globals.getNode("/sim/time/elapsed-sec", 1); +var rate = props.globals.getNode("/systems/acconfig/options/lecam-rate", 1); var autoconfig_running = props.globals.getNode("/systems/acconfig/autoconfig-running", 1); var lighting_du4 = props.globals.getNode("/controls/lighting/DU/du4", 1); var ecam_page = props.globals.getNode("/ECAM/Lower/page", 1); @@ -115,43 +116,6 @@ var cargobulk_pos = props.globals.getNode("/sim/model/door-positions/cargobulk/p var cargofwd_pos = props.globals.getNode("/sim/model/door-positions/cargofwd/position-norm", 1); var cargoaft_pos = props.globals.getNode("/sim/model/door-positions/cargoaft/position-norm", 1); -# Electrical nodes -var apu_volts = props.globals.getNode("/systems/electrical/sources/apu/output-volt", 1); -var apu_hz = props.globals.getNode("/systems/electrical/sources/apu/output-hertz", 1); -var gen_apu = props.globals.getNode("/systems/electrical/relay/apu-glc/contact-pos", 1); -var switch_bat1 = props.globals.getNode("/controls/electrical/switches/bat-1", 1); -var switch_bat2 = props.globals.getNode("/controls/electrical/switches/bat-2", 1); -var bat1_amps = props.globals.getNode("/systems/electrical/sources/bat-1/amps", 1); -var bat2_amps = props.globals.getNode("/systems/electrical/sources/bat-2/amps", 1); -var bat1_volts = props.globals.getNode("/systems/electrical/sources/bat-1/volt", 1); -var bat2_volts = props.globals.getNode("/systems/electrical/sources/bat-2/volt", 1); -var bat1_fault = props.globals.getNode("/systems/electrical/light/bat-1-fault", 1); -var bat2_fault = props.globals.getNode("/systems/electrical/light/bat-2-fault", 1); -var bat1_direction = props.globals.getNode("/systems/electrical/sources/bat-1/direction", 1); -var bat2_direction = props.globals.getNode("/systems/electrical/sources/bat-2/direction", 1); -var emerGenVolts = props.globals.getNode("/systems/electrical/relay/emer-glc/output", 1); -var emerGenHz = props.globals.getNode("/systems/electrical/sources/emer-gen/output-hertz", 1); -var tr1_volts = props.globals.getNode("/systems/electrical/relay/tr-contactor-1/output", 1); -var tr2_volts = props.globals.getNode("/systems/electrical/relay/tr-contactor-2/output", 1); -var tr1_amps = props.globals.getNode("/systems/electrical/relay/tr-contactor-1/output-amp", 1); -var tr2_amps = props.globals.getNode("/systems/electrical/relay/tr-contactor-2/output-amp", 1); -var switch_emer_gen = props.globals.getNode("/systems/electrical/sources/emer-gen/output-volt", 1); -var switch_gen1 = props.globals.getNode("/controls/electrical/switches/gen-1", 1); -var switch_gen2 = props.globals.getNode("/controls/electrical/switches/gen-2", 1); -var gen1_volts = props.globals.getNode("/systems/electrical/sources/idg-1/output-volt", 1); -var gen2_volts = props.globals.getNode("/systems/electrical/sources/idg-2/output-volt", 1); -var gen1_hz = props.globals.getNode("/systems/electrical/sources/idg-1/output-hertz", 1); -var gen2_hz = props.globals.getNode("/systems/electrical/sources/idg-2/output-hertz", 1); -var ext_volts = props.globals.getNode("/systems/electrical/sources/ext/output-volt", 1); -var ext_hz = props.globals.getNode("/systems/electrical/sources/ext/output-hertz", 1); -var galleyshed = props.globals.getNode("/systems/electrical/some-electric-thingie/galley-shed", 1); -var switch_galley = props.globals.getNode("/controls/electrical/switches/galley", 1); -var switch_ac_ess_feed = props.globals.getNode("/controls/electrical/switches/ac-ess-feed", 1); -var tr1_fault = props.globals.getNode("/systems/failures/electrical/tr-1", 1); -var tr2_fault = props.globals.getNode("/systems/failures/electrical/tr-2", 1); -var essTrVolt = props.globals.getNode("/systems/electrical/relay/dc-ess-feed-tr/output", 1); -var essTrAmp = props.globals.getNode("/systems/electrical/relay/dc-ess-feed-tr/output-amp", 1); - # Hydraulic var blue_psi = 0; var green_psi = 0; @@ -266,12 +230,12 @@ var canvas_lowerECAM_base = { if (systems.ELEC.Bus.ac2.getValue() >= 110) { if (du4_offtime.getValue() + 3 < elapsedtime) { - if (gear0_wow.getValue() == 1) { + if (gear0_wow.getValue()) { if (autoconfig_running.getValue() != 1 and du4_test.getValue() != 1) { du4_test.setValue(1); du4_test_amount.setValue(math.round((rand() * 5 ) + 35, 0.1)); du4_test_time.setValue(elapsedtime); - } else if (autoconfig_running.getValue() == 1 and du4_test.getValue() != 1) { + } else if (autoconfig_running.getValue() and du4_test.getValue() != 1) { du4_test.setValue(1); du4_test_amount.setValue(math.round((rand() * 5 ) + 35, 0.1)); du4_test_time.setValue(elapsedtime - 30); @@ -556,7 +520,7 @@ var canvas_lowerECAM_base = { me["UTCh"].setText(sprintf("%02d", hour.getValue())); me["UTCm"].setText(sprintf("%02d", minute.getValue())); - if (acconfig_weight_kgs.getValue() == 1) { + if (acconfig_weight_kgs.getValue()) { me["GW"].setText(sprintf("%s", math.round(math.round(gw.getValue() * LBS2KGS, 100)))); me["GW-weight-unit"].setText("KG"); } else { @@ -579,7 +543,7 @@ var canvas_lowerECAM_apu = { }, update: func() { # Avail and Flap Open - if (apu_flap.getValue() == 1) { + if (apu_flap.getValue()) { me["APUFlapOpen"].show(); } else { me["APUFlapOpen"].hide(); @@ -598,19 +562,19 @@ var canvas_lowerECAM_apu = { } # APU Gen - if (apu_volts.getValue() >= 110) { + if (systems.ELEC.Source.APU.volts.getValue() >= 110) { me["APUGenVolt"].setColor(0.0509,0.7529,0.2941); } else { me["APUGenVolt"].setColor(0.7333,0.3803,0); } - if (apu_hz.getValue() > 380) { + if (systems.ELEC.Source.APU.hertz.getValue() > 380) { me["APUGenHz"].setColor(0.0509,0.7529,0.2941); } else { me["APUGenHz"].setColor(0.7333,0.3803,0); } - if (systems.APUNodes.Controls.master.getValue() == 1 or apu_rpm.getValue() >= 94.9) { + if (systems.APUNodes.Controls.master.getValue() or apu_rpm.getValue() >= 94.9) { me["APUGenbox"].show(); me["APUGenHz"].show(); me["APUGenVolt"].show(); @@ -628,24 +592,24 @@ var canvas_lowerECAM_apu = { me["text3732"].hide(); } - if ((apu_rpm.getValue() > 94.9) and (gen_apu.getValue() == 1)) { + if ((apu_rpm.getValue() > 94.9) and (systems.ELEC.Source.APU.contact.getValue())) { me["APUGenOnline"].show(); } else { me["APUGenOnline"].hide(); } - if ((systems.APUNodes.Controls.master.getValue() == 0) or ((systems.APUNodes.Controls.master.getValue() == 1) and (gen_apu.getValue() == 1) and (apu_rpm.getValue() > 94.9))) { + if ((systems.APUNodes.Controls.master.getValue() == 0) or ((systems.APUNodes.Controls.master.getValue()) and (systems.ELEC.Source.APU.contact.getValue()) and (apu_rpm.getValue() > 94.9))) { me["APUGentext"].setColor(0.8078,0.8039,0.8078); - } else if ((systems.APUNodes.Controls.master.getValue() == 1) and (gen_apu.getValue() == 0) and (apu_rpm.getValue() < 94.9)) { + } else if ((systems.APUNodes.Controls.master.getValue()) and (systems.ELEC.Source.APU.contact.getValue() == 0) and (apu_rpm.getValue() < 94.9)) { me["APUGentext"].setColor(0.7333,0.3803,0); } me["APUGenLoad"].setText(sprintf("%s", math.round(apu_load.getValue()))); - me["APUGenVolt"].setText(sprintf("%s", math.round(apu_volts.getValue()))); - me["APUGenHz"].setText(sprintf("%s", math.round(apu_hz.getValue()))); + me["APUGenVolt"].setText(sprintf("%s", math.round(systems.ELEC.Source.APU.volts.getValue()))); + me["APUGenHz"].setText(sprintf("%s", math.round(systems.ELEC.Source.APU.hertz.getValue()))); # APU Bleed - if (systems.ADIRS.Operating.adr[0].getValue() and (systems.APUNodes.Controls.bleed.getValue() == 1 or bleedapu.getValue() > 0)) { + if (systems.ADIRS.Operating.adr[0].getValue() and (systems.APUNodes.Controls.bleed.getValue() or bleedapu.getValue() > 0)) { me["APUBleedPSI"].setColor(0.0509,0.7529,0.2941); me["APUBleedPSI"].setText(sprintf("%s", math.round(bleedapu.getValue()))); } else { @@ -670,7 +634,7 @@ var canvas_lowerECAM_apu = { # APU N and EGT - if (systems.APUNodes.Controls.master.getValue() == 1) { + if (systems.APUNodes.Controls.master.getValue()) { me["APUN"].setColor(0.0509,0.7529,0.2941); me["APUN"].setText(sprintf("%s", math.round(apu_rpm.getValue() or 0))); me["APUEGT"].setColor(0.0509,0.7529,0.2941); @@ -872,7 +836,7 @@ var canvas_lowerECAM_bleed = { if (bmc1working.getValue()) { var precooler_temp = precooler1_temp.getValue(); me["BLEED-Precooler-1-Outlet-Temp"].setText(sprintf("%s", math.round(precooler_temp, 5))); - if (eng_valve1_cmd.getValue() == 1 and (precooler_temp < 150 or precooler1_ovht.getValue())) { + if (eng_valve1_cmd.getValue() and (precooler_temp < 150 or precooler1_ovht.getValue())) { me["BLEED-Precooler-1-Outlet-Temp"].setColor(0.7333,0.3803,0); } else { me["BLEED-Precooler-1-Outlet-Temp"].setColor(0.0509,0.7529,0.2941); @@ -886,7 +850,7 @@ var canvas_lowerECAM_bleed = { if (bmc2working.getValue()) { var precooler_temp = precooler2_temp.getValue(); me["BLEED-Precooler-2-Outlet-Temp"].setText(sprintf("%s", math.round(precooler_temp, 5))); - if (eng_valve2_cmd.getValue() == 1 and (precooler_temp < 150 or precooler2_ovht.getValue())) { + if (eng_valve2_cmd.getValue() and (precooler_temp < 150 or precooler2_ovht.getValue())) { me["BLEED-Precooler-2-Outlet-Temp"].setColor(0.7333,0.3803,0); } else { me["BLEED-Precooler-2-Outlet-Temp"].setColor(0.0509,0.7529,0.2941); @@ -904,7 +868,7 @@ var canvas_lowerECAM_bleed = { } # WING ANTI ICE - if (switch_wing_aice.getValue() == 1) { + if (switch_wing_aice.getValue()) { me["BLEED-Anti-Ice-Left"].show(); me["BLEED-Anti-Ice-Right"].show(); } else { @@ -1016,7 +980,7 @@ var canvas_lowerECAM_bleed = { me["BLEED-Ram-Air"].setColor(0.0509,0.7529,0.2941); me["BLEED-Ram-Air"].setColorFill(0.0509,0.7529,0.2941); me["BLEED-Ram-Air-connection"].hide(); - } elsif (systems.PNEU.Valves.ramAir.getValue() == 1) { + } elsif (systems.PNEU.Valves.ramAir.getValue()) { me["BLEED-Ram-Air"].setRotation(0); if (pts.Gear.wow[1].getValue()) { me["BLEED-Ram-Air"].setColor(0.7333,0.3803,0); @@ -1118,7 +1082,7 @@ var canvas_lowerECAM_crz = { me["Oil1"].setText(sprintf("%2.1f", oil_qt1_actual.getValue())); me["Oil2"].setText(sprintf("%2.1f", oil_qt2_actual.getValue())); - if (acconfig_weight_kgs.getValue() == 1) { + if (acconfig_weight_kgs.getValue()) { me["Fused-weight-unit"].setText("KG"); me["FUsed1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10))); me["FUsed2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10))); @@ -1298,7 +1262,7 @@ var canvas_lowerECAM_elec = { update: func() { # BAT1 - if (switch_bat1.getValue() == 0) { + if (systems.ELEC.Switch.bat1.getValue() == 0) { me["BAT1-OFF"].show(); me["BAT1-content"].hide(); me["BAT1-discharge"].hide(); @@ -1306,26 +1270,26 @@ var canvas_lowerECAM_elec = { } else { me["BAT1-OFF"].hide(); me["BAT1-content"].show(); - me["Bat1Ampere"].setText(sprintf("%s", math.round(bat1_amps.getValue()))); - me["Bat1Volt"].setText(sprintf("%s", math.round(bat1_volts.getValue()))); + me["Bat1Ampere"].setText(sprintf("%s", math.round(systems.ELEC.Source.Bat1.amps.getValue()))); + me["Bat1Volt"].setText(sprintf("%s", math.round(systems.ELEC.Source.Bat1.volt.getValue()))); - if (bat1_volts.getValue() >= 24.95 and bat1_volts.getValue() <= 31.05) { + if (systems.ELEC.Source.Bat1.volt.getValue() >= 24.95 and systems.ELEC.Source.Bat1.volt.getValue() <= 31.05) { me["Bat1Volt"].setColor(0.0509,0.7529,0.2941); } else { me["Bat1Volt"].setColor(0.7333,0.3803,0); } - if (bat1_amps.getValue() > 5) { + if (systems.ELEC.Source.Bat1.amps.getValue() > 5) { me["Bat1Ampere"].setColor(0.7333,0.3803,0); } else { me["Bat1Ampere"].setColor(0.0509,0.7529,0.2941); } - if (bat1_direction.getValue() == 0) { + if (systems.ELEC.Source.Bat1.direction.getValue() == 0) { me["BAT1-discharge"].hide(); me["BAT1-charge"].hide(); } else { - if (bat1_direction.getValue() == -1) { + if (systems.ELEC.Source.Bat1.direction.getValue() == -1) { me["BAT1-charge"].show(); me["BAT1-discharge"].hide(); } else { @@ -1335,14 +1299,14 @@ var canvas_lowerECAM_elec = { } } - if (bat1_fault.getValue() == 1 or bat1_volts.getValue() < 25 or bat1_volts.getValue() > 31 or bat1_amps.getValue() > 5) { + if (systems.ELEC.Light.bat1Fault.getValue() or systems.ELEC.Source.Bat1.volt.getValue() < 25 or systems.ELEC.Source.Bat1.volt.getValue() > 31 or systems.ELEC.Source.Bat1.amps.getValue() > 5) { me["BAT1-label"].setColor(0.7333,0.3803,0); } else { me["BAT1-label"].setColor(0.8078,0.8039,0.8078); } # BAT2 - if (switch_bat2.getValue() == 0) { + if (systems.ELEC.Switch.bat2.getValue() == 0) { me["BAT2-OFF"].show(); me["BAT2-content"].hide(); me["BAT2-discharge"].hide(); @@ -1350,26 +1314,26 @@ var canvas_lowerECAM_elec = { } else { me["BAT2-OFF"].hide(); me["BAT2-content"].show(); - me["Bat2Ampere"].setText(sprintf("%s", math.round(bat2_amps.getValue()))); - me["Bat2Volt"].setText(sprintf("%s", math.round(bat2_volts.getValue()))); + me["Bat2Ampere"].setText(sprintf("%s", math.round(systems.ELEC.Source.Bat2.amps.getValue()))); + me["Bat2Volt"].setText(sprintf("%s", math.round(systems.ELEC.Source.Bat2.volt.getValue()))); - if (bat2_volts.getValue() >= 24.95 and bat2_volts.getValue() <= 31.05) { + if (systems.ELEC.Source.Bat2.volt.getValue() >= 24.95 and systems.ELEC.Source.Bat2.volt.getValue() <= 31.05) { me["Bat2Volt"].setColor(0.0509,0.7529,0.2941); } else { me["Bat2Volt"].setColor(0.7333,0.3803,0); } - if (bat2_amps.getValue() > 5) { + if (systems.ELEC.Source.Bat2.amps.getValue() > 5) { me["Bat2Ampere"].setColor(0.7333,0.3803,0); } else { me["Bat2Ampere"].setColor(0.0509,0.7529,0.2941); } - if (bat2_direction.getValue() == 0) { + if (systems.ELEC.Source.Bat2.direction.getValue() == 0) { me["BAT2-discharge"].hide(); me["BAT2-charge"].hide(); } else { - if (bat2_direction.getValue() == -1) { + if (systems.ELEC.Source.Bat2.direction.getValue() == -1) { me["BAT2-charge"].show(); me["BAT2-discharge"].hide(); } else { @@ -1379,7 +1343,7 @@ var canvas_lowerECAM_elec = { } } - if (bat2_fault.getValue() == 1 or bat2_volts.getValue() < 25 or bat2_volts.getValue() > 31 or bat2_amps.getValue() > 5) { + if (systems.ELEC.Light.bat2Fault.getValue() or systems.ELEC.Source.Bat2.volt.getValue() < 25 or systems.ELEC.Source.Bat2.volt.getValue() > 31 or systems.ELEC.Source.Bat2.amps.getValue() > 5) { me["BAT2-label"].setColor(0.7333,0.3803,0); } else { me["BAT2-label"].setColor(0.8078,0.8039,0.8078); @@ -1387,8 +1351,8 @@ var canvas_lowerECAM_elec = { # TR1 # is only powered when ac1 has power - tr1_v = tr1_volts.getValue(); - tr1_a = tr1_amps.getValue(); + tr1_v = systems.ELEC.Source.tr1.outputVolt.getValue(); + tr1_a = systems.ELEC.Source.tr1.outputAmp.getValue(); me["TR1Volt"].setText(sprintf("%s", math.round(tr1_v))); me["TR1Ampere"].setText(sprintf("%s", math.round(tr1_a))); @@ -1413,8 +1377,8 @@ var canvas_lowerECAM_elec = { # TR2 # is only powered when ac2 has power - tr2_v = tr2_volts.getValue(); - tr2_a = tr2_amps.getValue(); + tr2_v = systems.ELEC.Source.tr2.outputVolt.getValue(); + tr2_a = systems.ELEC.Source.tr2.outputAmp.getValue(); me["TR2Volt"].setText(sprintf("%s", math.round(tr2_v))); me["TR2Ampere"].setText(sprintf("%s", math.round(tr2_a))); @@ -1438,8 +1402,8 @@ var canvas_lowerECAM_elec = { } # ESS TR - essTrvolts = essTrVolt.getValue(); - essTramps = essTrAmp.getValue(); + essTrvolts = systems.ELEC.Source.trEss.outputVoltRelay.getValue(); + essTramps = systems.ELEC.Source.trEss.outputAmpRelay.getValue(); if (systems.ELEC.Relay.essTrContactor.getValue()) { me["ESSTR-group"].show(); me["ESSTR-Volt"].setText(sprintf("%s", math.round(essTrvolts))); @@ -1467,7 +1431,7 @@ var canvas_lowerECAM_elec = { } # EMER GEN - if (switch_emer_gen.getValue() == 0) { + if (systems.ELEC.Source.EmerGen.volts.getValue() == 0) { me["EMERGEN-group"].hide(); me["ELEC-Line-Emergen-ESSTR"].hide(); me["ELEC-Line-Emergen-ESSTR-off"].show(); @@ -1478,22 +1442,22 @@ var canvas_lowerECAM_elec = { me["ELEC-Line-Emergen-ESSTR-off"].hide(); me["EMERGEN-Label-off"].hide(); - me["EmergenVolt"].setText(sprintf("%s", math.round(emerGenVolts.getValue()))); - me["EmergenHz"].setText(sprintf("%s", math.round(emerGenHz.getValue()))); + me["EmergenVolt"].setText(sprintf("%s", math.round(systems.ELEC.Source.EmerGen.voltsRelay.getValue()))); + me["EmergenHz"].setText(sprintf("%s", math.round(systems.ELEC.Source.EmerGen.hertz.getValue()))); - if (emerGenVolts.getValue() > 120 or emerGenVolts.getValue() < 110 or emerGenHz.getValue() > 410 or emerGenHz.getValue() < 390) { + if (systems.ELEC.Source.EmerGen.voltsRelay.getValue() > 120 or systems.ELEC.Source.EmerGen.voltsRelay.getValue() < 110 or systems.ELEC.Source.EmerGen.hertz.getValue() > 410 or systems.ELEC.Source.EmerGen.hertz.getValue() < 390) { me["Emergen-Label"].setColor(0.7333,0.3803,0); } else { me["Emergen-Label"].setColor(0.8078,0.8039,0.8078); } - if (emerGenVolts.getValue() > 120 or emerGenVolts.getValue() < 110) { + if (systems.ELEC.Source.EmerGen.voltsRelay.getValue() > 120 or systems.ELEC.Source.EmerGen.voltsRelay.getValue() < 110) { me["EmergenVolt"].setColor(0.7333,0.3803,0); } else { me["EmergenVolt"].setColor(0.0509,0.7529,0.2941); } - if (emerGenHz.getValue() > 410 or emerGenHz.getValue() < 390) { + if (systems.ELEC.Source.EmerGen.hertz.getValue() > 410 or systems.ELEC.Source.EmerGen.hertz.getValue() < 390) { me["EmergenHz"].setColor(0.7333,0.3803,0); } else { me["EmergenHz"].setColor(0.0509,0.7529,0.2941); @@ -1531,7 +1495,7 @@ var canvas_lowerECAM_elec = { } # GEN1 - if (switch_gen1.getValue() == 0) { + if (systems.ELEC.Switch.gen1.getValue() == 0) { me["GEN1-content"].hide(); me["GEN1-off"].show(); if (systems.ELEC.Source.IDG1.gcrRelay.getValue()) { @@ -1549,12 +1513,12 @@ var canvas_lowerECAM_elec = { me["GEN1-content"].show(); me["GEN1-off"].hide(); # me["Gen1Load"].setText(sprintf("%s", math.round(gen1_load.getValue()))); - me["Gen1Volt"].setText(sprintf("%s", math.round(gen1_volts.getValue()))); + me["Gen1Volt"].setText(sprintf("%s", math.round(systems.ELEC.Source.IDG1.volts.getValue()))); - if (gen1_hz.getValue() == 0) { + if (systems.ELEC.Source.IDG1.hertz.getValue() == 0) { me["Gen1Hz"].setText(sprintf("XX")); } else { - me["Gen1Hz"].setText(sprintf("%s", math.round(gen1_hz.getValue()))); + me["Gen1Hz"].setText(sprintf("%s", math.round(systems.ELEC.Source.IDG1.hertz.getValue()))); } if (eng1_running.getValue() == 0) { @@ -1563,7 +1527,7 @@ var canvas_lowerECAM_elec = { me["GEN1-num-label"].setColor(0.8078,0.8039,0.8078); } - if (gen1_volts.getValue() > 120 or gen1_volts.getValue() < 110 or gen1_hz.getValue() > 410 or gen1_hz.getValue() < 390 or gen1_load.getValue() >= 110) { + if (systems.ELEC.Source.IDG1.volts.getValue() > 120 or systems.ELEC.Source.IDG1.volts.getValue() < 110 or systems.ELEC.Source.IDG1.hertz.getValue() > 410 or systems.ELEC.Source.IDG1.hertz.getValue() < 390 or gen1_load.getValue() >= 110) { me["GEN1-label"].setColor(0.7333,0.3803,0); } else { me["GEN1-label"].setColor(0.8078,0.8039,0.8078); @@ -1575,13 +1539,13 @@ var canvas_lowerECAM_elec = { me["Gen1Load"].setColor(0.0509,0.7529,0.2941); } - if (gen1_volts.getValue() > 120 or gen1_volts.getValue() < 110) { + if (systems.ELEC.Source.IDG1.volts.getValue() > 120 or systems.ELEC.Source.IDG1.volts.getValue() < 110) { me["Gen1Volt"].setColor(0.7333,0.3803,0); } else { me["Gen1Volt"].setColor(0.0509,0.7529,0.2941); } - if (gen1_hz.getValue() > 410 or gen1_hz.getValue() < 390) { + if (systems.ELEC.Source.IDG1.hertz.getValue() > 410 or systems.ELEC.Source.IDG1.hertz.getValue() < 390) { me["Gen1Hz"].setColor(0.7333,0.3803,0); } else { me["Gen1Hz"].setColor(0.0509,0.7529,0.2941); @@ -1589,7 +1553,7 @@ var canvas_lowerECAM_elec = { } # GEN2 - if (switch_gen2.getValue() == 0) { + if (systems.ELEC.Switch.gen2.getValue() == 0) { me["GEN2-content"].hide(); me["GEN2-off"].show(); if (systems.ELEC.Source.IDG2.gcrRelay.getValue()) { @@ -1607,11 +1571,11 @@ var canvas_lowerECAM_elec = { me["GEN2-content"].show(); me["GEN2-off"].hide(); # me["Gen2Load"].setText(sprintf("%s", math.round(gen2_load.getValue()))); - me["Gen2Volt"].setText(sprintf("%s", math.round(gen2_volts.getValue()))); - if (gen2_hz.getValue() == 0) { + me["Gen2Volt"].setText(sprintf("%s", math.round(systems.ELEC.Source.IDG2.volts.getValue()))); + if (systems.ELEC.Source.IDG2.hertz.getValue() == 0) { me["Gen2Hz"].setText(sprintf("XX")); } else { - me["Gen2Hz"].setText(sprintf("%s", math.round(gen2_hz.getValue()))); + me["Gen2Hz"].setText(sprintf("%s", math.round(systems.ELEC.Source.IDG2.hertz.getValue()))); } if (eng2_running.getValue() == 0) { @@ -1620,7 +1584,7 @@ var canvas_lowerECAM_elec = { me["GEN2-num-label"].setColor(0.8078,0.8039,0.8078); } - if (gen2_volts.getValue() > 120 or gen2_volts.getValue() < 110 or gen2_hz.getValue() > 410 or gen2_hz.getValue() < 390 or gen2_load.getValue() >= 110) { + if (systems.ELEC.Source.IDG2.volts.getValue() > 120 or systems.ELEC.Source.IDG2.volts.getValue() < 110 or systems.ELEC.Source.IDG2.hertz.getValue() > 410 or systems.ELEC.Source.IDG2.hertz.getValue() < 390 or gen2_load.getValue() >= 110) { me["GEN2-label"].setColor(0.7333,0.3803,0); } else { me["GEN2-label"].setColor(0.8078,0.8039,0.8078); @@ -1633,13 +1597,13 @@ var canvas_lowerECAM_elec = { } - if (gen2_volts.getValue() > 120 or gen2_volts.getValue() < 110) { + if (systems.ELEC.Source.IDG2.volts.getValue() > 120 or systems.ELEC.Source.IDG2.volts.getValue() < 110) { me["Gen2Volt"].setColor(0.7333,0.3803,0); } else { me["Gen2Volt"].setColor(0.0509,0.7529,0.2941); } - if (gen2_hz.getValue() > 410 or gen2_hz.getValue() < 390) { + if (systems.ELEC.Source.IDG2.hertz.getValue() > 410 or systems.ELEC.Source.IDG2.hertz.getValue() < 390) { me["Gen2Hz"].setColor(0.7333,0.3803,0); } else { me["Gen2Hz"].setColor(0.0509,0.7529,0.2941); @@ -1654,7 +1618,7 @@ var canvas_lowerECAM_elec = { me["APUGentext"].setColor(0.8078,0.8039,0.8078); } else { me["APU-border"].show(); - if (gen_apu.getValue() == 0) { + if (systems.ELEC.Source.APU.contact.getValue() == 0) { me["APU-content"].hide(); me["APUGEN-off"].show(); me["APUGentext"].setColor(0.7333,0.3803,0); @@ -1662,15 +1626,15 @@ var canvas_lowerECAM_elec = { me["APU-content"].show(); me["APUGEN-off"].hide(); # me["APUGenLoad"].setText(sprintf("%s", math.round(apu_load.getValue()))); - me["APUGenVolt"].setText(sprintf("%s", math.round(apu_volts.getValue()))); + me["APUGenVolt"].setText(sprintf("%s", math.round(systems.ELEC.Source.APU.volts.getValue()))); - if (apu_hz.getValue() == 0) { + if (systems.ELEC.Source.APU.hertz.getValue() == 0) { me["APUGenHz"].setText(sprintf("XX")); } else { - me["APUGenHz"].setText(sprintf("%s", math.round(apu_hz.getValue()))); + me["APUGenHz"].setText(sprintf("%s", math.round(systems.ELEC.Source.APU.hertz.getValue()))); } - if (apu_volts.getValue() > 120 or apu_volts.getValue() < 110 or apu_hz.getValue() > 410 or apu_hz.getValue() < 390 or apu_load.getValue() >= 110) { + if (systems.ELEC.Source.APU.volts.getValue() > 120 or systems.ELEC.Source.APU.volts.getValue() < 110 or systems.ELEC.Source.APU.hertz.getValue() > 410 or systems.ELEC.Source.APU.hertz.getValue() < 390 or apu_load.getValue() >= 110) { me["APUGentext"].setColor(0.7333,0.3803,0); } else { me["APUGentext"].setColor(0.8078,0.8039,0.8078); @@ -1682,13 +1646,13 @@ var canvas_lowerECAM_elec = { me["APUGenLoad"].setColor(0.0509,0.7529,0.2941); } - if (apu_volts.getValue() > 120 or apu_volts.getValue() < 110) { + if (systems.ELEC.Source.APU.volts.getValue() > 120 or systems.ELEC.Source.APU.volts.getValue() < 110) { me["APUGenVolt"].setColor(0.7333,0.3803,0); } else { me["APUGenVolt"].setColor(0.0509,0.7529,0.2941); } - if (apu_hz.getValue() > 410 or apu_hz.getValue() < 390) { + if (systems.ELEC.Source.APU.hertz.getValue() > 410 or systems.ELEC.Source.APU.hertz.getValue() < 390) { me["APUGenHz"].setColor(0.7333,0.3803,0); } else { me["APUGenHz"].setColor(0.0509,0.7529,0.2941); @@ -1702,29 +1666,29 @@ var canvas_lowerECAM_elec = { me["EXTPWR-group"].hide(); } else { me["EXTPWR-group"].show(); - me["ExtVolt"].setText(sprintf("%s", math.round(ext_volts.getValue()))); - me["ExtHz"].setText(sprintf("%s", math.round(ext_hz.getValue()))); + me["ExtVolt"].setText(sprintf("%s", math.round(systems.ELEC.Source.Ext.volts.getValue()))); + me["ExtHz"].setText(sprintf("%s", math.round(systems.ELEC.Source.Ext.hertz.getValue()))); - if (ext_hz.getValue() > 410 or ext_hz.getValue() < 390 or ext_volts.getValue() > 120 or ext_volts.getValue() < 110) { + if (systems.ELEC.Source.Ext.hertz.getValue() > 410 or systems.ELEC.Source.Ext.hertz.getValue() < 390 or systems.ELEC.Source.Ext.volts.getValue() > 120 or systems.ELEC.Source.Ext.volts.getValue() < 110) { me["EXTPWR-label"].setColor(0.7333,0.3803,0); } else { me["EXTPWR-label"].setColor(0.0509,0.7529,0.2941); } - if (ext_hz.getValue() > 410 or ext_hz.getValue() < 390) { + if (systems.ELEC.Source.Ext.hertz.getValue() > 410 or systems.ELEC.Source.Ext.hertz.getValue() < 390) { me["ExtHz"].setColor(0.7333,0.3803,0); } else { me["ExtHz"].setColor(0.0509,0.7529,0.2941); } - if (ext_volts.getValue() > 120 or ext_volts.getValue() < 110) { + if (systems.ELEC.Source.Ext.volts.getValue() > 120 or systems.ELEC.Source.Ext.volts.getValue() < 110) { me["ExtVolt"].setColor(0.7333,0.3803,0); } else { me["ExtVolt"].setColor(0.0509,0.7529,0.2941); } } - if (galleyshed.getValue()) { + if (systems.ELEC.SomeThing.galley.getValue()) { me["GalleyShed"].show(); } else { me["GalleyShed"].hide(); @@ -1781,25 +1745,25 @@ var canvas_lowerECAM_elec = { # Managment of the connecting lines between the components - if (getprop("/systems/electrical/relay/apu-glc/contact-pos") and (getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-1/contact-pos") or getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-2/contact-pos"))) { + if (systems.ELEC.Relay.apuGlc.getValue() and (systems.ELEC.Relay.acTie1.getValue() or systems.ELEC.Relay.acTie2.getValue())) { me["APU-out"].show(); } else { me["APU-out"].hide(); } - if (getprop("/systems/electrical/relay/ext-epc/contact-pos") and (getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-1/contact-pos") or getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-2/contact-pos"))) { + if (systems.ELEC.Relay.extEpc.getValue() and (systems.ELEC.Relay.acTie1.getValue() or systems.ELEC.Relay.acTie2.getValue())) { me["EXT-out"].show(); } else { me["EXT-out"].hide(); } - if (gen1_volts.getValue() >= 110 and getprop("/systems/electrical/relay/gen-1-glc/contact-pos")) { + if (systems.ELEC.Source.IDG1.volts.getValue() >= 110 and systems.ELEC.Relay.glc1.getValue()) { me["ELEC-Line-GEN1-AC1"].show(); } else { me["ELEC-Line-GEN1-AC1"].hide(); } - if (gen2_volts.getValue() >= 110 and getprop("/systems/electrical/relay/gen-2-glc/contact-pos")) { + if (systems.ELEC.Source.IDG2.volts.getValue() >= 110 and systems.ELEC.Relay.glc2.getValue()) { me["ELEC-Line-GEN2-AC2"].show(); } else { me["ELEC-Line-GEN2-AC2"].hide(); @@ -1817,38 +1781,38 @@ var canvas_lowerECAM_elec = { me["AC2-in"].hide(); } - if (getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-1/contact-pos") and getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-2/contact-pos")) { + if (systems.ELEC.Relay.acTie1.getValue() and systems.ELEC.Relay.acTie2.getValue()) { me["ELEC-Line-APU-AC1"].show(); me["ELEC-Line-APU-EXT"].show(); me["ELEC-Line-EXT-AC2"].show(); } else { - if (getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-1/contact-pos")) { + if (systems.ELEC.Relay.acTie1.getValue()) { me["ELEC-Line-APU-AC1"].show(); } else { me["ELEC-Line-APU-AC1"].hide(); } - if ((getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-2/contact-pos") and getprop("/systems/electrical/relay/apu-glc/contact-pos") and !getprop("/systems/electrical/relay/gen-2-glc/contact-pos")) or (getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-1/contact-pos") and getprop("/systems/electrical/relay/ext-epc/contact-pos") and !getprop("/systems/electrical/relay/gen-1-glc/contact-pos"))) { + if ((systems.ELEC.Relay.acTie2.getValue() and systems.ELEC.Relay.apuGlc.getValue() and !systems.ELEC.Relay.glc2.getValue()) or (systems.ELEC.Relay.acTie1.getValue() and systems.ELEC.Relay.extEpc.getValue() and !systems.ELEC.Relay.glc1.getValue())) { me["ELEC-Line-APU-EXT"].show(); } else { me["ELEC-Line-APU-EXT"].hide(); } - if (getprop("/systems/electrical/relay/ac-bus-ac-bus-tie-2/contact-pos")) { + if (systems.ELEC.Relay.acTie2.getValue()) { me["ELEC-Line-EXT-AC2"].show(); } else { me["ELEC-Line-EXT-AC2"].hide(); } } - if (getprop("/systems/electrical/relay/ac-ess-feed-1/contact-pos") == 1) { + if (systems.ELEC.Relay.acEssFeed1.getValue()) { if (systems.ELEC.Bus.ac1.getValue() >= 110) { me["ELEC-Line-AC1-ACESS"].show(); } else { me["ELEC-Line-AC1-ACESS"].hide(); } me["ELEC-Line-AC2-ACESS"].hide(); - } elsif (getprop("/systems/electrical/relay/ac-ess-feed-2/contact-pos") == 1) { + } elsif (systems.ELEC.Relay.acEssFeed2.getValue()) { me["ELEC-Line-AC1-ACESS"].hide(); if (systems.ELEC.Bus.ac2.getValue() >= 110) { me["ELEC-Line-AC2-ACESS"].show(); @@ -1860,7 +1824,7 @@ var canvas_lowerECAM_elec = { me["ELEC-Line-AC2-ACESS"].hide(); } - if (getprop("/systems/electrical/relay/tr-contactor-1/contact-pos") == 1) { + if (systems.ELEC.Relay.tr1Contactor.getValue()) { if (systems.ELEC.Bus.ac1.getValue() < 110) { me["ELEC-Line-AC1-TR1"].setColorFill(0.7333,0.3803,0); } else { @@ -1873,7 +1837,7 @@ var canvas_lowerECAM_elec = { me["ELEC-Line-TR1-DC1"].hide(); } - if (getprop("/systems/electrical/relay/tr-contactor-2/contact-pos") == 1) { + if (systems.ELEC.Relay.tr2Contactor.getValue()) { if (systems.ELEC.Bus.ac2.getValue() < 110) { me["ELEC-Line-AC2-TR2"].setColorFill(0.7333,0.3803,0); } else { @@ -1886,25 +1850,25 @@ var canvas_lowerECAM_elec = { me["ELEC-Line-TR2-DC2"].hide(); } - if (getprop("/systems/electrical/relay/dc-bus-tie-dc-1/contact-pos")) { + if (systems.ELEC.Relay.dcTie1.getValue()) { me["ELEC-Line-DC1-DCESS_DCBAT"].show(); } else { me["ELEC-Line-DC1-DCESS_DCBAT"].hide(); } - if (getprop("/systems/electrical/relay/dc-ess-feed-bat/contact-pos")) { + if (systems.ELEC.Relay.dcEssFeedBat.getValue()) { me["ELEC-Line-DC1-DCESS"].show(); } else { me["ELEC-Line-DC1-DCESS"].hide(); } - if (getprop("/systems/electrical/relay/dc-ess-feed-bat/contact-pos") or getprop("/systems/electrical/relay/dc-bus-tie-dc-1/contact-pos")) { + if (systems.ELEC.Relay.dcEssFeedBat.getValue() or systems.ELEC.Relay.dcTie1.getValue()) { me["ELEC-Line-DC1-DCBAT"].show(); } else { me["ELEC-Line-DC1-DCBAT"].hide(); } - if (getprop("/systems/electrical/relay/dc-bus-tie-dc-2/contact-pos")) { + if (systems.ELEC.Relay.dcTie2.getValue()) { me["ELEC-Line-DC2-DCBAT"].show(); me["ELEC-Line-DC2-DCESS_DCBAT"].show(); } else { @@ -1912,7 +1876,7 @@ var canvas_lowerECAM_elec = { me["ELEC-Line-DC2-DCESS_DCBAT"].hide(); } - if (getprop("/systems/electrical/relay/ac-ess-feed-emer-gen/contact-pos")) { + if (systems.ELEC.Relay.acEssEmerGenFeed.getValue()) { me["EMERGEN-out"].show(); me["ELEC-Line-Emergen-ESSTR"].show(); } else { @@ -1920,13 +1884,13 @@ var canvas_lowerECAM_elec = { me["ELEC-Line-Emergen-ESSTR"].hide(); } - if (systems.ELEC.Bus.acEss.getValue() >= 110 and !getprop("/systems/electrical/relay/ac-ess-feed-emer-gen/contact-pos") and (!getprop("/systems/electrical/relay/tr-contactor-1/contact-pos") or !getprop("/systems/electrical/relay/tr-contactor-2/contact-pos"))) { + if (systems.ELEC.Bus.acEss.getValue() >= 110 and !systems.ELEC.Relay.acEssEmerGenFeed.getValue() and (!systems.ELEC.Relay.tr1Contactor.getValue() or !systems.ELEC.Relay.tr2Contactor.getValue())) { me["ELEC-Line-ACESS-TRESS"].show(); } else { me["ELEC-Line-ACESS-TRESS"].hide(); } - if (getprop("/systems/electrical/relay/dc-ess-feed-tr/contact-pos")) { + if (systems.ELEC.Relay.essTrContactor.getValue()) { me["ELEC-Line-ESSTR-DCESS"].show(); } else { me["ELEC-Line-ESSTR-DCESS"].hide(); @@ -1989,7 +1953,7 @@ var canvas_lowerECAM_eng = { me["OilPSI2-needle"].setRotation((oil_psi2.getValue() + 90) * D2R); # Fuel Used - if (acconfig_weight_kgs.getValue() == 1) { + if (acconfig_weight_kgs.getValue()) { me["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10))); me["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10))); me["Fused-weight-unit"].setText("KG"); @@ -2303,7 +2267,7 @@ var canvas_lowerECAM_fctl = { if (elac1.getValue()) { me["elac1"].setColor(0.0509,0.7529,0.2941); me["path4249"].setColor(0.0509,0.7529,0.2941); - } else if ((elac1.getValue() == 0) or (elac1_fail.getValue() == 1)) { + } else if ((elac1.getValue() == 0) or (elac1_fail.getValue())) { me["elac1"].setColor(0.7333,0.3803,0); me["path4249"].setColor(0.7333,0.3803,0); } @@ -2311,7 +2275,7 @@ var canvas_lowerECAM_fctl = { if (elac2.getValue()) { me["elac2"].setColor(0.0509,0.7529,0.2941); me["path4249-3"].setColor(0.0509,0.7529,0.2941); - } else if ((elac2.getValue() == 0) or (elac2_fail.getValue() == 1)) { + } else if ((elac2.getValue() == 0) or (elac2_fail.getValue())) { me["elac2"].setColor(0.7333,0.3803,0); me["path4249-3"].setColor(0.7333,0.3803,0); } @@ -2319,7 +2283,7 @@ var canvas_lowerECAM_fctl = { if (sec1.getValue()) { me["sec1"].setColor(0.0509,0.7529,0.2941); me["path4249-3-6-7"].setColor(0.0509,0.7529,0.2941); - } else if ((sec1.getValue() == 0) or (sec1_fail.getValue() == 1)) { + } else if ((sec1.getValue() == 0) or (sec1_fail.getValue())) { me["sec1"].setColor(0.7333,0.3803,0); me["path4249-3-6-7"].setColor(0.7333,0.3803,0); } @@ -2327,7 +2291,7 @@ var canvas_lowerECAM_fctl = { if (sec2.getValue()) { me["sec2"].setColor(0.0509,0.7529,0.2941); me["path4249-3-6-7-5"].setColor(0.0509,0.7529,0.2941); - } else if ((sec2.getValue() == 0) or (sec2_fail.getValue() == 1)) { + } else if ((sec2.getValue() == 0) or (sec2_fail.getValue())) { me["sec2"].setColor(0.7333,0.3803,0); me["path4249-3-6-7-5"].setColor(0.7333,0.3803,0); } @@ -2335,7 +2299,7 @@ var canvas_lowerECAM_fctl = { if (sec3.getValue()) { me["sec3"].setColor(0.0509,0.7529,0.2941); me["path4249-3-6"].setColor(0.0509,0.7529,0.2941); - } else if ((sec3.getValue() == 0) or (sec3_fail.getValue() == 1)) { + } else if ((sec3.getValue() == 0) or (sec3_fail.getValue())) { me["sec3"].setColor(0.7333,0.3803,0); me["path4249-3-6"].setColor(0.7333,0.3803,0); } @@ -2407,7 +2371,6 @@ var canvas_lowerECAM_fuel = { update: func() { _weight_kgs = acconfig_weight_kgs.getValue(); - # if (getprop("/engines/engine[0]/n1-actual") < getprop("/controls/engines/idle-limit")) { if (eng1_n1.getValue() <= 18.8) { me["ENG1idFFlow"].setColor(0.7333,0.3803,0); me["FUEL-ENG-1-label"].setColor(0.7333,0.3803,0); @@ -2416,7 +2379,6 @@ var canvas_lowerECAM_fuel = { me["FUEL-ENG-1-label"].setColor(0.8078,0.8039,0.8078); } - # if (getprop("/engines/engine[1]/n1-actual") < getprop("/controls/engines/idle-limit")) { if (eng2_n1.getValue() <= 18.5) { me["ENG2idFFlow"].setColor(0.7333,0.3803,0); me["FUEL-ENG-2-label"].setColor(0.7333,0.3803,0); @@ -2455,7 +2417,7 @@ var canvas_lowerECAM_fuel = { # TODO use the valve prop and add amber if difference between eng master and valve # TODO add transition state - if (systems.FUEL.Valves.lpValve1.getValue() == 1) { + if (systems.FUEL.Valves.lpValve1.getValue()) { me["FUEL-ENG-Master-1"].setRotation(0); me["FUEL-ENG-Master-1"].setColor(0.0509,0.7529,0.2941); me["FUEL-ENG-Master-1"].setColorFill(0.0509,0.7529,0.2941); @@ -2469,7 +2431,7 @@ var canvas_lowerECAM_fuel = { # TODO use the valve prop and add amber if difference between eng master and valve # TODO add transition state - if (systems.FUEL.Valves.lpValve2.getValue() == 1) { + if (systems.FUEL.Valves.lpValve2.getValue()) { me["FUEL-ENG-Master-2"].setRotation(0); me["FUEL-ENG-Master-2"].setColor(0.0509,0.7529,0.2941); me["FUEL-ENG-Master-2"].setColorFill(0.0509,0.7529,0.2941); @@ -2609,7 +2571,7 @@ var canvas_lowerECAM_fuel = { if (systems.FUEL.Valves.transfer1.getValue() == 0) { me["FUEL-Left-Transfer"].hide(); } else { - if (systems.FUEL.Valves.transfer1.getValue() == 1) { + if (systems.FUEL.Valves.transfer1.getValue()) { me["FUEL-Left-Transfer"].setColor(0.0509,0.7529,0.2941); } else { me["FUEL-Left-Transfer"].setColor(0.7333,0.3803,0); @@ -2620,7 +2582,7 @@ var canvas_lowerECAM_fuel = { if (systems.FUEL.Valves.transfer2.getValue() == 0) { me["FUEL-Right-Transfer"].hide(); } else { - if (systems.FUEL.Valves.transfer2.getValue() == 1) { + if (systems.FUEL.Valves.transfer2.getValue()) { me["FUEL-Right-Transfer"].setColor(0.0509,0.7529,0.2941); } else { me["FUEL-Right-Transfer"].setColor(0.7333,0.3803,0); @@ -2635,13 +2597,13 @@ var canvas_lowerECAM_fuel = { } # APU - if (systems.FUEL.Valves.apu.getValue() == 1 and systems.APUNodes.Controls.master.getValue() and !systems.APUNodes.Controls.fire.getValue()) { + if (systems.FUEL.Valves.apu.getValue() and systems.APUNodes.Controls.master.getValue() and !systems.APUNodes.Controls.fire.getValue()) { me["FUEL-APU-label"].setColor(0.8078, 0.8039, 0.8078); me["FUEL-APU-line"].setColor(0.0509,0.7529,0.2941); me["FUEL-APU-arrow"].setColor(0.0509,0.7529,0.2941); me["FUEL-APU-line"].show(); me["FUEL-APU-arrow"].show(); - } elsif (systems.FUEL.Valves.apu.getValue() == 1 and (!systems.APUNodes.Controls.master.getValue() or systems.APUNodes.Controls.fire.getValue())) { + } elsif (systems.FUEL.Valves.apu.getValue() and (!systems.APUNodes.Controls.master.getValue() or systems.APUNodes.Controls.fire.getValue())) { me["FUEL-APU-label"].setColor(0.7333,0.3803,0); me["FUEL-APU-line"].setColor(0.7333,0.3803,0); me["FUEL-APU-arrow"].setColor(0.7333,0.3803,0); @@ -2887,37 +2849,37 @@ var canvas_lowerECAM_hyd = { } } - if (y_resv_lo_air_press.getValue() == 1) { + if (y_resv_lo_air_press.getValue()) { me["LO-AIR-PRESS-Yellow"].show(); } else { me["LO-AIR-PRESS-Yellow"].hide(); } - if (b_resv_lo_air_press.getValue() == 1) { + if (b_resv_lo_air_press.getValue()) { me["LO-AIR-PRESS-Blue"].show(); } else { me["LO-AIR-PRESS-Blue"].hide(); } - if (g_resv_lo_air_press.getValue() == 1) { + if (g_resv_lo_air_press.getValue()) { me["LO-AIR-PRESS-Green"].show(); } else { me["LO-AIR-PRESS-Green"].hide(); } - if (elec_pump_y_ovht.getValue() == 1) { + if (elec_pump_y_ovht.getValue()) { me["ELEC-OVHT-Yellow"].show(); } else { me["ELEC-OVHT-Yellow"].hide(); } - if (elec_pump_b_ovht.getValue() == 1) { + if (elec_pump_b_ovht.getValue()) { me["ELEC-OVHT-Blue"].show(); } else { me["ELEC-OVHT-Blue"].hide(); } - if (systems.HYD.Rat.position.getValue() == 1) { + if (systems.HYD.Rat.position.getValue()) { me["RAT-stowed"].hide(); me["RAT-not-stowed"].show(); } else { @@ -2925,19 +2887,19 @@ var canvas_lowerECAM_hyd = { me["RAT-not-stowed"].hide(); } - if (y_resv_ovht.getValue() == 1) { + if (y_resv_ovht.getValue()) { me["OVHT-Yellow"].show(); } else { me["OVHT-Yellow"].hide(); } - if (b_resv_ovht.getValue() == 1) { + if (b_resv_ovht.getValue()) { me["OVHT-Green"].show(); } else { me["OVHT-Green"].hide(); } - if (g_resv_ovht.getValue() == 1) { + if (g_resv_ovht.getValue()) { me["OVHT-Blue"].show(); } else { me["OVHT-Blue"].hide(); @@ -3593,13 +3555,13 @@ setlistener("sim/signals/fdm-initialized", func { lowerECAM_test = canvas_lowerECAM_test.new(group_test, "Aircraft/A320-family/Models/Instruments/Common/res/du-test.svg"); lowerECAM_update.start(); - if (getprop("/systems/acconfig/options/lecam-rate") > 1) { + if (rate.getValue() > 1) { l_rateApply(); } }); var l_rateApply = func { - lowerECAM_update.restart(0.05 * getprop("/systems/acconfig/options/lecam-rate")); + lowerECAM_update.restart(0.05 * rate.getValue()); } var lowerECAM_update = maketimer(0.05, func { diff --git a/Nasal/Systems/electrical.nas b/Nasal/Systems/electrical.nas index 81ba1126..6b95c723 100644 --- a/Nasal/Systems/electrical.nas +++ b/Nasal/Systems/electrical.nas @@ -17,38 +17,38 @@ var ELEC = { _timer2On: 0, EmerElec: props.globals.getNode("/systems/electrical/some-electric-thingie/emer-elec-config"), Bus: { - acEss: props.globals.getNode("systems/electrical/bus/ac-ess"), - acEssShed: props.globals.getNode("systems/electrical/bus/ac-ess-shed"), - ac1: props.globals.getNode("systems/electrical/bus/ac-1"), - ac2: props.globals.getNode("systems/electrical/bus/ac-2"), - dcBat: props.globals.getNode("systems/electrical/bus/dc-bat"), - dcEss: props.globals.getNode("systems/electrical/bus/dc-ess"), - dcEssShed: props.globals.getNode("systems/electrical/bus/dc-ess-shed"), - dc1: props.globals.getNode("systems/electrical/bus/dc-1"), - dc2: props.globals.getNode("systems/electrical/bus/dc-2"), - dcHot1: props.globals.getNode("systems/electrical/bus/dc-hot-1"), - dcHot2: props.globals.getNode("systems/electrical/bus/dc-hot-2"), + acEss: props.globals.getNode("/systems/electrical/bus/ac-ess"), + acEssShed: props.globals.getNode("/systems/electrical/bus/ac-ess-shed"), + ac1: props.globals.getNode("/systems/electrical/bus/ac-1"), + ac2: props.globals.getNode("/systems/electrical/bus/ac-2"), + dcBat: props.globals.getNode("/systems/electrical/bus/dc-bat"), + dcEss: props.globals.getNode("/systems/electrical/bus/dc-ess"), + dcEssShed: props.globals.getNode("/systems/electrical/bus/dc-ess-shed"), + dc1: props.globals.getNode("/systems/electrical/bus/dc-1"), + dc2: props.globals.getNode("/systems/electrical/bus/dc-2"), + dcHot1: props.globals.getNode("/systems/electrical/bus/dc-hot-1"), + dcHot2: props.globals.getNode("/systems/electrical/bus/dc-hot-2"), }, Fail: { - acEssBusFault: props.globals.getNode("systems/failures/electrical/ac-ess-bus"), - ac1BusFault: props.globals.getNode("systems/failures/electrical/ac-1-bus"), - ac2BusFault: props.globals.getNode("systems/failures/electrical/ac-2-bus"), - bat1Fault: props.globals.getNode("systems/failures/electrical/bat-1"), - bat2Fault: props.globals.getNode("systems/failures/electrical/bat-2"), - dcBatBusFault: props.globals.getNode("systems/failures/electrical/dc-bat-bus"), - dcEssBusFault: props.globals.getNode("systems/failures/electrical/dc-ess-bus"), - dc1BusFault: props.globals.getNode("systems/failures/electrical/dc-1-bus"), - dc2BusFault: props.globals.getNode("systems/failures/electrical/dc-2-bus"), - emerGenFault: props.globals.getNode("systems/failures/electrical/emer-gen"), - essTrFault: props.globals.getNode("systems/failures/electrical/ess-tr"), - gen1Fault: props.globals.getNode("systems/failures/electrical/gen-1"), - gen2Fault: props.globals.getNode("systems/failures/electrical/gen-2"), - genApuFault: props.globals.getNode("systems/failures/electrical/apu"), - idg1Fault: props.globals.getNode("systems/failures/electrical/idg-1"), # oil leak or low press - idg2Fault: props.globals.getNode("systems/failures/electrical/idg-2"), - statInvFault: props.globals.getNode("systems/failures/electrical/stat-inv"), - tr1Fault: props.globals.getNode("systems/failures/electrical/tr-1"), - tr2Fault: props.globals.getNode("systems/failures/electrical/tr-2"), + acEssBusFault: props.globals.getNode("/systems/failures/electrical/ac-ess-bus"), + ac1BusFault: props.globals.getNode("/systems/failures/electrical/ac-1-bus"), + ac2BusFault: props.globals.getNode("/systems/failures/electrical/ac-2-bus"), + bat1Fault: props.globals.getNode("/systems/failures/electrical/bat-1"), + bat2Fault: props.globals.getNode("/systems/failures/electrical/bat-2"), + dcBatBusFault: props.globals.getNode("/systems/failures/electrical/dc-bat-bus"), + dcEssBusFault: props.globals.getNode("/systems/failures/electrical/dc-ess-bus"), + dc1BusFault: props.globals.getNode("/systems/failures/electrical/dc-1-bus"), + dc2BusFault: props.globals.getNode("/systems/failures/electrical/dc-2-bus"), + emerGenFault: props.globals.getNode("/systems/failures/electrical/emer-gen"), + essTrFault: props.globals.getNode("/systems/failures/electrical/ess-tr"), + gen1Fault: props.globals.getNode("/systems/failures/electrical/gen-1"), + gen2Fault: props.globals.getNode("/systems/failures/electrical/gen-2"), + genApuFault: props.globals.getNode("/systems/failures/electrical/apu"), + idg1Fault: props.globals.getNode("/systems/failures/electrical/idg-1"), # oil leak or low press + idg2Fault: props.globals.getNode("/systems/failures/electrical/idg-2"), + statInvFault: props.globals.getNode("/systems/failures/electrical/stat-inv"), + tr1Fault: props.globals.getNode("/systems/failures/electrical/tr-1"), + tr2Fault: props.globals.getNode("/systems/failures/electrical/tr-2"), }, Generic: { adf: props.globals.initNode("/systems/electrical/outputs/adf", 0, "DOUBLE"), @@ -69,39 +69,86 @@ var ELEC = { turnCoordinator: props.globals.initNode("/systems/electrical/outputs/turn-coordinator", 0, "DOUBLE"), }, Light: { + bat1Fault: props.globals.getNode("/systems/electrical/light/bat-1-fault"), + bat2Fault: props.globals.getNode("/systems/electrical/light/bat-2-fault"), }, Misc: { }, Relay: { - essTrContactor: props.globals.getNode("systems/electrical/relay/dc-ess-feed-tr/contact-pos"), + acEssFeed1: props.globals.getNode("/systems/electrical/relay/ac-ess-feed-1/contact-pos"), + acEssFeed2: props.globals.getNode("/systems/electrical/relay/ac-ess-feed-2/contact-pos"), + acEssEmerGenFeed: props.globals.getNode("/systems/electrical/relay/ac-ess-feed-emer-gen/contact-pos"), + acTie1: props.globals.getNode("/systems/electrical/relay/ac-bus-ac-bus-tie-1/contact-pos"), + acTie2: props.globals.getNode("/systems/electrical/relay/ac-bus-ac-bus-tie-2/contact-pos"), + apuGlc: props.globals.getNode("/systems/electrical/relay/apu-glc/contact-pos"), + dcEssFeedBat: props.globals.getNode("/systems/electrical/relay/dc-ess-feed-bat/contact-pos"), + essTrContactor: props.globals.getNode("/systems/electrical/relay/dc-ess-feed-tr/contact-pos"), + extEpc: props.globals.getNode("/systems/electrical/relay/ext-epc/contact-pos"), + dcTie1: props.globals.getNode("/systems/electrical/relay/dc-bus-tie-dc-1/contact-pos"), + dcTie2: props.globals.getNode("/systems/electrical/relay/dc-bus-tie-dc-2/contact-pos"), + glc1: props.globals.getNode("/systems/electrical/relay/gen-1-glc/contact-pos"), + glc2: props.globals.getNode("/systems/electrical/relay/gen-2-glc/contact-pos"), + tr1Contactor: props.globals.getNode("/systems/electrical/relay/tr-contactor-1/contact-pos"), + tr2Contactor: props.globals.getNode("/systems/electrical/relay/tr-contactor-2/contact-pos"), }, SomeThing: { - emerGenSignal: props.globals.getNode("systems/electrical/some-electric-thingie/emer-gen-operate"), + emerGenSignal: props.globals.getNode("/systems/electrical/some-electric-thingie/emer-gen-operate"), + galley: props.globals.getNode("/systems/electrical/some-electric-thingie/galley-shed"), }, Source: { + APU: { + volts: props.globals.getNode("/systems/electrical/sources/apu/output-volt"), + hertz: props.globals.getNode("/systems/electrical/sources/apu/output-hertz"), + contact: props.globals.getNode("/systems/electrical/relay/apu-glc/contact-pos"), + }, Bat1: { - volt: props.globals.getNode("systems/electrical/sources/bat-1/volt"), - amps: props.globals.getNode("systems/electrical/sources/bat-1/amps"), - contact: props.globals.getNode("systems/electrical/sources/bat-1/contact"), - percent: props.globals.getNode("systems/electrical/sources/bat-1/percent"), - time: props.globals.getNode("systems/electrical/sources/bat-1/time"), + volt: props.globals.getNode("/systems/electrical/sources/bat-1/volt"), + amps: props.globals.getNode("/systems/electrical/sources/bat-1/amps"), + contact: props.globals.getNode("/systems/electrical/sources/bat-1/contact"), + percent: props.globals.getNode("/systems/electrical/sources/bat-1/percent"), + direction: props.globals.getNode("/systems/electrical/sources/bat-1/direction"), + time: props.globals.getNode("/systems/electrical/sources/bat-1/time"), }, Bat2: { - volt: props.globals.getNode("systems/electrical/sources/bat-2/volt"), - amps: props.globals.getNode("systems/electrical/sources/bat-2/amps"), - contact: props.globals.getNode("systems/electrical/sources/bat-2/contact"), - percent: props.globals.getNode("systems/electrical/sources/bat-2/percent"), - time: props.globals.getNode("systems/electrical/sources/bat-2/time"), + volt: props.globals.getNode("/systems/electrical/sources/bat-2/volt"), + amps: props.globals.getNode("/systems/electrical/sources/bat-2/amps"), + contact: props.globals.getNode("/systems/electrical/sources/bat-2/contact"), + percent: props.globals.getNode("/systems/electrical/sources/bat-2/percent"), + direction: props.globals.getNode("/systems/electrical/sources/bat-2/direction"), + time: props.globals.getNode("/systems/electrical/sources/bat-2/time"), + }, + EmerGen: { + volts: props.globals.getNode("/systems/electrical/sources/emer-gen/output-volt"), + hertz: props.globals.getNode("/systems/electrical/sources/emer-gen/output-hertz"), + }, + Ext: { + volts: props.globals.getNode("/systems/electrical/sources/ext/output-volt"), + voltsRelay: props.globals.getNode("/systems/electrical/relay/emer-glc/output"), + hertz: props.globals.getNode("/systems/electrical/sources/ext/output-hertz"), + }, + tr1: { + outputVolt: props.globals.getNode("/systems/electrical/relay/tr-contactor-1/output"), + outputAmp: props.globals.getNode("/systems/electrical/relay/tr-contactor-1/output-amp"), + }, + tr2: { + outputVolt: props.globals.getNode("/systems/electrical/relay/tr-contactor-2/output"), + outputAmp: props.globals.getNode("/systems/electrical/relay/tr-contactor-2/output-amp"), }, trEss: { - outputVolt: props.globals.getNode("systems/electrical/sources/tr-ess/output-volt"), - outputAmp: props.globals.getNode("systems/electrical/sources/tr-ess/output-amp"), + outputVolt: props.globals.getNode("/systems/electrical/sources/tr-ess/output-volt"), + outputAmp: props.globals.getNode("/systems/electrical/sources/tr-ess/output-amp"), + outputVoltRelay: props.globals.getNode("/systems/electrical/relay/dc-ess-feed-tr/output"), + outputAmpRelay: props.globals.getNode("/systems/electrical/relay/dc-ess-feed-tr/output-amp"), }, IDG1: { - gcrRelay: props.globals.getNode("systems/electrical/sources/idg-1/gcr-relay"), + gcrRelay: props.globals.getNode("/systems/electrical/sources/idg-1/gcr-relay"), + hertz: props.globals.getNode("/systems/electrical/sources/idg-1/output-hertz"), + volts: props.globals.getNode("/systems/electrical/sources/idg-1/output-volt"), }, IDG2: { - gcrRelay: props.globals.getNode("systems/electrical/sources/idg-1/gcr-relay"), + gcrRelay: props.globals.getNode("/systems/electrical/sources/idg-2/gcr-relay"), + hertz: props.globals.getNode("/systems/electrical/sources/idg-2/output-hertz"), + volts: props.globals.getNode("/systems/electrical/sources/idg-2/output-volt"), }, }, Switch: { From 74cd14db0259d6ff54b1ff477184cdbab2233f56 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Thu, 17 Sep 2020 18:15:50 +0100 Subject: [PATCH 4/4] Split the ECAM controller loop to improve performance --- Nasal/ECAM/ECAM-controller.nas | 9 ++++++++- Nasal/Effects/light-manager.nas | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Nasal/ECAM/ECAM-controller.nas b/Nasal/ECAM/ECAM-controller.nas index 5e029a8f..d4fca234 100644 --- a/Nasal/ECAM/ECAM-controller.nas +++ b/Nasal/ECAM/ECAM-controller.nas @@ -236,14 +236,21 @@ var status = { var ECAM_controller = { _recallCounter: 0, _noneActive: 0, + counter: 0, init: func() { ECAMloopTimer.start(); + me.counter = 0; me.reset(); }, loop: func() { if ((systems.ELEC.Bus.acEss.getValue() >= 110 or systems.ELEC.Bus.ac2.getValue() >= 110) and !pts.Acconfig.running.getBoolValue()) { # update FWC phases - phaseLoop(); + if (me.counter == 0) { + phaseLoop(); + me.counter = 1; + return; + } + me.counter = 0; # check active messages messages_priority_3(); diff --git a/Nasal/Effects/light-manager.nas b/Nasal/Effects/light-manager.nas index 035debdd..31e7b085 100644 --- a/Nasal/Effects/light-manager.nas +++ b/Nasal/Effects/light-manager.nas @@ -197,15 +197,15 @@ var light_manager = { var sh = math.sin(heading); var ch = math.cos(heading); - if ((ll1 == 1 and getprop("systems/electrical/bus/ac-1") != 0) and (ll2 == 1 and getprop("systems/electrical/bus/ac-2") !=0)) { + if ((ll1 == 1 and systems.ELEC.Bus.ac1.getValue() != 0) and (ll2 == 1 and systems.ELEC.Bus.ac2.getValue() != 0)) { me.light1_ypos = 0.0; me.light1_setSize(16); me.light1_on(); - } else if (ll1 == 1 and getprop("systems/electrical/bus/ac-1") != 0) { + } else if (ll1 == 1 and systems.ELEC.Bus.ac1.getValue() != 0) { me.light1_ypos = 3.0; me.light1_setSize(12); me.light1_on(); - } else if (ll2 == 1 and getprop("systems/electrical/bus/ac-2") !=0) { + } else if (ll2 == 1 and systems.ELEC.Bus.ac2.getValue() != 0) { me.light1_ypos = -3.0; me.light1_setSize(12); me.light1_on();