欢迎来到C#上位机教程的零基础入门!本教程将帮助你从零开始学习C#编程,并使用C#构建上位机应用程序,本教程将以经典的串口工具开发为Demo,讲述一个项目如何去实现,本节内容将讲述串口的操作。

首先简单介绍下串口通讯中一个重要的类库SerialPort,SerialPort 类是用于在计算机上通过串行端口与外部设备进行通信的类。串行端口是一种用于在计算机和外部设备之间传输数据的物理接口,例如用于连接调制解调器、打印机、传感器等设备。在 .NET Framework 和 .NET Core(现在称为 .NET 5+)等平台中,System.IO.Ports.SerialPort 类提供了与串行端口进行通信的功能。通过此类,您可以打开、关闭串行端口,发送和接收数据,配置通信参数等。下是 SerialPort 类的一些重要方法和属性:

  1. 构造函数:

    • SerialPort(string portName): 通过指定的串行端口名称创建一个 SerialPort 实例。

  2. 重要属性:

    • PortName: 获取或设置要使用的串行端口的名称。

    • BaudRate: 获取或设置波特率(数据传输速率)。

    • DataBits: 获取或设置数据位数。

    • Parity: 获取或设置奇偶校验位。

    • StopBits: 获取或设置停止位的数量。

    • ReadTimeout 和 WriteTimeout: 获取或设置读取和写入操作的超时时间

  3. 方法:

    • Open(): 打开串行端口以进行通信。

    • Close(): 关闭串行端口。

    • Write(byte[] buffer, int offset, int count): 将指定数量的字节写入串行端口。

    • Read(byte[] buffer, int offset, int count): 从串行端口读取指定数量的字节。

    • DataReceived 事件:当接收到数据时触发的事件。

使用 SerialPort 类,您可以创建串行端口通信的应用程序,如与硬件设备通信、数据采集、传感器数据读取等。需要注意的是,在使用此类时,要小心处理异常情况,如端口不可用、数据传输错误等。

我们紧接上一节的教程,在Form窗体中通过拖放的方式加载SerialPort组件如下图所示

注意,在.Net6中serialPort类库需要通过NuGet的方式引入。

双击Form查看代码,使用“using”引入“System.IO.Ports”这个命名空间

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO.Ports; //引入命名空间using System.Text;using System.Windows.Forms;

System.IO.Ports包含用于控制串行端口的类。最重要的类 SerialPort 为同步和事件驱动 I/O 提供框架,提供对插针和中断状态的访问,以及对串行驱动程序属性的访问。它可用于包装 Stream 对象,允许使用流的类访问串行端口。

双击"打开串口"系统自动根据button按钮的"Name"属性生成一个产生双击"打开串口"的事件后调用的方法,完整代码如下

 private void OpenPortBtn_Click(object sender, EventArgs e) {    try    {      if (!portOpenFlag)      {          //串口号          serialPort1.PortName = portCbb.Text;          // 波特率          serialPort1.BaudRate = Convert.ToInt32(baudCbb.Text);          //检验位  从枚举中获取相应的值   FaceType aaa = (FaceType)Enum.Parse(typeof(FaceType), cbFace.Text)          serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity),checkCbb .Text);          //数据位          serialPort1.DataBits = Convert.ToInt32(dataBitsCbb.Text);          //停止位          serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits),stopBitsCbb.Text);          serialPort1.Open();          portOpenFlag = true;          this.OpenPortBtn.Text = "关闭串口";        }        else        {           portOpenFlag = false;          serialPort1.Close();          this.OpenPortBtn.Text = "打开串口";        }    }    catch (Exception ex)    {
MessageBox.Show(ex.Message+serialPort1.PortName.ToString()); }}

代码解析:先建立一个bool类型的串口打开状态标志位初始状态为false:portOpenFlag,如果串口没有打开。我们初始化配置参数,主要包括端口号,波特率,数据位,停止位,校验位,并且调用串口打开函数,将portOpenFlag置位为true,按钮文本改为'关闭串口',如果串口已经打开。   portOpenFlag 置位为 false;并且调用串口关闭函数,将portOpenFlag置位为true,按钮文本改为'打开串口',在串口打开或者关闭的过程中有很多因素导致操作失败,所以我们用try`````catch捕捉异常,及时将错误抛出,避免程序的奔溃

在代码调试的过程中,我们需要用虚拟串口工具百度网盘链接如下:接:https://pan.baidu.com/s/1S0XXsXIXE-hQQd9AoCgnFA?pwd=m42i 取码:m42i

安装好虚拟串口工具以后,我们添加两个虚拟串口COM2和COM3

同时我们在电脑的设备管理器也能看到COM2和COM3.

下面通过代码获取到设备管理器中的COM2和COM3,并且将串口通讯参数的值设置为我们想要的默认值

首先绑定波特率,数据位,停止位,校验位,的数据集合

具体操作如下图:


波特率

检验位

数据位

停止

新建一个SerialPortInit方法,专门用于通讯参数combox的text值的初始化



 private void SerialPortInit()  {      //获取设备管理器的串口号        string[] ports = SerialPort.GetPortNames();      //将ports数组绑定奥串口号comobox 的数据源上      this.portCbb.DataSource = ports;      this.portCbb.SelectedIndex = 0;      //波特率         this.baudCbb.SelectedIndex = 3;      //校验位      this.checkCbb.SelectedIndex = 0;      //数据位      this.dataBitsCbb.SelectedIndex = 0;      //停止位      this.stopBitsCbb.SelectedIndex = 1;  }

然后再窗体初始化时调用此函数

 private void Form1_Load(object sender, EventArgs e){    this.SerialPortInit();   
}

最终通讯参数默认值如下:

当我们选择打开“COM2”时,虚拟串口COM2显示的通讯参数能够和串口工具的通讯设定值对应上。

上是本节的全部内容,回顾一下我们学会的知识点:

1、SerialPort类库的基本了解

2、获取端口号

3、初始化通讯参数的配置

4、串口的开启关闭操作

点赞(2) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部