C#串口SerialPort常用屬性方法

SerialPort():

//屬性

.BaudRate;獲取或設置波特率

.BytesToRead;得到 接收到數據的字節數

.BytesToWrites;得到送往串口的字節數

.DataBits;獲取或設置數據位

.IsOpen;獲取一個值,判斷串口是否打開

.Pariy;獲取或設置校驗位

.PortName;串口名稱

.ReadBufferSize;獲取或設置讀取數據的緩存大小

.ReadTimeout;讀取超時時間

.StopBits;停止位

.NewLine;用于解釋通過ReadLine()與WriteLine()的值

.WriteBufferSize;與ReadBufferSize相對

.WriteTimeout;與ReadTimeout相對

方法:

.Close();判斷串口

.Open();打開串口

.Read(Byte[], int32, int32);讀取數據

.Read(Char[], int32, int32);

.ReadByte();讀取一個字節的數據

.ReadChar();讀取一個字符的數據

.ReadLine();一直讀取到輸入緩沖區的NewLine值:返回string類型

.ReadExisting();讀取可用的字節

.ReadTo(string value);讀取數據,直到讀到該value時停止。

.Write(string);寫入數據

.Write(byte[], int32, int32);

.Write(char[], int32, int32);

.WriteLine(string value);將指定的value值與NewLine值一起寫入

事件:

DataReceived

例子MSDN:

SerialPort mySerialPort = new SerialPort("COM2");//new SerialPort("COM"+string);

mySerialPort.BaudRate = 9600;

mySerialPort.Parity=Parity.None;

mySerialPort.StopBits = StopBits.One;

mySerialPort.DataBits = 8;

mySerialPort.Handshake = Handshake.Non;

mySerialPort.ReadTimeout = 200;

mySerialPort.WriteTiemout = 200;

mySerialPort.DataReceived += new SerialDataReceivedEvenHandler(DataReceive_Method);

mySerialPort.Open();

?....

mySerialPort.DiscardInBuffer();

mySerialPort.DiscardOutBuffer();?

mySerialPort.Close();

?

?static void DataReceive_Method(object sender, SerialPortDataReceivedEventArgs e)

{

SerialPort sp = (SerialPort)seder;

string indata = sp.ReadExisting();

Console.Write(indata);

}

串口通信屬性及事件解析

RS-232串口,串口按位(bit)發送和接收字節。盡管比按字節(byte)的并行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成:(1)地線,(2)發送,(3)接收。

?

本文以c#中的SerialPort類為例,分析串口各參數及事件,其他平臺串口庫的操作類似。

專門串口通信的朋友,建議參看《Visual C++串口通信工程開發實例導航》。

?

一、屬性

1. PortName 串口名??? 默認值COM1

串口對于操作系統來說是一個文件,如果設置PortName為本機不存在的串口名(即文件名),如“COM7”或“COMK”,Open()打開串口將失敗,提示“端口COM7不存在”。

2. BaudRate 獲取或設置串行波特率bit/s??? 默認值9600

比特率=波特率X單個調制狀態對應的二進制位數。

RS232是要用在近距離傳輸上最大距離為30M

RS485用在長距離傳輸最大距離1200M

3. DataBits 獲取或設置每個字節的標準數據位長度??? 默認值8

當計算機發送一個信息包,實際的數據不會是8位的,標準的值是5、7和8位。如何設置取決于你想傳送的信息。比如,標準的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數據使用簡單的文本(標準 ASCII碼),那么每個數據包使用7位數據。每個包是指一個字節,包括開始/停止位,數據位和奇偶校驗位。由于實際數據位取決于通信協議的選取,術語“包”指任何通信的情況。

4. StopBits 獲取或設置每個字節的標準停止位數??? 默認值One

用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數據是在傳輸線上定時的,并且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數越多,不同時鐘同步的容忍程度越大,但是數據傳輸率同時也越慢。

5. Parity 獲取或設置奇偶校驗檢查協議??? 默認值None

