Ver código fonte

添加低轨双星

wyq 1 ano atrás
pai
commit
c03a26dc18

+ 9 - 6
Service/Leo1SatTaskServer54/App.config

@@ -14,10 +14,10 @@
 		<add key="CapDir" value="D:\data1\AD"/>
 
 		<!--定位结果输出目录-->
-		<add key="PosResDir" value="D:\data1\PosRes"/>
+		<add key="PosResDir" value="D:\data\PosRes"/>
 
 		<!--状态上报目录-->
-		<add key="StateRptDir" value="D:\data1\StateRes"/>
+		<add key="StateRptDir" value="D:\data\StateRes"/>
 
 		<!--卫星及星历-->
 		<add key ="Time1SatInfo" value="40892,-41275189.6404,5820330.8446,6331022.0431,1,2,3"/>
@@ -27,11 +27,14 @@
 		<!--定位时差系数-->
 		<add key="PosDtoFactor" value="1"/>
 
-		<!--时差误差(单位:us)-->
-		<add key="DtoErrus" value="1"/>
+		<!--频差误差(单位:Hz)-->
+		<add key="DfoErr" value="0.01"/>
 
-		<!--星历误差(单位:m)-->
-		<add key="EphErrm" value="10000"/>
+		<!--星历位置误差(单位:m)-->
+		<add key="EphPosErr" value="10000"/>
+
+		<!--星历速度误差(单位:m/s)-->
+		<add key="EphVelErr" value="0.1"/>
 
 		<!--使用GPU执行参数估计=1 ,使用CPU执行参数估计=0-->
 		<add key="UseGpuCg" value="0"/>

+ 2 - 2
Service/Leo1SatTaskServer54/Controllers/LeoSatTaskProcessingController.cs → Service/Leo1SatTaskServer54/Controllers/LeoSat1TaskProcessingController.cs

@@ -14,14 +14,14 @@ namespace X1LeoTaskServer54.Controllers
     /// <summary>
     ///低轨单星任务处理接口
     /// </summary>
