123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using PlcSiemens.O;
- using PlcSiemens.Protocol.Common;
- namespace PlcSiemens.Protocol.Header
- {
- public class HeaderPacket
- {
- public byte P { get; set; } // Telegram ID, always 32
- public byte PduType { get; set; } // Header type 1 or 7
- public ushort AbEx { get; set; } // AB currently unknown, maybe it can be used for long numbers.
- public ushort Sequence { get; set; }// Message ID. This can be used to make sure a received answer
- public ushort ParLen { get; set; } // Length of parameters which follow this header
- public ushort DataLen { get; set; } // Length of data which follow the parameters
- public ushort PacketLength
- { get { return 0x0A; } }
- public virtual void Build(ByteBuffer buffer)
- {
- P = buffer.PopByte();
- PduType = buffer.PopByte();
- AbEx = buffer.PopUshort();
- Sequence = buffer.PopUshort();
- ParLen = buffer.PopUshort(); //ReqFunNegotiateParams自身数据长度 不包含head的
- DataLen = buffer.PopUshort();
- }
- public void Build(PduType pduType, ushort parLen, ushort dataLen)
- {
- P = 0x32;
- PduType = (byte)pduType;
- AbEx = 0x0000;
- Sequence = GetNextWord();
- ParLen = parLen;
- DataLen = dataLen;
- }
- public void GetByteBuffer(ByteBuffer buffer)
- {
- buffer.Push(P);
- buffer.Push(PduType);
- buffer.Push(AbEx);
- buffer.Push(Sequence);
- buffer.Push(ParLen);
- buffer.Push(DataLen);
- }
- private static ushort _cntword = 1;
- protected static ushort GetNextWord()
- {
- if (_cntword == 0xFFFF)
- _cntword = 1;
- return _cntword++;
- }
- }
- }
|