IsoDataPdu.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using PlcSiemens.O;
  2. using PlcSiemens.Protocol.Common;
  3. using PlcSiemens.Protocol.Header;
  4. namespace PlcSiemens.Protocol.Iso
  5. {
  6. public class IsoDataPdu
  7. {
  8. public TpktHeader Tpkt { get; set; } // TPKT Header
  9. public CotpDataHeader Cotp { get; set; }// COPT Header for DATA EXCHANGE
  10. public ushort Length { get; set; }
  11. public IsoDataPdu()
  12. {
  13. Tpkt = new TpktHeader();
  14. Cotp = new CotpDataHeader();
  15. }
  16. public void GetBuffer(ByteBuffer buffer)
  17. {
  18. Tpkt.GetByteBuffer(buffer);
  19. Cotp.GetByteBuffer(buffer);
  20. }
  21. public void Build()
  22. {
  23. Tpkt.Version = StaticConst.IsoTcpVersion;
  24. Tpkt.Reserved = 0;
  25. Tpkt.Length = (ushort)(Length + 0x07);
  26. Cotp.Length = (byte)(Cotp.PacketLength - 1);//去掉长度占用的一个字节
  27. Cotp.PduType = (byte)PduType.DataTransfer;
  28. Cotp.EoTNum = (byte)PduType.EndTransfer;
  29. }
  30. public void Build(ByteBuffer buffer)
  31. {
  32. Tpkt.Version = buffer.PopByte();
  33. Tpkt.Reserved = buffer.PopByte();
  34. Tpkt.Length = buffer.PopUshort();
  35. Length = Tpkt.Length;
  36. Cotp.Length = buffer.PopByte();
  37. Cotp.PduType = buffer.PopByte();
  38. Cotp.EoTNum = buffer.PopByte();
  39. }
  40. }
  41. }