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);
- }
- }
- }
- }
|