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

StackOverflow https://stackoverflow.com/questions/820817

Вопрос

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

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

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

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

Это было полезно?

Решение

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

Достойный обзор здесь: http://msdn.microsoft.com/ ан-нас / библиотека / ms810467.aspx

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top