Files
01-Siyuan-MesProject/MisData_3.0_2022.08.23.1622.LLX/MES.BizFacade/MIS/AlarmCommonFunction.cs
2026-05-29 10:07:05 +08:00

372 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Text;
using System.Data;
using System.Collections;
using SystemFramework;
namespace bizFacade
{
/// <summary>
///
/// </summary>
public class AlarmCommonFunction
{
/// <summary>
///
/// </summary>
/// <param name="AlarmTemp"></param>
/// <param name="AlarmTempOK"></param>
/// <returns></returns>
static public DataTable GetAlarmView(DataTable AlarmTemp, DataTable AlarmTempOK)
{
DateTime lastupdatetime;
DataRow dataRow;
DataTable algView = AlarmCommonFunction.BuildDataTablesAlarmView();
lastupdatetime = DateTime.Now;
for (int i = 0; i < AlarmTemp.Rows.Count; i++)
{
dataRow = algView.NewRow();
dataRow["AlarmID"] = AlarmTemp.Rows[i]["AlarmID"];
dataRow["TagID"] = AlarmTemp.Rows[i]["TagID"];
dataRow["TagValue"] = AlarmTemp.Rows[i]["TagValue"];
dataRow["MsgNr"] = AlarmTemp.Rows[i]["MsgNr"];
dataRow["State"] = AlarmTemp.Rows[i]["State"];
dataRow["DateTime"] = AlarmTemp.Rows[i]["alarmStartTime"];
dataRow["alarmStartTime"] = AlarmTemp.Rows[i]["alarmStartTime"];
dataRow["alarmEndTime"] = System.DBNull.Value;
dataRow["TypeName"] = AlarmTemp.Rows[i]["TypeName"];
dataRow["Text1"] = AlarmTemp.Rows[i]["Text1"];
dataRow["Text2"] = AlarmTemp.Rows[i]["Text2"];
dataRow["lastupdatetime"] = lastupdatetime;
algView.Rows.Add(dataRow);
}
for (int i = 0; i < AlarmTempOK.Rows.Count; i++)
{
dataRow = algView.NewRow();
dataRow["AlarmID"] = AlarmTempOK.Rows[i]["AlarmID"];
dataRow["TagID"] = AlarmTempOK.Rows[i]["TagID"];
dataRow["TagValue"] = AlarmTempOK.Rows[i]["TagValue"];
dataRow["MsgNr"] = AlarmTempOK.Rows[i]["MsgNr"];
dataRow["State"] = AlarmTempOK.Rows[i]["State"];
dataRow["DateTime"] = AlarmTempOK.Rows[i]["alarmEndTime"];
dataRow["alarmStartTime"] = AlarmTempOK.Rows[i]["alarmStartTime"];
dataRow["alarmEndTime"] = AlarmTempOK.Rows[i]["alarmEndTime"];
dataRow["TypeName"] = AlarmTempOK.Rows[i]["TypeName"];
dataRow["Text1"] = AlarmTempOK.Rows[i]["Text1"];
dataRow["Text2"] = AlarmTempOK.Rows[i]["Text2"];
dataRow["TimeDiff"] = AlarmTempOK.Rows[i]["TimeDiff"];
dataRow["lastupdatetime"] = lastupdatetime;
algView.Rows.Add(dataRow);
}
return algView;
}
/// <summary>
/// 新产生解除报警临时表
/// AlarmTempOK
/// </summary>
/// <param name="MSGVAR_Value">报警变量TagID</param>
/// <param name="inValue">报警变量值</param>
/// <param name="dateTimeValue">报警产生时间</param>
/// <param name="table_MSGBIT2"></param>
/// <param name="PLC_MSMsgs_WORK">全部报警报文</param>
/// <param name="AlarmTempOK">被解除的报警列表</param>
/// <param name="table_AlarmStart"></param>
static public void ReleaseAlarmTemp(int MSGVAR_Value, object inValue, DateTime dateTimeValue,
Hashtable table_MSGBIT2, DataTable PLC_MSMsgs_WORK,
ref DataTable AlarmTempOK, ref Hashtable table_AlarmStart)
{
AlarmText alarmText = new AlarmText();
AlarmText alarmTextStart = new AlarmText();
DataRow dataRow;
DataTable data = AlarmCommonFunction.BuildDataTablesAlarmView();
string strWhere;
DataRow[] alarmDataRow;
int NR;
alarmText.AlarmID = 0;
alarmText.TagID = MSGVAR_Value;
alarmText.TagValue = Convert.ToInt32(inValue);
alarmText.alarmStartTime = dateTimeValue;
AlarmTempOK.Clear();
//解除报警
for (int i = 0; i < table_MSGBIT2.Count; i++)
{
strWhere = @" (MSGVAR = " + MSGVAR_Value.ToString() + ") AND (MSGBIT=" + table_MSGBIT2[i].ToString() + ")";
alarmDataRow = PLC_MSMsgs_WORK.Select(strWhere);
if (alarmDataRow.Length > 0)
{
NR = Convert.ToInt32(alarmDataRow[0]["NR"]);
//报警存在于table_AlarmStart中
if (table_AlarmStart.ContainsKey(NR))
{
alarmTextStart = (AlarmText)table_AlarmStart[NR];
alarmText.AlarmID = alarmTextStart.AlarmID;
alarmText.TypeName = alarmDataRow[0]["TypeName"].ToString();
alarmText.Text1 = alarmDataRow[0]["Text1"].ToString();
alarmText.Text2 = alarmDataRow[0]["Text2"].ToString();
alarmText.MsgNr = Convert.ToInt32(alarmDataRow[0]["NR"]);
alarmText.State = 2;
alarmText.alarmStartTime = alarmTextStart.alarmStartTime;
alarmText.alarmEndTime = DateTime.Now;
System.TimeSpan diff1 = alarmText.alarmEndTime.Subtract(alarmText.alarmStartTime);
alarmText.TimeDiff = Convert.ToInt32(diff1.TotalSeconds);
//[测量数据报警全部]
//QualityDataSystem.AlarmStartAllInsert(alarmText.AlarmID,
// alarmText.TagID, alarmText.TagValue, alarmText.MsgNr,alarmText.State,
// alarmText.alarmStartTime.ToString("G"), alarmText.alarmEndTime.ToString("G"),
// alarmText.TimeDiff, alarmText.TypeName, alarmText.Text1, alarmText.Text2);
table_AlarmStart.Remove(NR);
dataRow = AlarmTempOK.NewRow();
dataRow["AlarmID"] = alarmText.AlarmID;
dataRow["TagID"] = alarmText.TagID;
dataRow["TagValue"] = alarmText.TagValue;
dataRow["MsgNr"] = alarmText.MsgNr;
dataRow["State"] = alarmText.State;
dataRow["alarmStartTime"] = alarmText.alarmStartTime;
dataRow["alarmEndTime"] = alarmText.alarmEndTime;
dataRow["TimeDiff"] = alarmText.TimeDiff;
dataRow["TypeName"] = alarmText.TypeName;
dataRow["Text1"] = alarmText.Text1;
dataRow["Text2"] = alarmText.Text2;
AlarmTempOK.Rows.Add(dataRow);
}
}
}
}
/// <summary>
/// 新产生报警临时表
/// </summary>
/// <param name="MSGVAR_Value"></param>
/// <param name="inValue"></param>
/// <param name="dateTimeValue"></param>
/// <param name="table_MSGBIT1"></param>
/// <param name="PLC_MSMsgs_WORK"></param>
/// <param name="AlarmTemp"></param>
/// <param name="table_AlarmStart"></param>
static public void CraeteAlarmTemp(int MSGVAR_Value, object inValue, DateTime dateTimeValue,
Hashtable table_MSGBIT1, DataTable PLC_MSMsgs_WORK,
ref DataTable AlarmTemp, ref Hashtable table_AlarmStart)
{
AlarmText alarmText;
DataRow dataRow;
string strWhere;
DataRow[] alarmDataRow;
int NR;
alarmText = new AlarmText();
alarmText.AlarmID = 0;
alarmText.TagID = MSGVAR_Value;
alarmText.TagValue = Convert.ToInt32(inValue);
alarmText.alarmStartTime = dateTimeValue;
AlarmTemp.Clear();
for (int i = 0; i < table_MSGBIT1.Count; i++)
{
strWhere = @" (MSGVAR = " + MSGVAR_Value.ToString() + ") AND (MSGBIT=" + table_MSGBIT1[i].ToString() + ")";
alarmDataRow = PLC_MSMsgs_WORK.Select(strWhere);
if (alarmDataRow.Length > 0)
{
NR = Convert.ToInt32(alarmDataRow[0]["NR"]);
//报警不存在于table_AlarmStart中
if (!table_AlarmStart.ContainsKey(NR))
{
alarmText.TypeName = alarmDataRow[0]["TypeName"].ToString();
alarmText.Text1 = alarmDataRow[0]["Text1"].ToString();
alarmText.Text2 = alarmDataRow[0]["Text2"].ToString();
alarmText.MsgNr = Convert.ToInt32(alarmDataRow[0]["NR"]);
alarmText.State = 1;
//[测量数据报警全部]
//QualityDataSystem.AlarmStartAllInsert(alarmText.AlarmID,
// alarmText.TagID, alarmText.TagValue, alarmText.MsgNr,alarmText.State,
// alarmText.alarmStartTime.ToString("G"), alarmText.alarmStartTime.ToString("G"),
// 0, alarmText.TypeName, alarmText.Text1, alarmText.Text2);
dataRow = AlarmTemp.NewRow();
dataRow["AlarmID"] = alarmText.AlarmID;
dataRow["TagID"] = alarmText.TagID;
dataRow["TagValue"] = alarmText.TagValue;
dataRow["MsgNr"] = alarmText.MsgNr;
dataRow["State"] = alarmText.State;
dataRow["alarmStartTime"] = alarmText.alarmStartTime;
dataRow["TypeName"] = alarmText.TypeName;
dataRow["Text1"] = alarmText.Text1;
dataRow["Text2"] = alarmText.Text2;
AlarmTemp.Rows.Add(dataRow);
table_AlarmStart.Add(NR, alarmText);
}
}
}
}
/// <summary>
/// 获得产生或解除报警的位
/// 根据报警值,通过与原始报警列表进行位操作比较,得到该报警值对应的报警文本列表
/// </summary>
/// <param name="alarmValue"></param>
/// <param name="table_MSGBIT1"></param>
/// <param name="table_MSGBIT2"></param>
static public void GetBit(int alarmValue, out Hashtable table_MSGBIT1, out Hashtable table_MSGBIT2)
{
int count1;
int count2;
table_MSGBIT1 = new Hashtable();
table_MSGBIT2 = new Hashtable();
count1 = 0;
count2 = 0;
for (int i = 0; i < 8; i++)
{
if ((alarmValue & (int)Math.Pow(2, i)) == Math.Pow(2, i))
{
table_MSGBIT1.Add(count1, i);
count1++;
}
else
{
table_MSGBIT2.Add(count2, i);
count2++;
}
}
}
/// <summary>
/// 创建报警列表
/// </summary>
/// <returns></returns>
static public DataTable BuildDataTablesAlarmView()
{
//数据
DataTable table;
DataColumnCollection columns;
table = new DataTable();
columns = table.Columns;
columns.Add("AlarmID", typeof(System.Int32));
columns.Add("TagID", typeof(System.Int32));
columns.Add("TagValue", typeof(System.String));
columns.Add("MsgNr", typeof(System.Int32));
columns.Add("State", typeof(System.Int16));
columns.Add("alarmStartTime", typeof(System.DateTime));
columns.Add("alarmEndTime", typeof(System.DateTime));
columns.Add("Comment", typeof(System.String));
columns.Add("Username", typeof(System.String));
columns.Add("Counter", typeof(System.Int32));
columns.Add("TimeDiff", typeof(System.Int32));
columns.Add("TypeName", typeof(System.String));
columns.Add("Text1", typeof(System.String));
columns.Add("Text2", typeof(System.String));
columns.Add("lastupdatetime", typeof(System.DateTime));
columns.Add("DateTime", typeof(System.DateTime));
return table;
}
/// <summary>
///
/// </summary>
public struct AlarmText
{
/// <summary>
///
/// </summary>
public long ID;
/// <summary>
///
/// </summary>
public long AlarmID;
/// <summary>
///
/// </summary>
public int TagID;
/// <summary>
///
/// </summary>
public int TagValue;
/// <summary>
///
/// </summary>
public int MsgNr;
/// <summary>
///
/// </summary>
public int State;
/// <summary>
///
/// </summary>
public DateTime alarmStartTime;
/// <summary>
///
/// </summary>
public DateTime alarmEndTime;
/// <summary>
///
/// </summary>
public string Comment;
/// <summary>
///
/// </summary>
public string Username;
/// <summary>
///
/// </summary>
public long Counter;
/// <summary>
///
/// </summary>
public int TimeDiff;
/// <summary>
///
/// </summary>
public string TypeName;
/// <summary>
///
/// </summary>
public string Text1;
/// <summary>
///
/// </summary>
public string Text2;
/// <summary>
///
/// </summary>
public DateTime lastupdatetime;
/// <summary>
///
/// </summary>
public int IsOk;
}
}
}