123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- 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 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;
- }
- }
- }
|