/// <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;
        }
Beispiel #3
0
        /// <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;
            }
        }
Beispiel #4
0
        /// <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;
        }