zoulei 1 년 전
부모
커밋
63c42df8a6

+ 5 - 0
Service/X2D1NoRefTaskServer/App.config

@@ -16,6 +16,11 @@
 		<!--定位时差系数-->
 		<add key="PosDtoFactor" value="1"/>
 
+		<!--采集文件名上的时间时区-->
+		<add key="UTCValue" value="3"/>
+
+		<!--卫星转发时延配置(微秒)-->
+		<add key="SatDelay" value="[40887,39034]-[2235,0]"/>
 	</appSettings>
 	<startup>
 		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />

+ 50 - 9
Service/X2D1NoRefTaskServer/Service/HistoryTaskService.cs

@@ -17,6 +17,7 @@ namespace X2D1NoRefTaskServer.Service
     {
         private readonly string baseUrl;
         CancellationTokenSource cts;
+        Dictionary<int, double> dicSatDelay = new Dictionary<int, double>();
         public HistoryTaskService()
         {
             var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();//like http://127.0.0.1:8091 or http://127.0.0.1:8091/
@@ -24,6 +25,25 @@ namespace X2D1NoRefTaskServer.Service
                 this.baseUrl = posPlatformAddr + "api/";
             else
                 this.baseUrl = posPlatformAddr + "/api/";
+
+            try
+            {
+                var satDelay = ConfigurationManager.AppSettings["SatDelay"]?.Trim();
+                if (!string.IsNullOrWhiteSpace(satDelay))
+                {
+                    var arr = satDelay.Split("-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+                    var sats = arr[0].Replace("[", "").Replace("]", "").Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+                    var delays = arr[1].Replace("[", "").Replace("]", "").Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+                    for (int i = 0; i < sats.Length; i++)
+                    {
+                        dicSatDelay.Add(Convert.ToInt32(sats[i]), Convert.ToDouble(delays[i]));
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception("解析配置文件SatDelay出错", ex);
+            }
         }
         public void StartAsync(X2D1HistoryTaskHandleDto dto)
         {
@@ -36,14 +56,21 @@ namespace X2D1NoRefTaskServer.Service
             LogHelper.Info($"【任务{dto.ID}】开始执行...");
             int.TryParse(ConfigurationManager.AppSettings["PosDtoFactor"], out int posDtoFactor);
             if (posDtoFactor == 0) posDtoFactor = 1;//定位时时差系数
-            bool canConnected = CanGetSatIdFromMySql();
-            if (!canConnected)
-            {
-                LogHelper.Warning("无法连接MySql查询卫星编号,将使用任务中提供的卫星");
-            }
+            LogHelper.Info($"【任务{dto.ID}】定位时差系数={posDtoFactor}");
+
+            bool parseSucceed = int.TryParse(ConfigurationManager.AppSettings["UTCValue"], out int utcValue);
+            if (!parseSucceed)
+                utcValue = 8;
+            int hours = 8 - utcValue;
+
             //点击定位平台右上角查看接口可以在浏览器中查看平台提供的所有接口详细信息
             Task.Run(async () =>
             {
+                bool canConnected = CanGetSatIdFromMySql();
+                if (!canConnected)
+                {
+                    LogHelper.Warning("无法连接MySql查询卫星编号,将使用任务中提供的卫星");
+                }
                 DateTime preTime = dto.StartTime;
                 int formatFlag;
                 if (string.IsNullOrWhiteSpace(dto.DateDirFormat))
@@ -56,6 +83,10 @@ namespace X2D1NoRefTaskServer.Service
                     //处理完一个目录后跳转到第二天的目录
                     formatFlag = 1;
                 }
+                else if (dto.DateDirFormat.ToUpper().EndsWith("\\HH"))//类似20241223\13的多级目录
+                {
+                    formatFlag = 3;
+                }
                 else if (dto.DateDirFormat.ToUpper().EndsWith("HH"))
                 {
                     //处理完一个目录后跳转到下一个小时的目录
@@ -71,7 +102,6 @@ namespace X2D1NoRefTaskServer.Service
                     string filesDir = dto.CapDir;
                     try
                     {
-
                         if (formatFlag != 0)
                         {
                             filesDir = Path.Combine(dto.CapDir, $"{preTime.ToString(dto.DateDirFormat)}");//yyyyMMdd
@@ -196,13 +226,14 @@ namespace X2D1NoRefTaskServer.Service
                                         X2D1NoXlNoParlPosDto x2D1 = new X2D1NoXlNoParlPosDto()
                                         {
                                             TaskID = dto.ID,
-                                            SigTime = minfo.CapTime.AddSeconds(data1[i].Smpstart / minfo.FsHz),
+                                            SigTime = minfo.CapTime.AddHours(hours).AddSeconds(data1[i].Smpstart / minfo.FsHz),
                                             MainCode = minfo.SatId,
                                             AdjaCode = ninfo.SatId,
-                                            SxDto = data1[i].Dt * posDtoFactor - data2[i].Dt * posDtoFactor,
+                                            SxDto = data1[i].Dt * posDtoFactor - data2[i].Dt * posDtoFactor
+                                                - GetSatDelay(minfo.SatId) + GetSatDelay(ninfo.SatId),
                                             SxDfo = data1[i].Df,
                                             SxSnr = data1[i].Snr,
-                                            XdDto = data1[i].Dt * posDtoFactor,
+                                            XdDto = data1[i].Dt * posDtoFactor - GetSatDelay(minfo.SatId),
                                             XdDfo = data2[i].Df,
                                             XdSnr = data2[i].Snr,
                                             SatTxLon = minfo.CapLon,
@@ -316,6 +347,8 @@ namespace X2D1NoRefTaskServer.Service
                     LogHelper.Warning($"【任务{dto.ID}】主星使用任务中的卫星[{dto.MainSatCode}]");
                     historyFile.SatId = dto.MainSatCode;
                 }
+                LogHelper.Info($"【任务{dto.ID}】主星{dto.MainSatCode}转发时延{GetSatDelay(dto.MainSatCode)}us");
+
             }
             else if (ch == 3)
             {
@@ -324,9 +357,17 @@ namespace X2D1NoRefTaskServer.Service
                     LogHelper.Warning($"【任务{dto.ID}】邻星使用任务中的卫星[{dto.AdjaSatCode}]");
                     historyFile.SatId = dto.AdjaSatCode;
                 }
+                LogHelper.Info($"【任务{dto.ID}】邻星{dto.AdjaSatCode}转发时延{GetSatDelay(dto.AdjaSatCode)}us");
             }
             return historyFile;
         }
+        double GetSatDelay(int satCode)
+        {
+            if (dicSatDelay.ContainsKey(satCode))
+                return dicSatDelay[satCode];
+            else
+                return 0;
+        }
         int GetSatId(double freqdown)
         {
             int satId = 0;

BIN
XdCxRhDW.Api/AddIns/GPU参估/XcorrGpu.exe


+ 5 - 1
XdCxRhDW.App/ExtensionsDev/MapControlEx.cs

@@ -2599,13 +2599,17 @@ public static class MapControlEx
                     }
                     else
                     {
+                        string suffix = ".png";
                         if (LayerType == EnumMapLayerType.SatMap)
+                        {
+                            suffix = ".jpg";
                             layerName = "NaturalEarthII";
+                        }
                         else if (LayerType == EnumMapLayerType.RoadMap)
                             layerName = "roadmap-final";
                         else
                             layerName = "overlay-final";
-                        imgUrl = $"{HttpServerAddr}/{layerName}/{zoomLevel}/{tilePositionX}/{tilePositionY}.jpg";
+                        imgUrl = $"{HttpServerAddr}/{layerName}/{zoomLevel}/{tilePositionX}/{tilePositionY}{suffix}";
 
 
                     }

+ 2 - 3
XdCxRhDW.App/ServerContext.cs

@@ -82,15 +82,14 @@ namespace XdCxRhDW.App
                 return list.FirstOrDefault(p => p.SvrType == type && p.SvrID == svrID);
             }
         }
-        public ModelSvr GetOne(EnumSvrType type)
+        public ModelSvr GetRandomOne(EnumSvrType type)
         {
             lock (this)
             {
-                return list.FirstOrDefault(p => p.SvrType == type);
+                return list.Where(p=>p.SvrType==type).OrderBy(p=>Guid.NewGuid()).FirstOrDefault();
             }
         }
 
-
         private void CheckSvrState()
         {
             Task.Run(() =>

+ 2 - 2
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -523,7 +523,7 @@ namespace XdCxRhDW.App.UserControl
                         if (tsk.PosType == EnumPosType.X2D1)
                         {
                             //下发任务
-                            var svtItem = ServerContext.Instance.GetOne(EnumSvrType.X2D1NoRefHistoryTask);
+                            var svtItem = ServerContext.Instance.GetRandomOne(EnumSvrType.X2D1NoRefHistoryTask);
                             if (svtItem == null)
                             {
                                 DxHelper.MsgBoxHelper.ShowWarning($"未找到注册的处理服务");
@@ -589,7 +589,7 @@ namespace XdCxRhDW.App.UserControl
                     if (tsk.TaskType == EnumTaskType.History)
                     {
                         //下发任务
-                        var svtItem = ServerContext.Instance.GetOne(EnumSvrType.X2D1NoRefHistoryTask);
+                        var svtItem = ServerContext.Instance.GetRandomOne(EnumSvrType.X2D1NoRefHistoryTask);
                         if (svtItem == null)
                         {
                             DxHelper.MsgBoxHelper.ShowWarning($"未找到注册的处理服务");