C#如何监控串口是否异常断开连接,并在断开后自动重连

C#如何监控串口是否异常断开连接,并在断开后自动重连

在工业控制软件中,经常要连接串口设备进行数据的读取,这时候就要监控设备串口的连接情况,当串口出现异常断开时,要跳出提醒或由程序作出进一步的逻辑处理。
但是很遗憾,在C#常用的System.IO.Ports.SerialPort类下,没有能直接找到监控串口断开的方法,那就自己写个Task来监控吧。

一、创建Winform项目

创建一个简单的form窗体,啥也不用画,进入后台逻辑。的
在窗体的构造体里初始化串口,并创建开启一个任务monitorPortTask

        private Task _monitorPortTask;
        private SerialPort _myCom;
        public Form1()
        {
    
    
            InitializeComponent();
            _myCom = new SerialPort();
            _myCom.PortName = "COM6";
            _myCom.BaudRate = 19200;
            _myCom.Parity = Parity.None;
            _myCom.DataBits = 8;
            _myCom.StopBits = StopBits.One;
            _monitorPortTask = new Task(MonitorPort);
            _monitorPortTask.Start();
        }

二、监控串口断开逻辑

在MonitorPort方法体里写入监控串口断开的逻辑,这个方法就是被上一步Task调用开启的方法。
方法体里的一些逻辑都已用注释标明。

 private void MonitorPort()
        {
    
    
            bool connectStatus = false;
            string[] gCOM = null;
            while (true)
            {
    
    
                gCOM = null;
                connectStatus = false;
                gCOM = System.IO.Ports.SerialPort.GetPortNames(); // 获取设备的所有可用串口
                int j = gCOM.Length; // 得到所有可用串口数目
                //判断是否找到串口,没有则直接报错
                if (j != 0)
                {
    
    
                    for (int i = 0; i < j; i++)
                    {
    
    
                        //找到目标串口
                        if (gCOM[i].ToUpper() == "COM6")
                        {
    
    
                            //判断目标串口是否打开
                            if (_myCom.IsOpen)
                            {
    
    
                                connectStatus = true;
                            }
                            else
                            {
    
    
                                try
                                {
    
    
                                    //尝试打开串口
                                    _myCom.Open();
                                    connectStatus = true;
                                }
                                catch (Exception)
                                {
    
    
                                    //打开失败给false状态
                                    connectStatus = false;
                                }

                            }
                            break;
                        }
                    }
                    if (connectStatus)
                    {
    
    
                        MessageBox.Show("COM6串口已成功连接!");
                    }
                    else
                    {
    
    
                        MessageBox.Show("COM6串口已断开!");
                    }
                }
                else
                {
    
    
                    MessageBox.Show("COM6串口不存在!");
                }

                Thread.Sleep(2000);
            }

三、测试

打开Form程序,拔插COM6的连接设备可以看到得到正确的提示:
在这里插入图片描述

在这里插入图片描述

小结

以上就是使用C#监控串口断开,并自动重连的逻辑功能,可以利用connectStatus对串口断开和连入做一些自己想要的逻辑。
各位如有更好的方法欢迎交流~~

猜你喜欢

转载自blog.csdn.net/weixin_44239774/article/details/129087443
今日推荐