/// <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="value">数值</param> /// <returns></returns> public Boolean WriteSnapshotValue(string tagname, string value) { try { if (String.IsNullOrEmpty(tagname)) { return false; } TagVector tagVector = GetPointListByTagName(tagname); if (null != tagVector && 0 < tagVector.Count) { RealDataSet data = new RealDataSet(); pSpaceCTLNET.TagValue tagVal = new pSpaceCTLNET.TagValue(); tagVal.TagId = tagVector[0].TagId; tagVal.TimeStamp = DateTime.Now; tagVal.QualityStamp = QUALITY_MASK.GOOD; tagVal.Value = value; data.Add(tagVal); BatchResults results = DataIO.Insert(dbConnector, data, DataField.All); if (results.HasErrors) { foreach (DbError dberror in results.Errors) { _ErrorInfo += dberror.ErrorMessage; } return false; } return true; } return false; } catch (Exception ex) { _ErrorInfo = ex.Message; return false; } }
/// <summary> /// 得到List表所有标签点的实时数据 /// </summary> /// <param name="tagname"></param> /// <returns></returns> public Boolean GetSnapshotListData(ref Dictionary<String, TagValue> lttvs, 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)); } RealDataSet realDataSet = new RealDataSet(); BatchResults results = DataIO.Snapshot(dbConnector, tagVector, 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).TagLongName.ToUpper(); Double val = 0.0; tagValue.TagSnapshot = (null != item.Value && Double.TryParse(item.Value.ToString(), out val)) ? val : 0; tagValue.TagTime = item.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.Value ? item.Value.ToString() : "0"; 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(); if (lttvs.ContainsKey(tagValue.TagName)) { lttvs[tagValue.TagName] = tagValue; } } results = null; tagVector = null; realDataSet = null; return true; } catch (Exception ex) { strError = ex.Message; return false; } }
/// <summary> /// 得到实时数据,返回double类型 /// </summary> /// <param name="tagname"></param> /// <returns></returns> public Double GetSnapshotValue(String tagname) { String strError = ""; double Result = double.MinValue; TagVector tagVector = GetPointListByTagName(tagname); RealDataSet realDataSet = new RealDataSet(); BatchResults results = DataIO.Snapshot(dbConnector, tagVector, realDataSet); if (results.HasErrors) { foreach (DbError dberror in results.Errors) { strError += dberror.ErrorMessage; } if (!String.IsNullOrEmpty(strError)) throw new Exception(strError); } if (realDataSet.Count > 0) { Result = Convert.ToDouble(realDataSet[0].Value); } tagVector = null; realDataSet = null; results = null; return Result; /*try { if (String.IsNullOrEmpty(tagname)) { return Double.MinValue; } TagVector tagVector = GetPointListByTagName(tagname); if (null != tagVector && 0 < tagVector.Count) { RealHisData data = DataIO.Snapshot(dbConnector, tagVector[0] as ITagElement); if (null != data && data.QualityStamp == QUALITY_MASK.GOOD) { return ConvertToDouble(data.Value); } } return Double.MinValue; } catch (Exception ex) { _ErrorInfo = ex.Message; return Double.MinValue; }*/ }
/// <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; } }