From 5046369761f6c0f8c47156b6a78f58091428f498 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R <legoboyvdlp@gmail.com> Date: Tue, 15 Oct 2019 19:03:43 +0100 Subject: [PATCH] Hydraulics: correct PTU function, fire valves --- Models/Instruments/Lower-ECAM/Lower-ECAM.nas | 117 +++++++++---------- Nasal/hydraulics.nas | 48 ++++++++ Systems/a320-electrical.xml | 2 + Systems/a320-hydraulic.xml | 71 ++++++++--- 4 files changed, 161 insertions(+), 77 deletions(-) diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas index e79d3f2a..50c7c03b 100644 --- a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas @@ -30,9 +30,6 @@ var leftdoor = 0; var rightdoor = 0; var nosedoor = 0; var gearlvr = 0; -var askidsw = 0; -var brakemode = 0; -var accum = 0; var elapsedtime = 0; var tr1_v = 0; var tr1_a = 0; @@ -72,7 +69,7 @@ var aileron_ind_right = props.globals.getNode("/ECAM/Lower/aileron-ind-right", 1 var elevator_ind_left = props.globals.getNode("/ECAM/Lower/elevator-ind-left", 1); var elevator_ind_right = props.globals.getNode("/ECAM/Lower/elevator-ind-right", 1); var elevator_trim_deg = props.globals.getNode("/ECAM/Lower/elevator-trim-deg", 1); -var final_deg = props.globals.getNode("/fdm/jsbsim/hydraulics/rudder/final-deg", 1); +var final_deg = props.globals.getNode("/fdm/jsbsim/hydraulic/rudder/final-deg", 1); var temperature_degc = props.globals.getNode("/environment/temperature-degc", 1); var gw = props.globals.getNode("/FMGC/internal/gw", 1); var tank3_content_lbs = props.globals.getNode("/fdm/jsbsim/propulsion/tank[2]/contents-lbs", 1); @@ -164,23 +161,37 @@ var tr2_fault = props.globals.getNode("/systems/failures/electrical/tr-2", 1); var essTrVolt = props.globals.getNode("/systems/electrical/relay/dc-ess-feed-tr/output", 1); var essTrAmp = props.globals.getNode("/systems/electrical/relay/dc-ess-feed-tr/output-amp", 1); +# Hydraulic +var blue_psi = 0; +var green_psi = 0; +var yellow_psi = 0; +var y_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/yellow-resv-lo-air-press", 1); +var b_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/blue-resv-lo-air-press", 1); +var g_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/green-resv-lo-air-press", 1); +var elec_pump_y_ovht = props.globals.getNode("/systems/hydraulic/elec-pump-yellow-ovht", 1); +var elec_pump_b_ovht = props.globals.getNode("/systems/hydraulic/elec-pump-blue-ovht", 1); +var rat_deployed = props.globals.getNode("/controls/hydraulic/rat-deployed", 1); +var y_resv_ovht = props.globals.getNode("/systems/hydraulic/yellow-resv-ovht", 1); +var b_resv_ovht = props.globals.getNode("/systems/hydraulic/blue-resv-ovht", 1); +var g_resv_ovht = props.globals.getNode("/systems/hydraulic/green-resv-ovht", 1); +var askidsw = 0; +var brakemode = 0; +var accum = 0; + var eng1_running = props.globals.getNode("/engines/engine[0]/running", 1); var eng2_running = props.globals.getNode("/engines/engine[1]/running", 1); var switch_cart = props.globals.getNode("/controls/electrical/ground-cart", 1); var total_psi = props.globals.getNode("/systems/pneumatic/total-psi", 1); -var b_psi = props.globals.getNode("/systems/hydraulic/blue-psi", 1); -var g_psi = props.globals.getNode("/systems/hydraulic/green-psi", 1); -var y_psi = props.globals.getNode("/systems/hydraulic/yellow-psi", 1); -var spoiler_L1 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l1/final-deg", 1); -var spoiler_L2 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l2/final-deg", 1); -var spoiler_L3 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l3/final-deg", 1); -var spoiler_L4 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l4/final-deg", 1); -var spoiler_L5 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l5/final-deg", 1); -var spoiler_R1 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r1/final-deg", 1); -var spoiler_R2 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r2/final-deg", 1); -var spoiler_R3 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r3/final-deg", 1); -var spoiler_R4 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r4/final-deg", 1); -var spoiler_R5 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r5/final-deg", 1); +var spoiler_L1 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-l1/final-deg", 1); +var spoiler_L2 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-l2/final-deg", 1); +var spoiler_L3 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-l3/final-deg", 1); +var spoiler_L4 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-l4/final-deg", 1); +var spoiler_L5 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-l5/final-deg", 1); +var spoiler_R1 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-r1/final-deg", 1); +var spoiler_R2 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-r2/final-deg", 1); +var spoiler_R3 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-r3/final-deg", 1); +var spoiler_R4 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-r4/final-deg", 1); +var spoiler_R5 = props.globals.getNode("/fdm/jsbsim/hydraulic/spoiler-r5/final-deg", 1); var spoiler_L1_fail = props.globals.getNode("/systems/failures/spoiler-l1", 1); var spoiler_L2_fail = props.globals.getNode("/systems/failures/spoiler-l2", 1); var spoiler_L3_fail = props.globals.getNode("/systems/failures/spoiler-l3", 1); @@ -217,25 +228,6 @@ var tank1pump1 = props.globals.getNode("controls/fuel/tank1pump1", 1); var tank1pump2 = props.globals.getNode("controls/fuel/tank1pump2", 1); var tank2pump1 = props.globals.getNode("controls/fuel/tank2pump1", 1); var tank2pump2 = props.globals.getNode("controls/fuel/tank2pump2", 1); -var ptu = props.globals.getNode("/controls/hydraulic/ptu", 1); -var ptu_fault = props.globals.getNode("/systems/hydraulic/ptu-fault", 1); -var ptu_active = props.globals.getNode("/systems/hydraulic/ptu-active", 1); -var ptu_supplies = props.globals.getNode("/systems/hydraulic/ptu-supplies", 1); -var eng1_pump = props.globals.getNode("/controls/hydraulic/eng1-pump", 1); -var eng2_pump = props.globals.getNode("/controls/hydraulic/eng2-pump", 1); -var elec_pump_blue = props.globals.getNode("/controls/hydraulic/elec-pump-blue", 1); -var elec_pump_yellow = props.globals.getNode("/controls/hydraulic/elec-pump-yellow", 1); -var y_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/yellow-resv-lo-air-press", 1); -var b_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/blue-resv-lo-air-press", 1); -var g_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/green-resv-lo-air-press", 1); -var elec_pump_y_ovht = props.globals.getNode("/systems/hydraulic/elec-pump-yellow-ovht", 1); -var elec_pump_b_ovht = props.globals.getNode("/systems/hydraulic/elec-pump-blue-ovht", 1); -var rat_deployed = props.globals.getNode("/controls/hydraulic/rat-deployed", 1); -var y_resv_ovht = props.globals.getNode("/systems/hydraulic/yellow-resv-ovht", 1); -var b_resv_ovht = props.globals.getNode("/systems/hydraulic/blue-resv-ovht", 1); -var g_resv_ovht = props.globals.getNode("/systems/hydraulic/green-resv-ovht", 1); -var y_fire_valve = props.globals.getNode("/systems/hydraulic/yellow-fire-valve", 1); -var g_fire_valve = props.globals.getNode("/systems/hydraulic/green-fire-valve", 1); var autobreak_mode = props.globals.getNode("/controls/autobrake/mode", 1); var gear1_pos = props.globals.getNode("gear/gear[0]/position-norm", 1); var gear2_pos = props.globals.getNode("gear/gear[1]/position-norm", 1); @@ -244,9 +236,6 @@ var gear_door_L = props.globals.getNode("/systems/hydraulic/gear/door-left", 1); var gear_door_R = props.globals.getNode("/systems/hydraulic/gear/door-right", 1); var gear_door_N = props.globals.getNode("/systems/hydraulic/gear/door-nose", 1); var gear_down = props.globals.getNode("/controls/gear/gear-down", 1); -var askid = props.globals.getNode("/systems/hydraulic/brakes/askidnwssw", 1); -var brk_mode = props.globals.getNode("/systems/hydraulic/brakes/mode", 1); -var accu_press = props.globals.getNode("/systems/hydraulic/brakes/accumulator-pressure-psi", 1); var press_vs_norm = props.globals.getNode("/systems/pressurization/vs-norm", 1); var cabinalt = props.globals.getNode("/systems/pressurization/cabinalt-norm", 1); var gear0_wow = props.globals.getNode("/gear/gear[0]/wow", 1); @@ -1847,9 +1836,9 @@ var canvas_lowerECAM_fctl = { "spoiler5Lf","ailLscale","ailRscale","path4249","path4249-3","path4249-3-6-7","path4249-3-6-7-5","path4249-3-6"]; }, update: func() { - blue_psi = b_psi.getValue(); - green_psi = g_psi.getValue(); - yellow_psi = y_psi.getValue(); + blue_psi = systems.HYD.Psi.blue.getValue(); + green_psi = systems.HYD.Psi.green.getValue(); + yellow_psi = systems.HYD.Psi.yellow.getValue(); # Pitch Trim me["PT"].setText(sprintf("%2.1f", math.round(elevator_trim_deg.getValue(), 0.1))); @@ -2442,9 +2431,9 @@ var canvas_lowerECAM_hyd = { "LO-AIR-PRESS-Yellow","LO-AIR-PRESS-Blue","OVHT-Green","OVHT-Blue","OVHT-Yellow","Quantity-Indicator-Green","Quantity-Indicator-Blue","Quantity-Indicator-Yellow","Green-label","Blue-label","Yellow-label"]; }, update: func() { - blue_psi = b_psi.getValue(); - green_psi = g_psi.getValue(); - yellow_psi = y_psi.getValue(); + blue_psi = systems.HYD.Psi.blue.getValue(); + green_psi = systems.HYD.Psi.green.getValue(); + yellow_psi = systems.HYD.Psi.yellow.getValue(); me["Press-Green"].setText(sprintf("%s", math.round(green_psi, 50))); me["Press-Blue"].setText(sprintf("%s", math.round(blue_psi, 50))); @@ -2491,12 +2480,12 @@ var canvas_lowerECAM_hyd = { me["Press-Green"].setColor(0.7333,0.3803,0); me["Green-label"].setColor(0.7333,0.3803,0); } - - if (ptu.getValue() == 1 and ptu_fault.getValue() == 0) { + + if (systems.HYD.Switch.ptu.getValue() and !systems.HYD.Fail.ptuFault.getValue()) { me["PTU-connection"].setColor(0.0509,0.7529,0.2941); - if (ptu_active.getValue() == 1) { - if (ptu_supplies.getValue() == "yellow") { + if (systems.HYD.Ptu.active.getValue()) { + if (systems.HYD.Ptu.diff.getValue() < 0) { me["PTU-Supply-Line"].show(); me["PTU-supply-yellow"].show(); me["PTU-supply-green"].hide(); @@ -2535,7 +2524,7 @@ var canvas_lowerECAM_hyd = { me["Pump-Yellow-label"].setColor(0.7333,0.3803,0); } - if (eng1_pump.getValue() == 1) { + if (systems.HYD.Switch.greenEDP.getValue()) { me["Pump-Green-off"].hide(); if (green_psi >= 1500) { me["Pump-Green-on"].show(); @@ -2555,7 +2544,7 @@ var canvas_lowerECAM_hyd = { me["Pump-Green"].setColor(0.7333,0.3803,0); } - if (eng2_pump.getValue() == 1) { + if (systems.HYD.Switch.yellowEDP.getValue()) { me["Pump-Yellow-off"].hide(); if (yellow_psi >= 1500) { me["Pump-Yellow-on"].show(); @@ -2576,7 +2565,7 @@ var canvas_lowerECAM_hyd = { me["Pump-Yellow"].setColor(0.7333,0.3803,0); } - if (elec_pump_blue.getValue() == 1) { + if (systems.HYD.Switch.blueElec.getValue()) { me["Pump-Blue-off"].hide(); if (blue_psi >= 1500) { me["Pump-Blue-on"].show(); @@ -2596,7 +2585,7 @@ var canvas_lowerECAM_hyd = { me["Pump-Blue"].setColor(0.7333,0.3803,0); } - if (elec_pump_yellow.getValue() == 0) { + if (!systems.HYD.Switch.yellowElec.getValue()) { me["ELEC-Yellow-on"].hide(); me["ELEC-Yellow-off"].show(); } else { @@ -2639,7 +2628,7 @@ var canvas_lowerECAM_hyd = { me["ELEC-OVHT-Blue"].hide(); } - if (rat_deployed.getValue() == 1) { + if (systems.HYD.Rat.position.getValue() == 1) { me["RAT-stowed"].hide(); me["RAT-not-stowed"].show(); } else { @@ -2665,19 +2654,19 @@ var canvas_lowerECAM_hyd = { me["OVHT-Blue"].hide(); } - if (ac1.getValue() > 110) { + if (systems.ELEC.Bus.ac1.getValue() > 110) { me["ELEC-Blue-label"].setColor(0.8078,0.8039,0.8078); } else { me["ELEC-Blue-label"].setColor(0.7333,0.3803,0); } - if (ac2.getValue() > 110) { + if (systems.ELEC.Bus.ac2.getValue() > 110) { me["ELEC-Yellow-label"].setColor(0.8078,0.8039,0.8078); } else { me["ELEC-Yellow-label"].setColor(0.7333,0.3803,0); } - if (y_fire_valve.getValue() == 1) { + if (systems.HYD.Valve.yellowFire.getValue() != 0) { me["Fire-Valve-Yellow"].setColor(0.7333,0.3803,0); me["Fire-Valve-Yellow"].setRotation(90 * D2R); } else { @@ -2685,7 +2674,7 @@ var canvas_lowerECAM_hyd = { me["Fire-Valve-Yellow"].setRotation(0); } - if (g_fire_valve.getValue() == 1) { + if (systems.HYD.Valve.greenFire.getValue() != 0) { me["Fire-Valve-Green"].setColor(0.7333,0.3803,0); me["Fire-Valve-Green"].setRotation(90 * D2R); } else { @@ -2711,9 +2700,9 @@ var canvas_lowerECAM_wheel = { "braketemp2","braketemp3","braketemp4","leftuplock","noseuplock","rightuplock","Triangle-Left1","Triangle-Left2","Triangle-Nose1","Triangle-Nose2","Triangle-Right1","Triangle-Right2","BSCUrect1","BSCUrect2","BSCU1","BSCU2"]; }, update: func() { - blue_psi = b_psi.getValue(); - green_psi = g_psi.getValue(); - yellow_psi = y_psi.getValue(); + blue_psi = systems.HYD.Psi.blue.getValue(); + green_psi = systems.HYD.Psi.green.getValue(); + yellow_psi = systems.HYD.Psi.yellow.getValue(); autobrakemode = autobreak_mode.getValue(); nosegear = gear1_pos.getValue(); leftgear = gear2_pos.getValue(); @@ -2722,9 +2711,9 @@ var canvas_lowerECAM_wheel = { rightdoor = gear_door_R.getValue(); nosedoor = gear_door_N.getValue(); gearlvr = gear_down.getValue(); - askidsw = askid.getValue(); - brakemode = brk_mode.getValue(); - accum = accu_press.getValue(); + askidsw = systems.HYD.Brakes.askidSw.getBoolValue(); + brakemode = systems.HYD.Brakes.mode.getBoolValue(); + accum = systems.HYD.Brakes.accumPressPsi.getBoolValue(); # L/G CTL if ((leftgear == 0 or nosegear == 0 or rightgear == 0 and gearlvr == 0) or (leftgear == 1 or nosegear == 1 or rightgear == 1 and gearlvr == 1)) { diff --git a/Nasal/hydraulics.nas b/Nasal/hydraulics.nas index 71b1f547..864acc43 100644 --- a/Nasal/hydraulics.nas +++ b/Nasal/hydraulics.nas @@ -3,8 +3,24 @@ # Copyright (c) 2019 Jonathan Redpath +var accum = 0; +var parking = 0; +var askidnws_sw = 0; +var down = 0; var HYD = { + Brakes: { + accumPressPsi: props.globals.initNode("/systems/hydraulic/brakes/accumulator-pressure-psi", 0, "INT"), + accumPressPsi1: props.globals.initNode("/systems/hydraulic/brakes/accumulator-pressure-psi-1", 0, "INT"), + leftPressPsi: props.globals.initNode("/systems/hydraulic/brakes/pressure-left-psi", 0, "INT"), + 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"), + 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"), blueLeak: props.globals.getNode("/systems/failures/hydraulic/blue-leak"), @@ -16,12 +32,22 @@ var HYD = { yellowLeak: props.globals.getNode("/systems/failures/hydraulic/yellow-leak"), }, Psi: { + blue: props.globals.getNode("/systems/hydraulic/blue-psi"), + green: props.globals.getNode("/systems/hydraulic/green-psi"), + yellow: props.globals.getNode("/systems/hydraulic/yellow-psi"), + }, + Ptu: { + active: props.globals.getNode("/systems/hydraulic/sources/ptu/ptu-active"), + diff: props.globals.getNode("/systems/hydraulic/yellow-psi-diff"), }, Qty: { blueInput: props.globals.initNode("/systems/hydraulic/blue-qty-input", 0, "INT"), greenInput: props.globals.initNode("/systems/hydraulic/green-qty-input", 0, "INT"), yellowInput: props.globals.initNode("/systems/hydraulic/yellow-qty-input", 0, "INT"), }, + Rat: { + position: props.globals.getNode("/systems/hydraulic/sources/rat/position"), + }, Switch: { blueElec: props.globals.getNode("/controls/hydraulic/switches/blue-elec"), blueElecOvrd: props.globals.getNode("/controls/hydraulic/switches/blue-elec-ovrd"), @@ -31,6 +57,10 @@ var HYD = { yellowEDP: props.globals.getNode("/controls/hydraulic/switches/yellow-edp"), yellowElec: props.globals.getNode("/controls/hydraulic/switches/yellow-elec"), }, + Valve: { + yellowFire: props.globals.getNode("/systems/hydraulics/sources/yellow-edp/fire-valve"), + greenFire: props.globals.getNode("/systems/hydraulics/sources/green-edp/fire-valve"), + }, init: func() { me.resetFail(); me.Qty.blueInput.setValue(math.round((rand() * 4) + 8 , 0.1)); # Random between 8 and 12 @@ -55,6 +85,24 @@ var HYD = { me.Fail.yellowLeak.setBoolValue(0); }, loop: func() { + accum = me.Brakes.accumPressPsi.getValue(); + parking = getprop("/controls/gear/brake-parking"); + askidnws_sw = me.Brakes.askidSw.getBoolValue(); + + if (!parking and askidnws_sw and me.Psi.green.getValue() > 2500) { + # set mode to on + me.Brakes.mode.setValue(1); + } else if ((!parking and askidnws_sw and me.Psi.yellow.getValue() > 2500) or (!parking and askidnws_sw and accum > 0)) { + # set mode to altn + me.Brakes.mode.setValue(2); + } else { + # set mode to off + me.Brakes.mode.setValue(0); + } + + if (me.Brakes.mode.getValue() == 2 and me.Psi.yellow.getValue() > 2500 and accum < 700) { + me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() + 50); + } }, }; diff --git a/Systems/a320-electrical.xml b/Systems/a320-electrical.xml index d9869776..9d028cf9 100644 --- a/Systems/a320-electrical.xml +++ b/Systems/a320-electrical.xml @@ -1096,8 +1096,10 @@ <test logic="AND" value="1"> /systems/electrical/bus/ac-1 lt 110 /systems/electrical/bus/ac-2 lt 110 + /systems/acconfig/autoconfig-running ne 1 </test> <test logic="AND" value="1"> + /systems/acconfig/autoconfig-running ne 1 /systems/electrical/relay/ext-epc/contact-pos eq 0 <test logic="OR"> /controls/electrical/switches/gen-1 eq 0 diff --git a/Systems/a320-hydraulic.xml b/Systems/a320-hydraulic.xml index 51ea5ac5..001a3bf3 100644 --- a/Systems/a320-hydraulic.xml +++ b/Systems/a320-hydraulic.xml @@ -101,13 +101,20 @@ <fcs_function name="/systems/hydraulic/sources/rat/source-psi"> <function> - <table> - <independentVar lookup="row">/instrumentation/airspeed-indicator/indicated-speed-kt</independentVar> - <tableData> - 99 0 - 100 2500 - </tableData> - </table> + <ifthen> + <eq> + <property>/systems/hydraulic/sources/rat/position</property> + <value>1</value> + </eq> + <table> + <independentVar lookup="row">/instrumentation/airspeed-indicator/indicated-speed-kt</independentVar> + <tableData> + 99 0 + 100 2500 + </tableData> + </table> + <value>0</value> + </ifthen> </function> </fcs_function> @@ -207,10 +214,16 @@ </function> </fcs_function> + <actuator name="/systems/hydraulic/sources/green-edp/fire-valve"> + <input>/controls/engines/engine[0]/fire-btn</input> + <rate_limit>0.25</rate_limit> <!-- 4 seconds --> + </actuator> + <switch name="/systems/hydraulic/sources/green-edp/output-psi"> <default value="0"/> <test value="/systems/hydraulic/sources/green-edp/source-psi"> /controls/hydraulic/switches/green-edp eq 1 + /systems/hydraulic/sources/green-edp/fire-valve lt 0.10 </test> </switch> @@ -272,10 +285,16 @@ </function> </fcs_function> + <actuator name="/systems/hydraulic/sources/yellow-edp/fire-valve"> + <input>/controls/engines/engine[1]/fire-btn</input> + <rate_limit>0.25</rate_limit> <!-- 4 seconds --> + </actuator> + <switch name="/systems/hydraulic/sources/yellow-edp/output-psi"> <default value="0"/> <test value="/systems/hydraulic/sources/yellow-edp/source-psi"> /controls/hydraulic/switches/yellow-edp eq 1 + /systems/hydraulic/sources/yellow-edp/fire-valve lt 0.10 </test> </switch> @@ -338,6 +357,11 @@ <rate_limit sense="decr">/systems/hydraulic/sys-decr-rate</rate_limit> </actuator> + <pure_gain name="/systems/hydraulic/green-psi-ptu"> + <input>/systems/hydraulic/green-psi</input> + <gain>0.9</gain> + </pure_gain> + <!-- Yellow PSI --> <fcs_function name="/systems/hydraulic/yellow-psi-cmd-pump"> <function> @@ -377,6 +401,11 @@ <rate_limit sense="decr">/systems/hydraulic/sys-decr-rate</rate_limit> </actuator> + <pure_gain name="/systems/hydraulic/yellow-psi-ptu"> + <input>/systems/hydraulic/yellow-psi</input> + <gain>0.9</gain> + </pure_gain> + <!-- PTU --> <fcs_function name="/systems/hydraulic/yellow-psi-diff"> <function> @@ -388,30 +417,46 @@ </fcs_function> <switch name="/systems/hydraulic/sources/ptu/ptu-active"> - <default value="0"/> - <test logic="OR" value="1"> - /systems/hydraulic/yellow-psi-diff gt 500 - /systems/hydraulic/yellow-psi-diff lt -500 + <test logic="AND" value="0"> + /systems/hydraulic/yellow-psi-diff gt -250 + /systems/hydraulic/yellow-psi-diff lt 250 + /systems/hydraulic/sources/ptu/ptu-active eq 1 + </test> + <test logic="AND" value="1"> + <test logic="OR"> + /systems/hydraulic/yellow-psi-diff ge 250 + /systems/hydraulic/yellow-psi-diff le -250 + </test> + /systems/hydraulic/sources/ptu/ptu-active eq 1 + </test> + <test logic="AND" value="1"> + <test logic="OR"> + /systems/hydraulic/yellow-psi-diff gt 500 + /systems/hydraulic/yellow-psi-diff lt -500 + </test> + /systems/hydraulic/sources/ptu/ptu-active eq 0 </test> </switch> <switch name="/systems/hydraulic/sources/ptu/green-yellow"> <default value="0"/> - <test logic="AND" value="/systems/hydraulic/green-psi"> + <test logic="AND" value="/systems/hydraulic/green-psi-ptu"> /controls/hydraulic/switches/ptu eq 1 /systems/hydraulic/sources/ptu/ptu-active eq 1 /systems/electrical/bus/dc-2 ge 25 /systems/failures/hydraulic/ptu ne 1 + /systems/hydraulic/sources/yellow-edp/fire-valve lt 0.10 </test> </switch> <switch name="/systems/hydraulic/sources/ptu/yellow-green"> <default value="0"/> - <test logic="AND" value="/systems/hydraulic/yellow-psi"> + <test logic="AND" value="/systems/hydraulic/yellow-psi-ptu"> /controls/hydraulic/switches/ptu eq 1 /systems/hydraulic/sources/ptu/ptu-active eq 1 /systems/electrical/bus/dc-2 ge 25 /systems/failures/hydraulic/ptu ne 1 + /systems/hydraulic/sources/green-edp/fire-valve lt 0.10 </test> </switch>