Возможно ли низкоуровневое управление RS232 (Com-портом) RTS/CTS/DTR/DSR?
-
03-07-2019 - |
Вопрос
Интересно, возможно ли и как управлять линиями квитирования 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 р>