Pull to refresh

Comments 177

А почему нельзя было сделать на чипе FTDI 232? Они дороже?
Вы знаете как будет выглядеть в системе несколько FTDI 232 при условии что вы их сможете гарантированно купить оригинальные?
насчет гарантированно оригинальных не отвечу, но в тех что я пользовал усе ид каждого чипа можно было произвольное задать, соответственно и различить их не составляет проблемы.
Кстати да, рассматривали и такой вариант, задавать уникальные ИД. Но особенность нашей местности сейчас в том что сложно достать оригинальные микросхемы да и вообще что либо. Далее пришлось бы организационно очень жёстко следить чтобы втыкали все именно туда куда надо. Плюс есть у нас очень «особенное» оборудование которое очень особенно работает и очень неплохо иметь возможность управлять процессом преобразования RS232 в USB на низком уровне.
Я на не оригинальных ИД тоже менял, все хорошо работало, пока свежие дрова не поставили… Свежие дрова все ИД выставляют в нули, и устройства перестает работать =) С помощью некоторых телодвижений ИД возвращаются на место, а вот запретить обновлять дрова бывает сложнее!
Вот проблема с неоригинальными чипами и свежими дровами имеет место, да.
UFO just landed and posted this here
Но для программиста ПО будет печалька. Особенно когда оборудования много вариантов.
Если в режиме эмуляции COM-порта — чем отличается от ситуации когда много «обычных» COM-портов? Собственно, если нужно сохранить legacy софт, то таки придётся эти порты изображать.

Если же софт переписывается с нуля — вариантов решения становится больше, но и головной боли тоже (и не только в плане написания софта, но и при выборе варианта).
Но я согласен со статьёй — пропихать обмен через HID это большой плюс в плане независимости от драйверов. Зато в D2XX не вижу печальки для программера-прикладника. Очень удобно сразу получать список идентификаторов, зашитых в чипах, без поочередного открытия портов.

Ну а идентификация оборудования, подключенного через RS-232 — вопрос следующего уровня абстракции, он не должен зависеть от реализации канала обмена байтиками.

Разумеется, все эти соображения справедливы, пока не требуется дергать линиями последовательного порта за пределами стандарта. Тут своё устройство даёт полную свободу.

Мы как раз переписывали софт и отказались от ком портов вообще. ИД зашивать в чипы приходило в голову, но очень велика вероятность что получится организационный хаос в итоге, если речь идет о количестве комплексов около 100, а монтаж всего этого делает кто попало.
В чём проблема? Любому порту можно назначить любой номер.
Мне систематически приходится работать с преобразователями на FTDI, CP2102, PL2303 (с этими дело имел меньше всего) и даже CH340/341. И всё работает.
Вам очень повезло, что ваши устройства обходятся только парой Rx/Tx. Многие специализированные устройства любят использовать ещё и RTS/CTS, DTR/DSR. В таком случае вы бы всё ещё могли возиться с вашим переходником.
Да, знаю. Отлично выглядит, у нас такие на отладочных платах поставлены. Четырехпортовые FTDI практически не подделываются, а стоять — дешевле платы, на которую их ставят.
Люди не посвященный в тему сразу радостно покупают пучок китайских USBtoRS232 переходников, а дальше все идет очень печально. Лучше этого не делать.

Я бы развернул в статье этот момент. Потому что это далеко не всем очевидно и, на самом деле, при некоторых задачах вполне применяемо и работосопосбно, так что списывать его вообще нечестно.

С RS'ом-то проблемы решаемые. А вот я как-то столкнулся с не таким уж и несвежим программатором с LPT — вот это был абзац. На новых компах такого порта как класса нет. С переходником USB-LPT он не заработал. С PCI платой расширения он тоже не заработал — оказывается плата занималась эмуляцией LPT и что-то до конца не эмулировала, не помню уже точно, но софт отказывался видеть программатор. В результате нашёл старый и чуть ли не единственный несписанный комп с Windows XP SP2, на котором себя отлично чувствует и софт к этому программатору. Теперь на складе лежат две жётско скреплённые скотчем коробки с надписью «Программатор!!! Выбрасывать категорически запрещено!!!» )))
Мы довольно успешно использовали 1-2 переходника, но потом их число грозило сильно возрасти, а имея уже опыт по ликвидации глюков это начало пугать. Разумеется когда он один это вполне себе вариант. Хотя я бы настаивал все равно не на переходнике, а на настоящем RS232, одну штуку чаще всего можно найти если провести ревизию внутренних разъемов конкретной материнки.
Использую в лабораторной установке на нынешний момент 2 ардуины + 3 разных прибора с USB-RS232 переходниками. Итого 5 USB->COM переходников.
Все общаются с компьютером через VISA протокол. В принципе, если бы не тупой LabView, периодически при старте программ не видящий соединение (если неправильно закрыть VISA сессию), то я бы не сказал, что есть какие-то глюки. При рестарте всего Labview всё сразу находится и работает без проблем.
К этому же компьютеру подключены еще 6 разных приборов по USB.
Слабо представляю, какие глюки могут обнаружится. Хотя скорости обмена данными у нас не такие высокие, возможно при повышении вылезает что-то?
Разное бывает, у вас одна установка? У нас много комплексов, далеко не все монтируются адекватными специалистами и с обратной связью плохо. На практике сталкивался с не корректной установкой драйверов для pl2303 и ftdi, с проблемой именования ком портов в системе, с подделками pl2303 и ftdi, с не соответствием логических уровней, с помехами на линию от мощного оборудования, с тем что некоторый софт тупо не видит ком порты созданные некоторыми переходниками, это на вскидку.
Ну в принципе, почти всё, что вы описали, я видел :)
И драйвера, и именование (на одном компьютере есть аж 15 непонятно под что зарезервированных СОМ-ов). Проблему с драйверами (и с подделками) обычно решаю поиском по VID PID, хотя у меня это разовая непоточная работа — раз в полгода подключить какой-то прибор на другой комп. Хотя при возникновении глюков это напрягает… Проще было бы иметь стандартный пакет установки и не мучать себе мозг.
Помехи- это да, «веселые» проблемы! Как-то несколько дней отлавливал баги в оборудовании, весы отключались. В моем присутствии все работает, когда уезжаю- глюки и постоянные пропадания связи. Все профилактические меры принял, все соединения проверил, кабели заменил, все заземлил, разъемы зафиксировал, блоки питания новые — все равно в мое отсутствие глючит. На третий день приехал, сел в стороне и смотрел, что делают операторы. Оказалось, что через некоторое время приходит упаковщик и зашивает готовую продукцию в мешки. А делает он это монструозным агрегатом с приводом на коллекторном двигателе, который при работе не хило искрит щетками и наводит на линии связи помеху амплитудой около 10В, даже сквозь экраны…
Вот она практика))) Пока космические корабли бороздят в теории…, а на практике приходит мужик и все, сушите весла)))
я видел что весы специально ломают рацией переговорами с оператора с приёмщиком, чтоб был нужный вес.
И ни одна из этих проблем не специфична для USB-COM, с железными многопортовками на PCI — проблемы те же.

Чтобы непослушный софт под виндой увидел порт, надо или дать ему номер не больше COM4 (номер порта переназначается в диспетчере устройств), или открывать как //./COM34

Из того, что не написали — при неадекватных кабелях порты выгорают. Проблема в том, что у незаземленного устройства на ground — 110 вольт относительно земли. Поэтому советую всегда проверять кабели на соединение корпусов разъемов. Корпусная часть должна соединяться первой и по оплетке кабеля выравнивать groundы.

Но это все общие проблемы RS32, а не проблемы переходников.
Иногда софт настолько непослушный что не видит портов вообще никак. В этом случае я использовал виртуальную перемычку с реального компорта на виртуальный, который почему-то программа видит. Вообще тут бывает много бубнов разного размера и цвета.
Уже писал — смените номер порта в диспетчере устройств (вкладка Settings в свойствах, кнопка Advanced) на 1-4. Порты больше 4 надо открывать как //./COM5, а это не любая программа умеет.
С этими корпусными соединениями тоже не все так просто, меры надо применять комплексно. Как-то в одной локалке (еще на коаксиале) были разные земли в разных местах здания. Соединили две аудитории — сгорела оплетка кабеля, «заземленная» с обоих концов. При этом сами сетевухи выжили, имея гальванически развязанный выход (через трансформатор).
В итоге решили, что прежде чем соединять сети, надо таки как следует уравнивать потенциалы земель нормальной шиной.
Это могло быть просто из-за отсутствия заземления. Для балансировки по фазам другая аудитория могла быть запитана от другой фазы, что даёт весёлые 190В разницы на корпусах незаземленных компов, подключённых к разным фазам. Ситуацию усугубляет объединение корпусов через оплетку коаксиала.
Не, заземление было, но у каждой части здания отдельное, «звездой». Но видимо, хреновое (и это электроэнергетический факультет!).

Есть еще CH340, их вроде не подделывают, т.к. они и так китайские.
В идентичном случае я бы разумеется поступил как вы.
UFO just landed and posted this here
Скорее всего что-то с логическими уровнями. Самый безпроблемный на моей практике был CH340, но это ведь лютый китай))) cp2102 тоже ничего, но дороже.
По своему опыту: для целей настройки одной линии RS485 (простые охранка/пожарка, часто с ними работаю) любые преобразователи на CH340 выглядят просто великолепно.
Т.к. подключается только 1 линия и к 1 конкретному компьютеру, то количество глюков минимально, драйвера стоит один раз и навсегда. Единственная потенциальная проблема — когда реально сложная/загаженная линия RS, тогда потенциально сильно падает качество связи. Но это всё-таки отдельная проблема, которую надо устранять независимо от используемого преобразователя.
Да есть они на современных платах как класс не на всех и не часто но есть, только сзади не выведен, а как гребенка на плате вот например GIGABYTE Z370M DS3H
Я знаю, что были, а теперь оказывается, что некоторые производители это и не выпиливают. Но у нас парк компов обновлялся несколько лет назад и ни визуально, ни в мануале на матплаты я ничего не нашёл. Ну вот так вот мне повезло, что на всех трёх моделях материнок ничего не было. Материнки асус, кстати. Я уже прикидывал купить на авито старую платформу и на столе собрать этакой рассыпухой временный комп, прошить два десятка микросхем и забыть обо всём этом)
Вполне себе вариант, на новых матерях все чаще уже нету RS232.
На новых компах такого порта как класса нет.

как раз наоборот — на новых компах и есть и com и lpt. только они не выводятся не заднюю панель. как пример Z370 HD3P.
Я думаю это решить очень просто — у кого есть тот пусть использует и не парится.
Где есть, а где нет. Я изучил три разные модели материнок от асусов — не было ни на одной. Других компов на работе просто не было. В бухгалтерии возможно есть, но с теми компами я лишний раз связываться и не буду. Неповезло мне короче (
ИМХО есть смысл к подобному оборудованию взять нечто типа такого: INTEL D425KT Atom D425, например. Тут вам и параллельный, и последовательный порты как раз есть. И по тормознутости как раз для ХР в самый раз :-). Получается совсем небольшая коробка.
Что поделать, порой нужна и шина ISA, как вот на производстве военном недавно видел, в своё время некому и некогда было задуматься перевести тестовые платы на USB хотя бы… Так вот и работают древние компы с чуть ли уже не рассыхающимися от старости матплатами на софте под ХР…
С ISA зато работать проще. Это как UART — всегда на коленке из любого чипа по нему можно связаться, накодив на ходу интерфейс если его нет под рукой (хотя у любого разрабочтка с приличным стажем он наверняка давно есть самописный, отлаженный, проверенный и доверие к нему безграничное). А для PCI и USB уже какие-то мосты нужны.
Кстати, древние компы, поживучее современных. Особенно, учитывая условиях их работы. Технологии там не такие тонкие, делали всё подубовее вот оно и работает. На материнках достаточно вовремя электролиты заменить и они и дальше пашут вполне себе.
UFO just landed and posted this here
Со стороны МК — это да. Но я всё же больше с ПЛИСами вожусь и стремлюсь лишний раз IP ядра не использовать. Понятно, что процессор сам писать не будешь — проще его вставить как IP Core, а если есть процессор — там и весь букет всяких причендалов можно подключить, превратив его в микроконтроллер. Но если плата какой-нибудь «чистой» ЦОС, где процессор просто нафиг не нужен, то такие вещи как, например, I2C я аппаратно сам кодил. Но это — что разумно ещё самому сделать и тебе на это дадут время: сделать-то порой ума много не надо, а вот отлаживать… USB, конечно, смысла нет поднимать самому — чрезмерно времязатратно, быстрее и дешевле использовать внешнее решение.
UFO just landed and posted this here
Просто современные ядра порой немало ресурсов жрут. А мне их пожизни не хватает)
Интересно, этот самый программатор не делал некультурные попытки обращения к LPT-порту напрямую, в обход виндового драйвера? Может стоило попробовать запустить этот хитрый софт в виртуалке, которой просто отдать реальный LPT?
UFO just landed and posted this here
Да фиг его знает. Это универсальный программатор для прошивания fusy PAL (типа а-ля ASIC получается) с переходником под эти самые PAL. Переходник я помню сколько-то десятков тысяч стоит (емнип, кусочек пластика с резисторами и одной микросхемкой). Сам программатор вполне может стоить под 100к. Экономически может целесообразнее заставить инженера прыгать около него практически с неделю. Тем более на выходе получось повторяемое решение для его использования… главное компьютер не выбрасывать ;) Но я согласен — заменить его было бы проще! )))
UFO just landed and posted this here
По поводу переподключения USB. Я делаю похожий проект, для начала взял платку BTE14-07, почти такая же как и у Вас, но на определение подключения по USB есть ключ. Я организовал работу эмулятора RS232, а не HID, и у меня переподключение работает. Попробуйте глянуть схему этой платки, может быть чем нибудь окажется полезна.
Да, спасибо! На самом деле варианты есть, возможно я даже и наталкивался на вашу плату, но на этой плате сделана постоянная подтяжка к питанию, поэтому городил транзистор.
UFO just landed and posted this here
Можно, но нагрузка тогда будет ограничена, не хочется экспериментировать хватит или нет.
UFO just landed and posted this here
Если я правильно понял вы предлагаете подтянуть D- к питанию используя просто свободный пин (сконфигурированный соответствующим образом) и резистор?
UFO just landed and posted this here
Насколько я помню нагрузочная способность пина ограничена.
Может получится так что пин просто не вытянет, тогда мы начнем уменьшать сопротивление и можем в итоге получить дохлый вывод.
UFO just landed and posted this here
Я почти уверен что этого хватит. Но есть привычка перестраховываться)
Это чисто схемотехническая перестраховка для повышения надежности. D- выходит вне устройства, и на нем могут быть статические разряды и всякая ерунда. В Вашем случае она сразу попадает на пин контроллера. Поэтому пином управляют транзистором, у которого перегрузочная способность больше, и если пробьется — легко отремонтировать.
UFO just landed and posted this here
По моему они сразу на гребенку выведены.
Вот сам бы не сформулировал лучше) Полностью согласен. Даже могу привести печальный опыт — смертью храбрых полегли две платы пока я экспериментировал, скорее всего статика.
UFO just landed and posted this here
Я боюсь что оставил без защиты все остальные, больше надежды на корпус. Защита от статики с помощью транзистора это вторично, от статики не так защищаются конечно.
UFO just landed and posted this here
UFO just landed and posted this here
Да да, я уже проверил, щас исправлю. Спасибо!
UFO just landed and posted this here
Спасибо! Как обычно у меня получается — комментарии к статье несут не меньше пользы чем статья. Вспыхивают диспуты и рождается истина)
UFO just landed and posted this here
Не связано это с нагрузочной способностью, проблема в реализации USB в 103-й серии. Проблема была исправлена в новых сериях, поэтому лучше взять stm32f072 — с этим чипом подтяжка D- не требуется, всё реализовано в чипе. При этом stm32f072c8 pin-to-pin совместима c stm32f103c8, правда UART-a у неё всего 2.
Удачное совпадение, я случайно заказал stm32f072 на те платы которые спалил, теперь получается что пригодится)
UFO just landed and posted this here
Да, всё правильно написано, но если в 48-ногом корпусе включить USB получится использовать только 2 UART с hardware flow control. Может для некоторых приложений это и не нужно, но мы ведь говорим о USB-RS232.
UFO just landed and posted this here
Вы правы. Если пожертвовать rts/cts, можно все 4 использовать. Я просто так не стал бы делать, поэтому и написал про 2.
UFO just landed and posted this here
Да, Вы правы. Что касается xmega — тут уж столько холиваров пронеслось насчёт AVR… ARM микроконтроллеры уделали 8-битники по цене, особенно на опте. Мы покупаем stm32f051c8 меньше $1 за штуку, партии правда > 1k

Подтяжка идет к 5 вольтам (к питанию USB), а GPIO выдает 3.3 вольта.

UFO just landed and posted this here

Прошу прощения, наврал, подтягивается к 3.3 вольта :)

Мне тоже так кажется.

А почему бы не использовать преобразователи eternet to rs? Самое оптимальное решение, как по мне…

Такой вариант рассматривался и он очень неплох — сделать каждое устройство сетевым узлом. Но на практике требует сетевой инфраструктуры, ее администрирования хотя бы минимального и самое главное — значительно менять структуру софта.
А почему надо менять настройку софта??? Если взять к примеру nport 51хх серию или аналог — то делаем следующее — подключаем одним концом в локалку, вторым к прибору, а на компе просто создаем ком порты по количеству подключенных портов. и все. Программа как открывала ком порт, так и продолжает открывать именно ком порт.
UFO just landed and posted this here
к счастью. мне такое не встречалось… :) у меня так в основном теплосчетчики подключены.
Главное не в коем случае не пробрасывайте СОМ порты по GPRS.
Коллеги пробрасывали по Wi-Fi через лифтовую шахту(!), видимо, дальность хотели увеличить =) Лифт, останавливающийся между приемником и передатчиком, вызывал помехи и, через некоторое время, обрыв связи. Как следствие, приходилось идти наверх и перезагружать контроллер
Они бы еще канал на микрофонах и пищалках в канализации сделали…
ссылку на всякий случай кидать не буду, а так — загуглить можно — nport5130 (это то что последнее подключал но у него на выходе rs422/485), и куча других аналогов, у меня под боком есть более менее дешевое решение — микрон (1eth / 4 rs485) (построены на базе модулей tibbo). Только при покупке надо уточнять особенности софта (какой-то модуль подрядчики поставили, так то еще чудо — виртуальные порты работают ТОЛЬКО при запущенной программе.
Как написал комментатор ниже, действительно не все можно пробросить по сети. Я наступал на эти грабли.
UFO just landed and posted this here
Да, вы правы, я тоже взвешивал вагоны) Вот там реально на замену оборудования мало кто решится, да и зачем. И есть еще одна сфера с которой я столкнулся где такой проброс уместен и иногда даже это единственное решение — это в SCADA сфере, там иногда нету альтернативы, спец ПО которое умеет только СОМ порты и ему плевать что у вас по какой-то причине объекты разнесены. Выход или пробрасывать или писать софт заново изучая протоколы описание которых давно съели крысы.
Проброс Eth<->RS232 не для описанной в статье задачи
Почему? Плиз, объясните причину.

