DataBlockOfTypeHandle.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System.Collections.Generic;
  2. using PLC.Siemens.Protocol.Common;
  3. using PLC.Siemens.Protocol.ListBlocks;
  4. using PLC.Siemens.O;
  5. namespace PLC.Siemens.ProtocolHandle
  6. {
  7. public class DataBlockOfTypeHandle : IPacketHandle
  8. {
  9. public List<DataBlockOfTypeRequest> Requests { get; set; }
  10. public BlockType BlockType { get; set; }
  11. public List<DataBlockOfTypeResponse> Responses { get; set; }
  12. public ResultCode ResultCode { get; set; }
  13. public DataBlockOfTypeHandle()
  14. {
  15. ResultCode = ResultCode.Unknown;
  16. Requests = new List<DataBlockOfTypeRequest>();
  17. Responses = new List<DataBlockOfTypeResponse>();
  18. }
  19. public void Handle(IIsoSender sender)
  20. {
  21. var first = true;
  22. byte seq = 0x00;
  23. var done = false;
  24. do
  25. {
  26. var request = new DataBlockOfTypeRequest();
  27. request.First = first;
  28. request.Seq = seq;
  29. request.BlockType = BlockType;
  30. var response = sender.IsoSend<DataBlockOfTypeRequest, DataBlockOfTypeResponse>(request);
  31. ResultCode = response.Data.Ret;
  32. if (response.Params.Err == ResultCode.OK)
  33. {
  34. if (response.Data.Ret == ResultCode.OKFF)
  35. {
  36. done = (response.Params.Rsvd & 0x00FF) == 0;
  37. seq = response.Params.Seq;
  38. Responses.Add(response);
  39. }
  40. }
  41. if (ResultCode == ResultCode.OKFF)
  42. ResultCode = ResultCode.OK;
  43. first = false;
  44. } while (!done && ResultCode == ResultCode.OK);
  45. }
  46. }
  47. }