SerialPort.ReadByte внезапно возвращает ноль вместо номера версии подключенного кабеля - PullRequest
0 голосов
/ 30 июня 2019

Мы используем конвертер USB в SerialPort уже давно в нашем приложении. Чтобы проверить, правильно ли подключен кабель, мы начнем с отправки команды, которая просит конвертер вернуть свою версию. Затем мы читаем возвращенные данные, используя

var version=SerialPort.ReadByte();

Который, как ожидается, вернется и 11 для версии 1.1. Внезапно в Windows 10 1803 или более поздних версиях эта проверка начинает проваливаться, потому что ReadByte() возвращает сначала ноль, а затем при повторном вызове & 11.

Это изменение в поведении должно быть вызвано обновлением Windows, поскольку мы не меняли эту часть кода годами. Может кто-нибудь пролить свет на то, что может происходить? Это случайность Windows 10, которая скоро будет изменена, или наша реализация по своей сути ошибочна?

EDIT

Я заменил ReadByte() на ReadExisting(), и он вернулся с (в VB.Net) vbNullChar & vbNullChar & CharW (17).

Похоже, что первый вызов ReadByte возвращает два нулевых символа, а второй вызов возвращает ожидаемое значение & 11

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...