我正在使用visual studio 2008并使用.net 3.5
在C#中开发Windows窗体应用程序我正在进行串行通信,并在按钮上单击应用程序,获取所有可用的通信端口列表。然后我依次打开每个端口扫描我要查找的设备,发送我的自定义握手请求命令并等待回复几秒钟。
一切正常在我的电脑上(以及其他8台我已经测试过的电脑上)但是当我在笔记本电脑上运行该程序时,我的程序似乎看到了所有的通讯端口并发送了一个要求,但我的设备从未收到过它。我尝试过使用硬件通讯端口和USB转串口转换器。我也在不同制造商的几台笔记本电脑上进行了测试。所有这些都表现完全相同。
有没有人遇到过类似的问题?
更新1
笔记本电脑似乎能够从设备接收数据,但仍然无法传输。当然桌面没有任何问题。
更新2
笔记本电脑可以接收和传输数据。 因此,这会将问题缩小到可以在桌面上进行串行通信但在笔记本电脑上无法做同样事情的C#软件。
更新3
解决了它。问题是由我的测试笔记本电脑的内置调制解调器引起的。调制解调器保留的com端口(通常为COM3)不会出现在设备管理器中,但可以在Windows regestry中看到。因此,每当我的串口对象要求输入一个com端口列表时,它就会得到调制解调器端口,并且在端口扫描期间这些调制解调器会在我的握手请求中被阻塞。 像往常一样,一切都很愚蠢。
答案 0 :(得分:2)
听起来你的设备对电压水平很挑剔。 RS-232不能很好地固定下来,允许在+/- 5V到+/- 28V之间的任何地方。大多数设备最开心的是+/- 12V,这是台式机中可用的标准电压。然而,笔记本电脑总是处于低端,+ / - 5V典型值。你无能为力。
要测试此理论,请消除代码引发此问题的可能性,并确保它与零调制解调器一起使用。将TxD连接到RxD,以便您收到发送的内容。然后使用Hyperterminal或Putty。如果后者无法看到设备那么这就是硬件问题。