From c5de0d98241f8c8349fa38851b77efcfc61e4d26 Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期二, 29 七月 2025 15:42:00 +0800
Subject: [PATCH] 前端代码

---
 项目代码/后端/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs |  203 +++++++++++++++++++++++++++++++++-----------------
 1 files changed, 135 insertions(+), 68 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/\345\220\216\347\253\257/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/\345\220\216\347\253\257/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs"
index 1d08638..4fc54c3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/\345\220\216\347\253\257/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/\345\220\216\347\253\257/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs"
@@ -16,18 +16,34 @@
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_Core.Helper;
 
-
 namespace WIDESEAWCS_Tasks
 {
     [DisallowConcurrentExecution]
     public class AlarmResetJob : JobBase, IJob
     {
-
         private readonly IAlarmResetHsyServer _alarmResetHsyServer;
         private readonly ISys_UserService _UserService;
         WebSocketServer _webSocketServer;
         private readonly Idt_ErrormsginfoService _ErrormsginfoService;
+        private readonly AlarmResetHsyServer _alarmResetHsy;
+        //private static readonly object _lockObj = new object(); //鍔犻攣
 
+
+        // 澧炴坊鐨勫瓧鍏歌窡韪姤璀︿负姣忎釜瑁呯疆 Quartz 榛樿姣忔璋冨害浠诲姟鏃朵細閲嶆柊鍒涘缓
+        private static readonly Dictionary<string, bool> _leftAlarmStates = new Dictionary<string, bool>() //鍔犻攣
+        {
+            ["M109"] = false,//浼烘湇鎶ヨ
+            ["M111"] = false,//鍏朵粬鎶ヨ
+            ["M110"] = false,//鎬ュ仠鎶ヨ
+            ["M120"] = false,//闅滅鎶ヨ
+        };
+        private static readonly Dictionary<string, bool> _rightAlarmStates = new Dictionary<string, bool>()
+        { 
+            ["M109"] = false,//浼烘湇鎶ヨ
+            ["M111"] = false,//鍏朵粬鎶ヨ
+            ["M110"] = false,//鎬ュ仠鎶ヨ
+            ["M120"] = false,//闅滅鎶ヨ
+        };
 
         public AlarmResetJob(Idt_ErrormsginfoService errormsginfoService, WebSocketServer webSocketServer, IAlarmResetHsyServer alarmResetHsyServer, ISys_UserService UserService)
         {
@@ -37,15 +53,10 @@
             _ErrormsginfoService = errormsginfoService;
         }
 
-
         public Task Execute(IJobExecutionContext context)
         {
             try
             {
-
-                //鑾峰彇璁惧鍙�
-                // 鑾峰彇璁惧閰嶇疆
-                //OtherDevice serialPortDevice = (OtherDevice)context.JobDetail.JobDataMap.Get("JobParams");
                 if (!int.TryParse(AppSettings.Get("DepartmentID"), out int deid))
                 {
                     Console.WriteLine("閰嶇疆椤� DepartmentID 鏃犳硶杞崲涓烘暣鏁�");
@@ -53,93 +64,155 @@
                 var devices = GetDevicesByDeptId(deid);
                 if (devices != null)
                 {
-                    //棣栧厛瑕佷竴鐩磋锛屽鏋滃彂鐢熶簡鏁呴殰瑕佸啓鍒癬alarmResetHsyServer涓褰曚笅鏉ュ苟涓旂粰鍒板墠绔暟鎹�
-                    //宸lc
-                    try
+                        // Left PLC processing
+                        try
                     {
                         if (devices.Value.left.IsConnected)
                         {
-                            var leftPLcstuck1 = devices.Value.left.Communicator.Read<bool>("M109"); //鍗′綇鎶ヨ
-                            var leftPLcOher1 = devices.Value.left.Communicator.Read<bool>("M111");  //鍏朵粬鎶ヨ //榛樿鏄痜alse
+                            var leftPLcstuck1 = devices.Value.left.Communicator.Read<bool>("M109"); // Servo alarm
+                            var leftPLcOher1 = devices.Value.left.Communicator.Read<bool>("M111");  // Other alarm
+                            var leftscram = devices.Value.left.Communicator.Read<bool>("M110");     // Emergency stop
+                            var leftstop = devices.Value.left.Communicator.Read<bool>("M120");      // Obstacle stop
+
                             var leftPLcNowAdd = devices.Value.left.Communicator.Read<float>("D80");
                             Console.WriteLine($"{devices.Value.left.DeviceName}:鍗′綇鎶ヨ{leftPLcstuck1}锛屽叾浠栨姤璀leftPLcOher1}");
-                            if (leftPLcstuck1 == true && leftPLcOher1 == false)
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氫几缂╁崱浣忔姤璀�";
-                                //鎶ヨ浜嗗湪杩欒皟鐢ㄦ坊鍔犳柟娉曪紝骞朵紶缁欏墠绔�
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid,text, leftPLcstuck1);
 
+                           
+                                // Check and record alarms only when state changes from false to true
+                                if (leftPLcstuck1 && !_leftAlarmStates["M109"])
+                                {
+                                    string text = $"妫�8閬撳乏渚ц鎯曟満鏋勶細浼哥缉鍗′綇鎶ヨ";
+                                    var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
+                                    _leftAlarmStates["M109"] = true;
+                                }
+                                else if (!leftPLcstuck1)
+                                {
+                                    _leftAlarmStates["M109"] = false;
+                                }
 
-                            }
-                            if (leftPLcstuck1 == false && leftPLcOher1 == true)
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氬叾浠栨晠闅滄姤璀�";
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
+                                if (leftPLcOher1 && !_leftAlarmStates["M111"])
+                                {
+                                    string text = $"妫�8閬撳乏渚ц鎯曟満鏋勶細鍏朵粬鏁呴殰鎶ヨ";
+                                    var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcOher1);
+                                    _leftAlarmStates["M111"] = true;
+                                }
+                                else if (!leftPLcOher1)
+                                {
+                                    _leftAlarmStates["M111"] = false;
+                                }
 
-                            }
-                            if (leftPLcstuck1 == true && leftPLcOher1 == true)//濡傛灉鎶ヨ浜�
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氭姤璀︿几缂╁崱浣忔姤璀﹀拰鍏朵粬鏁呴殰鎶ヨ";
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
-                            }
+                                if (leftscram && !_leftAlarmStates["M110"])
+                                {
+                                    string text = $"妫�8閬撳乏渚ц鎯曟満鏋勶細鎬ュ仠鎶ヨ";
+                                    var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftscram);
+                                    _leftAlarmStates["M110"] = true;
+                                }
+                                else if (!leftscram)
+                                {
+                                    _leftAlarmStates["M110"] = false;
+                                }
+
+                                if (leftstop && !_leftAlarmStates["M120"])
+                                {
+                                    string text = $"妫�8閬撳乏渚ц鎯曟満鏋勶細閬囬殰纰嶅仠姝㈡姤璀�";
+                                    var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftstop);
+                                    _leftAlarmStates["M120"] = true;
+                                }
+                                else if (!leftstop)
+                                {
+                                    _leftAlarmStates["M120"] = false;
+                                }
+                            
+
                             _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new
                             {
                                 device = "宸lc",
                                 Liftvalue = leftPLcNowAdd
-                            }));//鎶奃80缁欏墠绔�
+                            }));
                         }
                     }
                     catch (Exception)
                     {
                         string text = $"杞ㄩ亾{deid}锛氬乏PLC鏈繛鎺�";
-                        //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);//娣诲姞鏁版嵁
+                        //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);
                     }
