⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fgturboprop.cpp

📁 6 DOF Missle Simulation
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  EngPower_HP *= EnginePowerVC->GetValue();  if (EngPower_HP > MaxPower) EngPower_HP = MaxPower;  eff_coef = 9.333 - (N1)/12; // 430%Fuel at 60%N1  FuelFlow_pph = PSFC * EngPower_HP * eff_coef;  Eng_Temperature = ExpSeek(&Eng_Temperature,Eng_ITT_degC,300,400);  double ITT_goal = ITT_N1->GetValue((N1-old_N1)*300+N1,1);  Eng_ITT_degC  = ExpSeek(&Eng_ITT_degC,ITT_goal,ITT_Delay,ITT_Delay*1.2);  OilPressure_psi = (N1/100.0*0.25+(0.1-(OilTemp_degK-273.15)*0.1/80.0)*N1/100.0) / 7692.0e-6; //from MPa to psi//---  EPR = 1.0 + thrust/MilThrust;  OilTemp_degK = Seek(&OilTemp_degK, 353.15, 0.4-N1*0.001, 0.04);  ConsumeFuel();  if (Cutoff) phase = tpOff;  if (Starved) phase = tpOff;  return EngPower_HP;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double FGTurboProp::SpinUp(void){  double EngPower_HP;  Running = false; EngStarting = true;  FuelFlow_pph = 0.0;  if (!GeneratorPower) {    EngStarting=false;    phase=tpOff;    StartTime = -1;    return 0.0;  }  N1 = ExpSeek(&N1, StarterN1, Idle_Max_Delay * 6, Idle_Max_Delay * 2.4);  Eng_Temperature = ExpSeek(&Eng_Temperature,TAT,300,400);  double ITT_goal = ITT_N1->GetValue(N1,0.1) + ((N1>20) ? 0.0 : (20-N1)/20.0 * Eng_Temperature);  Eng_ITT_degC  = ExpSeek(&Eng_ITT_degC,ITT_goal,ITT_Delay,ITT_Delay*1.2);  OilTemp_degK = ExpSeek(&OilTemp_degK,273.15 + TAT, 400 , 400);  OilPressure_psi = (N1/100.0*0.25+(0.1-(OilTemp_degK-273.15)*0.1/80.0)*N1/100.0) / 7692.0e-6; //from MPa to psi  NozzlePosition = 1.0;  EngPower_HP = EnginePowerRPM_N1->GetValue(Prop_RPM,N1);  EngPower_HP *= EnginePowerVC->GetValue();  if (EngPower_HP > MaxPower) EngPower_HP = MaxPower;  if (StartTime>=0) StartTime+=dt;  if (StartTime > MaxStartingTime && MaxStartingTime > 0) { //start failed due timeout    phase = tpOff;    StartTime = -1;  }  ConsumeFuel(); // for possible setting Starved = false when fuel tank                 // is refilled (fuel crossfeed etc.)  return EngPower_HP;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double FGTurboProp::Start(void){  double EngPower_HP,eff_coef;  EngStarting = false;  if ((N1 > 15.0) && !Starved) {       // minimum 15% N2 needed for start    double old_N1 = N1;    Cranking = true;                   // provided for sound effects signal    if (N1 < IdleN1) {      EngPower_HP = EnginePowerRPM_N1->GetValue(Prop_RPM,N1);      EngPower_HP *= EnginePowerVC->GetValue();      if (EngPower_HP > MaxPower) EngPower_HP = MaxPower;      N1 = ExpSeek(&N1, IdleN1*1.1, Idle_Max_Delay*4, Idle_Max_Delay * 2.4);      eff_coef = 9.333 - (N1)/12; // 430%Fuel at 60%N1      FuelFlow_pph = PSFC * EngPower_HP * eff_coef;      Eng_Temperature = ExpSeek(&Eng_Temperature,Eng_ITT_degC,300,400);      double ITT_goal = ITT_N1->GetValue((N1-old_N1)*300+N1,1);      Eng_ITT_degC  = ExpSeek(&Eng_ITT_degC,ITT_goal,ITT_Delay,ITT_Delay*1.2);      OilPressure_psi = (N1/100.0*0.25+(0.1-(OilTemp_degK-273.15)*0.1/80.0)*N1/100.0) / 7692.0e-6; //from MPa to psi      OilTemp_degK = Seek(&OilTemp_degK, 353.15, 0.4-N1*0.001, 0.04);    } else {      phase = tpRun;      Running = true;      Starter = false;      Cranking = false;      FuelFlow_pph = 0;      EngPower_HP=0.0;    }  } else {                 // no start if N2 < 15% or Starved    phase = tpOff;    Starter = false;  }  ConsumeFuel();  return EngPower_HP;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double FGTurboProp::CalcFuelNeed(void){  double dT = State->Getdt() * Propulsion->GetRate();  FuelFlowRate = FuelFlow_pph / 3600.0;  FuelExpended = FuelFlowRate * dT;  return FuelExpended;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double FGTurboProp::Seek(double *var, double target, double accel, double decel){  double v = *var;  if (v > target) {    v -= dt * decel;    if (v < target) v = target;  } else if (v < target) {    v += dt * accel;    if (v > target) v = target;  }  return v;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double FGTurboProp::ExpSeek(double *var, double target, double accel_tau, double decel_tau){// exponential delay instead of the linear delay used in Seek  double v = *var;  if (v > target) {    v = (v - target) * exp ( -dt / decel_tau) + target;  } else if (v < target) {    v = (target - v) * (1 - exp ( -dt / accel_tau)) + v;  }  return v;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%void FGTurboProp::SetDefaults(void){  Name = "Not defined";  N1 = N2 = 0.0;  Type = etTurboprop;  MilThrust = 10000.0;  IdleN1 = 30.0;  IdleN2 = 60.0;  MaxN1 = 100.0;  MaxN2 = 100.0;  ThrottleCmd = 0.0;  InletPosition = 1.0;  NozzlePosition = 1.0;  Reversed = false;  Cutoff = true;  phase = tpOff;  Stalled = false;  Seized = false;  Overtemp = false;  Fire = false;  Eng_ITT_degC = 0.0;  GeneratorPower=true;  Condition = 0;  Ielu_intervent=false;  Idle_Max_Delay = 1.0;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%string FGTurboProp::GetEngineLabels(string delimeter){  std::ostringstream buf;  buf << Name << "_N1[" << EngineNumber << "]" << delimeter      << Name << "_N2[" << EngineNumber << "]" << delimeter      << Name << "__PwrAvailJVK[" << EngineNumber << "]" << delimeter      << Thruster->GetThrusterLabels(EngineNumber, delimeter);  return buf.str();}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%string FGTurboProp::GetEngineValues(string delimeter){  std::ostringstream buf;  buf << N1 << delimeter      << N2 << delimeter      << Thruster->GetThrusterValues(EngineNumber,delimeter);  return buf.str();}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%int FGTurboProp::InitRunning(void) {  State->SuspendIntegration();  Cutoff=false;  Running=true;    N2=16.0;  Calculate();  State->ResumeIntegration();  return phase==tpRun;}void FGTurboProp::bindmodel(){  char property_name[80];// ToDo: Do a proper Tie here, this should be read only.  snprintf(property_name, 80, "propulsion/engine[%u]/n1", EngineNumber);  PropertyManager->Tie( property_name, &N1);  snprintf(property_name, 80, "propulsion/engine[%u]/n2", EngineNumber);  PropertyManager->Tie( property_name, &N2);  snprintf(property_name, 80, "propulsion/engine[%u]/reverser", EngineNumber);  PropertyManager->Tie( property_name, &Reversed);}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//    The bitmasked value choices are as follows://    unset: In this case (the default) JSBSim would only print//       out the normally expected messages, essentially echoing//       the config files as they are read. If the environment//       variable is not set, debug_lvl is set to 1 internally//    0: This requests JSBSim not to output any messages//       whatsoever.//    1: This value explicity requests the normal JSBSim//       startup messages//    2: This value asks for a message to be printed out when//       a class is instantiated//    4: When this value is set, a message is displayed when a//       FGModel object executes its Run() method//    8: When this value is set, various runtime state variables//       are printed out periodically//    16: When set various parameters are sanity checked and//       a message is printed out when they go out of boundsvoid FGTurboProp::Debug(int from){  if (debug_lvl <= 0) return;  if (debug_lvl & 1) { // Standard console startup message output    if (from == 0) { // Constructor    }    if (from == 2) { // called from Load()      cout << "\n ****MUJ MOTOR TURBOPROP****\n";      cout << "\n    Engine Name: "         << Name << endl;      cout << "      MilThrust:   "         << MilThrust << endl;      cout << "      IdleN1:      "         << IdleN1 << endl;      cout << "      MaxN1:       "         << MaxN1 << endl;      cout << endl;    }  }  if (debug_lvl & 2 ) { // Instantiation/Destruction notification    if (from == 0) cout << "Instantiated: FGTurboProp" << endl;    if (from == 1) cout << "Destroyed:    FGTurboProp" << endl;  }  if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects  }  if (debug_lvl & 8 ) { // Runtime state variables  }  if (debug_lvl & 16) { // Sanity checking  }  if (debug_lvl & 64) {    if (from == 0) { // Constructor      cout << IdSrc << endl;      cout << IdHdr << endl;    }  }}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -