在C 中使用SerialPort類實現串列埠通訊

2021-06-06 18:51:04 字數 4096 閱讀 9694

下面主要介紹該類的主要屬性(表1)和方法(表.2)。

檢視。《使用system.io.ports讀取com口資料》

表1 serialport類的常用屬性

名  稱

說  明

basestream

獲取 serialport 物件的基礎 stream 物件

baudrate

獲取或設定序列波特率

breakstate

獲取或設定中斷訊號狀態

bytestoread

獲取接收緩衝區中資料的位元組數

bytestowrite

獲取傳送緩衝區中資料的位元組數

cdholding

獲取埠的載波檢測行的狀態

ctsholding

獲取「可以傳送」行的狀態

databits

獲取或設定每個位元組的標準資料位長度

discardnull

獲取或設定乙個值,該值指示 null 位元組在埠和接收緩衝區之間傳輸時是否被忽略

dsrholding

獲取資料設定就緒 (dsr) 訊號的狀態

dtrenable

獲取或設定乙個值,該值在序列通訊過程中啟用資料終端就緒 (dtr) 訊號

encoding

獲取或設定傳輸前後文字轉換的位元組編碼

handshake

獲取或設定串列埠資料傳輸的握手協議

isopen

獲取乙個值,該值指示 serialport 物件的開啟或關閉狀態

newline

獲取或設定用於解釋 readline( )和writeline( )方法呼叫結束的值

parity

獲取或設定奇偶校驗檢查協議 續表

名  稱

說  明

parityreplace

獲取或設定乙個位元組,該位元組在發生奇偶校驗錯誤時替換資料流中的無效位元組

portname

獲取或設定通訊埠,包括但不限於所有可用的 com 埠

readbuffersize

獲取或設定 serialport 輸入緩衝區的大小

readtimeout

獲取或設定讀取操作未完成時發生超時之前的毫秒數

receivedbytesthreshold

獲取或設定 datareceived 事件發生前內部輸入緩衝區中的位元組數

rtsenable

獲取或設定乙個值,該值指示在序列通訊中是否啟用請求傳送 (rts) 訊號

stopbits

獲取或設定每個位元組的標準停止位數

writebuffersize

獲取或設定串列埠輸出緩衝區的大小

writetimeout

獲取或設定寫入操作未完成時發生超時之前的毫秒數

表2 serialport類的常用方法

方 法 名 稱

說  明

close

關閉埠連線,將 isopen 屬性設定為false,並釋放內部 stream 物件

open

開啟乙個新的串列埠連線

read

從 serialport 輸入緩衝區中讀取

readbyte

從 serialport 輸入緩衝區中同步讀取乙個位元組

readchar

從 serialport 輸入緩衝區中同步讀取乙個字元

readline

一直讀取到輸入緩衝區中的 newline 值

readto

一直讀取到輸入緩衝區中指定 value 的字串

write

已過載。將資料寫入串列埠輸出緩衝區

writeline

將指定的字串和 newline 值寫入輸出緩衝區

使用serialport類的方法:

方法一:

首先要新增

using system.io;

using system.io.ports;

1...在類的內部定義serialport com;

2...開啟串列埠

com = new serialport();

com.baudrate = 115200;

com.portname = "com1";

com.databits = 8;

com.open();//開啟串列埠

3...傳送資料

byte txdata =;

com.write(txdata, 0, 8);

4...接收資料

4.1使用事件接收

this.com.datareceived += new system.io.ports.serialdatareceivedeventhandler(this.ondatareceived);

private void ondatareceived(object sender, serialdatareceivedeventargs e)

4.2使用執行緒接收

接收資料啟動乙個執行緒,使其接收。

在類的內部定義

thread _readthread;

bool _keepreading;

開啟串列埠後啟動執行緒

_keepreading = true;

_readthread = new thread(readport);

_readthread.start();

執行緒函式

[c-sharp]view plain

copy

print?

private

void readport()

catch (timeoutexception)

} else }

}

方法二:使用c#自帶的serialpor控制項。

1...在「工具箱」的「元件」中選擇serialpor控制項新增。

2...設定串列埠並開啟

serialport1.portname = "com1";

serialport1.baudrate = 9600;

serialport1.open();

3...寫入資料可以使用write或者下面的函式

serialport1.writeline(str);

4...新增資料接收的事件

private void serialport1_datareceived(object sender, serialdatareceivedeventargs e)

使用中的一些常見問題

c#中serialport類中datareceived事件gui實時處理方法(來自[email protected] 的看法)

msdn:從 serialport 物件接收資料時,將在輔助線程上引發 datareceived 事件。由於此事件在輔助線程而非主線程上引發,因此嘗試修改主線程中的一些元素(如 ui 元素)時會引發執行緒異常。如果有必要修改主 form 或 control 中的元素,必須使用 invoke 回發更改請求,這將在正確的執行緒上執行.進而要想將輔助線程中所讀到的資料顯示到主線程的form控制項上時,只有通過invoke方法來實現

下面是**例項:

[c-sharp]view plain

copy

print?

private

void serialport1_datareceived(object sender, serialdatareceivedeventargs e) )

); }

如何知道當前電腦有哪個串列埠

在窗體上新增乙個combobox控制項。

然後使用combobox1.items.addrange(system.io.ports.serialport.getportnames()); 或者

string portlist = system.io.ports.serialport.getportnames();

for (int i = 0; i < portlist.length; ++i)

具體請參考

C 中使用SerialPort類實現簡單串列埠程式設計

由於專案需要通過串列埠通訊,所以學習一下在此做一下筆記。net 2.0提供了串列埠通訊的功能,其命名空間是system.io.ports。這個新的框架不但可以訪問計算機上的串列埠,還可以和串列埠裝置進行通訊。建立c 串列埠通訊程式之建立serialport 物件 通過建立serialport 物件,...

在C 中使用Queue

介紹 queue類執行將放在在queue中的物件採用先進先出的資料結構。物件從一端插入到佇列中從另一端移除。物件的順序程序使用queue queue介面 queue類實現了三個主要集合介面 icollection ienumerable和icloneable。queue的重要方法 queue類常用的...

在 C 中使用畫筆

出處 在 c 中使用畫筆 public class rectangle shape protected point m start protected point m end public rectangle point start,point end,color fgcolor m start s...