Войти
ПрограммированиеФорумОбщее

Поясните про COM-Порт

#0
17:51, 4 янв. 2020

Я так понял через COM-Порт можно управлять некими устройствами.
На каких устройствах можно поучиться программировать COM-Порт? Что подключить?
Ну а дальше CreateFile('COM1')


#1
18:01, 4 янв. 2020

http://lasers.coherent.com/lasers/Com-Port

#2
(Правка: 20:22) 20:21, 4 янв. 2020

Хаус
> На каких устройствах можно поучиться программировать COM-Порт?
NULL modem

> Что подключить?
Сам себя (ПК).

#3
19:31, 5 янв. 2020

Хаус
> На каких устройствах можно поучиться программировать COM-Порт?

Ну для начала echo устроить. Причем курочить комп не нужно, virtual serial port тебе в помощь. Дальше, через этот же порт можешь организовать обмен между прогами.. А там куда фантазия заведет.

#4
21:59, 5 янв. 2020

3G-модем. Хоть и подключается через USB, но драйвер создает виртуальный COM-порт. Управляется AT-командами.

#5
13:43, 6 янв. 2020

Хаус
работаешь как с обычным файлом, пишешь, читаешь..

#6
(Правка: 15:57) 15:56, 6 янв. 2020

gambit_oz
> работаешь как с обычным файлом, пишешь, читаешь..
>
>

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

Хаус
> На каких устройствах можно поучиться программировать COM-Порт? Что подключить?

Купи на алиэкспрессе  два переходника USB-UART CP2102, соедини проводами  TX-RX, RX-TX и GND-GND , подключи с обоих сторон в USB компьютера и обменивайся сам с собой. Можешь какой-нибудь Modbus-RTU реализовать.

upd.
Узнать, без таймаутов, сколько даннных лежит в приёмном буфере можно с помощью функции  ClearCommError, если речь про WinAPI

#7
(Правка: 16:28) 16:24, 7 янв. 2020

Dmitry_Milk
> 3G-модем. Хоть и подключается через USB, но драйвер создает виртуальный
> COM-порт. Управляется AT-командами.

Кстати, я давным давно уже сталкивался с тем, что специфичный принтер штрих-этикеток с собственным протоколом (открытым) печати на нём собственно штрих-этикеток сперва долгое время был релизован физически на LPT-порте (что похожая на COM программно вещь), но потом они сменили шарманку на USB.
Изображение

Интересно что собственные команды в этом изделии фирмы Zebra работали крайне быстро и позволяли в пару (текстовых, кстати по формату наподобие AT-команд в модемах) команд печатать всё очень быстро - программа управляющая принтером прямой записью проприетарных команд принтера приводила к тому что этикетки выплёвывались с пулемётной скоростью.

Но был так же и драйвер принтера а-ля Windows-принтер. И вот он уже натужно и долго печатал всё что ему по обычному канвасу для windows-принтера скармливаешь через WinGDI. Причина проста и очевидна - процедура печати Windows-принтера отправляла в принтер битмапы изображений которые надо было напечатать, а не команды подобные WinGDI, поэтому каждая напечатанная страничка долго насиловала порт ввода-вывода монохромными картинками сформированными в винде программно. При этом еще всё обрастало еще недюжинным геморроем из-за того что Windows-принтер по своему и сложно возился с пустыми полями вокруг документа печати и т.п.

И всё прекрасно работала на "драйвере" прямой работы с LPT-портом (на самом деле просто user-space DLL, но в автоматизации розницы драйвером принято называть и такое), но внезапно как то раз пришёл нежданчик: принтеры Zebra с LPT-портами перестали производить и стали приходить с USB-портами.

И я даже на этом форуме создавал по этому поводу паник-тему: https://gamedev.ru/flame/forum/?id=51653
И в ней в конце второй страницы есть код на Delphi который детектирует при втыкании такого USB-девайса (работало и на телефонах как раз) в компьютер его GUID-идентификатор который можно скормить в функцию OpenFile и открыть прямой канал связи с дейвайсом.
Даже не знаю как такой режим общения с USB называется, но он полностью копирует принцип COM-порта.
Само имя девайса выглядит примерно как вот это:

\\.\{11f47ad5-7b73-42c0-abae-878b1e16adee}
Т.е. некий GUID в пространстве сетевых глобальных имён.
При этом точно не помню, но енумератор возвращает в начале \\?\... и вот этот знак вопроса надо заменить на точку - \\.\... или наоборот.

Довольно забавно потому что нигде я вообще ничего такого прямым текстом не нашёл, но такое общение с USB-девайсами разными реально оказалось возможным - главное выхватить их GUID-имена. Видимо не всё, конечно, но и принтер и телефон так у меня работали. Как минимум.

#8
(Правка: 17:45) 17:44, 7 янв. 2020

=A=L=X=
> Даже не знаю как такой режим общения с USB называется, но он полностью копирует
> принцип COM-порта.
там стоит чтот типа этого
https://en.wikipedia.org/wiki/FTDI и драйвера для нее эмулирующие виртуальный ком порт
https://www.ftdichip.com/FTDrivers.htm
обычно называется в духе "usb to serial"

#9
18:44, 7 янв. 2020

thevlad
> обычно называется в духе "usb to serial"

Обычно да, но весь прикол бы в том, что никаких драйверов ставить не надо было и более того - если их поставить, то связь по виртуальному имени вида "\\.\{11f47ad5-7b73-42c0-abae-878b1e16adee}" исчезала - драйвера её уничтожали поэтому ставить их для прямой связи ни в коем случае нельзя было.

#10
19:07, 7 янв. 2020

=A=L=X=
подефолту в винде есть драйвера для подобного. а с официальными драйверами скорее всего было что-то в духе https://en.wikipedia.org/wiki/FTDI#Driver_controversy

ПрограммированиеФорумОбщее