ialPort(串行端口資源)
常用屬性:
BaudRate 此串行端口上要使用的波特率
DataBits 每發送/接收一個字節的數據位數目
DtrEnable 在通訊過程中是否啟用數據終端就緒(Str)行
PortName 要打開的通訊端口的名稱
RtsEnable 在通訊過程中是否啟用請求發送(Rts)行
StopBits 每發送/接收一個字節的停止位數
常用事件:
DataReceived 每次從SerialPort接收數據時引發
應用:
0、查詢串口 並加載
1、打開串口
2、發送數據
3、接收數據

1 //SerialPort數據讀取 2 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) 3 { 4 //此項目接收數據每12位為一組,並以“02”為開始標識符,第2到第7位的最后一個數字為傳輸的數據 5 6 //延遲100ms執行,為了防止SerialPort獲取數據時,獲取到的數據少於12位,顯示框不顯示數據問題 7 Thread.Sleep(100); 8 //當接收到的數據>=12位,即一個完整的數據時,再進行數據讀取分析 9 if (serialPort1.BytesToRead >= 12) 10 { 11 try 12 { 13 //將緩存區的數據放入by數組中 14 byte[] by = new byte[serialPort1.BytesToRead]; 15 while (serialPort1.BytesToRead > 0) 16 { 17 //★★★端口控件讀取數據★★★ 18 serialPort1.Read(by, 0, by.Length); 19 } 20 //result為最終顯示結果 21 string result = ""; 22 //循環判斷by數組,找到開始標識符“02” 23 for (int j = 0; j < by.Length; j++) 24 { 25 //將當前數據轉換為16進制字符串后,不足2位的向左用“0”補齊 26 string currentby = Convert.ToString(by[j], 16).PadLeft(2, '0'); 27 //如果當前為數據開始標識符,則讀取分析數據 28 if (currentby == "02") 29 { 30 //當剩余數據包換一個完整的12位數據時進行讀取分析 31 if (by.Length - j > 11) 32 { 33 //第2位開始到第7位結束,共6位為傳輸的數據 34 for (int k = j + 2; k <= j + 7; k++) 35 { 36 currentby = Convert.ToString(by[k], 16).PadLeft(2, '0'); 37 result += currentby.Substring(1, 1); 38 //前三位為整數部分,后三位為小數部分 39 if (k == j + 4) 40 { 41 result += "."; 42 } 43 } 44 } 45 //展示數據 46 txt_Weight.Text = (Convert.ToDecimal(result)).ToString(); 47 break; 48 } 49 } 50 } 51 catch (Exception ex) 52 { 53 MessageBox.Show(ex.ToString()); 54 } 55 } 56 }
4、數據接收錯誤
錯誤:將返回的數據處理后倒入指定的文本框,因線程問題出現錯誤
解決方案:Form.CheckForIllegalCrossThreadCalls = false;