首先抱歉我的英语:)
我有一个带有2个COM端口的PCI串口卡。我用它通过串行电缆从另一台计算机接收数据。 (其他计算机将命名为" 发件人"随后)
问题是,当电缆插入我的电脑并重新启动(Windows 7)时,(发件人仍在运行...),那么我的电脑就不会收到任何数据。但是当我重新启动并在那之后,我连接电脑中的电缆,它开始接收。我暂时通过首先启动我的PC然后启动发送器PC来解决它,但它确实是一个非常糟糕的解决方案......
我尝试将我的电脑与另一台计算机(不同的发件人)连接,效果很好。 所以我认为问题可以在我的主发件人身上。也许是在等待来自我的电脑的一些信号,说明端口准备好了吗?或者Windows 7可以在重启期间阻止我的串口卡(该卡上没有的标准COM1工作正常)?也许我必须手动向Sender发送一些信号,我准备好了吗?顺便说一句,我不能以任何方式对Sender PC进行调整;只打开或关闭它。
我对串口没有任何专业知识,所以我真的不知道该做什么,或者我目前做错了什么。
有什么想法吗? (我的接收器应用程序是用C#编程的)
更新:我忘了提到当电缆连接时......重新启动......然后端口甚至无法打开。
答案 0 :(得分:2)
这是握手信号引起的问题。发件人的DSR(数据集就绪)连接到您的DTR(数据终端就绪)。当你重新启动时它会看到信号关闭,现在它发送任何东西都很生气,因为它认为你不再连接了。你可以通过不在你的程序中将SerialPort.DtrEnable设置为 true 来加剧这个问题,这一点很常被忽视。
与RTS和CTS信号相同,如果将SerialPort.Handshake属性设置为Handshake.RequestToSend(推荐值)以外的任何值,那么现在它就成了控制信号的工作。您必须在代码中明确将RtsEnable属性设置为 true 。
它倾向于偶然工作,您倾向于使用其他程序来测试连接。与HyperTerminal或Putty一样,他们会为您打开信号,您的程序现在可以正常运行。
这种错误当然也可以存在于Sender中。如果您无法修复该代码,那么您所能做的就是重新连接电缆。将RTS连接到发送器侧的DSR和CTS,它将始终看到信号已打开。
答案 1 :(得分:1)
卡片出现问题...我换了新卡片,现在它正常工作了。看起来这张卡对于Windows 7而言太旧了。