Получение неверных данных из последовательного порта с использованием SerialPort.ReadExisting () - PullRequest
0 голосов
/ 15 января 2010

Я написал программу в .NET, которая прослушивает определенный последовательный порт и обрабатывает данные, которые принимаются. Я написал тестовую программу, используя управление последовательным портом, и моя программа работала нормально. Когда я запускаю нашу программу в Windows Mobile с оригинальным устройством, полученные данные искажены. То же устройство при подключении к ПК выдает нужный вывод.

В мобильном я подключил наше устройство по Bluetooth.
Я получаю следующую искаженную строку: "?09?D0??6D?
Я использовал следующий код:

 Dim WithEvents port1 As SerialPort = _
  New SerialPort("Com2", 19200, Parity.Even, 7, StopBits.One)

 port1.Open()
        port1.Open()
        strcmd="09RD00000123"
        port1.Write(strcmd, 0, strcmd.Length)
        System.Threading.Thread.Sleep(70)
        strReadSegment0 = port1.ReadExisting

1 Ответ

1 голос
/ 15 января 2010

Вы забыли сказать, какой вклад вы ожидали. Просмотр вопросительных знаков в полученных данных указывает на то, что свойство SerialPort.Encoding установлено неправильно. По умолчанию используется ASCII, любой байт со значением от 128 до 255 будет превращен в знак вопроса. Может быть, вы на самом деле не хотите получать символы, может быть, вам нужны байты. Используйте Read ().

Другое объяснение вопросительных знаков заключается в том, что конфигурация последовательного порта для устройства не соответствует конфигурации для устройства. Несоответствие скорости передачи приводит к искаженным данным, которые могут превратиться в вопросительные знаки, как объяснено выше. Получение несоответствия четности также приводит к появлению вопросительных знаков.

И последнее, но не менее важное: вы не можете использовать Sleep () для надежной синхронизации вашего потока с последовательным портом. Вместо этого используйте событие DataReceived.

...