Мы используем конвертер 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
Есть и другая, весьма вероятная причина: два преобразователя, которые мы использовали для тестирования, принадлежат одной и той же партии. Они, по-видимому, отвечают двумя нулевыми символами при первом чтении.