C#中的串口通信SerialPort詳解
今天這篇文章帶大家學(xué)習(xí)下C#中的串口通訊。在日常的開發(fā)工作中,如果工作內(nèi)容是CS方向的同學(xué)應(yīng)該很容易接觸到串口通訊方面的業(yè)務(wù)需求。那么也就很容易想到C#中SerialPort類,它就是專門來處理串口通訊相關(guān)的。
了解什么是串口通訊
串口通訊是指外設(shè)和計(jì)算機(jī)間通過數(shù)據(jù)信號(hào)線,地線,控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。
這種通訊方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約成本,但其傳輸速度比并行通訊慢。
串口是計(jì)算機(jī)上一種非常通用的設(shè)備通訊協(xié)議。大多數(shù)計(jì)算機(jī)包含兩個(gè)基于RS-232的串口。
串口也是儀器儀表設(shè)備通用的通訊協(xié)議,很多GPIB兼容的設(shè)備也帶有RS-232口,同時(shí)串口通信協(xié)議也可以用于獲取遠(yuǎn)程設(shè)備采集的數(shù)據(jù)。
串行接口是一種可以將接受來自CPU的并行數(shù)據(jù)字符轉(zhuǎn)換為連續(xù)的串行數(shù)據(jù)流發(fā)送出去,同時(shí)也可將接受的串行數(shù)據(jù)流轉(zhuǎn)換為并行的數(shù)據(jù)字符供給CPU的器件。
一般完成這種功能的電路,我們稱為串行接口電路。
串行按位(bit)發(fā)送和接收字節(jié),盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時(shí)用另一根線接收數(shù)據(jù)。它很簡單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信。

這里提一句,我們筆記本的USB口,它不是串口,它是所謂的U口,我們的串口如果需要插入到USB口,那么就需要一個(gè)RS-232轉(zhuǎn)U口的轉(zhuǎn)換器才可以。
這里需要注意下,一般我們的硬件工程師都會(huì)在自己的硬件設(shè)備都內(nèi)置這個(gè)小轉(zhuǎn)換設(shè)備,很方便。
C#中的串口通訊SerialPort
從.NET Framework 2.0開始,微軟就默認(rèn)提供了System.IO.Ports.SerialPort類,根據(jù)SerialPort類提供的簡單操作步驟,可以很容易的完成串口的信息收發(fā)程序,從特定的串口中接收到數(shù)據(jù)也可以進(jìn)行數(shù)據(jù)的發(fā)送。
關(guān)于SerialPort類的應(yīng)用也很容易,可以根據(jù)微軟官方的介紹進(jìn)行使用。
- 配置SerialPort的名稱,端口號(hào),波特率等。
- 打開/關(guān)閉串口
- 接收/發(fā)送數(shù)據(jù)
SerialPort mySerialPort = new SerialPort("COM2");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity=Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.Non;
mySerialPort.DataReceived += new SerialDataReceivedEvenHandler(DataReceive_Method);
mySerialPort.Open();
mySerialPort.Close();發(fā)送數(shù)據(jù)
using System.IO.Ports;
private static void SendSampleData()
{
SerialPort port = new SerialPort(
"COM1", 9600, Parity.None, 8, StopBits.One);
port.Open();
port.Write("Hello World");
port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);
port.Close();
}namespace SerialPortExample
{
class SerialPortProgram
{
private SerialPort port = new SerialPort("COM1",
9600, Parity.None, 8, StopBits.One);
[STAThread]
static void Main(string[] args)
{
new SerialPortProgram();
}
private SerialPortProgram()
{
Console.WriteLine("Incoming Data:");
port.DataReceived += new
SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
Application.Run();
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(port.ReadExisting());
}
}日常串口的使用多數(shù)情況是和線程進(jìn)行的,一般都是在子線程中做這些耗時(shí)和重復(fù)的工作,在主線程或者界面只進(jìn)行數(shù)據(jù)的展示處理即可。
在子線程的處理過程中需要特別處理串口的打開和關(guān)閉,要及時(shí)關(guān)閉串口的狀態(tài),防止出現(xiàn)無法捕獲的異常錯(cuò)誤。
到此這篇關(guān)于C#中的串口通信SerialPort詳解的文章就介紹到這了,更多相關(guān)C#串口通信SerialPort內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#使用Parallel類進(jìn)行多線程編程實(shí)例
這篇文章主要介紹了C#使用Parallel類進(jìn)行多線程編程的方法,實(shí)例分析了Parallel類的相關(guān)使用技巧,需要的朋友可以參考下2015-06-06
C#使用Dns類實(shí)現(xiàn)查詢主機(jī)名對(duì)應(yīng)IP地址
C#中的Dns類能夠與默認(rèn)的DNS服務(wù)器進(jìn)行通信,以檢索IP地址,這篇文章主要介紹了C#如何使用Dns類解析出主機(jī)對(duì)應(yīng)的IP地址信息,需要的可以參考下2024-02-02
c# String擴(kuò)展 讓你在PadLeft和PadRight時(shí)不再受單雙字節(jié)問題困擾
這篇文章主要介紹了c# String擴(kuò)展 讓你在PadLeft和PadRight時(shí)不再受單雙字節(jié)問題困擾,需要的朋友可以參考下2020-04-04
C#由當(dāng)前日期計(jì)算相應(yīng)的周一和周日的實(shí)例代碼

