| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | using System;using MECF.Framework.Simulator.Core.Driver;namespace Venus_Simulator.Devices{    class PendulumValveMockPMD : SerialPortDeviceSimulator    {        public enum PendulumValveStatus        {            Unknown,            OFF,            ON,            ERROR        }        private const string EOF = "\r";        private const char MSG_DELIMITER = '_';        private const string MOCKUP_PORT = "COM79";        private int _pressure = 120;        private int _position = 500;        private bool _bHold = false;        private Random _rd = new Random();        PendulumValveStatus _simPendulumValveStatus;        public PendulumValveMockPMD() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)        {            _simPendulumValveStatus = PendulumValveStatus.Unknown;        }        protected override void ProcessUnsplitMessage(string message)        {            if (string.IsNullOrEmpty(message))                throw new ArgumentException("Hardware command message is invalid");            if(_bHold == false)            {                _pressure += _rd.Next(-10, 10);                _position += _rd.Next(-50, 50);            }            if(_simPendulumValveStatus == PendulumValveStatus.OFF)            {                _position = 0;            }                        string sRes = string.Empty;            string str = message.Trim();            switch(str)            {                case "P:":                    sRes = string.Format("P:{0:D8}\r\n", _pressure);                    break;                case "A:":                    sRes = string.Format("A:{0:D6}\r\n", _position);                    break;                case "C:":                    _bHold = false;                    _simPendulumValveStatus = PendulumValveStatus.OFF;                    sRes = "C:\r\n";                    break;                case "O":                    _bHold = false;                    _simPendulumValveStatus = PendulumValveStatus.ON;                    sRes = "O:\r\n";                    break;                case "H:":                    _bHold = true;                    sRes = "H:\r\n";                    break;                case "i:30":                    sRes = "i:3012100000\r\n";                    break;                default:                    {                        if (str.Contains("S:"))                        {                            int pressure;                            if (int.TryParse(str.Substring(2, 8), out pressure))                            {                                _pressure = pressure;                            }                            _bHold = false;                            sRes = "S:\r\n";                        }                        else if (str.StartsWith("R:"))                        {                            int position;                            if (int.TryParse(str.Substring(2, 6), out position))                            {                                _position = position;                            }                            _bHold = false;                            sRes = "R:\r\n";                        }                        else                            return;                    }                    break;            }                OnWriteMessage(sRes);        }    }}
 |