From 3f6e94d7de9694378114773ab48d8a61bcc3a01e Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期一, 01 二月 2021 09:22:20 +0800
Subject: [PATCH] 1. 报警生成前后端异步调用 2. 安全光栅方法单线程调用 3. 复位完成时修改界面显示 4. 机台状态拆分执行状态

---
 src/Bro.M071.Process/UI/M071_MainForm.cs        |   11 +++++
 src/Bro.M071.Process/M071Process.cs             |   26 +++++++++++--
 src/Bro.M071.Process/M071Process_MotionCard.cs  |   60 +++++++++++++++++------------
 src/Bro.Process/ProcessControl.cs               |    7 ++-
 src/Bro.M071.Process/Properties/AssemblyInfo.cs |    4 +-
 5 files changed, 75 insertions(+), 33 deletions(-)

diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index 7165338..7666577 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -48,6 +48,7 @@
         public event Action<IShapeElement> OnElementUpdated;
         public event Action<MachineState> OnMachineStateChanged;
         public event Action OnFullResetDone;
+        public event Action OnResetDone;
         #endregion
 
         string _precision = "f3";
@@ -197,6 +198,8 @@
         object productionLock = new object();
         List<ProductionMeasurement> productionList = new List<ProductionMeasurement>();
 
+        bool _isdoing = false;
+
         [ProcessMethod("", "StartJob", "寮�濮嬫壂鎻�", InvokeType.TestInvoke)]
         [MethodImpl(MethodImplOptions.Synchronized)]
         public ProcessResponse StartJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
@@ -207,6 +210,7 @@
             }
 
             string hint = "";
+
             //if (MachineState != MachineState.Ready)
             //{
             //    hint = "鏈哄彴鏈氨缁紝璇峰嬁寮�濮嬫祴閲�";
@@ -221,6 +225,8 @@
                 OnCheckHintUpload?.Invoke(hint, true);
                 throw new ProcessException(hint);
             }
+
+            _isdoing = true;
 
             MachineState = MachineState.Running;
 
@@ -317,6 +323,7 @@
                   });
 
             LogAsync(DateTime.Now, $"{pMeasure.Barcode}娴嬮噺鍔ㄤ綔瀹屾垚", "");
+            _isdoing = false;
 
             GC.Collect(0, GCCollectionMode.Optimized);
 
@@ -330,8 +337,11 @@
             get => isLeftStart;
             set
             {
-                isLeftStart = value;
-                StartCheck();
+                if (IsLeftStart != value)
+                {
+                    isLeftStart = value;
+                    StartCheck();
+                }
             }
         }
 
@@ -341,8 +351,11 @@
             get => isRightStart;
             set
             {
-                isRightStart = value;
-                StartCheck();
+                if (isRightStart != value)
+                {
+                    isRightStart = value;
+                    StartCheck();
+                }
             }
         }
 
@@ -350,6 +363,11 @@
         {
             if (isRightStart && isLeftStart)
             {
+                if (_isdoing)
+                {
+                    OnCheckHintUpload?.Invoke("璁惧杩愯涓�", false);
+                    return;
+                }
                 StartJob(null, null, null);
             }
         }
diff --git a/src/Bro.M071.Process/M071Process_MotionCard.cs b/src/Bro.M071.Process/M071Process_MotionCard.cs
index 8806106..c49221c 100644
--- a/src/Bro.M071.Process/M071Process_MotionCard.cs
+++ b/src/Bro.M071.Process/M071Process_MotionCard.cs
@@ -7,6 +7,7 @@
 using System.ComponentModel;
 using System.Drawing.Design;
 using System.Linq;
+using System.Runtime.CompilerServices;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
@@ -34,6 +35,8 @@
 
                 Task.Run(() =>
                 {
+                    OnMachineStateChanged?.Invoke(machineState);
+
                     switch (machineState)
                     {
                         case MachineState.Ready:
@@ -123,9 +126,7 @@
                         default:
                             break;
                     }
-                });
-
-                OnMachineStateChanged?.Invoke(machineState);
+                });                
             }
         }
 
@@ -248,7 +249,9 @@
             MotionCardDefaultRun("Reset", ref opConfig, ref invokeDevice);
             (invokeDevice as MotionCardBase).ResetAlarm();
 
+            _isdoing = false;
             RaisedAlarm("");
+            OnCheckHintUpload?.Invoke("", false);
 
             //if (MachineState != MachineState.Pause)
             //{
@@ -268,6 +271,7 @@
             }
 
             LogAsync(DateTime.Now, "鏅�氬浣嶅姩浣滃畬鎴�", "");
+            OnResetDone?.Invoke();
 
             return new ProcessResponse(true);
         }
@@ -646,39 +650,43 @@
 
         ManualResetEventSlim _pausedHandle = new ManualResetEventSlim(true);
         MachineState _machineStateBeforePause = MachineState.Unknown;
