串口通讯写

时间:2013-01-31 14:03:25

标签: c# serial-port

我写了一个简单的c#app,它具有串行功能 通讯。我用它来读写设备。装置 识别字符串命令。我成功地能够从设备中读取 使用这个程序。但peoblem正在向设备写入(发送)命令。 我只是在使用

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

但我的设备没有响应它。

要检查,我尝试使用超级终端向我发送相同的命令 设备和我的设备识别它并且工作完美。

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

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

3 个答案:

答案 0 :(得分:3)

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

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

如果仍有问题,可以使用SysInternals的PortMon将程序发出的串口驱动程序命令与HyperTerminal发出的命令进行比较。

答案 1 :(得分:1)

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

检查硬件的文档,但我的猜测是您尝试发送信息的设备正在寻找回车符'\ r',以表示输入结束。与评论中的其他人一样,在输入的末尾添加适当的字符。

或者,您可以使用SerialPort.WriteLine函数完成相同的操作,即在输入中添加换行符'\ r \ n'而不显式修改它。

答案 2 :(得分:0)

if (serialPort.IsOpen)
    serialPort.WriteLine("Command" + "\r\n");