bool FGSensor::Run(void ) { Input = InputNodes[0]->getDoubleValue() * InputSigns[0]; Output = Input; // perfect sensor // Degrade signal as specified if (fail_stuck) { Output = PreviousOutput; return true; } if (lag != 0.0) Lag(); // models sensor lag and filter if (noise_variance != 0.0) Noise(); // models noise if (drift_rate != 0.0) Drift(); // models drift over time if (bias != 0.0) Bias(); // models a finite bias if (delay != 0.0) Delay(); // models system signal transport latencies if (fail_low) Output = -HUGE_VAL; if (fail_high) Output = HUGE_VAL; if (bits != 0) Quantize(); // models quantization degradation Clip(); // Is it right to clip a sensor? return true; }
void FGSensor::ProcessSensorSignal(void) { Output = Input; // perfect sensor // Degrade signal as specified if (fail_stuck) { Output = PreviousOutput; } else { if (lag != 0.0) Lag(); // models sensor lag and filter if (noise_variance != 0.0) Noise(); // models noise if (drift_rate != 0.0) Drift(); // models drift over time if (gain != 0.0) Gain(); // models a finite gain if (bias != 0.0) Bias(); // models a finite bias if (delay != 0) Delay(); // models system signal transport latencies if (fail_low) Output = -HUGE_VAL; if (fail_high) Output = HUGE_VAL; if (bits != 0) Quantize(); // models quantization degradation Clip(); } }
// --------------------------------------------------------- // RFavouritesBuf::DoSynchL() // --------------------------------------------------------- // void RFavouritesBuf::DoSynchL() { if ( Lag( ERead ) ) { // Read lag unexpected, we do not support seeking. User::Leave( KErrNotSupported ); } IpcWriteL(); // Flush write lag. SetBuf( ERead | EWrite, iBuf.iData, iBuf.iData ); }
bool FGActuator::Run(void ) { Input = InputNodes[0]->getDoubleValue() * InputSigns[0]; if( fcs->GetTrimStatus() ) initialized = 0; if (fail_zero) Input = 0; if (fail_hardover) Input = clipmax*sign(Input); Output = Input; // Perfect actuator. At this point, if no failures are present // and no subsequent lag, limiting, etc. is done, the output // is simply the input. If any further processing is done // (below) such as lag, rate limiting, hysteresis, etc., then // the Input will be further processed and the eventual Output // will be overwritten from this perfect value. if (fail_stuck) { Output = PreviousOutput; } else { if (lag != 0.0) Lag(); // models actuator lag if (rate_limit_incr != 0 || rate_limit_decr != 0) RateLimit(); // limit the actuator rate if (deadband_width != 0.0) Deadband(); if (hysteresis_width != 0.0) Hysteresis(); if (bias != 0.0) Bias(); // models a finite bias if (delay != 0) Delay(); // Model transport latency } PreviousOutput = Output; // previous value needed for "stuck" malfunction initialized = 1; Clip(); if (clip) { saturated = false; if (Output >= clipmax && clipmax != 0) saturated = true; else if (Output <= clipmin && clipmin != 0) saturated = true; } if (IsOutput) SetOutput(); return true; }