C#串口介紹以及簡單串口通訊程式設計實現

來源:互聯網
上載者:User

標籤:發送資料   false   運行   程式設計   rs485   file   應用   device   nbsp   

C#串口介紹以及簡單串口通訊程式設計實現

周末,沒事幹,寫個簡單的串口通訊工具,也算是本周末曾來過,廢話不多,直接到主題

串口介紹

  串列介面簡稱串口,也稱串列通訊介面或串列通訊介面(通常指COM介面),是採用串列通訊方式的擴充介面。(至於再詳細,自己百度)

串口應用:

  工業領域使用較多,比如:資料擷取,裝置控制等等,好多都是用串口通訊來實現!你要是細心的話,你會發現,目前家用國網智能電能表就具備RS485通訊匯流排(串列匯流排的一種)與RS232可以相互轉化(當然一般,非專業的誰也不會閑的蛋疼,趴電錶上瞎看,最多也就看看走了多少度電)

RS232 DB9介紹:1.

2.針腳介紹:
  1.  偵測載波(DCD) 
  2.  接受資料(RXD) 
  3.  發出資料(TXD) 
  4.  資料終端準備好(DTR) 
  5.  訊號地線(SG)
  6.  資料準備好(DSR)
  7.  請求發送(RTS)
  8.  清除發送(CTS)
  9.  響鈴指示(RI)
3.實物圖:

以下是我購買XX公司的一個usb轉串口線:這個頭就是一個公頭,另一端是一個usb口

笨小孩串口工具運行圖:1.開啟程式

2.發送一行字串HelloBenXH,直接將針腳的發送和接收連結起來就可以測試了(針腳2 接受資料(RXD) 和3 發出資料(TXD))直接連結,

