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