SerenRfPowerHandler.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. using Aitex.Core.Common.DeviceData;
  2. using MECF.Framework.Common.Communications;
  3. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.RFs.Serens
  4. {
  5. public abstract class SerenRfPowerHandler : HandlerBase
  6. {
  7. public SerenRfPower Device { get; }
  8. private string _command;
  9. protected SerenRfPowerHandler(SerenRfPower device, string command)
  10. : base($"{command}\r")
  11. {
  12. Device = device;
  13. _command = command;
  14. }
  15. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  16. {
  17. SerenRfPowerMessage response = msg as SerenRfPowerMessage;
  18. ResponseMessage = msg;
  19. if (response.RawMessage.Length >= 1)
  20. {
  21. ParseData(response);
  22. }
  23. SetState(EnumHandlerState.Acked);
  24. SetState(EnumHandlerState.Completed);
  25. transactionComplete = true;
  26. return true;
  27. }
  28. protected virtual void ParseData(SerenRfPowerMessage msg)
  29. {
  30. }
  31. }
  32. public class SerenRfPowerSetEchoHandler : SerenRfPowerHandler
  33. {
  34. public SerenRfPowerSetEchoHandler(SerenRfPower device, bool isOn)
  35. : base(device, isOn ? "ECHO" : "NOECHO")
  36. {
  37. Name = "Switch " + (isOn ? "On" : "Off");
  38. }
  39. }
  40. public class SerenRfPowerSwitchOnOffHandler : SerenRfPowerHandler
  41. {
  42. public SerenRfPowerSwitchOnOffHandler(SerenRfPower device, bool isOn)
  43. : base(device, isOn ? "G":"S")
  44. {
  45. Name = "Switch " + (isOn ? "On" : "Off");
  46. }
  47. }
  48. //3 regulation mode
  49. public class SerenRfPowerSetRegulationModeHandler : SerenRfPowerHandler
  50. {
  51. public SerenRfPowerSetRegulationModeHandler(SerenRfPower device, byte address, EnumRfPowerRegulationMode mode)
  52. : base(device, "")
  53. {
  54. Name = "set regulation mode";
  55. }
  56. private static byte GetMode(EnumRfPowerRegulationMode mode)
  57. {
  58. switch (mode)
  59. {
  60. case EnumRfPowerRegulationMode.DcBias:
  61. return 8;
  62. case EnumRfPowerRegulationMode.Forward:
  63. return 6;
  64. case EnumRfPowerRegulationMode.Load:
  65. return 7;
  66. case EnumRfPowerRegulationMode.VALimit:
  67. return 9;
  68. }
  69. return 0;
  70. }
  71. }
  72. //8 set power
  73. public class SerenRfPowerSetPowerHandler : SerenRfPowerHandler
  74. {
  75. public SerenRfPowerSetPowerHandler(SerenRfPower device, int power)
  76. : base(device, power==0 ? $"WS": $"{power} WG")
  77. {
  78. Name = "set power";
  79. }
  80. }
  81. //14 set communication mode
  82. public class SerenRfPowerSetCommModeHandler : SerenRfPowerHandler
  83. {
  84. public SerenRfPowerSetCommModeHandler(SerenRfPower device, byte address, EnumRfPowerCommunicationMode mode)
  85. : base(device, "")
  86. {
  87. Name = "set communication mode";
  88. }
  89. private static byte[] BuildData(EnumRfPowerCommunicationMode mode)
  90. {
  91. byte value = 0;
  92. switch (mode)
  93. {
  94. case EnumRfPowerCommunicationMode.DeviceNet:
  95. value = 16;
  96. break;
  97. case EnumRfPowerCommunicationMode.Diagnostic:
  98. value = 8;
  99. break;
  100. case EnumRfPowerCommunicationMode.EtherCat32:
  101. value = 32;
  102. break;
  103. case EnumRfPowerCommunicationMode.Host:
  104. value = 2;
  105. break;
  106. case EnumRfPowerCommunicationMode.UserPort:
  107. value = 4;
  108. break;
  109. }
  110. return new byte[] { value };
  111. }
  112. }
  113. //13 set caps control mode
  114. public class SerenRfPowerSetCapsCtrlModeHandler : SerenRfPowerHandler
  115. {
  116. public SerenRfPowerSetCapsCtrlModeHandler(SerenRfPower device, byte address, byte mode)
  117. : base(device, "")
  118. {
  119. Name = "set caps control mode";
  120. }
  121. private static byte[] BuildData(byte mode)
  122. {
  123. return new byte[] { mode == 0x01 ? (byte)0x01 : (byte)0x00 };
  124. }
  125. }
  126. //112 set load
  127. public class SerenRfPowerSetLoadHandler : SerenRfPowerHandler
  128. {
  129. public SerenRfPowerSetLoadHandler(SerenRfPower device, byte address, int data)
  130. : base(device, "")
  131. {
  132. Name = "set load";
  133. }
  134. private static byte[] BuildData(int data)
  135. {
  136. return new byte[] { (byte)data, (byte)(data >> 8) };
  137. }
  138. }
  139. //122 set tune
  140. public class SerenRfPowerSetTuneHandler : SerenRfPowerHandler
  141. {
  142. public SerenRfPowerSetTuneHandler(SerenRfPower device, byte address, int data)
  143. : base(device, "")
  144. {
  145. Name = "set tune";
  146. }
  147. private static byte[] BuildData(int data)
  148. {
  149. return new byte[] { (byte)data, (byte)(data >> 8) };
  150. }
  151. }
  152. //155 query comm mode
  153. public class SerenRfPowerQueryCommModeHandler : SerenRfPowerHandler
  154. {
  155. public SerenRfPowerQueryCommModeHandler(SerenRfPower device, byte address)
  156. : base(device, "")
  157. {
  158. Name = "query comm mode";
  159. }
  160. protected override void ParseData(SerenRfPowerMessage response)
  161. {
  162. {
  163. EnumRfPowerCommunicationMode mode = EnumRfPowerCommunicationMode.Undefined;
  164. //switch (response.Data[0])
  165. //{
  166. // case 2:
  167. // mode = EnumRfPowerCommunicationMode.Host;
  168. // break;
  169. // case 4:
  170. // mode = EnumRfPowerCommunicationMode.UserPort;
  171. // break;
  172. // case 8:
  173. // mode = EnumRfPowerCommunicationMode.Diagnostic;
  174. // break;
  175. // case 16:
  176. // mode = EnumRfPowerCommunicationMode.DeviceNet;
  177. // break;
  178. // case 32:
  179. // mode = EnumRfPowerCommunicationMode.EtherCat32;
  180. // break;
  181. //}
  182. Device.NoteCommMode(mode);
  183. }
  184. }
  185. }
  186. //162 query status
  187. public class SerenRfPowerQueryStatusHandler : SerenRfPowerHandler
  188. {
  189. public SerenRfPowerQueryStatusHandler(SerenRfPower device)
  190. : base(device, "Q")
  191. {
  192. Name = "query status";
  193. }
  194. //Response: XXXXXXX_aaaa_bbbbb_cccc_ddddd<cr>
  195. //2320000 0 0 0 1000
  196. protected override void ParseData(SerenRfPowerMessage response)
  197. {
  198. string[] splitData = response.RawMessage.TrimEnd('\r').Split(' ');
  199. if (splitData.Length != 5)
  200. {
  201. Device.NoteError($"{Name}, return data {response.RawMessage} is not valid");
  202. }
  203. else
  204. {
  205. //Device.ControlSource = splitData[0];
  206. if(splitData[0].Length == 7)
  207. {
  208. int status0 = (int)splitData[0][0];
  209. int status1 = (int)splitData[0][1];
  210. int status2 = (int)splitData[0][2];
  211. int status3 = (int)splitData[0][3];
  212. int status4 = (int)splitData[0][4];
  213. int status5 = (int)splitData[0][5];
  214. int status6 = (int)splitData[0][6];
  215. Device.NoteStatus((status3 & 0x08) == 0x08,
  216. (status5 & 0x08) == 0x08 || (status5 & 0x04) == 0x04 || (status5 & 0x01) == 0x01,
  217. (status5 & 0x02) == 0x02);
  218. }
  219. Device.NotePowerSetPoint(int.Parse(splitData[1]));
  220. Device.NoteForwardPower(int.Parse(splitData[2]));
  221. Device.NoteReflectPower( int.Parse(splitData[3]));
  222. }
  223. }
  224. }
  225. //164 query setpoint
  226. public class SerenRfPowerQuerySetPointHandler : SerenRfPowerHandler
  227. {
  228. public SerenRfPowerQuerySetPointHandler(SerenRfPower device, byte address)
  229. : base(device, "")
  230. {
  231. Name = "query setpoint";
  232. }
  233. protected override void ParseData(SerenRfPowerMessage response)
  234. {
  235. //if (response.DataLength != 3)
  236. //{
  237. // Device.NoteError($"{Name}, return data length {response.DataLength}");
  238. //}
  239. //else
  240. //{
  241. // EnumRfPowerRegulationMode regMode = EnumRfPowerRegulationMode.Undefined;
  242. // switch (response.Data[2])
  243. // {
  244. // case 6:
  245. // regMode = EnumRfPowerRegulationMode.Forward;
  246. // break;
  247. // case 7:
  248. // regMode = EnumRfPowerRegulationMode.Load;
  249. // break;
  250. // case 8:
  251. // regMode = EnumRfPowerRegulationMode.DcBias;
  252. // break;
  253. // case 9:
  254. // regMode = EnumRfPowerRegulationMode.VALimit;
  255. // break;
  256. // }
  257. // Device.NoteRegulationModeSetPoint(regMode);
  258. // Device.NotePowerSetPoint(response.Data[0] + (response.Data[1] << 8));
  259. //}
  260. }
  261. }
  262. //165 forward power
  263. public class SerenRfPowerQueryForwardPowerHandler : SerenRfPowerHandler
  264. {
  265. public SerenRfPowerQueryForwardPowerHandler(SerenRfPower device, byte address)
  266. : base(device, "")
  267. {
  268. Name = "Query forward power";
  269. }
  270. protected override void ParseData(SerenRfPowerMessage response)
  271. {
  272. }
  273. }
  274. //166 reflect power
  275. public class SerenRfPowerQueryReflectPowerHandler : SerenRfPowerHandler
  276. {
  277. public SerenRfPowerQueryReflectPowerHandler(SerenRfPower device, byte address)
  278. : base(device, "")
  279. {
  280. Name = "Query reflect power";
  281. }
  282. protected override void ParseData(SerenRfPowerMessage response)
  283. {
  284. }
  285. }
  286. //set serial control mode
  287. public class SerenRfPowerSetSerialModeHandler : SerenRfPowerHandler
  288. {
  289. public SerenRfPowerSetSerialModeHandler(SerenRfPower device)
  290. : base(device, "***")
  291. {
  292. Name = "Set Serial Control Mode";
  293. }
  294. }
  295. }