123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using PlcSiemens.O;
- using PlcSiemens.Protocol.Common;
- namespace PlcSiemens.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));
- }
- }
- }
|