| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 | using System;using System.Collections.Generic;using System.ComponentModel;using System.ComponentModel.DataAnnotations;using System.Data;using System.Diagnostics;using System.Drawing;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using DevExpress.Utils.DPI;using DevExpress.XtraEditors;using ExtensionsDev;using XdCxRhDW.Core.Api;using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;namespace XdCxRhDw.CpuCgTools{    public partial class FormCpuCg : DevExpress.XtraEditors.XtraForm    {        public class CgParam        {            public string F1 { get; set; }            public string F2 { get; set; }            public string snr { get; set; }            public string dfoCenter { get; set; }            public string dfoRange { get; set; }            public string dtoXb { get; set; }            public string dfoXb { get; set; }            public string thread { get; set; }            public string addZero { get; set; }            public string start { get; set; }            public string len { get; set; }            public string dtoCenter { get; set; }            public string dtoRange { get; set; }            public string fs { get; set; }        }        public class CgRes        {            [Display(Name = "文件1")]            public string File1 { get; set; }            [Display(Name = "文件2")]            public string File2 { get; set; }            [Display(Name = "时差(us)")]            public double Dto { get; set; }            [Display(Name = "频差(us)")]            public double Dfo { get; set; }            [Display(Name = "信噪比(dB)")]            public double Snr { get; set; }            [Display(Name = "耗时(ms)")]            public double CostTimeMs { get; set; }        }        List<CgRes> list = new List<CgRes>();        public FormCpuCg()        {            InitializeComponent();        }        private void XtraForm1_Load(object sender, EventArgs e)        {            gridControl1.Init().UseExportCsv().UseExportXlsx();            gridControl1.DataSource = list;            txtF1.UseChooseFile();            txtF2.UseChooseFile();            if (File.Exists("tmp.txt"))            {                var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<CgParam>(File.ReadAllText("tmp.txt"));                txtAddZero.Text = obj.addZero;                txtDfoCenter.Text = obj.dfoCenter;                txtDfoRange.Text = obj.dfoRange;                txtDfoXb.Text = obj.dfoXb;                txtDtoCenter.Text = obj.dtoCenter;                txtDtoRange.Text = obj.dtoRange;                txtDtoXb.Text = obj.dtoXb;                txtF1.Text = obj.F1;                txtF2.Text = obj.F2;                txtFs.Text = obj.fs;                txtLen.Text = obj.len;                txtSnr.Text = obj.snr;                txtStart.Text = obj.start;                txtThread.Text = obj.thread;            }        }        private (bool, string) checkParam()        {            //{txtF1.Text}\" \"{txtF2.Text}\" {dtocenterus} {txtDtoRange.Text}            if (string.IsNullOrWhiteSpace(txtF1.Text))            {                return (false, "文件1不能为空!");            }            if (string.IsNullOrWhiteSpace(txtF2.Text))            {                return (false, "文件2不能为空!");            }            if (string.IsNullOrWhiteSpace(txtFs.Text))            {                return (false, "采样率不能为空!");            }            if (string.IsNullOrWhiteSpace(txtDtoCenter.Text))            {                return (false, "时差中心不能为空!");            }            if (string.IsNullOrWhiteSpace(txtDtoRange.Text))            {                return (false, "时差范围不能为空!");            }            if (string.IsNullOrWhiteSpace(txtSnr.Text))            {                return (false, "信噪比不能为空!");            }            return (true, string.Empty);        }        private async void btnCalc_Click(object sender, EventArgs e)        {            var ckres = checkParam();            if (!ckres.Item1)            {                DxHelper.MsgBoxHelper.ShowError($"{ckres.Item2}");                return;            }            this.tablePanel1.Enabled = false;            await Task.Run(() =>             {                 try                 {                     Stopwatch sw = new Stopwatch();                     sw.Start();                     Process p = new Process();                     p.StartInfo.WorkingDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Core");                     p.StartInfo.FileName = Path.Combine(p.StartInfo.WorkingDirectory, "coc.exe");                     string snr = "";                     if (!string.IsNullOrWhiteSpace(txtSnr.Text))                         snr = $"{txtSnr.Text} ";                     string dfoCenter = "";                     if (!string.IsNullOrWhiteSpace(txtDfoCenter.Text))                         dfoCenter = $"{txtDfoCenter.Text} ";                     string dfoRange = "";                     if (!string.IsNullOrWhiteSpace(txtDfoRange.Text))                         dfoRange = $"{txtDfoRange.Text} ";                     string dtoXb = "";                     if (!string.IsNullOrWhiteSpace(txtDtoXb.Text))                         dtoXb = $"{txtDtoXb.Text} ";                     string dfoXb = "";                     if (!string.IsNullOrWhiteSpace(txtDfoXb.Text))                         dfoXb = $"{txtDfoXb.Text} ";                     string fs = $"{Convert.ToDouble(txtFs.Text) * 1000000} ";                     string bandWidth = "25000 ";                     string thread = "";                     if (!string.IsNullOrWhiteSpace(txtThread.Text))                         thread = $"-t {txtThread.Text} ";                     else                         thread = $"-t {Environment.ProcessorCount} ";                     string defalut = "-l 0 -f 0";//-l样点数 -f信号偏移类型                      string addZero = $"-z 0 ";                     if (!string.IsNullOrWhiteSpace(txtAddZero.Text))                         addZero = $"-z {txtAddZero.Text} ";                     string slot = "";                     if (!string.IsNullOrWhiteSpace(txtStart.Text) && !string.IsNullOrWhiteSpace(txtLen.Text))                         slot = $" -m 0 -d {txtStart.Text} {txtLen.Text} ";// -m时隙合并方式                     if (!string.IsNullOrWhiteSpace(txtStart.Text) && (string.IsNullOrWhiteSpace(txtLen.Text) || Convert.ToInt32(txtLen.Text) <= 0))                     {                         FileInfo f1 = new FileInfo(txtF1.Text);                         FileInfo f2 = new FileInfo(txtF2.Text);                         long size = f1.Length;                         if (f1.Length > f2.Length)                             size = f2.Length;                         size /= 4;//IQ文件一个样点4个字节                         var len = size - Convert.ToInt32(txtStart.Text);                         slot = $" -m 0 -d {txtStart.Text} {len} ";// -m时隙合并方式                     }                     long dtocenterus = Convert.ToInt64(txtDtoCenter.Text);                     string timeoffset = "-o 0 ";                     if (dtocenterus > 200000)                     {                         timeoffset = $"-o {dtocenterus * 1e-6} ";                         dtocenterus = 0;                     }                     CgParam cp = new CgParam()                     {                         addZero = txtAddZero.Text,                         dfoCenter = txtDfoCenter.Text,                         dfoRange = txtDfoRange.Text,                         dfoXb = txtDfoXb.Text,                         dtoCenter = txtDtoCenter.Text,                         dtoRange = txtDtoRange.Text,                         dtoXb = txtDtoXb.Text,                         F1 = txtF1.Text,                         F2 = txtF2.Text,                         fs = txtFs.Text,                         len = txtLen.Text,                         snr = txtSnr.Text,                         start = txtStart.Text,                         thread = txtThread.Text,                     };                     var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(cp);                     File.WriteAllText("tmp.txt", jsonStr);                     //p.StartInfo.Arguments = $"\"{txtF1.Text}\" \"{txtF2.Text}\" {txtFs.Text} {txtDtoCenter.Text} {txtDtoRange.Text} {snr}{dfoCenter}{dfoRange}{dtoXb}{dfoXb}{thread}{addZero}{slot}";                     p.StartInfo.Arguments = $"\"{txtF1.Text}\" \"{txtF2.Text}\" {dtocenterus} {txtDtoRange.Text} {snr}{dfoCenter}{dfoRange}{dtoXb}{dfoXb}{fs}{bandWidth}{thread}{addZero}{timeoffset}{slot}{defalut}";                     p.StartInfo.CreateNoWindow = true;                     p.StartInfo.RedirectStandardError = false;                     p.StartInfo.RedirectStandardOutput = true;                     p.StartInfo.UseShellExecute = false;                     p.Start();                     p.WaitForExit();                     var str = p.StandardOutput.ReadToEnd();                     sw.Stop();                     var res = CorResult.FromLines(str, Convert.ToDouble(txtSnr.Text));                     if (res.Length > 0)                     {                         var costTimeMs = res[0].UseTime;                         var dt = Math.Round(Convert.ToDouble(res[0].Dto), 3);                         var df = Math.Round(Convert.ToDouble(res[0].Dfo), 1);                         var snrRes = Math.Round(Convert.ToDouble(res[0].Snr), 1);                         list.Add(new CgRes() { File1 = txtF1.Text, File2 = txtF2.Text, CostTimeMs = costTimeMs, Dto = dt, Dfo = df, Snr = snrRes });                     }                     else                     {                         this.Invoke(new Action(() => DxHelper.MsgBoxHelper.ShowInfo("无参估计算结果")));                     }                 }                 catch (Exception ex)                 {                     Serilog.Log.Error(ex,"参估计算出错");                     this.Invoke(new Action(() => DxHelper.MsgBoxHelper.ShowError("参估计算出错")));                 }             });            this.gridView1.RefreshData();            this.tablePanel1.Enabled = true;        }    }}
 |