| | |
| | | using HMI.Core.Manager; |
| | | using HMI.Core.Setting; |
| | | using HMI.Core.Util; |
| | | using HMI.LogUtil; |
| | | using HMI.StdControl; |
| | | using HMI.UI.Util; |
| | | using log4net; |
| | |
| | | using NationalInstruments.TestStand.Interop.UI.Ax; |
| | | using PLCHelper; |
| | | using Plugin.TestResult.Util; |
| | | using Plugin.TsSupport; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | |
| | | /// </summary> |
| | | public partial class ViewControl : PluginMaskControl, IAlarmHandler |
| | | { |
| | | /// <summary> |
| | | /// 测试序列操作句柄 |
| | | /// </summary> |
| | | private SequenceContext SequenceContext = null; |
| | | |
| | | private System.Timers.Timer timer; |
| | | |
| | |
| | | set => Set(ref _fileName, value); |
| | | } |
| | | |
| | | private bool enableManualDebug; |
| | | public bool EnableManualDebug |
| | | { |
| | | get => enableManualDebug; |
| | | set |
| | | { |
| | | if (IsRunning) |
| | | { |
| | | MsgBoxHelper2.Warn("请先结束自动测试"); |
| | | return; |
| | | } |
| | | testResultView.inManualDebugMode = value; |
| | | Set(ref enableManualDebug, value); |
| | | } |
| | | } |
| | | |
| | | public override void SetLogger(ILog logger) |
| | | { |
| | | base.SetLogger(logger); |
| | |
| | | Set(ref isRunning, value); |
| | | testResultView.IsRunning = value; |
| | | this.modelSelect.IsEnabled = !value; |
| | | this.btnStart.IsEnabled = !value; |
| | | this.btnStop.IsEnabled = value; |
| | | stdEnableMes.CbEnabled = !value; |
| | | } |
| | | } |
| | | |
| | | private bool AutoExecuteSeq = true; |
| | | |
| | | #region TS相关 |
| | | |
| | | /// <summary> |
| | | /// 测试序列操作句柄 |
| | | /// </summary> |
| | | private SequenceContext SequenceContext = null; |
| | | #endregion |
| | | |
| | | public ViewControl() |
| | | { |
| | |
| | | timer.Interval = 1000; |
| | | timer.Elapsed += Timer_Elapsed; |
| | | InitializeComponent(); |
| | | testResultView.testApp.ExitApplication += new EventHandler(this.axApplicationMgr_ExitApplication); |
| | | testResultView.testApp.UIMessageEvent += new _ApplicationMgrEvents_UIMessageEventEventHandler(this.axApplicationMgr_UIMessageEvent); |
| | | testResultView.testApp.ExecutionClosed += new _ApplicationMgrEvents_ExecutionClosedEventHandler(this.axApplicationMgr_ExecutionClosed); |
| | | |
| | | if (testResultView.executionWrapper is TsExecutionWrapper tsWrapper) |
| | | { |
| | | tsWrapper.AxApplicationMgr.ExitApplication += new EventHandler(this.axApplicationMgr_ExitApplication); |
| | | tsWrapper.AxApplicationMgr.UIMessageEvent += new _ApplicationMgrEvents_UIMessageEventEventHandler(this.axApplicationMgr_UIMessageEvent); |
| | | tsWrapper.AxApplicationMgr.ExecutionClosed += new _ApplicationMgrEvents_ExecutionClosedEventHandler(this.axApplicationMgr_ExecutionClosed); |
| | | } |
| | | |
| | | |
| | | //testResultView.testApp.ExitApplication += new EventHandler(this.axApplicationMgr_ExitApplication); |
| | | //testResultView.testApp.UIMessageEvent += new _ApplicationMgrEvents_UIMessageEventEventHandler(this.axApplicationMgr_UIMessageEvent); |
| | | //testResultView.testApp.ExecutionClosed += new _ApplicationMgrEvents_ExecutionClosedEventHandler(this.axApplicationMgr_ExecutionClosed); |
| | | } |
| | | |
| | | private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) |
| | |
| | | testResultView.testSeqFile = string.Empty; |
| | | FileName = string.Empty; |
| | | } |
| | | RefreshUIConfig(); |
| | | } |
| | | |
| | | public override void DoClose(object sender, EventArgs e) |
| | | /// <summary> |
| | | /// 刷新UI配置 |
| | | /// </summary> |
| | | private void RefreshUIConfig() |
| | | { |
| | | try |
| | | { |
| | | timer?.Stop(); |
| | | testResultView.ReleaseResource(); |
| | | } |
| | | catch |
| | | { |
| | | } |
| | | } |
| | | |
| | | public override void OnClose(object sender, CancelEventArgs e) |
| | | { |
| | | /// 运行中就不管 |
| | | if (IsRunning) |
| | | { |
| | | MsgBoxHelper2.Warn("请先停止老化测试!"); |
| | | e.Cancel = true; |
| | | return; |
| | | } |
| | | bool enableManualDebug = ParameterManager.GetCommonParameterByName("EnableManualDebug", false); |
| | | if (enableManualDebug) |
| | | { |
| | | FgEnableManualDebug.Visibility = Visibility.Visible; |
| | | } |
| | | else |
| | | { |
| | | FgEnableManualDebug.Visibility = Visibility.Collapsed; |
| | | EnableManualDebug = false; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | log.Error("RefreshUIConfig Error.", ex); |
| | | } |
| | | } |
| | | |
| | |
| | | productSource.Add(prd.Name); |
| | | } |
| | | testResultView.SetProductSource(productSource); |
| | | testResultView.SetCurrentProduct(null); |
| | | |
| | | string model = testResultView.engine.Globals.GetValString("ProductModel", 1); |
| | | if (!string.IsNullOrEmpty(model)) |
| | | { |
| | | this.modelSelect.SelectedItem = model; |
| | | testResultView.SetCurrentProduct(model); |
| | | } |
| | | else if (products.Count > 0) |
| | | { |
| | | this.modelSelect.SelectedIndex = 0; |
| | | testResultView.SetCurrentProduct(products[0].Name); |
| | | } |
| | | //string model = testResultView.executionWrapper.GetStationGlobalValue<string>("ProductModel", 1); |
| | | ////testResultView.engine.Globals.GetValString("ProductModel", 1); |
| | | //if (!string.IsNullOrEmpty(model)) |
| | | //{ |
| | | // this.modelSelect.SelectedItem = model; |
| | | // testResultView.SetCurrentProduct(model); |
| | | //} |
| | | //else if (products.Count > 0) |
| | | //{ |
| | | // this.modelSelect.SelectedIndex = 0; |
| | | // testResultView.SetCurrentProduct(products[0].Name); |
| | | //} |
| | | } |
| | | |
| | | private void modelSelect_SelectionChanged(object sender, SelectionChangedEventArgs e) |
| | |
| | | { |
| | | string currentModel = this.modelSelect.SelectedItem.ToString(); |
| | | List<ParameterData> parameters = ProductManager.GetParametersByProductName(currentModel); |
| | | testResultView.engine.Globals.SetValString("ProductModel", 0, currentModel); |
| | | testResultView.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | |
| | | testResultView.executionWrapper.SetStationGlobalValue<string>("ProductModel", 0, currentModel); |
| | | testResultView.executionWrapper.CommitToDisk(false); |
| | | |
| | | //testResultView.engine.Globals.SetValString("ProductModel", 0, currentModel); |
| | | //testResultView.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | IsRunning = false; |
| | | return; |
| | | } |
| | | LogHelper.Info("UI", "总启动按钮按下", out _); |
| | | log.Info("总启动按钮按下"); |
| | | ShowMask(() => |
| | | { |
| | | testResultView.StartTestSequence(); |
| | |
| | | { |
| | | try |
| | | { |
| | | bool breakStop = false; |
| | | foreach (var oven in TestResultView.tables) |
| | | { |
| | | if (oven.IsTesting) |
| | | { |
| | | breakStop = true; |
| | | break; |
| | | } |
| | | } |
| | | if (breakStop) |
| | | { |
| | | MsgBoxHelper2.Warn(this.lang("Tr.OvenIsTesting")); |
| | | return; |
| | | } |
| | | |
| | | if (MsgBoxHelper2.WarnChoose(this.lang("Tr.MakeSureStopAllTest")) != MessageBoxResult.OK) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | LogHelper.Info("UI", "总停止按钮按下", out _); |
| | | log.Info("总停止按钮按下"); |
| | | testResultView.StopTest(); |
| | | /// 已经加了WaitForExit,这里可以改为false |
| | | IsRunning = false; |
| | | } |
| | | catch (Exception ex) |
| | |
| | | |
| | | private void StdEnableMes_ValueChanged(object sender, StdUIEventArg e) |
| | | { |
| | | testResultView.SequenceContext?.StationGlobals.SetValBoolean($"SystemSetting.{e.StringValue}", 1, e.BoolValue); |
| | | testResultView.executionWrapper.SetStationGlobalValue<bool>($"SystemSetting.{e.StringValue}", 1, e.BoolValue); |
| | | //testResultView.SequenceContext?.StationGlobals.SetValBoolean($"SystemSetting.{e.StringValue}", 1, e.BoolValue); |
| | | } |
| | | |
| | | public void HandleAlarm(AlarmText alarm) |
| | | { |
| | | if (alarm.Level >= 4 && TestResultView.tables != null) |
| | | { |
| | | log.Info($"4级报警触发: [{alarm.AlarmInfo}],将停止所有炉体测试"); |
| | | foreach (var oven in TestResultView.tables) |
| | | { |
| | | testResultView.SetStartFlag(oven.index, false); |
| | |
| | | if (alarm.Level >= 3) |
| | | { |
| | | /// 3级以上的报警会停止测试 |
| | | log.Info($"3级报警触发: [{alarm.AlarmInfo}],将停止老化炉[{targetOven.title}]测试"); |
| | | testResultView.SetStartFlag(targetOven.index, false); |
| | | } |
| | | } |
| | | |
| | | public override void Active() |
| | | { |
| | | base.Active(); |
| | | LoadProduct(); |
| | | RefreshUIConfig(); |
| | | } |
| | | |
| | | public override void OnClose(object sender, CancelEventArgs e) |
| | | { |
| | | if (IsRunning) |
| | | { |
| | | MsgBoxHelper2.Warn("请先停止老化测试!"); |
| | | e.Cancel = true; |
| | | } |
| | | } |
| | | |
| | | public override void DoClose(object sender, EventArgs e) |
| | | { |
| | | try |
| | | { |
| | | timer?.Stop(); |
| | | testResultView.ReleaseResource(); |
| | | } |
| | | catch |
| | | { |
| | | } |
| | | } |
| | | } |
| | | } |