Т.е. железки разбросаны по «полю» а сервер ТБД стоит в стойке
Тут удобней RS-422, ибо можно и на 2-3 километра кабель размотать. А у витой пары дальность — сотня метров. Ну разве что направленный wifi-канал ставить.
UFO just landed and posted this here
UFO just landed and posted this here
RS-485 — это RS-422 + хитрая логика, кто в данный момент имеет право на передачу. Или опросная схема (мастер запрашивает, слейвы отвечают) или что-то вроде кольца с жетоном. Все это сложно реализуется в софте, поэтому RS-422 (то есть отдельная линия на устройство) намного проще для программера, хотя чуть сложнее для железячника (грозозащита на две линии данных вместо одной).

Выбор каналов на объекте идет по разным критериям, но прежде всего мы исходим из экономии денег. То есть оборудование дешевое, а время программистов и железячников — дорогое.

Ну как пример — шлюз на Волго-Балте. Всего 9 смарт-антенн, 8 на шлюзе + базовая. Антенны на шлюзе (до 300 метров) подключаются по витой паре (крепится к бетонному основанию шлюза). 8 проводов — это сдвоенное питание + RS-422. Переделка сводится к замене платы формирователя RS-232 из TTL на плату формирователя RS-422 с грозозащитой. Программных переделок ноль.

Базовая антенна — 500 метров, и она сбоку. Кабель по земле вести — порвут. Ставить воздушку со столбами — затратно. Потому преобразователь RS-232 в TCP-server + направленная радиолиния на основе wifi.

Серверный блок — обычный промышленный комп на DIN-рейку на Debian (попробуйте, купите комп с 8 портами RS-422). Поэтому все порты идут через TCP. Для 8 роверных антенн ставится 8-портовая MOXA (RS422 в TCP-Server) на DIN-рейку.

Для контроля на период пусконаладки ставитяс дешевый USB-свисток с 4G. В итоге — все настраивается и контролируется удаленно. Не, я разок туда даже поехал на предварительные испытания. Но быстро понял, что из гостиницы в Вытегре я своё оборудование вижу лучше, чем находясь на шлюзе. Так неделю и просидел в гостинце. На окончательных испытаниях я из Питера вообще не выезжал. У меня на рабочем месте со средствами отладки явно лучше, чем на ноуте в поле.

ибо Ethernet это канал без «гарантированной» доставки данных
А что же у вас за устройство, что передает по ethernet без TCP и UDP? Все, известные мне конверторы, используют TCP, то есть с гарантированной доставкой. Некоторые могут и UDP, но этот режим только для локалки.

Эмулировать COM програмно через Ethernet конечно можно, но получаем кучу сбоев по не понятным причинам,
Ключевое слово, скорее всего — не понимание причин. Потому что у нас количество сбоев начинается от 1 сбойного байта в час и выправляется до промышленного стандарта — 1 сбойный байт в сутки. Для этого есть осциллограф и регулировка оконечных резисторов на линиях RS-422/RS-485. Ну и настройки на MOXA.

А в условиях когда все рядом (т.е. грубо говоря кассовый комплекс магазина) лучше не устраивать себе лишних проблем.
Дело в том, что Moxa 20 лет делает эти конверторы. И довела технологию до такого уровня, что их ETH конвертеры более беспроблемны, чем USB-COM. То есть зависающий пару раз в неделю USB-COM — это норма, а зависшая раз в месяц Moxa — это ЧП, надо разбираться с питанием, импульсными помехами, настройкой IP-Jam, версией прошивки и так далее.

Собственно навели нас на Moxa ребята, занимающиеся телеметрией космических запусков. У них вообще все по RS-422 + Moxa для ввода в комп.

