From 18475c9ceff517b7ba292b9f8b90933b0ce3fb78 Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期三, 23 十二月 2020 16:38:53 +0800 Subject: [PATCH] 添加MES日志开关配置和详细数据日志 --- src/Bro.M071.Process/UI/M071_MainForm.cs | 437 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 415 insertions(+), 22 deletions(-) diff --git a/src/Bro.M071.Process/UI/M071_MainForm.cs b/src/Bro.M071.Process/UI/M071_MainForm.cs index 97904b6..8ef45d1 100644 --- a/src/Bro.M071.Process/UI/M071_MainForm.cs +++ b/src/Bro.M071.Process/UI/M071_MainForm.cs @@ -1,5 +1,7 @@ -锘縰sing Bro.Common.Helper; +锘縰sing Bro.Common.Base; +using Bro.Common.Helper; using Bro.UI.Model.Winform; +using Bro.UI.Model.Winform.UI; using System; using System.Collections.Generic; using System.ComponentModel; @@ -9,6 +11,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using static Bro.Common.Helper.EnumHelper; namespace Bro.M071.Process.UI { @@ -17,6 +20,7 @@ { Canvas cvImage = new Canvas(); M071Config Config => Process?.IConfig as M071Config; + M071Process Process_M071 => Process as M071Process; public M071_MainForm() { @@ -29,6 +33,21 @@ plImage.Controls.Add(cvImage); tscEditLocation.Visible = tsmiShowEditor.Checked = false; + + this.Load += async (s, e) => + { + await Task.Delay(300); + + cvImage.SetScreenSize(); + cvImage.OnElementChangedHandle -= CvImage_OnElementChangedHandle; + cvImage.OnElementChangedHandle += CvImage_OnElementChangedHandle; + + timer1.Enabled = true; + + btnReset.Text = $"澶嶄綅锛堥暱鎸墈Config.FullResetRequiredDuration}绉掑ぇ澶嶄綅锛�"; + + lblCT.Text = tsslError.Text = ""; + }; } public override void OnProcessUpdated() @@ -43,34 +62,74 @@ try { - Bitmap image = (Bitmap)Image.FromFile(Config.BackgroundImagePath); - cvImage.LoadImage(image); + this.Invoke(new Action(() => + { + try + { + Bitmap image = (Bitmap)Image.FromFile(Config.BackgroundImagePath); + cvImage.LoadImage(image); + cvImage.SetScreenSize(); + } + catch (Exception ex) + { + LogAsync(new LogMsg(DateTime.Now, "杞藉叆鑳屾櫙鍥惧紓甯�", ex.Message)); + return; + } + + cvImage.Elements.Clear(); + lvMeasures.Items.Clear(); + + txtBarcode.Enabled = !Config.IsBarcodeManualInputBlocked; + + Config.MeasurementUnitCollection.ForEach(u => + { + if (!u.IsEnabled) + return; + + var ele = new KeyIndicator(u.Id, u.DisplayLocation); + cvImage.Elements.Add(ele); + + ListViewItem item = new ListViewItem(u.GetDisplayText()); + item.Tag = u.Id; + lvMeasures.Items.Add(item); + }); + + lblOperator.Text = string.IsNullOrWhiteSpace(Process_M071.OperatorCode) ? "NotLogin" : Process_M071.OperatorCode; + })); } catch (Exception ex) { - LogAsync(new LogMsg(DateTime.Now, "杞藉叆鑳屾櫙鍥惧紓甯�", ex.Message)); - return; } - cvImage.Elements.Clear(); - lvMeasures.Items.Clear(); - Config.MeasurementUnitCollection.ForEach(u => - { - if (!u.IsEnabled) - return; + Process_M071.OnClearBarcode -= M071_MainForm_OnClearBarcode; + Process_M071.OnClearBarcode += M071_MainForm_OnClearBarcode; + Process_M071.OnUpdateResult -= M071_MainForm_UpdateResult; + Process_M071.OnUpdateResult += M071_MainForm_UpdateResult; + Process_M071.OnUpdateCT -= M071_MainForm_UpdateCT; + Process_M071.OnUpdateCT += M071_MainForm_UpdateCT; - var ele = new KeyIndicator(u.Id, u.DisplayLocation); - cvImage.Elements.Add(ele); + Process_M071.OnMeasureStart -= M071_MainForm_MeasureStart; + Process_M071.OnMeasureStart += M071_MainForm_MeasureStart; - ListViewItem item = new ListViewItem(u.GetDisplayText()); - item.Tag = u.Id; - lvMeasures.Items.Add(item); - }); + Process_M071.OnMachineStateChanged -= M071_MainForm_MachineStateChanged; + Process_M071.OnMachineStateChanged += M071_MainForm_MachineStateChanged; - txtBarcode.ReadOnly = Config.IsBarcodeManulInputBlocked; + Process_M071.OnFullResetDone -= Process_M071_FullResetDone; + Process_M071.OnFullResetDone += Process_M071_FullResetDone; - (Process as M071Process).OnClearBarcode -= M071_MainForm_OnClearBarcode; - (Process as M071Process).OnClearBarcode += M071_MainForm_OnClearBarcode; + Config.PropertyChanged -= Config_PropertyChanged; + Config.PropertyChanged += Config_PropertyChanged; + + Process_M071.OnElementUpdated -= Process_M071_OnElementUpdated; + Process_M071.OnElementUpdated += Process_M071_OnElementUpdated; + + Process_M071.OnCheckHintUpload = OnCheckHintUpload; + Process_M071.OnOperatorLogin = OnOperatorLogin; + } + + private void Config_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + txtBarcode.Enabled = !Config.IsBarcodeManualInputBlocked; } #region 鍥剧墖鍖哄彸閿彍鍗� @@ -89,13 +148,69 @@ tscEditLocation.Visible = tsmiShowEditor.Checked; tscEditLocation.BringToFront(); } + + private void tsmiRefreshLabels_Click(object sender, EventArgs e) + { + cvImage.Elements.Clear(); + lvMeasures.Items.Clear(); + + Config.MeasurementUnitCollection.ForEach(u => + { + if (!u.IsEnabled) + return; + + var ele = new KeyIndicator(u.Id, u.DisplayLocation); + cvImage.Elements.Add(ele); + + ListViewItem item = new ListViewItem(u.GetDisplayText()); + item.Tag = u.Id; + lvMeasures.Items.Add(item); + }); + + this.Invalidate(); + } #endregion #region 鏍囩缂栬緫鍖� + private async void CvImage_OnElementChangedHandle(Common.Interface.IShapeElement ele) + { + this.Invoke(new Action(() => + { + if (ele is KeyIndicator indicator) + { + if (indicator.State == ElementState.Selected) + { + foreach (ListViewItem item in lvMeasures.Items) + { + if (item.Tag.ToString() == indicator.ID) + { + item.Selected = true; + + lvMeasures.EnsureVisible(item.Index); + break; + } + } + } + } + })); + + await Task.Delay(100); + } + private void lvMeasures_SelectedIndexChanged(object sender, EventArgs e) { if (lvMeasures.SelectedItems.Count <= 0) return; + + foreach (ListViewItem item in lvMeasures.Items) + { + item.BackColor = SystemColors.Control; + } + + foreach (ListViewItem item in lvMeasures.SelectedItems) + { + item.BackColor = Color.Orange; + } var ele = cvImage.Elements.FirstOrDefault(u => u.ID == lvMeasures.SelectedItems[0].Tag.ToString()); propGridKeyIndicator.SelectedObject = ele; @@ -134,6 +249,57 @@ MessageBox.Show("鏍囩淇敼瀹屾垚"); } + + private void lvMeasures_DoubleClick(object sender, EventArgs e) + { + if (lvMeasures.SelectedItems.Count <= 0) + return; + + cvImage.Elements.ToList().ForEach(u => u.State = ElementState.Normal); + var ele = cvImage.Elements.FirstOrDefault(u => u.ID == lvMeasures.SelectedItems[0].Tag.ToString()); + if (ele != null) + { + ele.State = ElementState.Selected; + //cvImage.Invalidate(); + } + } + #endregion + + #region 鏍囩缁撴灉鏄剧ず + private async void Process_M071_OnElementUpdated(Common.Interface.IShapeElement obj) + { + //this.Invoke(new Action(() => + //{ + // if (obj is KeyIndicator keyIndicator) + // { + // var ele = cvImage.Elements.FirstOrDefault(u => u.ID == keyIndicator.ID); + + // //(ele as KeyIndicator).Text = keyIndicator.Text; + // //(ele as KeyIndicator).ResultState = keyIndicator.ResultState; + // if (ele != null) + // { + // ele = keyIndicator; + // } + + // this.Invalidate(); + // } + //})); + + if (obj is KeyIndicator keyIndicator) + { + this.Invoke(new Action(() => + { + var ele = cvImage.Elements.FirstOrDefault(u => u.ID == keyIndicator.ID); + + (ele as KeyIndicator).Text = keyIndicator.Text; + (ele as KeyIndicator).ResultState = keyIndicator.ResultState; + + this.Invalidate(); + })); + } + + await Task.Delay(100); + } #endregion #region 涓婃柟鐘舵�佸尯 @@ -147,17 +313,30 @@ { _barcode += keyStr.ToUpper(); } + else if (keyStr.Length == 2 && keyStr.StartsWith("D")) + { + _barcode += keyStr.Substring(1).ToUpper(); + } + else if (keyStr.StartsWith("NumPad")) + { + _barcode += keyStr.Replace("NumPad", ""); + } if (e.KeyValue == 13) { - txtBarcode.Text = _barcode; + Process_M071.BarCode = txtBarcode.Text = _barcode; _barcode = ""; + } + + if (e.KeyValue == 27) + { + cvImage.Elements.ToList().ForEach(ele => ele.State = ElementState.Normal); } } private void txtBarcode_TextChanged(object sender, EventArgs e) { - (Process as M071Process).BarCode = txtBarcode.Text.Trim(); + //Process_M071.BarCode = txtBarcode.Text.Trim(); } private void M071_MainForm_OnClearBarcode() @@ -166,7 +345,221 @@ } #endregion + #region 鏈哄彴鐘舵�� + private async void M071_MainForm_MachineStateChanged(MachineState state) + { + if (lblMachineState.IsHandleCreated) + { + lblMachineState.Invoke(new Action(() => + { + switch (state) + { + case MachineState.Alarm: + btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Red; + btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.White; + lblMachineState.Text = "璀︽姤"; + + btnStartMeasure.Text = "寮�濮嬫祴閲�"; + btnStartMeasure.Enabled = false; + break; + case MachineState.Pause: + btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Yellow; + btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.Black; + lblMachineState.Text = "鏆傚仠"; + + btnStartMeasure.Text = "缁х画娴嬮噺"; + btnStartMeasure.Enabled = true; + break; + case MachineState.Ready: + btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Lime; + btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.Black; + lblMachineState.Text = "灏辩华"; + + btnStartMeasure.Text = "寮�濮嬫祴閲�"; + btnStartMeasure.Enabled = true; + break; + case MachineState.Running: + btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Transparent; + btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.DarkGreen; + lblMachineState.Text = "杩愯"; + + btnStartMeasure.Text = "鏆傚仠娴嬮噺"; + btnStartMeasure.Enabled = true; + break; + case MachineState.Unknown: + btnStartMeasure.BackColor = lblMachineState.BackColor = SystemColors.Control; + btnStartMeasure.ForeColor = lblMachineState.ForeColor = SystemColors.ControlText; + lblMachineState.Text = "鏈煡"; + + btnStartMeasure.Enabled = false; + break; + } + })); + } + + await Task.Delay(100); + } #endregion + #region 浜у搧缁撴灉 + private async void M071_MainForm_UpdateCT(float ct) + { + lblCT.BeginInvoke(new Action(() => + { + lblCT.Text = ct.ToString("f2") + " 绉�"; + })); + await Task.Delay(100); + } + + private async void M071_MainForm_UpdateResult(DateTime arg1, int result) + { + this.BeginInvoke(new Action(() => + { + if (result == 1) + { + lblProductionState.BackColor = Color.Green; + lblProductionState.ForeColor = Color.White; + lblProductionState.Text = "OK"; + } + else if (result == 0) + { + lblProductionState.BackColor = Color.Red; + lblProductionState.ForeColor = Color.White; + lblProductionState.Text = "NG"; + } + else + { + lblProductionState.BackColor = Color.White; + lblProductionState.ForeColor = Color.Red; + lblProductionState.Text = "NA"; + } + + //btnStartMeasure.Text = "寮�濮嬫祴閲�"; + })); + await Task.Delay(100); + } + + private async void M071_MainForm_MeasureStart() + { + this.BeginInvoke(new Action(() => + { + lblProductionState.BackColor = SystemColors.Control; + lblProductionState.ForeColor = SystemColors.ControlText; + lblProductionState.Text = "娴嬭瘯涓�"; + + lblCT.Text = ""; + + cvImage.Elements.ToList().ForEach(e => + { + if (e is KeyIndicator indicator) + { + indicator.Text = ""; + indicator.ResultState = null; + } + }); + })); + await Task.Delay(100); + } + #endregion + + #endregion + + private async void btnStartMeasure_Click(object sender, EventArgs e) + { + if (btnStartMeasure.Text == "寮�濮嬫祴閲�") + { + await Task.Run(() => + { + try + { + Process_M071.StartJob(null, null, null); + } + catch (Exception ex) + { + LogAsync(DateTime.Now, "娴佺▼寮傚父", ex.Message); + Process_M071.ExceptionRaisedInMonitor(ex); + } + }); + } + else if (btnStartMeasure.Text == "缁х画娴嬮噺") + { + Process_M071.SwitchJobStatus(new OperationConfigBase() { InputPara = new List<int>() { 10 } }, null, null); + } + else + { + Process_M071.SwitchJobStatus(new OperationConfigBase() { InputPara = new List<int>() { 11 } }, null, null); + } + } + + #region 澶嶄綅鎿嶄綔 + private async void Process_M071_FullResetDone() + { + btnStartMeasure.BeginInvoke(new Action(() => + { + btnStartMeasure.Enabled = true; + btnStartMeasure.Text = "寮�濮嬫祴閲�"; + })); + await Task.Delay(100); + } + + private void btnReset_MouseDown(object sender, MouseEventArgs e) + { + if (Process_M071.MachineState != MachineState.Running) + { + Process_M071.Reset(null, null, null); + } + + Process_M071.ResetTimer.Change(1000 * Config.FullResetRequiredDuration, -1); + } + + private void btnReset_MouseUp(object sender, MouseEventArgs e) + { + Process_M071.ResetTimer.Change(-1, -1); + } + #endregion + + private void timer1_Tick(object sender, EventArgs e) + { + cvImage.Refresh(); + } + + private void lblOperator_DoubleClick(object sender, EventArgs e) + { + InputWindow inputFrm = new InputWindow("璇疯緭鍏ユ搷浣滃憳宸ュ彿"); + if (inputFrm.ShowDialog() == DialogResult.OK) + { + Process_M071.OperatorCode = inputFrm.Input; + } + } + + private void OnOperatorLogin(string operatorCode) + { + this.Invoke(new Action(() => + { + lblOperator.Text = operatorCode; + })); + } + + private async void OnCheckHintUpload(string hintMsg, bool isAlarm) + { + await Task.Run(() => + { + this.Invoke(new Action(() => + { + if (!string.IsNullOrWhiteSpace(hintMsg)) + { + stStripHint.Visible = true; + tsslError.Text = hintMsg; + + tsslError.BackColor = isAlarm ? Color.Red : Color.Green; + } + else + { + stStripHint.Visible = false; + tsslError.Text = ""; + } + })); + }); + } } } -- Gitblit v1.8.0