1

我编写了一个具有串行通信功能的简单 c# 应用程序。我正在使用它来读取和写入设备。该设备识别字符串命令。我可以使用此应用程序成功地从设备中读取。但是人们正在向设备写入(发送)命令。我只是在使用

if (serialPort.IsOpen == true)
{
serialPort.Write("Command1");
}

但是我的设备没有响应。

为了检查,我尝试使用超级终端向我的设备发送相同的命令,我的设备可以识别它并且工作正常。

任何人都可以指导我什么是准确的编写方式或需要确保在 c# 中写入串行端口的内容。这是编码问题吗...(使用同一应用程序进行串行读取工作得很好!!)谢谢您的时间。

此外,没有异常或错误,并且在调试模式下执行此行。

4

3 回答 3

3

这是一个非常常见的问题,并且总是由将 Handshake 属性设置为 None 引起的。如果 DTR 信号未打开,串行端口设备几乎总是关注握手信号并忽略您发送的任何内容。这表明您已通电并且它接收到的数据不是噪音。需要将 DtrEnable 设置为 true,这也是 HyperTerminal 所做的。

当它认为你还没有准备好接收任何东西时,它不会发回任何东西,因为 RTS 信号没有打开。需要将 RtsEnable 设置为 true,这也是 HyperTerminal 所做的。或者只是正确设置 Handshake 属性,Handshake.RequestToSend 是常见的要求。

如果您仍然遇到问题,那么您可以使用 SysInternals 的 PortMon 将您的程序发出的串行端口驱动程序命令与超级终端发出的命令进行比较。

于 2013-01-31T14:16:11.857 回答
1

当您按 Enter 键发送信息时,超级终端可能会在您的输入中附加一个换行符,该信息由“换行符”和“回车符”组成。

检查您的硬件文档,但我的猜测是您尝试向其发送信息的设备正在寻找回车符“\r”,以表示输入结束。就像评论中的其他人所说的那样,将适当的字符附加到输入的末尾。

或者,您可以使用 SerialPort.WriteLine 函数来完成与在输入中附加换行符 '\r\n' 字符相同的事情,而无需显式修改它。

于 2013-01-31T14:16:20.550 回答
0
if (serialPort.IsOpen)
    serialPort.WriteLine("Command" + "\r\n");
于 2013-01-31T14:14:55.783 回答