From 6935238d2b7fdabbe46514b50e154df44af862f8 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期一, 06 七月 2020 11:32:09 +0800
Subject: [PATCH] 合并

---
 src/Bro.M071.Process/M071Process_MotionCard.cs |  296 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 279 insertions(+), 17 deletions(-)

diff --git a/src/Bro.M071.Process/M071Process_MotionCard.cs b/src/Bro.M071.Process/M071Process_MotionCard.cs
index 98ce638..06474aa 100644
--- a/src/Bro.M071.Process/M071Process_MotionCard.cs
+++ b/src/Bro.M071.Process/M071Process_MotionCard.cs
@@ -30,18 +30,116 @@
                 switch (machineState)
                 {
                     case MachineState.Ready:
+                        SwitchBeep(false);
+                        SwitchLightRed(false);
+                        SwitchLightYellow(false);
+
+                        Task.Run(() =>
+                        {
+                            while (MachineState == MachineState.Ready)
+                            {
+                                SwitchLightGreen(true);
+                                Thread.Sleep(1000);
+                                SwitchLightGreen(false);
+                            }
+                        });
+
                         break;
                     case MachineState.Running:
+                        SwitchBeep(false);
+                        SwitchLightRed(false);
+                        SwitchLightYellow(false);
+                        SwitchLightGreen(true);
                         break;
                     case MachineState.Alarm:
+                        SwitchBeep(true);
+                        SwitchLightRed(true);
+                        SwitchLightYellow(false);
+                        SwitchLightGreen(false);
                         break;
                     case MachineState.Pause:
+                        SwitchBeep(false);
+                        SwitchLightRed(false);
+                        Task.Run(() =>
+                        {
+                            while (MachineState == MachineState.Pause)
+                            {
+                                SwitchLightYellow(true);
+                                SwitchLightGreen(true);
+                                Thread.Sleep(1000);
+                                SwitchLightYellow(false);
+                                SwitchLightGreen(false);
+                            }
+                        });
                         break;
                     default:
                         break;
                 }
 
                 OnMachineStateChanged?.Invoke(machineState);
+            }
+        }
+
+        private void MotionCardSettingCheck()
+        {
+            IDevice device = DeviceCollection.FirstOrDefault(u => u is IMotionCard);
+            if (device.InitialConfig is MotionCardInitialConfigBase iConfig)
+            {
+                outputCtrlCard = device as MotionCardBase;
+
+                var redDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Light_Red);
+                if (redDefinition != null)
+                {
+                    index_RedLight = redDefinition.IONum;
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, $"{iConfig.Name}鏈厤缃孩鑹茬伅杈撳嚭绱㈠紩", "");
+                }
+
+                var greenDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Light_Green);
+                if (greenDefinition != null)
+                {
+                    index_GreenLight = greenDefinition.IONum;
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, $"{iConfig.Name}鏈厤缃豢鑹茬伅杈撳嚭绱㈠紩", "");
+                }
+
+                var yellowDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Light_Yellow);
+                if (yellowDefinition != null)
+                {
+                    index_YellowLight = yellowDefinition.IONum;
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, $"{iConfig.Name}鏈厤缃粍鑹茬伅杈撳嚭绱㈠紩", "");
+                }
+
+                var beepDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Beep);
+                if (beepDefinition != null)
+                {
+                    index_Beep = beepDefinition.IONum;
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, $"{iConfig.Name}鏈厤缃渹楦e櫒杈撳嚭绱㈠紩", "");
+                }
+
+                var lightDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Light);
+                if (lightDefinition != null)
+                {
+                    index_NormalLight = lightDefinition.IONum;
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, $"{iConfig.Name}鏈厤缃棩鍏夌伅杈撳嚭绱㈠紩", "");
+                }
+            }
+            else
+            {
+                LogAsync(DateTime.Now, "鏈厤缃澘鍗¤澶�", "");
             }
         }
 
@@ -66,7 +164,14 @@
             //    }
             //}
 
+            if (IsSafetyBeamTrigged || IsSafetyDoorTrigged)
+            {
+                LogAsync(DateTime.Now, $"{(IsSafetyDoorTrigged ? "瀹夊叏闂�" : "")}{(IsSafetyBeamTrigged ? " 瀹夊叏鍏夌嚎" : "")}瑙﹀彂涓紝澶嶄綅澶辫触", "");
+                return new ProcessResponse(false);
+            }
+
             MotionCardDefaultRun("Reset", ref opConfig, ref invokeDevice);
+            //(invokeDevice as IMotionCard).Reset();
 
             RaisedAlarm("");
             MachineState = MachineState.Ready;
