| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | using System;using System.Text;using Houdar.PLC.Driver.Simenss.Protocol.Common;using ByteBuffer = Houdar.Core.Communication.Transport.ByteBuffer;namespace Houdar.PLC.Driver.Simenss.Protocol.ListBlocks{    public class DataBlockInfoDataResponse    {        public byte Ret { get; set; }        public byte Size { get; set; }        public ushort Length { get; set; }        public byte CstB { get; set; }        public BlockType BlkType { get; set; }        public ushort CstW1 { get; set; }        public ushort CstW2 { get; set; }        public ushort CstPp { get; set; }        public byte Unknown1 { get; set; }        public byte BlkFlags { get; set; }        public BlockLangType BlkLang { get; set; }        public SubBlockType SubBlkType { get; set; }        public ushort BlkNumber { get; set; }        public uint LenLoadMem { get; set; }        public byte[] BlkSec { get; set; }//[4]        //public uint CodeTimeMs { get; set; }        //public ushort CodeTimeDy { get; set; }        //public uint IntfTimeMs { get; set; }        //public ushort IntfTimeDy { get; set; }        public System.DateTime CodeDateTime { get; set; }        public System.DateTime IntfDateTime { get; set; }        public ushort SbbLen { get; set; }        public ushort AddLen { get; set; }        public ushort LocDataLen { get; set; }        public ushort Mc7Len { get; set; }        public string Author { get; set; }//[8]        public string Family { get; set; }//[8]        public string Header { get; set; }//[8]        public byte Version { get; set; }        public byte Unknown2 { get; set; }        public ushort BlkChksum { get; set; }        public byte[] Resvd1 { get; set; }//[4]        public byte[] Resvd2 { get; set; }//[4]        private BlockType GetBlockType(SubBlockType subBlockType)        {            switch (subBlockType)            {                case SubBlockType.OB: return BlockType.OB;                case SubBlockType.DB: return BlockType.DB;                case SubBlockType.SDB: return BlockType.SDB;                case SubBlockType.FC: return BlockType.FC;                case SubBlockType.SFC: return BlockType.SFC;                case SubBlockType.FB: return BlockType.FB;                case SubBlockType.SFB: return BlockType.SFB;                default: return 0;            };        }        public void Build(ByteBuffer buffer)        {            Ret = buffer.PopByte();            Size = buffer.PopByte();            Length = buffer.PopUshort();            CstB = buffer.PopByte();            BlkType = (BlockType)buffer.PopByte();            CstW1 = buffer.PopUshort();            CstW2 = buffer.PopUshort();            CstPp = buffer.PopUshort();            Unknown1 = buffer.PopByte();            BlkFlags = buffer.PopByte();            BlkLang = (BlockLangType)buffer.PopByte();            SubBlkType = (SubBlockType)buffer.PopByte();            BlkType = GetBlockType(SubBlkType);//根据SunblockType            BlkNumber = buffer.PopUshort();            LenLoadMem = buffer.PopUint();            BlkSec = buffer.PopBytes(4);// { get; set; }//[4]            var codeTimeMs = buffer.PopUint();//毫秒时间             var codeTimeDy = buffer.PopUshort();//天数 开始时间1984/1/1            var intfTimeMs = buffer.PopUint();//毫秒时间            var intfTimeDy = buffer.PopUshort();//天数 开始时间1984/1/1            System.DateTime date = new System.DateTime(1984, 1, 1);            CodeDateTime = date.AddDays(codeTimeDy).AddMilliseconds(codeTimeMs);            IntfDateTime = date.AddDays(intfTimeDy).AddMilliseconds(intfTimeMs);            SbbLen = buffer.PopUshort();            AddLen = buffer.PopUshort();            LocDataLen = buffer.PopUshort();            Mc7Len = buffer.PopUshort();            var author = buffer.PopBytes(8);//{ get; set; }//[8]            var family = buffer.PopBytes(8);//{ get; set; }//[8]            var header = buffer.PopBytes(8);//{ get; set; }//[8]            Author = Encoding.UTF8.GetString(author).TrimEnd('\0');            Family = Encoding.UTF8.GetString(family).TrimEnd('\0');            Header = Encoding.UTF8.GetString(header).TrimEnd('\0');            Version = buffer.PopByte();            Unknown2 = buffer.PopByte();            BlkChksum = buffer.PopUshort();            Resvd1 = buffer.PopBytes(4);//{ get; set; }//[4]            Resvd2 = buffer.PopBytes(4);// { get; set; }//[4]        }        /// <summary>Returns a string that represents the current object.</summary>        /// <returns>A string that represents the current object.</returns>        //public override string ToString()        //{        //    return $"Block Type   : {BlkType}\r\n" +        //           $"Block Number : {BlkNumber}\r\n" +        //           $"Block Lang   : {BlkLang}\r\n" +        //           $"Block Flags  : {Convert.ToString(BlkFlags, 2).PadLeft(8,'0')}\r\n" +        //           $"MC7 Size     : {Mc7Len}\r\n" +        //           $"Load Size    : {LenLoadMem}\r\n" +        //           $"Local Data   : {LocDataLen}\r\n" +        //           $"SBB Length   : {SbbLen}\r\n" +        //           $"CheckSum     : {BlkChksum.ToString("X4")}\r\n" +        //           $"Version      : {(Version/16.0).ToString("F1")}\r\n" +        //           $"Code Date    : {CodeDateTime}\r\n" +        //           $"Intf.Date    : {IntfDateTime}\r\n" +        //           $"Author       : {Author}\r\n" +        //           $"Family       : {Family}\r\n" +        //           $"Header       : {Header}";        //}    }}
 |