C#中的串口持续监控

时间:2014-08-01 04:19:41

标签: c# multithreading serial-port

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

截至目前,我有一个配置文件,其中包含所有端口设置以及要收听的端口号。

首次运行时,我让用户先输入设备所连接的POrt编号。这被记录在Config中,并从那里使用。

我现在要更改它,以便在启动时扫描端口并获取可用的串行端口列表。那部分我可以使用SerialPort.GetPortNames()方法。

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

我可以与我的设备制造商联系,以获取ping设备的命令和ACK。

我向专家提出的问题是

  1. 始终保持端口打开是否正确(技术上/技术上)
  2. 这应该在一个单独的线程中完成,并且可能保持线程只进行串口通信,而主线程执行所有其他工作。
  3. 如果有多台设备连接到同一台PC,该怎么办?我们应该为每个设备保留单独的线程吗?
  4. 非常感谢任何帮助或想法。

    由于 Ashutosh说

1 个答案:

答案 0 :(得分:0)

  

保持端口打开是否正确(在结构上/技术上)   一直

这样做是正常的。持续打开和关闭端口是一种昂贵且浪费的操作。有时被用作消息成帧协议,即。打开/发送/关闭,但保持端口打开的协议肯定会表现得更好。

  

应该在单独的线程中完成并且可能保留线程   仅用于串口通信,而主线程执行所有其他操作   作业。

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

  

如果有多台设备连接到同一台PC,该怎么办?我们应该吗   为每个设备保持单独的线程?

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

相关问题