Возможен ли контроль низкого уровня RS232 (Com-Port) RTS / CTS / DTR / DSR? - PullRequest
7 голосов
/ 04 мая 2009

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 04 мая 2009

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

Достойный обзор здесь: http://msdn.microsoft.com/en-us/library/ms810467.aspx

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

2 голосов
/ 26 июня 2009

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

0 голосов
/ 13 марта 2014

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

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

0 голосов
/ 04 мая 2009

На самом ли деле Microsoft занимается аппаратным подтверждением связи? В течение многих лет NT, win2000 и XP не делали рукопожатие в аппаратном обеспечении. Вместо этого, когда fifo достигнет определенной точки, драйвер устройства вручную изменит строку cts. Это означает, что было невероятно просто заставить драйвер устройства терять данные, захватить окно с помощью мыши и, например, сделать круг вокруг экрана (убедитесь, что вы снимаете это окно с левой стороны экрана на всех или некоторых проходах ). Alt-enter, чтобы перевести командную строку в / из полноэкранного режима, был простым способом вызвать потерю данных. Или что-нибудь еще, что вызывает достаточную задержку прерывания. По сути, аппаратный контроль потока microsofts - это не аппаратный, а программный контроль потока, даже если аппаратное обеспечение имеет возможности аппаратного управления потоком, драйверы microsft не устанавливали этот бит. В конечном итоге SeaLevel все-таки поддержал этот бит, и, конечно же, вам пришлось поместить правильные несвязанные настройки в SetCommState (), чтобы включить его.

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

0 голосов
/ 04 мая 2009

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

...