-    public class LeoSatTaskProcessingController : BaseController
+    public class LeoSat1TaskProcessingController : BaseController
     {
         /*******************
          * !!!不要在Controller中放业务逻辑的全局变量(每次调用Http接口Controller都可能是一个新的对象)
          * Controller主要就是调用Service层的东西。Service层执行业务逻辑和调用Repository层操作数据库
          * ********************/
         private readonly TaskService _service;
-        public LeoSatTaskProcessingController(TaskService service)
+        public LeoSat1TaskProcessingController(TaskService service)
         {
             _service = service;
         }

+ 57 - 39
Service/Leo1SatTaskServer54/Service/TaskService.cs

@@ -25,8 +25,9 @@ namespace X1LeoTaskServer54.Service
         double[] Time1XYZ, Time2XYZ, Time3XYZ;
         int PosDtoFactor;
         bool useGpuCg = false;
-        double DtoErrus;
-        double EphErrm;
+        double DfoErrHz;
+        double EphPosErrM;
+        double EphVelErr;
 
         public TaskService()
         {
@@ -43,10 +44,12 @@ namespace X1LeoTaskServer54.Service
             var PosDtoFactorstr = ConfigurationManager.AppSettings["PosDtoFactor"].Trim();
             int.TryParse(PosDtoFactorstr, out PosDtoFactor);
             if (PosDtoFactor == 0) PosDtoFactor = 1;
-            var DtoErrusstr = ConfigurationManager.AppSettings["DtoErrus"].Trim();
-            double.TryParse(DtoErrusstr, out DtoErrus);
-            var EphErrmstr = ConfigurationManager.AppSettings["EphErrm"].Trim();
-            double.TryParse(EphErrmstr, out EphErrm);
+            var DfoErrusstr = ConfigurationManager.AppSettings["DfoErr"].Trim();
+            double.TryParse(DfoErrusstr, out DfoErrHz);
+            var EphPosErrstr = ConfigurationManager.AppSettings["EphPosErr"].Trim();
+            double.TryParse(EphPosErrstr, out EphPosErrM);
+            var EphVelErrstr = ConfigurationManager.AppSettings["EphVelErr"].Trim();
+            double.TryParse(EphVelErrstr, out EphVelErr);
 
             string useGpuStr = ConfigurationManager.AppSettings["UseGpuCg"];
             if (useGpuStr != null && useGpuStr.Trim() == "1")
@@ -71,7 +74,7 @@ namespace X1LeoTaskServer54.Service
                     try
                     {
                         #region 第1步,读取需要的配置信息
-                     
+
                         if (!Directory.Exists(CapDir))
                         {
                             await StopTask(dto.ID, EnumTaskStopType.Error, $"AD采集目录[{CapDir}]不存在");
@@ -112,7 +115,7 @@ namespace X1LeoTaskServer54.Service
                         foreach (var groupFile in groupFiles)//每一组文件代表同一组可定位的三个不同时刻的采集文件
                         {
                             if (cts.IsCancellationRequested) break;
-                         
+
                             var first = groupFile.First();
                             LogHelper.Info($"【任务{dto.ID}】正在执行第{first.XDNo}组的采集文件");
 
@@ -127,25 +130,10 @@ namespace X1LeoTaskServer54.Service
                             {
                                 DateTime adTime = groupFile.First().AdTime;
                                 double freq = groupFile.First().FreqDownMHz;
-                                int No = groupFile.First().XDNo; 
+                                int No = groupFile.First().XDNo;
                                 var ch0File = group[0];
                                 var ch1File = group[1];
                                 var ch2File = group[2];
-                                if (ch0File == null)
-                                {
-                                    LogHelper.Warning($"【任务{dto.ID}】第{No}组{ch0File.AdTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-未找到第一时刻的信号文件,跳过此组数据");
-                                    return;
-                                }
-                                if (ch1File == null)
-                                {
-                                    LogHelper.Warning($"【任务{dto.ID}】第{No}组{ch1File.AdTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-未找到第二时刻的信号文件,跳过此组数据");
-                                    return;
-                                }
-                                if (ch2File == null)
-                                {
-                                    LogHelper.Warning($"【任务{dto.ID}】第{No}组{ch2File.AdTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-未找到第三时刻的信号文件,跳过此组数据");
-                                    return;
-                                }
                                 if (cts.IsCancellationRequested) return;
 
 
@@ -266,7 +254,7 @@ namespace X1LeoTaskServer54.Service
                                         var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosLeX1ParAsync", leoX1);
                                         if (result.code != 200)
                                         {
-                                             LogHelper.Error($"【任务{dto.ID}】第{No}组-{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz 第{i + 1}个突发定位异常.{result.msg}");
+                                            LogHelper.Error($"【任务{dto.ID}】第{No}组-{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz 第{i + 1}个突发定位异常.{result.msg}");
                                         }
                                         else
                                         {
@@ -278,6 +266,20 @@ namespace X1LeoTaskServer54.Service
                                                 posLon = 0;
                                                 posLat = 0;
                                             }
+                                            ErrorEllipseLeoX1Dto errdto = new ErrorEllipseLeoX1Dto()
+                                            {
+                                                MsEph = Time1XYZ,
+                                                NsEph1 = Time2XYZ,
+                                                NsEph2 = Time3XYZ,
+                                                SelectPoint = new double[3] { posLon, posLat,0 },
+                                                DfoErr=DfoErrHz,
+                                                EphPosErr=EphPosErrM,
+                                                EphVelErr=EphVelErr,
+                                                fu= leoX1.FreqUp,
+                                                Pe=0.5,
+                                                OutputErrPoint=false
+                                            };
+                                          var errRes =await  GetErrEllipseResDto(errdto, posLon,posLat);
                                             StringBuilder sb = new StringBuilder();
                                             sb.Append($"{leoX1.SigTime:yyyy}\t");
                                             sb.Append($"{leoX1.SigTime:MM}\t");
@@ -289,7 +291,7 @@ namespace X1LeoTaskServer54.Service
                                             sb.Append($"{leoX1.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,9:其它),
+                                            sb.Append($"{GetSignalType(deteResp.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其它),
                                             sb.Append($"{0:D4}\t");//目标序号
                                             sb.Append($"res\t");
                                             sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
@@ -304,14 +306,14 @@ namespace X1LeoTaskServer54.Service
                                             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($"{(long)errRes.LongRadius:D8}\t");//长轴m
+                                            sb.Append($"{(long)errRes.ShortRadius:D8}\t");//短轴m
+                                            sb.Append($"{(long)errRes.DipAngle:D7}\t");//倾角°
                                             sb.Append($"{data1.Count:D2}\t");//时隙属性
                                             sb.Append($"{1}\t");//所属卫星
-                                            sb.Append($"{950:D3}\t");//置信度
-                                            sb.Append($"{3}\t");//定位体制(星地=3)
-                                            sb.Append($"{1335:D12}");//符号速率bps  12个
+                                            sb.Append($"{100:D3}\t");//置信度
+                                            sb.Append($"{4}\t");//定位体制(星地=3)
+                                            sb.Append($"{(long)deteResp.data[i].ModRate.Value:D12}");//符号速率bps  12个
                                             sb.Append("\r\n");
                                             string resFile = Path.Combine(PosResDir, $"低轨单星定位结果_{posRes.SigTime:yyyyMMdd}.txt");
                                             File.AppendAllText(resFile, sb.ToString());
@@ -325,10 +327,10 @@ namespace X1LeoTaskServer54.Service
                                 sw.Stop();
                                 LogHelper.Info($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
 
-                                //删除DDC文件
-                                File.Delete(ch0File.File);
-                                File.Delete(ch1File.File);
-                                File.Delete(ch2File.File);
+
+                                /* File.Delete(ch0File.File);
+                                 File.Delete(ch1File.File);
+                                 File.Delete(ch2File.File);*/
                             }, cts.Token);
                             listTask.Add(task);
 
@@ -368,8 +370,9 @@ namespace X1LeoTaskServer54.Service
 
         }
 
-        private int GetSignalType(EnumSignalTypeDto modType)
+        private int GetSignalType(string modTypestr)
         {
+            EnumSignalTypeDto modType = modTypestr.GetEnumByDisplayName<EnumSignalTypeDto>();
 #warning 没有CPM调制方式
             //1:CPM,2:BPSK,4:QPSK,9:其他
             int signalType = 9;
@@ -383,6 +386,18 @@ namespace X1LeoTaskServer54.Service
             }
             return signalType;
         }
+
+        private async Task<ErrEllipseResDto> GetErrEllipseResDto(ErrorEllipseLeoX1Dto dto,double posLon,double posLat)
+        {
+            ErrEllipseResDto errRes = new ErrEllipseResDto();
+            if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
+            {
+               
+                var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipseX1Leo", dto);
+                errRes = errResRsp.data;
+            }
+            return errRes;
+        }
         public void Stop()
         {
             cts?.Cancel();
@@ -411,13 +426,16 @@ namespace X1LeoTaskServer54.Service
         {
             //20240409094240_ADC_ch02.dat
             var name = Path.GetFileNameWithoutExtension(file).ToUpper();
-            var arr = name.Split(new string[] { "_", "CH" }, StringSplitOptions.RemoveEmptyEntries);
+            var arr = name.Split(new string[] { "_", "CH", "C", "XD" }, StringSplitOptions.RemoveEmptyEntries);
             var time = DateTime.ParseExact(arr[0], "yyyyMMddHHmmss", null);
+
             AdFile adFile = new AdFile()
             {
                 File = file,
                 AdTime = time,
-                XDNo = Convert.ToInt32(arr[2]),
+                FreqDownMHz = Convert.ToDouble(arr[1]),
+                Fs = Convert.ToInt32(arr[2]),
+                XDNo = Convert.ToInt32(arr[4]),
             };
             return adFile;
         }

+ 1 - 1
Service/Leo1SatTaskServer54/X1LeoTaskServer54.csproj

@@ -119,7 +119,7 @@
       <Link>DxHelper\ChsLocalizer.cs</Link>
     </Compile>
     <Compile Include="AddIns\时隙获取\SlotHelper.cs" />
-    <Compile Include="Controllers\LeoSatTaskProcessingController.cs" />
+    <Compile Include="Controllers\LeoSat1TaskProcessingController.cs" />
     <Compile Include="HistoryFile.cs" />
     <Compile Include="LogHelper.cs" />
     <Compile Include="LogInfo.cs" />

+ 14 - 9
Service/Leo2SatTaskServer54/App.config

@@ -10,11 +10,8 @@
 		<!--定位平台Http地址-->
 		<add key="PosPlatformAddr" value="http://127.0.0.1:8091" />
 
-		<!--检测结果目录-->
-		<add key="DetectDir" value="D:\data\Detect"/>
-
 		<!--采集数据目录-->
-		<add key="CapDir" value="D:\data\AD"/>
+		<add key="CapDir" value="D:\data2\AD"/>
 
 		<!--定位结果输出目录-->
 		<add key="PosResDir" value="D:\data\PosRes"/>
@@ -23,17 +20,25 @@
 		<add key="StateRptDir" value="D:\data\StateRes"/>
 
 		<!--卫星及星历-->
-		<add key ="MainSatInfo" value="23467,-41275189.6404,5820330.8446,6331022.0431"/>
-		<add key ="Adja1SatInfo" value="40892,4694560.4826,41891872.2374,47531.3795"/>
-
+		<add key ="MainSatInfo" value="23467,-41275189.6404,5820330.8446,6331022.0431,1,2,3"/>
+		<add key ="Adja1SatInfo" value="40892,4694560.4826,41891872.2374,47531.3795,1,2,3"/>
+		<!--下行频点(MHz)-->
+		<add key ="TarFreqDown" value="252.05"/>
+		<add key ="RefFreqDown" value="352.05"/>
+		
 		<!--定位时差系数-->
 		<add key="PosDtoFactor" value="-1"/>
 
 		<!--时差误差(单位:us)-->
 		<add key="DtoErrus" value="1"/>
+		<!--频差误差(单位:Hz)-->
+		<add key="DfoErr" value="0.01"/>
+
+		<!--星历位置误差(单位:m)-->
+		<add key="EphPosErr" value="10000"/>
 
-		<!--星历误差(单位:m)-->
-		<add key="EphErrm" value="10000"/>
+		<!--星历速度误差(单位:m/s)-->
+		<add key="EphVelErr" value="0.1"/>
 
 		<!--使用GPU执行参数估计=1 ,使用CPU执行参数估计=0-->
 		<add key="UseGpuCg" value="0"/>

+ 2 - 2
Service/Leo2SatTaskServer54/Controllers/LeoSatTaskProcessingController.cs → Service/Leo2SatTaskServer54/Controllers/LeoSat2TaskProcessingController.cs

@@ -14,14 +14,14 @@ namespace X2LeoTaskServer54.Controllers
     /// <summary>
     ///低轨双星任务处理接口
     /// </summary>
-    public class LeoSatTaskProcessingController : BaseController
+    public class LeoSat2TaskProcessingController : BaseController
     {
         /*******************
          * !!!不要在Controller中放业务逻辑的全局变量(每次调用Http接口Controller都可能是一个新的对象)
          * Controller主要就是调用Service层的东西。Service层执行业务逻辑和调用Repository层操作数据库
          * ********************/
         private readonly TaskService _service;
-        public LeoSatTaskProcessingController(TaskService service)
+        public LeoSat2TaskProcessingController(TaskService service)
         {
             _service = service;
         }

+ 20 - 2
Service/Leo2SatTaskServer54/HistoryFile.cs

@@ -43,10 +43,28 @@ namespace X2LeoTaskServer54
         /// </summary>
         public DateTime AdTime { get; set; }
 
+
         /// <summary>
-        /// 通道
+        /// 分组
         /// </summary>
-        public int ChNo { get; set; }
+        public int XDNo { get; set; }
+
+        /// <summary>
+        /// 通道
+        /// </summary>
+        public int Ch { get; set; }
+
+        /// <summary>
+        /// 下行频点MHz
+        /// </summary>
+
+        public double FreqDownMHz { get; set; }
+
+        /// <summary>
+        /// 采样率Hz
+        /// </summary>
+
+        public int Fs { get; set; }
     }
 
     public class DDCFile

+ 384 - 53
Service/Leo2SatTaskServer54/Service/TaskService.cs

@@ -17,16 +17,22 @@ namespace X2LeoTaskServer54.Service
         private readonly string baseUrl;
         CancellationTokenSource cts;
 
-        string DetectDir;
         string CapDir;
         string PosResDir;
         string StateDir;
-        int MainSatCode, Adja1SatCode;
-        double[] MainSatXYZ, Adja1SatXYZ;
+        int MainSatCode;
+        int Adja1SatCode;
+        double[] MainXYZ, Adja1XYZ;
         int PosDtoFactor;
         bool useGpuCg = false;
+
+        double TarFreqDownMHz;
+        double RefFreqDownMHz;
+
         double DtoErrus;
-        double EphErrm;
+        double DfoErrHz;
+        double EphPosErrM;
+        double EphVelErr;
 
         public TaskService()
         {
@@ -37,30 +43,379 @@ namespace X2LeoTaskServer54.Service
             else
                 this.baseUrl = posPlatformAddr + "/api/";
 
-            DetectDir = ConfigurationManager.AppSettings["DetectDir"].Trim();
             CapDir = ConfigurationManager.AppSettings["CapDir"].Trim();
             PosResDir = ConfigurationManager.AppSettings["PosResDir"].Trim();
             StateDir = ConfigurationManager.AppSettings["StateRptDir"].Trim();
             var PosDtoFactorstr = ConfigurationManager.AppSettings["PosDtoFactor"].Trim();
             int.TryParse(PosDtoFactorstr, out PosDtoFactor);
             if (PosDtoFactor == 0) PosDtoFactor = 1;
+
+
+            var TarFreqDownstr = ConfigurationManager.AppSettings["TarFreqDown"].Trim();
+            double.TryParse(TarFreqDownstr, out TarFreqDownMHz);
+
+            var RefFreqDownstr = ConfigurationManager.AppSettings["RefFreqDown"].Trim();
+            double.TryParse(RefFreqDownstr, out RefFreqDownMHz);
+
+
             var DtoErrusstr = ConfigurationManager.AppSettings["DtoErrus"].Trim();
             double.TryParse(DtoErrusstr, out DtoErrus);
-            var EphErrmstr = ConfigurationManager.AppSettings["EphErrm"].Trim();
-            double.TryParse(EphErrmstr, out EphErrm);
+            var DfoErrusstr = ConfigurationManager.AppSettings["DfoErr"].Trim();
+            double.TryParse(DfoErrusstr, out DfoErrHz);
+            var EphPosErrstr = ConfigurationManager.AppSettings["EphPosErr"].Trim();
+            double.TryParse(EphPosErrstr, out EphPosErrM);
+            var EphVelErrstr = ConfigurationManager.AppSettings["EphVelErr"].Trim();
+            double.TryParse(EphVelErrstr, out EphVelErr);
 
             string useGpuStr = ConfigurationManager.AppSettings["UseGpuCg"];
             if (useGpuStr != null && useGpuStr.Trim() == "1")
                 useGpuCg = true;
         }
+
+        /// <summary>
+        /// 扫描 检测 参估 定位
+        /// </summary>
+        /// <param name="dto"></param>
         public void StartAsync(LeoSat2TaskHandleDto dto)
         {
             cts = new CancellationTokenSource();
-          
+            Task.Run(async () =>
+            {
+                LogHelper.Info($"【任务{dto.ID}】开始执行...");
+                LogHelper.Info($"【任务{dto.ID}】AD采集目录[{CapDir}]");
+                LogHelper.Info($"【任务{dto.ID}】状态上报输出目录[{StateDir}]");
+                //点击定位平台右上角查看接口可以在浏览器中查看平台提供的所有接口详细信息
+                while (!cts.IsCancellationRequested)
+                {
+                    try
+                    {
+                        #region 第1步,读取需要的配置信息
+
+                        if (!Directory.Exists(CapDir))
+                        {
+                            await StopTask(dto.ID, EnumTaskStopType.Error, $"AD采集目录[{CapDir}]不存在");
+                            return;
+                        }
+                        Directory.CreateDirectory(PosResDir);
+                        try
+                        {
+                            var mainInfo = ConfigurationManager.AppSettings["MainSatInfo"].Replace(",", ",").Trim();
+                            var adja1Info = ConfigurationManager.AppSettings["Adja1SatInfo"].Replace(",", ",").Trim();
+                            var arr1 = mainInfo.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
+                            var arr2 = adja1Info.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
+                            MainSatCode = Convert.ToInt32(arr1[0]);
+                            Adja1SatCode = Convert.ToInt32(arr2[0]);
+                            MainXYZ = GetEph(arr1);
+                            Adja1XYZ = GetEph(arr2);
+                        }
+                        catch
+                        {
+                            await StopTask(dto.ID, EnumTaskStopType.Error, $"任务处理服务配置文件卫星信息解析出错");
+                            return;
+                        }
+                        #endregion
+
+                        #region 第2步,扫描检测结果目录
+                        //同一个AD文件得到的不同频点的检测文件FlagNo相同
+                        var groupFiles = Directory.EnumerateFiles(CapDir, "*.dat", SearchOption.TopDirectoryOnly).Select(p => StringToAdFile(p))
+                        .GroupBy(m => m.XDNo).OrderBy(m => m.Key);
+
+                        if (!groupFiles.Any())
+                        {
+                            LogHelper.Info($"【任务{dto.ID}】等待扫描文件...");
+                            await Task.Delay(10000);
+                        }
+                        var listTask = new List<Task>();
+                        foreach (var groupFile in groupFiles)//每一组文件代表同一组可定位的三个不同时刻的采集文件
+                        {
+                            if (cts.IsCancellationRequested) break;
+
+                            var first = groupFile.First();
+                            LogHelper.Info($"【任务{dto.ID}】正在执行第{first.XDNo}组的采集文件");
+
+                            var group = groupFile.OrderBy(g => g.AdTime).ToArray();
+                            if (group.Count() != 4)
+                            {
+                                LogHelper.Warning($"【任务{dto.ID}】第{first.XDNo}组{first.AdTime:yyyyMMddHHmmss}时刻-信号{first.FreqDownMHz}MHz-未找到双星目标及参考的信号文件,跳过此组数据");
+                                return;
+                            }
+                            //group:同一组不同时刻的文件
+                            var task = Task.Run(async () =>
+                            {
+                                DateTime adTime = groupFile.First().AdTime;
+                                double freq = TarFreqDownMHz;
+                                int No = groupFile.First().XDNo;
+                                var tarInfo = group.Where(m => m.FreqDownMHz == TarFreqDownMHz);
+                                var refInfo = group.Where(m => m.FreqDownMHz == RefFreqDownMHz);
+
+                                var tarFileInfo1 = tarInfo.FirstOrDefault(t => t.Ch == 1);
+                                var tarFileInfo2 = tarInfo.FirstOrDefault(t => t.Ch == 2);
+                                var refFileInfo1 = refInfo.FirstOrDefault(t => t.Ch == 1);
+                                var refFileInfo2 = refInfo.FirstOrDefault(t => t.Ch == 2);
+                                if (tarFileInfo1 == null)
+                                {
+                                    LogHelper.Warning($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{TarFreqDownMHz}MHz-未找到信号文件,跳过此组数据");
+                                    return;
+                                }
+                                if (tarFileInfo2 == null)
+                                {
+                                    LogHelper.Warning($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{TarFreqDownMHz}MHz-未找到信号文件,跳过此组数据");
+                                    return;
+                                }
+                                if (refFileInfo1 == null)
+                                {
+                                    LogHelper.Warning($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{RefFreqDownMHz}MHz-未找到信号文件,跳过此组数据");
+                                    return;
+                                }
+                                if (refFileInfo2 == null)
+                                {
+                                    LogHelper.Warning($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{RefFreqDownMHz}MHz-未找到信号文件,跳过此组数据");
+                                    return;
+                                }
+                                if (cts.IsCancellationRequested) return;
+
+
+                                Stopwatch sw = new Stopwatch();
+                                sw.Start();
+                                string tarFile1 = await HttpHelper.UploadFileAsync(tarFileInfo1.File, baseUrl, token: cts.Token);//目标主星文件
+                                string tarFile2 = await HttpHelper.UploadFileAsync(tarFileInfo2.File, baseUrl, token: cts.Token);//目标邻1星文件
+                                string refFile1 = await HttpHelper.UploadFileAsync(refFileInfo1.File, baseUrl, token: cts.Token);//参考主星文件
+                                string refFile2 = await HttpHelper.UploadFileAsync(refFileInfo2.File, baseUrl, token: cts.Token);//参考邻1星文件
+
+                                DetectDto detectDto = new DetectDto()
+                                {
+                                    file1 = tarFile1,
+                                    dmcType = EnumSigCheckTypeDto.Ky5758,
+                                    fsHz = tarFileInfo1.Fs,
+                                    mergeRes = true,
+                                    SigProc = true,
+                                };
+
+                                var deteResp = await HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token);
+                                if (deteResp.code != 200)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz信号检测出错.{deteResp.msg}");
+                                    return;
+                                }
+                                var smps = deteResp.data.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
+
+                                LogHelper.Info($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-CPU参估开始,共{smps.Count}个突发...");
+                                var cgDto = new CpuCgMultiDto()
+                                {
+                                    dtCenter = 0,
+                                    dtRange = 40000,
+                                    file1 = tarFile1,
+                                    file2 = tarFile2,
+                                    samplingRate = tarFileInfo1.Fs,
+                                    smpPositions = smps,
+                                    snrThreshold = 15,
+                                };
+                                var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                if (result1.code != 200)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-目标主星邻1星CPU参估出错.{result1.msg}");
+                                    return;
+                                }
+                                var cpuCgDto = new CpuCgDto()
+                                {
+                                    dtCenter = 0,
+                                    dtRange = 2000,
+                                    file1 = refFile1,
+                                    file2 = refFile2,
+                                    samplingRate = tarFileInfo1.Fs,
+                                    smpStart = 0,
+                                    smpCount = 0,
+                                    snrThreshold = 15,
+                                };
+                                var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgCalc", cpuCgDto, token: cts.Token);
+                                sw.Stop();
+                                if (result2.code != 200)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-参考主星邻2星CPU参估出错.{result2.msg}");
+                                    return;
+                                }
+                                LogHelper.Info($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-CPU参估完成,耗时{sw.ElapsedMilliseconds}ms");
+                                var data1 = result1.data;
+                                var data2 = result2.data;
+                                if (data1.Count != cgDto.smpPositions.Count)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-参估结果个数和检测结果个数不匹配");
+                                    return;
+                                }
+                                if (data2.Count != 0)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-参考参估无结果");
+                                    return;
+                                }
+                                sw.Start();
+                                for (int i = 0; i < data1.Count; i++)
+                                {
+                                    try
+                                    {
+                                        if (cts.IsCancellationRequested) break;
+                                        LeoX2ParPosDto leoX2 = new LeoX2ParPosDto()
+                                        {
+                                            TaskID = dto.ID,
+                                            SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
+                                            MainCode = MainSatCode,
+                                            AdjaCode = Adja1SatCode,
+                                            MainX = MainXYZ[0],
+                                            MainY = MainXYZ[1],
+                                            MainZ = MainXYZ[2],
+                                            MainVx = MainXYZ[3],
+                                            MainVy = MainXYZ[4],
+                                            MainVz = MainXYZ[5],
+                                            AdjaX = Adja1XYZ[0],
+                                            AdjaY = Adja1XYZ[1],
+                                            AdjaZ = Adja1XYZ[2],
+                                            AdjaVx = Adja1XYZ[3],
+                                            AdjaVy = Adja1XYZ[4],
+                                            AdjaVz = Adja1XYZ[5],
+                                            Dto = PosDtoFactor * data1[i].Dt,
+                                            Dfo = data1[i].Df,
+                                            Snr = data1[i].Snr,
+                                            YbMainDto = 260000,
+                                            YbAdjaDto = 260000 + PosDtoFactor * data2[0].Dt,
+                                            YbMainDfo = 100,
+                                            YbAdjaDfo = 100 + data2[0].Df,
+                                            TarFreqUp = (tarFileInfo1.FreqDownMHz + 44) * 1e6,
+                                            RefFreqUp = (refFileInfo1.FreqDownMHz + 44) * 1e6,
+                                            SatTxLon = dto.CapLon,
+                                            SatTxLat = dto.CapLat,
+                                            TarFreqDown = tarFileInfo1.FreqDownMHz * 1e6,
+                                            RefFreqDown = refFileInfo1.FreqDownMHz * 1e6,
+                                            CheckRes = new CheckResDto()
+                                            {
+                                                FileName = Path.GetFileName(tarFileInfo1.File),
+                                                SmpStart = cgDto.smpPositions[i].smpStart,
+                                                SmpCount = cgDto.smpPositions[i].smpCount,
+                                                PosCheckType = EnumPosCheckTypeDto.Ky5758,
+                                            }
+                                        };
+                                        var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosLeX2ParAsync", leoX2);
+                                        if (result.code != 200)
+                                        {
+                                            LogHelper.Error($"【任务{dto.ID}】第{No}组-{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz 第{i + 1}个突发定位异常.{result.msg}");
+                                        }
+                                        else
+                                        {
+                                            var posRes = result.data;
+                                            double posLon = posRes.PosLon;
+                                            double posLat = posRes.PosLat;
+                                            if (leoX2.Snr == 0)
+                                            {
+                                                posLon = 0;
+                                                posLat = 0;
+                                            }
+                                            ErrorEllipseLeoX2Dto errdto = new ErrorEllipseLeoX2Dto()
+                                            {
+                                                MsEph = MainXYZ,
+                                                NsEph = Adja1XYZ,
+                                                RefGeod= new double[3] { dto.RefLon, dto.RefLat, 0 },
+                                                SelectPoint = new double[3] { posLon, posLat, 0 },
+                                                DtoErr=DtoErrus *1e-6,
+                                                DfoErr = DfoErrHz,
+                                                EphPosErr = EphPosErrM,
+                                                EphVelErr = EphVelErr,
+                                                fu1 = leoX2.TarFreqUp,
+                                                fu2=leoX2.RefFreqUp,
+                                                Pe = 0.5,
+                                                OutputErrPoint = false
+                                            };
+                                            var errRes = await GetErrEllipseResDto(errdto, posLon, posLat);
+                                            StringBuilder sb = new StringBuilder();
+                                            sb.Append($"{leoX2.SigTime:yyyy}\t");
+                                            sb.Append($"{leoX2.SigTime:MM}\t");
+                                            sb.Append($"{leoX2.SigTime:dd}\t");
+                                            sb.Append($"{leoX2.SigTime:HH}\t");
+                                            sb.Append($"{leoX2.SigTime:mm}\t");
+                                            sb.Append($"{leoX2.SigTime:ss}\t");
+                                            sb.Append($"{leoX2.SigTime:fff}\t");
+                                            sb.Append($"{leoX2.CheckRes.SmpCount * 1000 / tarFileInfo1.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($"{GetSignalType(deteResp.data[i].ModType)}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,9:其它),
+                                            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(leoX2.Dto * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(leoX2.Dfo * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(leoX2.Snr * 1e2):D6}\t");
+                                            sb.Append($"{Convert.ToInt64((leoX2.YbMainDto- leoX2.YbAdjaDto) * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64((leoX2.YbMainDfo - leoX2.YbAdjaDfo) * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(100 * 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($"{(long)errRes.LongRadius:D8}\t");//长轴m
+                                            sb.Append($"{(long)errRes.ShortRadius:D8}\t");//短轴m
+                                            sb.Append($"{(long)errRes.DipAngle:D7}\t");//倾角°
+                                            sb.Append($"{data1.Count:D2}\t");//时隙属性
+                                            sb.Append($"{1}\t");//所属卫星
+                                            sb.Append($"{100:D3}\t");//置信度
+                                            sb.Append($"{4}\t");//定位体制(星地=3)
+                                            sb.Append($"{(long)deteResp.data[i].ModRate.Value:D12}");//符号速率bps  12个
+                                            sb.Append("\r\n");
+                                            string resFile = Path.Combine(PosResDir, $"低轨双星定位结果_{posRes.SigTime:yyyyMMdd}.txt");
+                                            File.AppendAllText(resFile, sb.ToString());
+                                        }
+                                    }
+                                    catch (Exception ex)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-时隙位置{data1[i].Smpstart}定位异常", ex);
+                                    }
+                                }
+                                sw.Stop();
+                                LogHelper.Info($"【任务{dto.ID}】第{No}组{adTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-定位完成,耗时{sw.ElapsedMilliseconds}ms");
+
+
+                                /* File.Delete(ch0File.File);
+                                 File.Delete(ch1File.File);
+                                 File.Delete(ch2File.File);*/
+                            }, cts.Token);
+                            listTask.Add(task);
+
+                            await Task.WhenAll(listTask);
+                        }
+                        #endregion
+                    }
+                    catch (TaskCanceledException ex)
+                    {
+                        LogHelper.Warning($"【任务{dto.ID}】处理结束,用户手动终止", ex.InnerException);
+                    }
+                    catch (Exception 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);
+
+
+        }
+
+        private double[] GetEph(string[] strs)
+        {
+
+            var TimeXYZ = new double[6] { Convert.ToDouble(strs[1]),
+               Convert.ToDouble(strs[2]),
+               Convert.ToDouble(strs[3]),
+               Convert.ToDouble(strs[4]),
+               Convert.ToDouble(strs[5]),
+               Convert.ToDouble(strs[6]),
+           };
+            return TimeXYZ;
+
         }
 
-        private int GetSignalType(EnumSignalTypeDto modType)
+        private int GetSignalType(string modTypestr)
         {
+            EnumSignalTypeDto modType = modTypestr.GetEnumByDisplayName<EnumSignalTypeDto>();
 #warning 没有CPM调制方式
             //1:CPM,2:BPSK,4:QPSK,9:其他
             int signalType = 9;
@@ -74,6 +429,18 @@ namespace X2LeoTaskServer54.Service
             }
             return signalType;
         }
+
+        private async Task<ErrEllipseResDto> GetErrEllipseResDto(ErrorEllipseLeoX2Dto dto, double posLon, double posLat)
+        {
+            ErrEllipseResDto errRes = new ErrEllipseResDto();
+            if (posLon != 0 && posLat != 0 && posLon != 999 && posLat != 999)
+            {
+
+                var errResRsp = await HttpHelper.PostRequestAsync<ErrEllipseResDto>(baseUrl + "DetectCg/ErrorEllipseX2Leo", dto);
+                errRes = errResRsp.data;
+            }
+            return errRes;
+        }
         public void Stop()
         {
             cts?.Cancel();
@@ -97,61 +464,25 @@ namespace X2LeoTaskServer54.Service
             }
         }
 
-        private CheckResFile StringToCheckResFile(string file)
-        {
-            //YUFO_252.050MHz_20240409_1398.dat
-            string fileName = Path.GetFileNameWithoutExtension(file).ToUpper();
-            var arr = fileName.Split(new string[] { "_", "MHZ" }, StringSplitOptions.RemoveEmptyEntries);
-            var dayTime = DateTime.ParseExact(arr[2], "yyyyMMdd", null);
-            CheckResFile res = new CheckResFile()
-            {
-                DayTime = dayTime,
-                File = file,
-                FreqDownMHz = Convert.ToDouble(arr[1]),
-                FlagNo = Convert.ToInt64(arr[3]),
-            };
-            return res;
-        }
+
         private AdFile StringToAdFile(string file)
         {
             //20240409094240_ADC_ch02.dat
             var name = Path.GetFileNameWithoutExtension(file).ToUpper();
-            var arr = name.Split(new string[] { "_", "CH" }, StringSplitOptions.RemoveEmptyEntries);
+            var arr = name.Split(new string[] { "_", "CH", "C", "XD" }, StringSplitOptions.RemoveEmptyEntries);
             var time = DateTime.ParseExact(arr[0], "yyyyMMddHHmmss", null);
+
             AdFile adFile = new AdFile()
             {
                 File = file,
                 AdTime = time,
-                ChNo = Convert.ToInt32(arr[2]),
+                FreqDownMHz = Convert.ToDouble(arr[1]),
+                Fs = Convert.ToInt32(arr[2]),
+                Ch = Convert.ToInt32(arr[3]),
+                XDNo = Convert.ToInt32(arr[4]),
             };
             return adFile;
         }
-        public DDCFile StringToDDCFile(string file)
-        {
-            //20240409094240_252.025_C109375_ch0.dat
-            var name = Path.GetFileNameWithoutExtension(file).ToUpper();
-            var arr = name.Split(new string[] { "_", "MHz", "C", "H" }, StringSplitOptions.RemoveEmptyEntries);
-            var time = DateTime.ParseExact(arr[0], "yyyyMMddHHmmss", null);
-            double freqDown = Convert.ToDouble(arr[1]);
-            int fs = Convert.ToInt32(arr[2]);
-            int chNo = Convert.ToInt32(arr[3]);
-            return new DDCFile()
-            {
-                AdTime = time,
-                ChNo = chNo,
-                File = file,
-                FreqDownMHz = freqDown,
-                Fs = fs
-            };
-        }
-        public List<DDCFile> StringToDDCFile(List<string> files)
-        {
-            List<DDCFile> list = new List<DDCFile>();
-            foreach (var item in files)
-            {
-                list.Add(StringToDDCFile(item));
-            }
-            return list;
-        }
+
     }
 }

+ 1 - 1
Service/Leo2SatTaskServer54/X2LeoTaskServer54.csproj

@@ -118,7 +118,7 @@
     <Compile Include="..\..\XdCxRhDW.App\Localizer\ChsLocalizer.cs">
       <Link>DxHelper\ChsLocalizer.cs</Link>
     </Compile>
-    <Compile Include="Controllers\LeoSatTaskProcessingController.cs" />
+    <Compile Include="Controllers\LeoSat2TaskProcessingController.cs" />
     <Compile Include="HistoryFile.cs" />
     <Compile Include="LogHelper.cs" />
     <Compile Include="LogInfo.cs" />

BIN
XdCxRhDW.Api/AddIns/低轨/DLL_LHDW_0622.dll


+ 27 - 0
XdCxRhDW.Api/AddIns/低轨/DLL_LHDW_0622.h

@@ -0,0 +1,27 @@
+#ifndef _DLL_LHDWFUNCTION_H
+#define _DLL_LHDWFUNCTION_H
+#include "math.h"
+
+extern "C"  double * GDOP_Matrix_3X_2DTO(double *main_eph,double *neigh_eph1,double *neigh_eph2,double *Ref_Station_LLH,double *Zone,double step_len,
+	double dto_err,double eph_pos_err, int * Matrix_Size);
+
+extern "C"  double * Error_Ellipse_3X_2DTO(double *main_eph,double *neigh_eph1,double *neigh_eph2,double *Ref_Station_LLH,double *Select_Point,
+	double dto_err,double eph_pos_err,double Pe, int *len);
+
+extern "C"  double * GDOP_Matrix_2X1D(double *main_eph,double *neigh_eph, double *CDB_Station_LLH,double *Ref_Station_LLH,double *Zone,double step_len,
+	                               double dto_err,double eph_err, int * Matrix_Size);
+extern "C"  double * Error_Ellipse_2X1D(double *station1,double *station2, double *station3,double *Ref_Station_LLH,double *Select_Point,
+	                                    double dto_err,double eph_err,double Pe, int *len);
+
+extern "C"  double * GDOP_Matrix_DTFO(double *main_eph,double *neigh_eph,double *Ref_Station_LLH,double *Zone,double step_len,double dto_err,double dfo_err,
+	double eph_pos_err,double eph_vel_err,double fu1,double fu2, int * Matrix_Size);
+extern "C"  double * Error_Ellipse_DTFO(double *main_eph,double *neigh_eph,double *Ref_Station_LLH,double *Select_Point,double dto_err,double dfo_err,
+	                   double eph_pos_err,double eph_vel_err,double fu1,double fu2,double Pe, int *len);
+
+extern "C"  double * GDOP_Matrix_2DFO(double *main_eph,double *neigh_eph1,double *neigh_eph2,double *Zone,double step_len, double dfo_err,
+	                     double eph_pos_err,double eph_vel_err,double fu, int * Matrix_Size);
+extern "C"  double * Error_Ellipse_2DFO(double *main_eph,double *neigh_eph1,double *neigh_eph2,double *Select_Point,double dfo_err,double eph_pos_err,double eph_vel_err,double fu,double Pe, int *len);
+
+extern "C" void freeBuff(void *buf);
+
+#endif 

+ 1 - 1
XdCxRhDW.Api/AddIns/低轨/LeoErrorEllipseHelper.cs

@@ -211,7 +211,7 @@ namespace XdCxRhDW.Api
 
     public static class LeoErrorEllipseHelper
     {
-        private const string errorEllipseDll = @"AddIns\低轨\DLL_GD64.dll";
+        private const string errorEllipseDll = @"AddIns\低轨\DLL_LHDW_0622.dll";
         /// <summary>
         /// 低轨双星误差椭圆
         /// </summary>

+ 53 - 4
XdCxRhDW.Api/AddIns/低轨/LeoPosApi.cs

@@ -108,8 +108,8 @@ namespace XdCxRhDW.Api
             double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
             double[] res = new double[6];
             SingleStar_DFO_DW(mainSat, adjaSat1, adjaSat2, zone, cg.Dfo1.Value, cg.Dfo2.Value, upfreqHz, res);
-           
-            return res;
+
+            return ConvertToGeoPoint(res);
         }
 
         /// <summary>
@@ -132,8 +132,57 @@ namespace XdCxRhDW.Api
             var refDto = (cg.YbMainDto.Value - cg.YbAdja1Dto.Value) / 1e6;
             var refDfo = cg.YbMainDfo.Value - cg.YbAdja1Dfo.Value;
             TwoStar_DTFO_DW(mainSat, adjaSat1, refStation, zone, cg.Dto1.Value / 1e6, cg.Dfo1.Value, refDto, refDfo, upfreqHz1, upfreqHz2, res);
-            
-            return res;
+            return ConvertToGeoPoint(res);
+        }
+        private static double[] ConvertToGeoPoint(double[] res)
+        {
+            if (res == null || res.Length == 0)
+            {
+                return new double[7] { 999, 999, 0, 999, 999, 0, -1 };
+            }
+            else if (res.Length != 3 && res.Length != 6)
+            {
+                throw new Exception("定位结果解析异常,长度不是3或6");
+            }
+
+            var list = res.Select(p => Math.Round(p, 4)).ToArray();
+            if (list.Length == 3)
+            {
+                list = list.Concat(new double[4] { 999, 999, 0, -1 }).ToArray();
+            }
+            list[2] = list[5] = 0;//高度
+
+            if (double.IsNaN(list[0]) || double.IsNaN(list[1]))
+            {
+                list[0] = list[1] = 999;
+            }
+            if (double.IsNaN(list[3]) || double.IsNaN(list[4]))
+            {
+                list[3] = list[4] = 999;
+            }
+            if (list[0] < -180 || list[0] > 180)
+            {
+                list[0] = list[1] = 999;
+            }
+            else if (list[1] < -90 || list[1] > 90)
+            {
+                list[0] = list[1] = 999;
+            }
+            if (list[3] < -180 || list[3] > 180)
+            {
+                list[3] = list[4] = 999;
+            }
+            else if (list[4] < -90 || list[4] > 90)
+            {
+                list[3] = list[4] = 999;
+            }
+            if (list.Length == 6)
+            {
+                var listNew = list.ToList();
+                listNew.Add(-1);
+                list = listNew.ToArray();
+            }
+            return list;
         }
 
         public static IEnumerable<(double lon, double lat)> DtoLineLeoX2(DtoLineTwoStartOption opt)

+ 4 - 0
XdCxRhDW.Api/XdCxRhDW.Api.csproj

@@ -180,6 +180,10 @@
     <Content Include="AddIns\低轨\DLL_LHDW.h">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="AddIns\低轨\DLL_LHDW_0622.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="AddIns\低轨\DLL_LHDW_0622.h" />
     <Content Include="AddIns\低轨\DLL_XDXZ.dll">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>

+ 87 - 125
XdCxRhDW.App/EditForms/LeoX1ParamEditor.Designer.cs

@@ -50,8 +50,10 @@
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject15 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject16 = new DevExpress.Utils.SerializableAppearanceObject();
             this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.ucEphXYZAdja2 = new XdCxRhDW.App.UserControl.UCEphXYZParam();
+            this.ucEphXYZAdja1 = new XdCxRhDW.App.UserControl.UCEphXYZParam();
+            this.ucEphXYZMain = new XdCxRhDW.App.UserControl.UCEphXYZParam();
             this.txtDfo1 = new DevExpress.XtraEditors.ButtonEdit();
-            this.txtsatStation = new DevExpress.XtraEditors.TextEdit();
             this.btnOK = new DevExpress.XtraEditors.SimpleButton();
             this.btnXl = new DevExpress.XtraEditors.SimpleButton();
             this.sigTime = new DevExpress.XtraEditors.DateEdit();
@@ -62,26 +64,21 @@
             this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
             this.emptySpaceItem3 = new DevExpress.XtraLayout.EmptySpaceItem();
             this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.layoutControlItem14 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem17 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem19 = new DevExpress.XtraLayout.LayoutControlItem();
             this.itemSigTime = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem21 = new DevExpress.XtraLayout.LayoutControlItem();
             this.simpleLabelItem1 = new DevExpress.XtraLayout.SimpleLabelItem();
+            this.layoutControlItem16 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem20 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem25 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem23 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
             this.dxErrorProvider = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(this.components);
-            this.ucEphXYZAdja2 = new XdCxRhDW.App.UserControl.UCEphXYZParam();
-            this.ucEphXYZAdja1 = new XdCxRhDW.App.UserControl.UCEphXYZParam();
-            this.ucEphXYZMain = new XdCxRhDW.App.UserControl.UCEphXYZParam();
-            this.layoutControlItem16 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.layoutControlItem20 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.layoutControlItem25 = new DevExpress.XtraLayout.LayoutControlItem();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
             this.layoutControl1.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.txtDfo1.Properties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.txtsatStation.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.sigTime.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.sigTime.Properties.CalendarTimeProperties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtDfo2.Properties)).BeginInit();
@@ -90,19 +87,18 @@
             ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem3)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem17)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem19)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.itemSigTime)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem21)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.simpleLabelItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem16)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem20)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem25)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem23)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem6)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.dxErrorProvider)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem16)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem20)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem25)).BeginInit();
             this.SuspendLayout();
             // 
             // layoutControl1
