使用C#中的串口,一个特定的设备让我感到烦恼。
设备使用H-Term(http://www.der-hammer.info/terminal/)接受命令并按预期工作:
我尝试在C#中重现这一点,我遇到了很多麻烦。问题的关键在于它忽略了命令。
设备似乎在等待\ r \ n。我基于(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 \ n的MSDN示例代码并响应该命令。我尝试了各种
的组合_serialPort.NewLine = ...
并且没有人解决问题。
查看MSDN(代码片段),它只是一个简单的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。这可能吗?如果没有,还有其他可能性吗?
答案 0 :(得分:0)
对不起伙计......结果证明这不是我的错。这是一个H / W问题!
话虽这么说,与H / W沟通最稳定的方式似乎是:
serialPort.Write(stringMessage + (char) 13 + (char) 10)
而不是配置
WriteLine()
应该有区别吗?