ESCHVMockPMA.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System;
  2. using MECF.Framework.Simulator.Core.Driver;
  3. namespace Venus_Simulator.Devices
  4. {
  5. class ESCHVMockPMA : SerialPortDeviceSimulator
  6. {
  7. public enum EscHvStatus
  8. {
  9. Unknown,
  10. OFF,
  11. ON,
  12. ERROR
  13. }
  14. private const string EOF = "\r";
  15. private const char MSG_DELIMITER = '_';
  16. private const string MOCKUP_PORT = "COM63";
  17. private int _voltage = 120;
  18. private int _current_limit = 20;
  19. private int _up_ramp_time = 0;
  20. private int _down_ramp_time = 0;
  21. private Random _rd = new Random();
  22. EscHvStatus _simEscHvStatus;
  23. public ESCHVMockPMA() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)
  24. {
  25. _simEscHvStatus = EscHvStatus.ON;
  26. }
  27. protected override void ProcessUnsplitMessage(string message)
  28. {
  29. if (string.IsNullOrEmpty(message))
  30. throw new ArgumentException("Hardware command message is invalid");
  31. var items = message.Split('\r');
  32. foreach (var item in message.Split('\r'))
  33. {
  34. if (item == "")
  35. {
  36. continue;
  37. }
  38. string item2 = item + "\r";
  39. string sRes = "\r\n>";
  40. string str = item2.Trim();
  41. string operation = item2.Substring(0, 2);
  42. int data = 0;
  43. bool bHasValidateData = false;
  44. if (item2.Length > 2)
  45. {
  46. if (int.TryParse(item2.Substring(2), out data))
  47. {
  48. bHasValidateData = true;
  49. }
  50. }
  51. switch (operation)
  52. {
  53. case "SV":
  54. if (bHasValidateData) _voltage = data;
  55. break;
  56. case "SI:":
  57. if (bHasValidateData) _current_limit = data;
  58. break;
  59. case "P+":
  60. if (bHasValidateData) _up_ramp_time = data;
  61. break;
  62. case "P-":
  63. if (bHasValidateData) _down_ramp_time = data;
  64. break;
  65. case "RV":
  66. int out_valtage = _simEscHvStatus == EscHvStatus.ON ? _voltage + _rd.Next(-3, 5) : 0;
  67. sRes = string.Format("RV\r\n\r{0:D4}\n\r>", out_valtage);//$"{out_valtage}\n\r>";
  68. break;
  69. case "R+":
  70. //sRes = $"{_rd.Next(0, _current_limit)}\n\r>"
  71. sRes = string.Format("R+\r\n\r{0:D4}\n\r>", 2);
  72. break;
  73. case "R-":
  74. sRes = string.Format("R-\r\n\r{0:D4}\n\r>", 1);
  75. break;
  76. case "SB":
  77. sRes = string.Format("SB\r{0:D4}\n\r>", _simEscHvStatus == EscHvStatus.ON ? 4 : 0); //$"{(_simEscHvStatus == EscHvStatus.ON ? 4 : 0)}\r\n>";
  78. break;
  79. case "EV":
  80. _simEscHvStatus = EscHvStatus.ON;
  81. break;
  82. case "DV":
  83. _simEscHvStatus = EscHvStatus.OFF;
  84. break;
  85. }
  86. OnWriteMessage(sRes);
  87. }
  88. }
  89. }
  90. }