|
@@ -1,4 +1,6 @@
|
|
|
//using Org.BouncyCastle.Security;
|
|
|
+using DPP_YH_Core.Extensions;
|
|
|
+using Mysqlx.Datatypes;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Configuration;
|
|
@@ -28,7 +30,6 @@ namespace X2D1TaskServer.Service
|
|
|
_config.adjaSatDelay = AppConfigHelper.Get<double?>("AdjaSatDelay");
|
|
|
_config.checkFileType = AppConfigHelper.Get("CheckFileType", 0);
|
|
|
_config.threadCount = AppConfigHelper.Get("ThreadCount", 0).NotLessThanZero();
|
|
|
- _config.posDtoFactor = AppConfigHelper.Get("PosDtoFactor", 1);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
@@ -89,20 +90,20 @@ namespace X2D1TaskServer.Service
|
|
|
/// <param name="time"></param>
|
|
|
internal void ResetTime(int formatFlag, ref DateTime time)
|
|
|
{
|
|
|
- //if (formatFlag == 0)
|
|
|
- //{
|
|
|
- // time = DateTime.MaxValue;
|
|
|
- //}
|
|
|
- //else if (formatFlag == 1)
|
|
|
- //{
|
|
|
- // var newTime = new DateTime(time.Year, time.Month, time.Day, 0, 0, 0);
|
|
|
- // time = newTime.AddHours(24);
|
|
|
- //}
|
|
|
- //else
|
|
|
- //{
|
|
|
- // var newTime = new DateTime(time.Year, time.Month, time.Day, time.Hour, 0, 0);
|
|
|
- // time = newTime.AddHours(1);
|
|
|
- //}
|
|
|
+ if (formatFlag == 0)
|
|
|
+ {
|
|
|
+ time = DateTime.MaxValue;
|
|
|
+ }
|
|
|
+ else if (formatFlag == 1)
|
|
|
+ {
|
|
|
+ var newTime = new DateTime(time.Year, time.Month, time.Day, 0, 0, 0);
|
|
|
+ time = newTime.AddHours(24);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var newTime = new DateTime(time.Year, time.Month, time.Day, time.Hour, 0, 0);
|
|
|
+ time = newTime.AddHours(1);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -135,14 +136,13 @@ namespace X2D1TaskServer.Service
|
|
|
_ = LogUI.Error($"文件[{Path.GetFileName(filePath)}]格式异常,解析时间信息出错");
|
|
|
return null;
|
|
|
}
|
|
|
- //if (dateTime <= preTime)
|
|
|
- //{
|
|
|
- // //已处理,跳过此文件
|
|
|
- // return null;
|
|
|
- //}
|
|
|
+ if (dateTime <= preTime)
|
|
|
+ {
|
|
|
+ //已处理,跳过此文件
|
|
|
+ return null;
|
|
|
+ }
|
|
|
historyFile.CapTime = dateTime;
|
|
|
|
|
|
-
|
|
|
//采集通道
|
|
|
var chstr = strs.Skip(strs.Length - 2).Take(1).First();
|
|
|
int.TryParse(chstr, out int ch);
|
|
@@ -446,7 +446,15 @@ namespace X2D1TaskServer.Service
|
|
|
//检测
|
|
|
(bool deret, List<DetectResDto> deteRes) = await DetectCalc(cdbFile, mainFile, paramInfo, cts);
|
|
|
if (!deret) continue;
|
|
|
-
|
|
|
+ //参考信号模拟偶尔没有的情况
|
|
|
+ if (dto.ForTest && dto.FixedStationDto != null && dto.FixedStationDto.FreqUp == dinfo.FreqHz)
|
|
|
+ {
|
|
|
+ Random r = new Random();
|
|
|
+ if (r.Next(1, 10) > 5)
|
|
|
+ {
|
|
|
+ deteRes = deteRes.Take(1).ToList();
|
|
|
+ }
|
|
|
+ }
|
|
|
var smps = deteRes.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
|
|
|
var cgDto = new CpuCgMultiDto()
|
|
|
{
|
|
@@ -531,30 +539,27 @@ namespace X2D1TaskServer.Service
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- //执行参考信号
|
|
|
- List<DetectResDto> refDetects = await DoRefAsync(dto, paramInfo, deteRes, data1, data2, cts);
|
|
|
|
|
|
- //目标信号
|
|
|
- string msg = $"【任务{dto.ID}】目标信号[{paramInfo.TaskSig.FreqUp / 1e6:f3}MHz]{capTime:yyyyMMddHHmmss}时刻";
|
|
|
- bool beFindRef = false;
|
|
|
- if (refDetects != null && refDetects.Count > 0)//有符合规则的固定站参考信号
|
|
|
- {
|
|
|
- beFindRef = true;
|
|
|
- data1 = data1.Where(c => !refDetects.Any(r => r.Start == c.Smpstart && r.Length == c.Smplen)).ToList();
|
|
|
- data2 = data2.Where(c => !refDetects.Any(r => r.Start == c.Smpstart && r.Length == c.Smplen)).ToList();
|
|
|
- }
|
|
|
- //构建目标信号定位模型
|
|
|
- var tar = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, deteRes, data1, data2, cts, msg);
|
|
|
|
|
|
- if (beFindRef)//有符合规则的固定站参考信号就把目标信号添加目标缓存中
|
|
|
+ //执行参考信号
|
|
|
+ (var refDetects, bool needWait) = await DoRefAsync(dto, paramInfo, deteRes, data1, data2, cts);
|
|
|
+ if (!needWait)
|
|
|
{
|
|
|
- await AddTarCacheAsync(tar, msg);
|
|
|
+ //构建目标信号定位模型
|
|
|
+ string msg = $"【任务{dto.ID}】目标信号[{paramInfo.TaskSig.FreqUp / 1e6:f3}MHz]{capTime:yyyyMMddHHmmss}时刻,无参定位";
|
|
|
+ await LogUI.Info(msg);
|
|
|
+ var tar = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, deteRes, data1, data2, cts, msg);
|
|
|
+ await DoX2D1NoParPosAsync(tar, cts, msg, dto.ForTest);
|
|
|
}
|
|
|
- else//其他都执行原有的无参流程
|
|
|
+ else
|
|
|
{
|
|
|
- await DoX2D1NoParPosAsync(tar, paramInfo.Minfo.CapTime, cts, msg);
|
|
|
+ data1 = data1.Where(c => !refDetects.Any(r => r.Start == c.Smpstart && r.Length == c.Smplen)).ToList();
|
|
|
+ data2 = data2.Where(c => !refDetects.Any(r => r.Start == c.Smpstart && r.Length == c.Smplen)).ToList();
|
|
|
+ string msg = $"【任务{dto.ID}】目标信号[{paramInfo.TaskSig.FreqUp / 1e6:f3}MHz]{capTime:yyyyMMddHHmmss}时刻,等待参考";
|
|
|
+ await LogUI.Info(msg);
|
|
|
+ var tar = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, deteRes, data1, data2, cts, msg);
|
|
|
+ await AddTarCacheAsync(tar, msg);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
catch (TaskCanceledException)
|
|
|
{
|
|
@@ -574,7 +579,7 @@ namespace X2D1TaskServer.Service
|
|
|
}
|
|
|
|
|
|
|
|
|
- private List<X2D1NoXlNoParlPosDto> BuildX2D1NoXlNoParlPosDto(X2D1TaskHandleDto dto, BaseParamInfo paramInfo, List<DetectResDto> deteRes, List<CpuCgResDto> data1, List<CpuCgResDto> data2, CancellationTokenSource cts, string msg)
|
|
|
+ private List<X2D1NoXlNoParlPosDto> BuildX2D1NoXlNoParlPosDto(X2D1TaskHandleDto dto, BaseParamInfo paramInfo, List<DetectResDto> deteRes, List<CpuCgResDto> data1, List<CpuCgResDto> data2, CancellationTokenSource cts, string msg, string target = null)
|
|
|
{
|
|
|
int fixedStationId = dto.FixedStationDto != null ? dto.FixedStationDto.FixedStationId : 0;
|
|
|
List<X2D1NoXlNoParlPosDto> list = new List<X2D1NoXlNoParlPosDto>();
|
|
@@ -599,7 +604,8 @@ namespace X2D1TaskServer.Service
|
|
|
CdbTxLat = dto.CdbLat,
|
|
|
FreqDown = paramInfo.Minfo.FreqHz,
|
|
|
FreqUp = paramInfo.Dinfo.FreqHz,
|
|
|
- FixedStationId = fixedStationId,
|
|
|
+ Target = target,
|
|
|
+ CalcConfidence = true,
|
|
|
CheckRes = new CheckResDto()
|
|
|
{
|
|
|
FileName = Path.GetFileName(paramInfo.Dinfo.FilePath),
|
|
@@ -618,19 +624,19 @@ namespace X2D1TaskServer.Service
|
|
|
//卫星转发某些频点可能有时延,无参定位由于不能抵消需要减去这个时延
|
|
|
if (_config.checkFileType == 0)
|
|
|
{
|
|
|
- x2D1.SxDto = data1[i].Dt * _config.posDtoFactor - data2[i].Dt * _config.posDtoFactor - paramInfo.Delay1.Value + paramInfo.Delay2.Value;
|
|
|
+ x2D1.SxDto = data1[i].Dt - data2[i].Dt - paramInfo.Delay1.Value + paramInfo.Delay2.Value;
|
|
|
x2D1.SxDfo = data1[i].Df - data2[i].Df;
|
|
|
x2D1.SxSnr = (data1[i].Snr + data2[i].Snr) / 2;
|
|
|
- x2D1.XdDto = data1[i].Dt * _config.posDtoFactor - paramInfo.Delay1.Value;
|
|
|
+ x2D1.XdDto = data1[i].Dt - paramInfo.Delay1.Value;
|
|
|
x2D1.XdDfo = data1[i].Df;
|
|
|
x2D1.XdSnr = data1[i].Snr;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- x2D1.SxDto = data2[i].Dt * _config.posDtoFactor - paramInfo.Delay1.Value + paramInfo.Delay2.Value;
|
|
|
+ x2D1.SxDto = data2[i].Dt - paramInfo.Delay1.Value + paramInfo.Delay2.Value;
|
|
|
x2D1.SxDfo = data2[i].Df;
|
|
|
x2D1.SxSnr = data2[i].Snr;
|
|
|
- x2D1.XdDto = data1[i].Dt * _config.posDtoFactor - paramInfo.Delay1.Value;
|
|
|
+ x2D1.XdDto = data1[i].Dt - paramInfo.Delay1.Value;
|
|
|
x2D1.XdDfo = data1[i].Df;
|
|
|
x2D1.XdSnr = data1[i].Snr;
|
|
|
}
|
|
@@ -645,7 +651,7 @@ namespace X2D1TaskServer.Service
|
|
|
return list;
|
|
|
}
|
|
|
Random r = new Random();
|
|
|
- private async Task DoX2D1NoParPosAsync(List<X2D1NoXlNoParlPosDto> x2D1s, DateTime capTime, CancellationTokenSource cts, string msg)
|
|
|
+ private async Task DoX2D1NoParPosAsync(List<X2D1NoXlNoParlPosDto> x2D1s, CancellationTokenSource cts, string msg, bool forTest)
|
|
|
{
|
|
|
|
|
|
foreach (var x2D1 in x2D1s)
|
|
@@ -653,68 +659,77 @@ namespace X2D1TaskServer.Service
|
|
|
try
|
|
|
{
|
|
|
if (cts.IsCancellationRequested) break;
|
|
|
- //var result = await HttpHelper.PostRequestAsync<PosResDto>(_config.baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1);
|
|
|
-
|
|
|
- #region 测试代码
|
|
|
- X2D1NoParPosDto dto = new X2D1NoParPosDto()
|
|
|
+ if (forTest)
|
|
|
{
|
|
|
- AdjaCode = x2D1.AdjaCode,
|
|
|
- SxDto = x2D1.SxDto,
|
|
|
- SatTxLat = x2D1.SatTxLat,
|
|
|
- AdjaVX = 0,
|
|
|
- AdjaVY = 0,
|
|
|
- AdjaVZ = 0,
|
|
|
- MainVX = 0,
|
|
|
- MainVY = 0,
|
|
|
- MainVZ = 0,
|
|
|
- MainX = 10401572.0412,
|
|
|
- MainY = 40762347.5788,
|
|
|
- MainZ = 2311671.1075,
|
|
|
- AdjaX = 25526808.8297,
|
|
|
- AdjaY = 33541855.6479,
|
|
|
- AdjaZ = 65652.2217,
|
|
|
- CalcConfidence = x2D1.CalcConfidence,
|
|
|
- CdbTxLat = x2D1.CdbTxLat,
|
|
|
- CdbTxLon = x2D1.CdbTxLon,
|
|
|
- CheckRes = x2D1.CheckRes,
|
|
|
- FreqDown = x2D1.FreqDown,
|
|
|
- FreqUp = x2D1.FreqUp,
|
|
|
- MainCode = x2D1.MainCode,
|
|
|
- SatTxLon = x2D1.SatTxLon,
|
|
|
- SigTime = x2D1.SigTime,
|
|
|
- SxDfo = x2D1.SxDfo,
|
|
|
- SxSnr = x2D1.SxSnr,
|
|
|
- TaskID = x2D1.TaskID,
|
|
|
- TheoryDfoCalc = x2D1.TheoryDfoCalc,
|
|
|
- XdDfo = x2D1.XdDfo,
|
|
|
- XdDto = x2D1.XdDto,
|
|
|
- XdSnr = x2D1.XdSnr,
|
|
|
+ X2D1NoParPosDto dto2 = new X2D1NoParPosDto()
|
|
|
+ {
|
|
|
+ AdjaCode = x2D1.AdjaCode,
|
|
|
+ SxDto = x2D1.SxDto,
|
|
|
+ SatTxLat = x2D1.SatTxLat,
|
|
|
+ AdjaVX = 0,
|
|
|
+ AdjaVY = 0,
|
|
|
+ AdjaVZ = 0,
|
|
|
+ MainVX = 0,
|
|
|
+ MainVY = 0,
|
|
|
+ MainVZ = 0,
|
|
|
+ MainX = 10401572.0412,
|
|
|
+ MainY = 40762347.5788,
|
|
|
+ MainZ = 2311671.1075,
|
|
|
+ AdjaX = 25526808.8297,
|
|
|
+ AdjaY = 33541855.6479,
|
|
|
+ AdjaZ = 65652.2217,
|
|
|
+ CalcConfidence = x2D1.CalcConfidence,
|
|
|
+ CdbTxLat = x2D1.CdbTxLat,
|
|
|
+ CdbTxLon = x2D1.CdbTxLon,
|
|
|
+ CheckRes = x2D1.CheckRes,
|
|
|
+ FreqDown = x2D1.FreqDown,
|
|
|
+ FreqUp = x2D1.FreqUp,
|
|
|
+ MainCode = x2D1.MainCode,
|
|
|
+ SatTxLon = x2D1.SatTxLon,
|
|
|
+ SigTime = x2D1.SigTime,
|
|
|
+ SxDfo = x2D1.SxDfo,
|
|
|
+ SxSnr = x2D1.SxSnr,
|
|
|
+ TaskID = x2D1.TaskID,
|
|
|
+ TheoryDfoCalc = x2D1.TheoryDfoCalc,
|
|
|
+ XdDfo = x2D1.XdDfo,
|
|
|
+ XdDto = x2D1.XdDto,
|
|
|
+ XdSnr = x2D1.XdSnr,
|
|
|
+ Target = "固定站",
|
|
|
|
|
|
- };
|
|
|
- dto.SatTxLon = 43;
|
|
|
- dto.SatTxLat = 11.57;
|
|
|
- dto.CdbTxLon = 43;
|
|
|
- dto.CdbTxLat = 11.57;
|
|
|
- var mainEcef = (dto.MainX, dto.MainY, dto.MainZ);
|
|
|
- var adjaEcef = (dto.AdjaX, dto.AdjaY, dto.AdjaZ);
|
|
|
- var lon = r.Next(38, 48) + Math.Round(r.NextDouble(), 3);
|
|
|
- var lat = r.Next(7, 16) + Math.Round(r.NextDouble(), 3);
|
|
|
- var tarEcef = PhysicsHelper.GeoToEcef((lon, lat, 0));
|
|
|
- var recEcef = PhysicsHelper.GeoToEcef((dto.SatTxLon, dto.SatTxLat, 0));
|
|
|
- var d1 = PhysicsHelper.Dto(tarEcef, mainEcef, recEcef);
|
|
|
- var d2 = PhysicsHelper.Dto(tarEcef, adjaEcef, recEcef);
|
|
|
- var d3 = PhysicsHelper.Dto(tarEcef, recEcef);
|
|
|
- var dto1 = (d1 - d2) * 1e6 + r.Next(-50, 51);
|
|
|
- var dto2 = (d1 - d3) * 1e6 + r.Next(-50, 51);
|
|
|
- dto.SxDto = Math.Round(dto1, 3);
|
|
|
- dto.XdDto = Math.Round(dto2, 3);
|
|
|
- var result = await HttpHelper.PostRequestAsync<PosResDto>(_config.baseUrl + "Pos/PosX2D1NoParAsync", dto);
|
|
|
- #endregion
|
|
|
-
|
|
|
- if (result.code != 200)
|
|
|
+ };
|
|
|
+ dto2.SatTxLon = 43;
|
|
|
+ dto2.SatTxLat = 11.57;
|
|
|
+ dto2.CdbTxLon = 43;
|
|
|
+ dto2.CdbTxLat = 11.57;
|
|
|
+ var mainEcef = (dto2.MainX, dto2.MainY, dto2.MainZ);
|
|
|
+ var adjaEcef = (dto2.AdjaX, dto2.AdjaY, dto2.AdjaZ);
|
|
|
+ var lon = 42.5;
|
|
|
+ var lat = 11.5;
|
|
|
+ var tarEcef = PhysicsHelper.GeoToEcef((lon, lat, 0));
|
|
|
+ var recEcef = PhysicsHelper.GeoToEcef((dto2.SatTxLon, dto2.SatTxLat, 0));
|
|
|
+ var d1 = PhysicsHelper.Dto(tarEcef, mainEcef, recEcef);
|
|
|
+ var d2 = PhysicsHelper.Dto(tarEcef, adjaEcef, recEcef);
|
|
|
+ var d3 = PhysicsHelper.Dto(tarEcef, recEcef);
|
|
|
+ var dto1 = (d1 - d2) * 1e6 + r.Next(-50, 51);
|
|
|
+ var dto22 = (d1 - d3) * 1e6 + r.Next(-50, 51);
|
|
|
+ dto2.SxDto = Math.Round(dto1, 3);
|
|
|
+ dto2.XdDto = Math.Round(dto22, 3);
|
|
|
+
|
|
|
+ var result = await HttpHelper.PostRequestAsync<PosResDto>(_config.baseUrl + "Pos/PosX2D1NoParAsync", dto2);
|
|
|
+ if (result.code != 200)
|
|
|
+ {
|
|
|
+ await LogUI.Error($"{msg},{x2D1.SigTime:yyyyMMddHHmmss}时刻定位异常.{result.msg}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- await LogUI.Error($"{msg},{x2D1.SigTime:yyyyMMddHHmmss}时刻定位异常.{result.msg}");
|
|
|
+ var result = await HttpHelper.PostRequestAsync<PosResDto>(_config.baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1);
|
|
|
+ if (result.code != 200)
|
|
|
+ {
|
|
|
+ await LogUI.Error($"{msg},{x2D1.SigTime:yyyyMMddHHmmss}时刻定位异常.{result.msg}");
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
@@ -758,7 +773,7 @@ namespace X2D1TaskServer.Service
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
- /// 做参考信号
|
|
|
+ /// 返回参考突发集合
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <param name="paramInfo"></param>
|
|
@@ -767,31 +782,28 @@ namespace X2D1TaskServer.Service
|
|
|
/// <param name="cg2"></param>
|
|
|
/// <param name="cts"></param>
|
|
|
/// <returns></returns>
|
|
|
- private async Task<List<DetectResDto>> DoRefAsync(X2D1TaskHandleDto dto, BaseParamInfo paramInfo, List<DetectResDto> detects, List<CpuCgResDto> cg1, List<CpuCgResDto> cg2, CancellationTokenSource cts)
|
|
|
+ private async Task<Tuple<List<DetectResDto>, bool>> DoRefAsync(X2D1TaskHandleDto dto, BaseParamInfo paramInfo, List<DetectResDto> detects, List<CpuCgResDto> cg1, List<CpuCgResDto> cg2, CancellationTokenSource cts)
|
|
|
{
|
|
|
- bool beRef = false;
|
|
|
-
|
|
|
+ List<DetectResDto> refDetects = new List<DetectResDto>();
|
|
|
//没有固定站时 做无参
|
|
|
if (dto.FixedStationDto == null)
|
|
|
{
|
|
|
- return null;
|
|
|
+ return Tuple.Create(refDetects, false);
|
|
|
}
|
|
|
//检测下行信号 做无参
|
|
|
if (_config.checkFileType != 0)
|
|
|
{
|
|
|
- return null;
|
|
|
+ return Tuple.Create(refDetects, false);
|
|
|
}
|
|
|
+
|
|
|
//过滤不是固定站的频点
|
|
|
if (dto.FixedStationDto.FreqUp != paramInfo.TaskSig.FreqUp)
|
|
|
{
|
|
|
- return null;
|
|
|
- }
|
|
|
- if (dto.FixedStationDto != null && _config.checkFileType == 0)
|
|
|
- {
|
|
|
- beRef = true;
|
|
|
+ return Tuple.Create(refDetects, true);
|
|
|
+ //return null;
|
|
|
}
|
|
|
+
|
|
|
//获取满足固定站条件的参考信号
|
|
|
- List<DetectResDto> refDetects = new List<DetectResDto>();
|
|
|
for (int i = 0; i < detects.Count; i++)
|
|
|
{
|
|
|
if (i + 1 == detects.Count)
|
|
@@ -813,9 +825,8 @@ namespace X2D1TaskServer.Service
|
|
|
if (refDetects.Count == 0)
|
|
|
{
|
|
|
await SendZeroRefCacheAsync(dto, capTime, msg);
|
|
|
- beRef = false;
|
|
|
+ return Tuple.Create(refDetects, true);
|
|
|
}
|
|
|
- if (!beRef) return null;
|
|
|
|
|
|
await LogUI.Info($"【任务{dto.ID}】参考信号[{dto.FixedStationDto.FreqUp / 1e6:f3}MHz],{capTime:yyyyMMddHHmmss}时刻{_config.checkFileTypeStr}检测完成,共{refDetects.Count}个时隙");
|
|
|
var smps = refDetects.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
|
|
@@ -825,41 +836,66 @@ namespace X2D1TaskServer.Service
|
|
|
{
|
|
|
await SendZeroRefCacheAsync(dto, capTime, msg);
|
|
|
await LogUI.Error($"【任务{dto.ID}】参考信号[{dto.FixedStationDto.FreqUp / 1e6:f3}MHz],{capTime:yyyyMMddHHmmss}时刻参估结果个数和检测结果个数不匹配");
|
|
|
- return null;
|
|
|
+ refDetects.Clear();
|
|
|
+ return Tuple.Create(refDetects, true);
|
|
|
}
|
|
|
//构建参考信号定位模型
|
|
|
- var refSigDto = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, refDetects, data1, data2, cts, msg);
|
|
|
+ var refSigDto = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, refDetects, data1, data2, cts, msg, "固定站");
|
|
|
//执行三星无参定位
|
|
|
- await DoX2D1NoParPosAsync(refSigDto, paramInfo.Minfo.CapTime, cts, msg);
|
|
|
+ await DoX2D1NoParPosAsync(refSigDto, cts, msg, dto.ForTest);
|
|
|
|
|
|
List<TaskCgDto> cgItems = new List<TaskCgDto>();
|
|
|
foreach (var item in refSigDto)
|
|
|
{
|
|
|
- var ephMain = await GetSatEphAsync(dto.MainSatCode, item.SigTime);
|
|
|
- var ephAdja = await GetSatEphAsync(dto.AdjaSatCode, item.SigTime);
|
|
|
- if (ephMain == null || ephAdja == null) continue;
|
|
|
+ //已知主邻、主地的测量时差,求样本
|
|
|
+ //主地(测量值)+Δ=样本主(Δ表示超短站到固定站的理论距离)
|
|
|
+ //样本主-主邻1(测量值)=样本邻
|
|
|
+
|
|
|
var tarEcef = PhysicsHelper.GeoToEcef((dto.FixedStationDto.Lon, dto.FixedStationDto.Lat, 0));
|
|
|
- var ecefXl1 = (ephMain.X, ephMain.Y, ephMain.Z);
|
|
|
- var ecefXl2 = (ephAdja.X, ephAdja.Y, ephAdja.Z);
|
|
|
var ecefCdb = PhysicsHelper.GeoToEcef((dto.CdbLon, dto.CdbLat, 0));
|
|
|
- var ecefRec = PhysicsHelper.GeoToEcef((dto.CapLon, dto.CapLat, 0));
|
|
|
- var mtdt1 = PhysicsHelper.Dto(tarEcef, ecefXl1, ecefRec);
|
|
|
- var atdt2 = PhysicsHelper.Dto(tarEcef, ecefXl2, ecefRec);
|
|
|
+ var delta = PhysicsHelper.Dto(tarEcef, ecefCdb) * 1e6;
|
|
|
+ var dtoYbMain = item.XdDto + delta;
|
|
|
+ var dtoYbAdja = dtoYbMain - item.SxDto;
|
|
|
+
|
|
|
TaskCgDto cgItem = new TaskCgDto
|
|
|
{
|
|
|
TaskID = dto.ID,
|
|
|
FixedLon = dto.FixedStationDto.Lon,
|
|
|
FixedLat = dto.FixedStationDto.Lat,
|
|
|
SigTime = item.SigTime,
|
|
|
- MainYbDto = mtdt1,
|
|
|
- AdjaYbDto = atdt2,
|
|
|
+ MainYbDto = dtoYbMain,
|
|
|
+ AdjaYbDto = dtoYbAdja,
|
|
|
YbSnr = 40,
|
|
|
};
|
|
|
cgItems.Add(cgItem);
|
|
|
}
|
|
|
//添加参考信号缓存
|
|
|
+
|
|
|
+ if (dto.ForTest)
|
|
|
+ {
|
|
|
+ foreach (var item in cgItems)
|
|
|
+ {
|
|
|
+ var refLon = dto.FixedStationDto.Lon;
|
|
|
+ var refLat = dto.FixedStationDto.Lat;
|
|
|
+
|
|
|
+ var recLon = 43;
|
|
|
+ var recLat = 11.57;
|
|
|
+
|
|
|
+ var refEcef = PhysicsHelper.GeoToEcef((refLon, refLat, 0));
|
|
|
+ var recEcef = PhysicsHelper.GeoToEcef((recLon, recLat, 0));
|
|
|
+
|
|
|
+ var ecefMain = (10401572.0412, 40762347.5788, 2311671.1075);
|
|
|
+ var ecefAdja = (25526808.8297, 33541855.6479, 65652.2217);
|
|
|
+
|
|
|
+ var d1 = PhysicsHelper.Dto(refEcef, ecefMain, recEcef);
|
|
|
+ var d2 = PhysicsHelper.Dto(refEcef, ecefAdja, recEcef);
|
|
|
+ item.MainYbDto = d1 * 1e6;
|
|
|
+ item.AdjaYbDto = d2 * 1e6;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
await AddRefCacheAsync(cgItems, msg);
|
|
|
- return refDetects;
|
|
|
+ return Tuple.Create(refDetects, true);
|
|
|
}
|
|
|
|
|
|
private async Task SendZeroRefCacheAsync(X2D1TaskHandleDto dto, DateTime capTime, string msg)
|
|
@@ -880,15 +916,6 @@ namespace X2D1TaskServer.Service
|
|
|
await AddRefCacheAsync(cgItems, msg);
|
|
|
}
|
|
|
|
|
|
- private async Task<SatEphResDto> GetSatEphAsync(int satcode, DateTime sigtime)
|
|
|
- {
|
|
|
- var result = await HttpHelper.PostRequestAsync<SatEphResDto>(_config.baseUrl + "Xl/XLCalc", new SatDto() { SatCode = satcode, SigTime = sigtime });
|
|
|
- if (result.code != 200)
|
|
|
- {
|
|
|
- await LogUI.Error($"卫星:{satcode},{sigtime:yyyyMMddHHmmss}时刻获取星历异常.{result.msg}");
|
|
|
- return null;
|
|
|
- }
|
|
|
- return result.data;
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
}
|