| | |
| | | using HMI.Core.Util; |
| | | using HMI.Base; |
| | | using HMI.Core.Setting; |
| | | using HMI.Core.Util; |
| | | using HMI.LogUtil; |
| | | using HMI.UI.Util; |
| | | using HMI.Util; |
| | | using Plugin.TestResult; |
| | | using Plugin.TestResult.Util; |
| | | using Plugin.TestResult_WPF.Model; |
| | | using Plugin.TestResult_WPF.Util; |
| | | using Plugin.TsSupport; |
| | | using SuperSocket.SocketBase.Config; |
| | | using SuperSocket.SocketBase.Protocol; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.IO; |
| | | using System.Net.WebSockets; |
| | | using System.Runtime.CompilerServices; |
| | | using System.Threading.Tasks; |
| | | using System.Timers; |
| | | using System.Windows; |
| | | using System.Windows.Controls; |
| | | using System.Windows.Markup; |
| | | |
| | | namespace Plugin.TestResult_WPF |
| | | { |
| | |
| | | set => RaiseAndSetIfchanged(ref _isTesting, value); |
| | | } |
| | | |
| | | private ushort coolerStatus; |
| | | public ushort CoolerStatus |
| | | { |
| | | get => coolerStatus; |
| | | set |
| | | { |
| | | RaiseAndSetIfchanged(ref coolerStatus, value); |
| | | } |
| | | } |
| | | |
| | | private string tcpServerStatus; |
| | | |
| | | public string TcpServerStatus |
| | |
| | | get { return tcpServerInfo; } |
| | | set { RaiseAndSetIfchanged(ref tcpServerInfo, value); } |
| | | } |
| | | |
| | | private static ICodeParser codeParser; |
| | | private readonly int index; |
| | | private readonly int cellCount; |
| | | public int index { get; private set; } |
| | | public readonly int cellCount; |
| | | private readonly string chartTitle; |
| | | private readonly TestResultView parent; |
| | | public readonly TestResultView parent; |
| | | |
| | | private BaseConfig config; |
| | | private Chart chart; |
| | | private Chart multiChart; |
| | | private SingleCell[] cells; |
| | | private LiveChart chart; |
| | | private LiveChart multiChart; |
| | | public SingleCell[] cells { get; private set; } |
| | | |
| | | private TcpServer tcpServer; |
| | | private string CountIniPath; |
| | |
| | | this.title = title; |
| | | this.cellCount = config.PositionCount; |
| | | this.cells = new SingleCell[cellCount]; |
| | | this.chartTitle = config.MainChartTitle; |
| | | this.chartTitle = this.lang("Tr.AvgTemp"); |
| | | DataContext = this; |
| | | InitializeComponent(); |
| | | mainGrid.Columns = config.PositionColumn; |
| | | this.chart = new Chart(this.chartTitle, false, config.MaxSize, config.RefreshInterval); |
| | | this.multiChart = new Chart(config.DetailChartTitle, true, config.MaxSize, config.RefreshInterval) |
| | | this.chart = new LiveChart("平均温度,平均温度(℃)", false, true); |
| | | this.multiChart = new LiveChart(",详细温度(℃)", true) |
| | | { |
| | | BorderThickness = new Thickness(0) |
| | | }; |
| | |
| | | cells[i] = cell; |
| | | } |
| | | |
| | | if (config.CodeParserType == "JK01") |
| | | { |
| | | codeParser = new JKCodeParser(); |
| | | } |
| | | else |
| | | { |
| | | codeParser = new CommonCodeParser(); |
| | | } |
| | | ScannerParser.Init(config.CodeParserType); |
| | | |
| | | ReadCount(); |
| | | testTimeTimer = new Timer(); |
| | | testTimeTimer.Interval = 10000; |
| | | testTimeTimer.AutoReset = true; |
| | | testTimeTimer.Elapsed += TestTimeTimer_Elapsed; |
| | | if (!ParamSetting.ShowCoolerSetting) coolerSetting.Visibility = Visibility.Collapsed; |
| | | if (!ParamSetting.ShowBurnInAbort) abortBtn.Visibility = Visibility.Collapsed; |
| | | } |
| | | |
| | | private void TestTimeTimer_Elapsed(object sender, ElapsedEventArgs e) |
| | |
| | | var now = DateTime.Now; |
| | | Dispatcher.BeginInvoke(new Action(() => |
| | | { |
| | | SetConsumeTime((now - testStartTime).Value.TotalSeconds); |
| | | //SetConsumeTime((now - testStartTime).Value.TotalSeconds); |
| | | })); |
| | | } |
| | | |
| | |
| | | { |
| | | infoTable.temperature = t; |
| | | tempratures.Add(t); |
| | | chart.AddData(t); |
| | | chart.AddDynamicData("平均温度", "平均温度(℃)", DateTime.Now, t); |
| | | } |
| | | |
| | | public void SetTemperature(string name, double t) |
| | | { |
| | | List<double> list; |
| | | if (detailTempratures.ContainsKey(name)) |
| | | { |
| | | list = detailTempratures[name]; |
| | | } |
| | | else |
| | | { |
| | | list = new List<double>(); |
| | | detailTempratures.Add(name, list); |
| | | } |
| | | list.Add(t); |
| | | multiChart.AddData(name, t); |
| | | //List<double> list; |
| | | //if (detailTempratures.ContainsKey(name)) |
| | | //{ |
| | | // list = detailTempratures[name]; |
| | | //} |
| | | //else |
| | | //{ |
| | | // list = new List<double>(); |
| | | // detailTempratures.Add(name, list); |
| | | //} |
| | | //list.Add(t); |
| | | |
| | | multiChart.AddDynamicData(name, "详细温度(℃)", DateTime.Now, t); |
| | | //multiChart.AddData(name, t); |
| | | } |
| | | |
| | | public void SetStatus(string status) |
| | |
| | | } |
| | | infoTable.status = status; |
| | | |
| | | if (lastStatus != "testing" && status == "testing") |
| | | { |
| | | testStartTime = DateTime.Now; |
| | | SetStartTime(testStartTime?.ToString("yyyy-MM-dd HH:mm:ss")); |
| | | testTimeTimer.Start(); |
| | | } |
| | | if (lastStatus == "testing" && status != "testing") |
| | | { |
| | | testTimeTimer.Stop(); |
| | | var now = DateTime.Now; |
| | | SetConsumeTime((now - testStartTime).Value.TotalSeconds); |
| | | SetEndTime(now.ToString("yyyy-MM-dd HH:mm:ss")); |
| | | testStartTime = null; |
| | | } |
| | | //if (lastStatus != "testing" && status == "testing") |
| | | //{ |
| | | // testStartTime = DateTime.Now; |
| | | // SetStartTime(testStartTime?.ToString("yyyy-MM-dd HH:mm:ss")); |
| | | // testTimeTimer.Start(); |
| | | //} |
| | | //if (lastStatus == "testing" && status != "testing") |
| | | //{ |
| | | // testTimeTimer.Stop(); |
| | | // var now = DateTime.Now; |
| | | // infoTable.UpdateConsumeTime((now - testStartTime).Value.TotalSeconds, null); |
| | | // SetEndTime(now.ToString("yyyy-MM-dd HH:mm:ss")); |
| | | // testStartTime = null; |
| | | //} |
| | | })); |
| | | } |
| | | |
| | |
| | | infoTable.endTimeStr = endTime; |
| | | } |
| | | |
| | | public void SetConsumeTime(double consumeTime) |
| | | public void UpdateConsumeTime(double consumeTime, double? leftTime) |
| | | { |
| | | infoTable.consumeTime = consumeTime; |
| | | infoTable.UpdateConsumeTime(consumeTime, leftTime); |
| | | } |
| | | |
| | | private ChartWindow window; |
| | |
| | | { |
| | | if (IsTesting) |
| | | { |
| | | if (MsgBoxHelper2.WarnChoose($"确实停止老化炉[{title}]的测试吗") == MessageBoxResult.OK) |
| | | if (MsgBoxHelper2.WarnChoose(this.lang("Tr.MakeSureStopOvenTest", title)) == MessageBoxResult.OK) |
| | | { |
| | | LogHelper.Info("UI", $"老化炉[{title}]停止按钮按下", out _); |
| | | ViewControl.Logger.Info($"老化炉[{title}]停止按钮按下"); |
| | | parent.SetStartFlag(this.index, false); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | ClearChartData(); |
| | | parent.SetStartFlag(this.index, true); |
| | | /// 检查是否关门 |
| | | if (!GetDoorClose(parent.executionWrapper)) |
| | | { |
| | | /// 没关门不允许启动 |
| | | MsgBoxHelper2.Warn("请先关闭舱门!"); |
| | | return; |
| | | } |
| | | |
| | | /// 检查是否有条码 |
| | | bool flag = false; |
| | | foreach (var cell in cells) |
| | | { |
| | | if (!string.IsNullOrEmpty(cell.sn)) |
| | | { |
| | | flag = true; |
| | | break; |
| | | } |
| | | } |
| | | if (flag) |
| | | { |
| | | LogHelper.Info("UI", $"老化炉[{title}]启动按钮按下", out _); |
| | | ViewControl.Logger.Info($"老化炉[{title}]启动按钮按下"); |
| | | ClearChartData(); |
| | | parent.SetStartFlag(this.index, true); |
| | | } |
| | | else |
| | | { |
| | | MsgBoxHelper2.Warn("请先完成扫码!"); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | if (!parent.IsRunning) |
| | | { |
| | | MsgBoxHelper.WarnMessage(this, "请先点击右侧启动按钮启动测试程序!", null, MessageBoxButton.OK); |
| | | MsgBoxHelper.WarnMessage(this, this.lang("Tr.StartSeqFirst"), null, MessageBoxButton.OK); |
| | | return; |
| | | } |
| | | |
| | |
| | | } |
| | | else |
| | | { |
| | | scanner = new Scanner(this.lang("Tr.ScanTitle", title)) |
| | | int rows = config.CellCount / config.PositionColumn + 1; |
| | | scanner = new Scanner(this.index, this.lang("Tr.ScanTitle", title), CbProduct.SelectedItem?.ToString(), mainGrid.Columns, rows) |
| | | { |
| | | Owner = Window.GetWindow(this), |
| | | Tag = title |
| | |
| | | private void Scanner_ComplateClick(object sender, RoutedEventArgs e) |
| | | { |
| | | string paramName = $"StationState.Scanner[{index}]"; |
| | | parent.engine.Globals.SetValBoolean(paramName, 1, true); |
| | | //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | |
| | | parent.executionWrapper.SetStationGlobalValue<bool>(paramName, 1, true); |
| | | //parent.engine.Globals.SetValBoolean(paramName, 1, true); |
| | | } |
| | | |
| | | private void Scanner_Closed(object sender, EventArgs e) |
| | |
| | | scanner = null; |
| | | } |
| | | |
| | | public bool GetDoorClose(ITestExecutionWrapper wrapper) |
| | | { |
| | | return wrapper?.GetStationGlobalValue<bool>($"StationState.DoorClose[{this.index}]", 0) == true; |
| | | } |
| | | |
| | | private void Scanner_FinishBarcode(object sender, BarcodeEventArg e) |
| | | { |
| | | if (parent.SequenceContext == null) return; |
| | | if (parent.executionWrapper == null) return; |
| | | //if (parent.SequenceContext == null) return; |
| | | |
| | | CellInfo cellInfo = codeParser.GetCellInfoByCode(e.positionCode); |
| | | int rows = (config.CellCount / config.PositionColumn) + 1; |
| | | CellInfo cellInfo = ScannerParser.GetCellInfoByCode(CbProduct.SelectedItem?.ToString(), mainGrid.Columns, rows, e.positionCode); |
| | | string positionCode = e.positionCode, snrCode = e.snrCode; |
| | | |
| | | //if (cellInfo.OvenName != this.title) |
| | | //{ |
| | | // MsgBoxHelper2.Warn($"请切换至 [{cellInfo.OvenName}] 区扫码,当前为 [{this.title}] 区!"); |
| | | // return; |
| | | //} |
| | | |
| | | |
| | | var targetTable = TestResultView.nameTables[cellInfo.OvenName]; |
| | | |
| | | //将读到的条码写入到SN中 |
| | | int dutNo = this.index * this.cellCount + cellInfo.Index; |
| | | |
| | | int dutNo = targetTable.index * targetTable.cellCount + cellInfo.Index; |
| | | string LookupStr = $"StationState.SN[{dutNo}]"; |
| | | cellInfo.LookUpStr = LookupStr; |
| | | |
| | | ViewControl.Logger.Debug($"PositionCode: [{e.positionCode}], SNR: [{e.snrCode}], LookUpStr: [{LookupStr}]"); |
| | | ViewControl.Logger.Debug($"OvenName: [{cellInfo.OvenName}], CellIndex: [{cellInfo.Index}]"); |
| | | var cell = parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index); |
| | | ViewControl.Logger.Info($"PositionCode: [{e.positionCode}], SNR: [{e.snrCode}], LookUpStr: [{LookupStr}]"); |
| | | ViewControl.Logger.Info($"OvenName: [{cellInfo.OvenName}], CellIndex: [{cellInfo.Index}]"); |
| | | var cell = targetTable.GetSingleCell(cellInfo.Index); |
| | | |
| | | if (targetTable.GetDoorClose(parent.executionWrapper)) |
| | | { |
| | | /// 关门了就不允许清条码 |
| | | MsgBoxHelper2.Warn($"{targetTable.title}炉生产中,不允许操作条码"); |
| | | //MsgBoxHelper2.Warn(this.lang("Tr.CantClearSNR")); |
| | | return; |
| | | } |
| | | |
| | | if (snrCode == null) |
| | | { |
| | | string oldLookUp = $"StationState.SN[{e.oldIndex}]"; |
| | | var oldCellInfo = codeParser.GetCellInfoByCode(e.oldPosition); |
| | | var oldCell = parent.nameTables[oldCellInfo.OvenName].GetSingleCell(oldCellInfo.Index); |
| | | var oldCellInfo = e.lastInfo; |
| | | var oldTable = TestResultView.nameTables[oldCellInfo.OvenName]; |
| | | var oldCell = oldTable.GetSingleCell(oldCellInfo.Index); |
| | | if (oldCell.status != "hadCode") |
| | | { |
| | | throw new Exception($"穴位[{e.oldPosition}]当前不允许清除条码!"); |
| | | throw new Exception(this.lang("Tr.PositionCantClearSNR", oldCellInfo.OriginCode)); |
| | | } |
| | | // 移除条码 |
| | | parent.engine.Globals.SetValString(oldLookUp, 1, ""); |
| | | parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | parent.executionWrapper.SetStationGlobalValue<string>(oldCellInfo.LookUpStr, 1, ""); |
| | | parent.executionWrapper.CommitToDisk(false); |
| | | |
| | | //parent.engine.Globals.SetValString(oldCellInfo.LookUpStr, 1, ""); |
| | | //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | oldCell.SetStatus("waiting"); |
| | | oldCell.sn = ""; |
| | | oldCell.ClearSN(); |
| | | return; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | // 写入条码 |
| | | parent.engine.Globals.SetValString(LookupStr, 1, snrCode); |
| | | parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | parent.executionWrapper.SetStationGlobalValue<string>(LookupStr, 1, snrCode); |
| | | parent.executionWrapper.CommitToDisk(false); |
| | | |
| | | parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).SetStatus("hadCode"); |
| | | parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).sn = snrCode; |
| | | Scanner.InsertNewCode(snrCode, positionCode, dutNo); |
| | | //parent.engine.Globals.SetValString(LookupStr, 1, snrCode); |
| | | //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | |
| | | cell.SetStatus("hadCode"); |
| | | cell.sn = snrCode; |
| | | Scanner.InsertNewCode(snrCode, cellInfo); |
| | | cell.LightGreen(true, out string msg); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | string strs = datas_10015[2]; |
| | | string[] values = strs.Split(','); |
| | | |
| | | //string step = datas_10015[2]; |
| | | //string result = datas_10015[3]; |
| | | GetSingleCell(cellIndex).SetInfos(new Info |
| | | Dispatcher.Invoke(() => |
| | | { |
| | | step = values[0], |
| | | value = values[1], |
| | | limitUp = values[2], |
| | | limitDown = values[3], |
| | | unit = values[4], |
| | | result = values[5], |
| | | updateTime = values[6] |
| | | GetSingleCell(cellIndex).SetInfos(new Info |
| | | { |
| | | step = values[0], |
| | | value = values[1], |
| | | limitUp = values[2], |
| | | limitDown = values[3], |
| | | unit = values[4], |
| | | result = values[5], |
| | | updateTime = values[6] |
| | | }); |
| | | }); |
| | | //session.Send("1"); |
| | | } |
| | |
| | | public void RefreshCount(int ok, int ng) |
| | | { |
| | | infoTable.UpdateNumber(infoTable.okCount + ok, infoTable.ngCount + ng); |
| | | IniFileHelper.WriteIniData($"Oven_{index}", "Pass", infoTable.okCount.ToString(), |
| | | this.CountIniPath); |
| | | IniFileHelper.WriteIniData($"Oven_{index}", "Fail", infoTable.ngCount.ToString(), |
| | | this.CountIniPath); |
| | | |
| | | if (ParamSetting.ProbeByModel) |
| | | { |
| | | |
| | | } |
| | | else |
| | | { |
| | | IniFileHelper.WriteIniData($"Oven_{index}", "Pass", infoTable.okCount.ToString(), |
| | | this.CountIniPath); |
| | | IniFileHelper.WriteIniData($"Oven_{index}", "Fail", infoTable.ngCount.ToString(), |
| | | this.CountIniPath); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) |
| | | using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8)) |
| | | { |
| | | string title = string.Join(",", detailTempratures.Keys) + ",平均值"; |
| | | string title = string.Join(",", detailTempratures.Keys) + "," + this.lang("Tr.AvgTemp"); |
| | | sw.WriteLine(title); |
| | | |
| | | for (int i = 0; i < tempratures.Count; i++) |
| | |
| | | { |
| | | parent.SetOvenProduct(index, ""); |
| | | } |
| | | } |
| | | |
| | | public void ClearElectricData() |
| | | { |
| | | foreach (var cell in cells) |
| | | { |
| | | cell.ClearElectricData(); |
| | | cell.RefreshProbe(); |
| | | cell.RefreshCharts(); |
| | | } |
| | | } |
| | | |
| | | public void ClearVData() |
| | | public void ClearCellData() |
| | | { |
| | | foreach (var cell in cells) |
| | | { |
| | | cell.ClearVData(); |
| | | cell.ClearChart(); |
| | | } |
| | | } |
| | | |
| | | //public void ClearElectricData() |
| | | //{ |
| | | // foreach (var cell in cells) |
| | | // { |
| | | // cell.ClearElectricData(); |
| | | // } |
| | | //} |
| | | |
| | | //public void ClearVData() |
| | | //{ |
| | | // foreach (var cell in cells) |
| | | // { |
| | | // cell.ClearVData(); |
| | | // } |
| | | //} |
| | | |
| | | //public void ClearWaterData() |
| | | //{ |
| | | // foreach (var cell in cells) |
| | | // { |
| | | // cell.ClearWaterData(); |
| | | // } |
| | | //} |
| | | |
| | | private void Button_Click_1(object sender, RoutedEventArgs e) |
| | | { |
| | |
| | | setting.Open(true, this.title); |
| | | } |
| | | |
| | | private void Manual_Cooler_Opt(object sender, RoutedEventArgs e) |
| | | { |
| | | //var btn = (Button)sender; |
| | | //var target = CoolerStatus == 2 ? 0 : 2; |
| | | //if (MsgBoxHelper2.WarnChoose($"确定要进行{btn.Content}吗?") == MessageBoxResult.OK) |
| | | //{ |
| | | // if (S7Context.WriteData("1", $"Oven{index + 1}_CoolerStatus", (ushort)target, out string msg)) |
| | | // { |
| | | // CoolerStatus = (ushort)target; |
| | | // ToastHelper.Success("Success"); |
| | | // } |
| | | // else |
| | | // { |
| | | // ToastHelper.Error($"{msg}"); |
| | | // } |
| | | //} |
| | | if (parent.IsRunning) |
| | | { |
| | | MsgBoxHelper2.Warn(this.lang("Tr.CantOptCooler")); |
| | | return; |
| | | } |
| | | var columns = mainGrid.Columns; |
| | | var window = new CoolerStatus(this.index, columns, title + this.lang("Tr.CoolerSetting")) |
| | | { |
| | | |
| | | Owner = Window.GetWindow(this) |
| | | }; |
| | | window.ShowDialog(); |
| | | } |
| | | |
| | | private void ClearAllSnr_Click(object sender, RoutedEventArgs e) |
| | | { |
| | | var str = $"StationState.DoorClose[{index}]"; |
| | | if (parent.engine.Globals.GetValBoolean(str, 0) == true) |
| | | if (GetDoorClose(parent.executionWrapper)) |
| | | { |
| | | MsgBoxHelper.Error(Window.GetWindow(this), "程序运行中,不能清空条码"); |
| | | /// 关门了就不允许清条码 |
| | | MsgBoxHelper2.Warn(this.lang("Tr.CantClearSNR")); |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | public void TryClearCellSN(int cellIndex) |
| | | { |
| | | var str = $"StationState.DoorClose[{this.index}]"; |
| | | if (parent.engine.Globals.GetValBoolean(str, 0) == true) |
| | | if (GetDoorClose(parent.executionWrapper)) |
| | | { |
| | | MsgBoxHelper.Error(Window.GetWindow(this), "程序运行中,不能清空条码"); |
| | | MsgBoxHelper.Error(Window.GetWindow(this), this.lang("Tr.CantClearSNR")); |
| | | return; |
| | | } |
| | | ClearCellSN(cellIndex); |
| | |
| | | int dutNo = this.index * this.cellCount + index; |
| | | string LookupStr = $"StationState.SN[{dutNo}]"; |
| | | var lastSN = cell.sn; |
| | | cell.sn = ""; |
| | | cell.SetStatus("waiting"); |
| | | parent.engine.Globals.SetValString(LookupStr, 1, ""); |
| | | parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | |
| | | parent.executionWrapper.SetStationGlobalValue<string>(LookupStr, 1, ""); |
| | | parent.executionWrapper.CommitToDisk(false); |
| | | |
| | | //parent.engine.Globals.SetValString(LookupStr, 1, ""); |
| | | //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | if (!string.IsNullOrEmpty(lastSN)) Scanner.RemoveSNR(lastSN); |
| | | cell.ClearSN(); |
| | | } |
| | | |
| | | private void Button_Click_2(object sender, RoutedEventArgs e) |
| | | private void Abort_Click(object sender, RoutedEventArgs e) |
| | | { |
| | | if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), "确定要停止该炉位的老化测试吗?") == MessageBoxResult.OK) |
| | | if (!parent.IsRunning) |
| | | { |
| | | parent.SetStartFlag(this.index, false); |
| | | MsgBoxHelper.WarnMessage(this, this.lang("Tr.StartSeqFirst"), null, MessageBoxButton.OK); |
| | | return; |
| | | } |
| | | |
| | | //string key = $"StationState.Start[{this.index}]"; |
| | | //if (parent.executionWrapper?.GetStationGlobalValue<bool>(key, 0) == true) |
| | | //{ |
| | | // MsgBoxHelper2.Warn("测试启动中,不允许Abort"); |
| | | // return; |
| | | //} |
| | | var win = new RequirePasswordByUser("admin") |
| | | { |
| | | Owner = Window.GetWindow(this) |
| | | }; |
| | | if (win.ShowDialog() != true) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | if (MsgBoxHelper2.WarnChoose("请确认老化仓在安全温度,水冷机吹水完成,单击OK按钮仓位回到初始化状态") != MessageBoxResult.OK) |
| | | { |
| | | return; |
| | | } |
| | | LogHelper.Info("UI", $"{title} Abort按钮按下", out _); |
| | | ViewControl.Logger.Info($"{title} Abort按钮按下"); |
| | | string key = $"StationState.Abort[{this.index}]"; |
| | | parent.executionWrapper?.SetStationGlobalValue(key, 0, true); |
| | | } |
| | | } |
| | | } |