Example #1
0
        /// <summary>
        /// 根据条件得到测点集合  测点属性之间逗号分隔 id,点名,描述,单位,数值
        /// </summary>
        /// <param name="flag">是否实时值</param>
        /// <returns></returns>
        public List<string> GetPointList(string filterexp, bool flag, DateTime time)
        {
            try {
                if (String.IsNullOrEmpty(filterexp) || !filterexp.Contains(",")) {
                    return null;
                }

                String[] temp = filterexp.Split(',');
                if (null == temp || 0 >= temp.Length) {
                    return null;
                }
                TagQueryFilter filter = new TagQueryFilter();
                PropField propField = (from p in TagTypeSystem.BasePropFields
                                       where p.PropName == "Name"
                                       select p).First<PropField>();

                filter.Conditions.InsertAndCompileExpression(new TagQueryExpression(propField,
                    TagQueryExpression.CompareOperator.Equal, temp[0]));
                filter.StartNode = rootNode;
                filter.Fields = null;
                TagVector tagVector = GetPointListByTagName(temp[0]);
                if (null == tagVector) {
                    return null;
                }
                else {
                    List<String> result = new List<String>();
                    if (flag) {
                        RealDataSet realDataSet = new RealDataSet();
                        BatchResults results = DataIO.Snapshot(dbConnector, tagVector, realDataSet);
                        foreach (var item in realDataSet) {
                            String tagName = tagVector.First(x => x.TagId == item.TagId).TagName;
                            String tagStringValue = null != item.Value ? item.Value.ToString() : "0";
                            String tagDesc = tagVector.First(x => x.TagId == item.TagId).Properties["Desc"].ToString();
                            String tagEngunit = tagVector.First(x => x.TagId == item.TagId).Properties["ENGINEERINGUNIT"].ToString();

                            result.Add(String.Format("{0},{1},{2},{3},{4}", item.TagId, tagName, tagDesc, tagEngunit, tagStringValue));
                        }
                    }
                    else {
                        HisDataSet realDataSet = new HisDataSet();
                        BatchResults results = DataIO.ReadRaw(dbConnector, tagVector, time.AddSeconds(-1), time, realDataSet);
                        foreach (var item in realDataSet) {
                            String tagName = tagVector.First(x => x.TagId == item.TagId).TagName;
                            String tagStringValue = "0";
                            if (null != item.Data && 0 < item.Data.Count) {
                                tagStringValue = null != item.Data[0].Value ? item.Data[0].Value.ToString() : "0";
                            }
                            String tagDesc = tagVector.First(x => x.TagId == item.TagId).Properties["Desc"].ToString();
                            String tagEngunit = tagVector.First(x => x.TagId == item.TagId).Properties["ENGINEERINGUNIT"].ToString();

                            result.Add(String.Format("{0},{1},{2},{3},{4}", item.TagId, tagName, tagDesc, tagEngunit, tagStringValue));
                        }
                    }
                    return result;
                }
            }
            catch (Exception ex) {
                _ErrorInfo = ex.Message;
                return null;
            }
        }
Example #2
0
 /// <summary>
 /// 得到时间周期内的测点数据集(分钟取数)
 /// </summary>
 /// <param name="tagname">测点</param>
 /// <param name="isdigital">是否为模拟量</param>
 /// <param name="stime">开始日期</param>
 /// <param name="etime">结束日期</param>
 /// <param name="interval">取数时间间隔</param>
 /// <returns>结果集</returns>
 public List<double> GetHistoryDataListByMinuteSpan(string tagname, bool isdigital, DateTime stime, DateTime etime, int interval)
 {
     try {
         if (String.IsNullOrEmpty(tagname)) {
             _ErrorInfo = "点名称为空。";
             return null;
         }
         TagVector tagVector = GetPointListByTagName(tagname);
         if (null == tagVector || 0 >= tagVector.Count) {
             return null;
         }
         List<double> Results = new List<double>();
         HisDataSet realDataSet = new HisDataSet();
         BatchResults results = DataIO.ReadRaw(dbConnector, tagVector, stime, etime, realDataSet);
         if (results.HasErrors) {
             foreach (DbError dberror in results.Errors) {
                 _ErrorInfo += dberror.ErrorMessage;
             }
             return null;
         }
         foreach (var item in realDataSet) {
             if (null != item.Data && 0 < item.Data.Count) {
                 for (int i = 0; i < item.Data.Count; i++) {
                     Results.Add(Convert.ToDouble(item.Data[i].Value));
                 }
                 return Results;
             }
             else {
                 return Results;
             }
         }
         return null;
     }
     catch (Exception ex) {
         _ErrorInfo = ex.Message;
         return null;
     }
 }
