C# 串行通信写入

C# 串行通信写入,c#,serial-port,C#,Serial Port,我已经编写了一个简单的c#应用程序,具有串行通信功能 沟通。我用它来读写设备。装置 识别字符串命令。我能够成功地从设备中读取数据 使用此应用程序。但Peoplem正在向设备写入(发送)命令。 我只是在使用 if (serialPort.IsOpen == true) { serialPort.Write("Command1"); } 但是我的设备没有响应它 要检查,我尝试使用超级终端向我的计算机发送相同的命令 设备和我的设备可以识别它,并且工作正常 有人能告诉我准确的写作方法是什么吗 需要确保

我已经编写了一个简单的c#应用程序,具有串行通信功能 沟通。我用它来读写设备。装置 识别字符串命令。我能够成功地从设备中读取数据 使用此应用程序。但Peoplem正在向设备写入(发送)命令。 我只是在使用

if (serialPort.IsOpen == true)
{
serialPort.Write("Command1");
}
但是我的设备没有响应它

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

有人能告诉我准确的写作方法是什么吗 需要确保在c#中写入串行端口。这是编码问题。。。 (使用同一个应用程序进行串行读取的效果非常好!!) 谢谢你抽出时间

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

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

if (serialPort.IsOpen)
    serialPort.WriteLine("Command" + "\r\n");
当它认为你没有准备好接收任何东西,因为RTS信号没有打开时,它不会发送任何东西回来。将RtsEnable设置为true是必需的,这也是超级终端所做的。或者只需正确设置握手属性,Handshake.RequestToSend是常见的要求


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

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

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


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

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

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


或者,您可以使用SerialPort.WriteLine函数完成与在输入中添加换行符“\r\n”相同的操作,而无需对其进行显式修改。

当您按Enter键发送信息时,超级终端可能会在输入中添加换行符,其中包括“换行符”和“回车符”.

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


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

您是否尝试过
SerialPort.Write(@“Command1\n”)?另外,您的条件应该是
if(serialPort.IsOpen)
;无需根据
true
对其进行测试;它已经是布尔值了。只要看看我的一些古老的串行资料,我就知道正如Andrew提到的,我正在发送\r\n并使用serialPort。WriteLine@AndrewBarber我认为不能在逐字字符串文本中使用转义序列。\n如何使用超级终端发送命令?是否需要按[code>Enter
?@AlvinWong是;这就是为什么我键入了
@“Command1\n”
@
的意思是\n不要逃跑。或者您可以像这样双重转义它们:
“Command1\\n”
您是否尝试过
serialPort.Write(@“Command1\n”)?另外,您的条件应该是
if(serialPort.IsOpen)
;无需根据
true
对其进行测试;它已经是布尔值了。只要看看我的一些古老的串行资料,我就知道正如Andrew提到的,我正在发送\r\n并使用serialPort。WriteLine@AndrewBarber我认为不能在逐字字符串文本中使用转义序列。\n如何使用超级终端发送命令?是否需要按[code>Enter
?@AlvinWong是;这就是为什么我键入了
@“Command1\n”
@
的意思是\n不要逃跑。或者您可以像这样双重转义它们:
“Command1\\n”
太棒了!关于握手,你是绝对正确的。谢谢它解决了这个问题太棒了!关于握手,你是绝对正确的。谢谢它解决了问题谢谢你的回答。您与@Hans Passant一起的输入解决了问题。谢谢您的回答。您与@Hans Passant一起的输入解决了问题。