我有一个传感器通过串口连接到Windows PC并用C#编程。
命令必须以"\r"
终止,以便传感器解释它们。
当我这样做时:
string cmd = "COMMAND\r";
serialPort.send(cmd);
我立即得到回复。
但如果我这样做:
string cmd = "COMMAND" + "\r";
serialPort.send(cmd);
我没有回应。我已经检查过了,两个字符串的char[]
表示似乎都是一样的。
我错过了什么?
解决:以上代码有效。问题出在其他地方。叹息。
答案 0 :(得分:0)
两种情况都是正确的。我几乎可以肯定,你遇到的问题取决于对SerialPort对象的编程。
仅仅从端口请求BytesToRead
然后“读取”并不总是足够的。从经验教训中,更可靠的解决方案是使Port Listenning
任务永久读出端口输出,将输出附加到某个缓冲区,分析缓冲区内容,然后,在特定状态检测的情况下,emmits和特定条件事件
实现发送到端口和从端口读取之间的延迟的最明显的想法将不稳定且缓慢。
关于解决端口问题的另一个建议是使用嗅探器来查看端口的实际输出。
另外,我建议对端口IO使用Write(Byte[], Int32, Int32)
和Read(Byte[], Int32, Int32)
命令
答案 1 :(得分:0)
问题有点愚蠢。在我的函数中,我得到字符串的第一部分,然后用" \ r"创建第二个字符串。终止。但我仍然发送第一个而不是修改后的那个。
private string sendCommand(string cmd)
{
string command = cmd + "\r";
string response = "";
try
{
sp.Write(cmd); //There's my problem!
response = sp.ReadTo("\r");
}
catch (Exception e)
{
Debug.WriteLine("Send Command: " + cmd + " : " + e.Message);
}
return response;
}