@@ -111,7 +107,6 @@
             this.layoutControl1.Controls.Add(this.ucEphXYZAdja1);
             this.layoutControl1.Controls.Add(this.ucEphXYZMain);
             this.layoutControl1.Controls.Add(this.txtDfo1);
-            this.layoutControl1.Controls.Add(this.txtsatStation);
             this.layoutControl1.Controls.Add(this.btnOK);
             this.layoutControl1.Controls.Add(this.btnXl);
             this.layoutControl1.Controls.Add(this.sigTime);
@@ -128,30 +123,39 @@
             this.layoutControl1.TabIndex = 0;
             this.layoutControl1.Text = "layoutControl1";
             // 
+            // ucEphXYZAdja2
+            // 
+            this.ucEphXYZAdja2.Location = new System.Drawing.Point(12, 276);
+            this.ucEphXYZAdja2.Name = "ucEphXYZAdja2";
+            this.ucEphXYZAdja2.Size = new System.Drawing.Size(618, 86);
+            this.ucEphXYZAdja2.TabIndex = 15;
+            // 
+            // ucEphXYZAdja1
+            // 
+            this.ucEphXYZAdja1.Location = new System.Drawing.Point(12, 186);
+            this.ucEphXYZAdja1.Name = "ucEphXYZAdja1";
+            this.ucEphXYZAdja1.Size = new System.Drawing.Size(618, 86);
+            this.ucEphXYZAdja1.TabIndex = 14;
+            // 
+            // ucEphXYZMain
+            // 
+            this.ucEphXYZMain.Location = new System.Drawing.Point(12, 96);
+            this.ucEphXYZMain.Name = "ucEphXYZMain";
+            this.ucEphXYZMain.Size = new System.Drawing.Size(618, 86);
+            this.ucEphXYZMain.TabIndex = 13;
+            // 
             // txtDfo1
             // 
