Przeglądaj źródła

Merge branch 'master' of http://139.155.15.221:3000/zoulei/XdCxRhDW

wyq 1 rok temu
rodzic
commit
7b8c47e2b1

+ 1 - 1
Service/CheckServer/App.config

@@ -11,7 +11,7 @@
 		<add key="PosPlatformAddr" value="http://127.0.0.1:8091" />
 
 		<!--使用老板本检测=1,使用新版本检测=2,老板本无结果时使用新版本=3-->
-		<add key="DamaVersion" value="2"/>
+		<add key="DamaVersion" value="3"/>
 
 	</appSettings>
 	<startup>

+ 1 - 2
Service/CheckServer/MainForm.cs

@@ -96,8 +96,7 @@ namespace CheckServer
                 url = posPlatformAddr + "api/SvrReport/Report";
             else
                 url = posPlatformAddr + "/api/SvrReport/Report";
-#warning 检测程序不知道为啥崩溃,先不清理数据,方便找到崩溃文件
-            //_ = ClearLocalFile();
+            _ = ClearLocalFile();
             bool preSucceed = false;
             while (!this.Disposing)
             {

+ 8 - 1
Service/GpuCgServer/AddIns/GpuCgHelper.cs

@@ -84,8 +84,15 @@ namespace GpuCgServer
             }
             List<GpuCgResponseDto> list = new List<GpuCgResponseDto>();
             //3:-0.000*-0.00054.553+72.917*0.000*37.756+-72.917*0.000*37.671+
