c#中的串口持续监控

本文关键字:监控 串口 | 更新日期: 2023-09-27 18:15:51

我有一个程序,然后在启动时查找计算机上可用的串行端口,如果找到,将尝试打开这些端口并收听这些数据。

到目前为止,我有一个配置文件,其中包含所有端口设置以及要侦听的端口号。

在第一次运行时,我让用户首先输入端口号。设备所连接的位置。这将被记录到配置中,并从那里使用。

我现在想改变这一点,以便在启动时,它扫描端口并获得可用的串行端口列表。这部分我可以用SerialPort.GetPortNames()方法来完成。

但是,现在我想ping每个端口并检查哪个端口连接了设备,打开该端口并继续侦听该端口。

我可以向我的设备制造商查询从设备获得ping和ACK的命令。

我对专家的问题是

  1. 保持端口一直打开是正确的(架构上/技术上)吗
  2. 应该在一个单独的线程中完成,并且可能保持线程仅用于串口通信,而主线程完成所有其他工作。
  3. 如果有多个设备连接到同一台PC怎么办?我们应该为每个设备保留单独的线程吗?

任何帮助或想法都将非常感激。

谢谢Ashutosh

c#中的串口持续监控

保持端口打开是正确的(架构上/技术上)吗一直以来

那样做很正常。不断地打开和关闭端口是一种昂贵和浪费的操作。有时它被用作消息框架协议,即。打开/发送/关闭,但是一个保持端口打开的协议肯定会表现得更好。

应该在一个单独的线程中完成并且可能保留线程仅为串口通信,而主线程做所有其他工作。

可以,是的。我使用了这样的设计——创建尝试打开COM1-COM9的线程,如果打开成功,尝试与外设通信。如果通信成功,处理程序线程用一个对象引用/指针向主线程发送消息,这个对象引用/指针可以用来与端口通信,(并且通常给用户反馈,例如)。选中复选框并将其背景颜色从红色更改为绿色)。

如果有多个设备连接到同一台PC。我们应该为每个设备保留单独的线程?

我通常就是这么处理的,是的。我定义了一个代表端口的类,它的协议和状态。每个端口处理程序线程然后创建自己的实例,因此每个端口被独立处理。