Example #3
0
 //End of Added.
 /// <summary>
 /// 得到时间周期内的测点数据集(秒级取数)
 /// </summary>
 /// <param name="tagname">测点</param>
 /// <param name="isdigital">是否为模拟量</param>
 /// <param name="stime">开始日期</param>
 /// <param name="etime">结束日期</param>
 /// <param name="interval">取数时间间隔</param>
 /// <returns>结果集</returns>
 public List<double> GetHistoryDataListBySecondSpan(string tagname, bool isdigital, DateTime stime, DateTime etime, int interval)
 {
     try {
         if (String.IsNullOrEmpty(tagname)) {
             _ErrorInfo = "点名称为空。";
             return null;
         }
         TagVector tagVector = GetPointListByTagName(tagname);
         if (null == tagVector || 0 >= tagVector.Count) {
             return null;
         }
         HisDataSet realDataSet = new HisDataSet();
         BatchResults results = DataIO.ReadRaw(dbConnector, tagVector, stime, etime, realDataSet);
         if (results.HasErrors) {
             foreach (DbError dberror in results.Errors) {
                 _ErrorInfo += dberror.ErrorMessage;
             }
             return null;
         }
         foreach (var item in realDataSet) {
             if (null != item.Data && 0 < item.Data.Count) {
                 var q = from p in item.Data
                         where p.QualityStamp != QUALITY_MASK.NOBOUND
                         select Convert.ToDouble(p.Value);
                 return q.ToList();
                 //return item.Data.ToArray();
             }
             else {
                 return null;
             }
         }
         return null;
     }
     catch (Exception ex) {
         _ErrorInfo = ex.Message;
         return null;
     }
 }
Example #4
0
        //Added by pyf 2013-09-16
        public List<TagValue> GetHistoryDataList(string tagname, DateTime stime, DateTime etime)
        {
            List<TagValue> Result = new List<TagValue>();
            if (String.IsNullOrEmpty(tagname)) {
                _ErrorInfo = "点名称为空。";
                return Result;
            }

            TagVector tagVector = GetPointListByTagName(tagname);
            if (null == tagVector || 0 >= tagVector.Count) {
                return Result;
            }
            HisDataSet realDataSet = new HisDataSet();
            BatchResults results = DataIO.ReadRaw(dbConnector, tagVector, stime, etime, realDataSet);
            if (results.HasErrors) {
                foreach (DbError dberror in results.Errors) {
                    _ErrorInfo += dberror.ErrorMessage;
                }
                throw new Exception(ErrorInfo);
            }
            foreach (var item in realDataSet) {
                if (null != item.Data && 0 < item.Data.Count) {
                    var q = from p in item.Data
                            where p.QualityStamp != QUALITY_MASK.NOBOUND
                            select new TagValue {
                                TagName = tagname,
                                TagStringValue = p.Value + "",
                                TagQulity = 0,
                                TagDoubleValue = Convert.ToDouble(p.Value),
                                TimeStamp = p.TimeStamp
                            };
                    Result = q.ToList<TagValue>();
                }
            }
            return Result;
        }
