소스 검색

添加信号滤波处理,对检测都需要输入信号带宽参数

wyq 1 년 전
부모
커밋
a665206bf1

BIN
Service/CheckServer/AddIns/FileFilter.exe


+ 41 - 0
Service/CheckServer/AddIns/SigFilterHelper.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XdCxRhDW.Dto;
+
+namespace CheckServer.AddIns
+{
+    public class SigFilterHelper
+    {
+
+        Process pro;
+        // 【fin】 [fout] [fsample] [bandwidth]
+        public async Task SigFilter(SigFilterDto dto, string outFile)
+        {
+            pro = new Process();
+            await Task.Run(() =>
+            {
+                pro.StartInfo.Arguments = $"\"{dto.File}\" \"{outFile}\" {(Int64)(dto.FsHz)} {dto.BandHz}";
+
+                var exePath = Path.Combine(pro.StartInfo.WorkingDirectory, "AddIns");
+                pro.StartInfo.WorkingDirectory = exePath;
+                pro.StartInfo.FileName = Path.Combine(exePath, "FileFilter.exe");
+                pro.StartInfo.CreateNoWindow = true;
+                pro.StartInfo.RedirectStandardError = true;
+                pro.StartInfo.RedirectStandardOutput = true;
+                pro.StartInfo.UseShellExecute = false;
+                pro.Start();
+                var suceed = pro.WaitForExit(dto.TimeoutSeconds * 1000);
+                if (!suceed)
+                {
+                    throw new Exception("滤波处理超时");
+                }
+            });
+        }
+
+    }
+}

+ 6 - 0
Service/CheckServer/CheckServer.csproj

@@ -93,6 +93,7 @@
     <Compile Include="AddIns\DmcResult.cs" />
     <Compile Include="AddIns\CheckHelper.cs" />
     <Compile Include="AddIns\ReSampleHelper.cs" />
+    <Compile Include="AddIns\SigFilterHelper.cs" />
     <Compile Include="AddIns\SignalProcHelper.cs" />
     <Compile Include="Controllers\CheckController.cs" />
     <Compile Include="LogHelper.cs" />
@@ -199,6 +200,11 @@
     </None>
     <None Include="AddIns\PSignalCheck.h" />
   </ItemGroup>
+  <ItemGroup>
+    <Content Include="AddIns\FileFilter.exe">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
     <PostBuildEvent>del DevExpress*.xml,EntityFramework*.xml,Serilog*.xml,Newtonsoft*.xml

+ 43 - 0
Service/CheckServer/Controllers/CheckController.cs

@@ -1,4 +1,5 @@
 
+using CheckServer.AddIns;
 using System;
 using System.Collections.Generic;
 using System.Configuration;
@@ -201,6 +202,48 @@ namespace CheckServer.Controllers
 
         }
 
+
+
+
+        /// <summary>
+        /// 对信号文件进行滤波处理(需要先上传文件)
+        /// </summary>
+        /// <param name="dto">信号滤波参数</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<AjaxResult<SigFilterResponseDto>> SigFilterProc(SigFilterDto dto)
+        {
+            await LogHelper.Info($"正在滤波处理文件{dto.File}");
+            return await Task.Run(async () =>
+            {
+                try
+                {
+                    dto.File = GetLocalFile(dto.File);
+                    string outFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", Guid.NewGuid() + "filter.dat");
+                    SigFilterHelper sigFilter = new SigFilterHelper();
+                    await sigFilter.SigFilter(dto, outFile);
+                    if (!File.Exists(outFile))
+                    {
+                        return Error<SigFilterResponseDto>("滤波后的文件未能生成");
+                    }
+                    else
+                    {
+                        await LogHelper.Info($"文件{Path.GetFileName(dto.File)}滤波完成");
+
+                        return Success(new SigFilterResponseDto() { File = Path.GetFileName(outFile) });
+                    }
+
+                }
+                catch (Exception ex)
+                {
+                    await LogHelper.Error($"文件{Path.GetFileName(dto.File)}滤波异常", ex);
+                    return Error<SigFilterResponseDto>($"信号滤波算法执行异常");
+                }
+            });
+
+        }
+
+
         //求最大公约数
         private int Gcd(int M, int N)
         {

+ 34 - 5
Service/X2D1NoRefTaskServer/Service/TaskService.cs

@@ -329,6 +329,20 @@ namespace X2D1NoRefTaskServer.Service
                                                 await LogHelper.Warning($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6:f3}MHz],该服务不支持Normal类型信号");
                                                 continue;
                                             }