-            if (res.Length<3)
+            if (res.Length < 3)
+            {
+                list.Add(new GpuCgResponseDto()
+                {
+                     Smplen=(long)smpCount,
+                     TimeMs=(int)sw.ElapsedMilliseconds,
+                });
                 return list;
+            }
             else
             {
                 var xgfArr = res.Substring(2).Split("+".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

+ 3 - 0
Service/X2D1TaskServer54/App.config

@@ -30,6 +30,9 @@
 		<!--定位时差系数-->
 		<add key="PosDtoFactor" value="-1"/>
 
+		<!--使用GPU执行参数估计=1 ,使用CPU执行参数估计=0-->
+		<add key="UseGpuCg" value="0"/>
+
 	</appSettings>
 	<startup>
 		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />

+ 1 - 1
Service/X2D1TaskServer54/Controllers/X2D1NoRefTaskProcessingController.cs

@@ -33,7 +33,7 @@ namespace X3TaskServer54.Controllers
         /// <param name="dto">离线任务信息</param>
         /// <returns></returns>
         [HttpPost]
-        public AjaxResult Run(X2D1NoRefTaskHandleDto dto)
+        public AjaxResult Run(X3NoRefTaskHandleDto dto)
         {
             try
             {

+ 349 - 145
Service/X2D1TaskServer54/Service/HistoryTaskService.cs

@@ -1,4 +1,5 @@
-using System;
+using DevExpress.Internal.WinApi.Windows.UI.Notifications;
+using System;
 using System.Collections.Generic;
 using System.Configuration;
 using System.Diagnostics;
@@ -7,6 +8,7 @@ using System.Linq;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using System.Web.Http.Results;
 using XdCxRhDW.Dto;
 
 namespace X3TaskServer54.Service
@@ -24,8 +26,10 @@ namespace X3TaskServer54.Service
         int MainSatCode, Adja1SatCode, Adja2SatCode;
         double[] MainSatXYZ, Adja1SatXYZ, Adja2SatXYZ;
         int PosDtoFactor;
+        bool useGpuCg = false;
         public HistoryTaskService()
         {
+            Directory.CreateDirectory("tmp");
             var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();//like http://127.0.0.1:8091 or http://127.0.0.1:8091/
             if (posPlatformAddr.EndsWith("/"))
                 this.baseUrl = posPlatformAddr + "api/";
@@ -39,8 +43,13 @@ namespace X3TaskServer54.Service
             var PosDtoFactorstr = ConfigurationManager.AppSettings["PosDtoFactor"].Trim();
             int.TryParse(PosDtoFactorstr, out PosDtoFactor);
             if (PosDtoFactor == 0) PosDtoFactor = 1;
+            string useGpuStr = ConfigurationManager.AppSettings["UseGpuCg"];
+            if (useGpuStr != null && useGpuStr.Trim() == "1")
+                useGpuCg = true;
+
+
         }
-        public void StartAsync(X2D1NoRefTaskHandleDto dto)
+        public void StartAsync(X3NoRefTaskHandleDto dto)
         {
             cts = new CancellationTokenSource();
             Task.Run(async () =>
@@ -108,7 +117,6 @@ namespace X3TaskServer54.Service
                                     File.Delete(item.File);//检测检测结果文件
                                 if (slotsInfo.Slots.Any())
                                     listSlotsInfo.Add(slotsInfo);
-                                LogHelper.Warning($"【任务{dto.ID}】{slotsInfo.AdTime:yyyyMMddHHmmss}时刻频点{slotsInfo.FreqDownMHz}共{slotsInfo.Slots.Count}个突发");
                             }
                             if (!listSlotsInfo.Any()) continue;
                             var adFiles = Directory.EnumerateFiles(CapDir, "*.dat", SearchOption.TopDirectoryOnly).Select(p => StringToAdFile(p))
@@ -121,7 +129,9 @@ namespace X3TaskServer54.Service
                             var first = listSlotsInfo.First();
                             var sigs = listSlotsInfo.Select(p => new DDCSig() { FreqDownHz = (int)(p.FreqDownMHz * 1e6), Mult = (int)first.Multi, Slots = p });
                             List<DDCFile> chDDCFiles = new List<DDCFile>();//同一个时刻多个频点多个通道的DDC数据
-                            LogHelper.Info($"【任务{dto.ID}】{listSlotsInfo.First().AdTime:yyyyMMddHHmmss}时刻DDC处理开始...");
+                            LogHelper.Info($"【任务{dto.ID}】{listSlotsInfo.First().AdTime:yyyyMMddHHmmss}时刻DDC处理开始,共{sigs.Count()}个频点...");
+                            Stopwatch sw = new Stopwatch();
+                            sw.Start();
                             Parallel.ForEach(adFiles, adFile =>
                             {
 
@@ -131,7 +141,8 @@ namespace X3TaskServer54.Service
                                 if (!Debugger.IsAttached)
                                     File.Delete(adFile.File);//删除AD文件
                             });
-                            LogHelper.Info($"【任务{dto.ID}】{listSlotsInfo.First().AdTime:yyyyMMddHHmmss}时刻DDC处理完成");
+                            sw.Stop();
+                            LogHelper.Info($"【任务{dto.ID}】{listSlotsInfo.First().AdTime:yyyyMMddHHmmss}时刻DDC处理完成,耗时{sw.ElapsedMilliseconds}ms");
                             if (!chDDCFiles.Any())
                             {
                                 LogHelper.Error($"【任务{dto.ID}】{listSlotsInfo.First().AdTime:yyyyMMddHHmmss}时刻DDC处理无结果");
@@ -147,178 +158,371 @@ namespace X3TaskServer54.Service
                                 var ch2File = group.Where(p => p.ChNo == 2).FirstOrDefault();
                                 if (ch0File == null)
                                 {
-                                    LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻未找到主星信号ch0文件,跳过此组数据");
+                                    LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-未找到主星信号ch0文件,跳过此组数据");
                                     continue;
                                 }
                                 if (ch1File == null)
                                 {
-                                    LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻未找到邻1星信号ch1文件,跳过此组数据");
+                                    LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-未找到邻1星信号ch1文件,跳过此组数据");
                                     continue;
                                 }
                                 if (ch2File == null)
                                 {
-                                    LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻未找到邻2星信号ch2文件,跳过此组数据");
+                                    LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-未找到邻2星信号ch2文件,跳过此组数据");
                                     continue;
                                 }
-
-                                string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
-                                string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
-                                string adja2File = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//邻2星文件
-
-
                                 var sig = sigs.FirstOrDefault(p => p.FreqDownHz == (int)(group.Key * 1e6));
-                                var cgDto = new CpuCgMultiDto()
-                                {
-                                    dtCenter = 0,
-                                    dtRange = 40000,
-                                    file1 = mainFile,
-                                    file2 = adja1File,
-                                    samplingRate = ch0File.Fs,
-                                    smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
-                                    snrThreshold = 15,
-                                };
-                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻1星CPU参估开始...");
-                                var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                                if (result1.code != 200)
-                                {
-                                    LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻1星CPU参估出错.{result1.msg}");
-                                    continue;
-                                }
-                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻1星CPU参估完成");
-                                cgDto = new CpuCgMultiDto()
-                                {
-                                    dtCenter = 0,
-                                    dtRange = 40000,
-                                    file1 = mainFile,
-                                    file2 = adja2File,
-                                    samplingRate = ch0File.Fs,
-                                    smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
-                                    snrThreshold = 15,
-                                };
-                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻2星CPU参估开始...");
-                                var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                                if (result2.code != 200)
-                                {
-                                    LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻2星CPU参估出错.{result2.msg}");
-                                    continue;
-                                }
-                                //删除DDC文件
-                                File.Delete(ch0File.File);
-                                File.Delete(ch1File.File);
-                                File.Delete(ch2File.File);
-                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻2星CPU参估完成");
-                                var data1 = result1.data;
-                                var data2 = result2.data;
-                                if (data1.Count != data2.Count || data1.Count != cgDto.smpPositions.Count)
+                                if (useGpuCg)
                                 {
-                                    LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻参估结果个数和检测结果个数不匹配");
-                                    continue;
-                                }
-                                for (int i = 0; i < data1.Count; i++)
-                                {
-                                    try
+                                    LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估开始,共{sig.Slots.Slots.Count}个突发...");
+                                    sw.Start();
+                                    List<GpuCgResponseDto> data1 = new List<GpuCgResponseDto>();
+                                    List<GpuCgResponseDto> data2 = new List<GpuCgResponseDto>();
+                                    foreach (var item in sig.Slots.Slots)
                                     {
-                                        if (cts.IsCancellationRequested) break;
-                                        X3TwoDtoNoParPosDto x3 = new X3TwoDtoNoParPosDto()
+                                        string f1 = $"tmp\\{Path.GetFileNameWithoutExtension(ch0File.File)}_{item.StartPoint}_{item.Len}.dat";
+                                        string f2 = $"tmp\\{Path.GetFileNameWithoutExtension(ch1File.File)}_{item.StartPoint}_{item.Len}.dat";
+                                        string f3 = $"tmp\\{Path.GetFileNameWithoutExtension(ch2File.File)}_{item.StartPoint}_{item.Len}.dat";
+                                        using (FileStream fs = new FileStream(ch0File.File, FileMode.Open))
                                         {
-                                            TaskID = dto.ID,
-                                            //SigTime = capTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
-                                            SigTime = capTime.AddSeconds(data1[i].TimeSeconds),
-                                            MainCode = MainSatCode,
-                                            Adja1Code = Adja1SatCode,
-                                            Adja2Code = Adja2SatCode,
-                                            MainX = MainSatXYZ[0],
-                                            MainY = MainSatXYZ[1],
-                                            MainZ = MainSatXYZ[2],
-                                            Adja1X = Adja1SatXYZ[0],
-                                            Adja1Y = Adja1SatXYZ[1],
-                                            Adja1Z = Adja1SatXYZ[2],
-                                            Adja2X = Adja2SatXYZ[0],
-                                            Adja2Y = Adja2SatXYZ[1],
-                                            Adja2Z = Adja2SatXYZ[2],
-                                            Dto1 = PosDtoFactor * data1[i].Dt,
-                                            Dfo1 = data1[i].Df,
-                                            Snr1 = data1[i].Snr,
-                                            Dto2 = PosDtoFactor * data2[i].Dt,
-                                            Dfo2 = data2[i].Df,
-                                            Snr2 = data2[i].Snr,
-                                            SatTxLon = dto.CapLon,
-                                            SatTxLat = dto.CapLat,
-                                            FreqDown = ch0File.FreqDownMHz * 1e6,
-                                            CheckRes = new CheckResDto()
-                                            {
-                                                FileName = Path.GetFileName(ch0File.File),
-                                                SmpStart = sig.Slots.Slots[i].StartPoint,
-                                                SmpCount = sig.Slots.Slots[i].Len,
-                                                PosCheckType = EnumPosCheckTypeDto.DAMA,
-                                            }
+                                            byte[] data = new byte[item.Len * 4];
+                                            fs.Position = item.StartPoint * 4;
+                                            fs.Read(data, 0, data.Length);
+                                            File.WriteAllBytes(f1, data);
+                                        }
+                                        using (FileStream fs = new FileStream(ch1File.File, FileMode.Open))
+                                        {
+                                            byte[] data = new byte[item.Len * 4];
+                                            fs.Position = item.StartPoint * 4;
+                                            fs.Read(data, 0, data.Length);
+                                            File.WriteAllBytes(f2, data);
+                                        }
+                                        using (FileStream fs = new FileStream(ch2File.File, FileMode.Open))
+                                        {
+                                            byte[] data = new byte[item.Len * 4];
+                                            fs.Position = item.StartPoint * 4;
+                                            fs.Read(data, 0, data.Length);
+                                            File.WriteAllBytes(f3, data);
+                                        }
+                                        string mainSlotFile = await HttpHelper.UploadFileAsync(f1, baseUrl, token: cts.Token);//主星文件
+                                        string adja1SlotFile = await HttpHelper.UploadFileAsync(f2, baseUrl, token: cts.Token);//邻1星文件
+                                        string adja2SlotFile = await HttpHelper.UploadFileAsync(f3, baseUrl, token: cts.Token);//邻2星文件
+                                        File.Delete(f1);
+                                        File.Delete(f2);
+                                        File.Delete(f3);
+                                        var gpudto = new GpuCgRequestDto()
+                                        {
+                                            dtCenter = 0,
+                                            dtRange = 40000,
+                                            file1 = mainSlotFile,
+                                            file2 = adja1SlotFile,
+                                            samplingRate = ch0File.Fs,
+                                            smpCount = 0,
+                                            snrThreshold = 15
+                                        };
+                                        var result1 = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", gpudto, token: cts.Token);
+                                        if (result1.code != 200)
+                                        {
+                                            LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻1星GPU参估出错.{result1.msg}.突发位置{item.StartPoint}-{item.Len}");
+                                            continue;
+                                        }
+                                        var data1First = result1.data.First();
+                                        data1First.TimeSeconds = item.TimeSeconds;
+                                        data1.Add(data1First);
+                                        gpudto = new GpuCgRequestDto()
+                                        {
+                                            dtCenter = 0,
+                                            dtRange = 40000,
+                                            file1 = mainSlotFile,
+                                            file2 = adja2SlotFile,
+                                            samplingRate = ch0File.Fs,
+                                            smpCount = 0,
+                                            snrThreshold = 15
                                         };
-                                        var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX3TwoDtoNoParAsync", x3);
-                                        if (result.code != 200)
+                                        var result2 = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", gpudto, token: cts.Token);
+                                        if (result2.code != 200)
                                         {
-                                            LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
+                                            LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻2星GPU参估出错.{result2.msg}.突发位置{item.StartPoint}-{item.Len}");
+                                            continue;
                                         }
-                                        else
+                                        var data2First = result2.data.First();
+                                        data2First.TimeSeconds = item.TimeSeconds;
+                                        data2.Add(data2First);
+                                    }
+                                    sw.Stop();
+                                    LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-GPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
+                                    if (data1.Count != data2.Count || data1.Count != sig.Slots.Slots.Count)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻参估结果个数和检测结果个数不匹配");
+                                        continue;
+                                    }
+                                    for (int i = 0; i < data1.Count; i++)
+                                    {
+                                        try
                                         {
-                                            var posRes = result.data;
-                                            double posLon = posRes.PosLon;
-                                            double posLat = posRes.PosLat;
-                                            if (x3.Snr1 == 0 || x3.Snr2 == 0)
+                                            if (cts.IsCancellationRequested) break;
+                                            X3TwoDtoNoParPosDto x3 = new X3TwoDtoNoParPosDto()
                                             {
-                                                posLon = 0;
-                                                posLat = 0;
+                                                TaskID = dto.ID,
+                                                //SigTime = capTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
+                                                SigTime = capTime.AddSeconds(data1[i].TimeSeconds),
+                                                MainCode = MainSatCode,
+                                                Adja1Code = Adja1SatCode,
+                                                Adja2Code = Adja2SatCode,
+                                                MainX = MainSatXYZ[0],
+                                                MainY = MainSatXYZ[1],
+                                                MainZ = MainSatXYZ[2],
+                                                Adja1X = Adja1SatXYZ[0],
+                                                Adja1Y = Adja1SatXYZ[1],
+                                                Adja1Z = Adja1SatXYZ[2],
+                                                Adja2X = Adja2SatXYZ[0],
+                                                Adja2Y = Adja2SatXYZ[1],
+                                                Adja2Z = Adja2SatXYZ[2],
+                                                Dto1 = PosDtoFactor * data1[i].Dt,
+                                                Dfo1 = data1[i].Df,
+                                                Snr1 = data1[i].Snr,
+                                                Dto2 = PosDtoFactor * data2[i].Dt,
+                                                Dfo2 = data2[i].Df,
+                                                Snr2 = data2[i].Snr,
+                                                FreqUp = ch0File.FreqDownMHz * 1e6,
+                                                SatTxLon = dto.CapLon,
+                                                SatTxLat = dto.CapLat,
+                                                FreqDown = ch0File.FreqDownMHz * 1e6,
+                                                CheckRes = new CheckResDto()
+                                                {
+                                                    FileName = Path.GetFileName(ch0File.File),
+                                                    SmpStart = sig.Slots.Slots[i].StartPoint,
+                                                    SmpCount = sig.Slots.Slots[i].Len,
+                                                    PosCheckType = EnumPosCheckTypeDto.DAMA,
+                                                }
+                                            };
+                                            var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX3TwoDtoNoParAsync", x3);
+                                            if (result.code != 200)
+                                            {
+                                                LogHelper.Error($"【任务{dto.ID}】-信号{group.Key}MHz-{capTime:yyyyMMddHHmmss}时刻第{i + 1}个突发定位异常.{result.msg}");
                                             }
-                                            StringBuilder sb = new StringBuilder();
-                                            sb.Append($"{x3.SigTime:yyyy}\t");
-                                            sb.Append($"{x3.SigTime:MM}\t");
-                                            sb.Append($"{x3.SigTime:dd}\t");
-                                            sb.Append($"{x3.SigTime:HH}\t");
-                                            sb.Append($"{x3.SigTime:mm}\t");
-                                            sb.Append($"{x3.SigTime:ss}\t");
-                                            sb.Append($"{x3.SigTime:fff}\t");
-                                            sb.Append($"{x3.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
-                                            sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
-                                            sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
-                                            sb.Append($"{4}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK),
-                                            sb.Append($"{0:D4}\t");//目标序号
-                                            sb.Append($"res\t");
-                                            sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
-                                            sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
-                                            sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
-                                            sb.Append($"{Convert.ToInt64(x3.Dto1 * 1e2):D10}\t");
-                                            sb.Append($"{Convert.ToInt64(x3.Dfo1 * 1e2):D10}\t");
-                                            sb.Append($"{Convert.ToInt64(x3.Snr1 * 1e2):D6}\t");
-                                            sb.Append($"{Convert.ToInt64(x3.Dto2 * 1e2):D10}\t");
-                                            sb.Append($"{Convert.ToInt64(x3.Dfo2 * 1e2):D10}\t");
-                                            sb.Append($"{Convert.ToInt64(x3.Snr2 * 1e2):D6}\t");
-                                            sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
-                                            sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
-                                            sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
-                                            sb.Append($"{0:D8}\t");//长轴
-                                            sb.Append($"{0:D8}\t");//短轴
-                                            sb.Append($"{0:D7}\t");//倾角
-                                            sb.Append($"{data1.Count:D2}\t");//时隙属性
-                                            sb.Append($"{1}\t");//所属卫星
-                                            sb.Append($"{950:D3}\t");//置信度
-                                            sb.Append($"{3}\r\n");//定位体制(星地=3)
-                                            string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
-                                            File.AppendAllText(resFile, sb.ToString());
+                                            else
+                                            {
+                                                var posRes = result.data;
+                                                double posLon = posRes.PosLon;
+                                                double posLat = posRes.PosLat;
+                                                if (x3.Snr1 == 0 || x3.Snr2 == 0)
+                                                {
+                                                    posLon = 0;
+                                                    posLat = 0;
+                                                }
+                                                StringBuilder sb = new StringBuilder();
+                                                sb.Append($"{x3.SigTime:yyyy}\t");
+                                                sb.Append($"{x3.SigTime:MM}\t");
+                                                sb.Append($"{x3.SigTime:dd}\t");
+                                                sb.Append($"{x3.SigTime:HH}\t");
+                                                sb.Append($"{x3.SigTime:mm}\t");
+                                                sb.Append($"{x3.SigTime:ss}\t");
+                                                sb.Append($"{x3.SigTime:fff}\t");
+                                                sb.Append($"{x3.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
+                                                sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
+                                                sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
+                                                sb.Append($"{4}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK),
+                                                sb.Append($"{0:D4}\t");//目标序号
+                                                sb.Append($"res\t");
+                                                sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
+                                                sb.Append($"{Convert.ToInt64(x3.Dto1 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dfo1 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Snr1 * 1e2):D6}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dto2 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dfo2 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Snr2 * 1e2):D6}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
+                                                sb.Append($"{0:D8}\t");//长轴
+                                                sb.Append($"{0:D8}\t");//短轴
+                                                sb.Append($"{0:D7}\t");//倾角
+                                                sb.Append($"{data1.Count:D2}\t");//时隙属性
+                                                sb.Append($"{1}\t");//所属卫星
+                                                sb.Append($"{950:D3}\t");//置信度
+                                                sb.Append($"{3}\r\n");//定位体制(星地=3)
+                                                string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
+                                                File.AppendAllText(resFile, sb.ToString());
+                                            }
+                                        }
+                                        catch (Exception ex)
+                                        {
+                                            LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-第{i + 1}个突发定位异常", ex);
                                         }
                                     }
-                                    catch (Exception ex)
+                                }
+                                else
+                                {
+                                    LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估开始,共{sig.Slots.Slots.Count}个突发...");
+                                    sw.Start();
+                                    string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
+                                    string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
+                                    string adja2File = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//邻2星文件
+                                    var cgDto = new CpuCgMultiDto()
+                                    {
+                                        dtCenter = 0,
+                                        dtRange = 40000,
+                                        file1 = mainFile,
+                                        file2 = adja1File,
+                                        samplingRate = ch0File.Fs,
+                                        smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
+                                        snrThreshold = 15,
+                                    };
+                                    var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                    if (result1.code != 200)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻1星CPU参估出错.{result1.msg}");
+                                        continue;
+                                    }
+                                    cgDto = new CpuCgMultiDto()
                                     {
-                                        LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常", ex);
+                                        dtCenter = 0,
+                                        dtRange = 40000,
+                                        file1 = mainFile,
+                                        file2 = adja2File,
+                                        samplingRate = ch0File.Fs,
+                                        smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
+                                        snrThreshold = 15,
+                                    };
+                                    var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                    sw.Stop();
+                                    if (result2.code != 200)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-主星邻2星CPU参估出错.{result2.msg}");
+                                        continue;
+                                    }
+                                    LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
+                                    var data1 = result1.data;
+                                    var data2 = result2.data;
+                                    if (data1.Count != data2.Count || data1.Count != cgDto.smpPositions.Count)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-参估结果个数和检测结果个数不匹配");
+                                        continue;
+                                    }
+                                    for (int i = 0; i < data1.Count; i++)
+                                    {
+                                        try
+                                        {
+                                            if (cts.IsCancellationRequested) break;
+                                            X3TwoDtoNoParPosDto x3 = new X3TwoDtoNoParPosDto()
+                                            {
+                                                TaskID = dto.ID,
+                                                //SigTime = capTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
+                                                SigTime = capTime.AddSeconds(data1[i].TimeSeconds),
+                                                MainCode = MainSatCode,
+                                                Adja1Code = Adja1SatCode,
+                                                Adja2Code = Adja2SatCode,
+                                                MainX = MainSatXYZ[0],
+                                                MainY = MainSatXYZ[1],
+                                                MainZ = MainSatXYZ[2],
+                                                Adja1X = Adja1SatXYZ[0],
+                                                Adja1Y = Adja1SatXYZ[1],
+                                                Adja1Z = Adja1SatXYZ[2],
+                                                Adja2X = Adja2SatXYZ[0],
+                                                Adja2Y = Adja2SatXYZ[1],
+                                                Adja2Z = Adja2SatXYZ[2],
+                                                Dto1 = PosDtoFactor * data1[i].Dt,
+                                                Dfo1 = data1[i].Df,
+                                                Snr1 = data1[i].Snr,
+                                                Dto2 = PosDtoFactor * data2[i].Dt,
+                                                Dfo2 = data2[i].Df,
+                                                Snr2 = data2[i].Snr,
+                                                SatTxLon = dto.CapLon,
+                                                SatTxLat = dto.CapLat,
+                                                FreqDown = ch0File.FreqDownMHz * 1e6,
+                                                FreqUp = ch0File.FreqDownMHz * 1e6,
+                                                CheckRes = new CheckResDto()
+                                                {
+                                                    FileName = Path.GetFileName(ch0File.File),
+                                                    SmpStart = sig.Slots.Slots[i].StartPoint,
+                                                    SmpCount = sig.Slots.Slots[i].Len,
+                                                    PosCheckType = EnumPosCheckTypeDto.DAMA,
+                                                }
+                                            };
+                                            var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX3TwoDtoNoParAsync", x3);
+                                            if (result.code != 200)
+                                            {
+                                                LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
+                                            }
+                                            else
+                                            {
+                                                var posRes = result.data;
+                                                double posLon = posRes.PosLon;
+                                                double posLat = posRes.PosLat;
+                                                if (x3.Snr1 == 0 || x3.Snr2 == 0)
+                                                {
+                                                    posLon = 0;
+                                                    posLat = 0;
+                                                }
+                                                StringBuilder sb = new StringBuilder();
+                                                sb.Append($"{x3.SigTime:yyyy}\t");
+                                                sb.Append($"{x3.SigTime:MM}\t");
+                                                sb.Append($"{x3.SigTime:dd}\t");
+                                                sb.Append($"{x3.SigTime:HH}\t");
+                                                sb.Append($"{x3.SigTime:mm}\t");
+                                                sb.Append($"{x3.SigTime:ss}\t");
+                                                sb.Append($"{x3.SigTime:fff}\t");
+                                                sb.Append($"{x3.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
+                                                sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
+                                                sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
+                                                sb.Append($"{4}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK),
+                                                sb.Append($"{0:D4}\t");//目标序号
+                                                sb.Append($"res\t");
+                                                sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
+                                                sb.Append($"{Convert.ToInt64(x3.Dto1 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dfo1 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Snr1 * 1e2):D6}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dto2 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Dfo2 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(x3.Snr2 * 1e2):D6}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
+                                                sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
+                                                sb.Append($"{0:D8}\t");//长轴
+                                                sb.Append($"{0:D8}\t");//短轴
+                                                sb.Append($"{0:D7}\t");//倾角
+                                                sb.Append($"{data1.Count:D2}\t");//时隙属性
+                                                sb.Append($"{1}\t");//所属卫星
+                                                sb.Append($"{950:D3}\t");//置信度
+                                                sb.Append($"{3}");//定位体制(星地=3)
+                                                sb.Append($"QPSK");//调制类型
+                                                sb.Append($"1.33\r\n");//符号速率kbps
+                                                string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
+                                                File.AppendAllText(resFile, sb.ToString());
+                                            }
+                                        }
+                                        catch (Exception ex)
+                                        {
+                                            LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
+                                        }
                                     }
                                 }
-                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻定位完成");
+                                //删除DDC文件
+                                File.Delete(ch0File.File);
+                                File.Delete(ch1File.File);
+                                File.Delete(ch2File.File);
+                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-定位完成");
                             }
 
                         }
                         #endregion
                     }
+                    catch (TaskCanceledException ex)
+                    {
+                        LogHelper.Warning($"【任务{dto.ID}】处理结束,用户手动终止", ex.InnerException);
+                    }
                     catch (Exception ex)
                     {
-                        LogHelper.Error("任务执行出错", ex);
+                        if (ex.InnerException != null && ex.InnerException.GetType() == typeof(TaskCanceledException))
+                            LogHelper.Warning($"【任务{dto.ID}】处理结束,用户手动终止", ex.InnerException);
+                        else
+                            LogHelper.Error($"【任务{dto.ID}】任务执行出错", ex);
+                        continue;
                     }
                 }
             }, cts.Token);

+ 1 - 1
XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOPAPi.cs

@@ -330,7 +330,7 @@ namespace XdCxRhDW.Api
         [DllImport(GDOPDll, EntryPoint = "SCX_XD_NoRef_new", CallingConvention = CallingConvention.Cdecl)]
         public static extern int SCX_XD_NoRef_new(double[] mainxyz, double[] mbrecPos, double[] cdbPos,
             double target_dto, ref int linecount, out IntPtr reslen, out IntPtr res);
-
+        //单星、星地、低轨、
 
         //GDOP_EXPORT int SCX_XD_NoRef_new(double* main_sat_pos, double* mbwx_rec_pos, double* cdb_rec_pos,
         //double target_dto, int* linecount, int** reslen, double** res);

+ 11 - 11
XdCxRhDW.App/CorTools/DetectToolForm.designer.cs

@@ -83,6 +83,7 @@
             this.DemType = new DevExpress.XtraGrid.Columns.GridColumn();
             this.modType = new DevExpress.XtraGrid.Columns.GridColumn();
             this.modRate = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.SigSnr = new DevExpress.XtraGrid.Columns.GridColumn();
             this.colFFC = new DevExpress.XtraGrid.Columns.GridColumn();
             this.tePos = new DevExpress.XtraEditors.TextEdit();
             this.teCount = new DevExpress.XtraEditors.TextEdit();
@@ -118,7 +119,6 @@
             this.layoutControlItem13 = new DevExpress.XtraLayout.LayoutControlItem();
             this.itemBand = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem14 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.SigSnr = new DevExpress.XtraGrid.Columns.GridColumn();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
             this.layoutControl1.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.txtFileTime.Properties)).BeginInit();
@@ -319,7 +319,7 @@
             // 
             // snr
             // 
-            this.snr.Caption = "信噪比";
+            this.snr.Caption = "相关信噪比";
             this.snr.FieldName = "snr";
             this.snr.MinWidth = 22;
             this.snr.Name = "snr";
@@ -403,12 +403,20 @@
             // 
             // modRate
             // 
-            this.modRate.Caption = "调制速率bps";
+            this.modRate.Caption = "信号带宽";
             this.modRate.FieldName = "ModRate";
             this.modRate.Name = "modRate";
             this.modRate.Visible = true;
             this.modRate.VisibleIndex = 12;
             // 
+            // SigSnr
+            // 
+            this.SigSnr.Caption = "信号信噪比";
+            this.SigSnr.FieldName = "SigSnr";
+            this.SigSnr.Name = "SigSnr";
+            this.SigSnr.Visible = true;
+            this.SigSnr.VisibleIndex = 14;
+            // 
             // colFFC
             // 
             this.colFFC.Caption = "频偏Hz";
@@ -874,14 +882,6 @@
             this.layoutControlItem14.TextSize = new System.Drawing.Size(52, 14);
             this.layoutControlItem14.TextToControlDistance = 5;
             // 
-            // SigSnr
-            // 
-            this.SigSnr.Caption = "信号信噪比dB";
-            this.SigSnr.FieldName = "SigSnr";
-            this.SigSnr.Name = "SigSnr";
-            this.SigSnr.Visible = true;
-            this.SigSnr.VisibleIndex = 14;
-            // 
             // DetectToolForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);

+ 14 - 43
XdCxRhDW.App/EditForms/X2D1DTOParamEditor.cs

@@ -100,55 +100,26 @@ namespace XdCxRhDW.App.EditForms
                 this.txtRefLocation.Text = $"{0},{0}";
             }
 
-            //txtsatStation.Text = "43.7,12.9";
-            //txtcdbStation.Text = "43.7,12.9";
-            //txtDtoSx.Text = "6348.6030";
-            //txtDtoCdb.Text = "246616.0330";
-            //ucEphXYZMain.SetXYZ("a", 1, (11265194.9906, 40486056.6399, -2055810.5412), Color.Red);
-            //ucEphXYZAdaj.SetXYZ("b", 1, (25525328.3455, 33539987.1755, -49504.0378), Color.Red);
-
-            //double tarLon = 43.065, tarLat = 11.519;
-            //double recLon = 45, recLat = 13;
+
+            //double tarLon = 122.88, tarLat = 31.29;
+            //double recLon = 118.5, recLat = 32.1;
+            //double refLon = 121, refLat = 30;
+            //double cdbLon = 122, cdbLat = 30;
+            //var refEcef = PhysicsHelper.GeoToEcef((refLon, refLat, 0));
             //var tarEcef = PhysicsHelper.GeoToEcef((tarLon, tarLat, 0));
             //var recEcef = PhysicsHelper.GeoToEcef((recLon, recLat, 0));
-            //var xl1 = (14074005d, 39760440d, -15578d);
-            //var xl2 = (17150792d, 38524581d, -27470d);
-            //var xl3 = (25371296d, 33674065d, -21642);
-
-            ////var xl1Ecef = (cg.MainX.Value, cg.MainY.Value, cg.MainZ.Value);
-            ////var xl2Ecef = (cg.Adja1X.Value, cg.Adja1Y.Value, cg.Adja1Z.Value);
+            //var cdbEcef = PhysicsHelper.GeoToEcef((cdbLon, cdbLat, 0));
+            //var xl1 = (-41338971.25, 6141819.55, 5504123.22);
             //var dt1 = PhysicsHelper.Dto(tarEcef, xl1, recEcef);
-            //var dt2 = PhysicsHelper.Dto(tarEcef, xl2, recEcef);
-            //var dt3 = PhysicsHelper.Dto(tarEcef, xl3, recEcef);
-
-            //var dto1 = (dt1 - dt2) * 1e6;
-            //var dto2 = (dt1 - dt3) * 1e6;
-            //var res=PosApi.X3_PosNoRef(new CgRes()
-            //{
-            //    Dto1 = dto1,
-            //    Dto2 = dto2,
-            //    Snr1 = 16,
-            //    Snr2 = 19,
-            //    MainCode = 1,
-            //    Adja1Code = 2,
-            //    Adja2Code = 3,
-            //    MainX = xl1.Item1,
-            //    MainY = xl1.Item2,
-            //    MainZ = xl1.Item3,
-            //    Adja1X = xl2.Item1,
-            //    Adja1Y = xl2.Item2,
-            //    Adja1Z = xl2.Item3,
-            //    Adja2X = xl3.Item1,
-            //    Adja2Y = xl3.Item2,
-            //    Adja2Z = xl3.Item3,
-            //}, new StationRes()
-            //{
-            //    SatTxLon = recLon,
-            //    SatTxLat = recLat,
-            //});
+            //var dt2 = PhysicsHelper.Dto(tarEcef, cdbEcef);
+            //var dto1 = dt1 - dt2;
+            //var dt3 = PhysicsHelper.Dto(refEcef, xl1, recEcef);
+            //var dto2 = dt3 - 0;
+
         }
 
 
