XdcMainCtrl.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using DevExpress.XtraEditors;
  2. using DevExpress.XtraSpreadsheet.Import.Xls;
  3. using Ips.Library.Basic;
  4. using Ips.Library.DxpLib;
  5. using Ips.Library.Entity;
  6. using Ips.Library.LocLib;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.ComponentModel;
  10. using System.Data;
  11. using System.Drawing;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Text.Json;
  16. using System.Threading.Tasks;
  17. using System.Windows.Forms;
  18. namespace Ips.Sps.Tools.Xdcs
  19. {
  20. public partial class XdcMainCtrl : DevExpress.XtraEditors.XtraUserControl
  21. {
  22. public XdcMainCtrl()
  23. {
  24. InitializeComponent();
  25. FileInButtonEdit.SetFileOpen(filter: FileFilterString.Dat);
  26. FsButtonEdit.SetUnitText("M");
  27. FileOutButtonEdit.SetFileSave(filter: FileFilterString.Dat);
  28. gvMain.UseDefaultSettings(new GridViewDefaultSetting()
  29. {
  30. Editable = true,
  31. ShowRowNum = true
  32. });
  33. }
  34. string vmfile = Path.Combine(SpsConst.VmFolder, "xdcparam.json");
  35. XdcViewModel vm;
  36. CancellationTokenSource cts;
  37. private void XdcMainCtrl_Load(object sender, EventArgs e)
  38. {
  39. if (File.Exists(vmfile))
  40. {
  41. vm = JsonSerializer.Deserialize<XdcViewModel>(File.ReadAllText(vmfile));
  42. }
  43. else
  44. {
  45. vm = new XdcViewModel();
  46. }
  47. bsMain.DataSource = vm;
  48. }
  49. private async void btnExcute_Click(object sender, EventArgs e)
  50. {
  51. if (ValidateModelState()) return;
  52. File.WriteAllText(vmfile, JsonSerializer.Serialize(vm));
  53. btnExcute.Enabled = false;
  54. btnStop.Enabled = true;
  55. cts?.Dispose();
  56. cts = new CancellationTokenSource();
  57. try
  58. {
  59. var dxitems = vm.SigList.Select(m => new XdcItem(m.Ffc, m.BandWidth, m.ModuType)).ToArray();
  60. var result = await XdcUtil.ExecuteAsync(vm.FileIn, vm.FileOut, vm.Fs, dxitems, vm.Th, token: cts.Token);
  61. if (result.ExitCode == 0)
  62. {
  63. MsgHelper.ShowMsg($"对消处理完成,耗时:{result.RunTime.TotalSeconds:F2}秒");
  64. }
  65. //await Task.Delay(3000);
  66. }
  67. catch (Exception ex)
  68. {
  69. ex.HandleCancelEx(ex =>
  70. {
  71. MsgHelper.ShowError(ex.Message, ex);
  72. });
  73. }
  74. finally
  75. {
  76. btnExcute.Enabled = true;
  77. btnStop.Enabled = false;
  78. }
  79. }
  80. private void btnStop_Click(object sender, EventArgs e)
  81. {
  82. cts?.Cancel();
  83. }
  84. private void btnSaveConfig_Click(object sender, EventArgs e)
  85. {
  86. string fileName = ToolDialog.SaveFile($"对消参数{DateTime.Now:yyyyMMddHHmmss}.json", "保存对消参数", filter: FileFilterString.Json);
  87. if (fileName.IsNullOrWhitespace()) return;
  88. JsonSerializerOptions jsonOpt = new JsonSerializerOptions()
  89. {
  90. WriteIndented = true
  91. };
  92. string content = JsonSerializer.Serialize(vm, jsonOpt);
  93. File.WriteAllText(fileName, content);
  94. }
  95. private void btnImportConfig_Click(object sender, EventArgs e)
  96. {
  97. string fileName = ToolDialog.OpenFile("", "导入对消参数", filter: FileFilterString.Json);
  98. if (fileName.IsNullOrWhitespace()) return;
  99. try
  100. {
  101. string content = File.ReadAllText(fileName);
  102. vm = JsonSerializer.Deserialize<XdcViewModel>(content);
  103. bsMain.DataSource = vm;
  104. }
  105. catch (Exception ex)
  106. {
  107. MsgHelper.ShowError(ex.Message, ex, "导入配置参数出错");
  108. }
  109. }
  110. private bool ValidateModelState()
  111. {
  112. dxError.ClearErrors();
  113. if (vm.FileIn.IsNullOrWhitespace() || !File.Exists(vm.FileIn))
  114. {
  115. dxError.SetError(FileInButtonEdit, "输入文件不存在!");
  116. }
  117. if (vm.Fs <= 0)
  118. {
  119. dxError.SetError(FsButtonEdit, "请输入正确的采样率!");
  120. }
  121. if (vm.FileOut.IsNullOrWhitespace())
  122. {
  123. dxError.SetError(FileOutButtonEdit, "请选择输出文件!");
  124. }
  125. if (vm.SigList.IsNullOrEmpty())
  126. {
  127. MsgHelper.ShowError("信号列表不能为空");
  128. return true;
  129. }
  130. if (vm.SigList.Any(m => m.BandWidth == 0 || m.ModuType == ModuType.None))
  131. {
  132. MsgHelper.ShowError("信号带宽不能为空,且调制方式不能为未知!");
  133. return true;
  134. }
  135. return dxError.HasErrors;
  136. }
  137. }
  138. }