80 lines
2.6 KiB
Text
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 );
|