在串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對于偶和奇校驗的情況,串口會設置校驗位(數據位后面的一位),用一個值確保傳輸的數據有偶個或者奇個邏輯高位。例如,如果數據是011,那么對于偶校驗,校驗位為0,保證邏輯高的位數是偶數個。如果是奇校驗,

校驗位位1,這樣就有3個邏輯高位。高位和低位不真正的檢查數據,簡單置位邏輯高或者邏輯低校驗。這樣使得接收設備能夠知道一個位的狀態,有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數據是否不同步。

6. ParityReplace 獲取或設置一個字節,該字節在發生奇偶校驗錯誤時替換數據流中的無效字節?? 默認值63(?)

7. ReadBufferSize 獲取或設置 SerialPort 輸入緩沖區的大小???? 默認值4096

ReadBufferSize 屬性忽略任何小于 4096 的值??由于 ReadBufferSize 屬性只表示 Windows 創建的緩沖區,而?BytesToRead?屬性除了表示 Windows 創建的緩沖區外還表示 SerialPort 緩沖區,所以 BytesToRead 屬性可以返回一個比 ReadBufferSize 屬性大的值。

8. ReadTimeout 獲取或設置讀取操作未完成時發生超時之前的毫秒數??? 默認值-1

確切的說ReadTimeout設置了Read(outBuf, offset, count)超時等待的時間,即如果接收緩沖區一直沒有數據,則Read()等待ReadTimeout毫秒后甩TimeoutException異常。但是在ReadTimeout期間,只要有一個數據,則Read()立馬返回,而不是等待count個字節數據。ReadTimeout不是為了Read()阻塞等待count個字節,那它有什么意義?

9. ReceivedBytesThreshold 獲取或設置 DataReceived 事件發生前內部輸入緩沖區中的字節數?? 默認值1

如果緩沖區一次性有4個字節數據,那么DataReceived事件是觸發1次還是4次?

10. WriteBufferSize 獲取或設置串行端口輸出緩沖區的大小??? 默認值2048

ReadBufferSize 屬性忽略任何小于 4096 的值。

由于 ReadBufferSize 屬性僅表示 Windows 創建的緩沖區,所以它可以返回比?BytesToRead屬性小的值,這表示?SerialPort?和 Windows 創建的緩沖區。

11. WreiteTimeout 獲取或設置寫入操作未完成時發生超時之前的毫秒數??? 默認值-1

寫入超時值在 Win32 通信 API 中最初被設置為 500 毫秒。此屬性允許您設置此值。此值可以設置為 0 以立即從寫入操作返回,或設置為任意正值,也可以設置為默認的 InfiniteTimeout。此屬性不影響?BaseStream?的?BeginWrite?方法。

12. BytesToRead ? 獲取接收緩沖區中數據的字節數

由于?ReadBufferSize?屬性只表示 Windows 創建的緩沖區,而 BytesToRead 屬性除了表示 Windows 創建的緩沖區外還表示 SerialPort 緩沖區,所以 BytesToRead 屬性可以返回一個比 ReadBufferSize 屬性大的值。

13. BytesToWrite ? 獲取發送緩沖區中數據的字節數

14. NewLine 獲取或設置用于解釋 ReadLine( )和WriteLine( )方法調用結束的值??? 默認值“\n”

15. DiscardNull 獲取或設置一個值,指示 Null 字節在端口和接收緩沖區之間傳輸時是否被忽略? 默認值false

正常情況下,特別是對于二進制傳輸而言,此值應該設置為 false。將此屬性設置為 true 會使 UTF32 和 UTF16 編碼字節產生意外結果。

16. Handshake 獲取或設置串行端口數據傳輸的握手協議??? 默認值None

使用握手時,將指示連接到 SerialPort 對象的設備在緩沖區中至少有 (ReadBufferSize-1024) 個字節時停止發送數據。當緩沖區中的字節數小于等于 1024 時,將指示設備重新開始發送數據。如果設備在大于 1024 個字節的塊中發送數據,可能會導致緩沖區溢出。

