WriteRequest.cs 1.5 KB

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