У нас есть устройство, которое подключается через USB-кабель и имитирует COM-порт. Используя наше старое приложение VB6 и элемент управления MSComm после открытия соединения, устройство отправляет байт обратно всякий раз, когда приложение VB6 отправляет байт устройству.
Теперь мы переносим приложение VB6 в .Net и используем SerialPort
class для связи. port.Write
успешно, но port.ReadByte
набирает TimeOutException
для каждого мыслимого ReadTimeOut
, которое мы используем.
На первый взгляд, все настройки, такие как скорость передачи данных, четность и т. Д., Одинаковы. Странно то, что если мы сначала запустим старое приложение VB6 и закроем его (которое подключается к устройству), код .Net также начнет работать, пока мы не отключим и не подключим устройство заново.
Итак, каким-то образом элемент управления MSComm оживляет устройство, чего не может SerialPort
. Код в приложении VB6, открывающий соединение и запускающий обмен данными, прост и преобразован в C #.
Я использовал монитор порта, чтобы увидеть, какие данные были фактически отправлены, и действительно, элемент управления MSComm отправляет намного больше управляющих байтов на устройство перед началом фактической передачи данных. Единственная значимая разница, которую я смог различить, заключается в том, что элемент управления MSComm использует другие символы управления для Xon Xof, EvtChar и т. Д. Но после настройки их также для SerialPort
(см. Эту ссылку ничего не изменилось.
Что еще может происходить? Должно ли более тщательное изучение данных, отправленных через порт, дать ответ в конце концов, или может случиться так, что происходит что-то совсем другое?