-        private void CheckMachinePauseState()
+        object _pauseLock = new object();
+        private async void CheckMachinePauseState()
         {
-            //await Task.Run(() =>
+            await Task.Run(() =>
             {
-                if (IsMachinePaused)
+                lock (_pauseLock)
                 {
-                    if (MachineState == MachineState.Ready || MachineState == MachineState.Running)
+                    if (IsMachinePaused)
                     {
-                        _machineStateBeforePause = MachineState;
-                    }
-                    MachineState = MachineState.Pause;
-                    _pausedHandle.Reset();
+                        if (MachineState == MachineState.Ready || MachineState == MachineState.Running)
+                        {
+                            _machineStateBeforePause = MachineState;
+                        }
+                        MachineState = MachineState.Pause;
+                        _pausedHandle.Reset();
 
-                    if (_machineStateBeforePause == MachineState.Running)
-                    {
-                        Pause();
-                    }
-                }
-                else
-                {
-                    if (MachineState == MachineState.Pause)
-                    {
                         if (_machineStateBeforePause == MachineState.Running)
                         {
-                            Resume(true);
+                            Pause();
                         }
-                        _pausedHandle.Set();
-                        RaisedAlarm("");
-                        MachineState = _machineStateBeforePause;
+                    }
+                    else
+                    {
+                        if (MachineState == MachineState.Pause)
+                        {
+                            if (_machineStateBeforePause == MachineState.Running || _machineStateBeforePause == MachineState.Ready)
+                            {
+                                Resume(true);
+                            }
+                            _pausedHandle.Set();
+                            RaisedAlarm("");
+                            MachineState = _machineStateBeforePause;
+                        }
                     }
                 }
             }
-            //);
+            );
         }
 
         public bool IsMachinePaused
@@ -687,6 +695,7 @@
         }
 
         [ProcessMethod("", "SafetyDoorSignal", "瀹夊叏闂ㄤ俊鍙风洃鎺э紝姝e父ON锛孫FF鏃舵姤璀�", InvokeType.TestInvoke)]
+        [MethodImpl(MethodImplOptions.Synchronized)]
         public ProcessResponse SafetyDoorSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
         {
             //if (MachineState != MachineState.Running && MachineState != MachineState.Pause)
@@ -706,6 +715,7 @@
         }
 
         [ProcessMethod("", "SafetyBeamSignal", "瀹夊叏鍏夊箷淇″彿鐩戞帶锛屾甯窸N锛孫FF鏃舵姤璀�", InvokeType.TestInvoke)]
+        [MethodImpl(MethodImplOptions.Synchronized)]
         public ProcessResponse SafetyBeamSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
         {
             if (opConfig.InputPara == null || opConfig.InputPara.Count == 0)
diff --git a/src/Bro.M071.Process/Properties/AssemblyInfo.cs b/src/Bro.M071.Process/Properties/AssemblyInfo.cs
index 974f550..86af5ac 100644
--- a/src/Bro.M071.Process/Properties/AssemblyInfo.cs
+++ b/src/Bro.M071.Process/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
 //鍙互鎸囧畾鎵�鏈夎繖浜涘�硷紝涔熷彲浠ヤ娇鐢ㄢ�滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊�
 //閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.3.0")]
-[assembly: AssemblyFileVersion("1.0.3.0")]
+[assembly: AssemblyVersion("1.0.4.1")]
+[assembly: AssemblyFileVersion("1.0.4.1")]
diff --git a/src/Bro.M071.Process/UI/M071_MainForm.cs b/src/Bro.M071.Process/UI/M071_MainForm.cs
index c92a0ec..1266611 100644
--- a/src/Bro.M071.Process/UI/M071_MainForm.cs
+++ b/src/Bro.M071.Process/UI/M071_MainForm.cs
@@ -119,6 +119,9 @@
             Process_M071.OnFullResetDone -= Process_M071_FullResetDone;
             Process_M071.OnFullResetDone += Process_M071_FullResetDone;
 
+            Process_M071.OnResetDone -= Process_M071_ResetDone;
+            Process_M071.OnResetDone += Process_M071_ResetDone;
+
             Config.PropertyChanged -= Config_PropertyChanged;
             Config.PropertyChanged += Config_PropertyChanged;
 
@@ -129,6 +132,14 @@
             Process_M071.OnOperatorLogin = OnOperatorLogin;
         }
 
+        private void Process_M071_ResetDone()
+        {
+            lblCT.BeginInvoke(new Action(() =>
+            {
+                lblCT.Text = "";
+            }));
+        }
+
         private void Config_PropertyChanged(object sender, PropertyChangedEventArgs e)
         {
             txtBarcode.Enabled = !Config.IsBarcodeManualInputBlocked;
diff --git a/src/Bro.Process/ProcessControl.cs b/src/Bro.Process/ProcessControl.cs
index 9519754..7e900ab 100644
--- a/src/Bro.Process/ProcessControl.cs
+++ b/src/Bro.Process/ProcessControl.cs
@@ -732,9 +732,12 @@
             OnAlarmUpdate?.BeginInvoke(alarmMsg, null, null);
         }
 
-        public virtual void RaisedAlarm(string alarmMsg)
+        public async virtual void RaisedAlarm(string alarmMsg)
         {
-            OnAlarmUpdate?.Invoke(alarmMsg);
+            await Task.Run(() =>
+            {
+                OnAlarmUpdate?.Invoke(alarmMsg);
+            });
         }
         #endregion
 

--
Gitblit v1.8.0