IsoDataPdu.cs 1.4 KB

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