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; } } }