using System; using MECF.Framework.Simulator.Core.Driver; namespace Venus_Simulator.Devices { class ESCHVMockPMC : SerialPortDeviceSimulator { public enum EscHvStatus { Unknown, OFF, ON, ERROR } private const string EOF = "\r"; private const char MSG_DELIMITER = '_'; private const string MOCKUP_PORT = "COM18"; private int _voltage = 120; private int _current_limit = 20; private int _up_ramp_time = 0; private int _down_ramp_time = 0; private Random _rd = new Random(); EscHvStatus _simEscHvStatus; public ESCHVMockPMC() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER) { _simEscHvStatus = EscHvStatus.ON; } protected override void ProcessUnsplitMessage(string message) { if (string.IsNullOrEmpty(message)) throw new ArgumentException("Hardware command message is invalid"); string sRes = "\r\n>"; string str = message.Trim(); string operation = message.Substring(0, 2); int data = 0; bool bHasValidateData = false; if(message.Length > 2) { if (int.TryParse(message.Substring(2), out data)) { bHasValidateData = true; } } switch (operation) { case "SV": if (bHasValidateData) _voltage = data; break; case "SI:": if (bHasValidateData) _current_limit = data; break; case "P+": if (bHasValidateData) _up_ramp_time = data; break; case "P-": if (bHasValidateData) _down_ramp_time = data; break; case "RV": int out_valtage = _simEscHvStatus == EscHvStatus.ON ? _voltage + _rd.Next(-3, 5) : 0; sRes = string.Format("RV\r\n\r{0:D4}\n\r>", out_valtage);//$"{out_valtage}\n\r>"; break; case "R+": //sRes = $"{_rd.Next(0, _current_limit)}\n\r>" sRes = string.Format("R+\r\n\r{0:D4}\n\r>", 2); break; case "R-": sRes = string.Format("R-\r\n\r{0:D4}\n\r>", 1); break; case "SB": sRes = string.Format("SB\r{0:D4}\n\r>", _simEscHvStatus == EscHvStatus.ON ? 4 : 0); //$"{(_simEscHvStatus == EscHvStatus.ON ? 4 : 0)}\r\n>"; break; case "EV": _simEscHvStatus = EscHvStatus.ON; break; case "DV": _simEscHvStatus = EscHvStatus.OFF; break; } OnWriteMessage(sRes); } } }