AdTecGeneratorMockPMA.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using MECF.Framework.Simulator.Core.Driver;
  5. namespace Venus_Simulator.Devices
  6. {
  7. class AdTecGeneratorMockPMA : SerialPortDeviceSimulator
  8. {
  9. public enum GeneratorStatus
  10. {
  11. Unknown,
  12. OFF,
  13. ON,
  14. ERROR
  15. }
  16. public static GeneratorStatus _simGeneratorStatus;
  17. private const string EOF = "\r";
  18. private const char MSG_DELIMITER = '_';
  19. private const string MOCKUP_PORT = "COM37";
  20. public AdTecGeneratorMockPMA() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)
  21. {
  22. _simGeneratorStatus = GeneratorStatus.Unknown;
  23. }
  24. protected override void ProcessUnsplitMessage(string message)
  25. {
  26. if (string.IsNullOrEmpty(message))
  27. throw new ArgumentException("Hardware command message is invalid");
  28. string sRes = string.Empty;
  29. if (message.Contains(EOF))
  30. {
  31. message = message.Remove(message.Length - 1);
  32. }
  33. string[] msgs = message.Split('\r');
  34. foreach(string msg in msgs)
  35. {
  36. switch (msg)
  37. {
  38. case "Q":
  39. if (_simGeneratorStatus == GeneratorStatus.ON)
  40. {
  41. sRes = "2010000 12345 00900 00010 45678\r";
  42. }
  43. else if (_simGeneratorStatus == GeneratorStatus.OFF)
  44. {
  45. sRes = "2000000 12345 00000 00000 45678\r";
  46. }
  47. break;
  48. case "G":
  49. _simGeneratorStatus = GeneratorStatus.ON;
  50. sRes = "\r";
  51. break;
  52. case "S":
  53. _simGeneratorStatus = GeneratorStatus.OFF;
  54. sRes = "\r";
  55. break;
  56. default:
  57. break;
  58. }
  59. //Thread.Sleep(200);
  60. sRes += "\r";
  61. OnWriteMessage(sRes);
  62. }
  63. }
  64. }
  65. }