DETMSimulatorServer.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using Aitex.Core.Util;
  2. using MECF.Framework.Simulator.Core.Driver;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Net.Http.Headers;
  7. using System.Text;
  8. using System.Text.RegularExpressions;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace Venus_Simulator.Devices
  12. {
  13. public class DETMSimulatorServer : SocketDeviceSimulator
  14. {
  15. private readonly Regex _check_load = new Regex(@"CHECK LOAD\s+(\d)+\s+(A|B)\s*");
  16. private readonly Regex _move_arm = new Regex(@"(PLACE|PICK)\s+(\d+)\s+ARM\s+(A|B)\s+(\w{4})\s*");
  17. private readonly Regex _move_wafer = new Regex(@"(PLACE|PICK)\s+(\d+)\s+ARM\s+(A|B)\s*");
  18. private readonly Regex _rq_arm = new Regex(@"(RQ)\s+(LOAD)\s+(ARM)\s*");
  19. private readonly Regex _rq_speed = new Regex(@"(RQ)\s+(MOTIONPARA)\s*");
  20. private readonly Regex _set_speed = new Regex(@"(SET)\s+(MOTIONPARA)\s*");
  21. private readonly Regex _store_speed = new Regex(@"(STORE)\s+(MOTIONPARA)\s*");
  22. private PeriodicJob _HwThread;
  23. private string WithWaferSpeed = "0300";
  24. private string NoWaferSpeed = "0300";
  25. public DETMSimulatorServer() : base(1103, -1, "\n", ' ')
  26. {
  27. _HwThread = new PeriodicJob(500, OnSendEvent, "honghuRobot", true);
  28. }
  29. private bool OnSendEvent()
  30. {
  31. return true;
  32. }
  33. protected override void ProcessUnsplitMessage(string str)
  34. {
  35. if (str.Contains("HOME") || str.Contains("GOTO") || str.Contains("XFER") || str.Contains("HALT"))
  36. {
  37. OnWriteMessage("_RDY");
  38. }
  39. if (_rq_speed.IsMatch(str))
  40. {
  41. switch (str.Split(' ')[2])
  42. {
  43. case "WITHWAFER":
  44. OnWriteMessage($"MOTIONPARA WITHWAFER SPDPCT ALL {WithWaferSpeed} 0100 0100");
  45. OnWriteMessage("_RDY");
  46. break;
  47. case "NOWAFER":
  48. OnWriteMessage($"MOTIONPARA NOWAFER SPDPCT ALL {NoWaferSpeed} 0100 0100");
  49. OnWriteMessage("_RDY");
  50. break;
  51. default:
  52. OnWriteMessage(str);
  53. OnWriteMessage($"_ERR 350");
  54. break;
  55. }
  56. }
  57. if (_set_speed.IsMatch(str))
  58. {
  59. switch (str.Split(' ')[2])
  60. {
  61. case "WITHWAFER":
  62. WithWaferSpeed = str.Split(' ')[5];
  63. OnWriteMessage(str);
  64. OnWriteMessage("_RDY");
  65. break;
  66. case "NOWAFER":
  67. NoWaferSpeed = str.Split(' ')[5];
  68. OnWriteMessage(str);
  69. OnWriteMessage("_RDY");
  70. break;
  71. default:
  72. OnWriteMessage(str);
  73. OnWriteMessage($"_ERR 350");
  74. break;
  75. }
  76. }
  77. if (_store_speed.IsMatch(str))
  78. {
  79. OnWriteMessage(str);
  80. OnWriteMessage("_RDY");
  81. }
  82. if (_rq_arm.IsMatch(str))
  83. {
  84. //OnWriteMessage(string.Format($"LOAD {arm} OFF"));
  85. //OnWriteMessage(string.Format($"CHECK LOAD"));
  86. OnWriteMessage("_RDY");
  87. }
  88. //if (str.Contains("RQ WAF_CEN DATA"))
  89. //{
  90. // string t = new Random().Next(0, 359).ToString().PadLeft(6, '0');
  91. // string r = new Random().Next(0, 50000).ToString().PadLeft(6, '0');
  92. // OnWriteMessage($"WAF_CEN RT 000000 000000 000000 000000 LFT 000000 000000 000000 000000 OFFSET {r} {t}");
  93. // OnWriteMessage("_RDY");
  94. //}
  95. if (_check_load.IsMatch(str))
  96. {
  97. Match result = _check_load.Match(str);
  98. string station = result.Groups[1].Value;
  99. string arm = result.Groups[2].Value;
  100. //OnWriteMessage(string.Format($"LOAD {arm} OFF"));
  101. //OnWriteMessage(string.Format($"CHECK LOAD"));
  102. OnWriteMessage("_RDY");
  103. }
  104. else if (_move_arm.IsMatch(str))
  105. {
  106. // @"(PLACE|PICK)\s+(\d+)\s+SLOT\s+(\d+)\s+ARM\s+(A|B)\s+(\w{4})\s+"
  107. Match result = _move_arm.Match(str);
  108. string operation = result.Groups[1].Value;
  109. string station = result.Groups[2].Value;
  110. string slot = result.Groups[3].Value;
  111. string arm = result.Groups[4].Value;
  112. string dir = result.Groups[5].Value;
  113. Thread.Sleep(6000);
  114. OnWriteMessage("_RDY");
  115. }
  116. else if (_move_wafer.IsMatch(str))
  117. {
  118. // @"(PLACE|PICK)\s+(\d+)\s+SLOT\s+(\d+)\s+ARM\s+(A|B)\s+"
  119. Match result = _move_wafer.Match(str);
  120. string operation = result.Groups[1].Value;
  121. string station = result.Groups[2].Value;
  122. string slot = result.Groups[3].Value;
  123. string arm = result.Groups[4].Value;
  124. Thread.Sleep(6000);
  125. OnWriteMessage("_RDY");
  126. }
  127. }
  128. }
  129. }