C#串口通信随笔

1. 自动获取本机串口号

  调用SerialPort.GetPortNames()方法

string[] portNames = SerialPort.GetPortNames();//获取所有可用串口的名字
//如果获取到串口名称,将名称加到comboBox Items内
if (portNames != 0)
{
    for(int i=0; i < portNames.Length; i++)
    {
        comboBox1.Items.Add(portNames[i]).ToString();
    }
}
//如果获取不到串口名称,就将comboBox Item显示为COM1~COM20
else
{
     for(int i=0; i < portNames.Length; i++)
    {
        comboBox1.Items.Add(portNames[i]).ToString();
    }     
}
    comboBox1.SelectIndex = 0;//设置串口显示的串口名为Items内第一个

2. 串口連接其他設置羅列出選項

  1)  波特率: 1200bps/2400bps/4800bps/9600bps/19200bps...

  2)  數據位: 5/6/7/8

  3)  校驗位: None/Odd/Even

  4)  停止位: 0/1/1.5/2

  通過comboBox.Items.Add()方法羅列出來

3. 串口連接

  1)  聲明一個串口類

    SerialPort sp = new SerialPort();

  2)  打開sp這個串行端口連接

    sp.Open( );

  3)  發送指令

    sp.Write(要發送的字節數組, 從零開始的字節偏移量, 要寫入的字節數);

  4)  接收串口回复數據

    a. 定義DataReceived事件,當串口收到數據後觸發此事件,放在load函數內

      sp.DataReceived += new SerialDataReceivedEventHandler(處理接收數據的方法/函數);

    b. 處理接收數據的方法/函數 詳解     

try
{
    List<byte> buffer = new List<byte>(4096);//新建一個byte的List
    int n = sp.BytesToRead;//定義一個n來獲取接收緩衝區中數據的字節數
    byte[] ReceiveBytes = new byte[1024 * 1024];//中轉完整接收字節數組
    byte[] buf = new byte[n];//新建一個字節數組,長度為n,中轉不確定是否完整的接收數組
    sp.Read(buf, 0, n);//從sp輸入緩衝區讀取n個字節並將這些字節寫入字節數組中指定的偏移量0處。
    buffer.AddRange(buf);//將buf字節數組裡的元素添加到buffer list內
    //完整性判斷
    while (buffer.Count >= 5)//設備地址 功能碼 長度 2字節校驗位
    {
        if (buffer[0] == 0x01)
        {
            int len = buffer[2];
            if (buffer.Count < len + 5)  break;//數據尚未接收完整
            buffer.CopyTo(0, ReceiveBytes, 0, len+5);//得到完整數據,將數據複製到ReceiveBytes中
            buffer.RemoveRange(0, len+5);//將buffer中從0開始len+5長度的數據移除
        }
        byte[] ReceiveData = new byte[len + 5];//完整的接收數組
        for (int i =0; i < len+5, i++)
        {
            ReceiveDate[i] = ReceiveBytes[i];//將中轉的完整的接收數組賦值給完整的接收數組
        }
     }
}
catch (Exception ex)//出現異常時顯示異常
{
    MessageBox.Show(DateTime.Now.ToString("HH:mm:ss") + " 接收數據處出現異常 " + ex.Message);
}        

  over~~~

  

posted @ 2019-11-11 17:13  努力向上的小蜜蜂  阅读(316)  评论(0)    收藏  举报