BufferDebugViewModel.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using ivf_tl_Entity.ComEntitys;
  3. using ivf_tl_Entity.DebugEntitys;
  4. using ivf_tl_Entity.DTO;
  5. using ivf_tl_Entity.GlobalEnums;
  6. using Newtonsoft.Json;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Collections.ObjectModel;
  10. using System.Configuration;
  11. using System.DirectoryServices.ActiveDirectory;
  12. using System.Linq;
  13. using System.Security.Principal;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using System.Windows;
  17. namespace ivf_tl_Operate.ViewModel
  18. {
  19. public partial class BufferDebugViewModel : ObservableObject
  20. {
  21. public event Action<string> MessageEvent;
  22. private ComBin comBin = null;
  23. /// <summary>
  24. /// 仪器设置
  25. /// </summary>
  26. public TLSetting tLSetting = new TLSetting();
  27. [ObservableProperty]
  28. private HouseInfo currentHouse = null;
  29. /// <summary>
  30. /// 仪器温度1
  31. /// </summary>
  32. [ObservableProperty]
  33. private decimal temperature1 = 0m;
  34. /// <summary>
  35. /// 仪器温度2
  36. /// </summary>
  37. [ObservableProperty]
  38. private decimal temperature2 = 0m;
  39. /// <summary>
  40. /// 压力
  41. /// </summary>
  42. [ObservableProperty]
  43. private decimal bufferBottlePressure = 0m;
  44. [ObservableProperty]
  45. private int ledLight = 0;
  46. [ObservableProperty]
  47. private ObservableCollection<string> messageInfoList = new ObservableCollection<string>();
  48. private void ExLog(Exception ex, string name)
  49. {
  50. AppData.Instance.LogHelper.ExceptionLog(ex, $"HouseDebugPageViewModel.{name}", LogEnum.RunException);
  51. }
  52. private void ErrorLog(string message, LogEnum logType)
  53. {
  54. AppData.Instance.LogHelper.TLLog($"HouseDebugPageViewModel.{message}", logType);
  55. }
  56. public void Start(ref string errora)
  57. {
  58. try
  59. {
  60. SerialBin serialBin = new SerialBin();
  61. serialBin.TLLogEvent += AppData.Instance.LogHelper.TLLog;
  62. serialBin.ExceptionLogEvent += AppData.Instance.LogHelper.ExceptionLog;
  63. serialBin.HouseLogEvent += AppData.Instance.LogHelper.HouseLog;
  64. var errorList = serialBin.UpdataCamera();
  65. AppData.Instance.LogHelper.TLLog($"ccdidsn:{JsonConvert.SerializeObject(serialBin.CCDidSn)}", LogEnum.RunRecord);
  66. if (errorList.Any())
  67. {
  68. errora = $"获取相机Id和CCDSN错误{JsonConvert.SerializeObject(errorList)}";
  69. AppData.Instance.LogHelper.TLLog(errora, LogEnum.RunRecord);
  70. return;
  71. }
  72. errorList = serialBin.Start(ConfigurationManager.AppSettings["autoFocus"].ToString());
  73. AppData.Instance.LogHelper.TLLog($"舱室信息:{JsonConvert.SerializeObject(serialBin.SerialModels)}", LogEnum.RunRecord);
  74. AppData.Instance.LogHelper.TLLog($"E方数据:{JsonConvert.SerializeObject(serialBin.HouseEEPROInfos)}", LogEnum.RunRecord);
  75. if (errorList.Any())
  76. {
  77. errora = $"获取串口信息错误{JsonConvert.SerializeObject(errorList)}";
  78. AppData.Instance.LogHelper.TLLog(errora, LogEnum.RunRecord);
  79. return;
  80. }
  81. var modelCount = serialBin.SerialModels.Count;
  82. if (modelCount != 11)
  83. {
  84. string messageinfo = $"检测到{modelCount}个模块,是否继续运行?";
  85. MessageBoxResult aaa = MessageBox.Show(messageinfo, "提示", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No, MessageBoxOptions.DefaultDesktopOnly);
  86. if (aaa != MessageBoxResult.Yes)
  87. {
  88. errora = "结束";
  89. return;
  90. }
  91. }
  92. List<int> listIntRunHoues = serialBin.SerialModels.Select(x => x.houseSn).ToList();
  93. TLInitData tLInitData = new TLInitData();
  94. tLInitData.tlSn = $"NEO-1-{serialBin.TLNum}";
  95. tLInitData.dayLighting = serialBin.dayLighting;
  96. tLInitData.softwareVersion = "V2.0.0";
  97. tLInitData.verticalMotorPulseMax = 125000;
  98. tLInitData.houseLinkDataList = serialBin.SerialModels.OrderBy(x => x.houseSn).ToList();
  99. foreach (var item in serialBin.HouseEEPROInfos)
  100. {
  101. item.tlSn = tLInitData.tlSn;
  102. }
  103. tLInitData.houseEEPROInitDTOList = serialBin.HouseEEPROInfos.OrderBy(x => x.houseSn).ToList();
  104. AppData.Instance.LogHelper.TLLog($"舱室信息:{JsonConvert.SerializeObject(tLInitData)}", LogEnum.RunRecord);
  105. SettingDataApiData settingDataApiData = AppData.Instance.HttpHelper.GetSettingDataApi(tLInitData);
  106. if (settingDataApiData == null)
  107. {
  108. errora = $"{tLInitData.tlSn}获取仪器设置失败";
  109. return;
  110. }
  111. AppData.Instance.LogHelper.TLLog(JsonConvert.SerializeObject(settingDataApiData), LogEnum.RunRecord);
  112. tLSetting = AppData.Instance.ConvertHelper.ConvertToTLSetting(settingDataApiData.tlInfo, settingDataApiData.tlSetting);
  113. CurrentHouse = settingDataApiData.houseList.FirstOrDefault(x => x.houseSn == 11);
  114. if (CurrentHouse == null)
  115. {
  116. errora = $"{tLInitData.tlSn}获取缓冲瓶信息失败";
  117. return;
  118. }
  119. }
  120. catch (Exception ex)
  121. {
  122. AppData.Instance.LogHelper.ExceptionLog(ex, $"缓冲瓶调试模式初始化", LogEnum.RunException);
  123. errora = $"缓冲瓶调试模式初始化异常:{ex.Message}";
  124. }
  125. }
  126. public async Task ComHouseInit()
  127. {
  128. await Task.Run(async () =>
  129. {
  130. try
  131. {
  132. comBin = new ComBin(CurrentHouse.houseSn, CurrentHouse.housePort);
  133. comBin.CommandLogEvent += ComBin_CommandLogEvent;
  134. comBin.ErrorLogEvent += ComBin_ErrorLogEvent;
  135. comBin.ExceptionLogEvent += ComBin_ExceptionLogEvent;
  136. comBin.AddMessageInfoEvent += AddMessageInfo;
  137. var openPort = comBin.OpenPort();
  138. if (openPort)
  139. {
  140. AddMessageInfo($"[{currentHouse.houseSn}][{currentHouse.housePort}]缓冲瓶串口打开成功");
  141. }
  142. else
  143. {
  144. AddMessageInfo($"[{currentHouse.houseSn}][{currentHouse.housePort}]缓冲瓶串口打开失败");
  145. return;
  146. }
  147. CustomProtocol custom = new CustomProtocol();
  148. comBin.ShakeHandsWait(custom);
  149. RedL();
  150. var a = comBin.BufferBottleState(custom);
  151. BufferBottlePressure = a.Item1;
  152. Temperature1 = a.Item2;
  153. Temperature2 = a.Item3;
  154. return;
  155. }
  156. catch (Exception ex)
  157. {
  158. AppData.Instance.LogHelper.ExceptionLog(ex, "缓冲瓶调试模式初始化", LogEnum.RunException);
  159. AddMessageInfo($"初始化异常:{ex.Message}");
  160. return;
  161. }
  162. });
  163. }
  164. public bool ComHouseUnit()
  165. {
  166. try
  167. {
  168. if (comBin != null) AddMessageInfo($"[{currentHouse.houseSn}][{currentHouse.housePort}]缓冲瓶串口卸载结果:{comBin.ClosePort()}");
  169. comBin = null;
  170. return true;
  171. }
  172. catch (Exception ex)
  173. {
  174. AppData.Instance.LogHelper.ExceptionLog(ex, "缓冲瓶卸载", LogEnum.RunException);
  175. AddMessageInfo($"缓冲瓶卸载异常:{ex.Message}");
  176. return false;
  177. }
  178. }
  179. public void BufferState()
  180. {
  181. CustomProtocol custom = new CustomProtocol();
  182. var a = comBin.BufferBottleState(custom);
  183. BufferBottlePressure = a.Item1;
  184. Temperature1 = a.Item2;
  185. Temperature2 = a.Item3;
  186. }
  187. public void Are()
  188. {
  189. CustomProtocol custom = new CustomProtocol();
  190. comBin.BufferBottleAerationWait(custom);
  191. }
  192. /// <summary>
  193. /// 进气阀打开时间
  194. /// </summary>
  195. /// <param name="newValue"></param>
  196. public void writeE(int newValue)
  197. {
  198. CustomProtocol custom = new CustomProtocol();
  199. comBin.WriteEEPROOpenIntakeTimeBufferWait(custom, newValue);
  200. CurrentHouse.inletValveOpeningTime = newValue;
  201. AddMessageInfo($"进气阀打开时间保存服务器结果:{AppData.Instance.HttpHelper.LightsUpdateApi(tLSetting.tlSn, LedLight, CurrentHouse.inletValveOpeningTime)}");
  202. }
  203. /// <summary>
  204. /// 设置灯光亮度
  205. /// </summary>
  206. /// <param name="newValue"></param>
  207. public void writeL(int newValue)
  208. {
  209. CustomProtocol custom = new CustomProtocol();
  210. comBin.WriteEEPROMLightNumWait(custom, newValue);
  211. LedLight = newValue;
  212. AddMessageInfo($"灯光亮度保存服务器结果:{AppData.Instance.HttpHelper.LightsUpdateApi(tLSetting.tlSn, LedLight, CurrentHouse.inletValveOpeningTime)}");
  213. }
  214. public void RedL()
  215. {
  216. CustomProtocol custom = new CustomProtocol();
  217. LedLight = comBin.ReadEEPROMLightNumWait(custom);
  218. }
  219. private void ComBin_ExceptionLogEvent(Exception exception, string arg2, string arg3, LogEnum @enum)
  220. {
  221. AppData.Instance.LogHelper.ExceptionLog(exception, $"{arg2}{arg3}", @enum);
  222. }
  223. private void ComBin_ErrorLogEvent(string arg1, LogEnum @enum)
  224. {
  225. AppData.Instance.LogHelper.TLLog(arg1, @enum);
  226. }
  227. private void ComBin_CommandLogEvent(int arg1, DateTime time, string arg3, LogEnum @enum)
  228. {
  229. AppData.Instance.LogHelper.HouseLog(arg1, time, arg3, @enum);
  230. }
  231. public void AddMessageInfo(string mess)
  232. {
  233. MessageEvent?.Invoke(mess);
  234. }
  235. }
  236. }