Program.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using Newtonsoft.Json;
  9. using WUtilitiesV01.Helper;
  10. using WUtilitiesV01.Helper.IOHelper;
  11. using WUtilitiesV01.WLogs;
  12. namespace Ips.Adc.QfCard.Cli
  13. {
  14. class Program
  15. {
  16. static void Main(string[] args)
  17. {
  18. bool test = false;
  19. if (test)
  20. WLog.Instance.Error("启用测试模式!!!");
  21. WLog.Instance.AddConsoleLogger();
  22. var fileLogger = WLog.Instance.AddFileLogger();
  23. WLog.Instance.Info("******************启动********************");
  24. WLog.Instance.Info("args:" + args.ExtJoin(" "));
  25. var paramModel = parseArgs(args);
  26. WLog.Instance.Info("启动时间:" + paramModel.startTime.ExtToStr());
  27. Dictionary<string, object> dict = new Dictionary<string, object>();
  28. var ps = ReflectionHelper.PropertyInfos(typeof(ParamModel));
  29. foreach (var propertyInfo in ps)
  30. {
  31. dict.Add(propertyInfo.Name, propertyInfo.GetValue(paramModel, null));
  32. }
  33. var smodel = SettingService.Instance.GetModel();
  34. //var result = HttpHelper.Post(smodel.Ip, "getCardParam", null);
  35. //WLog.Instance.Info("getCardParam:" + result);
  36. var result = HttpHelper.Post(smodel.Ip, "writeParams", dict);
  37. WLog.Instance.Info("writeParams:" + result);
  38. if (test)
  39. {
  40. var now = DateTime.Now.AddSeconds(3);
  41. var timestamp = (now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0))).TotalSeconds;
  42. paramModel.launchTime = (uint)timestamp;
  43. }
  44. //paramModel.launchTime -= 8;//定位实验平台会推迟10s采集,等待采集卡初始化。qf的fdata不需要初始化。
  45. dict.Clear();
  46. //{"mode":1,"launchTime": "2023-05-10 11:34:13", "startMode": 1}
  47. dict.Add("mode", 1);
  48. dict.Add("launchTime", paramModel.launchTime);
  49. dict.Add("startMode", 1);
  50. result = HttpHelper.Post(smodel.Ip, "startRun", dict);
  51. WLog.Instance.Info("startRun:" + result);
  52. Thread.Sleep(paramModel.capSize * 1000);
  53. //20230510094527_ch1_iq.dat
  54. var folder = Path.GetDirectoryName(paramModel.path);
  55. var fileName = Path.GetFileNameWithoutExtension(paramModel.path);
  56. int count = 0;
  57. while (paramModel.startTime.AddSeconds(3 + paramModel.capSize) > DateTime.Now)
  58. {
  59. count = 0;
  60. for (int i = 0; i < paramModel.channelNumber; i++)
  61. {
  62. var path = Path.Combine(folder, string.Format("{0}_ch{1}_iq.dat", fileName, i + 1));
  63. WLog.Instance.LogDelLater("check file exist" + path);
  64. if (File.Exists(path) && !FileHelper.IsUsing(path))
  65. {
  66. count++;
  67. }
  68. }
  69. count = Directory.GetFiles(folder, $"*{fileName}*.dat").Count();
  70. if (count == paramModel.channelNumber)
  71. {
  72. WLog.Instance.Info("File all exists");
  73. break;
  74. }
  75. Thread.Sleep(1000);
  76. }
  77. if (count < paramModel.channelNumber)
  78. WLog.Instance.Error("等待3秒后文件仍没有落盘," + paramModel.path);
  79. else
  80. {
  81. for (int i = 0; i < paramModel.channelNumber; i++)
  82. {
  83. var path = Path.Combine(folder, string.Format("{0}_ch{1}_iq.dat", fileName, i + 1));
  84. //File.Move(path,path+".tmp");
  85. }
  86. }
  87. WLog.Instance.Flush();
  88. WLog.Instance.Info("******************停止********************");
  89. WLog.Instance.LogEmptyLine();
  90. Thread.Sleep(1500);
  91. fileLogger.Flush();
  92. var fileNameIdx = paramModel.path.LastIndexOf('.');
  93. if (fileNameIdx > -1)
  94. {
  95. string autoFolder = paramModel.path.Substring(0, fileNameIdx);
  96. if (Directory.Exists(autoFolder))
  97. Directory.Delete(autoFolder);
  98. }
  99. }
  100. static void Main_gch(string[] args)
  101. {
  102. bool test = false;
  103. if (test)
  104. WLog.Instance.Error("启用测试模式!!!");
  105. WLog.Instance.AddConsoleLogger();
  106. var fileLogger = WLog.Instance.AddFileLogger();
  107. WLog.Instance.Info("******************启动********************");
  108. WLog.Instance.Info("args:" + args.ExtJoin(" "));
  109. var paramModel = parseArgs(args);
  110. WLog.Instance.Info("启动时间:" + paramModel.startTime.ExtToStr());
  111. Dictionary<string, object> dict = new Dictionary<string, object>();
  112. var ps = ReflectionHelper.PropertyInfos(typeof(ParamModel));
  113. foreach (var propertyInfo in ps)
  114. {
  115. dict.Add(propertyInfo.Name, propertyInfo.GetValue(paramModel, null));
  116. }
  117. var smodel = SettingService.Instance.GetModel();
  118. var result = HttpHelper.Post(smodel.Ip, "getCardParam", null);
  119. WLog.Instance.Info("getCardParam:" + result);
  120. result = HttpHelper.Post(smodel.Ip, "setCardParam", dict);
  121. WLog.Instance.Info("setCardParam:" + result);
  122. if (test)
  123. {
  124. var now = DateTime.Now.AddSeconds(3);
  125. var timestamp = (now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0))).TotalSeconds;
  126. paramModel.launchTime = (uint)timestamp;
  127. }
  128. //paramModel.launchTime -= 8;//定位实验平台会推迟10s采集,等待采集卡初始化。qf的fdata不需要初始化。
  129. dict.Clear();
  130. //{"mode":1,"launchTime": "2023-05-10 11:34:13", "startMode": 1}
  131. dict.Add("mode", 1);
  132. dict.Add("launchTime", paramModel.launchTime);
  133. dict.Add("startMode", 1);
  134. result = HttpHelper.Post(smodel.Ip, "startRun", dict);
  135. WLog.Instance.Info("startRun:" + result);
  136. Thread.Sleep(paramModel.capSize * 1000);
  137. //20230510094527_ch1_iq.dat
  138. var folder = Path.GetDirectoryName(paramModel.path);
  139. var fileName = Path.GetFileNameWithoutExtension(paramModel.path);
  140. int count = 0;
  141. while (paramModel.startTime.AddSeconds(3 + paramModel.capSize) > DateTime.Now)
  142. {
  143. count = 0;
  144. for (int i = 0; i < paramModel.channelNumber; i++)
  145. {
  146. var path = Path.Combine(folder, string.Format("{0}_ch{1}_iq.dat", fileName, i + 1));
  147. WLog.Instance.LogDelLater("check file exist" + path);
  148. if (File.Exists(path) && !FileHelper.IsUsing(path))
  149. {
  150. count++;
  151. }
  152. }
  153. if (count == paramModel.channelNumber)
  154. {
  155. WLog.Instance.Info("File all exists");
  156. break;
  157. }
  158. Thread.Sleep(1000);
  159. }
  160. if (count < paramModel.channelNumber)
  161. WLog.Instance.Error("等待3秒后文件仍没有落盘," + paramModel.path);
  162. else
  163. {
  164. for (int i = 0; i < paramModel.channelNumber; i++)
  165. {
  166. var path = Path.Combine(folder, string.Format("{0}_ch{1}_iq.dat", fileName, i + 1));
  167. //File.Move(path,path+".tmp");
  168. }
  169. }
  170. WLog.Instance.Flush();
  171. WLog.Instance.Info("******************停止********************");
  172. WLog.Instance.LogEmptyLine();
  173. Thread.Sleep(1500);
  174. fileLogger.Flush();
  175. }
  176. static ParamModel parseArgs(string[] ps)
  177. {
  178. Dictionary<string, string> dict = new Dictionary<string, string>();
  179. for (int i = 0; i < ps.Length; i += 2)
  180. {
  181. dict.Add(ps[i].Trim(), ps[i + 1].Trim());
  182. }
  183. ParamModel model = new ParamModel();
  184. foreach (var kv in dict)
  185. {
  186. switch (kv.Key)
  187. {
  188. case "-s":
  189. model.launchTime = UInt32.Parse(kv.Value);
  190. break;
  191. case "-c":
  192. model.clockMode = Int32.Parse(kv.Value);
  193. break;
  194. case "-t":
  195. model.triggerMode = Int32.Parse(kv.Value);
  196. break;
  197. case "-d":
  198. model.ddcFreq = double.Parse(kv.Value);
  199. break;
  200. case "-f":
  201. model.sampleRate = double.Parse(kv.Value);
  202. break;
  203. case "-m":
  204. model.ddcFactor = int.Parse(kv.Value);
  205. break;
  206. case "-h":
  207. model.chEnable = int.Parse(kv.Value);
  208. break;
  209. case "-o":
  210. model.path = kv.Value;
  211. break;
  212. case "-l":
  213. model.capSize = int.Parse(kv.Value);
  214. break;
  215. }
  216. }
  217. model.Clairfy();
  218. return model;
  219. }
  220. class ParamModel
  221. {
  222. [JsonProperty("launchTime")]
  223. public UInt32 launchTime { get; set; }
  224. public DateTime startTime { get; set; }
  225. public int clockMode { get; set; }
  226. public int triggerMode { get; set; }
  227. public double ddcFreq { get; set; }
  228. public double sampleRate { get; set; }
  229. public int ddcFactor { get; set; }
  230. public int chEnable { get; set; }
  231. public int channelNumber;
  232. public string path { get; set; }
  233. public int capSize { get; set; }
  234. public int capMode { get; set; }
  235. public int type { get; set; }
  236. public int dataType { get; set; }
  237. public ParamModel Clairfy()
  238. {
  239. startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0))
  240. .AddSeconds(launchTime);
  241. capMode = 1;
  242. type = 0;//本地存储
  243. dataType = ddcFactor == 0 ? 2 : 0;//抽取倍数0,ADC,否则为DDC
  244. clockMode = new int[] { 1, -1, 2 }[clockMode];
  245. triggerMode = new int[] { 1, 0 }[triggerMode];
  246. channelNumber = chEnable;
  247. chEnable = new int[] { 0, 1, 3, 7, 15 }[chEnable];
  248. ddcFreq = 70;
  249. return this;
  250. }
  251. }
  252. }
  253. }