+
         public bool CheckParam()
         {
             dxErrorProvider.ClearErrors();

+ 0 - 28
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -123,29 +123,6 @@ namespace XdCxRhDW.App.UserControl
                 return;
             }
 
-#warning 项目测试专用
-            //mapControl1.AddMapMenu("导入航迹", SvgHelper.CreateImport(), (double lon, double lat) =>
-            //{
-            //    Random r = new Random();
-            //    List<PosData> list = new List<PosData>();
-            //    DateTime dt = new DateTime(2024, 03, 18, 13, 42, 53, 125);
-            //    for (int i = 0; i < 185; i++)
-            //    {
-            //        list.Add(new PosData()
-            //        {
-            //            ColorKey = "航机目标",
-            //            //TODO 这里需要拿到一星一地定位结果导出,然后模拟一些满足定位经度的真实点位,暂时使用随机数
-            //            PosLon = r.Next(100, 130) + Math.Round(r.NextDouble(), 4),
-            //            PosLat = r.Next(11, 20) + Math.Round(r.NextDouble(), 4),
-            //            Confidence = 100,
-            //            SigTime = dt,
-            //        });
-            //        dt = dt.AddSeconds(1000).AddSeconds(i).AddMilliseconds(267);
-            //    }
-            //    mapControl1.AddPosItems(list);
-
-            //});
-
             OnSysSetingsChanged(SysConfig.Config);
 
             try
