1. 程式人生 > >串口通信

串口通信

接收數據 元素 指示 t對象 字節 odin 奇偶校驗 一個 屬性

SerialPort類

SerialPort sp = new SerialPort("COM1"); 或者 SerialPort sp = new SerialPort();sp.PortName = "COM1";

這兩種寫法是等效的;獲得串口“COM1”的操作權,就是創建一個SerialPort對象,然後對象的屬性PortName初始化為指定的串口名“COM1”,即可用該對象操作串口“COM1”,如:設置串口的通信參數,打開串口,發送數據,接收數據,關閉串口等;

SerialPort類的重要屬性:

(1)PortName

    賦予哪個串口名字,就是操作哪個串口;

(2)DataBits

    數據位的位數,有7,8,9三種情況,計算機編程語言認為8bit為一個字節,所以一般我們用8bit做為一幀數據幀的數據部分,這樣數據幀到達接收方,接收方解析一個數據幀提取出數據位即是一個字節;

(3)Parity

     奇偶校驗的方式,Parity.Even 奇校驗;Parity.Odd 偶校驗;Parity.None 不校驗;不校驗數據幀,能增加傳輸數據的效率,但是通信的可靠性降低;

(4)StopBits

    停止位的位數,StopBits.One StopBits.OnePointFive Two 指的是停止位持續幾個電平;

(5)BaudRate

    波特率,串口通信的速率,值越大串口傳輸數據越快;如果是異步串口通信的話,二者的波特率應該盡可能無限接近,允許有細微誤差;同步串口通信的話,雙方一般使用同一個時鐘,保證通信雙方的波特率嚴格一致;

檢查機器上有無串口,串口的數量,具體串口名字

string[] GetPortName()
//返回的數組的Length ==0,表示無串口
//Length > 0時候,表示有串口,Length的大小就是串口的數量
//字符串數組的每一個元素就是串口的名字

打開串口和關閉串口

sp.IsOpen
//指示串口是否處於打開狀態,true打開,false未打開;打開已經打開過的串口會拋出異常;
sp.Open() //打開串口 sp.Close() //關閉串口

向串口寫數據

public void Write(string)   //發送字符串
//假設sp的Encoding屬性是ASCII,寫入字符串“abc”,那麽實際寫入發送緩存3個字節;
//如果Encoding屬性是Unicode,那麽實際寫入發送緩存6個字節;

public void Write(byte[],int32,int32) //發送字節數組
//第一個參數是函數外已經創建好的字節數組的引用,第二個參數是從字節數組的第幾個字節開始寫,一般為0,第三個參數表示本次要寫入幾個字節;

public void Write(char[],int32,int32)  //發送字符數組
//用法參考上述兩個重載;特別說明,Encoding屬性同樣影響寫入發送緩存的字節數量,不同的編碼方式,雖然發送的是同一個字符數組,但是實際上寫入發送緩存的字節數量不同!

public void WriteLine(string)  //發送一行字符串
//發送完string,緊接著向發送緩存寫入一個NewLine字符串;

從串口讀數據

讀取數據可比發送數據復雜多了!

接收方接收到的數據都在接收緩存中,

串口通信