首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 串口通信實戰:封裝 SerialPort 類完整 WinForms 示例

     編輯:關於C#

本文提供基於 System.IO.Ports.SerialPort 的串口通信 WinForms 完整測試程序,含參數配置、收發十六進制數據、異常處理。

核心類:mycom (封裝 SerialPort)

程式碼中直接使用 mycom 類 (應封裝 SerialPort),屬性對應標準串口參數:

  • PortNum (1~4 對應 COM1~COM4)
  • BaudRate (9600 等)
  • ByteSize (8)
  • Parity (0=None, 1=Odd, 2=Even, 3=Mark, 4=Space)
  • StopBits (1=1位, 2=1.5位, 3=2位)
  • ReadTimeout (毫秒)

關鍵功能代碼片段

初始化與打開串口

private void Form1_Load(object sender, EventArgs e) {
    mycom1.PortNum = iPort;
    mycom1.BaudRate = iRate;
    mycom1.ByteSize = bSize;
    mycom1.Parity = bParity;
    mycom1.StopBits = bStopBits;
    mycom1.ReadTimeout = iTimeout;
    if (OpenCom()) msg.AppendText("串口初始化成功...\r\n");
    else msg.AppendText("串口初始化失敗!\r\n");
}

public bool OpenCom() {
    try {
        if (mycom1.Opened) { mycom1.Close(); mycom1.Open(); }
        else { mycom1.Open(); }
        return true;
    } catch (Exception ex) { MessageBox.Show("錯誤:" + ex.Message); return false; }
}

發送十六進制數據

private void button1_Click(object sender, EventArgs e) {
    if (string.IsNullOrEmpty(t_send.Text)) { MessageBox.Show("發送數據為空!"); return; }
    byte[] sendBytes = ParseHexString(t_send.Text); // 解析 "02 45 66 FA" 格式
    int sent = mycom1.Write(sendBytes);
    msg.AppendText($"\r\n發送數據({sent}):{FormatHex(sendBytes)}");

    byte[] recv = mycom1.Read(50); // 讀取回應
    if (recv.Length > 0) msg.AppendText($"\r\n接收數據:{FormatHex(recv)}");
}

// 輔助:移除空格、兩兩轉 Byte
public byte[] ParseHexString(string input) {
    string s = input.Replace(" ", "");
    byte[] buf = new byte[s.Length / 2];
    for (int i = 0, j = 0; i < s.Length; i += 2, j++)
        buf[j] = Convert.ToByte(s.Substring(i, 2), 16);
    return buf;
}

// 輔助:Byte[] 轉 "XX XX" 顯示
public string FormatHex(byte[] data) {
    return string.Join(" ", data.Select(b => b.ToString("X2")));
}

參數動態設置

private void button2_Click(object sender, EventArgs e) {
    mycom1.PortNum = Convert.ToInt16(t_port.Text);
    mycom1.BaudRate = Convert.ToInt16(t_rate.Text);
    mycom1.ByteSize = Convert.ToByte(t_bytesize.Text);
    mycom1.Parity = Convert.ToByte(t_parity.Text);
    mycom1.StopBits = Convert.ToByte(t_stopbyte.Text);
    OpenCom();
}

關閉串口/退出清理

private void Form1_Closing(object sender, CancelEventArgs e) { mycom1.Close(); }
private void button5_Click(object sender, EventArgs e) {
    if (mycom1.Opened) { mycom1.Close(); btn.Text = "開啟串口"; }
    else { mycom1.Open(); btn.Text = "關閉串口"; }
}

UI 介面

  • 多行文本框 msg (綠色字體) 顯示收發日誌。
  • GroupBox 參數設置區 (COM口、波特率、數據位、停止位、校驗位)。
  • 發送框 t_send 輸入十六進制 (如 02 45 66 FA),按鈕發送/清空/初始化/關閉串口。

注意:發送格式必須為偶數長度十六進制字符,空格可選。完整代碼含設計器生成部分,可直接作為串口調試工具基礎擴展。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved