using CommunityToolkit.Mvvm.ComponentModel; using ivf_tl_Entity.ComEntitys; using ivf_tl_Entity.DebugEntitys; using ivf_tl_Entity.DTO; using ivf_tl_Entity.GlobalEnums; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Configuration; using System.DirectoryServices.ActiveDirectory; using System.Linq; using System.Security.Principal; using System.Text; using System.Threading.Tasks; using System.Windows; namespace ivf_tl_Operate.ViewModel { public partial class BufferDebugViewModel : ObservableObject { public event Action MessageEvent; private ComBin comBin = null; /// /// 仪器设置 /// public TLSetting tLSetting = new TLSetting(); [ObservableProperty] private HouseInfo currentHouse = null; /// /// 仪器温度1 /// [ObservableProperty] private decimal temperature1 = 0m; /// /// 仪器温度2 /// [ObservableProperty] private decimal temperature2 = 0m; /// /// 压力 /// [ObservableProperty] private decimal bufferBottlePressure = 0m; [ObservableProperty] private int ledLight = 0; [ObservableProperty] private ObservableCollection messageInfoList = new ObservableCollection(); private void ExLog(Exception ex, string name) { AppData.Instance.LogHelper.ExceptionLog(ex, $"HouseDebugPageViewModel.{name}", LogEnum.RunException); } private void ErrorLog(string message, LogEnum logType) { AppData.Instance.LogHelper.TLLog($"HouseDebugPageViewModel.{message}", logType); } public void Start(ref string errora) { try { SerialBin serialBin = new SerialBin(); serialBin.TLLogEvent += AppData.Instance.LogHelper.TLLog; serialBin.ExceptionLogEvent += AppData.Instance.LogHelper.ExceptionLog; serialBin.HouseLogEvent += AppData.Instance.LogHelper.HouseLog; var errorList = serialBin.UpdataCamera(); AppData.Instance.LogHelper.TLLog($"ccdidsn:{JsonConvert.SerializeObject(serialBin.CCDidSn)}", LogEnum.RunRecord); if (errorList.Any()) { errora = $"获取相机Id和CCDSN错误{JsonConvert.SerializeObject(errorList)}"; AppData.Instance.LogHelper.TLLog(errora, LogEnum.RunRecord); return; } errorList = serialBin.Start(ConfigurationManager.AppSettings["autoFocus"].ToString()); AppData.Instance.LogHelper.TLLog($"舱室信息:{JsonConvert.SerializeObject(serialBin.SerialModels)}", LogEnum.RunRecord); AppData.Instance.LogHelper.TLLog($"E方数据:{JsonConvert.SerializeObject(serialBin.HouseEEPROInfos)}", LogEnum.RunRecord); if (errorList.Any()) { errora = $"获取串口信息错误{JsonConvert.SerializeObject(errorList)}"; AppData.Instance.LogHelper.TLLog(errora, LogEnum.RunRecord); return; } var modelCount = serialBin.SerialModels.Count; if (modelCount != 11) { string messageinfo = $"检测到{modelCount}个模块,是否继续运行?"; MessageBoxResult aaa = MessageBox.Show(messageinfo, "提示", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No, MessageBoxOptions.DefaultDesktopOnly); if (aaa != MessageBoxResult.Yes) { errora = "结束"; return; } } List listIntRunHoues = serialBin.SerialModels.Select(x => x.houseSn).ToList(); TLInitData tLInitData = new TLInitData(); tLInitData.tlSn = $"NEO-1-{serialBin.TLNum}"; tLInitData.dayLighting = serialBin.dayLighting; tLInitData.softwareVersion = "V2.0.0"; tLInitData.verticalMotorPulseMax = 125000; tLInitData.houseLinkDataList = serialBin.SerialModels.OrderBy(x => x.houseSn).ToList(); foreach (var item in serialBin.HouseEEPROInfos) { item.tlSn = tLInitData.tlSn; } tLInitData.houseEEPROInitDTOList = serialBin.HouseEEPROInfos.OrderBy(x => x.houseSn).ToList(); AppData.Instance.LogHelper.TLLog($"舱室信息:{JsonConvert.SerializeObject(tLInitData)}", LogEnum.RunRecord); SettingDataApiData settingDataApiData = AppData.Instance.HttpHelper.GetSettingDataApi(tLInitData); if (settingDataApiData == null) { errora = $"{tLInitData.tlSn}获取仪器设置失败"; return; } AppData.Instance.LogHelper.TLLog(JsonConvert.SerializeObject(settingDataApiData), LogEnum.RunRecord); tLSetting = AppData.Instance.ConvertHelper.ConvertToTLSetting(settingDataApiData.tlInfo, settingDataApiData.tlSetting); CurrentHouse = settingDataApiData.houseList.FirstOrDefault(x => x.houseSn == 11); if (CurrentHouse == null) { errora = $"{tLInitData.tlSn}获取缓冲瓶信息失败"; return; } } catch (Exception ex) { AppData.Instance.LogHelper.ExceptionLog(ex, $"缓冲瓶调试模式初始化", LogEnum.RunException); errora = $"缓冲瓶调试模式初始化异常:{ex.Message}"; } } public async Task ComHouseInit() { await Task.Run(async () => { try { comBin = new ComBin(CurrentHouse.houseSn, CurrentHouse.housePort); comBin.CommandLogEvent += ComBin_CommandLogEvent; comBin.ErrorLogEvent += ComBin_ErrorLogEvent; comBin.ExceptionLogEvent += ComBin_ExceptionLogEvent; comBin.AddMessageInfoEvent += AddMessageInfo; var openPort = comBin.OpenPort(); if (openPort) { AddMessageInfo($"[{currentHouse.houseSn}][{currentHouse.housePort}]缓冲瓶串口打开成功"); } else { AddMessageInfo($"[{currentHouse.houseSn}][{currentHouse.housePort}]缓冲瓶串口打开失败"); return; } CustomProtocol custom = new CustomProtocol(); comBin.ShakeHandsWait(custom); RedL(); var a = comBin.BufferBottleState(custom); BufferBottlePressure = a.Item1; Temperature1 = a.Item2; Temperature2 = a.Item3; return; } catch (Exception ex) { AppData.Instance.LogHelper.ExceptionLog(ex, "缓冲瓶调试模式初始化", LogEnum.RunException); AddMessageInfo($"初始化异常:{ex.Message}"); return; } }); } public bool ComHouseUnit() { try { if (comBin != null) AddMessageInfo($"[{currentHouse.houseSn}][{currentHouse.housePort}]缓冲瓶串口卸载结果:{comBin.ClosePort()}"); comBin = null; return true; } catch (Exception ex) { AppData.Instance.LogHelper.ExceptionLog(ex, "缓冲瓶卸载", LogEnum.RunException); AddMessageInfo($"缓冲瓶卸载异常:{ex.Message}"); return false; } } public void BufferState() { CustomProtocol custom = new CustomProtocol(); var a = comBin.BufferBottleState(custom); BufferBottlePressure = a.Item1; Temperature1 = a.Item2; Temperature2 = a.Item3; } public void Are() { CustomProtocol custom = new CustomProtocol(); comBin.BufferBottleAerationWait(custom); } /// /// 进气阀打开时间 /// /// public void writeE(int newValue) { CustomProtocol custom = new CustomProtocol(); comBin.WriteEEPROOpenIntakeTimeBufferWait(custom, newValue); CurrentHouse.inletValveOpeningTime = newValue; AddMessageInfo($"进气阀打开时间保存服务器结果:{AppData.Instance.HttpHelper.LightsUpdateApi(tLSetting.tlSn, LedLight, CurrentHouse.inletValveOpeningTime)}"); } /// /// 设置灯光亮度 /// /// public void writeL(int newValue) { CustomProtocol custom = new CustomProtocol(); comBin.WriteEEPROMLightNumWait(custom, newValue); LedLight = newValue; AddMessageInfo($"灯光亮度保存服务器结果:{AppData.Instance.HttpHelper.LightsUpdateApi(tLSetting.tlSn, LedLight, CurrentHouse.inletValveOpeningTime)}"); } public void RedL() { CustomProtocol custom = new CustomProtocol(); LedLight = comBin.ReadEEPROMLightNumWait(custom); } private void ComBin_ExceptionLogEvent(Exception exception, string arg2, string arg3, LogEnum @enum) { AppData.Instance.LogHelper.ExceptionLog(exception, $"{arg2}{arg3}", @enum); } private void ComBin_ErrorLogEvent(string arg1, LogEnum @enum) { AppData.Instance.LogHelper.TLLog(arg1, @enum); } private void ComBin_CommandLogEvent(int arg1, DateTime time, string arg3, LogEnum @enum) { AppData.Instance.LogHelper.HouseLog(arg1, time, arg3, @enum); } public void AddMessageInfo(string mess) { MessageEvent?.Invoke(mess); } } }