【问题标题】:Bogus TimeoutException reading .NETCF SerialPort读取 .NETCF SerialPort 的虚假 TimeoutException
【发布时间】:2009-06-15 22:19:30
【问题描述】:

编辑:是硬件问题.....获得重复的设备或电缆似乎可以解决问题。

您好,我正在努力从 .NETCF 中的串行端口读取大量数据 (~1MB)。

我正在读取 GPS 数据转储,但在调用 m_serial.Read(..) 时随机收到 TimeoutException

串行端口上肯定有数据流——转储需要几分钟。当我得到超时时,我可以将串行电缆插入另一台计算机,然后稳定地看到数据流。

我尝试了几种不同的方法——SerialPort.Read、SerialPort.ReadLine、SerialPort.ReadExisting——它们都将读取一小段时间(随机量),然后因 TimeoutException 而失败。

任何帮助将不胜感激,谢谢!当肯定有可用数据(以 38400 波特流传输)时,我基本上不知道如何获得超时

//m_serial is a SerialPort object, ReadTimeout set to 9000

                    string eoftest = "\r\n$PSRF206";
                    byte[] bEOFTest = ASCIIEncoding.ASCII.GetBytes(eoftest);

                    int bufferSize = 1024 * 16;
                    byte[] buffer = new byte[bufferSize];
                    int testingIndex = 0;

                    while (testingIndex < bEOFTest.Length)
                    {
                        int count = m_serial.Read(buffer, 0, bufferSize);

                        if (count > 0)
                        {
                            for (int i = 0; i < count; i++)
                            {
                                if (buffer[i] == bEOFTest[testingIndex])
                                {
                                    testingIndex++;
                                    if (testingIndex >= bEOFTest.Length)
                                        break;
                                }
                                else
                                    testingIndex = 0;
                            }

                            writer.Write(buffer, 0, count);
                        }
                  }

更新:

我发现代码在 Motorola Symbol 设备上运行良好,但在我拥有的 intermec 设备上运行良好。我已经更换了所有硬件以尝试消除这种可能性,但它仍然无法正常工作。

两台设备都是 Windows Mobile 5.0

【问题讨论】:

  • 有什么理由你不能使用 GPS 中间驱动程序,所以你不必做这些低级的事情? msdn.microsoft.com/en-us/library/ms850332.aspx
  • 据我所知,该 API 仅用于获取当前值。我们的设备在工作日断开连接,然后运行此代码以获取数据转储。我在该链接中没有看到该功能,尽管我可能遗漏了什么?
  • 不,它只是为了获取当前值。我不知道你得到了多少垃圾。

标签: windows-mobile compact-framework serial-communication


【解决方案1】:

作为建议,您可以随时尝试使用OpenNETCF serial port library。它是接口兼容的,这样您就可以将所有源代码都保存到设备管理器调用中,因此您可以了解可能引发任何错误的原因。

【讨论】:

    【解决方案2】:

    太好了....看起来是硬件问题....我现在有一些其他设备可用,它工作正常.....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多