FormCpuCg.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.ComponentModel.DataAnnotations;
  5. using System.Data;
  6. using System.Diagnostics;
  7. using System.Drawing;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using DevExpress.XtraEditors;
  14. using ExtensionsDev;
  15. using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
  16. namespace XdCxRhDw.CpuCgTools
  17. {
  18. public partial class FormCpuCg : DevExpress.XtraEditors.XtraForm
  19. {
  20. public class CgParam
  21. {
  22. public string F1 { get; set; }
  23. public string F2 { get; set; }
  24. public string snr { get; set; }
  25. public string dfoCenter { get; set; }
  26. public string dfoRange { get; set; }
  27. public string dtoXb { get; set; }
  28. public string dfoXb { get; set; }
  29. public string thread { get; set; }
  30. public string addZero { get; set; }
  31. public string start { get; set; }
  32. public string len { get; set; }
  33. public string dtoCenter { get; set; }
  34. public string dtoRange { get; set; }
  35. public string fs { get; set; }
  36. }
  37. public class CgRes
  38. {
  39. [Display(Name = "文件1")]
  40. public string File1 { get; set; }
  41. [Display(Name = "文件2")]
  42. public string File2 { get; set; }
  43. [Display(Name = "时差(us)")]
  44. public double Dto { get; set; }
  45. [Display(Name = "频差(us)")]
  46. public double Dfo { get; set; }
  47. [Display(Name = "信噪比(dB)")]
  48. public double Snr { get; set; }
  49. [Display(Name = "耗时(ms)")]
  50. public int CostTimeMs { get; set; }
  51. }
  52. List<CgRes> list = new List<CgRes>();
  53. public FormCpuCg()
  54. {
  55. InitializeComponent();
  56. }
  57. private void XtraForm1_Load(object sender, EventArgs e)
  58. {
  59. gridControl1.Init().UseExportCsv().UseExportXlsx();
  60. gridControl1.DataSource = list;
  61. txtF1.UseChooseFile();
  62. txtF2.UseChooseFile();
  63. if (File.Exists("tmp.txt"))
  64. {
  65. var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<CgParam>(File.ReadAllText("tmp.txt"));
  66. txtAddZero.Text = obj.addZero;
  67. txtDfoCenter.Text = obj.dfoCenter;
  68. txtDfoRange.Text = obj.dfoRange;
  69. txtDfoXb.Text = obj.dfoXb;
  70. txtDtoCenter.Text = obj.dtoCenter;
  71. txtDtoRange.Text = obj.dtoRange;
  72. txtDtoXb.Text = obj.dtoXb;
  73. txtF1.Text = obj.F1;
  74. txtF2.Text = obj.F2;
  75. txtFs.Text = obj.fs;
  76. txtLen.Text = obj.len;
  77. txtSnr.Text = obj.snr;
  78. txtStart.Text = obj.start;
  79. txtThread.Text = obj.thread;
  80. }
  81. }
  82. private async void btnCalc_Click(object sender, EventArgs e)
  83. {
  84. this.tablePanel1.Enabled = false;
  85. await Task.Run(() =>
  86. {
  87. try
  88. {
  89. Stopwatch sw = new Stopwatch();
  90. sw.Start();
  91. Process p = new Process();
  92. p.StartInfo.WorkingDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Core");
  93. p.StartInfo.FileName = Path.Combine(p.StartInfo.WorkingDirectory, "coc.exe");
  94. string snr = "";
  95. if (!string.IsNullOrWhiteSpace(txtSnr.Text))
  96. snr = $"-s {txtSnr.Text} ";
  97. string dfoCenter = "";
  98. if (!string.IsNullOrWhiteSpace(txtDfoCenter.Text))
  99. dfoCenter = $"-c {txtDfoCenter.Text} ";
  100. string dfoRange = "";
  101. if (!string.IsNullOrWhiteSpace(txtDfoRange.Text))
  102. dfoRange = $"-r {txtDfoRange.Text} ";
  103. string dtoXb = "";
  104. if (!string.IsNullOrWhiteSpace(txtDtoXb.Text))
  105. dtoXb = $"-t {txtDtoXb.Text} ";
  106. string dfoXb = "";
  107. if (!string.IsNullOrWhiteSpace(txtDfoXb.Text))
  108. dfoXb = $"-f {txtDfoXb.Text} ";
  109. string thread = "";
  110. if (!string.IsNullOrWhiteSpace(txtThread.Text))
  111. thread = $"-p {txtThread.Text} ";
  112. else
  113. thread = $"-p {Environment.ProcessorCount} ";
  114. string addZero = "";
  115. if (!string.IsNullOrWhiteSpace(txtAddZero.Text))
  116. addZero = $"-z {txtAddZero.Text} ";
  117. string slot = "";
  118. if (!string.IsNullOrWhiteSpace(txtStart.Text) && !string.IsNullOrWhiteSpace(txtLen.Text))
  119. slot = $"-x {txtStart.Text},{txtLen.Text}";
  120. if (!string.IsNullOrWhiteSpace(txtStart.Text) && (string.IsNullOrWhiteSpace(txtLen.Text) || Convert.ToInt32(txtLen.Text) <= 0))
  121. {
  122. FileInfo f1 = new FileInfo(txtF1.Text);
  123. FileInfo f2 = new FileInfo(txtF2.Text);
  124. long size = f1.Length;
  125. if (f1.Length > f2.Length)
  126. size = f2.Length;
  127. size /= 4;//IQ文件一个样点4个字节
  128. var len = size - Convert.ToInt32(txtStart.Text);
  129. slot = $"-x {txtStart.Text},{len}";
  130. }
  131. CgParam cp = new CgParam()
  132. {
  133. addZero = txtAddZero.Text,
  134. dfoCenter = txtDfoCenter.Text,
  135. dfoRange = txtDfoRange.Text,
  136. dfoXb = txtDfoXb.Text,
  137. dtoCenter = txtDtoCenter.Text,
  138. dtoRange = txtDtoRange.Text,
  139. dtoXb = txtDtoXb.Text,
  140. F1 = txtF1.Text,
  141. F2 = txtF2.Text,
  142. fs = txtFs.Text,
  143. len = txtLen.Text,
  144. snr = txtSnr.Text,
  145. start = txtStart.Text,
  146. thread = txtThread.Text,
  147. };
  148. var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(cp);
  149. File.WriteAllText("tmp.txt", jsonStr);
  150. p.StartInfo.Arguments = $"\"{txtF1.Text}\" \"{txtF2.Text}\" {txtFs.Text} {txtDtoCenter.Text} {txtDtoRange.Text} {snr}{dfoCenter}{dfoRange}{dtoXb}{dfoXb}{thread}{addZero}{slot}";
  151. p.StartInfo.CreateNoWindow = true;
  152. p.StartInfo.RedirectStandardError = true;
  153. p.StartInfo.RedirectStandardOutput = true;
  154. p.StartInfo.UseShellExecute = false;
  155. p.Start();
  156. p.WaitForExit();
  157. var str = p.StandardOutput.ReadToEnd();
  158. sw.Stop();
  159. var arr = str.Split("\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  160. var costTimeMs = Convert.ToInt32(arr[4]);
  161. var tmp = arr[5].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  162. var dt = Math.Round(Convert.ToDouble(tmp[0]), 3);
  163. var df = Math.Round(Convert.ToDouble(tmp[1]), 1);
  164. var snrRes = Math.Round(Convert.ToDouble(tmp[2].Replace(";", "")), 1);
  165. list.Add(new CgRes() { File1 = txtF1.Text, File2 = txtF2.Text, CostTimeMs = costTimeMs, Dto = dt, Dfo = df, Snr = snrRes });
  166. }
  167. catch (Exception ex)
  168. {
  169. Serilog.Log.Error("参估计算出错", ex);
  170. this.Invoke(new Action(() => XtraMessageBox.Show("参估计算出错")));
  171. }
  172. });
  173. this.gridView1.RefreshData();
  174. this.tablePanel1.Enabled = true;
  175. }
  176. }
  177. }