C# 串口通讯SerialPort

这个只是对SerialPort进行简单的使用,对串口设备进行简单数据的发送和数据的接收,调用几个方法就可以完成串口的通讯,但是没有设备去实验还是感觉不好的。这里我使用了虚拟串口软件和串口调试助手(用来验证串口是否接收到数据)

使用软件:
虚拟串口软件Virtual Serial Port Driver 7.2
友善串口调试助手

Virtual Serial Port Driver 7.2

这里简单说下虚拟串口软件和串口调试助手的简单使用虚拟串口软件生成串口都是成对生成的,例如生成COM2和COM3两个串口,当对COM2写入数据时,COM3就会接收到写入的数据。对COM3写入数据时COM2也会接收到写入的数据。这样串口的虚拟才有意义。点击Add pair 便可生成虚拟串口。
这里写图片描述

友善串口调试助手

用户可在串口设置中选择端口,选择好端口后点击开始按钮,便可以对串口进行调试。这里我对生成的两个接口都进行开始调试,以验证实验环境是否搭建成功。
这里写图片描述

这里可以看到COM2发送消息COM3可接收,COM3发送消息COM2也可以接收到,说明实验环境搭建成功

这里写图片描述

SerialPort

使用串口最重要的设置就是串口名称PortName和串口波特率BaudRate和绑定串口接收到数据的事件DataReceived。
下来我用串口助手监控COM3串口,用程序实现对COM2串口进行控制。我使用一个线程定时向COM2口发送数据,成功的结果应该是COM3的串口接收到数据,也就是监控COM3的串口助手收到数据。程序也绑定好接收到数据后的事件。下来运行程序。

namespace 串口
{
    class Program
    {
        public static SerialPort sp = new SerialPort();//实例化SerialPort类
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(myStaticThreadMethod);  
            thread1.Start();  
        }
        public static void myStaticThreadMethod()
        {
            sp.PortName = "COM2";//设置串口名称
            sp.BaudRate = 9600;//设置串口波特率
            sp.DataReceived += new SerialDataReceivedEventHandler(BandEvent);//绑定串口接收到数据的事件
            sp.Open();//打开串口连接
            while (true) { 
                sp.Write("COM2 send data\n");//向串口发送数据
                Thread.Sleep(5000);
            }

        }
        public static void BandEvent(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine("COM2 receive data"+sp.ReadLine()+"\n"); //读取缓冲区中的数据  
        }
    }
}

运行后结果如图,COM2发送数据和接收数据都可成功,简单实现了串口的控制。
这里写图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是C#串口通讯断线重连的示例代码: ```csharp using System.IO.Ports; using System.Threading; public class SerialPortManager { private SerialPort serialPort; private Thread reconnectThread; private bool isReconnecting = false; public SerialPortManager(string portName, int baudRate) { serialPort = new SerialPort(portName, baudRate); serialPort.DataReceived += SerialPort_DataReceived; serialPort.ErrorReceived += SerialPort_ErrorReceived; serialPort.Open(); } private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { // 处理接收到的数据 } private void SerialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e) { if (e.EventType == SerialError.RXOver || e.EventType == SerialError.Overrun || e.EventType == SerialError.Frame || e.EventType == SerialError.RXParity) { // 发生错误,断开连接并尝试重新连接 Reconnect(); } } private void Reconnect() { if (isReconnecting) { return; } isReconnecting = true; // 关闭串口 serialPort.Close(); // 开启重连线程 reconnectThread = new Thread(() => { while (true) { try { // 尝试重新连接 serialPort.Open(); // 重新连接成功,退出重连线程 isReconnecting = false; break; } catch { // 重新连接失败,等待一段时间后继续尝试 Thread.Sleep(1000); } } }); reconnectThread.Start(); } } ``` 该示例代码中,SerialPortManager类封装了串口通讯的相关操作,包括初始化串口、处理接收到的数据、处理错误事件、断线重连等。当发生错误事件时,会调用Reconnect方法进行断线重连,该方法会关闭串口并开启一个新的线程进行重连操作,直到重连成功为止。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Maybe_ch

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

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

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

打赏作者

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

抵扣说明:

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

余额充值