C# | 极简代码实现串口通信,功能超丰富 (使用BytesIO通信库)

在这里插入图片描述

C# 极简代码实现串口通信,功能超丰富

安装NuGet库

对项目右键单击,选择“管理NuGet程序包”。
在这里插入图片描述
搜索“BytesIO”,在列表中选择“STTech.BytesIO.Serial”串口通信库,在右边的详情面板中单击“安装”。
在这里插入图片描述

程序截图

在这里插入图片描述

事件监听

通过SerialClient可以监听串口的事件。
在这里插入图片描述

设计及实现

界面

控件排布及命名如图所示。
在这里插入图片描述

代码

主界面完整代码如下所示:

using STTech.BytesIO.Serial;
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace Test.BytesIO.Serial.Desktop
{
    public partial class MainForm : Form
    {
        // 串口连接客户端
        private SerialClient client;

        public MainForm()
        {
            InitializeComponent();

            // 创建串口通信客户端
            client = new SerialClient();

            // 向下拉选项框中添加所有串口名称
            cbPort.Items.AddRange(client.GetPortNames());

            // 监听连接成功事件
            client.OnConnectedSuccessfully += Client_OnConnectedSuccessfully;
            // 监听连接失败事件
            client.OnConnectionFailed += Client_OnConnectionFailed;
            // 监听断开连接事件
            client.OnDisconnected += Client_OnDisconnected;
            // 监听接收数据事件
            client.OnDataReceived += Client_OnDataReceived;
            // 监听发送数据事件
            client.OnDataSent += Client_OnDataSent;
            // 监听发生异常事件
            client.OnExceptionOccurs += Client_OnExceptionOccurs;
        }

        private void Client_OnExceptionOccurs(object sender, STTech.BytesIO.Core.Entity.ExceptionOccursEventArgs e)
        {
            Print($"异常: {e.Exception.Message}");
        }

        private void Client_OnDataSent(object sender, STTech.BytesIO.Core.Entity.DataSentEventArgs e)
        {
            Print($"发送: {e.Data.ToHexCodeString()}({e.Data.EncodeToString()})");
        }

        private void Client_OnDataReceived(object sender, STTech.BytesIO.Core.Entity.DataReceivedEventArgs e)
        {
            Print($"接收: {e.Data.ToHexCodeString()}({e.Data.EncodeToString()})");
        }

        private void Client_OnDisconnected(object sender, STTech.BytesIO.Core.Entity.DisconnectedEventArgs e)
        {
            Print("断开连接");
        }

        private void Client_OnConnectionFailed(object sender, STTech.BytesIO.Core.Entity.ConnectionFailedEventArgs e)
        {
            Print("连接失败");
        }

        private void Client_OnConnectedSuccessfully(object sender, STTech.BytesIO.Core.Entity.ConnectedSuccessfullyEventArgs e)
        {
            Print("连接成功");
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(cbPort.Text))
            {
                return;
            }

            client.PortName = cbPort.Text;
            client.Connect();
        }

        private void btnDisconnect_Click(object sender, EventArgs e)
        {
            client.Disconnect();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            client.Send(tbSend.Text.GetBytes());
        }

        /// <summary>
        /// 打印日志
        /// </summary>
        /// <param name="msg"></param>
        private void Print(string msg)
        {
            Invoke(new EventHandler(delegate
            {
                tbRecv.AppendText($"[{DateTime.Now.ToLongTimeString()}] {msg}\r\n");
            }));
        }
    }
}

源码下载

如果无法调试运行也没有关系,我已经整理打包上传到了CSDN下载站提供0积分下载:
https://download.csdn.net/download/lgj123xj/85139168

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在 C#实现 232 串口通信,可以使用 .NET Framework 提供的 System.IO.Ports 命名空间中的 SerialPort 类。 以下是一个简单的示例代码,展示如何打开串口、发送数据以及接收数据: ```csharp using System; using System.IO.Ports; class Program { static void Main(string[] args) { // 创建 SerialPort 对象 SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); // 打开串口 serialPort.Open(); // 发送数据 byte[] dataToSend = { 0x01, 0x02, 0x03 }; serialPort.Write(dataToSend, 0, dataToSend.Length); // 接收数据 byte[] buffer = new byte[1024]; int bytesRead = serialPort.Read(buffer, 0, buffer.Length); // 处理接收到的数据 byte[] receivedData = new byte[bytesRead]; Array.Copy(buffer, receivedData, bytesRead); Console.WriteLine(BitConverter.ToString(receivedData)); // 关闭串口 serialPort.Close(); } } ``` 在上面的示例代码中,我们首先创建了一个 SerialPort 对象,指定了串口号、波特率、奇偶校验位、数据位和停止位等参数。然后调用 Open() 方法打开串口。 接下来,我们发送了一个字节数组数据,使用 Write() 方法将其发送到串口上。 最后,我们使用 Read() 方法从串口上读取数据,将其存储到一个字节数组中,并打印出来。最后,我们调用 Close() 方法关闭串口。 需要注意的是,在使用 SerialPort 类进行串口通信时,需要确保在发送和接收数据之间设置适当的延时,以免出现数据丢失或者不完整的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猿长大人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值