| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | using System;using System.Collections.Generic;using System.IO.Ports;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MECF.Framework.Simulator.Core.Driver{    public enum SerialType    {        ASCII=0,        BUFFER=1    }    public class BaseSerialSimulator    {        public event Action<string> MessageIn;        public event Action<string> MessageOut;        public bool IsEnabled        {            get { return _serialPort != null && _serialPort.IsOpen; }        }        public string PortName        {            get { return _serialPort.PortName; }            set { _serialPort.PortName = value; }        }        public bool IsConnected { get;set;}        private SerialPort _serialPort;        private SerialType _type;        public BaseSerialSimulator(string portName, SerialType type=SerialType.ASCII)        {            _serialPort = new SerialPort(portName);            _serialPort.DataReceived += SerialPort_DataReceived;            _type = type;        }        public void Disable()        {            try            {                _serialPort.Close();            }            catch            {            }            IsConnected = false;        }        /// <summary>        /// 连接        /// </summary>        public void Enable()        {            try            {                _serialPort.Open();                IsConnected = true;            }            catch            {                IsConnected = false;            }        }        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)        {            int length = _serialPort.BytesToRead;            if (length > 0)            {                byte[] data = new byte[length];                _serialPort.Read(data, 0, length);                if(_type==SerialType.ASCII)                {                    string str=ASCIIEncoding.ASCII.GetString(data);                    MessageIn(str);                    ProcessMessageIn(str);                }                else                {                    string str = MessageConvert(data);                    MessageIn(str);                    ProcessMessageBuffer(data);                }            }        }        protected virtual string MessageConvert(byte[] byt)        {            return BitConverter.ToString(byt).Replace("-", " ");        }        protected virtual void ProcessMessageIn(string msg)        {        }        protected virtual void ProcessMessageBuffer(byte[] byt)        {        }        public void WriteBuffer(byte[] byt)        {            string str=MessageConvert(byt);            try            {                _serialPort.Write(byt,0,byt.Length);                MessageOut(str);            }            catch            {                IsConnected=false;            }        }        public void WriteMessage(string msg)        {            try            {                _serialPort.WriteLine(msg);                MessageOut(msg);            }            catch            {                IsConnected=false;            }        }    }}
 |