Для особо «удаленных» либо ставят модемы либо тащат оптику
Это годится лишь когда около датчика есть свое электропитание хорошего качества. А тащить в параллель ещё и линии питания — бредово. Лучше уж сразу — витую пару с RS-422 + питание.

P.S. Пост получился довольно рекламным, но я не имею отношения к Moxa. Ну разве что 20 лет назад работал в одной из компаний «Ниеншанса», который сейчас является российским дистрибьютором Moxa.
Может, логика и хитрая, но я уже не помню, когда последний раз встречался с 422. А с 485 — если не каждый день, то через день. Описанная проблема задержек со шлюзами таки имеет место быть. Например, в WinCC драйвер ModBus весьма убогий и проблемы начинаются уже с 3-4 устройств на одном шлюзе.
А угадайка с полярностью 485 меня задрала настолько, что я взял клеммник от колонки, вот такой:
image
припаял к нему два провода и прикрутил это к преобразователю USB-485.
Вот, например, монтируемый прямо на плату Lantronix Xport, а вот 16портовых внешний Moxa NPort 5610-16. Между этими крайностями — вагон разных вариантов.

Очень удобно, когда оборудование в одном месте, а ты отлаживаешься в другом. Вплоть до связи с соседним блоком (оба за Волгой) через сервер в Питере, Как сказал мой коллега: «А что ты можешь сделать на месте, чего не сможешь удаленно?». И я понял, что только разъемы покрепче воткнуть. Ну для этого и одного инженера хватит. :-)

Осциллографом в линию потыкаться. Иногда это решает.

С осциллографом лучше справится тот инженер, что на месте. я же программер, с осциллографом последний раз лет 40 назад игрался. На современных моделях — вряд ли сумею синхронизацию верно выставить.

Но вы правы — иногда осциллограф незаменим при отладке. Как и вольтметр. Просто стараемся, чтобы все такие вещи были отлажены в офисе, а не на испытаниях.
Я бы еще заклеил разъемы, если что-то можно выткнуть — это сделают.
Что-что… осмотреть всё своими глазами и ощупать своими руками. Лучше один раз увидеть, чем сто раз услышать. Не раз встречал такие проблемы, когда даже в голову не придёт, что же догадались сотворить на монтаже. И то, не с первого взгляда замечаешь. Сначала смотришь — вроде, всё в порядке. А вот если приглядеться…

О, есть ещё один вариант. Завалить всю систему и обойтись без немедленных тяжких телесных. На месте убегать сложнее будет.
Угу, видели как-то раз такое: три GPS-антенны смонтированы под металлической марсовой площадкой.

Но это когда монтаж заказчиков. А когда монтирует коллега — он это сделает качественней меня, криворукого.
Я тоже не раз встречал такое, что мне бы самому и в голову не пришло. не увидел бы своими глазами — долго бы ещё разбирался…

Монтировать самому необязательно. Достаточно присутствовать лично и направлять.
Ну я не считаю, что программист должен «направлять» электронщика или сисадмина из своей же фирмы. Ну как-то они пограмотней меня в монтаже будут. А случайные ляпы проще заметить со стороны кода, у меня для этого достаточно отладочного вывода добавлено.
Я тоже так не считаю, но регулярно вынужден…
Я занимаюсь автоматикой и, поэтому, приходится владеть темой от головы до *опы. Основная моя задача — писать программы для контроллеров, но приходится брать в руки отвёртку. И «направлять» — это не совсем подходящее слово. Однажды у нас были какие-то странные сбои в работе ModBus по RS-485. При внимательном осмотре выяснилось, что доблестные электрики затащили витую пару в электрический шкаф, и содрали с него кожуру вместе с экраном сразу на входе в шкаф. А дальше эта пара шла в обнимку с силовым кабелем, по которому питался мощный мотор. Наблюдение показало, что в 99% случаев связь отваливется при пуске/отключении этого мотора. Пришлось приглашать подрядчика, который это наделал, и, как вы выразились, «направлять» :)
И это не что-то из ряда вон, а вполне себе будни.
Отличие в том, что подрядчики — это внешняя организация. А я про коллег из своей же фирмы. Все-таки в монтаже скорее накосячит программист (то есть я сам), чем коллега-электронщик или коллега-сисадмин.
Так и бывает, если работает криво то ИТ-шники плохо программы программировали и виноваты.
Свои тоже косячат :)
Это мне заметней из диагностики в коде, чем осмотром кабелей на месте.
Да, это один из самых распространенных брендов, сталкивался 100 лет назад, впечатления положительные потому что весели себе синие коробочки, весело мигали диодами и никто не знал что это и зачем потому что оно не ломалось)
UFO just landed and posted this here
Вот я писал выше про особенное устройство, это как раз фискальный регистратор не буду называть модель, дибильнейшее устройство.
тут увы, хотя, я не понимаю, что там можно такого наворотить, что оно не заведется… мы же не про интернет канал или gsm, а про локальную сеть…
Ой, это та еще поделка)))
UFO just landed and posted this here
Удивительно мне читать про проблемы с usb. Именно к малине 4 rs232 не подключал, но, по опыту, единственная проблема при подключении большого количества устройств к малине, это надежное питание. Если же подключать через хаб со своим питанием, она вообще не стоит.

