欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c# 實現(xiàn)簡單的串口通訊

 更新時間:2021年03月12日 09:03:55   作者:月井石  
這篇文章主要介紹了c# 如何實現(xiàn)簡單的串口通訊,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

本文提供一個用C#實現(xiàn)串口通訊實例,親自編寫,親測可用!

開發(fā)環(huán)境:

VS2008+.net FrameWork3.5(實際上2.0應(yīng)該也可以)

第一步

創(chuàng)建一個WinForm窗體,拉入一些界面元素

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

第二步

設(shè)置SerialPort控件屬性

用C#向串口發(fā)送數(shù)據(jù)沒什么特別的,就是調(diào)用SerialPort的Write方法往串口寫數(shù)據(jù)就行

但是從串口那里接收數(shù)據(jù)的方式就比較特別了

首先,需要在代碼里聲明一個特別的事件函數(shù)

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

此函數(shù)是用來綁定到SerialPort控件的DataReceived事件

顧名思義,這個事件就是在接收到串口返回的數(shù)據(jù)時觸發(fā),里面就一句代碼

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

總之,這句代碼的用途就是用來調(diào)動另一個函數(shù),對界面UI元素的值進行更新(當然你也可以在里面執(zhí)行其他操作)

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;//數(shù)據(jù)位
            serialPort.StopBits = System.IO.Ports.StopBits.One;//停止位
            serialPort.Encoding = System.Text.Encoding.GetEncoding("GB2312");//此行非常重要,解決接收中文亂碼的問題
 
            // 打開串口
            try
            {
                serialPort.Open();
            }
            catch (Exception ex)
            {
                //捕獲到異常信息,創(chuàng)建一個新的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# 實現(xiàn)簡單的串口通訊的詳細內(nèi)容,更多關(guān)于c# 串口通訊的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論