@@ -857,13 +834,8 @@ namespace XdCxRhDW.App.UserControl
             var cts = new CancellationTokenSource();
             listCts.Add(cts);
             var listPos = await searchPos(cts.Token);
-#warning 验收专用代码,统计地图加载耗时
-            Stopwatch sw = new Stopwatch();
-            sw.Start();
             this.gridHomePosRes.DataSource = listPos;
             this.mapControl1.SetPosDataSource(listPos);
-            sw.Stop();
-            Serilog.Log.Information($"地图加载{listPos.Count}个点耗时{sw.ElapsedMilliseconds}ms");
         }
         private async Task<List<ModelPosRes>> searchPos(CancellationToken ct = default)
         {

+ 0 - 3
XdCxRhDW.App/UserControl/X1D1GDOPParam.Designer.cs

@@ -195,9 +195,6 @@
             this.txtDtousErr1.Properties.AutoHeight = false;
             this.txtDtousErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
             new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "us", -1, false, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
-            this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
-            this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
-            this.txtDtousErr1.Properties.MaskSettings.Set("mask", "f");
             this.txtDtousErr1.Size = new System.Drawing.Size(477, 22);
             this.txtDtousErr1.StyleController = this.layoutControl1;
             this.txtDtousErr1.TabIndex = 6;

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

@@ -103,7 +103,8 @@
     <Compile Include="PosDto\X1D1PosDto.cs" />
     <Compile Include="PosDto\X2D1NoXlPosDto.cs" />
     <Compile Include="SvrStateDto.cs" />
-    <Compile Include="TaskHandleDto\X2D1HistoryTaskHandleDto.cs" />
+    <Compile Include="TaskHandleDto\X3NoRefTaskHandleDto.cs" />
+    <Compile Include="TaskHandleDto\X2D1NoRefTaskHandleDto.cs" />
     <Compile Include="TaskQueryResDto.cs" />
     <Compile Include="TaskSigDto.cs" />
     <Compile Include="XlCalcDto\XlImportDto.cs" />

+ 6 - 0
XdCxRhDw.Dto/GpuCgDto.cs

@@ -100,5 +100,11 @@ namespace XdCxRhDW.Dto
         /// 耗时(ms)
         /// </summary>
         public int TimeMs { get; set; }
+
+        /// <summary>
+        /// 54专用,避免样点转时间出现毫秒级误差
+        /// </summary>
+        [Obsolete]
+        public float TimeSeconds { get; set; }
     }
 }

