From 9211ec11c112e18cd99e77f889a01110a70031ce Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期一, 24 十一月 2025 17:47:15 +0800
Subject: [PATCH] 优化项目结构

---
 HMI.AlermInfoManage/AlarmInfoManage.xaml.cs |  184 +++++++++++++++++++++++++++++++---------------
 1 files changed, 124 insertions(+), 60 deletions(-)

diff --git a/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs b/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs
index c7891c0..4a3ae83 100644
--- a/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs
+++ b/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs
@@ -1,5 +1,4 @@
-锘縰sing ConnectionUtil;
-using HMI.AlarmInfoManage.Entity;
+锘縰sing HMI.AlarmInfoManage.Entity;
 using HMI.Base;
 using HMI.Core.Api;
 using HMI.Core.Setting;
@@ -7,9 +6,7 @@
 using HMI.UI.Util;
 using HMI.Util;
 using Microsoft.Win32;
-using OPCConnection;
-using Sharp7;
-using SimensDriver;
+using S7Driver;
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
@@ -31,14 +28,11 @@
         private string markPath;
         private string alarmTextPath;
 
-        private string opcIP = "127.0.0.1";
-        private int opcPort = 6543;
-        private int localPort = 18888;
+        
         private volatile bool isClosing = false;
 
 
         private string dbPath;
-        private Simens plc = new Simens();
 
         private bool isHaveAlarm;
         private bool isNewAlarm;
@@ -71,7 +65,12 @@
         /// </summary>
         private MSMQHelper alarmRefershToMain = new MSMQHelper("LTHMI_Alarm_Rrfresh");
 
-        private SCADAApi lTSCADAApi = new OPCClient();
+        //private string opcIP = "127.0.0.1";
+        //private int opcPort = 6543;
+        //private int localPort = 18888;
+        //private SCADAApi lTSCADAApi = new OPCClient();
+
+        private PLCS7Driver pLCS7Driver;
 
         /// <summary>
         /// 鎶ヨ
@@ -93,7 +92,40 @@
         /// <summary>
         /// 浠g爜绠$悊
         /// </summary>
-        private ObservableCollection<AlarmSetting> alarmSettings = new ObservableCollection<AlarmSetting>();
+        private ObservableCollection<AlarmSetting> blockAlarmSettings = new ObservableCollection<AlarmSetting>();
+
+        public ObservableCollection<AlarmSetting> BlockAlarmSettings
+        {
+            get => blockAlarmSettings;
+            set
+            {
+                blockAlarmSettings = value;
+                RefreshBlockCache();
+            }
+        }
+        private Dictionary<string, Dictionary<string, string>> BlockMap = new Dictionary<string, Dictionary<string, string>>();
+        private Dictionary<string, string> BlockReadCache = new Dictionary<string, string>();
+
+        private void RefreshBlockCache()
+        {
+            BlockMap.Clear();
+            BlockReadCache.Clear();
+            if (BlockAlarmSettings == null || BlockAlarmSettings.Count <= 0)
+            {
+                return;
+            }
+            foreach (var setting in BlockAlarmSettings)
+            {
+                string key = $"{setting.DBAddress}.{setting.StartAddress}";
+                if (!BlockMap.ContainsKey(key))
+                {
+                    BlockMap[key] = new Dictionary<string, string>();
+                }
+                var codes = BlockMap[key];
+                codes[setting.AlarmCode] = setting.Description;
+            }
+        }
+
         // <summary>
         /// 鏍囧織浣嶆姤璀︾鐞�
         /// </summary>
@@ -104,7 +136,7 @@
         /// </summary>
         private List<AlarmText> currentAlarmCachePlcToMain = new List<AlarmText>();
 
-        private AlarmText alarm;
+        //private AlarmText alarm;
         private SystemSetting systemSetting;
 
         private ObservableCollection<AlarmText> datasource = new ObservableCollection<AlarmText>();
@@ -154,6 +186,7 @@
         {
             DataContext = this;
             systemSetting = SystemSetting.Instance;
+            pLCS7Driver = new PLCS7Driver(systemSetting.PlcIp, systemSetting.PlcPort);
             InitializeComponent();
         }
 
@@ -186,21 +219,29 @@
 
             MonitorTimer = new Timer
             {
-                Interval = 100,
+                Interval = 1000,
             };
             MonitorTimer.Elapsed += MonitorTimer_Elapsed;
