You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
7.5 KiB
222 lines
7.5 KiB
using Module.Plc.ModbusTcp.Tool;
|
|
using MorClient;
|
|
using RS.BLL;
|
|
using RS.Common;
|
|
using RS.Model;
|
|
using Sunny.UI;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace WindowsFormsApp1.UserControls
|
|
{
|
|
public partial class Alarm : UserControl
|
|
{
|
|
DataTable dtResult = new DataTable();
|
|
DataGridViewHandle gridHdl = new DataGridViewHandle();
|
|
BOperateLogInfo bOperateLogInfo = new BOperateLogInfo();
|
|
List<OperateAlarmLog> operateAlarmLogs = new List<OperateAlarmLog>();
|
|
PlcModbusTool PlcModbusTool = new PlcModbusTool();
|
|
|
|
private delegate void PrintCSStateValueCallBack(); //委托事件
|
|
private PrintCSStateValueCallBack ShowCSStateValue;
|
|
private bool IsPrintReadValue = true;
|
|
/// <summary>
|
|
/// 记录尚未恢复的报警数量
|
|
/// </summary>
|
|
int alarmCount = 0;
|
|
/// <summary>
|
|
/// 鼠标点击 所在行数
|
|
/// </summary>
|
|
static int rowLocate;
|
|
public Alarm()
|
|
{
|
|
InitializeComponent();
|
|
//LoadDataNew();
|
|
GenerateDataGridViewColumns();
|
|
}
|
|
|
|
#region 数据库中加载的数据
|
|
// 生成DataGridView列
|
|
private void GenerateDataGridViewColumns()
|
|
{
|
|
if (dgvCeshiInfo.DataSource != null)
|
|
{
|
|
if (dgvCeshiInfo.Columns.Count > 0)
|
|
{
|
|
dgvCeshiInfo.Columns[0].HeaderText = "报警编号";
|
|
dgvCeshiInfo.Columns[1].HeaderText = "报警名称";
|
|
dgvCeshiInfo.Columns[2].HeaderText = "报警内容";
|
|
dgvCeshiInfo.Columns[3].HeaderText = "报警时间";
|
|
dgvCeshiInfo.Columns[4].HeaderText = "恢复时间";
|
|
// dgvCeshiInfo.Columns[4].DefaultCellStyle.Format = "yyyy/MM/dd HH:mm:ss";
|
|
|
|
gridHdl._dbgrid = dgvCeshiInfo;
|
|
gridHdl.GenerateBaseDataGridViewAlarm();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
foreach (DataGridViewColumn column in dgvCeshiInfo.Columns)
|
|
{
|
|
column.SortMode = DataGridViewColumnSortMode.NotSortable;
|
|
}
|
|
}
|
|
|
|
#endregion 数据库中加载的报警数据
|
|
|
|
|
|
/// <summary>
|
|
/// 加载和打开线程
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
public void Alarm_Load()
|
|
{
|
|
// 定义列的名称和类型
|
|
dtResult = new DataTable();
|
|
dtResult.Columns.Add("报警编号", typeof(string));
|
|
dtResult.Columns.Add("报警内容", typeof(string));
|
|
dtResult.Columns.Add("报警时间", typeof(string));
|
|
|
|
if (!PubStaticClass.bthreedAlarm)
|
|
{
|
|
PubStaticClass.bthreedAlarm = true;
|
|
//委托展示参数实时值
|
|
ShowCSStateValue = new PrintCSStateValueCallBack(PrintParamRealValue);
|
|
//开始显示实时值线程
|
|
System.Threading.Thread printRealValueThread = new System.Threading.Thread(StartPrintParamRealValue);
|
|
printRealValueThread.IsBackground = true;
|
|
printRealValueThread.Start();
|
|
}
|
|
}
|
|
|
|
private void dgvCeshiInfo_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
rowLocate = e.RowIndex;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开始显示实时值线程
|
|
/// </summary>
|
|
private void StartPrintParamRealValue()
|
|
{
|
|
|
|
while (IsPrintReadValue)
|
|
{
|
|
if (this.IsHandleCreated)
|
|
{
|
|
this.BeginInvoke(ShowCSStateValue, null);
|
|
}
|
|
System.Threading.Thread.Sleep(2000);
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 展示参数实时值
|
|
/// </summary>
|
|
private /*async*/ void PrintParamRealValue()
|
|
{
|
|
uiButton3.BackColor = PlcModbusTool.ReadOneBitStyle("4802", 0) ? Color.FromArgb(146, 208, 80) : Color.FromArgb(156, 156, 156);
|
|
|
|
dtResult.Clear();
|
|
operateAlarmLogs = Common.operateAlarmLogs;
|
|
|
|
for (int i = Common.operateAlarmLogs.Count - 1; i >= 0; i--)
|
|
{
|
|
var item = Common.operateAlarmLogs[i];
|
|
dtResult.Rows.Add(item.alarmLogNum, item.alarmContent, item.alarmStartTime);
|
|
}
|
|
|
|
#region 设置顺序
|
|
// 获取 DataTable 的 DefaultView
|
|
DataView view = dtResult.DefaultView;
|
|
|
|
// 使用 Sort 方法对 DataTable 进行排序
|
|
// 可以按照一个或多个列进行排序,并提供排序方向(升序或降序)
|
|
view.Sort = "报警时间 DESC"; // 先按 Age 升序排序,然后按 Name 降序排序
|
|
dtResult = view.ToTable();
|
|
#endregion
|
|
|
|
dgvCeshiInfo.DataSource = dtResult;
|
|
|
|
gridHdl._dbgrid = dgvCeshiInfo;
|
|
gridHdl.GenerateBaseDataGridView();
|
|
GC.Collect();
|
|
GC.WaitForPendingFinalizers();
|
|
foreach (DataGridViewColumn column in dgvCeshiInfo.Columns)
|
|
{
|
|
column.SortMode = DataGridViewColumnSortMode.NotSortable;
|
|
}
|
|
for (int i = 0; i < dgvCeshiInfo.Rows.Count; i++)
|
|
{
|
|
dgvCeshiInfo.Rows[i].ReadOnly = true;
|
|
}
|
|
}
|
|
|
|
private void uiButton3_MouseDown(object sender, MouseEventArgs e)
|
|
{
|
|
PlcModbusTool.WriteOneBitStyle("4802", 0, true);
|
|
}
|
|
|
|
private void uiButton3_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
PlcModbusTool.WriteOneBitStyle("4802", 0, false);
|
|
}
|
|
|
|
#region 注释
|
|
|
|
/// <summary>
|
|
/// 复位按钮
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void uiButton3_Click(object sender, EventArgs e)
|
|
{
|
|
string armInfo = dgvCeshiInfo.Rows[rowLocate].Cells[2].Value.ToString();
|
|
if (PublicPara.armAndaddress.TryGetValue(armInfo, out var exam))
|
|
{
|
|
PlcModbusTool.WriteOneBitStyle(exam.Item1, exam.Item2, false);
|
|
|
|
#region 页面删除当前报警
|
|
if (rowLocate >= 0 && rowLocate < dgvCeshiInfo.RowCount)
|
|
{
|
|
//更新报警解除时间
|
|
DataGridViewRow dataGridViewRow = dgvCeshiInfo.Rows[rowLocate] as DataGridViewRow;
|
|
string alarmName = dataGridViewRow.Cells[1].Value.ToString();
|
|
|
|
DateTime dateTime = DateTime.Now;
|
|
string formattedDateTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
bool isUpdateSuccess = bOperateLogInfo.UpdateAlarmLogInfo(alarmName, formattedDateTime);
|
|
if (isUpdateSuccess)
|
|
{
|
|
dgvCeshiInfo.Rows.RemoveAt(rowLocate);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("请选择要删除的行");
|
|
}
|
|
|
|
#endregion 页面删除当前报警
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("当前报警信息未录入");
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|