using System;
using System.Text;
using System.Data;
using System.Collections;
using SystemFramework;
namespace bizFacade
{
///
///
///
public class AlarmCommonFunction
{
///
///
///
///
///
///
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;
}
///
/// 新产生解除报警临时表
/// AlarmTempOK
///
/// 报警变量TagID
/// 报警变量值
/// 报警产生时间
///
/// 全部报警报文
/// 被解除的报警列表
///
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);
}
}
}
}
///
/// 新产生报警临时表
///
///
///
///
///
///
///
///
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);
}
}
}
}
///
/// 获得产生或解除报警的位
/// 根据报警值,通过与原始报警列表进行位操作比较,得到该报警值对应的报警文本列表
///
///
///
///
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++;
}
}
}
///
/// 创建报警列表
///
///
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;
}
///
///
///
public struct AlarmText
{
///
///
///
public long ID;
///
///
///
public long AlarmID;
///
///
///
public int TagID;
///
///
///
public int TagValue;
///
///
///
public int MsgNr;
///
///
///
public int State;
///
///
///
public DateTime alarmStartTime;
///
///
///
public DateTime alarmEndTime;
///
///
///
public string Comment;
///
///
///
public string Username;
///
///
///
public long Counter;
///
///
///
public int TimeDiff;
///
///
///
public string TypeName;
///
///
///
public string Text1;
///
///
///
public string Text2;
///
///
///
public DateTime lastupdatetime;
///
///
///
public int IsOk;
}
}
}