123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- using ExtensionsDev;
- using System;
- using System.Collections.Generic;
- using System.Data.Entity;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using XdCxRhDW.Api;
- using XdCxRhDW.Api.AddIns;
- using XdCxRhDW.Dto;
- using XdCxRhDW.Entity;
- using XdCxRhDW.Repostory;
- namespace XdCxRhDW.App.EditForms
- {
- public partial class TarDfoLeoX2Calc : DevExpress.XtraEditors.XtraForm
- {
- private string mainSatInfo;
- private string adja1SatInfo;
- private double RefFreqDownMHz;
- private string CapDir;
- public TarDfoLeoX2Calc()
- {
- InitializeComponent();
- this.Text = "两星频差预测";
- this.layoutControl1.UseDefault();
- this.StartPosition = FormStartPosition.CenterParent;
- }
- public TarDfoLeoX2Calc(double lon, double lat)
- : this()
- {
- this.txtTar.Text = $"{lon:f3},{lat:f3}";
- }
- private async void TarDfoLeoX2Calc_Load(object sender, EventArgs e)
- {
- try
- {
- using (RHDWContext db = new RHDWContext())
- {
- var rec = await db.TxInfos.Where(p => p.TxType == EnumTxType.Rec).FirstOrDefaultAsync();
- this.txtRec.Text = $"{rec.Lon},{rec.Lat}";
- var refstation = await db.TxInfos.Where(p => p.TxType == EnumTxType.Ref).FirstOrDefaultAsync();
- this.txtRef.Text = $"{refstation.Lon},{refstation.Lat}";
- }
- await GetAppSetAsync();
- this.lcX1.Text = "主星坐标X";
- this.lcY1.Text = "主星坐标Y";
- this.lcZ1.Text = "主星坐标Z";
- this.lcVX1.Text = "主星坐标VX";
- this.lcVY1.Text = "主星坐标VY";
- this.lcVZ1.Text = "主星坐标VZ";
- this.lcX2.Text = "邻星坐标X";
- this.lcY2.Text = "邻星坐标Y";
- this.lcZ2.Text = "邻星坐标Z";
- this.lcVX2.Text = "邻星坐标VX";
- this.lcVY2.Text = "邻星坐标VY";
- this.lcVZ2.Text = "邻星坐标VZ";
- var main = mainSatInfo.Split(',');
- int idx = 0;
- txtX1.EditValue = main[++idx];
- txtY1.EditValue = main[++idx];
- txtZ1.EditValue = main[++idx];
- txtVX1.EditValue = main[++idx];
- txtVY1.EditValue = main[++idx];
- txtVZ1.EditValue = main[++idx];
- var adja = adja1SatInfo.Split(',');
- idx = 0;
- txtX2.EditValue = adja[++idx];
- txtY2.EditValue = adja[++idx];
- txtZ2.EditValue = adja[++idx];
- txtVX2.EditValue = adja[++idx];
- txtVY2.EditValue = adja[++idx];
- txtVZ2.EditValue = adja[++idx];
- txtRefFuMhz.EditValue = RefFreqDownMHz;
- }
- catch (Exception ex)
- {
- await LogHelper.Error("查询天线信息出错", ex);
- DxHelper.MsgBoxHelper.ShowError("查询天线信息出错");
- }
- }
- private async Task GetAppSetAsync()
- {
- try
- {
- mainSatInfo = "23467,-1608418.46,5994257.60,3139819.89,-6632.8731,-373.9909,-2678.2335";
- adja1SatInfo = "40892,-4629555.87,4978929.91,1487241.78,-4890.2693,-3337.6709,-4031.3087";
- RefFreqDownMHz = 265;
- CapDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "信号仿真", "低轨双星仿真数据");
- var svtItem = ServerContext.Instance.GetRandomOne(EnumSvrType.LeoX2Task54);
- if (svtItem == null)
- {
- return;
- }
- var rsp = await HttpHelper.GetRequestAsync<LeoSat2AppSettingDto>($"{svtItem.BaseHttpAddr}LeoSat2TaskProcessing/GetAppSetting", 10);
- if (rsp.code == 200)
- {
- mainSatInfo = rsp.data.MainSatInfo;
- adja1SatInfo = rsp.data.Adja1SatInfo;
- RefFreqDownMHz = rsp.data.RefFreqDownMHz;
- }
- }
- catch (Exception)
- {
- }
- }
- private async void btnOk_Click(object sender, EventArgs e)
- {
- await DfoCalcAsync(false);
- }
- private async Task DfoCalcAsync(bool beCreateData)
- {
- try
- {
- this.listBoxRes.Items.Clear();
- var strTar = txtTar.Text.Replace(",", ",");
- var strRef = txtRef.Text.Replace(",", ",");
- var strRec = txtRec.Text.Replace(",", ",");
- var tarfuHz = (Convert.ToDouble(txtTarFuMhz.Text) + 44) * 1e6;
- var reffuHz = (Convert.ToDouble(txtRefFuMhz.Text) + 44) * 1e6;
- var DtarfuHz = (Convert.ToDouble(txtTarFuMhz.Text)) * 1e6;
- var DreffuHz = (Convert.ToDouble(txtRefFuMhz.Text)) * 1e6;
- double x1 = Convert.ToDouble(txtX1.Text);
- double y1 = Convert.ToDouble(txtY1.Text);
- double z1 = Convert.ToDouble(txtZ1.Text);
- double vx1 = Convert.ToDouble(txtVX1.Text);
- double vy1 = Convert.ToDouble(txtVY1.Text);
- double vz1 = Convert.ToDouble(txtVZ1.Text);
- double[] ephX1 = new double[6] { x1, y1, z1, vx1, vy1, vz1 };
- double x2 = Convert.ToDouble(txtX2.Text);
- double y2 = Convert.ToDouble(txtY2.Text);
- double z2 = Convert.ToDouble(txtZ2.Text);
- double vx2 = Convert.ToDouble(txtVX2.Text);
- double vy2 = Convert.ToDouble(txtVY2.Text);
- double vz2 = Convert.ToDouble(txtVZ2.Text);
- double[] ephX2 = new double[6] { x2, y2, z2, vx2, vy2, vz2 };
- double[] targetPos = GetDoubles(strTar);
- double[] refPos = GetDoubles(strRef);
- double[] recPos = GetDoubles(strRec);
- var tarEcef = PhysicsHelper.GeoToEcef((targetPos[0], targetPos[1], targetPos[2]));
- var recEcef = PhysicsHelper.GeoToEcef((recPos[0], recPos[1], recPos[2]));
- var refEcef = PhysicsHelper.GeoToEcef((refPos[0], refPos[1], refPos[2]));
- var xlEcef1 = (x1, y1, z1);
- var x2Ecef1 = (x2, y2, z2);
- var dt1 = PhysicsHelper.Dto(tarEcef, xlEcef1, recEcef);
- var dt2 = PhysicsHelper.Dto(tarEcef, x2Ecef1, recEcef);
- var refdt1 = PhysicsHelper.Dto(refEcef, xlEcef1, recEcef);
- var refdt2 = PhysicsHelper.Dto(refEcef, x2Ecef1, recEcef);
- var df1 = DfoCalcAPI.DfoCalc(targetPos, ephX1, tarfuHz);
- var df2 = DfoCalcAPI.DfoCalc(targetPos, ephX2, tarfuHz);
- var refdf1 = DfoCalcAPI.DfoCalc(refPos, ephX1, reffuHz);
- var refdf2 = DfoCalcAPI.DfoCalc(refPos, ephX2, reffuHz);
- List<string> list = new List<string>();
- var tardt = dt2 - dt1;
- var refdt = refdt2 - refdt1;
- var tardf = df2 - df1;
- var refdf = refdf2 - refdf1;
- list.Add($"目标主邻时差预测值:{tardt * 1e6:f3}us");
- list.Add($"参考主邻时差预测值:{refdt * 1e6:f3}us");
- list.Add($"目标主邻频差预测值:{tardf:f3}Hz ");
- list.Add($"参考主邻频差预测值:{refdf:f3}Hz");
- this.listBoxRes.Items.AddRange(list.ToArray());
- if (beCreateData)
- {
- long fsHz = 96000;
- int brustCount = 15;
- await Task.Run(() =>
- {
- try
- {
- Directory.CreateDirectory(CapDir);
- var t1 = DateTime.Now;
- var f1 = $"{CapDir}\\{t1:yyyyMMddHHmmss}_D{DtarfuHz * 1e-6}_FS{fsHz}_ch1.dat";
- var f2 = $"{CapDir}\\{t1:yyyyMMddHHmmss}_D{DtarfuHz * 1e-6}_FS{fsHz}_ch2.dat";
- DataEmulationHelper.GenBrustFiles(f1, f2, fsHz, brustCount, tardt, tardf);
- var reff1 = $"{CapDir}\\{t1:yyyyMMddHHmmss}_D{DreffuHz * 1e-6}_FS{fsHz}_ch1.dat";
- var reff2 = $"{CapDir}\\{t1:yyyyMMddHHmmss}_D{DreffuHz * 1e-6}_FS{fsHz}_ch2.dat";
- DataEmulationHelper.GenBrustFiles(reff1, reff2, fsHz, brustCount, refdt, refdf);
- System.Diagnostics.Process.Start("explorer.exe", CapDir);
- }
- catch (Exception ex)
- {
- DxHelper.MsgBoxHelper.ShowError("频差预测出错");
- }
- });
- }
- }
- catch (Exception ex)
- {
- await LogHelper.Error("频差预测出错", ex);
- DxHelper.MsgBoxHelper.ShowError("频差预测出错");
- }
- }
- private double[] GetDoubles(string str)
- {
- double lon = Convert.ToDouble(str.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0]);
- double lat = Convert.ToDouble(str.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]);
- double[] ds = new double[3] { lon, lat, 0 };
- return ds;
- }
- private async void btnCreate_Click(object sender, EventArgs e)
- {
- await DfoCalcAsync(true);
- }
- }
- }
|