Программирование USB -> COM порта на C++

123
29 декабря 2019, 00:50

Собираюсь подключить несколько моторчиков, датчиков ,светодиодов. Но чтобы все это управлялось напрямую с ноута (без отдельного железа). Но т.к. работает только USB порт хочу поставить переходник на COM порт. 1)Какую библиотеку подбирать для работы с USB и COM или только библиотеку USB. 2)Если есть что-то подобное скиньте... 3) Если есть предложения как упростить , расскажите пожалуйста

Answer 1

Сам я работал с адаптером USB-COM из-под C++ правда под виндой, а не под Линуксом и проблем не было. Ниже ссылка на тот адаптер. Фирма-производитель STLab. Никакой библиотеки не требуется. В комплекте идет диск с драйверами. При втыкании адаптера в USB в винде появляется четыре COM-порта. С ними работаете как с обычными виндовскими COM-портами с помощью виндовского API. Единственно что, иногда номера этих новых COM-портов будут больше, чем 9. Тогда надо открывать эти порты со слешем перед именем. Вот ссылка на адаптер:

https://fcenter.ru/product/goods/96314-Perehodnik_USB2_0_4xCOM_9M_STLab_U_400

Вот что говорится об работе с портами с номерами больше, чем 9.

Указатель на строку с именем открываемого или создаваемого файла. Формат этой строки может быть очень «хитрым». В частности можно указывать сетевые имена для доступа к файлам на других компьютерах. Можно открывать логические разделы или физические диски и работать в обход файловой системы.

Последовательные порты имеют имена "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9". Для доступа к портам, чей номер больше 9, необходимо указывать имя порта как ".\COMx", где x - номер порта. Например, ".\COM72" (в нотации языка C/C++ строка будет выглядеть "\.\COM72"). Такой синтаксис подходит для любого номера порта. Точно так же они назывались в MS-DOS. Параллельные порты называются «LPT1», «LPT2» и так далее.

Адаптеры USB-COM есть от разных фирм. В том числе и весьма кривые, так что будьте внимательны. Бывают еще адаптеры на большее число портов и с отдельным питанием. Бывают адаптеры с гальванической развязкой.

А вот ссылка на источник:

https://ru.wikibooks.org/wiki/COM-%D0%BF%D0%BE%D1%80%D1%82_%D0%B2_Windows_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)

И да, надо понимать, что тайминги родного COM-порта и COM-порта из адаптера USB-COM будут разными. То есть при записи в родной COM-порт байт выходит сразу, а при записи в COM-порта из адаптера USB-COM байт сначала ползет по USB-каналу и только потом выходит из COM-порта.

UPD1:

А что делать с выходной мощностью.У USB 5v максимум , а у COM 0-12v. На моторчик нужно 9v. – Valera21 13 минут назад

Сам я на осциллографе не смотрел сигналы на COM порте. Но, судя по тому что все работало, внутри коробочки стоит преобразователь, который делает 12 Вольт из 5 Вольт.

Запитывать от COM-порта моторчик это более чем спорное решение. COM-порт передает информацию, а питание моторчика надо брать от другого источника. Не думаю, что можно запитать сколько-нибудь мощный моторчик даже от родного COM-порта. Тем более от порта адаптера USB-COM.

Если у Вас все так серьезно и даже в Вашей системе есть моторчик, то посмотрите в сторону гальванически изолированных COM-портов. Если мне не изменяет память, фирма MOXA делает такие. Мощности у них не больше, чем у обычных, но хотя бы не сгорит компьютер, если что-то в питании Вашей системы попадет не туда. Питание и для моторчика и для остальной Вашей схемы в любом случае я все-таки рекомендую брать от отдельного источника питания, а не от COM-порта.

READ ALSO
Отрицательное число в массиве byte

Отрицательное число в массиве byte

Подскажите пожалуйста, создаю байт массив, возникает ошибка на элемент -35

129
Применение Unity в Windows Forms

Применение Unity в Windows Forms

У меня есть допустим программа написанная на c#, и я хочу, чтобы например в интерфейсе программы было подокно которое должно быть уровнем Unity

119
Подключение к БД Mysql, получение данных

Подключение к БД Mysql, получение данных

Как можно осуществить подключение к базе данных Mysql и осуществить запросы? К примеру в PHP я подключаюсь так

128
Как правильно остановить чтение файла?

Как правильно остановить чтение файла?

Для упрощения считывания данных из бинарного файла, унаследовал класс BinaryReader, и описал несколько вспомогательных методов:

163