Form1.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Net.Http;
  11. using System.Net.Sockets;
  12. using System.Text;
  13. using System.Threading;
  14. using System.Threading.Tasks;
  15. using System.Windows.Forms;
  16. using XdCxRhDw.Dto;
  17. using XdCxRhDW.Dto;
  18. using XdCxRhDW.Sender.Properties;
  19. namespace XdCxRhDW.Sender
  20. {
  21. public partial class Form1 : DevExpress.XtraEditors.XtraForm
  22. {
  23. public Form1()
  24. {
  25. InitializeComponent();
  26. }
  27. CancellationTokenSource cts1;
  28. private async void btn1_Click(object sender, EventArgs e)
  29. {
  30. layoutControlItem1.Enabled = false;
  31. layoutControlItem7.Enabled = false;
  32. if (btn1.Text == "推送")
  33. {
  34. try
  35. {
  36. cts1 = new CancellationTokenSource();
  37. btn1.Text = "停止";
  38. var addrArr = txtAddr1.Text.Trim().Replace(":", ":").Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  39. string ip = addrArr[0];
  40. int port = Convert.ToInt32(addrArr[1]);
  41. if (txtTskType.EditValue == null)
  42. {
  43. Log($"请选择定位类型");
  44. return;
  45. }
  46. string tskType = txtTskType.EditValue.ToString();
  47. using (var client = new HttpClient())
  48. {
  49. try
  50. {
  51. string url = string.Format("http://{0}:{1}/Api/Pos/", ip, port);
  52. if (tskType == "X1D1CX")//一星一地测向定位
  53. {
  54. var lines = File.ReadAllLines("Simulation_Data2023.dat");
  55. int idx = 1;
  56. url += "PosX1D1Async";
  57. foreach (var line in lines)
  58. {
  59. if (string.IsNullOrWhiteSpace(line)) continue;
  60. var items = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  61. X1D1PosDto dto = new X1D1PosDto()
  62. {
  63. SigTime = DateTime.Now,
  64. XdDto = Convert.ToDouble(items[1]),
  65. MainYbDto = Convert.ToDouble(items[2]),
  66. CxRes = Convert.ToDouble(items[4]),
  67. MainX = Convert.ToDouble(items[7]),
  68. MainY = Convert.ToDouble(items[8]),
  69. MainZ = Convert.ToDouble(items[9]),
  70. SatTxLon = IniFiles.ReadValue<double>("Station_Data2023", "卫星接收天线", "Lon"),
  71. SatTxLat = IniFiles.ReadValue<double>("Station_Data2023", "卫星接收天线", "Lat"),
  72. CdbTxLon = IniFiles.ReadValue<double>("Station_Data2023", "超短波接收天线", "Lon"),
  73. CdbTxLat = IniFiles.ReadValue<double>("Station_Data2023", "超短波接收天线", "Lat"),
  74. CxLon = IniFiles.ReadValue<double>("Station_Data2023", "侧向站", "Lon"),
  75. CxLat = IniFiles.ReadValue<double>("Station_Data2023", "侧向站", "Lat"),
  76. RefLon = IniFiles.ReadValue<double>("Station_Data2023", "参考站", "Lon"),
  77. RefLat = IniFiles.ReadValue<double>("Station_Data2023", "参考站", "Lat"),
  78. };
  79. var content = new StringContent(JsonConvert.SerializeObject(dto), System.Text.Encoding.UTF8, "application/json");
  80. var response = await client.PostAsync(url, content);
  81. Log($"已向[{txtAddr1.Text}]发送第{idx++}条仿真结果");
  82. }
  83. }
  84. if (tskType == "X2D1")//两星一地定位
  85. {
  86. var lines = File.ReadAllLines("Simulation_Data2023.dat");
  87. int idx = 1;
  88. url += "PosX2D1Async";
  89. foreach (var line in lines)
  90. {
  91. if (string.IsNullOrWhiteSpace(line)) continue;
  92. var items = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  93. X2D1PosDto X2D1PosDto = new X2D1PosDto();
  94. X2D1PosDto.SigTime = DateTime.Now;
  95. X2D1PosDto.SxDto = Convert.ToDouble(items[0]);
  96. X2D1PosDto.XdDto = Convert.ToDouble(items[1]);
  97. X2D1PosDto.MainYbDto = Convert.ToDouble(items[2]);
  98. X2D1PosDto.AdjaYbDto = Convert.ToDouble(items[3]);
  99. X2D1PosDto.MainX = Convert.ToDouble(items[7]);
  100. X2D1PosDto.MainY = Convert.ToDouble(items[8]);
  101. X2D1PosDto.MainZ = Convert.ToDouble(items[9]);
  102. X2D1PosDto.AdjaX = Convert.ToDouble(items[10]);
  103. X2D1PosDto.AdjaY = Convert.ToDouble(items[11]);
  104. X2D1PosDto.AdjaZ = Convert.ToDouble(items[12]);
  105. X2D1PosDto.SatTxLon = IniFiles.ReadValue<double>("Station_Data2023", "卫星接收天线", "Lon");
  106. X2D1PosDto.SatTxLat = IniFiles.ReadValue<double>("Station_Data2023", "卫星接收天线", "Lat");
  107. X2D1PosDto.CdbTxLon = IniFiles.ReadValue<double>("Station_Data2023", "超短波接收天线", "Lon");
  108. X2D1PosDto.CdbTxLat = IniFiles.ReadValue<double>("Station_Data2023", "超短波接收天线", "Lat");
  109. X2D1PosDto.RefLon = IniFiles.ReadValue<double>("Station_Data2023", "参考站", "Lon");
  110. X2D1PosDto.RefLat = IniFiles.ReadValue<double>("Station_Data2023", "参考站", "Lat");
  111. var content = new StringContent(JsonConvert.SerializeObject(X2D1PosDto), System.Text.Encoding.UTF8, "application/json");
  112. var response = await client.PostAsync(url, content);
  113. Log($"已向[{txtAddr1.Text}]发送第{idx++}条仿真结果");
  114. }
  115. }
  116. if (tskType == "X2D1NoPar")//两星一地无参定位
  117. {
  118. url += "PosX2D1NoParAsync";
  119. var res = X2D1NoPar();
  120. var content = new StringContent(JsonConvert.SerializeObject(res), System.Text.Encoding.UTF8, "application/json");
  121. var response = await client.PostAsync(url, content);
  122. Log($"已向[{txtAddr1.Text}]发送两星一地无参定位仿真结果");
  123. }
  124. if (tskType == "RH")//融合定位
  125. {
  126. var lines = File.ReadAllLines("Simulation_Data2023.dat");
  127. int idx = 1;
  128. url += "PosRHAsync";
  129. foreach (var line in lines)
  130. {
  131. if (string.IsNullOrWhiteSpace(line)) continue;
  132. var items = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  133. RHPosDto RHPosDto = new RHPosDto();
  134. RHPosDto.SigTime = DateTime.Now;
  135. RHPosDto.SxDto = Convert.ToDouble(items[0]);
  136. RHPosDto.XdDto = Convert.ToDouble(items[1]);
  137. RHPosDto.MainYbDto = Convert.ToDouble(items[2]);
  138. RHPosDto.AdjaYbDto = Convert.ToDouble(items[3]);
  139. RHPosDto.CxRes = Convert.ToDouble(items[4]);
  140. RHPosDto.MainX = Convert.ToDouble(items[7]);
  141. RHPosDto.MainY = Convert.ToDouble(items[8]);
  142. RHPosDto.MainZ = Convert.ToDouble(items[9]);
  143. RHPosDto.AdjaX = Convert.ToDouble(items[10]);
  144. RHPosDto.AdjaY = Convert.ToDouble(items[11]);
  145. RHPosDto.AdjaZ = Convert.ToDouble(items[12]);
  146. RHPosDto.SatTxLon = IniFiles.ReadValue<double>("Station_Data2023", "卫星接收天线", "Lon");
  147. RHPosDto.SatTxLat = IniFiles.ReadValue<double>("Station_Data2023", "卫星接收天线", "Lat");
  148. RHPosDto.CdbTxLon = IniFiles.ReadValue<double>("Station_Data2023", "超短波接收天线", "Lon");
  149. RHPosDto.CdbTxLat = IniFiles.ReadValue<double>("Station_Data2023", "超短波接收天线", "Lat");
  150. RHPosDto.CxLon = IniFiles.ReadValue<double>("Station_Data2023", "侧向站", "Lon");
  151. RHPosDto.CxLat = IniFiles.ReadValue<double>("Station_Data2023", "侧向站", "Lat");
  152. RHPosDto.RefLon = IniFiles.ReadValue<double>("Station_Data2023", "参考站", "Lon");
  153. RHPosDto.RefLat = IniFiles.ReadValue<double>("Station_Data2023", "参考站", "Lat");
  154. var content = new StringContent(JsonConvert.SerializeObject(RHPosDto), System.Text.Encoding.UTF8, "application/json");
  155. var response = await client.PostAsync(url, content);
  156. Log($"已向[{txtAddr1.Text}]发送第{idx++}条仿真结果");
  157. }
  158. }
  159. if (tskType == "X3TwoDto")//三星双时差定位
  160. {
  161. url += "PosX3TwoDtoAsync";
  162. }
  163. if (tskType == "X3TwoDfo")//三星双频差定位
  164. {
  165. url += "PosX3TwoDfoAsync";
  166. }
  167. if (tskType == "X2Dfo")//双星时频差定位
  168. {
  169. url += "PosX2DtoDfoAsync";
  170. }
  171. }
  172. catch (Exception ex)
  173. {
  174. Log($"向[{txtAddr1.Text}]发送结果失败.{ex.Message}");
  175. }
  176. }
  177. }
  178. catch (Exception ex)
  179. {
  180. Log(ex);
  181. }
  182. finally
  183. {
  184. btn1.Text = "推送";
  185. layoutControlItem1.Enabled = true;
  186. layoutControlItem7.Enabled = true;
  187. }
  188. }
  189. else
  190. {
  191. cts1?.Cancel();
  192. }
  193. }
  194. /// <summary>
  195. /// 两星一地定位无参
  196. /// </summary>
  197. private X2D1PosDto X2D1NoPar()
  198. {
  199. X2D1PosDto X2D1PosDto = new X2D1PosDto();
  200. X2D1PosDto.SigTime = DateTime.Now;
  201. X2D1PosDto.SxDto = 2198.485309353;
  202. X2D1PosDto.XdDto = 245961.726007262;
  203. X2D1PosDto.MainX = -38209016;
  204. X2D1PosDto.MainY = 17858458;
  205. X2D1PosDto.MainZ = 13250;
  206. X2D1PosDto.AdjaX = 4750323;
  207. X2D1PosDto.AdjaY = 41902879;
  208. X2D1PosDto.AdjaZ = 50515;
  209. X2D1PosDto.SatTxLon = 118.8833;
  210. X2D1PosDto.SatTxLat = 32.0667;
  211. X2D1PosDto.CdbTxLon = 109.4082;
  212. X2D1PosDto.CdbTxLat = 18.3878;
  213. return X2D1PosDto;
  214. }
  215. private void Log(string msg)
  216. {
  217. try
  218. {
  219. if (this.InvokeRequired)
  220. {
  221. this.Invoke(new Action(() =>
  222. {
  223. if (listBoxControl1.ItemCount > 5000)
  224. listBoxControl1.Items.Clear();
  225. listBoxControl1.Items.Insert(0, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}--{msg}");
  226. listBoxControl1.SelectedIndex = 0;
  227. }));
  228. }
  229. else
  230. {
  231. if (listBoxControl1.ItemCount > 5000)
  232. listBoxControl1.Items.Clear();
  233. listBoxControl1.Items.Insert(0, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}--{msg}");
  234. listBoxControl1.SelectedIndex = 0;
  235. }
  236. }
  237. catch
  238. { }
  239. }
  240. private void Log(Exception ex)
  241. {
  242. try
  243. {
  244. if (this.InvokeRequired)
  245. {
  246. this.Invoke(new Action(() =>
  247. {
  248. if (listBoxControl1.ItemCount > 5000)
  249. listBoxControl1.Items.Clear();
  250. listBoxControl1.Items.Insert(0, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}--{ex.Message}");
  251. listBoxControl1.SelectedIndex = 0;
  252. }));
  253. }
  254. else
  255. {
  256. if (listBoxControl1.ItemCount > 5000)
  257. listBoxControl1.Items.Clear();
  258. listBoxControl1.Items.Insert(0, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}--{ex.Message}");
  259. listBoxControl1.SelectedIndex = 0;
  260. }
  261. }
  262. catch
  263. { }
  264. }
  265. private void listBoxControl1_MouseClick(object sender, MouseEventArgs e)
  266. {
  267. if (e.Button == MouseButtons.Right)
  268. {
  269. popupMenu1.ShowPopup(MousePosition);
  270. }
  271. }
  272. private void btnClear_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  273. {
  274. listBoxControl1.Items.Clear();
  275. }
  276. private void btnCopyAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  277. {
  278. StringBuilder sb = new StringBuilder();
  279. foreach (var item in listBoxControl1.Items)
  280. {
  281. sb.AppendLine(item.ToString());
  282. }
  283. var data = sb.ToString();
  284. if (string.IsNullOrWhiteSpace(data)) return;
  285. Clipboard.SetText(sb.ToString());
  286. }
  287. }
  288. }