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对串口断开和连入做一些自己想要的逻辑。
各位如有更好的方法欢迎交流~~