static port can be side-slip/alpha dependant, to add a part of total
pressure on the reported static pressure.
This commit is contained in:
parent
2c4ac08895
commit
8770e61d1b
2 changed files with 50 additions and 6 deletions
|
@ -1,6 +1,7 @@
|
|||
// static.cxx - the static air system.
|
||||
// Written by David Megginson, started 2002.
|
||||
//
|
||||
// Last modified by Eric van den Berg, 09 Nov 2013
|
||||
// This file is in the Public Domain and comes with no warranty.
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
@ -13,14 +14,17 @@
|
|||
|
||||
#include <Main/fg_props.hxx>
|
||||
#include <Main/util.hxx>
|
||||
#include <simgear/constants.h>
|
||||
#include <simgear/sg_inlines.h>
|
||||
|
||||
|
||||
StaticSystem::StaticSystem ( SGPropertyNode *node )
|
||||
:
|
||||
_name(node->getStringValue("name", "static")),
|
||||
_num(node->getIntValue("number", 0)),
|
||||
_tau(node->getDoubleValue("tau", 1))
|
||||
|
||||
_tau(node->getDoubleValue("tau", 1)),
|
||||
_error_factor(node->getDoubleValue("error-factor", 0)),
|
||||
_type(node->getIntValue("type", 0))
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -37,6 +41,10 @@ StaticSystem::init ()
|
|||
_serviceable_node = node->getChild("serviceable", 0, true);
|
||||
_pressure_in_node = fgGetNode("/environment/pressure-inhg", true);
|
||||
_pressure_out_node = node->getChild("pressure-inhg", 0, true);
|
||||
_beta_node = fgGetNode("/orientation/side-slip-deg", true);
|
||||
_alpha_node = fgGetNode("/orientation/alpha-deg", true);
|
||||
_mach_node = fgGetNode("/velocities/mach", true);
|
||||
SG_CLAMP_RANGE(_error_factor,0.0,1.0); // making sure the error_factor is between 0 and 1
|
||||
|
||||
reinit();
|
||||
}
|
||||
|
@ -62,10 +70,38 @@ void
|
|||
StaticSystem::update (double dt)
|
||||
{
|
||||
if (_serviceable_node->getBoolValue()) {
|
||||
double p_new = _pressure_in_node->getDoubleValue(); //current static pressure around aircraft
|
||||
double p = _pressure_out_node->getDoubleValue(); //last pressure in aircraft static system
|
||||
|
||||
double beta;
|
||||
double alpha;
|
||||
double mach;
|
||||
double trat = _tau ? dt/_tau : 100;
|
||||
double target = _pressure_in_node->getDoubleValue();
|
||||
double current = _pressure_out_node->getDoubleValue();
|
||||
_pressure_out_node->setDoubleValue(fgGetLowPass(current, target, trat));
|
||||
|
||||
double proj_factor = 0;
|
||||
double pt;
|
||||
double qc_part;
|
||||
|
||||
if (_type == 1) { // type 1 = static pressure dependent on side-slip only: static port on the fuselage
|
||||
beta = _beta_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
|
||||
proj_factor = sin(beta);
|
||||
}
|
||||
|
||||
if (_type == 2) { // type 2 = static pressure dependent on aoa and side-slip: static port on the pitot tube
|
||||
alpha = _alpha_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
|
||||
beta = _beta_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
|
||||
proj_factor = sqrt( 1.0 - cos(beta)*cos(beta) * cos(alpha)*cos(alpha) );
|
||||
}
|
||||
|
||||
if ( (_type ==1) or (_type == 2) ) {
|
||||
mach = _mach_node->getDoubleValue();
|
||||
pt = p_new * pow(1 + 0.2 * mach*mach*proj_factor*proj_factor, 3.5 ); //total pressure perpendicular to static port (=perpendicular to body x-axis)
|
||||
qc_part = (pt - p_new) * _error_factor ; //part of impact pressure to be added to static pressure (due to sideslip)
|
||||
p_new = p_new + qc_part;
|
||||
}
|
||||
|
||||
_pressure_out_node->setDoubleValue(fgGetLowPass(p, p_new, trat)); //setting new pressure in static system
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// static.hxx - the static air system.
|
||||
// Written by David Megginson, started 2002.
|
||||
//
|
||||
// Last modified by Eric van den Berg, 09 November 2013
|
||||
// This file is in the Public Domain and comes with no warranty.
|
||||
|
||||
|
||||
|
@ -22,12 +23,14 @@
|
|||
*
|
||||
* /environment/pressure-inhg
|
||||
* /systems/"name"/serviceable
|
||||
* /orientation/alpha-deg
|
||||
* /orientation/side-slip-rad
|
||||
* /velocities/mach
|
||||
*
|
||||
* Output properties:
|
||||
*
|
||||
* /systems/"name"/pressure-inhg
|
||||
*
|
||||
* TODO: support specific locations
|
||||
* TODO: support alternate air with errors
|
||||
*/
|
||||
class StaticSystem : public SGSubsystem
|
||||
|
@ -50,9 +53,14 @@ private:
|
|||
std::string _name;
|
||||
int _num;
|
||||
double _tau;
|
||||
double _error_factor;
|
||||
int _type;
|
||||
SGPropertyNode_ptr _serviceable_node;
|
||||
SGPropertyNode_ptr _pressure_in_node;
|
||||
SGPropertyNode_ptr _pressure_out_node;
|
||||
SGPropertyNode_ptr _beta_node;
|
||||
SGPropertyNode_ptr _alpha_node;
|
||||
SGPropertyNode_ptr _mach_node;
|
||||
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue