领胜LDS 键盘AOI检测项目
wells.liu
2020-07-06 f9c7928bff92596686e05a15fef21d499e954088
src/Bro.M071.Process/UI/M071_MainForm.cs
@@ -1,4 +1,5 @@
using Bro.Common.Helper;
using Bro.Common.Base;
using Bro.Common.Helper;
using Bro.UI.Model.Winform;
using System;
using System.Collections.Generic;
@@ -9,6 +10,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 +19,7 @@
    {
        Canvas cvImage = new Canvas();
        M071Config Config => Process?.IConfig as M071Config;
        M071Process Process_M071 => Process as M071Process;
        public M071_MainForm()
        {
@@ -69,8 +72,21 @@
            txtBarcode.ReadOnly = Config.IsBarcodeManulInputBlocked;
            (Process as M071Process).OnClearBarcode -= M071_MainForm_OnClearBarcode;
            (Process as M071Process).OnClearBarcode += M071_MainForm_OnClearBarcode;
            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;
            Process_M071.OnMeasureStart -= M071_MainForm_MeasureStart;
            Process_M071.OnMeasureStart += M071_MainForm_MeasureStart;
            Process_M071.OnMachineStateChanged -= M071_MainForm_MachineStateChanged;
            Process_M071.OnMachineStateChanged += M071_MainForm_MachineStateChanged;
            Process_M071.OnFullResetDone -= Process_M071_FullResetDone;
            Process_M071.OnFullResetDone += Process_M071_FullResetDone;
        }
        #region 图片区右键菜单
@@ -157,7 +173,7 @@
        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 +182,169 @@
        }
        #endregion
        #region 机台状态
        private async void M071_MainForm_MachineStateChanged(MachineState state)
        {
            lblMachineState.BeginInvoke(new Action(() =>
            {
                switch (state)
                {
                    case MachineState.Alarm:
                        btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Red;
                        btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.White;
                        lblMachineState.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.White;
                        lblMachineState.Text = "就绪";
                        btnStartMeasure.Enabled = true;
                        break;
                    case MachineState.Running:
                        btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Lime;
                        btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.DarkGreen;
                        lblMachineState.Text = "运行";
                        btnStartMeasure.Enabled = true;
                        break;
                    case MachineState.Unknown:
                        btnStartMeasure.BackColor = lblMachineState.BackColor = SystemColors.Control;
                        btnStartMeasure.ForeColor = lblMachineState.ForeColor = SystemColors.ControlText;
                        lblMachineState.Text = "未知";
                        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
                {
                    lblProductionState.BackColor = Color.Red;
                    lblProductionState.ForeColor = Color.White;
                    lblProductionState.Text = "NG";
                }
                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 = "";
            }));
            await Task.Delay(100);
        }
        #endregion
        #endregion
        private async void btnStartMeasure_Click(object sender, EventArgs e)
        {
            btnStartMeasure.Enabled = false;
            bool isBreak = false;
            if (btnStartMeasure.Text == "开始测量")
            {
                await Task.Run(() =>
                {
                    try
                    {
                        Process_M071.StartJob(null, null, null);
                    }
                    catch (Exception ex)
                    {
                        isBreak = true;
                        LogAsync(DateTime.Now, "流程异常", ex.Message);
                        Process_M071.ExceptionRaisedInMonitor(ex);
                        btnStartMeasure.Text = "开始测量";
                    }
                });
                if (!isBreak)
                    btnStartMeasure.Text = "暂停测量";
            }
            else if (btnStartMeasure.Text == "继续测量")
            {
                Process_M071.SwitchJobStatus(new OperationConfigBase() { InputPara = new List<int>() { 0 } }, null, null);
                btnStartMeasure.Text = "暂停测量";
            }
            else
            {
                Process_M071.SwitchJobStatus(new OperationConfigBase() { InputPara = new List<int>() { 1 } }, null, null);
                btnStartMeasure.Text = "继续测量";
            }
            btnStartMeasure.Enabled = true;
        }
        #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(-1, 1000 * 5);
        }
        private void btnReset_MouseUp(object sender, MouseEventArgs e)
        {
            Process_M071.ResetTimer.Change(-1, -1);
        }
        #endregion
    }
}