| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | using System;using MECF.Framework.Simulator.Core.Driver;namespace Venus_Simulator.Devices{    class ESCHVMockPMB : SerialPortDeviceSimulator    {        public enum EscHvStatus        {            Unknown,            OFF,            ON,            ERROR        }        private const string EOF = "\r";        private const char MSG_DELIMITER = '_';        private const string MOCKUP_PORT = "COM81";        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 ESCHVMockPMB() : 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);        }    }}
 |