1. 程式人生 > >C# CSharp SerialPort串列埠工具類

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;
                //處理錯誤
            }
        }
    }