Ejemplo n.º 1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="data"></param>
 public void RequestManualToCompress(ManualHisDataMemoryBlock data)
 {
     foreach (var vv in mTargetMemorys)
     {
         if (data.Id >= vv.Value.Id * TagCountOneFile && data.Id < (vv.Value.Id + 1) * TagCountOneFile)
         {
             vv.Value.AddManualToCompress(data);
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        private void Compress(ManualHisDataMemoryBlock data)
        {
            var cdata = CompressBlockMemory(data);

            cdata.MakeMemoryBusy();
            ServiceLocator.Locator.Resolve <IDataSerialize3>().ManualRequestToSeriseFile(cdata);
            data.MakeMemoryNoBusy();

            HisDataMemoryQueryService3.Service.ClearManualMemoryTime(data.Id, data.Time);
            ManualHisDataMemoryBlockPool.Pool.Release(data);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private MarshalMemoryBlock CompressBlockMemory(ManualHisDataMemoryBlock data)
        {
            MarshalMemoryBlock block = MarshalMemoryBlockPool.Pool.Get(data.Length * 2 + 28 + 5 + 56);
            var histag = mHisTagService.GetHisTag(data.Id);

            if (histag == null)
            {
                return(null);
            }
            int datasize = 0;

            var targetPosition = 28 + 56;

            //前56个字节用于统计数据存放


            block.WriteInt(56, data.Id);
            block.WriteDatetime(56 + 4, data.Time);     //时间
            block.WriteDatetime(56 + 12, data.EndTime); //结束时间

            //block.WriteInt(20, 0);                 //写入数据大小
            block.WriteInt(56 + 24, mTagIds.Count);//写入变量的个数

            var qulityoffset = data.QualityAddress;
            var comtype      = histag.CompressType;//压缩类型

            block.WriteByte(targetPosition + 4, (byte)comtype);

            var tp = mCompressCach[comtype];

            if (tp != null)
            {
                tp.QulityOffset = (int)qulityoffset;
                tp.TagType      = histag.TagType;
                tp.RecordType   = histag.Type;
                tp.StartTime    = data.Time;
                tp.Parameters   = histag.Parameters;
                tp.Precision    = histag.Precision;
                tp.TimeTick     = data.TimeUnit;
                tp.Id           = data.Id;

                var size = tp.Compress(data, 0, block, targetPosition + 5, data.Length, block, 0) + 1;
                block.WriteInt(targetPosition, (int)size);

                datasize = (int)(targetPosition + size + 5);
                block.WriteInt(56 + 20, datasize);                 //写入数据大小
            }
            return(block);
        }
Ejemplo n.º 4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="data"></param>
 public void AddManualToCompress(ManualHisDataMemoryBlock data)
 {
     lock (mMemoryCach)
         mMemoryCach.Enqueue(data);
 }