-                    
+
+                    // Right PLC processing
                     try
                     {
-                        if (devices.Value.right.IsConnected)//鏄惁杩炴帴涓�
+                        if (devices.Value.right.IsConnected)
                         {
-                            //鍙硃lc
-                            var rightPLcSuck = devices.Value.right.Communicator.Read<bool>("M109"); //鍗′綇鎶ヨ
-                            var rightPLcOher = devices.Value.right.Communicator.Read<bool>("M111");//鍏朵粬鎶ヨ
+                            var rightPLcSuck = devices.Value.right.Communicator.Read<bool>("M109"); // Servo alarm
+                            var rightPLcOher = devices.Value.right.Communicator.Read<bool>("M111"); // Other alarm
+                            var rightscram = devices.Value.right.Communicator.Read<bool>("M110"); // Emergency stop
+                            var rightstop = devices.Value.right.Communicator.Read<bool>("M120");     // Obstacle stop
+
                             var rightPLcNowAdd = devices.Value.right.Communicator.Read<float>("D80");
                             Console.WriteLine($"{devices.Value.right.DeviceName}:鍗′綇鎶ヨ{rightPLcSuck}锛屽叾浠栨姤璀rightPLcOher}");
-                            if (rightPLcSuck == true && rightPLcOher == false)
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氭姤璀︿几缂╁崱浣忔姤璀�";
-                                //鎶ヨ浜嗗湪杩欒皟鐢ㄦ坊鍔犳柟娉曪紝骞朵紶缁欏墠绔�
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcSuck);
-                                // _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(reslut));//websocketserver杩欑鍙兘浼犵粰鍓嶇json鏍煎紡
-                            }
-                            if (rightPLcOher == false && rightPLcSuck == true)
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氬叾浠栨晠闅滄姤璀�";
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcOher);
-                            }
-                            if (rightPLcSuck == true && rightPLcOher == true)//濡傛灉鎶ヨ浜�
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氭姤璀︿几缂╁崱浣忔姤璀﹀拰鍏朵粬鏁呴殰鎶ヨ";
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcOher);//娣诲姞鏁版嵁
-                            }
-                            _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new {
-                                device="鍙砅lc",
-                                Rightvalue= rightPLcNowAdd
-                            }));//鎶奃80缁欏墠绔�
 