-            this.txtDfo1.Location = new System.Drawing.Point(192, 71);
+            this.txtDfo1.Location = new System.Drawing.Point(220, 71);
             this.txtDfo1.MaximumSize = new System.Drawing.Size(0, 20);
             this.txtDfo1.Name = "txtDfo1";
             this.txtDfo1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
             new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "Hz", -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.txtDfo1.Properties.NullValuePrompt = "必需";
-            this.txtDfo1.Size = new System.Drawing.Size(176, 20);
+            this.txtDfo1.Size = new System.Drawing.Size(197, 20);
             this.txtDfo1.StyleController = this.layoutControl1;
             this.txtDfo1.TabIndex = 6;
             // 
-            // txtsatStation
-            // 
-            this.txtsatStation.EditValue = "";
-            this.txtsatStation.Location = new System.Drawing.Point(14, 29);
-            this.txtsatStation.MaximumSize = new System.Drawing.Size(0, 20);
-            this.txtsatStation.Name = "txtsatStation";
-            this.txtsatStation.Properties.AutoHeight = false;
-            this.txtsatStation.Size = new System.Drawing.Size(174, 20);
-            this.txtsatStation.StyleController = this.layoutControl1;
-            this.txtsatStation.TabIndex = 10;
-            this.txtsatStation.ToolTip = "经度纬度之间用英文逗号隔开";
-            // 
             // btnOK
             // 
             this.btnOK.Location = new System.Drawing.Point(532, 373);
