提交 ecac2c77 编写于 作者: cdy816's avatar cdy816

Bug 修改

上级 1b6199f3
......@@ -26,9 +26,9 @@ namespace Cdy.Tag
/// </summary>
ValueChanged,
/// <summary>
/// 手动
/// 驱动自己更新
/// </summary>
Manual
Driver
}
......
......@@ -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());
}
}
......
......@@ -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<byte>(source, count * 2 + sourceAddr, count, emptys, TagType);
cval = CompressValues<byte>(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<ushort>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ures = CompressValues<ushort>(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<short>(source, count * 2 + sourceAddr, count, emptys, TagType);
var res = CompressValues<short>(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<uint>(source, count * 2 + sourceAddr, count, emptys, TagType);
var uires = CompressValues<uint>(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<int>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ires = CompressValues<int>(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<ulong>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ulres = CompressValues<ulong>(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<long>(source, count * 2 + sourceAddr, count, emptys, TagType);
var lres = CompressValues<long>(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<ulong>(source, count * 2 + sourceAddr, count, emptys, TagType);
var dres = CompressValues<ulong>(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<double>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ddres = CompressValues<double>(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<float>(source, count * 2 + sourceAddr, count, emptys, TagType);
var fres = CompressValues<float>(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<IntPointData>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ipres = CompressValues<IntPointData>(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<UIntPointData>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<UIntPointData>(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<LongPointData>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<LongPointData>(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<ULongPointData>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<ULongPointData>(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<IntPoint3Data>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<IntPoint3Data>(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<UIntPoint3Data>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<UIntPoint3Data>(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<LongPoint3Data>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<LongPoint3Data>(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<ULongPoint3Data>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<ULongPoint3Data>(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;
......
......@@ -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<byte>(source, count * 2 + sourceAddr, count, emptys,TagType);
cval = CompressValues<byte>(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<ushort>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ures = CompressValues<ushort>(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<short>(source, count * 2 + sourceAddr, count, emptys, TagType);
var res = CompressValues<short>(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<uint>(source, count * 2 + sourceAddr, count, emptys, TagType);
var uires = CompressValues<uint>(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<int>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ires = CompressValues<int>(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<ulong>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ulres = CompressValues<ulong>(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<long>(source, count * 2 + sourceAddr, count, emptys, TagType);
var lres = CompressValues<long>(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<ulong>(source, count * 2 + sourceAddr, count, emptys, TagType);
var dres = CompressValues<ulong>(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<double>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ddres = CompressValues<double>(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<float>(source, count * 2 + sourceAddr, count, emptys, TagType);
var fres = CompressValues<float>(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<IntPointData>(source, count * 2 + sourceAddr, count, emptys, TagType);
var ipres = CompressValues<IntPointData>(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<UIntPointData>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<UIntPointData>(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<LongPointData>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<LongPointData>(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<ULongPointData>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<ULongPointData>(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<IntPoint3Data>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<IntPoint3Data>(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<UIntPoint3Data>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<UIntPoint3Data>(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<LongPoint3Data>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<LongPoint3Data>(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<ULongPoint3Data>(source, count * 2 + sourceAddr, count, emptys, TagType);
ipres = CompressValues<ULongPoint3Data>(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;
......
......@@ -1920,49 +1920,49 @@ namespace Cdy.Tag
switch (type)
{
case TagType.Byte:
var cval = CompressValues<byte>(source, count * 2 + sourceAddr, count, tims, type);
var cval = CompressValues<byte>(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<short>(source, count * 2 + sourceAddr, count, tims, type);
cval = CompressValues<short>(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<ushort>(source, count * 2 + sourceAddr, count, tims, type);
cval = CompressValues<ushort>(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<int>(source, count * 2 + sourceAddr, count, tims, type);
cval = CompressValues<int>(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<uint>(source, count * 2 + sourceAddr, count, tims, type);
cval = CompressValues<uint>(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<long>(source, count * 2 + sourceAddr, count, tims, type);
cval = CompressValues<long>(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<ulong>(source, count * 2 + sourceAddr, count, tims, type);
cval = CompressValues<ulong>(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<double>(source, count * 2 + sourceAddr, count, tims, type);
cval = CompressValues<double>(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<float>(source, count * 2 + sourceAddr, count, tims, type);
cval = CompressValues<float>(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;
......
......@@ -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;
}
......
......@@ -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;
}
}
/// <summary>
/// 分配内存
/// </summary>
......@@ -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<DateTime, ManualHisDataMemoryBlock> 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<DateTime, ManualHisDataMemoryBlock> 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
/// <returns></returns>
public List<int> 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();
}
/// <summary>
......
......@@ -974,6 +974,10 @@ namespace Cdy.Tag
{
if (!mManualHisDataCach[sfile].ContainsKey(id))
mManualHisDataCach[sfile].Add(id, datablock);
else
{
LoggerService.Service.Warn("SeriseEnginer", "数据存储出现阻塞:"+id);
}
}
else
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册