串口通信

public System.IO.Ports.SerialPort BoundCom = new System.IO.Ports.SerialPort();
private StringBuilder BoundCombuilder = new StringBuilder();//避免在事件处理方法中反复的创建,定义到外面。
private bool CheckComPortScanner(string port,string rate)
{
    try
    {
    BoundCom.PortName = port;  //端口名称,默认COM1
    BoundCom.BaudRate = Convert.ToInt32(rate);  //波特率,默认9600
    BoundCom.DataBits = 8;  //数据位,默认8
    BoundCom.StopBits = System.IO.Ports.StopBits.One;  //停止位,默认 System.IO.Ports.StopBits.One
    BoundCom.Parity = System.IO.Ports.Parity.None;  //奇偶校验,默认 System.IO.Ports.Parity.None
    BoundCom.Encoding = System.Text.Encoding.GetEncoding("GB2312");
    BoundCom.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(BoundCom_DataReceived);
    if (!BoundCom.IsOpen)
    {
        BoundCom.Open();
    }
    RBAppText("串口端口:" + port + "   波特率:" + rate + "  已开启监听");
    }
    catch (Exception ex)
    {
    RBAppText("错误:串口端口:" + port + "   波特率:" + rate + ",校验失败,错误原因:" + ex.Message);
    return false;
    }         
    return true;
}

private void BoundCom_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
 {
     if (!BoundCom.IsOpen) return;//串口已经关闭
     this.Invoke((EventHandler)(delegate
     {
     byte[] buffer = new byte[BoundCom.BytesToRead];
     BoundCom.Read(buffer, 0, buffer.Length);
     string str =Encoding.Default.GetString(buffer);
     this.txtSNo.Text = str;

     RBAppText("成功:串口" + BoundCom.PortName + "数据已接收");
     }));
 }

作者:Joe.Fan
         
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/fanxingthink/p/5728274.html