@@ -189,43 +193,43 @@
             this.sigTime.Properties.EditFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
             this.sigTime.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
             this.sigTime.Properties.MaskSettings.Set("mask", "yyyy-MM-dd HH:mm:ss");
-            this.sigTime.Size = new System.Drawing.Size(174, 20);
+            this.sigTime.Size = new System.Drawing.Size(202, 20);
             this.sigTime.StyleController = this.layoutControl1;
             this.sigTime.TabIndex = 9;
             // 
             // txtDfo2
             // 
-            this.txtDfo2.Location = new System.Drawing.Point(372, 71);
+            this.txtDfo2.Location = new System.Drawing.Point(421, 71);
             this.txtDfo2.MaximumSize = new System.Drawing.Size(0, 20);
             this.txtDfo2.Name = "txtDfo2";
             this.txtDfo2.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
             new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "Hz", -1, false, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
             this.txtDfo2.Properties.NullValuePrompt = "必需";
-            this.txtDfo2.Size = new System.Drawing.Size(256, 20);
+            this.txtDfo2.Size = new System.Drawing.Size(207, 20);
             this.txtDfo2.StyleController = this.layoutControl1;
             this.txtDfo2.TabIndex = 6;
             // 
             // txtTargetFreq
             // 
-            this.txtTargetFreq.Location = new System.Drawing.Point(374, 29);
+            this.txtTargetFreq.Location = new System.Drawing.Point(279, 29);
             this.txtTargetFreq.MaximumSize = new System.Drawing.Size(0, 20);
             this.txtTargetFreq.Name = "txtTargetFreq";
             this.txtTargetFreq.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
             new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "MHz", -1, false, true, false, editorButtonImageOptions3, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject9, serializableAppearanceObject10, serializableAppearanceObject11, serializableAppearanceObject12, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
             this.txtTargetFreq.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
