| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | 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");            var items = message.Split('\r');            foreach (var item in message.Split('\r'))            {                if (item == "")                {                    continue;                }                string item2 = item + "\r";                string sRes = "\r\n>";                string str = item2.Trim();                string operation = item2.Substring(0, 2);                int data = 0;                bool bHasValidateData = false;                if (item2.Length > 2)                {                    if (int.TryParse(item2.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);            }        }    }}
 |