10efd065c4
"This patch allows all the AC using the kap140 to use one kap140.nas which includes Roy's move to "bool" values as well as the check for power used by the pa24-250." (dp)
128 lines
3.2 KiB
Text
128 lines
3.2 KiB
Text
# $Id$
|
|
#
|
|
# Nasal script to print errors to the screen when aircraft exceed design limits:
|
|
# - extending flaps above maximum flap extension speed(s)
|
|
# - extending gear above maximum gear extension speed
|
|
# - exceeding Vna
|
|
# - exceeding structural G limits
|
|
#
|
|
# To use, include this .nas file and define one or more of
|
|
# limits/max-flap-extension-speed/speed
|
|
# limits/max-flap-extension-speed/flaps
|
|
# limits/vne
|
|
# limits/max-gear-extension-speed
|
|
# limits/max-positive-g
|
|
# limits/max-negative-g (must be defined in max-positive-g defined)
|
|
#
|
|
# You can define multiple max-flap-extension-speed entries for max extension
|
|
# speeds for different flap settings.
|
|
|
|
checkFlaps = func {
|
|
airspeed = getprop("velocities/airspeed-kt");
|
|
flapsetting = cmdarg().getValue();
|
|
ltext = "";
|
|
|
|
limits = props.globals.getNode("limits");
|
|
|
|
if ((limits != nil) and (limits.getChildren("max-flap-extension-speed") != nil))
|
|
{
|
|
children = limits.getChildren("max-flap-extension-speed");
|
|
foreach(c; children)
|
|
{
|
|
if ((c.getChild("flaps") != nil) and
|
|
(c.getChild("speed") != nil) )
|
|
{
|
|
flaps = c.getChild("flaps").getValue();
|
|
speed = c.getChild("speed").getValue();
|
|
|
|
if ((flaps != nil) and
|
|
(speed != nil) and
|
|
(flapsetting > flaps) and
|
|
(airspeed > speed) )
|
|
{
|
|
ltext = "Flaps extended above maximum flap extension speed!";
|
|
}
|
|
}
|
|
}
|
|
|
|
if (ltext != "")
|
|
{
|
|
screen.log.write(ltext);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
checkGear = func {
|
|
airspeed = getprop("velocities/airspeed-kt");
|
|
max_gear = getprop("limits/max-gear-extension-speed");
|
|
|
|
if ((max_gear != nil) and (airspeed > max_gear))
|
|
{
|
|
screen.log.write("Gear extended above maximum extension speed!");
|
|
}
|
|
}
|
|
|
|
|
|
# Set the listeners
|
|
setlistener("controls/flight/flaps", checkFlaps);
|
|
setlistener("controls/gear/gear-down", checkGear);
|
|
|
|
# =============================== Pilot G stuff (taken from hurricane.nas) =================================
|
|
pilot_g = props.globals.getNode("fdm/jsbsim/accelerations/a-pilot-z-ft_sec2", 1);
|
|
pilot_g.setDoubleValue(0);
|
|
|
|
var g_damp = 0;
|
|
|
|
updatePilotG = func {
|
|
var g = pilot_g.getValue() ;
|
|
#if (g == nil) { g = 0; }
|
|
g_damp = ( g * 0.2) + (g_damp * 0.8);
|
|
|
|
settimer(updatePilotG, 0.2);
|
|
}
|
|
|
|
updatePilotG();
|
|
|
|
checkGandVNE = func {
|
|
max_positive = getprop("limits/max-positive-g");
|
|
max_negative = getprop("limits/max-negative-g");
|
|
msg = "";
|
|
|
|
# Convert the ft/sec^2 into Gs - allowing for gravity.
|
|
g = (- g_damp) / 32;
|
|
|
|
if ((max_positive != nil) and (g > max_positive))
|
|
{
|
|
msg = "Airframe structural positive-g load limit exceeded!";
|
|
}
|
|
|
|
if ((max_negative != nil) and (g < max_negative))
|
|
{
|
|
msg = "Airframe structural negative-g load limit exceeded!";
|
|
}
|
|
|
|
# Now check VNE
|
|
airspeed = getprop("velocities/airspeed-kt");
|
|
vne = getprop("limits/vne");
|
|
|
|
if ((airspeed != nil) and (vne != nil) and (airspeed > vne))
|
|
{
|
|
msg = "Airspeed exceeds Vne!";
|
|
}
|
|
|
|
if (msg != "")
|
|
{
|
|
# If we have a message, display it, but don't bother checking for
|
|
# any other errors for 10 seconds. Otherwise we're likely to get
|
|
# repeated messages.
|
|
screen.log.write(msg);
|
|
settimer(checkGandVNE, 10);
|
|
}
|
|
else
|
|
{
|
|
settimer(checkGandVNE, 1);
|
|
}
|
|
}
|
|
|
|
checkGandVNE();
|