C#串口通訊

來源:互聯網
上載者:User

標籤:logs   執行   highlight   []   exist   orm   style   接收   try   

本文提供一個用C#實現串口通訊執行個體,親自編寫,親測可用!

開發環境:VS2008+.net FrameWork3.5(實際上2.0應該也可以)

第一步

建立一個WinForm表單,拉入一些介面元素

重點就是,圖中用紅框標出的,工具箱——組件——SerialPort,做.net串口通訊,這是必備控制項

第二步

設定SerialPort控制項屬性

用C#向串口發送資料沒什麼特別的,就是調用SerialPort的Write方法往串口寫資料就行

但是從串口那裡接收資料的方式就比較特別了

首先,需要在代碼裡聲明一個特別的事件函數

private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)        {            this.Invoke(new EventHandler(UpdateUIText));        }

此函數是用來綁定到SerialPort控制項的DataReceived事件

顧名思義,這個事件就是在接收到串口返回的資料時觸發,裡面就一句代碼

對這句代碼有興趣的可以私下再去研究,這裡就不贅述了

總之,這句代碼的用途就是用來調動另一個函數,對介面UI元素的值進行更新(當然你也可以在裡面執行其他動作)

        private void UpdateUIText(object s, EventArgs e)        {            try            {                //必須要阻塞線程一段時間,以免在交易逾時的情況下,由於read太快導致讀取不完整                System.Threading.Thread.Sleep(500);                string txt = serialPort.ReadExisting();                txt_Received.Text = txt;            }            catch (Exception ex)            {                MessageBox.Show(ex.Message.ToString());            }                    }

 

第三步

開始寫邏輯代碼,廢話不多說,直接貼上來

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WinForm串口通訊{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();                    }        private void Form1_Load(object sender, EventArgs e)        {            string[] ports = System.IO.Ports.SerialPort.GetPortNames();            if (ports.Length == 0)            {                MessageBox.Show("本機沒有串口!");            }            Array.Sort(ports);            serialPort.PortName = ports[0];//串口號COM3            serialPort.BaudRate = 115200;//傳輸速率            serialPort.DataBits = 8;//資料位元            serialPort.StopBits = System.IO.Ports.StopBits.One;//停止位            serialPort.Encoding = System.Text.Encoding.GetEncoding("GB2312");//此行非常重要,解決接收中文亂碼的問題            // 開啟串口            try            {                serialPort.Open();            }            catch (Exception ex)            {                //捕獲到異常資訊,建立一個新的comm對象,之前的不能用了。                   serialPort = new System.IO.Ports.SerialPort();                //將異常資訊傳遞給使用者。                   MessageBox.Show(ex.Message);                return;            }        }        private void button1_Click(object sender, EventArgs e)        {                       string msgOrder = txt_Msg.Text;            //MessageBox.Show(msgOrder);            serialPort.Write(msgOrder);                    }        private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)        {            this.Invoke(new EventHandler(UpdateUIText));        }        private void UpdateUIText(object s, EventArgs e)        {            try            {                //必須要阻塞線程一段時間,以免在交易逾時的情況下,由於read太快導致讀取不完整                System.Threading.Thread.Sleep(500);                string txt = serialPort.ReadExisting();                txt_Received.Text = txt;            }            catch (Exception ex)            {                MessageBox.Show(ex.Message.ToString());            }                    }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)        {            try            {                if (serialPort != null && serialPort.IsOpen)                {                    serialPort.Close();                    serialPort.Dispose();                }            }            catch (Exception ex)            {                //將異常資訊傳遞給使用者。                   MessageBox.Show(ex.Message);                return;            }        }            }}

 至此,一個簡單完整的串口通訊就完成了,希望對你們有所協助

轉載請別忘了標明出處,謝謝~

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.