-            this.txtTargetFreq.Size = new System.Drawing.Size(256, 20);
+            this.txtTargetFreq.Size = new System.Drawing.Size(351, 20);
             this.txtTargetFreq.StyleController = this.layoutControl1;
             this.txtTargetFreq.TabIndex = 6;
             // 
             // txtTargetDFreq
             // 
-            this.txtTargetDFreq.Location = new System.Drawing.Point(192, 29);
+            this.txtTargetDFreq.Location = new System.Drawing.Point(12, 29);
             this.txtTargetDFreq.MaximumSize = new System.Drawing.Size(0, 20);
             this.txtTargetDFreq.Name = "txtTargetDFreq";
             this.txtTargetDFreq.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
             new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "MHz", -1, false, true, false, editorButtonImageOptions4, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject13, serializableAppearanceObject14, serializableAppearanceObject15, serializableAppearanceObject16, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
             this.txtTargetDFreq.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
-            this.txtTargetDFreq.Size = new System.Drawing.Size(176, 20);
+            this.txtTargetDFreq.Size = new System.Drawing.Size(261, 20);
             this.txtTargetDFreq.StyleController = this.layoutControl1;
             this.txtTargetDFreq.TabIndex = 6;
             // 
@@ -247,7 +251,6 @@
             this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
             this.emptySpaceItem3,
             this.layoutControlItem2,
