首頁>Club>
18
回覆列表
  • 1 # 寧可孤獨也不違心8176

    SerialPort使用

    1。簡介

    隨 著USB的流行,串列埠通訊已經應用到日常生活的很多方面了,USB是一種高速的串列埠通訊協議,USB介面非常複雜,通常被用在需要傳輸大量資料資料的地 方,如隨身碟、相機、印表機等。除了USB這種較為奢侈的串列埠外,在工控和嵌入式行業,大量被使用的是另一種古老的串列埠協議,RS-232串列埠。RS- 232是一種非常簡潔的低速串列埠通訊介面,它可以同時進行資料接收和傳送的工作。

    2。.NET 2.0對串列埠的支援

    .NET 2.0提供了對串列埠通訊功能的支援,有關類可以在名稱空間System.IO.Ports下找到,這其中最為重要的是SerialPort類。

    透過建立一個新的SerialPort 物件,我們就可以在.NET程式中控制串列埠通訊的全過程。

    3。使用 SerialPort 設定串列埠屬性

    進行串列埠通訊時,需要設定一些相關引數,可以透過設定SerialPort 類的屬性來進行。串列埠屬性主要包括

    .PortName 串列埠名稱,COM1, COM2等。

    .BaudRate 波特率,也就是串列埠通訊的速度,進行串列埠通訊的雙方其波特率需要相同,如果用PC連線其他非PC系統,一般地,波特率由非PC系統決定。

    .Parity 奇偶校驗。可以選取列舉Parity中的值

    .DataBits 資料位

    .StopBits 停止位,可以選取列舉StopBits中的值

    .Handshake 握手方式,也就是資料流控制方式,可以選取列舉Handshake中的值

    4。開啟與關閉串列埠

    在建立一個SerialPort 物件,設定串列埠屬性後,可以透過 Open()方法開啟串列埠。資料讀寫完成後,可以透過Close()方法關閉串列埠。

    根據經驗,對於有些系統,在開啟串列埠後,還需要將RtsEnable設定為True,這樣才能讀寫資料,否則不能正常讀寫資料。

    5。讀寫行資料

    雙方通訊時,一般都需要定義通訊協議,即使最簡單的透過串列埠傳送文字聊天的程式。

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

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

    ReadLine() 方法是阻塞的,直至遇到一個換行符後返回。在讀取資料時,如果一直沒有遇到換行符,那麼在等待ReadTimeout時間後,丟擲一個 TimeoutException。預設情況下,ReadTimeout為InfiniteTimeout。這樣,ReadLine一直處於阻塞狀態,直 至有新一行資料到達。

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

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

  • 中秋節和大豐收的關聯?
  • 大年三十可以殺魚嗎?