我编写了一个简单的c#应用程序,具有串行通信功能。我用它来读和写一个设备。设备识别字符串命令。我是成功地能够阅读从设备使用这个应用程序。但是,人们是以书面形式向设备发送命令。我只是在用
if (serialPort.IsOpen == true)
{
serialPort.Write("Command1");
}但我的设备对此没有反应。
为了检查,我尝试使用超级终端向我的设备发送相同的命令,我的设备识别它并且工作得很好。
有人能指导我如何准确地编写,或者在c#中需要确保写到串口的东西吗?这个编码问题..。(用同样的应用程序进行串行阅读是非常好的!)谢谢您抽时间见我。
此外,没有异常或错误,并在调试模式下执行该行。
发布于 2013-01-31 14:16:11
这是一个非常常见的问题,总是由将握手属性设置为None造成的。串口设备几乎总是关注握手信号,如果DTR信号没有打开,则忽略发送的任何内容。这意味着你正在打开电源,并且它接收到的数据不是噪音。将DtrEnable设置为true是必需的,这也是HyperTerminal所做的。
当它认为你没有准备好接收任何东西时,它不会发送任何东西,因为RTS信号没有打开。将RtsEnable设置为true是必需的,这也是HyperTerminal所做的。或者只是正确设置握手属性,Handshake.RequestToSend是常见的需求。
如果您仍然有问题,那么您可以使用SysInternals‘PortMon将您的程序问题与HyperTerminal发出的串口驱动程序命令进行比较。
发布于 2013-01-31 14:16:20
当您按Enter键发送信息时,超级终端可能会在输入中附加一个换行符,这包括一个“行提要”和“回车”。
检查硬件的文档,但我的猜测是,您试图向其发送信息的设备正在寻找回车,“\r”,以表示输入的结束。就像评论中的其他人说的那样,在输入的末尾添加适当的字符。
或者,您可以使用SerialPort.WriteLine函数完成与在输入中添加一个换行符'\r\n‘字符相同的任务,而无需显式地修改它。
发布于 2013-01-31 14:14:55
if (serialPort.IsOpen)
serialPort.WriteLine("Command" + "\r\n");https://stackoverflow.com/questions/14627620
复制相似问题