SzlHandle.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Houdar.PLC.Driver.Simenss.Protocol.Common;
  2. using Houdar.PLC.Driver.Simenss.Protocol.Szl;
  3. namespace Houdar.PLC.Driver.Simenss.ProtocolHandle
  4. {
  5. public class SzlHandle: IPacketHandle
  6. {
  7. public SzlCmd SzlCmd { get; set; }
  8. public SzlRequest SzlRequestFirst { get; set; }
  9. public SzlRequest SzlRequestNext { get; set; }
  10. public SzlResponse SzlResponseFirst { get; set; }
  11. public SzlNextResponse SzlNextResponseNext { get; set; }
  12. public ResultCode ResultCode
  13. {
  14. get;
  15. set;
  16. }
  17. public void Handle(IIsoSender sender)
  18. {
  19. var first = true;
  20. byte seq = 0x00;
  21. bool done = false;
  22. do
  23. {
  24. if (first)
  25. {
  26. SzlRequestFirst.First = true;
  27. SzlRequestFirst.Seq = seq;
  28. SzlRequestFirst.ID = SzlCmd.ID;
  29. SzlRequestFirst.Index = SzlCmd.Index;
  30. SzlResponseFirst = sender.IsoSend<SzlRequest, SzlResponse>(SzlRequestFirst);
  31. if(SzlResponseFirst==null) return;
  32. ResultCode = SzlResponseFirst.Data.Ret;
  33. if (SzlResponseFirst.Params.Err == ResultCode.OK)
  34. {
  35. if (SzlResponseFirst.Data.Ret == ResultCode.OKFF)
  36. {
  37. done = (SzlResponseFirst.Params.Rsvd & 0x00FF) == 0;
  38. seq = SzlResponseFirst.Params.Seq;
  39. }
  40. }
  41. }
  42. else
  43. {
  44. SzlRequestNext = new SzlRequest();
  45. SzlRequestNext.First = false;
  46. SzlRequestNext.Seq = seq;
  47. SzlRequestNext.ID = SzlCmd.ID;
  48. SzlRequestNext.Index = SzlCmd.Index;
  49. SzlNextResponseNext = sender.IsoSend<SzlRequest, SzlNextResponse>(SzlRequestNext);
  50. if (SzlNextResponseNext == null) return;
  51. ResultCode = SzlResponseFirst.Data.Ret;
  52. if (SzlNextResponseNext.Params.Err == ResultCode.OK)
  53. {
  54. if (SzlNextResponseNext.Data.Ret == ResultCode.OKFF)
  55. {
  56. done = (SzlNextResponseNext.Params.Rsvd & 0x00FF) == 0;
  57. seq = SzlNextResponseNext.Params.Seq;
  58. SzlResponseFirst.Data.AddNextData(SzlNextResponseNext.Data.Data, SzlNextResponseNext.Data.DLen);
  59. }
  60. }
  61. }
  62. first = false;
  63. } while (!done && ResultCode == ResultCode.OKFF);
  64. if (ResultCode == ResultCode.OKFF) ResultCode = ResultCode.OK;
  65. }
  66. public SzlHandle()
  67. {
  68. ResultCode = ResultCode.Unknown;
  69. SzlRequestFirst = new SzlRequest();
  70. SzlCmd = SzlInfo.ReadSzlAll;
  71. }
  72. }
  73. }