如果將 Handshake 屬性設置為?RequestToSendXOnXOff?并將?CtsHolding?設置為 false,則不會發送 XOff 字符。如果后來將 CtsHolding 設置為 true,則必須發送更多的數據后才會發送 XOff 字符。

17. Encodeing 獲取或設置傳輸前后文本轉換的字節編碼????? 默認為?ASCIIEncoding

ASCIIEncoding 不提供錯誤檢測。出于安全原因,建議您使用?UTF8Encoding、UnicodeEncoding?或?UTF32Encoding并啟用錯誤檢測。

ASCIIEncoding 僅支持 U+0000 和 U+007F之間的 Unicode 字符值。因此,UTF8Encoding、UnicodeEncoding 和 UTF32Encoding 可以更好地適應全球化的應用程序。

18. DtrEnable 獲取或設置一個值,該值在串行通信過程中啟用數據終端就緒 (DTR) 信號?? 默認值 false

在 XON/XOFF 軟件握手、請求發送/可以發送 (RTS/CTS) 硬件握手和調制解調器通信的過程中通常啟用數據終端就緒 (DTR)。

19. RtsEnable 獲取或設置一個值,該值指示在串行通信中是否啟用請求發送 (RTS) 信號?? 默認值false

請求發送 (RTS) 信號通常用在請求發送/可以發送 (RTS/CTS) 硬件握手中。

20. CDHolding 獲取端口的載波檢測行的狀態

此屬性可用于監視端口的載波檢測行的狀態。無載波通常表明接收方已掛斷且載波已被丟棄。

21. CtsHolding ????? 獲取“可以發送”行的狀態

在請求發送/可以發送 (RTS/CTS) 硬件握手中使用可以發送 (CTS) 行。發送數據之前端口會查詢 CTS 行。

22. DsrHolding ????? 獲取數據設置就緒 (DSR) 信號的狀態

在數據設置就緒/數據終端就緒 (DSR/DTR) 握手中使用此屬性。通常由調制解調器將數據設置就緒 (DSR) 信號發送到端口,以表明它已經為數據傳輸或數據接收做好準備。

23. BufferSize??? 值1024

24. maxDataBits??? 值8

25. minDataBits??? 值5

26. SERIAL_NAME??? 值\\Device\\Serial

?

二、方法

1. Open()?? 打開一個新的串行端口連接

2. Close()?? 關閉端口連接,將?IsOpen?屬性設置為 false,并釋放內部?Stream?對象

3. Read(Byte[], int, int)?? 輸入緩沖區讀取一些字節并將那些字節寫入字節數組中指定的偏移量處

4. ReadByte()?? 從?SerialPort?輸入緩沖區中同步讀取一個字節

5. ReadChar()?? 從?SerialPort?輸入緩沖區中同步讀取一個字符

6. ReadExisting()?? 在編碼的基礎上,讀取?SerialPort?對象的流和輸入緩沖區中所有立即可用的字節

6. ReadLine()?? 一直讀取到輸入緩沖區中的?NewLine?值

7. ReadTo()?? 一直讀取到輸入緩沖區中的指定?value?的字符串

8. Write(string)?? 將指定的字符串寫入串行端口

9. Write(Byte[], int, int)?? 使用緩沖區的數據將指定數量的字符寫入串行端口

10. WriteLine()?? 將指定字符串和NewLine值寫入輸出緩沖區

11. DiscardInBuffer()?? 丟棄接收緩沖區的數據

12. DiscardOutBuffer()?? 丟棄發送緩沖區的數據

12. static GetPortNanes()?? 獲取當前計算機的串口名稱數組

?

三、事件

1. DataReceive事件?? 數據接收事件的方法

  不保證對接收到的每個字節引發 DataReceived 事件。 使用 BytesToRead 屬性確定緩沖區中剩余的要讀取的數據量。從 SerialPort 對象接收數據時,將在輔助線程上引發 DataReceived 事件。

2. PinChanged事件??? 串行管腳更改事件的方法

  在 SerialPort 對象進入 BreakState 時引發,但在端口退出 BreakState 時不引發。將在輔助線程上引發 PinChanged 事件。

