/// <summary> /// /// </summary> /// <returns></returns> public bool GetUnitArchiveValue(KPI_UnitEntity ue, bool bFirst, DateTime dtValid, bool bCollect, out string strError) { strError = ""; if (m_KPIVar.ltReals.Count <= 0) { strError = "没有标签点"; return false; } //不过滤了,全部一次取完!!!! //过滤当前机组的Tags var reltags = from kpi in m_KPIVar.ltReals where (kpi.UnitID == ue.UnitID) select kpi; if (reltags.Count() <= 0) { strError = "该机组的标签点为0"; return false; } String strCM = dtValid.ToString("yyyy-MM-dd HH:mm:00"); //当前只考虑了实时值。 #region 测试环境 if (KIsTest == 1) { string BulkTable = "KPI_ArchiveValue"; DataTable dt = m_DBClient.GetTableSchema("tagvalue"); foreach (KPI_RealTagEntity rte in m_KPIVar.ltReals) { Random rand = new Random(); double dvtemp = rand.Next(500, 1000); String strCode = "'" + rte.RealCode.ToUpper().Trim() + "'"; m_KPIVar.dicTags[strCode] = dvtemp; DataRow dr = dt.NewRow(); dr["RVID"] = Guid.NewGuid().ToString(); dr["UnitID"] = rte.UnitID; dr["RealID"] = rte.RealID; dr["RealCode"] = rte.RealCode; dr["RealDesc"] = rte.RealDesc; dr["RealEngunit"] = rte.RealEngunit; dr["RealTime"] = strCM; dr["RealValue"] = dvtemp; dr["RealQulity"] = "0"; dt.Rows.Add(dr); } if (dt.Rows.Count > 0) { //删除 m_DBClient.DeleteData(ue.UnitID, strCM,"", BulkTable); //插入 m_DBClient.BulkToDB(dt, BulkTable); } dt.Dispose(); } #endregion #region 生产环境 if (KIsTest == 0) { //从数据库获取数据 if (bCollect) { #region 采集数据 Dictionary<String, SIS.DBControl.TagValue> lttvs = new Dictionary<String, SIS.DBControl.TagValue>(); foreach (KPI_RealTagEntity rte in reltags) { //点名 String strCode = rte.RealCode.ToUpper().Trim(); lttvs[strCode] = new TagValue(strCode); } //每个机组只添加一次 //if (bFirst) { // if (!m_RTDataAccess.SetPointList(lttvs, out strError)) { // LogUtil.LogMessage("SetPointList Exception: " + strError); // return false; // } //} //获取历史数据 //if (!DBAccess.GetRealTime().GetSnapshotListData(ref lttvs, out strError)) if (!m_RTDataAccess.GetArchiveListData(ref lttvs, dtValid, out strError)) { LogUtil.LogMessage("GetArchiveListData Exception: " + strError); return false; } #endregion #region BulkTable //历史数据 //BulkWrite to SQL string BulkTable = "KPI_ArchiveValue"; DataTable dt = m_DBClient.GetTableSchema("tagvalue"); foreach (KPI_RealTagEntity rte in m_KPIVar.ltReals) { //点名 String strCode = rte.RealCode.ToUpper().Trim(); String strTagCode = "'" + rte.RealCode.ToUpper().Trim() + "'"; //更新Dictory m_KPIVar.dicTags[strTagCode] = 0.0; if (lttvs.ContainsKey(strCode) && lttvs[strCode].TagQulity == 0) { m_KPIVar.dicTags[strTagCode] = double.Parse(lttvs[strCode].TagStringValue); } DataRow dr = dt.NewRow(); dr["RVID"] = Guid.NewGuid().ToString(); dr["UnitID"] = rte.UnitID; dr["RealID"] = rte.RealID; dr["RealCode"] = rte.RealCode; dr["RealDesc"] = rte.RealDesc; dr["RealEngunit"] = rte.RealEngunit; dr["RealTime"] = strCM; dr["RealValue"] = m_KPIVar.dicTags[strTagCode];//.ToString(); dr["RealQulity"] = "0"; dt.Rows.Add(dr); } if (dt.Rows.Count > 0) { //删除 m_DBClient.DeleteData(ue.UnitID, strCM, "",BulkTable); //插入 m_DBClient.BulkToDB(dt, BulkTable); } dt.Dispose(); lttvs.Clear(); lttvs = null; #endregion } else { //从SQL数据库中查询获得只查询,不再写入了 List<ValueEntity> lrvs = ArchiveValueDal.GetValuesByTime(ue.UnitID, strCM); foreach (ValueEntity rte in lrvs) { //点名 String strCode = rte.RealCode.ToUpper().Trim(); String strTagCode = "'" + rte.RealCode.ToUpper().Trim() + "'"; //更新Dictory m_KPIVar.dicTags[strTagCode] = rte.RealValue; } } } #endregion return true; }
/// <summary> /// /// </summary> /// <returns></returns> public bool GetUnitRealValue(DateTime dtValid, out string strError) { strError = ""; if (m_KPIVar.ltReals.Count <= 0) { strError = "没有实时标签点"; return false; } String strCM = dtValid.ToString("yyyy-MM-dd HH:mm:00"); #region 测试环境 //当前只考虑了实时值(在调试环境下由机器自动生成随机数) if (KIsTest == 1) { //string BulkTable = "KPI_RealValue"; //DataTable dt = m_DBClient.GetTableSchema("tagvalue"); foreach (KPI_RealTagEntity rte in m_KPIVar.ltReals)//reltags { Random rand = new Random(); double dvtemp = rand.Next(500, 1000); String strCode = "'" + rte.RealCode.ToUpper().Trim() + "'"; m_KPIVar.dicTags[strCode] = dvtemp; DataRow dr = m_TagValueTable.NewRow(); dr["RVID"] = Guid.NewGuid().ToString(); dr["UnitID"] = rte.UnitID; dr["RealID"] = rte.RealID; dr["RealCode"] = rte.RealCode; dr["RealDesc"] = rte.RealDesc; dr["RealEngunit"] = rte.RealEngunit; dr["RealTime"] = strCM; dr["RealValue"] = dvtemp; dr["RealQulity"] = "0"; m_TagValueTable.Rows.Add(dr); } if (m_TagValueTable.Rows.Count > 0) { m_DBClient.DeleteData("", "","", TagValue_TableName); //插入 m_DBClient.BulkToDB(m_TagValueTable, TagValue_TableName); } m_TagValueTable.Rows.Clear(); } #endregion #region 生产环境 if (KIsTest == 0) { Dictionary<String, SIS.DBControl.TagValue> lttvs = new Dictionary<String, SIS.DBControl.TagValue>(); foreach (KPI_RealTagEntity rte in m_KPIVar.ltReals) { String strCode = rte.RealCode.ToUpper().Trim(); lttvs[strCode] = new TagValue(strCode); } if (m_KPIVar.bFirst) { if (!m_RTDataAccess.SetPointList(lttvs, out strError)) { LogUtil.LogMessage("SetPointList Exception: " + strError); return false; } } //获取实时数据 if (!m_RTDataAccess.GetSnapshotListData(ref lttvs, out strError)) { LogUtil.LogMessage("GetSnapshotListData Exception: " + strError); return false; } //实时数据 //string BulkTable = "KPI_RealValue"; //DataTable dt = m_DBClient.GetTableSchema("tagvalue"); //m_KPIVar.ltReals. foreach (KPI_RealTagEntity rte in m_KPIVar.ltReals) { //LogUtil.LogMessage("UnitID=" + rte.UnitID); if (m_KPIVar.dicUnitStatus.ContainsKey(rte.UnitID)&&(!m_KPIVar.dicUnitStatus[rte.UnitID])) continue; String strCode = rte.RealCode.ToUpper().Trim(); String strTagCode = "'" + rte.RealCode.ToUpper().Trim() + "'"; //LogUtil.LogMessage("TagCode=" + strTagCode); m_KPIVar.dicTags[strTagCode] = 0.0; if (lttvs.ContainsKey(strCode) && lttvs[strCode].TagQulity == 0) { m_KPIVar.dicTags[strTagCode] = double.Parse(lttvs[strCode].TagStringValue); } DataRow dr = m_TagValueTable.NewRow(); dr["RVID"] = Guid.NewGuid().ToString(); dr["UnitID"] = rte.UnitID; dr["RealID"] = rte.RealID; dr["RealCode"] = rte.RealCode; dr["RealDesc"] = rte.RealDesc; dr["RealEngunit"] = rte.RealEngunit; dr["RealTime"] = strCM; dr["RealValue"] = m_KPIVar.dicTags[strTagCode];//.ToString(); dr["RealQulity"] = "0"; m_TagValueTable.Rows.Add(dr); } if (m_TagValueTable.Rows.Count > 0) { m_DBClient.DeleteData("", "", "", TagValue_TableName); m_DBClient.BulkToDB(m_TagValueTable, TagValue_TableName); } m_TagValueTable.Rows.Clear(); lttvs.Clear(); lttvs = null; } #endregion return true; }
/// <summary> /// 通过条件查询得到符合手动录入的标签点。 /// 注:只能用点名称 测点属性之间逗号分隔 点名,描述,单位 /// </summary> /// <returns></returns> public List<TagValue> GetPointListForSDLR(string condition) { try { if (String.IsNullOrEmpty(condition) || !condition.Contains(',')) { return null; } String[] temp = condition.Split(','); if (null == temp || 0 >= temp.Length) { return null; } TagVector tagVector = GetPointListByTagName(temp[0]); if (null == tagVector) { return null; } else { RealDataSet realDataSet = new RealDataSet(); BatchResults results = DataIO.Snapshot(dbConnector, tagVector, realDataSet); if (results.HasErrors) { foreach (DbError dberror in results.Errors) { _ErrorInfo += dberror.ErrorMessage; } return null; } List<TagValue> tagValList = new List<TagValue>(); foreach (var item in realDataSet) { TagValue tagValue = new TagValue(); tagValue.TagID = item.TagId; tagValue.TagName = tagVector.First(x => x.TagId == item.TagId).TagName; Double val = Double.MinValue; tagValue.TagSnapshot = (null != item.Value && Double.TryParse(item.Value.ToString(), out val)) ? val : Double.MinValue; tagValue.TagTime = item.TimeStamp.ToString("yyyy-MM-dd HH:mm:ss"); tagValue.TagQulity = (Int32)item.QualityStamp; tagValue.TagStringValue = null != item.Value ? item.Value.ToString() : Double.MinValue.ToString(); tagValue.NewTime = String.Empty; tagValue.NewValue = double.MinValue; tagValue.TagDesc = tagVector.First(x => x.TagId == item.TagId).Properties["Desc"].ToString(); tagValue.TagEngunit = tagVector.First(x => x.TagId == item.TagId).Properties["ENGINEERINGUNIT"].ToString(); tagValList.Add(tagValue); } return null; } } catch (Exception ex) { _ErrorInfo = ex.Message; return null; } }
/// <summary> /// 得到List表所有标签点的历史数据 /// </summary> /// <param name="tagname"></param> /// <returns></returns> public Boolean GetArchiveListData(ref Dictionary<string, TagValue> lttvs, DateTime stime, out string strError) { try { strError = String.Empty; if (null == lttvs || 0 >= lttvs.Count) { strError = "字典参数为空。"; return false; } TagVector tagVector = new TagVector(); foreach (String str in lttvs.Keys) { tagVector.AddRange(GetPointListByTagName(str)); } HisDataSet realDataSet = new HisDataSet(); DateTime[] HisTime = {stime}; BatchResults results = DataIO.ReadAtTime(dbConnector, tagVector, HisTime, realDataSet); if (results.HasErrors) { foreach (DbError dberror in results.Errors) { strError += dberror.ErrorMessage; } return false; } foreach (var item in realDataSet) { /*TagValue tagValue = new TagValue(); tagValue.TagID = item.TagId; tagValue.TagName = tagVector.First(x => x.TagId == item.TagId).TagName; if (null != item.Data && 0 < item.Data.Count) { Double val = Double.MinValue; tagValue.TagSnapshot = (null != item.Data[0].Value && Double.TryParse(item.Data[0].Value.ToString(), out val)) ? val : Double.MinValue; tagValue.TagTime = item.Data[0].TimeStamp.ToString("yyyy-MM-dd HH:mm:ss"); tagValue.TagQulity = (Int32)item.Data[0].QualityStamp; tagValue.TagStringValue = null != item.Data[0].Value ? item.Data[0].Value.ToString() : Double.MinValue.ToString(); } else { tagValue.TagSnapshot = Double.MinValue; tagValue.TagTime = DateTime.MinValue.ToString("yyyy-MM-dd HH:mm:ss"); tagValue.TagQulity = 0; //bad tagValue.TagStringValue = Double.MinValue.ToString(); } tagValue.NewTime = String.Empty; tagValue.NewValue = double.MinValue; tagValue.TagDesc = tagVector.First(x => x.TagId == item.TagId).Properties["Desc"].ToString(); tagValue.TagEngunit = tagVector.First(x => x.TagId == item.TagId).Properties["ENGINEERINGUNIT"].ToString(); */ TagValue tagValue = new TagValue(); tagValue.TagID = item.TagId; tagValue.TagName = tagVector.First(x => x.TagId == item.TagId).TagLongName.ToUpper(); Double val = 0.0; tagValue.TagSnapshot = (null != item.Data[0].Value && Double.TryParse(item.Data[0].Value.ToString(), out val)) ? val : 0; tagValue.TagTime = item.Data[0].TimeStamp.ToString("yyyy-MM-dd HH:mm:ss"); tagValue.TagQulity = 0; tagValue.TagStringValue = "0"; //if ((item.Value != null) && (item.Value.ToString() != "null")) tagValue.TagStringValue = item.Value + ""; tagValue.TagStringValue = null != item.Data[0].Value ? item.Data[0].Value.ToString() : "0"; tagValue.NewTime = String.Empty; tagValue.NewValue = double.MinValue; if (lttvs.ContainsKey(tagValue.TagName)) { lttvs[tagValue.TagName] = tagValue; } } return true; } catch (Exception ex) { strError = ex.Message; return false; } }
/// <summary> /// 从实时数据库抽取数据进行处理,处理结束后存入关系型数据库 /// </summary> /// <param name="ltTags">各机组值点</param> /// <param name="dtTime"></param> /// <param name="nLength"></param> /// <param name="nSecond"></param> /// <returns></returns> private static bool ReadAndWrite(List<WS_ExcelTag> ltTags, DateTime dtTime, int nLength, int nSecond) { //如果nSecond==0时,没有变化 DateTime dtValid = dtTime.AddSeconds(nSecond); ////////////////////////////////////////////////////////////////////////// //整理点表 DataTable dt = WS_ExcelDBClient.GetTableSchema(); //获得机组列表 var unitresult = (from kpi in ltTags orderby kpi.UnitCode select kpi.UnitCode).Distinct().ToList(); foreach (string unitcode in unitresult) { var kpiresult = from kpi in ltTags where (kpi.UnitCode == unitcode && kpi.TagIsValid == "1") select kpi; if (kpiresult.Count() <= 0) { continue; } string strCondition = kpiresult.ElementAt(0).TagRunExp; Double dRunning = DBAccess.GetRealTime().TimedCalculate(strCondition, dtValid); //机组停运 if (dRunning < 0.5) { string strTime = dtValid.ToString("yyyy-MM-dd HH:mm:ss"); LogUtil.LogMessage("机组:" + unitcode + ",在" + strTime + "负荷太低或停运,本次不采集本机组数据!"); continue; } else { LogUtil.LogMessage("开始采集机组数据:" + unitcode); } //机组相关标签点 Dictionary<string, TagValue> dicTags = new Dictionary<string, TagValue>(); foreach (WS_ExcelTag tagcode in kpiresult) { String strCode = tagcode.TagShiftExp.Trim(); if (strCode != "") { dicTags[strCode] = new TagValue(strCode); } strCode = tagcode.TagPeriodExp.Trim(); if (strCode != "") { dicTags[strCode] = new TagValue(strCode); } strCode = tagcode.TagMWExp.Trim(); if (strCode != "") { dicTags[strCode] = new TagValue(strCode); } strCode = tagcode.TagSnapExp.Trim(); if (strCode != "") { dicTags[strCode] = new TagValue(strCode); } strCode = tagcode.TagTargetExp.Trim(); if (strCode != "") { dicTags[strCode] = new TagValue(strCode); } strCode = tagcode.TagScoreExp.Trim(); if (strCode != "") { dicTags[strCode] = new TagValue(strCode); } } string strError = ""; if (!DBAccess.GetRealTime().GetArchiveListData(ref dicTags, dtValid, out strError)) { LogUtil.LogMessage(strError); } foreach (WS_ExcelTag tagcode in kpiresult) { DataRow dr = dt.NewRow(); dr["TagID"] = Guid.NewGuid().ToString(); dr["UnitCode"] = tagcode.UnitCode; dr["TagCode"] = tagcode.TagCode; dr["TagType"] = tagcode.TagType; dr["TagEngunit"] = tagcode.TagEngunit; dr["TagTime"] = dtTime.ToString("yyyy-MM-dd HH:mm:ss"); if (dicTags.ContainsKey(tagcode.TagShiftExp) && dicTags[tagcode.TagShiftExp].TagQulity == 0 && dicTags[tagcode.TagShiftExp].TagStringValue != null) { dr["TagShift"] = dicTags[tagcode.TagShiftExp].TagStringValue; } else { dr["TagShift"] = System.DBNull.Value; } if (dicTags.ContainsKey(tagcode.TagPeriodExp) && dicTags[tagcode.TagPeriodExp].TagQulity == 0 && dicTags[tagcode.TagPeriodExp].TagStringValue != null) { dr["TagPeriod"] = dicTags[tagcode.TagPeriodExp].TagStringValue; } else { dr["TagPeriod"] = System.DBNull.Value; } if (dicTags.ContainsKey(tagcode.TagMWExp) && dicTags[tagcode.TagMWExp].TagQulity == 0 && dicTags[tagcode.TagMWExp].TagStringValue !=null) { dr["TagMW"] = dicTags[tagcode.TagMWExp].TagStringValue; } else { dr["TagMW"] = System.DBNull.Value; } if (dicTags.ContainsKey(tagcode.TagSnapExp) && dicTags[tagcode.TagSnapExp].TagQulity == 0 && dicTags[tagcode.TagSnapExp].TagStringValue != null) { dr["TagSnap"] = dicTags[tagcode.TagSnapExp].TagStringValue; } else { dr["TagSnap"] = System.DBNull.Value; } if (dicTags.ContainsKey(tagcode.TagTargetExp) && dicTags[tagcode.TagTargetExp].TagQulity == 0 && dicTags[tagcode.TagTargetExp].TagStringValue != null) { dr["TagTarget"] = dicTags[tagcode.TagTargetExp].TagStringValue; } else { dr["TagTarget"] = System.DBNull.Value; } if (dicTags.ContainsKey(tagcode.TagScoreExp) && dicTags[tagcode.TagScoreExp].TagQulity == 0 && dicTags[tagcode.TagScoreExp].TagStringValue !=null) { dr["TagScore"] = dicTags[tagcode.TagScoreExp].TagStringValue; } else { dr["TagScore"] = System.DBNull.Value; } dr["TagLength"] = nLength.ToString(); dr["TagRemoved"] = "0"; dt.Rows.Add(dr); } } if (dt.Rows.Count > 0) { WS_ExcelDBClient.BulkToDB(dt); } dt.Dispose(); return true; }