首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串行通信写

串行通信写
EN

Stack Overflow用户
提问于 2013-01-31 14:03:24
回答 3查看 1.4K关注 0票数 1

我编写了一个简单的c#应用程序,具有串行通信功能。我用它来读和写一个设备。设备识别字符串命令。我是成功地能够阅读从设备使用这个应用程序。但是,人们是以书面形式向设备发送命令。我只是在用

代码语言:javascript
复制
if (serialPort.IsOpen == true)
{
serialPort.Write("Command1");
}

但我的设备对此没有反应。

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

有人能指导我如何准确地编写,或者在c#中需要确保写到串口的东西吗?这个编码问题..。(用同样的应用程序进行串行阅读是非常好的!)谢谢您抽时间见我。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-31 14:16:11

这是一个非常常见的问题,总是由将握手属性设置为None造成的。串口设备几乎总是关注握手信号,如果DTR信号没有打开,则忽略发送的任何内容。这意味着你正在打开电源,并且它接收到的数据不是噪音。将DtrEnable设置为true是必需的,这也是HyperTerminal所做的。

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

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

票数 3
EN

Stack Overflow用户

发布于 2013-01-31 14:16:20

当您按Enter键发送信息时,超级终端可能会在输入中附加一个换行符,这包括一个“行提要”和“回车”。

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

或者,您可以使用SerialPort.WriteLine函数完成与在输入中添加一个换行符'\r\n‘字符相同的任务,而无需显式地修改它。

票数 1
EN

Stack Overflow用户

发布于 2013-01-31 14:14:55

代码语言:javascript
复制
if (serialPort.IsOpen)
    serialPort.WriteLine("Command" + "\r\n");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14627620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档