HipaceHandler.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. using MECF.Framework.Common.Communications;
  2. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TurboPumps.PfeifferHipace
  3. {
  4. public abstract class HipaceHandler : HandlerBase
  5. {
  6. protected const string QueryDataText = "=?";
  7. public HipaceTurboPump PumpDevice { get; }
  8. protected HipaceHandler(HipaceTurboPump pump, string deviceAddress, bool isQuery, string parameter, string data)
  9. : base(BuildMessage(deviceAddress, isQuery, parameter, data))
  10. {
  11. PumpDevice = pump;
  12. }
  13. private static string BuildMessage(string deviceAddress, bool isQuery, string parameter, string data)
  14. {
  15. string msg = deviceAddress + (isQuery ? "00" : "10") + parameter + data.Length.ToString("D2") + data;
  16. return msg + CalcSum(msg).ToString("D3") + "\r";
  17. }
  18. public override bool HandleMessage(MessageBase msg, out bool handled)
  19. {
  20. ResponseMessage = msg;
  21. handled = true;
  22. return true;
  23. }
  24. private static int CalcSum(string value)
  25. {
  26. int sum = 0;
  27. foreach (var item in value)
  28. {
  29. sum += (int)item;
  30. }
  31. return sum % 256;
  32. }
  33. }
  34. //010
  35. public class HipacePumpStationHandler : HipaceHandler
  36. {
  37. public HipacePumpStationHandler(HipaceTurboPump pump, string deviceAddress, bool isOn, bool isQuery)
  38. : base(pump, deviceAddress, isQuery, "010", isQuery ? QueryDataText : (isOn ? "111111" : "000000"))
  39. {
  40. Name = "Pump " + (isOn ? "On" : "Off");
  41. }
  42. public override bool HandleMessage(MessageBase msg, out bool handled)
  43. {
  44. var result = msg as HipaceMessage;
  45. if (result.IsError)
  46. {
  47. PumpDevice.SetError(result.Data);
  48. }
  49. else
  50. {
  51. if (result.Data == "111111")
  52. {
  53. PumpDevice.NoteOnOff(true);
  54. }
  55. else if (result.Data == "000000")
  56. {
  57. PumpDevice.NoteOnOff(false);
  58. }
  59. else
  60. {
  61. PumpDevice.SetError(result.Data + " format error");
  62. }
  63. }
  64. ResponseMessage = msg;
  65. handled = true;
  66. return true;
  67. }
  68. }
  69. //023
  70. public class HipaceMotorPumpHandler : HipaceHandler
  71. {
  72. public HipaceMotorPumpHandler(HipaceTurboPump pump, string deviceAddress, bool isOn)
  73. : base(pump, deviceAddress, false, "023", isOn ? "111111" : "000000")
  74. {
  75. }
  76. public override bool HandleMessage(MessageBase msg, out bool handled)
  77. {
  78. var result = msg as HipaceMessage;
  79. if (result.IsError)
  80. {
  81. PumpDevice.SetError(result.Data);
  82. }
  83. else
  84. {
  85. if (result.Data == "111111")
  86. {
  87. PumpDevice.NoteOnOff(true);
  88. }
  89. else if (result.Data == "000000")
  90. {
  91. PumpDevice.NoteOnOff(false);
  92. }
  93. else
  94. {
  95. PumpDevice.SetError(result.Data + "format error");
  96. }
  97. }
  98. ResponseMessage = msg;
  99. handled = true;
  100. return true;
  101. }
  102. }
  103. //303
  104. public class HipaceQueryErrorHandler : HipaceHandler
  105. {
  106. public HipaceQueryErrorHandler(HipaceTurboPump pump, string deviceAddress)
  107. : base(pump, deviceAddress, true, "303", QueryDataText)
  108. {
  109. Name = "Query Error";
  110. }
  111. public override bool HandleMessage(MessageBase msg, out bool handled)
  112. {
  113. var result = msg as HipaceMessage;
  114. if (result.IsError)
  115. {
  116. PumpDevice.SetError(result.Data);
  117. }
  118. else
  119. {
  120. if (int.TryParse(result.Data, out int code))
  121. {
  122. PumpDevice.SetErrorCode(code);
  123. }
  124. else
  125. {
  126. PumpDevice.SetError(result.Data + "format error");
  127. }
  128. }
  129. ResponseMessage = msg;
  130. handled = true;
  131. return true;
  132. }
  133. }
  134. //398
  135. public class HipaceQuerySpeedHandler : HipaceHandler
  136. {
  137. public HipaceQuerySpeedHandler(HipaceTurboPump pump, string deviceAddress)
  138. : base(pump, deviceAddress, true, "398", QueryDataText)
  139. {
  140. Name = "Query Speed";
  141. }
  142. public override bool HandleMessage(MessageBase msg, out bool handled)
  143. {
  144. var result = msg as HipaceMessage;
  145. if (result.IsError)
  146. {
  147. PumpDevice.SetError(result.Data);
  148. }
  149. else
  150. {
  151. if (int.TryParse(result.Data, out int value))
  152. {
  153. PumpDevice.SetSpeed(value);
  154. }
  155. else
  156. {
  157. PumpDevice.SetError(result.Data + "format error");
  158. }
  159. }
  160. ResponseMessage = msg;
  161. handled = true;
  162. return true;
  163. }
  164. }
  165. //346
  166. public class HipaceQueryTemperatureHandler : HipaceHandler
  167. {
  168. public HipaceQueryTemperatureHandler(HipaceTurboPump pump, string deviceAddress)
  169. : base(pump, deviceAddress, true, "346", QueryDataText)
  170. {
  171. Name = "Query Temperature";
  172. }
  173. public override bool HandleMessage(MessageBase msg, out bool handled)
  174. {
  175. var result = msg as HipaceMessage;
  176. if (result.IsError)
  177. {
  178. PumpDevice.SetError(result.Data);
  179. }
  180. else
  181. {
  182. if (int.TryParse(result.Data, out int value))
  183. {
  184. PumpDevice.SetTemperature(value);
  185. }
  186. else
  187. {
  188. PumpDevice.SetError(result.Data + "format error");
  189. }
  190. }
  191. ResponseMessage = msg;
  192. handled = true;
  193. return true;
  194. }
  195. }
  196. //307
  197. public class HipaceAccelerateHandler : HipaceHandler
  198. {
  199. public HipaceAccelerateHandler(HipaceTurboPump pump, string deviceAddress)
  200. : base(pump, deviceAddress, true, "307", QueryDataText)
  201. {
  202. Name = "Query Accelerate";
  203. }
  204. public override bool HandleMessage(MessageBase msg, out bool handled)
  205. {
  206. var result = msg as HipaceMessage;
  207. if (result.IsError)
  208. {
  209. PumpDevice.SetError(result.Data);
  210. }
  211. else
  212. {
  213. if (result.Data == "111111")
  214. {
  215. PumpDevice.SetIsAccelerate(true);
  216. }
  217. else if (result.Data == "000000")
  218. {
  219. PumpDevice.SetIsAccelerate(false);
  220. }
  221. else
  222. {
  223. PumpDevice.SetError(result.Data + "format error");
  224. }
  225. }
  226. ResponseMessage = msg;
  227. handled = true;
  228. return true;
  229. }
  230. }
  231. //306
  232. public class HipaceAtSpeedHandler : HipaceHandler
  233. {
  234. public HipaceAtSpeedHandler(HipaceTurboPump pump, string deviceAddress)
  235. : base(pump, deviceAddress, true, "306", QueryDataText)
  236. {
  237. Name = "Query At Speed";
  238. }
  239. public override bool HandleMessage(MessageBase msg, out bool handled)
  240. {
  241. var result = msg as HipaceMessage;
  242. if (result.IsError)
  243. {
  244. PumpDevice.SetError(result.Data);
  245. }
  246. else
  247. {
  248. if (result.Data == "111111")
  249. {
  250. PumpDevice.SetAtSpeed(true);
  251. }
  252. else if (result.Data == "000000")
  253. {
  254. PumpDevice.SetAtSpeed(false);
  255. }
  256. else
  257. {
  258. PumpDevice.SetError(result.Data + "format error");
  259. }
  260. }
  261. ResponseMessage = msg;
  262. handled = true;
  263. return true;
  264. }
  265. }
  266. //305
  267. public class HipaceOverTempHandler : HipaceHandler
  268. {
  269. public HipaceOverTempHandler(HipaceTurboPump pump, string deviceAddress)
  270. : base(pump, deviceAddress, true, "305", QueryDataText)
  271. {
  272. Name = "Query over temp";
  273. }
  274. public override bool HandleMessage(MessageBase msg, out bool handled)
  275. {
  276. var result = msg as HipaceMessage;
  277. if (result.IsError)
  278. {
  279. PumpDevice.SetError(result.Data);
  280. }
  281. else
  282. {
  283. if (result.Data == "111111")
  284. {
  285. PumpDevice.SetOverTemp(true);
  286. }
  287. else if (result.Data == "000000")
  288. {
  289. PumpDevice.SetOverTemp(false);
  290. }
  291. else
  292. {
  293. PumpDevice.SetError(result.Data + "format error");
  294. }
  295. }
  296. ResponseMessage = msg;
  297. handled = true;
  298. return true;
  299. }
  300. }
  301. }