This repository has been archived on 2021-09-26. You can view files and clone it, but cannot push or open issues or pull requests.
IDG-A32X/Nasal/fuel.nas

216 lines
7.5 KiB
Text
Raw Normal View History

# A3XX Fuel System
# Joshua Davidson (it0uchpods)
2017-11-16 19:29:08 +00:00
##############################################
# Copyright (c) Joshua Davidson (it0uchpods) #
##############################################
#############
# Init Vars #
#############
setlistener("/sim/signals/fdm-initialized", func {
var xfeed_sw = getprop("/controls/fuel/x-feed");
2017-09-23 01:56:44 +00:00
var tank0pump1_sw = getprop("/controls/fuel/tank0pump1");
var tank0pump2_sw = getprop("/controls/fuel/tank0pump2");
var tank1pump1_sw = getprop("/controls/fuel/tank1pump1");
var tank1pump2_sw = getprop("/controls/fuel/tank1pump2");
var tank2pump1_sw = getprop("/controls/fuel/tank2pump1");
var tank2pump2_sw = getprop("/controls/fuel/tank2pump2");
var mode_sw = getprop("/controls/fuel/mode");
var xfeed = getprop("/systems/fuel/x-feed");
var ac1 = getprop("/systems/electrical/bus/ac1");
var ac2 = getprop("/systems/electrical/bus/ac2");
var gravityfeedL = getprop("/systems/fuel/gravityfeedL");
var gravityfeedR = getprop("/systems/fuel/gravityfeedR");
var gload = getprop("/accelerations/pilot-gdamped");
var gravityfeedL_output = getprop("/systems/fuel/gravityfeedL-output");
var gravityfeedR_output = getprop("/systems/fuel/gravityfeedR-output");
2017-09-23 03:53:01 +00:00
var tank0 = getprop("/systems/fuel/tank[0]/feed");
var tank1 = getprop("/systems/fuel/tank[1]/feed");
var tank2 = getprop("/systems/fuel/tank[2]/feed");
var gravityfeedL = getprop("/systems/fuel/gravityfeedL");
var gravityfeedR = getprop("/systems/fuel/gravityfeedR");
2017-09-23 01:56:44 +00:00
var tank0pump1_fail = getprop("/systems/failures/tank0pump1");
var tank0pump2_fail = getprop("/systems/failures/tank0pump2");
var tank1pump1_fail = getprop("/systems/failures/tank1pump1");
var tank1pump2_fail = getprop("/systems/failures/tank1pump2");
2017-07-25 16:21:41 +00:00
var tank2pump1_fail = getprop("/systems/failures/tank2pump1");
var tank2pump2_fail = getprop("/systems/failures/tank2pump2");
});
var fuel_init = func {
2017-06-12 18:41:52 +00:00
setprop("/systems/fuel/gravityfeedL", 0);
setprop("/systems/fuel/gravityfeedR", 0);
setprop("/systems/fuel/gravityfeedL-output", 0);
setprop("/systems/fuel/gravityfeedR-output", 0);
setprop("/controls/fuel/x-feed", 0);
2017-09-23 01:56:44 +00:00
setprop("/controls/fuel/tank0pump1", 0);
setprop("/controls/fuel/tank0pump2", 0);
setprop("/controls/fuel/tank1pump1", 0);
setprop("/controls/fuel/tank1pump2", 0);
setprop("/controls/fuel/tank2pump1", 0);
setprop("/controls/fuel/tank2pump2", 0);
setprop("/controls/fuel/mode", 1);
setprop("/systems/fuel/x-feed", 0);
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[0]/feed", 0);
setprop("/systems/fuel/tank[1]/feed", 0);
setprop("/systems/fuel/tank[2]/feed", 0);
setprop("/systems/fuel/only-use-ctr-tank", 0);
2017-09-23 01:56:44 +00:00
setprop("/systems/fuel/tank0pump1-fault", 0);
setprop("/systems/fuel/tank0pump2-fault", 0);
setprop("/systems/fuel/tank1pump1-fault", 0);
setprop("/systems/fuel/tank1pump2-fault", 0);
2017-07-25 16:21:41 +00:00
setprop("/systems/fuel/tank2pump1-fault", 0);
setprop("/systems/fuel/tank2pump2-fault", 0);
setprop("/systems/fuel/mode-fault", 0);
fuel_timer.start();
}
##############
# Main Loops #
##############
var master_fuel = func {
xfeed_sw = getprop("/controls/fuel/x-feed");
2017-09-23 01:56:44 +00:00
tank0pump1_sw = getprop("/controls/fuel/tank0pump1");
tank0pump2_sw = getprop("/controls/fuel/tank0pump2");
tank1pump1_sw = getprop("/controls/fuel/tank1pump1");
tank1pump2_sw = getprop("/controls/fuel/tank1pump2");
tank2pump1_sw = getprop("/controls/fuel/tank2pump1");
tank2pump2_sw = getprop("/controls/fuel/tank2pump2");
mode_sw = getprop("/controls/fuel/mode");
xfeed = getprop("/systems/fuel/x-feed");
ac1 = getprop("/systems/electrical/bus/ac1");
ac2 = getprop("/systems/electrical/bus/ac2");
gravityfeedL = getprop("/systems/fuel/gravityfeedL");
gravityfeedR = getprop("/systems/fuel/gravityfeedR");
gload = getprop("/accelerations/pilot-gdamped");
2017-09-23 01:56:44 +00:00
tank0pump1_fail = getprop("/systems/failures/tank0pump1");
tank0pump2_fail = getprop("/systems/failures/tank0pump2");
tank1pump1_fail = getprop("/systems/failures/tank1pump1");
tank1pump2_fail = getprop("/systems/failures/tank1pump2");
2017-07-25 16:21:41 +00:00
tank2pump1_fail = getprop("/systems/failures/tank2pump1");
tank2pump2_fail = getprop("/systems/failures/tank2pump2");
2017-06-12 18:41:52 +00:00
if (gload >= 0.7 and gravityfeedL) {
setprop("/systems/fuel/gravityfeedL-output", 1);
} else {
setprop("/systems/fuel/gravityfeedL-output", 0);
}
if (gload >= 0.7 and gravityfeedR) {
setprop("/systems/fuel/gravityfeedR-output", 1);
} else {
setprop("/systems/fuel/gravityfeedR-output", 0);
}
gravityfeedL_output = getprop("/systems/fuel/gravityfeedL-output");
gravityfeedR_output = getprop("/systems/fuel/gravityfeedR-output");
2017-09-23 01:56:44 +00:00
if ((ac1 >= 110 or ac2 >= 110) and tank0pump1_sw and !tank0pump1_fail) {
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[0]/feed", 1);
} else if ((ac1 >= 110 or ac2 >= 110) and tank0pump2_sw and !tank0pump2_fail) {
setprop("/systems/fuel/tank[0]/feed", 1);
2017-06-12 18:41:52 +00:00
} else if (gravityfeedL_output) {
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[0]/feed", 1);
} else {
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[0]/feed", 0);
}
2017-09-23 01:56:44 +00:00
if ((ac1 >= 110 or ac2 >= 110) and tank1pump1_sw and !tank1pump1_fail) {
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[1]/feed", 1);
} else if ((ac1 >= 110 or ac2 >= 110) and tank1pump2_sw and !tank1pump2_fail) {
setprop("/systems/fuel/tank[1]/feed", 1);
} else {
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[1]/feed", 0);
}
2017-09-23 01:56:44 +00:00
if ((ac1 >= 110 or ac2 >= 110) and tank2pump1_sw and !tank2pump1_fail) {
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[2]/feed", 1);
} else if ((ac1 >= 110 or ac2 >= 110) and tank2pump2_sw and !tank2pump2_fail) {
setprop("/systems/fuel/tank[2]/feed", 1);
2017-06-12 18:41:52 +00:00
} else if (gravityfeedR_output) {
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[2]/feed", 1);
} else {
2017-09-23 03:53:01 +00:00
setprop("/systems/fuel/tank[2]/feed", 0);
}
if ((ac1 >= 110 or ac2 >= 110) and xfeed_sw) {
setprop("/systems/fuel/x-feed", 1);
} else {
setprop("/systems/fuel/x-feed", 0);
}
2017-09-23 03:53:01 +00:00
tank0 = getprop("/systems/fuel/tank[0]/feed");
tank1 = getprop("/systems/fuel/tank[1]/feed");
tank2 = getprop("/systems/fuel/tank[2]/feed");
2017-09-30 17:41:51 +00:00
if ((ac1 >= 110 or ac2 >= 110) and (tank0pump1_sw or tank0pump2_sw)) {
2017-06-12 18:41:52 +00:00
setprop("/systems/fuel/gravityfeedL", 0);
} else {
setprop("/systems/fuel/gravityfeedL", 1);
}
2017-09-30 17:41:51 +00:00
if ((ac1 >= 110 or ac2 >= 110) and (tank2pump1_sw or tank2pump2_sw)) {
2017-06-12 18:41:52 +00:00
setprop("/systems/fuel/gravityfeedR", 0);
} else {
setprop("/systems/fuel/gravityfeedR", 1);
}
gravityfeedL = getprop("/systems/fuel/gravityfeedL");
gravityfeedR = getprop("/systems/fuel/gravityfeedR");
2017-06-12 18:41:52 +00:00
2017-09-30 17:41:51 +00:00
if ((getprop("/fdm/jsbsim/propulsion/tank[1]/contents-lbs") >= 50) and (tank1pump1_sw or tank1pump2_sw) and !gravityfeedL and !gravityfeedR) {
setprop("/systems/fuel/only-use-ctr-tank", 1);
} else {
setprop("/systems/fuel/only-use-ctr-tank", 0);
}
2017-07-25 16:21:41 +00:00
# Fault lights
2017-09-23 01:56:44 +00:00
if (tank0pump1_sw and tank0pump1_fail) {
setprop("/systems/fuel/tank0pump1-fault", 1);
2017-07-25 16:21:41 +00:00
} else {
2017-09-23 01:56:44 +00:00
setprop("/systems/fuel/tank0pump1-fault", 0);
2017-07-25 16:21:41 +00:00
}
2017-09-23 01:56:44 +00:00
if (tank0pump2_sw and tank0pump2_fail) {
setprop("/systems/fuel/tank0pump2-fault", 1);
2017-07-25 16:21:41 +00:00
} else {
2017-09-23 01:56:44 +00:00
setprop("/systems/fuel/tank0pump2-fault", 0);
2017-07-25 16:21:41 +00:00
}
2017-09-23 01:56:44 +00:00
if (tank1pump1_sw and tank1pump1_fail) {
setprop("/systems/fuel/tank1pump1-fault", 1);
2017-07-25 16:21:41 +00:00
} else {
2017-09-23 01:56:44 +00:00
setprop("/systems/fuel/tank1pump1-fault", 0);
2017-07-25 16:21:41 +00:00
}
2017-09-23 01:56:44 +00:00
if (tank1pump2_sw and tank1pump2_fail) {
setprop("/systems/fuel/tank1pump2-fault", 1);
2017-07-25 16:21:41 +00:00
} else {
2017-09-23 01:56:44 +00:00
setprop("/systems/fuel/tank1pump2-fault", 0);
2017-07-25 16:21:41 +00:00
}
2017-09-23 01:56:44 +00:00
if (tank2pump1_sw and tank2pump1_fail) {
setprop("/systems/fuel/tank2pump1-fault", 1);
2017-07-25 16:21:41 +00:00
} else {
2017-09-23 01:56:44 +00:00
setprop("/systems/fuel/tank2pump1-fault", 0);
2017-07-25 16:21:41 +00:00
}
2017-09-23 01:56:44 +00:00
if (tank2pump2_sw and tank2pump2_fail) {
setprop("/systems/fuel/tank2pump2-fault", 1);
2017-07-25 16:21:41 +00:00
} else {
2017-09-23 01:56:44 +00:00
setprop("/systems/fuel/tank2pump2-fault", 0);
2017-07-25 16:21:41 +00:00
}
}
###################
# Update Function #
###################
var update_fuel = func {
master_fuel();
}
var fuel_timer = maketimer(0.2, update_fuel);