PfeifferPumpA100Handler.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. using Aitex.Core.RT.Device;
  2. using MECF.Framework.Common.Communications;
  3. using Newtonsoft.Json.Linq;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6. using System.Text;
  7. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Pumps.PfeifferPumpA100
  8. {
  9. public abstract class PfeifferPumpA100Handler : HandlerBase
  10. {
  11. public PfeifferPumpA100 Device { get; }
  12. public string _command;
  13. protected string _parameter;
  14. protected PfeifferPumpA100Handler(PfeifferPumpA100 device, string command, string parameter)
  15. : base(BuildMessage(device.ADR, command, parameter))
  16. {
  17. Device = device;
  18. _command = command;
  19. _parameter = parameter;
  20. Name = command;
  21. }
  22. private static string _startLine = "#";
  23. private static string _endLine = "\r";
  24. private static string BuildMessage(string address, string command, string parameter)
  25. {
  26. if (string.IsNullOrEmpty(parameter))
  27. return _startLine + address + command + _endLine;
  28. else
  29. return _startLine + address + command + parameter + _endLine;
  30. }
  31. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  32. {
  33. PfeifferPumpA100Message response = msg as PfeifferPumpA100Message;
  34. ResponseMessage = msg;
  35. if (response.IsAck)
  36. {
  37. SetState(EnumHandlerState.Acked);
  38. var dataList = response.Data.ToList();
  39. if (dataList.Contains(0x45) && dataList.Contains(0x52))
  40. {
  41. Device.NoteError($"Command '{_command}' Error: {string.Join(",", response.Data)}");
  42. msg.IsError = true;
  43. }
  44. else
  45. {
  46. SetState(EnumHandlerState.Completed);
  47. transactionComplete = true;
  48. Device.NoteError(null);
  49. return true;
  50. }
  51. }
  52. transactionComplete = false;
  53. return false;
  54. }
  55. }
  56. public class PfeifferPumpA100RawCommandHandler : PfeifferPumpA100Handler
  57. {
  58. public PfeifferPumpA100RawCommandHandler(PfeifferPumpA100 device, string command, string parameter)
  59. : base(device, command, parameter)
  60. {
  61. }
  62. public override bool HandleMessage(MessageBase msg, out bool handled)
  63. {
  64. if (base.HandleMessage(msg, out handled))
  65. {
  66. var result = msg as PfeifferPumpA100Message;
  67. }
  68. return true;
  69. }
  70. }
  71. public class PfeifferPumpA100SimpleSwitchHandler : PfeifferPumpA100Handler
  72. {
  73. public PfeifferPumpA100SimpleSwitchHandler(PfeifferPumpA100 device, string command, string parameter)
  74. : base(device, command, parameter)
  75. {
  76. }
  77. public override bool HandleMessage(MessageBase msg, out bool handled)
  78. {
  79. if (base.HandleMessage(msg, out handled))
  80. {
  81. Device.NoteSwitchCompleted(_command, _parameter.Contains("ON"));
  82. }
  83. return true;
  84. }
  85. }
  86. public class PfeifferPumpSetPumpParameterHandler : PfeifferPumpA100Handler
  87. {
  88. public PfeifferPumpSetPumpParameterHandler(PfeifferPumpA100 device, string parameter)
  89. : base(device, "SET", parameter)
  90. {
  91. }
  92. public override bool HandleMessage(MessageBase msg, out bool handled)
  93. {
  94. if (base.HandleMessage(msg, out handled))
  95. {
  96. Device.NoteSetParaCompleted();
  97. }
  98. return true;
  99. }
  100. }
  101. public class PfeifferPumpA100ReadPumpStatusHandler : PfeifferPumpA100Handler
  102. {
  103. public PfeifferPumpA100ReadPumpStatusHandler(PfeifferPumpA100 device)
  104. : base(device, "STA", null)
  105. {
  106. }
  107. public override bool HandleMessage(MessageBase msg, out bool handled)
  108. {
  109. if (base.HandleMessage(msg, out handled))
  110. {
  111. var result = msg as PfeifferPumpA100Message;
  112. if (result.Data.Length != 32)
  113. {
  114. Device.NoteError("Invalid 'RunParameter'response, the length is not 32");
  115. }
  116. else
  117. {
  118. //Device.NotePumpStatus(result.Data);
  119. var status = result.Data[0];
  120. var alarm1 = result.Data[29];
  121. var warning = result.Data[30];
  122. var alarm2 = result.Data[31];
  123. Device.IsOn = (status & 0b_0100_0000) > 0;
  124. Device.IsError = (alarm1 & 0b_0000_0001) > 0 || (warning & 0b_0000_0001) > 0 || (warning & 0b_0001_0000) > 0 || (alarm2 & 0b_0001_0000) > 0;
  125. Device.IsOverTemperature = (warning & 0b_0001_0000) > 0 || (alarm2 & 0b_0001_0000) > 0;
  126. }
  127. }
  128. return true;
  129. }
  130. }
  131. public class PfeifferPumpA100ReadSetStateHandler : PfeifferPumpA100Handler
  132. {
  133. public PfeifferPumpA100ReadSetStateHandler(PfeifferPumpA100 device)
  134. : base(device, "LEV", null)
  135. {
  136. }
  137. public override bool HandleMessage(MessageBase msg, out bool handled)
  138. {
  139. if (base.HandleMessage(msg, out handled))
  140. {
  141. var result = msg as PfeifferPumpA100Message;
  142. if (result.Data.Length != 136)
  143. {
  144. Device.NoteError("Invalid 'RunParameter'response, the length is not 67");
  145. }
  146. else
  147. {
  148. //Device.NoteReadSetState(result.Data);
  149. }
  150. }
  151. return true;
  152. }
  153. }
  154. }