C 串列埠連線的讀取與傳送(附串列埠工具的編寫原始碼)

2022-01-10 04:13:57 字數 3206 閱讀 1616

一、串列埠連線的開啟與關閉

串列埠,即com口,在.net中使用serialport類進行操作。串列埠開啟與關閉,是涉及慢速硬體的io操作,頻繁開啟或關閉會影響整體處理速度,甚至導致開啟或關閉串列埠失敗。非特殊情況,串列埠一次性開啟後,在退出程式時關閉串列埠即可。在開啟串列埠前,可以設定一些常用的引數。常用的引數如下:

(2) 串列埠的接受/傳送快取區大小:readbuffersize/writebuffersize。

具體**如下:

1             // open com

2 _serialport = new serialport(com, baud);

3 if (_serialport.isopen) _serialport.close();

4 5 // set the read / write timeouts

6 _serialport.readtimeout = 500;

7 _serialport.writetimeout = 500;

8 9 // set read / write buffer size,the default of value is 1mb

10 _serialport.readbuffersize = 1024 * 1024;

11 _serialport.writebuffersize = 1024 * 1024;

12 13 _serialport.open();

14 15 // discard buffer

16 _serialport.discardinbuffer();

17 _serialport.discardoutbuffer();

需要注意的是超出緩衝區的部分會被直接丟棄。因此,如果需要使用串列埠傳送大檔案,那接收方和傳送方都需要將各自的緩衝區域設定的足夠大,以便能夠一次性儲存下大檔案的二進位制陣列。若條件限制,緩衝區域不能設定過大,那就需要在傳送大檔案的時候按照傳送緩衝區大小分包去傳送,接收方按順序把該陣列組合起來形成接受檔案的二進位制陣列。

二、串列埠傳送

serialport類傳送支援二進位制傳送與文字傳送,需要注意的是文字傳送時,需要知道轉換的規則,一般常用的是ascii、utf7、utf-8、unicode、utf32。具體**如下:

1         #region send

2 /// 3 /// 傳送訊息(byte陣列)

4 ///

5 ///

6 ///

7 ///

8 public void send(byte buffer, int offset, int count)

9

15 }

16 17 /// 18 /// 傳送訊息(字串)

19 ///

20 /// 字串編碼方式,具體方式見

21 ///

22 public void send(encoding encoding , string message)

23

30 }

31 #endregion

三、串列埠接受​ 串列埠接受需要注意,訊息接受與訊息處理要**分離。不能把流程處理的**放入資訊接受處,因為訊息處理或多或少會有耗時,這會造成當傳送方傳送過快時,接受方的接受緩衝區會快取多條訊息。我們可以把接受到的訊息放入佇列中,然後在外部執行緒中,嘗試去拿出該條訊息進行消費。採用 「生產-消費」模式。具體**如下:

1      #region receive

2 private void pushmessage()

3

16 };

17 }

18 19 /// 20 /// 獲取串列埠接受到的內容

21 ///

22 /// 取訊息的超時時間

23 /// 返回byte陣列

24 public byte trymessage(int millisecondstotimeout = -1)

25

30 31 if (_messagewaithandle.waitone(millisecondstotimeout))

32

37 }

38 return default;

39 }

40 #endregion

四、完整**與測試結果​ 串列埠工具類的完整**如下:

view code

​ 測試**如下:

view code

使用串列埠工具測試如下,對於串列埠的接受如絲般順滑。當我們在訊息中增加測試延時後,就會發現當串列埠工具繼續快速傳送一段時間後關閉傳送,發現使用佇列後,依然沒有丟失一條來自傳送方的訊息。

五、串列埠工具編寫例項

通過以上對串列埠的了解,我們模仿串列埠工具進行程式設計,完成如下:

c 串列埠快取位元組數 C 串列埠連線的讀取與傳送

一 串列埠連線的開啟與關閉 串列埠,即com口,在.net中使用 serialport 類進行操作。串列埠開啟與關閉,是涉及慢速硬體的io操作,頻繁開啟或關閉會影響整體處理速度,甚至導致開啟或關閉串列埠失敗。非特殊情況,串列埠一次性開啟後,在退出程式時關閉串列埠即可。在開啟串列埠前,可以設定一些常用...

C 簡單的串列埠讀取

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...

C 串列埠通訊,串列埠的傳送與接收,獲取本機串列埠

serialport 串列埠類 1.引用命名空間 using system.io.ports 2.建立物件 serialport com new serialport 3.給串列埠埠與波特率屬性賦值 com.portname com4 com.baudrate 9600 4.開啟串列埠 com.op...