zoukankan      html  css  js  c++  java
  • 利用 SerialPort 控件实现 PC 串口通信

    整理参考自《Visual C#.NET 串口通信及测控应用典型实例》1.3 节 以及 一篇博文:C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子

    硬件部分

    如果是两个串口设备,把其中一个的 2、3、5 引脚分别连接到另一个的 3、2、5 引脚即可。

    如果是单个串口设备,则将其2、3引脚相连就行了。

    如果没有串口设备,可以使用软件(Virtual Serial Port Driver)模拟串口。

    硬件连接好之后,可以先下载一个“串口调试助手1”测试串口连接是否正常。

    软件部分

    利用 .NET 平台下的 SerialPort 控件。

    通信接收实现方式:

    1. 查询方式:通过一个计数器,定时查询是否有可接受的内容。

    界面如下:

    image

    实现代码:

    using System;
    using System.Windows.Forms;
    
    namespace QueryMode
    {
        public partial class FormMain : Form
        {
            public FormMain()
            {
                InitializeComponent();
            }
    
            private void FormMain_Load(object sender, EventArgs e)
            {
                spSend.PortName = "COM2";
                spSend.BaudRate = 9600;
                spSend.Open();
                spReceive.PortName = "COM3";
                spReceive.BaudRate = 9600;
                spReceive.Open();
    
                timerReceive.Start();
            }
    
            private void btnSend_Click(object sender, EventArgs e)
            {
                string dataToSend = txtSend.Text;
                if (dataToSend == "")
                {
                    MessageBox.Show("发送数据不能为空");
                }
                else
                {
                    spSend.Write(dataToSend);
                }
            }
    
            private void timerReceive_Tick(object sender, EventArgs e)
            {
                string dataReceived;
                dataReceived = spReceive.ReadExisting();
                txtRecevie.AppendText(dataReceived);
            }
    
            private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                spSend.Close();
                spReceive.Close();
            }
        }
    }

    2. 事件方式:利用 SerialPort 控件的 DataReceived 事件。

    界面部分基本同上,只是不需要 timer 控件了。

    实现代码:

    using System;
    using System.Windows.Forms;
    
    namespace EventMode
    {
        public partial class FormMain : Form
        {
            public FormMain()
            {
                InitializeComponent();
            }
    
            private void FormMain_Load(object sender, EventArgs e)
            {
                spSend.PortName = "COM2";
                spSend.BaudRate = 9600;
                spSend.Open();
                spReceive.PortName = "COM3";
                spReceive.BaudRate = 9600;
                spReceive.Open();
            }
    
            private void btnSend_Click(object sender, EventArgs e)
            {
                string dataToSend = txtSend.Text;
                if (dataToSend == "")
                {
                    MessageBox.Show("发送数据不能为空");
                }
                else
                {
                    spSend.Write(dataToSend);
                }
            }
    
            private void spReceive_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                string dataReceived;
                dataReceived = spReceive.ReadExisting();
                this.Invoke((EventHandler)delegate
                {
                    txtRecevie.AppendText(dataReceived);
                });
            }
    
            private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                spSend.Close();
                spReceive.Close();
            }
        }
    }

    需要说明的是,在 DataReceived 事件处理方法中,在用到主窗体的 TextBox 控件时,要通过控件的 invoke 方法,否则会出现线程间的操作问题:

    image


    注1:串口调试助手软件主页:http://www.gjwtech.com/(用 Chrome 打开时提醒“存在恶意软件”,请谨慎操作。)

    备选下载地址:http://pan.baidu.com/s/16AzRO(串口调试助手V2.2)

    注2:程序完整解决方案下载:http://pan.baidu.com/s/1d4om3(VS2010 版)

  • 相关阅读:
    MS SQL Server获取月份名称缩写
    视频站点程序
    视频站点程序 Ver2
    Infor Syteline 数据库增长月报表
    判断是否有选择RadioButtonList
    获取用户控件中控件的ID
    FileUpload上传图片前首先预览一下
    为TextBox装饰水印
    导航条的重构
    用户自己排序记录
  • 原文地址:https://www.cnblogs.com/gumuyueying/p/serialport-communication.html
Copyright © 2011-2022 走看看