AircraftSHJ.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using KYFramework;
  2. using Model;
  3. using MongoDB.Bson;
  4. namespace SimulationServer;
  5. public class AircraftSHJ : AircraftEntity
  6. {
  7. public SHJTask content;
  8. public TaskParameter SHJParameter;
  9. public MissionEndPoint missionEndPoint;
  10. public bool IsOver;
  11. public bool Success;
  12. public double resulttime;
  13. public override void End()
  14. {
  15. TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
  16. }
  17. public override void Reset()
  18. {
  19. base.Reset();
  20. IsOver = false;
  21. Success = false;
  22. TotalTime = 0;
  23. }
  24. public override void Start()
  25. {
  26. FlightPlanEditor.missionpoint.MissionPointLatitude = missionEndPoint.MissionEndPointLatitude;
  27. FlightPlanEditor.missionpoint.MissionPointLongitude = missionEndPoint.MissionEndPointLongitude;
  28. FlightPlanEditor.missionpoint.MissionPointHeight = missionEndPoint.MissionEndPointHeight;
  29. int hour = Convert.ToInt32(content.missionInformation.StartTime.Split("时")[0]);
  30. //Console.WriteLine("hour:" + hour);
  31. double windSpeed = Convert.ToDouble(TargetQiXiangInfoSave("风速", hour));
  32. //Console.WriteLine("windSpeed:" + windSpeed);
  33. double vis = Convert.ToDouble(TargetQiXiangInfoSave("能见度", hour));
  34. //Console.WriteLine("vis:" + vis);
  35. FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
  36. resulttime = get_result_time_rope(SHJParameter.H, SHJParameter.person_number, windSpeed, vis, SHJParameter.descendspeed).time;//索滑降模型输出的索滑降时间
  37. Console.WriteLine("resulttime:" + resulttime);
  38. FXJHGenerate.SuoHuaJiang(resulttime, FlightPlanEditor, ref TurningPoints);
  39. FXJHGenerate.FromMissionToEnd(FlightPlanEditor, FXJHGenerate.SuoHuaJiangMissionEndPoint(FlightPlanEditor), ref TurningPoints);
  40. FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
  41. for (int i = 0; i < TurningPoints.Count; i++) // 总飞行时间
  42. {
  43. TotalTime += TurningPoints[i].SegmentFlightTime; // 总时间 //仿真轮次1 数值1
  44. //Console.WriteLine("TotalTime:" + TotalTime);
  45. }
  46. Console.WriteLine("TotalTime:" + TotalTime);
  47. IsOver = true;
  48. //Success = true;
  49. End();
  50. }
  51. // --接口
  52. // --输入
  53. // --
  54. // 1)索降高度(m)
  55. //--H(double)
  56. // 2)索降人数
  57. //--person_number(int)
  58. // 3)风速(m/s)
  59. // --windspeed(double)
  60. // 4)能见度(m/)
  61. //--vis(double)
  62. // 5)索降速度(m/s)
  63. // --descendspeed(double)
  64. // --
  65. // --输出
  66. // --
  67. // 1)能否索降、索降时间
  68. //--result(Cable_result)
  69. // --
  70. //--定义Cable_result类
  71. // 绳索滑降函数
  72. public Cable_result get_result_time_rope(double H, int person_number, double windspeed, double vis, double descendspeed)
  73. {
  74. // descendspeed < 8 m/s
  75. Cable_result result = new Cable_result();
  76. if (windspeed < 8 && vis > 3)
  77. {
  78. result.time = (person_number * H) / descendspeed;
  79. result.success = true;
  80. }
  81. else
  82. {
  83. result.success = false;
  84. }
  85. return result;
  86. }
  87. public string TargetQiXiangInfoSave(string s, int hour)
  88. {
  89. string result = hour.ToString() + "-" + s;
  90. switch (s)
  91. {
  92. case "温度":
  93. if (hour >= 0 && hour < 8)
  94. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Temperature_00_08.ToString();
  95. else if (hour >= 8 && hour < 19)
  96. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Temperature_08_19.ToString();
  97. else if (hour >= 19 && hour <= 24)
  98. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Temperature_19_24.ToString();
  99. break;
  100. case "湿度":
  101. if (hour >= 0 && hour < 8)
  102. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Humidity_00_08.ToString();
  103. else if (hour >= 8 && hour < 19)
  104. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Humidity_08_19.ToString();
  105. else if (hour >= 19 && hour <= 24)
  106. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Humidity_19_24.ToString();
  107. break;
  108. case "能见度":
  109. if (hour >= 0 && hour < 8)
  110. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Visibility_00_08.ToString();
  111. else if (hour >= 8 && hour < 19)
  112. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Visibility_08_19.ToString();
  113. else if (hour >= 19 && hour <= 24)
  114. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Visibility_19_24.ToString();
  115. break;
  116. case "风速":
  117. if (hour >= 0 && hour < 8)
  118. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.WindSpeed_00_08.ToString();
  119. else if (hour >= 8 && hour < 19)
  120. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.WindSpeed_08_19.ToString();
  121. else if (hour >= 19 && hour <= 24)
  122. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.WindSpeed_19_24.ToString();
  123. break;
  124. case "风向":
  125. if (hour >= 0 && hour < 8)
  126. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.WindDirection_00_08.ToString();
  127. else if (hour >= 8 && hour < 19)
  128. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.WindDirection_08_19.ToString();
  129. else if (hour >= 19 && hour <= 24)
  130. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.WindDirection_19_24.ToString();
  131. break;
  132. case "天气":
  133. if (hour >= 0 && hour < 8)
  134. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Weather_00_08;
  135. else if (hour >= 8 && hour < 19)
  136. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Weather_08_19;
  137. else if (hour >= 19 && hour <= 24)
  138. result = FlightPlanEditor.targetpoint[0].TargetQiXiangInfo.Weather_19_24;
  139. break;
  140. }
  141. return result;
  142. }
  143. }
  144. public class Cable_result
  145. {
  146. public bool success { get; set; }
  147. public double time { get; set; }
  148. }
  149. [ObjectSystem]
  150. public class AircraftSHJAwakeSystem : AwakeSystem<AircraftSHJ, FlightPlanEditor>
  151. {
  152. public override void Awake(AircraftSHJ self, FlightPlanEditor flightPlanEditor)
  153. {
  154. self.FlightPlanEditor = flightPlanEditor;
  155. self.Awake();
  156. }
  157. }