+                                            SigFilterDto filterDto = new SigFilterDto()
+                                            {
+                                                File = detectDto.file1,
+                                                FsHz = minfo.FsHz,
+                                                BandHz = taskSig.BandHz,
+                                            };
+                                            var filterRes = await HttpHelper.PostRequestAsync<SigFilterResponseDto>(baseUrl + "DetectCg/SigFilterProc", filterDto, token: cts.Token);
+                                            if (filterRes.code != 200)
+                                            {
+                                                await LogHelper.Error($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6:f3}MHz],{capTime:yyyyMMddHHmmss}时刻滤波出错.{filterRes.msg}");
+                                                continue;
+                                            }
+
+                                            detectDto.file1 = filterRes.data.File;
                                             var deteResp = await HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token);
                                             if (deteResp.code != 200)
                                             {
@@ -346,7 +360,7 @@ namespace X2D1NoRefTaskServer.Service
                                                 samplingRate = minfo.FsHz,
                                                 smpPositions = smps,
                                                 snrThreshold = taskSig.Snr,
-                                                BandHz = taskSig.BandHz,
+                                                BandHz = 0,
 
                                             };
                                             if (checkFileType != 0)
@@ -370,7 +384,7 @@ namespace X2D1NoRefTaskServer.Service
                                                 samplingRate = minfo.FsHz,
                                                 smpPositions = smps,
                                                 snrThreshold = taskSig.Snr,
-                                                BandHz = taskSig.BandHz,
+                                                BandHz = 0,
                                             };
                                             if (checkFileType != 0)
                                             {
@@ -624,7 +638,7 @@ namespace X2D1NoRefTaskServer.Service
                                     doNextHour = true;
                                     break;
                                 }
-                                await Task.Delay(10000,cts.Token);
+                                await Task.Delay(10000, cts.Token);
                                 files = Directory.GetFiles(filesDir, "*.dat").ToList();
                                 continue;
                             }
@@ -806,6 +820,21 @@ namespace X2D1NoRefTaskServer.Service
                                                     await LogHelper.Warning($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6:f3}MHz],该服务不支持Normal类型信号");
                                                     continue;
                                                 }
+                                                SigFilterDto filterDto = new SigFilterDto()
+                                                {
+                                                    File = detectDto.file1,
+                                                    FsHz = minfo.FsHz,
+                                                    BandHz = taskSig.BandHz,
+                                                };
+                                                var filterRes = await HttpHelper.PostRequestAsync<SigFilterResponseDto>(baseUrl + "DetectCg/SigFilterProc", filterDto, token: cts.Token);
+                                                if (filterRes.code != 200)
+                                                {
+                                                    await LogHelper.Error($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6:f3}MHz],{capTime:yyyyMMddHHmmss}时刻滤波出错.{filterRes.msg}");
+                                                    continue;
+                                                }
+
+                                                detectDto.file1 = filterRes.data.File;
+
                                                 var deteResp = await HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token);
                                                 if (deteResp.code != 200)
                                                 {
@@ -823,7 +852,7 @@ namespace X2D1NoRefTaskServer.Service
                                                     samplingRate = minfo.FsHz,
                                                     smpPositions = smps,
                                                     snrThreshold = taskSig.Snr,
-                                                    BandHz= taskSig.BandHz,
+                                                    BandHz = 0,
                                                 };
                                                 if (checkFileType != 0)
                                                 {
@@ -846,7 +875,7 @@ namespace X2D1NoRefTaskServer.Service
                                                     samplingRate = minfo.FsHz,
                                                     smpPositions = smps,
                                                     snrThreshold = taskSig.Snr,
-                                                    BandHz = taskSig.BandHz,
+                                                    BandHz = 0,
                                                 };
                                                 if (checkFileType != 0)
                                                 {

+ 21 - 1
XdCxRhDW.App/Controllers/DetectCgController.cs

@@ -105,7 +105,7 @@ namespace XdCxRhDW.App.Controllers
                     res.data[i].ModRate = procRes.data[i].Rate;
                     res.data[i].ModType = procRes.data[i].ModType.GetEnumDisplayName();
                     res.data[i].FfcHz = procRes.data[i].Ffc;
-                    res.data[i].Snr= procRes.data[i].Snr;
+                    res.data[i].Snr = procRes.data[i].Snr;
                 }
             }
             return res;
@@ -125,6 +125,26 @@ namespace XdCxRhDW.App.Controllers
             return res;
         }
 
