2012-01-26 85 views
2

我想自动检测连接到计算机COM端口的设备。能够使用SerialPort类允许我轻松获取可用COM端口的列表。如何自动检测连接到COM端口的设备

我想遍历它们并轮询(发送命令)到每个端口并等待响应。不过,大多数教程似乎都建议使用DataReceived事件。我迷失在如何做串行发送,然后等待xx秒的时间,直到我收到来自设备的响应。

+0

那么,你还没有写任何代码吗?已经看到这篇文章http://www.codeproject.com/Articles/8605/Serial-Communication-using-C-and-Whidbey? – gabsferreira

回答

0

我相信WMI有功能来查询COM设备,也有Linq to WMI库可帮助

希望这有助于

3

的DataReceived事件检索是非常好的,当你需要跟设备,可以在非常不可预测的时间发送一些东西。您不必烧毁一个阻塞并等待设备发送内容的线程。

但是,这是完全相反,你试图实现,你期望收到的东西。因此,请勿使用DataReceived,请将ReadTimeout属性设置为适当的低值。现在很简单。还要考虑使用DsrHolding属性。有一个设备连接到端口并启动时,这是正确的。

我应该注意,这样做是相当危险的。你不知道机器上连接了什么类型的设备,向他们发送一些他们没有设计来处理的东西是相当棘手的。如果有什么“你在吗?”你发送的命令恰好意味着机器人控制器“以1G加速回家”,那么有人会很容易受到伤害。你不能在任何工业环境中做到这一点。

到目前为止,最好的方法是让其他人有责任做到这一点。添加一个允许用户设置端口名称的选项菜单。而设置,它们也很重要,无法自动检测它们。选项对话框可以有一个“帮我找到设备”按钮,现在它是安全的有用。

+0

WMI'ManagementObjectSearcher.Get()'算作“你在吗?”。我完全可以在机器人事故场景中看到这一点,因此我想知道'ManagementObjectSearcher'对此是否安全。 – heltonbiker

相关问题