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

Я написал программу в .NET, которая прослушивает определенный последовательный порт и обрабатывает данные, которые принимаются. Я написал тестовую программу, используя com0com (эмулятор нуль-модема), и моя программа работала нормально. Я даже проверил его с помощью HyperTerminal, и, похоже, он тоже работал нормально.
Однако, когда я связал программное обеспечение с исходным устройством (вывод, полученный из системы управления), полученные данные были искажены. Он содержал специальные символы. То же устройство при подключении к Hyper Terminal выдало желаемый результат. Я изменил скорость передачи данных, четность и т. Д., Но полученные данные представляли собой тот же набор символов мусора.
Я использовал событие DataReceived компонента SerialPort и использовал следующую строку кода для сбора данных:

    string data = portRecieve.ReadExisting();

Может кто-нибудь сказать мне, где я пропускаю? В текущей среде выход устройства напрямую связан с матричным принтером, который печатает все, что получено через порт. Кажется, принтер перехватывает то, что отправляется, но мой код не может.
Если вы когда-либо сталкивались с подобным сценарием, пожалуйста, поделитесь своими выводами.
Спасибо

Ответы [ 3 ]

2 голосов
/ 11 октября 2009

Как вы установили

SerialPort.DiscardNull
SerialPort.Encoding

И, возможно, покажите нам пример специальных символов, которые вы получаете.

1 голос
/ 11 октября 2009

Я могу представить себе следующие причины, по которым данные могут быть искажены:

  • Если существует плохое физическое соединение, иногда вы можете просто получить мусор (а не вообще ничего). Попробуйте отсоединить и снова подключить провода - и убедитесь, что у вас правильный провод (например, вам нужен нуль-модем?). Похоже, что вы покрыли это проверкой HyperTerminal.

  • Если скорость в бодах, стоп-биты, четность не верны - звучит так, как если бы у вас был этот

  • Вы пытаетесь получить данные в виде строки. Если он не отправляется в виде простого текста или если ваша кодировка неверна, то он может легко выглядеть как мусор. Попробуйте использовать двоичный прием и изучите необработанные данные, которые вы получаете. Это скажет вам, являются ли данные просто неправильными, или .net преобразование портит их - устраните посредника!

0 голосов
/ 11 октября 2009

Мне кажется, что устройство переводит принтер в какой-то особый графический режим. В этом случае в данных, отправляемых на принтер, могут быть escape-последовательности, т.е. последовательности символов, начинающиеся с символа escape (27, 0x1B). В этом случае вам нужно взглянуть на руководство принтера, чтобы увидеть, что делают команды. В качестве альтернативы вы можете указать устройству использовать простой принтер только для ASCII, а не целочисленный.

...