C# CSharp SerialPort串口工具类

这几天要做产线的一个治具,需要用到串口,这里就研究了下。

挺简单的,都是静态函数,直接调用即可

这个类能够实现串口的同步读和异步读方法

不要放在UI线程,会导致阻塞的。可以使用backgroundworker

需要using System.IO.Ports;


 public class SerialPortHelp
    {
        //测试串口状态
        public static bool Test(SerialPort serialport)
        {
            try
            {
                serialport.Open();
                serialport.Close();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        //函数会直接发送一串字符串
        static public  bool Send(string data,SerialPort serialport)
        {
            try
            {
                serialport.Write(data);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        //发送二进制
        static public bool SendBinary(byte[] data, SerialPort serialport)
        {
            try
            {
                serialport.Write(data, 0, data.Length);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        //同步读 直到超时
        static public string SynRead(int TimeoutMs, SerialPort serialport)
        {
            string data;
            serialport.ReadTimeout = TimeoutMs;
            try
            {
                //阻塞到读取数据或超时
                byte firstByte = Convert.ToByte(serialport.ReadByte());
                int bytesRead = serialport.BytesToRead;
                byte[] bytesData = new byte[bytesRead + 1];
                bytesData[0] = firstByte;
                for (int i = 1; i <= bytesRead; i++)
                    bytesData[i] = Convert.ToByte(serialport.ReadByte());
                data = System.Text.Encoding.Default.GetString(bytesData);
                return data;
            }
            catch (Exception)
            {
               
                return string.Empty;
                //处理超时错误
            }
        }
        //异步读
        static public string AsyRead(int waitTimeMs, SerialPort serialport)
        {
            string data;
            System.Threading.Thread.Sleep(waitTimeMs);
            try
            {
                data = serialport.ReadExisting();
                return data;
            }
            catch (Exception)
            {
                return string.Empty;
                //处理错误
            }
        }
    }


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页