C#串口类封装 SuperSerialPort

C#串口类封装 SuperSerialPort

基于SerialPort类做了简单的封装方便调用

代码

    /// 
    /// SuperSerialPort
    /// 
    public class SuperSerialPort
    {

        private SerialPort CommPort = new SerialPort();

        public SuperSerialPort()
        {
            CommPort.DataReceived += serialport_DataReceived;
        }

        private StringBuilder SerialDataReceived = new StringBuilder();

        private void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //读取数据
            int length = CommPort.BytesToRead;
            byte[] buffers = new byte[length];
            CommPort.Read(buffers, 0, length);

            //调用委托事件
            DataReceived?.Invoke(buffers);
        }

        #region 公有属性
        /// 
        /// 端口
        /// 
        public string PortName
        {
            get { return CommPort.PortName; }
        }

        /// 
        /// 获取 端口列表 
        /// 
        public List GetPortNames()
        {
            return SerialPort.GetPortNames().ToList();
        }


        /// 
        /// 获取 奇偶校验位 列表 
        /// 
        /// 
        public List GetParitys()
        {
            List list = new List();
            foreach (string str in Enum.GetNames(typeof(Parity)))
            {
                list.Add(str);
            }
            return list;
        }

        /// 
        /// 获取 停止位 列表 
        /// 
        /// 
        public List GetStopBits()
        {
            List list = new List();
            foreach (string str in Enum.GetNames(typeof(StopBits)))
            {
                list.Add(str);
            }
            return list;
        }

        /// 
        /// 打开串口
        /// 
        public void Open()
        {
            if (!CommPort?.IsOpen)
            {
                CommPort.Open();
            }

        }

        /// 
        /// 关闭串口
        /// 
        public void Close()
        {
            if (CommPort?.IsOpen)
            {
                CommPort.Close();
            }
        }
        #endregion

        #region 设置串口信息
        /// 
        /// 设置串口信息
        /// 
        public void SetPortInfo(string PortName, string Parity, string Stop, string Data, string BaudRate)
        {
            CommPort.PortName = PortName;
            CommPort.Parity = (Parity)Enum.Parse(typeof(Parity), Parity);
            CommPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), Stop);
            CommPort.DataBits = int.Parse(Data);
            CommPort.BaudRate = int.Parse(BaudRate);
        }
        #endregion

        #region HexToByte
        /// 
        /// HexToByte
        /// 
        private byte[] HexToByte(string msg)
        {
            msg = msg.Replace(" ", "");
            byte[] comBuffer = new byte[msg.Length / 2];
            for (int i = 0; i < msg.Length; i += 2)
                comBuffer[i / 2] = (byte)Convert.ToByte(msg.Substring(i, 2), 16);
            return comBuffer;
        }
        #endregion

        #region ByteToHex
        /// 
        /// ByteToHex
        /// 
        private string ByteToHex(byte[] comByte)
        {
            StringBuilder builder = new StringBuilder(comByte.Length * 3);
            foreach (byte data in comByte)
                builder.Append(Convert.ToString(data, 16).PadLeft(2, '0'));
            return builder.ToString().ToUpper();
        }
        #endregion

        #region 接收事件
        /// 
        /// 
        /// 
        public Action DataReceived { get; set; }
        #endregion

        #region 发送事件
        /// 
        /// 发送命令
        /// 
        /// 十六进制字符串
        public void Send(string cmd)
        {
            if (!string.IsNullOrEmpty(cmd) && CommPort.IsOpen)
            {
                byte[] serOrder = HexToByte(cmd);

                CommPort.Write(serOrder, 0, serOrder.Length);
            }
        }

        /// 
        /// byte数组
        /// 
        /// 
        public void Send(byte[] cmdbytes)
        {
            if (cmdbytes?.Length > 0 && CommPort.IsOpen)
            {
                CommPort.Write(cmdbytes, 0, cmdbytes.Length);

            }
        }
        #endregion

    }
目前只封装了这些需要的话以后再加,,,,,,,,,

你可能感兴趣的:(C#串口类封装 SuperSerialPort)