/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="times"></param> /// <param name="type"></param> /// <returns></returns> public ByteBuffer QueryHisData(int id, List <DateTime> times, Cdy.Tag.QueryValueMatchType type) { if (IsConnected) { return(mUsedHisClient.QueryHisValueAtTimes(id, times, type)); } return(null); }
/// <summary> /// /// </summary> /// <param name="clientId"></param> /// <param name="data"></param> private void ProcessRequestHisDataByTimeSpanByMemory(string clientId, ByteBuffer data) { int id = data.ReadInt(); Cdy.Tag.QueryValueMatchType type = (QueryValueMatchType)data.ReadByte(); DateTime stime = new DateTime(data.ReadLong()); DateTime etime = new DateTime(data.ReadLong()); TimeSpan ts = new TimeSpan(data.ReadLong()); ByteBuffer re = DBRuntime.Proxy.DatabaseRunner.Manager.Proxy.QueryHisData(id, stime, etime, ts, type); re.UnLock(); Parent.AsyncCallback(clientId, re); }
/// <summary> /// /// </summary> /// <param name="clientId"></param> /// <param name="data"></param> private void ProcessRequestHisDatasByTimePointByMemory(string clientId, ByteBuffer data) { int id = data.ReadInt(); Cdy.Tag.QueryValueMatchType type = (QueryValueMatchType)data.ReadByte(); int count = data.ReadInt(); List <DateTime> times = new List <DateTime>(); for (int i = 0; i < count; i++) { times.Add(new DateTime(data.ReadLong())); } ByteBuffer re = DBRuntime.Proxy.DatabaseRunner.Manager.Proxy.QueryHisData(id, times, type); re.UnLock(); Parent.AsyncCallback(clientId, re); }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="times"></param> /// <param name="matchType"></param> /// <returns></returns> public ByteBuffer QueryHisValueAtTimes(int id, List <DateTime> times, Cdy.Tag.QueryValueMatchType matchType, int timeout = 5000) { var vid = 0; ByteBuffer re = null; lock (mHisDataLock) { vid = mHisRequreCount; mHisRequreCount++; CheckLogin(); } var mb = GetBuffer(ApiFunConst.HisDataRequestFun, 8 + times.Count * 8 + 5 + 4); mb.Write(ApiFunConst.RequestHisDatasByTimePoint); mb.Write(this.LoginId); mb.Write(id); mb.Write((byte)matchType); mb.Write(times.Count); for (int i = 0; i < times.Count; i++) { mb.Write(times[i].Ticks); } mb.Write(vid); ManualResetEvent hisRequreEvent = new ManualResetEvent(false); hisRequreEvent.Reset(); try { lock (mHisDataCallBack) { mHisDataCallBack.Add(vid, (data) => { re = data; try { hisRequreEvent.Set(); } catch { data?.UnlockAndReturn(); } }); } SendData(mb); if (hisRequreEvent.WaitOne(timeout) && re != null && re.WriteIndex - re.ReadIndex > 1) { return(re); } else { lock (mHisDataCallBack) { if (mHisDataCallBack.ContainsKey(vid)) { mHisDataCallBack.Remove(vid); } else { return(re); } } } return(null); } finally { hisRequreEvent.Dispose(); } }
/// <summary> /// 读取历史记录 /// </summary> /// <param name="tags"></param> /// <param name="starttime"></param> /// <param name="endTime"></param> /// <param name="duration"></param> /// <param name="type"></param> /// <returns></returns> public Dictionary <string, HisDataValueCollection> ReadHisValue(List <string> tags, DateTime starttime, DateTime endTime, TimeSpan duration, Cdy.Tag.QueryValueMatchType type) { if (mHisDataClient != null && !string.IsNullOrEmpty(mLoginId)) { Dictionary <string, HisDataValueCollection> re = new Dictionary <string, HisDataValueCollection>(); var req = new HisDataRequest() { StartTime = starttime.ToBinary(), EndTime = endTime.ToBinary(), Duration = (int)duration.TotalMilliseconds, QueryType = (int)type, Token = mLoginId }; req.Tags.AddRange(tags); var res = mHisDataClient.GetHisValue(req); if (res.Result) { foreach (var vv in res.Values) { HisDataValueCollection hvd = new HisDataValueCollection() { ValueType = vv.ValueType }; foreach (var vvv in vv.Values) { hvd.Add(new HisDataValuePoint() { Time = DateTime.FromBinary(vvv.Time), Value = ConvertToValue(vvv.Value, vv.ValueType) }); } re.Add(vv.Tag, hvd); } } return(re); } return(null); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="id"></param> /// <param name="times"></param> /// <param name="type"></param> /// <returns></returns> public HisQueryResult <T> QueryHisData <T>(int id, List <DateTime> times, Cdy.Tag.QueryValueMatchType type) { if (IsConnected) { var res = mUsedHisClient.QueryHisValueAtTimes(id, times, type); if (res == null || res.Handles == null || res.Handles.Count == 0) { return(null); } TagType tp = (TagType)res.ReadByte(); switch (tp) { case Cdy.Tag.TagType.Bool: return(ProcessHisResultByMemory <bool>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.Byte: return(ProcessHisResultByMemory <byte>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.DateTime: return(ProcessHisResultByMemory <DateTime>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.Double: return(ProcessHisResultByMemory <double>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.Float: return(ProcessHisResultByMemory <float>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.Int: return(ProcessHisResultByMemory <int>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.Long: return(ProcessHisResultByMemory <long>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.Short: return(ProcessHisResultByMemory <short>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.String: return(ProcessHisResultByMemory <string>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.UInt: return(ProcessHisResultByMemory <uint>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.ULong: return(ProcessHisResultByMemory <ulong>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.UShort: return(ProcessHisResultByMemory <ushort>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.IntPoint: return(ProcessHisResultByMemory <int>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.UIntPoint: return(ProcessHisResultByMemory <uint>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.IntPoint3: return(ProcessHisResultByMemory <IntPoint3Data>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.UIntPoint3: return(ProcessHisResultByMemory <UIntPoint3Data>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.LongPoint: return(ProcessHisResultByMemory <LongPointData>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.ULongPoint: return(ProcessHisResultByMemory <ULongPointTag>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.LongPoint3: return(ProcessHisResultByMemory <LongPoint3Data>(res, tp) as HisQueryResult <T>); case Cdy.Tag.TagType.ULongPoint3: return(ProcessHisResultByMemory <ULongPoint3Data>(res, tp) as HisQueryResult <T>); } } return(null); }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="stime"></param> /// <param name="etime"></param> /// <param name="span"></param> /// <param name="type"></param> /// <returns></returns> public ByteBuffer QueryHisData(int id, DateTime stime, DateTime etime, TimeSpan span, Cdy.Tag.QueryValueMatchType type) { if (IsConnected) { return(mUsedHisClient.QueryHisValueForTimeSpan(id, stime, etime, span, type)); } return(null); }