| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | using Core.Communication.Transport;using PLC.Siemens.Protocol.Common;namespace PLC.Siemens.Protocol.DateTime{    public class DateTimeData    {        public byte Ret { get; set; }//0xFF        public byte Size { get; set; }        public ushort Length { get; set; }        public byte Rsvd { get; set; }        public byte HiYear { get; set; }        public byte[] Time { get; set; }//³¤¶È8        public ushort PacketLength { get { return 0x0E; } }        public DateTimeData()        {            Time = new byte[8];        }        public void Build(ByteBuffer buffer)        {            Ret = buffer.PopByte();            Size = buffer.PopByte();            Length = buffer.PopUshort();            Rsvd = buffer.PopByte();            HiYear = buffer.PopByte();            Time = buffer.PopBytes(8);        }        public void Build(System.DateTime dt)        {            Ret = 0xFF;            Size = (byte) TsType.TsResOctet;            Length = 0x000A;            Rsvd = 0x00;            HiYear = 0x19; // *must* be 19 tough it's not the Hi part of the year...                        Time[0] = WordToBcd((ushort)(dt.Year - 2000));            Time[1] = WordToBcd((ushort)(dt.Month));            Time[2] = WordToBcd((ushort)(dt.Day));            Time[3] = WordToBcd((ushort)(dt.Hour));            Time[4] = WordToBcd((ushort)(dt.Minute));            Time[5] = WordToBcd((ushort)(dt.Second));            Time[6] = 0x00;            Time[7] = WordToBcd((ushort)(dt.DayOfWeek));        }        public void GetByteBuffer(ByteBuffer buffer)        {            buffer.Push(Ret);            buffer.Push(Size);            buffer.Push(Length);            buffer.Push(Rsvd);            buffer.Push(HiYear);            buffer.Push(Time);        }        private static byte WordToBcd(ushort value)        {            return (byte)(((value / 10) << 4) | (value % 10));        }    }}
 |