3. ErrorReceived事件?????? 錯誤事件的方法

  如果在流的尾字節上出現奇偶校驗錯誤,將向輸入緩沖區添加一個值為 126 的額外字節。將在輔助線程上引發 ErrorReceived事件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NTFS文件系統的簡述

NTFS文件系統的設計思想基于穩定性、和安全性并支持大容量存儲設備的文件系統:1.它提供日志可以增加文件系統的容錯率,可以有效的保護系統的安全。NTFS是一個可恢復的文件系統。在NTFS分區上即使強制關機后,一般也不需要運行CHKDSK命令修復磁…

Rxjava基礎

現在很多Android App的開發開始使用Rxjava,但是Rxjava以學習曲線陡峭著稱,入門有些困難。經過一段時間的學習和使用,這里來介紹一下我對Rxjava的理解。 說到Rxjava首先需要了解的兩個東西,一個是Observable(被觀察者&a…

『協議』XML-RPC 協議規格說明

為什么80%的碼農都做不了架構師?>>> 這篇文章提供所有實現XML-RPC協議所需要的內容。 一覽 XML-RPC是一個工作在因特網上的遠端程序調用(Remote Procedure Calling)協議。 XML-RPC消息是一個HTTP-POST請求(Request&…

Qt之QLineEdit詳解(附源碼)

原博客地址:http://blog.csdn.net/liang19890820/article/details/52044639,感謝原作者總結和分享。 簡述 QLineEdit是一個單行文本輸入框。 QLineEdit允許用戶輸入和編輯單行純文本,提供了很多有用的編輯功能,包括:撤…

POJ 1323 Game Prediction#貪心

(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e;* //既然是求最少能勝幾次 //說明對方是要盡可能讓我輸 //但為了避免浪費&#xff0c;對方會用比我的牌大的牌中的最小pip的牌來擊敗我 #include<iostream> #include<cstdio> #include<cstring> #inclu…

qt學習之鍵盤事件( keyPressEvent)

//最近一直忙于做驅動&#xff0c;對底層東西很是好奇&#xff0c;好奇鍵盤是 怎么區分每個鍵值的&#xff0c;又是怎么響應的&#xff01;因此&#xff0c;就有了下面這些代碼//環境windows 工具qt 語言c//在主窗體類中聲明鍵盤響應函數 void keyPressEvent(QKeyEvent * event…

C#json數據的序列化和反序列化(將數據轉換為對象或對象集合)

引用 System.Runtime.Serialization.Json 轉載于:https://www.cnblogs.com/a849788087/p/5645828.html

位圖(bmp)文件格式分析

from&#xff1a;https://blog.csdn.net/qingchuwudi/article/details/25785307 位圖(bmp)文件格式分析 作者&#xff1a;深藍&#xff08;由博主分享&#xff09; 一、什么是位圖 計算機能以位圖和矢量圖格式顯示圖像。 1、位圖(Bitmap)&#xff1a; 圖像又稱點陣圖或光…

匯付 支付,痛苦的接入過程

有文檔&#xff0c;但是&#xff0c;寫文檔的人明白&#xff0c;看文檔的人很有難度。 沒有SDK&#xff0c;要自已寫。 然后&#xff0c;錢的流入流出都必須經過虛擬錢包&#xff0c;提現還要綁取現卡&#xff0c;這個我也能理解&#xff0c;不能理解的是&#xff0c;訂單退款&…

隨筆分類 - HALCON學習例程中文詳解

from: https://www.cnblogs.com/chita/category/563492.html隨筆分類 - HALCON學習例程中文詳解HALCON學習例程中文詳解跟我學機器視覺-HALCON學習例程中文詳解-測量圓環腳寬間距摘要: 跟我學機器視覺-HALCON學習例程中文詳解-測量圓環腳寬間距* This example program demonstr…

WinCE6 如何去掉控制面板中的應用?

在WINCE600/PUBLIC/WCESHELLFE/OAK/FILES/wceshellfe.bib把對應的cpl 干掉例如區域設置 好像是2個 ; CESYSGEN IF WCESHELLFE_MODULES_INTLPintlp.cpl $(_FLATRELEASEDIR)/intlp.cpl NK SH ; CESYSGEN ENDIF ; CESYSGEN IF WCESHELLFE_MODULES_INTLLintll.cpl $(_FLATRELEASEDI…

軟件自動更新解決方案及QT實現

from&#xff1a;https://blog.csdn.net/hulinhulin/article/details/46839107軟件自動更新解決放案及QT實現...11 文件的版本控制-XML.22 更新程序的實現...22.1 界面設置...22.2 程序功能...32.2.1 下載網絡數據...32.2.2 XML文件的分析...62.2.3 下載XML文件的DownLoadXML函…

java 基本功 —— 內存相關

2019獨角獸企業重金招聘Python工程師標準>>> 首先我們來說說內存&#xff0c;因為從內存的角度來出發來分析一些變量&#xff0c;引用或者對象的生命周期會更好理解一些。 java是一門編程語言&#xff0c;他跟C有什么不同呢&#xff1f;本質上&#xff0c;他們都是一…

DOM事件處理有三個階段

DOM事件處理有三個階段&#xff1a; 捕捉階段&#xff08;capture phase&#xff09;&#xff1a;從最上層元素&#xff0c;直到最下層&#xff08;你點擊的那個target&#xff09;元素。路過的所有節點都可以捕捉到該事件。命中階段&#xff08;target phase&#xff09;&…

客戶端程序自動更新(升級)的方式

from&#xff1a;https://blog.csdn.net/woaitingting1985/article/details/72954652一、C/S自動更新原理C/S程序自動升級是一個很重要的功能&#xff0c;原理其實很簡單&#xff0c;一般包含兩個程序一個是主程序&#xff0c;也就是除了升級功能以外的程序&#xff0c;另一個就…

怎么用源程序把ChemDraw結構復制到Word文檔

在學習化學過程中&#xff0c;不可避免的會接觸到各種化學結構。這個時候就需要通過繪制化學結構來進行這方面的學習和傳播。ChemDraw Professional 15就可以輔助完成這方面的工作。很多的用戶朋友會通過選中后復制粘貼可以將ChemDraw結構復制到Word文檔中&#xff0c;但這只是…

網絡流(最大流) HDU 1565 方格取數(1) HDU 1569 方格取數(2)

HDU 1565 方格取數(1)給你一個n*n的格子的棋盤&#xff0c;每個格子里面有一個非負數。從中取出若干個數&#xff0c;使得任意的兩個數所在的格子沒有公共邊&#xff0c;就是說所取的數所在的2個格子不能相鄰&#xff0c;并且取出的數的和最大。 Input 包括多個測試實例&#…

python學習 第一篇 基礎

上周報名了reboot python 課程&#xff0c;終于下決心要把python 搞好了&#xff0c;希望自己能堅持下來&#xff0c;并得到自己想要的成績#coding:utf-8 #呵呵 #print hello world #xhello world #print x #xraw_input(hello world) #print x #int #print 23 #print 12*3 #pri…

QT串口編程的相關類(QSerialPortInfo)

QT Serial Port相關的類只有兩個QSerialPortInfo(#include<QSerialPortInfo>) 和QserialPort(#include<QSerialPort>) 先來介紹QSerialPortInfo 1&#xff1a;QSerialPortInfo(#include<QSerialPortInfo>) 該類是一個串口的輔助類類&#xff0c;提供主要是提…

用jquery寫一個屬于自己的音樂播放器

看到一個用css3實現的CD的動畫&#xff0c;演示在這兒http://codepen.io/_kieran/pen/QNRmep 突然那我就想說給自己做一個音樂播放器吧&#xff0c;說做就做。演示在https://echolsx.github.io/music/ Github傳送門&#xff1a;https://github.com/EchoLsx/music 主要代碼&…