using System; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using Aitex.Core.UI.Control; using MECF.Framework.Simulator.Core.Driver; using Aitex.Core.Util; using CyberX8_Core; namespace CyberX8_Simulator.Devices { class TMSimulatorServer : SocketDeviceSimulator { private readonly Regex _check_load = new Regex(@"CHECK LOAD\s+(\d+)\s+ARM\s+(A|B)\s*"); private readonly Regex _move_arm = new Regex(@"(PLACE|PICK)\s+(\d+)\s+SLOT\s+(\d+)\s+ARM\s+(A|B)\s+(\w{4})\s*"); private readonly Regex _move_wafer = new Regex(@"(PLACE|PICK)\s+(\d+)\s+SLOT\s+(\d+)\s+ARM\s+(A|B)\s*"); private PeriodicJob _HwThread; public TMSimulatorServer() : base(1102, -1, "\r\n", ' ') { _HwThread = new PeriodicJob(500, OnSendEvent, "EfemHardware", true); } private bool OnSendEvent() { return true; } protected override void ProcessUnsplitMessage(string str) { if(str.Contains("HOME") || str.Contains("GOTO") || str.Contains("XFER")) { Thread.Sleep(1500); OnWriteMessage("_RDY"); } if (str.Contains("RQ WAF_CEN DATA")) { string t = new Random().Next(0, 359).ToString().PadLeft(6, '0'); string r = new Random().Next(0, 50000).ToString().PadLeft(6, '0'); OnWriteMessage($"WAF_CEN RT 000000 000000 000000 000000 LFT 000000 000000 000000 000000 OFFSET {r} {t}"); OnWriteMessage("_RDY"); } if (_check_load.IsMatch(str)) { Match result = _check_load.Match(str); string station = result.Groups[1].Value; string arm = result.Groups[2].Value; OnWriteMessage(string.Format($"LOAD {arm} OFF")); } else if(_move_arm.IsMatch(str)) { // @"(PLACE|PICK)\s+(\d+)\s+SLOT\s+(\d+)\s+ARM\s+(A|B)\s+(\w{4})\s+" Match result = _move_arm.Match(str); string operation = result.Groups[1].Value; string station = result.Groups[2].Value; string slot = result.Groups[3].Value; string arm = result.Groups[4].Value; string dir = result.Groups[5].Value; Thread.Sleep(5000); OnWriteMessage("_RDY"); } else if(_move_wafer.IsMatch(str)) { // @"(PLACE|PICK)\s+(\d+)\s+SLOT\s+(\d+)\s+ARM\s+(A|B)\s+" Match result = _move_wafer.Match(str); string operation = result.Groups[1].Value; string station = result.Groups[2].Value; string slot = result.Groups[3].Value; string arm = result.Groups[4].Value; Thread.Sleep(5000); OnWriteMessage("_RDY"); } } } }