По поводу путаницы с именами: имена через udev нормально назначаются.
Уже не помню точно, как именно я решал эту задачу, больше 5 лет прошло. Возможно, назначал по серийному номеру устройств или по номеру шины. Во всяком случае, 4 девайса нормально подключал к одному порту usb древнего ноута и рекламаций от заказчика не имел.

Но почему HID, а не CDC?
По нулевой кт в девайсе отличия небольшие, а в системе появится ttyUSB или COM-порт обычный. Тогда вообще софт на ПК дорабатывать не надо

По моему этот профиль сложнее? Просто мы уже наловчились работать с USB устройствами напрямую через endpoint-ы, по сути мне не важен профиль, важно чтобы не было глюков ну и уровень вхождения был как можно ниже.
UFO just landed and posted this here
И что не менее важно в моем случае — был хорошо документированный пример)
Не нужно драйверов

Которые еще и подписанными должны быть, чтобы не заставлять пользователей плясать с бубном при их установке.

С SiLabs был у меня неприятный момент — при интенсивном обмене иногда терялись данные. Возможно, чипы были "левые из Китая". Пришлось заменить на FTDI.

Можно ли совместить HID и CDC? Так можно и I2C и SPI вывести. Надо бы обдумать на досуге.
Ссылка на статью битая.

Была битая, но автор ее уже исправил, обновите страницу :)

Да, ссылки поправил, подсказали хорошие люди. Про совместить не совсем понял. Думаю возможно что у одного физического устройства будет два виртуальных HID и CDC, но камень уже наверно не справится. Вывести I2C и SPI конечно можно, с некоторыми ограничениями разумеется.
103с8 gрекрасно справляется с составным устройством HID(kbd)+HID(mouse)+MSC и еще запас есть.
Замечательно, не слышал по этому поводу опытного мнения.
уже упомянули ftdi, но не тот. есть прекрасный ft4232h — usb четыре 8-битных порта (которые через драйвер конфигурируются в тe же full-uart). китайцы такое ещё не подделывают. да вроде кроме ft232r ничего ftdiшного не подделывают. у silicon labs тоже есть usb-multiuart. и у тех и у других драйвера есть под основные системы, включая анроид.

кроме того, старое оборудование очень и очень часто требует полного rs232 (который как бы ещё с 1988 года tia-232-f), ну или хотя бы rts и cts (для аппаратного управления потоком), а не только rtg. в stm32f1x, емнип, только один такой uart
Вот про полный RS232 вы правильно заметили, но те устройства что мне попадались можно было заставить работать по трем проводам.
Вы в курсе, сколько всякого адского legacy и прочего говна мамонтов до сих пор есть промышленной автоматике? И у всех свои нюансы…

FTDI лучше, но значительно дороже. Хотя учитывая головную больс драйверами под Win, я предпочиёл бы FTDI.

В полевых условиях FTDI, PC210x, PL2303 и CH340 ведут себя одинаково хорошо. Это из моей личной практики.
PL2303 часто драва ставят нерабочие, приходится руками ставить рабочую версию.
Это достаточно один раз сделать. Кстати, PL2303 в моей практике встречался меньше всего. Собственно, почти не встречался :)
А предпочитаю я CP210x :)
Если порт перетыкают то надо заново.
Драйвер достаточно установить один раз. Если переткнуть преобразователь, винда автоматом его обнаружит и настроит, только номер порта другой выдаст.
Не всегда, если переткнуть в другой порт чаще всего винда по умолчанию ставит самый новый двайвер который не рабочий и чаще всего это происходит где-то на удаленном объекте. Пока своими глазами не посмотришь ничего не работает.
UFO just landed and posted this here
Прикольно, надо погуглить этого зверя.
UFO just landed and posted this here
А я бы подумал в сторону 2xMAX14830+MSP430F5529 — 8 портов в небольшом формфакторе.
UFO just landed and posted this here
580р. за МК с 8 USB EndPoints в железе — это дорого? При том, что MAX14830 стоит 1813р. Это первое. Второе — в варианте с 5529 вы получаете 8 штук CDC — никаких сторонних или самописных драйверов, включаешь и наслаждаешься. То же самое касается и ПЛИС — не бывает дешевых ПЛИС с USB-трансиверами в пузе. Плюс код отлаживать сложнее, чем прошивку для MSP.
UFO just landed and posted this here
И ваша ПЛИСина с мостом будет стоить дешевле 1813р. включая разработку кода и отладку? При том, что софтинка в 5529 тупо в ISR перекладывает байты из USB в USCI и обратно.
Насчет количества EP теперь уже не понимаю я — разве количество EP != количеству портов?
UFO just landed and posted this here
1. 8xftdi потянут за собой еще один-два USB-хаба с отдельным питанием и кучу проводов — мотня за кассой будет знатная, как следствие — снижение дуракоустойчивости и надежности.
2. Автор делал HID, а не CDC, на что ему уже указали.
UFO just landed and posted this here
Насчет количества EP теперь уже не понимаю я — разве количество EP != количеству портов?

