From ecac2c773491e6d9af664ac7c23e1373dab1dcdb Mon Sep 17 00:00:00 2001 From: Candy Date: Thu, 15 Oct 2020 15:27:08 +0800 Subject: [PATCH] =?UTF-8?q?Bug=20=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/Cdy.Tag/His/RecordType.cs | 4 +- Driver/SimDriver/Driver.cs | 2 +- .../Compress/Special/DeadAreaCompressUnit2.cs | 80 +++++++++--------- .../Compress/Special/LosslessCompressUnit2.cs | 84 ++++++++++--------- .../Compress/Special/SlopeCompressUnit2.cs | 36 ++++---- .../His/HisDataMemoryQueryService.cs | 2 +- RunTime/DBRuntime/His/HisEnginer2.cs | 75 ++++++++++++++--- RunTime/DBRuntime/His/SeriseEnginer2.cs | 4 + 8 files changed, 176 insertions(+), 111 deletions(-) diff --git a/Common/Cdy.Tag/His/RecordType.cs b/Common/Cdy.Tag/His/RecordType.cs index 7d143bf..cccba5f 100644 --- a/Common/Cdy.Tag/His/RecordType.cs +++ b/Common/Cdy.Tag/His/RecordType.cs @@ -26,9 +26,9 @@ namespace Cdy.Tag /// ValueChanged, /// - /// 手动 + /// 驱动自己更新 /// - Manual + Driver } diff --git a/Driver/SimDriver/Driver.cs b/Driver/SimDriver/Driver.cs index 25502a8..d6e02c7 100644 --- a/Driver/SimDriver/Driver.cs +++ b/Driver/SimDriver/Driver.cs @@ -110,7 +110,7 @@ namespace SimDriver foreach (var vv in mTagIdCach) { - mManualRecordTagCach.Add(vv.Key, mTagHisValueService.GetTagRecordType(vv.Value.Select(e => e.Id).ToList()).Where(e=>e.Value == RecordType.Manual).Select(e=>e.Key).ToList()); + mManualRecordTagCach.Add(vv.Key, mTagHisValueService.GetTagRecordType(vv.Value.Select(e => e.Id).ToList()).Where(e=>e.Value == RecordType.Driver).Select(e=>e.Key).ToList()); } } diff --git a/RunTime/DBRuntime/His/Compress/Special/DeadAreaCompressUnit2.cs b/RunTime/DBRuntime/His/Compress/Special/DeadAreaCompressUnit2.cs index 3095b30..f5306ec 100644 --- a/RunTime/DBRuntime/His/Compress/Special/DeadAreaCompressUnit2.cs +++ b/RunTime/DBRuntime/His/Compress/Special/DeadAreaCompressUnit2.cs @@ -171,6 +171,8 @@ namespace Cdy.Tag var count = (int)(size - this.QulityOffset); //var tims = source.ReadUShorts(sourceAddr, (int)count); + byte tlen = (source as HisDataMemoryBlock).TimeLen; + if (mMarshalMemory == null) { mMarshalMemory = new MemoryBlock(count * 10); @@ -199,7 +201,7 @@ namespace Cdy.Tag var datas = CompressTimers(source, sourceAddr, (int)count, emptys); - var cval = CompressBoolValues(source, count * 2 + sourceAddr, count, emptys); + var cval = CompressBoolValues(source, count * tlen + sourceAddr, count, emptys); int rcount = count - emptys.WriteIndex - 1; //写入时间 @@ -218,7 +220,7 @@ namespace Cdy.Tag emptys.ReadIndex = 0; //写入质量戳 - var cqus = CompressQulitys(source, count * 3 + sourceAddr, count, emptys); + var cqus = CompressQulitys(source, count * (tlen + 1) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -227,7 +229,7 @@ namespace Cdy.Tag case TagType.Byte: FindEmpityIds(source, sourceAddr, (int)count, emptys); - cval = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + cval = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; @@ -247,7 +249,7 @@ namespace Cdy.Tag emptys2.ReadIndex = 0; //写入质量戳 - cqus = CompressQulitys(source, count * 3 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 1) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -255,7 +257,7 @@ namespace Cdy.Tag break; case TagType.UShort: FindEmpityIds(source, sourceAddr, (int)count, emptys); - var ures = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ures = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; @@ -273,7 +275,7 @@ namespace Cdy.Tag rsize += ures.Length; //质量戳 emptys2.ReadIndex = 0; - cqus = CompressQulitys(source, count * 4 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 2) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -281,7 +283,7 @@ namespace Cdy.Tag break; case TagType.Short: FindEmpityIds(source, sourceAddr, (int)count, emptys); - var res = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var res = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; @@ -299,7 +301,7 @@ namespace Cdy.Tag rsize += res.Length; emptys2.ReadIndex = 0; - cqus = CompressQulitys(source, count * 4 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 2) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -307,7 +309,7 @@ namespace Cdy.Tag break; case TagType.UInt: FindEmpityIds(source, sourceAddr, (int)count, emptys); - var uires = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var uires = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; @@ -325,7 +327,7 @@ namespace Cdy.Tag rsize += uires.Length; //质量 emptys2.ReadIndex = 0; - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 4) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -333,7 +335,7 @@ namespace Cdy.Tag break; case TagType.Int: FindEmpityIds(source, sourceAddr, (int)count, emptys); - var ires = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ires = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; //写入时间 @@ -350,7 +352,7 @@ namespace Cdy.Tag rsize += ires.Length; emptys2.ReadIndex = 0; //质量 - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 4) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -358,7 +360,7 @@ namespace Cdy.Tag break; case TagType.ULong: FindEmpityIds(source, sourceAddr, (int)count, emptys); - var ulres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ulres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; //写入时间 @@ -375,7 +377,7 @@ namespace Cdy.Tag rsize += ulres.Length; //质量 emptys2.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -383,7 +385,7 @@ namespace Cdy.Tag break; case TagType.Long: FindEmpityIds(source, sourceAddr, (int)count, emptys); - var lres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var lres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; //写入时间 @@ -400,7 +402,7 @@ namespace Cdy.Tag rsize += lres.Length; //质量 emptys2.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -409,7 +411,7 @@ namespace Cdy.Tag case TagType.DateTime: datas = CompressTimers(source, sourceAddr, (int)count, emptys); - var dres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var dres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); rcount = count - emptys2.WriteIndex - 1; //写入时间 @@ -426,7 +428,7 @@ namespace Cdy.Tag rsize += dres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -443,7 +445,7 @@ namespace Cdy.Tag mDCompress.CheckAndResizeTo(count); } - var ddres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ddres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; //写入时间 @@ -466,7 +468,7 @@ namespace Cdy.Tag rsize += ddres.Length; //质量 emptys2.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -491,7 +493,7 @@ namespace Cdy.Tag mFCompress.CheckAndResizeTo(count); } - var fres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var fres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); datas = CompressTimers2(source, sourceAddr, (int)count, emptys2); rcount = count - emptys2.WriteIndex - 1; //写入时间 @@ -508,7 +510,7 @@ namespace Cdy.Tag rsize += fres.Length; //质量 emptys2.ReadIndex = 0; - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, emptys2); + cqus = CompressQulitys(source, count * (tlen + 4) + sourceAddr, count, emptys2); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -528,7 +530,7 @@ namespace Cdy.Tag //写入数据 - var vals = source.ReadStrings(count * 2 + (int)sourceAddr, count); + var vals = source.ReadStrings(count * tlen + (int)sourceAddr, count); var qus = source.ReadBytes(count); var sres = CompressValues(vals, emptys); target.Write(sres.Length); @@ -553,14 +555,14 @@ namespace Cdy.Tag rsize += 4; rsize += datas.Length; //数值 - var ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -577,14 +579,14 @@ namespace Cdy.Tag rsize += 4; rsize += datas.Length; //数值 - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -601,14 +603,14 @@ namespace Cdy.Tag rsize += 4; rsize += datas.Length; //值 - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 18 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 16) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -625,14 +627,14 @@ namespace Cdy.Tag rsize += 4; rsize += datas.Length; //值 - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 18 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 16) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -650,14 +652,14 @@ namespace Cdy.Tag rsize += 4; rsize += datas.Length; //值 - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 14 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 12) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -674,14 +676,14 @@ namespace Cdy.Tag rsize += 4; rsize += datas.Length; //值 - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 14 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 12) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -698,14 +700,14 @@ namespace Cdy.Tag rsize += 4; rsize += datas.Length; //值 - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 26 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 24) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -722,14 +724,14 @@ namespace Cdy.Tag rsize += 4; rsize += datas.Length; //值 - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; //质量 emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 26 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 24) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; diff --git a/RunTime/DBRuntime/His/Compress/Special/LosslessCompressUnit2.cs b/RunTime/DBRuntime/His/Compress/Special/LosslessCompressUnit2.cs index e52bdc4..dcf1459 100644 --- a/RunTime/DBRuntime/His/Compress/Special/LosslessCompressUnit2.cs +++ b/RunTime/DBRuntime/His/Compress/Special/LosslessCompressUnit2.cs @@ -851,7 +851,9 @@ namespace Cdy.Tag { var count = (int)(size - this.QulityOffset); - if(mMarshalMemory==null) + byte tlen = (source as HisDataMemoryBlock).TimeLen; + + if (mMarshalMemory==null) { mMarshalMemory = new MemoryBlock(count * 10); } @@ -863,6 +865,8 @@ namespace Cdy.Tag emptys.CheckAndResize(count); + + var datas = CompressTimers(source, sourceAddr, (int)count, emptys); long rsize = 0; int rcount = count - emptys.WriteIndex - 1; @@ -877,117 +881,117 @@ namespace Cdy.Tag switch (type) { case TagType.Bool: - var cval = CompressBoolValues(source, count * 2 + sourceAddr, count, emptys); + var cval = CompressBoolValues(source, count * tlen + sourceAddr, count, emptys); target.Write(cval.Length); target.Write(cval); rsize += 4; rsize += cval.Length; emptys.ReadIndex = 0; - var cqus = CompressQulitys(source, count * 3 + sourceAddr, count, emptys); + var cqus = CompressQulitys(source, count * (tlen+1) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.Byte: - cval = CompressValues(source, count * 2 + sourceAddr, count, emptys,TagType); + cval = CompressValues(source, count * tlen + sourceAddr, count, emptys,TagType); target.Write(cval.Length); target.Write(cval); rsize += 4; rsize += cval.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 3 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 1) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.UShort: - var ures = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ures = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ures.Length); target.Write(ures); rsize += 4; rsize += ures.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 4 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 2) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.Short: - var res = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var res = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(res.Length); target.Write(res); rsize += 4; rsize += res.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 4 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 2) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.UInt: - var uires = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var uires = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(uires.Length); target.Write(uires); rsize += 4; rsize += uires.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 4) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.Int: - var ires = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ires = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ires.Length); target.Write(ires); rsize += 4; rsize += ires.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 4) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.ULong: - var ulres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ulres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ulres.Length); target.Write(ulres); rsize += 4; rsize += ulres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.Long: - var lres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var lres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(lres.Length); target.Write(lres); rsize += 4; rsize += lres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.DateTime: - var dres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var dres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(dres.Length); target.Write(dres); rsize += 4; rsize += dres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -1004,13 +1008,13 @@ namespace Cdy.Tag mDCompress.CheckAndResizeTo(count); } - var ddres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ddres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ddres.Length); target.Write(ddres); rsize += 4; rsize += ddres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen+8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; @@ -1027,20 +1031,20 @@ namespace Cdy.Tag mFCompress.CheckAndResizeTo(count); } - var fres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var fres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(fres.Length); target.Write(fres); rsize += 4; rsize += fres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen+4) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.String: - var vals = source.ReadStrings(count * 2 + (int)sourceAddr, count); + var vals = source.ReadStrings(count * tlen + (int)sourceAddr, count); var qus = source.ReadBytes(count); var sres = CompressValues(vals, emptys); target.Write(sres.Length); @@ -1055,104 +1059,104 @@ namespace Cdy.Tag rsize += cqus.Length; break; case TagType.IntPoint: - var ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + var ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen+8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.UIntPoint: - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.LongPoint: - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 18 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 16) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.ULongPoint: - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 18 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 16) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.IntPoint3: - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 14 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 12) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.UIntPoint3: - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 14 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 12) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.LongPoint3: - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 26 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen + 24) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; rsize += cqus.Length; break; case TagType.ULongPoint3: - ipres = CompressValues(source, count * 2 + sourceAddr, count, emptys, TagType); + ipres = CompressValues(source, count * tlen + sourceAddr, count, emptys, TagType); target.Write(ipres.Length); target.Write(ipres); rsize += 4; rsize += ipres.Length; emptys.ReadIndex = 0; - cqus = CompressQulitys(source, count * 26 + sourceAddr, count, emptys); + cqus = CompressQulitys(source, count * (tlen+24) + sourceAddr, count, emptys); target.Write(cqus.Length); target.Write(cqus); rsize += 4; diff --git a/RunTime/DBRuntime/His/Compress/Special/SlopeCompressUnit2.cs b/RunTime/DBRuntime/His/Compress/Special/SlopeCompressUnit2.cs index 785417b..cec205a 100644 --- a/RunTime/DBRuntime/His/Compress/Special/SlopeCompressUnit2.cs +++ b/RunTime/DBRuntime/His/Compress/Special/SlopeCompressUnit2.cs @@ -1920,49 +1920,49 @@ namespace Cdy.Tag switch (type) { case TagType.Byte: - var cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + var cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); var timeData = CompressTimers(tims, usedIndex); - var cqus = CompressQulitys(source, count * 3 + sourceAddr, count, usedIndex); + var cqus = CompressQulitys(source, count * (tlen + 1) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; case TagType.Short: - cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); timeData = CompressTimers(tims, usedIndex); - cqus = CompressQulitys(source, count * 4 + sourceAddr, count, usedIndex); + cqus = CompressQulitys(source, count * (tlen + 2) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; case TagType.UShort: - cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); timeData = CompressTimers(tims, usedIndex); - cqus = CompressQulitys(source, count * 4 + sourceAddr, count, usedIndex); + cqus = CompressQulitys(source, count * (tlen + 2) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; case TagType.Int: - cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); timeData = CompressTimers(tims, usedIndex); - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, usedIndex); + cqus = CompressQulitys(source, count * (tlen + 4) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; case TagType.UInt: - cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); timeData = CompressTimers(tims, usedIndex); - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, usedIndex); + cqus = CompressQulitys(source, count * (tlen + 4) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; case TagType.Long: - cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); timeData = CompressTimers(tims, usedIndex); - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, usedIndex); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; case TagType.ULong: - cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); timeData = CompressTimers(tims, usedIndex); - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, usedIndex); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; case TagType.Double: @@ -1976,9 +1976,9 @@ namespace Cdy.Tag mDCompress.CheckAndResizeTo(count); } - cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); timeData = CompressTimers(tims, usedIndex); - cqus = CompressQulitys(source, count * 10 + sourceAddr, count, usedIndex); + cqus = CompressQulitys(source, count * (tlen + 8) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; case TagType.Float: @@ -1990,9 +1990,9 @@ namespace Cdy.Tag { mFCompress.CheckAndResizeTo(count); } - cval = CompressValues(source, count * 2 + sourceAddr, count, tims, type); + cval = CompressValues(source, count * tlen + sourceAddr, count, tims, type); timeData = CompressTimers(tims, usedIndex); - cqus = CompressQulitys(source, count * 6 + sourceAddr, count, usedIndex); + cqus = CompressQulitys(source, count * (tlen + 4) + sourceAddr, count, usedIndex); rsize = FillData(cval, cqus, timeData, target, targetAddr); break; diff --git a/RunTime/DBRuntime/His/HisDataMemoryQueryService.cs b/RunTime/DBRuntime/His/HisDataMemoryQueryService.cs index d763690..e9bb6a6 100644 --- a/RunTime/DBRuntime/His/HisDataMemoryQueryService.cs +++ b/RunTime/DBRuntime/His/HisDataMemoryQueryService.cs @@ -168,7 +168,7 @@ namespace DBRuntime.His { if (this.HisEnginer.HisTagManager.HisTags.ContainsKey(id)) { - return HisEnginer.HisTagManager.HisTags[id].Type == RecordType.Manual; + return HisEnginer.HisTagManager.HisTags[id].Type == RecordType.Driver; } return false; } diff --git a/RunTime/DBRuntime/His/HisEnginer2.cs b/RunTime/DBRuntime/His/HisEnginer2.cs index 15abbb2..f3b083a 100644 --- a/RunTime/DBRuntime/His/HisEnginer2.cs +++ b/RunTime/DBRuntime/His/HisEnginer2.cs @@ -741,6 +741,61 @@ namespace Cdy.Tag } } + + private int CalCachDatablockSizeForManualRecord(Cdy.Tag.TagType tagType, int headSize, int valueCount, out int dataOffset, out int qulityOffset) + { + //单个数据块内容包括:时间戳(2)+数值+质量戳(1) + + qulityOffset = headSize; + int count = Math.Max(CachMemoryTime, valueCount); + + //数据区偏移,时间戳占4个字节,质量戳占1个字节 + dataOffset = headSize + count * 4; + switch (tagType) + { + case Cdy.Tag.TagType.Byte: + case Cdy.Tag.TagType.Bool: + qulityOffset = dataOffset + count; + return qulityOffset + count; + case Cdy.Tag.TagType.Short: + case Cdy.Tag.TagType.UShort: + qulityOffset = dataOffset + count * 2; + return qulityOffset + count; + case Cdy.Tag.TagType.Int: + case Cdy.Tag.TagType.UInt: + case Cdy.Tag.TagType.Float: + qulityOffset = dataOffset + count * 4; + return qulityOffset + count; + case Cdy.Tag.TagType.Long: + case Cdy.Tag.TagType.ULong: + case Cdy.Tag.TagType.Double: + case Cdy.Tag.TagType.DateTime: + case TagType.UIntPoint: + case TagType.IntPoint: + qulityOffset = dataOffset + count * 8; + return qulityOffset + count; + case Cdy.Tag.TagType.IntPoint3: + case Cdy.Tag.TagType.UIntPoint3: + qulityOffset = dataOffset + count * 12; + return qulityOffset + count; + + case Cdy.Tag.TagType.LongPoint: + case Cdy.Tag.TagType.ULongPoint: + qulityOffset = dataOffset + count * 16; + return qulityOffset + count; + + case Cdy.Tag.TagType.LongPoint3: + case Cdy.Tag.TagType.ULongPoint3: + qulityOffset = dataOffset + count * 24; + return qulityOffset + count; + case Cdy.Tag.TagType.String: + qulityOffset = dataOffset + count * Const.StringSize; + return qulityOffset + count; + default: + return 0; + } + } + /// /// 分配内存 /// @@ -768,7 +823,7 @@ namespace Cdy.Tag foreach (var vv in mHisTags) { - if (vv.Value.Type != RecordType.Manual) + if (vv.Value.Type != RecordType.Driver) { var ss = CalMergeBlockSize(vv.Value.TagType, blockheadsize, out valueOffset, out qulityOffset); @@ -1096,8 +1151,8 @@ namespace Cdy.Tag } long ltmp2 = sw.ElapsedMilliseconds; sw.Stop(); - - LoggerService.Service.Info("HisEnginer", "SubmiteMemory 耗时:" + ltmp+","+ltmp2, ConsoleColor.Cyan); + + LoggerService.Service.Info("HisEnginer", "SubmiteMemory 耗时:" + ltmp + "," + ltmp2, ConsoleColor.Cyan); } @@ -1392,7 +1447,7 @@ namespace Cdy.Tag SortedDictionary datacach; - if (mHisTags.ContainsKey(id) && mHisTags[id].Type == RecordType.Manual) + if (mHisTags.ContainsKey(id) && mHisTags[id].Type == RecordType.Driver) { lock (mManualHisDataCach) { @@ -1422,10 +1477,10 @@ namespace Cdy.Tag { if(hb!=null) HisDataMemoryQueryService.Service.RegistorManual(id, hb.Time, hb.EndTime, hb); - var css = CalCachDatablockSize(tag.TagType, 0, MergeMemoryTime * 1000 / timeUnit, out valueOffset, out qulityOffset); + var css = CalCachDatablockSizeForManualRecord(tag.TagType, 0, MergeMemoryTime * 1000 / timeUnit, out valueOffset, out qulityOffset); hb = ManualHisDataMemoryBlockPool.Pool.Get(css); hb.Time = time; - hb.MaxCount = MergeMemoryTime * 1000 / timeUnit; + hb.MaxCount = MergeMemoryTime * 1000 / timeUnit + 2; hb.TimeUnit = timeUnit; hb.TimeLen = 4; hb.TimerAddress = 0; @@ -1760,7 +1815,7 @@ namespace Cdy.Tag SortedDictionary datacach; - if (mHisTags.ContainsKey(id) && mHisTags[id].Type == RecordType.Manual) + if (mHisTags.ContainsKey(id) && mHisTags[id].Type == RecordType.Driver) { lock (mManualHisDataCach) { @@ -1787,10 +1842,10 @@ namespace Cdy.Tag } else { - var css = CalCachDatablockSize(tag.TagType, 0, MergeMemoryTime * 1000 / timeUnit, out valueOffset, out qulityOffset); + var css = CalCachDatablockSizeForManualRecord(tag.TagType, 0, MergeMemoryTime * 1000 / timeUnit, out valueOffset, out qulityOffset); hb = ManualHisDataMemoryBlockPool.Pool.Get(css); hb.Time = time; - hb.MaxCount = MergeMemoryTime * 1000 / timeUnit; + hb.MaxCount = MergeMemoryTime * 1000 / timeUnit +2; hb.TimeUnit = timeUnit; hb.TimeLen = 4; hb.TimerAddress = 0; @@ -2023,7 +2078,7 @@ namespace Cdy.Tag /// public List GetManualRecordTagId() { - return mManager.HisTags.Where(e => e.Value.Type == RecordType.Manual).Select(e=>e.Value.Id).ToList(); + return mManager.HisTags.Where(e => e.Value.Type == RecordType.Driver).Select(e=>e.Value.Id).ToList(); } /// diff --git a/RunTime/DBRuntime/His/SeriseEnginer2.cs b/RunTime/DBRuntime/His/SeriseEnginer2.cs index 54ac0d7..618e9ee 100644 --- a/RunTime/DBRuntime/His/SeriseEnginer2.cs +++ b/RunTime/DBRuntime/His/SeriseEnginer2.cs @@ -974,6 +974,10 @@ namespace Cdy.Tag { if (!mManualHisDataCach[sfile].ContainsKey(id)) mManualHisDataCach[sfile].Add(id, datablock); + else + { + LoggerService.Service.Warn("SeriseEnginer", "数据存储出现阻塞:"+id); + } } else { -- GitLab