372 lines
14 KiB
C#
372 lines
14 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|