| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | using System;using MECF.Framework.Simulator.Core.Driver;using System.Linq;namespace Venus_Simulator.Devices{    class TurboPumpMockPMC : SerialPortDeviceSimulator    {        public enum TurboPumpStatus        {            Unknown,            OFF,            ON,            ERROR        }        private readonly byte PUMP_ON_FLAG = 0x02;        private readonly byte RESERVE_FLAG = 0x80;        private readonly byte ISO_VALVE_OPEN_FLAG = 0x01;        private readonly byte WATER_VALVE_OEPN_FLAG = 0x08;        private readonly byte VALVE_AT_SPEED_FLAG = 0x40;        private byte pumpStatus        {            get            {                return (byte)((_simTurboPumpStatus == TurboPumpStatus.ON ? PUMP_ON_FLAG : 0) + RESERVE_FLAG);            }        }        private byte valveStatus        {            get            {                return (byte)(ISO_VALVE_OPEN_FLAG + WATER_VALVE_OEPN_FLAG + VALVE_AT_SPEED_FLAG + RESERVE_FLAG);            }        }        private const string EOF = "\r";        private const char MSG_DELIMITER = '_';        private const string MOCKUP_PORT = "COM4";        private int _speed = 200;        private int _temperature = 80;        private Random _rd = new Random();        TurboPumpStatus _simTurboPumpStatus;        public TurboPumpMockPMC() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)        {            _simTurboPumpStatus = TurboPumpStatus.Unknown;        }        protected override void ProcessUnsplitMessage(string message)        {            if (string.IsNullOrEmpty(message))                throw new ArgumentException("Hardware command message is invalid");            string[] strs = message.Trim().Split('\r');            foreach(string msg in strs)            {                string sRes = string.Empty;                string str = msg.Trim();                if (str.Length == 0)                    continue;                if (str.Contains("STA"))                {                    if (_simTurboPumpStatus == TurboPumpStatus.ON)                    {                        _speed = 200;                    }                    else                    {                        _speed = 0;                    }                    string strData = string.Format("#000,000,{0:D5},000,000,000,000,000,00,00000,{1:D3},099,0123456789012345678901234\r", _speed + _rd.Next(0, 5), _temperature + _rd.Next(-5, 5));                    byte[] byteArray = System.Text.Encoding.Default.GetBytes(strData);                    byteArray[6] = pumpStatus;                    byteArray[7] = valveStatus;                    OnWriteMessage(byteArray);                    continue;                }                else if (str.Contains("TMPON"))                {                    sRes = "#000,OK\r";                    _simTurboPumpStatus = TurboPumpStatus.ON;                }                else if (str.Contains("TMPOFF"))                {                    sRes = "#000,OK\r";                    _simTurboPumpStatus = TurboPumpStatus.OFF;                }                else                    continue;                OnWriteMessage(sRes);            }        }    }}
 |