【问题标题】:I'm sending a command to a serial COM port in C# and not getting data back, but when I use Putty I get data - what am I doing wrong?我在 C# 中向串行 COM 端口发送命令,但没有取回数据,但是当我使用 Putty 时,我得到了数据——我做错了什么?
【发布时间】:2011-05-30 16:03:22
【问题描述】:

我有一个 C# 应用程序,我正在编写它以尝试从串行设备自动提取数据。正如我的问题的标题所说,我在 Putty 中尝试了完全相同的命令,然后我得到了数据。有人可以告诉我我错过了什么,以便我可以使用我的 C# 应用程序获取相同的数据吗?

基本上,我需要COM6,速度/波特率为57600,并发送不带引号“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”,没有进一步的数据。对此问题的任何帮助将不胜感激!

  • 贾斯汀

【问题讨论】:

    标签: c#-3.0 serial-port


    【解决方案1】:

    好吧,如果没有有关设备的更多细节,很难确定,但有两件事浮现在脑海:

    首先,设备需要什么通讯协议?您已设置波特率,但没有提及数据位、奇偶校验或停止位。我认为 .NET 串行端口类默认为 8,N,1。如果您的设备相同,那么您应该没问题。如果不是,那么它将无法工作。

    其次,设备是否需要对数据进行任何类型的终止才能定义完整的数据包?通常这可能是发送的数据附加了回车和换行符(0x0D 和 0x0A),或者可能具有 STX (0x02) 前缀和 ETX (0x03) 后缀。

    设备响应的任何消息也可能采用相同的格式。

    我不知道 Putty 是如何工作的,但请检查设置,看看它是否在您键入的消息和协议上附加了任何内容。超级终端也这样做,所以你也可以用它来测试它。

    【讨论】:

    • 感谢您回复我,我在这方面有点挣扎。有问题的设备是俄勒冈 RFID 数据记录器,您提到的其他设置是: 数据位:8 奇偶校验:无 停止位:1 流控制:硬件 我将尝试在回车时添加到命令字符串的末尾,然后查看如果有帮助的话。
    • @JustinN:没问题。据推测,RFID设备必须有某种规格或手册? CRLF 的建议只是我的猜测。当然,它可能比这更复杂!
    • 他们提供了手册的印刷副本,其中基本上列出了所有终端命令,以及通过 Windows 的 Hyperterminal、Vista/Windows 7 的 Putty、OSX/Linux/Unix 终端仿真器进行连接的基本说明。我找不到任何设置在 Putty 末尾标记的内容,但我稍后会尝试在 Google 上查找。我只是想说我刚刚尝试了“UH\r\n”,然后我得到了额外的数据 - 被打乱了,但仍然比我以前拥有的更多!
    • 所需要的是“UH\n\r”,并且由于某种原因,DataReceived 事件中的所有数据都是垃圾,所以我一直在一个单独的线程中运行一个检查串行端口的方法数据。最重要的是,ReadLine() 归还垃圾,而 Read() 归还所有内容。总而言之,多亏了你的聪明建议,我得到了我的数据!谢谢!
    • @JustinN:听起来你现在走在了正确的轨道上。祝你好运:)
    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2016-01-31
    • 2020-11-26
    • 2022-01-21
    相关资源
    最近更新 更多