/// <summary> /// 读取实时值,质量戳,时间 /// </summary> /// <param name="tags"></param> /// <returns></returns> public Dictionary <string, Tuple <int, DateTime, object> > ReadRealValueAndQualityTime(List <string> tags) { try { Dictionary <string, Tuple <int, DateTime, object> > re = new Dictionary <string, Tuple <int, DateTime, object> >(); var gtags = GetGroupTags(tags); foreach (var vv in gtags) { var vvv = new GetRealValueRequest() { Group = vv.Key, Token = mLoginId }; vvv.TagNames.AddRange(vv.Value); var res = mRealDataClient.GetRealValue(vvv); if (res.Result) { foreach (var val in res.Values) { string sname = vv.Value[val.Id]; if (!string.IsNullOrEmpty(vv.Key)) { sname = vv.Key + "." + sname; } re.Add(sname, new Tuple <int, DateTime, object>(val.Quality, DateTime.FromBinary(val.Time), ConvertToValue(val.Value, val.ValueType))); } } } return(re); } catch { } return(null); }
/// <summary> /// /// </summary> /// <param name="request"></param> /// <param name="context"></param> /// <returns></returns> public override Task <GetRealValueReply> GetRealValue(GetRealValueRequest request, ServerCallContext context) { if (SecurityManager.Manager.IsLogin(request.Token) && SecurityManager.Manager.CheckReaderPermission(request.Token, request.Group)) { GetRealValueReply response = new GetRealValueReply() { Result = true }; var service = ServiceLocator.Locator.Resolve <IRealTagConsumer>(); var ids = service.GetTagIdByName(request.TagNames.Select(e => string.IsNullOrEmpty(request.Group) ? e : request.Group + "." + e).ToList()); for (int i = 0; i < request.TagNames.Count; i++) { if (ids.Count > i && ids[i].HasValue) { byte quality; DateTime time; byte tagtype = 0; var val = service.GetTagValue(ids[i].Value, out quality, out time, out tagtype); if (val != null) { response.Values.Add(new ValueQualityTime() { Id = i, Quality = quality, Value = val.ToString(), ValueType = tagtype, Time = time.ToBinary() }); } } } return(Task.FromResult(response)); } else { return(Task.FromResult(new GetRealValueReply() { Result = false })); } }