+ 85 - 0
XdCxRhDw.Dto/TaskHandleDto/X2D1NoRefTaskHandleDto.cs

@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Dto
+{
+    /// <summary>
+    /// 两星一地无参处理模型
+    /// </summary>
+    public class X2D1NoRefTaskHandleDto
+    {
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        public EnumTaskTypeDto TaskType { get; set; }
+
+        /// <summary>
+        /// 任务ID
+        /// </summary>
+        public int ID { get; set; }
+
+        /// <summary>
+        /// 任务名称
+        /// </summary>
+        public string TaskName { get; set; }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime StartTime { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime EndTime { get; set; }
+
+        /// <summary>
+        /// 主星编号(在MySql中找不到卫星时使用此编号)
+        /// </summary>
+        public int MainSatCode { get; set; }
+
+        /// <summary>
+        /// 邻星编号(在MySql中找不到卫星时使用此编号)
+        /// </summary>
+        public int AdjaSatCode { get; set; }
+
+        /// <summary>
+        /// 日期目录格式(yyyy_MM_dd_HH等格式)
+        /// </summary>
+        public string DateDirFormat { get; set; }
+
+        /// <summary>
+        /// 采集文件的目录
+        /// </summary>
+        public string CapDir { get; set; }
+
+        /// <summary>
+        /// 要处理的信号
+        /// </summary>
+        public List<TaskSigDto> Sigs { get; set; }
+
+        /// <summary>
+        /// 采集站经度
+        /// </summary>
+        public double CapLon { get; set; }
+
+        /// <summary>
+        /// 采集站纬度
+        /// </summary>
+        public double CapLat { get; set; }
+
+        /// <summary>
+        /// 超短站经度
+        /// </summary>
+        public double CdbLon { get; set; }
+
+        /// <summary>
+        /// 超短站纬度
+        /// </summary>
+        public double CdbLat { get; set; }
+    }
+}

+ 3 - 2
XdCxRhDw.Dto/TaskHandleDto/X2D1HistoryTaskHandleDto.cs → XdCxRhDw.Dto/TaskHandleDto/X3NoRefTaskHandleDto.cs

@@ -8,9 +8,9 @@ using System.Threading.Tasks;
 namespace XdCxRhDW.Dto
 {
     /// <summary>
-    /// 两星一地无参处理模型
+    /// 三星无参处理模型
     /// </summary>
-    public class X2D1NoRefTaskHandleDto
+    public class X3NoRefTaskHandleDto
     {
         /// <summary>
         /// 任务类型
@@ -71,5 +71,6 @@ namespace XdCxRhDW.Dto
         /// 采集站纬度
         /// </summary>
         public double CapLat { get; set; }
+
     }
 }