-            if (!lTSCADAApi.Connect2(opcIP, opcPort, localPort, out string errMsg))
+            //if (!lTSCADAApi.Connect2(opcIP, opcPort, localPort, out string errMsg))
+            //{
+            //}
+            //else
+            //{
+            //    this.MonitorTimer.Start();
+            //}
+
+            if (pLCS7Driver.Connect(out string errMSg))
             {
-                //MsgBoxHelper.Error(this, errMsg);
+                this.MonitorTimer.Start();
             }
             else
             {
-                this.MonitorTimer.Start();
+                log.Error($"PLC Driver Connect Error. {errMSg}");
             }
 
             PcTimer = new Timer
             {
-                Interval = 100,
+                Interval = 1000,
                 AutoReset = false
             };
             PcTimer.Elapsed += PcTimer_Elapsed;
@@ -239,12 +280,12 @@
 
         private void OpenSettingWindow()
         {
-            AlarmSettingList listModal = new AlarmSettingList(blockPath, markPath,alarmSettings,markAlarmSetting, log)
+            AlarmSettingList listModal = new AlarmSettingList(blockPath, markPath, BlockAlarmSettings, markAlarmSetting, log)
             {
                 Owner = Window.GetWindow(this)
             };
             listModal.ShowDialog();
-            alarmSettings = listModal.Datasource;
+            BlockAlarmSettings = listModal.Datasource;
             markAlarmSetting = listModal.MarkDatasource;
         }
 
