DataBlockOfTypeHandle.cs 1.7 KB

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