+
+        /// <summary>
+        /// 滤波处理(滤波处理文件)
+        /// </summary>
+        /// <param name="dto">滤波处理参数</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<AjaxResult<SigFilterResponseDto>> SigFilterProc(SigFilterDto dto)
+        {
+            if (dto.BandHz <= 0 || dto.BandHz > dto.FsHz)
+            {
+                return new AjaxResult<SigFilterResponseDto>() { code = 200, data = new SigFilterResponseDto() { File = dto.File } };
+            }
+            var svr = ServerContext.Instance.GetRandomOne(EnumSvrType.CheckSvr);
+            dto.File = await HttpHelper.UploadFileAsync(GetLocalFile(dto.File), svr.BaseHttpAddr);
+            var res = await HttpHelper.PostRequestAsync<SigFilterResponseDto>(svr.BaseHttpAddr + "Check/SigFilterProc", dto);
+            await HttpHelper.DownloadFileAsync(svr.BaseHttpAddr, res.data.File, GetLocalFile(res.data.File), dto.TimeoutSeconds);
+            return res;
+        }
+
         /// <summary>
         /// 文件变采样(需要先上传文件)
         /// </summary>

+ 33 - 19
XdCxRhDW.App/CorTools/DetectToolForm.cs

@@ -80,7 +80,6 @@ namespace XdCxRhDW.App.CorTools
                             file1 = file1,
                             file2 = file2,
                             samplingRate = double.Parse(tefs.Text) * 1e6,
-                            BandHz = double.Parse(txtBand.Text) * 1e3,
                             dtCenter = double.Parse(teCenter.Text),
                             dtRange = double.Parse(teRange.Text),
                             dfRange = int.Parse(teDfRange.Text),
@@ -236,9 +235,39 @@ namespace XdCxRhDW.App.CorTools
             dto.dmcType = dmcType;
             layoutControl1.Enabled = false;
             gridSource.Clear();
+
+            try
+            {
+                SigFilterDto filterDto = new SigFilterDto();
+                filterDto.File = await HttpHelper.UploadFileAsync(btnFile1.Text, SysConfig.GetBaseUrl());
+                filterDto.FsHz = double.Parse(tefs.Text) * 1e6;
+                filterDto.BandHz = double.Parse(txtBand.Text) * 1e3;
+                filterDto.TimeoutSeconds = int.Parse(txtTimeout.Text);
+                var filterRes = await HttpHelper.PostRequestAsync<SigFilterResponseDto>(SysConfig.GetUrl("DetectCg/SigFilterProc"), filterDto, filterDto.TimeoutSeconds);
+                if (filterRes.code == 200)
+                {
+                    dto.file1 = filterRes.data.File;
+                }
+                else
+                {
+                    Serilog.Log.Error(filterRes.msg);
+                    DxHelper.MsgBoxHelper.ShowError(filterRes.msg);
+                    return;
+                }
+
+            }
+            catch (TaskCanceledException)
+            {
+                DxHelper.MsgBoxHelper.ShowInfo($"滤波处理超时");
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, "滤波处理出错");
+                DxHelper.MsgBoxHelper.ShowError($"滤波处理出错");
+            }
+         
             try
             {
-                dto.file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, SysConfig.GetBaseUrl());
                 dto.fsHz = double.Parse(tefs.Text) * 1e6;
                 dto.band = double.Parse(txtBand.Text);
                 dto.TimeoutSeconds = int.Parse(txtTimeout.Text);
@@ -313,7 +342,6 @@ namespace XdCxRhDW.App.CorTools
 
                 xItem.smpCount = double.Parse(teCount.Text);
                 xItem.samplingRate = Convert.ToInt32(double.Parse(tefs.Text) * 1e6);
-                xItem.BandHz = double.Parse(txtBand.Text) * 1e3;
                 xItem.dtCenter = int.Parse(teCenter.Text);
                 xItem.dtRange = int.Parse(teRange.Text);
                 xItem.dfRange = int.Parse(teDfRange.Text);
@@ -384,7 +412,6 @@ namespace XdCxRhDW.App.CorTools
                     file1 = btnFile1.Text,
                     file2 = btnFile2.Text,
                     samplingRate = Convert.ToInt32(double.Parse(tefs.Text) * 1e6),
-                    BandHz = double.Parse(txtBand.Text) * 1e3,
                     dtCenter = int.Parse(teCenter.Text),
                     dtRange = int.Parse(teRange.Text),
                     dfRange = int.Parse(teDfRange.Text),