+                           
+                                // Check and record alarms only when state changes from false to true
+                                if (rightPLcSuck && !_rightAlarmStates["M109"])
+                                {
+                                    string text = $"妫�8閬撳彸渚ц鎯曟満鏋勶細鎶ヨ浼哥缉鍗′綇鎶ヨ";
+                                    var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcSuck);
+                                    _rightAlarmStates["M109"] = true;
+                                }
+                                else if (!rightPLcSuck)
+                                {
+                                    _rightAlarmStates["M109"] = false;
+                                }
+
+                                if (rightPLcOher && !_rightAlarmStates["M111"])
+                                {
+                                    string text = $"妫�8閬撳彸渚ц鎯曟満鏋勶細鍏朵粬鏁呴殰鎶ヨ";
+                                    var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcOher);
+                                    _rightAlarmStates["M111"] = true;
+                                }
+                                else if (!rightPLcOher)
+                                {
+                                    _rightAlarmStates["M111"] = false;
+                                }
+
+                                if (rightscram && !_rightAlarmStates["M110"])
+                                {
+                                    string text = $"妫�8閬撳彸渚ц鎯曟満鏋勶細鎬ュ仠鎶ヨ";
+                                    var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightscram);
+                                    _rightAlarmStates["M110"] = true;
+                                }
+                                else if (!rightscram)
+                                {
+                                    _rightAlarmStates["M110"] = false;
+                                }
+
+                                if (rightstop && !_rightAlarmStates["M120"])
+                                {
+                                    string text = $"妫�8閬撳彸渚ц鎯曟満鏋勶細閬囬殰纰嶅仠姝㈡姤璀�";
+                                    var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightstop);
+                                    _rightAlarmStates["M120"] = true;
+                                }
+                                else if (!rightstop)
+                                {
+                                    _rightAlarmStates["M120"] = false;
+                                }
+                            
+                            _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new
+                            {
+                                device = "鍙砅lc",
+                                Rightvalue = rightPLcNowAdd
+                            }));
                         }
                     }
                     catch (Exception)
                     {
                         string text = $"杞ㄩ亾{deid}锛氬彸PLC鏈繛鎺�";
-                        //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);//娣诲姞鏁版嵁
+                        //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);
                     }
+
                     var alrt = _alarmResetHsyServer.GetWebSocketInfo(deid);
                     _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(alrt));
-                    
                 }
             }
-
-                       
             catch (Exception ex)
             {
                 _ErrormsginfoService.UpdateErrorMsg(ex.Message, 1);
@@ -148,9 +221,9 @@
             }
             return Task.CompletedTask;
         }
+
         public (OtherDevice left, OtherDevice right)? GetDevicesByDeptId(int deptId)
         {
-            // 宸﹁澶囧彿锛�1 -> 001锛�2 -> 003锛�3 -> 005...
             int baseCode = 1 + (deptId - 1) * 2;
             string leftCode = $"SSG{baseCode.ToString("D3")}";
             string rightCode = $"SSG{(baseCode + 1).ToString("D3")}";
@@ -158,13 +231,7 @@
             var left = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == leftCode);
             var right = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == rightCode);
 
-            
-            //if (left == null || right == null)
-            //    return null;
-
             return (left, right);
         }
     }
-}
-
-
+}
\ No newline at end of file

--
Gitblit v1.9.3