using MECF.Framework.Simulator.Core.Driver; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; namespace CyberX8_Simulator.Devices { public class VceSimulator : SerialPortDeviceSimulator { private const string EOF = "\n\r"; private const char MSG_DELIMITER = ' '; private const string VCE_Port = "COM161"; private Regex _action_rule = new Regex(@"\d\d,A,.*"); private Regex _read_rule = new Regex(@"\d\d,R,.*"); private Regex _set_rule = new Regex(@"\d\d,S,.*"); private Regex _curing_rule = new Regex(@"\d\d,P,.*"); public VceSimulator() : base(VCE_Port, -1, EOF, MSG_DELIMITER) { } protected override void ProcessUnsplitMessage(string message) { if (string.IsNullOrEmpty(message)) throw new ArgumentException("Hardware command message is invalid"); if (message.Contains(EOF)) { message = message.Trim(); } if (_action_rule.IsMatch(message) || _set_rule.IsMatch(message) || _curing_rule.IsMatch(message)) { OnWriteMessage("_RDY" + EOF); Thread.Sleep(2000); OnWriteMessage("_BKGRDY" + EOF); return; } if (_read_rule.IsMatch(message)) { switch (message) { case "00,R,MI": OnWriteMessage("00,X,MI,1,0,A,3,0,0,0,0,0,0" + EOF); Thread.Sleep(2000); OnWriteMessage("_RDY" + EOF); return; case "00,R,MI,S": OnWriteMessage("00,X,MI,XXXXXXXXXX,XXXXXXXXXX,XXXXX?????,??????????" + EOF); //OnWriteMessage("00,X,MI,0000000000,0000000000,XXXXX?????,??????????" + EOF); Thread.Sleep(2000); OnWriteMessage("_RDY" + EOF); return; default: return; } } //string[] strs = message.Split(MSG_DELIMITER); //Thread.Sleep(2 * 1000); } } }