@@ -438,8 +465,7 @@ namespace XdCxRhDW.App.CorTools
             btnCalc.Enabled = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? false : true;
             btnDrawImage.Enabled = btnCalc.Enabled;
             btnCheck.Enabled = !ckKY.Checked && !ckIBS.Checked && !chkDama.Checked ? false : true;
-
-            //itemBand.Visibility = lciStartPos.Visibility;
+            itemBand.Visibility = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? LayoutVisibility.Always : LayoutVisibility.Never;
             layoutControl1.BestFit();
         }
         private void ckIBS_CheckedChanged(object sender, EventArgs e)
@@ -448,19 +474,7 @@ namespace XdCxRhDW.App.CorTools
             btnCalc.Enabled = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? false : true;
             btnDrawImage.Enabled = btnCalc.Enabled;
             btnCheck.Enabled = !ckKY.Checked && !ckIBS.Checked && !chkDama.Checked ? false : true;
-            if (ckIBS.Checked)
-            {
-                //chkDama.Checked = false;
-                //ckKY.Checked = false;
-                //itemBand.Visibility = LayoutVisibility.Always;
-
-            }
-            else
-            {
-                //itemBand.Visibility = LayoutVisibility.Never;
-                //itemBand.Visibility = lciStartPos.Visibility;
-            }
-
+            itemBand.Visibility = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? LayoutVisibility.Always : LayoutVisibility.Never;
             layoutControl1.BestFit();
         }
 

+ 1 - 0
XdCxRhDW.App/CorTools/DetectToolForm.designer.cs

@@ -864,6 +864,7 @@
             this.itemBand.TextAlignMode = DevExpress.XtraLayout.TextAlignModeItem.AutoSize;
             this.itemBand.TextSize = new System.Drawing.Size(52, 14);
             this.itemBand.TextToControlDistance = 5;
+            this.itemBand.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
             // 
             // layoutControlItem14
             // 

+ 1 - 0
XdCxRhDw.Dto/02.XdCxRhDW.Dto.csproj

@@ -62,6 +62,7 @@
     <Compile Include="LogInfoDto.cs" />
     <Compile Include="LogQueryDto.cs" />
     <Compile Include="SigDelayDto.cs" />
+    <Compile Include="SigFilterDto.cs" />
     <Compile Include="SignalProcResDto.cs" />
     <Compile Include="SignalProcDto.cs" />
     <Compile Include="GpuCgDto.cs" />

+ 1 - 1
XdCxRhDw.Dto/CpuCgDto.cs

@@ -51,7 +51,7 @@ namespace XdCxRhDW.Dto
         /// 信号带宽(Hz)
         /// </summary>
         [RangeDouble(0, 100e6, IncludeMin = true)]
-        public double BandHz { get; set; }
+        public double BandHz { get; set; } = 0;
 
 
         /// <summary>

+ 1 - 1
XdCxRhDw.Dto/CpuCgMultiDto.cs

@@ -41,7 +41,7 @@ namespace XdCxRhDW.Dto
         /// 信号带宽(Hz)
         /// </summary>
         [RangeDouble(0, 100e6, IncludeMin = true)]
-        public double BandHz { get; set; }
+        public double BandHz { get; set; } = 0;
 
         /// <summary>
         /// 时差中心(us)

+ 52 - 0
XdCxRhDw.Dto/SigFilterDto.cs

@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XdCxRhDW.Dto.Attribute;
+
+namespace XdCxRhDW.Dto
+{
+    /// <summary>
+    /// 信号滤波请求参数模型
+    /// </summary>
+    public class SigFilterDto
+    {
+        /// <summary>
+        /// 原始文件上传后返回的名称
+        /// </summary>
+        [FileMustExist]
+        public string File { get; set; }
+
+        /// <summary>
+        /// 原始文件采样率(Hz)
+        /// </summary>
+        [RangeDouble(0, 100e6)]
+        public double FsHz { get; set; }
+
+        /// <summary>
+        /// 信号带宽(Hz)
+        /// </summary>
+        [RangeDouble(0, 100e6, IncludeMin = true)]
+        public double BandHz { get; set; }
+
+        /// <summary>
+        /// 超时时间(单位秒,默认30秒)
+        /// </summary>
+        [RangeInt(10, 600, IncludeMin = true)]
+        public int TimeoutSeconds { get; set; } = 30;
+
+    }
+
+    /// <summary>
+    /// 信号滤波响应结果模型
+    /// </summary>
+    public class SigFilterResponseDto
+    {
+        /// <summary>
+        /// 滤波后的信号文件
+        /// </summary>
+        public string File { get; set; }
+
+    }
+}