【问题标题】:C# concatenate string for serial sendC# 连接字符串以进行串行发送
【发布时间】:2016-03-23 15:24:59
【问题描述】:

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

string cmd = "COMMAND\r";
serialPort.send(cmd);

我会立即得到回复。

但如果我这样做:

string cmd = "COMMAND" + "\r";
serialPort.send(cmd);

我没有得到任何回应。我检查过,两个字符串的 char[] 表示似乎是相同的。

我错过了什么?

已解决:上面的代码有效。问题出在其他地方。叹息。

【问题讨论】:

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

标签: c# serial-port string-concatenation


【解决方案1】:

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

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

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

另外我建议使用Write(Byte[], Int32, Int32)Read(Byte[], Int32, Int32) 端口IO 命令

【讨论】:

    【解决方案2】:

    这个问题有点愚蠢。在我的函数中,我得到了字符串的第一部分,然后用“\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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多