WriteRequest.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System.Collections.Generic;
  2. using Core.Communication.Transport;
  3. using Core.Util.Extension;
  4. using PLC.Siemens.Protocol.Common;
  5. using PLC.Siemens.Protocol.Header;
  6. using PLC.Siemens.Protocol.ReadData;
  7. using PLC.Siemens.O;
  8. namespace PLC.Siemens.Protocol.WriteData
  9. {
  10. public class WriteRequest:IBuildRequest
  11. {
  12. public HeaderPacket Header { get; set; }
  13. public WriteParamsRequest Params { get; set; }
  14. public WriteDataRequest[] Data { get; set; }
  15. public List<DataItem> DataItems { get; set; }
  16. public WriteRequest()
  17. {
  18. Header = new HeaderPacket();
  19. Params = new WriteParamsRequest();
  20. }
  21. public void Build()
  22. {
  23. Params.Build(DataItems);
  24. Data = new WriteDataRequest[DataItems.Count];
  25. ushort dataLength = 0;
  26. for (int i = 0; i < DataItems.Count; i++)
  27. {
  28. var tmp = new WriteDataRequest();
  29. Data[i] = tmp;
  30. var dataItem = DataItems[i];
  31. tmp.Build(dataItem, i == DataItems.Count - 1);
  32. dataLength += tmp.PacketLength;
  33. }
  34. ushort paramsLength = Params.PacketLength;
  35. Header.Build(PduType.Request, paramsLength, dataLength);
  36. }
  37. public ByteBuffer GetBuffer()
  38. {
  39. ByteBuffer buffer = ByteBuffer.Allocate();
  40. Header.GetByteBuffer(buffer);
  41. Params.GetByteBuffer(buffer);
  42. Data.ForEach(t => t.GetByteBuffer(buffer));
  43. return buffer;
  44. }
  45. }
  46. }