| | |
| | | using HMI.Base; |
| | | using HMI.Core.Api; |
| | | using HMI.Core.Entity; |
| | | using HMI.Core.Manager; |
| | | using HMI.Core.Setting; |
| | | using HMI.Core.Util; |
| | | using HMI.StdControl; |
| | | using HMI.UI; |
| | | using HMI.UI.Util; |
| | | using log4net; |
| | | using NationalInstruments.TestStand.Interop.API; |
| | | using NationalInstruments.TestStand.Interop.UI.Ax; |
| | | using Plugin.TestResult_WPF.Model; |
| | | using Plugin.TestResult_WPF.Util; |
| | | using PLCHelper; |
| | | using Plugin.TestResult.Util; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Threading; |
| | | using System.Windows; |
| | | using System.Windows.Controls; |
| | | |
| | |
| | | /// <summary> |
| | | /// ViewControl.xaml 的交互逻辑 |
| | | /// </summary> |
| | | public partial class ViewControl : PluginMaskControl |
| | | public partial class ViewControl : PluginMaskControl, IAlarmHandler |
| | | { |
| | | private CommonCodeParser codeParser = new CommonCodeParser(); |
| | | private double TestTemperature = 60; |
| | | private int TestTime = 3600; |
| | | private double SaftyTemperature = 40; |
| | | private double TestVoltage = 12; |
| | | private double Time_Heating_Low = 300; |
| | | private double Time_Heating_High = 2400; |
| | | private Scanner scannerWindow1; |
| | | private Scanner scannerWindow2; |
| | | /// <summary> |
| | | /// 测试序列操作句柄 |
| | | /// </summary> |
| | | private SequenceContext SequenceContext = null; |
| | | |
| | | private System.Timers.Timer timer; |
| | | |
| | | public static ILog Logger { get; private set; } |
| | | |
| | |
| | | this.modelSelect.IsEnabled = !value; |
| | | this.btnStart.IsEnabled = !value; |
| | | this.btnStop.IsEnabled = value; |
| | | stdEnableMes.CbEnabled = !value; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | public ViewControl() |
| | | { |
| | | S7Context.Init(SystemSetting.Instance.PlcIp, SystemSetting.Instance.PlcPort); |
| | | DataContext = this; |
| | | timer = new System.Timers.Timer(); |
| | | 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); |
| | | } |
| | | |
| | | private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) |
| | | { |
| | | testResultView.RefreshCooler(); |
| | | } |
| | | |
| | | public TestResultView View |
| | |
| | | } |
| | | SannerIniFile = path; |
| | | LoadProduct(); |
| | | |
| | | var api = S7Context.Get(RunTimeVariablePool.DEFAULT_PLC_NAME); |
| | | log.Debug($"PLC {api.IpAddress}:{api.Port}"); |
| | | try |
| | | { |
| | | var value = ParameterManager.GetCommonParameterByName("AutoExecuteSeq"); |
| | |
| | | { |
| | | try |
| | | { |
| | | timer?.Stop(); |
| | | testResultView.ReleaseResource(); |
| | | } |
| | | catch |
| | | { |
| | | } |
| | | } |
| | | |
| | | public override void OnClose(object sender, CancelEventArgs e) |
| | | { |
| | | if (IsRunning) |
| | | { |
| | | MsgBoxHelper2.Warn("请先停止老化测试!"); |
| | | e.Cancel = true; |
| | | } |
| | | } |
| | | |
| | |
| | | private bool isLoaded; |
| | | private void UserControl_Loaded(object sender, RoutedEventArgs e) |
| | | { |
| | | AlarmShowHelper.AddHandler(this); |
| | | if (AutoExecuteSeq) |
| | | { |
| | | ShowMask(() => |
| | |
| | | IsRunning = false; |
| | | } |
| | | Loaded -= UserControl_Loaded; |
| | | |
| | | |
| | | //new MaskWindow(Window.GetWindow(this), (win) => |
| | | //{ |
| | | // try |
| | | // { |
| | | // Dispatcher.BeginInvoke(new Action(() => |
| | | // { |
| | | // Start_Click(null, null); |
| | | // Loaded -= UserControl_Loaded; |
| | | // })); |
| | | // } |
| | | // finally |
| | | // { |
| | | // Dispatcher.Invoke(() => |
| | | // { |
| | | // win.Close(); |
| | | // }); |
| | | // } |
| | | //}).Info(LangUtil.Get("Ts.SequenceIsStarting"), 100); |
| | | |
| | | //ShowMask(() => |
| | | //{ |
| | | // Dispatcher.BeginInvoke(new Action(() => |
| | | // { |
| | | // System.Threading.Thread.Sleep(100); |
| | | // Start_Click(null, null); |
| | | // Loaded -= UserControl_Loaded; |
| | | // })); |
| | | //}, (ex) => |
| | | //{ |
| | | // log.Error("Loaded Error.", ex); |
| | | // Dispatcher.BeginInvoke(new Action(() => |
| | | // { |
| | | // MsgBoxHelper.Error(Window.GetWindow(this), ex.Message); |
| | | // })); |
| | | //}, "请稍后", LangUtil.Get("Ts.SequenceIsStarting")); |
| | | } |
| | | |
| | | public void LoadProduct() |
| | |
| | | { |
| | | string currentModel = this.modelSelect.SelectedItem.ToString(); |
| | | List<ParameterData> parameters = ProductManager.GetParametersByProductName(currentModel); |
| | | //MessageBox.Show("ParaFile:" + ParaFile + "ParaCount:" + this.parameterManager.Parameters.Count.ToString()); |
| | | //this.TestTemperature = Convert.ToDouble(this.parameterManager.Find("TestTemperature").ParmValue); |
| | | //this.TestTime = Convert.ToInt32(this.parameterManager.Find("TestTime").ParmValue); |
| | | //this.TestVoltage = Convert.ToDouble(this.parameterManager.Find("TestVoltage").ParmValue); |
| | | //this.SaftyTemperature = Convert.ToDouble(this.parameterManager.Find("SaftyTemperature").ParmValue); |
| | | //this.Time_Heating_Low = Convert.ToDouble(this.parameterManager.Find("Time_Heat_Low").ParmValue); |
| | | //this.Time_Heating_High = Convert.ToDouble(this.parameterManager.Find("Time_Heat_High").ParmValue); |
| | | //testResultView.testSeqFile = parameters.FirstOrDefault(p => p.Name == "TestSequence")?.Value; |
| | | |
| | | testResultView.engine.Globals.SetValString("ProductModel", 0, currentModel); |
| | | testResultView.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false); |
| | | } |
| | |
| | | IsRunning = false; |
| | | return; |
| | | } |
| | | ShowMask(() => |
| | | { |
| | | testResultView.StartTestSequence(); |
| | | Dispatcher.Invoke(() => |
| | | { |
| | | IsRunning = true; |
| | | }); |
| | | }, (ex) => |
| | | { |
| | | log.Error("StartTestSequence Error.", ex); |
| | | Dispatcher.Invoke(() => |
| | | { |
| | | MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("Ts.StartTestSequenceFailed")}: {ex.Message}"); |
| | | }); |
| | | }, null, "请稍后..."); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | MsgBoxHelper.Error(Window.GetWindow(this), |
| | | $"{this.lang("Ts.StopTestSequenceFailed")}: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | private void ScannerWindow1_Closed(object sender, EventArgs e) |
| | | { |
| | | scannerWindow1 = null; |
| | | } |
| | | |
| | | private void ScannerWindow2_Closed(object sender, EventArgs e) |
| | | { |
| | | scannerWindow2 = null; |
| | | } |
| | | |
| | | private void testResultView_Loaded(object sender, RoutedEventArgs e) |
| | |
| | | { |
| | | testResultView.SequenceContext?.StationGlobals.SetValBoolean($"SystemSetting.{e.StringValue}", 1, e.BoolValue); |
| | | } |
| | | |
| | | public void HandleAlarm(AlarmText alarm) |
| | | { |
| | | if (alarm.Level >= 4 && TestResultView.tables != null) |
| | | { |
| | | foreach (var oven in TestResultView.tables) |
| | | { |
| | | testResultView.SetStartFlag(oven.index, false); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | DataTable targetOven = null; |
| | | foreach (var oven in TestResultView.tables) |
| | | { |
| | | if (alarm.AlarmInfo?.StartsWith(oven.title) == true) |
| | | { |
| | | targetOven = oven; |
| | | break; |
| | | } |
| | | } |
| | | if (targetOven == null) |
| | | { |
| | | return; |
| | | } |
| | | if (alarm.Level >= 3) |
| | | { |
| | | /// 3级以上的报警会停止测试 |
| | | testResultView.SetStartFlag(targetOven.index, false); |
| | | } |
| | | } |
| | | } |
| | | } |