【发布时间】:2018-05-02 10:33:32
【问题描述】:
一直在使用 C# 中的串行端口,一个特定的设备让我很烦恼。
设备接受使用 H-Term (http://www.der-hammer.info/terminal/) 的命令并按预期工作:
- 我发送一个命令,
- 以\r结束,
- 它会回复一个答案
我尝试在 C# 中重现这一点,但遇到了很多麻烦。问题的关键在于它忽略了命令。
设备似乎正在等待\r。我根据 (x2) 实验知道这一点:
我插入
_serialport.WriteLine("command");
并允许示例继续从控制台获取输入。如果我输入 ,命令将执行。如果我不这样做,设备将忽略该命令。
我在这个主题上尝试了几种变体,包括:
_serialport.WriteLine("command\r\n");
_serialport.Write("command" + (byte) 10 + (byte) 13);
string message = "command" + (byte) 10 + (byte) 13;
_serialport.WriteLine(message);
string message = "command" + (byte) 10 + (byte) 13);
_serialport.Write(message);
所有的结果都是一样的。如果我不使用 MSDN 示例键入,设备将不会响应。如果我键入 ,设备会以某种方式侦听发送 \r 的 MSDN 示例代码并响应命令。我尝试了各种组合
_serialPort.NewLine = ...
没有解决问题。
看MSDN(代码sn-p),就是一个简单的WriteLine!?
while (_continue)
{
message = Console.ReadLine();
if (stringComparer.Equals("quit", message))
{
_continue = false;
}
else
{
_serialPort.WriteLine(
String.Format("<{0}>: {1}", name, message));
}
}
-
如果我编写一个简单的 C# 程序:
_serialPort.WriteLine(命令)
以及上面的所有变体,然后我暂停 C# 程序并转到 H-Term 并发送一个 \n,它接受命令!
WriteLine 似乎并非始终如一地发送 \n。这可能吗?如果不是,还有哪些可能?
【问题讨论】:
-
您是否尝试过将cultureinfo 设置为
CultureInfo.InvariantCulture并发送Environment.NewLine? -
还没有。 PC 是为美国配置的,所有硬件都是为美国设计的。有了这些信息,你还怀疑有问题吗?
-
我想你想在最后发送一个
<CR><LF>,而你正在发送一个<LF><CR>。char CR = (char)13; char LF = (char)10;所以你应该先发送 13,然后再发送 10。
标签: c# visual-studio serial-port