ESCHVMockPMC.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using MECF.Framework.Simulator.Core.Driver;
  3. namespace Venus_Simulator.Devices
  4. {
  5. class ESCHVMockPMC : 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 = "COM18";
  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 ESCHVMockPMC() : 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. string sRes = "\r\n>";
  32. string str = message.Trim();
  33. string operation = message.Substring(0, 2);
  34. int data = 0;
  35. bool bHasValidateData = false;
  36. if(message.Length > 2)
  37. {
  38. if (int.TryParse(message.Substring(2), out data))
  39. {
  40. bHasValidateData = true;
  41. }
  42. }
  43. switch (operation)
  44. {
  45. case "SV":
  46. if (bHasValidateData) _voltage = data;
  47. break;
  48. case "SI:":
  49. if (bHasValidateData) _current_limit = data;
  50. break;
  51. case "P+":
  52. if (bHasValidateData) _up_ramp_time = data;
  53. break;
  54. case "P-":
  55. if (bHasValidateData) _down_ramp_time = data;
  56. break;
  57. case "RV":
  58. int out_valtage = _simEscHvStatus == EscHvStatus.ON ? _voltage + _rd.Next(-3, 5) : 0;
  59. sRes = string.Format("RV\r\n\r{0:D4}\n\r>", out_valtage);//$"{out_valtage}\n\r>";
  60. break;
  61. case "R+":
  62. //sRes = $"{_rd.Next(0, _current_limit)}\n\r>"
  63. sRes = string.Format("R+\r\n\r{0:D4}\n\r>", 2);
  64. break;
  65. case "R-":
  66. sRes = string.Format("R-\r\n\r{0:D4}\n\r>", 1);
  67. break;
  68. case "SB":
  69. sRes = string.Format("SB\r{0:D4}\n\r>", _simEscHvStatus == EscHvStatus.ON ? 4 : 0); //$"{(_simEscHvStatus == EscHvStatus.ON ? 4 : 0)}\r\n>";
  70. break;
  71. case "EV":
  72. _simEscHvStatus = EscHvStatus.ON;
  73. break;
  74. case "DV":
  75. _simEscHvStatus = EscHvStatus.OFF;
  76. break;
  77. }
  78. OnWriteMessage(sRes);
  79. }
  80. }
  81. }