Включили USB-вариант. На старом компьютере работает, на новом не работает. На это раз, в отличие от предыдущего случая, и компы, и ПО полностью одинаковые.
По логам выходит, что устройство всё-таки включено, но показометр почему-то не показывает. Идущее в коплекте с устройством тестовое ПО результат показывает, т.е. устройство исправно, а дело в нашем ПО.
В процессе отладки выясняется, что хотя логи и показывают, что устройство включено, фактически данные с него не считываются. А конкретно -- не запускается поток считывания данных. Но на другом компе поток запускается. Почему же?
Потому что я лох.
Я сделал в своё время автоматическое определение, включено устройство или нет. Делалось оно так:
1. Попробовать открыть COM-порт с фиксированным номером (жёстко зашито в код). Номер тринадцать, если что.
2. Если удалось, то включено устройство первого типа.
3. Если не удалось, поискать USB-устройство.
4. Если USB-устройство обнаружено, то включено устройство второго типа.
5. Если ничего нет -- устройства отсутствуют, работаем так (это факультативный модуль).
Обратите внимание на второй пункт. Проверяется только возможность открытия порта. Кто там висит -- никого не волнует. Кроме того, имеется любопытное последствие -- если порт открылся, проверка USB-устройства уже не производится.
В наших компьютерах и без этого устройства много устройств, которые видны как COM-порты. И винда их распределяет случайным образом. И вот на втором компе по случайности 13-й порт существовал (хотя к нему ничего не было подключено). И программа думала, что установлено устройство первого типа. И запускала поток считывания данных для устройства первого типа. Он слал запросы... в космос.