using MainForm.ClassFile.ProjectClass;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MainForm.FaForm
{
public partial class Form_DevAlarm : Form
{
#region 变量
///
/// 日志
///
public event AlarmMessageHandler MessageEvent;
#endregion 变量
#region 窗体事件
public Form_DevAlarm()
{
InitializeComponent();
}
private void Form_DevAlarm_Load(object sender, EventArgs e)
{
#region 页面样式
// 实时表
dgv_Current.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
dgv_Current.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
dgv_Current.RectColor = Color.Gainsboro;
dgv_Current.GridColor = Color.Gainsboro;
dgv_Current.BackgroundColor = Color.White;
// 历史表
dgv_History.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
dgv_History.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
dgv_History.RectColor = Color.Gainsboro;
dgv_History.GridColor = Color.Gainsboro;
dgv_History.BackgroundColor = Color.White;
#endregion 页面样式
}
private void Form_DevAlarm_VisibleChanged(object sender, EventArgs e)
{
if (!this.IsDisposed && this.Visible)
{
UpdDeviceStatus_Today(); // 加载设备运行数据
UpdDeviceAlarm_History_48H(); // 加载报警数据
}
}
#endregion 窗体事件
#region 设备运行信息
///
/// 更新设备运行信息-本次(废弃)
///
/// 设备信息
public void UpdDeviceStatus_ThisTime(LineWorkingData_ThisTime lineWorkingData)
{
if (this.InvokeRequired) // 当前线程不是控件UI线程时为true
{
this.Invoke(new Action(UpdDeviceStatus_ThisTime), lineWorkingData);
return;
}
RPrc_Normal.Value = lineWorkingData.NormalTimeLong < 24 ? Convert.ToInt32(lineWorkingData.NormalTimeLong) : 24; // 本次运行时间
Lbl__Normal.Text = string.Concat("本次运行时间:", lineWorkingData.NormalTimeLong.ToString("0.00"), "小时");
RPrc_Fault.Value = lineWorkingData.FaultTimeLong < 24 ? Convert.ToInt32(lineWorkingData.FaultTimeLong) : 24; // 本次故障时间
Lbl_Fault.Text = string.Concat("本次故障时间:", lineWorkingData.FaultTimeLong.ToString("0.00"), "小时");
RPrc_Standby.Value = lineWorkingData.StandbyTimeLong < 24 ? Convert.ToInt32(lineWorkingData.StandbyTimeLong) : 24; // 本次待机时间
Lbl_Standby.Text = string.Concat("本次待机时间:", lineWorkingData.StandbyTimeLong.ToString("0.00"), "小时");
RPrc_MaterialShortage.Value = lineWorkingData.MaterialShortageTimeLong < 24 ? Convert.ToInt32(lineWorkingData.MaterialShortageTimeLong) : 24; // 本次缺料时间
Lbl_MaterialShortage.Text = string.Concat("本次缺料时间:", lineWorkingData.MaterialShortageTimeLong.ToString("0.00"), "小时");
RPrc_Maintenance.Value = lineWorkingData.MaintenanceTimeLong < 24 ? Convert.ToInt32(lineWorkingData.MaintenanceTimeLong) : 24; // 本次维修时间
Lbl_Maintenance.Text = string.Concat("本次维修时间:", lineWorkingData.MaintenanceTimeLong.ToString("0.00"), "小时");
// 本次未知状态时间
float unknown = lineWorkingData.BootTimeLong - lineWorkingData.NormalTimeLong
- lineWorkingData.FaultTimeLong - lineWorkingData.StandbyTimeLong
- lineWorkingData.MaterialShortageTimeLong;
unknown = unknown < 24 ? unknown : 24;
unknown = unknown < 0 ? 0 : unknown;
RPrc_Unknown.Value = Convert.ToInt32(unknown);
Lbl_Unknown.Text = string.Concat("本次未知状态时间:", unknown.ToString("0.00"), "小时");
}
///
/// 更新设备运行信息-本日
///
public void UpdDeviceStatus_Today()
{
try
{
if (this.InvokeRequired) // 当前线程不是控件UI线程时为true
{
this.Invoke(new Action(UpdDeviceStatus_Today));
return;
}
LineWorkingData_Today lineWorkingData_Today = new LineWorkingData_Today();
DateTime dtNow = DateTime.Now;
string dtStart = dtNow.ToString("yyyy-MM-dd") + " 00:00:00";
string dtEnd = dtNow.ToString("yyyy-MM-dd") + " 23:59:59";
string querySQL = @"SELECT [LineName] AS 线体名称
,SUM([BootTimeLong]) AS 本日开机时间
,SUM([NormalTimeLong]) AS 本日开机运行时间
,SUM([StandbyTimeLong]) AS 本日开机待机时间
,SUM([FaultTimeLong]) AS 本日开机故障时间
,SUM([MaterialShortageTimeLong]) AS 本日开机缺料时间
,SUM([MaintenanceTimeLong]) AS 本日开机维修时间
,SUM([FaultNumber]) AS 本日故障停机次数
FROM [LineWorkingData]
Where [CreateTime] between '{0}' and '{1}'
And [LineName]='{2}'
Group by [LineName]";
querySQL = string.Format(querySQL, dtStart, dtEnd, GlobalContext.LineCode);
DataSet ds = SQLHelper_New.Query(querySQL, null);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
lineWorkingData_Today.线体名称 = ds.Tables[0].Rows[0][0].ToString();
lineWorkingData_Today.本日开机时间 = ds.Tables[0].Rows[0][1] != null ? Convert.ToSingle(ds.Tables[0].Rows[0][1]) : 0;
lineWorkingData_Today.本日开机运行时间 = ds.Tables[0].Rows[0][2] != null ? Convert.ToSingle(ds.Tables[0].Rows[0][2]) : 0;
lineWorkingData_Today.本日开机待机时间 = ds.Tables[0].Rows[0][3] != null ? Convert.ToSingle(ds.Tables[0].Rows[0][3]) : 0;
lineWorkingData_Today.本日开机故障时间 = ds.Tables[0].Rows[0][4] != null ? Convert.ToSingle(ds.Tables[0].Rows[0][4]) : 0;
lineWorkingData_Today.本日开机缺料时间 = ds.Tables[0].Rows[0][5] != null ? Convert.ToSingle(ds.Tables[0].Rows[0][5]) : 0;
lineWorkingData_Today.本日开机维修时间 = ds.Tables[0].Rows[0][6] != null ? Convert.ToSingle(ds.Tables[0].Rows[0][6]) : 0;
lineWorkingData_Today.本日故障停机次数 = ds.Tables[0].Rows[0][7] != null ? Convert.ToInt32(ds.Tables[0].Rows[0][7]) : 0;
}
// 本日运行时间
RPrc_Normal.Maximum = lineWorkingData_Today.本日开机时间 > lineWorkingData_Today.本日开机运行时间 ? Convert.ToInt32(lineWorkingData_Today.本日开机时间) : Convert.ToInt32(lineWorkingData_Today.本日开机运行时间);
RPrc_Normal.Value = lineWorkingData_Today.本日开机运行时间 < 24 ? Convert.ToInt32(lineWorkingData_Today.本日开机运行时间) : 24;
Lbl__Normal.Text = string.Concat("本日运行时间:", lineWorkingData_Today.本日开机运行时间.ToString("0.00"), "小时");
// 本日故障时间
RPrc_Fault.Maximum = lineWorkingData_Today.本日开机时间 > lineWorkingData_Today.本日开机故障时间 ? Convert.ToInt32(lineWorkingData_Today.本日开机时间) : Convert.ToInt32(lineWorkingData_Today.本日开机故障时间);
RPrc_Fault.Value = lineWorkingData_Today.本日开机故障时间 < 24 ? Convert.ToInt32(lineWorkingData_Today.本日开机故障时间) : 24;
Lbl_Fault.Text = string.Concat("本日故障时间:", lineWorkingData_Today.本日开机故障时间.ToString("0.00"), "小时");
// 本日待机时间
RPrc_Standby.Maximum = lineWorkingData_Today.本日开机时间 > lineWorkingData_Today.本日开机待机时间 ? Convert.ToInt32(lineWorkingData_Today.本日开机时间) : Convert.ToInt32(lineWorkingData_Today.本日开机待机时间);
RPrc_Standby.Value = lineWorkingData_Today.本日开机待机时间 < 24 ? Convert.ToInt32(lineWorkingData_Today.本日开机待机时间) : 24;
Lbl_Standby.Text = string.Concat("本日待机时间:", lineWorkingData_Today.本日开机待机时间.ToString("0.00"), "小时");
// 本日缺料时间
RPrc_MaterialShortage.Maximum = lineWorkingData_Today.本日开机时间 > lineWorkingData_Today.本日开机缺料时间 ? Convert.ToInt32(lineWorkingData_Today.本日开机时间) : Convert.ToInt32(lineWorkingData_Today.本日开机缺料时间);
RPrc_MaterialShortage.Value = lineWorkingData_Today.本日开机缺料时间 < 24 ? Convert.ToInt32(lineWorkingData_Today.本日开机缺料时间) : 24;
Lbl_MaterialShortage.Text = string.Concat("本日缺料时间:", lineWorkingData_Today.本日开机缺料时间.ToString("0.00"), "小时");
// 本日维修时间
RPrc_Maintenance.Maximum = lineWorkingData_Today.本日开机时间 > lineWorkingData_Today.本日开机维修时间 ? Convert.ToInt32(lineWorkingData_Today.本日开机时间) : Convert.ToInt32(lineWorkingData_Today.本日开机维修时间);
RPrc_Maintenance.Value = lineWorkingData_Today.本日开机维修时间 < 24 ? Convert.ToInt32(lineWorkingData_Today.本日开机维修时间) : 24;
Lbl_Maintenance.Text = string.Concat("本日维修时间:", lineWorkingData_Today.本日开机维修时间.ToString("0.00"), "小时");
// 本日未知状态时间
float unknown = lineWorkingData_Today.本日开机时间 - lineWorkingData_Today.本日开机运行时间
- lineWorkingData_Today.本日开机故障时间 - lineWorkingData_Today.本日开机待机时间
- lineWorkingData_Today.本日开机缺料时间;
unknown = unknown < 24 ? unknown : 24;
unknown = unknown < 0 ? 0 : unknown;
RPrc_Unknown.Maximum = lineWorkingData_Today.本日开机时间 > unknown ? Convert.ToInt32(lineWorkingData_Today.本日开机时间) : Convert.ToInt32(unknown);
RPrc_Unknown.Value = Convert.ToInt32(unknown);
Lbl_Unknown.Text = string.Concat("本次未知状态时间:", unknown.ToString("0.00"), "小时");
}
catch (Exception ex)
{
string str = ex.StackTrace;
AddMessage(LogType.Error, "设备报警统计面板初始化出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
}
}
///
/// 更新设备报警信息-48H内的历史报警信息
///
public void UpdDeviceAlarm_History_48H()
{
try
{
if (this.InvokeRequired) // 当前线程不是控件UI线程时为true
{
this.Invoke(new Action(UpdDeviceAlarm_History_48H));
return;
}
DateTime dateTime = DateTime.Now.AddDays(-2);
//// dgv_Current
//string querySQL1 = @"select
//LineName 线体名称,
//AlarmType 报警类型,
//AlarmDesc 报警内容,
//StartTime 开始时间
//from AlarmData
//where StartTime > '{0}'
//and PersistTime = 0
//order by StartTime desc";
//querySQL1 = string.Format(querySQL1, dateTime);
//SQLHelper.ExecuteNonDataSet(querySQL1, out DataSet ds, ConnString);
//if (ds != null && ds.Tables.Count > 0)
//{
// dgv_Current.DataSource = ds.Tables[0].DefaultView;
//}
// dgv_History
string querySQL2 = @"select
LineName 线体名称,
AlarmType 报警类型,
AlarmDesc 报警内容,
StartTime 开始时间,
case when [PersistTime]=0 then '-' else cast([PersistTime] as varchar) end as 耗时
from AlarmData
where StartTime > '{0}'
order by StartTime desc";
querySQL2 = string.Format(querySQL2, dateTime);
DataSet dsHis = SQLHelper_New.Query(querySQL2, null);
if (dsHis != null && dsHis.Tables.Count > 0)
{
dgv_History.DataSource = dsHis.Tables[0].DefaultView;
}
}
catch (Exception ex)
{
string str = ex.StackTrace;
AddMessage(LogType.Error, "更新设备报警History信息出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
}
}
///
/// 更新设备报警信息-当前报警信息
///
public void UpdDeviceAlarm_Cur(List deviceAlarm_Curs)
{
try
{
if (this.InvokeRequired) // 当前线程不是控件UI线程时为true
{
this.Invoke(new Action>(UpdDeviceAlarm_Cur), deviceAlarm_Curs);
return;
}
if (deviceAlarm_Curs != null)
{
dgv_Current.DataSource = deviceAlarm_Curs;
}
}
catch (Exception ex)
{
string str = ex.StackTrace;
AddMessage(LogType.Error, "更新设备当前报警信息出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
}
}
#endregion 设备运行信息
private void AddMessage(LogType logType, string msg)
{
MessageEvent?.Invoke(logType, msg);
}
}
///
/// 当前设备报警
///
public class DeviceAlarm_Cur
{
//LineName 线体名称,
//AlarmType 报警类型,
//AlarmDesc 报警内容,
//StartTime 开始时间
public string 线体名称 { set; get; }
public string 报警类型 { set; get; }
public string 报警内容 { set; get; }
public DateTime 开始时间 { set; get; }
}
}