diff --git a/Common/Cdy.Tag/His/RecordType.cs b/Common/Cdy.Tag/His/RecordType.cs
index 7d143bf05fd05cf022c905adfc484ef33484efa0..cccba5f7e2d5bddcc740b73bf3668bfa8f72a277 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 25502a8a21caabeb27a748c12899fef578ab4403..d6e02c78bfce4cf4b7202ca8a113d8bd1dae93d0 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 3095b30121e21d205666be33e31493acb5095c05..f5306ecfd8991f30c03313cdb5c9ce6b0cef3760 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 e52bdc4448fba5a69f5d19c2797b35c9152794af..dcf1459c0189728b7dc9e7482244a8442e4e0d0a 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 785417b07d67b167bdfb2d596e35953044aeeccc..cec205a76057f92a1790248d8239be36a310ef31 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 d763690cd433013c44ebd6d2d968b888275ea0aa..e9bb6a6ac37fbf39672723d7b1def0fa1dd4052a 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 15abbb20497ca2262ff7d9b88e0374d75cbd33e4..f3b083aecddc29142f8fdd235496d3483437601a 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 54ac0d7ffaddc74351482fbbb0e333b3ea0524ea..618e9ee78037aa6f85ef67e9bb4093ba6affdd08 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
{