AdcService.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. 
  2. using AdService.Controller.Dto;
  3. using Newtonsoft.Json;
  4. namespace AdService.Service
  5. {
  6. /// <summary>
  7. /// 采集服务
  8. /// </summary>
  9. public class AdcService
  10. {
  11. /// <summary>
  12. /// 单例
  13. /// </summary>
  14. public static AdcService Instance { get; private set; } = new AdcService();
  15. private bool isBusy = false;
  16. //是否持续采集
  17. private bool isSustain = true;
  18. ILogger logger { get; set; }
  19. /// <summary>
  20. /// 启动采集(无采集卡)
  21. /// </summary>
  22. /// <param name="dtos"></param>
  23. /// <returns></returns>
  24. public async Task<AdcResultDto> StartTestAsync(List<AdSatChDto> dtos)
  25. {
  26. if (isBusy)
  27. {
  28. throw new Exception("上次采集未结束");
  29. }
  30. try
  31. {
  32. StreamReader sr = new StreamReader(Directory.GetCurrentDirectory() + "/appsettings.json");
  33. string json = sr.ReadToEnd();
  34. // 解析 JSON 字符串
  35. var adConfig = JsonConvert.DeserializeObject<AdConfig>(json);
  36. isBusy = true;
  37. string test = Path.Combine(Directory.GetCurrentDirectory(), "test.dat");//测试数据
  38. var bytes = File.ReadAllBytes(test);
  39. AdcResultDto adcResult = new AdcResultDto(DateTime.Now);
  40. await Task.Run(() =>
  41. {
  42. while (isSustain)
  43. {
  44. List<SignalFile> signalFiles = new List<SignalFile>();
  45. string addate = Path.Combine(adConfig.DataDir, DateTime.Now.ToString("yyyyMMdd_HH"));//20250307_10
  46. Directory.CreateDirectory(addate);
  47. foreach (var item in dtos)
  48. {
  49. var fsad = item.ClockFreq / item.Mutil;
  50. SignalFile signal = new SignalFile()
  51. {
  52. ChNum = item.Channel,
  53. Fs = (int)fsad,
  54. SatInfoID = item.SatCode.ToString(),
  55. SigTime = DateTime.Now,
  56. DirName = adConfig.DataDir,
  57. };
  58. var fileName = String.Concat(signal.DateDirName+"_Sat",item.SatCode+"_CH",item.Channel+"_freq",fsad+".dat");
  59. File.WriteAllBytes(Path.Combine(adConfig.DataDir, signal.DateDirName, fileName), bytes);
  60. signalFiles.Add(signal);
  61. }
  62. Thread.Sleep(1000 * 15);
  63. }
  64. });
  65. return adcResult;
  66. }
  67. finally
  68. {
  69. await Task.Delay(5000);
  70. isBusy = false;
  71. }
  72. }
  73. /// <summary>
  74. /// 停止采集
  75. /// </summary>
  76. public void StopAd()
  77. {
  78. isSustain = false;
  79. }
  80. }
  81. }