int JSBSimModel::getEngPLA(LCreal* const pla, const int max) const { if (fdmex == 0) return 0; JSBSim::FGPropulsion* Propulsion = fdmex->GetPropulsion(); if (Propulsion == 0) return 0; JSBSim::FGFCS* FCS = fdmex->GetFCS(); if (FCS == 0) return 0; // return throttle PLA (percent) if (pla == 0 || max <= 0) { return 0; } int num = getNumberOfEngines(); if (max < num) { num = max; } for (int i = 0; i < num; i++) { JSBSim::FGEngine* eng = Propulsion->GetEngine(i); double t = FCS->GetThrottlePos(i); double tmin = eng->GetThrottleMin(); double tmax = eng->GetThrottleMax(); double throttle = (t - tmin) / (tmax - tmin) * 100.0; pla[i] = (LCreal)throttle; } return num; }
int JSBSimModel::getEngRPM(LCreal* const rpm, const int max) const { if (fdmex == 0) return 0; JSBSim::FGPropulsion* Propulsion = fdmex->GetPropulsion(); if (Propulsion == 0) return 0; if (rpm == 0 || max <= 0) { return 0; } int num = getNumberOfEngines(); if (max < num) { num = max; } for (int i = 0; i < num; i++) { JSBSim::FGEngine* eng = Propulsion->GetEngine(i); switch (eng->GetType()) { case JSBSim::FGEngine::etPiston: { JSBSim::FGPiston* eng1 = (JSBSim::FGPiston *) eng; rpm[i] = (LCreal)eng1->getRPM(); } break; case JSBSim::FGEngine::etElectric: { JSBSim::FGElectric* eng1 = (JSBSim::FGElectric *) eng; rpm[i] = (LCreal)eng1->getRPM(); } break; case JSBSim::FGEngine::etTurbine: { JSBSim::FGTurbine* eng1 = (JSBSim::FGTurbine *) eng; rpm[i] = (LCreal)eng1->GetN2(); } break; case JSBSim::FGEngine::etTurboprop: { JSBSim::FGTurboProp* eng1 = (JSBSim::FGTurboProp *) eng; rpm[i] = (LCreal)eng1->GetN1(); } break; case JSBSim::FGEngine::etRocket: rpm[i] = 0.0; break; default: break; } } return num; }
int JSBSimModel::getEngOilPressure(LCreal* const oil, const int max) const { if (fdmex == 0) return 0; JSBSim::FGPropulsion* Propulsion = fdmex->GetPropulsion(); if (Propulsion == 0) return 0; // return Engine Oil Pressure if (oil == 0 || max <= 0) { return 0; } int num = getNumberOfEngines(); if (max < num) { num = max; } for (int i = 0; i < num; i++) { JSBSim::FGEngine* eng = Propulsion->GetEngine(i); switch (eng->GetType()) { case JSBSim::FGEngine::etPiston: { JSBSim::FGPiston* eng1 = (JSBSim::FGPiston *) eng; oil[i] = (LCreal)eng1->getOilPressure_psi(); } break; case JSBSim::FGEngine::etTurbine: { JSBSim::FGTurbine* eng1 = (JSBSim::FGTurbine *) eng; oil[i] = (LCreal)eng1->getOilPressure_psi(); } break; case JSBSim::FGEngine::etTurboprop: { JSBSim::FGTurboProp* eng1 = (JSBSim::FGTurboProp *) eng; oil[i] = (LCreal)eng1->getOilPressure_psi(); } break; case JSBSim::FGEngine::etRocket: case JSBSim::FGEngine::etElectric: oil[i] = 0.0; break; default: break; } } return num; }
int JSBSimModel::getEngThrust(LCreal* const fn, const int max) const { if (fdmex == 0) return 0; JSBSim::FGPropulsion* Propulsion = fdmex->GetPropulsion(); if (Propulsion == 0) return 0; if (fn == 0 || max <= 0) { return 0; } int num = getNumberOfEngines(); if (max < num) { num = max; } for (int i = 0; i < num; i++) { JSBSim::FGThruster* thruster = Propulsion->GetEngine(i)->GetThruster(); fn[i] = (LCreal)thruster->GetThrust(); } return num; }
int JSBSimModel::getEngThrust(double* const fn, const int max) const { if (fdmex == nullptr) return 0; JSBSim::FGPropulsion* Propulsion = fdmex->GetPropulsion(); if (Propulsion == nullptr) return 0; if (fn == nullptr || max <= 0) { return 0; } int num = getNumberOfEngines(); if (max < num) { num = max; } for (int i = 0; i < num; i++) { JSBSim::FGThruster* thruster = Propulsion->GetEngine(i)->GetThruster(); fn[i] = static_cast<double>(thruster->GetThrust()); } return num; }
int JSBSimModel::getEngFuelFlow(LCreal* const ff, const int max) const { if (fdmex == 0) return 0; JSBSim::FGPropulsion* Propulsion = fdmex->GetPropulsion(); if (Propulsion == 0) return 0; // Return fuel flow rate lbs/hour if (ff == 0 || max <= 0) { return 0; } int num = getNumberOfEngines(); if (max < num) { num = max; } for (int i = 0; i < num; i++) { JSBSim::FGEngine* eng = Propulsion->GetEngine(i); ff[i] = (LCreal)eng->getFuelFlow_pph(); } return num; }
int JSBSimModel::getEngNozzle(LCreal* const pla, const int max) const { if (fdmex == 0) return 0; JSBSim::FGPropulsion* Propulsion = fdmex->GetPropulsion(); if (Propulsion == 0) return 0; // return nozzle position (percentage) if (pla == 0 || max <= 0) { return 0; } int num = getNumberOfEngines(); if (max < num) { num = max; } for (int i = 0; i < num; i++) { JSBSim::FGEngine* eng = Propulsion->GetEngine(i); switch (eng->GetType()) { case JSBSim::FGEngine::etTurbine: { JSBSim::FGTurbine* eng1 = (JSBSim::FGTurbine *) eng; pla[i] = (LCreal)(eng1->GetNozzle() * 100.0); } break; case JSBSim::FGEngine::etTurboprop: { JSBSim::FGTurboProp* eng1 = (JSBSim::FGTurboProp *) eng; pla[i] = (LCreal)(eng1->GetNozzle() * 100.0); } break; case JSBSim::FGEngine::etPiston: case JSBSim::FGEngine::etRocket: case JSBSim::FGEngine::etElectric: pla[i] = 0.0; break; default: break; } } return num; }
//------------------------------------------------------------------------------ // int setThrottles(positions,num) -- Set throttle positions // // positions -> Array of throttle positions // (for each throttle) // < 0.0 -> Cutoff // 0.0 -> Idle // 1.0 -> MIL // 2.0 -> A/B // num -> number of throttle positions to get/set // returns the actual number of throttle positions //------------------------------------------------------------------------------ int JSBSimModel::setThrottles(const LCreal* const positions, const int num) { if (fdmex == 0) return 0; JSBSim::FGFCS* FCS = fdmex->GetFCS(); if (FCS == 0) return 0; if (positions == 0 || num <= 0) { return 0; } int n = getNumberOfEngines(); if (num < n) { n = num; } for (int i = 0; i < n; i++) { double pos = positions[i] * 0.5; // CGB * 100.0; if (pos > 1.0) { pos = 1.0; } FCS->SetThrottleCmd(i, pos); } return n; }