C# CSharp SerialPort串口工具类

来源:互联网 发布:长沙软件开发 编辑:程序博客网 时间:2024/04/28 13:35

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

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

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

不要放在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;                //处理错误            }        }    }


0 0
原创粉丝点击