| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | using System;using MECF.Framework.Simulator.Core.Driver;namespace Venus_Simulator.Devices{    class ESCHVMockPMA : SerialPortDeviceSimulator    {        public enum EscHvStatus        {            Unknown,            OFF,            ON,            ERROR        }        private const string EOF = "\r";        private const char MSG_DELIMITER = '_';        private const string MOCKUP_PORT = "COM63";        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 ESCHVMockPMA() : 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>";                    break;                case "R-":                    sRes = $"{_rd.Next(0, -_current_limit)}\n\r>";                    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);        }    }}
 |