Example #5
0
 /// <summary>
 /// 得到时间周期内的测点数据集(按个数取数)
 /// </summary>
 /// <param name="tagname">测点</param>
 /// <param name="isdigital">是否为模拟量</param>
 /// <param name="stime">开始日期</param>
 /// <param name="etime">结束日期</param>
 /// <param name="interval">取数个数</param>
 /// <returns>结果集</returns>
 public Object[] GetHistoryDataListByCount(string tagname, bool isdigital, DateTime stime, DateTime etime, int interval)
 {
     try {
         if (String.IsNullOrEmpty(tagname)) {
             _ErrorInfo = "点名称为空。";
             return null;
         }
         TagVector tagVector = GetPointListByTagName(tagname);
         if (null == tagVector || 0 >= tagVector.Count) {
             return null;
         }
         HisDataSet realDataSet = new HisDataSet();
         BatchResults results = DataIO.ReadRaw(dbConnector, tagVector, stime, etime, realDataSet);
         if (results.HasErrors) {
             foreach (DbError dberror in results.Errors) {
                 _ErrorInfo += dberror.ErrorMessage;
             }
             return null;
         }
         foreach (var item in realDataSet) {
             if (null != item.Data && 0 < item.Data.Count) {
                 return item.Data.ToArray();
             }
             else {
                 return null;
             }
         }
         return null;
     }
     catch (Exception ex) {
         _ErrorInfo = ex.Message;
         return null;
     }
 }
Example #6
0
 /// <summary>
 /// 得到数字量的归档值及时间
 /// </summary>
 /// <param name="tagname"></param>
 /// <param name="dt"></param>
 /// <returns></returns>
 public string GetDigitalArchiveValueName(string tagname, DateTime dt)
 {
     try {
         if (String.IsNullOrEmpty(tagname)) {
             _ErrorInfo = "点名称为空。";
             return String.Empty;
         }
         TagVector tagVector = GetPointListByTagName(tagname);
         if (null == tagVector || 0 >= tagVector.Count) {
             return String.Empty;
         }
         HisDataSet realDataSet = new HisDataSet();
         BatchResults results = DataIO.ReadRaw(dbConnector, tagVector, dt.AddSeconds(-1), dt, realDataSet);
         if (results.HasErrors) {
             foreach (DbError dberror in results.Errors) {
                 _ErrorInfo += dberror.ErrorMessage;
             }
             return String.Empty;
         }
         foreach (var item in realDataSet) {
             if (null != item.Data && 0 < item.Data.Count) {
                 return ConvertToInt32(item.Data[0].Value).ToString();
             }
             else {
                 return String.Empty;
             }
         }
         return String.Empty;
     }
     catch (Exception ex) {
         _ErrorInfo = ex.Message;
         return String.Empty;
     }
 }
Example #7
0
 /// <summary>
 /// 统计测点运行时间
 /// </summary>
 /// <param name="tagname">测点</param>
 /// <param name="stime">开始时间</param>
 /// <param name="etime">结束时间</param>
 /// <returns></returns>
 public double GetExpressionTrueSecondTime(string tagname, DateTime stime, DateTime etime)
 {
     try {
         if (String.IsNullOrEmpty(tagname)) {
             return Double.MinValue;
         }
         TagVector tagVector = GetPointListByTagName(tagname);
         if (null == tagVector || 0 >= tagVector.Count) {
             return Double.MinValue;
         }
         HisDataSet hisDataSet = new HisDataSet();
         BatchResults results = DataIO.ReadProcessed(dbConnector, tagVector, stime, etime, etime - stime, AggregateEnum.TOTALIZEAVERAGE, hisDataSet);
         if (results.HasErrors) {
             foreach (DbError dberror in results.Errors) {
                 _ErrorInfo += dberror.ErrorMessage;
             }
             return Double.MinValue;
         }
         if (null != hisDataSet && 0 < hisDataSet.Count) {
             return ConvertToDouble(hisDataSet[0].Data[0].Value);
         }
         return Double.MinValue;
     }
     catch (Exception ex) {
         _ErrorInfo = ex.Message;
         return Double.MinValue;
     }
 }
