VceSimulator.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using MECF.Framework.Simulator.Core.Driver;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace CyberX8_Simulator.Devices
  10. {
  11. public class VceSimulator : SerialPortDeviceSimulator
  12. {
  13. private const string EOF = "\n\r";
  14. private const char MSG_DELIMITER = ' ';
  15. private const string VCE_Port = "COM161";
  16. private Regex _action_rule = new Regex(@"\d\d,A,.*");
  17. private Regex _read_rule = new Regex(@"\d\d,R,.*");
  18. private Regex _set_rule = new Regex(@"\d\d,S,.*");
  19. private Regex _curing_rule = new Regex(@"\d\d,P,.*");
  20. public VceSimulator() : base(VCE_Port, -1, EOF, MSG_DELIMITER)
  21. {
  22. }
  23. protected override void ProcessUnsplitMessage(string message)
  24. {
  25. if (string.IsNullOrEmpty(message))
  26. throw new ArgumentException("Hardware command message is invalid");
  27. if (message.Contains(EOF))
  28. {
  29. message = message.Trim();
  30. }
  31. if (_action_rule.IsMatch(message) || _set_rule.IsMatch(message) || _curing_rule.IsMatch(message))
  32. {
  33. OnWriteMessage("_RDY" + EOF);
  34. Thread.Sleep(2000);
  35. OnWriteMessage("_BKGRDY" + EOF);
  36. return;
  37. }
  38. if (_read_rule.IsMatch(message))
  39. {
  40. switch (message)
  41. {
  42. case "00,R,MI":
  43. OnWriteMessage("00,X,MI,1,0,A,3,0,0,0,0,0,0" + EOF);
  44. Thread.Sleep(2000);
  45. OnWriteMessage("_RDY" + EOF);
  46. return;
  47. case "00,R,MI,S":
  48. OnWriteMessage("00,X,MI,XXXXXXXXXX,XXXXXXXXXX,XXXXX?????,??????????" + EOF);
  49. //OnWriteMessage("00,X,MI,0000000000,0000000000,XXXXX?????,??????????" + EOF);
  50. Thread.Sleep(2000);
  51. OnWriteMessage("_RDY" + EOF);
  52. return;
  53. default:
  54. return;
  55. }
  56. }
  57. //string[] strs = message.Split(MSG_DELIMITER);
  58. //Thread.Sleep(2 * 1000);
  59. }
  60. }
  61. }