-            this.layoutControlItem14,
             this.layoutControlItem17,
             this.layoutControlItem19,
             this.itemSigTime,
@@ -276,32 +279,16 @@
             this.layoutControlItem2.Control = this.txtDfo1;
             this.layoutControlItem2.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
             this.layoutControlItem2.CustomizationFormText = "轨道经度";
-            this.layoutControlItem2.Location = new System.Drawing.Point(180, 42);
+            this.layoutControlItem2.Location = new System.Drawing.Point(208, 42);
             this.layoutControlItem2.MaxSize = new System.Drawing.Size(0, 42);
             this.layoutControlItem2.MinSize = new System.Drawing.Size(54, 42);
             this.layoutControlItem2.Name = "layoutControlItem2";
-            this.layoutControlItem2.Size = new System.Drawing.Size(180, 42);
+            this.layoutControlItem2.Size = new System.Drawing.Size(201, 42);
             this.layoutControlItem2.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             this.layoutControlItem2.Text = "第一时刻频差";
             this.layoutControlItem2.TextLocation = DevExpress.Utils.Locations.Top;
             this.layoutControlItem2.TextSize = new System.Drawing.Size(72, 14);
             // 
-            // layoutControlItem14
-            // 
-            this.layoutControlItem14.Control = this.txtsatStation;
-            this.layoutControlItem14.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
-            this.layoutControlItem14.CustomizationFormText = "参考站经纬度";
-            this.layoutControlItem14.Location = new System.Drawing.Point(0, 0);
-            this.layoutControlItem14.MaxSize = new System.Drawing.Size(0, 42);
-            this.layoutControlItem14.MinSize = new System.Drawing.Size(77, 42);
-            this.layoutControlItem14.Name = "layoutControlItem14";
-            this.layoutControlItem14.Size = new System.Drawing.Size(180, 42);
-            this.layoutControlItem14.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
-            this.layoutControlItem14.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
-            this.layoutControlItem14.Text = "接收站经纬度";
-            this.layoutControlItem14.TextLocation = DevExpress.Utils.Locations.Top;
-            this.layoutControlItem14.TextSize = new System.Drawing.Size(72, 14);
-            // 
             // layoutControlItem17
             // 
             this.layoutControlItem17.Control = this.btnOK;
@@ -342,7 +329,7 @@
             this.itemSigTime.MaxSize = new System.Drawing.Size(0, 42);
             this.itemSigTime.MinSize = new System.Drawing.Size(83, 42);
             this.itemSigTime.Name = "itemSigTime";
-            this.itemSigTime.Size = new System.Drawing.Size(180, 42);
+            this.itemSigTime.Size = new System.Drawing.Size(208, 42);
             this.itemSigTime.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             this.itemSigTime.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
             this.itemSigTime.Text = "信号时间";
@@ -354,11 +341,11 @@
             this.layoutControlItem21.Control = this.txtTargetDFreq;
             this.layoutControlItem21.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
             this.layoutControlItem21.CustomizationFormText = "轨道经度";
-            this.layoutControlItem21.Location = new System.Drawing.Point(180, 0);
+            this.layoutControlItem21.Location = new System.Drawing.Point(0, 0);
             this.layoutControlItem21.MaxSize = new System.Drawing.Size(0, 42);
             this.layoutControlItem21.MinSize = new System.Drawing.Size(54, 42);
             this.layoutControlItem21.Name = "layoutControlItem21";
-            this.layoutControlItem21.Size = new System.Drawing.Size(180, 42);
+            this.layoutControlItem21.Size = new System.Drawing.Size(265, 42);
             this.layoutControlItem21.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             this.layoutControlItem21.Text = "目标下行频点";
             this.layoutControlItem21.TextLocation = DevExpress.Utils.Locations.Top;
@@ -376,6 +363,42 @@
             this.simpleLabelItem1.Text = " ";
             this.simpleLabelItem1.TextSize = new System.Drawing.Size(72, 14);
             // 
+            // layoutControlItem16
+            // 
+            this.layoutControlItem16.Control = this.ucEphXYZMain;
+            this.layoutControlItem16.Location = new System.Drawing.Point(0, 84);
+            this.layoutControlItem16.MaxSize = new System.Drawing.Size(0, 90);
+            this.layoutControlItem16.MinSize = new System.Drawing.Size(190, 90);
+            this.layoutControlItem16.Name = "layoutControlItem16";
+            this.layoutControlItem16.Size = new System.Drawing.Size(622, 90);
+            this.layoutControlItem16.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem16.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem16.TextVisible = false;
+            // 
+            // layoutControlItem20
+            // 
+            this.layoutControlItem20.Control = this.ucEphXYZAdja1;
+            this.layoutControlItem20.Location = new System.Drawing.Point(0, 174);
+            this.layoutControlItem20.MaxSize = new System.Drawing.Size(0, 90);
+            this.layoutControlItem20.MinSize = new System.Drawing.Size(190, 90);
+            this.layoutControlItem20.Name = "layoutControlItem20";
+            this.layoutControlItem20.Size = new System.Drawing.Size(622, 90);
+            this.layoutControlItem20.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem20.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem20.TextVisible = false;
+            // 
+            // layoutControlItem25
+            // 
+            this.layoutControlItem25.Control = this.ucEphXYZAdja2;
+            this.layoutControlItem25.Location = new System.Drawing.Point(0, 264);
+            this.layoutControlItem25.MaxSize = new System.Drawing.Size(0, 90);
+            this.layoutControlItem25.MinSize = new System.Drawing.Size(190, 90);
+            this.layoutControlItem25.Name = "layoutControlItem25";
+            this.layoutControlItem25.Size = new System.Drawing.Size(622, 90);
+            this.layoutControlItem25.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem25.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem25.TextVisible = false;
+            // 
             // layoutControlItem3
             // 
             this.layoutControlItem3.Control = this.btnDfoCalc;
@@ -398,11 +421,11 @@
             this.layoutControlItem23.Control = this.txtTargetFreq;
             this.layoutControlItem23.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
             this.layoutControlItem23.CustomizationFormText = "轨道经度";
