
Мы тестируем новый клиент Wyse (модель Z90D7), который имеет подключение к ПК через последовательный порт. У нас есть внешний клиент, который использует выделенное оборудование, однако для тестирования мы используем ПК. Мы запускаем приложение C# на клиентах через Citrix. Когда мы запускаем приложение, которое мы используем на нашем старом оборудовании Wyse, все работает нормально, без ошибок. Однако на новом оборудовании последовательный порт срабатывает примерно один раз из 10 попыток. Во всех остальных случаях он выдает мне либо ошибку Overrun, либо ошибку Parity, либо ошибку RXOver.
Я проверил через журнал, что порт открывается и несколько команд выполняются после его открытия. Однако случайные ошибки случаютсяеще до того, как будут переданы какие-либо фактические данные. Я много раз читал, что это может быть проблема с буфером, однако я не видел сообщений, в которых упоминались бы ошибки, возникающие до получения данных, поэтому я не совсем в этом уверен.
Я также пытался использовать квитирование и большие буферы чтения/записи, но безуспешно. Я пробовал новый кабель и второй COM-порт на этом устройстве, тоже безуспешно. Наши настройки по умолчанию:
9600 бод, четность, 8 бит данных, 1 стоповый бит
Учитывая, что это работает на Citrix, нам также необходимовыполните команды net use, показанные здесьпрежде чем что-либо будет сделано. Если этого не сделать, последовательное соединение всегда будет сообщать, что оно подключено, но не будет получать никаких данных (это происходит и на старом оборудовании). Точная команда, которую мы выполняем (конечно, с измененным именем приложения), выглядит так:
net use com1 /DELETE
net use com2 /DELETE
net use com1: \\client\com1:
net use com2: \\client\com2:
start /d "D:\myapp" MyApplication.exe
Кто-нибудь, кто имел дело с последовательными портами, когда-нибудь слышал об этих трех ошибках, чередующихся таким образом? Есть ли что-то, кроме неисправного порта (или двух неисправных портов, скорее), что может вызвать это? Я думаю, что проблема может быть в размере аппаратного буфера, но не могу найти способ обойти это.
решение1
Все ошибки, похоже, говорят о том, что данные не перемещаются, причем в обоих направлениях.
RXOver недостаточно быстро очищает буфер приема. Overrun — это драйвер последовательного порта недостаточно быстро очищает буфер отправки чипа.
Я не уверен, что существует способ увеличить размер аппаратного буфера. Буфер Windows можно увеличить через API, но драйвер может это проигнорировать.
Я предлагаю попробовать больше оборудования, чтобы лучше понять проблему. Возможно, это проблема совместимости с вашим тестовым компьютером.
Статья 5 распространенных проблем с последовательным портом перечисляет некоторые возможные причины таких проблем:
Неправильные параметры связи.
Оба устройства должны быть настроены с одинаковыми параметрами связи, включая скорость передачи данных, четность, количество бит данных и количество стоповых битов.Неправильный последовательный кабель
- Плохие последовательные кабели
- Неисправная проводка