From b544d5cccd76735e034c8055918a50927b437474 Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期二, 10 十一月 2026 08:29:04 +0800
Subject: [PATCH] fix: 维护模式重复进入失败与按钮灰死 + Broker 并发验证用例

---
 HMI.Util/Alarm/AlarmUtil.cs |   38 ++++++++++++++++----------------------
 1 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/HMI.Util/Alarm/AlarmUtil.cs b/HMI.Util/Alarm/AlarmUtil.cs
index 1044e1e..35ad725 100644
--- a/HMI.Util/Alarm/AlarmUtil.cs
+++ b/HMI.Util/Alarm/AlarmUtil.cs
@@ -2,6 +2,7 @@
 using HMI.Core.Entity;
 using HMI.Core.Setting;
 using HMI.Core.Util;
+using HMI.Simple.Util;
 using log4net;
 using S7Driver;
 using System;
@@ -19,7 +20,7 @@
 
         public event EventHandler<LoadMsg> LoadMessageAppend;
 
-        private static ILog log = LogManager.GetLogger("AlarmHelper");
+        internal static ILog log = LogManager.GetLogger("AlarmHelper");
 
         internal AlarmHelper()
         {
@@ -192,7 +193,7 @@
 
         private void RefershAlarm()
         {
-            alarmRefershToMain.Send("AlarmRefersh", string.Empty);
+            alarmRefershToMain.Send("AlarmRefersh", string.Empty, string.Empty, 0);
             List<AlarmText> alarms = new List<AlarmText>();
 
             foreach (AlarmText alarm in currentPLCAlarmCache)
@@ -223,8 +224,8 @@
             try
             {
                 mqTimer.Enabled = false;
-                alarmQueue.Receive(100, out string MessageID, out string MsgStr);
-                if (MessageID != string.Empty)
+                alarmQueue.Receive(100, out string MessageID, out MQAlarm alarm);
+                if (MessageID != string.Empty && alarm != null)
                 {
                     switch (MessageID)
                     {
@@ -251,28 +252,19 @@
                             //}
                             break;
                         default:
-                            string[] arr = MsgStr.Split(',');
-                            string source = "PC";
-                            string info = string.Empty;
-                            if (arr.Length > 1)
-                            {
-                                source = arr[0];
-                                info = arr[1];
-                            }
-                            else
-                            {
-                                info = MsgStr;
-                            }
+                            string source = string.IsNullOrEmpty(alarm.Source) ? "PC" : alarm.Source;
+                            string info = alarm.Content;
+
                             AlarmText newAlarm = new AlarmText
                             {
                                 Source = source,
                                 VirtualId = $"{source}:{info}",
                                 AlarmInfo = info,
-                                Level = 3,
+                                Level = alarm.Level,
                                 Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                             };
                             if (currentMQAlarmCache
-                                .Find(alarm => alarm.Source == newAlarm.Source && alarm.AlarmInfo == newAlarm.AlarmInfo) == null)
+                                .Find(a => a.Source == newAlarm.Source && a.AlarmInfo == newAlarm.AlarmInfo) == null)
                             {
                                 currentMQAlarmCache.Add(newAlarm);
                                 RefershAlarm();
@@ -297,7 +289,7 @@
             BlockReadCache.Clear();
             try
             {
-                BlockSettings = XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(blockFilePath);
+                BlockSettings = HMI.Core.Util.XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(blockFilePath);
             }
             catch (Exception ex)
             {
@@ -321,7 +313,7 @@
         {
             try
             {
-                MarkSettings = XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(markFilePath);
+                MarkSettings = HMI.Core.Util.XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(markFilePath);
             }
             catch (Exception ex)
             {
@@ -338,13 +330,13 @@
 
         public void UpdateBlockSettings(IEnumerable<AlarmSetting> settings)
         {
-            XmlHelper.SerializeToXml(blockFilePath, settings);
+            HMI.Core.Util.XmlHelper.SerializeToXml(blockFilePath, settings);
             RefreshBlockSettings();
         }
 
         public void UpdateMarkSettings(IEnumerable<AlarmSetting> settings)
         {
-            XmlHelper.SerializeToXml(markFilePath, settings);
+            HMI.Core.Util.XmlHelper.SerializeToXml(markFilePath, settings);
             RefreshMarkSettings();
         }
     }
@@ -361,10 +353,12 @@
 
         public static void Init()
         {
+            AlarmHelper.log.Info("AlarmUtil initing...");
             Instance = new AlarmHelper();
             Instance.LoadMessageAppend += Instance_LoadMessageAppend; ;
             Instance.InitInstance();
             Instance.OnAlarm += Instance_OnAlarm;
+            AlarmHelper.log.Info("AlarmUtil inited finished.");
         }
 
         private static void Instance_LoadMessageAppend(object sender, LoadMsg e)

--
Gitblit v1.9.1