C#串行发送的串联字符串

C#串行发送的串联字符串,c#,serial-port,string-concatenation,C#,Serial Port,String Concatenation,我有一个传感器通过串行端口连接到Windows PC,并用C#编程。 命令必须以“\r”终止,以便传感器对其进行解释。 当我这样做时: string cmd = "COMMAND\r"; serialPort.send(cmd); 我立即得到答复 但如果我这样做: string cmd = "COMMAND" + "\r"; serialPort.send(cmd); 我没有得到回应。我已经检查过了,两个字符串的char[]表示形式似乎是相同的 我错过了什么 已解决:以上代码有效。问题出在别

我有一个传感器通过串行端口连接到Windows PC,并用C#编程。 命令必须以
“\r”
终止,以便传感器对其进行解释。 当我这样做时:

string cmd = "COMMAND\r";
serialPort.send(cmd);
我立即得到答复

但如果我这样做:

string cmd = "COMMAND" + "\r";
serialPort.send(cmd);
我没有得到回应。我已经检查过了,两个字符串的
char[]
表示形式似乎是相同的

我错过了什么


已解决:以上代码有效。问题出在别处。叹气。

两种情况都是正确的。我几乎可以肯定,您遇到的问题取决于对SerialPort对象的编程。 仅仅通过testoread请求
然后从端口“读取”并不总是足够的。根据经验教训,更可靠的解决方案是使用
端口侦听
任务永久读取端口输出,将输出附加到某个缓冲区,分析缓冲区内容,然后在特定状态检测的情况下,执行emmits和特定条件事件

关于在发送到端口和从端口读取之间实现延迟的最明显的想法将不稳定且缓慢

关于解决端口问题的另一个建议是使用嗅探器查看端口的实际输出


我还建议对端口IO使用
Write(Byte[],Int32,Int32)
Read(Byte[],Int32,Int32)
命令。问题有点愚蠢。在我的函数中,我获取字符串的第一部分,然后使用“\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;
    }

您是否复制/粘贴了这些命令?真正的输入是什么(而不是
命令
)?字符串构造不是问题的原因。看看别处(只是第一个命令有效,第二个命令无效吗?)比较
cmd.GetHashCode()
的输出。如果他们不一样,你很幸运你很幸运。这是另外一回事。我试着把它浓缩成最小的函数来说明这个问题。马上回来。