如何自动检测串行COM端口c#的连接



我有与设备通信的应用程序。设备通过串行COM端口连接。我的应用可以与设备通信。

我需要一些方法/事件,可以通过正在运行的应用程序扫描COM端口。当我将设备连接到PC时 - 方法/事件将打印带有消息"已连接"的消息框,或类似的东西。

我发现了这样的东西:

comPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

但它不起作用。

我不确定您是尝试自动检测设备连接到哪个端口,还是自动检测设备是否连接到特定端口。

但是,在这两种情况下,原理是相同的:

  1. 您可以使用枚举串行端口:SerialPort.GetPortNames(如果需要确定端口),或者如果您已经知道端口,请跳到步骤 2
  2. 对于集合中的每个端口,通过为其创建新的 SerialPort 对象并调用 Open 来打开连接
  3. 对于您尝试从端口写入/读取的每个打开的连接,确定设备是否已连接的数据序列
  4. 对于每个打开的连接,如果数据读取超时,则没有设备连接到端口;否则,如果您得到期望的内容,则知道您的设备已连接
  5. 对于每个端口,在 SerialPort 对象上使用"关闭"关闭连接。

在任何给定点执行上述操作都会告诉您设备是否在该点连接,以及它连接到哪个端口。

如果您需要连续执行存在检测,那么您可能需要创建一个计时器并定期执行此测试(每 30 秒或每 2 分钟 - 取决于您愿意接受的延迟)。

注意

正如其他人在答案中指出的那样,您将希望异步运行串行端口检测代码,以免在扫描端口时阻止您的主应用程序。由于未连接设备的端口超时,扫描保证需要一段时间。

相关内容

  • 没有找到相关文章

最新更新