@@ -175,38 +280,145 @@
             return new ProcessResponse(_pauseHandle.WaitResult);
         }
 
-        [ProcessMethod("MotionCardBase", "SwitchLightRed", "鍒囨崲鎸囩ず鐏�-绾�", InvokeType.TestInvoke)]
-        public ProcessResponse SwitchLightRed(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        #region 涓夎壊鐏� & 铚傞福鍣�
+        //[ProcessMethod("MotionCardBase", "SwitchLightRed", "鍒囨崲鎸囩ず鐏�-绾�", InvokeType.TestInvoke)]
+        //public ProcessResponse SwitchLightRed(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        //{
+        //    MotionCardDefaultRun("SwitchLightRed", ref opConfig, ref invokeDevice);
+        //    return new ProcessResponse(true);
+        //}
+
+        //[ProcessMethod("MotionCardBase", "SwitchLightYellow", "鍒囨崲鎸囩ず鐏�-榛�", InvokeType.TestInvoke)]
+        //public ProcessResponse SwitchLightYellow(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        //{
+        //    return new ProcessResponse(true);
+        //}
+
+        //[ProcessMethod("MotionCardBase", "SwitchLightGreen", "鍒囨崲鎸囩ず鐏�-缁�", InvokeType.TestInvoke)]
+        //public ProcessResponse SwitchLightGreen(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        //{
+        //    return new ProcessResponse(true);
+        //}
+
+        //[ProcessMethod("MotionCardBase", "SwitchBeep", "鍒囨崲铚傞福鍣�", InvokeType.TestInvoke)]
+        //public ProcessResponse SwitchBeep(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        //{
+        //    return new ProcessResponse(true);
+        //}
+
+        //[ProcessMethod("MotionCardBase", "SwitchNormalLight", "鍒囨崲鏃ュ厜鐏�", InvokeType.TestInvoke)]
+        //public ProcessResponse SwitchNormalLight(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        //{
+        //    MotionCardDefaultRun("SwitchNormalLight", ref opConfig, ref invokeDevice);
+
+        //    return new ProcessResponse(true);
+        //}
+
+        int index_RedLight = -1;
+        int index_GreenLight = -1;
+        int index_YellowLight = -1;
+        int index_Beep = -1;
+        int index_NormalLight = -1;
+        MotionCardBase outputCtrlCard = null;
+
+        public void SwitchLightRed(bool isOn)
         {
-            MotionCardDefaultRun("SwitchLightRed", ref opConfig, ref invokeDevice);
-            return new ProcessResponse(true);
+            if (index_RedLight >= 0)
+            {
+                if (outputCtrlCard != null)
+                {
+                    outputCtrlCard.WriteOutput((short)index_RedLight, isOn ? IOValue.TRUE : IOValue.FALSE);
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, "鏈缃澘鍗¤緭鍑鸿澶�", "");
+                }
+            }
+            else
+            {
+                LogAsync(DateTime.Now, "绾㈣壊鐏湭閰嶇疆姝g‘杈撳嚭绱㈠紩", "");
+            }
         }
 
-        [ProcessMethod("MotionCardBase", "SwitchLightYellow", "鍒囨崲鎸囩ず鐏�-榛�", InvokeType.TestInvoke)]
-        public ProcessResponse SwitchLightYellow(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        public void SwitchLightYellow(bool isOn)
         {
-            return new ProcessResponse(true);
+            if (index_YellowLight >= 0)
+            {
+                if (outputCtrlCard != null)
+                {
+                    outputCtrlCard.WriteOutput((short)index_YellowLight, isOn ? IOValue.TRUE : IOValue.FALSE);
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, "鏈缃澘鍗¤緭鍑鸿澶�", "");
+                }
+            }
+            else
+            {
+                LogAsync(DateTime.Now, "榛勮壊鐏湭閰嶇疆姝g‘杈撳嚭绱㈠紩", "");
+            }
         }
 
-        [ProcessMethod("MotionCardBase", "SwitchLightGreen", "鍒囨崲鎸囩ず鐏�-缁�", InvokeType.TestInvoke)]
-        public ProcessResponse SwitchLightGreen(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        public void SwitchLightGreen(bool isOn)
         {
-            return new ProcessResponse(true);
+            if (index_GreenLight >= 0)
+            {
+                if (outputCtrlCard != null)
+                {
+                    outputCtrlCard.WriteOutput((short)index_GreenLight, isOn ? IOValue.TRUE : IOValue.FALSE);
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, "鏈缃澘鍗¤緭鍑鸿澶�", "");
+                }
+            }
+            else
+            {
+                LogAsync(DateTime.Now, "缁胯壊鐏湭閰嶇疆姝g‘杈撳嚭绱㈠紩", "");
+            }
         }
 
