Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="datafile"></param>
        /// <param name="offset"></param>
        /// <param name="tid"></param>
        /// <param name="dataTimes"></param>
        /// <param name="type"></param>
        /// <param name="res"></param>
        public static void Read <T>(this DataFileSeriserbase datafile, long offset, int tid, List <DateTime> dataTimes, QueryValueMatchType type, HisQueryResult <T> res)
        {
            int timetick = 0;
            var data     = datafile.ReadTagDataBlock2(tid, offset, dataTimes, out timetick);

            foreach (var vv in data)
            {
                var index = vv.Value.Item2;
                DeCompressDataBlockValue <T>(vv.Key, vv.Value.Item1, timetick, type, res, new Func <byte, object>((tp) => {
                    object oval = null;
                    int ttick   = 0;
                    int dindex  = index;
                    if (tp == 0)
                    {
                        //往前读最后一个有效值
                        do
                        {
                            dindex--;
                            if (dindex < 0)
                            {
                                return(TagHisValue <T> .Empty);
                            }
                            var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick);
                            if (datas == null)
                            {
                                return(null);
                            }
                            oval = DeCompressDataBlockRawValue <T>(datas, 0);
                        }while (oval == null);
                    }
                    else
                    {
                        //往后读第一个有效值
                        do
                        {
                            dindex++;

                            if (dindex > 47)
                            {
                                return(TagHisValue <T> .Empty);
                            }

                            var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick);
                            if (datas == null)
                            {
                                return(null);
                            }
                            oval = DeCompressDataBlockRawValue <T>(datas, 1);
                        }while (oval == null);
                    }
                    return(oval);
                }));
            }
            foreach (var vv in data)
            {
                vv.Key.Dispose();
            }
            data.Clear();
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="datafile"></param>
        /// <param name="offset"></param>
        /// <param name="tid"></param>
        /// <param name="dataTime"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static object Read <T>(this DataFileSeriserbase datafile, long offset, int tid, DateTime dataTime, QueryValueMatchType type)
        {
            int timetick = 0;
            int index    = 0;

            using (var data = datafile.ReadTagDataBlock(tid, offset, dataTime, out timetick, out index))
            {
                return(DeCompressDataBlockValue <T>(data, dataTime, timetick, type, new Func <byte, object>((tp) => {
                    TagHisValue <T> oval = TagHisValue <T> .Empty;
                    int ttick = 0;
                    int dindex = index;
                    if (tp == 0)
                    {
                        //往前读最后一个有效值
                        do
                        {
                            dindex--;
                            if (dindex < 0)
                            {
                                return TagHisValue <T> .Empty;
                            }
                            var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick);
                            if (datas == null)
                            {
                                return null;
                            }
                            oval = DeCompressDataBlockRawValue <T>(datas, 0);
                        }while (oval.IsEmpty());
                    }
                    else
                    {
                        //往后读第一个有效值
                        do
                        {
                            dindex++;
                            var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick);
                            if (datas == null)
                            {
                                return null;
                            }
                            oval = DeCompressDataBlockRawValue <T>(datas, 1);
                        }while (oval.IsEmpty());
                    }
                    return oval;
                })));
            }
        }