TarDtoDfoCalc.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using ExtensionsDev;
  2. using System;
  3. using System.Data.Entity;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using System.Windows.Forms;
  8. using XdCxRhDW.Api;
  9. using XdCxRhDW.Entity;
  10. using XdCxRhDW.Repostory;
  11. namespace XdCxRhDW.App.EditForms
  12. {
  13. public partial class TarDtoDfoCalc : DevExpress.XtraEditors.XtraForm
  14. {
  15. public TarDtoDfoCalc()
  16. {
  17. InitializeComponent();
  18. this.layoutControl1.UseDefault();
  19. this.StartPosition = FormStartPosition.CenterParent;
  20. }
  21. public TarDtoDfoCalc(double lon, double lat)
  22. : this()
  23. {
  24. this.txtTar.Text = $"{lon:f3},{lat:f3}";
  25. }
  26. private async void SatEditor_Load(object sender, EventArgs e)
  27. {
  28. try
  29. {
  30. using (RHDWContext db = new RHDWContext())
  31. {
  32. var rec = await db.TxInfos.Where(p => p.TxType == EnumTxType.MRec).FirstOrDefaultAsync();
  33. this.txtRec.Text = $"{rec.Lon},{rec.Lat}";
  34. }
  35. }
  36. catch (Exception ex)
  37. {
  38. await LogHelper.Error("查询接收站信息出错", ex);
  39. DxHelper.MsgBoxHelper.ShowError("查询接收站信息出错");
  40. }
  41. }
  42. private async void btnOk_Click(object sender, EventArgs e)
  43. {
  44. try
  45. {
  46. double x = Convert.ToDouble(txtX1.Text);
  47. double y = Convert.ToDouble(txtY1.Text);
  48. double z = Convert.ToDouble(txtZ1.Text);
  49. var strTar = txtTar.Text.Replace(",", ",");
  50. var strRec = txtRec.Text.Replace(",", ",");
  51. double lon = Convert.ToDouble(strTar.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0]);
  52. double lat = Convert.ToDouble(strTar.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]);
  53. double recLon = Convert.ToDouble(strRec.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0]);
  54. double recLat = Convert.ToDouble(strRec.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]);
  55. var tarEcef = PhysicsHelper.GeoToEcef((lon, lat, 0));
  56. var recEcef = PhysicsHelper.GeoToEcef((recLon, recLat, 0));
  57. var xlEcef1 = (Convert.ToDouble(txtX1.Text.Trim()), Convert.ToDouble(txtY1.Text.Trim()), Convert.ToDouble(txtZ1.Text.Trim()));
  58. var x2Ecef1 = (Convert.ToDouble(txtX2.Text.Trim()), Convert.ToDouble(txtY2.Text.Trim()), Convert.ToDouble(txtZ2.Text.Trim()));
  59. double x3 = 0, y3 = 0, z3 = 0;
  60. if (!string.IsNullOrWhiteSpace(txtX3.Text))
  61. {
  62. x3 = Convert.ToDouble(txtX3.Text.Trim());
  63. y3 = Convert.ToDouble(txtY3.Text.Trim());
  64. z3 = Convert.ToDouble(txtZ3.Text.Trim());
  65. }
  66. var dt1 = PhysicsHelper.Dto(tarEcef, xlEcef1, recEcef);
  67. var dt2 = PhysicsHelper.Dto(tarEcef, x2Ecef1, recEcef);
  68. if (x3 != 0)
  69. {
  70. var dt3 = PhysicsHelper.Dto(tarEcef, (x3, y3, z3), recEcef);
  71. this.txtRes.Text = $"主邻1时差预测值:{dt1 * 1e6 - dt2 * 1e6:f3}us 主邻2时差预测值:{dt1 * 1e6 - dt3 * 1e6:f3}us";
  72. await Task.Run(() =>
  73. {
  74. long fsHz = 96000;
  75. string CapDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "信号仿真", "低轨三星仿真数据");
  76. Directory.CreateDirectory(CapDir);
  77. var t1 = DateTime.Now;
  78. var f1 = $"{CapDir}\\{t1:yyyyMMddHHmmss}_D{260}_FS{fsHz}_ch1.dat";
  79. var f2 = $"{CapDir}\\{t1:yyyyMMddHHmmss}_D{260}_FS{fsHz}_ch2.dat";
  80. var f3 = $"{CapDir}\\{t1:yyyyMMddHHmmss}_D{260}_FS{fsHz}_ch3.dat";
  81. DataEmulationHelper.GenBrustFiles(f1, f2, f3, fsHz, 15, dt2 - dt1, 200, dt3 - dt1, 500);
  82. System.Diagnostics.Process.Start("explorer.exe", CapDir);
  83. });
  84. }
  85. else
  86. {
  87. this.txtRes.Text = $"主邻1时差预测值:{dt1 * 1e6 - dt2 * 1e6:f3}us";
  88. }
  89. }
  90. catch (Exception ex)
  91. {
  92. await LogHelper.Error("时差预测出错", ex);
  93. DxHelper.MsgBoxHelper.ShowError("时差预测出错");
  94. }
  95. }
  96. }
  97. }