-        [ProcessMethod("MotionCardBase", "SwitchBeep", "鍒囨崲铚傞福鍣�", InvokeType.TestInvoke)]
-        public ProcessResponse SwitchBeep(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        public void SwitchLight(bool isOn)
         {
-            return new ProcessResponse(true);
+            if (index_NormalLight >= 0)
+            {
+                if (outputCtrlCard != null)
+                {
+                    outputCtrlCard.WriteOutput((short)index_NormalLight, isOn ? IOValue.TRUE : IOValue.FALSE);
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, "鏈缃澘鍗¤緭鍑鸿澶�", "");
+                }
+            }
+            else
+            {
+                LogAsync(DateTime.Now, "鐓ф槑鐏湭閰嶇疆姝g‘杈撳嚭绱㈠紩", "");
+            }
         }
 
-        [ProcessMethod("MotionCardBase", "SwitchNormalLight", "鍒囨崲鏃ュ厜鐏�", InvokeType.TestInvoke)]
-        public ProcessResponse SwitchNormalLight(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        public void SwitchBeep(bool isOn)
         {
-            MotionCardDefaultRun("SwitchNormalLight", ref opConfig, ref invokeDevice);
+            if (Config.IsBeepBlocked)
+                return;
 
-            return new ProcessResponse(true);
+            if (index_Beep >= 0)
+            {
+                if (outputCtrlCard != null)
+                {
+                    outputCtrlCard.WriteOutput((short)index_Beep, isOn ? IOValue.TRUE : IOValue.FALSE);
+                }
+                else
+                {
+                    LogAsync(DateTime.Now, "鏈缃澘鍗¤緭鍑鸿澶�", "");
+                }
+            }
+            else
+            {
+                LogAsync(DateTime.Now, "铚傞福鍣ㄦ湭閰嶇疆姝g‘杈撳嚭绱㈠紩", "");
+            }
         }
+        #endregion
 
         private void MotionCardDefaultRun(string methodCode, ref IOperationConfig opConfig, ref IDevice invokeDevice)
         {
@@ -234,5 +446,55 @@
                 motionCard.Run(opConfig);
             }
         }
+
+        #region 瀹夊叏闂� & 瀹夊叏鍏夌嚎
+        bool isSafetyDoorTrigged = false;
+        bool isSafetyBeamTrigged = false;
+
+        public bool IsSafetyDoorTrigged
+        {
+            get => !Config.IsSafetyDoorBlocked && isSafetyDoorTrigged;
+            set => isSafetyDoorTrigged = value;
+        }
+        public bool IsSafetyBeamTrigged
+        {
+            get => !Config.IsSafetyBeamBlocked && isSafetyBeamTrigged;
+            set => isSafetyBeamTrigged = value;
+        }
+
+        [ProcessMethod("", "SafetyDoorSignal", "瀹夊叏闂ㄤ俊鍙风洃鎺э紝姝e父ON锛孫FF鏃舵姤璀�", InvokeType.TestInvoke)]
+        public ProcessResponse SafetyDoorSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (opConfig.InputPara == null || opConfig.InputPara.Count == 0)
+                throw new ProcessException("瀹夊叏闂ㄧ洃鎺ф湭閰嶇疆杈撳叆淇″彿");
+
+            IsSafetyDoorTrigged = opConfig.InputPara[0] == 0;
+
+            if (IsSafetyDoorTrigged)
+            {
+                RaisedAlarm("瀹夊叏闂ㄦ湭姝e父鍏抽棴");
+                MachineState = MachineState.Alarm;
+            }
+
+            return new ProcessResponse(true);
+        }
+
+        [ProcessMethod("", "SafetyBeamSignal", "瀹夊叏鍏夊箷淇″彿鐩戞帶锛屾甯窸N锛孫FF鏃舵姤璀�", InvokeType.TestInvoke)]
+        public ProcessResponse SafetyBeamSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (opConfig.InputPara == null || opConfig.InputPara.Count == 0)
+                throw new ProcessException("瀹夊叏鍏夊箷鐩戞帶鏈厤缃緭鍏ヤ俊鍙�");
+
+            IsSafetyBeamTrigged = opConfig.InputPara[0] == 0;
+
+            if (IsSafetyBeamTrigged)
+            {
+                RaisedAlarm("瀹夊叏鍏夌嚎琚伄鎸�");
+                MachineState = MachineState.Alarm;
+            }
+
+            return new ProcessResponse(true);
+        }
+        #endregion
     }
 }

--
Gitblit v1.8.0