Фальшивое время ожидания Исключение при чтении .NETCF SerialPort - PullRequest
0 голосов
/ 16 июня 2009

РЕДАКТИРОВАТЬ: была проблема с оборудованием ..... получение дублирующего устройства или кабеля, казалось, решило проблему.

Здравствуйте, я выдергиваю волосы, пытаясь прочитать большое количество данных (~ 1 МБ) из последовательного порта в .NETCF.

Я читаю дамп данных GPS, но случайно получаю исключение TimeoutException при вызове m_serial.Read (..)

Определенно, на последовательный порт поступает поток данных - дамп занимает пару минут. Когда я получу тайм-аут, я могу просто подключить кабель последовательного интерфейса к другому компьютеру и видеть, что данные постоянно передаются.

Я пытался реализовать это несколькими различными способами - 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);
                        }
                  }

UPDATE:

Я обнаружил, что код отлично работает на устройстве Motorola Symbol, но не на устройстве Intermec, которое у меня есть. Я поменял все оборудование, чтобы попытаться устранить это как возможность, и оно все еще не работает.

Оба устройства являются Windows Mobile 5.0

Ответы [ 2 ]

0 голосов
/ 17 июня 2009

Просто отлично .... похоже, это была аппаратная проблема .... У меня сейчас есть несколько других доступных устройств, и они работают нормально .....

0 голосов
/ 16 июня 2009

В качестве рекомендации вы всегда можете попробовать использовать OpenNETCF последовательный порт библиотеки . Он совместим с интерфейсом, и таким образом у вас есть весь источник вплоть до вызовов диспетчера устройств, так что вы можете понять, почему могут возникать любые ошибки.

...