C#--SerialPort

1、DiscardOutBuffer和DiscardInBuffer

       1)用途:

      SerialPort.DiscardOutBuffer方法清除串行驅動程序發送緩衝區的數據;

      SerialPort.DiscardInBuffer方法清除串行驅動程序的接收緩衝區的數據; 

      2)用法:

      當你的程序在窗口發送一幀數據(所謂一幀是指由多個字節組成的有邏輯意義的數據)過程中檢測到串口發送錯誤,如果讓串口繼續發生就沒有意義了,這個時候可以用SerialPort.DiscardOutBuffer方法來清除已經進入發送緩衝區的錯誤數據;

      類似地,當你的程序在接收一幀數據時發生錯誤,如果再讓串口繼續接收也沒有意義了,這個時候可以用SerialPort.DiscardInBuffer方法來清除已經進入接收緩衝區的錯誤數據了。

2、讀寫行數據

      雙方通訊時,一般都需要定義通訊協議,即使最簡單的通過串口發送文本聊天的程序。

      通常是在當一方按下回車時,將其所數據的文本連同換行符發給另一方。在這個通訊事例中,協議楨是通過換行符界定的,每一楨數據都被換行符隔開,這樣就很容易識別出通訊雙發發送的信息。

       在以上的例子中,可以用WriteLine()來發送數據,用ReadLine()來讀取數據。WriteLine發送完數據後,會將換行符作爲數據也發送給對方。ReadLine()讀取數據時,直至遇到一個換行符,然後返回一個字符串代表一行信息。換行符可以通過SerialPort 的屬性NewLine來設置。一般地,Windows將CrLn作爲換行符,而在Linux下,換行符則只用一個Ln表示。

      ReadLine()方法是阻塞的,直至遇到一個換行符後返回。在讀取數據時,如果一直沒有遇到換行符,那麼在等待ReadTimeout時間後,拋出一個TimeoutException。默認情況下,ReadTimeout爲InfiniteTimeout。這樣,ReadLine一直處於阻塞狀態,直至有新一行數據到達。

      WriteLine()方法也是阻塞的,如果另一方不能及時接收數據,就會引起TimeoutException異常。

       由於ReadLine()和WriteLine()方法都是阻塞式的,在程序使用SerialPort 進行串口通訊時,一般應該把讀寫操作交由其他線程處理,避免因爲阻塞而導致程序不響應。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章