常州上位机培训

常州机器视觉培训

常州机器人培训

江苏和讯自动化设备有限公司欢迎您!
  • 和讯PLC,电工培训中心优势,名师团队一对一教学.
热门课程
联系方式
  • 常州和讯自动化培训中心
  • 常州市新北区太湖东路府琛大厦2号楼307-1室,307-2室(常州万达广场对面)
  • 电话:0519-85602926
  • 手机:15861139266 13401342299
当前位置:网站首页 > 新闻中心 新闻中心
C#上位机系列教程零基础入门-串口操作,常州上位机培训,常州机器视觉培训
日期:2023-12-8 9:18:51人气:  标签:常州上位机培训 常州机器视觉培训

C#上位机系列教程零基础入门-串口操作

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


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


构造函数:


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


重要属性:


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


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


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


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


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


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


方法:


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


Close(): 关闭串行端口。


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


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


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


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


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

1.png

2.png

注意,在.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

3.png

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

4.png

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


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


具体操作如下图:




波特率

5.png

检验位

6.png

数据位

7.png

停止位

8.png

新建一个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();

   


}

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

9.png

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

10.png

本文网址:

相关信息:
版权所有 CopyRight 2006-2017 江苏和讯自动化设备有限公司 电话:0519-85602926 地址:常州市新北区太湖东路府琛大厦2号楼307-1室,307-2室
ICP备14016686号-2 技术支持:常州鹤翔网络
本站关键词:常州电工培训 常州电工证 常州变频器培训 常州触摸屏培训 网站地图 网站标签
在线与我们取得联系