串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發

架构师老卢發表於2024-03-07
串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發

概述:RJCP.DLL.SerialPortStream庫為C#串列埠通訊提供強大支援,跨平臺、高度可定製,整合基礎功能如開啟、配置串列埠和資料讀寫,以及高階功能包括事件處理、超時設定等,極大簡化串列埠開發流程,適用於不同平臺和複雜通訊需求。

C#串列埠開發之RJCP.DLL.SerialPortStream庫介紹

用途與優點

RJCP.DLL.SerialPortStream庫用於C#中串列埠通訊的開發,具有以下優點:

  1. 跨平臺支援: 適用於Windows、Linux和macOS等多個平臺。
  2. 高度可定製性: 提供靈活的配置選項,可滿足不同串列埠通訊需求。
  3. 開源社群支援: 在GitHub上積極維護,可獲取最新版本和社群支援。

基礎功能

1. 建立 SerialPortStream 例項

using RJCP.IO.Ports;

SerialPortStream serialPort = new SerialPortStream("COM1");

2. 開啟和關閉串列埠

serialPort.Open();
// 進行串列埠操作
serialPort.Close();

3. 配置串列埠引數

serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;

4. 讀取和寫入資料

// 讀取資料
byte[] buffer = new byte[1024];
int bytesRead = serialPort.Read(buffer, 0, buffer.Length);

// 寫入資料
byte[] dataToSend = Encoding.UTF8.GetBytes("Hello, Serial!");
serialPort.Write(dataToSend, 0, dataToSend.Length);

高階功能

1. 事件處理

// 新增資料接收事件處理程式
serialPort.DataReceived += (sender, e) => {
    byte[] receivedData = new byte[serialPort.BytesToRead];
    serialPort.Read(receivedData, 0, receivedData.Length);
    Console.WriteLine($"Received: {Encoding.UTF8.GetString(receivedData)}");
};

2. 超時設定

// 設定讀取超時時間為100毫秒
serialPort.ReadTimeout = 100;

3. 自定義流控制

// 自定義流控制為RTS/CTS
serialPort.Handshake = Handshake.RequestToSend;

完整示例

以下是一個結合基礎和高階功能的完整示例:

using System;
using System.Text;
using RJCP.IO.Ports;

class Program {
    static void Main() {
        using (SerialPortStream serialPort = new SerialPortStream("COM1")) {
            // 基礎功能:開啟串列埠、配置引數
            serialPort.Open();
            serialPort.BaudRate = 9600;
            serialPort.Parity = Parity.None;
            serialPort.DataBits = 8;
            serialPort.StopBits = StopBits.One;

            // 高階功能:資料接收事件處理
            serialPort.DataReceived += (sender, e) => {
                byte[] receivedData = new byte[serialPort.BytesToRead];
                serialPort.Read(receivedData, 0, receivedData.Length);
                Console.WriteLine($"Received: {Encoding.UTF8.GetString(receivedData)}");
            };

            // 傳送資料
            byte[] dataToSend = Encoding.UTF8.GetBytes("Hello, Serial!");
            serialPort.Write(dataToSend, 0, dataToSend.Length);

            // 等待一段時間以接收資料
            Console.WriteLine("Waiting for data...");
            Console.ReadLine();
        }
    }
}

以上示例演示了RJCP.DLL.SerialPortStream庫的基礎和高階功能,包括開啟和配置串列埠、事件處理、超時設定和流控制等。

相關文章