-            this.layoutControlItem23.Location = new System.Drawing.Point(360, 0);
+            this.layoutControlItem23.Location = new System.Drawing.Point(265, 0);
             this.layoutControlItem23.MaxSize = new System.Drawing.Size(0, 42);
             this.layoutControlItem23.MinSize = new System.Drawing.Size(54, 42);
             this.layoutControlItem23.Name = "layoutControlItem23";
-            this.layoutControlItem23.Size = new System.Drawing.Size(262, 42);
+            this.layoutControlItem23.Size = new System.Drawing.Size(357, 42);
             this.layoutControlItem23.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             this.layoutControlItem23.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 0, 0, 0);
             this.layoutControlItem23.Text = "目标上行频点";
@@ -414,11 +437,11 @@
             this.layoutControlItem6.Control = this.txtDfo2;
             this.layoutControlItem6.ControlAlignment = System.Drawing.ContentAlignment.TopLeft;
             this.layoutControlItem6.CustomizationFormText = "轨道经度";
-            this.layoutControlItem6.Location = new System.Drawing.Point(360, 42);
+            this.layoutControlItem6.Location = new System.Drawing.Point(409, 42);
             this.layoutControlItem6.MaxSize = new System.Drawing.Size(0, 42);
             this.layoutControlItem6.MinSize = new System.Drawing.Size(54, 42);
             this.layoutControlItem6.Name = "layoutControlItem6";
-            this.layoutControlItem6.Size = new System.Drawing.Size(262, 42);
+            this.layoutControlItem6.Size = new System.Drawing.Size(213, 42);
             this.layoutControlItem6.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             this.layoutControlItem6.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 2, 0, 0);
             this.layoutControlItem6.Text = "第二时刻频差";
@@ -429,63 +452,6 @@
             // 
             this.dxErrorProvider.ContainerControl = this;
             // 
-            // ucEphXYZAdja2
-            // 
-            this.ucEphXYZAdja2.Location = new System.Drawing.Point(12, 276);
-            this.ucEphXYZAdja2.Name = "ucEphXYZAdja2";
-            this.ucEphXYZAdja2.Size = new System.Drawing.Size(618, 86);
-            this.ucEphXYZAdja2.TabIndex = 15;
-            // 
-            // ucEphXYZAdja1
-            // 
-            this.ucEphXYZAdja1.Location = new System.Drawing.Point(12, 186);
-            this.ucEphXYZAdja1.Name = "ucEphXYZAdja1";
-            this.ucEphXYZAdja1.Size = new System.Drawing.Size(618, 86);
-            this.ucEphXYZAdja1.TabIndex = 14;
-            // 
-            // ucEphXYZMain
-            // 
-            this.ucEphXYZMain.Location = new System.Drawing.Point(12, 96);
-            this.ucEphXYZMain.Name = "ucEphXYZMain";
-            this.ucEphXYZMain.Size = new System.Drawing.Size(618, 86);
-            this.ucEphXYZMain.TabIndex = 13;
-            // 
-            // layoutControlItem16
-            // 
-            this.layoutControlItem16.Control = this.ucEphXYZMain;
-            this.layoutControlItem16.Location = new System.Drawing.Point(0, 84);
-            this.layoutControlItem16.MaxSize = new System.Drawing.Size(0, 90);
-            this.layoutControlItem16.MinSize = new System.Drawing.Size(190, 90);
-            this.layoutControlItem16.Name = "layoutControlItem16";
-            this.layoutControlItem16.Size = new System.Drawing.Size(622, 90);
-            this.layoutControlItem16.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
-            this.layoutControlItem16.TextSize = new System.Drawing.Size(0, 0);
-            this.layoutControlItem16.TextVisible = false;
-            // 
-            // layoutControlItem20
-            // 
-            this.layoutControlItem20.Control = this.ucEphXYZAdja1;
-            this.layoutControlItem20.Location = new System.Drawing.Point(0, 174);
-            this.layoutControlItem20.MaxSize = new System.Drawing.Size(0, 90);
-            this.layoutControlItem20.MinSize = new System.Drawing.Size(190, 90);
-            this.layoutControlItem20.Name = "layoutControlItem20";
-            this.layoutControlItem20.Size = new System.Drawing.Size(622, 90);
-            this.layoutControlItem20.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
-            this.layoutControlItem20.TextSize = new System.Drawing.Size(0, 0);
-            this.layoutControlItem20.TextVisible = false;
-            // 
-            // layoutControlItem25
-            // 
-            this.layoutControlItem25.Control = this.ucEphXYZAdja2;
-            this.layoutControlItem25.Location = new System.Drawing.Point(0, 264);
-            this.layoutControlItem25.MaxSize = new System.Drawing.Size(0, 90);
-            this.layoutControlItem25.MinSize = new System.Drawing.Size(190, 90);
-            this.layoutControlItem25.Name = "layoutControlItem25";
-            this.layoutControlItem25.Size = new System.Drawing.Size(622, 90);
-            this.layoutControlItem25.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
-            this.layoutControlItem25.TextSize = new System.Drawing.Size(0, 0);
-            this.layoutControlItem25.TextVisible = false;
-            // 
             // LeoX1ParamEditor
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
@@ -497,7 +463,6 @@
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
             this.layoutControl1.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.txtDfo1.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.txtsatStation.Properties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.sigTime.Properties.CalendarTimeProperties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.sigTime.Properties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtDfo2.Properties)).EndInit();
@@ -506,19 +471,18 @@
             ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem3)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem14)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem17)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem19)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.itemSigTime)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem21)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.simpleLabelItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem16)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem20)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem25)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem23)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem6)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.dxErrorProvider)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem16)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem20)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem25)).EndInit();
             this.ResumeLayout(false);
 
         }
@@ -533,8 +497,6 @@
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
         private DevExpress.XtraEditors.ButtonEdit txtDfo2;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
-        private DevExpress.XtraEditors.TextEdit txtsatStation;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem14;
         private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider;
         private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem3;
         private DevExpress.XtraEditors.SimpleButton btnOK;

+ 4 - 17
XdCxRhDW.App/EditForms/LeoX1ParamEditor.cs

@@ -58,11 +58,7 @@ namespace XdCxRhDW.App.EditForms
                 this.txtTargetFreq.EditValue = cg.TarFreqUp.HasValue ? cg.TarFreqUp.Value * 1e-6 : 0;
                 this.txtTargetDFreq.EditValue = cg.TarFreqDown.HasValue ? cg.TarFreqDown.Value * 1e-6 : 0;
             }
-            if (station != null)
-            {
-                this.txtsatStation.Text = $"{station.SatTxLon},{station.SatTxLat}";
-            }
-          
+           
 
         }
 
@@ -70,10 +66,7 @@ namespace XdCxRhDW.App.EditForms
         public bool CheckPosParam()
         {
             dxErrorProvider.ClearErrors();
-            if (!txtsatStation.CheckLonLat(dxErrorProvider, "接收站"))
-            {
-                return false;
-            }
+           
             if (!txtDfo1.CheckDouble(dxErrorProvider, "主邻1频差"))
             {
                 return false;
@@ -111,7 +104,6 @@ namespace XdCxRhDW.App.EditForms
             try
             {
 
-                var MsAnt = txtsatStation.GetLonLat();
 
                 var sigTime = this.sigTime.DateTime;
                 var DfoSx = Convert.ToDouble(this.txtDfo1.Text);
@@ -124,11 +116,7 @@ namespace XdCxRhDW.App.EditForms
                 var ns1Eph = ucEphXYZAdja1.EphParam();
                 var ns2Eph = ucEphXYZAdja2.EphParam();
 
-                var StationRes = new StationRes()
-                {
-                    SatTxLon = MsAnt[0],
-                    SatTxLat = MsAnt[1],
-                };
+               
 
                 var cgRes = new CgRes()
                 {
@@ -229,8 +217,7 @@ namespace XdCxRhDW.App.EditForms
             try
             {
 
-                var MsAnt = txtsatStation.GetLonLat();
-
+             
                 var sigTime = this.sigTime.DateTime;
                 var DfoSx = Convert.ToDouble(this.txtDfo1.Text);
                 var DfoSx1 = Convert.ToDouble(this.txtDfo2.Text);

+ 2 - 2
XdCxRhDW.Entity/EntityEnum.cs

@@ -96,9 +96,9 @@ namespace XdCxRhDW.Entity
         X3TwoDtoNoRef,
 
         /// <summary>
-        /// 低轨单星带参定位
+        /// 低轨单星定位
         /// </summary>
-        [Display(Name = "低轨单星带参定位")]
+        [Display(Name = "低轨单星定位")]
         X1Leo,
 
         /// <summary>