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;
                //处理错误
            }
        }
    }


  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值