示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
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;
}
示例#6
0
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;
}
示例#7
0
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;
}
示例#8
0
//------------------------------------------------------------------------------
// 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;
}