一、基礎概念
串口通信是指通過串口進行數據交換的過程。串口是指COM口,COM口是計算機硬體設備之一,其可進行非同步數據傳輸,因此能方便地進行數據收發,被廣泛應用於各種領域中。
串口通信實現的基本步驟為:
①打開串口
②配置串口實例的屬性(如數據位、波特率等)
③設置串口接收處理事件
④開始數據傳輸
二、使用SerialPort類控制串口通信
c#中使用System.IO.Ports命名空間下的SerialPort類來實現串口數據收發。
1、打開串口
創建一個SerialPort對象來操作串口。調用SerialPort的Open方法,打開串口。
SerialPort sp = new SerialPort();
sp.PortName = "COM1";
sp.Open();
2、配置串口實例屬性
配置串口屬性,包括波特率、數據位、奇偶校驗等等。可以使用BaudRate、DataBits、Parity等屬性來設置串口的一些參數。
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
3、設置串口接收處理事件
在串口通信過程中,每當串口緩存區中有數據時,就會觸發DataReceived事件。在事件處理函數中,可以將數據讀取出來,並進行相應的數據處理。
sp.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string data = sp.ReadLine(); // 一次讀取一行數據
Console.WriteLine(data);
}
4、開始數據傳輸
串口配置好後,需要向串口寫入數據或從串口讀取數據。使用SerialPort.Write和SerialPort.Read方法進行數據的寫入和讀取。
byte[] sendData = { 0x01, 0x02, 0x03 };
sp.Write(sendData, 0, sendData.Length);
byte[] receiveData = new byte[64];
sp.Read(receiveData, 0, receiveData.Length);
三、使用示例
下面是一個簡單的c#串口通信數據讀取示常式序。該程序打開串口COM1,讀取從串口發送過來的數據並輸出到控制台。
using System;
using System.IO.Ports;
namespace ConsoleSerialPort
{
class Program
{
static SerialPort sp = new SerialPort();
static void Main(string[] args)
{
sp.PortName = "COM1";
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
sp.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
try
{
sp.Open();
Console.WriteLine("SerialPort Opened");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string data = sp.ReadLine();
Console.WriteLine(data);
}
}
}
四、注意事項
在使用SerialPort類進行串口通信時,需要注意以下幾點:
①由於SerialPort類是非託管資源,因此在使用完後一定要調用Dispose方法進行釋放
②採用非同步的方式進行讀取數據時,在事件處理函數中需要使用BeginInvoke方法,確保線程安全
③圖形界面程序中需要採用「線程跨越」方式,讓主程序正常運行,而串口數據接收在單獨的線程中進行。
原創文章,作者:BHNIL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372158.html