當前位置: 妍妍網 > 碼農

C#監聽串口數據的方法

2024-03-23碼農

串口通訊是電腦與外部裝置之間常用的一種通訊方式,特別是在工業控制、數據采集等領域套用廣泛。在C#中,我們可以透過 System.IO.Ports.SerialPort 類來實作串口通訊,包括監聽串口數據。本文將介紹如何使用C#監聽串口數據,並給出相應的程式碼範例。

一、準備串口通訊環境

在開始編寫程式碼之前,需要確保你的電腦上已經連線了串口裝置,並且你已經知道了串口的埠號、波特率、數據位、停止位和校驗位等參數。

二、建立SerialPort物件

首先,我們需要在C#中建立一個 SerialPort 物件,並設定串口的參數。

using System;
using System.IO.Ports; // 引入SerialPort名稱空間
classProgram
{
staticvoidMain(string[] args)
{
SerialPort serialPort = new SerialPort();
serialPort.PortName = "COM1"// 設定串口埠號
serialPort.BaudRate = 9600// 設定波特率
serialPort.DataBits = 8// 設定數據位
serialPort.StopBits = StopBits.One; // 設定停止位
serialPort.Parity = Parity.None; // 設定校驗位
serialPort.Handshake = Handshake.None; // 設定控制協定
serialPort.ReadTimeout = 500// 設定讀取超時時間
serialPort.WriteTimeout = 500// 設定寫入超時時間
try
{
serialPort.Open(); // 開啟串口
Console.WriteLine("串口已開啟");
}
catch (Exception ex)
{
Console.WriteLine("開啟串口失敗: " + ex.Message);
return;
}
// 監聽串口數據
serialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPortDataReceived);
Console.WriteLine("按任意鍵結束...");
Console.ReadKey();
serialPort.Close(); // 關閉串口
}
// 串口數據接收事件處理常式
privatestaticvoidSerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting(); // 讀取現有數據
Console.WriteLine("接收到數據: " + indata);
}
}



三、監聽串口數據

透過給 SerialPort 物件的 DataReceived 事件添加一個事件處理常式,我們可以在串口接收到數據時執行特定的操作。在上面的程式碼中,我們定義了一個名為 SerialPortDataReceived 的方法作為事件處理常式,它會在串口接收到數據時自動被呼叫。

SerialPortDataReceived 方法中,我們首先透過 sender 參數獲取到觸發事件的 SerialPort 物件,然後使用 ReadExisting 方法讀取串口緩沖區中現有的所有數據。最後,我們將接收到的數據輸出到控制台。

四、關閉串口

在程式結束前,別忘了關閉串口,釋放資源。在上面的程式碼中,我們透過 Console.ReadKey() 方法讓程式暫停,等待使用者按任意鍵結束。當使用者按下任意鍵後,程式會執行 serialPort.Close() 方法關閉串口。

五、註意事項

  • 確保串口的埠號、波特率等參數與連線的裝置一致。

  • 串口通訊是異步的,因此在處理接收到的數據時需要註意執行緒安全問題。

  • 如果需要處理大量的串口數據,可能需要考慮使用更高效的讀取方式,比如使用 BaseStream 內容配合異步I/O操作。

  • 在實際套用中,可能還需要處理串口通訊中的各種異常情況,比如超時、數據錯誤等。

  • 透過以上的步驟和程式碼範例,你應該能夠了解如何在C#中監聽串口數據。在實際的計畫中,你可以根據具體的需求對程式碼進行擴充套件和最佳化。