diff --git a/A320-100-CFM-set.xml b/A320-100-CFM-set.xml index 47e1b75c..af9b221b 100644 --- a/A320-100-CFM-set.xml +++ b/A320-100-CFM-set.xml @@ -21,7 +21,7 @@ Aircraft/A320-family/Sounds/cfm56-sound.xml - -80.0 + -60.0 Pilot View true diff --git a/A320-200-CFM-set.xml b/A320-200-CFM-set.xml index a8a8d27f..c6b10ba5 100644 --- a/A320-200-CFM-set.xml +++ b/A320-200-CFM-set.xml @@ -21,7 +21,7 @@ Aircraft/A320-family/Sounds/cfm56-sound.xml - -80.0 + -60.0 Pilot View true diff --git a/A320-200-IAE-set.xml b/A320-200-IAE-set.xml index ad778c70..4ecba412 100644 --- a/A320-200-IAE-set.xml +++ b/A320-200-IAE-set.xml @@ -21,7 +21,7 @@ Aircraft/A320-family/Sounds/v2500-sound.xml - -80.0 + -60.0 Pilot View true diff --git a/A320-main.xml b/A320-main.xml index 9699ec73..710252d7 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -576,12 +576,12 @@ - 80.0 + 60.0 10.0 300.0 - 2019.2.0 + 2019.2.0 3000 @@ -778,9 +778,6 @@ 0 0 - - 350 - @@ -1318,6 +1315,7 @@ 0 0 0 + 0 0 0 diff --git a/A320neo-CFM-set.xml b/A320neo-CFM-set.xml index 0cda629d..c96adb6a 100644 --- a/A320neo-CFM-set.xml +++ b/A320neo-CFM-set.xml @@ -21,7 +21,7 @@ Aircraft/A320-family/Sounds/leapx-sound.xml - -80.0 + -60.0 Pilot View true diff --git a/A320neo-PW-set.xml b/A320neo-PW-set.xml index 430278a5..a050a196 100644 --- a/A320neo-PW-set.xml +++ b/A320neo-PW-set.xml @@ -21,7 +21,7 @@ Aircraft/A320-family/Sounds/leapx-sound.xml - -80.0 + -60.0 Pilot View true diff --git a/AircraftConfig/fail.xml b/AircraftConfig/fail.xml index 7ce0a7f3..cfbe5caa 100644 --- a/AircraftConfig/fail.xml +++ b/AircraftConfig/fail.xml @@ -144,6 +144,16 @@ true + + + left + /systems/failures/fctl/ths-jam + + dialog-apply + + true + + left diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index a4855e65..5d648a03 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -365,7 +365,7 @@ rotate brakes_lb_psi systems/hydraulic/brakes/pressure-left-psi - 0.03 + -0.03 systems/hydraulic/brakes/mode @@ -381,7 +381,7 @@ rotate brakes_rb_psi systems/hydraulic/brakes/pressure-right-psi - -0.03 + 0.03 systems/hydraulic/brakes/mode @@ -399,10 +399,16 @@ systems/hydraulic/brakes/accumulator-pressure-psi 00 - 70066 - 200078 - 300090 + 700-66 + 2000-78 + 3000-90 + + + systems/hydraulic/brakes/mode + 2 + + brakes_accum_psi.axis @@ -5421,18 +5427,64 @@ select gear_lever_down_arrow - - - controls/switches/annun-test - 1 - - - systems/gear/landing-gear-warning-light - 1 - - + + + + systems/electrical/bus/ac-ess + 110 + + + systems/electrical/bus/ac-2 + 110 + + + + + controls/switches/annun-test + 1 + + + ECAM/warnings/landing-gear-warning-light + 1 + + + + + + material + gear_lever_down_arrow + + + + + systems/electrical/bus/ac-ess + 110 + + + systems/electrical/bus/ac-2 + 110 + + + + + controls/switches/annun-test + 1 + + + ECAM/warnings/landing-gear-warning-light + 1 + + + + + + 1.00 + 0.0 + 0.0 + + diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas index 9a3c40ae..889ca75c 100644 --- a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas @@ -36,6 +36,10 @@ var tr2_v = 0; var tr2_a = 0; var essTramps = 0; var essTrvolts = 0; +var elac1Node = 0; +var elac2Node = 0; +var sec1Node = 0; +var sec2Node = 0; # Conversion factor pounds to kilogram LBS2KGS = 0.4535924; @@ -1951,12 +1955,16 @@ var canvas_lowerECAM_fctl = { return["TAT","SAT","GW","UTCh","UTCm","GW-weight-unit","ailL","ailR","elevL","elevR","PTcc","PT","PTupdn","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","path4249","path4249-3","path4249-3-6-7","path4249-3-6-7-5","path4249-3-6"]; + "spoiler5Lf","ailLscale","ailRscale","path4249","path4249-3","path4249-3-6-7","path4249-3-6-7-5","path4249-3-6","text4343"]; }, update: func() { blue_psi = systems.HYD.Psi.blue.getValue(); green_psi = systems.HYD.Psi.green.getValue(); yellow_psi = systems.HYD.Psi.yellow.getValue(); + elac1Node = fbw.FBW.Computers.elac1.getValue(); + elac2Node = fbw.FBW.Computers.elac2.getValue(); + sec1Node = fbw.FBW.Computers.sec1.getValue(); + sec2Node = fbw.FBW.Computers.sec2.getValue(); # Pitch Trim me["PT"].setText(sprintf("%2.1f", math.round(elevator_trim_deg.getValue(), 0.1))); @@ -1976,16 +1984,26 @@ var canvas_lowerECAM_fctl = { me["PTupdn"].setColor(0.0509,0.7529,0.2941); me["PTcc"].setColor(0.0509,0.7529,0.2941); } + + if (fbw.FBW.Failures.ths.getBoolValue()) { + me["text4343"].setColor(0.7333,0.3803,0); + } else { + me["text4343"].setColor(0.8078,0.8039,0.8078); + } # Ailerons me["ailL"].setTranslation(0, aileron_ind_left.getValue() * 100); me["ailR"].setTranslation(0, aileron_ind_right.getValue() * (-100)); - if (blue_psi < 1500 and green_psi < 1500) { + if ((blue_psi < 1500 or !elac1Node) and (green_psi < 1500 or !elac2Node)) { me["ailL"].setColor(0.7333,0.3803,0); - me["ailR"].setColor(0.7333,0.3803,0); } else { me["ailL"].setColor(0.0509,0.7529,0.2941); + } + + if ((green_psi < 1500 or !elac1Node) and (blue_psi < 1500 or !elac2Node)) { + me["ailR"].setColor(0.7333,0.3803,0); + } else { me["ailR"].setColor(0.0509,0.7529,0.2941); } @@ -1993,13 +2011,13 @@ var canvas_lowerECAM_fctl = { me["elevL"].setTranslation(0, elevator_ind_left.getValue() * 100); me["elevR"].setTranslation(0, elevator_ind_right.getValue() * 100); - if (blue_psi < 1500 and green_psi < 1500) { + if ((blue_psi < 1500 or (!elac1Node and !sec1Node)) and (green_psi < 1500 or (!elac2Node and !sec2Node))) { me["elevL"].setColor(0.7333,0.3803,0); } else { me["elevL"].setColor(0.0509,0.7529,0.2941); } - if (blue_psi < 1500 and yellow_psi < 1500) { + if ((blue_psi < 1500 or (!elac1Node and !sec1Node)) and (yellow_psi < 1500 or (!elac2Node and !sec2Node))) { me["elevR"].setColor(0.7333,0.3803,0); } else { me["elevR"].setColor(0.0509,0.7529,0.2941); @@ -2237,34 +2255,34 @@ var canvas_lowerECAM_fctl = { } # Flight Computers - if (fbw.FBW.Computers.elac1.getValue()) { + if (elac1Node) { me["elac1"].setColor(0.0509,0.7529,0.2941); me["path4249"].setColor(0.0509,0.7529,0.2941); - } else if (!fbw.FBW.Computers.elac1.getValue() or fbw.FBW.Failures.elac1.getValue()) { + } else if (!elac1Node or fbw.FBW.Failures.elac1.getValue()) { me["elac1"].setColor(0.7333,0.3803,0); me["path4249"].setColor(0.7333,0.3803,0); } - if (fbw.FBW.Computers.elac2.getValue()) { + if (elac2Node) { me["elac2"].setColor(0.0509,0.7529,0.2941); me["path4249-3"].setColor(0.0509,0.7529,0.2941); - } else if (!fbw.FBW.Computers.elac2.getValue() or fbw.FBW.Failures.elac2.getValue()) { + } else if (!elac2Node or fbw.FBW.Failures.elac2.getValue()) { me["elac2"].setColor(0.7333,0.3803,0); me["path4249-3"].setColor(0.7333,0.3803,0); } - if (fbw.FBW.Computers.sec1.getValue()) { + if (sec1Node) { me["sec1"].setColor(0.0509,0.7529,0.2941); me["path4249-3-6-7"].setColor(0.0509,0.7529,0.2941); - } else if (!fbw.FBW.Computers.sec1.getValue() or fbw.FBW.Failures.sec1.getValue()) { + } else if (!sec1Node or fbw.FBW.Failures.sec1.getValue()) { me["sec1"].setColor(0.7333,0.3803,0); me["path4249-3-6-7"].setColor(0.7333,0.3803,0); } - if (fbw.FBW.Computers.sec2.getValue()) { + if (sec2Node) { me["sec2"].setColor(0.0509,0.7529,0.2941); me["path4249-3-6-7-5"].setColor(0.0509,0.7529,0.2941); - } else if (!fbw.FBW.Computers.sec2.getValue() or fbw.FBW.Failures.sec2.getValue()) { + } else if (!sec2Node or fbw.FBW.Failures.sec2.getValue()) { me["sec2"].setColor(0.7333,0.3803,0); me["path4249-3-6-7-5"].setColor(0.7333,0.3803,0); } @@ -2279,10 +2297,23 @@ var canvas_lowerECAM_fctl = { # Hydraulic Indicators if (blue_psi >= 1500) { - me["ailLblue"].setColor(0.0509,0.7529,0.2941); - me["ailRblue"].setColor(0.0509,0.7529,0.2941); - me["elevLblue"].setColor(0.0509,0.7529,0.2941); - me["elevRblue"].setColor(0.0509,0.7529,0.2941); + if (elac1Node) { + me["ailLblue"].setColor(0.0509,0.7529,0.2941); + } else { + me["ailLblue"].setColor(0.7333,0.3803,0); + } + if (elac1Node or sec1Node) { + me["elevLblue"].setColor(0.0509,0.7529,0.2941); + me["elevRblue"].setColor(0.0509,0.7529,0.2941); + } else { + me["elevLblue"].setColor(0.7333,0.3803,0); + me["elevRblue"].setColor(0.7333,0.3803,0); + } + if (elac2Node) { + me["ailRblue"].setColor(0.0509,0.7529,0.2941); + } else { + me["ailRblue"].setColor(0.7333,0.3803,0); + } me["rudderblue"].setColor(0.0509,0.7529,0.2941); me["spdbrkblue"].setColor(0.0509,0.7529,0.2941); } else { @@ -2295,9 +2326,22 @@ var canvas_lowerECAM_fctl = { } if (green_psi >= 1500) { - me["ailLgreen"].setColor(0.0509,0.7529,0.2941); - me["ailRgreen"].setColor(0.0509,0.7529,0.2941); - me["elevLgreen"].setColor(0.0509,0.7529,0.2941); + if (elac2Node or sec2Node) { + me["elevLgreen"].setColor(0.0509,0.7529,0.2941); + } else { + me["elevLgreen"].setColor(0.7333,0.3803,0); + } + + if (elac2Node) { + me["ailLgreen"].setColor(0.0509,0.7529,0.2941); + } else { + me["ailLgreen"].setColor(0.7333,0.3803,0); + } + if (elac1Node) { + me["ailRgreen"].setColor(0.0509,0.7529,0.2941); + } else { + me["ailRgreen"].setColor(0.7333,0.3803,0); + } me["ruddergreen"].setColor(0.0509,0.7529,0.2941); me["PTgreen"].setColor(0.0509,0.7529,0.2941); me["spdbrkgreen"].setColor(0.0509,0.7529,0.2941); @@ -2311,7 +2355,11 @@ var canvas_lowerECAM_fctl = { } if (yellow_psi >= 1500) { - me["elevRyellow"].setColor(0.0509,0.7529,0.2941); + if (elac2Node or sec2Node) { + me["elevRyellow"].setColor(0.0509,0.7529,0.2941); + } else { + me["elevRyellow"].setColor(0.7333,0.3803,0); + } me["rudderyellow"].setColor(0.0509,0.7529,0.2941); me["PTyellow"].setColor(0.0509,0.7529,0.2941); me["spdbrkyellow"].setColor(0.0509,0.7529,0.2941); diff --git a/Models/Instruments/MCDU/MCDU.nas b/Models/Instruments/MCDU/MCDU.nas index ad659a33..54f42db8 100644 --- a/Models/Instruments/MCDU/MCDU.nas +++ b/Models/Instruments/MCDU/MCDU.nas @@ -2995,16 +2995,16 @@ var canvas_MCDU_base = { me.fontSizeLeft(normal, normal, small, small, small, small); me.fontSizeCenter(small, small, normal, small, small, small); - me.fontSizeRight(normal, normal, normal, small, small, small); + me.fontSizeRight(small, small, normal, small, small, small); me["Simple_C3B"].setFontSize(small); me.colorLeft("grn", "grn", "wht", "wht", "wht", "wht"); me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht"); me.colorLeftArrow("wht", "wht", "wht", "wht", "wht", "wht"); - me.colorCenter("grn", "grn", "blu", "grn", "blu", "wht"); + me.colorCenter("wht", "wht", "blu", "grn", "blu", "wht"); me["Simple_C3B"].setColor(BLUE); me.colorCenterS("wht", "wht", "wht", "wht", "wht", "wht"); - me.colorRight("grn", "grn", "blu", "wht", "wht", "wht"); + me.colorRight("wht", "wht", "blu", "wht", "wht", "wht"); me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht"); me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht"); @@ -3012,12 +3012,12 @@ var canvas_MCDU_base = { } if (!engrdy.getBoolValue() or !fmgc.FMGCInternal.toFromSet) { - me["Simple_L1"].setText("----"); + me["Simple_L1"].setText("NONE"); } else { me["Simple_L1"].setText(fmgc.FMGCInternal.arrApt); } if (!engrdy.getBoolValue() or !fmgc.FMGCInternal.altAirportSet) { - me["Simple_L2"].setText("----"); + me["Simple_L2"].setText("NONE"); } else { me["Simple_L2"].setText(fmgc.FMGCInternal.altAirport); } @@ -3025,7 +3025,7 @@ var canvas_MCDU_base = { me["Simple_L1S"].setText("AT"); me["Simple_L2S"].setText("X"); me["Simple_L3S"].setText("RTE RSV/PCT"); - me["Simple_L4S"].setText("ALTN/TIME"); + me["Simple_L4S"].setText("ALTN /TIME"); me["Simple_L5S"].setText("FINAL/TIME"); me["Simple_L6S"].setText("MIN DEST FOB"); @@ -3033,11 +3033,11 @@ var canvas_MCDU_base = { me["Simple_C1"].setText("----"); me["Simple_C2"].setText("----"); - me["Simple_R1"].setText("-.-"); - me["Simple_R2"].setText("-.-"); + me["Simple_R1"].setText("---.-"); + me["Simple_R2"].setText("---.-"); me["Simple_R1S"].setText("EFOB"); me["Simple_R2S"].setText("X"); - me["Simple_R4S"].setText("FOB "); + me["Simple_R4S"].setText("FOB "); me["Simple_R5S"].setText(" GW/ CG"); me["Simple_R6S"].setText("EXTRA/TIME"); @@ -3061,7 +3061,7 @@ var canvas_MCDU_base = { me["Simple_L6"].setText("---.-"); me["Simple_R4"].setText("---.-/FF+FQ"); - me["Simple_R5"].setText("---.-/---.-"); + me["Simple_R5"].setText("---.-/ --.-"); me["Simple_R6"].setText("---.-/----"); me.colorLeft("ack", "ack", "wht", "wht", "wht", "wht"); diff --git a/Models/Instruments/PFD/PFD.nas b/Models/Instruments/PFD/PFD.nas index a24f6453..61df122a 100644 --- a/Models/Instruments/PFD/PFD.nas +++ b/Models/Instruments/PFD/PFD.nas @@ -14,7 +14,6 @@ var updateL = 0; var updateR = 0; var et = 0; var altTens = 0; -var altPolarity = ""; var track_diff = 0; var AICenter = nil; @@ -69,9 +68,6 @@ var alt_inhg = props.globals.getNode("/instrumentation/altimeter/setting-inhg", var target_altitude = props.globals.getNode("/autopilot/settings/target-altitude-ft", 1); var altitude = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1); var altitude_pfd = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft-pfd", 1); -var alt_diff = props.globals.getNode("/instrumentation/pfd/alt-diff", 1); -var ground_diff = props.globals.getNode("/instrumentation/pfd/ground-diff", 1); -var landing_diff = props.globals.getNode("/instrumentation/pfd/landing-diff", 1); var ap_alt = props.globals.getNode("/it-autoflight/internal/alt", 1); var vs_needle = props.globals.getNode("/instrumentation/pfd/vs-needle", 1); var vs_digit = props.globals.getNode("/instrumentation/pfd/vs-digit-trans", 1); @@ -141,8 +137,6 @@ var air_data_switch = props.globals.getNode("/controls/navigation/switching/air- # Create Nodes: var alt_diff = props.globals.initNode("/instrumentation/pfd/alt-diff", 0.0, "DOUBLE"); -var ground_diff = props.globals.initNode("/instrumentation/pfd/ground-diff", 0.0, "DOUBLE"); -var landing_diff = props.globals.initNode("/instrumentation/pfd/landing-diff", 0.0, "DOUBLE"); var heading = props.globals.initNode("/instrumentation/pfd/heading-deg", 0.0, "DOUBLE"); var horizon_pitch = props.globals.initNode("/instrumentation/pfd/horizon-pitch", 0.0, "DOUBLE"); var horizon_ground = props.globals.initNode("/instrumentation/pfd/horizon-ground", 0.0, "DOUBLE"); @@ -225,7 +219,7 @@ var canvas_PFD_base = { "FMA_athr_box","FMA_Middle1","FMA_Middle2","ALPHA_MAX","ALPHA_PROT","ALPHA_SW","ALPHA_bars","VLS_min","ASI_max","ASI_scale","ASI_target","ASI_mach","ASI_mach_decimal","ASI_trend_up","ASI_trend_down","ASI_digit_UP","ASI_digit_DN","ASI_decimal_UP", "ASI_decimal_DN","ASI_index","ASI_error","ASI_group","ASI_frame","AI_center","AI_bank","AI_bank_lim","AI_bank_lim_X","AI_pitch_lim","AI_pitch_lim_X","AI_slipskid","AI_horizon","AI_horizon_ground","AI_horizon_sky","AI_stick","AI_stick_pos","AI_heading", "AI_agl_g","AI_agl","AI_error","AI_group","FD_roll","FD_pitch","ALT_box_flash","ALT_box","ALT_box_amber","ALT_scale","ALT_target","ALT_target_digit","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_digit_UP", - "ALT_digit_DN","ALT_error","ALT_group","ALT_group2","ALT_frame","VS_pointer","VS_box","VS_digit","VS_error","VS_group","QNH","QNH_setting","QNH_std","QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale", + "ALT_digit_DN","ALT_error","ALT_neg","ALT_group","ALT_group2","ALT_frame","VS_pointer","VS_box","VS_digit","VS_error","VS_group","QNH","QNH_setting","QNH_std","QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale", "HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","HDG_error","HDG_group","HDG_frame","TRK_pointer","machError","ilsError","ils_code","ils_freq","dme_dist","dme_dist_legend","ILS_HDG_R","ILS_HDG_L", "ILS_right","ILS_left","outerMarker","middleMarker","innerMarker","v1_group","v1_text","vr_speed","F_target","S_target","FS_targets","flap_max","clean_speed","ground","ground_ref","FPV","spdLimError"]; }, @@ -298,8 +292,10 @@ var canvas_PFD_base = { PFD_1_test.page.show(); } else { PFD_1.updateFast(); - PFD_1.update(); - updateL = 1; + if (!updateL) { # Update slow here once so that no flicker if timers don't perfectly align + updateL = 1; + PFD_1.update(); + } PFD_1_test.page.hide(); PFD_1.page.show(); } @@ -321,8 +317,10 @@ var canvas_PFD_base = { PFD_2_test.page.show(); } else { PFD_2.updateFast(); - PFD_2.update(); - updateR = 1; + if (!updateR) { # Update slow here once so that no flicker if timers don't perfectly align + updateR = 1; + PFD_2.update(); + } PFD_2_test.page.hide(); PFD_2.page.show(); } @@ -514,7 +512,8 @@ var canvas_PFD_base = { me["FMA_rollarm_box"].hide(); me["FMA_Middle1"].hide(); me["FMA_Middle2"].hide(); - if (fbw_curlaw == 2) { + + 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(); @@ -525,6 +524,7 @@ var canvas_PFD_base = { } else { me["FMA_ctr_msg"].hide(); } + me["FMA_combined"].show(); if (pitch_box.getValue() == 1 and pitch_mode_act != " ") { me["FMA_combined_box"].show(); @@ -534,7 +534,7 @@ var canvas_PFD_base = { } else { me["FMA_combined"].hide(); me["FMA_combined_box"].hide(); - if (fbw_curlaw == 2) { + 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(); @@ -1270,7 +1270,6 @@ var canvas_PFD_1 = { } me["ASI_scale"].setTranslation(0, me.ASI * 6.6); - if (fbw.FBW.Computers.fac1.getValue() or fbw.FBW.Computers.fac2.getValue()) { me["ASI_max"].setTranslation(0, me.ASImax * -6.6); me["ASI_max"].show(); @@ -1687,6 +1686,7 @@ var canvas_PFD_1 = { me["ALT_error"].hide(); me["ALT_frame"].setColor(1,1,1); me["ALT_group"].show(); + me["ALT_tens"].show(); me["ALT_box"].show(); me["ALT_group2"].show(); me["ALT_scale"].show(); @@ -1708,13 +1708,13 @@ var canvas_PFD_1 = { me["ALT_two"].setText(sprintf("%03d", abs(me.middleAltText-5))); me["ALT_one"].setText(sprintf("%03d", abs(me.middleAltText-10))); - if (altitude.getValue() < 0) { - altPolarity = "-"; + if (me.altitude < 0) { + me["ALT_neg"].show(); } else { - altPolarity = ""; + me["ALT_neg"].hide(); } - me["ALT_digits"].setText(sprintf("%s%d", altPolarity, dmc.DMController.DMCs[0].outputs[3].getValue())); + me["ALT_digits"].setText(sprintf("%d", dmc.DMController.DMCs[0].outputs[3].getValue())); altTens = num(right(sprintf("%02d", me.altitude), 2)); me["ALT_tens"].setTranslation(0, altTens * 1.392); @@ -1754,7 +1754,7 @@ var canvas_PFD_1 = { me["ALT_target"].hide(); } - ground_diff_cur = ground_diff.getValue(); + ground_diff_cur = -gear_agl.getValue(); if (ground_diff_cur >= -565 and ground_diff_cur <= 565) { me["ground_ref"].setTranslation(0, (ground_diff_cur / 100) * -48.66856); me["ground_ref"].show(); @@ -1762,10 +1762,9 @@ var canvas_PFD_1 = { me["ground_ref"].hide(); } - landing_diff_cur = landing_diff.getValue(); - if (landing_diff_cur >= -565 and landing_diff_cur <= 565) { + if (ground_diff_cur >= -565 and ground_diff_cur <= 565) { if ((fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) and !wow1.getValue() and !wow2.getValue()) { #add std too - me["ground"].setTranslation(0, (landing_diff_cur / 100) * -48.66856); + me["ground"].setTranslation(0, (ground_diff_cur / 100) * -48.66856); me["ground"].show(); } else { me["ground"].hide(); @@ -1822,6 +1821,8 @@ var canvas_PFD_1 = { me["ALT_error"].show(); me["ALT_frame"].setColor(1,0,0); me["ALT_group"].hide(); + me["ALT_tens"].hide(); + me["ALT_neg"].hide(); me["ALT_group2"].hide(); me["ALT_scale"].hide(); me["ALT_box_flash"].hide(); @@ -2455,15 +2456,16 @@ var canvas_PFD_2 = { me["machError"].show(); } - if (dmc.DMController.DMCs[0].outputs[1] != nil) { + if (dmc.DMController.DMCs[1].outputs[1] != nil) { me["ALT_error"].hide(); me["ALT_frame"].setColor(1,1,1); me["ALT_group"].show(); + me["ALT_tens"].show(); me["ALT_box"].show(); me["ALT_group2"].show(); me["ALT_scale"].show(); - me.altitude = dmc.DMController.DMCs[0].outputs[1].getValue(); + me.altitude = dmc.DMController.DMCs[1].outputs[1].getValue(); me.altOffset = me.altitude / 500 - int(me.altitude / 500); me.middleAltText = roundaboutAlt(me.altitude / 100); me.middleAltOffset = nil; @@ -2480,13 +2482,13 @@ var canvas_PFD_2 = { me["ALT_two"].setText(sprintf("%03d", abs(me.middleAltText-5))); me["ALT_one"].setText(sprintf("%03d", abs(me.middleAltText-10))); - if (altitude.getValue() < 0) { - altPolarity = "-"; + if (me.altitude < 0) { + me["ALT_neg"].show(); } else { - altPolarity = ""; + me["ALT_neg"].hide(); } - me["ALT_digits"].setText(sprintf("%s%d", altPolarity, dmc.DMController.DMCs[0].outputs[3].getValue())); + me["ALT_digits"].setText(sprintf("%d", dmc.DMController.DMCs[1].outputs[3].getValue())); altTens = num(right(sprintf("%02d", me.altitude), 2)); me["ALT_tens"].setTranslation(0, altTens * 1.392); @@ -2526,7 +2528,7 @@ var canvas_PFD_2 = { me["ALT_target"].hide(); } - ground_diff_cur = ground_diff.getValue(); + ground_diff_cur = -gear_agl.getValue(); if (ground_diff_cur >= -565 and ground_diff_cur <= 565) { me["ground_ref"].setTranslation(0, (ground_diff_cur / 100) * -48.66856); me["ground_ref"].show(); @@ -2534,10 +2536,9 @@ var canvas_PFD_2 = { me["ground_ref"].hide(); } - landing_diff_cur = landing_diff.getValue(); - if (landing_diff_cur >= -565 and landing_diff_cur <= 565) { + if (ground_diff_cur >= -565 and ground_diff_cur <= 565) { if ((fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) and !wow1.getValue() and !wow2.getValue()) { #add std too - me["ground"].setTranslation(0, (landing_diff_cur / 100) * -48.66856); + me["ground"].setTranslation(0, (ground_diff_cur / 100) * -48.66856); me["ground"].show(); } else { me["ground"].hide(); @@ -2594,6 +2595,8 @@ var canvas_PFD_2 = { me["ALT_error"].show(); me["ALT_frame"].setColor(1,0,0); me["ALT_group"].hide(); + me["ALT_tens"].hide(); + me["ALT_neg"].hide(); me["ALT_group2"].hide(); me["ALT_scale"].hide(); me["ALT_box_flash"].hide(); diff --git a/Models/Instruments/PFD/res/pfd.svg b/Models/Instruments/PFD/res/pfd.svg index 5be2191d..5c571f2b 100644 --- a/Models/Instruments/PFD/res/pfd.svg +++ b/Models/Instruments/PFD/res/pfd.svg @@ -41,9 +41,9 @@ inkscape:window-maximized="1" inkscape:window-y="-8" inkscape:window-x="-8" - inkscape:cy="259.23779" - inkscape:cx="201.84998" - inkscape:zoom="2.56" + inkscape:cy="683.12157" + inkscape:cx="1026.1197" + inkscape:zoom="1.8101934" showgrid="true" id="namedview371" inkscape:window-height="705" @@ -2380,78 +2380,20 @@ inkscape:connector-curvature="0" id="path1283" d="m 856.4002,481.90842 2.2e-4,-15.92813 h 52.07464 v 93.34657 h -52.07457 v -15.26583" - style="fill:#000000;fill-opacity:1;stroke:#ffff00;stroke-width:3.19995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" /> + style="fill:#000000;fill-opacity:1;stroke:#ffff00;stroke-width:3.19994998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" /> + style="fill:none;fill-opacity:1;stroke:#ffff00;stroke-width:3.19994998;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" /> - 40200080604020008060 00 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.83480072px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke-width:0.75">00 + IM + 40200080604020008060 @@ -6022,14 +6030,6 @@ inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> - + NEG 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 b5adbd36..5a3ce8d8 100644 --- a/Nasal/ECAM/ECAM-logic.nas +++ b/Nasal/ECAM/ECAM-logic.nas @@ -653,8 +653,14 @@ var messages_priority_3 = func { } if (gearNotDown.clearFlag == 0 and (warningNodes.Logic.gearNotDown1.getBoolValue() or warningNodes.Logic.gearNotDown2.getBoolValue()) and phaseVar3 != 3 and phaseVar3 != 4 and phaseVar3 != 5) { + if (!gearNotDown.active) { + gearWarnLight.setValue(1); + } gearNotDown.active = 1; } else { + if (gearNotDown.active) { + gearWarnLight.setValue(0); + } ECAM_controller.warningReset(gearNotDown); } @@ -869,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); @@ -903,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()) { @@ -1284,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-main.nas b/Nasal/ECAM/ECAM-main.nas index 0082292e..bf56df2a 100644 --- a/Nasal/ECAM/ECAM-main.nas +++ b/Nasal/ECAM/ECAM-main.nas @@ -19,10 +19,11 @@ var engStrtTimeSw = 0; var engStrtTime = 0; var page = 0; +var gearWarnLight = props.globals.initNode("/ECAM/warnings/landing-gear-warning-light", 0, "BOOL"); + var ECAM = { _cachePage: "", init: func() { - setprop("/systems/gear/landing-gear-warning-light", 0); page = props.globals.initNode("/ECAM/Lower/page", "door", "STRING"); apOffTime = props.globals.initNode("/ECAM/warnings/ap-off-time", 0, "INT"); 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/Nasal/ECAM/ECAM-phases.nas b/Nasal/ECAM/ECAM-phases.nas index 1c909150..edccc4c4 100644 --- a/Nasal/ECAM/ECAM-phases.nas +++ b/Nasal/ECAM/ECAM-phases.nas @@ -72,6 +72,9 @@ var FWC = { altChg: props.globals.getNode("/it-autoflight/input/alt-is-changing", 1), }; +var gnd = nil; +var gndTimer = nil; + var phaseLoop = func() { if ((systems.ELEC.Bus.acEss.getValue() < 110 and systems.ELEC.Bus.ac2.getValue() < 110) or pts.Acconfig.running.getBoolValue()) { return; } if (pts.Sim.Replay.replayActive.getBoolValue()) { return; } @@ -84,7 +87,8 @@ var phaseLoop = func() { eng2n1 = pts.Engines.Engine.n1Actual[1].getValue(); master1 = pts.Controls.Engines.Engine.cutoffSw[0].getBoolValue(); master2 = pts.Controls.Engines.Engine.cutoffSw[1].getBoolValue(); - + gnd = FWC.Logic.gnd.getBoolValue(); + gndTimer = FWC.Timer.gnd.getValue(); FWC.Flipflop.recallReset.setValue(0); # Various things @@ -102,13 +106,13 @@ var phaseLoop = func() { FWC.Flipflop.phase10Set.setBoolValue(0); } - if (FWC.Timer.gnd.getValue() == 1 and pts.Controls.Engines.Engine.firePb[0].getBoolValue()) { + if (gndTimer == 1 and pts.Controls.Engines.Engine.firePb[0].getBoolValue()) { FWC.Flipflop.phase10Reset.setBoolValue(1); } else { FWC.Flipflop.phase10Reset.setBoolValue(0); } - if ((FWC.Logic.gnd.getBoolValue() and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Flipflop.phase10Output.getBoolValue()) { + if ((gnd and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Flipflop.phase10Output.getBoolValue()) { FWC.Monostable.phase1.setBoolValue(1); # true for 300 sec then false } else { FWC.Monostable.phase1.setBoolValue(0); @@ -121,7 +125,7 @@ var phaseLoop = func() { FWC.Flipflop.phase2Set.setBoolValue(0); } - if (!FWC.Monostable.m80kt.getBoolValue() and myPhase != 9 and ((!FWC.Monostable.phase9Output.getBoolValue() and FWC.Timer.gnd.getValue() == 1) or (!FWC.Monostable.toPowerOutput.getBoolValue() and FWC.Timer.gnd.getValue() == 1))) { + if (!FWC.Monostable.m80kt.getBoolValue() and myPhase != 9 and ((!FWC.Monostable.phase9Output.getBoolValue() and gndTimer == 1) or (!FWC.Monostable.toPowerOutput.getBoolValue() and gndTimer == 1))) { FWC.Flipflop.phase2Reset.setBoolValue(1); } else { FWC.Flipflop.phase2Reset.setBoolValue(0); @@ -130,33 +134,33 @@ var phaseLoop = func() { gear_agl_cur = pts.Position.gearAglFt.getValue(); # Phase 5 monostable - if (FWC.toPower.getBoolValue() and (!FWC.Logic.feet1500.getBoolValue() and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1)) { + if (FWC.toPower.getBoolValue() and (!FWC.Logic.feet1500.getBoolValue() and !gnd and FWC.Timer.gnd2Sec.getValue() != 1)) { FWC.Monostable.phase5.setBoolValue(1); } else { FWC.Monostable.phase5.setBoolValue(0); } # Phase 7 monostable - if (!FWC.toPower.getBoolValue() and !FWC.Logic.feet1500.getBoolValue() and !FWC.Logic.feet800.getBoolValue() and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1) { + if (!FWC.toPower.getBoolValue() and !FWC.Logic.feet1500.getBoolValue() and !FWC.Logic.feet800.getBoolValue() and !gnd and FWC.Timer.gnd2Sec.getValue() != 1) { FWC.Monostable.phase7.setBoolValue(1); } else { FWC.Monostable.phase7.setBoolValue(0); } # Actual Phases - if ((FWC.Logic.gnd.getBoolValue() and FWC.Timer.eng1and2Off.getValue() and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) { + if ((gnd and FWC.Timer.eng1and2Off.getValue() and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) { setPhase(1); } - if (FWC.Timer.eng1or2Output.getBoolValue() and (FWC.Logic.gnd.getBoolValue() and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and !FWC.Flipflop.phase2Output.getBoolValue()) { + if (FWC.Timer.eng1or2Output.getBoolValue() and (gnd and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and !FWC.Flipflop.phase2Output.getBoolValue()) { setPhase(2); } - if (FWC.Timer.eng1or2Output.getBoolValue() and (FWC.Timer.gnd.getValue() == 1 and FWC.toPower.getBoolValue()) and !FWC.speed80.getBoolValue()) { + if (FWC.Timer.eng1or2Output.getBoolValue() and (gndTimer == 1 and FWC.toPower.getBoolValue()) and !FWC.speed80.getBoolValue()) { setPhase(3); } - if ((FWC.Timer.gnd.getValue() == 1 and FWC.toPower.getBoolValue()) and FWC.speed80.getBoolValue()) { + if ((gndTimer == 1 and FWC.toPower.getBoolValue()) and FWC.speed80.getBoolValue()) { setPhase(4); } @@ -164,7 +168,7 @@ var phaseLoop = func() { setPhase(5); } - if (!FWC.Logic.gnd.getValue() and FWC.Timer.gnd2SecHalf.getValue() != 1 and (!FWC.Monostable.phase5.getBoolValue() or !FWC.Monostable.phase5Output.getBoolValue()) and (!FWC.Monostable.phase7.getBoolValue() or !FWC.Monostable.phase7Output.getBoolValue())) { + if (!gnd and FWC.Timer.gnd2SecHalf.getValue() != 1 and (!FWC.Monostable.phase5.getBoolValue() or !FWC.Monostable.phase5Output.getBoolValue()) and (!FWC.Monostable.phase7.getBoolValue() or !FWC.Monostable.phase7Output.getBoolValue())) { setPhase(6); } @@ -172,15 +176,15 @@ var phaseLoop = func() { setPhase(7); } - if (!FWC.toPower.getBoolValue() and FWC.speed80.getBoolValue() and (FWC.Logic.gnd.getBoolValue() or FWC.Timer.gnd2Sec.getValue == 1)) { + if (!FWC.toPower.getBoolValue() and FWC.speed80.getBoolValue() and (gnd or FWC.Timer.gnd2Sec.getValue == 1)) { setPhase(8); } - if (FWC.Flipflop.phase2Output.getBoolValue() and (FWC.Logic.gnd.getBoolValue() and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and FWC.Timer.eng1or2.getBoolValue()) { + if (FWC.Flipflop.phase2Output.getBoolValue() and (gnd and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and FWC.Timer.eng1or2.getBoolValue()) { setPhase(9); } - if ((FWC.Logic.gnd.getBoolValue() and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) { + if ((gnd and FWC.Timer.eng1and2Off.getValue() and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) { setPhase(10); } diff --git a/Nasal/FBW/it-fbw.nas b/Nasal/FBW/it-fbw.nas index 0ae8347d..ab6fe620 100644 --- a/Nasal/FBW/it-fbw.nas +++ b/Nasal/FBW/it-fbw.nas @@ -64,6 +64,7 @@ var FBW = { sec3: props.globals.getNode("/systems/failures/fctl/sec3"), fac1: props.globals.getNode("/systems/failures/fctl/fac1"), fac2: props.globals.getNode("/systems/failures/fctl/fac2"), + ths: props.globals.getNode("/systems/failures/fctl/ths-jam"), spoilerl1: props.globals.getNode("/systems/failures/spoilers/spoiler-l1"), spoilerl2: props.globals.getNode("/systems/failures/spoilers/spoiler-l2"), spoilerl3: props.globals.getNode("/systems/failures/spoilers/spoiler-l3"), @@ -143,6 +144,7 @@ var FBW = { me.Failures.sec3.setBoolValue(0); me.Failures.fac1.setBoolValue(0); me.Failures.fac2.setBoolValue(0); + me.Failures.ths.setBoolValue(0); me.Failures.spoilerl1.setBoolValue(0); me.Failures.spoilerl2.setBoolValue(0); me.Failures.spoilerl3.setBoolValue(0); @@ -191,7 +193,10 @@ var update_loop = func { tripleIRFail = !ir1 and !ir2 and !ir3; doubleIRFail = (!ir1 and !ir2 and ir3) or (ir1 and !ir2 and !ir3) or (!ir1 and ir2 and !ir3); - if (tripleADRFail or doubleADRFail or doubleIRFail or tripleIRFail or dualFACFault or !FBW.yawdamper.getValue() or greenYellowFail or blueGreenFail or dualELACFault or (!elac1 and elac2 and ((green < 1500 and yellow >= 1500) or (green >= 1500 and yellow < 1500))) or (!elac2 and elac1 and blue < 1500) or tripleSECFault or systems.ELEC.EmerElec.getBoolValue()) { + if (dualELACFault and !sec1 and !sec2) { + FBW.degradeLaw.setValue(3); + FBW.apOff = 1; + } elsif (tripleADRFail or doubleADRFail or doubleIRFail or tripleIRFail or dualFACFault or !FBW.yawdamper.getValue() or greenYellowFail or blueGreenFail or dualELACFault or (!elac1 and elac2 and ((green < 1500 and yellow >= 1500) or (green >= 1500 and yellow < 1500))) or (!elac2 and elac1 and blue < 1500) or tripleSECFault or systems.ELEC.EmerElec.getBoolValue()) { if (dualFACFault or !FBW.yawdamper.getValue() or greenYellowFail or (systems.ELEC.EmerElec.getBoolValue() and !fac1) or tripleIRFail) { if (lawyaw == 0 or lawyaw == 1) { FBW.degradeYawLaw.setValue(2); @@ -216,12 +221,6 @@ var update_loop = func { FBW.degradeLaw.setValue(0); FBW.apOff = 0; } - - if (dualELACFault and tripleSECFault and dualFACFault) { - FBW.degradeLaw.setValue(3); - FBW.apOff = 1; - } - # degrade loop runs faster; reset this variable law = FBW.activeLaw.getValue(); @@ -238,12 +237,6 @@ var update_loop = func { } } - # If they can, laws can go back to standard law - if (law == 3) { - if (!dualELACFault or !tripleSECFault or !dualFACFault) { - FBW.degradeLaw.setValue(2); - } - } cas = pts.Instrumentation.AirspeedIndicator.indicatedSpdKt.getValue(); mmoIAS = (cas / pts.Instrumentation.AirspeedIndicator.indicatedMach.getValue()) * 0.82; diff --git a/Nasal/FMGC/FMGC.nas b/Nasal/FMGC/FMGC.nas index 880d671c..1c21a4fa 100644 --- a/Nasal/FMGC/FMGC.nas +++ b/Nasal/FMGC/FMGC.nas @@ -667,7 +667,7 @@ var masterFMGC = maketimer(0.2, func { } elsif (pts.Gear.position[0].getValue() != 0 or pts.Gear.position[1].getValue() != 0 or pts.Gear.position[2].getValue() != 0) { FMGCInternal.maxspeed = 284; } else { - FMGCInternal.maxspeed = getprop("/it-fbw/speeds/vmo-mmo"); + FMGCInternal.maxspeed = fmgc.FMGCInternal.vmo_mmo; } ############################ diff --git a/Nasal/FMGC/SimbriefParser.nas b/Nasal/FMGC/SimbriefParser.nas index 792df12e..47b2b640 100644 --- a/Nasal/FMGC/SimbriefParser.nas +++ b/Nasal/FMGC/SimbriefParser.nas @@ -161,7 +161,7 @@ var SimbriefParser = { } if (ident == "TOD") { - _foundTOC = 1; + _foundTOD = 1; continue; } diff --git a/Nasal/Libraries/buttons.nas b/Nasal/Libraries/buttons.nas index 17682b2b..5c6ec78e 100644 --- a/Nasal/Libraries/buttons.nas +++ b/Nasal/Libraries/buttons.nas @@ -14,16 +14,16 @@ var cvr_tone = props.globals.getNode("/controls/CVR/tone"); # Resets buttons to the default values var variousReset = func { - setprop("modes/cpt-du-xfr", 0); - setprop("modes/fo-du-xfr", 0); + setprop("/modes/cpt-du-xfr", 0); + setprop("/modes/fo-du-xfr", 0); setprop("/controls/fadec/n1mode1", 0); setprop("/controls/fadec/n1mode2", 0); - setprop("instrumentation/mk-viii/serviceable", 1); - setprop("instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", 0); - setprop("instrumentation/mk-viii/inputs/discretes/gpws-inhibit", 0); - setprop("instrumentation/mk-viii/inputs/discretes/glideslope-inhibit", 0); - setprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override", 0); - setprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override", 0); + setprop("/instrumentation/mk-viii/serviceable", 1); + setprop("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", 0); + setprop("/instrumentation/mk-viii/inputs/discretes/gpws-inhibit", 0); + setprop("/instrumentation/mk-viii/inputs/discretes/glideslope-inhibit", 0); + setprop("/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override", 0); + setprop("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override", 0); setprop("/controls/switches/cabinCall", 0); setprop("/controls/switches/mechCall", 0); setprop("/controls/switches/emer-lights", 0.5); @@ -61,7 +61,7 @@ var variousReset = func { setprop("/controls/lighting/DU/du6", 1); setprop("/controls/lighting/DU/mcdu1", 1); setprop("/controls/lighting/DU/mcdu2", 1); - setprop("modes/fcu/hdg-time", -45); + setprop("/modes/fcu/hdg-time", -45); setprop("/controls/navigation/switching/att-hdg", 0); setprop("/controls/navigation/switching/air-data", 0); setprop("/controls/switches/no-smoking-sign", 1); diff --git a/Nasal/Libraries/property-tree-setup.nas b/Nasal/Libraries/property-tree-setup.nas index ab22e2ad..1854b818 100644 --- a/Nasal/Libraries/property-tree-setup.nas +++ b/Nasal/Libraries/property-tree-setup.nas @@ -22,6 +22,7 @@ var Controls = { Engines: { startSw: props.globals.getNode("/controls/engines/engine-start-switch"), Engine: { + cutoff: [props.globals.getNode("/controls/engines/engine[0]/cutoff"), props.globals.getNode("/controls/engines/engine[1]/cutoff")], cutoffSw: [props.globals.getNode("/controls/engines/engine[0]/cutoff-switch"), props.globals.getNode("/controls/engines/engine[1]/cutoff-switch")], firePb: [props.globals.getNode("/controls/engines/engine[0]/fire-btn"), props.globals.getNode("/controls/engines/engine[1]/fire-btn")], throttle: [props.globals.getNode("/controls/engines/engine[0]/throttle"), props.globals.getNode("/controls/engines/engine[1]/throttle")], @@ -30,6 +31,7 @@ var Controls = { throttleOutput: [props.globals.getNode("/controls/engines/engine[0]/throttle-output"), props.globals.getNode("/controls/engines/engine[1]/throttle-output")], throttlePos: [props.globals.getNode("/controls/engines/engine[0]/throttle-pos"), props.globals.getNode("/controls/engines/engine[1]/throttle-pos")], throttleRev: [props.globals.getNode("/controls/engines/engine[0]/throttle-rev"), props.globals.getNode("/controls/engines/engine[1]/throttle-rev")], + starter: [props.globals.getNode("/controls/engines/engine[0]/starter"), props.globals.getNode("/controls/engines/engine[1]/starter")], reverser: [props.globals.getNode("/controls/engines/engine[0]/reverser"), props.globals.getNode("/controls/engines/engine[1]/reverser")], }, }, diff --git a/Nasal/Systems/FADEC/engines-cfm.nas b/Nasal/Systems/FADEC/engines-cfm.nas index eb84b081..1219f967 100644 --- a/Nasal/Systems/FADEC/engines-cfm.nas +++ b/Nasal/Systems/FADEC/engines-cfm.nas @@ -18,45 +18,43 @@ var shutdown_time = 20; var egt_shutdown_time = 20; var eng_init = func { - setprop("/controls/engines/engine[0]/man-start", 0); - setprop("/controls/engines/engine[1]/man-start", 0); eng_common_init(); } # Trigger Startups and Stops setlistener("/controls/engines/engine[0]/cutoff-switch", func { - if (pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) { - if (getprop("/systems/acconfig/autoconfig-running") == 1) { + if (!pts.Controls.Engines.Engine.cutoffSw[0].getValue()) { + if (pts.Acconfig.running.getValue()) { fast_start_one(); } else { - if (getprop("/controls/engines/engine[0]/man-start") == 0) { + if (!manStart[0].getValue()) { start_one_check(); - } else if (getprop("/controls/engines/engine[0]/man-start") == 1) { + } else { eng_one_man_start.start(); } } - } else if (pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 1) { + } else if (pts.Controls.Engines.Engine.cutoffSw[0].getValue()) { cutoff_one(); } -}); +}, 0, 0); var cutoff_one = func { eng_one_auto_start.stop(); eng_one_man_start.stop(); eng_one_n2_check.stop(); - setprop("/controls/engines/engine[0]/igniter-a", 0); - setprop("/controls/engines/engine[0]/igniter-b", 0); - setprop("/controls/engines/engine[0]/man-start", 0); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/controls/engines/engine[0]/starter", 0); - setprop("/controls/engines/engine[0]/cutoff", 1); - setprop("/engines/engine[0]/state", 0); + igniterA[0].setValue(0); + igniterB[0].setValue(0); + manStart[0].setValue(0); + systems.PNEU.Valves.starter1.setValue(0); + pts.Controls.Engines.Engine.starter[0].setValue(0); + pts.Controls.Engines.Engine.cutoff[0].setValue(1); + pts.Engines.Engine.state[0].setValue(0); interpolate(engines[0].getNode("egt-actual"), 0, egt_shutdown_time); eng_one_n2_check.stop(); } var fast_start_one = func { - setprop("/controls/engines/engine[0]/cutoff", 0); + pts.Controls.Engines.Engine.cutoff[0].setValue(0); setprop("/engines/engine[0]/out-of-fuel", 0); setprop("/engines/engine[0]/run", 1); @@ -65,81 +63,81 @@ var fast_start_one = func { setprop("/fdm/jsbsim/propulsion/set-running", 0); - setprop("/engines/engine[0]/state", 3); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); + pts.Engines.Engine.state[0].setValue(3); + systems.PNEU.Valves.starter1.setValue(0); } setlistener("/controls/engines/engine[0]/man-start", func { start_one_mancheck(); -}); +}, 0, 0); var start_one_mancheck = func { - if (getprop("/controls/engines/engine[0]/man-start") == 1) { - if (getprop("/controls/engines/engine-start-switch") == 2 and (pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 1)) { - setprop("/systems/pneumatics/valves/starter-valve-1", 1); + if (manStart[0].getValue()) { + if (pts.Controls.Engines.startSw.getValue() == 2 and (pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 1)) { + systems.PNEU.Valves.starter1.setValue(1); settimer(start_one_mancheck_b, 0.5); } } else { if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) { - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/engines/engine[0]/state", 0); - setprop("/controls/engines/engine[0]/starter", 0); + systems.PNEU.Valves.starter1.setValue(0); + pts.Engines.Engine.state[0].setValue(0); + pts.Controls.Engines.Engine.starter[0].setValue(0); } } } var start_one_mancheck_b = func { if (systems.PNEU.Psi.engine1.getValue() >= 25) { - setprop("/engines/engine[0]/state", 1); - setprop("/controls/engines/engine[0]/starter", 1); + pts.Engines.Engine.state[0].setValue(1); + pts.Controls.Engines.Engine.starter[0].setValue(1); } } var start_one_check = func { - if (getprop("/controls/engines/engine-start-switch") == 2 and pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) { - setprop("/systems/pneumatics/valves/starter-valve-1", 1); + if (pts.Controls.Engines.startSw.getValue() == 2 and pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) { + systems.PNEU.Valves.starter1.setValue(1); settimer(start_one_check_b, 0.5); } } var start_one_check_b = func { - if (getprop("/controls/engines/engine-start-switch") == 2 and systems.PNEU.Psi.engine1.getValue() and !pts.Controls.Engines.Engine.cutoffSw[0].getValue()) { + if (pts.Controls.Engines.startSw.getValue() == 2 and systems.PNEU.Psi.engine1.getValue() >= 25and !pts.Controls.Engines.Engine.cutoffSw[0].getValue()) { auto_start_one(); } } setlistener("/controls/engines/engine[1]/cutoff-switch", func { - if (pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) { - if (getprop("/systems/acconfig/autoconfig-running") == 1) { + if (!pts.Controls.Engines.Engine.cutoffSw[1].getValue()) { + if (pts.Acconfig.running.getValue()) { fast_start_two(); } else { - if (getprop("/controls/engines/engine[1]/man-start") == 0) { + if (!manStart[1].getValue()) { start_two_check(); - } else if (getprop("/controls/engines/engine[1]/man-start") == 1) { + } else { eng_two_man_start.start(); } } - } else if (pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 1) { + } else if (pts.Controls.Engines.Engine.cutoffSw[1].getValue()) { cutoff_two(); } -}); +}, 0, 0); var cutoff_two = func { eng_two_auto_start.stop(); eng_two_man_start.stop(); eng_two_n2_check.stop(); - setprop("/controls/engines/engine[1]/igniter-a", 0); - setprop("/controls/engines/engine[1]/igniter-b", 0); - setprop("/controls/engines/engine[1]/man-start", 0); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/controls/engines/engine[1]/starter", 0); - setprop("/controls/engines/engine[1]/cutoff", 1); - setprop("/engines/engine[1]/state", 0); + igniterA[1].setValue(0); + igniterB[1].setValue(0); + manStart[1].setValue(0); + systems.PNEU.Valves.starter2.setValue(0); + pts.Controls.Engines.Engine.starter[1].setValue(0); + pts.Controls.Engines.Engine.cutoff[1].setValue(1); + pts.Engines.Engine.state[1].setValue(0); interpolate(engines[1].getNode("egt-actual"), 0, egt_shutdown_time); } var fast_start_two = func { - setprop("/controls/engines/engine[1]/cutoff", 0); + pts.Controls.Engines.Engine.cutoff[1].setValue(0); setprop("/engines/engine[1]/out-of-fuel", 0); setprop("/engines/engine[1]/run", 1); @@ -148,69 +146,69 @@ var fast_start_two = func { setprop("/fdm/jsbsim/propulsion/set-running", 1); - setprop("/engines/engine[1]/state", 3); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); + pts.Engines.Engine.state[1].setValue(3); + systems.PNEU.Valves.starter2.setValue(0); } setlistener("/controls/engines/engine[1]/man-start", func { start_two_mancheck(); -}); +}, 0, 0); var start_two_mancheck = func { - if (getprop("/controls/engines/engine[1]/man-start") == 1) { - if (getprop("/controls/engines/engine-start-switch") == 2 and (pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 1)) { - setprop("/systems/pneumatics/valves/starter-valve-2", 1); + if (manStart[1].getValue() == 1) { + if (pts.Controls.Engines.startSw.getValue() == 2 and (pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 1)) { + systems.PNEU.Valves.starter2.setValue(1); settimer(start_two_mancheck_b, 0.5); } } else { if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) { - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/engines/engine[1]/state", 0); - setprop("/controls/engines/engine[1]/starter", 0); + systems.PNEU.Valves.starter2.setValue(0); + pts.Engines.Engine.state[1].setValue(0); + pts.Controls.Engines.Engine.starter[1].setValue(0); } } } var start_two_mancheck_b = func { if (systems.PNEU.Psi.engine2.getValue() >= 25) { - setprop("/engines/engine[1]/state", 1); - setprop("/controls/engines/engine[1]/starter", 1); + pts.Engines.Engine.state[1].setValue(1); + pts.Controls.Engines.Engine.starter[1].setValue(1); } } var start_two_check = func { - if (getprop("/controls/engines/engine-start-switch") == 2 and pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) { - setprop("/systems/pneumatics/valves/starter-valve-2", 1); + if (pts.Controls.Engines.startSw.getValue() == 2 and pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) { + systems.PNEU.Valves.starter2.setValue(1); settimer(start_two_check_b, 0.5); } } var start_two_check_b = func { - if (getprop("/controls/engines/engine-start-switch") == 2 and systems.PNEU.Psi.engine2.getValue() >= 25 and !pts.Controls.Engines.Engine.cutoffSw[1].getValue()) { + if (pts.Controls.Engines.startSw.getValue() == 2 and systems.PNEU.Psi.engine2.getValue() >= 25 and !pts.Controls.Engines.Engine.cutoffSw[1].getValue()) { auto_start_two(); } } # Start Engine One var auto_start_one = func { - setprop("/engines/engine[0]/state", 1); - setprop("/controls/engines/engine[0]/starter", 1); + pts.Engines.Engine.state[0].setValue(1); + pts.Controls.Engines.Engine.starter[0].setValue(1); eng_one_auto_start.start(); } var eng_one_auto_start = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[0].getValue() >= 22) { eng_one_auto_start.stop(); - setprop("/engines/engine[0]/state", 2); - setprop("/controls/engines/engine[0]/cutoff", 0); - if (getprop("/controls/engines/engine[0]/last-igniter") == "B") { - setprop("/controls/engines/engine[0]/igniter-a", 1); - setprop("/controls/engines/engine[0]/igniter-b", 0); - setprop("/controls/engines/engine[0]/last-igniter", "A"); - } else if (getprop("/controls/engines/engine[0]/last-igniter") == "A") { - setprop("/controls/engines/engine[0]/igniter-a", 0); - setprop("/controls/engines/engine[0]/igniter-b", 1); - setprop("/controls/engines/engine[0]/last-igniter", "B"); + pts.Engines.Engine.state[0].setValue(2); + pts.Controls.Engines.Engine.cutoff[0].setValue(0); + if (lastIgniter[0].getValue() == "B") { + igniterA[0].setValue(1); + igniterB[0].setValue(0); + lastIgniter[0].setValue("A"); + } else if (lastIgniter[0].getValue() == "A") { + igniterA[0].setValue(0); + igniterB[0].setValue(1); + lastIgniter[0].setValue("B"); } interpolate(engines[0].getNode("egt-actual"), egt_start, egt_lightup_time); eng_one_egt_check.start(); @@ -221,10 +219,10 @@ var eng_one_auto_start = maketimer(0.5, func { var eng_one_man_start = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[0].getValue() >= 16.7) { eng_one_man_start.stop(); - setprop("/engines/engine[0]/state", 2); - setprop("/controls/engines/engine[0]/cutoff", 0); - setprop("/controls/engines/engine[0]/igniter-a", 1); - setprop("/controls/engines/engine[0]/igniter-b", 1); + pts.Engines.Engine.state[0].setValue(2); + pts.Controls.Engines.Engine.cutoff[0].setValue(0); + igniterA[0].setValue(1); + igniterB[0].setValue(1); interpolate(engines[0].getNode("egt-actual"), egt_start, egt_lightup_time); eng_one_egt_check.start(); eng_one_n2_check.start(); @@ -232,7 +230,7 @@ var eng_one_man_start = maketimer(0.5, func { }); var eng_one_egt_check = maketimer(0.5, func { - if (getprop("/engines/engine[0]/egt-actual") >= egt_start) { + if (pts.Engines.Engine.egtActual[0].getValue() >= egt_start) { eng_one_egt_check.stop(); interpolate(engines[0].getNode("egt-actual"), egt_min, egt_lightdn_time); } @@ -240,40 +238,40 @@ var eng_one_egt_check = maketimer(0.5, func { var eng_one_n2_check = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[0].getValue() >= 43.0) { - if (getprop("/controls/engines/engine[0]/igniter-a") != 0) { - setprop("/controls/engines/engine[0]/igniter-a", 0); + if (igniterA[0].getValue() != 0) { + igniterA[0].setValue(0); } - if (getprop("/controls/engines/engine[0]/igniter-b") != 0) { - setprop("/controls/engines/engine[0]/igniter-b", 0); + if (igniterB[0].getValue() != 0) { + igniterB[0].setValue(0); } } if (pts.Engines.Engine.n2Actual[0].getValue() >= 57.0) { eng_one_n2_check.stop(); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/engines/engine[0]/state", 3); + systems.PNEU.Valves.starter1.setValue(0); + pts.Engines.Engine.state[0].setValue(3); } }); # Start Engine Two var auto_start_two = func { - setprop("/engines/engine[1]/state", 1); - setprop("/controls/engines/engine[1]/starter", 1); + pts.Engines.Engine.state[1].setValue(1); + pts.Controls.Engines.Engine.starter[1].setValue(1); eng_two_auto_start.start(); } var eng_two_auto_start = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[1].getValue() >= 22) { eng_two_auto_start.stop(); - setprop("/engines/engine[1]/state", 2); - setprop("/controls/engines/engine[1]/cutoff", 0); - if (getprop("/controls/engines/engine[1]/last-igniter") == "B") { - setprop("/controls/engines/engine[1]/igniter-a", 1); - setprop("/controls/engines/engine[1]/igniter-b", 0); - setprop("/controls/engines/engine[1]/last-igniter", "A"); - } else if (getprop("/controls/engines/engine[1]/last-igniter") == "A") { - setprop("/controls/engines/engine[1]/igniter-a", 0); - setprop("/controls/engines/engine[1]/igniter-b", 1); - setprop("/controls/engines/engine[1]/last-igniter", "B"); + pts.Engines.Engine.state[1].setValue(2); + pts.Controls.Engines.Engine.cutoff[1].setValue(0); + if (lastIgniter[1].getValue() == "B") { + igniterA[1].setValue(1); + igniterB[1].setValue(0); + lastIgniter[1].setValue("A"); + } else if (lastIgniter[1].getValue() == "A") { + igniterA[1].setValue(0); + igniterB[1].setValue(1); + lastIgniter[1].setValue("B"); } interpolate(engines[1].getNode("egt-actual"), egt_start, egt_lightup_time); eng_two_egt_check.start(); @@ -284,10 +282,10 @@ var eng_two_auto_start = maketimer(0.5, func { var eng_two_man_start = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[1].getValue() >= 16.7) { eng_two_man_start.stop(); - setprop("/engines/engine[1]/state", 2); - setprop("/controls/engines/engine[1]/cutoff", 0); - setprop("/controls/engines/engine[1]/igniter-a", 1); - setprop("/controls/engines/engine[1]/igniter-b", 1); + pts.Engines.Engine.state[1].setValue(2); + pts.Controls.Engines.Engine.cutoff[1].setValue(0); + igniterA[1].setValue(1); + igniterB[1].setValue(1); interpolate(engines[1].getNode("egt-actual"), egt_start, egt_lightup_time); eng_two_egt_check.start(); eng_two_n2_check.start(); @@ -295,7 +293,7 @@ var eng_two_man_start = maketimer(0.5, func { }); var eng_two_egt_check = maketimer(0.5, func { - if (getprop("/engines/engine[1]/egt-actual") >= egt_start) { + if (pts.Engines.Engine.egtActual[1].getValue() >= egt_start) { eng_two_egt_check.stop(); interpolate(engines[1].getNode("egt-actual"), egt_min, egt_lightdn_time); } @@ -303,17 +301,17 @@ var eng_two_egt_check = maketimer(0.5, func { var eng_two_n2_check = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[1].getValue() >= 50.0) { - if (getprop("/controls/engines/engine[1]/igniter-a") != 0) { - setprop("/controls/engines/engine[1]/igniter-a", 0); + if (igniterA[1].getValue() != 0) { + igniterA[1].setValue(0); } - if (getprop("/controls/engines/engine[1]/igniter-b") != 0) { - setprop("/controls/engines/engine[1]/igniter-b", 0); + if (igniterB[1].getValue() != 0) { + igniterB[1].setValue(0); } } if (pts.Engines.Engine.n2Actual[1].getValue() >= 57.0) { eng_two_n2_check.stop(); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/engines/engine[1]/state", 3); + systems.PNEU.Valves.starter2.setValue(0); + pts.Engines.Engine.state[1].setValue(3); } }); @@ -327,31 +325,31 @@ setlistener("/controls/engines/engine-start-switch", func { start_two_check(); start_two_mancheck(); } - if ((getprop("/controls/engines/engine-start-switch") == 0) or (getprop("/controls/engines/engine-start-switch") == 1)) { + if ((pts.Controls.Engines.startSw.getValue() == 0) or (pts.Controls.Engines.startSw.getValue() == 1)) { if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) { - setprop("/controls/engines/engine[0]/starter", 0); - setprop("/controls/engines/engine[0]/cutoff", 1); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/engines/engine[0]/state", 0); + pts.Controls.Engines.Engine.starter[0].setValue(0); + pts.Controls.Engines.Engine.cutoff[0].setValue(1); + systems.PNEU.Valves.starter1.setValue(0); + pts.Engines.Engine.state[0].setValue(0); interpolate(engines[0].getNode("egt-actual"), 0, egt_shutdown_time); } if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) { - setprop("/controls/engines/engine[1]/starter", 0); - setprop("/controls/engines/engine[1]/cutoff", 1); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/engines/engine[1]/state", 0); + pts.Controls.Engines.Engine.starter[1].setValue(0); + pts.Controls.Engines.Engine.cutoff[1].setValue(1); + systems.PNEU.Valves.starter2.setValue(0); + pts.Engines.Engine.state[1].setValue(0); interpolate(engines[1].getNode("egt-actual"), 0, egt_shutdown_time); } } -}); +}, 0, 0); setlistener("/systems/pneumatics/psi/engine-1-psi", func { if (systems.PNEU.Psi.engine1.getValue() < 24.5) { if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) { - setprop("/controls/engines/engine[0]/starter", 0); - setprop("/controls/engines/engine[0]/cutoff", 1); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/engines/engine[0]/state", 0); + pts.Controls.Engines.Engine.starter[0].setValue(0); + pts.Controls.Engines.Engine.cutoff[0].setValue(1); + systems.PNEU.Valves.starter1.setValue(0); + pts.Engines.Engine.state[0].setValue(0); interpolate(engines[0].getNode("egt-actual"), 0, egt_shutdown_time); } } @@ -360,10 +358,10 @@ setlistener("/systems/pneumatics/psi/engine-1-psi", func { setlistener("/systems/pneumatics/psi/engine-2-psi", func { if (systems.PNEU.Psi.engine2.getValue() < 24.5) { if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) { - setprop("/controls/engines/engine[1]/starter", 0); - setprop("/controls/engines/engine[1]/cutoff", 1); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/engines/engine[1]/state", 0); + pts.Controls.Engines.Engine.starter[1].setValue(0); + pts.Controls.Engines.Engine.cutoff[1].setValue(1); + systems.PNEU.Valves.starter2.setValue(0); + pts.Engines.Engine.state[1].setValue(0); interpolate(engines[1].getNode("egt-actual"), 0, egt_shutdown_time); } } diff --git a/Nasal/Systems/FADEC/engines-common.nas b/Nasal/Systems/FADEC/engines-common.nas index 52a71b10..14b32188 100644 --- a/Nasal/Systems/FADEC/engines-common.nas +++ b/Nasal/Systems/FADEC/engines-common.nas @@ -3,6 +3,11 @@ # Copyright (c) 2020 Josh Davidson (Octal450) +var manStart = [props.globals.initNode("/controls/engines/engine[0]/man-start", 0, "BOOL"),props.globals.initNode("/controls/engines/engine[1]/man-start", 0, "BOOL")]; +var lastIgniter = [props.globals.getNode("/controls/engines/engine[0]/last-igniter"),props.globals.initNode("/controls/engines/engine[1]/last-igniter")]; +var igniterA = [props.globals.initNode("/controls/engines/engine[0]/igniter-a", 0, "BOOL"),props.globals.initNode("/controls/engines/engine[1]/igniter-a", 0, "BOOL")]; +var igniterB = [props.globals.initNode("/controls/engines/engine[0]/igniter-b", 0, "BOOL"),props.globals.initNode("/controls/engines/engine[1]/igniter-b", 0, "BOOL")]; + if (pts.Options.eng.getValue() == "IAE") { io.include("engines-iae.nas"); } else { @@ -10,7 +15,8 @@ if (pts.Options.eng.getValue() == "IAE") { } var eng_common_init = func { - # nada + manStart[0].setValue(0); + manStart[1].setValue(0); } # Engine thrust commands diff --git a/Nasal/Systems/FADEC/engines-iae.nas b/Nasal/Systems/FADEC/engines-iae.nas index 784841a6..6f3959e7 100644 --- a/Nasal/Systems/FADEC/engines-iae.nas +++ b/Nasal/Systems/FADEC/engines-iae.nas @@ -17,46 +17,45 @@ var egt_lightdn_time = 10; var shutdown_time = 20; var egt_shutdown_time = 20; + var eng_init = func { - setprop("/controls/engines/engine[0]/man-start", 0); - setprop("/controls/engines/engine[1]/man-start", 0); eng_common_init(); } # Trigger Startups and Stops setlistener("/controls/engines/engine[0]/cutoff-switch", func { - if (pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) { - if (getprop("/systems/acconfig/autoconfig-running") == 1) { + if (!pts.Controls.Engines.Engine.cutoffSw[0].getValue()) { + if (pts.Acconfig.running.getValue()) { fast_start_one(); } else { - if (getprop("/controls/engines/engine[0]/man-start") == 0) { + if (!manStart[0].getValue()) { start_one_check(); - } else if (getprop("/controls/engines/engine[0]/man-start") == 1) { + } else if (manStart[0].getValue()) { eng_one_man_start.start(); } } - } else if (pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 1) { + } else if (pts.Controls.Engines.Engine.cutoffSw[0].getValue()) { cutoff_one(); } -}); +}, 0, 0); var cutoff_one = func { eng_one_auto_start.stop(); eng_one_man_start.stop(); eng_one_n2_check.stop(); - setprop("/controls/engines/engine[0]/igniter-a", 0); - setprop("/controls/engines/engine[0]/igniter-b", 0); - setprop("/controls/engines/engine[0]/man-start", 0); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/controls/engines/engine[0]/starter", 0); - setprop("/controls/engines/engine[0]/cutoff", 1); - setprop("/engines/engine[0]/state", 0); + igniterA[0].setValue(0); + igniterB[0].setValue(0); + manStart[0].setValue(0); + systems.PNEU.Valves.starter1.setValue(0); + pts.Controls.Engines.Engine.starter[0].setValue(0); + pts.Controls.Engines.Engine.cutoff[0].setValue(1); + pts.Engines.Engine.state[0].setValue(0); interpolate(engines[0].getNode("egt-actual"), 0, egt_shutdown_time); eng_one_n2_check.stop(); } var fast_start_one = func { - setprop("/controls/engines/engine[0]/cutoff", 0); + pts.Controls.Engines.Engine.cutoff[0].setValue(0); setprop("/engines/engine[0]/out-of-fuel", 0); setprop("/engines/engine[0]/run", 1); @@ -65,81 +64,81 @@ var fast_start_one = func { setprop("/fdm/jsbsim/propulsion/set-running", 0); - setprop("/engines/engine[0]/state", 3); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); + pts.Engines.Engine.state[0].setValue(3); + systems.PNEU.Valves.starter1.setValue(0); } setlistener("/controls/engines/engine[0]/man-start", func { start_one_mancheck(); -}); +}, 0, 0); var start_one_mancheck = func { - if (getprop("/controls/engines/engine[0]/man-start") == 1) { - if (getprop("/controls/engines/engine-start-switch") == 2 and (pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 1)) { - setprop("/systems/pneumatics/valves/starter-valve-1", 1); + if (manStart[0].getValue()) { + if (pts.Controls.Engines.startSw.getValue() == 2 and (pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 1)) { + systems.PNEU.Valves.starter1.setValue(1); settimer(start_one_mancheck_b, 0.5); } } else { if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) { - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/engines/engine[0]/state", 0); - setprop("/controls/engines/engine[0]/starter", 0); + systems.PNEU.Valves.starter1.setValue(0); + pts.Engines.Engine.state[0].setValue(0); + pts.Controls.Engines.Engine.starter[0].setValue(0); } } } var start_one_mancheck_b = func { if (systems.PNEU.Psi.engine1.getValue() >= 25) { - setprop("/engines/engine[0]/state", 1); - setprop("/controls/engines/engine[0]/starter", 1); + pts.Engines.Engine.state[0].setValue(1); + pts.Controls.Engines.Engine.starter[0].setValue(1); } } var start_one_check = func { - if (getprop("/controls/engines/engine-start-switch") == 2 and pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) { - setprop("/systems/pneumatics/valves/starter-valve-1", 1); + if (pts.Controls.Engines.startSw.getValue() == 2 and pts.Controls.Engines.Engine.cutoffSw[0].getValue() == 0) { + systems.PNEU.Valves.starter1.setValue(1); settimer(start_one_check_b, 0.5); } } var start_one_check_b = func { - if (getprop("/controls/engines/engine-start-switch") == 2 and systems.PNEU.Psi.engine1.getValue() and !pts.Controls.Engines.Engine.cutoffSw[0].getValue()) { + if (pts.Controls.Engines.startSw.getValue() == 2 and systems.PNEU.Psi.engine1.getValue() >= 25 and !pts.Controls.Engines.Engine.cutoffSw[0].getValue()) { auto_start_one(); } } setlistener("/controls/engines/engine[1]/cutoff-switch", func { - if (pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) { - if (getprop("/systems/acconfig/autoconfig-running") == 1) { + if (!pts.Controls.Engines.Engine.cutoffSw[1].getValue()) { + if (pts.Acconfig.running.getValue()) { fast_start_two(); } else { - if (getprop("/controls/engines/engine[1]/man-start") == 0) { + if (!manStart[1].getValue()) { start_two_check(); - } else if (getprop("/controls/engines/engine[1]/man-start") == 1) { + } else if (manStart[1].getValue()) { eng_two_man_start.start(); } } - } else if (pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 1) { + } else if (pts.Controls.Engines.Engine.cutoffSw[1].getValue()) { cutoff_two(); } -}); +}, 0, 0); var cutoff_two = func { eng_two_auto_start.stop(); eng_two_man_start.stop(); eng_two_n2_check.stop(); - setprop("/controls/engines/engine[1]/igniter-a", 0); - setprop("/controls/engines/engine[1]/igniter-b", 0); - setprop("/controls/engines/engine[1]/man-start", 0); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/controls/engines/engine[1]/starter", 0); - setprop("/controls/engines/engine[1]/cutoff", 1); - setprop("/engines/engine[1]/state", 0); + igniterA[1].setValue(0); + igniterB[1].setValue(0); + manStart[1].setValue(0); + systems.PNEU.Valves.starter2.setValue(0); + pts.Controls.Engines.Engine.starter[1].setValue(0); + pts.Controls.Engines.Engine.cutoff[1].setValue(1); + pts.Engines.Engine.state[1].setValue(0); interpolate(engines[1].getNode("egt-actual"), 0, egt_shutdown_time); } var fast_start_two = func { - setprop("/controls/engines/engine[1]/cutoff", 0); + pts.Controls.Engines.Engine.cutoff[1].setValue(0); setprop("/engines/engine[1]/out-of-fuel", 0); setprop("/engines/engine[1]/run", 1); @@ -148,69 +147,69 @@ var fast_start_two = func { setprop("/fdm/jsbsim/propulsion/set-running", 1); - setprop("/engines/engine[1]/state", 3); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); + pts.Engines.Engine.state[1].setValue(3); + systems.PNEU.Valves.starter2.setValue(0); } setlistener("/controls/engines/engine[1]/man-start", func { start_two_mancheck(); -}); +}, 0, 0); var start_two_mancheck = func { - if (getprop("/controls/engines/engine[1]/man-start") == 1) { - if (getprop("/controls/engines/engine-start-switch") == 2 and (pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 1)) { - setprop("/systems/pneumatics/valves/starter-valve-2", 1); + if (manStart[1].getValue() == 1) { + if (pts.Controls.Engines.startSw.getValue() == 2 and (pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 1)) { + systems.PNEU.Valves.starter2.setValue(1); settimer(start_two_mancheck_b, 0.5); } } else { if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) { - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/engines/engine[1]/state", 0); - setprop("/controls/engines/engine[1]/starter", 0); + systems.PNEU.Valves.starter2.setValue(0); + pts.Engines.Engine.state[1].setValue(0); + pts.Controls.Engines.Engine.starter[1].setValue(0); } } } var start_two_mancheck_b = func { if (systems.PNEU.Psi.engine1.getValue() >= 25) { - setprop("/engines/engine[1]/state", 1); - setprop("/controls/engines/engine[1]/starter", 1); + pts.Engines.Engine.state[1].setValue(1); + pts.Controls.Engines.Engine.starter[1].setValue(1); } } var start_two_check = func { - if (getprop("/controls/engines/engine-start-switch") == 2 and pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) { - setprop("/systems/pneumatics/valves/starter-valve-2", 1); + if (pts.Controls.Engines.startSw.getValue() == 2 and pts.Controls.Engines.Engine.cutoffSw[1].getValue() == 0) { + systems.PNEU.Valves.starter2.setValue(1); settimer(start_two_check_b, 0.5); } } var start_two_check_b = func { - if (getprop("/controls/engines/engine-start-switch") == 2 and systems.PNEU.Psi.engine2.getValue() >= 25 and !pts.Controls.Engines.Engine.cutoffSw[1].getValue()) { + if (pts.Controls.Engines.startSw.getValue() == 2 and systems.PNEU.Psi.engine2.getValue() >= 25 and !pts.Controls.Engines.Engine.cutoffSw[1].getValue()) { auto_start_two(); } } # Start Engine One var auto_start_one = func { - setprop("/engines/engine[0]/state", 1); - setprop("/controls/engines/engine[0]/starter", 1); + pts.Engines.Engine.state[0].setValue(1); + pts.Controls.Engines.Engine.starter[0].setValue(1); eng_one_auto_start.start(); } var eng_one_auto_start = maketimer(0.5, func { if (pts.Engines.Engine.n1Actual[0].getValue() >= 4.7) { eng_one_auto_start.stop(); - setprop("/engines/engine[0]/state", 2); - setprop("/controls/engines/engine[0]/cutoff", 0); - if (getprop("/controls/engines/engine[0]/last-igniter") == "B") { - setprop("/controls/engines/engine[0]/igniter-a", 1); - setprop("/controls/engines/engine[0]/igniter-b", 0); - setprop("/controls/engines/engine[0]/last-igniter", "A"); - } else if (getprop("/controls/engines/engine[0]/last-igniter") == "A") { - setprop("/controls/engines/engine[0]/igniter-a", 0); - setprop("/controls/engines/engine[0]/igniter-b", 1); - setprop("/controls/engines/engine[0]/last-igniter", "B"); + pts.Engines.Engine.state[0].setValue(2); + pts.Controls.Engines.Engine.cutoff[0].setValue(0); + if (lastIgniter[0].getValue() == "B") { + igniterA[0].setValue(1); + igniterB[0].setValue(0); + lastIgniter[0].setValue("A"); + } else if (lastIgniter[0].getValue() == "A") { + igniterA[0].setValue(0); + igniterB[0].setValue(1); + lastIgniter[0].setValue("B"); } interpolate(engines[0].getNode("egt-actual"), egt_start, egt_lightup_time); eng_one_egt_check.start(); @@ -221,10 +220,10 @@ var eng_one_auto_start = maketimer(0.5, func { var eng_one_man_start = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[0].getValue() >= 16.7) { eng_one_man_start.stop(); - setprop("/engines/engine[0]/state", 2); - setprop("/controls/engines/engine[0]/cutoff", 0); - setprop("/controls/engines/engine[0]/igniter-a", 1); - setprop("/controls/engines/engine[0]/igniter-b", 1); + pts.Engines.Engine.state[0].setValue(2); + pts.Controls.Engines.Engine.cutoff[0].setValue(0); + igniterA[0].setValue(1); + igniterB[0].setValue(1); interpolate(engines[0].getNode("egt-actual"), egt_start, egt_lightup_time); eng_one_egt_check.start(); eng_one_n2_check.start(); @@ -232,7 +231,7 @@ var eng_one_man_start = maketimer(0.5, func { }); var eng_one_egt_check = maketimer(0.5, func { - if (getprop("/engines/engine[0]/egt-actual") >= egt_start) { + if (pts.Engines.Engine.egtActual[0].getValue() >= egt_start) { eng_one_egt_check.stop(); interpolate(engines[0].getNode("egt-actual"), egt_min, egt_lightdn_time); } @@ -240,40 +239,40 @@ var eng_one_egt_check = maketimer(0.5, func { var eng_one_n2_check = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[0].getValue() >= 43.0) { - if (getprop("/controls/engines/engine[0]/igniter-a") != 0) { - setprop("/controls/engines/engine[0]/igniter-a", 0); + if (igniterA[0].getValue() != 0) { + igniterA[0].setValue(0); } - if (getprop("/controls/engines/engine[0]/igniter-b") != 0) { - setprop("/controls/engines/engine[0]/igniter-b", 0); + if (igniterB[0].getValue() != 0) { + igniterB[0].setValue(0); } } if (pts.Engines.Engine.n2Actual[0].getValue() >= 57.0) { eng_one_n2_check.stop(); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/engines/engine[0]/state", 3); + systems.PNEU.Valves.starter1.setValue(0); + pts.Engines.Engine.state[0].setValue(3); } }); # Start Engine Two var auto_start_two = func { - setprop("/engines/engine[1]/state", 1); - setprop("/controls/engines/engine[1]/starter", 1); + pts.Engines.Engine.state[1].setValue(1); + pts.Controls.Engines.Engine.starter[1].setValue(1); eng_two_auto_start.start(); } var eng_two_auto_start = maketimer(0.5, func { if (pts.Engines.Engine.n1Actual[1].getValue() >= 4.7) { eng_two_auto_start.stop(); - setprop("/engines/engine[1]/state", 2); - setprop("/controls/engines/engine[1]/cutoff", 0); - if (getprop("/controls/engines/engine[1]/last-igniter") == "B") { - setprop("/controls/engines/engine[1]/igniter-a", 1); - setprop("/controls/engines/engine[1]/igniter-b", 0); - setprop("/controls/engines/engine[1]/last-igniter", "A"); - } else if (getprop("/controls/engines/engine[1]/last-igniter") == "A") { - setprop("/controls/engines/engine[1]/igniter-a", 0); - setprop("/controls/engines/engine[1]/igniter-b", 1); - setprop("/controls/engines/engine[1]/last-igniter", "B"); + pts.Engines.Engine.state[1].setValue(2); + pts.Controls.Engines.Engine.cutoff[1].setValue(0); + if (lastIgniter[1].getValue() == "B") { + igniterA[1].setValue(1); + igniterB[1].setValue(0); + lastIgniter[1].setValue("A"); + } else if (lastIgniter[1].getValue() == "A") { + igniterA[1].setValue(0); + igniterB[1].setValue(1); + lastIgniter[1].setValue("B"); } interpolate(engines[1].getNode("egt-actual"), egt_start, egt_lightup_time); eng_two_egt_check.start(); @@ -284,10 +283,10 @@ var eng_two_auto_start = maketimer(0.5, func { var eng_two_man_start = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[1].getValue() >= 16.7) { eng_two_man_start.stop(); - setprop("/engines/engine[1]/state", 2); - setprop("/controls/engines/engine[1]/cutoff", 0); - setprop("/controls/engines/engine[1]/igniter-a", 1); - setprop("/controls/engines/engine[1]/igniter-b", 1); + pts.Engines.Engine.state[1].setValue(2); + pts.Controls.Engines.Engine.cutoff[1].setValue(0); + igniterA[1].setValue(1); + igniterB[1].setValue(1); interpolate(engines[1].getNode("egt-actual"), egt_start, egt_lightup_time); eng_two_egt_check.start(); eng_two_n2_check.start(); @@ -295,7 +294,7 @@ var eng_two_man_start = maketimer(0.5, func { }); var eng_two_egt_check = maketimer(0.5, func { - if (getprop("/engines/engine[1]/egt-actual") >= egt_start) { + if (pts.Engines.Engine.egtActual[1].getValue() >= egt_start) { eng_two_egt_check.stop(); interpolate(engines[1].getNode("egt-actual"), egt_min, egt_lightdn_time); } @@ -303,17 +302,17 @@ var eng_two_egt_check = maketimer(0.5, func { var eng_two_n2_check = maketimer(0.5, func { if (pts.Engines.Engine.n2Actual[1].getValue() >= 43.0) { - if (getprop("/controls/engines/engine[1]/igniter-a") != 0) { - setprop("/controls/engines/engine[1]/igniter-a", 0); + if (igniterA[1].getValue() != 0) { + igniterA[1].setValue(0); } - if (getprop("/controls/engines/engine[1]/igniter-b") != 0) { - setprop("/controls/engines/engine[1]/igniter-b", 0); + if (igniterB[1].getValue() != 0) { + igniterB[1].setValue(0); } } if (pts.Engines.Engine.n2Actual[1].getValue() >= 57.0) { eng_two_n2_check.stop(); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/engines/engine[1]/state", 3); + systems.PNEU.Valves.starter2.setValue(0); + pts.Engines.Engine.state[1].setValue(3); } }); @@ -327,31 +326,31 @@ setlistener("/controls/engines/engine-start-switch", func { start_two_check(); start_two_mancheck(); } - if ((getprop("/controls/engines/engine-start-switch") == 0) or (getprop("/controls/engines/engine-start-switch") == 1)) { + if ((pts.Controls.Engines.startSw.getValue() == 0) or (pts.Controls.Engines.startSw.getValue() == 1)) { if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) { - setprop("/controls/engines/engine[0]/starter", 0); - setprop("/controls/engines/engine[0]/cutoff", 1); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/engines/engine[0]/state", 0); + pts.Controls.Engines.Engine.starter[0].setValue(0); + pts.Controls.Engines.Engine.cutoff[0].setValue(1); + systems.PNEU.Valves.starter1.setValue(0); + pts.Engines.Engine.state[0].setValue(0); interpolate(engines[0].getNode("egt-actual"), 0, egt_shutdown_time); } if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) { - setprop("/controls/engines/engine[1]/starter", 0); - setprop("/controls/engines/engine[1]/cutoff", 1); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/engines/engine[1]/state", 0); + pts.Controls.Engines.Engine.starter[1].setValue(0); + pts.Controls.Engines.Engine.cutoff[1].setValue(1); + systems.PNEU.Valves.starter2.setValue(0); + pts.Engines.Engine.state[1].setValue(0); interpolate(engines[1].getNode("egt-actual"), 0, egt_shutdown_time); } } -}); +}, 0, 0); setlistener("/systems/pneumatics/psi/engine-1-psi", func { if (systems.PNEU.Psi.engine1.getValue() < 24.5) { if (pts.Engines.Engine.state[0].getValue() == 1 or pts.Engines.Engine.state[0].getValue() == 2) { - setprop("/controls/engines/engine[0]/starter", 0); - setprop("/controls/engines/engine[0]/cutoff", 1); - setprop("/systems/pneumatics/valves/starter-valve-1", 0); - setprop("/engines/engine[0]/state", 0); + pts.Controls.Engines.Engine.starter[0].setValue(0); + pts.Controls.Engines.Engine.cutoff[0].setValue(1); + systems.PNEU.Valves.starter1.setValue(0); + pts.Engines.Engine.state[0].setValue(0); interpolate(engines[0].getNode("egt-actual"), 0, egt_shutdown_time); } } @@ -360,10 +359,10 @@ setlistener("/systems/pneumatics/psi/engine-1-psi", func { setlistener("/systems/pneumatics/psi/engine-2-psi", func { if (systems.PNEU.Psi.engine2.getValue() < 24.5) { if (pts.Engines.Engine.state[1].getValue() == 1 or pts.Engines.Engine.state[1].getValue() == 2) { - setprop("/controls/engines/engine[1]/starter", 0); - setprop("/controls/engines/engine[1]/cutoff", 1); - setprop("/systems/pneumatics/valves/starter-valve-2", 0); - setprop("/engines/engine[1]/state", 0); + pts.Controls.Engines.Engine.starter[1].setValue(0); + pts.Controls.Engines.Engine.cutoff[1].setValue(1); + systems.PNEU.Valves.starter2.setValue(0); + pts.Engines.Engine.state[1].setValue(0); interpolate(engines[1].getNode("egt-actual"), 0, egt_shutdown_time); } } diff --git a/Nasal/Systems/brakesystem.nas b/Nasal/Systems/brakesystem.nas index 3b98f390..ca021df9 100755 --- a/Nasal/Systems/brakesystem.nas +++ b/Nasal/Systems/brakesystem.nas @@ -406,7 +406,7 @@ var Autobrake = { me._mode = me.mode.getValue(); me._active = me.active.getBoolValue(); if (me._gnd_speed > 72) { - if (me._mode != 0 and pts.Controls.Engines.Engine.throttle[0].getValue() < 0.15 and pts.Controls.Engines.Engine.throttle[1].getValue() < 0.15 and me._wow0) { + if (me._mode != 0 and pts.Controls.Engines.Engine.throttle[0].getValue() < 0.15 and pts.Controls.Engines.Engine.throttle[1].getValue() < 0.15 and me._wow0 and systems.HYD.Brakes.askidSw.getValue() and systems.HYD.Psi.green.getValue() >= 2500 ) { me.active.setBoolValue(1); } elsif (me._active) { me.active.setBoolValue(0); diff --git a/Nasal/Systems/hydraulics.nas b/Nasal/Systems/hydraulics.nas index 3cd48602..0d6ec5ce 100644 --- a/Nasal/Systems/hydraulics.nas +++ b/Nasal/Systems/hydraulics.nas @@ -2,6 +2,8 @@ # Jonathan Redpath # Copyright (c) 2019 Jonathan Redpath +var lcont = 0; +var rcont = 0; var HYD = { Brakes: { @@ -10,10 +12,11 @@ var HYD = { rightPressPsi: props.globals.initNode("/systems/hydraulic/brakes/pressure-right-psi", 0, "INT"), askidSw: props.globals.initNode("/systems/hydraulic/brakes/askidnwssw", 1, "BOOL"), mode: props.globals.initNode("/systems/hydraulic/brakes/mode", 0, "INT"), + leftbrake: props.globals.getNode("/controls/gear/brake-left"), + rightbrake: props.globals.getNode("/controls/gear/brake-right"), lbrake: props.globals.initNode("/systems/hydraulic/brakes/lbrake", 0, "INT"), rbrake: props.globals.initNode("/systems/hydraulic/brakes/rbrake", 0, "INT"), noserubber: props.globals.initNode("/systems/hydraulic/brakes/nose-rubber", 0, "INT"), - counter: props.globals.initNode("/systems/hydraulic/brakes/counter", 0, "INT"), }, Fail: { blueElec: props.globals.getNode("/systems/failures/hydraulic/blue-elec"), @@ -85,11 +88,110 @@ var HYD = { me.Fail.yellowLeak.setBoolValue(0); }, loop: func() { + if (me.Brakes.leftbrake.getValue() == 1) { + me.Brakes.lbrake.setValue(1); + } else { + me.Brakes.lbrake.setValue(0); + } + if (me.Brakes.rightbrake.getValue() == 1) { + me.Brakes.rbrake.setValue(1); + } else { + me.Brakes.rbrake.setValue(0); + } + if (props.globals.getValue("/controls/gear/nws-switch") == 1) { + me.Brakes.askidSw.setBoolValue(1); #true + } else { + me.Brakes.askidSw.setBoolValue(0); #false + } if (me.Brakes.mode.getValue() == 2) { if (me.Psi.yellow.getValue() > 2500 and me.Brakes.accumPressPsi.getValue() < 700) { me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() + 50); } } + + # Decrease accumPressPsi when green and yellow hydraulic's aren't pressurized + if (me.Brakes.leftbrake.getValue() > 0) { + lcont = lcont + 1; + } else { + lcont = 0; + } + if (me.Brakes.rightbrake.getValue() > 0) { + rcont = rcont + 1; + } else { + rcont = 0; + } + if ((me.Psi.green.getValue() == 0) and (me.Psi.yellow.getValue() == 0) and (me.Brakes.accumPressPsi.getValue()) > 0) { + if (lcont == 1) { + #me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() - (35 * me.Brakes.leftbrake.getValue())); + me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() - 35); + } + if (rcont == 1) { + #me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() - (35 * me.Brakes.leftbrake.getValue())); + me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() - 35); + } + if (me.Brakes.accumPressPsi.getValue() < 0) { + me.Brakes.accumPressPsi.setValue(0); + } + } + + # Braking Pressure + if (me.Brakes.mode.getValue() == 1 or (me.Brakes.mode.getValue() == 2 and me.Psi.green.getValue() >= 2500)) { + # Normal braking - Green OK + if (me.Brakes.lbrake.getValue() > 0) { + me.Brakes.leftPressPsi.setValue(props.globals.getValue("/systems/hydraulic/green-psi-ptu")); + } else { + me.Brakes.leftPressPsi.setValue(0); + } + if (me.Brakes.rbrake.getValue() > 0) { + me.Brakes.rightPressPsi.setValue(props.globals.getValue("/systems/hydraulic/green-psi-ptu")); + } else { + me.Brakes.rightPressPsi.setValue(0); + } + } else { + if (me.Brakes.mode.getValue() == 2 and me.Psi.green.getValue() < 2500) { + # Alternate Braking (Yellow OK + Antiskid ON + electric OK) - missing condition: BSCU OK-KO + if (me.Psi.yellow.getValue() >= 2500 and me.Brakes.askidSw.getValue() and props.globals.getValue("/systems/electrical/serviceable")) { + if (me.Brakes.lbrake.getValue() > 0) { + me.Brakes.leftPressPsi.setValue(props.globals.getValue("/systems/hydraulic/yellow-psi-ptu")); + } else { + me.Brakes.leftPressPsi.setValue(0); + } + if (me.Brakes.rbrake.getValue() > 0) { + me.Brakes.rightPressPsi.setValue(props.globals.getValue("/systems/hydraulic/yellow-psi-ptu")); + } else { + me.Brakes.rightPressPsi.setValue(0); + } + } else { + # Alternate Braking (Yellow OK + Antiskid OFF + electric OK) - missing condition: BSCU OK-KO + if (me.Psi.yellow.getValue() >= 2500 and !me.Brakes.askidSw.getValue() and props.globals.getValue("/systems/electrical/serviceable")) { + if (me.Brakes.lbrake.getValue() > 0) { + me.Brakes.leftPressPsi.setValue(1000); + } else { + me.Brakes.leftPressPsi.setValue(0); + } + if (me.Brakes.rbrake.getValue() > 0) { + me.Brakes.rightPressPsi.setValue(1000); + } else { + me.Brakes.rightPressPsi.setValue(0); + } + } else { + # Alternate Braking (Yellow KO or Antiskid KO or electric KO) - missing condition: BSCU OK-KO + if (me.Psi.yellow.getValue() < 2500 or !me.Brakes.askidSw.getValue() or !props.globals.getValue("/systems/electrical/serviceable")) { + if (me.Brakes.lbrake.getValue() > 0) { + me.Brakes.leftPressPsi.setValue(me.Brakes.accumPressPsi.getValue()); + } else { + me.Brakes.leftPressPsi.setValue(0); + } + if (me.Brakes.rbrake.getValue() > 0) { + me.Brakes.rightPressPsi.setValue(me.Brakes.accumPressPsi.getValue()); + } else { + me.Brakes.rightPressPsi.setValue(0); + } + } + } + } + } + } }, }; diff --git a/Nasal/Systems/pneumatics.nas b/Nasal/Systems/pneumatics.nas index 9587c486..d52864d0 100644 --- a/Nasal/Systems/pneumatics.nas +++ b/Nasal/Systems/pneumatics.nas @@ -97,6 +97,8 @@ var PNEU = { pack2: props.globals.getNode("/systems/air-conditioning/valves/flow-control-valve-2"), ramAir: props.globals.getNode("/systems/air-conditioning/valves/ram-air"), hotAir: props.globals.getNode("/systems/air-conditioning/valves/hot-air"), + starter1: props.globals.getNode("/systems/pneumatics/valves/starter-valve-1"), + starter2: props.globals.getNode("/systems/pneumatics/valves/starter-valve-2"), }, pressMode: props.globals.getNode("/systems/pressurization/mode", 1), init: func() { diff --git a/Nasal/emesary/exec.nas b/Nasal/emesary/exec.nas index 1e4ca7fd..3ea20548 100644 --- a/Nasal/emesary/exec.nas +++ b/Nasal/emesary/exec.nas @@ -30,23 +30,7 @@ var execLoop = func emesary.GlobalTransmitter.NotifyAll(notifications.frameNotification); notifications.frameNotification.FrameCount = notifications.frameNotification.FrameCount + 1; - - if (notifications.frameNotification.frame_rate < 5) { - frame_inc = 0.25;#4 Hz - } elsif (notifications.frameNotification.frame_rate < 10) { - frame_inc = 0.125;#8 Hz - } elsif (notifications.frameNotification.frame_rate < 15) { - frame_inc = 0.10;#10 Hz - } elsif (notifications.frameNotification.frame_rate < 20) { - frame_inc = 0.075;#13.3 Hz - } elsif (notifications.frameNotification.frame_rate < 25) { - frame_inc = 0.05;#20 Hz - } elsif (notifications.frameNotification.frame_rate < 40) { - frame_inc = 0.0333;#30 Hz - } else { - frame_inc = 0.02;#50 Hz - } - + frame_inc = 0.0333; #30 Hz if (frame_inc != cur_frame_inc) { cur_frame_inc = frame_inc; } diff --git a/Systems/a320-fcs.xml b/Systems/a320-fcs.xml index 37de4aa2..57ff2a31 100644 --- a/Systems/a320-fcs.xml +++ b/Systems/a320-fcs.xml @@ -94,8 +94,14 @@ - /systems/hydraulic/green-psi ge 1500 - /systems/hydraulic/blue-psi ge 1500 + + /systems/fctl/elac1 eq 1 + /systems/hydraulic/blue-psi ge 1500 + + + /systems/fctl/elac2 eq 1 + /systems/hydraulic/green-psi ge 1500 + @@ -167,8 +173,14 @@ - /systems/hydraulic/green-psi ge 1500 - /systems/hydraulic/blue-psi ge 1500 + + /systems/fctl/elac1 eq 1 + /systems/hydraulic/green-psi ge 1500 + + + /systems/fctl/elac2 eq 1 + /systems/hydraulic/blue-psi ge 1500 + @@ -229,16 +241,42 @@ - /systems/hydraulic/green-psi ge 1500 - /systems/hydraulic/blue-psi ge 1500 + + + /systems/fctl/elac1 eq 1 + /systems/fctl/sec1 eq 1 + + /systems/hydraulic/blue-psi ge 1500 + + + + /systems/fctl/elac2 eq 1 + /systems/fctl/sec2 eq 1 + + /systems/hydraulic/green-psi ge 1500 + + + + /systems/hydraulic/blue-psi ge 1500 + /systems/hydraulic/green-psi ge 1500 + + /systems/failures/elevator-left eq 0 + + /systems/fctl/elac1 eq 0 + /systems/fctl/sec1 eq 0 + /systems/fctl/elac2 eq 0 + /systems/fctl/sec2 eq 0 + + hydraulics/elevator-l/pressure-switch-or eq 1 /systems/failures/elevator-left eq 0 + /it-fbw/law ne 3 -1.0 @@ -269,16 +307,42 @@ - /systems/hydraulic/yellow-psi ge 1500 - /systems/hydraulic/blue-psi ge 1500 + + + /systems/fctl/elac1 eq 1 + /systems/fctl/sec1 eq 1 + + /systems/hydraulic/blue-psi ge 1500 + + + + /systems/fctl/elac2 eq 1 + /systems/fctl/sec2 eq 1 + + /systems/hydraulic/yellow-psi ge 1500 + + + + /systems/hydraulic/blue-psi ge 1500 + /systems/hydraulic/yellow-psi ge 1500 + + /systems/failures/elevator-right eq 0 + + /systems/fctl/elac1 eq 0 + /systems/fctl/sec1 eq 0 + /systems/fctl/elac2 eq 0 + /systems/fctl/sec2 eq 0 + + hydraulics/elevator-r/pressure-switch-or eq 1 /systems/failures/elevator-right eq 0 + /it-fbw/law ne 3 -1.0 @@ -307,7 +371,10 @@ - + + + /systems/failures/fctl/ths-jam eq 1 + /systems/hydraulic/yellow-psi ge 1500 /systems/hydraulic/green-psi ge 1500 diff --git a/Systems/a320-fwc.xml b/Systems/a320-fwc.xml index dba62f04..bca60814 100644 --- a/Systems/a320-fwc.xml +++ b/Systems/a320-fwc.xml @@ -2026,7 +2026,7 @@ - + @@ -2049,6 +2049,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 + + + diff --git a/Systems/libraries.xml b/Systems/libraries.xml index 16868fdf..5ac1e079 100644 --- a/Systems/libraries.xml +++ b/Systems/libraries.xml @@ -710,46 +710,6 @@ /controls/flight/auto-coordination - - - - Left Press - gain - 1.0 - 0.05 - - - - /controls/gear/brake-left - 0.0 0 - 0.31000 - 0.62000 - 1.03000 -
-
- - /systems/hydraulic/brakes/pressure-left-psi -
- - - Right Press - gain - 1.0 - 0.05 - - - - /controls/gear/brake-right - 0.0 0 - 0.31000 - 0.62000 - 1.03000 -
-
- - /systems/hydraulic/brakes/pressure-right-psi -
- Left Door gain diff --git a/Systems/pfd.xml b/Systems/pfd.xml index 00b3ee6b..c3749535 100644 --- a/Systems/pfd.xml +++ b/Systems/pfd.xml @@ -141,34 +141,6 @@ /instrumentation/pfd/alt-diff - - Ground bug diff - gain - 0.05 - 1.0 - - /position/ground-elev-ft - - - /instrumentation/altimeter/indicated-altitude-ft - - /instrumentation/pfd/ground-diff - - - - Destination bug diff - gain - 0.05 - 1.0 - - /FMGC/internal/ldg-elev - - - /instrumentation/altimeter/indicated-altitude-ft - - /instrumentation/pfd/landing-diff - - Localizer course diff gain diff --git a/revision.txt b/revision.txt index aaa6442f..f70d7bba 100644 --- a/revision.txt +++ b/revision.txt @@ -1 +1 @@ -41 \ No newline at end of file +42 \ No newline at end of file