From 56d73b9710766e7acab2e084a6af322175c78f1b Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期六, 11 七月 2020 11:20:38 +0800
Subject: [PATCH] 添加急停按钮相关处理

---
 src/Bro.M071.Process/M071Process_MotionCard.cs |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/src/Bro.M071.Process/M071Process_MotionCard.cs b/src/Bro.M071.Process/M071Process_MotionCard.cs
index f2adb36..70bb5c8 100644
--- a/src/Bro.M071.Process/M071Process_MotionCard.cs
+++ b/src/Bro.M071.Process/M071Process_MotionCard.cs
@@ -206,9 +206,9 @@
             //    }
             //}
 
-            if (IsSafetyBeamTrigged || IsSafetyDoorTrigged)
+            if (!IsAllowedWork)
             {
-                LogAsync(DateTime.Now, $"{(IsSafetyDoorTrigged ? "瀹夊叏闂�" : "")}{(IsSafetyBeamTrigged ? " 瀹夊叏鍏夌嚎" : "")}瑙﹀彂涓紝澶嶄綅澶辫触", "");
+                LogAsync(DateTime.Now, $"{(IsSafetyDoorTrigged ? "瀹夊叏闂�" : "")}{(IsSafetyBeamTrigged ? " 瀹夊叏鍏夌嚎" : "")}{(isEmergencyStopped ? " 鎬ュ仠鎸夐挳" : "")}瑙﹀彂涓紝澶嶄綅澶辫触", "");
                 return new ProcessResponse(false);
             }
 
@@ -217,6 +217,12 @@
 
             RaisedAlarm("");
             MachineState = MachineState.Ready;
+
+            if (IsEmergencyStopped)
+            {
+                RaisedAlarm("鎬ュ仠鎸夐挳鏈仮澶嶏紝璇锋墽琛屽ぇ澶嶄綅");
+                MachineState = MachineState.Alarm;
+            }
 
             if (ResetTimer == null)
             {
@@ -277,6 +283,7 @@
             //{
             //    motionCard.Run(opConfig);
             //}
+
             MachineState = MachineState.Resetting;
             MotionCardDefaultRun("FullReset", ref opConfig, ref invokeDevice);
 
@@ -285,7 +292,11 @@
 
             OnFullResetDone?.Invoke();
 
+            isFullResetCovered = true;
+
             LogAsync(DateTime.Now, "澶у浣嶅姩浣滃畬鎴�", "");
+
+            RaisedAlarm("");
             MachineState = MachineState.Ready;
 
             return new ProcessResponse(true);
@@ -582,6 +593,11 @@
             }
         }
 
+        bool IsAllowedWork
+        {
+            get => !(IsSafetyBeamTrigged || IsSafetyDoorTrigged || IsEmergencyStopped);
+        }
+
         #region 瀹夊叏闂� & 瀹夊叏鍏夌嚎
         bool isSafetyDoorTrigged = false;
         bool isSafetyBeamTrigged = false;
@@ -631,5 +647,43 @@
             return new ProcessResponse(true);
         }
         #endregion
+
+        #region 鎬ュ仠
+        bool isEmergencyStopped = false;
+        bool isFullResetCovered = true;
+        public bool IsEmergencyStopped
+        {
+            get => isEmergencyStopped && isFullResetCovered;
+            set
+            {
+                if (value)
+                {
+                    isFullResetCovered = false;
+                    isEmergencyStopped = true;
+                }
+                else
+                {
+                    isEmergencyStopped = false;
+                }
+            }
+        }
+
+        [ProcessMethod("", "EmergencyStop", "鎬ュ仠鎸夐挳琚媿涓�", InvokeType.TestInvoke)]
+        public ProcessResponse EmergencyStop(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (opConfig.InputPara == null || opConfig.InputPara.Count == 0)
+                throw new ProcessException("鎬ュ仠鎸夐挳鏈厤缃緭鍏ヤ俊鍙�");
+
+            IsEmergencyStopped = opConfig.InputPara[0] == 1;
+
+            if (IsEmergencyStopped)
+            {
+                RaisedAlarm("鎬ュ仠鎸夐挳琚媿涓�");
+                MachineState = MachineState.Alarm;
+            }
+
+            return new ProcessResponse(true);
+        }
+        #endregion
     }
 }

--
Gitblit v1.8.0