我正在向C#中的串行COM端口发送命令,但没有取回数据,但是当我使用腻子时,我会得到数据-我在做什么错?

问题描述

| 我有一个C#应用程序,我正在编写该应用程序以尝试从串行设备中自动提取数据。就像我的问题的标题所说的那样,我在Putty中尝试了完全相同的命令,并获得了数据。有人可以告诉我我错过了什么,以便我可以使用C#应用程序获取相同的数据吗? 基本上,我需要使用速度/波特率为57600的COM6,并发送不带引号\“ UH \”的命令。应该为我提供几行文本数据,这些数据似乎仅适用于Putty。 作为快速测试,我将其组合在一起:
private void SerialPort serialPort = new SerialPort();

private void getHistory_Click(object sender,EventArgs e)
{
  serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
  serialPort.PortName = \"COM6\";
  serialPort.Baudrate = 57600;

  serialPort.open();
  if (serialPort.Isopen())
  {
    serialPort.Write(\"UH\");
  }
}

private void serialPort_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
  string result = serialPort.ReadExisting();
  Invoke(new MethodInvoker(delegate{ textBox1.AppendText(result); }));
}
虽然确实触发了DataReceived事件,但是它仅返回我发送的\“ UH \”,没有其他数据。任何有关此问题的帮助将不胜感激! 贾斯汀     

解决方法

        好吧,如果没有有关该设备的更多细节,很难确定,但是有两件事要引起注意: 首先,设备需要什么通讯协议?您已经设置了波特率,但是没有提及数据位,奇偶校验或停止位。我认为.NET串行端口类默认为8,N,1。如果您的设备相同,则应该没问题。如果不是,那么它将不起作用。 其次,设备是否要求对数据进行任何形式的终结处理以定义完整的数据包?通常,这可以是将发送的数据附加回车符和换行符(0x0D和0x0A),也可以是STX前缀(0x02)和ETX后缀(0x03)。 设备响应的任何消息也可能采用相同的格式。 我不知道Putty的工作原理,但请检查设置,看看它是否在您输入的消息和协议中附加了任何内容。超级终端也这样做,因此您也可以对此进行测试。