/// <summary> /// 初始化 /// </summary> public void Init() { if (mRealEnginer != null) { if (mManager == null) { mManager = new Cdy.Tag.HisDatabaseSerise().Load(); } mLastProcesser = new TimerMemoryCacheProcesser() { Id = 0 }; mRecordTimerProcesser.Clear(); mRecordTimerProcesser.Add(mLastProcesser); mValueChangedProcesser.Clear(); mValueChangedProcesser.Add(mLastValueChangedProcesser); // var count = MemoryCachTime * 1000 / MemoryTimeTick; var count = CachMemoryTime; var realbaseaddr = mRealEnginer.Memory; IntPtr realHandle = mRealEnginer.MemoryHandle; HisRunTag mHisTag = null; foreach (var vv in mManager.HisTags) { var realaddr = (int)mRealEnginer.GetDataAddr((int)vv.Value.Id); switch (vv.Value.TagType) { case Cdy.Tag.TagType.Bool: case Cdy.Tag.TagType.Byte: mHisTag = new ByteHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.Short: case Cdy.Tag.TagType.UShort: mHisTag = new ShortHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.Int: case Cdy.Tag.TagType.UInt: mHisTag = new IntHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.Long: case Cdy.Tag.TagType.ULong: mHisTag = new LongHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.Float: mHisTag = new FloatHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.Double: mHisTag = new DoubleHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.DateTime: mHisTag = new DateTimeHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.String: mHisTag = new StirngHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.UIntPoint: case Cdy.Tag.TagType.IntPoint: mHisTag = new IntPointHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.UIntPoint3: case Cdy.Tag.TagType.IntPoint3: mHisTag = new IntPoint3HisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.ULongPoint: case Cdy.Tag.TagType.LongPoint: mHisTag = new LongPointHisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; case Cdy.Tag.TagType.ULongPoint3: case Cdy.Tag.TagType.LongPoint3: mHisTag = new LongPoint3HisRunTag() { Id = vv.Value.Id, Circle = vv.Value.Circle, Type = vv.Value.Type, TagType = vv.Value.TagType, RealMemoryAddr = realbaseaddr, RealMemoryPtr = realHandle, RealValueAddr = realaddr, CompressType = vv.Value.CompressType, Parameters = vv.Value.Parameters }; break; } mHisTag.MaxCount = count; mHisTags.Add(vv.Key, mHisTag); if (mHisTag.Type == Cdy.Tag.RecordType.Timer) { if (!mLastProcesser.AddTag(mHisTag)) { mLastProcesser = new TimerMemoryCacheProcesser() { Id = mLastProcesser.Id + 1 }; mLastProcesser.AddTag(mHisTag); mRecordTimerProcesser.Add(mLastProcesser); } } else { if (!mLastValueChangedProcesser.AddTag(mHisTag)) { mLastValueChangedProcesser = new ValueChangedMemoryCacheProcesser() { Name = "ValueChanged" + mTagCount }; mValueChangedProcesser.Add(mLastValueChangedProcesser); } } mTagCount++; } } AllocMemory(); }
/// <summary> /// /// </summary> /// <param name="manager"></param> /// <param name="realEnginer"></param> public HisEnginer(Cdy.Tag.HisDatabase manager, Cdy.Tag.RealEnginer realEnginer) { mManager = manager; mRealEnginer = realEnginer; }