@@ -420,12 +461,12 @@
         {
             try
             {
-                alarmSettings = XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(blockPath);
+                BlockAlarmSettings = XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(blockPath);
             }
             catch (Exception ex)
             {
                 log.Error("LoadAlarmSetting Error.", ex);
-                alarmSettings = new ObservableCollection<AlarmSetting>();
+                BlockAlarmSettings = new ObservableCollection<AlarmSetting>();
             }
 
             try
@@ -469,7 +510,8 @@
                         case "AlarmCode":
                             AlarmText aalarm = AlarmTexts.FirstOrDefault(alarm => alarm.AlarmCode == MsgStr);
                             if (aalarm == null) break;
-                            var data = new AlarmText {
+                            var data = new AlarmText
+                            {
                                 Source = "PC",
                                 AlarmCode = aalarm.AlarmCode,
                                 AlarmInfo = aalarm.MAlarmText_CN,
@@ -596,44 +638,76 @@
         //    }
         //}
 
+        /// <summary>
+        /// PLC鎶ヨ璇诲彇
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
         private void MonitorTimer_Elapsed(object sender, ElapsedEventArgs e)
         {
             try
             {
                 this.MonitorTimer.Enabled = false;
 
-                if (!lTSCADAApi.IsConnected(out string errMsg))
-                {
-                    log.Warn($"OPCServer Connection Error. {errMsg}");
-                    if (!lTSCADAApi.Connect2(opcIP, opcPort, localPort, out errMsg))
-                    {
-                        log.Warn($"OPCServer Try ReConnection Error. {errMsg}");
-                        return;
-                    }
-                }
+                /// 妫�鏌ヨ繛鎺�
+                //if (!lTSCADAApi.IsConnected(out string errMsg))
+                //{
+                //    log.Warn($"OPCServer Connection Error. {errMsg}");
+                //    if (!lTSCADAApi.Connect2(opcIP, opcPort, localPort, out errMsg))
+                //    {
+                //        log.Warn($"OPCServer Try ReConnection Error. {errMsg}");
+                //        return;
+                //    }
+                //}
 
                 isHaveAlarm = false;
                 List<AlarmText> cache = new List<AlarmText>();
-                foreach (var item in alarmSettings)
+                //foreach (var item in BlockAlarmSettings)
+                //{
+                //    var name = $"{item.DBAddress}.{item.StartAddress}";
+                //    if (lTSCADAApi.DoFctReadSingle(name, out string alarmCode, out errMsg) && alarmCode != "0")
+                //    {
+                //        isHaveAlarm = true;
+                //        if (!textMap.TryGetValue(alarmCode, out alarm)) {
+                //            continue;
+                //        }
+                //        var newAlarm = new AlarmText
+                //        {
+                //            Source = "PLC",
+                //            AlarmCode = alarm.AlarmCode,
+                //            ModuleName_CN = alarm.ModuleName_CN,
+                //            MAlarmText_CN = alarm.MAlarmText_CN,
+                //            Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                //            AlarmInfo = $"{alarm.ModuleName_CN} {alarm.MAlarmText_CN}"
+                //        };
+                //        if (this.currentAlarmCachePlc
+                //                .Find(alarm => alarm.AlarmCode == newAlarm.AlarmCode) == null)
+                //        {
+                //            this.currentAlarmCachePlc.Add(newAlarm);
+                //        }
+                //    }
+                //}
+
+                foreach (var key in BlockMap.Keys)
                 {
-                    var name = $"{item.DBAddress}.{item.StartAddress}";
-                    if (lTSCADAApi.DoFctReadSingle(name, out string alarmCode, out errMsg) && alarmCode != "0")
+                    if (pLCS7Driver.ReadShort(key, out short alarmVal, out string errMsg) && BlockMap[key].ContainsKey(alarmVal.ToString()))
                     {
+                        //if(BlockReadCache.ContainsKey(key) && alarmCode)
+                        var alarmCode = alarmVal.ToString();
                         isHaveAlarm = true;
-                        if (!textMap.TryGetValue(alarmCode, out alarm)) {
-                            continue;
-                        }
+                        var text = BlockMap[key][alarmCode];
                         var newAlarm = new AlarmText
                         {
+                            PLC_DB_BLOCK = key,
                             Source = "PLC",
-                            AlarmCode = alarm.AlarmCode,
-                            ModuleName_CN = alarm.ModuleName_CN,
-                            MAlarmText_CN = alarm.MAlarmText_CN,
+                            AlarmCode = alarmCode,
+                            ModuleName_CN = text,
+                            MAlarmText_CN = text,
                             Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                            AlarmInfo = $"{alarm.ModuleName_CN} {alarm.MAlarmText_CN}"
+                            AlarmInfo = $"{alarmCode} {text}"
                         };
                         if (this.currentAlarmCachePlc
-                                .Find(alarm => alarm.AlarmCode == newAlarm.AlarmCode) == null)
+                                .Find(alarm => alarm.AlarmCode == newAlarm.AlarmCode && alarm.PLC_DB_BLOCK == newAlarm.PLC_DB_BLOCK) == null)
                         {
                             this.currentAlarmCachePlc.Add(newAlarm);
                         }
@@ -643,8 +717,9 @@
                 foreach (var item in markAlarmSetting)
                 {
                     var name = $"{item.DBAddress}.{item.StartAddress}";
-                    if (lTSCADAApi.DoFctReadSingle(name, out string alarmCode, out errMsg) && alarmCode != "0")
+                    if (pLCS7Driver.ReadShort(name, out short alarmVal, out string errMsg) && alarmVal != 0)
                     {
+                        var alarmCode = alarmVal.ToString();
                         isHaveAlarm = true;
                         var newAlarm = new AlarmText
                         {
@@ -671,7 +746,7 @@
             }
             finally
             {
-                if(!isClosing) this.MonitorTimer.Enabled = true;
+                if (!isClosing) this.MonitorTimer.Enabled = true;
             }
         }
 
@@ -681,7 +756,7 @@
         private void RefreshDBSetting()
         {
             List<byte> bytes = new List<byte>();
-            foreach (var item in alarmSettings)
+            foreach (var item in BlockAlarmSettings)
             {
                 //byte[] itemalarmCodeBytes = this.plc.Simens_S7_ReadBytes_DB("DB", item.DBAddress, item.StartAddress, item.Length);
                 //bytes.AddRange(itemalarmCodeBytes.ToList());
@@ -713,23 +788,12 @@
             foreach (AlarmText alarm in this.currentAlarmCachePc)
             {
                 string sqladd2 = string.Format("INSERT INTO Alarm (source, alarmcode, alarminfo, time) VALUES('{0}','{1}','{2}','{3}');", alarm.Source, alarm.AlarmCode, alarm.AlarmInfo, alarm.Time);
-                sqliteHelper.ExecuteSql(sqladd2);
-                //Dispatcher.BeginInvoke(new Action(() =>
-                //{
-                //    Datasource.Add(alarm);
-                //}));
+                if (AlarmShowHelper.ShowAlarm(alarm.AlarmInfo))
+                {
+                    sqliteHelper.ExecuteSql(sqladd2);
+                }
             }
             this.currentAlarmCachePc.Clear();
-        }
-
-        /// <summary>
-        /// 鍙戦�佹棩蹇楁秷鎭�
-        /// </summary>
-        /// <param name="Msg">鏃ュ織娑堟伅</param>
-        private void SendLogMsg(string Msg)
-        {
-            string LogMsg = "{\"Type\":\"Alarm\",\"Source\":\"" + alarm.Source + "\",\"Msg\":\"" + Msg + "\",\"Time\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\"}";
-            this.loggeralarm.Send("Log", LogMsg);
         }
     }
 }

--
Gitblit v1.9.1