From c4a3f8db90530a727ffab77c3bb5bb7d782792bf Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期一, 25 八月 2025 15:50:27 +0800
Subject: [PATCH] 上传代码;
---
HMI.AlermInfoManage/AlarmInfoManage.xaml.cs | 584 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 456 insertions(+), 128 deletions(-)
diff --git a/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs b/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs
index f0feadd..c7891c0 100644
--- a/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs
+++ b/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs
@@ -1,15 +1,19 @@
-锘縰sing HMI.AlarmInfoManage.Entity;
-using HMI.AlarmInfoManage.Model;
+锘縰sing ConnectionUtil;
+using HMI.AlarmInfoManage.Entity;
using HMI.Base;
+using HMI.Core.Api;
using HMI.Core.Setting;
using HMI.Core.Util;
using HMI.UI.Util;
+using HMI.Util;
using Microsoft.Win32;
-using NPOI.XSSF.UserModel;
+using OPCConnection;
using Sharp7;
using SimensDriver;
using System;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
using System.IO;
using System.Linq;
using System.Timers;
@@ -25,9 +29,16 @@
{
private string blockPath;
private string markPath;
- private string textSettingPath;
+ 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 XmlUIModel Model;
private bool isHaveAlarm;
private bool isNewAlarm;
@@ -50,7 +61,7 @@
/// <summary>
/// 鎺ユ敹鎶ヨ鐨勯槦鍒�
/// </summary>
- private MSMQHelper alarmQueue = new MSMQHelper("LTHMI_Alarm");
+ private MSMQHelper alarmQueue = new MSMQHelper("HMI_Alarm");
/// <summary>
/// 鏃ュ織鐢熸垚鍣�
/// </summary>
@@ -59,6 +70,8 @@
/// 鍒锋柊鎶ヨ鐨勯槦鍒�
/// </summary>
private MSMQHelper alarmRefershToMain = new MSMQHelper("LTHMI_Alarm_Rrfresh");
+
+ private SCADAApi lTSCADAApi = new OPCClient();
/// <summary>
/// 鎶ヨ
@@ -80,15 +93,12 @@
/// <summary>
/// 浠g爜绠$悊
/// </summary>
- private List<AlarmSetting> alarmSettings = new List<AlarmSetting>();
+ private ObservableCollection<AlarmSetting> alarmSettings = new ObservableCollection<AlarmSetting>();
// <summary>
/// 鏍囧織浣嶆姤璀︾鐞�
/// </summary>
- private List<AlarmSetting> signAlarmSetting = new List<AlarmSetting>();
- /// <summary>
- /// 鎶ヨ鏂囨湰鍒楄〃
- /// </summary>
- private List<AlarmText> alarmTexts = new List<AlarmText>();
+ private ObservableCollection<AlarmSetting> markAlarmSetting = new ObservableCollection<AlarmSetting>();
+
/// <summary>
/// 浼犺嚦涓荤獥浣撶殑鎶ヨ淇℃伅
/// </summary>
@@ -97,17 +107,114 @@
private AlarmText alarm;
private SystemSetting systemSetting;
+ private ObservableCollection<AlarmText> datasource = new ObservableCollection<AlarmText>();
+
+ public ObservableCollection<AlarmText> Datasource
+ {
+ get { return datasource; }
+ set { Set(ref datasource, value); }
+ }
+
+ /// <summary>
+ /// 鎶ヨ鏂囨湰鍒楄〃
+ /// </summary>
+ private ObservableCollection<AlarmText> alarmTexts = new ObservableCollection<AlarmText>();
+ public ObservableCollection<AlarmText> AlarmTexts
+ {
+ get { return alarmTexts; }
+ set { Set(ref alarmTexts, value); }
+ }
+
+ public Dictionary<string, AlarmText> textMap = new Dictionary<string, AlarmText>();
+
+ private double size = 30;
+
+ private int currentPage = 0;
+ public int CurrentPage
+ {
+ get => currentPage;
+ set
+ {
+ Set(ref currentPage, value);
+ RefreshData();
+ }
+ }
+
+ private int maxPage = 0;
+ public int MaxPage
+ {
+ get => maxPage;
+ set
+ {
+ Set(ref maxPage, value);
+ }
+ }
public AlarmInfoManage()
{
+ DataContext = this;
systemSetting = SystemSetting.Instance;
InitializeComponent();
}
+ public override void SetBaseFolder(string folder)
+ {
+ base.SetBaseFolder(folder);
+ dbPath = Path.Combine(BaseFolder, "alarm.db");
+ alarmTextPath = Path.Combine(BaseFolder, "AlarmText.data");
+
+ blockPath = Path.Combine(BaseFolder, "BlockSetting.xml");
+ markPath = Path.Combine(BaseFolder, "MarkSetting.xml");
+ }
+
public override void InitFinish()
{
- Model = new XmlUIModel(BaseFolder);
- DataContext = Model;
+ if (!File.Exists(dbPath))
+ {
+ SqliteHelper.CreateDatabase(dbPath);
+ }
+ sqliteHelper = new SqliteHelper(dbPath);
+ sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS Alarm (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ source TEXT NOT NULL,
+ alarmcode TEXT,
+ alarminfo TEXT,
+ time DATETIME);");
+
+ LoadAlarmSetting();
+ LoadAlarmText();
+
+ MonitorTimer = new Timer
+ {
+ Interval = 100,
+ };
+ MonitorTimer.Elapsed += MonitorTimer_Elapsed;
+ if (!lTSCADAApi.Connect2(opcIP, opcPort, localPort, out string errMsg))
+ {
+ //MsgBoxHelper.Error(this, errMsg);
+ }
+ else
+ {
+ this.MonitorTimer.Start();
+ }
+
+ PcTimer = new Timer
+ {
+ Interval = 100,
+ AutoReset = false
+ };
+ PcTimer.Elapsed += PcTimer_Elapsed;
+ PcTimer.Enabled = true;
+ }
+
+ public override void DoClose(object sender, EventArgs e)
+ {
+ isClosing = true;
+ PcTimer.Enabled = false;
+ PcTimer?.Dispose();
+
+ MonitorTimer.Enabled = false;
+ MonitorTimer?.Dispose();
}
private void Button_Click(object sender, RoutedEventArgs e)
@@ -119,7 +226,8 @@
OpenSettingWindow();
break;
case "refreshBtn":
- //Model.
+ LoadAlarmText();
+ RefreshPage(CurrentPage);
break;
case "importBtn":
ImportText();
@@ -131,11 +239,58 @@
private void OpenSettingWindow()
{
- AlarmSettingList listModal = new AlarmSettingList(blockPath, markPath, log)
+ AlarmSettingList listModal = new AlarmSettingList(blockPath, markPath,alarmSettings,markAlarmSetting, log)
{
Owner = Window.GetWindow(this)
};
listModal.ShowDialog();
+ alarmSettings = listModal.Datasource;
+ markAlarmSetting = listModal.MarkDatasource;
+ }
+
+ private void RefreshPage(int? page = null)
+ {
+ var sql = "SELECT COUNT (*) as num FROM Alarm;";
+ var dt = sqliteHelper.GetDataTable(sql);
+ if (dt.Rows.Count <= 0)
+ {
+ CurrentPage = 1;
+ MaxPage = 1;
+ return;
+ }
+ int count = int.Parse(dt.Rows[0]["num"].ToString());
+ MaxPage = (int)Math.Ceiling(count / size);
+
+ if (page != null)
+ {
+ CurrentPage = page.Value;
+ }
+ else if (CurrentPage > MaxPage)
+ {
+ CurrentPage = MaxPage;
+ }
+ }
+
+ private void RefreshData()
+ {
+ var list = new ObservableCollection<AlarmText>();
+ var sql = $"SELECT source, alarmcode, alarminfo, time FROM Alarm ORDER BY time DESC LIMIT ({CurrentPage - 1} * {size}), {size};";
+ var dt = sqliteHelper.GetDataTable(sql);
+ if (dt.Rows.Count > 0)
+ {
+ foreach (DataRow dr in dt.Rows)
+ {
+ var at = new AlarmText
+ {
+ Source = dr["source"].ToString(),
+ AlarmCode = dr["alarmcode"].ToString(),
+ AlarmInfo = dr["alarminfo"].ToString(),
+ Time = dr["time"].ToString(),
+ };
+ list.Add(at);
+ }
+ }
+ Datasource = list;
}
private void ImportText()
@@ -160,6 +315,60 @@
/// 瀵煎叆鎶ヨ浠g爜鏂囨湰
/// </summary>
/// <param name="excelFile">鐢靛瓙璁捐琛ㄦ牸鏂囦欢</param>
+ //private void ImportExcelAlarmText(string excelFile)
+ //{
+ // int index = 0;
+
+ // try
+ // {
+ // if (excelFile.IndexOf(".xlsm") < 0)
+ // {
+ // this.Warning(this.lang("Alm.OnlySupportXlsm"));
+ // return;
+ // }
+
+ // this.alarmTexts.Clear();
+ // XSSFWorkbook workbook = new XSSFWorkbook(excelFile);
+ // XSSFSheet sheet = (XSSFSheet)workbook.GetSheet("sheet1");
+ // XSSFRow row = null;
+
+ // for (int i = 2; i < (sheet.LastRowNum + 1); i++)
+ // {
+ // index = i;
+ // row = (XSSFRow)sheet.GetRow(i);
+ // if (row != null)
+ // {
+ // AlarmText alarm = new AlarmText();
+ // alarm.AlarmCode = row.Cells[0].StringCellValue;
+ // alarm.OpNo = row.Cells[1].StringCellValue;
+ // alarm.ModuleNo = row.Cells[2].StringCellValue;
+ // alarm.ModuleName_CN = row.Cells[3].StringCellValue;
+ // alarm.ModuleName_EN = row.Cells[4].StringCellValue;
+ // alarm.MAlarmCode = row.Cells[5].StringCellValue;
+ // alarm.MAlarmText_CN = row.Cells[6].StringCellValue;
+ // alarm.MAlarmText_EN = row.Cells[7].StringCellValue;
+ // this.alarmTexts.Add(alarm);
+ // }
+ // }
+
+ // if (sheet.LastRowNum > 0)
+ // {
+ // XmlHelper.SerializeToXml(textSettingPath, this.alarmTexts);
+ // }
+
+ // this.Success(this.lang("App.ImportSuccess"));
+ // }
+ // catch (Exception ex)
+ // {
+ // log.Error($"Row {index} AlarmText Import Failed.", ex);
+ // this.Error($"{this.lang("Alm.RowImportFailed", index)}: {ex.Message}");
+ // }
+ //}
+
+ /// <summary>
+ /// 瀵煎叆鎶ヨ浠g爜鏂囨湰
+ /// </summary>
+ /// <param name="excelFile">鐢靛瓙璁捐琛ㄦ牸鏂囦欢</param>
private void ImportExcelAlarmText(string excelFile)
{
int index = 0;
@@ -172,35 +381,14 @@
return;
}
- this.alarmTexts.Clear();
- XSSFWorkbook workbook = new XSSFWorkbook(excelFile);
- XSSFSheet sheet = (XSSFSheet)workbook.GetSheet("sheet1");
- XSSFRow row = null;
+ this.alarmTexts = new ObservableCollection<AlarmText>
+ (ExcelHelper.ReadFromExcel<AlarmText>(excelFile));
- for (int i = 2; i < (sheet.LastRowNum + 1); i++)
+ if (alarmTexts.Count > 0)
{
- index = i;
- row = (XSSFRow)sheet.GetRow(i);
- if (row != null)
- {
- AlarmText alarm = new AlarmText();
- alarm.AlarmCode = row.Cells[0].StringCellValue;
- alarm.OpNo = row.Cells[1].StringCellValue;
- alarm.ModuleNo = row.Cells[2].StringCellValue;
- alarm.ModuleName_CN = row.Cells[3].StringCellValue;
- alarm.ModuleName_EN = row.Cells[4].StringCellValue;
- alarm.MAlarmCode = row.Cells[5].StringCellValue;
- alarm.MAlarmText_CN = row.Cells[6].StringCellValue;
- alarm.MAlarmText_EN = row.Cells[7].StringCellValue;
- this.alarmTexts.Add(alarm);
- }
+ XmlHelper.SerializeToXml(alarmTextPath, this.alarmTexts);
}
-
- if (sheet.LastRowNum > 0)
- {
- XmlHelper.SerializeToXml(textSettingPath, this.alarmTexts);
- }
-
+ LoadAlarmText();
this.Success(this.lang("App.ImportSuccess"));
}
catch (Exception ex)
@@ -210,27 +398,57 @@
}
}
- private void UserControl_Loaded(object sender, RoutedEventArgs e)
+ private void LoadAlarmText()
{
- if (!string.IsNullOrEmpty(systemSetting.PlcIp))
+ try
{
- if (this.plc.isConnection)
+ textMap.Clear();
+ AlarmTexts = XmlHelper.DeserializeFromXml<ObservableCollection<AlarmText>>(alarmTextPath);
+ foreach (var text in AlarmTexts)
{
- this.plc.Simens_S7_ConnectPLC(systemSetting.PlcIp, 102, 0, 1, string.Empty);
+ textMap[text.AlarmCode] = text;
}
}
- MonitorTimer = new Timer
+ catch (Exception ex)
{
- Interval = 100,
- };
- MonitorTimer.Elapsed += MonitorTimer_Elapsed;
+ log.Error("LoadAlarmText Error.", ex);
+ AlarmTexts = new ObservableCollection<AlarmText>();
+ }
+ }
- PcTimer = new Timer
+ private void LoadAlarmSetting()
+ {
+ try
{
- Interval = 100,
- };
- PcTimer.Elapsed += PcTimer_Elapsed; ;
+ alarmSettings = XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(blockPath);
+ }
+ catch (Exception ex)
+ {
+ log.Error("LoadAlarmSetting Error.", ex);
+ alarmSettings = new ObservableCollection<AlarmSetting>();
+ }
+ try
+ {
+ markAlarmSetting = XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(markPath);
+ }
+ catch (Exception ex)
+ {
+ log.Error("LoadAlarmText Error.", ex);
+ markAlarmSetting = new ObservableCollection<AlarmSetting>();
+ }
+ }
+
+ private void UserControl_Loaded(object sender, RoutedEventArgs e)
+ {
+ //if (!string.IsNullOrEmpty(systemSetting.PlcIp))
+ //{
+ // if (this.plc.isConnection)
+ // {
+ // this.plc.Simens_S7_ConnectPLC(systemSetting.PlcIp, 102, 0, 1, string.Empty);
+ // }
+ //}
+ RefreshPage(1);
Loaded -= UserControl_Loaded;
}
@@ -242,25 +460,56 @@
this.alarmQueue.Receive(100, out string MessageID, out string MsgStr);
if (MessageID != string.Empty)
{
- log.Info(MsgStr);
switch (MessageID)
{
case "Clear":
- ////this.currentAlarmCachePc.RemoveAll(alarm => alarm.Source == "PC");
this.currentAlarmCachePc.Clear();
this.RefershAlarm();
break;
- default:
- AlarmText aalarm = this.alarmTexts.Find(alarm => alarm.AlarmCode == MsgStr);
- aalarm.Source = "PC";
- aalarm.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
- if ((aalarm != null) && (this.currentAlarmCachePc.Find(alarm => alarm.AlarmCode == aalarm.AlarmCode) == null))
+ case "AlarmCode":
+ AlarmText aalarm = AlarmTexts.FirstOrDefault(alarm => alarm.AlarmCode == MsgStr);
+ if (aalarm == null) break;
+ var data = new AlarmText {
+ Source = "PC",
+ AlarmCode = aalarm.AlarmCode,
+ AlarmInfo = aalarm.MAlarmText_CN,
+ Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ };
+ //aalarm.Source = "PC";
+ //aalarm.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ if (this.currentAlarmCachePc.Find(alarm => alarm.AlarmCode == aalarm.AlarmCode) == null)
{
- this.currentAlarmCachePc.Add(aalarm);
+ this.currentAlarmCachePc.Add(data);
this.RefershAlarm();
this.isPcAlarmnumber = this.currentAlarmCachePc.Count;
}
-
+ 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;
+ }
+ AlarmText newAlarm = new AlarmText
+ {
+ Source = source,
+ AlarmInfo = info,
+ Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ };
+ if (this.currentAlarmCachePc
+ .Find(alarm => alarm.Source == newAlarm.Source && alarm.AlarmInfo == newAlarm.AlarmInfo) == null)
+ {
+ this.currentAlarmCachePc.Add(newAlarm);
+ this.RefershAlarm();
+ this.isPcAlarmnumber = this.currentAlarmCachePc.Count;
+ }
break;
}
}
@@ -271,79 +520,158 @@
}
finally
{
- PcTimer.Enabled = true;
+ if (!isClosing) PcTimer.Enabled = true;
}
}
+
+ //private void MonitorTimer_Elapsed_bak(object sender, ElapsedEventArgs e)
+ //{
+ // try
+ // {
+ // this.MonitorTimer.Enabled = false;
+ // isHaveAlarm = false;
+ // foreach (var item in signAlarmSetting)
+ // {
+ // //isHaveAlarm = isHaveAlarm ||
+ // // this.plc.Simens_S7_ReadBool_DB(item.DBAddress, item.StartAddress, item.Length);
+ // }
+
+ // ////鏈夋姤璀�
+ // if (isHaveAlarm)
+ // {
+ // this.isNewAlarm = false;
+ // this.currentAlarmCachePlc.Clear();
+ // RefreshDBSetting();
+ // for (int i = 0; i < ((int)alarmCodeBytes.Length / 4); i++)
+ // {
+ // int code = S7.GetDIntAt(alarmCodeBytes, 4 * i);
+ // ////鏈夋姤璀�
+ // if (code != 0)
+ // {
+ // string acode = string.Format("{0:d10}", code);
+ // alarm = AlarmTexts.FirstOrDefault(item => item.AlarmCode == acode);
+ // if (alarm != null)
+ // {
+ // alarm.Source = "PLC";
+ // alarm.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ // this.currentAlarmCachePlc.Add(alarm);
+ // ////鏈夋柊鎶ヨ
+ // if (this.preAlarmCachePlc.Find(alarm => alarm.AlarmCode == acode) == null)
+ // {
+ // this.isNewAlarm = true;
+ // this.SendLogMsg(alarm.ModuleName_CN + alarm.MAlarmText_CN);
+ // }
+ // }
+ // }
+ // }
+
+ // ////鏈夋柊鎶ヨ鍜屾姤璀﹀噺灏戞椂鍒锋柊鎶ヨ琛�
+ // if (this.isNewAlarm || (this.currentAlarmCachePlc.Count != this.preAlarmCachePlc.Count))
+ // {
+ // this.currentAlarmCachePlcToMain = XmlHelper.DeepClone(this.currentAlarmCachePlc);
+ // this.RefershAlarm();
+ // }
+
+ // this.preAlarmCachePlc.Clear();
+ // this.preAlarmCachePlc = XmlHelper.DeepClone(this.currentAlarmCachePlc);
+ // }
+ // else
+ // {
+ // if (this.preAlarmCachePlc.Count != 0 || this.currentAlarmCachePlcToMain.Count != 0 || this.currentAlarmCachePlc.Count != 0)
+ // {
+ // this.preAlarmCachePlc.Clear();
+ // this.currentAlarmCachePlcToMain.Clear();
+ // this.currentAlarmCachePlc.Clear();
+ // this.RefershAlarm();
+ // }
+ // }
+ // }
+ // catch (Exception ex)
+ // {
+ // log.Error("sdadsa", ex);
+ // }
+ // finally
+ // {
+ // this.MonitorTimer.Enabled = true;
+ // }
+ //}
private void MonitorTimer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
this.MonitorTimer.Enabled = false;
- isHaveAlarm = false;
- foreach (var item in signAlarmSetting)
+
+ if (!lTSCADAApi.IsConnected(out string errMsg))
{
- isHaveAlarm = isHaveAlarm ||
- this.plc.Simens_S7_ReadBool_DB(item.DBAddress, item.StartAddress, item.Length);
+ log.Warn($"OPCServer Connection Error. {errMsg}");
+ if (!lTSCADAApi.Connect2(opcIP, opcPort, localPort, out errMsg))
+ {
+ log.Warn($"OPCServer Try ReConnection Error. {errMsg}");
+ return;
+ }
}
- ////鏈夋姤璀�
- if (isHaveAlarm)
+ isHaveAlarm = false;
+ List<AlarmText> cache = new List<AlarmText>();
+ foreach (var item in alarmSettings)
{
- this.isNewAlarm = false;
- this.currentAlarmCachePlc.Clear();
- RefreshDBSetting();
- for (int i = 0; i < ((int)alarmCodeBytes.Length / 4); i++)
+ var name = $"{item.DBAddress}.{item.StartAddress}";
+ if (lTSCADAApi.DoFctReadSingle(name, out string alarmCode, out errMsg) && alarmCode != "0")
{
- int code = S7.GetDIntAt(alarmCodeBytes, 4 * i);
- ////鏈夋姤璀�
- if (code != 0)
+ isHaveAlarm = true;
+ if (!textMap.TryGetValue(alarmCode, out alarm)) {
+ continue;
+ }
+ var newAlarm = new AlarmText
{
- string acode = string.Format("{0:d10}", code);
- alarm = this.alarmTexts.Find(item => item.AlarmCode == acode);
- if (alarm != null)
- {
- alarm.Source = "PLC";
- alarm.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
- this.currentAlarmCachePlc.Add(alarm);
- ////鏈夋柊鎶ヨ
- if (this.preAlarmCachePlc.Find(alarm => alarm.AlarmCode == acode) == null)
- {
- this.isNewAlarm = true;
- this.SendLogMsg(alarm.ModuleName_CN + alarm.MAlarmText_CN);
- }
- }
+ 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);
}
}
-
- ////鏈夋柊鎶ヨ鍜屾姤璀﹀噺灏戞椂鍒锋柊鎶ヨ琛�
- if (this.isNewAlarm || (this.currentAlarmCachePlc.Count != this.preAlarmCachePlc.Count))
- {
- this.currentAlarmCachePlcToMain = XmlHelper.DeepClone(this.currentAlarmCachePlc);
- this.RefershAlarm();
- }
-
- this.preAlarmCachePlc.Clear();
- this.preAlarmCachePlc = XmlHelper.DeepClone(this.currentAlarmCachePlc);
}
- else
+
+ foreach (var item in markAlarmSetting)
{
- if (this.preAlarmCachePlc.Count != 0 || this.currentAlarmCachePlcToMain.Count != 0 || this.currentAlarmCachePlc.Count != 0)
+ var name = $"{item.DBAddress}.{item.StartAddress}";
+ if (lTSCADAApi.DoFctReadSingle(name, out string alarmCode, out errMsg) && alarmCode != "0")
{
- this.preAlarmCachePlc.Clear();
- this.currentAlarmCachePlcToMain.Clear();
- this.currentAlarmCachePlc.Clear();
- this.RefershAlarm();
+ isHaveAlarm = true;
+ var newAlarm = new AlarmText
+ {
+ Source = "PLC",
+ AlarmCode = alarmCode,
+ Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ AlarmInfo = item.Description
+ };
+ if (this.currentAlarmCachePlc
+ .Find(d => d.AlarmInfo == newAlarm.AlarmInfo) == null)
+ {
+ this.currentAlarmCachePlc.Add(newAlarm);
+ }
}
}
+ this.RefershAlarm();
+ this.isPcAlarmnumber = this.currentAlarmCachePc.Count;
+
+ if (!isHaveAlarm) currentAlarmCachePlc.Clear();
}
catch (Exception ex)
{
- log.Error("sdadsa", ex);
+ log.Error("Read OPCServer Data Error.", ex);
}
finally
{
- this.MonitorTimer.Enabled = true;
+ if(!isClosing) this.MonitorTimer.Enabled = true;
}
}
@@ -355,11 +683,13 @@
List<byte> bytes = new List<byte>();
foreach (var item in alarmSettings)
{
- byte[] itemalarmCodeBytes = this.plc.Simens_S7_ReadBytes_DB("DB", item.DBAddress, item.StartAddress, item.Length);
- bytes.AddRange(itemalarmCodeBytes.ToList());
+ //byte[] itemalarmCodeBytes = this.plc.Simens_S7_ReadBytes_DB("DB", item.DBAddress, item.StartAddress, item.Length);
+ //bytes.AddRange(itemalarmCodeBytes.ToList());
}
alarmCodeBytes = bytes.ToArray();
}
+
+
/// <summary>
/// 鍒锋柊鎶ヨ淇℃伅
@@ -370,20 +700,26 @@
foreach (AlarmText alarm in this.currentAlarmCachePlc)
{
- this.currentInfo = alarm.ModuleName_CN + alarm.MAlarmText_CN;
- Model.Datasource.Add(alarm);
- string sqladd = string.Format("INSERT INTO Alarm (source, alarmcode, alarminfo, time) VALUES( '{0}','{1}','{2}','{3}');",
- alarm.Source, alarm.AlarmCode, this.currentInfo, alarm.Time);
- sqliteHelper.ExecuteSql(sqladd);
+ var currentInfo = alarm.AlarmInfo;
+ string sqladd = string.Format("INSERT INTO Alarm (source, alarmcode, alarminfo, time) VALUES('{0}','{1}','{2}','{3}');",
+ alarm.Source, alarm.AlarmCode, currentInfo, alarm.Time);
+ if (AlarmShowHelper.ShowAlarm(currentInfo))
+ {
+ sqliteHelper.ExecuteSql(sqladd);
+ }
}
+ //this.currentAlarmCachePlc.Clear();
foreach (AlarmText alarm in this.currentAlarmCachePc)
{
-
- Model.Datasource.Add(alarm);
- string sqladd2 = string.Format("INSERT INTO Alarm (source, alarmcode, alarminfo, time) VALUES( '{0}','{1}','{2}','{3}');", alarm.Source, alarm.AlarmCode, this.currentInfo, alarm.Time);
- this.sqliteHelper.ExecuteSql(sqladd2);
+ 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);
+ //}));
}
+ this.currentAlarmCachePc.Clear();
}
/// <summary>
@@ -394,14 +730,6 @@
{
string LogMsg = "{\"Type\":\"Alarm\",\"Source\":\"" + alarm.Source + "\",\"Msg\":\"" + Msg + "\",\"Time\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\"}";
this.loggeralarm.Send("Log", LogMsg);
- }
-
- public override void SetBaseFolder(string folder)
- {
- base.SetBaseFolder(folder);
- blockPath = Path.Combine(BaseFolder, "BlockSetting.xml");
- markPath = Path.Combine(BaseFolder, "MarkSetting.xml");
- textSettingPath = Path.Combine(BaseFolder, "textSetting.xml");
}
}
}
--
Gitblit v1.9.1