Здравствуйте, вот преподнесла мне нелегкая такой сюрприз...
В кратце, есть набор различных USB устройст (различные измерители силы, температуры, давления, расстояния, количества кислорода и т.д.)
Есть прога, которая определяет какое устройство подключено и выводит с него инфу в таблицы
Мне надо сделать, чтоб прога работала с виртуальными устройствами...
С чего начать? Сейча я планирую юзать DSF, там вроде есть готовый симулятор USB устройства, но для начала мне надо узнать как сделать, чтоб прога распознала подключенный эмулятор как одно из устройств?
Как вообще вклиниться или иным способ узнать протокол обмена данными между устройствами и прогой? Надо как-то перехватывать сообщения или еще как-то?
Буду рад любой информации...
Re: Как изучать чужое USB устройство, чтоб сделать его эмулятор?
Здравствуйте, Alphelion, Вы писали:
A>как сделать, чтоб прога распознала подключенный эмулятор как одно из устройств?
насколько я понимаю, надо, чтобы виртуальное USB-устройство прикидывалось устройством с тем же VendorId/ProductId, как и реальное устройство
A>Как вообще вклиниться или иным способ узнать протокол обмена данными между устройствами и прогой? Надо как-то перехватывать сообщения или еще как-то?
Забыл уточнить, схема подключения устройств такая:
К компу подключается главное USB устройство, к которому подключается другое измерительное. Каждое измерительное устройство, может быть соеденено с другим измерительным... К примеру, термометр с измерителем давления и одно из них подключено к главному.
Видимо тем, какое устройство подключено рулит главное устройство и оно же сообщения отсылает об измерениях. Ну да ладно, за наводку по сниферам спасибо. Буду разбираться
A>К компу подключается главное USB устройство, к которому подключается другое измерительное. Каждое измерительное устройство, может быть соеденено с другим измерительным... К примеру, термометр с измерителем давления и одно из них подключено к главному.
ну логично — в главном usb hub, остальные можно подключать в любом порядке
доку сперва про usb покурите какую-нть — начать можно с Агуров "Практика программирования USB"
Здравствуйте, redp, Вы писали:
A>>К компу подключается главное USB устройство, к которому подключается другое измерительное. Каждое измерительное устройство, может быть соеденено с другим измерительным... К примеру, термометр с измерителем давления и одно из них подключено к главному. R>ну логично — в главном usb hub, остальные можно подключать в любом порядке R>доку сперва про usb покурите какую-нть — начать можно с Агуров "Практика программирования USB"
Подозрительно все это. Обычно usb шина не используется для промышленной автоматизации. Главное устройство, скорей всего, контроллер с usb интерфейсом для общения с ПК. А вот остальные устройства могут работать на совершенно другой технологии. Можно покурить, начиная отсюда. Внизу там широкий блок полезных ссылок.
Вы уверенны, что все ваши устройства — usb?
А чтоб работать с виртуальными usb устройствами надо бы API извлечь из ПО. А уж потом разрабатывать, собственно, устройства. Для мониторинга usb обмена рекомендую UsbTrace или BusHound.
Здравствуйте, pva, Вы писали:
pva>Здравствуйте, redp, Вы писали:
A>>>К компу подключается главное USB устройство, к которому подключается другое измерительное. Каждое измерительное устройство, может быть соеденено с другим измерительным... К примеру, термометр с измерителем давления и одно из них подключено к главному. R>>ну логично — в главном usb hub, остальные можно подключать в любом порядке R>>доку сперва про usb покурите какую-нть — начать можно с Агуров "Практика программирования USB" pva>Подозрительно все это. Обычно usb шина не используется для промышленной автоматизации. Главное устройство, скорей всего, контроллер с usb интерфейсом для общения с ПК. А вот остальные устройства могут работать на совершенно другой технологии. Можно покурить, начиная отсюда. Внизу там широкий блок полезных ссылок. pva>Вы уверенны, что все ваши устройства — usb?
а какая разница ? ему надо эмулировать именно юсб подключение и, разобравшись в протоколе, слать данные с любого количества якобы подключенных устройств. А как там они с мастером на физицеском уровне разговаривают — кого это волнует ? это все под капотом.
Совет правильные — сниффер пакетов и анализ протокола совмещенные с реверсингом управляющей программы и драйверов железки (если она не hid конечно, для hid все будет проще)
Здравствуйте, mike_rs, Вы писали:
_>а какая разница ?
Разница в том, что можно не разбираться с, возможно, самопальным USB протоколом обмена, а использовать стандартные протоколы. Но прийдется, конечно, сэмулировать все эти датчики и сделать сопряжение с другой стороны контроллера.
newbie
Re[4]: Ответ
От:
Аноним
Дата:
02.04.13 10:01
Оценка:
Вот, что написано про каждый из измерительных модулей: Модуль представляет собой пластиковый корпус с двумя разъемами USB типа A/F и A/M.
Меня еще вот что заинтересовало, может не обязательно писать эмулятор?
Может как-то можно внедриться в прогу и вызывать нужные мне функции с нужными параметрами?
Я точно не знаю, как прога запрашивает данные с USB устройства, но может можно определить адреса функций, которыми она пользуется или которые она вызывает, чтоб узнавать о подключении устройств или приеме данных, затем внедрить в нее DLL и из нее вызывать что-то или перехватывать что-то...
Как вообще происходит обмен данными между прогой и USB устройством? Я про прикладной уровень. Есть ли какие-то стандартные WinAPi функции для этого, которые мне можно легко отследить? Я уже смотрел ее, пока нашел только DDE функции, но толком не знаю для чего они используются, дело в том что прога многооконная (одновременно несколько окон открыто. НЕ MDI), может просто для передачи данных между окнами...
Скорее всего это преобразователь USB-RS232/RS485. Сооств. подчиненные устройства используют эти простые интерфейсы. При подключении этого главного устройства в системе появляются дополнительные COM порты?
Re[7]: Ответ
От:
Аноним
Дата:
02.04.13 14:25
Оценка:
Благодарю за ответ. Завтра попробую узнать... Сейчас уже дома
Здравствуйте, Аноним, Вы писали:
А>Благодарю за ответ. Завтра попробую узнать... Сейчас уже дома
В общем, если порты появляются, то скорее всего весь прикладной обмен идет через них (не исключено даже использование какого-либо стандартного протокола типа Modbus), и задача решается вообще без написания драйвера.
Re[9]: Ответ
От:
Аноним
Дата:
02.04.13 16:17
Оценка:
А порт должен появляться именно при вставке главного USB устройства и исчезать при извлечении?
Здравствуйте, Аноним, Вы писали:
А>А порт должен появляться именно при вставке главного USB устройства и исчезать при извлечении?
Сложно сказать, не зная, что это за устройства.
Не исключен вариант, что главное — USB хаб, а отдельные содержат в себе конверторы USB-UART.
Но гораздо более вероятен вариант, что многопортовый конвертор — главное устройство, а остальные — подключаются уже по 232/485/еще что-то. Какая длина и тип кабелей от главного до дополнительных?
Re[11]: Ответ
От:
Аноним
Дата:
02.04.13 16:36
Оценка:
Главный модуль назовем М0, он подключается напрямую к USB компа.
К этому модулю, может быть подключен ТОЛЬКО один измерительный модуль, НО, к каждому измерительному модулю, можно подключить еще один измерительный...
Выходит, что к М0 может быть подключен какой-нибудь модуль для измерения напряжения, а уже к нему, термометр.
На схеме выглядит так:
Измерительные устройства втыкаются друг в друга и про каждое из них написано: "С двумя разъемами USB типа A/F и A/M"
Про М0 написано: "С двумя разъемами USB типа A/F и A/M и одним mini USB/M"
А>Измерительные устройства втыкаются друг в друга и про каждое из них написано: "С двумя разъемами USB типа A/F и A/M" А>Про М0 написано: "С двумя разъемами USB типа A/F и A/M и одним mini USB/M"
Любопытно
Это серийное изделие? Документация хоть есть на него? А то запас телепатии на сегодня исчерпан
Предположу, что на эти самые вторичные USB разъемы выведено питание и сигнальные линии RS485 (2w). Соответственно, получаем шинную топологию, которая прекрасно работает в RS485.
Изделие серийное, но документации у меня нет, и, сомневаюсь, что будет...
Есть левое описание для учеников, цитаты из которго я привел о разъемах, более ничего интересного.
Завтра, в общем, буду узнавать про COM порт. Очень надеюсь без эмуля обойтись
A>При нажатии на кнопку обнаружения модулей в проге, выполняется вот что:
Да, направление верное, только я пошёл бы дальше и использовал бы API-монитор (рекомендую этот), там нужно протрейсить на рабочей машине (во время взаимодействия программы с устройством, разумеется) вызовы группы "Communications" типа GetCommConfig(), etc. и группы "File I/O" вроде CreateFile(), ReadFile(), etc. Ещё всякие DeviceIoControl() и SetupDiXxx() можно прихватить, на всякий случай, чтобы уж ничего не упустить. Вполне вероятно, что после этих мероприятий все данные будут как на ладони и останется только разобрать их формат. К слову, есть и более специализированные инструменты для анализа таких протоколов, например, это или это, вообще-то тысячи их.
JID: x64j@jabber.ru
Re[15]: Ответ
От:
Аноним
Дата:
03.04.13 13:28
Оценка:
При вставке usb устройства, появляется порт COM10 и при извлечении исчезает. Если в реестре кликнуть по нему, то будет что-то написано про silabser.sys (вроде в параметре)
Собственно, мне надо как-то самому создать этот порт com и в него что-то писать или можно похукать в экзешнике нужные функции и возвращать нужные параметры?
Здравствуйте, andrey82, Вы писали:
A>В общем, если порты появляются, то скорее всего весь прикладной обмен идет через них (не исключено даже использование какого-либо стандартного протокола типа Modbus), и задача решается вообще без написания драйвера.
Присоединюсь со своим вопросом. У меня тоже USB устройство, при подключении появляется COM-порт. Как подслушать обмен?
Сейчас я использую Free Serial Port Monitor, сохраняю его лог и анализирую его своей программой. Но хотелось бы обойтись без стороннего сниффера, а вставить эту возможность в свою программу (под Windows). Где об это почитать? Есть ли свободные библиотеки для сниффинга COM-портов?