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/PitotIcing.nas

80 lines
2.6 KiB
Text

#############################################################################
# This file is part of FlightGear, the free flight simulator
# http://www.flightgear.org/
#
# Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#############################################################################
#########################################################################################
# Fail the airspeed indicator due to icing of the pitot tube
# Maintainer: Torsten Dreyer (Torsten at t3r dot de)
#
# inputs
# /instrumentation/airspeed-indicator[n]/icing
#
# outputs
# /instrumentation/airspeed-indicator/serviceable
# /instrumentation/airspeed-indicator/indicated-speed-kt
#########################################################################################
var PitotIcingHandler = {};
PitotIcingHandler.new = func {
var m = {};
m.parents = [PitotIcingHandler];
m.failAtIcelevel = arg[1];
m.baseNodeName = "/systems/pitot[" ~ arg[0] ~ "]";
print( "creating PitotIcingHandler for " ~ m.baseNodeName );
m.baseN = props.globals.getNode( m.baseNodeName );
m.icingN = m.baseN.initNode( "icing", 0.0 );
m.serviceableN = m.baseN.initNode( "serviceable", 1, "BOOL" );
setlistener( m.icingN, func { m.listener() } );
return m;
};
#########################################################################################
# The handler. Check if ice is above threshold, then fail the device
#########################################################################################
PitotIcingHandler.listener = func {
if( me.icingN.getValue() < me.failAtIcelevel ) {
# everything is fine
if( me.serviceableN.getBoolValue() == 0 ) {
# if the inidcator failed before, re-enable it
print( me.baseNodeName ~ " is functional again" );
me.serviceableN.setBoolValue( 1 );
}
} else {
# pitot is iced
if( me.serviceableN.getBoolValue() != 0 ) {
# if the indicator was servicable before, fail it now
print( me.baseNodeName ~ " is failing" );
me.serviceableN.setBoolValue( 0 );
}
}
};
# Fail pitot at 0.03" of ice
PitotIcingHandler.new( 0, 0.03 );