Example #8
0
 /// <summary>
 /// 获得最后一次写入的归档值及间,返回double类型
 /// </summary>
 /// <param name="tagname"></param>
 /// <param name="timeStamp"></param>
 /// <returns></returns>
 public double GetArchiveValue(string tagname, out object timeStamp)
 {
     timeStamp = DateTime.MinValue;
     DateTime dt = DateTime.Now;
     try {
         if (String.IsNullOrEmpty(tagname)) {
             _ErrorInfo = "点名称为空。";
             return Double.MinValue;
         }
         TagVector tagVector = GetPointListByTagName(tagname);
         HisDataSet realDataSet = new HisDataSet();
         DateTime[] hisDateTime = { dt };
         BatchResults results = DataIO.ReadAtTime(dbConnector, tagVector, hisDateTime, realDataSet);
         if (results.HasErrors) {
             foreach (DbError dberror in results.Errors) {
                 _ErrorInfo += dberror.ErrorMessage;
             }
             return Double.MinValue;
         }
         foreach (var item in realDataSet) {
             if (null != item.Data && 0 < item.Data.Count) {
                 timeStamp = item.Data[0].TimeStamp;
                 return ConvertToDouble(item.Data[0].Value);
             }
             else {
                 return Double.MinValue;
             }
         }
         return Double.MinValue;
     }
     catch (Exception ex) {
         _ErrorInfo = ex.Message;
         return Double.MinValue;
     }
 }
Example #9
0
 /// <summary>
 /// 根据输入时间查询归档数据,返回double类型
 /// </summary>
 /// <param name="tagname"></param>
 /// <param name="dt"></param>
 /// <returns></returns>
 public double GetArchiveValue(string tagname, DateTime dt)
 {
     double Result = double.MinValue;
     try {
         if (String.IsNullOrEmpty(tagname)) {
             _ErrorInfo = "点名称为空。";
             return Result;
         }
         TagVector tagVector = GetPointListByTagName(tagname);
         HisDataSet realDataSet = new HisDataSet();
         DateTime[] hisDateTime = { dt };
         //DataIO.ReadAtTime
         BatchResults results = DataIO.ReadAtTime(dbConnector, tagVector, hisDateTime, realDataSet);
         //BatchResults results = DataIO.ReadRaw(dbConnector, tagVector, dt.AddSeconds(-1), dt, realDataSet);
         if (results.HasErrors) {
             foreach (DbError dberror in results.Errors) {
                 _ErrorInfo += dberror.ErrorMessage;
             }
             return Result;
         }
         if (realDataSet.Count > 0) {
             Result = Convert.ToDouble(realDataSet[0].Data[0].Value);
         }
         tagVector = null;
         realDataSet = null;
         results = null;
         return Result;
     }
     catch (Exception ex) {
         _ErrorInfo = ex.Message;
         return Double.MinValue;
     }
 }
Example #10
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;
            }
        }
