/// <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; } }
/// <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; } }
//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; } }
//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; }
/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }
/// <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> /// 指定开始结束时间 /// 统计时间内的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; } }
/// <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; } }