UploadHandle.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using PlcSiemens.O;
  2. using PlcSiemens.Protocol.Common;
  3. using PlcSiemens.Protocol.Upload;
  4. using ByteBuffer = PlcSiemens.O.ByteBuffer;
  5. namespace PlcSiemens.ProtocolHandle
  6. {
  7. public class UploadHandle : IPacketHandle
  8. {
  9. public UploadRequest Request { get; set; }
  10. public UploadResponse Response { get; set; }
  11. public byte UploadID { get; set; }
  12. public ResultCode ResultCode { get; set; }
  13. public UploadHandle()
  14. {
  15. Request = new UploadRequest();
  16. }
  17. public void Handle(IIsoSender sender)
  18. {
  19. Request.UploadID = UploadID;
  20. Response = sender.IsoSend<UploadRequest, UploadResponse>(Request);
  21. ResultCode = Response.Header.Error;
  22. bool done = Response.Params.EoU == 0;
  23. ByteBuffer byteBuffer = ByteBuffer.Allocate();
  24. byteBuffer.Push(Response.Data.Datas);
  25. while (!done && ResultCode == ResultCode.OK)
  26. {
  27. Response = sender.IsoSend<UploadRequest, UploadResponse>(Request);
  28. ResultCode = Response.Header.Error;
  29. byteBuffer.Push(Response.Data.Datas);
  30. done = Response.Params.EoU == 0;
  31. }
  32. Request.UploadID = UploadID;
  33. Request.PduType = PduType.PduEndUpload;
  34. Response = sender.IsoSend<UploadRequest, UploadResponse>(Request);
  35. ResultCode = Response.Header.Error;
  36. done = Response.Params.EoU == 0;
  37. }
  38. }
  39. }