.NET 如何实现与串口设备通信

一、前言

串口是串行接口(Serial Port) 的简称,是一种常用于电子设备间通讯的全双工扩展接口。常见的有RS-232标准一般应用在计算机与外部设备之间进行数据传输(有25针或9针连接器)。我们现在的计算机基本上已经看不到串口,我们可以通过USB适配器来将COM端口转换为USB接口进行连接。今天我们来了解.NET 如何用C#语言编写代码实现与这些设备进行通信。

二、串口通信

串口通信包括通信时序、通讯速率、数据传输。

常用的通讯速率有2400bps、4800bps、9600bps、19200bps、38400bps、115200bps。

我们通过下图对串口的通信时序进行简单了解,串口时序由起始位、数据位、校验位、停止位组成。

下表对时序组成进行说明

名称 描述
起始位 占用1位,低电平有效。
数据位 可以是5位、6位、7位、8位,其中最常用为8位。
校验位 占用1位,无校验位时不占用。
偶校验(even parity):校验原则是,数据位和校验位中1的个数为偶数
奇校验(odd parity):校验原则是,数据位和校验位中1的个数为奇数
无校验(odd parity):即时序图中没有校验位
(Space):校验位总为0
(Mark):校验位总为1
停止位 占用1位、1.5位、2位,高电平有效

三、SerialPort类

.NET的框架类库提供了SerialPort类,可用SerialPort类来配置和管理串口的属性,可用于发送和接收数据。SerialPort类的常用属性包括PortName、BaudRate、Parity、DataBits、StopBits、Handshake、ReadTimeout和WriteTimeout等。这些属性用于指定串口的名称、波特率、校验位、数据位、停止位、握手协议以及读取和写入数据时的超时时间等。

  • 属性

    红色是类常用的属性,在我们使用类时根据连接设备情况进行属性的配置。

  • 方法

    我们先配置类的属性,然后使用 Open() 方法打开串口,使用 Write() 方法发送数据,使用 Read() 方法读取数据,并使用 Close() 方法关闭串口。

  • 事件

    在发送和接收数据时,我们也可以使用事件来处理数据的到达和发送完成。

四、示例

我们先定义波特率与数据位二个枚举类型:

  /// <summary>
  /// 波特率
  /// </summary>
  [Serializable]
  public enum BaudRates
  {
      Baud1200 = 1200,
      Baud2400 = 2400,
      Baud4800 = 4800,
      Baud9600 = 9600,
      Baud14400 = 14400,
      Baud19200 = 19200,
      Baud38400 = 38400,
      Baud115200 = 115200
  }
  /// <summary>
  /// 数据位
  /// </summary>
  [Serializable]
  public enum DataBits
  {
      /// <summary>
      /// 5位
      /// </summary>
      Bit5=5,
      /// <summary>
      /// 6位
      /// </summary>
      Bit6 = 6,
      /// <summary>
      /// 7位
      /// </summary>
      Bit7 = 7,
      /// <summary>
      /// 8位
      /// </summary>
      Bit8 = 8
  }

我这将对串口的操作封装在一个类上。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;

namespace Fountain.Net.Core.Com
{
  /// <summary>
  /// 串空操作
  /// </summary>
  public class OperationSerialPort
  {
      /// <summary>
      /// 数据接收
      /// </summary>
      public event Action<List<string>>? DataReceived;
      /// <summary>
      /// 接收异常
      /// </summary>
      public event SerialEr
  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fountyuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值