WriteRequest.cs 1.6 KB

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