Example #11
0
        /// <summary>
        /// 指定开始结束时间
        /// 统计时间内的Total\Max\Min\StdDev\Range\Average\PStdDev,返回单个数据
        /// 注:expression 存放的是点名称  filter没用到
        /// </summary>
        public Double ExpCalculatedData(string expression, DateTime stime, DateTime etime, string filter, SummaryType type)
        {
            try {
                if (String.IsNullOrEmpty(expression)) {
                    return Double.MinValue;
                }
                TagVector tagVector = GetPointListByTagName(expression);
                if (null == tagVector || 0 >= tagVector.Count) {
                    return Double.MinValue;
                }
                HisDataSet hisDataSet = new HisDataSet();
                AggregateEnum aggregateType;
                switch (type) {
                    case SummaryType.asTotal:
                        aggregateType = AggregateEnum.TOTAL;
                        break;
                    case SummaryType.asMinimum:
                        aggregateType = AggregateEnum.MINIMUM;
                        break;
                    case SummaryType.asMaximum:
                        aggregateType = AggregateEnum.MAXIMUM;
                        break;
                    case SummaryType.asStdDev:
                        aggregateType = AggregateEnum.STDEV;
                        break;
                    case SummaryType.asRange:
                        aggregateType = AggregateEnum.RANGE;
                        break;
                    case SummaryType.asAverage:
                        aggregateType = AggregateEnum.AVERAGE;
                        break;
                    case SummaryType.asPStdDev:  //注:pSpace没有这类型
                        aggregateType = AggregateEnum.STDEV;
                        break;
                    default:
                        aggregateType = AggregateEnum.AVERAGE;
                        break;
                }

                BatchResults results = DataIO.ReadProcessed(dbConnector, tagVector, stime, etime, etime - stime, aggregateType, hisDataSet);
                if (results.HasErrors) {
                    foreach (DbError dberror in results.Errors) {
                        _ErrorInfo += dberror.ErrorMessage;
                    }
                    return Double.MinValue;
                }
                if (null != hisDataSet && 0 < hisDataSet.Count) {
                    return ConvertToDouble(hisDataSet[0].Data[0].Value);
                }
                return Double.MinValue;
            }
            catch (Exception ex) {
                _ErrorInfo = ex.Message;
                return Double.MinValue;
            }
        }
Example #12
0
        /// <summary>
        /// 指定开始结束时间
        /// 统计时间内的Total\Max\Min\StdDev\Range\Average\PStdDev,根据时间间隔返回数据组
        /// </summary>
        public bool TagCalculatedData(string tagname, DateTime stime, DateTime etime, string duration, string filter, SummaryType type, out double[] pdata)
        {
            try {
                pdata = null;
                if (String.IsNullOrEmpty(tagname)) {
                    return false;
                }
                TagVector tagVector = GetPointListByTagName(tagname);
                if (null == tagVector || 0 >= tagVector.Count) {
                    return false;
                }
                HisDataSet hisDataSet = new HisDataSet();
                AggregateEnum aggregateType;
                switch (type) {
                    case SummaryType.asTotal:
                        aggregateType = AggregateEnum.TOTAL;
                        break;
                    case SummaryType.asMinimum:
                        aggregateType = AggregateEnum.MINIMUM;
                        break;
                    case SummaryType.asMaximum:
                        aggregateType = AggregateEnum.MAXIMUM;
                        break;
                    case SummaryType.asStdDev:
                        aggregateType = AggregateEnum.STDEV;
                        break;
                    case SummaryType.asRange:
                        aggregateType = AggregateEnum.RANGE;
                        break;
                    case SummaryType.asAverage:
                        aggregateType = AggregateEnum.AVERAGE;
                        break;
                    case SummaryType.asPStdDev:  //注:pSpace没有这类型
                        aggregateType = AggregateEnum.STDEV;
                        break;
                    default:
                        aggregateType = AggregateEnum.AVERAGE;
                        break;
                }

                BatchResults results = DataIO.ReadProcessed(dbConnector, tagVector, stime, etime, etime - stime, aggregateType, hisDataSet);
                if (results.HasErrors) {
                    foreach (DbError dberror in results.Errors) {
                        _ErrorInfo += dberror.ErrorMessage;
                    }
                    return false;
                }
                List<Double> list = new List<Double>();
                if (null != hisDataSet && 0 < hisDataSet.Count) {
                    foreach (var items in hisDataSet) {
                        if (null == items.Data || 0 >= items.Data.Count) {
                            continue;
                        }
                        foreach (RealHisData item in items.Data) {
                            list.Add(ConvertToDouble(item.Value));
                        }
                    }
                    pdata = list.ToArray();
                    return true;
                }
                return false;
            }
            catch (Exception ex) {
                _ErrorInfo = ex.Message;
                pdata = null;
                return false;
            }
        }