Переглянути джерело

增加PLC信号去抖动与防重复触发机制

在Management.cs中为各类PLC触发信号处理增加了去抖动与防重复触发逻辑。通过引入上次信号状态变量,仅在信号发生变化时才执行后续操作,防止因信号抖动或持续不变导致的重复处理,提升了系统的稳定性和效率。适用范围涵盖相机拍照、锁附、检测、工作流程等多种PLC命令。
孝锋 徐 8 місяців тому
батько
коміт
48e896f37d
1 змінених файлів з 129 додано та 0 видалено
  1. 129 0
      TeamAAS-VM/Core/Management.cs

+ 129 - 0
TeamAAS-VM/Core/Management.cs

@@ -1057,6 +1057,20 @@ namespace TeamAAS_VP.Core
         double _FixedUpCameraAngle = 0;
         double _MoveCameraAngle = 0;
 
+        bool _LastDowmCameraExe = false;
+        bool _LastScrewTeachExe = false;
+        bool _LastUpCameraPickExe = false;
+        bool _LastUpCameraPutExe = false;
+        bool _LastUPCameracheckExe = false;
+        bool _LastFixedCameraPickExe = false;
+        bool _LastFixedCameraPutExe = false;
+        bool _LastFixedCameracheckExe = false;
+        Int16 _LastWorkStart = 0;
+        Int16 _LastWorkDone = 0;
+        Int16 _LastRequestPosition = 0;
+        Int16 _LastPickINC = 0;
+        Int16[] _LastMesCheck=new Int16[10];
+
         /// <summary>
         /// PLC命令触发时
         /// </summary>
@@ -1096,6 +1110,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is bool state)
                     {
+                        if (_LastDowmCameraExe != state)
+                        {
+                            _LastDowmCameraExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state)
                         {
                             SendTaskMessage($"触发下相机拍照...", MessageLevel.Debug);
@@ -1320,6 +1343,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is bool state)
                     {
+                        if (_LastScrewTeachExe != state)
+                        {
+                            _LastScrewTeachExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state)
                         {
                             SendTaskMessage($"触发下相机拍照...", MessageLevel.Debug);
@@ -1378,6 +1410,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is bool state)
                     {
+                        if (_LastUpCameraPickExe != state)
+                        {
+                            _LastUpCameraPickExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state)
                         {
                             SendTaskMessage($"触发上相机取料拍照...", MessageLevel.Debug);
@@ -1495,6 +1536,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is bool state)
                     {
+                        if (_LastUpCameraPutExe != state)
+                        {
+                            _LastUpCameraPutExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state)
                         {
                             SendTaskMessage($"触发上相机锁附/组装拍照...", MessageLevel.Debug);
@@ -1603,6 +1653,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is bool state)
                     {
+                        if (_LastUPCameracheckExe != state)
+                        {
+                            _LastUPCameracheckExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state)
                         {
                             SendTaskMessage($"触发上相机检测拍照...", MessageLevel.Debug);
@@ -1629,6 +1688,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is bool state)
                     {
+                        if (_LastFixedCameraPickExe != state)
+                        {
+                            _LastFixedCameraPickExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state)
                         {
                             SendTaskMessage($"触发固定相机取料拍照...", MessageLevel.Debug);
@@ -1655,6 +1723,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is bool state)
                     {
+                        if (_LastFixedCameraPutExe != state)
+                        {
+                            _LastFixedCameraPutExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state)
                         {
                             SendTaskMessage($"触发固定相机锁附/组装拍照...", MessageLevel.Debug);
@@ -1732,6 +1809,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is bool state)
                     {
+                        if (_LastFixedCameracheckExe != state)
+                        {
+                            _LastFixedCameracheckExe = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state)
                         {
                             SendTaskMessage($"触发固定相机检测拍照...", MessageLevel.Debug);
@@ -1811,6 +1897,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is Int16 state)
                     {
+                        if (_LastWorkStart != state)
+                        {
+                            _LastWorkStart = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state == 1)
                         {
                             SendTaskMessage($"收到开始锁付信号...", MessageLevel.Debug);
@@ -1830,6 +1925,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is Int16 state)
                     {
+                        if (_LastWorkDone != state)
+                        {
+                            _LastWorkDone = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state == 1 || state == 2)
                         {
                             SendTaskMessage($"收到停止锁付信号...", MessageLevel.Debug);
@@ -1891,6 +1995,15 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is Int16 state)
                     {
+                        if (_LastRequestPosition != state)
+                        {
+                            _LastRequestPosition = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
+
                         if (state == 1)
                         {
                             SendTaskMessage($"收到多相机坐标合并请求,开始合并...", MessageLevel.Debug);
@@ -1949,6 +2062,14 @@ namespace TeamAAS_VP.Core
                 {
                     if (tuple.value is Int16 state)
                     {
+                        if (_LastPickINC != state)
+                        {
+                            _LastPickINC = state;
+                        }
+                        else
+                        {
+                            return;
+                        }
                         if (state != 0)
                         {
                             SendTaskMessage($"螺丝供料器...", MessageLevel.Info);
@@ -1966,6 +2087,14 @@ namespace TeamAAS_VP.Core
                         {
                             if (tuple.value is Int16 state)
                             {
+                                if (_LastMesCheck[i]!= state)
+                                {
+                                    _LastMesCheck[i]= state;
+                                }
+                                else
+                                {
+                                    return;
+                                }
                                 if (state == 1)
                                 {
                                     if (i == 0)