C#代碼實現:採用SerialPort1.執行個體化一個SerialPort
1 private SerialPort ComDevice = new SerialPort();
2.初始化參數綁定接收資料事件
 1 public void init() 2         { 3             btnSend.Enabled = false; 4             cbbComList.Items.AddRange(SerialPort.GetPortNames()); 5             if (cbbComList.Items.Count > 0) 6             { 7                 cbbComList.SelectedIndex = 0; 8             } 9             cbbBaudRate.SelectedIndex = 5;10             cbbDataBits.SelectedIndex = 0;11             cbbParity.SelectedIndex = 0; 12             cbbStopBits.SelectedIndex = 0;13             pictureBox1.BackgroundImage = Properties.Resources.red;14 15             ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//綁定事件16             17         }
3.開啟串口button事件
 1 /// <summary> 2         /// 開啟串口 3         /// </summary> 4         /// <param name="sender"></param> 5         /// <param name="e"></param> 6         private void btnOpen_Click(object sender, EventArgs e) 7         { 8             if (cbbComList.Items.Count <= 0) 9             {10                 MessageBox.Show("沒有發現串口,請檢查線路!");11                 return;12             }13 14             if (ComDevice.IsOpen == false)15             {16                 ComDevice.PortName = cbbComList.SelectedItem.ToString();17                 ComDevice.BaudRate = Convert.ToInt32(cbbBaudRate.SelectedItem.ToString());18                 ComDevice.Parity = (Parity)Convert.ToInt32(cbbParity.SelectedIndex.ToString());19                 ComDevice.DataBits = Convert.ToInt32(cbbDataBits.SelectedItem.ToString());20                 ComDevice.StopBits = (StopBits)Convert.ToInt32(cbbStopBits.SelectedItem.ToString());21                 try22                 {23                     ComDevice.Open();24                     btnSend.Enabled = true;25                 }26                 catch (Exception ex)27                 {28                     MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);29                     return;30                 }31                 btnOpen.Text = "關閉串口";32                 pictureBox1.BackgroundImage = Properties.Resources.green;33             }34             else35             {36                 try37                 {38                     ComDevice.Close();39                     btnSend.Enabled = false;40                 }41                 catch (Exception ex)42                 {43                     MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);44                 }45                 btnOpen.Text = "開啟串口";46                 pictureBox1.BackgroundImage = Properties.Resources.red;47             }48 49             cbbComList.Enabled = !ComDevice.IsOpen;50             cbbBaudRate.Enabled = !ComDevice.IsOpen;51             cbbParity.Enabled = !ComDevice.IsOpen;52             cbbDataBits.Enabled = !ComDevice.IsOpen;53             cbbStopBits.Enabled = !ComDevice.IsOpen;54         }
4.發送資料
 1 /// <summary> 2         /// 發送資料 3         /// </summary> 4         /// <param name="sender"></param> 5         /// <param name="data"></param> 6         public bool SendData(byte[] data) 7         { 8             if (ComDevice.IsOpen) 9             {10                 try11                 {12                     ComDevice.Write(data, 0, data.Length);//發送資料13                     return true;14                 }15                 catch (Exception ex)16                 {17                     MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);18                 }19             }20             else21             {22                 MessageBox.Show("串口未開啟", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);23             }24             return false;25         }26 27         /// <summary>28         /// 發送資料button事件29         /// </summary>30         /// <param name="sender"></param>31         /// <param name="e"></param>32         private void btnSend_Click(object sender, EventArgs e)33         {34             byte[] sendData = null;35 36             if (rbtnSendHex.Checked)37             {38                 sendData = strToHexByte(txtSendData.Text.Trim());39             }40             else if (rbtnSendASCII.Checked)41             {42                 sendData = Encoding.ASCII.GetBytes(txtSendData.Text.Trim());43             }44             else if (rbtnSendUTF8.Checked)45             {46                 sendData = Encoding.UTF8.GetBytes(txtSendData.Text.Trim());47             }48             else if (rbtnSendUnicode.Checked)49             {50                 sendData = Encoding.Unicode.GetBytes(txtSendData.Text.Trim());51             }52             else53             {54                 sendData = Encoding.ASCII.GetBytes(txtSendData.Text.Trim());55             }56 57             if (this.SendData(sendData))//發送資料成功計數58             {59                 lblSendCount.Invoke(new MethodInvoker(delegate60                 {61                     lblSendCount.Text = (int.Parse(lblSendCount.Text) + txtSendData.Text.Length).ToString();62                 }));63             }64             else65             {66 67             }68 69         }70 71         /// <summary>72         /// 字串轉換16進位位元組數組73         /// </summary>74         /// <param name="hexString"></param>75         /// <returns></returns>76         private byte[] strToHexByte(string hexString)77         {78             hexString = hexString.Replace(" ", "");79             if ((hexString.Length % 2) != 0)80                 hexString += " ";81             byte[] returnBytes = new byte[hexString.Length / 2];82             for (int i = 0; i < returnBytes.Length; i++)83                 returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Replace(" ",""), 16);84             return returnBytes;85         }
5.接收和資料輸出
 1 /// <summary> 2         /// 接收資料 3         /// </summary> 4         /// <param name="sender"></param> 5         /// <param name="e"></param> 6         private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) 7         { 8             byte[] ReDatas = new byte[ComDevice.BytesToRead]; 9             ComDevice.Read(ReDatas, 0, ReDatas.Length);//讀取資料10             this.AddData(ReDatas);//輸出資料11         }12        13         /// <summary>14         /// 添加資料15         /// </summary>16         /// <param name="data">位元組數組</param>17         public void AddData(byte[] data)18         {19             if (rbtnHex.Checked)20             {21                 StringBuilder sb = new StringBuilder();22                 for (int i = 0; i < data.Length; i++)23                 {24                     sb.AppendFormat("{0:x2}" + " ", data[i]);25                 }26                 AddContent(sb.ToString().ToUpper());27             }28             else if (rbtnASCII.Checked)29             {30                 AddContent(new ASCIIEncoding().GetString(data));31             }32             else if (rbtnUTF8.Checked)33             {34                 AddContent(new UTF8Encoding().GetString(data));35             }36             else if (rbtnUnicode.Checked)37             {38                 AddContent(new UnicodeEncoding().GetString(data));39             }40             else41             {}42           43             lblRevCount.Invoke(new MethodInvoker(delegate44             {45                 lblRevCount.Text = (int.Parse(lblRevCount.Text) + data.Length).ToString();46             }));47         }48 49 50         /// <summary>51         /// 輸入到顯示地區52         /// </summary>53         /// <param name="content"></param>54         private void AddContent(string content)55         {56             this.BeginInvoke(new MethodInvoker(delegate57             {58                 if(chkAutoLine.Checked && txtShowData.Text.Length>0)59                 {60                     txtShowData.AppendText("\r\n");61                 }62                 txtShowData.AppendText(content);63             }));64         }
6.清空資料區域事件
 1 /// <summary> 2         /// 清空接收區 3         /// </summary> 4         /// <param name="sender"></param> 5         /// <param name="e"></param> 6         private void btnClearRev_Click(object sender, EventArgs e) 7         { 8             txtShowData.Clear(); 9         }10 11         /// <summary>12         /// 清空發送區13         /// </summary>14         /// <param name="sender"></param>15         /// <param name="e"></param>16         private void btnClearSend_Click(object sender, EventArgs e)17         {18             txtSendData.Clear();19         }

 運行程式  BXHSerialPort.exe

原始碼工程檔案下載

C#串口介紹以及簡單串口通訊程式設計實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.