Возможно ли низкоуровневое управление RS232 (Com-Port) RTS / CTS / DTR / DSR?

Интересно, можно ли и как можно управлять линиями подтверждения связи RS-232 непосредственно из win32 (старый C-API).

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

Итак - есть ли API для win32, который позволяет мне читать и записывать состояние четырех строк состояния? При нормальной последовательной связи линии подтверждения автоматически управляются UART (если включено аппаратное подтверждение).

Я помню, что под DOS это было тривиально. Просто нужно было напрямую запрограммировать UART. Эта функциональность как-то сохранилась в win32?


person Nils Pipenbrinck    schedule 04.05.2009    source источник


Ответы (5)


Вы можете управлять RTS и DTR с помощью SetCommState(). Вы также можете настроить аппаратное обеспечение или драйвер для аппаратного управления потоком (CTS и / или DSR), или вы можете настроить вещи с помощью SetCommMask(), чтобы получать события при изменении этих сигналов.

Хороший обзор здесь: http://msdn.microsoft.com/en-us/library/ms810467.aspx

Обратите внимание, что Win32 Serial Comm API и / или драйвер могут быть привередливыми, поэтому будьте готовы к некоторой отладке того, что происходит в сети.

person Michael Burr    schedule 04.05.2009

Я наткнулся на это учебник, когда мне нужно было сделать проект для связи с портом RS232. Это полный пример того, как открыть порт, установить некоторые свойства, включая таймауты, чтение / запись и закрыть порт. Несмотря на то, что ваш проект, вероятно, к настоящему времени завершен, я надеюсь, что он останется полезным, поскольку он остается в архивах SO.

person Steve    schedule 26.06.2009
comment
Ваша эта ссылка мертва. Вы помните хотя бы название? - person Wolf; 15.09.2014
comment
По-прежнему можно получить доступ через Интернет-архив WaybackMachine: Последовательный порт - RobBayer.com Программирование последовательного порта Windows - Робертсон Байер (PDF) - person Virus_7; 02.04.2015

Вы по-прежнему можете выполнять аналогичные типы программирования только для того, чтобы добраться до защищенного оборудования, которое вам понадобится для реализации драйвера устройства. Я полагаю, что это стало проще с 1980-х годов, когда я выполнял ту же работу.

person Richard    schedule 04.05.2009

Действительно ли Microsoft сейчас выполняет аппаратное квитирование? В течение многих лет NT, win2000 и XP не устанавливали аппаратное подтверждение установления связи. Вместо этого, когда FIFO достигнет определенной точки, драйвер устройства вручную изменит строку cts. Это означает, что было невероятно просто заставить драйвер устройства потерять данные, захватить окно с помощью мыши и, например, делать круги по экрану (убедитесь, что вы снимаете это окно с левой стороны экрана на всех или некоторых проходах ). Alt-Enter для перехода из командной строки в полноэкранный или из полноэкранного режима был простым способом вызвать потерю данных. Или что-нибудь еще, что вызывает достаточную задержку прерывания. По сути, аппаратное управление потоком микрософтов - это не аппаратное обеспечение, а программное управление потоком, даже если у оборудования есть аппаратные возможности управления потоком данных, драйверы MicroSoft не устанавливали этот бит. В конце концов, SeaLevel поддержал этот бит, ну, вроде как, вам нужно было установить правильные несвязанные настройки в SetCommState (), чтобы включить его.

Что касается вашей программы, управляющей сигналами, используйте SetCommState ().

person old_timer    schedule 04.05.2009
comment
Прошло некоторое время с тех пор, как я работал над этим, но мне запомнилось, что UART 8250/16550, которые являются стандартной проблемой в мире ПК, не обрабатывают аппаратное квитирование на кристалле. Это не проблема драйвера Win - он может поддерживать только то, что есть на оборудовании. Драйвер должен получать статус во время прерывания устройства и сам переключать / распознавать линии квитирования. У SeaLevel или Hayes было (или есть) более интеллектуальное оборудование, и их драйверы воспользуются этим. Кроме того, это, безусловно, правда, что ранние драйверы для Windows были действительно очень плохими, но в конечном итоге они стали более или менее хорошими. - person Michael Burr; 07.05.2009

Некоторые адаптеры USB-Serial не поддерживают управление потоком DTR / DSR / DCD. Так что, может быть, это ваш случай.

http://www.digi.com/support/kbase/kbaseresultdetl?id=588

person Daniel De León    schedule 13.03.2014