Нет, конечно. Есть один «особенноый» EP — нулевой, плюс на каждое устройство нужно по EP и на вход и на выход, плюс на устройство бывает нужен управляющий EP. А может быть что на несколько устройств нужно только две EP, например в HID.
Я очень извиняюсь, но в статье перечислены недостатки всех решений озвученной проблемы, с последующим выводом, что необходимо создать свое решение, которое в той или иной мере будет сочетать их все… Хотя проблема выеденного яйца не стоит. По долгу службы необходимо иметь на рабочих станциях несколько аппаратных COM портов (да да, различного рода FTDI и Profilic переходники не подходят). Самым простым решением была установка платы PCI-COM, наподобие такой…
image
Мне сложно это установить на Raspberry Pi 3 или Android медиаприставку. Но для ПК это лучшее решение если нету спрятанного порта на матери.
То же самое — MAX3109 или MAX14830. Вроде как даже /dev/tty драйвера под них есть.
А не подходят эти дешёвые переходники потому, что наружу у них выведены только Rx и Tx.
Это все замечательно, но как решается вопрос софта? точнее, если есть программа которая общается со своей железкой по COM-порту, то как ей сказать, что надо общаться через HID? Т.е. написать драйвер, перенаправляющий поток с COM-порта в HID и обратно
Драйвер это громко сказано, но да, примерно так. Хотя смысл то как раз уйти от СОМ портов вообще. Если «есть программа которая общается со своей железкой по COM-порту» ставить промежуток из STM32 странно, по моему проще пользоваться как задумано.
так весь смысл статьи прикрутить старое оборудование, которое подразумевает соответствующий софт. В общем надеялся как раз прочитать про подобный драйвер
Мы прикручиваем старое оборудование к совершенно другому софту, железу и даже операционке, смысл апгрейда как раз в том чтобы старый софт выкинуть, вместе с эвм)) Для того что хотите вы, нужно взять мой проект с примерами и добавить туда работу с виртуальными ком портами, далее просто перенаправлять данные из HID в них и наоборот. Все, профит.
ну так что делать я понимаю, КАК это сделать, вот в чем вопрос :) это естественно не критика статьи, просто мне чаще как раз встречается такая проблема
Критика это хорошо, особенно конструктивная, посмотрите выше, я написал очень посредственную статью в которой описывается не такое уж и идеальное решение. Она притягивает людей которые в теме, они пишут свое видение и варианты решения в итоге все вместе становится похоже на вполне себе нормальный tutorial для тех кто столкнется с похожими проблемами. Мне кажется это очень положительно.
Статья на самом деле интересная, мне например оказалась полезна информация HighLevel, не знал о таких нюансах. Если будете делать несколько таких устройств, посмотрите заказ плат jlcpcb, seedstudio (10 плат за 2$ + доставка 8-12$), будет гораздо симпатичнее, надежнее и не исключено, что дешевле. Такая плата неспешно разводится за 3 вечера.
UFO just landed and posted this here
Про cdc знаю, с ним на самом деле есть ряд проблем, которые подход com-over-hid мог бы решить. Например, usb имеет свойство отваливаться. Как результат отваливается com-порт, который при этом держит открытым софт. Когда usb-cdc снова подключается, порт оказывается занят программой, соответственно коллизия и ничего не работает. Понятно что это проблема софта, но с аппаратными портами такой коллизии не возникало и ее естественно никто не обрабатывает. В случае over-hid, все проблемы восстановления связи лежат на драйвере, и программа даже не знает что usb устройство терялось, ну не дошла часть пакетов, это как раз как правило нормально обрабатывается.
UFO just landed and posted this here
Хотя смысл то как раз уйти от СОМ портов вообще.

Не получится. Мы уйдём из жизни раньше, чем последняя железка с UART.
Скорее всего да)) Но все же в каком-то конкретном случае можно допытаться.
Sign up to leave a comment.

Articles