From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点
---
HMI.AlermInfoManage/AlarmInfoManage.xaml.cs | 424 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 424 insertions(+), 0 deletions(-)
diff --git a/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs b/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs
new file mode 100644
index 0000000..02cb527
--- /dev/null
+++ b/HMI.AlermInfoManage/AlarmInfoManage.xaml.cs
@@ -0,0 +1,424 @@
+锘縰sing HMI.Base;
+using HMI.Core.Entity;
+using HMI.Core.Util;
+using HMI.UI.Util;
+using HMI.Util;
+using HMI.Util.Alarm;
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.IO;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace HMI.AlarmInfoManage
+{
+ /// <summary>
+ /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+ /// </summary>
+ public partial class AlarmInfoManage : PluginControl
+ {
+ private string alarmTextPath;
+
+
+ private string dbPath;
+
+ private SqliteHelper sqliteHelper;
+
+ //private string opcIP = "127.0.0.1";
+ //private int opcPort = 6543;
+ //private int localPort = 18888;
+ //private SCADAApi lTSCADAApi = new OPCClient();
+
+ 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); }
+ }
+
+ 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;
+ InitializeComponent();
+ }
+
+ public override void SetBaseFolder(string folder)
+ {
+ base.SetBaseFolder(folder);
+ dbPath = Path.Combine(BaseFolder, "alarm.db");
+ alarmTextPath = Path.Combine(BaseFolder, "AlarmText.data");
+ }
+
+ public override void InitFinish()
+ {
+ 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);");
+
+ LoadAlarmText();
+
+ AlarmUtil.OnAlarm += AlarmUtil_OnAlarm;
+ //if (!lTSCADAApi.Connect2(opcIP, opcPort, localPort, out string errMsg))
+ //{
+ //}
+ //else
+ //{
+ // this.MonitorTimer.Start();
+ //}
+ }
+
+ private void AlarmUtil_OnAlarm(object sender, List<AlarmText> e)
+ {
+ foreach (AlarmText alarm in e)
+ {
+ var sql = string.Empty;
+ if (alarm.IsPLCAlarm)
+ {
+ var currentInfo = alarm.AlarmInfo;
+ sql = string.Format("INSERT INTO Alarm (source, alarmcode, alarminfo, time) VALUES('{0}','{1}','{2}','{3}');",
+ alarm.Source, alarm.AlarmCode, currentInfo, alarm.Time);
+ }
+ else
+ {
+ sql = string.Format("INSERT INTO Alarm (source, alarmcode, alarminfo, time) VALUES('{0}','{1}','{2}','{3}');",
+ alarm.Source, alarm.AlarmCode, alarm.AlarmInfo, alarm.Time);
+ }
+ sqliteHelper.ExecuteSql(sql);
+ }
+ }
+
+ private void Button_Click(object sender, RoutedEventArgs e)
+ {
+ Button btn = sender as Button;
+ switch (btn.Name)
+ {
+ case "settingBtn":
+ OpenSettingWindow();
+ break;
+ case "refreshBtn":
+ LoadAlarmText();
+ RefreshPage(CurrentPage);
+ break;
+ case "importBtn":
+ ImportText();
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void OpenSettingWindow()
+ {
+ AlarmSettingList listModal = new AlarmSettingList(log)
+ {
+ Owner = Window.GetWindow(this)
+ };
+ listModal.ShowDialog();
+ }
+
+ 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()
+ {
+ try
+ {
+ OpenFileDialog openDialog = new OpenFileDialog();
+ openDialog.Filter = "Files (*.xlsm)|*.xlsm";
+ if (openDialog.ShowDialog() == true)
+ {
+ this.ImportExcelAlarmText(openDialog.FileName);
+ }
+ }
+ catch (Exception ex)
+ {
+ log.Error("AlarmText Import Failed.", ex);
+ ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.ImportFailed")}: {ex.Message}");
+ }
+ }
+
+ /// <summary>
+ /// 瀵煎叆鎶ヨ浠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;
+
+ try
+ {
+ if (excelFile.IndexOf(".xlsm") < 0)
+ {
+ this.Warning(this.lang("Alm.OnlySupportXlsm"));
+ return;
+ }
+
+ this.alarmTexts = new ObservableCollection<AlarmText>
+ (ExcelHelper.ReadFromExcel<AlarmText>(excelFile));
+
+ if (alarmTexts.Count > 0)
+ {
+ XmlHelper.SerializeToXml(alarmTextPath, this.alarmTexts);
+ }
+ LoadAlarmText();
+ 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}");
+ }
+ }
+
+ private void LoadAlarmText()
+ {
+ try
+ {
+ if (string.IsNullOrEmpty(alarmTextPath) || !File.Exists(alarmTextPath))
+ {
+ AlarmTexts = new ObservableCollection<AlarmText>();
+ }
+ else
+ {
+ AlarmTexts = XmlHelper.DeserializeFromXml<ObservableCollection<AlarmText>>(alarmTextPath);
+ }
+ }
+ catch (Exception ex)
+ {
+ log.Error("LoadAlarmText Error.", ex);
+ AlarmTexts = new ObservableCollection<AlarmText>();
+ }
+ }
+
+ 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;
+ }
+
+ public override void DoClose(object sender, EventArgs e)
+ {
+ // AlarmUtil.OnAlarm -= AlarmUtil_OnAlarm;
+ }
+
+ //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;
+ // }
+ //}
+ }
+}
--
Gitblit v1.9.1