|
@@ -1,4 +1,5 @@
|
|
|
-using System;
|
|
|
+using DevExpress.XtraLayout;
|
|
|
+using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Configuration;
|
|
|
using System.Diagnostics;
|
|
@@ -17,9 +18,7 @@ namespace X1LeoTaskServer54.Service
|
|
|
private readonly string baseUrl;
|
|
|
CancellationTokenSource cts;
|
|
|
|
|
|
- string DetectDir;
|
|
|
string CapDir;
|
|
|
- string DdcDir;
|
|
|
string PosResDir;
|
|
|
string StateDir;
|
|
|
int MainSatCode;
|
|
@@ -38,9 +37,7 @@ namespace X1LeoTaskServer54.Service
|
|
|
else
|
|
|
this.baseUrl = posPlatformAddr + "/api/";
|
|
|
|
|
|
- DetectDir = ConfigurationManager.AppSettings["DetectDir"].Trim();
|
|
|
CapDir = ConfigurationManager.AppSettings["CapDir"].Trim();
|
|
|
- DdcDir = ConfigurationManager.AppSettings["DdcDir"].Trim();
|
|
|
PosResDir = ConfigurationManager.AppSettings["PosResDir"].Trim();
|
|
|
StateDir = ConfigurationManager.AppSettings["StateRptDir"].Trim();
|
|
|
var PosDtoFactorstr = ConfigurationManager.AppSettings["PosDtoFactor"].Trim();
|
|
@@ -55,15 +52,18 @@ namespace X1LeoTaskServer54.Service
|
|
|
if (useGpuStr != null && useGpuStr.Trim() == "1")
|
|
|
useGpuCg = true;
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 扫描 检测 参估 定位
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
public void StartAsync(LeoSat1TaskHandleDto dto)
|
|
|
{
|
|
|
cts = new CancellationTokenSource();
|
|
|
Task.Run(async () =>
|
|
|
{
|
|
|
LogHelper.Info($"【任务{dto.ID}】开始执行...");
|
|
|
- LogHelper.Info($"【任务{dto.ID}】检测结果目录[{DetectDir}]");
|
|
|
LogHelper.Info($"【任务{dto.ID}】AD采集目录[{CapDir}]");
|
|
|
- LogHelper.Info($"【任务{dto.ID}】DDC输出目录[{DdcDir}]");
|
|
|
LogHelper.Info($"【任务{dto.ID}】状态上报输出目录[{StateDir}]");
|
|
|
//点击定位平台右上角查看接口可以在浏览器中查看平台提供的所有接口详细信息
|
|
|
while (!cts.IsCancellationRequested)
|
|
@@ -71,17 +71,12 @@ namespace X1LeoTaskServer54.Service
|
|
|
try
|
|
|
{
|
|
|
#region 第1步,读取需要的配置信息
|
|
|
- if (!Directory.Exists(DetectDir))
|
|
|
- {
|
|
|
- await StopTask(dto.ID, EnumTaskStopType.Error, $"检测结果目录[{DetectDir}]不存在");
|
|
|
- return;
|
|
|
- }
|
|
|
+
|
|
|
if (!Directory.Exists(CapDir))
|
|
|
{
|
|
|
await StopTask(dto.ID, EnumTaskStopType.Error, $"AD采集目录[{CapDir}]不存在");
|
|
|
return;
|
|
|
}
|
|
|
- Directory.CreateDirectory(DdcDir);
|
|
|
Directory.CreateDirectory(PosResDir);
|
|
|
try
|
|
|
{
|
|
@@ -92,9 +87,9 @@ namespace X1LeoTaskServer54.Service
|
|
|
var arr2 = adja1Info.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
var arr3 = adja2Info.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
MainSatCode = Convert.ToInt32(arr1[0]);
|
|
|
- Time1XYZ = GetEph(arr1);
|
|
|
+ Time1XYZ = GetEph(arr1);
|
|
|
Time2XYZ = GetEph(arr2);
|
|
|
- Time3XYZ = GetEph(arr3);
|
|
|
+ Time3XYZ = GetEph(arr3);
|
|
|
}
|
|
|
catch
|
|
|
{
|
|
@@ -104,120 +99,241 @@ namespace X1LeoTaskServer54.Service
|
|
|
#endregion
|
|
|
|
|
|
#region 第2步,扫描检测结果目录
|
|
|
- var groupFiles = Directory.EnumerateFiles(DetectDir, "*.dat", SearchOption.TopDirectoryOnly).Select(p => StringToCheckResFile(p))
|
|
|
- .GroupBy(m => Convert.ToInt64(m.DayTime.ToString("yyyyMMdd") + m.FlagNo)).OrderBy(m => m.Key);
|
|
|
+ //同一个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);
|
|
|
}
|
|
|
- try
|
|
|
+ var listTask = new List<Task>();
|
|
|
+ foreach (var groupFile in groupFiles)//每一组文件代表同一组可定位的三个不同时刻的采集文件
|
|
|
{
|
|
|
+ if (cts.IsCancellationRequested) break;
|
|
|
+
|
|
|
+ var first = groupFile.First();
|
|
|
+ LogHelper.Info($"【任务{dto.ID}】正在执行第{first.XDNo}组的采集文件");
|
|
|
|
|
|
- LeoX1ParPosDto leoX1 = new LeoX1ParPosDto()
|
|
|
- {
|
|
|
- TaskID = dto.ID,
|
|
|
- //SigTime = capTime.AddSeconds(data1[i].TimeSeconds),
|
|
|
- MainCode = MainSatCode,
|
|
|
- Adja1Code = MainSatCode,
|
|
|
- Adja2Code = MainSatCode,
|
|
|
- MainX = Time1XYZ[0],
|
|
|
- MainY = Time1XYZ[1],
|
|
|
- MainZ = Time1XYZ[2],
|
|
|
- MainVX = Time1XYZ[3],
|
|
|
- MainVY = Time1XYZ[4],
|
|
|
- MainVZ = Time1XYZ[5],
|
|
|
- Adja1X = Time2XYZ[0],
|
|
|
- Adja1Y = Time2XYZ[1],
|
|
|
- Adja1Z = Time2XYZ[2],
|
|
|
- Adja1VX = Time2XYZ[3],
|
|
|
- Adja1VY = Time2XYZ[4],
|
|
|
- Adja1VZ = Time2XYZ[5],
|
|
|
- Adja2X = Time3XYZ[0],
|
|
|
- Adja2Y = Time3XYZ[1],
|
|
|
- Adja2Z = Time3XYZ[2],
|
|
|
- Adja2VX = Time3XYZ[3],
|
|
|
- Adja2VY = Time3XYZ[4],
|
|
|
- Adja2VZ = Time3XYZ[5],
|
|
|
- //Dto1 = PosDtoFactor * data1[i].Dt,
|
|
|
- //Dfo1 = data1[i].Df,
|
|
|
- //Snr1 = data1[i].Snr,
|
|
|
- //Dto2 = PosDtoFactor * data2[i].Dt,
|
|
|
- //Dfo2 = data2[i].Df,
|
|
|
- //Snr2 = data2[i].Snr,
|
|
|
- //FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
|
|
|
- //SatTxLon = dto.CapLon,
|
|
|
- //SatTxLat = dto.CapLat,
|
|
|
- //FreqDown = ch0File.FreqDownMHz * 1e6,
|
|
|
- //CheckRes = new CheckResDto()
|
|
|
- //{
|
|
|
- // FileName = Path.GetFileName(ch0File.File),
|
|
|
- // SmpStart = sig.Slots.Slots[i].StartPoint,
|
|
|
- // SmpCount = sig.Slots.Slots[i].Len,
|
|
|
- // PosCheckType = EnumPosCheckTypeDto.DAMA,
|
|
|
- //}
|
|
|
- };
|
|
|
- var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosLeX1ParAsync", leoX1);
|
|
|
- if (result.code != 200)
|
|
|
+ var group = groupFile.OrderBy(g => g.AdTime).ToArray();
|
|
|
+ if (group.Count() != 3)
|
|
|
{
|
|
|
- // LogHelper.Error($"【任务{dto.ID}】-信号{group.Key}MHz-{capTime:yyyyMMddHHmmss}时刻第{i + 1}个突发定位异常.{result.msg}");
|
|
|
+ LogHelper.Warning($"【任务{dto.ID}】第{first.XDNo}组{first.AdTime:yyyyMMddHHmmss}时刻-信号{first.FreqDownMHz}MHz-未找到三个时刻的信号文件,跳过此组数据");
|
|
|
+ return;
|
|
|
}
|
|
|
- else
|
|
|
+ //group:同一组不同时刻的文件
|
|
|
+ var task = Task.Run(async () =>
|
|
|
{
|
|
|
- var posRes = result.data;
|
|
|
- double posLon = posRes.PosLon;
|
|
|
- double posLat = posRes.PosLat;
|
|
|
- if (leoX1.Snr1 == 0 || leoX1.Snr2 == 0)
|
|
|
+ DateTime adTime = groupFile.First().AdTime;
|
|
|
+ double freq = groupFile.First().FreqDownMHz;
|
|
|
+ int No = groupFile.First().XDNo;
|
|
|
+ var ch0File = group[0];
|
|
|
+ var ch1File = group[1];
|
|
|
+ var ch2File = group[2];
|
|
|
+ if (ch0File == null)
|
|
|
{
|
|
|
- posLon = 0;
|
|
|
- posLat = 0;
|
|
|
+ LogHelper.Warning($"【任务{dto.ID}】第{No}组{ch0File.AdTime:yyyyMMddHHmmss}时刻-信号{freq}MHz-未找到第一时刻的信号文件,跳过此组数据");
|
|
|
+ return;
|
|
|
}
|
|
|
- /*
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- sb.Append($"{x3.SigTime:yyyy}\t");
|
|
|
- sb.Append($"{x3.SigTime:MM}\t");
|
|
|
- sb.Append($"{x3.SigTime:dd}\t");
|
|
|
- sb.Append($"{x3.SigTime:HH}\t");
|
|
|
- sb.Append($"{x3.SigTime:mm}\t");
|
|
|
- sb.Append($"{x3.SigTime:ss}\t");
|
|
|
- sb.Append($"{x3.SigTime:fff}\t");
|
|
|
- sb.Append($"{x3.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
|
|
|
- sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
|
|
|
- sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
|
|
|
- sb.Append($"{4}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK,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(x3.Dto1 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x3.Dfo1 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x3.Snr1 * 1e2):D6}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x3.Dto2 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x3.Dfo2 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(x3.Snr2 * 1e2):D6}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
- sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
|
|
|
- sb.Append($"{0:D8}\t");//长轴
|
|
|
- sb.Append($"{0:D8}\t");//短轴
|
|
|
- sb.Append($"{0:D7}\t");//倾角
|
|
|
- sb.Append($"{data1.Count:D2}\t");//时隙属性
|
|
|
- sb.Append($"{1}\t");//所属卫星
|
|
|
- sb.Append($"{950:D3}\t");//置信度
|
|
|
- sb.Append($"{3}");//定位体制(星地=3)
|
|
|
- sb.Append($"{1335: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}】{capTime:yyyyMMddHHmmss}时刻-信号{group.Key}MHz-第{i + 1}个突发定位异常", ex);
|
|
|
- }
|
|
|
+ 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;
|
|
|
+
|
|
|
+
|
|
|
+ Stopwatch sw = new Stopwatch();
|
|
|
+ sw.Start();
|
|
|
+ string mainFile = await HttpHelper.UploadFileAsync(ch0File.File, baseUrl, token: cts.Token);//主星文件
|
|
|
+ string adja1File = await HttpHelper.UploadFileAsync(ch1File.File, baseUrl, token: cts.Token);//邻1星文件
|
|
|
+ string adja2File = await HttpHelper.UploadFileAsync(ch2File.File, baseUrl, token: cts.Token);//邻2星文件
|
|
|
+
|
|
|
+ DetectDto detectDto = new DetectDto()
|
|
|
+ {
|
|
|
+ file1 = mainFile,
|
|
|
+ dmcType = EnumSigCheckTypeDto.Ky5758,
|
|
|
+ fsHz = ch0File.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 = mainFile,
|
|
|
+ file2 = adja1File,
|
|
|
+ samplingRate = ch0File.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;
|
|
|
+ }
|
|
|
+ cgDto = new CpuCgMultiDto()
|
|
|
+ {
|
|
|
+ dtCenter = 0,
|
|
|
+ dtRange = 40000,
|
|
|
+ file1 = mainFile,
|
|
|
+ file2 = adja2File,
|
|
|
+ samplingRate = ch0File.Fs,
|
|
|
+ smpPositions = smps,
|
|
|
+ snrThreshold = 15,
|
|
|
+ };
|
|
|
+ var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
|
|
|
+ sw.Stop();
|
|
|
+ if (result2.code != 200)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】第{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 != data2.Count || data1.Count != cgDto.smpPositions.Count)
|
|
|
+ {
|
|
|
+ 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;
|
|
|
+ LeoX1ParPosDto leoX1 = new LeoX1ParPosDto()
|
|
|
+ {
|
|
|
+ TaskID = dto.ID,
|
|
|
+ SigTime = adTime.AddSeconds(data1[i].TimeSeconds),
|
|
|
+ MainCode = MainSatCode,
|
|
|
+ Adja1Code = MainSatCode,
|
|
|
+ Adja2Code = MainSatCode,
|
|
|
+ MainX = Time1XYZ[0],
|
|
|
+ MainY = Time1XYZ[1],
|
|
|
+ MainZ = Time1XYZ[2],
|
|
|
+ MainVX = Time1XYZ[3],
|
|
|
+ MainVY = Time1XYZ[4],
|
|
|
+ MainVZ = Time1XYZ[5],
|
|
|
+ Adja1X = Time2XYZ[0],
|
|
|
+ Adja1Y = Time2XYZ[1],
|
|
|
+ Adja1Z = Time2XYZ[2],
|
|
|
+ Adja1VX = Time2XYZ[3],
|
|
|
+ Adja1VY = Time2XYZ[4],
|
|
|
+ Adja1VZ = Time2XYZ[5],
|
|
|
+ Adja2X = Time3XYZ[0],
|
|
|
+ Adja2Y = Time3XYZ[1],
|
|
|
+ Adja2Z = Time3XYZ[2],
|
|
|
+ Adja2VX = Time3XYZ[3],
|
|
|
+ Adja2VY = Time3XYZ[4],
|
|
|
+ Adja2VZ = Time3XYZ[5],
|
|
|
+ Dto1 = PosDtoFactor * data1[i].Dt,
|
|
|
+ Dfo1 = data1[i].Df,
|
|
|
+ Snr1 = data1[i].Snr,
|
|
|
+ Dto2 = PosDtoFactor * data2[i].Dt,
|
|
|
+ Dfo2 = data2[i].Df,
|
|
|
+ Snr2 = data2[i].Snr,
|
|
|
+ FreqUp = (ch0File.FreqDownMHz + 44) * 1e6,
|
|
|
+ SatTxLon = dto.CapLon,
|
|
|
+ SatTxLat = dto.CapLat,
|
|
|
+ FreqDown = ch0File.FreqDownMHz * 1e6,
|
|
|
+ CheckRes = new CheckResDto()
|
|
|
+ {
|
|
|
+ FileName = Path.GetFileName(ch0File.File),
|
|
|
+ SmpStart = cgDto.smpPositions[i].smpStart,
|
|
|
+ SmpCount = cgDto.smpPositions[i].smpCount,
|
|
|
+ PosCheckType = EnumPosCheckTypeDto.Ky5758,
|
|
|
+ }
|
|
|
+ };
|
|
|
+ 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}");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var posRes = result.data;
|
|
|
+ double posLon = posRes.PosLon;
|
|
|
+ double posLat = posRes.PosLat;
|
|
|
+ if (leoX1.Snr1 == 0 || leoX1.Snr2 == 0)
|
|
|
+ {
|
|
|
+ posLon = 0;
|
|
|
+ posLat = 0;
|
|
|
+ }
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.Append($"{leoX1.SigTime:yyyy}\t");
|
|
|
+ sb.Append($"{leoX1.SigTime:MM}\t");
|
|
|
+ sb.Append($"{leoX1.SigTime:dd}\t");
|
|
|
+ sb.Append($"{leoX1.SigTime:HH}\t");
|
|
|
+ sb.Append($"{leoX1.SigTime:mm}\t");
|
|
|
+ sb.Append($"{leoX1.SigTime:ss}\t");
|
|
|
+ sb.Append($"{leoX1.SigTime:fff}\t");
|
|
|
+ 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($"{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(leoX1.Dto1 * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(leoX1.Dfo1 * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(leoX1.Snr1 * 1e2):D6}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(leoX1.Dto2 * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(leoX1.Dfo2 * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(leoX1.Snr2 * 1e2):D6}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
|
|
|
+ sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
|
|
|
+ sb.Append($"{0:D8}\t");//长轴
|
|
|
+ sb.Append($"{0:D8}\t");//短轴
|
|
|
+ sb.Append($"{0:D7}\t");//倾角
|
|
|
+ sb.Append($"{data1.Count:D2}\t");//时隙属性
|
|
|
+ sb.Append($"{1}\t");//所属卫星
|
|
|
+ sb.Append($"{950:D3}\t");//置信度
|
|
|
+ sb.Append($"{3}\t");//定位体制(星地=3)
|
|
|
+ sb.Append($"{1335: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");
|
|
|
+
|
|
|
+ //删除DDC文件
|
|
|
+ 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)
|
|
@@ -238,11 +354,10 @@ namespace X1LeoTaskServer54.Service
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
private double[] GetEph(string[] strs)
|
|
|
{
|
|
|
|
|
|
- var TimeXYZ = new double[6] { Convert.ToDouble(strs[1]),
|
|
|
+ var TimeXYZ = new double[6] { Convert.ToDouble(strs[1]),
|
|
|
Convert.ToDouble(strs[2]),
|
|
|
Convert.ToDouble(strs[3]),
|
|
|
Convert.ToDouble(strs[4]),
|
|
@@ -291,21 +406,7 @@ namespace X1LeoTaskServer54.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
|
|
@@ -316,36 +417,10 @@ namespace X1LeoTaskServer54.Service
|
|
|
{
|
|
|
File = file,
|
|
|
AdTime = time,
|
|
|
- ChNo = Convert.ToInt32(arr[2]),
|
|
|
+ XDNo = Convert.ToInt32(arr[2]),
|
|
|
};
|
|
|
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;
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
}
|